From 042a1a155ba67dba3e88dda9aeb70626649001bb Mon Sep 17 00:00:00 2001 From: Ben Boyter Date: Wed, 19 Jun 2024 10:12:42 +1000 Subject: [PATCH] tweaks --- LICENSE | 662 +++++++++++++++++- NOTES.md | 42 ++ go.mod | 3 +- go.sum | 4 + pkg/common.go | 96 +++ pkg/constants.go | 5 + pkg/detector.go | 112 +++ pkg/detector_test.go | 171 +++++ pkg/levenshtein/levenshtein.go | 257 +++++++ pkg/levenshtein/levenshtein_test.go | 296 ++++++++ pkg/license_test.go | 64 ++ .../github.com/boyter/gocodewalker/README.md | 39 +- vendor/github.com/boyter/gocodewalker/file.go | 108 ++- .../gocodewalker/go-gitignore/gitignore.go | 22 +- .../github.com/boyter/gocodewalker/hidden.go | 2 +- vendor/golang.org/x/sync/LICENSE | 27 + vendor/golang.org/x/sync/PATENTS | 22 + vendor/golang.org/x/sync/errgroup/errgroup.go | 135 ++++ vendor/golang.org/x/sync/errgroup/go120.go | 13 + .../golang.org/x/sync/errgroup/pre_go120.go | 14 + vendor/modules.txt | 5 +- 21 files changed, 2068 insertions(+), 31 deletions(-) create mode 100644 NOTES.md create mode 100644 pkg/common.go create mode 100644 pkg/constants.go create mode 100644 pkg/detector.go create mode 100644 pkg/detector_test.go create mode 100755 pkg/levenshtein/levenshtein.go create mode 100755 pkg/levenshtein/levenshtein_test.go create mode 100644 pkg/license_test.go create mode 100644 vendor/golang.org/x/sync/LICENSE create mode 100644 vendor/golang.org/x/sync/PATENTS create mode 100644 vendor/golang.org/x/sync/errgroup/errgroup.go create mode 100644 vendor/golang.org/x/sync/errgroup/go120.go create mode 100644 vendor/golang.org/x/sync/errgroup/pre_go120.go diff --git a/LICENSE b/LICENSE index f3374c9..bae94e1 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,661 @@ -MIT License Copyright (c) 2021 Ben Boyter + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. -The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + Preamble -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. \ No newline at end of file diff --git a/NOTES.md b/NOTES.md new file mode 100644 index 0000000..6c52930 --- /dev/null +++ b/NOTES.md @@ -0,0 +1,42 @@ +Detection Rules +--------------- + +Check the filename + + "li[cs]en[cs]e(s?)", + "legal", + "copy(left|right|ing)", + "unlicense", + "l?gpl([-_ v]?)(\\d\\.?\\d)?", + "bsd", + "mit", + "apache", + +If it falls into one of the above, its highly likely it is a licence, +and should be tested. Note that the name itself highly indicates the +licence itself, with unlicense for example indicating it is the unlicnse. + +Something like licence, legal, or copy(left|right|ing) needs to be checked +because while it is highly likely to have a licence we cannot be sure +as to which licence it actually is. Its also possible that these examples +could have multiple licenses in them. Example github.com/valkey/valkey/COPYING + + "", + ".md", + ".rst", + ".html", + ".txt", + +Where the file matchs the above patterns, where it has has no extention or +one of the others we should inspect it to see if it has a license. Its possible +a licence exists here, but we cannot be sure. Note that its possible there are multiple +licences in the file which needs to be dealt with. + + // SPDX-License-Identifier: MIT OR Unlicense + +For all other files, there are a few possibilities. +The first is that it contains a SPDX header such as the above which indicates +which license the file is under. Its also possible that the header will contain +a full copy of another licence such as MIT, GPL or otherwise. Possibly inside a comment +or a long string declaration in the case of code. Its possible it has multiple. + diff --git a/go.mod b/go.mod index 0ea72c8..6bdade9 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.20 require ( github.com/BobuSumisu/aho-corasick v1.0.3 - github.com/boyter/gocodewalker v1.1.0 + github.com/boyter/gocodewalker v1.3.3 github.com/spf13/cobra v1.0.0 github.com/tealeg/xlsx v1.0.3 github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e @@ -14,4 +14,5 @@ require ( github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/spf13/pflag v1.0.5 // indirect + golang.org/x/sync v0.7.0 // indirect ) diff --git a/go.sum b/go.sum index 407250e..7cddf7b 100644 --- a/go.sum +++ b/go.sum @@ -12,6 +12,8 @@ github.com/boyter/gocodewalker v1.0.1-0.20230321052529-86e91fcf4a3a h1:/r8uPJqza github.com/boyter/gocodewalker v1.0.1-0.20230321052529-86e91fcf4a3a/go.mod h1:CppTdM9RtednxKPcit+Zn36FXqwYaDIGufs/tenbswo= github.com/boyter/gocodewalker v1.1.0 h1:R/BOXRB5WcE5x/Q6Ln95GUQOQE4PAk86nq6WccZqZmM= github.com/boyter/gocodewalker v1.1.0/go.mod h1:CppTdM9RtednxKPcit+Zn36FXqwYaDIGufs/tenbswo= +github.com/boyter/gocodewalker v1.3.3 h1:yPSbWT1wGmPSC73jASY0GaJu4EDN3FROfwYUDQjTmuE= +github.com/boyter/gocodewalker v1.3.3/go.mod h1:hXG8xzR1uURS+99P5/3xh3uWHjaV2XfoMMmvPyhrCDg= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -118,6 +120,8 @@ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAG golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/pkg/common.go b/pkg/common.go new file mode 100644 index 0000000..53f110c --- /dev/null +++ b/pkg/common.go @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: AGPL-3.0 + +package pkg + +import ( + "fmt" + "regexp" + "strings" +) + +var commonLicences = []string{"MIT", "Apache-2.0", "GPL-3.0", "AGPL-3.0", "BSD-3-Clause", "GPL-2.0", "BSD-2-Clause", "CC0-1.0", "LGPL-3.0", "LGPL-2.1", "ISC", "0BSD", "LGPL-2.0", "Unlicense", "BSD-3-Clause-No-Nuclear-License-2014", "MPL-2.0", "EPL-1.0", "MPL-2.0-no-copyleft-exception", "AGPL-1.0", "CC-BY-4.0", "IPL-1.0", "CPL-1.0", "CC-BY-3.0", "CC-BY-SA-4.0", "WTFPL", "Zlib", "CC-BY-SA-3.0", "Cube", "JSON", "BitTorrent-1.0"} + +// Lifted from https://github.com/go-enry/go-license-detector/blob/580c5627556917dee649cdb2b179cb42d6c56a60/licensedb/internal/investigation.go#L29 +// SPDX-License-Identifier: Apache-2.0 +var ( + // Base names of guessable license files + licenseFileNames = []string{ + "li[cs]en[cs]e(s?)", + "legal", + "copy(left|right|ing)", + "unlicense", + "l?gpl([-_ v]?)(\\d\\.?\\d)?", + "bsd", + "mit", + "apache", + } + + // License file extensions. Combined with the fileNames slice + // to create a set of files we can reasonably assume contain + // licensing information. + fileExtensions = []string{ + "", + ".md", + ".rst", + ".html", + ".txt", + } + + licenseFileRe = regexp.MustCompile( + fmt.Sprintf("^(|.*[-_. ])(%s)(|[-_. ].*)$", + strings.Join(licenseFileNames, "|"))) + + readmeFileRe = regexp.MustCompile(fmt.Sprintf("^(readme|guidelines)(%s)$", + strings.Replace(strings.Join(fileExtensions, "|"), ".", "\\.", -1))) +) + +func IsLicenceFile(filename string) bool { + // attempt to filter out false positives that come from java due to filenames + if strings.Count(filename, ".") > 2 { + return false + } + + return licenseFileRe.Match([]byte(strings.ToLower(filename))) +} + +func IsReadmeFile(filename string) bool { + return readmeFileRe.Match([]byte(strings.ToLower(filename))) +} + +func compareOptimize(input string) string { + tokens := strings.Fields(input) + var sb strings.Builder + skipTokens := map[string]struct{}{} + for i := 0; i < len(tokens); i++ { + tok := tokens[i] + foundLonger := false + + // if we have already looked at this token, skip it, important for performance + _, ok := skipTokens[tok] + if ok { + continue + } + skipTokens[tok] = struct{}{} + + for j := i; j < len(tokens); j++ { + tok2 := tokens[j] + if tok == tok2 { + continue + } + + if len(tok2) <= len(tok) { + continue + } + + if strings.Contains(tok2, tok) { + foundLonger = true + } + } + + if !foundLonger { + sb.WriteString(tok) + } + } + + return sb.String() +} diff --git a/pkg/constants.go b/pkg/constants.go new file mode 100644 index 0000000..b8b3be6 --- /dev/null +++ b/pkg/constants.go @@ -0,0 +1,5 @@ +package pkg + +const ( + database_keywords = `W3sibGljZW5zZVRleHRzIjpbIkNvcHlyaWdodCAoQykgMjAwNiBieSBSb2IgTGFuZGxleSBcdTAwM2Nyb2JAbGFuZGxleS5uZXRcdTAwM2VcblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLiJdLCJsaWNlbnNlSWRzIjpbIjBCU0QiXSwia2V5d29yZHMiOlsiMjAwNiBieSByb2IiLCJieSByb2IgbGFuZGxleSIsInJvYiBsYW5kbGV5IHJvYiIsImxhbmRsZXkgcm9iIGxhbmRsZXkiLCJyb2IgbGFuZGxleSBuZXQiLCJsYW5kbGV5IG5ldCBwZXJtaXNzaW9uIiwibmV0IHBlcm1pc3Npb24gdG8iLCJoZXJlYnkgZ3JhbnRlZCB0aGUiLCJncmFudGVkIHRoZSBzb2Z0d2FyZSIsImF1dGhvciBkaXNjbGFpbXMgYWxsIiwiYyAyMDA2IGJ5IHJvYiIsIjIwMDYgYnkgcm9iIGxhbmRsZXkiLCJieSByb2IgbGFuZGxleSByb2IiLCJyb2IgbGFuZGxleSByb2IgbGFuZGxleSIsImxhbmRsZXkgcm9iIGxhbmRsZXkgbmV0Iiwicm9iIGxhbmRsZXkgbmV0IHBlcm1pc3Npb24iLCJsYW5kbGV5IG5ldCBwZXJtaXNzaW9uIHRvIiwibmV0IHBlcm1pc3Npb24gdG8gdXNlIiwiaXMgaGVyZWJ5IGdyYW50ZWQgdGhlIiwiaGVyZWJ5IGdyYW50ZWQgdGhlIHNvZnR3YXJlIiwiZ3JhbnRlZCB0aGUgc29mdHdhcmUgaXMiLCJpcyBhbmQgdGhlIGF1dGhvciIsImFuZCB0aGUgYXV0aG9yIGRpc2NsYWltcyIsInRoZSBhdXRob3IgZGlzY2xhaW1zIGFsbCIsImF1dGhvciBkaXNjbGFpbXMgYWxsIHdhcnJhbnRpZXMiLCJjb3B5cmlnaHQgYyAyMDA2IGJ5IHJvYiIsImMgMjAwNiBieSByb2IgbGFuZGxleSIsIjIwMDYgYnkgcm9iIGxhbmRsZXkgcm9iIiwiYnkgcm9iIGxhbmRsZXkgcm9iIGxhbmRsZXkiLCJyb2IgbGFuZGxleSByb2IgbGFuZGxleSBuZXQiLCJsYW5kbGV5IHJvYiBsYW5kbGV5IG5ldCBwZXJtaXNzaW9uIiwicm9iIGxhbmRsZXkgbmV0IHBlcm1pc3Npb24gdG8iLCJsYW5kbGV5IG5ldCBwZXJtaXNzaW9uIHRvIHVzZSIsIm5ldCBwZXJtaXNzaW9uIHRvIHVzZSBjb3B5IiwiZmVlIGlzIGhlcmVieSBncmFudGVkIHRoZSIsImlzIGhlcmVieSBncmFudGVkIHRoZSBzb2Z0d2FyZSIsImhlcmVieSBncmFudGVkIHRoZSBzb2Z0d2FyZSBpcyIsImdyYW50ZWQgdGhlIHNvZnR3YXJlIGlzIHByb3ZpZGVkIiwicHJvdmlkZWQgYXMgaXMgYW5kIHRoZSIsImFzIGlzIGFuZCB0aGUgYXV0aG9yIiwiaXMgYW5kIHRoZSBhdXRob3IgZGlzY2xhaW1zIiwiYW5kIHRoZSBhdXRob3IgZGlzY2xhaW1zIGFsbCIsInRoZSBhdXRob3IgZGlzY2xhaW1zIGFsbCB3YXJyYW50aWVzIiwiYXV0aG9yIGRpc2NsYWltcyBhbGwgd2FycmFudGllcyB3aXRoIl19LHsibGljZW5zZVRleHRzIjpbIkF0dHJpYnV0aW9uIEFzc3VyYW5jZSBMaWNlbnNlIENvcHlyaWdodCAoYykgMjAwMiBieSBBVVRIT1IgUFJPRkVTU0lPTkFMIElERU5USUZJQ0FUSU9OICogVVJMIFwiUFJPTU9USU9OQUwgU0xPR0FOIEZPUiBBVVRIT1InUyBQUk9GRVNTSU9OQUwgUFJBQ1RJQ0VcIlxuXG5BbGwgUmlnaHRzIFJlc2VydmVkIEFUVFJJQlVUSU9OIEFTU1VSQU5DRSBMSUNFTlNFIChhZGFwdGVkIGZyb20gdGhlIG9yaWdpbmFsIEJTRCBsaWNlbnNlKVxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGNvbmRpdGlvbnMgYmVsb3cgYXJlIG1ldC4gVGhlc2UgY29uZGl0aW9ucyByZXF1aXJlIGEgbW9kZXN0IGF0dHJpYnV0aW9uIHRvIFx1MDAzY0FVVEhPUlx1MDAzZSAodGhlIFwiQXV0aG9yXCIpLCB3aG8gaG9wZXMgdGhhdCBpdHMgcHJvbW90aW9uYWwgdmFsdWUgbWF5IGhlbHAganVzdGlmeSB0aGUgdGhvdXNhbmRzIG9mIGRvbGxhcnMgaW4gb3RoZXJ3aXNlIGJpbGxhYmxlIHRpbWUgaW52ZXN0ZWQgaW4gd3JpdGluZyB0aGlzIGFuZCBvdGhlciBmcmVlbHkgYXZhaWxhYmxlLCBvcGVuLXNvdXJjZSBzb2Z0d2FyZS5cblxuICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlLCBpbiB3aG9sZSBvciBwYXJ0IGFuZCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uICh0aGUgXCJDb2RlXCIpLCBtdXN0IHByb21pbmVudGx5IGRpc3BsYXkgdGhpcyBHUEctc2lnbmVkIHRleHQgaW4gdmVyaWZpYWJsZSBmb3JtLlxuXG4gICAyLiBSZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIENvZGUgaW4gYmluYXJ5IGZvcm0gbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGlzIEdQRy1zaWduZWQgdGV4dCBpbiBhbnkgZG9jdW1lbnRhdGlvbiBhbmQsIGVhY2ggdGltZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgcHJvZ3JhbSBvciBhIHByb2dyYW0gZGVwZW5kZW50IHRoZXJlb24gaXMgbGF1bmNoZWQsIGEgcHJvbWluZW50IGRpc3BsYXkgKGUuZy4sIHNwbGFzaCBzY3JlZW4gb3IgYmFubmVyIHRleHQpIG9mIHRoZSBBdXRob3IncyBhdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbiwgd2hpY2ggaW5jbHVkZXM6XG5cbiAgICAgIChhKSBOYW1lIChcIkFVVEhPUlwiKSxcblxuICAgICAgKGIpIFByb2Zlc3Npb25hbCBpZGVudGlmaWNhdGlvbiAoXCJQUk9GRVNTSU9OQUwgSURFTlRJRklDQVRJT05cIiksIGFuZFxuXG4gICAgICAoYykgVVJMIChcIlVSTFwiKS5cblxuICAgMy4gTmVpdGhlciB0aGUgbmFtZSBub3IgYW55IHRyYWRlbWFyayBvZiB0aGUgQXV0aG9yIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuICAgNC4gVXNlcnMgYXJlIGVudGlyZWx5IHJlc3BvbnNpYmxlLCB0byB0aGUgZXhjbHVzaW9uIG9mIHRoZSBBdXRob3IgYW5kIGFueSBvdGhlciBwZXJzb25zLCBmb3IgY29tcGxpYW5jZSB3aXRoICgxKSByZWd1bGF0aW9ucyBzZXQgYnkgb3duZXJzIG9yIGFkbWluaXN0cmF0b3JzIG9mIGVtcGxveWVkIGVxdWlwbWVudCwgKDIpIGxpY2Vuc2luZyB0ZXJtcyBvZiBhbnkgb3RoZXIgc29mdHdhcmUsIGFuZCAoMykgbG9jYWwgcmVndWxhdGlvbnMgcmVnYXJkaW5nIHVzZSwgaW5jbHVkaW5nIHRob3NlIHJlZ2FyZGluZyBpbXBvcnQsIGV4cG9ydCwgYW5kIHVzZSBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLlxuXG5USElTIEZSRUUgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBBTlkgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBFRkZFQ1RTIE9GIFVOQVVUSE9SSVpFRCBPUiBNQUxJQ0lPVVMgTkVUV09SSyBBQ0NFU1M7IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iXSwibGljZW5zZUlkcyI6WyJBQUwiXSwia2V5d29yZHMiOlsiYXNzdXJhbmNlIGxpY2Vuc2UgY29weXJpZ2h0IiwiYyAyMDAyIGJ5IiwiMjAwMiBieSBhdXRob3IiLCJieSBhdXRob3IgcHJvZmVzc2lvbmFsIiwiYXV0aG9yIHByb2Zlc3Npb25hbCBpZGVudGlmaWNhdGlvbiIsInByb2Zlc3Npb25hbCBpZGVudGlmaWNhdGlvbiB1cmwiLCJpZGVudGlmaWNhdGlvbiB1cmwgcHJvbW90aW9uYWwiLCJ1cmwgcHJvbW90aW9uYWwgc2xvZ2FuIiwicHJvbW90aW9uYWwgc2xvZ2FuIGZvciIsInNsb2dhbiBmb3IgYXV0aG9yIiwiZm9yIGF1dGhvciBzIiwiYXV0aG9yIHMgcHJvZmVzc2lvbmFsIiwicyBwcm9mZXNzaW9uYWwgcHJhY3RpY2UiLCJwcm9mZXNzaW9uYWwgcHJhY3RpY2UgYWxsIiwicHJhY3RpY2UgYWxsIHJpZ2h0cyIsInJpZ2h0cyByZXNlcnZlZCBhdHRyaWJ1dGlvbiIsInJlc2VydmVkIGF0dHJpYnV0aW9uIGFzc3VyYW5jZSIsImFzc3VyYW5jZSBsaWNlbnNlIGFkYXB0ZWQiLCJsaWNlbnNlIGFkYXB0ZWQgZnJvbSIsImFkYXB0ZWQgZnJvbSB0aGUiLCJ0aGUgb3JpZ2luYWwgYnNkIiwib3JpZ2luYWwgYnNkIGxpY2Vuc2UiLCJic2QgbGljZW5zZSByZWRpc3RyaWJ1dGlvbiIsImNvbmRpdGlvbnMgYmVsb3cgYXJlIiwiYmVsb3cgYXJlIG1ldCIsImFyZSBtZXQgdGhlc2UiLCJtZXQgdGhlc2UgY29uZGl0aW9ucyIsInRoZXNlIGNvbmRpdGlvbnMgcmVxdWlyZSIsImNvbmRpdGlvbnMgcmVxdWlyZSBhIiwicmVxdWlyZSBhIG1vZGVzdCIsImF0dHJpYnV0aW9uIHRvIGF1dGhvciIsInRvIGF1dGhvciB0aGUiLCJhdXRob3IgdGhlIGF1dGhvciIsInRoZSBhdXRob3Igd2hvIiwiYXV0aG9yIHdobyBob3BlcyIsIndobyBob3BlcyB0aGF0IiwiaG9wZXMgdGhhdCBpdHMiLCJqdXN0aWZ5IHRoZSB0aG91c2FuZHMiLCJ0aGUgdGhvdXNhbmRzIG9mIiwidGhvdXNhbmRzIG9mIGRvbGxhcnMiLCJvZiBkb2xsYXJzIGluIiwiZG9sbGFycyBpbiBvdGhlcndpc2UiLCJpbiBvdGhlcndpc2UgYmlsbGFibGUiLCJvdGhlcndpc2UgYmlsbGFibGUgdGltZSIsImJpbGxhYmxlIHRpbWUgaW52ZXN0ZWQiLCJ0aW1lIGludmVzdGVkIGluIiwiaW4gd3JpdGluZyB0aGlzIiwid3JpdGluZyB0aGlzIGFuZCIsInRoaXMgYW5kIG90aGVyIiwiYW5kIG90aGVyIGZyZWVseSIsIm90aGVyIGZyZWVseSBhdmFpbGFibGUiLCJmcmVlbHkgYXZhaWxhYmxlIG9wZW4iLCJhdmFpbGFibGUgb3BlbiBzb3VyY2UiLCJzb3VyY2Ugc29mdHdhcmUgMSIsInNvZnR3YXJlIDEgcmVkaXN0cmlidXRpb25zIiwib3IgcGFydCBhbmQiLCJwYXJ0IGFuZCB3aXRoIiwibW9kaWZpY2F0aW9uIHRoZSBjb2RlIiwidGhlIGNvZGUgbXVzdCIsImNvZGUgbXVzdCBwcm9taW5lbnRseSIsIm11c3QgcHJvbWluZW50bHkgZGlzcGxheSIsInByb21pbmVudGx5IGRpc3BsYXkgdGhpcyIsImRpc3BsYXkgdGhpcyBncGciLCJ0ZXh0IGluIHZlcmlmaWFibGUiLCJpbiB2ZXJpZmlhYmxlIGZvcm0iLCJ2ZXJpZmlhYmxlIGZvcm0gMiIsImZvcm0gMiByZWRpc3RyaWJ1dGlvbnMiLCJ0aGUgY29kZSBpbiIsImNvZGUgaW4gYmluYXJ5IiwiYWNjb21wYW5pZWQgYnkgdGhpcyIsImJ5IHRoaXMgZ3BnIiwidGV4dCBpbiBhbnkiLCJkb2N1bWVudGF0aW9uIGFuZCBlYWNoIiwiYW5kIGVhY2ggdGltZSIsInRpbWUgdGhlIHJlc3VsdGluZyIsInJlc3VsdGluZyBleGVjdXRhYmxlIHByb2dyYW0iLCJpcyBsYXVuY2hlZCBhIiwibGF1bmNoZWQgYSBwcm9taW5lbnQiLCJwcm9taW5lbnQgZGlzcGxheSBlIiwiZGlzcGxheSBlIGciLCJlIGcgc3BsYXNoIiwiZyBzcGxhc2ggc2NyZWVuIiwic3BsYXNoIHNjcmVlbiBvciIsInNjcmVlbiBvciBiYW5uZXIiLCJvciBiYW5uZXIgdGV4dCIsImJhbm5lciB0ZXh0IG9mIiwiYXV0aG9yIHMgYXR0cmlidXRpb24iLCJhdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbiB3aGljaCIsImluZm9ybWF0aW9uIHdoaWNoIGluY2x1ZGVzIiwiaW5jbHVkZXMgYSBuYW1lIiwiYSBuYW1lIGF1dGhvciIsIm5hbWUgYXV0aG9yIGIiLCJhdXRob3IgYiBwcm9mZXNzaW9uYWwiLCJiIHByb2Zlc3Npb25hbCBpZGVudGlmaWNhdGlvbiIsInByb2Zlc3Npb25hbCBpZGVudGlmaWNhdGlvbiBwcm9mZXNzaW9uYWwiLCJpZGVudGlmaWNhdGlvbiBwcm9mZXNzaW9uYWwgaWRlbnRpZmljYXRpb24iLCJwcm9mZXNzaW9uYWwgaWRlbnRpZmljYXRpb24gYW5kIiwiaWRlbnRpZmljYXRpb24gYW5kIGMiLCJhbmQgYyB1cmwiLCJjIHVybCB1cmwiLCJ1cmwgdXJsIDMiLCJ1cmwgMyBuZWl0aGVyIiwidGhlIG5hbWUgbm9yIiwibmFtZSBub3IgYW55Iiwibm9yIGFueSB0cmFkZW1hcmsiLCJhdXRob3IgbWF5IGJlIiwicGVybWlzc2lvbiA0IHVzZXJzIiwiNCB1c2VycyBhcmUiLCJ1c2VycyBhcmUgZW50aXJlbHkiLCJhcmUgZW50aXJlbHkgcmVzcG9uc2libGUiLCJlbnRpcmVseSByZXNwb25zaWJsZSB0byIsInJlc3BvbnNpYmxlIHRvIHRoZSIsInRvIHRoZSBleGNsdXNpb24iLCJleGNsdXNpb24gb2YgdGhlIiwiYXV0aG9yIGFuZCBhbnkiLCJhbnkgb3RoZXIgcGVyc29ucyIsInBlcnNvbnMgZm9yIGNvbXBsaWFuY2UiLCJjb21wbGlhbmNlIHdpdGggMSIsIndpdGggMSByZWd1bGF0aW9ucyIsIjEgcmVndWxhdGlvbnMgc2V0IiwicmVndWxhdGlvbnMgc2V0IGJ5Iiwic2V0IGJ5IG93bmVycyIsImJ5IG93bmVycyBvciIsIm93bmVycyBvciBhZG1pbmlzdHJhdG9ycyIsIm9yIGFkbWluaXN0cmF0b3JzIG9mIiwiYWRtaW5pc3RyYXRvcnMgb2YgZW1wbG95ZWQiLCJvZiBlbXBsb3llZCBlcXVpcG1lbnQiLCJlbXBsb3llZCBlcXVpcG1lbnQgMiIsImVxdWlwbWVudCAyIGxpY2Vuc2luZyIsIjIgbGljZW5zaW5nIHRlcm1zIiwibGljZW5zaW5nIHRlcm1zIG9mIiwib3RoZXIgc29mdHdhcmUgYW5kIiwic29mdHdhcmUgYW5kIDMiLCJhbmQgMyBsb2NhbCIsIjMgbG9jYWwgcmVndWxhdGlvbnMiLCJsb2NhbCByZWd1bGF0aW9ucyByZWdhcmRpbmciLCJyZWd1bGF0aW9ucyByZWdhcmRpbmcgdXNlIiwicmVnYXJkaW5nIHVzZSBpbmNsdWRpbmciLCJ1c2UgaW5jbHVkaW5nIHRob3NlIiwiaW5jbHVkaW5nIHRob3NlIHJlZ2FyZGluZyIsInRob3NlIHJlZ2FyZGluZyBpbXBvcnQiLCJyZWdhcmRpbmcgaW1wb3J0IGV4cG9ydCIsImltcG9ydCBleHBvcnQgYW5kIiwiZXhwb3J0IGFuZCB1c2UiLCJ1c2Ugb2YgZW5jcnlwdGlvbiIsIm9mIGVuY3J5cHRpb24gc29mdHdhcmUiLCJlbmNyeXB0aW9uIHNvZnR3YXJlIHRoaXMiLCJzb2Z0d2FyZSB0aGlzIGZyZWUiLCJmcmVlIHNvZnR3YXJlIGlzIiwiYXV0aG9yIG9yIGFueSIsImxpbWl0ZWQgdG8gZWZmZWN0cyIsInRvIGVmZmVjdHMgb2YiLCJlZmZlY3RzIG9mIHVuYXV0aG9yaXplZCIsIm9mIHVuYXV0aG9yaXplZCBvciIsInVuYXV0aG9yaXplZCBvciBtYWxpY2lvdXMiLCJvciBtYWxpY2lvdXMgbmV0d29yayIsIm1hbGljaW91cyBuZXR3b3JrIGFjY2VzcyIsIm5ldHdvcmsgYWNjZXNzIHByb2N1cmVtZW50IiwiYWNjZXNzIHByb2N1cmVtZW50IG9mIiwiYXR0cmlidXRpb24gYXNzdXJhbmNlIGxpY2Vuc2UgY29weXJpZ2h0IiwiYXNzdXJhbmNlIGxpY2Vuc2UgY29weXJpZ2h0IGMiLCJjb3B5cmlnaHQgYyAyMDAyIGJ5IiwiYyAyMDAyIGJ5IGF1dGhvciIsIjIwMDIgYnkgYXV0aG9yIHByb2Zlc3Npb25hbCIsImJ5IGF1dGhvciBwcm9mZXNzaW9uYWwgaWRlbnRpZmljYXRpb24iLCJhdXRob3IgcHJvZmVzc2lvbmFsIGlkZW50aWZpY2F0aW9uIHVybCIsInByb2Zlc3Npb25hbCBpZGVudGlmaWNhdGlvbiB1cmwgcHJvbW90aW9uYWwiLCJpZGVudGlmaWNhdGlvbiB1cmwgcHJvbW90aW9uYWwgc2xvZ2FuIiwidXJsIHByb21vdGlvbmFsIHNsb2dhbiBmb3IiLCJwcm9tb3Rpb25hbCBzbG9nYW4gZm9yIGF1dGhvciIsInNsb2dhbiBmb3IgYXV0aG9yIHMiLCJmb3IgYXV0aG9yIHMgcHJvZmVzc2lvbmFsIiwiYXV0aG9yIHMgcHJvZmVzc2lvbmFsIHByYWN0aWNlIiwicyBwcm9mZXNzaW9uYWwgcHJhY3RpY2UgYWxsIiwicHJvZmVzc2lvbmFsIHByYWN0aWNlIGFsbCByaWdodHMiLCJwcmFjdGljZSBhbGwgcmlnaHRzIHJlc2VydmVkIiwiYWxsIHJpZ2h0cyByZXNlcnZlZCBhdHRyaWJ1dGlvbiIsInJpZ2h0cyByZXNlcnZlZCBhdHRyaWJ1dGlvbiBhc3N1cmFuY2UiLCJyZXNlcnZlZCBhdHRyaWJ1dGlvbiBhc3N1cmFuY2UgbGljZW5zZSIsImF0dHJpYnV0aW9uIGFzc3VyYW5jZSBsaWNlbnNlIGFkYXB0ZWQiLCJhc3N1cmFuY2UgbGljZW5zZSBhZGFwdGVkIGZyb20iLCJsaWNlbnNlIGFkYXB0ZWQgZnJvbSB0aGUiLCJhZGFwdGVkIGZyb20gdGhlIG9yaWdpbmFsIiwiZnJvbSB0aGUgb3JpZ2luYWwgYnNkIiwidGhlIG9yaWdpbmFsIGJzZCBsaWNlbnNlIiwib3JpZ2luYWwgYnNkIGxpY2Vuc2UgcmVkaXN0cmlidXRpb24iLCJic2QgbGljZW5zZSByZWRpc3RyaWJ1dGlvbiBhbmQiLCJwcm92aWRlZCB0aGF0IHRoZSBjb25kaXRpb25zIiwidGhlIGNvbmRpdGlvbnMgYmVsb3cgYXJlIiwiY29uZGl0aW9ucyBiZWxvdyBhcmUgbWV0IiwiYmVsb3cgYXJlIG1ldCB0aGVzZSIsImFyZSBtZXQgdGhlc2UgY29uZGl0aW9ucyIsIm1ldCB0aGVzZSBjb25kaXRpb25zIHJlcXVpcmUiLCJ0aGVzZSBjb25kaXRpb25zIHJlcXVpcmUgYSIsImNvbmRpdGlvbnMgcmVxdWlyZSBhIG1vZGVzdCIsInJlcXVpcmUgYSBtb2Rlc3QgYXR0cmlidXRpb24iLCJtb2Rlc3QgYXR0cmlidXRpb24gdG8gYXV0aG9yIiwiYXR0cmlidXRpb24gdG8gYXV0aG9yIHRoZSIsInRvIGF1dGhvciB0aGUgYXV0aG9yIiwiYXV0aG9yIHRoZSBhdXRob3Igd2hvIl19LHsibGljZW5zZVRleHRzIjpbIlRoaXMgc29mdHdhcmUgY29kZSBpcyBtYWRlIGF2YWlsYWJsZSBcIkFTIElTXCIgd2l0aG91dCB3YXJyYW50aWVzIG9mIGFueSBraW5kLiBZb3UgbWF5IGNvcHksIGRpc3BsYXksIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBjb2RlIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgaW5jb3Jwb3JhdGVkIGludG8geW91ciBjb2RlOyBwcm92aWRlZCB0aGF0IHlvdSBkbyBub3QgcmVtb3ZlIGFueSBwcm9wcmlldGFyeSBub3RpY2VzLiBZb3VyIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGNvZGUgaXMgYXQgeW91ciBvd24gcmlzayBhbmQgeW91IHdhaXZlIGFueSBjbGFpbSBhZ2FpbnN0IEFtYXpvbiBEaWdpdGFsIFNlcnZpY2VzLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzIHdpdGggcmVzcGVjdCB0byB5b3VyIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGNvZGUuIChjKSAyMDA2IEFtYXpvbiBEaWdpdGFsIFNlcnZpY2VzLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiJdLCJsaWNlbnNlSWRzIjpbIkFEU0wiXSwia2V5d29yZHMiOlsiaXMgd2l0aG91dCB3YXJyYW50aWVzIiwiYW55IGtpbmQgeW91Iiwia2luZCB5b3UgbWF5IiwibWF5IGNvcHkgZGlzcGxheSIsImNvcHkgZGlzcGxheSBtb2RpZnkiLCJkaXNwbGF5IG1vZGlmeSBhbmQiLCJ0aGUgc29mdHdhcmUgY29kZSIsInNvZnR3YXJlIGNvZGUgZWl0aGVyIiwiY29kZSBlaXRoZXIgYnkiLCJvciBhcyBpbmNvcnBvcmF0ZWQiLCJpbmNvcnBvcmF0ZWQgaW50byB5b3VyIiwiaW50byB5b3VyIGNvZGUiLCJ5b3VyIGNvZGUgcHJvdmlkZWQiLCJkbyBub3QgcmVtb3ZlIiwicmVtb3ZlIGFueSBwcm9wcmlldGFyeSIsImFueSBwcm9wcmlldGFyeSBub3RpY2VzIiwicHJvcHJpZXRhcnkgbm90aWNlcyB5b3VyIiwibm90aWNlcyB5b3VyIHVzZSIsImNvZGUgaXMgYXQiLCJyaXNrIGFuZCB5b3UiLCJhbnkgY2xhaW0gYWdhaW5zdCIsImNsYWltIGFnYWluc3QgYW1hem9uIiwiYWdhaW5zdCBhbWF6b24gZGlnaXRhbCIsIml0cyBhZmZpbGlhdGVzIHdpdGgiLCJhZmZpbGlhdGVzIHdpdGggcmVzcGVjdCIsInJlc3BlY3QgdG8geW91ciIsInNvZnR3YXJlIGNvZGUgYyIsImNvZGUgYyAyMDA2IiwiYyAyMDA2IGFtYXpvbiIsIjIwMDYgYW1hem9uIGRpZ2l0YWwiLCJzb2Z0d2FyZSBjb2RlIGlzIG1hZGUiLCJjb2RlIGlzIG1hZGUgYXZhaWxhYmxlIiwiYXZhaWxhYmxlIGFzIGlzIHdpdGhvdXQiLCJhcyBpcyB3aXRob3V0IHdhcnJhbnRpZXMiLCJpcyB3aXRob3V0IHdhcnJhbnRpZXMgb2YiLCJvZiBhbnkga2luZCB5b3UiLCJhbnkga2luZCB5b3UgbWF5Iiwia2luZCB5b3UgbWF5IGNvcHkiLCJ5b3UgbWF5IGNvcHkgZGlzcGxheSIsIm1heSBjb3B5IGRpc3BsYXkgbW9kaWZ5IiwiY29weSBkaXNwbGF5IG1vZGlmeSBhbmQiLCJkaXNwbGF5IG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIiwicmVkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBjb2RlIiwidGhlIHNvZnR3YXJlIGNvZGUgZWl0aGVyIiwic29mdHdhcmUgY29kZSBlaXRoZXIgYnkiLCJjb2RlIGVpdGhlciBieSBpdHNlbGYiLCJpdHNlbGYgb3IgYXMgaW5jb3Jwb3JhdGVkIiwib3IgYXMgaW5jb3Jwb3JhdGVkIGludG8iLCJhcyBpbmNvcnBvcmF0ZWQgaW50byB5b3VyIiwiaW5jb3Jwb3JhdGVkIGludG8geW91ciBjb2RlIiwiaW50byB5b3VyIGNvZGUgcHJvdmlkZWQiLCJ5b3VyIGNvZGUgcHJvdmlkZWQgdGhhdCIsInlvdSBkbyBub3QgcmVtb3ZlIiwiZG8gbm90IHJlbW92ZSBhbnkiLCJub3QgcmVtb3ZlIGFueSBwcm9wcmlldGFyeSIsInJlbW92ZSBhbnkgcHJvcHJpZXRhcnkgbm90aWNlcyIsImFueSBwcm9wcmlldGFyeSBub3RpY2VzIHlvdXIiLCJwcm9wcmlldGFyeSBub3RpY2VzIHlvdXIgdXNlIiwibm90aWNlcyB5b3VyIHVzZSBvZiIsInNvZnR3YXJlIGNvZGUgaXMgYXQiLCJjb2RlIGlzIGF0IHlvdXIiLCJpcyBhdCB5b3VyIG93biIsInlvdXIgb3duIHJpc2sgYW5kIiwib3duIHJpc2sgYW5kIHlvdSIsInJpc2sgYW5kIHlvdSB3YWl2ZSIsIndhaXZlIGFueSBjbGFpbSBhZ2FpbnN0IiwiYW55IGNsYWltIGFnYWluc3QgYW1hem9uIiwiY2xhaW0gYWdhaW5zdCBhbWF6b24gZGlnaXRhbCIsImFnYWluc3QgYW1hem9uIGRpZ2l0YWwgc2VydmljZXMiLCJvciBpdHMgYWZmaWxpYXRlcyB3aXRoIiwiaXRzIGFmZmlsaWF0ZXMgd2l0aCByZXNwZWN0IiwiYWZmaWxpYXRlcyB3aXRoIHJlc3BlY3QgdG8iLCJ3aXRoIHJlc3BlY3QgdG8geW91ciIsInJlc3BlY3QgdG8geW91ciB1c2UiLCJ0aGlzIHNvZnR3YXJlIGNvZGUgYyIsInNvZnR3YXJlIGNvZGUgYyAyMDA2IiwiY29kZSBjIDIwMDYgYW1hem9uIiwiYyAyMDA2IGFtYXpvbiBkaWdpdGFsIiwiMjAwNiBhbWF6b24gZGlnaXRhbCBzZXJ2aWNlcyIsInRoaXMgc29mdHdhcmUgY29kZSBpcyBtYWRlIiwic29mdHdhcmUgY29kZSBpcyBtYWRlIGF2YWlsYWJsZSIsImNvZGUgaXMgbWFkZSBhdmFpbGFibGUgYXMiLCJtYWRlIGF2YWlsYWJsZSBhcyBpcyB3aXRob3V0IiwiYXZhaWxhYmxlIGFzIGlzIHdpdGhvdXQgd2FycmFudGllcyIsImFzIGlzIHdpdGhvdXQgd2FycmFudGllcyBvZiIsImlzIHdpdGhvdXQgd2FycmFudGllcyBvZiBhbnkiLCJ3YXJyYW50aWVzIG9mIGFueSBraW5kIHlvdSIsIm9mIGFueSBraW5kIHlvdSBtYXkiLCJhbnkga2luZCB5b3UgbWF5IGNvcHkiLCJraW5kIHlvdSBtYXkgY29weSBkaXNwbGF5IiwieW91IG1heSBjb3B5IGRpc3BsYXkgbW9kaWZ5IiwibWF5IGNvcHkgZGlzcGxheSBtb2RpZnkgYW5kIiwiY29weSBkaXNwbGF5IG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIiwiZGlzcGxheSBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUiLCJhbmQgcmVkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBjb2RlIiwicmVkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBjb2RlIGVpdGhlciIsInRoZSBzb2Z0d2FyZSBjb2RlIGVpdGhlciBieSIsInNvZnR3YXJlIGNvZGUgZWl0aGVyIGJ5IGl0c2VsZiIsImNvZGUgZWl0aGVyIGJ5IGl0c2VsZiBvciIsImJ5IGl0c2VsZiBvciBhcyBpbmNvcnBvcmF0ZWQiLCJpdHNlbGYgb3IgYXMgaW5jb3Jwb3JhdGVkIGludG8iLCJvciBhcyBpbmNvcnBvcmF0ZWQgaW50byB5b3VyIiwiYXMgaW5jb3Jwb3JhdGVkIGludG8geW91ciBjb2RlIiwiaW5jb3Jwb3JhdGVkIGludG8geW91ciBjb2RlIHByb3ZpZGVkIiwiaW50byB5b3VyIGNvZGUgcHJvdmlkZWQgdGhhdCIsInlvdXIgY29kZSBwcm92aWRlZCB0aGF0IHlvdSIsImNvZGUgcHJvdmlkZWQgdGhhdCB5b3UgZG8iLCJ0aGF0IHlvdSBkbyBub3QgcmVtb3ZlIiwieW91IGRvIG5vdCByZW1vdmUgYW55IiwiZG8gbm90IHJlbW92ZSBhbnkgcHJvcHJpZXRhcnkiLCJub3QgcmVtb3ZlIGFueSBwcm9wcmlldGFyeSBub3RpY2VzIiwicmVtb3ZlIGFueSBwcm9wcmlldGFyeSBub3RpY2VzIHlvdXIiLCJhbnkgcHJvcHJpZXRhcnkgbm90aWNlcyB5b3VyIHVzZSIsInByb3ByaWV0YXJ5IG5vdGljZXMgeW91ciB1c2Ugb2YiLCJub3RpY2VzIHlvdXIgdXNlIG9mIHRoaXMiLCJvZiB0aGlzIHNvZnR3YXJlIGNvZGUgaXMiLCJ0aGlzIHNvZnR3YXJlIGNvZGUgaXMgYXQiLCJzb2Z0d2FyZSBjb2RlIGlzIGF0IHlvdXIiLCJjb2RlIGlzIGF0IHlvdXIgb3duIiwiaXMgYXQgeW91ciBvd24gcmlzayIsImF0IHlvdXIgb3duIHJpc2sgYW5kIiwieW91ciBvd24gcmlzayBhbmQgeW91Iiwib3duIHJpc2sgYW5kIHlvdSB3YWl2ZSIsInJpc2sgYW5kIHlvdSB3YWl2ZSBhbnkiLCJ5b3Ugd2FpdmUgYW55IGNsYWltIGFnYWluc3QiLCJ3YWl2ZSBhbnkgY2xhaW0gYWdhaW5zdCBhbWF6b24iLCJhbnkgY2xhaW0gYWdhaW5zdCBhbWF6b24gZGlnaXRhbCIsImNsYWltIGFnYWluc3QgYW1hem9uIGRpZ2l0YWwgc2VydmljZXMiLCJhZ2FpbnN0IGFtYXpvbiBkaWdpdGFsIHNlcnZpY2VzIGluYyIsImluYyBvciBpdHMgYWZmaWxpYXRlcyB3aXRoIiwib3IgaXRzIGFmZmlsaWF0ZXMgd2l0aCByZXNwZWN0IiwiaXRzIGFmZmlsaWF0ZXMgd2l0aCByZXNwZWN0IHRvIiwiYWZmaWxpYXRlcyB3aXRoIHJlc3BlY3QgdG8geW91ciIsIndpdGggcmVzcGVjdCB0byB5b3VyIHVzZSIsInJlc3BlY3QgdG8geW91ciB1c2Ugb2YiLCJ0byB5b3VyIHVzZSBvZiB0aGlzIiwib2YgdGhpcyBzb2Z0d2FyZSBjb2RlIGMiLCJ0aGlzIHNvZnR3YXJlIGNvZGUgYyAyMDA2Iiwic29mdHdhcmUgY29kZSBjIDIwMDYgYW1hem9uIiwiY29kZSBjIDIwMDYgYW1hem9uIGRpZ2l0YWwiLCJjIDIwMDYgYW1hem9uIGRpZ2l0YWwgc2VydmljZXMiLCIyMDA2IGFtYXpvbiBkaWdpdGFsIHNlcnZpY2VzIGluYyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJBY2FkZW1pYyBGcmVlIExpY2Vuc2VcblxuVmVyc2lvbiAxLjEgVGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSBcIk9yaWdpbmFsIFdvcmtcIikgd2hvc2Ugb3duZXIgKHRoZSBcIkxpY2Vuc29yXCIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazpcblxuXCJMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24gMS4xLlwiXG5cbkdyYW50IG9mIExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIChcIllvdVwiKSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBub24tc3VibGljZW5zZWFibGUgbGljZW5zZVxuXG4gICAoMSkgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgZGVyaXZhdGl2ZSB3b3JrcyB0aGVyZW9mLCBhbmRcblxuICAgKDIpIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yayBhbmQgZGVyaXZhdGl2ZSB3b3JrcyB0aGVyZW9mLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucy5cblxuUmlnaHQgb2YgQXR0cmlidXRpb24uIFJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayBtdXN0IHJlcHJvZHVjZSBhbGwgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgYm90aCBpbiB0aGUgT3JpZ2luYWwgV29yayBpdHNlbGYgYW5kIGluIGFueSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluIGV4ZWN1dGFibGUgZm9ybS5cblxuRXhjbHVzaW9ucyBmcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci5cblxuV0FSUkFOVFkgQU5EIERJU0NMQUlNRVJTLiBMSUNFTlNPUiBXQVJSQU5UUyBUSEFUIFRIRSBDT1BZUklHSFQgSU4gQU5EIFRPIFRIRSBPUklHSU5BTCBXT1JLIElTIE9XTkVEIEJZIFRIRSBMSUNFTlNPUiBPUiBUSEFUIFRIRSBPUklHSU5BTCBXT1JLIElTIERJU1RSSUJVVEVEIEJZIExJQ0VOU09SIFVOREVSIEEgVkFMSUQgQ1VSUkVOVCBMSUNFTlNFIEZST00gVEhFIENPUFlSSUdIVCBPV05FUi4gRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhFIElNTUVESUFURUxZIFBSRUNFRURJTkcgU0VOVEVOQ0UsIFRIRSBPUklHSU5BTCBXT1JLIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFksIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgV0FSUkFOVFkgT0YgTk9OLUlORlJJTkdFTUVOVCBBTkQgV0FSUkFOVElFUyBUSEFUIFRIRSBPUklHSU5BTCBXT1JLIElTIE1FUkNIQU5UQUJMRSBPUiBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIExJQ0VOU0UgVE8gT1JJR0lOQUwgV09SSyBJUyBHUkFOVEVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLlxuXG5MSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFIExJQ0VOU09SIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBBUyBBIFJFU1VMVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBFUlNPTiBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbkxpY2Vuc2UgdG8gU291cmNlIENvZGUuIFRoZSB0ZXJtIFwiU291cmNlIENvZGVcIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gYWNjZXNzIGFuZCBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGhlcmVieSBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgYnkgcHVibGlzaGluZyB0aGUgYWRkcmVzcyBvZiB0aGF0IGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgaW4gYSBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay5cblxuTXV0dWFsIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBpZiBZb3UgZmlsZSBhIGxhd3N1aXQgaW4gYW55IGNvdXJ0IGFsbGVnaW5nIHRoYXQgYW55IE9TSSBDZXJ0aWZpZWQgb3BlbiBzb3VyY2Ugc29mdHdhcmUgdGhhdCBpcyBsaWNlbnNlZCB1bmRlciBhbnkgbGljZW5zZSBjb250YWluaW5nIHRoaXMgXCJNdXR1YWwgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb25cIiBjbGF1c2UgaW5mcmluZ2VzIGFueSBwYXRlbnQgY2xhaW1zIHRoYXQgYXJlIGVzc2VudGlhbCB0byB1c2UgdGhhdCBzb2Z0d2FyZS5cblxuVGhpcyBsaWNlbnNlIGlzIENvcHlyaWdodCAoQykgMjAwMiBMYXdyZW5jZSBFLiBSb3Nlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4iXSwibGljZW5zZUlkcyI6WyJBRkwtMS4xIl0sImtleXdvcmRzIjpbIjEgdGhlIGFjYWRlbWljIiwiZm9sbG93aW5nIGNvbmRpdGlvbnMgcmlnaHQiLCJjb25kaXRpb25zIHJpZ2h0IG9mIiwicmlnaHQgb2YgYXR0cmlidXRpb24iLCJvZiBhdHRyaWJ1dGlvbiByZWRpc3RyaWJ1dGlvbnMiLCJhdHRyaWJ1dGlvbiByZWRpc3RyaWJ1dGlvbnMgb2YiLCJ3b3JrIG11c3QgcmVwcm9kdWNlIiwibXVzdCByZXByb2R1Y2UgYWxsIiwicmVwcm9kdWNlIGFsbCBjb3B5cmlnaHQiLCJ0aGUgbGljZW5zb3IgYm90aCIsImxpY2Vuc29yIGJvdGggaW4iLCJvcmlnaW5hbCB3b3JrIGl0c2VsZiIsIndvcmsgaXRzZWxmIGFuZCIsIml0c2VsZiBhbmQgaW4iLCJ3b3JrIGluIGV4ZWN1dGFibGUiLCJleGVjdXRhYmxlIGZvcm0gZXhjbHVzaW9ucyIsImZvcm0gZXhjbHVzaW9ucyBmcm9tIiwid2FycmFudHkgYW5kIGRpc2NsYWltZXJzIiwiYW5kIGRpc2NsYWltZXJzIGxpY2Vuc29yIiwiZGlzY2xhaW1lcnMgbGljZW5zb3Igd2FycmFudHMiLCJ0aGF0IHNvZnR3YXJlIHRoaXMiLCIxIDEgdGhlIGFjYWRlbWljIiwiMSB0aGUgYWNhZGVtaWMgZnJlZSIsInZlcnNpb24gMSAxIGdyYW50IiwidGhlIGZvbGxvd2luZyBjb25kaXRpb25zIHJpZ2h0IiwiZm9sbG93aW5nIGNvbmRpdGlvbnMgcmlnaHQgb2YiLCJjb25kaXRpb25zIHJpZ2h0IG9mIGF0dHJpYnV0aW9uIiwicmlnaHQgb2YgYXR0cmlidXRpb24gcmVkaXN0cmlidXRpb25zIiwib2YgYXR0cmlidXRpb24gcmVkaXN0cmlidXRpb25zIG9mIiwiYXR0cmlidXRpb24gcmVkaXN0cmlidXRpb25zIG9mIHRoZSIsInJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgb3JpZ2luYWwiLCJvcmlnaW5hbCB3b3JrIG11c3QgcmVwcm9kdWNlIiwid29yayBtdXN0IHJlcHJvZHVjZSBhbGwiLCJtdXN0IHJlcHJvZHVjZSBhbGwgY29weXJpZ2h0IiwicmVwcm9kdWNlIGFsbCBjb3B5cmlnaHQgbm90aWNlcyIsImFsbCBjb3B5cmlnaHQgbm90aWNlcyBpbiIsImJ5IHRoZSBsaWNlbnNvciBib3RoIiwidGhlIGxpY2Vuc29yIGJvdGggaW4iLCJsaWNlbnNvciBib3RoIGluIHRoZSIsImJvdGggaW4gdGhlIG9yaWdpbmFsIiwidGhlIG9yaWdpbmFsIHdvcmsgaXRzZWxmIiwib3JpZ2luYWwgd29yayBpdHNlbGYgYW5kIiwid29yayBpdHNlbGYgYW5kIGluIiwiaXRzZWxmIGFuZCBpbiBhbnkiLCJhbmQgaW4gYW55IGRvY3VtZW50YXRpb24iLCJhbnkgZG9jdW1lbnRhdGlvbiBhbmQgb3IiLCJ3aXRoIHRoZSBkaXN0cmlidXRpb24gb2YiLCJvcmlnaW5hbCB3b3JrIGluIGV4ZWN1dGFibGUiLCJ3b3JrIGluIGV4ZWN1dGFibGUgZm9ybSIsImluIGV4ZWN1dGFibGUgZm9ybSBleGNsdXNpb25zIiwiZXhlY3V0YWJsZSBmb3JtIGV4Y2x1c2lvbnMgZnJvbSIsImZvcm0gZXhjbHVzaW9ucyBmcm9tIGxpY2Vuc2UiLCJsaWNlbnNvciB3YXJyYW50eSBhbmQgZGlzY2xhaW1lcnMiLCJ3YXJyYW50eSBhbmQgZGlzY2xhaW1lcnMgbGljZW5zb3IiLCJhbmQgZGlzY2xhaW1lcnMgbGljZW5zb3Igd2FycmFudHMiLCJkaXNjbGFpbWVycyBsaWNlbnNvciB3YXJyYW50cyB0aGF0IiwidXNlIHRoYXQgc29mdHdhcmUgdGhpcyIsInRoYXQgc29mdHdhcmUgdGhpcyBsaWNlbnNlIiwic29mdHdhcmUgdGhpcyBsaWNlbnNlIGlzIiwidmVyc2lvbiAxIDEgdGhlIGFjYWRlbWljIiwiMSAxIHRoZSBhY2FkZW1pYyBmcmVlIiwiMSB0aGUgYWNhZGVtaWMgZnJlZSBsaWNlbnNlIiwidGhlIGFjYWRlbWljIGZyZWUgbGljZW5zZSBhcHBsaWVzIiwibGljZW5zZSB2ZXJzaW9uIDEgMSBncmFudCIsInZlcnNpb24gMSAxIGdyYW50IG9mIiwiMSAxIGdyYW50IG9mIGxpY2Vuc2UiLCIxIGdyYW50IG9mIGxpY2Vuc2UgbGljZW5zb3IiLCJ0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgcmlnaHQiLCJ0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgcmlnaHQgb2YiLCJmb2xsb3dpbmcgY29uZGl0aW9ucyByaWdodCBvZiBhdHRyaWJ1dGlvbiIsImNvbmRpdGlvbnMgcmlnaHQgb2YgYXR0cmlidXRpb24gcmVkaXN0cmlidXRpb25zIiwicmlnaHQgb2YgYXR0cmlidXRpb24gcmVkaXN0cmlidXRpb25zIG9mIiwib2YgYXR0cmlidXRpb24gcmVkaXN0cmlidXRpb25zIG9mIHRoZSIsImF0dHJpYnV0aW9uIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgb3JpZ2luYWwiLCJyZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIG9yaWdpbmFsIHdvcmsiLCJ0aGUgb3JpZ2luYWwgd29yayBtdXN0IHJlcHJvZHVjZSIsIm9yaWdpbmFsIHdvcmsgbXVzdCByZXByb2R1Y2UgYWxsIiwid29yayBtdXN0IHJlcHJvZHVjZSBhbGwgY29weXJpZ2h0IiwibXVzdCByZXByb2R1Y2UgYWxsIGNvcHlyaWdodCBub3RpY2VzIiwicmVwcm9kdWNlIGFsbCBjb3B5cmlnaHQgbm90aWNlcyBpbiIsImFsbCBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUiLCJjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgb3JpZ2luYWwiLCJub3RpY2VzIGluIHRoZSBvcmlnaW5hbCB3b3JrIiwiZnVybmlzaGVkIGJ5IHRoZSBsaWNlbnNvciBib3RoIiwiYnkgdGhlIGxpY2Vuc29yIGJvdGggaW4iLCJ0aGUgbGljZW5zb3IgYm90aCBpbiB0aGUiLCJsaWNlbnNvciBib3RoIGluIHRoZSBvcmlnaW5hbCIsImJvdGggaW4gdGhlIG9yaWdpbmFsIHdvcmsiLCJpbiB0aGUgb3JpZ2luYWwgd29yayBpdHNlbGYiLCJ0aGUgb3JpZ2luYWwgd29yayBpdHNlbGYgYW5kIiwib3JpZ2luYWwgd29yayBpdHNlbGYgYW5kIGluIiwid29yayBpdHNlbGYgYW5kIGluIGFueSIsIml0c2VsZiBhbmQgaW4gYW55IGRvY3VtZW50YXRpb24iLCJhbmQgaW4gYW55IGRvY3VtZW50YXRpb24gYW5kIiwiaW4gYW55IGRvY3VtZW50YXRpb24gYW5kIG9yIiwiYW55IGRvY3VtZW50YXRpb24gYW5kIG9yIG90aGVyIiwicHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uIG9mIiwid2l0aCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSIsIm9mIHRoZSBvcmlnaW5hbCB3b3JrIGluIiwidGhlIG9yaWdpbmFsIHdvcmsgaW4gZXhlY3V0YWJsZSIsIm9yaWdpbmFsIHdvcmsgaW4gZXhlY3V0YWJsZSBmb3JtIiwid29yayBpbiBleGVjdXRhYmxlIGZvcm0gZXhjbHVzaW9ucyIsImluIGV4ZWN1dGFibGUgZm9ybSBleGNsdXNpb25zIGZyb20iLCJleGVjdXRhYmxlIGZvcm0gZXhjbHVzaW9ucyBmcm9tIGxpY2Vuc2UiLCJmb3JtIGV4Y2x1c2lvbnMgZnJvbSBsaWNlbnNlIGdyYW50IiwidGhlIGxpY2Vuc29yIHdhcnJhbnR5IGFuZCBkaXNjbGFpbWVycyIsImxpY2Vuc29yIHdhcnJhbnR5IGFuZCBkaXNjbGFpbWVycyBsaWNlbnNvciIsIndhcnJhbnR5IGFuZCBkaXNjbGFpbWVycyBsaWNlbnNvciB3YXJyYW50cyIsImFuZCBkaXNjbGFpbWVycyBsaWNlbnNvciB3YXJyYW50cyB0aGF0IiwiZGlzY2xhaW1lcnMgbGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUiLCJ0byB1c2UgdGhhdCBzb2Z0d2FyZSB0aGlzIiwidXNlIHRoYXQgc29mdHdhcmUgdGhpcyBsaWNlbnNlIiwidGhhdCBzb2Z0d2FyZSB0aGlzIGxpY2Vuc2UgaXMiLCJzb2Z0d2FyZSB0aGlzIGxpY2Vuc2UgaXMgY29weXJpZ2h0Il19LHsibGljZW5zZVRleHRzIjpbIkFjYWRlbWljIEZyZWUgTGljZW5zZVxuXG5WZXJzaW9uIDEuMiBUaGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSBcIk9yaWdpbmFsIFdvcmtcIikgd2hvc2Ugb3duZXIgKHRoZSBcIkxpY2Vuc29yXCIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazpcblxuTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDEuMlxuXG5HcmFudCBvZiBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayAoXCJZb3VcIikgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgbm9uLXN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UgKDEpIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIGRlcml2YXRpdmUgd29ya3MgdGhlcmVvZiwgYW5kICgyKSB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIGRlcml2YXRpdmUgd29ya3MgdGhlcmVvZiwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMuXG5cbkF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gXCJBdHRyaWJ1dGlvbiBOb3RpY2UuXCIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLlxuXG5FeGNsdXNpb25zIGZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIExpY2Vuc29yLlxuXG5XYXJyYW50eSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBpcyBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgdGhhdCB0aGUgT3JpZ2luYWwgV29yayBpcyBkaXN0cmlidXRlZCBieSBMaWNlbnNvciB1bmRlciBhIHZhbGlkIGN1cnJlbnQgbGljZW5zZSBmcm9tIHRoZSBjb3B5cmlnaHQgb3duZXIuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcm9jZWVkaW5nIHNlbnRlbmNlLCB0aGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gXCJBUyBJU1wiIEJBU0lTIGFuZCBXSVRIT1VUIFdBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGhlcmV1bmRlciBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLlxuXG5MaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnkgcGVyc29uIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvciBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgcmVzdWx0aW5nIGZyb20gTGljZW5zb3IncyBuZWdsaWdlbmNlIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LlxuXG5MaWNlbnNlIHRvIFNvdXJjZSBDb2RlLiBUaGUgdGVybSBcIlNvdXJjZSBDb2RlXCIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgaGVyZWJ5IGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSBwdWJsaXNoaW5nIHRoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLlxuXG5NdXR1YWwgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGlmIFlvdSBmaWxlIGEgbGF3c3VpdCBpbiBhbnkgY291cnQgYWxsZWdpbmcgdGhhdCBhbnkgT1NJIENlcnRpZmllZCBvcGVuIHNvdXJjZSBzb2Z0d2FyZSB0aGF0IGlzIGxpY2Vuc2VkIHVuZGVyIGFueSBsaWNlbnNlIGNvbnRhaW5pbmcgdGhpcyBcIk11dHVhbCBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvblwiIGNsYXVzZSBpbmZyaW5nZXMgYW55IHBhdGVudCBjbGFpbXMgdGhhdCBhcmUgZXNzZW50aWFsIHRvIHVzZSB0aGF0IHNvZnR3YXJlLlxuXG5SaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LlxuXG5UaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAyIExhd3JlbmNlIEUuIFJvc2VuLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBsaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBUaGlzIGxpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBleHByZXNzIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBpdHMgY29weXJpZ2h0IG93bmVyLiJdLCJsaWNlbnNlSWRzIjpbIkFGTC0xLjIiXSwia2V5d29yZHMiOlsiMSAyIHRoaXMiLCIyIHRoaXMgYWNhZGVtaWMiLCIxIDIgZ3JhbnQiLCJmb2xsb3dpbmcgY29uZGl0aW9ucyBhdHRyaWJ1dGlvbiIsImNvbmRpdGlvbnMgYXR0cmlidXRpb24gcmlnaHRzIiwib3JpZ2luYWwgd29yayBleGNsdXNpb25zIiwid29yayBleGNsdXNpb25zIGZyb20iLCJ0aGF0IHNvZnR3YXJlIHJpZ2h0Iiwic29mdHdhcmUgcmlnaHQgdG8iLCJ2ZXJzaW9uIDEgMiB0aGlzIiwiMSAyIHRoaXMgYWNhZGVtaWMiLCIyIHRoaXMgYWNhZGVtaWMgZnJlZSIsInZlcnNpb24gMSAyIGdyYW50IiwiMSAyIGdyYW50IG9mIiwidGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGF0dHJpYnV0aW9uIiwiZm9sbG93aW5nIGNvbmRpdGlvbnMgYXR0cmlidXRpb24gcmlnaHRzIiwiY29uZGl0aW9ucyBhdHRyaWJ1dGlvbiByaWdodHMgeW91IiwidGhlIG9yaWdpbmFsIHdvcmsgZXhjbHVzaW9ucyIsIm9yaWdpbmFsIHdvcmsgZXhjbHVzaW9ucyBmcm9tIiwid29yayBleGNsdXNpb25zIGZyb20gbGljZW5zZSIsImxpY2Vuc29yIHdhcnJhbnR5IGFuZCBkaXNjbGFpbWVyIiwidXNlIHRoYXQgc29mdHdhcmUgcmlnaHQiLCJ0aGF0IHNvZnR3YXJlIHJpZ2h0IHRvIiwic29mdHdhcmUgcmlnaHQgdG8gdXNlIiwibGljZW5zZSB2ZXJzaW9uIDEgMiB0aGlzIiwidmVyc2lvbiAxIDIgdGhpcyBhY2FkZW1pYyIsIjEgMiB0aGlzIGFjYWRlbWljIGZyZWUiLCIyIHRoaXMgYWNhZGVtaWMgZnJlZSBsaWNlbnNlIiwidGhpcyBhY2FkZW1pYyBmcmVlIGxpY2Vuc2UgYXBwbGllcyIsImxpY2Vuc2UgdmVyc2lvbiAxIDIgZ3JhbnQiLCJ2ZXJzaW9uIDEgMiBncmFudCBvZiIsIjEgMiBncmFudCBvZiBsaWNlbnNlIiwiMiBncmFudCBvZiBsaWNlbnNlIGxpY2Vuc29yIiwidG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGF0dHJpYnV0aW9uIiwidGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGF0dHJpYnV0aW9uIHJpZ2h0cyIsImZvbGxvd2luZyBjb25kaXRpb25zIGF0dHJpYnV0aW9uIHJpZ2h0cyB5b3UiLCJjb25kaXRpb25zIGF0dHJpYnV0aW9uIHJpZ2h0cyB5b3UgbXVzdCIsIm1vZGlmaWVkIHRoZSBvcmlnaW5hbCB3b3JrIGV4Y2x1c2lvbnMiLCJ0aGUgb3JpZ2luYWwgd29yayBleGNsdXNpb25zIGZyb20iLCJvcmlnaW5hbCB3b3JrIGV4Y2x1c2lvbnMgZnJvbSBsaWNlbnNlIiwid29yayBleGNsdXNpb25zIGZyb20gbGljZW5zZSBncmFudCIsInRoZSBsaWNlbnNvciB3YXJyYW50eSBhbmQgZGlzY2xhaW1lciIsImxpY2Vuc29yIHdhcnJhbnR5IGFuZCBkaXNjbGFpbWVyIG9mIiwidG8gdXNlIHRoYXQgc29mdHdhcmUgcmlnaHQiLCJ1c2UgdGhhdCBzb2Z0d2FyZSByaWdodCB0byIsInRoYXQgc29mdHdhcmUgcmlnaHQgdG8gdXNlIiwic29mdHdhcmUgcmlnaHQgdG8gdXNlIHlvdSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlXG5cbnYuIDIuMCBUaGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSBcIk9yaWdpbmFsIFdvcmtcIikgd2hvc2Ugb3duZXIgKHRoZSBcIkxpY2Vuc29yXCIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazpcblxuTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMFxuXG4gICAxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzO1xuXG4gICAgICBiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKFwiRGVyaXZhdGl2ZSBXb3Jrc1wiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrO1xuXG4gICAgICBjKSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljO1xuXG4gICAgICBkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmRcblxuICAgICAgZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS5cblxuICAgMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy5cblxuICAgMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gXCJTb3VyY2UgQ29kZVwiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGhlcmVieSBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgYnkgcHVibGlzaGluZyB0aGUgYWRkcmVzcyBvZiB0aGF0IGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgaW4gYSBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay5cblxuICAgNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvIGdyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsIHNlbGwgb3Igb2ZmZXIgdG8gc2VsbCBlbWJvZGltZW50cyBvZiBhbnkgcGF0ZW50IGNsYWltcyBvdGhlciB0aGFuIHRoZSBsaWNlbnNlZCBjbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLlxuXG4gICA1KSBUaGlzIHNlY3Rpb24gaW50ZW50aW9uYWxseSBvbWl0dGVkLlxuXG4gICA2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuIFwiQXR0cmlidXRpb24gTm90aWNlLlwiIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay5cblxuICAgNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByb2NlZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiBcIkFTIElTXCIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgaGVyZXVuZGVyIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuXG5cbiAgIDgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueSBwZXJzb24gZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBMaWNlbnNvcidzIG5lZ2xpZ2VuY2UgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuXG5cbiAgIDkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiBZb3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gTm90aGluZyBlbHNlIGJ1dCB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciB0byBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGluIFNlY3Rpb24gMSBoZXJlaW4sIGFuZCBhbnkgYXR0ZW1wdCB0byBkbyBzbyBleGNlcHQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGlzIGV4cHJlc3NseSBwcm9oaWJpdGVkIGJ5IFUuUy4gY29weXJpZ2h0IGxhdywgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBieSBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhlcmVmb3JlLCBieSBleGVyY2lzaW5nIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMSBoZXJlaW4sIFlvdSBpbmRpY2F0ZSBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLlxuXG4gICAxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgKGkpIGFnYWluc3QgTGljZW5zb3Igd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgb3IgKGlpKSBhZ2FpbnN0IGFueSBlbnRpdHkgd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gdGhlIE9yaWdpbmFsIFdvcmsgKGJ1dCBleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpLlxuXG4gICAxMSkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiBvciBzdWl0IHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBpbiB3aGljaCBMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQganVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgdGhlIFUuUy4gQ29weXJpZ2h0IEFjdCwgMTcgVS5TLkMuIMKkIDEwMSBldCBzZXEuLCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAxMikgQXR0b3JuZXlzIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgMTMpIE1pc2NlbGxhbmVvdXMuIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS5cblxuICAgMTQpIERlZmluaXRpb24gb2YgXCJZb3VcIiBpbiBUaGlzIExpY2Vuc2UuIFwiWW91XCIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBcIllvdVwiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbFwiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS5cblxuVGhpcyBsaWNlbnNlIGlzIENvcHlyaWdodCAoQykgMjAwMyBMYXdyZW5jZSBFLiBSb3Nlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4iXSwibGljZW5zZUlkcyI6WyJBRkwtMi4wIl0sImtleXdvcmRzIjpbIjIgMCB0aGlzIGFjYWRlbWljIiwiZnJlZSBsaWNlbnNlIHYgMiAwIiwidiAyIDAgdGhpcyBhY2FkZW1pYyIsIjIgMCB0aGlzIGFjYWRlbWljIGZyZWUiLCJmcmVlIGxpY2Vuc2UgdmVyc2lvbiAyIDAiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZVxuXG52LjIuMSBUaGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSBcIk9yaWdpbmFsIFdvcmtcIikgd2hvc2Ugb3duZXIgKHRoZSBcIkxpY2Vuc29yXCIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazpcblxuTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMVxuXG4gICAxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzO1xuXG4gICAgICBiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKFwiRGVyaXZhdGl2ZSBXb3Jrc1wiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrO1xuXG4gICAgICBjKSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljO1xuXG4gICAgICBkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmRcblxuICAgICAgZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS5cblxuICAgMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy5cblxuICAgMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gXCJTb3VyY2UgQ29kZVwiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGhlcmVieSBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgYnkgcHVibGlzaGluZyB0aGUgYWRkcmVzcyBvZiB0aGF0IGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgaW4gYSBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay5cblxuICAgNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvIGdyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsIHNlbGwgb3Igb2ZmZXIgdG8gc2VsbCBlbWJvZGltZW50cyBvZiBhbnkgcGF0ZW50IGNsYWltcyBvdGhlciB0aGFuIHRoZSBsaWNlbnNlZCBjbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLlxuXG4gICA1KSBUaGlzIHNlY3Rpb24gaW50ZW50aW9uYWxseSBvbWl0dGVkLlxuXG4gICA2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuIFwiQXR0cmlidXRpb24gTm90aWNlLlwiIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay5cblxuICAgNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByb2NlZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiBcIkFTIElTXCIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgaGVyZXVuZGVyIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuXG5cbiAgIDgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueSBwZXJzb24gZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBMaWNlbnNvcidzIG5lZ2xpZ2VuY2UgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuXG5cbiAgIDkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiBZb3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gTm90aGluZyBlbHNlIGJ1dCB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciB0byBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGluIFNlY3Rpb24gMSBoZXJlaW4sIGFuZCBhbnkgYXR0ZW1wdCB0byBkbyBzbyBleGNlcHQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGlzIGV4cHJlc3NseSBwcm9oaWJpdGVkIGJ5IFUuUy4gY29weXJpZ2h0IGxhdywgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBieSBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhlcmVmb3JlLCBieSBleGVyY2lzaW5nIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMSBoZXJlaW4sIFlvdSBpbmRpY2F0ZSBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLlxuXG4gICAxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgYWdhaW5zdCBMaWNlbnNvciBvciBhbnkgbGljZW5zZWUgYWxsZWdpbmcgdGhhdCB0aGUgT3JpZ2luYWwgV29yayBpbmZyaW5nZXMgYSBwYXRlbnQuIFRoaXMgdGVybWluYXRpb24gcHJvdmlzaW9uIHNoYWxsIG5vdCBhcHBseSBmb3IgYW4gYWN0aW9uIGFsbGVnaW5nIHBhdGVudCBpbmZyaW5nZW1lbnQgYnkgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuXG5cbiAgIDExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiB0aGUgVS5TLiBDb3B5cmlnaHQgQWN0LCAxNyBVLlMuQy4gwqcgMTAxIGV0IHNlcS4sIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDEyKSBBdHRvcm5leXMgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3Igc2Vla2luZyBkYW1hZ2VzIHJlbGF0aW5nIHRoZXJldG8sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaCBhY3Rpb24sIGluY2x1ZGluZyBhbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAxMykgTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLlxuXG4gICAxNCkgRGVmaW5pdGlvbiBvZiBcIllvdVwiIGluIFRoaXMgTGljZW5zZS4gXCJZb3VcIiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJjb250cm9sXCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgIDE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LlxuXG5UaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTGF3cmVuY2UgRS4gUm9zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuIl0sImxpY2Vuc2VJZHMiOlsiQUZMLTIuMSJdLCJrZXl3b3JkcyI6WyIxIHRoaXMgYWNhZGVtaWMiLCJ2IDIgMSB0aGlzIiwiMiAxIHRoaXMgYWNhZGVtaWMiLCIxIHRoaXMgYWNhZGVtaWMgZnJlZSIsImZyZWUgbGljZW5zZSB2IDIgMSIsImxpY2Vuc2UgdiAyIDEgdGhpcyIsInYgMiAxIHRoaXMgYWNhZGVtaWMiLCIyIDEgdGhpcyBhY2FkZW1pYyBmcmVlIiwiMSB0aGlzIGFjYWRlbWljIGZyZWUgbGljZW5zZSIsImZyZWUgbGljZW5zZSB2ZXJzaW9uIDIgMSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJBY2FkZW1pYyBGcmVlIExpY2Vuc2UgKFwiQUZMXCIpIHYuIDMuMCBUaGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSBcIk9yaWdpbmFsIFdvcmtcIikgd2hvc2Ugb3duZXIgKHRoZSBcIkxpY2Vuc29yXCIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBsaWNlbnNpbmcgbm90aWNlIGFkamFjZW50IHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazpcblxuTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDMuMFxuXG4gICAxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNvcHlyaWdodCwgdG8gZG8gdGhlIGZvbGxvd2luZzpcblxuICAgICAgYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllcywgZWl0aGVyIGFsb25lIG9yIGFzIHBhcnQgb2YgYSBjb2xsZWN0aXZlIHdvcms7XG5cbiAgICAgIGIpIHRvIHRyYW5zbGF0ZSwgYWRhcHQsIGFsdGVyLCB0cmFuc2Zvcm0sIG1vZGlmeSwgb3IgYXJyYW5nZSB0aGUgT3JpZ2luYWwgV29yaywgdGhlcmVieSBjcmVhdGluZyBkZXJpdmF0aXZlIHdvcmtzIChcIkRlcml2YXRpdmUgV29ya3NcIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaztcblxuICAgICAgYykgdG8gZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYywgdW5kZXIgYW55IGxpY2Vuc2Ugb2YgeW91ciBjaG9pY2UgdGhhdCBkb2VzIG5vdCBjb250cmFkaWN0IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgaW5jbHVkaW5nIExpY2Vuc29yJ3MgcmVzZXJ2ZWQgcmlnaHRzIGFuZCByZW1lZGllcywgaW4gdGhpcyBBY2FkZW1pYyBGcmVlIExpY2Vuc2U7XG5cbiAgICAgIGQpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZFxuXG4gICAgICBlKSB0byBkaXNwbGF5IHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5LlxuXG4gICAyKSBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcGF0ZW50cywgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQgaW1wb3J0IHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzLlxuXG4gICAzKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSBcIlNvdXJjZSBDb2RlXCIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yay5cblxuICAgNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3IgcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbiwgbm90aGluZyBpbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIGFueSBsaWNlbnNlIHRvIExpY2Vuc29yJ3MgdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5LiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgb3IgaW1wb3J0IGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gbGljZW5zZSBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS5cblxuICAgNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gXCJFeHRlcm5hbCBEZXBsb3ltZW50XCIgbWVhbnMgdGhlIHVzZSwgZGlzdHJpYnV0aW9uLCBvciBjb21tdW5pY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhvc2Ugd29ya3MgYXJlIGRpc3RyaWJ1dGVkIG9yIGNvbW11bmljYXRlZCB0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIG5ldHdvcmsuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnRzIG9mIGxpY2Vuc2UgaGVyZXVuZGVyLCBZb3UgbXVzdCB0cmVhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmsgYXMgYSBkaXN0cmlidXRpb24gdW5kZXIgc2VjdGlvbiAxKGMpLlxuXG4gICA2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiBcIkF0dHJpYnV0aW9uIE5vdGljZS5cIiBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuXG5cbiAgIDcpIFdhcnJhbnR5IG9mIFByb3ZlbmFuY2UgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgYW5kIHRoZSBwYXRlbnQgcmlnaHRzIGdyYW50ZWQgaGVyZWluIGJ5IExpY2Vuc29yIGFyZSBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgYXJlIHN1YmxpY2Vuc2VkIHRvIFlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbnRyaWJ1dG9yKHMpIG9mIHRob3NlIGNvcHlyaWdodHMgYW5kIHBhdGVudCByaWdodHMuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiBcIkFTIElTXCIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBub24taW5mcmluZ2VtZW50LCBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byB0aGUgT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLlxuXG4gICA4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnlvbmUgZm9yIGFueSBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLlxuXG4gICA5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYsIGF0IGFueSB0aW1lLCBZb3UgZXhwcmVzc2x5IGFzc2VudGVkIHRvIHRoaXMgTGljZW5zZSwgdGhhdCBhc3NlbnQgaW5kaWNhdGVzIHlvdXIgY2xlYXIgYW5kIGlycmV2b2NhYmxlIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiBZb3UgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGNvbmRpdGlvbnMgeW91ciByaWdodHMgdG8gdW5kZXJ0YWtlIHRoZSBhY3Rpdml0aWVzIGxpc3RlZCBpbiBTZWN0aW9uIDEsIGluY2x1ZGluZyB5b3VyIHJpZ2h0IHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBkb2luZyBzbyB3aXRob3V0IGhvbm9yaW5nIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGlzIHByb2hpYml0ZWQgYnkgY29weXJpZ2h0IGxhdyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGFmZmVjdCBjb3B5cmlnaHQgZXhjZXB0aW9ucyBhbmQgbGltaXRhdGlvbnMgKGluY2x1ZGluZyBcImZhaXIgdXNlXCIgb3IgXCJmYWlyIGRlYWxpbmdcIikuIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSB1cG9uIHlvdXIgZmFpbHVyZSB0byBob25vciB0aGUgY29uZGl0aW9ucyBpbiBTZWN0aW9uIDEoYykuXG5cbiAgIDEwKSBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgYXMgb2YgdGhlIGRhdGUgWW91IGNvbW1lbmNlIGFuIGFjdGlvbiwgaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltLCBhZ2FpbnN0IExpY2Vuc29yIG9yIGFueSBsaWNlbnNlZSBhbGxlZ2luZyB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIGluZnJpbmdlcyBhIHBhdGVudC4gVGhpcyB0ZXJtaW5hdGlvbiBwcm92aXNpb24gc2hhbGwgbm90IGFwcGx5IGZvciBhbiBhY3Rpb24gYWxsZWdpbmcgcGF0ZW50IGluZnJpbmdlbWVudCBieSBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS5cblxuICAgMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIGNvcHlyaWdodCBvciBwYXRlbnQgbGF3IGluIHRoZSBhcHByb3ByaWF0ZSBqdXJpc2RpY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDEyKSBBdHRvcm5leXMnIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgMTMpIE1pc2NlbGxhbmVvdXMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLlxuXG4gICAxNCkgRGVmaW5pdGlvbiBvZiBcIllvdVwiIGluIFRoaXMgTGljZW5zZS4gXCJZb3VcIiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJjb250cm9sXCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgIDE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LlxuXG4gICAxNikgTW9kaWZpY2F0aW9uIG9mIFRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGlzIENvcHlyaWdodCDCqSAyMDA1IExhd3JlbmNlIFJvc2VuLiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSwgb3IgY29tbXVuaWNhdGUgdGhpcyBMaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBwZXJtaXRzIFlvdSB0byBtb2RpZnkgdGhpcyBMaWNlbnNlIGFzIGFwcGxpZWQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gRGVyaXZhdGl2ZSBXb3Jrcy4gSG93ZXZlciwgWW91IG1heSBtb2RpZnkgdGhlIHRleHQgb2YgdGhpcyBMaWNlbnNlIGFuZCBjb3B5LCBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiAodGhlIFwiTW9kaWZpZWQgTGljZW5zZVwiKSBhbmQgYXBwbHkgaXQgdG8gb3RoZXIgb3JpZ2luYWwgd29ya3Mgb2YgYXV0aG9yc2hpcCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogKGkpIFlvdSBtYXkgbm90IGluZGljYXRlIGluIGFueSB3YXkgdGhhdCB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaXMgdGhlIFwiQWNhZGVtaWMgRnJlZSBMaWNlbnNlXCIgb3IgXCJBRkxcIiBhbmQgeW91IG1heSBub3QgdXNlIHRob3NlIG5hbWVzIGluIHRoZSBuYW1lIG9mIHlvdXIgTW9kaWZpZWQgTGljZW5zZTsgKGlpKSBZb3UgbXVzdCByZXBsYWNlIHRoZSBub3RpY2Ugc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggYWJvdmUgd2l0aCB0aGUgbm90aWNlIFwiTGljZW5zZWQgdW5kZXIgXHUwMDNjaW5zZXJ0IHlvdXIgbGljZW5zZSBuYW1lIGhlcmVcdTAwM2VcIiBvciB3aXRoIGEgbm90aWNlIG9mIHlvdXIgb3duIHRoYXQgaXMgbm90IGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhlIG5vdGljZSBpbiB0aGlzIExpY2Vuc2U7IGFuZCAoaWlpKSBZb3UgbWF5IG5vdCBjbGFpbSB0aGF0IHlvdXIgb3JpZ2luYWwgd29ya3MgYXJlIG9wZW4gc291cmNlIHNvZnR3YXJlIHVubGVzcyB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaGFzIGJlZW4gYXBwcm92ZWQgYnkgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKSBhbmQgWW91IGNvbXBseSB3aXRoIGl0cyBsaWNlbnNlIHJldmlldyBhbmQgY2VydGlmaWNhdGlvbiBwcm9jZXNzLiJdLCJsaWNlbnNlSWRzIjpbIkFGTC0zLjAiXSwia2V5d29yZHMiOlsiZnJlZSBsaWNlbnNlIGFmbCIsImxpY2Vuc2UgYWZsIHYiLCJhZmwgdiAzIiwidGhlIHB1YmxpYyB1bmRlciIsInB1YmxpYyB1bmRlciBhbnkiLCJjaG9pY2UgdGhhdCBkb2VzIiwiZG9lcyBub3QgY29udHJhZGljdCIsIm5vdCBjb250cmFkaWN0IHRoZSIsImNvbnRyYWRpY3QgdGhlIHRlcm1zIiwiYW5kIGNvbmRpdGlvbnMgaW5jbHVkaW5nIiwiY29uZGl0aW9ucyBpbmNsdWRpbmcgbGljZW5zb3IiLCJsaWNlbnNvciBzIHJlc2VydmVkIiwicyByZXNlcnZlZCByaWdodHMiLCJyZXNlcnZlZCByaWdodHMgYW5kIiwiYW5kIHJlbWVkaWVzIGluIiwicmVtZWRpZXMgaW4gdGhpcyIsImluIHRoaXMgYWNhZGVtaWMiLCJmcmVlIGxpY2Vuc2UgZCIsImlzIHRoZSBhY2FkZW1pYyIsImZyZWUgbGljZW5zZSBvciIsImxpY2Vuc2Ugb3IgYWZsIiwib3IgYWZsIGFuZCIsImFmbCBhbmQgeW91IiwiYWNhZGVtaWMgZnJlZSBsaWNlbnNlIGFmbCIsImZyZWUgbGljZW5zZSBhZmwgdiIsImxpY2Vuc2UgYWZsIHYgMyIsImFmbCB2IDMgMCIsInYgMyAwIHRoaXMiLCIzIDAgdGhpcyBhY2FkZW1pYyIsImZyZWUgbGljZW5zZSB2ZXJzaW9uIDMiLCJ0byB0aGUgcHVibGljIHVuZGVyIiwidGhlIHB1YmxpYyB1bmRlciBhbnkiLCJwdWJsaWMgdW5kZXIgYW55IGxpY2Vuc2UiLCJ1bmRlciBhbnkgbGljZW5zZSBvZiIsImFueSBsaWNlbnNlIG9mIHlvdXIiLCJ5b3VyIGNob2ljZSB0aGF0IGRvZXMiLCJjaG9pY2UgdGhhdCBkb2VzIG5vdCIsInRoYXQgZG9lcyBub3QgY29udHJhZGljdCIsImRvZXMgbm90IGNvbnRyYWRpY3QgdGhlIiwibm90IGNvbnRyYWRpY3QgdGhlIHRlcm1zIiwiY29udHJhZGljdCB0aGUgdGVybXMgYW5kIiwidGVybXMgYW5kIGNvbmRpdGlvbnMgaW5jbHVkaW5nIiwiYW5kIGNvbmRpdGlvbnMgaW5jbHVkaW5nIGxpY2Vuc29yIiwiY29uZGl0aW9ucyBpbmNsdWRpbmcgbGljZW5zb3IgcyIsImluY2x1ZGluZyBsaWNlbnNvciBzIHJlc2VydmVkIiwibGljZW5zb3IgcyByZXNlcnZlZCByaWdodHMiLCJzIHJlc2VydmVkIHJpZ2h0cyBhbmQiLCJyZXNlcnZlZCByaWdodHMgYW5kIHJlbWVkaWVzIiwicmlnaHRzIGFuZCByZW1lZGllcyBpbiIsImFuZCByZW1lZGllcyBpbiB0aGlzIiwicmVtZWRpZXMgaW4gdGhpcyBhY2FkZW1pYyIsImluIHRoaXMgYWNhZGVtaWMgZnJlZSIsImFjYWRlbWljIGZyZWUgbGljZW5zZSBkIiwiZnJlZSBsaWNlbnNlIGQgdG8iLCJsaWNlbnNlIGlzIHRoZSBhY2FkZW1pYyIsImlzIHRoZSBhY2FkZW1pYyBmcmVlIiwiYWNhZGVtaWMgZnJlZSBsaWNlbnNlIG9yIiwiZnJlZSBsaWNlbnNlIG9yIGFmbCIsImxpY2Vuc2Ugb3IgYWZsIGFuZCIsIm9yIGFmbCBhbmQgeW91IiwiYWZsIGFuZCB5b3UgbWF5IiwiYWNhZGVtaWMgZnJlZSBsaWNlbnNlIGFmbCB2IiwiZnJlZSBsaWNlbnNlIGFmbCB2IDMiLCJsaWNlbnNlIGFmbCB2IDMgMCIsImFmbCB2IDMgMCB0aGlzIiwidiAzIDAgdGhpcyBhY2FkZW1pYyIsIjMgMCB0aGlzIGFjYWRlbWljIGZyZWUiLCJhY2FkZW1pYyBmcmVlIGxpY2Vuc2UgdmVyc2lvbiAzIiwiZnJlZSBsaWNlbnNlIHZlcnNpb24gMyAwIiwid29ya3MgdG8gdGhlIHB1YmxpYyB1bmRlciIsInRvIHRoZSBwdWJsaWMgdW5kZXIgYW55IiwidGhlIHB1YmxpYyB1bmRlciBhbnkgbGljZW5zZSIsInB1YmxpYyB1bmRlciBhbnkgbGljZW5zZSBvZiIsInVuZGVyIGFueSBsaWNlbnNlIG9mIHlvdXIiLCJhbnkgbGljZW5zZSBvZiB5b3VyIGNob2ljZSIsIm9mIHlvdXIgY2hvaWNlIHRoYXQgZG9lcyIsInlvdXIgY2hvaWNlIHRoYXQgZG9lcyBub3QiLCJjaG9pY2UgdGhhdCBkb2VzIG5vdCBjb250cmFkaWN0IiwidGhhdCBkb2VzIG5vdCBjb250cmFkaWN0IHRoZSIsImRvZXMgbm90IGNvbnRyYWRpY3QgdGhlIHRlcm1zIiwibm90IGNvbnRyYWRpY3QgdGhlIHRlcm1zIGFuZCIsImNvbnRyYWRpY3QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIiwidGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGluY2x1ZGluZyIsInRlcm1zIGFuZCBjb25kaXRpb25zIGluY2x1ZGluZyBsaWNlbnNvciIsImFuZCBjb25kaXRpb25zIGluY2x1ZGluZyBsaWNlbnNvciBzIiwiY29uZGl0aW9ucyBpbmNsdWRpbmcgbGljZW5zb3IgcyByZXNlcnZlZCIsImluY2x1ZGluZyBsaWNlbnNvciBzIHJlc2VydmVkIHJpZ2h0cyIsImxpY2Vuc29yIHMgcmVzZXJ2ZWQgcmlnaHRzIGFuZCIsInMgcmVzZXJ2ZWQgcmlnaHRzIGFuZCByZW1lZGllcyIsInJlc2VydmVkIHJpZ2h0cyBhbmQgcmVtZWRpZXMgaW4iLCJyaWdodHMgYW5kIHJlbWVkaWVzIGluIHRoaXMiLCJhbmQgcmVtZWRpZXMgaW4gdGhpcyBhY2FkZW1pYyIsInJlbWVkaWVzIGluIHRoaXMgYWNhZGVtaWMgZnJlZSIsImluIHRoaXMgYWNhZGVtaWMgZnJlZSBsaWNlbnNlIiwidGhpcyBhY2FkZW1pYyBmcmVlIGxpY2Vuc2UgZCIsImFjYWRlbWljIGZyZWUgbGljZW5zZSBkIHRvIiwiZnJlZSBsaWNlbnNlIGQgdG8gcGVyZm9ybSIsIm1vZGlmaWVkIGxpY2Vuc2UgaXMgdGhlIGFjYWRlbWljIiwibGljZW5zZSBpcyB0aGUgYWNhZGVtaWMgZnJlZSIsImlzIHRoZSBhY2FkZW1pYyBmcmVlIGxpY2Vuc2UiLCJ0aGUgYWNhZGVtaWMgZnJlZSBsaWNlbnNlIG9yIiwiYWNhZGVtaWMgZnJlZSBsaWNlbnNlIG9yIGFmbCIsImZyZWUgbGljZW5zZSBvciBhZmwgYW5kIiwibGljZW5zZSBvciBhZmwgYW5kIHlvdSIsIm9yIGFmbCBhbmQgeW91IG1heSIsImFmbCBhbmQgeW91IG1heSBub3QiXX0seyJsaWNlbnNlVGV4dHMiOlsiQUZGRVJPIEdFTkVSQUwgUFVCTElDIExJQ0VOU0VcblxuVmVyc2lvbiAxLCBNYXJjaCAyMDAyXG5cbkNvcHlyaWdodCDCqSAyMDAyIEFmZmVybyBJbmMuXG5cbjUxMCBUaGlyZCBTdHJlZXQgLSBTdWl0ZSAyMjUsIFNhbiBGcmFuY2lzY28sIENBIDk0MTA3LCBVU0FcblxuVGhpcyBsaWNlbnNlIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiBtYWRlIHdpdGggdGhlaXIgcGVybWlzc2lvbi4gU2VjdGlvbiAyKGQpIGhhcyBiZWVuIGFkZGVkIHRvIGNvdmVyIHVzZSBvZiBzb2Z0d2FyZSBvdmVyIGEgY29tcHV0ZXIgbmV0d29yay5cblxuRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLlxuXG5QcmVhbWJsZVxuXG5UaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gQnkgY29udHJhc3QsIHRoZSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiBUaGlzIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiBBZmZlcm8ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8gdXNpbmcgaXQuIChTb21lIG90aGVyIEFmZmVybyBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSBZb3UgY2FuIGFwcGx5IGl0IHRvIHlvdXIgcHJvZ3JhbXMsIHRvby5cblxuV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdCBwcmljZS4gVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuXG5cblRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuXG5cbkZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy5cblxuV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLlxuXG5BbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy5cblxuRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlIHByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUgcHJvZ3JhbSBwcm9wcmlldGFyeS4gVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC5cblxuVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy5cblxuVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OXG5cbiAgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIFRoZSBcIlByb2dyYW1cIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhIFwid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbVwiIG1lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLiAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSBcIm1vZGlmaWNhdGlvblwiLikgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgXCJ5b3VcIi5cblxuICAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiBUaGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4gV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuXG5cbiAgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncyBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLlxuXG4gICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS5cblxuICAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOlxuXG4gICAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS5cblxuICAgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaCBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYSBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlciB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0IGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pXG5cbiAgICAgIGQpIElmIHRoZSBQcm9ncmFtIGFzIHlvdSByZWNlaXZlZCBpdCBpcyBpbnRlbmRlZCB0byBpbnRlcmFjdCB3aXRoIHVzZXJzIHRocm91Z2ggYSBjb21wdXRlciBuZXR3b3JrIGFuZCBpZiwgaW4gdGhlIHZlcnNpb24geW91IHJlY2VpdmVkLCBhbnkgdXNlciBpbnRlcmFjdGluZyB3aXRoIHRoZSBQcm9ncmFtIHdhcyBnaXZlbiB0aGUgb3Bwb3J0dW5pdHkgdG8gcmVxdWVzdCB0cmFuc21pc3Npb24gdG8gdGhhdCB1c2VyIG9mIHRoZSBQcm9ncmFtJ3MgY29tcGxldGUgc291cmNlIGNvZGUsIHlvdSBtdXN0IG5vdCByZW1vdmUgdGhhdCBmYWNpbGl0eSBmcm9tIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgUHJvZ3JhbSBvciB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgbXVzdCBvZmZlciBhbiBlcXVpdmFsZW50IG9wcG9ydHVuaXR5IGZvciBhbGwgdXNlcnMgaW50ZXJhY3Rpbmcgd2l0aCB5b3VyIFByb2dyYW0gdGhyb3VnaCBhIGNvbXB1dGVyIG5ldHdvcmsgdG8gcmVxdWVzdCBpbW1lZGlhdGUgdHJhbnNtaXNzaW9uIGJ5IEhUVFAgb2YgdGhlIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG9mIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiBvciBvdGhlciBkZXJpdmF0aXZlIHdvcmsuXG5cbiAgIFRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuIEJ1dCB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC5cblxuICAgVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS5cblxuICAgSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbSB3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS5cblxuICAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLFxuXG4gICAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91ciBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLFxuXG4gICAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlciB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuIChUaGlzIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pXG5cbiAgIFRoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuXG5cbiAgIElmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMgZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuXG5cbiAgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLlxuXG4gICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuXG5cbiAgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8gdGhpcyBMaWNlbnNlLlxuXG4gICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLlxuXG4gICBJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLlxuXG4gICBJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55IHN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gTWFueSBwZW9wbGUgaGF2ZSBtYWRlIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QgaW1wb3NlIHRoYXQgY2hvaWNlLlxuXG4gICBUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8gYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICA5LiBBZmZlcm8gSW5jLiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy5cblxuICAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCBcImFueSBsYXRlciB2ZXJzaW9uXCIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSBBZmZlcm8sIEluYy4gSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgQWZmZXJvLCBJbmMuXG5cbiAgIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gcmVkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgcHJvZ3JhbSB1bmRlciBhbnkgdmVyc2lvbiBvZiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJ3MgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIG9yIGhpZ2hlciwgc28gbG9uZyBhcyB0aGF0IHZlcnNpb24gb2YgdGhlIEdOVSBHUEwgaW5jbHVkZXMgdGVybXMgYW5kIGNvbmRpdGlvbnMgc3Vic3RhbnRpYWxseSBlcXVpdmFsZW50IHRvIHRob3NlIG9mIHRoaXMgbGljZW5zZS5cblxuICAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IEFmZmVybywgSW5jLiwgd3JpdGUgdG8gdXM7IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuXG5cbiAgIE5PIFdBUlJBTlRZXG5cbiAgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gXCJBUyBJU1wiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uXG5cbiAgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUiBSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4iXSwibGljZW5zZUlkcyI6WyJBR1BMLTEuMC1vci1sYXRlciIsIkFHUEwtMS4wLW9ubHkiLCJBR1BMLTEuMCJdLCJrZXl3b3JkcyI6WyJ2ZXJzaW9uIDEgbWFyY2giLCIxIG1hcmNoIDIwMDIiLCJtYXJjaCAyMDAyIGNvcHlyaWdodCIsImNvcHlyaWdodCAyMDAyIGFmZmVybyIsIjIwMDIgYWZmZXJvIGluYyIsImFmZmVybyBpbmMgNTEwIiwiaW5jIDUxMCB0aGlyZCIsIjUxMCB0aGlyZCBzdHJlZXQiLCJ0aGlyZCBzdHJlZXQgc3VpdGUiLCJzdHJlZXQgc3VpdGUgMjI1Iiwic3VpdGUgMjI1IHNhbiIsIjIyNSBzYW4gZnJhbmNpc2NvIiwic2FuIGZyYW5jaXNjbyBjYSIsImZyYW5jaXNjbyBjYSA5NDEwNyIsImNhIDk0MTA3IHVzYSIsIjk0MTA3IHVzYSB0aGlzIiwidXNhIHRoaXMgbGljZW5zZSIsImlzIGEgbW9kaWZpZWQiLCJmb3VuZGF0aW9uIGluYyBtYWRlIiwiaW5jIG1hZGUgd2l0aCIsIm1hZGUgd2l0aCB0aGVpciIsIndpdGggdGhlaXIgcGVybWlzc2lvbiIsInRoZWlyIHBlcm1pc3Npb24gc2VjdGlvbiIsInBlcm1pc3Npb24gc2VjdGlvbiAyIiwic2VjdGlvbiAyIGQiLCIyIGQgaGFzIiwiZCBoYXMgYmVlbiIsImNvbXB1dGVyIG5ldHdvcmsgZXZlcnlvbmUiLCJuZXR3b3JrIGV2ZXJ5b25lIGlzIiwiY29udHJhc3QgdGhlIGFmZmVybyIsInVzZXJzIHRoaXMgcHVibGljIiwibW9zdCBvZiBhZmZlcm8iLCJvZiBhZmZlcm8gcyIsImFmZmVybyBzIHNvZnR3YXJlIiwic29tZSBvdGhlciBhZmZlcm8iLCJvdGhlciBhZmZlcm8gc29mdHdhcmUiLCJhZmZlcm8gc29mdHdhcmUgaXMiLCJub3QgcHJpY2UgdGhpcyIsInByaWNlIHRoaXMgZ2VuZXJhbCIsIm9mIHRoaXMgYWZmZXJvIiwidGhpcyBhZmZlcm8gZ2VuZXJhbCIsImFuIGFubm91bmNlbWVudCBkIiwiYW5ub3VuY2VtZW50IGQgaWYiLCJyZWNlaXZlZCBpdCBpcyIsImludGVuZGVkIHRvIGludGVyYWN0Iiwid2l0aCB1c2VycyB0aHJvdWdoIiwidXNlcnMgdGhyb3VnaCBhIiwibmV0d29yayBhbmQgaWYiLCJhbmQgaWYgaW4iLCJpZiBpbiB0aGUiLCJpbiB0aGUgdmVyc2lvbiIsInlvdSByZWNlaXZlZCBhbnkiLCJyZWNlaXZlZCBhbnkgdXNlciIsImFueSB1c2VyIGludGVyYWN0aW5nIiwidXNlciBpbnRlcmFjdGluZyB3aXRoIiwiaW50ZXJhY3Rpbmcgd2l0aCB0aGUiLCJ0aGUgcHJvZ3JhbSB3YXMiLCJwcm9ncmFtIHdhcyBnaXZlbiIsIndhcyBnaXZlbiB0aGUiLCJnaXZlbiB0aGUgb3Bwb3J0dW5pdHkiLCJvcHBvcnR1bml0eSB0byByZXF1ZXN0IiwidG8gcmVxdWVzdCB0cmFuc21pc3Npb24iLCJyZXF1ZXN0IHRyYW5zbWlzc2lvbiB0byIsInRyYW5zbWlzc2lvbiB0byB0aGF0IiwidG8gdGhhdCB1c2VyIiwidGhhdCB1c2VyIG9mIiwicHJvZ3JhbSBzIGNvbXBsZXRlIiwibXVzdCBub3QgcmVtb3ZlIiwibm90IHJlbW92ZSB0aGF0IiwicmVtb3ZlIHRoYXQgZmFjaWxpdHkiLCJ0aGF0IGZhY2lsaXR5IGZyb20iLCJmYWNpbGl0eSBmcm9tIHlvdXIiLCJvciB3b3JrIGJhc2VkIiwicHJvZ3JhbSBhbmQgbXVzdCIsImFuZCBtdXN0IG9mZmVyIiwibXVzdCBvZmZlciBhbiIsIm9mZmVyIGFuIGVxdWl2YWxlbnQiLCJhbiBlcXVpdmFsZW50IG9wcG9ydHVuaXR5IiwiZXF1aXZhbGVudCBvcHBvcnR1bml0eSBmb3IiLCJvcHBvcnR1bml0eSBmb3IgYWxsIiwiaW50ZXJhY3Rpbmcgd2l0aCB5b3VyIiwid2l0aCB5b3VyIHByb2dyYW0iLCJ5b3VyIHByb2dyYW0gdGhyb3VnaCIsInByb2dyYW0gdGhyb3VnaCBhIiwibmV0d29yayB0byByZXF1ZXN0IiwidG8gcmVxdWVzdCBpbW1lZGlhdGUiLCJyZXF1ZXN0IGltbWVkaWF0ZSB0cmFuc21pc3Npb24iLCJpbW1lZGlhdGUgdHJhbnNtaXNzaW9uIGJ5IiwidHJhbnNtaXNzaW9uIGJ5IGh0dHAiLCJieSBodHRwIG9mIiwiaHR0cCBvZiB0aGUiLCJvdGhlciBkZXJpdmF0aXZlIHdvcmsiLCJkZXJpdmF0aXZlIHdvcmsgdGhlc2UiLCJ3b3JrIHRoZXNlIHJlcXVpcmVtZW50cyIsImxpY2Vuc2UgOSBhZmZlcm8iLCI5IGFmZmVybyBpbmMiLCJhZmZlcm8gaW5jIG1heSIsImFmZmVybyBpbmMgaWYiLCJhZmZlcm8gaW5jIHlvdSIsImluYyB5b3UgbWF5IiwiY2hvb3NlIHRvIHJlZGlzdHJpYnV0ZSIsInRvIHJlZGlzdHJpYnV0ZSBtb2RpZmllZCIsInJlZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyIsInByb2dyYW0gdW5kZXIgYW55IiwiZm91bmRhdGlvbiBzIGdudSIsInMgZ251IGdlbmVyYWwiLCIzIG9yIGhpZ2hlciIsIm9yIGhpZ2hlciBzbyIsImhpZ2hlciBzbyBsb25nIiwiYXMgdGhhdCB2ZXJzaW9uIiwiZ251IGdwbCBpbmNsdWRlcyIsImdwbCBpbmNsdWRlcyB0ZXJtcyIsImluY2x1ZGVzIHRlcm1zIGFuZCIsImFuZCBjb25kaXRpb25zIHN1YnN0YW50aWFsbHkiLCJjb25kaXRpb25zIHN1YnN0YW50aWFsbHkgZXF1aXZhbGVudCIsInN1YnN0YW50aWFsbHkgZXF1aXZhbGVudCB0byIsImVxdWl2YWxlbnQgdG8gdGhvc2UiLCJsaWNlbnNlIDEwIGlmIiwiY29weXJpZ2h0ZWQgYnkgYWZmZXJvIiwiYWZmZXJvIGluYyB3cml0ZSIsImluYyB3cml0ZSB0byIsIndyaXRlIHRvIHVzIiwidG8gdXMgd2UiLCJ1cyB3ZSBzb21ldGltZXMiLCJsaWNlbnNlIHZlcnNpb24gMSBtYXJjaCIsInZlcnNpb24gMSBtYXJjaCAyMDAyIiwiMSBtYXJjaCAyMDAyIGNvcHlyaWdodCIsIm1hcmNoIDIwMDIgY29weXJpZ2h0IDIwMDIiLCIyMDAyIGNvcHlyaWdodCAyMDAyIGFmZmVybyIsImNvcHlyaWdodCAyMDAyIGFmZmVybyBpbmMiLCIyMDAyIGFmZmVybyBpbmMgNTEwIiwiYWZmZXJvIGluYyA1MTAgdGhpcmQiLCJpbmMgNTEwIHRoaXJkIHN0cmVldCIsIjUxMCB0aGlyZCBzdHJlZXQgc3VpdGUiLCJ0aGlyZCBzdHJlZXQgc3VpdGUgMjI1Iiwic3RyZWV0IHN1aXRlIDIyNSBzYW4iLCJzdWl0ZSAyMjUgc2FuIGZyYW5jaXNjbyIsIjIyNSBzYW4gZnJhbmNpc2NvIGNhIiwic2FuIGZyYW5jaXNjbyBjYSA5NDEwNyIsImZyYW5jaXNjbyBjYSA5NDEwNyB1c2EiLCJjYSA5NDEwNyB1c2EgdGhpcyIsIjk0MTA3IHVzYSB0aGlzIGxpY2Vuc2UiLCJ1c2EgdGhpcyBsaWNlbnNlIGlzIiwibGljZW5zZSBpcyBhIG1vZGlmaWVkIiwiaXMgYSBtb2RpZmllZCB2ZXJzaW9uIiwicHVibGljIGxpY2Vuc2UgY29weXJpZ2h0IGMiLCJsaWNlbnNlIGNvcHlyaWdodCBjIDE5ODkiLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIGluYyBtYWRlIiwiZm91bmRhdGlvbiBpbmMgbWFkZSB3aXRoIiwiaW5jIG1hZGUgd2l0aCB0aGVpciIsIm1hZGUgd2l0aCB0aGVpciBwZXJtaXNzaW9uIiwid2l0aCB0aGVpciBwZXJtaXNzaW9uIHNlY3Rpb24iLCJ0aGVpciBwZXJtaXNzaW9uIHNlY3Rpb24gMiIsInBlcm1pc3Npb24gc2VjdGlvbiAyIGQiLCJzZWN0aW9uIDIgZCBoYXMiLCIyIGQgaGFzIGJlZW4iLCJkIGhhcyBiZWVuIGFkZGVkIiwiYSBjb21wdXRlciBuZXR3b3JrIGV2ZXJ5b25lIiwiY29tcHV0ZXIgbmV0d29yayBldmVyeW9uZSBpcyIsIm5ldHdvcmsgZXZlcnlvbmUgaXMgcGVybWl0dGVkIiwiYnkgY29udHJhc3QgdGhlIGFmZmVybyIsImNvbnRyYXN0IHRoZSBhZmZlcm8gZ2VuZXJhbCIsIml0cyB1c2VycyB0aGlzIHB1YmxpYyIsInVzZXJzIHRoaXMgcHVibGljIGxpY2Vuc2UiLCJ0byBtb3N0IG9mIGFmZmVybyIsIm1vc3Qgb2YgYWZmZXJvIHMiLCJvZiBhZmZlcm8gcyBzb2Z0d2FyZSIsImFmZmVybyBzIHNvZnR3YXJlIGFuZCIsIml0IHNvbWUgb3RoZXIgYWZmZXJvIiwic29tZSBvdGhlciBhZmZlcm8gc29mdHdhcmUiLCJvdGhlciBhZmZlcm8gc29mdHdhcmUgaXMiLCJhZmZlcm8gc29mdHdhcmUgaXMgY292ZXJlZCIsImJ5IHRoZSBnbnUgbGlicmFyeSIsImZyZWVkb20gbm90IHByaWNlIHRoaXMiLCJub3QgcHJpY2UgdGhpcyBnZW5lcmFsIiwicHJpY2UgdGhpcyBnZW5lcmFsIHB1YmxpYyIsInRlcm1zIG9mIHRoaXMgYWZmZXJvIiwib2YgdGhpcyBhZmZlcm8gZ2VuZXJhbCIsInRoaXMgYWZmZXJvIGdlbmVyYWwgcHVibGljIiwicHJpbnQgYW4gYW5ub3VuY2VtZW50IGQiLCJhbiBhbm5vdW5jZW1lbnQgZCBpZiIsImFubm91bmNlbWVudCBkIGlmIHRoZSIsImQgaWYgdGhlIHByb2dyYW0iLCJ5b3UgcmVjZWl2ZWQgaXQgaXMiLCJyZWNlaXZlZCBpdCBpcyBpbnRlbmRlZCIsIml0IGlzIGludGVuZGVkIHRvIiwiaXMgaW50ZW5kZWQgdG8gaW50ZXJhY3QiLCJpbnRlbmRlZCB0byBpbnRlcmFjdCB3aXRoIiwidG8gaW50ZXJhY3Qgd2l0aCB1c2VycyIsImludGVyYWN0IHdpdGggdXNlcnMgdGhyb3VnaCIsIndpdGggdXNlcnMgdGhyb3VnaCBhIiwidXNlcnMgdGhyb3VnaCBhIGNvbXB1dGVyIiwiY29tcHV0ZXIgbmV0d29yayBhbmQgaWYiLCJuZXR3b3JrIGFuZCBpZiBpbiIsImFuZCBpZiBpbiB0aGUiLCJpZiBpbiB0aGUgdmVyc2lvbiIsImluIHRoZSB2ZXJzaW9uIHlvdSIsInZlcnNpb24geW91IHJlY2VpdmVkIGFueSIsInlvdSByZWNlaXZlZCBhbnkgdXNlciIsInJlY2VpdmVkIGFueSB1c2VyIGludGVyYWN0aW5nIl19LHsibGljZW5zZVRleHRzIjpbIkdOVSBBRkZFUk8gR0VORVJBTCBQVUJMSUMgTElDRU5TRVxuXG5WZXJzaW9uIDMsIDE5IE5vdmVtYmVyIDIwMDdcblxuQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiBcdTAwM2NodHRwczovL2ZzZi5vcmcvXHUwMDNlXG5cbkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC5cblxuUHJlYW1ibGVcblxuVGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWUsIGNvcHlsZWZ0IGxpY2Vuc2UgZm9yIHNvZnR3YXJlIGFuZCBvdGhlciBraW5kcyBvZiB3b3Jrcywgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGVuc3VyZSBjb29wZXJhdGlvbiB3aXRoIHRoZSBjb21tdW5pdHkgaW4gdGhlIGNhc2Ugb2YgbmV0d29yayBzZXJ2ZXIgc29mdHdhcmUuXG5cblRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiBCeSBjb250cmFzdCwgb3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZSBzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy5cblxuV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdCBwcmljZS4gT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvciB0aGVtIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy5cblxuRGV2ZWxvcGVycyB0aGF0IHVzZSBvdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS5cblxuQSBzZWNvbmRhcnkgYmVuZWZpdCBvZiBkZWZlbmRpbmcgYWxsIHVzZXJzJyBmcmVlZG9tIGlzIHRoYXQgaW1wcm92ZW1lbnRzIG1hZGUgaW4gYWx0ZXJuYXRlIHZlcnNpb25zIG9mIHRoZSBwcm9ncmFtLCBpZiB0aGV5IHJlY2VpdmUgd2lkZXNwcmVhZCB1c2UsIGJlY29tZSBhdmFpbGFibGUgZm9yIG90aGVyIGRldmVsb3BlcnMgdG8gaW5jb3Jwb3JhdGUuIE1hbnkgZGV2ZWxvcGVycyBvZiBmcmVlIHNvZnR3YXJlIGFyZSBoZWFydGVuZWQgYW5kIGVuY291cmFnZWQgYnkgdGhlIHJlc3VsdGluZyBjb29wZXJhdGlvbi4gSG93ZXZlciwgaW4gdGhlIGNhc2Ugb2Ygc29mdHdhcmUgdXNlZCBvbiBuZXR3b3JrIHNlcnZlcnMsIHRoaXMgcmVzdWx0IG1heSBmYWlsIHRvIGNvbWUgYWJvdXQuIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1ha2luZyBhIG1vZGlmaWVkIHZlcnNpb24gYW5kIGxldHRpbmcgdGhlIHB1YmxpYyBhY2Nlc3MgaXQgb24gYSBzZXJ2ZXIgd2l0aG91dCBldmVyIHJlbGVhc2luZyBpdHMgc291cmNlIGNvZGUgdG8gdGhlIHB1YmxpYy5cblxuVGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgdG8gZW5zdXJlIHRoYXQsIGluIHN1Y2ggY2FzZXMsIHRoZSBtb2RpZmllZCBzb3VyY2UgY29kZSBiZWNvbWVzIGF2YWlsYWJsZSB0byB0aGUgY29tbXVuaXR5LiBJdCByZXF1aXJlcyB0aGUgb3BlcmF0b3Igb2YgYSBuZXR3b3JrIHNlcnZlciB0byBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgbW9kaWZpZWQgdmVyc2lvbiBydW5uaW5nIHRoZXJlIHRvIHRoZSB1c2VycyBvZiB0aGF0IHNlcnZlci4gVGhlcmVmb3JlLCBwdWJsaWMgdXNlIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiwgb24gYSBwdWJsaWNseSBhY2Nlc3NpYmxlIHNlcnZlciwgZ2l2ZXMgdGhlIHB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBtb2RpZmllZCB2ZXJzaW9uLlxuXG5BbiBvbGRlciBsaWNlbnNlLCBjYWxsZWQgdGhlIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBwdWJsaXNoZWQgYnkgQWZmZXJvLCB3YXMgZGVzaWduZWQgdG8gYWNjb21wbGlzaCBzaW1pbGFyIGdvYWxzLiBUaGlzIGlzIGEgZGlmZmVyZW50IGxpY2Vuc2UsIG5vdCBhIHZlcnNpb24gb2YgdGhlIEFmZmVybyBHUEwsIGJ1dCBBZmZlcm8gaGFzIHJlbGVhc2VkIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFmZmVybyBHUEwgd2hpY2ggcGVybWl0cyByZWxpY2Vuc2luZyB1bmRlciB0aGlzIGxpY2Vuc2UuXG5cblRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBmb2xsb3cuXG5cblRFUk1TIEFORCBDT05ESVRJT05TXG5cbiAgIDAuIERlZmluaXRpb25zLlxuXG4gICBcIlRoaXMgTGljZW5zZVwiIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cblxuICAgXCJDb3B5cmlnaHRcIiBhbHNvIG1lYW5zIGNvcHlyaWdodC1saWtlIGxhd3MgdGhhdCBhcHBseSB0byBvdGhlciBraW5kcyBvZiB3b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9yIG1hc2tzLlxuXG4gICBcIlRoZSBQcm9ncmFtXCIgcmVmZXJzIHRvIGFueSBjb3B5cmlnaHRhYmxlIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyBcInlvdVwiLiBcIkxpY2Vuc2Vlc1wiIGFuZCBcInJlY2lwaWVudHNcIiBtYXkgYmUgaW5kaXZpZHVhbHMgb3Igb3JnYW5pemF0aW9ucy5cblxuICAgVG8gXCJtb2RpZnlcIiBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrIGluIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24sIG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZiBhbiBleGFjdCBjb3B5LiBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgXCJtb2RpZmllZCB2ZXJzaW9uXCIgb2YgdGhlIGVhcmxpZXIgd29yayBvciBhIHdvcmsgXCJiYXNlZCBvblwiIHRoZSBlYXJsaWVyIHdvcmsuXG5cbiAgIEEgXCJjb3ZlcmVkIHdvcmtcIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0uXG5cbiAgIFRvIFwicHJvcGFnYXRlXCIgYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dCBwZXJtaXNzaW9uLCB3b3VsZCBtYWtlIHlvdSBkaXJlY3RseSBvciBzZWNvbmRhcmlseSBsaWFibGUgZm9yIGluZnJpbmdlbWVudCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcsIGV4Y2VwdCBleGVjdXRpbmcgaXQgb24gYSBjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuIFByb3BhZ2F0aW9uIGluY2x1ZGVzIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC5cblxuICAgVG8gXCJjb252ZXlcIiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyIHBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoIGEgY29tcHV0ZXIgbmV0d29yaywgd2l0aCBubyB0cmFuc2ZlciBvZiBhIGNvcHksIGlzIG5vdCBjb252ZXlpbmcuXG5cbiAgIEFuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzIFwiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlc1wiIHRvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUgZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpIHRlbGxzIHRoZSB1c2VyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSB3b3JrIChleGNlcHQgdG8gdGhlIGV4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUgd29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBJZiB0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYSBtZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLlxuXG4gICAxLiBTb3VyY2UgQ29kZS5cblxuICAgVGhlIFwic291cmNlIGNvZGVcIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIFwiT2JqZWN0IGNvZGVcIiBtZWFucyBhbnkgbm9uLXNvdXJjZSBmb3JtIG9mIGEgd29yay5cblxuICAgQSBcIlN0YW5kYXJkIEludGVyZmFjZVwiIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbCBzdGFuZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRoZSBjYXNlIG9mIGludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIG9uZSB0aGF0IGlzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLlxuXG4gICBUaGUgXCJTeXN0ZW0gTGlicmFyaWVzXCIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyIHRoYW4gdGhlIHdvcmsgYXMgYSB3aG9sZSwgdGhhdCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBmb3JtIG9mIHBhY2thZ2luZyBhIE1ham9yIENvbXBvbmVudCwgYnV0IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoYXQgTWFqb3IgQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0IE1ham9yIENvbXBvbmVudCwgb3IgdG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3aGljaCBhbiBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtLiBBIFwiTWFqb3IgQ29tcG9uZW50XCIsIGluIHRoaXMgY29udGV4dCwgbWVhbnMgYSBtYWpvciBlc3NlbnRpYWwgY29tcG9uZW50IChrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0gKGlmIGFueSkgb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgd29yayBydW5zLCBvciBhIGNvbXBpbGVyIHVzZWQgdG8gcHJvZHVjZSB0aGUgd29yaywgb3IgYW4gb2JqZWN0IGNvZGUgaW50ZXJwcmV0ZXIgdXNlZCB0byBydW4gaXQuXG5cbiAgIFRoZSBcIkNvcnJlc3BvbmRpbmcgU291cmNlXCIgZm9yIGEgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlIHdvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8gY29udHJvbCB0aG9zZSBhY3Rpdml0aWVzLiBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MgU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZSBwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQgd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW5jbHVkZXMgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHNvdXJjZSBmaWxlcyBmb3IgdGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5IGxpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byByZXF1aXJlLCBzdWNoIGFzIGJ5IGludGltYXRlIGRhdGEgY29tbXVuaWNhdGlvbiBvciBjb250cm9sIGZsb3cgYmV0d2VlbiB0aG9zZVxuXG4gICBzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuXG5cbiAgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgdXNlcnMgY2FuIHJlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS5cblxuICAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0IHNhbWUgd29yay5cblxuICAgMi4gQmFzaWMgUGVybWlzc2lvbnMuXG5cbiAgIEFsbCByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYXJlIGdyYW50ZWQgZm9yIHRoZSB0ZXJtIG9mIGNvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkIGNvbmRpdGlvbnMgYXJlIG1ldC4gVGhpcyBMaWNlbnNlIGV4cGxpY2l0bHkgYWZmaXJtcyB5b3VyIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhIGNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cyBjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gVGhpcyBMaWNlbnNlIGFja25vd2xlZGdlcyB5b3VyIHJpZ2h0cyBvZiBmYWlyIHVzZSBvciBvdGhlciBlcXVpdmFsZW50LCBhcyBwcm92aWRlZCBieSBjb3B5cmlnaHQgbGF3LlxuXG4gICBZb3UgbWF5IG1ha2UsIHJ1biBhbmQgcHJvcGFnYXRlIGNvdmVyZWQgd29ya3MgdGhhdCB5b3UgZG8gbm90IGNvbnZleSwgd2l0aG91dCBjb25kaXRpb25zIHNvIGxvbmcgYXMgeW91ciBsaWNlbnNlIG90aGVyd2lzZSByZW1haW5zIGluIGZvcmNlLiBZb3UgbWF5IGNvbnZleSBjb3ZlcmVkIHdvcmtzIHRvIG90aGVycyBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBoYXZpbmcgdGhlbSBtYWtlIG1vZGlmaWNhdGlvbnMgZXhjbHVzaXZlbHkgZm9yIHlvdSwgb3IgcHJvdmlkZSB5b3Ugd2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluIGNvbnZleWluZyBhbGwgbWF0ZXJpYWwgZm9yIHdoaWNoIHlvdSBkbyBub3QgY29udHJvbCBjb3B5cmlnaHQuIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MgZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbiBhbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YgeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS5cblxuICAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiBTdWJsaWNlbnNpbmcgaXMgbm90IGFsbG93ZWQ7IHNlY3Rpb24gMTAgbWFrZXMgaXQgdW5uZWNlc3NhcnkuXG5cbiAgIDMuIFByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuXG5cbiAgIE5vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIGFydGljbGUgMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9wdGVkIG9uIDIwIERlY2VtYmVyIDE5OTYsIG9yIHNpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2ggbWVhc3VyZXMuXG5cbiAgIFdoZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaCBjaXJjdW12ZW50aW9uIGlzIGVmZmVjdGVkIGJ5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QgdGhlIHdvcmsncyB1c2VycywgeW91ciBvciB0aGlyZCBwYXJ0aWVzJyBsZWdhbCByaWdodHMgdG8gZm9yYmlkIGNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcy5cblxuICAgNC4gQ29udmV5aW5nIFZlcmJhdGltIENvcGllcy5cblxuICAgWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55IG5vbi1wZXJtaXNzaXZlIHRlcm1zIGFkZGVkIGluIGFjY29yZCB3aXRoIHNlY3Rpb24gNyBhcHBseSB0byB0aGUgY29kZTsga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwgcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uXG5cbiAgIFlvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwgYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS5cblxuICAgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy5cblxuICAgWW91IG1heSBjb252ZXkgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBvciB0aGUgbW9kaWZpY2F0aW9ucyB0byBwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczpcblxuICAgICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkIGl0LCBhbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS5cblxuICAgICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRlciBzZWN0aW9uIDcuIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0byBcImtlZXAgaW50YWN0IGFsbCBub3RpY2VzXCIuXG5cbiAgICAgIGMpIFlvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSB3b3JrLCBhcyBhIHdob2xlLCB1bmRlciB0aGlzIExpY2Vuc2UgdG8gYW55b25lIHdobyBjb21lcyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiBUaGlzIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3IGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8gcGVybWlzc2lvbiB0byBsaWNlbnNlIHRoZSB3b3JrIGluIGFueSBvdGhlciB3YXksIGJ1dCBpdCBkb2VzIG5vdCBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LlxuXG4gICAgICBkKSBJZiB0aGUgd29yayBoYXMgaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2VzLCBlYWNoIG11c3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIgd29yayBuZWVkIG5vdCBtYWtlIHRoZW0gZG8gc28uXG5cbiAgIEEgY29tcGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MsIHdoaWNoIGFyZSBub3QgYnkgdGhlaXIgbmF0dXJlIGV4dGVuc2lvbnMgb2YgdGhlIGNvdmVyZWQgd29yaywgYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbiBcImFnZ3JlZ2F0ZVwiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrIGluIGFuIGFnZ3JlZ2F0ZSBkb2VzIG5vdCBjYXVzZSB0aGlzIExpY2Vuc2UgdG8gYXBwbHkgdG8gdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBhZ2dyZWdhdGUuXG5cbiAgIDYuIENvbnZleWluZyBOb24tU291cmNlIEZvcm1zLlxuXG4gICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9ucyA0IGFuZCA1LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0aGUgbWFjaGluZS1yZWFkYWJsZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiBvbmUgb2YgdGhlc2Ugd2F5czpcblxuICAgICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdCAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmaXhlZCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLlxuXG4gICAgICBiKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0IChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYW5kIHZhbGlkIGZvciBhcyBsb25nIGFzIHlvdSBvZmZlciBzcGFyZSBwYXJ0cyBvciBjdXN0b21lciBzdXBwb3J0IGZvciB0aGF0IHByb2R1Y3QgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYSBjb3B5IG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYWxsIHRoZSBzb2Z0d2FyZSBpbiB0aGUgcHJvZHVjdCB0aGF0IGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubyBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHRoaXMgY29udmV5aW5nIG9mIHNvdXJjZSwgb3IgKDIpIGFjY2VzcyB0byBjb3B5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLlxuXG4gICAgICBjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZSB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiBUaGlzIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseSwgYW5kIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIHN1YnNlY3Rpb24gNmIuXG5cbiAgICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlIChncmF0aXMgb3IgZm9yIGEgY2hhcmdlKSwgYW5kIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkgdGhyb3VnaCB0aGUgc2FtZSBwbGFjZSBhdCBubyBmdXJ0aGVyIGNoYXJnZS4gWW91IG5lZWQgbm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gSWYgdGhlIHBsYWNlIHRvIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBtYXkgYmUgb24gYSBkaWZmZXJlbnQgc2VydmVyIChvcGVyYXRlZCBieSB5b3Ugb3IgYSB0aGlyZCBwYXJ0eSkgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSwgeW91IHJlbWFpbiBvYmxpZ2F0ZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0byBzYXRpc2Z5IHRoZXNlIHJlcXVpcmVtZW50cy5cblxuICAgICAgZSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uLCBwcm92aWRlZCB5b3UgaW5mb3JtIG90aGVyIHBlZXJzIHdoZXJlIHRoZSBvYmplY3QgY29kZSBhbmQgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vIGNoYXJnZSB1bmRlciBzdWJzZWN0aW9uIDZkLlxuXG4gICBBIHNlcGFyYWJsZSBwb3J0aW9uIG9mIHRoZSBvYmplY3QgY29kZSwgd2hvc2Ugc291cmNlIGNvZGUgaXMgZXhjbHVkZWQgZnJvbSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYXMgYSBTeXN0ZW0gTGlicmFyeSwgbmVlZCBub3QgYmUgaW5jbHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLlxuXG4gICBBIFwiVXNlciBQcm9kdWN0XCIgaXMgZWl0aGVyICgxKSBhIFwiY29uc3VtZXIgcHJvZHVjdFwiLCB3aGljaCBtZWFucyBhbnkgdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwgb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbiBpbnRvIGEgZHdlbGxpbmcuIEluIGRldGVybWluaW5nIHdoZXRoZXIgYSBwcm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCwgZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuIEZvciBhIHBhcnRpY3VsYXIgcHJvZHVjdCByZWNlaXZlZCBieSBhIHBhcnRpY3VsYXIgdXNlciwgXCJub3JtYWxseSB1c2VkXCIgcmVmZXJzIHRvIGEgdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzIG9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyIGFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gQSBwcm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHByb2R1Y3QgaGFzIHN1YnN0YW50aWFsIGNvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50IHRoZSBvbmx5IHNpZ25pZmljYW50IG1vZGUgb2YgdXNlIG9mIHRoZSBwcm9kdWN0LlxuXG4gICBcIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvblwiIGZvciBhIFVzZXIgUHJvZHVjdCBtZWFucyBhbnkgbWV0aG9kcywgcHJvY2VkdXJlcywgYXV0aG9yaXphdGlvbiBrZXlzLCBvciBvdGhlciBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBpbnN0YWxsIGFuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZyb20gYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGl0cyBDb3JyZXNwb25kaW5nIFNvdXJjZS4gVGhlIGluZm9ybWF0aW9uIG11c3Qgc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QgY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UgbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuXG5cbiAgIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yIHNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzIHBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZSBVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhIGZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uIEJ1dCB0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5IGlmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsIG1vZGlmaWVkIG9iamVjdCBjb2RlIG9uIHRoZSBVc2VyIFByb2R1Y3QgKGZvciBleGFtcGxlLCB0aGUgd29yayBoYXMgYmVlbiBpbnN0YWxsZWQgaW4gUk9NKS5cblxuICAgVGhlIHJlcXVpcmVtZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYSByZXF1aXJlbWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwgd2FycmFudHksIG9yIHVwZGF0ZXMgZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IgdGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQuIEFjY2VzcyB0byBhIG5ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kIGFkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsgb3IgdmlvbGF0ZXMgdGhlIHJ1bGVzIGFuZCBwcm90b2NvbHMgZm9yIGNvbW11bmljYXRpb24gYWNyb3NzIHRoZSBuZXR3b3JrLlxuXG4gICBDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCwgYW5kIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBwcm92aWRlZCwgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBpcyBwdWJsaWNseSBkb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtKSwgYW5kIG11c3QgcmVxdWlyZSBubyBzcGVjaWFsIHBhc3N3b3JkIG9yIGtleSBmb3IgdW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuXG5cbiAgIDcuIEFkZGl0aW9uYWwgVGVybXMuXG5cbiAgIFwiQWRkaXRpb25hbCBwZXJtaXNzaW9uc1wiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLiBBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsIGJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQgdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBhcHBseSBvbmx5IHRvIHBhcnQgb2YgdGhlIFByb2dyYW0sIHRoYXQgcGFydCBtYXkgYmUgdXNlZCBzZXBhcmF0ZWx5IHVuZGVyIHRob3NlIHBlcm1pc3Npb25zLCBidXQgdGhlIGVudGlyZSBQcm9ncmFtIHJlbWFpbnMgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLlxuXG4gICBXaGVuIHlvdSBjb252ZXkgYSBjb3B5IG9mIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIHJlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZiBpdC4gKEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5IGJlIHdyaXR0ZW4gdG8gcmVxdWlyZSB0aGVpciBvd24gcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pIFlvdSBtYXkgcGxhY2UgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLCBmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uXG5cbiAgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOlxuXG4gICAgICBhKSBEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3JcblxuICAgICAgYikgUmVxdWlyaW5nIHByZXNlcnZhdGlvbiBvZiBzcGVjaWZpZWQgcmVhc29uYWJsZSBsZWdhbCBub3RpY2VzIG9yIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyBkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3JcblxuICAgICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvciByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbiByZWFzb25hYmxlIHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9yXG5cbiAgICAgIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IgYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yXG5cbiAgICAgIGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIG9yIHNlcnZpY2UgbWFya3M7IG9yXG5cbiAgICAgIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQgbWF0ZXJpYWwgYnkgYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvciBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uIHRob3NlIGxpY2Vuc29ycyBhbmQgYXV0aG9ycy5cblxuICAgQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQgXCJmdXJ0aGVyIHJlc3RyaWN0aW9uc1wiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiBJZiB0aGUgUHJvZ3JhbSBhcyB5b3UgcmVjZWl2ZWQgaXQsIG9yIGFueSBwYXJ0IG9mIGl0LCBjb250YWlucyBhIG5vdGljZSBzdGF0aW5nIHRoYXQgaXQgaXMgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJtIHRoYXQgaXMgYSBmdXJ0aGVyIHJlc3RyaWN0aW9uLCB5b3UgbWF5IHJlbW92ZSB0aGF0IHRlcm0uIElmIGEgbGljZW5zZSBkb2N1bWVudCBjb250YWlucyBhIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMgTGljZW5zZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoYXQgbGljZW5zZSBkb2N1bWVudCwgcHJvdmlkZWQgdGhhdCB0aGUgZnVydGhlciByZXN0cmljdGlvbiBkb2VzIG5vdCBzdXJ2aXZlIHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLlxuXG4gICBJZiB5b3UgYWRkIHRlcm1zIHRvIGEgY292ZXJlZCB3b3JrIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiwgeW91IG11c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZSBhZGRpdGlvbmFsIHRlcm1zIHRoYXQgYXBwbHkgdG8gdGhvc2UgZmlsZXMsIG9yIGEgbm90aWNlIGluZGljYXRpbmcgd2hlcmUgdG8gZmluZCB0aGUgYXBwbGljYWJsZSB0ZXJtcy5cblxuICAgQWRkaXRpb25hbCB0ZXJtcywgcGVybWlzc2l2ZSBvciBub24tcGVybWlzc2l2ZSwgbWF5IGJlIHN0YXRlZCBpbiB0aGUgZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0ZWQgYXMgZXhjZXB0aW9uczsgdGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LlxuXG4gICA4LiBUZXJtaW5hdGlvbi5cblxuICAgWW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvciBtb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZCBwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuXG5cbiAgIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKSBwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kIGZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLlxuXG4gICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUgcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0IGNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIgeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuXG5cbiAgIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlIGxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2UuIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkgcmVpbnN0YXRlZCwgeW91IGRvIG5vdCBxdWFsaWZ5IHRvIHJlY2VpdmUgbmV3IGxpY2Vuc2VzIGZvciB0aGUgc2FtZSBtYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLlxuXG4gICA5LiBBY2NlcHRhbmNlIE5vdCBSZXF1aXJlZCBmb3IgSGF2aW5nIENvcGllcy5cblxuICAgWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yIHJ1biBhIGNvcHkgb2YgdGhlIFByb2dyYW0uIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yayBvY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiB0byByZWNlaXZlIGEgY29weSBsaWtld2lzZSBkb2VzIG5vdCByZXF1aXJlIGFjY2VwdGFuY2UuIEhvd2V2ZXIsIG5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvciBtb2RpZnkgYW55IGNvdmVyZWQgd29yay4gVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBwcm9wYWdhdGluZyBhIGNvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uXG5cbiAgIDEwLiBBdXRvbWF0aWMgTGljZW5zaW5nIG9mIERvd25zdHJlYW0gUmVjaXBpZW50cy5cblxuICAgRWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3JzLCB0byBydW4sIG1vZGlmeSBhbmQgcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLlxuXG4gICBBbiBcImVudGl0eSB0cmFuc2FjdGlvblwiIGlzIGEgdHJhbnNhY3Rpb24gdHJhbnNmZXJyaW5nIGNvbnRyb2wgb2YgYW4gb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbiBvcmdhbml6YXRpb24sIG9yIG1lcmdpbmcgb3JnYW5pemF0aW9ucy4gSWYgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0IHRyYW5zYWN0aW9uIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIHdvcmsgYWxzbyByZWNlaXZlcyB3aGF0ZXZlciBsaWNlbnNlcyB0byB0aGUgd29yayB0aGUgcGFydHkncyBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCBoYWQgb3IgY291bGQgZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgZnJvbSB0aGUgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QsIGlmIHRoZSBwcmVkZWNlc3NvciBoYXMgaXQgb3IgY2FuIGdldCBpdCB3aXRoIHJlYXNvbmFibGUgZWZmb3J0cy5cblxuICAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkIHVuZGVyIHRoaXMgTGljZW5zZS4gRm9yIGV4YW1wbGUsIHlvdSBtYXkgbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24gKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yIHNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC5cblxuICAgMTEuIFBhdGVudHMuXG5cbiAgIEEgXCJjb250cmlidXRvclwiIGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcyBMaWNlbnNlIG9mIHRoZSBQcm9ncmFtIG9yIGEgd29yayBvbiB3aGljaCB0aGUgUHJvZ3JhbSBpcyBiYXNlZC4gVGhlIHdvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNvbnRyaWJ1dG9yJ3MgXCJjb250cmlidXRvciB2ZXJzaW9uXCIuXG5cbiAgIEEgY29udHJpYnV0b3IncyBcImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zXCIgYXJlIGFsbCBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwgcGVybWl0dGVkIGJ5IHRoaXMgTGljZW5zZSwgb2YgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBpdHMgY29udHJpYnV0b3IgdmVyc2lvbiwgYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZlcnNpb24uIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbFwiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudCBwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kIHByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uXG5cbiAgIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSBcInBhdGVudCBsaWNlbnNlXCIgaXMgYW55IGV4cHJlc3MgYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50IChzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBub3QgdG8gcyB1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuIFRvIFwiZ3JhbnRcIiBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYSBwYXJ0eSBtZWFucyB0byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQgYWdhaW5zdCB0aGUgcGFydHkuXG5cbiAgIElmIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIGtub3dpbmdseSByZWx5aW5nIG9uIGEgcGF0ZW50IGxpY2Vuc2UsIGFuZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgaXMgbm90IGF2YWlsYWJsZSBmb3IgYW55b25lIHRvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEgcHVibGljbHkgYXZhaWxhYmxlIG5ldHdvcmsgc2VydmVyIG9yIG90aGVyIHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFucywgdGhlbiB5b3UgbXVzdCBlaXRoZXIgKDEpIGNhdXNlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB0byBiZSBzbyBhdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlIHBhdGVudCBsaWNlbnNlIGZvciB0aGlzIHBhcnRpY3VsYXIgd29yaywgb3IgKDMpIGFycmFuZ2UsIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSwgdG8gZXh0ZW5kIHRoZSBwYXRlbnRcblxuICAgbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuIFwiS25vd2luZ2x5IHJlbHlpbmdcIiBtZWFucyB5b3UgaGF2ZSBhY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUgY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIHdvdWxkIGluZnJpbmdlIG9uZSBvciBtb3JlIGlkZW50aWZpYWJsZSBwYXRlbnRzIGluIHRoYXQgY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC5cblxuICAgSWYsIHB1cnN1YW50IHRvIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBhIHNpbmdsZSB0cmFuc2FjdGlvbiBvciBhcnJhbmdlbWVudCwgeW91IGNvbnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhIGNvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcyByZWNlaXZpbmcgdGhlIGNvdmVyZWQgd29yayBhdXRob3JpemluZyB0aGVtIHRvIHVzZSwgcHJvcGFnYXRlLCBtb2RpZnkgb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3JrLCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZSB5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZCB3b3JrIGFuZCB3b3JrcyBiYXNlZCBvbiBpdC5cblxuICAgQSBwYXRlbnQgbGljZW5zZSBpcyBcImRpc2NyaW1pbmF0b3J5XCIgaWYgaXQgZG9lcyBub3QgaW5jbHVkZSB3aXRoaW4gdGhlIHNjb3BlIG9mIGl0cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3IgaXMgY29uZGl0aW9uZWQgb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmlnaHRzIHRoYXQgYXJlIHNwZWNpZmljYWxseSBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZCB3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcyBpbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50IHRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nIHRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZSBwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkgcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yayBjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseSBmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdCBjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsIG9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuXG5cbiAgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcgYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkgb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LlxuXG4gICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS5cblxuICAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvciBvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgY29udmV5IGEgY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5XG5cbiAgIG5vdCBjb252ZXkgaXQgYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91IHRvIGNvbGxlY3QgYSByb3lhbHR5IGZvciBmdXJ0aGVyIGNvbnZleWluZyBmcm9tIHRob3NlIHRvIHdob20geW91IGNvbnZleSB0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRoZSBQcm9ncmFtLlxuXG4gICAxMy4gUmVtb3RlIE5ldHdvcmsgSW50ZXJhY3Rpb247IFVzZSB3aXRoIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cblxuICAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBpZiB5b3UgbW9kaWZ5IHRoZSBQcm9ncmFtLCB5b3VyIG1vZGlmaWVkIHZlcnNpb24gbXVzdCBwcm9taW5lbnRseSBvZmZlciBhbGwgdXNlcnMgaW50ZXJhY3Rpbmcgd2l0aCBpdCByZW1vdGVseSB0aHJvdWdoIGEgY29tcHV0ZXIgbmV0d29yayAoaWYgeW91ciB2ZXJzaW9uIHN1cHBvcnRzIHN1Y2ggaW50ZXJhY3Rpb24pIGFuIG9wcG9ydHVuaXR5IHRvIHJlY2VpdmUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHlvdXIgdmVyc2lvbiBieSBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLCB0aHJvdWdoIHNvbWUgc3RhbmRhcmQgb3IgY3VzdG9tYXJ5IG1lYW5zIG9mIGZhY2lsaXRhdGluZyBjb3B5aW5nIG9mIHNvZnR3YXJlLiBUaGlzIENvcnJlc3BvbmRpbmcgU291cmNlIHNoYWxsIGluY2x1ZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbnkgd29yayBjb3ZlcmVkIGJ5IHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhhdCBpcyBpbmNvcnBvcmF0ZWQgcHVyc3VhbnQgdG8gdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGguXG5cbiAgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUgcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNlbnNlZCB1bmRlciB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGludG8gYSBzaW5nbGUgY29tYmluZWQgd29yaywgYW5kIHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuIFRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLCBidXQgdGhlIHdvcmsgd2l0aCB3aGljaCBpdCBpcyBjb21iaW5lZCB3aWxsIHJlbWFpbiBnb3Zlcm5lZCBieSB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuXG4gICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLlxuXG4gICBFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBcIm9yIGFueSBsYXRlciB2ZXJzaW9uXCIgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkIHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLlxuXG4gICBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91IHRvIGNob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZSBQcm9ncmFtLlxuXG4gICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBwZXJtaXNzaW9ucy4gSG93ZXZlciwgbm8gYWRkaXRpb25hbCBvYmxpZ2F0aW9ucyBhcmUgaW1wb3NlZCBvbiBhbnkgYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYSBsYXRlciB2ZXJzaW9uLlxuXG4gICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS5cblxuICAgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNIFwiQVMgSVNcIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLlxuXG4gICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuXG5cbiAgIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuXG5cbiAgIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZCBhYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywgcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzIGFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYSBjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OU1xuXG5Ib3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXNcblxuSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdCBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0IGZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLlxuXG5UbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUgXCJjb3B5cmlnaHRcIiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLlxuXG5cdTAwM2NvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy5cdTAwM2VcblxuQ29weXJpZ2h0IChDKSBcdTAwM2N5ZWFyXHUwMDNlIFx1MDAzY25hbWUgb2YgYXV0aG9yXHUwMDNlXG5cblRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG5Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIFx1MDAzY2h0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvXHUwMDNlLlxuXG5BbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC5cblxuSWYgeW91ciBzb2Z0d2FyZSBjYW4gaW50ZXJhY3Qgd2l0aCB1c2VycyByZW1vdGVseSB0aHJvdWdoIGEgY29tcHV0ZXIgbmV0d29yaywgeW91IHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0aGF0IGl0IHByb3ZpZGVzIGEgd2F5IGZvciB1c2VycyB0byBnZXQgaXRzIHNvdXJjZS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgcHJvZ3JhbSBpcyBhIHdlYiBhcHBsaWNhdGlvbiwgaXRzIGludGVyZmFjZSBjb3VsZCBkaXNwbGF5IGEgXCJTb3VyY2VcIiBsaW5rIHRoYXQgbGVhZHMgdXNlcnMgdG8gYW4gYXJjaGl2ZSBvZiB0aGUgY29kZS4gVGhlcmUgYXJlIG1hbnkgd2F5cyB5b3UgY291bGQgb2ZmZXIgc291cmNlLCBhbmQgZGlmZmVyZW50IHNvbHV0aW9ucyB3aWxsIGJlIGJldHRlciBmb3IgZGlmZmVyZW50IHByb2dyYW1zOyBzZWUgc2VjdGlvbiAxMyBmb3IgdGhlIHNwZWNpZmljIHJlcXVpcmVtZW50cy5cblxuWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgXCJjb3B5cmlnaHQgZGlzY2xhaW1lclwiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLCBhbmQgaG93IHRvIGFwcGx5IGFuZCBmb2xsb3cgdGhlIEdOVSBBR1BMLCBzZWUgXHUwMDNjaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9cdTAwM2UuIl0sImxpY2Vuc2VJZHMiOlsiQUdQTC0zLjAtb3ItbGF0ZXIiLCJBR1BMLTMuMC1vbmx5IiwiQUdQTC0zLjAiXSwia2V5d29yZHMiOlsidmVyc2lvbiAzIDE5IiwiMyAxOSBub3ZlbWJlciIsIjE5IG5vdmVtYmVyIDIwMDciLCJub3ZlbWJlciAyMDA3IGNvcHlyaWdodCIsIm9mIHdvcmtzIHNwZWNpZmljYWxseSIsIndvcmtzIHNwZWNpZmljYWxseSBkZXNpZ25lZCIsImRlc2lnbmVkIHRvIGVuc3VyZSIsInRvIGVuc3VyZSBjb29wZXJhdGlvbiIsImVuc3VyZSBjb29wZXJhdGlvbiB3aXRoIiwiY29vcGVyYXRpb24gd2l0aCB0aGUiLCJ3aXRoIHRoZSBjb21tdW5pdHkiLCJ0aGUgY29tbXVuaXR5IGluIiwiY29tbXVuaXR5IGluIHRoZSIsImNhc2Ugb2YgbmV0d29yayIsIm9mIG5ldHdvcmsgc2VydmVyIiwibmV0d29yayBzZXJ2ZXIgc29mdHdhcmUiLCJzZXJ2ZXIgc29mdHdhcmUgdGhlIiwic29mdHdhcmUgdGhlIGxpY2Vuc2VzIiwiaXRzIHVzZXJzIHdoZW4iLCJ1c2VycyB3aGVuIHdlIiwidGhlc2UgdGhpbmdzIGRldmVsb3BlcnMiLCJ0aGluZ3MgZGV2ZWxvcGVycyB0aGF0IiwidGhhdCB1c2Ugb3VyIiwidXNlIG91ciBnZW5lcmFsIiwicHVibGljIGxpY2Vuc2VzIHByb3RlY3QiLCJsaWNlbnNlcyBwcm90ZWN0IHlvdXIiLCJzb2Z0d2FyZSBhIHNlY29uZGFyeSIsImEgc2Vjb25kYXJ5IGJlbmVmaXQiLCJzZWNvbmRhcnkgYmVuZWZpdCBvZiIsImJlbmVmaXQgb2YgZGVmZW5kaW5nIiwib2YgZGVmZW5kaW5nIGFsbCIsImRlZmVuZGluZyBhbGwgdXNlcnMiLCJhbGwgdXNlcnMgZnJlZWRvbSIsInVzZXJzIGZyZWVkb20gaXMiLCJmcmVlZG9tIGlzIHRoYXQiLCJpcyB0aGF0IGltcHJvdmVtZW50cyIsInRoYXQgaW1wcm92ZW1lbnRzIG1hZGUiLCJpbXByb3ZlbWVudHMgbWFkZSBpbiIsIm1hZGUgaW4gYWx0ZXJuYXRlIiwiaW4gYWx0ZXJuYXRlIHZlcnNpb25zIiwiYWx0ZXJuYXRlIHZlcnNpb25zIG9mIiwicHJvZ3JhbSBpZiB0aGV5IiwiaWYgdGhleSByZWNlaXZlIiwidGhleSByZWNlaXZlIHdpZGVzcHJlYWQiLCJyZWNlaXZlIHdpZGVzcHJlYWQgdXNlIiwid2lkZXNwcmVhZCB1c2UgYmVjb21lIiwidXNlIGJlY29tZSBhdmFpbGFibGUiLCJiZWNvbWUgYXZhaWxhYmxlIGZvciIsImF2YWlsYWJsZSBmb3Igb3RoZXIiLCJmb3Igb3RoZXIgZGV2ZWxvcGVycyIsIm90aGVyIGRldmVsb3BlcnMgdG8iLCJkZXZlbG9wZXJzIHRvIGluY29ycG9yYXRlIiwidG8gaW5jb3Jwb3JhdGUgbWFueSIsImluY29ycG9yYXRlIG1hbnkgZGV2ZWxvcGVycyIsIm1hbnkgZGV2ZWxvcGVycyBvZiIsImRldmVsb3BlcnMgb2YgZnJlZSIsImZyZWUgc29mdHdhcmUgYXJlIiwic29mdHdhcmUgYXJlIGhlYXJ0ZW5lZCIsImFyZSBoZWFydGVuZWQgYW5kIiwiaGVhcnRlbmVkIGFuZCBlbmNvdXJhZ2VkIiwiYW5kIGVuY291cmFnZWQgYnkiLCJlbmNvdXJhZ2VkIGJ5IHRoZSIsImJ5IHRoZSByZXN1bHRpbmciLCJ0aGUgcmVzdWx0aW5nIGNvb3BlcmF0aW9uIiwicmVzdWx0aW5nIGNvb3BlcmF0aW9uIGhvd2V2ZXIiLCJjb29wZXJhdGlvbiBob3dldmVyIGluIiwiaG93ZXZlciBpbiB0aGUiLCJjYXNlIG9mIHNvZnR3YXJlIiwib2Ygc29mdHdhcmUgdXNlZCIsInNvZnR3YXJlIHVzZWQgb24iLCJ1c2VkIG9uIG5ldHdvcmsiLCJvbiBuZXR3b3JrIHNlcnZlcnMiLCJuZXR3b3JrIHNlcnZlcnMgdGhpcyIsInNlcnZlcnMgdGhpcyByZXN1bHQiLCJ0aGlzIHJlc3VsdCBtYXkiLCJyZXN1bHQgbWF5IGZhaWwiLCJtYXkgZmFpbCB0byIsImZhaWwgdG8gY29tZSIsInRvIGNvbWUgYWJvdXQiLCJjb21lIGFib3V0IHRoZSIsImFib3V0IHRoZSBnbnUiLCJsaWNlbnNlIHBlcm1pdHMgbWFraW5nIiwicGVybWl0cyBtYWtpbmcgYSIsIm1ha2luZyBhIG1vZGlmaWVkIiwidmVyc2lvbiBhbmQgbGV0dGluZyIsImFuZCBsZXR0aW5nIHRoZSIsImxldHRpbmcgdGhlIHB1YmxpYyIsInB1YmxpYyBhY2Nlc3MgaXQiLCJhY2Nlc3MgaXQgb24iLCJvbiBhIHNlcnZlciIsImEgc2VydmVyIHdpdGhvdXQiLCJzZXJ2ZXIgd2l0aG91dCBldmVyIiwid2l0aG91dCBldmVyIHJlbGVhc2luZyIsImV2ZXIgcmVsZWFzaW5nIGl0cyIsInJlbGVhc2luZyBpdHMgc291cmNlIiwicHVibGljIHRoZSBnbnUiLCJpcyBkZXNpZ25lZCBzcGVjaWZpY2FsbHkiLCJkZXNpZ25lZCBzcGVjaWZpY2FsbHkgdG8iLCJzcGVjaWZpY2FsbHkgdG8gZW5zdXJlIiwidGhhdCBpbiBzdWNoIiwic3VjaCBjYXNlcyB0aGUiLCJjYXNlcyB0aGUgbW9kaWZpZWQiLCJ0aGUgbW9kaWZpZWQgc291cmNlIiwic291cmNlIGNvZGUgYmVjb21lcyIsImNvZGUgYmVjb21lcyBhdmFpbGFibGUiLCJiZWNvbWVzIGF2YWlsYWJsZSB0byIsImNvbW11bml0eSBpdCByZXF1aXJlcyIsIml0IHJlcXVpcmVzIHRoZSIsInJlcXVpcmVzIHRoZSBvcGVyYXRvciIsIm9wZXJhdG9yIG9mIGEiLCJvZiBhIG5ldHdvcmsiLCJuZXR3b3JrIHNlcnZlciB0byIsInNlcnZlciB0byBwcm92aWRlIiwibW9kaWZpZWQgdmVyc2lvbiBydW5uaW5nIiwidmVyc2lvbiBydW5uaW5nIHRoZXJlIiwicnVubmluZyB0aGVyZSB0byIsInRoZXJlIHRvIHRoZSIsInVzZXJzIG9mIHRoYXQiLCJvZiB0aGF0IHNlcnZlciIsInRoYXQgc2VydmVyIHRoZXJlZm9yZSIsInNlcnZlciB0aGVyZWZvcmUgcHVibGljIiwidGhlcmVmb3JlIHB1YmxpYyB1c2UiLCJwdWJsaWMgdXNlIG9mIiwibW9kaWZpZWQgdmVyc2lvbiBvbiIsInZlcnNpb24gb24gYSIsInB1YmxpY2x5IGFjY2Vzc2libGUgc2VydmVyIiwiYWNjZXNzaWJsZSBzZXJ2ZXIgZ2l2ZXMiLCJzZXJ2ZXIgZ2l2ZXMgdGhlIiwiZ2l2ZXMgdGhlIHB1YmxpYyIsIm1vZGlmaWVkIHZlcnNpb24gYW4iLCJ2ZXJzaW9uIGFuIG9sZGVyIiwiYW4gb2xkZXIgbGljZW5zZSIsIm9sZGVyIGxpY2Vuc2UgY2FsbGVkIiwibGljZW5zZSBjYWxsZWQgdGhlIiwiY2FsbGVkIHRoZSBhZmZlcm8iLCJsaWNlbnNlIGFuZCBwdWJsaXNoZWQiLCJhbmQgcHVibGlzaGVkIGJ5IiwiYnkgYWZmZXJvIHdhcyIsImFmZmVybyB3YXMgZGVzaWduZWQiLCJ3YXMgZGVzaWduZWQgdG8iLCJkZXNpZ25lZCB0byBhY2NvbXBsaXNoIiwidG8gYWNjb21wbGlzaCBzaW1pbGFyIiwiYWNjb21wbGlzaCBzaW1pbGFyIGdvYWxzIiwic2ltaWxhciBnb2FscyB0aGlzIiwiZ29hbHMgdGhpcyBpcyIsImlzIGEgZGlmZmVyZW50IiwiZGlmZmVyZW50IGxpY2Vuc2Ugbm90IiwibGljZW5zZSBub3QgYSIsIm5vdCBhIHZlcnNpb24iLCJhZmZlcm8gZ3BsIGJ1dCIsImdwbCBidXQgYWZmZXJvIiwiYnV0IGFmZmVybyBoYXMiLCJhZmZlcm8gaGFzIHJlbGVhc2VkIiwiaGFzIHJlbGVhc2VkIGEiLCJyZWxlYXNlZCBhIG5ldyIsImFmZmVybyBncGwgd2hpY2giLCJncGwgd2hpY2ggcGVybWl0cyIsIndoaWNoIHBlcm1pdHMgcmVsaWNlbnNpbmciLCJwZXJtaXRzIHJlbGljZW5zaW5nIHVuZGVyIiwicmVsaWNlbnNpbmcgdW5kZXIgdGhpcyIsImxpY2Vuc2UgdGhlIHByZWNpc2UiLCJub3QgdG8gcyIsInRvIHMgdWUiLCJzIHVlIGZvciIsInVlIGZvciBwYXRlbnQiLCJwcm9ncmFtIDEzIHJlbW90ZSIsIjEzIHJlbW90ZSBuZXR3b3JrIiwicmVtb3RlIG5ldHdvcmsgaW50ZXJhY3Rpb24iLCJuZXR3b3JrIGludGVyYWN0aW9uIHVzZSIsImludGVyYWN0aW9uIHVzZSB3aXRoIiwidGhlIHByb2dyYW0geW91ciIsInByb2dyYW0geW91ciBtb2RpZmllZCIsInZlcnNpb24gbXVzdCBwcm9taW5lbnRseSIsIm11c3QgcHJvbWluZW50bHkgb2ZmZXIiLCJwcm9taW5lbnRseSBvZmZlciBhbGwiLCJvZmZlciBhbGwgdXNlcnMiLCJpbnRlcmFjdGluZyB3aXRoIGl0Iiwid2l0aCBpdCByZW1vdGVseSIsIml0IHJlbW90ZWx5IHRocm91Z2giLCJjb21wdXRlciBuZXR3b3JrIGlmIiwibmV0d29yayBpZiB5b3VyIiwiaWYgeW91ciB2ZXJzaW9uIiwieW91ciB2ZXJzaW9uIHN1cHBvcnRzIiwidmVyc2lvbiBzdXBwb3J0cyBzdWNoIiwic3VwcG9ydHMgc3VjaCBpbnRlcmFjdGlvbiIsInN1Y2ggaW50ZXJhY3Rpb24gYW4iLCJpbnRlcmFjdGlvbiBhbiBvcHBvcnR1bml0eSIsImFuIG9wcG9ydHVuaXR5IHRvIiwib3Bwb3J0dW5pdHkgdG8gcmVjZWl2ZSIsInJlY2VpdmUgdGhlIGNvcnJlc3BvbmRpbmciLCJzb3VyY2Ugb2YgeW91ciIsInlvdXIgdmVyc2lvbiBieSIsInZlcnNpb24gYnkgcHJvdmlkaW5nIiwiYnkgcHJvdmlkaW5nIGFjY2VzcyIsIm5vIGNoYXJnZSB0aHJvdWdoIiwiY2hhcmdlIHRocm91Z2ggc29tZSIsInRocm91Z2ggc29tZSBzdGFuZGFyZCIsIm1lYW5zIG9mIGZhY2lsaXRhdGluZyIsIm9mIGZhY2lsaXRhdGluZyBjb3B5aW5nIiwiZmFjaWxpdGF0aW5nIGNvcHlpbmcgb2YiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy5cblxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBhbnkgZm9ybSBvZiB0aGlzIG1hdGVyaWFsIGFuZCBhbnkgcHJvZHVjdCB0aGVyZW9mIGluY2x1ZGluZyBzb2Z0d2FyZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCBhbG9uZyB3aXRoIGFueSByZWxhdGVkIGRvY3VtZW50YXRpb24sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24gKFwidGhpcyBtYXRlcmlhbFwiKSwgaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cblJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBvZiBhbnkgc29mdHdhcmUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGFsbCB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgYXMgcGFydCBvZiB0aGUgY29kZS5cblxuUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG9mIGFueSBzb2Z0d2FyZSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgYWxsIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBpbiBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMuXG5cbk5laXRoZXIgdGhlIG5hbWVzIG5vciB0cmFkZW1hcmtzIG9mIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gb3IgYW55IGNvcHlyaWdodCBob2xkZXJzIG9yIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgbWF0ZXJpYWwgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cbk5vdGljZSBhYm91dCBVLlMuIEdvdmVybm1lbnQgcmVzdHJpY3RlZCByaWdodHM6IFRoaXMgbWF0ZXJpYWwgaXMgcHJvdmlkZWQgd2l0aCBcIlJFU1RSSUNURUQgUklHSFRTLlwiIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZSBieSB0aGUgVS5TLiBHb3Zlcm5tZW50IGlzIHN1YmplY3QgdG8gdGhlIGZ1bGwgZXh0ZW50IG9mIHJlc3RyaWN0aW9ucyBzZXQgZm9ydGggaW4gRkFSNTIuMjI3IGFuZCBERkFSUzI1Mi4yMjcgZXQgc2VxLiwgb3IgYW55IHN1Y2Nlc3NvciBvciBhcHBsaWNhYmxlIHJlZ3VsYXRpb25zLiBVc2Ugb2YgdGhpcyBtYXRlcmlhbCBieSB0aGUgVS5TLiBHb3Zlcm5tZW50IGNvbnN0aXR1dGVzIGFja25vd2xlZGdtZW50IG9mIHRoZSBwcm9wcmlldGFyeSByaWdodHMgb2YgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiBhbmQgYW55IGNvcHlyaWdodCBob2xkZXJzIGFuZCBjb250cmlidXRvcnMuXG5cbkFOWSBCUkVBQ0ggT0YgQU5ZIFRFUk0gT0YgVEhJUyBMSUNFTlNFIFNIQUxMIFJFU1VMVCBJTiBUSEUgSU1NRURJQVRFIFJFVk9DQVRJT04gT0YgQUxMIFJJR0hUUyBUTyBSRURJU1RSSUJVVEUsIEFDQ0VTUyBPUiBVU0UgVEhJUyBNQVRFUklBTC5cblxuVEhJUyBNQVRFUklBTCBJUyBQUk9WSURFRCBCWSBBRFZBTkNFRCBNSUNSTyBERVZJQ0VTLCBJTkMuIEFORCBBTlkgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgSU4gSVRTIENVUlJFTlQgQ09ORElUSU9OIEFORCBXSVRIT1VUIEFOWSBSRVBSRVNFTlRBVElPTlMsIEdVQVJBTlRFRSwgT1IgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgT1IgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFNVUFBPUlQsIElOREVNTklUWSwgRVJST1IgRlJFRSBPUiBVTklOVEVSUlVQVEVEIE9QRVJBVElPTiwgT1IgVEhBVCBJVCBJUyBGUkVFIEZST00gREVGRUNUUyBPUiBWSVJVU0VTLiBBTEwgT0JMSUdBVElPTlMgQVJFIEhFUkVCWSBESVNDTEFJTUVEIC0gV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVELCBPUiBTVEFUVVRPUlkgLSBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQUNDVVJBQ1ksIENPTVBMRVRFTkVTUywgT1BFUkFCSUxJVFksIFFVQUxJVFkgT0YgU0VSVklDRSwgT1IgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgQURWQU5DRUQgTUlDUk8gREVWSUNFUywgSU5DLiBPUiBBTlkgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIFBVTklUSVZFLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBSRVZFTlVFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIE9SIEJBU0VEIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZIEFSSVNJTkcgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgTUFURVJJQUwsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIFRIRSBFTlRJUkUgQU5EIEFHR1JFR0FURSBMSUFCSUxJVFkgT0YgQURWQU5DRUQgTUlDUk8gREVWSUNFUywgSU5DLiBBTkQgQU5ZIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgU0hBTEwgTk9UIEVYQ0VFRCBURU4gRE9MTEFSUyAoVVMgJDEwLjAwKS4gQU5ZT05FIFJFRElTVFJJQlVUSU5HIE9SIEFDQ0VTU0lORyBPUiBVU0lORyBUSElTIE1BVEVSSUFMIEFDQ0VQVFMgVEhJUyBBTExPQ0FUSU9OIE9GIFJJU0sgQU5EIEFHUkVFUyBUTyBSRUxFQVNFIEFEVkFOQ0VEIE1JQ1JPIERFVklDRVMsIElOQy4gQU5EIEFOWSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEZST00gQU5ZIEFORCBBTEwgTElBQklMSVRJRVMsIE9CTElHQVRJT05TLCBDTEFJTVMsIE9SIERFTUFORFMgSU4gRVhDRVNTIE9GIFRFTiBET0xMQVJTIChVUyAkMTAuMDApLiBUSEUgRk9SRUdPSU5HIEFSRSBFU1NFTlRJQUwgVEVSTVMgT0YgVEhJUyBMSUNFTlNFIEFORCwgSUYgQU5ZIE9GIFRIRVNFIFRFUk1TIEFSRSBDT05TVFJVRUQgQVMgVU5FTkZPUkNFQUJMRSwgRkFJTCBJTiBFU1NFTlRJQUwgUFVSUE9TRSwgT1IgQkVDT01FIFZPSUQgT1IgREVUUklNRU5UQUwgVE8gQURWQU5DRUQgTUlDUk8gREVWSUNFUywgSU5DLiBPUiBBTlkgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEZPUiBBTlkgUkVBU09OLCBUSEVOIEFMTCBSSUdIVFMgVE8gUkVESVNUUklCVVRFLCBBQ0NFU1MgT1IgVVNFIFRISVMgTUFURVJJQUwgU0hBTEwgVEVSTUlOQVRFIElNTUVESUFURUxZLiBNT1JFT1ZFUiwgVEhFIEZPUkVHT0lORyBTSEFMTCBTVVJWSVZFIEFOWSBFWFBJUkFUSU9OIE9SIFRFUk1JTkFUSU9OIE9GIFRISVMgTElDRU5TRSBPUiBBTlkgQUdSRUVNRU5UIE9SIEFDQ0VTUyBPUiBVU0UgUkVMQVRFRCBUTyBUSElTIE1BVEVSSUFMLlxuXG5OT1RJQ0UgSVMgSEVSRUJZIFBST1ZJREVELCBBTkQgQlkgUkVESVNUUklCVVRJTkcgT1IgQUNDRVNTSU5HIE9SIFVTSU5HIFRISVMgTUFURVJJQUwgU1VDSCBOT1RJQ0UgSVMgQUNLTk9XTEVER0VELCBUSEFUIFRISVMgTUFURVJJQUwgTUFZIEJFIFNVQkpFQ1QgVE8gUkVTVFJJQ1RJT05TIFVOREVSIFRIRSBMQVdTIEFORCBSRUdVTEFUSU9OUyBPRiBUSEUgVU5JVEVEIFNUQVRFUyBPUiBPVEhFUiBDT1VOVFJJRVMsIFdISUNIIElOQ0xVREUgQlVUIEFSRSBOT1QgTElNSVRFRCBUTywgVS5TLiBFWFBPUlQgQ09OVFJPTCBMQVdTIFNVQ0ggQVMgVEhFIEVYUE9SVCBBRE1JTklTVFJBVElPTiBSRUdVTEFUSU9OUyBBTkQgTkFUSU9OQUwgU0VDVVJJVFkgQ09OVFJPTFMgQVMgREVGSU5FRCBUSEVSRVVOREVSLCBBUyBXRUxMIEFTIFNUQVRFIERFUEFSVE1FTlQgQ09OVFJPTFMgVU5ERVIgVEhFIFUuUy4gTVVOSVRJT05TIExJU1QuIFRISVMgTUFURVJJQUwgTUFZIE5PVCBCRSBVU0VELCBSRUxFQVNFRCwgVFJBTlNGRVJSRUQsIElNUE9SVEVELCBFWFBPUlRFRCBBTkQvT1IgUkUtIEVYUE9SVEVEIElOIEFOWSBNQU5ORVIgUFJPSElCSVRFRCBVTkRFUiBBTlkgQVBQTElDQUJMRSBMQVdTLCBJTkNMVURJTkcgVS5TLiBFWFBPUlQgQ09OVFJPTCBMQVdTIFJFR0FSRElORyBTUEVDSUZJQ0FMTFkgREVTSUdOQVRFRCBQRVJTT05TLCBDT1VOVFJJRVMgQU5EIE5BVElPTkFMUyBPRiBDT1VOVFJJRVMgU1VCSkVDVCBUTyBOQVRJT05BTCBTRUNVUklUWSBDT05UUk9MUy4gTU9SRU9WRVIsIFRIRSBGT1JFR09JTkcgU0hBTEwgU1VSVklWRSBBTlkgRVhQSVJBVElPTiBPUiBURVJNSU5BVElPTiBPRiBBTlkgTElDRU5TRSBPUiBBR1JFRU1FTlQgT1IgQUNDRVNTIE9SIFVTRSBSRUxBVEVEIFRPIFRISVMgTUFURVJJQUwuXG5cblRoaXMgbGljZW5zZSBmb3JtcyB0aGUgZW50aXJlIGFncmVlbWVudCByZWdhcmRpbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZiBhbmQgc3VwZXJzZWRlcyBhbGwgcHJvcG9zYWxzIGFuZCBwcmlvciBkaXNjdXNzaW9ucyBhbmQgd3JpdGluZ3MgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdGhlcmV0by4gVGhpcyBsaWNlbnNlIGRvZXMgbm90IGFmZmVjdCBhbnkgb3duZXJzaGlwLCByaWdodHMsIHRpdGxlLCBvciBpbnRlcmVzdCBpbiwgb3IgcmVsYXRpbmcgdG8sIHRoaXMgbWF0ZXJpYWwuIE5vIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBjYW4gYmUgbW9kaWZpZWQgb3Igd2FpdmVkLCBhbmQgbm8gYnJlYWNoIG9mIHRoaXMgbGljZW5zZSBjYW4gYmUgZXhjdXNlZCwgdW5sZXNzIGRvbmUgc28gaW4gYSB3cml0aW5nIHNpZ25lZCBieSBhbGwgYWZmZWN0ZWQgcGFydGllcy4gRWFjaCB0ZXJtIG9mIHRoaXMgbGljZW5zZSBpcyBzZXBhcmF0ZWx5IGVuZm9yY2VhYmxlLiBJZiBhbnkgdGVybSBvZiB0aGlzIGxpY2Vuc2UgaXMgZGV0ZXJtaW5lZCB0byBiZSBvciBiZWNvbWVzIHVuZW5mb3JjZWFibGUgb3IgaWxsZWdhbCwgc3VjaCB0ZXJtIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgaW4gb3JkZXIgZm9yIHRoaXMgbGljZW5zZSB0byByZW1haW4gaW4gZWZmZWN0IGluIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMgYXMgbW9kaWZpZWQgYnkgc3VjaCByZWZvcm1hdGlvbi4gVGhpcyBsaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBUZXhhcyB3aXRob3V0IHJlZ2FyZCB0byBydWxlcyBvbiBjb25mbGljdHMgb2YgbGF3IG9mIGFueSBzdGF0ZSBvciBqdXJpc2RpY3Rpb24gb3IgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcy4gQWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIHRoaXMgbGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGZlZGVyYWwgYW5kIHN0YXRlIGNvdXJ0cyBpbiBBdXN0aW4sIFRleGFzLCBhbmQgYWxsIGRlZmVuc2VzIGFyZSBoZXJlYnkgd2FpdmVkIGNvbmNlcm5pbmcgcGVyc29uYWwganVyaXNkaWN0aW9uIGFuZCB2ZW51ZSBvZiB0aGVzZSBjb3VydHMuIl0sImxpY2Vuc2VJZHMiOlsiQU1EUExQQSJdLCJrZXl3b3JkcyI6WyJjIDIwMDYgMjAwNyIsIjIwMDYgMjAwNyBhZHZhbmNlZCIsIjIwMDcgYWR2YW5jZWQgbWljcm8iLCJkZXZpY2VzIGluYyBhbGwiLCJ0aGlzIG1hdGVyaWFsIGFuZCIsImFuZCBhbnkgcHJvZHVjdCIsImFueSBwcm9kdWN0IHRoZXJlb2YiLCJwcm9kdWN0IHRoZXJlb2YgaW5jbHVkaW5nIiwidGhlcmVvZiBpbmNsdWRpbmcgc29mdHdhcmUiLCJpbmNsdWRpbmcgc29mdHdhcmUgaW4iLCJiaW5hcnkgZm9ybXMgYWxvbmciLCJmb3JtcyBhbG9uZyB3aXRoIiwid2l0aCBhbnkgcmVsYXRlZCIsInJlbGF0ZWQgZG9jdW1lbnRhdGlvbiB3aXRoIiwibW9kaWZpY2F0aW9uIHRoaXMgbWF0ZXJpYWwiLCJtYXRlcmlhbCBpcyBwZXJtaXR0ZWQiLCJzb2Z0d2FyZSBtdXN0IHJldGFpbiIsImxpY2Vuc2UgYXMgcGFydCIsInRoZSBjb2RlIHJlZGlzdHJpYnV0aW9ucyIsImNvZGUgcmVkaXN0cmlidXRpb25zIGluIiwiYmluYXJ5IGZvcm0gb2YiLCJzb2Z0d2FyZSBtdXN0IHJlcHJvZHVjZSIsIm90aGVyIG1hdGVyaWFscyBuZWl0aGVyIiwibWF0ZXJpYWxzIG5laXRoZXIgdGhlIiwidGhlIG5hbWVzIG5vciIsIm5hbWVzIG5vciB0cmFkZW1hcmtzIiwibm9yIHRyYWRlbWFya3Mgb2YiLCJ0cmFkZW1hcmtzIG9mIGFkdmFuY2VkIiwib3IgY29udHJpYnV0b3JzIG1heSIsImZyb20gdGhpcyBtYXRlcmlhbCIsInRoaXMgbWF0ZXJpYWwgd2l0aG91dCIsIm1hdGVyaWFsIHdpdGhvdXQgc3BlY2lmaWMiLCJ3cml0dGVuIHBlcm1pc3Npb24gbm90aWNlIiwicGVybWlzc2lvbiBub3RpY2UgYWJvdXQiLCJub3RpY2UgYWJvdXQgdSIsImFib3V0IHUgcyIsInMgZ292ZXJubWVudCByZXN0cmljdGVkIiwiZ292ZXJubWVudCByZXN0cmljdGVkIHJpZ2h0cyIsInJlc3RyaWN0ZWQgcmlnaHRzIHRoaXMiLCJyaWdodHMgdGhpcyBtYXRlcmlhbCIsInJlc3RyaWN0ZWQgcmlnaHRzIHVzZSIsInJpZ2h0cyB1c2UgZHVwbGljYXRpb24iLCJmdWxsIGV4dGVudCBvZiIsImV4dGVudCBvZiByZXN0cmljdGlvbnMiLCJvZiByZXN0cmljdGlvbnMgc2V0IiwiZm9ydGggaW4gZmFyNTIiLCJpbiBmYXI1MiAyMjciLCJmYXI1MiAyMjcgYW5kIiwiMjI3IGFuZCBkZmFyczI1MiIsImFuZCBkZmFyczI1MiAyMjciLCJkZmFyczI1MiAyMjcgZXQiLCIyMjcgZXQgc2VxIiwiZXQgc2VxIG9yIiwic2VxIG9yIGFueSIsIm9yIGFueSBzdWNjZXNzb3IiLCJhbnkgc3VjY2Vzc29yIG9yIiwic3VjY2Vzc29yIG9yIGFwcGxpY2FibGUiLCJvciBhcHBsaWNhYmxlIHJlZ3VsYXRpb25zIiwiYXBwbGljYWJsZSByZWd1bGF0aW9ucyB1c2UiLCJyZWd1bGF0aW9ucyB1c2Ugb2YiLCJ0aGlzIG1hdGVyaWFsIGJ5IiwibWF0ZXJpYWwgYnkgdGhlIiwicyBnb3Zlcm5tZW50IGNvbnN0aXR1dGVzIiwiZ292ZXJubWVudCBjb25zdGl0dXRlcyBhY2tub3dsZWRnbWVudCIsImNvbnN0aXR1dGVzIGFja25vd2xlZGdtZW50IG9mIiwiYWNrbm93bGVkZ21lbnQgb2YgdGhlIiwib2YgdGhlIHByb3ByaWV0YXJ5IiwidGhlIHByb3ByaWV0YXJ5IHJpZ2h0cyIsInByb3ByaWV0YXJ5IHJpZ2h0cyBvZiIsInJpZ2h0cyBvZiBhZHZhbmNlZCIsImFuZCBjb250cmlidXRvcnMgYW55IiwiY29udHJpYnV0b3JzIGFueSBicmVhY2giLCJsaWNlbnNlIHNoYWxsIHJlc3VsdCIsInNoYWxsIHJlc3VsdCBpbiIsInJlc3VsdCBpbiB0aGUiLCJpbiB0aGUgaW1tZWRpYXRlIiwidGhlIGltbWVkaWF0ZSByZXZvY2F0aW9uIiwiaW1tZWRpYXRlIHJldm9jYXRpb24gb2YiLCJyZXZvY2F0aW9uIG9mIGFsbCIsIm1hdGVyaWFsIHRoaXMgbWF0ZXJpYWwiLCJwcm92aWRlZCBieSBhZHZhbmNlZCIsImJ5IGFkdmFuY2VkIG1pY3JvIiwiYXMgaXMgaW4iLCJpcyBpbiBpdHMiLCJpdHMgY3VycmVudCBjb25kaXRpb24iLCJjdXJyZW50IGNvbmRpdGlvbiBhbmQiLCJjb25kaXRpb24gYW5kIHdpdGhvdXQiLCJhbnkgcmVwcmVzZW50YXRpb25zIGd1YXJhbnRlZSIsInJlcHJlc2VudGF0aW9ucyBndWFyYW50ZWUgb3IiLCJndWFyYW50ZWUgb3Igd2FycmFudHkiLCJraW5kIG9yIGluIiwicmVsYXRlZCB0byBzdXBwb3J0IiwidG8gc3VwcG9ydCBpbmRlbW5pdHkiLCJzdXBwb3J0IGluZGVtbml0eSBlcnJvciIsImluZGVtbml0eSBlcnJvciBmcmVlIiwiZnJlZSBvciB1bmludGVycnVwdGVkIiwib3IgdW5pbnRlcnJ1cHRlZCBvcGVyYXRpb24iLCJ1bmludGVycnVwdGVkIG9wZXJhdGlvbiBvciIsIm9wZXJhdGlvbiBvciB0aGF0Iiwib3IgdGhhdCBpdCIsImZyZWUgZnJvbSBkZWZlY3RzIiwiZnJvbSBkZWZlY3RzIG9yIiwiZGVmZWN0cyBvciB2aXJ1c2VzIiwib3IgdmlydXNlcyBhbGwiLCJ2aXJ1c2VzIGFsbCBvYmxpZ2F0aW9ucyIsImFsbCBvYmxpZ2F0aW9ucyBhcmUiLCJvYmxpZ2F0aW9ucyBhcmUgaGVyZWJ5IiwiaGVyZWJ5IGRpc2NsYWltZWQgd2hldGhlciIsImRpc2NsYWltZWQgd2hldGhlciBleHByZXNzIiwidG8gYW55IGltcGxpZWQiLCJwYXJ0aWN1bGFyIHB1cnBvc2UgYWNjdXJhY3kiLCJwdXJwb3NlIGFjY3VyYWN5IGNvbXBsZXRlbmVzcyIsImFjY3VyYWN5IGNvbXBsZXRlbmVzcyBvcGVyYWJpbGl0eSIsImNvbXBsZXRlbmVzcyBvcGVyYWJpbGl0eSBxdWFsaXR5Iiwib3BlcmFiaWxpdHkgcXVhbGl0eSBvZiIsInF1YWxpdHkgb2Ygc2VydmljZSIsInNlcnZpY2Ugb3Igbm9uIiwiZXZlbnQgc2hhbGwgYWR2YW5jZWQiLCJzaGFsbCBhZHZhbmNlZCBtaWNybyIsImluY2lkZW50YWwgc3BlY2lhbCBwdW5pdGl2ZSIsInNwZWNpYWwgcHVuaXRpdmUgZXhlbXBsYXJ5Iiwib2YgdXNlIHJldmVudWUiLCJ1c2UgcmV2ZW51ZSBkYXRhIiwicmV2ZW51ZSBkYXRhIG9yIiwiaG93ZXZlciBjYXVzZWQgb3IiLCJiYXNlZCBvbiBhbnkiLCJsaWFiaWxpdHkgYXJpc2luZyBpbiIsInRoaXMgbWF0ZXJpYWwgZXZlbiIsImRhbWFnZSB0aGUgZW50aXJlIiwidGhlIGVudGlyZSBhbmQiLCJlbnRpcmUgYW5kIGFnZ3JlZ2F0ZSIsImFuZCBhZ2dyZWdhdGUgbGlhYmlsaXR5IiwiYWdncmVnYXRlIGxpYWJpbGl0eSBvZiIsImxpYWJpbGl0eSBvZiBhZHZhbmNlZCIsImNvbnRyaWJ1dG9ycyBzaGFsbCBub3QiLCJub3QgZXhjZWVkIHRlbiIsImV4Y2VlZCB0ZW4gZG9sbGFycyIsIjEwIDAwIGFueW9uZSIsIjAwIGFueW9uZSByZWRpc3RyaWJ1dGluZyIsImFueW9uZSByZWRpc3RyaWJ1dGluZyBvciIsInRoaXMgbWF0ZXJpYWwgYWNjZXB0cyIsIm1hdGVyaWFsIGFjY2VwdHMgdGhpcyIsImFjY2VwdHMgdGhpcyBhbGxvY2F0aW9uIiwidGhpcyBhbGxvY2F0aW9uIG9mIiwib2YgcmlzayBhbmQiLCJyaXNrIGFuZCBhZ3JlZXMiLCJhZ3JlZXMgdG8gcmVsZWFzZSIsInRvIHJlbGVhc2UgYWR2YW5jZWQiLCJyZWxlYXNlIGFkdmFuY2VkIG1pY3JvIiwiYW5kIGNvbnRyaWJ1dG9ycyBmcm9tIiwiY29udHJpYnV0b3JzIGZyb20gYW55IiwiZnJvbSBhbnkgYW5kIiwiYW5kIGFsbCBsaWFiaWxpdGllcyIsImFsbCBsaWFiaWxpdGllcyBvYmxpZ2F0aW9ucyIsImxpYWJpbGl0aWVzIG9ibGlnYXRpb25zIGNsYWltcyIsIm9ibGlnYXRpb25zIGNsYWltcyBvciIsImNsYWltcyBvciBkZW1hbmRzIiwib3IgZGVtYW5kcyBpbiIsImRlbWFuZHMgaW4gZXhjZXNzIiwiZXhjZXNzIG9mIHRlbiIsIjEwIDAwIHRoZSIsIjAwIHRoZSBmb3JlZ29pbmciLCJ0aGUgZm9yZWdvaW5nIGFyZSIsImZvcmVnb2luZyBhcmUgZXNzZW50aWFsIiwiYXJlIGVzc2VudGlhbCB0ZXJtcyIsImVzc2VudGlhbCB0ZXJtcyBvZiIsImFuZCBpZiBhbnkiLCJ0ZXJtcyBhcmUgY29uc3RydWVkIiwiYXJlIGNvbnN0cnVlZCBhcyIsImNvbnN0cnVlZCBhcyB1bmVuZm9yY2VhYmxlIiwiYXMgdW5lbmZvcmNlYWJsZSBmYWlsIiwidW5lbmZvcmNlYWJsZSBmYWlsIGluIiwiZmFpbCBpbiBlc3NlbnRpYWwiLCJpbiBlc3NlbnRpYWwgcHVycG9zZSIsImVzc2VudGlhbCBwdXJwb3NlIG9yIiwicHVycG9zZSBvciBiZWNvbWUiLCJvciBiZWNvbWUgdm9pZCIsImJlY29tZSB2b2lkIG9yIiwidm9pZCBvciBkZXRyaW1lbnRhbCIsIm9yIGRldHJpbWVudGFsIHRvIiwiZGV0cmltZW50YWwgdG8gYWR2YW5jZWQiLCJ0byBhZHZhbmNlZCBtaWNybyIsIm9yIGNvbnRyaWJ1dG9ycyBmb3IiLCJjb250cmlidXRvcnMgZm9yIGFueSIsImFueSByZWFzb24gdGhlbiIsInJlYXNvbiB0aGVuIGFsbCIsInRoZW4gYWxsIHJpZ2h0cyIsInRoaXMgbWF0ZXJpYWwgc2hhbGwiLCJtYXRlcmlhbCBzaGFsbCB0ZXJtaW5hdGUiLCJ0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgbW9yZW92ZXIiLCJpbW1lZGlhdGVseSBtb3Jlb3ZlciB0aGUiLCJvciBhbnkgYWdyZWVtZW50IiwiYW55IGFncmVlbWVudCBvciIsInRoaXMgbWF0ZXJpYWwgbm90aWNlIiwibWF0ZXJpYWwgbm90aWNlIGlzIiwibm90aWNlIGlzIGhlcmVieSIsImlzIGhlcmVieSBwcm92aWRlZCIsImhlcmVieSBwcm92aWRlZCBhbmQiLCJwcm92aWRlZCBhbmQgYnkiLCJhbmQgYnkgcmVkaXN0cmlidXRpbmciXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0OiBDb3B5cmlnaHQgKGMpIDIwMDYgYnkgQXBwbGUgQ29tcHV0ZXIsIEluYy4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbklNUE9SVEFOVDogVGhpcyBBcHBsZSBzb2Z0d2FyZSBpcyBzdXBwbGllZCB0byB5b3UgYnkgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKFwiQXBwbGVcIikgaW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91ciB1c2UsIGluc3RhbGxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgQXBwbGUgc29mdHdhcmUgY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcy4gSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zLCBwbGVhc2UgZG8gbm90IHVzZSwgaW5zdGFsbCwgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGlzIEFwcGxlIHNvZnR3YXJlLlxuXG5JbiBjb25zaWRlcmF0aW9uIG9mIHlvdXIgYWdyZWVtZW50IHRvIGFiaWRlIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMsIGFuZCBzdWJqZWN0IHRvIHRoZXNlIHRlcm1zLCBBcHBsZSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgdW5kZXIgQXBwbGUncyBjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgQXBwbGUgc29mdHdhcmUgKHRoZSBcIkFwcGxlIFNvZnR3YXJlXCIpLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlIEFwcGxlIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gc291cmNlIGFuZC9vciBiaW5hcnkgZm9ybXM7IHByb3ZpZGVkIHRoYXQgaWYgeW91IHJlZGlzdHJpYnV0ZSB0aGUgQXBwbGUgU29mdHdhcmUgaW4gaXRzIGVudGlyZXR5IGFuZCB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIHlvdSBtdXN0IHJldGFpbiB0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZyB0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIEFwcGxlIFNvZnR3YXJlLiBOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG9yIGxvZ29zIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIEFwcGxlIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gQXBwbGUuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoaXMgbm90aWNlLCBubyBvdGhlciByaWdodHMgb3IgbGljZW5zZXMsIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgQXBwbGUgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQgbWF5IGJlIGluZnJpbmdlZCBieSB5b3VyIGRlcml2YXRpdmUgd29ya3Mgb3IgYnkgb3RoZXIgd29ya3MgaW4gd2hpY2ggdGhlIEFwcGxlIFNvZnR3YXJlIG1heSBiZSBpbmNvcnBvcmF0ZWQuXG5cblRoZSBBcHBsZSBTb2Z0d2FyZSBpcyBwcm92aWRlZCBieSBBcHBsZSBvbiBhbiBcIkFTIElTXCIgYmFzaXMuIEFQUExFIE1BS0VTIE5PIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFJFR0FSRElORyBUSEUgQVBQTEUgU09GVFdBUkUgT1IgSVRTIFVTRSBBTkQgT1BFUkFUSU9OIEFMT05FIE9SIElOIENPTUJJTkFUSU9OIFdJVEggWU9VUiBQUk9EVUNUUy5cblxuSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBBTkQvT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBBUFBMRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiJdLCJsaWNlbnNlSWRzIjpbIkFNTCJdLCJrZXl3b3JkcyI6WyJjb3B5cmlnaHQgY29weXJpZ2h0IGMiLCIyMDA2IGJ5IGFwcGxlIiwicmlnaHRzIHJlc2VydmVkIGltcG9ydGFudCIsInJlc2VydmVkIGltcG9ydGFudCB0aGlzIiwiaW1wb3J0YW50IHRoaXMgYXBwbGUiLCJpcyBzdXBwbGllZCB0byIsInN1cHBsaWVkIHRvIHlvdSIsInlvdSBieSBhcHBsZSIsImluYyBhcHBsZSBpbiIsImFwcGxlIGluIGNvbnNpZGVyYXRpb24iLCJ0ZXJtcyBhbmQgeW91ciIsImFuZCB5b3VyIHVzZSIsInlvdXIgdXNlIGluc3RhbGxhdGlvbiIsInVzZSBpbnN0YWxsYXRpb24gbW9kaWZpY2F0aW9uIiwiaW5zdGFsbGF0aW9uIG1vZGlmaWNhdGlvbiBvciIsIm1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiIsImFwcGxlIHNvZnR3YXJlIGNvbnN0aXR1dGVzIiwic29mdHdhcmUgY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSIsInRoZXNlIHRlcm1zIGlmIiwidGVybXMgaWYgeW91IiwidGVybXMgcGxlYXNlIGRvIiwibm90IHVzZSBpbnN0YWxsIiwidXNlIGluc3RhbGwgbW9kaWZ5IiwiaW5zdGFsbCBtb2RpZnkgb3IiLCJvciByZWRpc3RyaWJ1dGUgdGhpcyIsInJlZGlzdHJpYnV0ZSB0aGlzIGFwcGxlIiwic29mdHdhcmUgaW4gY29uc2lkZXJhdGlvbiIsImFncmVlbWVudCB0byBhYmlkZSIsInRlcm1zIGFuZCBzdWJqZWN0IiwidGhlc2UgdGVybXMgYXBwbGUiLCJ0ZXJtcyBhcHBsZSBncmFudHMiLCJhcHBsZSBncmFudHMgeW91IiwieW91IGEgcGVyc29uYWwiLCJhIHBlcnNvbmFsIG5vbiIsInBlcnNvbmFsIG5vbiBleGNsdXNpdmUiLCJsaWNlbnNlIHVuZGVyIGFwcGxlIiwidW5kZXIgYXBwbGUgcyIsImFwcGxlIHMgY29weXJpZ2h0cyIsImNvcHlyaWdodHMgaW4gdGhpcyIsImluIHRoaXMgb3JpZ2luYWwiLCJ0aGlzIG9yaWdpbmFsIGFwcGxlIiwib3JpZ2luYWwgYXBwbGUgc29mdHdhcmUiLCJhcHBsZSBzb2Z0d2FyZSB0aGUiLCJzb2Z0d2FyZSB0aGUgYXBwbGUiLCJhcHBsZSBzb2Z0d2FyZSB0byIsInJlcHJvZHVjZSBtb2RpZnkgYW5kIiwiYXBwbGUgc29mdHdhcmUgd2l0aCIsImJpbmFyeSBmb3JtcyBwcm92aWRlZCIsIml0cyBlbnRpcmV0eSBhbmQiLCJlbnRpcmV0eSBhbmQgd2l0aG91dCIsImFuZCB3aXRob3V0IG1vZGlmaWNhdGlvbnMiLCJ3aXRob3V0IG1vZGlmaWNhdGlvbnMgeW91IiwiZm9sbG93aW5nIHRleHQgYW5kIiwidGV4dCBhbmQgZGlzY2xhaW1lcnMiLCJkaXNjbGFpbWVycyBpbiBhbGwiLCJhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMiLCJzdWNoIHJlZGlzdHJpYnV0aW9ucyBvZiIsImFwcGxlIHNvZnR3YXJlIG5laXRoZXIiLCJzb2Z0d2FyZSBuZWl0aGVyIHRoZSIsInRoZSBuYW1lIHRyYWRlbWFya3MiLCJsb2dvcyBvZiBhcHBsZSIsIm9mIGFwcGxlIGNvbXB1dGVyIiwiY29tcHV0ZXIgaW5jIG1heSIsImluYyBtYXkgYmUiLCJmcm9tIHRoZSBhcHBsZSIsImFwcGxlIHNvZnR3YXJlIHdpdGhvdXQiLCJwZXJtaXNzaW9uIGZyb20gYXBwbGUiLCJmcm9tIGFwcGxlIGV4Y2VwdCIsImFwcGxlIGV4Y2VwdCBhcyIsInRoaXMgbm90aWNlIG5vIiwibm90aWNlIG5vIG90aGVyIiwib3IgbGljZW5zZXMgZXhwcmVzcyIsImxpY2Vuc2VzIGV4cHJlc3Mgb3IiLCJhcHBsZSBoZXJlaW4gaW5jbHVkaW5nIiwiaGVyZWluIGluY2x1ZGluZyBidXQiLCJhbnkgcGF0ZW50IHJpZ2h0cyIsInBhdGVudCByaWdodHMgdGhhdCIsInJpZ2h0cyB0aGF0IG1heSIsIm1heSBiZSBpbmZyaW5nZWQiLCJieSB5b3VyIGRlcml2YXRpdmUiLCJ3b3JrcyBvciBieSIsImJ5IG90aGVyIHdvcmtzIiwid2hpY2ggdGhlIGFwcGxlIiwiYXBwbGUgc29mdHdhcmUgbWF5IiwibWF5IGJlIGluY29ycG9yYXRlZCIsImJlIGluY29ycG9yYXRlZCB0aGUiLCJpbmNvcnBvcmF0ZWQgdGhlIGFwcGxlIiwiYnkgYXBwbGUgb24iLCJhcHBsZSBvbiBhbiIsImlzIGJhc2lzIGFwcGxlIiwiYmFzaXMgYXBwbGUgbWFrZXMiLCJhcHBsZSBtYWtlcyBubyIsImluZnJpbmdlbWVudCBtZXJjaGFudGFiaWxpdHkgYW5kIiwicGFydGljdWxhciBwdXJwb3NlIHJlZ2FyZGluZyIsInB1cnBvc2UgcmVnYXJkaW5nIHRoZSIsInJlZ2FyZGluZyB0aGUgYXBwbGUiLCJhcHBsZSBzb2Z0d2FyZSBvciIsInVzZSBhbmQgb3BlcmF0aW9uIiwiYW5kIG9wZXJhdGlvbiBhbG9uZSIsIm9wZXJhdGlvbiBhbG9uZSBvciIsImNvbWJpbmF0aW9uIHdpdGggeW91ciIsIndpdGggeW91ciBwcm9kdWN0cyIsInlvdXIgcHJvZHVjdHMgaW4iLCJwcm9kdWN0cyBpbiBubyIsImJ1c2luZXNzIGludGVycnVwdGlvbiBhcmlzaW5nIiwiaW50ZXJydXB0aW9uIGFyaXNpbmcgaW4iLCJ0aGUgdXNlIHJlcHJvZHVjdGlvbiIsIm1vZGlmaWNhdGlvbiBhbmQgb3IiLCJhbmQgb3IgZGlzdHJpYnV0aW9uIiwiYXBwbGUgc29mdHdhcmUgaG93ZXZlciIsInNvZnR3YXJlIGhvd2V2ZXIgY2F1c2VkIiwiY2F1c2VkIGFuZCB3aGV0aGVyIiwiYW5kIHdoZXRoZXIgdW5kZXIiLCJ3aGV0aGVyIHVuZGVyIHRoZW9yeSIsInVuZGVyIHRoZW9yeSBvZiIsImNvcHlyaWdodCBjb3B5cmlnaHQgYyAyMDA2IiwiYyAyMDA2IGJ5IGFwcGxlIiwiMjAwNiBieSBhcHBsZSBjb21wdXRlciIsImFsbCByaWdodHMgcmVzZXJ2ZWQgaW1wb3J0YW50IiwicmlnaHRzIHJlc2VydmVkIGltcG9ydGFudCB0aGlzIiwicmVzZXJ2ZWQgaW1wb3J0YW50IHRoaXMgYXBwbGUiLCJpbXBvcnRhbnQgdGhpcyBhcHBsZSBzb2Z0d2FyZSIsInRoaXMgYXBwbGUgc29mdHdhcmUgaXMiLCJhcHBsZSBzb2Z0d2FyZSBpcyBzdXBwbGllZCIsInNvZnR3YXJlIGlzIHN1cHBsaWVkIHRvIiwiaXMgc3VwcGxpZWQgdG8geW91Iiwic3VwcGxpZWQgdG8geW91IGJ5IiwidG8geW91IGJ5IGFwcGxlIiwieW91IGJ5IGFwcGxlIGNvbXB1dGVyIiwiY29tcHV0ZXIgaW5jIGFwcGxlIGluIiwiaW5jIGFwcGxlIGluIGNvbnNpZGVyYXRpb24iLCJhcHBsZSBpbiBjb25zaWRlcmF0aW9uIG9mIiwiYWdyZWVtZW50IHRvIHRoZSBmb2xsb3dpbmciLCJmb2xsb3dpbmcgdGVybXMgYW5kIHlvdXIiLCJ0ZXJtcyBhbmQgeW91ciB1c2UiLCJhbmQgeW91ciB1c2UgaW5zdGFsbGF0aW9uIiwieW91ciB1c2UgaW5zdGFsbGF0aW9uIG1vZGlmaWNhdGlvbiIsInVzZSBpbnN0YWxsYXRpb24gbW9kaWZpY2F0aW9uIG9yIiwiaW5zdGFsbGF0aW9uIG1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiIsIm1vZGlmaWNhdGlvbiBvciByZWRpc3RyaWJ1dGlvbiBvZiIsIm9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMiLCJyZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIGFwcGxlIiwib2YgdGhpcyBhcHBsZSBzb2Z0d2FyZSIsInRoaXMgYXBwbGUgc29mdHdhcmUgY29uc3RpdHV0ZXMiLCJhcHBsZSBzb2Z0d2FyZSBjb25zdGl0dXRlcyBhY2NlcHRhbmNlIiwic29mdHdhcmUgY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiIsImNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UiLCJvZiB0aGVzZSB0ZXJtcyBpZiIsInRoZXNlIHRlcm1zIGlmIHlvdSIsInRlcm1zIGlmIHlvdSBkbyIsInRoZXNlIHRlcm1zIHBsZWFzZSBkbyIsInRlcm1zIHBsZWFzZSBkbyBub3QiLCJwbGVhc2UgZG8gbm90IHVzZSIsImRvIG5vdCB1c2UgaW5zdGFsbCIsIm5vdCB1c2UgaW5zdGFsbCBtb2RpZnkiLCJ1c2UgaW5zdGFsbCBtb2RpZnkgb3IiLCJpbnN0YWxsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUiLCJtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoaXMiLCJvciByZWRpc3RyaWJ1dGUgdGhpcyBhcHBsZSIsInJlZGlzdHJpYnV0ZSB0aGlzIGFwcGxlIHNvZnR3YXJlIiwidGhpcyBhcHBsZSBzb2Z0d2FyZSBpbiIsImFwcGxlIHNvZnR3YXJlIGluIGNvbnNpZGVyYXRpb24iLCJzb2Z0d2FyZSBpbiBjb25zaWRlcmF0aW9uIG9mIiwieW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUiLCJhZ3JlZW1lbnQgdG8gYWJpZGUgYnkiLCJhYmlkZSBieSB0aGUgZm9sbG93aW5nIiwiZm9sbG93aW5nIHRlcm1zIGFuZCBzdWJqZWN0IiwidGVybXMgYW5kIHN1YmplY3QgdG8iLCJhbmQgc3ViamVjdCB0byB0aGVzZSIsInRvIHRoZXNlIHRlcm1zIGFwcGxlIiwidGhlc2UgdGVybXMgYXBwbGUgZ3JhbnRzIiwidGVybXMgYXBwbGUgZ3JhbnRzIHlvdSIsImFwcGxlIGdyYW50cyB5b3UgYSIsImdyYW50cyB5b3UgYSBwZXJzb25hbCIsInlvdSBhIHBlcnNvbmFsIG5vbiIsImEgcGVyc29uYWwgbm9uIGV4Y2x1c2l2ZSIsInBlcnNvbmFsIG5vbiBleGNsdXNpdmUgbGljZW5zZSIsImV4Y2x1c2l2ZSBsaWNlbnNlIHVuZGVyIGFwcGxlIiwibGljZW5zZSB1bmRlciBhcHBsZSBzIiwidW5kZXIgYXBwbGUgcyBjb3B5cmlnaHRzIiwiYXBwbGUgcyBjb3B5cmlnaHRzIGluIiwicyBjb3B5cmlnaHRzIGluIHRoaXMiLCJjb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwiLCJpbiB0aGlzIG9yaWdpbmFsIGFwcGxlIiwidGhpcyBvcmlnaW5hbCBhcHBsZSBzb2Z0d2FyZSIsIm9yaWdpbmFsIGFwcGxlIHNvZnR3YXJlIHRoZSIsImFwcGxlIHNvZnR3YXJlIHRoZSBhcHBsZSIsInNvZnR3YXJlIHRoZSBhcHBsZSBzb2Z0d2FyZSIsInRoZSBhcHBsZSBzb2Z0d2FyZSB0byIsImFwcGxlIHNvZnR3YXJlIHRvIHVzZSIsInVzZSByZXByb2R1Y2UgbW9kaWZ5IGFuZCIsInJlcHJvZHVjZSBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSIsImFuZCByZWRpc3RyaWJ1dGUgdGhlIGFwcGxlIiwidGhlIGFwcGxlIHNvZnR3YXJlIHdpdGgiLCJhcHBsZSBzb2Z0d2FyZSB3aXRoIG9yIiwid2l0aG91dCBtb2RpZmljYXRpb25zIGluIHNvdXJjZSIsIm1vZGlmaWNhdGlvbnMgaW4gc291cmNlIGFuZCIsIm9yIGJpbmFyeSBmb3JtcyBwcm92aWRlZCIsImJpbmFyeSBmb3JtcyBwcm92aWRlZCB0aGF0IiwiZm9ybXMgcHJvdmlkZWQgdGhhdCBpZiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgKGMpIDIwMDYgQWNhZGVteSBvZiBNb3Rpb24gUGljdHVyZSBBcnRzIGFuZCBTY2llbmNlcyAoXCJBLk0uUC5BLlMuXCIpLiBQb3J0aW9ucyBjb250cmlidXRlZCBieSBvdGhlcnMgYXMgaW5kaWNhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5BIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSByaWdodCB0byBkaXN0cmlidXRlLCBjb3B5LCBtb2RpZnksIGNyZWF0ZSBkZXJpdmF0aXZlcywgYW5kIHVzZSwgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIGlzIGhlcmVieSBncmFudGVkLCBzdWJqZWN0IHRvIGFjY2VwdGFuY2Ugb2YgdGhpcyBsaWNlbnNlLiBQZXJmb3JtYW5jZSBvZiBhbnkgb2YgdGhlIGFmb3JlbWVudGlvbmVkIGFjdHMgaW5kaWNhdGVzIGFjY2VwdGFuY2UgdG8gYmUgYm91bmQgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9uczpcblxuICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgRGlzY2xhaW1lciBvZiBXYXJyYW50eS5cblxuICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgRGlzY2xhaW1lciBvZiBXYXJyYW50eSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgKiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgQS5NLlAuQS5TLiBvciBhbnkgY29udHJpYnV0b3JzLCBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4sIGFuZCBuZWl0aGVyIHRoZSBuYW1lIG9mIEEuTS5QLkEuUy4gbm9yIG9mIGFueSBvdGhlciBjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZSwgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIEEuTS5QLkEuUy4gb3IgY29udHJpYnV0b3IsIGFzIGFwcHJvcHJpYXRlLlxuXG5UaGlzIGxpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGFuZCBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyB0aGVyZWluLlxuXG5EaXNjbGFpbWVyIG9mIFdhcnJhbnR5OiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEEuTS5QLkEuUy4gQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEEuTS5QLkEuUy4sIEFOWSBDT05UUklCVVRPUlMgT1IgRElTVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiJdLCJsaWNlbnNlSWRzIjpbIkFNUEFTIl0sImtleXdvcmRzIjpbImMgMjAwNiBhY2FkZW15IiwiMjAwNiBhY2FkZW15IG9mIiwiYWNhZGVteSBvZiBtb3Rpb24iLCJvZiBtb3Rpb24gcGljdHVyZSIsIm1vdGlvbiBwaWN0dXJlIGFydHMiLCJwaWN0dXJlIGFydHMgYW5kIiwiYXJ0cyBhbmQgc2NpZW5jZXMiLCJhbmQgc2NpZW5jZXMgYSIsInNjaWVuY2VzIGEgbSIsImEgcyBwb3J0aW9ucyIsInMgcG9ydGlvbnMgY29udHJpYnV0ZWQiLCJwb3J0aW9ucyBjb250cmlidXRlZCBieSIsImNvbnRyaWJ1dGVkIGJ5IG90aGVycyIsImJ5IG90aGVycyBhcyIsIm90aGVycyBhcyBpbmRpY2F0ZWQiLCJhcyBpbmRpY2F0ZWQgYWxsIiwiaW5kaWNhdGVkIGFsbCByaWdodHMiLCJyaWdodHMgcmVzZXJ2ZWQgYSIsInJlc2VydmVkIGEgd29ybGQiLCJub24gZXhjbHVzaXZlIHJpZ2h0IiwidG8gZGlzdHJpYnV0ZSBjb3B5IiwiZGlzdHJpYnV0ZSBjb3B5IG1vZGlmeSIsImNvcHkgbW9kaWZ5IGNyZWF0ZSIsImNyZWF0ZSBkZXJpdmF0aXZlcyBhbmQiLCJkZXJpdmF0aXZlcyBhbmQgdXNlIiwiZm9ybXMgaXMgaGVyZWJ5IiwiaGVyZWJ5IGdyYW50ZWQgc3ViamVjdCIsImdyYW50ZWQgc3ViamVjdCB0byIsInN1YmplY3QgdG8gYWNjZXB0YW5jZSIsInRvIGFjY2VwdGFuY2Ugb2YiLCJ0aGlzIGxpY2Vuc2UgcGVyZm9ybWFuY2UiLCJsaWNlbnNlIHBlcmZvcm1hbmNlIG9mIiwidGhlIGFmb3JlbWVudGlvbmVkIGFjdHMiLCJhZm9yZW1lbnRpb25lZCBhY3RzIGluZGljYXRlcyIsImFjdHMgaW5kaWNhdGVzIGFjY2VwdGFuY2UiLCJpbmRpY2F0ZXMgYWNjZXB0YW5jZSB0byIsImFuZCBjb25kaXRpb25zIHJlZGlzdHJpYnV0aW9ucyIsIm9mIHdhcnJhbnR5IHJlZGlzdHJpYnV0aW9ucyIsIndhcnJhbnR5IHJlZGlzdHJpYnV0aW9ucyBpbiIsIm9mIHdhcnJhbnR5IGluIiwid2FycmFudHkgaW4gdGhlIiwidGhlIGRpc3RyaWJ1dGlvbiBub3RoaW5nIiwiZGlzdHJpYnV0aW9uIG5vdGhpbmcgaW4iLCJwcm9wZXJ0eSBvZiBhIiwiYW55IGNvbnRyaWJ1dG9ycyBleGNlcHQiLCJjb250cmlidXRvcnMgZXhjZXB0IGFzIiwiaGVyZWluIGFuZCBuZWl0aGVyIiwiYW5kIG5laXRoZXIgdGhlIiwiYSBzIG5vciIsInMgbm9yIG9mIiwibm9yIG9mIGFueSIsImFueSBvdGhlciBjb250cmlidXRvcnMiLCJvdGhlciBjb250cmlidXRvcnMgdG8iLCJjb250cmlidXRvcnMgdG8gdGhpcyIsInBlcm1pc3Npb24gb2YgYSIsInMgb3IgY29udHJpYnV0b3IiLCJvciBjb250cmlidXRvciBhcyIsImNvbnRyaWJ1dG9yIGFzIGFwcHJvcHJpYXRlIiwiYXBwcm9wcmlhdGUgdGhpcyBsaWNlbnNlIiwiY2FsaWZvcm5pYSBhbmQgc3ViamVjdCIsInRoZSBjb3VydHMgdGhlcmVpbiIsImNvdXJ0cyB0aGVyZWluIGRpc2NsYWltZXIiLCJ0aGVyZWluIGRpc2NsYWltZXIgb2YiLCJwcm92aWRlZCBieSBhIiwiYnkgYSBtIiwiYSBzIGFuZCIsInMgYW5kIGNvbnRyaWJ1dG9ycyIsImV2ZW50IHNoYWxsIGEiLCJzaGFsbCBhIG0iLCJhIHMgYW55IiwicyBhbnkgY29udHJpYnV0b3JzIiwiYW55IGNvbnRyaWJ1dG9ycyBvciIsImNvbnRyaWJ1dG9ycyBvciBkaXN0cmlidXRvcnMiLCJjb3B5cmlnaHQgYyAyMDA2IGFjYWRlbXkiLCJjIDIwMDYgYWNhZGVteSBvZiIsIjIwMDYgYWNhZGVteSBvZiBtb3Rpb24iLCJhY2FkZW15IG9mIG1vdGlvbiBwaWN0dXJlIiwib2YgbW90aW9uIHBpY3R1cmUgYXJ0cyIsIm1vdGlvbiBwaWN0dXJlIGFydHMgYW5kIiwicGljdHVyZSBhcnRzIGFuZCBzY2llbmNlcyIsImFydHMgYW5kIHNjaWVuY2VzIGEiLCJhbmQgc2NpZW5jZXMgYSBtIiwic2NpZW5jZXMgYSBtIHAiLCJwIGEgcyBwb3J0aW9ucyIsImEgcyBwb3J0aW9ucyBjb250cmlidXRlZCIsInMgcG9ydGlvbnMgY29udHJpYnV0ZWQgYnkiLCJwb3J0aW9ucyBjb250cmlidXRlZCBieSBvdGhlcnMiLCJjb250cmlidXRlZCBieSBvdGhlcnMgYXMiLCJieSBvdGhlcnMgYXMgaW5kaWNhdGVkIiwib3RoZXJzIGFzIGluZGljYXRlZCBhbGwiLCJhcyBpbmRpY2F0ZWQgYWxsIHJpZ2h0cyIsImluZGljYXRlZCBhbGwgcmlnaHRzIHJlc2VydmVkIiwiYWxsIHJpZ2h0cyByZXNlcnZlZCBhIiwicmlnaHRzIHJlc2VydmVkIGEgd29ybGQiLCJyZXNlcnZlZCBhIHdvcmxkIHdpZGUiLCJmcmVlIG5vbiBleGNsdXNpdmUgcmlnaHQiLCJub24gZXhjbHVzaXZlIHJpZ2h0IHRvIiwiZXhjbHVzaXZlIHJpZ2h0IHRvIGRpc3RyaWJ1dGUiLCJyaWdodCB0byBkaXN0cmlidXRlIGNvcHkiLCJ0byBkaXN0cmlidXRlIGNvcHkgbW9kaWZ5IiwiZGlzdHJpYnV0ZSBjb3B5IG1vZGlmeSBjcmVhdGUiLCJjb3B5IG1vZGlmeSBjcmVhdGUgZGVyaXZhdGl2ZXMiLCJtb2RpZnkgY3JlYXRlIGRlcml2YXRpdmVzIGFuZCIsImNyZWF0ZSBkZXJpdmF0aXZlcyBhbmQgdXNlIiwiZGVyaXZhdGl2ZXMgYW5kIHVzZSBpbiIsImJpbmFyeSBmb3JtcyBpcyBoZXJlYnkiLCJmb3JtcyBpcyBoZXJlYnkgZ3JhbnRlZCIsImlzIGhlcmVieSBncmFudGVkIHN1YmplY3QiLCJoZXJlYnkgZ3JhbnRlZCBzdWJqZWN0IHRvIiwiZ3JhbnRlZCBzdWJqZWN0IHRvIGFjY2VwdGFuY2UiLCJzdWJqZWN0IHRvIGFjY2VwdGFuY2Ugb2YiLCJ0byBhY2NlcHRhbmNlIG9mIHRoaXMiLCJvZiB0aGlzIGxpY2Vuc2UgcGVyZm9ybWFuY2UiLCJ0aGlzIGxpY2Vuc2UgcGVyZm9ybWFuY2Ugb2YiLCJsaWNlbnNlIHBlcmZvcm1hbmNlIG9mIGFueSIsInBlcmZvcm1hbmNlIG9mIGFueSBvZiIsIm9mIHRoZSBhZm9yZW1lbnRpb25lZCBhY3RzIiwidGhlIGFmb3JlbWVudGlvbmVkIGFjdHMgaW5kaWNhdGVzIiwiYWZvcmVtZW50aW9uZWQgYWN0cyBpbmRpY2F0ZXMgYWNjZXB0YW5jZSIsImFjdHMgaW5kaWNhdGVzIGFjY2VwdGFuY2UgdG8iLCJpbmRpY2F0ZXMgYWNjZXB0YW5jZSB0byBiZSIsImJvdW5kIGJ5IHRoZSBmb2xsb3dpbmciLCJ0ZXJtcyBhbmQgY29uZGl0aW9ucyByZWRpc3RyaWJ1dGlvbnMiLCJhbmQgY29uZGl0aW9ucyByZWRpc3RyaWJ1dGlvbnMgb2YiLCJkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IHJlZGlzdHJpYnV0aW9ucyIsIm9mIHdhcnJhbnR5IHJlZGlzdHJpYnV0aW9ucyBpbiIsIndhcnJhbnR5IHJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkiLCJkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGluIiwib2Ygd2FycmFudHkgaW4gdGhlIiwid2FycmFudHkgaW4gdGhlIGRvY3VtZW50YXRpb24iLCJ3aXRoIHRoZSBkaXN0cmlidXRpb24gbm90aGluZyIsInRoZSBkaXN0cmlidXRpb24gbm90aGluZyBpbiIsImRpc3RyaWJ1dGlvbiBub3RoaW5nIGluIHRoaXMiLCJpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYSIsInByb3BlcnR5IG9mIGEgbSIsImEgcyBvciBhbnkiLCJzIG9yIGFueSBjb250cmlidXRvcnMiLCJvciBhbnkgY29udHJpYnV0b3JzIGV4Y2VwdCIsImFueSBjb250cmlidXRvcnMgZXhjZXB0IGFzIiwiY29udHJpYnV0b3JzIGV4Y2VwdCBhcyBleHByZXNzbHkiLCJzdGF0ZWQgaGVyZWluIGFuZCBuZWl0aGVyIiwiaGVyZWluIGFuZCBuZWl0aGVyIHRoZSIsImFuZCBuZWl0aGVyIHRoZSBuYW1lIiwibmFtZSBvZiBhIG0iLCJwIGEgcyBub3IiLCJhIHMgbm9yIG9mIiwicyBub3Igb2YgYW55Iiwibm9yIG9mIGFueSBvdGhlciIsIm9mIGFueSBvdGhlciBjb250cmlidXRvcnMiLCJhbnkgb3RoZXIgY29udHJpYnV0b3JzIHRvIiwib3RoZXIgY29udHJpYnV0b3JzIHRvIHRoaXMiLCJjb250cmlidXRvcnMgdG8gdGhpcyBzb2Z0d2FyZSIsInNvZnR3YXJlIG1heSBiZSB1c2VkIiwid3JpdHRlbiBwZXJtaXNzaW9uIG9mIGEiLCJwZXJtaXNzaW9uIG9mIGEgbSIsImEgcyBvciBjb250cmlidXRvciIsInMgb3IgY29udHJpYnV0b3IgYXMiLCJvciBjb250cmlidXRvciBhcyBhcHByb3ByaWF0ZSIsImNvbnRyaWJ1dG9yIGFzIGFwcHJvcHJpYXRlIHRoaXMiLCJhcyBhcHByb3ByaWF0ZSB0aGlzIGxpY2Vuc2UiLCJhcHByb3ByaWF0ZSB0aGlzIGxpY2Vuc2Ugc2hhbGwiLCJvZiBjYWxpZm9ybmlhIGFuZCBzdWJqZWN0IiwiY2FsaWZvcm5pYSBhbmQgc3ViamVjdCB0byIsIm9mIHRoZSBjb3VydHMgdGhlcmVpbiIsInRoZSBjb3VydHMgdGhlcmVpbiBkaXNjbGFpbWVyIiwiY291cnRzIHRoZXJlaW4gZGlzY2xhaW1lciBvZiIsInRoZXJlaW4gZGlzY2xhaW1lciBvZiB3YXJyYW50eSIsImlzIHByb3ZpZGVkIGJ5IGEiLCJwcm92aWRlZCBieSBhIG0iLCJieSBhIG0gcCIsInAgYSBzIGFuZCIsImEgcyBhbmQgY29udHJpYnV0b3JzIiwicyBhbmQgY29udHJpYnV0b3JzIGFzIiwibm8gZXZlbnQgc2hhbGwgYSIsImV2ZW50IHNoYWxsIGEgbSIsInNoYWxsIGEgbSBwIiwicCBhIHMgYW55IiwiYSBzIGFueSBjb250cmlidXRvcnMiLCJzIGFueSBjb250cmlidXRvcnMgb3IiLCJhbnkgY29udHJpYnV0b3JzIG9yIGRpc3RyaWJ1dG9ycyIsImNvbnRyaWJ1dG9ycyBvciBkaXN0cmlidXRvcnMgYmUiLCJkaXN0cmlidXRvcnMgYmUgbGlhYmxlIGZvciIsImNvcHlyaWdodCBjIDIwMDYgYWNhZGVteSBvZiIsImMgMjAwNiBhY2FkZW15IG9mIG1vdGlvbiIsIjIwMDYgYWNhZGVteSBvZiBtb3Rpb24gcGljdHVyZSIsImFjYWRlbXkgb2YgbW90aW9uIHBpY3R1cmUgYXJ0cyIsIm9mIG1vdGlvbiBwaWN0dXJlIGFydHMgYW5kIiwibW90aW9uIHBpY3R1cmUgYXJ0cyBhbmQgc2NpZW5jZXMiLCJwaWN0dXJlIGFydHMgYW5kIHNjaWVuY2VzIGEiLCJhcnRzIGFuZCBzY2llbmNlcyBhIG0iLCJhbmQgc2NpZW5jZXMgYSBtIHAiLCJzY2llbmNlcyBhIG0gcCBhIiwibSBwIGEgcyBwb3J0aW9ucyIsInAgYSBzIHBvcnRpb25zIGNvbnRyaWJ1dGVkIiwiYSBzIHBvcnRpb25zIGNvbnRyaWJ1dGVkIGJ5IiwicyBwb3J0aW9ucyBjb250cmlidXRlZCBieSBvdGhlcnMiLCJwb3J0aW9ucyBjb250cmlidXRlZCBieSBvdGhlcnMgYXMiLCJjb250cmlidXRlZCBieSBvdGhlcnMgYXMgaW5kaWNhdGVkIiwiYnkgb3RoZXJzIGFzIGluZGljYXRlZCBhbGwiLCJvdGhlcnMgYXMgaW5kaWNhdGVkIGFsbCByaWdodHMiXX0seyJsaWNlbnNlVGV4dHMiOlsiQU5UTFIgMiBMaWNlbnNlXG5cbldlIHJlc2VydmUgbm8gbGVnYWwgcmlnaHRzIHRvIHRoZSBBTlRMUi0taXQgaXMgZnVsbHkgaW4gdGhlIHB1YmxpYyBkb21haW4uIEFuIGluZGl2aWR1YWwgb3IgY29tcGFueSBtYXkgZG8gd2hhdGV2ZXIgdGhleSB3aXNoIHdpdGggc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgd2l0aCBBTlRMUiBvciB0aGUgY29kZSBnZW5lcmF0ZWQgYnkgQU5UTFIsIGluY2x1ZGluZyB0aGUgaW5jb3Jwb3JhdGlvbiBvZiBBTlRMUiwgb3IgaXRzIG91dHB1dCwgaW50byBjb21tZXJpY2FsIHNvZnR3YXJlLlxuXG5XZSBlbmNvdXJhZ2UgdXNlcnMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aXRoIEFOVExSLiBIb3dldmVyLCB3ZSBkbyBhc2sgdGhhdCBjcmVkaXQgaXMgZ2l2ZW4gdG8gdXMgZm9yIGRldmVsb3BpbmcgQU5UTFIuIEJ5IFwiY3JlZGl0XCIsIHdlIG1lYW4gdGhhdCBpZiB5b3UgdXNlIEFOVExSIG9yIGluY29ycG9yYXRlIGFueSBzb3VyY2UgY29kZSBpbnRvIG9uZSBvZiB5b3VyIHByb2dyYW1zIChjb21tZXJjaWFsIHByb2R1Y3QsIHJlc2VhcmNoIHByb2plY3QsIG9yIG90aGVyd2lzZSkgdGhhdCB5b3UgYWNrbm93bGVkZ2UgdGhpcyBmYWN0IHNvbWV3aGVyZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiwgcmVzZWFyY2ggcmVwb3J0LCBldGMuLi4gSWYgeW91IGxpa2UgQU5UTFIgYW5kIGhhdmUgZGV2ZWxvcGVkIGEgbmljZSB0b29sIHdpdGggdGhlIG91dHB1dCwgcGxlYXNlIG1lbnRpb24gdGhhdCB5b3UgZGV2ZWxvcGVkIGl0IHVzaW5nIEFOVExSLiBJbiBhZGRpdGlvbiwgd2UgYXNrIHRoYXQgdGhlIGhlYWRlcnMgcmVtYWluIGludGFjdCBpbiBvdXIgc291cmNlIGNvZGUuIEFzIGxvbmcgYXMgdGhlc2UgZ3VpZGVsaW5lcyBhcmUga2VwdCwgd2UgZXhwZWN0IHRvIGNvbnRpbnVlIGVuaGFuY2luZyB0aGlzIHN5c3RlbSBhbmQgZXhwZWN0IHRvIG1ha2Ugb3RoZXIgdG9vbHMgYXZhaWxhYmxlIGFzIHRoZXkgYXJlIGNvbXBsZXRlZC4iXSwibGljZW5zZUlkcyI6WyJBTlRMUi1QRCJdLCJrZXl3b3JkcyI6WyJhbnRsciAyIGxpY2Vuc2UiLCIyIGxpY2Vuc2Ugd2UiLCJsaWNlbnNlIHdlIHJlc2VydmUiLCJ3ZSByZXNlcnZlIG5vIiwicmVzZXJ2ZSBubyBsZWdhbCIsIm5vIGxlZ2FsIHJpZ2h0cyIsInRvIHRoZSBhbnRsciIsInRoZSBhbnRsciBpdCIsImFudGxyIGl0IGlzIiwiaXQgaXMgZnVsbHkiLCJpcyBmdWxseSBpbiIsImZ1bGx5IGluIHRoZSIsInB1YmxpYyBkb21haW4gYW4iLCJkb21haW4gYW4gaW5kaXZpZHVhbCIsImluZGl2aWR1YWwgb3IgY29tcGFueSIsIm9yIGNvbXBhbnkgbWF5IiwiY29tcGFueSBtYXkgZG8iLCJtYXkgZG8gd2hhdGV2ZXIiLCJkbyB3aGF0ZXZlciB0aGV5Iiwid2hhdGV2ZXIgdGhleSB3aXNoIiwidGhleSB3aXNoIHdpdGgiLCJ3aXNoIHdpdGggc291cmNlIiwiY29kZSBkaXN0cmlidXRlZCB3aXRoIiwiZGlzdHJpYnV0ZWQgd2l0aCBhbnRsciIsIndpdGggYW50bHIgb3IiLCJhbnRsciBvciB0aGUiLCJvciB0aGUgY29kZSIsInRoZSBjb2RlIGdlbmVyYXRlZCIsImdlbmVyYXRlZCBieSBhbnRsciIsImJ5IGFudGxyIGluY2x1ZGluZyIsImFudGxyIGluY2x1ZGluZyB0aGUiLCJpbmNsdWRpbmcgdGhlIGluY29ycG9yYXRpb24iLCJ0aGUgaW5jb3Jwb3JhdGlvbiBvZiIsImluY29ycG9yYXRpb24gb2YgYW50bHIiLCJvZiBhbnRsciBvciIsImFudGxyIG9yIGl0cyIsIm9yIGl0cyBvdXRwdXQiLCJpdHMgb3V0cHV0IGludG8iLCJvdXRwdXQgaW50byBjb21tZXJpY2FsIiwiaW50byBjb21tZXJpY2FsIHNvZnR3YXJlIiwiY29tbWVyaWNhbCBzb2Z0d2FyZSB3ZSIsInNvZnR3YXJlIHdlIGVuY291cmFnZSIsIndlIGVuY291cmFnZSB1c2VycyIsImVuY291cmFnZSB1c2VycyB0byIsInVzZXJzIHRvIGRldmVsb3AiLCJ0byBkZXZlbG9wIHNvZnR3YXJlIiwiZGV2ZWxvcCBzb2Z0d2FyZSB3aXRoIiwic29mdHdhcmUgd2l0aCBhbnRsciIsIndpdGggYW50bHIgaG93ZXZlciIsImFudGxyIGhvd2V2ZXIgd2UiLCJob3dldmVyIHdlIGRvIiwid2UgZG8gYXNrIiwiZG8gYXNrIHRoYXQiLCJhc2sgdGhhdCBjcmVkaXQiLCJ0aGF0IGNyZWRpdCBpcyIsImNyZWRpdCBpcyBnaXZlbiIsImdpdmVuIHRvIHVzIiwidG8gdXMgZm9yIiwidXMgZm9yIGRldmVsb3BpbmciLCJmb3IgZGV2ZWxvcGluZyBhbnRsciIsImRldmVsb3BpbmcgYW50bHIgYnkiLCJhbnRsciBieSBjcmVkaXQiLCJieSBjcmVkaXQgd2UiLCJjcmVkaXQgd2UgbWVhbiIsIndlIG1lYW4gdGhhdCIsIm1lYW4gdGhhdCBpZiIsInlvdSB1c2UgYW50bHIiLCJ1c2UgYW50bHIgb3IiLCJhbnRsciBvciBpbmNvcnBvcmF0ZSIsIm9yIGluY29ycG9yYXRlIGFueSIsImluY29ycG9yYXRlIGFueSBzb3VyY2UiLCJzb3VyY2UgY29kZSBpbnRvIiwiY29kZSBpbnRvIG9uZSIsImludG8gb25lIG9mIiwib2YgeW91ciBwcm9ncmFtcyIsInlvdXIgcHJvZ3JhbXMgY29tbWVyY2lhbCIsInByb2dyYW1zIGNvbW1lcmNpYWwgcHJvZHVjdCIsImNvbW1lcmNpYWwgcHJvZHVjdCByZXNlYXJjaCIsInByb2R1Y3QgcmVzZWFyY2ggcHJvamVjdCIsInJlc2VhcmNoIHByb2plY3Qgb3IiLCJwcm9qZWN0IG9yIG90aGVyd2lzZSIsInRoYXQgeW91IGFja25vd2xlZGdlIiwieW91IGFja25vd2xlZGdlIHRoaXMiLCJhY2tub3dsZWRnZSB0aGlzIGZhY3QiLCJ0aGlzIGZhY3Qgc29tZXdoZXJlIiwiZmFjdCBzb21ld2hlcmUgaW4iLCJ0aGUgZG9jdW1lbnRhdGlvbiByZXNlYXJjaCIsImRvY3VtZW50YXRpb24gcmVzZWFyY2ggcmVwb3J0IiwicmVzZWFyY2ggcmVwb3J0IGV0YyIsInJlcG9ydCBldGMgaWYiLCJldGMgaWYgeW91IiwieW91IGxpa2UgYW50bHIiLCJsaWtlIGFudGxyIGFuZCIsImFudGxyIGFuZCBoYXZlIiwiYW5kIGhhdmUgZGV2ZWxvcGVkIiwiaGF2ZSBkZXZlbG9wZWQgYSIsImRldmVsb3BlZCBhIG5pY2UiLCJhIG5pY2UgdG9vbCIsIm5pY2UgdG9vbCB3aXRoIiwidG9vbCB3aXRoIHRoZSIsInRoZSBvdXRwdXQgcGxlYXNlIiwib3V0cHV0IHBsZWFzZSBtZW50aW9uIiwicGxlYXNlIG1lbnRpb24gdGhhdCIsIm1lbnRpb24gdGhhdCB5b3UiLCJ0aGF0IHlvdSBkZXZlbG9wZWQiLCJ5b3UgZGV2ZWxvcGVkIGl0IiwiZGV2ZWxvcGVkIGl0IHVzaW5nIiwiaXQgdXNpbmcgYW50bHIiLCJ1c2luZyBhbnRsciBpbiIsImFudGxyIGluIGFkZGl0aW9uIiwiYWRkaXRpb24gd2UgYXNrIiwid2UgYXNrIHRoYXQiLCJhc2sgdGhhdCB0aGUiLCJ0aGF0IHRoZSBoZWFkZXJzIiwidGhlIGhlYWRlcnMgcmVtYWluIiwiaGVhZGVycyByZW1haW4gaW50YWN0IiwiaW50YWN0IGluIG91ciIsImluIG91ciBzb3VyY2UiLCJvdXIgc291cmNlIGNvZGUiLCJjb2RlIGFzIGxvbmciLCJsb25nIGFzIHRoZXNlIiwiYXMgdGhlc2UgZ3VpZGVsaW5lcyIsInRoZXNlIGd1aWRlbGluZXMgYXJlIiwiZ3VpZGVsaW5lcyBhcmUga2VwdCIsImFyZSBrZXB0IHdlIiwia2VwdCB3ZSBleHBlY3QiLCJ3ZSBleHBlY3QgdG8iLCJleHBlY3QgdG8gY29udGludWUiLCJ0byBjb250aW51ZSBlbmhhbmNpbmciLCJjb250aW51ZSBlbmhhbmNpbmcgdGhpcyIsImVuaGFuY2luZyB0aGlzIHN5c3RlbSIsInRoaXMgc3lzdGVtIGFuZCIsInN5c3RlbSBhbmQgZXhwZWN0IiwiYW5kIGV4cGVjdCB0byIsImV4cGVjdCB0byBtYWtlIiwidG8gbWFrZSBvdGhlciIsIm1ha2Ugb3RoZXIgdG9vbHMiLCJvdGhlciB0b29scyBhdmFpbGFibGUiLCJ0b29scyBhdmFpbGFibGUgYXMiLCJhdmFpbGFibGUgYXMgdGhleSIsInRoZXkgYXJlIGNvbXBsZXRlZCIsImFudGxyIDIgbGljZW5zZSB3ZSIsIjIgbGljZW5zZSB3ZSByZXNlcnZlIiwibGljZW5zZSB3ZSByZXNlcnZlIG5vIiwid2UgcmVzZXJ2ZSBubyBsZWdhbCIsInJlc2VydmUgbm8gbGVnYWwgcmlnaHRzIiwibm8gbGVnYWwgcmlnaHRzIHRvIiwibGVnYWwgcmlnaHRzIHRvIHRoZSIsInJpZ2h0cyB0byB0aGUgYW50bHIiLCJ0byB0aGUgYW50bHIgaXQiLCJ0aGUgYW50bHIgaXQgaXMiLCJhbnRsciBpdCBpcyBmdWxseSIsIml0IGlzIGZ1bGx5IGluIiwiaXMgZnVsbHkgaW4gdGhlIiwiZnVsbHkgaW4gdGhlIHB1YmxpYyIsInRoZSBwdWJsaWMgZG9tYWluIGFuIiwicHVibGljIGRvbWFpbiBhbiBpbmRpdmlkdWFsIiwiZG9tYWluIGFuIGluZGl2aWR1YWwgb3IiLCJhbiBpbmRpdmlkdWFsIG9yIGNvbXBhbnkiLCJpbmRpdmlkdWFsIG9yIGNvbXBhbnkgbWF5Iiwib3IgY29tcGFueSBtYXkgZG8iLCJjb21wYW55IG1heSBkbyB3aGF0ZXZlciIsIm1heSBkbyB3aGF0ZXZlciB0aGV5IiwiZG8gd2hhdGV2ZXIgdGhleSB3aXNoIiwid2hhdGV2ZXIgdGhleSB3aXNoIHdpdGgiLCJ0aGV5IHdpc2ggd2l0aCBzb3VyY2UiLCJ3aXNoIHdpdGggc291cmNlIGNvZGUiLCJ3aXRoIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIiwic291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgd2l0aCIsImNvZGUgZGlzdHJpYnV0ZWQgd2l0aCBhbnRsciIsImRpc3RyaWJ1dGVkIHdpdGggYW50bHIgb3IiLCJ3aXRoIGFudGxyIG9yIHRoZSIsImFudGxyIG9yIHRoZSBjb2RlIiwib3IgdGhlIGNvZGUgZ2VuZXJhdGVkIiwidGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IiwiY29kZSBnZW5lcmF0ZWQgYnkgYW50bHIiLCJnZW5lcmF0ZWQgYnkgYW50bHIgaW5jbHVkaW5nIiwiYnkgYW50bHIgaW5jbHVkaW5nIHRoZSIsImFudGxyIGluY2x1ZGluZyB0aGUgaW5jb3Jwb3JhdGlvbiIsImluY2x1ZGluZyB0aGUgaW5jb3Jwb3JhdGlvbiBvZiIsInRoZSBpbmNvcnBvcmF0aW9uIG9mIGFudGxyIiwiaW5jb3Jwb3JhdGlvbiBvZiBhbnRsciBvciIsIm9mIGFudGxyIG9yIGl0cyIsImFudGxyIG9yIGl0cyBvdXRwdXQiLCJvciBpdHMgb3V0cHV0IGludG8iLCJpdHMgb3V0cHV0IGludG8gY29tbWVyaWNhbCIsIm91dHB1dCBpbnRvIGNvbW1lcmljYWwgc29mdHdhcmUiLCJpbnRvIGNvbW1lcmljYWwgc29mdHdhcmUgd2UiLCJjb21tZXJpY2FsIHNvZnR3YXJlIHdlIGVuY291cmFnZSIsInNvZnR3YXJlIHdlIGVuY291cmFnZSB1c2VycyIsIndlIGVuY291cmFnZSB1c2VycyB0byIsImVuY291cmFnZSB1c2VycyB0byBkZXZlbG9wIiwidXNlcnMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSIsInRvIGRldmVsb3Agc29mdHdhcmUgd2l0aCIsImRldmVsb3Agc29mdHdhcmUgd2l0aCBhbnRsciIsInNvZnR3YXJlIHdpdGggYW50bHIgaG93ZXZlciIsIndpdGggYW50bHIgaG93ZXZlciB3ZSIsImFudGxyIGhvd2V2ZXIgd2UgZG8iLCJob3dldmVyIHdlIGRvIGFzayIsIndlIGRvIGFzayB0aGF0Il19LHsibGljZW5zZVRleHRzIjpbIkNvcHlyaWdodCAoYykgMTk4NSwgMTk4NywgMTk4OSwgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuVGhpcyBmaWxlIGFuZCB0aGUgMTQgUG9zdFNjcmlwdChSKSBBRk0gZmlsZXMgaXQgYWNjb21wYW5pZXMgbWF5IGJlIHVzZWQsIGNvcGllZCwgYW5kIGRpc3RyaWJ1dGVkIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBjaGFyZ2UsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIHByb3ZpZGVkIHRoYXQgYWxsIGNvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZDsgdGhhdCB0aGUgQUZNIGZpbGVzIGFyZSBub3QgZGlzdHJpYnV0ZWQgd2l0aG91dCB0aGlzIGZpbGU7IHRoYXQgYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBmaWxlIG9yIGFueSBvZiB0aGUgQUZNIGZpbGVzIGFyZSBwcm9taW5lbnRseSBub3RlZCBpbiB0aGUgbW9kaWZpZWQgZmlsZShzKTsgYW5kIHRoYXQgdGhpcyBwYXJhZ3JhcGggaXMgbm90IG1vZGlmaWVkLiBBZG9iZSBTeXN0ZW1zIGhhcyBubyByZXNwb25zaWJpbGl0eSBvciBvYmxpZ2F0aW9uIHRvIHN1cHBvcnQgdGhlIHVzZSBvZiB0aGUgQUZNIGZpbGVzLiJdLCJsaWNlbnNlSWRzIjpbIkFQQUZNTCJdLCJrZXl3b3JkcyI6WyJjb3B5cmlnaHQgYyAxOTg1IiwiYyAxOTg1IDE5ODciLCIxOTg1IDE5ODcgMTk4OSIsIjE5ODcgMTk4OSAxOTkwIiwiMTk4OSAxOTkwIDE5OTEiLCIxOTkyIDE5OTMgMTk5NyIsIjE5OTMgMTk5NyBhZG9iZSIsIjE5OTcgYWRvYmUgc3lzdGVtcyIsImFuZCB0aGUgMTQiLCJ0aGUgMTQgcG9zdHNjcmlwdCIsIjE0IHBvc3RzY3JpcHQgciIsInBvc3RzY3JpcHQgciBhZm0iLCJyIGFmbSBmaWxlcyIsImFmbSBmaWxlcyBpdCIsImZpbGVzIGl0IGFjY29tcGFuaWVzIiwiaXQgYWNjb21wYW5pZXMgbWF5IiwiYWNjb21wYW5pZXMgbWF5IGJlIiwiYmUgdXNlZCBjb3BpZWQiLCJ1c2VkIGNvcGllZCBhbmQiLCJhbmQgd2l0aG91dCBjaGFyZ2UiLCJ3aXRob3V0IGNoYXJnZSB3aXRoIiwiY2hhcmdlIHdpdGggb3IiLCJ3aXRob3V0IG1vZGlmaWNhdGlvbiBwcm92aWRlZCIsIm1vZGlmaWNhdGlvbiBwcm92aWRlZCB0aGF0IiwiYXJlIHJldGFpbmVkIHRoYXQiLCJyZXRhaW5lZCB0aGF0IHRoZSIsInRoYXQgdGhlIGFmbSIsImFyZSBub3QgZGlzdHJpYnV0ZWQiLCJub3QgZGlzdHJpYnV0ZWQgd2l0aG91dCIsImRpc3RyaWJ1dGVkIHdpdGhvdXQgdGhpcyIsIndpdGhvdXQgdGhpcyBmaWxlIiwidGhpcyBmaWxlIHRoYXQiLCJmaWxlIHRoYXQgYWxsIiwiZmlsZSBvciBhbnkiLCJmaWxlcyBhcmUgcHJvbWluZW50bHkiLCJhcmUgcHJvbWluZW50bHkgbm90ZWQiLCJwcm9taW5lbnRseSBub3RlZCBpbiIsIm1vZGlmaWVkIGZpbGUgcyIsImZpbGUgcyBhbmQiLCJzIGFuZCB0aGF0IiwidGhhdCB0aGlzIHBhcmFncmFwaCIsInBhcmFncmFwaCBpcyBub3QiLCJub3QgbW9kaWZpZWQgYWRvYmUiLCJtb2RpZmllZCBhZG9iZSBzeXN0ZW1zIiwiYWRvYmUgc3lzdGVtcyBoYXMiLCJzeXN0ZW1zIGhhcyBubyIsImhhcyBubyByZXNwb25zaWJpbGl0eSIsInJlc3BvbnNpYmlsaXR5IG9yIG9ibGlnYXRpb24iLCJvciBvYmxpZ2F0aW9uIHRvIiwib2JsaWdhdGlvbiB0byBzdXBwb3J0Iiwic3VwcG9ydCB0aGUgdXNlIiwiY29weXJpZ2h0IGMgMTk4NSAxOTg3IiwiYyAxOTg1IDE5ODcgMTk4OSIsIjE5ODUgMTk4NyAxOTg5IDE5OTAiLCIxOTg3IDE5ODkgMTk5MCAxOTkxIiwiMTk4OSAxOTkwIDE5OTEgMTk5MiIsIjE5OTEgMTk5MiAxOTkzIDE5OTciLCIxOTkyIDE5OTMgMTk5NyBhZG9iZSIsIjE5OTMgMTk5NyBhZG9iZSBzeXN0ZW1zIiwiMTk5NyBhZG9iZSBzeXN0ZW1zIGluY29ycG9yYXRlZCIsInJlc2VydmVkIHRoaXMgZmlsZSBhbmQiLCJmaWxlIGFuZCB0aGUgMTQiLCJhbmQgdGhlIDE0IHBvc3RzY3JpcHQiLCJ0aGUgMTQgcG9zdHNjcmlwdCByIiwiMTQgcG9zdHNjcmlwdCByIGFmbSIsInBvc3RzY3JpcHQgciBhZm0gZmlsZXMiLCJyIGFmbSBmaWxlcyBpdCIsImFmbSBmaWxlcyBpdCBhY2NvbXBhbmllcyIsImZpbGVzIGl0IGFjY29tcGFuaWVzIG1heSIsIml0IGFjY29tcGFuaWVzIG1heSBiZSIsImFjY29tcGFuaWVzIG1heSBiZSB1c2VkIiwibWF5IGJlIHVzZWQgY29waWVkIiwiYmUgdXNlZCBjb3BpZWQgYW5kIiwidXNlZCBjb3BpZWQgYW5kIGRpc3RyaWJ1dGVkIiwicHVycG9zZSBhbmQgd2l0aG91dCBjaGFyZ2UiLCJhbmQgd2l0aG91dCBjaGFyZ2Ugd2l0aCIsIndpdGhvdXQgY2hhcmdlIHdpdGggb3IiLCJjaGFyZ2Ugd2l0aCBvciB3aXRob3V0Iiwib3Igd2l0aG91dCBtb2RpZmljYXRpb24gcHJvdmlkZWQiLCJ3aXRob3V0IG1vZGlmaWNhdGlvbiBwcm92aWRlZCB0aGF0IiwibW9kaWZpY2F0aW9uIHByb3ZpZGVkIHRoYXQgYWxsIiwidGhhdCBhbGwgY29weXJpZ2h0IG5vdGljZXMiLCJub3RpY2VzIGFyZSByZXRhaW5lZCB0aGF0IiwiYXJlIHJldGFpbmVkIHRoYXQgdGhlIiwicmV0YWluZWQgdGhhdCB0aGUgYWZtIiwidGhhdCB0aGUgYWZtIGZpbGVzIiwiYWZtIGZpbGVzIGFyZSBub3QiLCJmaWxlcyBhcmUgbm90IGRpc3RyaWJ1dGVkIiwiYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRob3V0Iiwibm90IGRpc3RyaWJ1dGVkIHdpdGhvdXQgdGhpcyIsImRpc3RyaWJ1dGVkIHdpdGhvdXQgdGhpcyBmaWxlIiwid2l0aG91dCB0aGlzIGZpbGUgdGhhdCIsInRoaXMgZmlsZSB0aGF0IGFsbCIsImZpbGUgdGhhdCBhbGwgbW9kaWZpY2F0aW9ucyIsInRoYXQgYWxsIG1vZGlmaWNhdGlvbnMgdG8iLCJhbGwgbW9kaWZpY2F0aW9ucyB0byB0aGlzIiwibW9kaWZpY2F0aW9ucyB0byB0aGlzIGZpbGUiLCJ0byB0aGlzIGZpbGUgb3IiLCJ0aGlzIGZpbGUgb3IgYW55IiwiZmlsZSBvciBhbnkgb2YiLCJhbnkgb2YgdGhlIGFmbSIsImFmbSBmaWxlcyBhcmUgcHJvbWluZW50bHkiLCJmaWxlcyBhcmUgcHJvbWluZW50bHkgbm90ZWQiLCJhcmUgcHJvbWluZW50bHkgbm90ZWQgaW4iLCJwcm9taW5lbnRseSBub3RlZCBpbiB0aGUiLCJub3RlZCBpbiB0aGUgbW9kaWZpZWQiLCJ0aGUgbW9kaWZpZWQgZmlsZSBzIiwibW9kaWZpZWQgZmlsZSBzIGFuZCIsImZpbGUgcyBhbmQgdGhhdCIsInMgYW5kIHRoYXQgdGhpcyIsImFuZCB0aGF0IHRoaXMgcGFyYWdyYXBoIiwidGhhdCB0aGlzIHBhcmFncmFwaCBpcyIsInRoaXMgcGFyYWdyYXBoIGlzIG5vdCIsInBhcmFncmFwaCBpcyBub3QgbW9kaWZpZWQiLCJpcyBub3QgbW9kaWZpZWQgYWRvYmUiLCJub3QgbW9kaWZpZWQgYWRvYmUgc3lzdGVtcyIsIm1vZGlmaWVkIGFkb2JlIHN5c3RlbXMgaGFzIiwiYWRvYmUgc3lzdGVtcyBoYXMgbm8iLCJzeXN0ZW1zIGhhcyBubyByZXNwb25zaWJpbGl0eSIsImhhcyBubyByZXNwb25zaWJpbGl0eSBvciIsIm5vIHJlc3BvbnNpYmlsaXR5IG9yIG9ibGlnYXRpb24iLCJyZXNwb25zaWJpbGl0eSBvciBvYmxpZ2F0aW9uIHRvIiwib3Igb2JsaWdhdGlvbiB0byBzdXBwb3J0Iiwib2JsaWdhdGlvbiB0byBzdXBwb3J0IHRoZSIsInRvIHN1cHBvcnQgdGhlIHVzZSIsInN1cHBvcnQgdGhlIHVzZSBvZiIsInVzZSBvZiB0aGUgYWZtIiwiY29weXJpZ2h0IGMgMTk4NSAxOTg3IDE5ODkiLCJjIDE5ODUgMTk4NyAxOTg5IDE5OTAiLCIxOTg1IDE5ODcgMTk4OSAxOTkwIDE5OTEiLCIxOTg3IDE5ODkgMTk5MCAxOTkxIDE5OTIiLCIxOTg5IDE5OTAgMTk5MSAxOTkyIDE5OTMiLCIxOTkwIDE5OTEgMTk5MiAxOTkzIDE5OTciLCIxOTkxIDE5OTIgMTk5MyAxOTk3IGFkb2JlIiwiMTk5MiAxOTkzIDE5OTcgYWRvYmUgc3lzdGVtcyIsIjE5OTMgMTk5NyBhZG9iZSBzeXN0ZW1zIGluY29ycG9yYXRlZCIsIjE5OTcgYWRvYmUgc3lzdGVtcyBpbmNvcnBvcmF0ZWQgYWxsIiwicmlnaHRzIHJlc2VydmVkIHRoaXMgZmlsZSBhbmQiLCJyZXNlcnZlZCB0aGlzIGZpbGUgYW5kIHRoZSIsInRoaXMgZmlsZSBhbmQgdGhlIDE0IiwiZmlsZSBhbmQgdGhlIDE0IHBvc3RzY3JpcHQiLCJhbmQgdGhlIDE0IHBvc3RzY3JpcHQgciIsInRoZSAxNCBwb3N0c2NyaXB0IHIgYWZtIiwiMTQgcG9zdHNjcmlwdCByIGFmbSBmaWxlcyIsInBvc3RzY3JpcHQgciBhZm0gZmlsZXMgaXQiLCJyIGFmbSBmaWxlcyBpdCBhY2NvbXBhbmllcyIsImFmbSBmaWxlcyBpdCBhY2NvbXBhbmllcyBtYXkiLCJmaWxlcyBpdCBhY2NvbXBhbmllcyBtYXkgYmUiLCJpdCBhY2NvbXBhbmllcyBtYXkgYmUgdXNlZCIsImFjY29tcGFuaWVzIG1heSBiZSB1c2VkIGNvcGllZCIsIm1heSBiZSB1c2VkIGNvcGllZCBhbmQiLCJiZSB1c2VkIGNvcGllZCBhbmQgZGlzdHJpYnV0ZWQiLCJ1c2VkIGNvcGllZCBhbmQgZGlzdHJpYnV0ZWQgZm9yIiwiZGlzdHJpYnV0ZWQgZm9yIGFueSBwdXJwb3NlIGFuZCIsImFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGNoYXJnZSIsInB1cnBvc2UgYW5kIHdpdGhvdXQgY2hhcmdlIHdpdGgiLCJhbmQgd2l0aG91dCBjaGFyZ2Ugd2l0aCBvciIsIndpdGhvdXQgY2hhcmdlIHdpdGggb3Igd2l0aG91dCIsImNoYXJnZSB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uIiwid2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiBwcm92aWRlZCIsIm9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uIHByb3ZpZGVkIHRoYXQiLCJ3aXRob3V0IG1vZGlmaWNhdGlvbiBwcm92aWRlZCB0aGF0IGFsbCIsIm1vZGlmaWNhdGlvbiBwcm92aWRlZCB0aGF0IGFsbCBjb3B5cmlnaHQiLCJwcm92aWRlZCB0aGF0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyIsInRoYXQgYWxsIGNvcHlyaWdodCBub3RpY2VzIGFyZSIsImNvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCB0aGF0Iiwibm90aWNlcyBhcmUgcmV0YWluZWQgdGhhdCB0aGUiLCJhcmUgcmV0YWluZWQgdGhhdCB0aGUgYWZtIiwicmV0YWluZWQgdGhhdCB0aGUgYWZtIGZpbGVzIiwidGhhdCB0aGUgYWZtIGZpbGVzIGFyZSIsInRoZSBhZm0gZmlsZXMgYXJlIG5vdCIsImFmbSBmaWxlcyBhcmUgbm90IGRpc3RyaWJ1dGVkIiwiZmlsZXMgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRob3V0IiwiYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRob3V0IHRoaXMiLCJub3QgZGlzdHJpYnV0ZWQgd2l0aG91dCB0aGlzIGZpbGUiLCJkaXN0cmlidXRlZCB3aXRob3V0IHRoaXMgZmlsZSB0aGF0Iiwid2l0aG91dCB0aGlzIGZpbGUgdGhhdCBhbGwiLCJ0aGlzIGZpbGUgdGhhdCBhbGwgbW9kaWZpY2F0aW9ucyIsImZpbGUgdGhhdCBhbGwgbW9kaWZpY2F0aW9ucyB0byIsInRoYXQgYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhpcyIsImFsbCBtb2RpZmljYXRpb25zIHRvIHRoaXMgZmlsZSIsIm1vZGlmaWNhdGlvbnMgdG8gdGhpcyBmaWxlIG9yIiwidG8gdGhpcyBmaWxlIG9yIGFueSIsInRoaXMgZmlsZSBvciBhbnkgb2YiLCJmaWxlIG9yIGFueSBvZiB0aGUiLCJvciBhbnkgb2YgdGhlIGFmbSIsImFueSBvZiB0aGUgYWZtIGZpbGVzIiwib2YgdGhlIGFmbSBmaWxlcyBhcmUiLCJ0aGUgYWZtIGZpbGVzIGFyZSBwcm9taW5lbnRseSIsImFmbSBmaWxlcyBhcmUgcHJvbWluZW50bHkgbm90ZWQiLCJmaWxlcyBhcmUgcHJvbWluZW50bHkgbm90ZWQgaW4iLCJhcmUgcHJvbWluZW50bHkgbm90ZWQgaW4gdGhlIiwicHJvbWluZW50bHkgbm90ZWQgaW4gdGhlIG1vZGlmaWVkIiwibm90ZWQgaW4gdGhlIG1vZGlmaWVkIGZpbGUiLCJpbiB0aGUgbW9kaWZpZWQgZmlsZSBzIiwidGhlIG1vZGlmaWVkIGZpbGUgcyBhbmQiLCJtb2RpZmllZCBmaWxlIHMgYW5kIHRoYXQiLCJmaWxlIHMgYW5kIHRoYXQgdGhpcyIsInMgYW5kIHRoYXQgdGhpcyBwYXJhZ3JhcGgiLCJhbmQgdGhhdCB0aGlzIHBhcmFncmFwaCBpcyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJBREFQVElWRSBQVUJMSUMgTElDRU5TRVxuXG5WZXJzaW9uIDEuMFxuXG5USEUgTElDRU5TRUQgV09SSyBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBBREFQVElWRSBQVUJMSUMgTElDRU5TRSAoXCJMSUNFTlNFXCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBMSUNFTlNFRCBXT1JLIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBMSUNFTlNFIEFORCBJVFMgVEVSTVMsIFdIRVRIRVIgT1IgTk9UIFNVQ0ggUkVDSVBJRU5UIFJFQURTIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFwiTElDRU5TRUQgV09SS1wiIEFORCBcIlJFQ0lQSUVOVFwiIEFSRSBERUZJTkVEIEJFTE9XLlxuXG5JTVBPUlRBTlQgTk9URTogVGhpcyBMaWNlbnNlIGlzIFwiYWRhcHRpdmVcIiwgYW5kIHRoZSBnZW5lcmljIHZlcnNpb24gb3IgYW5vdGhlciB2ZXJzaW9uIG9mIGFuIEFkYXB0aXZlIFB1YmxpYyBMaWNlbnNlIHNob3VsZCBub3QgYmUgcmVsaWVkIHVwb24gdG8gZGV0ZXJtaW5lIHlvdXIgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IHJlYWQgdGhlIHNwZWNpZmljIEFkYXB0aXZlIFB1YmxpYyBMaWNlbnNlIHRoYXQgeW91IHJlY2VpdmUgd2l0aCB0aGUgTGljZW5zZWQgV29yaywgYXMgY2VydGFpbiB0ZXJtcyBhcmUgZGVmaW5lZCBhdCB0aGUgb3V0c2V0IGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLlxuXG5TZWUgU2VjdGlvbiAyLjIgYmVsb3csIEV4aGliaXQgQSBhdHRhY2hlZCwgYW5kIGFueSBTdXBwZmlsZS50eHQgYWNjb21wYW55aW5nIHRoaXMgTGljZW5zZSB0byBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIGFkYXB0aXZlIGZlYXR1cmVzIGFwcGxpY2FibGUgdG8gdGhpcyBMaWNlbnNlLiBGb3IgZXhhbXBsZSwgd2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nLCAoYSkgZm9yIHNlbGVjdGVkIGNob2ljZSBvZiBsYXcgYW5kIGp1cmlzZGljdGlvbiBzZWUgUGFydCAzIG9mIEV4aGliaXQgQTsgKGIpIGZvciB0aGUgc2VsZWN0ZWQgZGVmaW5pdGlvbiBvZiBUaGlyZCBQYXJ0eSBzZWUgUGFydCA0IG9mIEV4aGliaXQgQTsgYW5kIChjKSBmb3Igc2VsZWN0ZWQgcGF0ZW50IGxpY2Vuc2luZyB0ZXJtcyAoaWYgYW55KSBzZWUgU2VjdGlvbiAyLjIgYmVsb3cgYW5kIFBhcnQgNiBvZiBFeGhpYml0IEEuXG5cbiAgIDEuIERFRklOSVRJT05TLlxuXG4gICAgICAxLjEuIFwiQ09OVFJJQlVUSU9OXCIgbWVhbnM6XG5cbiAgICAgICAgIChhKSBJbiB0aGUgY2FzZSBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvciwgdGhlIEluaXRpYWwgV29yayBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3I7IGFuZFxuXG4gICAgICAgICAoYikgSW4gdGhlIGNhc2Ugb2YgZWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCB0aGUgU3Vic2VxdWVudCBXb3JrIG9yaWdpbmF0aW5nIGZyb20gYW5kIGRpc3RyaWJ1dGVkIGJ5IHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvci5cblxuICAgICAgMS4yLiBcIkRFU0lHTkFURUQgV0VCIFNJVEVcIiBtZWFucyB0aGUgd2ViIHNpdGUgaGF2aW5nIHRoZSBVUkwgaWRlbnRpZmllZCBpbiBQYXJ0IDEgb2YgRXhoaWJpdCBBLCB3aGljaCBVUkwgbWF5IGJlIGNoYW5nZWQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgYnkgcG9zdGluZyBvbiB0aGUgY3VycmVudCBEZXNpZ25hdGVkIFdlYiBTaXRlIHRoZSBuZXcgVVJMIGZvciBhdCBsZWFzdCBzaXh0eSAoNjApIGRheXMuXG5cbiAgICAgIDEuMy4gXCJESVNUUklCVVRPUlwiIG1lYW5zIGFueSBQZXJzb24gdGhhdCBkaXN0cmlidXRlcyB0aGUgTGljZW5zZWQgV29yayBvciBhbnkgcG9ydGlvbiB0aGVyZW9mIHRvIGF0IGxlYXN0IG9uZSBUaGlyZCBQYXJ0eS5cblxuICAgICAgMS40LiBcIkVMRUNUUk9OSUMgRElTVFJJQlVUSU9OIE1FQ0hBTklTTVwiIG1lYW5zIGFueSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuXG5cbiAgICAgIDEuNS4gXCJFWEVDVVRBQkxFXCIgbWVhbnMgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS5cblxuICAgICAgMS42LiBcIkdPVkVSTklORyBKVVJJU0RJQ1RJT05cIiBtZWFucyB0aGUgc3RhdGUsIHByb3ZpbmNlIG9yIG90aGVyIGxlZ2FsIGp1cmlzZGljdGlvbiBpZGVudGlmaWVkIGluIFBhcnQgMyBvZiBFeGhpYml0IEEuXG5cbiAgICAgIDEuNy4gXCJJTkRFUEVOREVOVCBNT0RVTEVcIiBtZWFucyBhIHNlcGFyYXRlIG1vZHVsZSBvZiBzb2Z0d2FyZSBhbmQvb3IgZGF0YSB0aGF0IGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiBvciBjb3BpZWQgZnJvbSB0aGUgTGljZW5zZWQgV29yayBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLiBJbiBhZGRpdGlvbiwgYSBtb2R1bGUgZG9lcyBub3QgcXVhbGlmeSBhcyBhbiBJbmRlcGVuZGVudCBNb2R1bGUgYnV0IGluc3RlYWQgZm9ybXMgcGFydCBvZiB0aGUgTGljZW5zZWQgV29yayBpZiB0aGUgbW9kdWxlOiAoYSkgaXMgZW1iZWRkZWQgaW4gdGhlIExpY2Vuc2VkIFdvcms7IChiKSBpcyBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhlIExpY2Vuc2VkIFdvcmsgb3RoZXIgdGhhbiBieSBhIGZ1bmN0aW9uIGNhbGwgb3IgYSBjbGFzcyByZWZlcmVuY2U7IG9yIChjKSBtdXN0IGJlIGluY2x1ZGVkIG9yIGNvbnRhaW5lZCwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aGluIGEgZmlsZSBkaXJlY3Rvcnkgb3Igc3ViZGlyZWN0b3J5IGFjdHVhbGx5IGNvbnRhaW5pbmcgZmlsZXMgbWFraW5nIHVwIHRoZSBMaWNlbnNlZCBXb3JrLlxuXG4gICAgICAxLjguIFwiSU5JVElBTCBDT05UUklCVVRPUlwiIG1lYW5zIHRoZSBQZXJzb24gb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSByZXF1aXJlZCBieSBQYXJ0IDEgb2YgRXhoaWJpdCBBLlxuXG4gICAgICAxLjkuIFwiSU5JVElBTCBXT1JLXCIgbWVhbnMgdGhlIGluaXRpYWwgU291cmNlIENvZGUsIG9iamVjdCBjb2RlIChpZiBhbnkpIGFuZCBkb2N1bWVudGF0aW9uIGZvciB0aGUgY29tcHV0ZXIgcHJvZ3JhbSBpZGVudGlmaWVkIGluIFBhcnQgMiBvZiBFeGhpYml0IEEsIGFzIHN1Y2ggU291cmNlIENvZGUsIG9iamVjdCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZSBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvci5cblxuICAgICAgMS4xMC4gXCJMQVJHRVIgV09SS1wiIG1lYW5zIGEgd29yayB0aGF0IGNvbWJpbmVzIHRoZSBMaWNlbnNlZCBXb3JrIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuMTEuIFwiTElDRU5TRUQgV09SS1wiIG1lYW5zIHRoZSBJbml0aWFsIFdvcmsgYW5kL29yIGFueSBTdWJzZXF1ZW50IFdvcmssIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi5cblxuICAgICAgMS4xMi4gXCJMSUNFTlNFIE5PVElDRVwiIGhhcyB0aGUgbWVhbmluZyBhc3NpZ25lZCBpbiBQYXJ0IDUgb2YgRXhoaWJpdCBBLlxuXG4gICAgICAxLjEzLiBcIk1PRElGSUNBVElPTlwiIG9yIFwiTU9ESUZJQ0FUSU9OU1wiIG1lYW5zIGFueSBjaGFuZ2UgdG8gYW5kL29yIGFkZGl0aW9uIHRvIHRoZSBMaWNlbnNlZCBXb3JrLlxuXG4gICAgICAxLjE0LiBcIlBFUlNPTlwiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3Igb3RoZXIgbGVnYWwgZW50aXR5LCBpbmNsdWRpbmcgYSBjb3Jwb3JhdGlvbiwgcGFydG5lcnNoaXAgb3Igb3RoZXIgYm9keS5cblxuICAgICAgMS4xNS4gXCJSRUNJUElFTlRcIiBtZWFucyBhbnkgUGVyc29uIHdobyByZWNlaXZlcyBvciBvYnRhaW5zIHRoZSBMaWNlbnNlZCBXb3JrIHVuZGVyIHRoaXMgTGljZW5zZSAoYnkgd2F5IG9mIGV4YW1wbGUsIHdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgYW55IFN1YnNlcXVlbnQgQ29udHJpYnV0b3Igb3IgRGlzdHJpYnV0b3IpLlxuXG4gICAgICAxLjE2LiBcIlNPVVJDRSBDT0RFXCIgbWVhbnMgdGhlIHNvdXJjZSBjb2RlIGZvciBhIGNvbXB1dGVyIHByb2dyYW0sIGluY2x1ZGluZyB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGFuZCBjb21wb25lbnRzIG9mIHRoZSBjb21wdXRlciBwcm9ncmFtLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBhbmQgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlLlxuXG4gICAgICAxLjE3LiBcIlNVQlNFUVVFTlQgQ09OVFJJQlVUT1JcIiBtZWFucyBhbnkgUGVyc29uIHRoYXQgbWFrZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIG1ha2luZyBvZiBhbnkgU3Vic2VxdWVudCBXb3JrIGFuZCB0aGF0IGRpc3RyaWJ1dGVzIHRoYXQgU3Vic2VxdWVudCBXb3JrIHRvIGF0IGxlYXN0IG9uZSBUaGlyZCBQYXJ0eS5cblxuICAgICAgMS4xOC4gXCJTVUJTRVFVRU5UIFdPUktcIiBtZWFucyBhIHdvcmsgdGhhdCBoYXMgcmVzdWx0ZWQgb3IgYXJpc2VzIGZyb20gY2hhbmdlcyB0byBhbmQvb3IgYWRkaXRpb25zIHRvOlxuXG4gICAgICAgICAoYSkgdGhlIEluaXRpYWwgV29yaztcblxuICAgICAgICAgKGIpIGFueSBvdGhlciBTdWJzZXF1ZW50IFdvcms7IG9yXG5cbiAgICAgICAgIChjKSB0byBhbnkgY29tYmluYXRpb24gb2YgdGhlIEluaXRpYWwgV29yayBhbmQgYW55IHN1Y2ggb3RoZXIgU3Vic2VxdWVudCBXb3JrO1xuXG4gICAgICAgICB3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyBvcmlnaW5hdGUgZnJvbSBhIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IuIEEgU3Vic2VxdWVudCBXb3JrIHdpbGwgXCJvcmlnaW5hdGVcIiBmcm9tIGEgU3Vic2VxdWVudCBDb250cmlidXRvciBpZiB0aGUgU3Vic2VxdWVudCBXb3JrIHdhcyBhIHJlc3VsdCBvZiBlZmZvcnRzIGJ5IHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvciAob3IgYW55b25lIGFjdGluZyBvbiBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IncyBiZWhhbGYsIHN1Y2ggYXMsIGEgY29udHJhY3RvciBvciBvdGhlciBlbnRpdHkgdGhhdCBpcyBlbmdhZ2VkIGJ5IG9yIHVuZGVyIHRoZSBkaXJlY3Rpb24gb2YgdGhlIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IpLiBGb3IgZ3JlYXRlciBjZXJ0YWludHksIGEgU3Vic2VxdWVudCBXb3JrIGV4cHJlc3NseSBleGNsdWRlcyBhbmQgc2hhbGwgbm90IGNhcHR1cmUgd2l0aGluIGl0cyBtZWFuaW5nIGFueSBJbmRlcGVuZGVudCBNb2R1bGUuXG5cbiAgICAgIDEuMTkuIFwiU1VQUExFTUVOVCBGSUxFXCIgbWVhbnMgYSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhlIExpY2Vuc2VkIFdvcmsgaGF2aW5nIGEgZmlsZSBuYW1lIFwic3VwcGZpbGUudHh0XCIuXG5cbiAgICAgIDEuMjAuIFwiVEhJUkQgUEFSVFlcIiBoYXMgdGhlIG1lYW5pbmcgYXNzaWduZWQgaW4gUGFydCA0IG9mIEV4aGliaXQgQS5cblxuICAgMi4gTElDRU5TRS5cblxuICAgICAgMi4xLiBDT1BZUklHSFQgTElDRU5TRSBGUk9NIElOSVRJQUwgQU5EIFNVQlNFUVVFTlQgQ09OVFJJQlVUT1JTLlxuXG4gICAgICAgICAoYSkgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIGVhY2ggUmVjaXBpZW50IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGNvcHlyaWdodCBsaWNlbnNlIHRvOlxuXG4gICAgICAgICAgICAoaSkgcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIEluaXRpYWwgV29yazsgYW5kXG5cbiAgICAgICAgICAgIChpaSkgcmVwcm9kdWNlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlLCBhbmQgc3VibGljZW5zZSBhbnkgZGVyaXZhdGl2ZSB3b3JrcyAoaWYgYW55KSBwcmVwYXJlZCBieSBSZWNpcGllbnQ7XG5cbiAgICAgICAgICAgIGluIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0sIGVpdGhlciB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yay5cblxuICAgICAgICAgKGIpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgZWFjaCBSZWNpcGllbnQgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgY29weXJpZ2h0IGxpY2Vuc2UgdG86XG5cbiAgICAgICAgICAgIChpKSByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgU3Vic2VxdWVudCBXb3JrIG9mIHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvcjsgYW5kXG5cbiAgICAgICAgICAgIChpaSkgcmVwcm9kdWNlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlLCBhbmQgc3VibGljZW5zZSBhbnkgZGVyaXZhdGl2ZSB3b3JrcyAoaWYgYW55KSBwcmVwYXJlZCBieSBSZWNpcGllbnQ7XG5cbiAgICAgICAgICAgIGluIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0sIGVpdGhlciB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yay5cblxuICAgICAgMi4yLiBQQVRFTlQgTElDRU5TRSBGUk9NIElOSVRJQUwgQU5EIFNVQlNFUVVFTlQgQ09OVFJJQlVUT1JTLlxuXG4gICAgICAgICAoYSkgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGluY2x1ZGUgb3IgZ3JhbnQgYW55IHBhdGVudCBsaWNlbnNlIHdoYXRzb2V2ZXIgZnJvbSB0aGUgSW5pdGlhbCBDb250cmlidXRvciwgU3Vic2VxdWVudCBDb250cmlidXRvciwgb3IgYW55IERpc3RyaWJ1dG9yIHVubGVzcywgYXQgdGhlIHRpbWUgdGhlIEluaXRpYWwgV29yayBpcyBmaXJzdCBkaXN0cmlidXRlZCBvciBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UgKGFzIHRoZSBjYXNlIG1heSBiZSksIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGhhcyBzZWxlY3RlZCBwdXJzdWFudCB0byBQYXJ0IDYgb2YgRXhoaWJpdCBBIHRoZSBwYXRlbnQgdGVybXMgaW4gcGFyYWdyYXBocyBBLCBCLCBDLCBEIGFuZCBFIGZyb20gUGFydCA2IG9mIEV4aGliaXQgQS4gSWYgdGhpcyBpcyBub3QgZG9uZSB0aGVuIHRoZSBJbml0aWFsIFdvcmsgYW5kIGFueSBvdGhlciBTdWJzZXF1ZW50IFdvcmsgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2Ugd2l0aG91dCBhbnkgcGF0ZW50IGxpY2Vuc2UgKHRoZSBcIlBBVEVOVFMtRVhDTFVERUQgTElDRU5TRVwiKS5cblxuICAgICAgICAgKGIpIEhvd2V2ZXIsIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBzdWJzZXF1ZW50bHkgZGlzdHJpYnV0ZSBvciBtYWtlIGF2YWlsYWJsZSAoYXMgdGhlIGNhc2UgbWF5IGJlKSBmdXR1cmUgY29waWVzIG9mOiAoMSkgdGhlIEluaXRpYWwgV29yazsgb3IgKDIpIGFueSBMaWNlbnNlZCBXb3JrIGRpc3RyaWJ1dGVkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIHdoaWNoIGluY2x1ZGVzIHRoZSBJbml0aWFsIFdvcmsgKG9yIGFueSBwb3J0aW9uIHRoZXJlb2YpIGFuZC9vciBhbnkgTW9kaWZpY2F0aW9uIG1hZGUgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3I7IGF2YWlsYWJsZSB1bmRlciBhIExpY2Vuc2Ugd2hpY2ggaW5jbHVkZXMgYSBwYXRlbnQgbGljZW5zZSAodGhlIFwiUEFURU5UUy1JTkNMVURFRCBMSUNFTlNFXCIpIGJ5IHNlbGVjdGluZyBwdXJzdWFudCB0byBQYXJ0IDYgb2YgRXhoaWJpdCBBIHRoZSBwYXRlbnQgdGVybXMgaW4gcGFyYWdyYXBocyBBLCBCLCBDLCBEIGFuZCBFIGZyb20gUGFydCA2IG9mIEV4aGliaXQgQSwgd2hlbiB0aGUgSW5pdGlhbCBDb250cmlidXRvciBkaXN0cmlidXRlcyBvciBtYWtlcyBhdmFpbGFibGUgKGFzIHRoZSBjYXNlIG1heSBiZSkgc3VjaCBmdXR1cmUgY29waWVzIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgICAgKGMpIElmIGFueSBSZWNpcGllbnQgcmVjZWl2ZXMgb3Igb2J0YWlucyBvbmUgb3IgbW9yZSBjb3BpZXMgb2YgdGhlIEluaXRpYWwgV29yayBvciBhbnkgb3RoZXIgcG9ydGlvbiBvZiB0aGUgTGljZW5zZWQgV29yayB1bmRlciB0aGUgUGF0ZW50cy1JbmNsdWRlZCBMaWNlbnNlLCB0aGVuIGFsbCBsaWNlbnNpbmcgb2Ygc3VjaCBjb3BpZXMgdW5kZXIgdGhpcyBMaWNlbnNlIHNoYWxsIGluY2x1ZGUgdGhlIHRlcm1zIGluIHBhcmFncmFwaHMgQSwgQiwgQywgRCBhbmQgRSBmcm9tIFBhcnQgNiBvZiBFeGhpYml0IEEgYW5kIHRoYXQgUmVjaXBpZW50IHNoYWxsIG5vdCBiZSBhYmxlIHRvIHJlbHkgdXBvbiB0aGUgUGF0ZW50cy1FeGNsdWRlZCBMaWNlbnNlIGZvciBhbnkgc3VjaCBjb3BpZXMuIEhvd2V2ZXIsIGFsbCBSZWNpcGllbnRzIHRoYXQgcmVjZWl2ZSBvbmUgb3IgbW9yZSBjb3BpZXMgb2YgdGhlIEluaXRpYWwgV29yayBvciBhbnkgb3RoZXIgcG9ydGlvbiBvZiB0aGUgTGljZW5zZWQgV29yayB1bmRlciBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ugd2hpY2ggaW5jbHVkZXMgdGhlIFBhdGVudHMtRXhjbHVkZWQgTGljZW5zZSBzaGFsbCBoYXZlIG5vIHBhdGVudCBsaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzdWNoIGNvcGllcyByZWNlaXZlZCB1bmRlciB0aGUgUGF0ZW50cy1FeGNsdWRlZCBMaWNlbnNlIGFuZCBhdmFpbGFiaWxpdHkgYW5kIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvcGllcywgaW5jbHVkaW5nIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFJlY2lwaWVudCB0byBzdWNoIGNvcGllcywgc2hhbGwgYmUgdW5kZXIgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIHdpdGhvdXQgYW55IHBhdGVudCBsaWNlbnNlLlxuXG4gICAgICAgICAoZCkgV2hlcmUgYSBSZWNpcGllbnQgdXNlcyBpbiBjb21iaW5hdGlvbiBvciBjb21iaW5lcyBhbnkgY29weSBvZiB0aGUgTGljZW5zZWQgV29yayAob3IgcG9ydGlvbiB0aGVyZW9mKSBsaWNlbnNlZCB1bmRlciBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgaGF2aW5nIGEgUGF0ZW50cy1FeGNsdWRlZCBMaWNlbnNlIHdpdGggYW55IGNvcHkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgKG9yIHBvcnRpb24gdGhlcmVvZikgbGljZW5zZWQgdW5kZXIgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGhhdmluZyBhIFBhdGVudHMtSW5jbHVkZWQgTGljZW5zZSwgdGhlIGNvbWJpbmF0aW9uIChhbmQgYW55IHBvcnRpb24gdGhlcmVvZikgc2hhbGwsIGZyb20gdGhlIGZpcnN0IHRpbWUgc3VjaCBSZWNpcGllbnQgdXNlcywgbWFrZXMgYXZhaWxhYmxlIG9yIGRpc3RyaWJ1dGVzIHRoZSBjb21iaW5hdGlvbiAoYXMgdGhlIGNhc2UgbWF5IGJlKSwgYmUgc3ViamVjdCB0byBvbmx5IHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZSBoYXZpbmcgdGhlIFBhdGVudHMtSW5jbHVkZWQgTGljZW5zZSB3aGljaCBzaGFsbCBpbmNsdWRlIHRoZSB0ZXJtcyBpbiBwYXJhZ3JhcGhzIEEsIEIsIEMsIEQgYW5kIEUgZnJvbSBQYXJ0IDYgb2YgRXhoaWJpdCBBLlxuXG4gICAgICAyLjMuIEFDS05PV0xFREdFTUVOVCBBTkQgRElTQ0xBSU1FUi5cblxuICAgICAgUmVjaXBpZW50IHVuZGVyc3RhbmRzIGFuZCBhZ3JlZXMgdGhhdCBhbHRob3VnaCBJbml0aWFsIENvbnRyaWJ1dG9yIGFuZCBlYWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyByZXByZXNlbnRhdGlvbiwgd2FycmFudHksIGd1YXJhbnRlZSBvciBhc3N1cmFuY2UgaXMgcHJvdmlkZWQgYnkgYW55IEluaXRpYWwgQ29udHJpYnV0b3IsIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIG9yIERpc3RyaWJ1dG9yIHRoYXQgdGhlIExpY2Vuc2VkIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEluaXRpYWwgQ29udHJpYnV0b3IsIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIGFuZCBlYWNoIERpc3RyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UsIGluIHJlbGF0aW9uIHRvIHRoZSBMaWNlbnNlZCBXb3Jrcy4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCB3aXRob3V0IGxpbWl0aW5nIHRoZSBmb3JlZ29pbmcgZGlzY2xhaW1lcnMsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUgdGhlIExpY2Vuc2VkIFdvcmssIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIExpY2Vuc2VkIFdvcmsuXG5cbiAgICAgIDIuNC4gUkVTRVJWQVRJT04uXG5cbiAgICAgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBvciBEaXN0cmlidXRvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uXG5cbiAgIDMuIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUy5cblxuICAgICAgMy4xLiBESVNUUklCVVRJT04gR0VORVJBTExZLlxuXG4gICAgICAgICAoYSkgQSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIHNoYWxsIG1ha2UgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yJ3MgU3Vic2VxdWVudCBXb3JrKHMpIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHZpYSBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gZm9yIGEgcGVyaW9kIG9mIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocy4gVGhlIGFmb3Jlc2FpZCB0d2VsdmUgKDEyKSBtb250aCBwZXJpb2Qgc2hhbGwgYmVnaW4gd2l0aGluIGEgcmVhc29uYWJsZSB0aW1lIGFmdGVyIHRoZSBjcmVhdGlvbiBvZiB0aGUgU3Vic2VxdWVudCBXb3JrIGFuZCBubyBsYXRlciB0aGFuIHNpeHR5ICg2MCkgZGF5cyBhZnRlciBmaXJzdCBkaXN0cmlidXRpb24gb2YgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yJ3MgU3Vic2VxdWVudCBXb3JrLlxuXG4gICAgICAgICAoYikgQWxsIERpc3RyaWJ1dG9ycyBtdXN0IGRpc3RyaWJ1dGUgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZSwgYW5kIG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIEV4aGliaXQgQSBhbmQgdGhlIGFjY29tcGFueWluZyBTdXBwbGVtZW50IEZpbGUpIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBMaWNlbnNlZCBXb3JrIGRpc3RyaWJ1dGVkLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIExpY2Vuc2UgbXVzdCBiZSBwcm9taW5lbnRseSBkaXN0cmlidXRlZCB3aXRoIHRoZSBMaWNlbnNlZCBXb3JrIGluIGEgZmlsZSBjYWxsZWQgXCJsaWNlbnNlLnR4dC5cIiBJbiBhZGRpdGlvbiwgdGhlIExpY2Vuc2UgTm90aWNlIGluIFBhcnQgNSBvZiBFeGhpYml0IEEgbXVzdCBiZSBpbmNsdWRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFsbCBTb3VyY2UgQ29kZSBmaWxlcywgYW5kIHZpZXdhYmxlIHRvIGEgdXNlciBpbiBhbnkgZXhlY3V0YWJsZSBzdWNoIHRoYXQgdGhlIExpY2Vuc2UgTm90aWNlIGlzIHJlYXNvbmFibHkgYnJvdWdodCB0byB0aGUgYXR0ZW50aW9uIG9mIGFueSBwYXJ0eSB1c2luZyB0aGUgTGljZW5zZWQgV29yay5cblxuICAgICAgMy4yLiBFWEVDVVRBQkxFIERJU1RSSUJVVElPTlMgT0YgVEhFIExJQ0VOU0VEIFdPUksuXG5cbiAgICAgIEEgRGlzdHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBXb3JrLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBpbiBFeGVjdXRhYmxlIGZvcm0gKGFuIFwiRVhFQ1VUQUJMRSBESVNUUklCVVRJT05cIikgdG8gYW55IHRoaXJkIHBhcnR5LCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAyIG9mIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhlIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGFuZCBhY2NvbXBhbmllZCBieSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBBTkQgcHJvdmlkZWQgYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyBmdWxmaWxsZWQ6XG5cbiAgICAgICAgIChhKSBUaGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgU291cmNlIENvZGUgZm9yIHRoZSBMaWNlbnNlZCBXb3JrIG1ha2luZyB1cCB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24sIGFuZCB0aGUgU291cmNlIENvZGUgbXVzdCBiZSBkaXN0cmlidXRlZCBvbiB0aGUgc2FtZSBtZWRpYSBhcyB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gb3IgdXNpbmcgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtOyBvclxuXG4gICAgICAgICAoYikgVGhlIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aGlydHkgc2l4ICgzNikgbW9udGhzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgZm9yIHRoZSBMaWNlbnNlZCBXb3JrIG1ha2luZyB1cCB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24sIHRvIGJlIGF2YWlsYWJsZSBhbmQgZGlzdHJpYnV0ZWQgdXNpbmcgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBhbmQgc3VjaCBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiBtdXN0IHJlbWFpbiBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB0byBhbnkgdGhpcmQgcGFydHkgdmlhIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gKG9yIGFueSByZXBsYWNlbWVudCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdGhlIHBhcnRpY3VsYXIgRGlzdHJpYnV0b3IgbWF5IHJlYXNvbmFibHkgbmVlZCB0byB0dXJuIHRvIGFzIGEgc3Vic3RpdHV0ZSkgZm9yIHNhaWQgYXQgbGVhc3QgdGhpcnR5IHNpeCAoMzYpIG1vbnRocy5cblxuICAgICAgRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGUgYWJvdmUtbm90ZWQgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIGFueSBMaWNlbnNlZCBXb3JrIG9yIHBvcnRpb24gdGhlcmVvZiBkaXN0cmlidXRlZCB0byBhbnkgdGhpcmQgcGFydHkgaW4gRXhlY3V0YWJsZSBmb3JtLCB3aGV0aGVyIHN1Y2ggZGlzdHJpYnV0aW9uIGlzIG1hZGUgYWxvbmUsIGluIGNvbWJpbmF0aW9uIHdpdGggYSBMYXJnZXIgV29yayBvciBJbmRlcGVuZGVudCBNb2R1bGVzLCBvciBpbiBzb21lIG90aGVyIGNvbWJpbmF0aW9uLlxuXG4gICAgICAzLjMuIFNPVVJDRSBDT0RFIERJU1RSSUJVVElPTlMuXG5cbiAgICAgIFdoZW4gYSBEaXN0cmlidXRvciBtYWtlcyB0aGUgTGljZW5zZWQgV29yaywgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgYXZhaWxhYmxlIHRvIGFueSBQZXJzb24gaW4gU291cmNlIENvZGUgZm9ybSwgaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgU291cmNlIENvZGUsIHNpdHVhdGVkIHNvIHRoYXQgdGhlIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgY29uc3BpY3VvdXNseSBicm91Z2h0IHRvIHRoZSBhdHRlbnRpb24gb2YgdGhhdCBQZXJzb24uIEZvciBncmVhdGVyIGNsYXJpZmljYXRpb24sIHRoaXMgU2VjdGlvbiAzLjMgYXBwbGllcyB0byBhbGwgZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWNlbnNlZCBXb3JrIGluIGFueSBTb3VyY2UgQ29kZSBmb3JtLiBBIERpc3RyaWJ1dG9yIG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgd2hpY2ggY2hhcmdlIHNoYWxsIGJlIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxuICAgICAgMy40LiBSRVFVSVJFRCBOT1RJQ0VTIElOIFNPVVJDRSBDT0RFLlxuXG4gICAgICBFYWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgbXVzdCBlbnN1cmUgdGhhdCB0aGUgbm90aWNlIHNldCBvdXQgaW4gUGFydCA1IG9mIEV4aGliaXQgQSBpcyBpbmNsdWRlZCBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIGZvciBlYWNoIFN1YnNlcXVlbnQgV29yayBvcmlnaW5hdGluZyBmcm9tIHRoYXQgcGFydGljdWxhciBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBpZiBzdWNoIG5vdGljZSBpcyBub3QgYWxyZWFkeSBpbmNsdWRlZCBpbiBlYWNoIHN1Y2ggZmlsZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgZmlsZSBpcyBzdG9yZWQpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS5cblxuICAgICAgMy41LiBOTyBESVNUUklCVVRJT04gUkVRVUlSRU1FTlRTIEZPUiBJTlRFUk5BTExZIFVTRUQgTU9ESUZJQ0FUSU9OUy5cblxuICAgICAgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb25zIDMuMiwgMy4zIGFuZCAzLjQsIFJlY2lwaWVudCBtYXksIGludGVybmFsbHkgd2l0aGluIGl0cyBvd24gY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uIHVzZSB0aGUgTGljZW5zZWQgV29yaywgaW5jbHVkaW5nIHRoZSBJbml0aWFsIFdvcmsgYW5kIFN1YnNlcXVlbnQgV29ya3MsIGFuZCBtYWtlIE1vZGlmaWNhdGlvbnMgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gUmVjaXBpZW50J3Mgb3duIGNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbiAoY29sbGVjdGl2ZWx5LCBcIklOVEVSTkFMIFVTRSBNT0RJRklDQVRJT05TXCIpLiBUaGUgUmVjaXBpZW50IHNoYWxsIGhhdmUgbm8gb2JsaWdhdGlvbiB0byBkaXN0cmlidXRlLCBpbiBlaXRoZXIgU291cmNlIENvZGUgb3IgRXhlY3V0YWJsZSBmb3JtLCBhbnkgc3VjaCBJbnRlcm5hbCBVc2UgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IFJlY2lwaWVudCBpbiB0aGUgY291cnNlIG9mIHN1Y2ggaW50ZXJuYWwgdXNlLCBleGNlcHQgd2hlcmUgcmVxdWlyZWQgYmVsb3cgaW4gdGhpcyBTZWN0aW9uIDMuNS4gQWxsIEludGVybmFsIFVzZSBNb2RpZmljYXRpb25zIGRpc3RyaWJ1dGVkIHRvIGFueSBQZXJzb24sIHdoZXRoZXIgb3Igbm90IGEgVGhpcmQgUGFydHksIHNoYWxsIGJlIGRpc3RyaWJ1dGVkIHB1cnN1YW50IHRvIGFuZCBiZSBhY2NvbXBhbmllZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiB0aGUgUmVjaXBpZW50IGNob29zZXMgdG8gZGlzdHJpYnV0ZSBhbnkgc3VjaCBJbnRlcm5hbCBVc2UgTW9kaWZpY2F0aW9ucyB0byBhbnkgVGhpcmQgUGFydHksIHRoZW4gdGhlIFJlY2lwaWVudCBzaGFsbCBiZSBkZWVtZWQgYSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBhbmQgYW55IHN1Y2ggSW50ZXJuYWwgVXNlIE1vZGlmaWNhdGlvbnMgZGlzdHJpYnV0ZWQgdG8gYW55IFRoaXJkIFBhcnR5IHNoYWxsIGJlIGRlZW1lZCBhIFN1YnNlcXVlbnQgV29yayBvcmlnaW5hdGluZyBmcm9tIHRoYXQgU3Vic2VxdWVudCBDb250cmlidXRvciwgYW5kIHNoYWxsIGZyb20gdGhlIGZpcnN0IHN1Y2ggaW5zdGFuY2UgYmVjb21lIHBhcnQgb2YgdGhlIExpY2Vuc2VkIFdvcmsgdGhhdCBtdXN0IHRoZXJlYWZ0ZXIgYmUgZGlzdHJpYnV0ZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHRvIHRoaXJkIHBhcnRpZXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAzLjEgdG8gMy40IGluY2x1c2l2ZS5cblxuICAgICAgMy42LiBJTkRFUEVOREVOVCBNT0RVTEVTLlxuXG4gICAgICBUaGlzIExpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIEluZGVwZW5kZW50IE1vZHVsZXMgb2YgYW55IEluaXRpYWwgQ29udHJpYnV0b3IsIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIERpc3RyaWJ1dG9yIG9yIGFueSBSZWNpcGllbnQsIGFuZCBzdWNoIEluZGVwZW5kZW50IE1vZHVsZXMgbWF5IGJlIGxpY2Vuc2VkIG9yIG1hZGUgYXZhaWxhYmxlIHVuZGVyIG9uZSBvciBtb3JlIHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50cy5cblxuICAgICAgMy43LiBMQVJHRVIgV09SS1MuXG5cbiAgICAgIEFueSBEaXN0cmlidXRvciBvciBSZWNpcGllbnQgbWF5IGNyZWF0ZSBvciBjb250cmlidXRlIHRvIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIGFueSBvZiB0aGUgTGljZW5zZWQgV29yayB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBtYXkgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgb25lIG9yIG1vcmUgcHJvZHVjdHMuIEhvd2V2ZXIsIGluIGFueSBzdWNoIGNhc2UsIERpc3RyaWJ1dG9yIG9yIFJlY2lwaWVudCAoYXMgdGhlIGNhc2UgbWF5IGJlKSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBMaWNlbnNlZCBXb3JrIHBvcnRpb24gb2YgdGhlIExhcmdlciBXb3JrLlxuXG4gICAgICAzLjguIERFU0NSSVBUSU9OIE9GIERJU1RSSUJVVEVEIE1PRElGSUNBVElPTlMuXG5cbiAgICAgICAgIChhKSBFYWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgKGluY2x1ZGluZyB0aGUgSW5pdGlhbCBDb250cmlidXRvciB3aGVyZSB0aGUgSW5pdGlhbCBDb250cmlidXRvciBhbHNvIHF1YWxpZmllcyBhcyBhIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IpIG11c3QgY2F1c2UgZWFjaCBTdWJzZXF1ZW50IFdvcmsgY3JlYXRlZCBvciBjb250cmlidXRlZCB0byBieSB0aGF0IFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMsIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIFBhcnQgMSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlLCB0aGF0IHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvciBtYWRlIGluIHRoZSBjcmVhdGlvbiBvciBjb250cmlidXRpb24gdG8gdGhhdCBTdWJzZXF1ZW50IFdvcmsuIElmIG5vIFN1cHBsZW1lbnQgRmlsZSBleGlzdHMgb3Igbm8gcmVxdWlyZW1lbnRzIGFyZSBzZXQgb3V0IGluIFBhcnQgMSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlLCB0aGVuIHRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgZm9yIFN1YnNlcXVlbnQgQ29udHJpYnV0b3JzIHRvIGRvY3VtZW50IGNoYW5nZXMgdGhhdCB0aGV5IG1ha2UgcmVzdWx0aW5nIGluIFN1YnNlcXVlbnQgV29ya3MuXG5cbiAgICAgICAgIChiKSBUaGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgYXQgYW55IHRpbWUgaW50cm9kdWNlIHJlcXVpcmVtZW50cyBvciBhZGQgdG8gb3IgY2hhbmdlIGVhcmxpZXIgcmVxdWlyZW1lbnRzIChpbiBlYWNoIGNhc2UsIHRoZSBcIkVBUkxJRVIgREVTQ1JJUFRJT04gUkVRVUlSRU1FTlRTXCIpIGZvciBkb2N1bWVudGluZyBjaGFuZ2VzIHJlc3VsdGluZyBpbiBTdWJzZXF1ZW50IFdvcmtzIGJ5IHJldmlzaW5nIFBhcnQgMSBvZiBlYWNoIGNvcHkgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSBkaXN0cmlidXRlZCBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvciB3aXRoIGZ1dHVyZSBjb3BpZXMgb2YgdGhlIExpY2Vuc2VkIFdvcmsgc28gdGhhdCBQYXJ0IDEgdGhlbiBjb250YWlucyBuZXcgcmVxdWlyZW1lbnRzICh0aGUgXCJORVcgREVTQ1JJUFRJT04gUkVRVUlSRU1FTlRTXCIpIGZvciBkb2N1bWVudGluZyBzdWNoIGNoYW5nZXMuXG5cbiAgICAgICAgIChjKSBBbnkgUmVjaXBpZW50IHJlY2VpdmluZyBhdCBhbnkgdGltZSBhbnkgY29weSBvZiBhbiBJbml0aWFsIFdvcmsgb3IgYW55IFN1YnNlcXVlbnQgV29yayB1bmRlciBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIChpbiBlYWNoIGNhc2UsIGFuIFwiRWFybGllciBMSUNFTlNFRCBDT1BZXCIpIGhhdmluZyB0aGUgRWFybGllciBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMgbWF5IGNob29zZSwgd2l0aCByZXNwZWN0IHRvIGVhY2ggc3VjaCBFYXJsaWVyIExpY2Vuc2VkIENvcHksIHRvIGNvbXBseSB3aXRoIHRoZSBFYXJsaWVyIERlc2NyaXB0aW9uIFJlcXVpcmVtZW50cyBvciB0aGUgTmV3IERlc2NyaXB0aW9uIFJlcXVpcmVtZW50cy4gV2hlcmUgYSBSZWNpcGllbnQgY2hvb3NlcyB0byBjb21wbHkgd2l0aCB0aGUgTmV3IERlc2NyaXB0aW9uIFJlcXVpcmVtZW50cywgdGhhdCBSZWNpcGllbnQgd2lsbCwgd2hlbiB0aGVyZWFmdGVyIGRpc3RyaWJ1dGluZyBhbnkgY29waWVzIG9mIGFueSBzdWNoIEVhcmxpZXIgTGljZW5zZWQgQ29weSwgaW5jbHVkZSBhIFN1cHBsZW1lbnQgRmlsZSBoYXZpbmcgYSBzZWN0aW9uIGVudGl0bGVkIFBhcnQgMSB0aGF0IGNvbnRhaW5zIGEgY29weSBvZiB0aGUgTmV3IERlc2NyaXB0aW9uIFJlcXVpcmVtZW50cy5cblxuICAgICAgICAgKGQpIEZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhlIGludGVudCBvZiBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSBpcyB0byBwcm92aWRlIGEgbWVjaGFuaXNtIChpZiBhbnkpIGJ5IHdoaWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3JzIG11c3QgZG9jdW1lbnQgY2hhbmdlcyB0aGF0IHRoZXkgbWFrZSB0byB0aGUgTGljZW5zZWQgV29yayByZXN1bHRpbmcgaW4gU3Vic2VxdWVudCBXb3Jrcy4gUGFydCAxIG9mIGFueSBTdXBwbGVtZW50IEZpbGUgc2hhbGwgbm90IGJlIHVzZWQgdG8gaW5jcmVhc2Ugb3IgcmVkdWNlIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGluIEFydGljbGUgMiBvZiB0aGlzIExpY2Vuc2Ugb3IgaW4gYW55IG90aGVyIHdheSBpbmNyZWFzZSBvciBkZWNyZWFzZSB0aGUgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBhbnkgUmVjaXBpZW50LCBhbmQgc2hhbGwgYXQgbm8gdGltZSBzZXJ2ZSBhcyB0aGUgYmFzaXMgZm9yIHRlcm1pbmF0aW5nIHRoZSBMaWNlbnNlLiBGdXJ0aGVyLCBhIFJlY2lwaWVudCBjYW4gYmUgcmVxdWlyZWQgdG8gY29ycmVjdCBhbmQgY2hhbmdlIGl0cyBkb2N1bWVudGF0aW9uIHByb2NlZHVyZXMgdG8gY29tcGx5IHdpdGggUGFydCAxIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUsIGJ1dCBjYW5ub3QgYmUgcGVuYWxpc2VkIHdpdGggZGFtYWdlcy4gUGFydCAxIG9mIGFueSBTdXBwbGVtZW50IEZpbGUgaXMgb25seSBiaW5kaW5nIG9uIGVhY2ggUmVjaXBpZW50IG9mIGFueSBMaWNlbnNlZCBXb3JrIHRvIHRoZSBleHRlbnQgUGFydCAxIHNldHMgb3V0IHRoZSByZXF1aXJlbWVudHMgZm9yIGRvY3VtZW50aW5nIGNoYW5nZXMgdG8gdGhlIEluaXRpYWwgV29yayBvciBhbnkgU3Vic2VxdWVudCBXb3JrLlxuXG4gICAgICAgICAoZSkgQW4gZXhhbXBsZSBvZiBhIHNldCBvZiByZXF1aXJlbWVudHMgZm9yIGRvY3VtZW50aW5nIGNoYW5nZXMgYW5kIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIGlzIHNldCBvdXQgaW4gUGFydCA3IG9mIEV4aGliaXQgQSBvZiB0aGlzIExpY2Vuc2UuIFBhcnQgNyBpcyBhIHNhbXBsZSBvbmx5IGFuZCBpcyBub3QgYmluZGluZyBvbiBSZWNpcGllbnRzLCB1bmxlc3MgKHN1YmplY3QgdG8gdGhlIGVhcmxpZXIgcGFyYWdyYXBocyBvZiB0aGlzIFNlY3Rpb24gMy44KSB0aG9zZSBhcmUgdGhlIHJlcXVpcmVtZW50cyB0aGF0IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGluY2x1ZGVzIGluIFBhcnQgMSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlIHdpdGggdGhlIGNvcGllcyBvZiB0aGUgSW5pdGlhbCBXb3JrIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgMy45LiBVU0UgT0YgRElTVFJJQlVUT1IgTkFNRS5cblxuICAgICAgVGhlIG5hbWUgb2YgYSBEaXN0cmlidXRvciBtYXkgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyIERpc3RyaWJ1dG9yIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSB0aGUgTGljZW5zZWQgV29yayBvciBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIExpY2Vuc2VkIFdvcmssIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG4gICAgICAzLjEwLiBMSU1JVEVEIFJFQ09HTklUSU9OIE9GIElOSVRJQUwgQ09OVFJJQlVUT1IuXG5cbiAgICAgICAgIChhKSBBcyBhIG1vZGVzdCBhdHRyaWJ1dGlvbiB0byB0aGUgSW5pdGlhbCBDb250cmlidXRvciwgaW4gdGhlIGhvcGUgdGhhdCBpdHMgcHJvbW90aW9uYWwgdmFsdWUgbWF5IGhlbHAganVzdGlmeSB0aGUgdGltZSwgbW9uZXkgYW5kIGVmZm9ydCBpbnZlc3RlZCBpbiB3cml0aW5nIHRoZSBJbml0aWFsIFdvcmssIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBpbmNsdWRlIGluIFBhcnQgMiBvZiB0aGUgU3VwcGxlbWVudCBGaWxlIGEgcmVxdWlyZW1lbnQgdGhhdCBlYWNoIHRpbWUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIHJlc3VsdGluZyBmcm9tIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IFN1YnNlcXVlbnQgV29yaywgb3IgYSBwcm9ncmFtIGRlcGVuZGVudCB0aGVyZW9uLCBpcyBsYXVuY2hlZCBvciBydW4sIGEgcHJvbWluZW50IGRpc3BsYXkgb2YgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IncyBhdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbiBtdXN0IG9jY3VyICh0aGUgXCJBVFRSSUJVVElPTiBJTkZPUk1BVElPTlwiKS4gVGhlIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG11c3QgYmUgaW5jbHVkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIFNvdXJjZSBDb2RlIGZpbGUuIEZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IHNwZWNpZnkgaW4gdGhlIFN1cHBsZW1lbnQgRmlsZSB0aGF0IHRoZSBhYm92ZSBhdHRyaWJ1dGlvbiByZXF1aXJlbWVudCBvbmx5IGFwcGxpZXMgdG8gYW4gZXhlY3V0YWJsZSBwcm9ncmFtIHJlc3VsdGluZyBmcm9tIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IFN1YnNlcXVlbnQgV29yaywgYnV0IG5vdCBhIHByb2dyYW0gZGVwZW5kZW50IHRoZXJlb24uIFRoZSBpbnRlbnQgaXMgdG8gcHJvdmlkZSBmb3IgcmVhc29uYWJseSBtb2Rlc3QgYXR0cmlidXRpb24sIHRoZXJlZm9yZSB0aGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgbm90IHJlcXVpcmUgUmVjaXBpZW50cyB0byBkaXNwbGF5LCBhdCBhbnkgdGltZSwgbW9yZSB0aGFuIHRoZSBmb2xsb3dpbmcgQXR0cmlidXRpb24gSW5mb3JtYXRpb246IChhKSBhIGNvcHlyaWdodCBub3RpY2UgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yOyAoYikgYSB3b3JkIG9yIG9uZSBwaHJhc2UgKG5vdCBleGNlZWRpbmcgMTAgd29yZHMpOyAoYykgb25lIGRpZ2l0YWwgaW1hZ2Ugb3IgZ3JhcGhpYyBwcm92aWRlZCB3aXRoIHRoZSBJbml0aWFsIFdvcms7IGFuZCAoZCkgYSBVUkwgKGNvbGxlY3RpdmVseSwgdGhlIFwiQVRUUklCVVRJT04gTElNSVRTXCIpLlxuXG4gICAgICAgICAoYikgSWYgbm8gU3VwcGxlbWVudCBGaWxlIGV4aXN0cywgb3Igbm8gQXR0cmlidXRpb24gSW5mb3JtYXRpb24gaXMgc2V0IG91dCBpbiBQYXJ0IDIgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSwgdGhlbiB0aGVyZSBhcmUgbm8gcmVxdWlyZW1lbnRzIGZvciBSZWNpcGllbnRzIHRvIGRpc3BsYXkgYW55IEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLlxuXG4gICAgICAgICAoYykgRWFjaCBSZWNpcGllbnQgYWNrbm93bGVkZ2VzIHRoYXQgYWxsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MgYW5kL29yIHRyYWRlIG5hbWVzIGNvbnRhaW5lZCB3aXRoaW4gUGFydCAyIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTGljZW5zZWQgV29yayBhcmUgdGhlIGV4Y2x1c2l2ZSBwcm9wZXJ0eSBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvciBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLCBvciB1bmRlciBjaXJjdW1zdGFuY2VzIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgbGF3LCBvciBhcyBleHByZXNzbHkgc2V0IG91dCBpbiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDMuMTEuIEZvciBncmVhdGVyIGNlcnRhaW50eSwgYW55IGRlc2NyaXB0aW9uIG9yIGF0dHJpYnV0aW9uIHByb3Zpc2lvbnMgY29udGFpbmVkIHdpdGhpbiBhIFN1cHBsZW1lbnQgRmlsZSBtYXkgb25seSBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIG5hdHVyZSBvZiB0aGUgZGVzY3JpcHRpb24gb3IgYXR0cmlidXRpb24gcmVxdWlyZW1lbnRzLCBhcyB0aGUgY2FzZSBtYXkgYmUuIEFueSBwcm92aXNpb24gaW4gYSBTdXBwbGVtZW50IEZpbGUgdGhhdCBvdGhlcndpc2UgcHVycG9ydHMgdG8gbW9kaWZ5LCB2YXJ5LCBudWxsaWZ5IG9yIGFtZW5kIGFueSByaWdodCwgb2JsaWdhdGlvbiBvciByZXByZXNlbnRhdGlvbiBjb250YWluZWQgaGVyZWluIHNoYWxsIGJlIGRlZW1lZCB2b2lkIHRvIHRoYXQgZXh0ZW50LCBhbmQgc2hhbGwgYmUgb2Ygbm8gZm9yY2Ugb3IgZWZmZWN0LlxuXG4gICA0LiBDT01NRVJDSUFMIFVTRSBBTkQgSU5ERU1OSVRZLlxuXG4gICAgICA0LjEuIENPTU1FUkNJQUwgU0VSVklDRVMuXG5cbiAgICAgIEEgUmVjaXBpZW50IChcIkNPTU1FUkNJQUwgUkVDSVBJRU5UXCIpIG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyAoY29sbGVjdGl2ZWx5LCBcIlNFUlZJQ0VTXCIpIHRvIG9uZSBvciBtb3JlIG90aGVyIFJlY2lwaWVudHMgb3IgRGlzdHJpYnV0b3JzLiBIb3dldmVyLCBzdWNoIENvbW1lcmNpYWwgUmVjaXBpZW50IG1heSBkbyBzbyBvbmx5IG9uIHRoYXQgQ29tbWVyY2lhbCBSZWNpcGllbnQncyBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiBhbnkgb3RoZXIgRGlzdHJpYnV0b3Igb3IgUmVjaXBpZW50LCBhbmQgQ29tbWVyY2lhbCBSZWNpcGllbnQgbXVzdCBtYWtlIGl0IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbihzKSBpcy9hcmUgb2ZmZXJlZCBieSBDb21tZXJjaWFsIFJlY2lwaWVudCBhbG9uZS4gQXQgbm8gdGltZSBtYXkgQ29tbWVyY2lhbCBSZWNpcGllbnQgdXNlIGFueSBTZXJ2aWNlcyB0byBkZW55IGFueSBwYXJ0eSB0aGUgTGljZW5zZWQgV29yayBpbiBTb3VyY2UgQ29kZSBvciBFeGVjdXRhYmxlIGZvcm0gd2hlbiBzbyByZXF1aXJlZCB1bmRlciBhbnkgb2YgdGhlIG90aGVyIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGlzIFNlY3Rpb24gNC4xIGRvZXMgbm90IGRpbWluaXNoIGFueSBvZiB0aGUgb3RoZXIgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBvYmxpZ2F0aW9uIG9mIHRoZSBDb21tZXJjaWFsIFJlY2lwaWVudCBhcyBhIERpc3RyaWJ1dG9yLCB3aGVuIGRpc3RyaWJ1dGluZyBhbnkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgaW4gU291cmNlIENvZGUgb3IgRXhlY3V0YWJsZSBmb3JtLCB0byBtYWtlIHN1Y2ggZGlzdHJpYnV0aW9uIHJveWFsdHktZnJlZSAoc3ViamVjdCB0byB0aGUgcmlnaHQgdG8gY2hhcmdlIGEgZmVlIG9mIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgU291cmNlIENvZGUgb3IgRXhlY3V0YWJsZSBkaXN0cmlidXRpb24gKGFzIHRoZSBjYXNlIG1heSBiZSkpLlxuXG4gICAgICA0LjIuIElOREVNTklUWS5cblxuICAgICAgQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2Ugb2YgdGhlIExpY2Vuc2VkIFdvcmssIHRoZSBEaXN0cmlidXRvciB3aG8gaW5jbHVkZXMgYW55IG9mIHRoZSBMaWNlbnNlZCBXb3JrIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3Igb3RoZXIgRGlzdHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgRGlzdHJpYnV0b3IgaW5jbHVkZXMgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgb3Igb2ZmZXJzIGFueSBTZXJ2aWNlcywgc3VjaCBEaXN0cmlidXRvciAoXCJDT01NRVJDSUFMIERJU1RSSUJVVE9SXCIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIgRGlzdHJpYnV0b3Igb3IgU3Vic2VxdWVudCBDb250cmlidXRvciAoaW4gZWFjaCBjYXNlIGFuIFwiSU5ERU1OSUZJRUQgUEFSVFlcIikgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5IFwiTE9TU0VTXCIpIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBQYXJ0eSB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluIGNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIGFueSBvZiB0aGUgTGljZW5zZWQgV29yayBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBvciBpbiBjb25uZWN0aW9uIHdpdGggYW55IFNlcnZpY2VzLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcyByZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgUGFydHkgbXVzdDogKGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW07IGFuZCAoYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvLW9wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgUGFydHkgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS5cblxuICAgNS4gVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UuXG5cbiAgICAgIDUuMS4gTkVXIFZFUlNJT05TLlxuXG4gICAgICBUaGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuXG5cbiAgICAgIDUuMi4gRUZGRUNUIE9GIE5FVyBWRVJTSU9OUy5cblxuICAgICAgT25jZSB0aGUgTGljZW5zZWQgV29yayBvciBhbnkgcG9ydGlvbiB0aGVyZW9mIGhhcyBiZWVuIHB1Ymxpc2hlZCBieSBJbml0aWFsIENvbnRyaWJ1dG9yIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBSZWNpcGllbnQgbWF5IGNob29zZSB0byBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gSG93ZXZlciwgaWYgYSBSZWNpcGllbnQgY2hvb3NlcyB0byB1c2UgdGhlIExpY2Vuc2VkIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLCB0aGVuIGZyb20gdGhlIGRhdGUgb2YgbWFraW5nIHRoaXMgY2hvaWNlLCB0aGUgUmVjaXBpZW50IG11c3QgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoYXQgc3Vic2VxdWVudCB2ZXJzaW9uIHdpdGggcmVzcGVjdCB0byBhbGwgZnVydGhlciByZXByb2R1Y3Rpb24sIHByZXBhcmF0aW9uIG9mIGRlcml2YXRpdmUgd29ya3MsIHB1YmxpYyBkaXNwbGF5IG9mLCBwdWJsaWMgcGVyZm9ybWFuY2Ugb2YsIGRpc3RyaWJ1dGlvbiBhbmQgc3VibGljZW5zaW5nIGJ5IHRoZSBSZWNpcGllbnQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBMaWNlbnNlZCBXb3JrLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgSW5pdGlhbCBDb250cmlidXRvciBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byB0aGUgTGljZW5zZWQgV29ya1xuXG4gICA2LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLlxuXG4gICAgICA2LjEuIEdFTkVSQUwgRElTQ0xBSU1FUi5cblxuICAgICAgRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBMSUNFTlNFLCBUSEUgTElDRU5TRUQgV09SSyBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIEFOWSBSRVBSRVNFTlRBVElPTiwgV0FSUkFOVFksIEdVQVJBTlRFRSwgQVNTVVJBTkNFIE9SIENPTkRJVElPTiBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIExJQ0VOU0VEIFdPUksgSVMgV0lUSCBSRUNJUElFTlQuIFNIT1VMRCBBTlkgTElDRU5TRUQgV09SSyBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFJFQ0lQSUVOVCAoTk9UIFRIRSBJTklUSUFMIENPTlRSSUJVVE9SIE9SIEFOWSBTVUJTRVFVRU5UIENPTlRSSUJVVE9SKSBBU1NVTUVTIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBDTEFVU0UgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIExJQ0VOU0VEIFdPUksgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgTElDRU5TRSBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIFRISVMgRElTQ0xBSU1FUi5cblxuICAgICAgNi4yLiBSRVNQT05TSUJJTElUWSBPRiBSRUNJUElFTlRTLlxuXG4gICAgICBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQgV29yayBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLlxuXG4gICA3LiBURVJNSU5BVElPTi5cblxuICAgICAgNy4xLiBUaGlzIExpY2Vuc2Ugc2hhbGwgY29udGludWUgdW50aWwgdGVybWluYXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGV4cHJlc3MgdGVybXMgaGVyZWluLlxuXG4gICAgICA3LjIuIFJlY2lwaWVudCBtYXkgY2hvb3NlIHRvIHRlcm1pbmF0ZSB0aGlzIExpY2Vuc2UgYXV0b21hdGljYWxseSBhdCBhbnkgdGltZS5cblxuICAgICAgNy4zLiBUaGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB0byBhIHBhcnRpY3VsYXIgUmVjaXBpZW50LCB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIHN1Y2ggUmVjaXBpZW50IGlzIGluIG1hdGVyaWFsIGJyZWFjaCBvZiBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbHMgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gc2l4dHkgKDYwKSBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIFdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgYW55IG1hdGVyaWFsIGJyZWFjaCBieSBzdWNoIFJlY2lwaWVudCBvZiBhbnkgdGVybSBvZiBhbnkgb3RoZXIgTGljZW5zZSB1bmRlciB3aGljaCBzdWNoIFJlY2lwaWVudCBpcyBncmFudGVkIGFueSByaWdodHMgdG8gdGhlIExpY2Vuc2VkIFdvcmsgc2hhbGwgY29uc3RpdHV0ZSBhIG1hdGVyaWFsIGJyZWFjaCBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDcuNC4gVXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UgYnkgb3Igd2l0aCByZXNwZWN0IHRvIGEgcGFydGljdWxhciBSZWNpcGllbnQgZm9yIGFueSByZWFzb24sIGFsbCByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgYW5kIHVuZGVyIGFueSBvdGhlciBMaWNlbnNlIHRvIHRoYXQgUmVjaXBpZW50IHNoYWxsIHRlcm1pbmF0ZS4gSG93ZXZlciwgYWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBMaWNlbnNlZCBXb3JrIHdoaWNoIHdlcmUgcHJldmlvdXNseSBwcm9wZXJseSBncmFudGVkIGJ5IHN1Y2ggUmVjaXBpZW50IHVuZGVyIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgKGluIGVhY2ggY2FzZSwgYW4gXCJPdGhlciBMaWNlbnNlXCIgYW5kIGluIHBsdXJhbCwgXCJPdGhlciBMaWNlbnNlc1wiKSBzaGFsbCBzdXJ2aXZlIGFueSBzdWNoIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyB1bmRlciBzdWNoIE90aGVyIExpY2Vuc2VzIGFzIHNldCBvdXQgaW4gdGhlaXIgcmVzcGVjdGl2ZSBTZWN0aW9ucyAyLCAzLCA0LCA1LCA2LCA3IGFuZCA4LCBtdXRhdGlzIG11dGFuZGlzLCBmb3Igc28gbG9uZyBhcyB0aGUgcmVzcGVjdGl2ZSBzdWJsaWNlbnNlZXMgKGkuZS4gb3RoZXIgUmVjaXBpZW50cykgcmVtYWluIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHVuZGVyIHdoaWNoIHN1Y2ggc3VibGljZW5zZWVzIHJlY2VpdmVkIHJpZ2h0cyB0byB0aGUgTGljZW5zZWQgV29yay4gQW55IHRlcm1pbmF0aW9uIG9mIHN1Y2ggT3RoZXIgTGljZW5zZXMgc2hhbGwgYmUgcHVyc3VhbnQgdG8gdGhlaXIgcmVzcGVjdGl2ZSBTZWN0aW9uIDcsIG11dGF0aXMgbXV0YW5kaXMuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuXG5cbiAgICAgIDcuNS4gVXBvbiBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIGJ5IG9yIHdpdGggcmVzcGVjdCB0byBhIHBhcnRpY3VsYXIgUmVjaXBpZW50LCBTZWN0aW9ucyA0LjEsIDQuMiwgNi4xLCA2LjIsIDcuNCwgNy41LCA4LjEsIGFuZCA4LjIsIHRvZ2V0aGVyIHdpdGggYWxsIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlIG5lY2Vzc2FyeSBmb3IgdGhlIGludGVycHJldGF0aW9uIGFuZCBlbmZvcmNlbWVudCBvZiBzYW1lLCBzaGFsbCBleHByZXNzbHkgc3Vydml2ZSBzdWNoIHRlcm1pbmF0aW9uLlxuXG4gICA4LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS5cblxuICAgICAgOC4xLiBJTiBOTyBFVkVOVCBTSEFMTCBBTlkgT0YgSU5JVElBTCBDT05UUklCVVRPUiwgSVRTIFNVQlNJRElBUklFUywgT1IgQUZGSUxJQVRFUywgT1IgQU5ZIE9GIElUUyBPUiBUSEVJUiBSRVNQRUNUSVZFIE9GRklDRVJTLCBESVJFQ1RPUlMsIEVNUExPWUVFUywgQU5EL09SIEFHRU5UUyAoQVMgVEhFIENBU0UgTUFZIEJFKSwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNUIERBTUFHRVMsIElORElSRUNUIERBTUFHRVMsIFBVTklUSVZFIERBTUFHRVMsIElOQ0lERU5UQUwgREFNQUdFUywgU1BFQ0lBTCBEQU1BR0VTLCBFWEVNUExBUlkgREFNQUdFUywgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBPVEhFUiBEQU1BR0VTIFdIQVRTT0VWRVIgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgT1IgQU5ZIE9USEVSIExPU1MgQVJJU0lORyBPVVQgT0YgT1IgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRIRSBVU0UsIElOQUJJTElUWSBUTyBVU0UsIFVOQVVUSE9SSVpFRCBVU0UsIFBFUkZPUk1BTkNFLCBPUiBOT04tUEVSRk9STUFOQ0UgT0YgVEhFIExJQ0VOU0VEIFdPUksgT1IgQU5ZIFBBUlQgVEhFUkVPRiBPUiBUSEUgUFJPVklTSU9OIE9GIE9SIEZBSUxVUkUgVE8gUFJPVklERSBTVVBQT1JUIFNFUlZJQ0VTLCBPUiBUSEFUIFJFU1VMVCBGUk9NIEVSUk9SUywgREVGRUNUUywgT01JU1NJT05TLCBERUxBWVMgSU4gT1BFUkFUSU9OIE9SIFRSQU5TTUlTU0lPTiwgT1IgQU5ZIE9USEVSIEZBSUxVUkUgT0YgUEVSRk9STUFOQ0UpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgSU4gUkVMQVRJT04gVE8gT1IgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIExJQ0VOU0VEIFdPUksgT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFRISVMgQ0xBVVNFIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBMSUNFTlNFRCBXT1JLIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIExJQ0VOU0UgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBUSEUgTElNSVRBVElPTlMgU0VUIEZPUlRIIElOIFRISVMgU0VDVElPTiA4LjEuXG5cbiAgICAgIDguMi4gRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBMSUNFTlNFLCBFQUNIIFJFQ0lQSUVOVCBTSEFMTCBOT1QgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIExJQ0VOU0VEIFdPUksgT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uXG5cbiAgIDkuIEdPVkVSTklORyBMQVcgQU5EIExFR0FMIEFDVElPTi5cblxuICAgICAgOS4xLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlIEdvdmVybmluZyBKdXJpc2RpY3Rpb24gYXNzaWduZWQgaW4gUGFydCAzIG9mIEV4aGliaXQgQSwgd2l0aG91dCByZWdhcmQgdG8gaXRzIGNvbmZsaWN0IG9mIGxhdyBwcm92aXNpb25zLiBObyBwYXJ0eSBtYXkgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBMaWNlbnNlIG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgdGhlIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyAoaWYgYW55KSB0byBhIGp1cnkgdHJpYWwgaW4gYW55IGxpdGlnYXRpb24gYXJpc2luZyB1bmRlciB0aGlzIExpY2Vuc2UuIE5vdGUgdGhhdCBpZiB0aGUgR292ZXJuaW5nIEp1cmlzZGljdGlvbiBpcyBub3QgYXNzaWduZWQgaW4gUGFydCAzIG9mIEV4aGliaXQgQSwgdGhlbiB0aGUgR292ZXJuaW5nIEp1cmlzZGljdGlvbiBzaGFsbCBiZSB0aGUgU3RhdGUgb2YgTmV3IFlvcmsuXG5cbiAgICAgIDkuMi4gVGhlIGNvdXJ0cyBvZiB0aGUgR292ZXJuaW5nIEp1cmlzZGljdGlvbiBzaGFsbCBoYXZlIGp1cmlzZGljdGlvbiwgYnV0IG5vdCBleGNsdXNpdmUganVyaXNkaWN0aW9uLCB0byBlbnRlcnRhaW4gYW5kIGRldGVybWluZSBhbGwgZGlzcHV0ZXMgYW5kIGNsYWltcywgd2hldGhlciBmb3Igc3BlY2lmaWMgcGVyZm9ybWFuY2UsIGluanVuY3Rpb24sIGRhbWFnZXMgb3Igb3RoZXJ3aXNlLCBib3RoIGF0IGxhdyBhbmQgaW4gZXF1aXR5LCBhcmlzaW5nIG91dCBvZiBvciBpbiBhbnkgd2F5IHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIGxlZ2FsaXR5LCB2YWxpZGl0eSwgZXhpc3RlbmNlIGFuZCBlbmZvcmNlYWJpbGl0eSBvZiB0aGlzIExpY2Vuc2UuIEVhY2ggcGFydHkgdG8gdGhpcyBMaWNlbnNlIGhlcmVieSBpcnJldm9jYWJseSBhdHRvcm5zIHRvIGFuZCBhY2NlcHRzIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyBvZiB0aGUgR292ZXJuaW5nIEp1cmlzZGljdGlvbiBmb3Igc3VjaCBwdXJwb3Nlcy5cblxuICAgICAgOS4zLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHNldCBmb3J0aCBlbHNld2hlcmUgaGVyZWluLCBpbiB0aGUgZXZlbnQgb2YgYW55IGFjdGlvbiBvciBwcm9jZWVkaW5nIGJyb3VnaHQgYnkgYW55IHBhcnR5IGFnYWluc3QgYW5vdGhlciB1bmRlciB0aGlzIExpY2Vuc2UgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBhbGwgY29zdHMgYW5kIGV4cGVuc2VzIGluY2x1ZGluZyB0aGUgZmVlcyBvZiBpdHMgYXR0b3JuZXlzIGluIHN1Y2ggYWN0aW9uIG9yIHByb2NlZWRpbmcgaW4gc3VjaCBhbW91bnQgYXMgdGhlIGNvdXJ0IG1heSBhZGp1ZGdlIHJlYXNvbmFibGUuXG5cbiAgIDEwLiBNSVNDRUxMQU5FT1VTLlxuXG4gICAgICAxMC4xLiBUaGUgb2JsaWdhdGlvbnMgaW1wb3NlZCBieSB0aGlzIExpY2Vuc2UgYXJlIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvciBhbmQgYW55IFJlY2lwaWVudCwgYW5kIGVhY2ggUmVjaXBpZW50IGFja25vd2xlZGdlcyBhbmQgYWdyZWVzIHRoYXQgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgYW5kL29yIGFueSBvdGhlciBSZWNpcGllbnQgbWF5IGVuZm9yY2UgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBhZ2FpbnN0IGFueSBSZWNpcGllbnQuXG5cbiAgICAgIDEwLjIuIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YsIGFuZCBzdXBlcnNlZGVzIGFuZCBjYW5jZWxzIGFsbCBwcmV2aW91cyBvcmFsIGFuZCB3cml0dGVuIGNvbW11bmljYXRpb25zLCByZXByZXNlbnRhdGlvbnMsIGFncmVlbWVudHMgYW5kIHVuZGVyc3RhbmRpbmdzIGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuXG5cbiAgICAgIDEwLjMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLlxuXG4gICAgICAxMC40LiBUaGUgbGFuZ3VhZ2UgaW4gYWxsIHBhcnRzIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbiBhbGwgY2FzZXMgY29uc3RydWVkIHNpbXBseSBhY2NvcmRpbmcgdG8gaXRzIGZhaXIgbWVhbmluZywgYW5kIG5vdCBzdHJpY3RseSBmb3Igb3IgYWdhaW5zdCBhbnkgb2YgdGhlIHBhcnRpZXMgaGVyZXRvLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxMC41LiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgdGhlIGxhd3Mgb2YgdGhlIEdvdmVybmluZyBKdXJpc2RpY3Rpb24sIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICAgICAxMC42LiBUaGUgcGFyYWdyYXBoIGhlYWRpbmdzIG9mIHRoaXMgTGljZW5zZSBhcmUgZm9yIHJlZmVyZW5jZSBhbmQgY29udmVuaWVuY2Ugb25seSBhbmQgYXJlIG5vdCBhIHBhcnQgb2YgdGhpcyBMaWNlbnNlLCBhbmQgdGhleSBzaGFsbCBoYXZlIG5vIGVmZmVjdCB1cG9uIHRoZSBjb25zdHJ1Y3Rpb24gb3IgaW50ZXJwcmV0YXRpb24gb2YgYW55IHBhcnQgaGVyZW9mLlxuXG4gICAgICAxMC43LiBFYWNoIG9mIHRoZSB0ZXJtcyBcImluY2x1ZGluZ1wiLCBcImluY2x1ZGVcIiBhbmQgXCJpbmNsdWRlc1wiLCB3aGVuIHVzZWQgaW4gdGhpcyBMaWNlbnNlLCBpcyBub3QgbGltaXRpbmcgd2hldGhlciBvciBub3Qgbm9uLWxpbWl0aW5nIGxhbmd1YWdlIChzdWNoIGFzIFwid2l0aG91dCBsaW1pdGF0aW9uXCIgb3IgXCJidXQgbm90IGxpbWl0ZWQgdG9cIiBvciB3b3JkcyBvZiBzaW1pbGFyIGltcG9ydCkgaXMgdXNlZCB3aXRoIHJlZmVyZW5jZSB0aGVyZXRvLlxuXG4gICAgICAxMC44LiBUaGUgcGFydGllcyBoZXJldG8gYWNrbm93bGVkZ2UgdGhleSBoYXZlIGV4cHJlc3NseSByZXF1aXJlZCB0aGF0IHRoaXMgTGljZW5zZSBhbmQgbm90aWNlcyByZWxhdGluZyB0aGVyZXRvIGJlIGRyYWZ0ZWQgaW4gdGhlIEVuZ2xpc2ggbGFuZ3VhZ2UuIC8vKioqVEhFIExJQ0VOU0UgVEVSTVMgRU5EIEhFUkUgKE9USEVSIFRIQU4gQVMgU0VUIE9VVCBJTiBFWEhJQklUIEEpLioqKi8vXG5cbkVYSElCSVQgQSAodG8gdGhlIEFkYXB0aXZlIFB1YmxpYyBMaWNlbnNlKVxuXG4gICBQQVJUIDE6IElOSVRJQUwgQ09OVFJJQlVUT1IgQU5EIERFU0lHTkFURUQgV0VCIFNJVEVcblxuICAgVGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaXM6XG5cbiAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1xuXG4gICBbRW50ZXIgZnVsbCBuYW1lIG9mIEluaXRpYWwgQ29udHJpYnV0b3JdXG5cbiAgIFxuXG4gICBBZGRyZXNzIG9mIEluaXRpYWwgQ29udHJpYnV0b3I6XG5cbiAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1xuXG4gICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19cblxuICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXG5cbiAgIFtFbnRlciBhZGRyZXNzIGFib3ZlXVxuXG4gICBcblxuICAgVGhlIERlc2lnbmF0ZWQgV2ViIFNpdGUgaXM6XG5cbiAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1xuXG4gICBbRW50ZXIgVVJMIGZvciBEZXNpZ25hdGVkIFdlYiBTaXRlIG9mIEluaXRpYWwgQ29udHJpYnV0b3JdXG5cbiAgIFxuXG4gICBOT1RFOiBUaGUgSW5pdGlhbCBDb250cmlidXRvciBpcyB0byBjb21wbGV0ZSB0aGlzIFBhcnQgMSwgYWxvbmcgd2l0aCBQYXJ0cyAyLCAzLCBhbmQgNSwgYW5kLCBpZiBhcHBsaWNhYmxlLCBQYXJ0cyA0IGFuZCA2LlxuXG4gICBQQVJUIDI6IElOSVRJQUwgV09SS1xuXG4gICBUaGUgSW5pdGlhbCBXb3JrIGNvbXByaXNlcyB0aGUgY29tcHV0ZXIgcHJvZ3JhbShzKSBkaXN0cmlidXRlZCBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvciBoYXZpbmcgdGhlIGZvbGxvd2luZyB0aXRsZShzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uXG5cbiAgIFRoZSBkYXRlIG9uIHdoaWNoIHRoZSBJbml0aWFsIFdvcmsgd2FzIGZpcnN0IGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2U6IF9fX19fX19fX19fX19fX19fXG5cbiAgIFBBUlQgMzogR09WRVJOSU5HIEpVUklTRElDVElPTlxuXG4gICBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZSwgdGhlIEdvdmVybmluZyBKdXJpc2RpY3Rpb24gaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4gW0luaXRpYWwgQ29udHJpYnV0b3IgdG8gRW50ZXIgR292ZXJuaW5nIEp1cmlzZGljdGlvbiBoZXJlXVxuXG4gICBQQVJUIDQ6IFRISVJEIFBBUlRJRVNcblxuICAgRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UsIFwiVGhpcmQgUGFydHlcIiBoYXMgdGhlIGRlZmluaXRpb24gc2V0IGZvcnRoIGJlbG93IGluIHRoZSBPTkUgcGFyYWdyYXBoIHNlbGVjdGVkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGZyb20gcGFyYWdyYXBocyBBLCBCLCBDLCBEIGFuZCBFIHdoZW4gdGhlIEluaXRpYWwgV29yayBpcyBkaXN0cmlidXRlZCBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IuIFRvIHNlbGVjdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGhzLCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBtdXN0IHBsYWNlIGFuIFwiWFwiIG9yIFwieFwiIGluIHRoZSBzZWxlY3Rpb24gYm94IGFsb25nc2lkZSB0aGUgb25lIHJlc3BlY3RpdmUgcGFyYWdyYXBoIHNlbGVjdGVkLlxuXG4gICBTRUxFQ1RJT05cblxuICAgQk9YIFBBUkFHUkFQSFxuXG4gICAgICBcblxuICAgICAgWyBdIEEuIFwiVEhJUkQgUEFSVFlcIiBtZWFucyBhbnkgdGhpcmQgcGFydHkuXG5cbiAgICAgIFxuXG4gICAgICBbIF0gQi4gXCJUSElSRCBQQVJUWVwiIG1lYW5zIGFueSB0aGlyZCBwYXJ0eSBleGNlcHQgZm9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAoYSkgYSB3aG9sbHkgb3duZWQgc3Vic2lkaWFyeSBvZiB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvciBpbiBxdWVzdGlvbjsgKGIpIGEgbGVnYWwgZW50aXR5ICh0aGUgXCJQQVJFTlRcIikgdGhhdCB3aG9sbHkgb3ducyB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvciBpbiBxdWVzdGlvbjsgb3IgKGMpIGEgd2hvbGx5IG93bmVkIHN1YnNpZGlhcnkgb2YgdGhlIHdob2xseSBvd25lZCBzdWJzaWRpYXJ5IGluIChhKSBvciBvZiB0aGUgUGFyZW50IGluIChiKS5cblxuICAgICAgXG5cbiAgICAgIFsgXSBDLiBcIlRISVJEIFBBUlRZXCIgbWVhbnMgYW55IHRoaXJkIHBhcnR5IGV4Y2VwdCBmb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6IChhKSBhbnkgUGVyc29uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgb3duaW5nIGEgbWFqb3JpdHkgb2YgdGhlIHZvdGluZyBpbnRlcmVzdCBpbiB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvciBvciAoYikgYW55IFBlcnNvbiBpbiB3aGljaCB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvciBkaXJlY3RseSBvciBpbmRpcmVjdGx5IG93bnMgYSBtYWpvcml0eSB2b3RpbmcgaW50ZXJlc3QuXG5cbiAgICAgIFxuXG4gICAgICBbIF0gRC4gXCJUSElSRCBQQVJUWVwiIG1lYW5zIGFueSB0aGlyZCBwYXJ0eSBleGNlcHQgZm9yIGFueSBQZXJzb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjb250cm9sbGVkIGJ5IHRoZSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcImNvbnRyb2xcIiBzaGFsbCBtZWFuIHRoZSBwb3dlciB0byBkaXJlY3Qgb3IgY2F1c2UgdGhlIGRpcmVjdGlvbiBvZiwgdGhlIG1hbmFnZW1lbnQgYW5kIHBvbGljaWVzIG9mIHN1Y2ggUGVyc29uIHdoZXRoZXIgdGhyb3VnaCB0aGUgb3duZXJzaGlwIG9mIHZvdGluZyBpbnRlcmVzdHMsIGJ5IGNvbnRyYWN0LCBvciBvdGhlcndpc2UuXG5cbiAgICAgIFxuXG4gICAgICBbIF0gRS4gXCJUSElSRCBQQVJUWVwiIG1lYW5zIGFueSB0aGlyZCBwYXJ0eSBleGNlcHQgZm9yIGFueSBQZXJzb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjb250cm9sbGluZywgY29udHJvbGxlZCBieSwgb3IgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvci4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJjb250cm9sXCIgc2hhbGwgbWVhbiB0aGUgcG93ZXIgdG8gZGlyZWN0IG9yIGNhdXNlIHRoZSBkaXJlY3Rpb24gb2YsIHRoZSBtYW5hZ2VtZW50IGFuZCBwb2xpY2llcyBvZiBzdWNoIFBlcnNvbiB3aGV0aGVyIHRocm91Z2ggdGhlIG93bmVyc2hpcCBvZiB2b3RpbmcgaW50ZXJlc3RzLCBieSBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLlxuXG4gICBUaGUgZGVmYXVsdCBkZWZpbml0aW9uIG9mIFwiVEhJUkQgUEFSVFlcIiBpcyB0aGUgZGVmaW5pdGlvbiBzZXQgZm9ydGggaW4gcGFyYWdyYXBoIEEsIGlmIE5PTkUgT1IgTU9SRSBUSEFOIE9ORSBvZiBwYXJhZ3JhcGhzIEEsIEIsIEMsIEQgb3IgRSBpbiB0aGlzIFBhcnQgNCBhcmUgc2VsZWN0ZWQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IuXG5cbiAgIFBBUlQgNTogTk9USUNFXG5cbiAgIFRIRSBMSUNFTlNFRCBXT1JLIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSEUgQURBUFRJVkUgUFVCTElDIExJQ0VOU0UgKFwiTElDRU5TRVwiKSBBUyBGSVJTVCBDT01QTEVURUQgQlk6IF9fX19fX19fX19fX19fX19fX19fX18gW0luc2VydCB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvciBoZXJlXS4gQU5ZIFVTRSwgUFVCTElDIERJU1BMQVksIFBVQkxJQyBQRVJGT1JNQU5DRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiwgT1IgUFJFUEFSQVRJT04gT0YgREVSSVZBVElWRSBXT1JLUyBCQVNFRCBPTiwgVEhFIExJQ0VOU0VEIFdPUksgQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRSBPRiBUSElTIExJQ0VOU0UgQU5EIElUUyBURVJNUywgV0hFVEhFUiBPUiBOT1QgU1VDSCBSRUNJUElFTlQgUkVBRFMgVEhFIFRFUk1TIE9GIFRIRSBMSUNFTlNFLiBcIkxJQ0VOU0VEIFdPUktcIiBBTkQgXCJSRUNJUElFTlRcIiBBUkUgREVGSU5FRCBJTiBUSEUgTElDRU5TRS4gQSBDT1BZIE9GIFRIRSBMSUNFTlNFIElTIExPQ0FURUQgSU4gVEhFIFRFWFQgRklMRSBFTlRJVExFRCBcIkxJQ0VOU0UuVFhUXCIgQUNDT01QQU5ZSU5HIFRIRSBDT05URU5UUyBPRiBUSElTIEZJTEUuIElGIEEgQ09QWSBPRiBUSEUgTElDRU5TRSBET0VTIE5PVCBBQ0NPTVBBTlkgVEhJUyBGSUxFLCBBIENPUFkgT0YgVEhFIExJQ0VOU0UgTUFZIEFMU08gQkUgT0JUQUlORUQgQVQgVEhFIEZPTExPV0lORyBXRUIgU0lURTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fW0luc2VydCBJbml0aWFsIENvbnRyaWJ1dG9yJ3MgRGVzaWduYXRlZCBXZWIgU2l0ZSBoZXJlXVxuXG4gICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4gICBQQVJUIDY6IFBBVEVOVCBMSUNFTlNJTkcgVEVSTVNcblxuICAgRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UsIHBhcmFncmFwaHMgQSwgQiwgQywgRCBhbmQgRSBvZiB0aGlzIFBhcnQgNiBvZiBFeGhpYml0IEEgYXJlIG9ubHkgaW5jb3Jwb3JhdGVkIGFuZCBmb3JtIHBhcnQgb2YgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlIGlmIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIHBsYWNlcyBhbiBcIlhcIiBvciBcInhcIiBpbiB0aGUgc2VsZWN0aW9uIGJveCBhbG9uZ3NpZGUgdGhlIFlFUyBhbnN3ZXIgdG8gdGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IGJlbG93LlxuXG4gICBJcyB0aGlzIGEgUGF0ZW50cy1JbmNsdWRlZCBMaWNlbnNlIHB1cnN1YW50IHRvIFNlY3Rpb24gMi4yIG9mIHRoZSBMaWNlbnNlP1xuXG4gICAgICBcblxuICAgICAgWUVTIFsgXVxuXG4gICAgICBcblxuICAgICAgTk8gWyBdXG5cbiAgIEJ5IGRlZmF1bHQsIGlmIFlFUyBpcyBub3Qgc2VsZWN0ZWQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBhbnN3ZXIgaXMgTk8uXG5cbiAgICAgIEEuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhlIHBhcmFncmFwaHMgaW4gdGhpcyBQYXJ0IDYgb2YgRXhoaWJpdCBBLCBcIkxJQ0VOU0FCTEVcIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLlxuXG4gICAgICBCLiBUaGUgSW5pdGlhbCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIGFsbCBSZWNpcGllbnRzIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgdW5kZXIgcGF0ZW50IGNsYWltKHMpIExpY2Vuc2FibGUgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgdGhhdCBhcmUgb3Igd291bGQgYmUgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBzZWxsaW5nLCBvZmZlcmluZyBmb3Igc2FsZSwgaGF2aW5nIG1hZGUsIGltcG9ydGluZywgZXhwb3J0aW5nLCB0cmFuc2ZlciBvciBkaXNwb3NhbCBvZiBzdWNoIEluaXRpYWwgV29yayBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB1bmRlciB0aGlzIFBhcmFncmFwaCBCIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yOiAoMSkgZm9yIGFueSBjb2RlIHRoYXQgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgZGVsZXRlcyBmcm9tIHRoZSBJbml0aWFsIFdvcmsgKG9yIGFueSBwb3J0aW9uIHRoZXJlb2YpIGRpc3RyaWJ1dGVkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIHByaW9yIHRvIHN1Y2ggZGlzdHJpYnV0aW9uOyAoMikgZm9yIGFueSBNb2RpZmljYXRpb25zIG1hZGUgdG8gdGhlIEluaXRpYWwgV29yayAob3IgYW55IHBvcnRpb24gdGhlcmVvZikgYnkgYW55IG90aGVyIFBlcnNvbjsgb3IgKDMpIHNlcGFyYXRlIGZyb20gdGhlIEluaXRpYWwgV29yayAob3IgcG9ydGlvbnMgdGhlcmVvZikgZGlzdHJpYnV0ZWQgb3IgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IuXG5cbiAgICAgIEMuIEVmZmVjdGl2ZSB1cG9uIGRpc3RyaWJ1dGlvbiBieSBhIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgdG8gYSBUaGlyZCBQYXJ0eSBvZiBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgU3Vic2VxdWVudCBDb250cmlidXRvciwgc3VjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgYWxsIFJlY2lwaWVudHMgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCB1bmRlciBwYXRlbnQgY2xhaW0ocykgTGljZW5zYWJsZSBieSBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgdGhhdCBhcmUgb3Igd291bGQgYmUgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBzZWxsaW5nLCBvZmZlcmluZyBmb3Igc2FsZSwgaGF2aW5nIG1hZGUsIGltcG9ydGluZywgZXhwb3J0aW5nLCB0cmFuc2ZlciBvciBkaXNwb3NhbCBvZiBhbnkgc3VjaCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBTdWJzZXF1ZW50IFdvcmsgKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgaW1wb3J0LCBleHBvcnQsIHRyYW5zZmVyIGFuZCBvdGhlcndpc2UgZGlzcG9zZSBvZjpcblxuICAgICAgICAgKDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmRcblxuICAgICAgICAgKDIpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIHdpdGggaXRzIFN1YnNlcXVlbnQgV29yayAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbik7XG5cbiAgICAgICAgIChjb2xsZWN0aXZlbHkgYW5kIGluIGVhY2ggY2FzZSwgdGhlIFwiU1VCU0VRVUVOVCBDT05UUklCVVRPUiBWRVJTSU9OXCIpLlxuXG4gICAgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB1bmRlciB0aGlzIFBhcmFncmFwaCBDIGJ5IHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvcjogKDEpIGZvciBhbnkgY29kZSB0aGF0IHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvciBkZWxldGVzIGZyb20gdGhlIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgYW55IHBvcnRpb24gdGhlcmVvZikgZGlzdHJpYnV0ZWQgYnkgdGhlIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgcHJpb3IgdG8gc3VjaCBkaXN0cmlidXRpb247ICgyKSBmb3IgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSB0byB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvciBWZXJzaW9uIChvciBhbnkgcG9ydGlvbiB0aGVyZW9mKSBieSBhbnkgb3RoZXIgUGVyc29uOyBvciAoMykgc2VwYXJhdGUgZnJvbSB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSBkaXN0cmlidXRlZCBvciBtYWRlIGF2YWlsYWJsZSBieSB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvci5cblxuICAgICAgRC4gRWZmZWN0aXZlIHVwb24gZGlzdHJpYnV0aW9uIG9mIGFueSBMaWNlbnNlZCBXb3JrIGJ5IGEgRGlzdHJpYnV0b3IgdG8gYSBUaGlyZCBQYXJ0eSwgc3VjaCBEaXN0cmlidXRvciBoZXJlYnkgZ3JhbnRzIGFsbCBSZWNpcGllbnRzIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgdW5kZXIgcGF0ZW50IGNsYWltKHMpIExpY2Vuc2FibGUgYnkgc3VjaCBEaXN0cmlidXRvciB0aGF0IGFyZSBvciB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvciBzYWxlLCBoYXZpbmcgbWFkZSwgaW1wb3J0aW5nLCBleHBvcnRpbmcsIHRyYW5zZmVyIG9yIGRpc3Bvc2FsIG9mIGFueSBzdWNoIExpY2Vuc2VkIFdvcmsgZGlzdHJpYnV0ZWQgYnkgc3VjaCBEaXN0cmlidXRvciwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBpbXBvcnQsIGV4cG9ydCwgdHJhbnNmZXIgYW5kIG90aGVyd2lzZSBkaXNwb3NlIG9mIHN1Y2ggTGljZW5zZWQgV29yayBvciBwb3J0aW9ucyB0aGVyZW9mIChjb2xsZWN0aXZlbHkgYW5kIGluIGVhY2ggY2FzZSwgdGhlIFwiRElTVFJJQlVUT1IgVkVSU0lPTlwiKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdW5kZXIgdGhpcyBQYXJhZ3JhcGggRCBieSBzdWNoIERpc3RyaWJ1dG9yOiAoMSkgZm9yIGFueSBjb2RlIHRoYXQgc3VjaCBEaXN0cmlidXRvciBkZWxldGVzIGZyb20gdGhlIERpc3RyaWJ1dG9yIFZlcnNpb24gKG9yIGFueSBwb3J0aW9uIHRoZXJlb2YpIGRpc3RyaWJ1dGVkIGJ5IHRoZSBEaXN0cmlidXRvciBwcmlvciB0byBzdWNoIGRpc3RyaWJ1dGlvbjsgKDIpIGZvciBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIHRvIHRoZSBEaXN0cmlidXRvciBWZXJzaW9uIChvciBhbnkgcG9ydGlvbiB0aGVyZW9mKSBieSBhbnkgb3RoZXIgUGVyc29uOyBvciAoMykgc2VwYXJhdGUgZnJvbSB0aGUgRGlzdHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZikgZGlzdHJpYnV0ZWQgb3IgbWFkZSBhdmFpbGFibGUgYnkgdGhlIERpc3RyaWJ1dG9yLlxuXG4gICAgICBFLiBJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFub3RoZXIgUmVjaXBpZW50IChhIFwiVVNFUlwiKSB3aXRoIHJlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBhIGNvbXB1dGVyIHByb2dyYW0gb3Igc29mdHdhcmUgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQsIGFuZCB3aGV0aGVyIG9yIG5vdCBhbnkgb2YgdGhlIHBhdGVudCBjbGFpbXMgYXJlIGRpcmVjdGVkIHRvIGEgc3lzdGVtLCBtZXRob2QsIHByb2Nlc3MsIGFwcGFyYXR1cywgZGV2aWNlLCBwcm9kdWN0LCBhcnRpY2xlIG9mIG1hbnVmYWN0dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIHBhdGVudCBjbGFpbSksIHRoZW4gYW55IHBhdGVudCBvciBjb3B5cmlnaHQgbGljZW5zZSBncmFudGVkIGJ5IHRoYXQgVXNlciB0byBzdWNoIFJlY2lwaWVudCB1bmRlciB0aGlzIExpY2Vuc2Ugb3IgYW55IG90aGVyIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZS4gVGhlIHRlcm1pbmF0aW9uIHNoYWxsIGJlIGVmZmVjdGl2ZSBuaW5ldHkgKDkwKSBkYXlzIGFmdGVyIG5vdGljZSBvZiB0ZXJtaW5hdGlvbiBmcm9tIFVzZXIgdG8gUmVjaXBpZW50LCB1bmxlc3MgdGhlIFJlY2lwaWVudCB3aXRoZHJhd3MgdGhlIHBhdGVudCBsaXRpZ2F0aW9uIGNsYWltIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBuaW5ldHkgKDkwKSBkYXkgcGVyaW9kLiBUbyBiZSBlZmZlY3RpdmUsIGFueSBzdWNoIG5vdGljZSBvZiBsaWNlbnNlIHRlcm1pbmF0aW9uIG11c3QgaW5jbHVkZSBhIHNwZWNpZmljIGxpc3Qgb2YgYXBwbGljYWJsZSBwYXRlbnRzIGFuZC9vciBhIGNvcHkgb2YgdGhlIGNvcHlyaWdodGVkIHdvcmsgb2YgVXNlciB0aGF0IFVzZXIgYWxsZWdlcyB3aWxsIGJlIGluZnJpbmdlZCBieSBSZWNpcGllbnQgdXBvbiBMaWNlbnNlIHRlcm1pbmF0aW9uLiBMaWNlbnNlIHRlcm1pbmF0aW9uIGlzIG9ubHkgZWZmZWN0aXZlIHdpdGggcmVzcGVjdCB0byBwYXRlbnRzIGFuZC9vciBjb3B5cmlnaHRzIGZvciB3aGljaCBwcm9wZXIgbm90aWNlIGhhcyBiZWVuIGdpdmVuLlxuXG4gICBQQVJUIDc6IFNBTVBMRSBSRVFVSVJFTUVOVFMgRk9SIFRIRSBERVNDUklQVElPTiBPRiBESVNUUklCVVRFRCBNT0RJRklDQVRJT05TXG5cbiAgIEVhY2ggU3Vic2VxdWVudCBDb250cmlidXRvciAoaW5jbHVkaW5nIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIHdoZXJlIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIHF1YWxpZmllcyBhcyBhIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IpIGlzIGludml0ZWQgKGJ1dCBub3QgcmVxdWlyZWQpIHRvIGNhdXNlIGVhY2ggU3Vic2VxdWVudCBXb3JrIGNyZWF0ZWQgb3IgY29udHJpYnV0ZWQgdG8gYnkgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvciBtYWRlIHRvIGNyZWF0ZSB0aGF0IFN1YnNlcXVlbnQgV29yayBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS5cblxuLy8qKipFWEhJQklUIEEgRU5EUyBIRVJFLioqKi8vIl0sImxpY2Vuc2VJZHMiOlsiQVBMLTEuMCJdLCJrZXl3b3JkcyI6WyIwIHRoZSBsaWNlbnNlZCIsIm9mIHRoaXMgYWRhcHRpdmUiLCJ0aGlzIGFkYXB0aXZlIHB1YmxpYyIsImFyZSBkZWZpbmVkIGJlbG93IiwiZGVmaW5lZCBiZWxvdyBpbXBvcnRhbnQiLCJiZWxvdyBpbXBvcnRhbnQgbm90ZSIsImltcG9ydGFudCBub3RlIHRoaXMiLCJsaWNlbnNlIGlzIGFkYXB0aXZlIiwiaXMgYWRhcHRpdmUgYW5kIiwiYWRhcHRpdmUgYW5kIHRoZSIsImFuZCB0aGUgZ2VuZXJpYyIsInRoZSBnZW5lcmljIHZlcnNpb24iLCJnZW5lcmljIHZlcnNpb24gb3IiLCJ2ZXJzaW9uIG9yIGFub3RoZXIiLCJvciBhbm90aGVyIHZlcnNpb24iLCJhbm90aGVyIHZlcnNpb24gb2YiLCJ2ZXJzaW9uIG9mIGFuIiwib2YgYW4gYWRhcHRpdmUiLCJhbiBhZGFwdGl2ZSBwdWJsaWMiLCJwdWJsaWMgbGljZW5zZSBzaG91bGQiLCJub3QgYmUgcmVsaWVkIiwiYmUgcmVsaWVkIHVwb24iLCJyZWxpZWQgdXBvbiB0byIsInVwb24gdG8gZGV0ZXJtaW5lIiwidG8gZGV0ZXJtaW5lIHlvdXIiLCJkZXRlcm1pbmUgeW91ciByaWdodHMiLCJ5b3UgbXVzdCByZWFkIiwibXVzdCByZWFkIHRoZSIsInJlYWQgdGhlIHNwZWNpZmljIiwic3BlY2lmaWMgYWRhcHRpdmUgcHVibGljIiwieW91IHJlY2VpdmUgd2l0aCIsInJlY2VpdmUgd2l0aCB0aGUiLCJsaWNlbnNlZCB3b3JrIGFzIiwid29yayBhcyBjZXJ0YWluIiwiYXMgY2VydGFpbiB0ZXJtcyIsImNlcnRhaW4gdGVybXMgYXJlIiwiZGVmaW5lZCBhdCB0aGUiLCJhdCB0aGUgb3V0c2V0IiwidGhlIG91dHNldCBieSIsIm91dHNldCBieSB0aGUiLCJpbml0aWFsIGNvbnRyaWJ1dG9yIHNlZSIsImNvbnRyaWJ1dG9yIHNlZSBzZWN0aW9uIiwiMiBiZWxvdyBleGhpYml0IiwiYmVsb3cgZXhoaWJpdCBhIiwiZXhoaWJpdCBhIGF0dGFjaGVkIiwiYSBhdHRhY2hlZCBhbmQiLCJhdHRhY2hlZCBhbmQgYW55IiwiYW5kIGFueSBzdXBwZmlsZSIsImFueSBzdXBwZmlsZSB0eHQiLCJzdXBwZmlsZSB0eHQgYWNjb21wYW55aW5nIiwidHh0IGFjY29tcGFueWluZyB0aGlzIiwibGljZW5zZSB0byBkZXRlcm1pbmUiLCJkZXRlcm1pbmUgdGhlIHNwZWNpZmljIiwic3BlY2lmaWMgYWRhcHRpdmUgZmVhdHVyZXMiLCJhZGFwdGl2ZSBmZWF0dXJlcyBhcHBsaWNhYmxlIiwiZmVhdHVyZXMgYXBwbGljYWJsZSB0byIsInRoZSBmb3JlZ29pbmcgYSIsImZvcmVnb2luZyBhIGZvciIsImEgZm9yIHNlbGVjdGVkIiwiZm9yIHNlbGVjdGVkIGNob2ljZSIsInNlbGVjdGVkIGNob2ljZSBvZiIsImFuZCBqdXJpc2RpY3Rpb24gc2VlIiwianVyaXNkaWN0aW9uIHNlZSBwYXJ0Iiwic2VlIHBhcnQgMyIsImV4aGliaXQgYSBiIiwiYSBiIGZvciIsImZvciB0aGUgc2VsZWN0ZWQiLCJ0aGUgc2VsZWN0ZWQgZGVmaW5pdGlvbiIsInNlbGVjdGVkIGRlZmluaXRpb24gb2YiLCJ0aGlyZCBwYXJ0eSBzZWUiLCJwYXJ0eSBzZWUgcGFydCIsInNlZSBwYXJ0IDQiLCJhIGFuZCBjIiwiYyBmb3Igc2VsZWN0ZWQiLCJmb3Igc2VsZWN0ZWQgcGF0ZW50Iiwic2VsZWN0ZWQgcGF0ZW50IGxpY2Vuc2luZyIsImxpY2Vuc2luZyB0ZXJtcyBpZiIsInRlcm1zIGlmIGFueSIsImlmIGFueSBzZWUiLCJhbnkgc2VlIHNlY3Rpb24iLCIyIGJlbG93IGFuZCIsImJlbG93IGFuZCBwYXJ0IiwiYW5kIHBhcnQgNiIsImEgMSBkZWZpbml0aW9ucyIsImNvbnRyaWJ1dG9yIGFuZCBiIiwic3Vic2VxdWVudCBjb250cmlidXRvciB0aGUiLCJjb250cmlidXRvciB0aGUgc3Vic2VxdWVudCIsIm9yaWdpbmF0aW5nIGZyb20gYW5kIiwiZnJvbSBhbmQgZGlzdHJpYnV0ZWQiLCJhbmQgZGlzdHJpYnV0ZWQgYnkiLCJjb250cmlidXRvciAxIDIiLCIxIDIgZGVzaWduYXRlZCIsIjIgZGVzaWduYXRlZCB3ZWIiLCJ3ZWIgc2l0ZSBtZWFucyIsInNpdGUgbWVhbnMgdGhlIiwibWVhbnMgdGhlIHdlYiIsIndlYiBzaXRlIGhhdmluZyIsInNpdGUgaGF2aW5nIHRoZSIsImhhdmluZyB0aGUgdXJsIiwidGhlIHVybCBpZGVudGlmaWVkIiwidXJsIGlkZW50aWZpZWQgaW4iLCJhIHdoaWNoIHVybCIsIndoaWNoIHVybCBtYXkiLCJ1cmwgbWF5IGJlIiwiYmUgY2hhbmdlZCBieSIsImNoYW5nZWQgYnkgdGhlIiwiaW5pdGlhbCBjb250cmlidXRvciBieSIsImNvbnRyaWJ1dG9yIGJ5IHBvc3RpbmciLCJieSBwb3N0aW5nIG9uIiwicG9zdGluZyBvbiB0aGUiLCJvbiB0aGUgY3VycmVudCIsInRoZSBjdXJyZW50IGRlc2lnbmF0ZWQiLCJjdXJyZW50IGRlc2lnbmF0ZWQgd2ViIiwic2l0ZSB0aGUgbmV3IiwidGhlIG5ldyB1cmwiLCJuZXcgdXJsIGZvciIsInVybCBmb3IgYXQiLCJhdCBsZWFzdCBzaXh0eSIsImxlYXN0IHNpeHR5IDYwIiwiNjAgZGF5cyAxIiwiZGF5cyAxIDMiLCIxIDMgZGlzdHJpYnV0b3IiLCIzIGRpc3RyaWJ1dG9yIG1lYW5zIiwiZGlzdHJpYnV0b3IgbWVhbnMgYW55IiwiZGlzdHJpYnV0ZXMgdGhlIGxpY2Vuc2VkIiwidGhlcmVvZiB0byBhdCIsInBhcnR5IDEgNCIsIm1lY2hhbmlzbSBtZWFucyBhbnkiLCJtZWFucyBhbnkgbWVjaGFuaXNtIiwiYW55IG1lY2hhbmlzbSBnZW5lcmFsbHkiLCJtZWFucyB0aGUgbGljZW5zZWQiLCIxIDYgZ292ZXJuaW5nIiwiNiBnb3Zlcm5pbmcganVyaXNkaWN0aW9uIiwiZ292ZXJuaW5nIGp1cmlzZGljdGlvbiBtZWFucyIsImp1cmlzZGljdGlvbiBtZWFucyB0aGUiLCJtZWFucyB0aGUgc3RhdGUiLCJ0aGUgc3RhdGUgcHJvdmluY2UiLCJzdGF0ZSBwcm92aW5jZSBvciIsInByb3ZpbmNlIG9yIG90aGVyIiwib3RoZXIgbGVnYWwganVyaXNkaWN0aW9uIiwibGVnYWwganVyaXNkaWN0aW9uIGlkZW50aWZpZWQiLCJqdXJpc2RpY3Rpb24gaWRlbnRpZmllZCBpbiIsIjEgNyBpbmRlcGVuZGVudCIsIjcgaW5kZXBlbmRlbnQgbW9kdWxlIiwiaW5kZXBlbmRlbnQgbW9kdWxlIG1lYW5zIiwibWVhbnMgYSBzZXBhcmF0ZSIsImEgc2VwYXJhdGUgbW9kdWxlIiwic2VwYXJhdGUgbW9kdWxlIG9mIiwibW9kdWxlIG9mIHNvZnR3YXJlIiwib3IgZGF0YSB0aGF0Iiwid29yayBvZiBvciIsIm9mIG9yIGNvcGllZCIsIm9yIGNvcGllZCBmcm9tIiwidGhlcmVvZiBpbiBhZGRpdGlvbiIsImFkZGl0aW9uIGEgbW9kdWxlIiwiYSBtb2R1bGUgZG9lcyIsIm1vZHVsZSBkb2VzIG5vdCIsImFzIGFuIGluZGVwZW5kZW50IiwiaW5kZXBlbmRlbnQgbW9kdWxlIGJ1dCIsIm1vZHVsZSBidXQgaW5zdGVhZCIsImJ1dCBpbnN0ZWFkIGZvcm1zIiwiaW5zdGVhZCBmb3JtcyBwYXJ0IiwiZm9ybXMgcGFydCBvZiIsImxpY2Vuc2VkIHdvcmsgaWYiLCJpZiB0aGUgbW9kdWxlIiwidGhlIG1vZHVsZSBhIiwibW9kdWxlIGEgaXMiLCJhIGlzIGVtYmVkZGVkIiwiaXMgZW1iZWRkZWQgaW4iLCJlbWJlZGRlZCBpbiB0aGUiLCJsaWNlbnNlZCB3b3JrIGIiLCJ3b3JrIGIgaXMiLCJiIGlzIGluY2x1ZGVkIiwiaXMgaW5jbHVkZWQgYnkiLCJyZWZlcmVuY2UgaW4gdGhlIiwibGljZW5zZWQgd29yayBvdGhlciIsIm90aGVyIHRoYW4gYnkiLCJ0aGFuIGJ5IGEiLCJieSBhIGZ1bmN0aW9uIiwiYSBmdW5jdGlvbiBjYWxsIiwiZnVuY3Rpb24gY2FsbCBvciIsImNhbGwgb3IgYSIsIm9yIGEgY2xhc3MiLCJhIGNsYXNzIHJlZmVyZW5jZSIsImNsYXNzIHJlZmVyZW5jZSBvciIsInJlZmVyZW5jZSBvciBjIiwib3IgYyBtdXN0IiwiYyBtdXN0IGJlIiwiYmUgaW5jbHVkZWQgb3IiLCJpbmNsdWRlZCBvciBjb250YWluZWQiLCJjb250YWluZWQgaW4gd2hvbGUiLCJpbiBwYXJ0IHdpdGhpbiIsInBhcnQgd2l0aGluIGEiLCJ3aXRoaW4gYSBmaWxlIiwiYSBmaWxlIGRpcmVjdG9yeSIsImZpbGUgZGlyZWN0b3J5IG9yIiwiZGlyZWN0b3J5IG9yIHN1YmRpcmVjdG9yeSIsIm9yIHN1YmRpcmVjdG9yeSBhY3R1YWxseSIsInN1YmRpcmVjdG9yeSBhY3R1YWxseSBjb250YWluaW5nIiwiYWN0dWFsbHkgY29udGFpbmluZyBmaWxlcyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJBUFBMRSBQVUJMSUMgU09VUkNFIExJQ0VOU0VcblxuVmVyc2lvbiAxLjAgLSBNYXJjaCAxNiwgMTk5OSBQbGVhc2UgcmVhZCB0aGlzIExpY2Vuc2UgY2FyZWZ1bGx5IGJlZm9yZSBkb3dubG9hZGluZyB0aGlzIHNvZnR3YXJlLiBCeSBkb3dubG9hZGluZyBhbmQgdXNpbmcgdGhpcyBzb2Z0d2FyZSwgeW91IGFyZSBhZ3JlZWluZyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IG9yIGNhbm5vdCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBwbGVhc2UgZG8gbm90IGRvd25sb2FkIG9yIHVzZSB0aGUgc29mdHdhcmUuXG5cbiAgIDEuIEdlbmVyYWw7IERlZmluaXRpb25zLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIEFwcGxlIENvbXB1dGVyLCBJbmMuIChcIkFwcGxlXCIpIHB1YmxpY2x5IGFubm91bmNlcyBhcyBzdWJqZWN0IHRvIHRoaXMgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIGFuZCB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgQXBwbGUgaWRlbnRpZnlpbmcgc3VjaCBwcm9ncmFtIG9yIHdvcmsgYXMgXCJPcmlnaW5hbCBDb2RlXCIgYW5kIHN0YXRpbmcgdGhhdCBpdCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSB2ZXJzaW9uIDEuMCAob3Igc3Vic2VxdWVudCB2ZXJzaW9uIHRoZXJlb2YpLCBhcyBpdCBtYXkgYmUgcmV2aXNlZCBmcm9tIHRpbWUgdG8gdGltZSBieSBBcHBsZSAoXCJMaWNlbnNlXCIpLiBBcyB1c2VkIGluIHRoaXMgTGljZW5zZTpcblxuICAgICAgMS4xIFwiQXBwbGljYWJsZSBQYXRlbnRzXCIgbWVhbjogKGEpIGluIHRoZSBjYXNlIHdoZXJlIEFwcGxlIGlzIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIHBhdGVudHMgb3IgcGF0ZW50IGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBBcHBsZSBhbmQgKGlpKSB3aG9zZSBjbGFpbXMgY292ZXIgc3ViamVjdCBtYXR0ZXIgY29udGFpbmVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBidXQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSB3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpIHdob3NlIGNsYWltcyBjb3ZlciBzdWJqZWN0IG1hdHRlciBpbiBZb3VyIE1vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS5cblxuICAgICAgMS4yIFwiQ292ZXJlZCBDb2RlXCIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuXG5cbiAgICAgIDEuMyBcIkRlcGxveVwiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlciB0aGFuIGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCAoUlx1MDAyNkQpLCBhbmQgaW5jbHVkZXMgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgYW5kIGFsbCBpbnRlcm5hbCB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgQ29kZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gZXhjZXB0IGZvciBSXHUwMDI2RCB1c2UsIGFzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLlxuXG4gICAgICAxLjQgXCJMYXJnZXIgV29ya1wiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuNSBcIk1vZGlmaWNhdGlvbnNcIiBtZWFuIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgYW5kL29yIGNoYW5nZSB0bywgdGhlIHN1YnN0YW5jZSBhbmQvb3Igc3RydWN0dXJlIG9mIENvdmVyZWQgQ29kZS4gV2hlbiBjb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogKGEpIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBDb3ZlcmVkIENvZGU7IGFuZC9vciAoYikgYW55IG5ldyBmaWxlIG9yIG90aGVyIHJlcHJlc2VudGF0aW9uIG9mIGNvbXB1dGVyIHByb2dyYW0gc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS5cblxuICAgICAgMS42IFwiT3JpZ2luYWwgQ29kZVwiIG1lYW5zIHRoZSBTb3VyY2UgQ29kZSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayBhcyBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zIG9yIHdvcmtzIG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHRoYXQgaGFzIGJlZW4gZXhwcmVzc2x5IGlkZW50aWZpZWQgYnkgQXBwbGUgYXMgc3VjaCBpbiB0aGUgaGVhZGVyIGZpbGUocykgb2Ygc3VjaCB3b3JrLlxuXG4gICAgICAxLjcgXCJTb3VyY2UgQ29kZVwiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHRoYXQgaXMgc3VpdGFibGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSAob2JqZWN0IGNvZGUpLlxuXG4gICAgICAxLjggXCJZb3VcIiBvciBcIllvdXJcIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBcIllvdVwiIG9yIFwiWW91clwiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgXCJjb250cm9sXCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAyLiBQZXJtaXR0ZWQgVXNlczsgQ29uZGl0aW9ucyBcdTAwMjYgUmVzdHJpY3Rpb25zLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIEFwcGxlIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIEFwcGxlJ3MgQXBwbGljYWJsZSBQYXRlbnRzIGFuZCBjb3B5cmlnaHRzIGNvdmVyaW5nIHRoZSBPcmlnaW5hbCBDb2RlLCB0byBkbyB0aGUgZm9sbG93aW5nOlxuXG4gICAgICAyLjEgWW91IG1heSB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSBPcmlnaW5hbCBDb2RlLCB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgc29sZWx5IGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCwgcHJvdmlkZWQgdGhhdCBZb3UgbXVzdCBpbiBlYWNoIGluc3RhbmNlOlxuXG4gICAgICAgICAoYSkgcmV0YWluIGFuZCByZXByb2R1Y2UgaW4gYWxsIGNvcGllcyBvZiBPcmlnaW5hbCBDb2RlIHRoZSBjb3B5cmlnaHQgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIEFwcGxlIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2U7XG5cbiAgICAgICAgIChiKSBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIFNvdXJjZSBDb2RlIG9mIENvdmVyZWQgQ29kZSBhbmQgZG9jdW1lbnRhdGlvbiBZb3UgZGlzdHJpYnV0ZSwgYW5kIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gc3VjaCBTb3VyY2UgQ29kZSB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlciwgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDY7IGFuZFxuXG4gICAgICAgICAoYykgY29tcGxldGVseSBhbmQgYWNjdXJhdGVseSBkb2N1bWVudCBhbGwgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBoYXZlIG1hZGUgYW5kIHRoZSBkYXRlIG9mIGVhY2ggc3VjaCBNb2RpZmljYXRpb24sIGRlc2lnbmF0ZSB0aGUgdmVyc2lvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB5b3UgdXNlZCwgcHJvbWluZW50bHkgaW5jbHVkZSBhIGZpbGUgY2Fycnlpbmcgc3VjaCBpbmZvcm1hdGlvbiB3aXRoIHRoZSBNb2RpZmljYXRpb25zLCBhbmQgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIHN1Y2ggTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMi4yIFlvdSBtYXkgRGVwbG95IENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBZb3UgbXVzdCBpbiBlYWNoIGluc3RhbmNlOlxuXG4gICAgICAgICAoYSkgc2F0aXNmeSBhbGwgdGhlIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlO1xuXG4gICAgICAgICAoYikgbWFrZSBhbGwgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIHB1YmxpY2x5IGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHZpYSBlbGVjdHJvbmljIGRpc3RyaWJ1dGlvbiAoZS5nLiBkb3dubG9hZCBmcm9tIGEgd2ViIHNpdGUpIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGFuZCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBZb3UgbWF5IGNob29zZSB0byBvZmZlciB1bmRlciBTZWN0aW9uIDYuIFlvdSBtdXN0IGNvbnRpbnVlIHRvIG1ha2UgdGhlIFNvdXJjZSBDb2RlIG9mIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgeW91IERlcGxveSB0aGUgQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwgRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlcjtcblxuICAgICAgICAgKGMpIG11c3Qgbm90aWZ5IEFwcGxlIGFuZCBvdGhlciB0aGlyZCBwYXJ0aWVzIG9mIGhvdyB0byBvYnRhaW4gWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIGJ5IGZpbGxpbmcgb3V0IGFuZCBzdWJtaXR0aW5nIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbiBmb3VuZCBhdCBodHRwOi8vd3d3LmFwcGxlLmNvbS9wdWJsaWNzb3VyY2UvbW9kaWZpY2F0aW9ucy5odG1sOyBhbmRcblxuICAgICAgICAgKGQpIGlmIHlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwgaW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kIHdoZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlLlxuXG4gICAzLiBZb3VyIEdyYW50cy4gSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGEgY29uZGl0aW9uIHRvLCB0aGUgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlOlxuXG4gICAgICAgICAoYSkgWW91IGhlcmVieSBncmFudCB0byBBcHBsZSBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMgb2YgdGhlIHNhbWUgc2NvcGUgYW5kIGV4dGVudCBhcyBBcHBsZSdzIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQgMi4yOyBhbmRcblxuICAgICAgICAgKGIpIFlvdSBoZXJlYnkgZ3JhbnQgdG8gQXBwbGUgYW5kIGl0cyBzdWJzaWRpYXJpZXMgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsIGFuZCBpcnJldm9jYWJsZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGV4ZWN1dGUsIGNvbXBpbGUsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBvciBoYXZlIG1vZGlmaWVkIChmb3IgQXBwbGUgYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMpLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIFlvdXIgTW9kaWZpY2F0aW9ucywgaW4gYW55IGZvcm0sIHRocm91Z2ggbXVsdGlwbGUgdGllcnMgb2YgZGlzdHJpYnV0aW9uLlxuXG4gICA0LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi5cblxuICAgNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBBcHBsZSBoZXJlaW4uIE1vZGlmaWNhdGlvbnMgYW5kL29yIExhcmdlciBXb3JrcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLlxuXG4gICA2LiBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiAoXCJBZGRpdGlvbmFsIFRlcm1zXCIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIGFuZCBub3Qgb24gYmVoYWxmIG9mIEFwcGxlLiBZb3UgbXVzdCBvYnRhaW4gdGhlIHJlY2lwaWVudCdzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBBcHBsZSBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBBcHBsZSBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy5cblxuICAgNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIEFwcGxlIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHB1Ymxpc2hlZCBieSBBcHBsZS4gTm8gb25lIG90aGVyIHRoYW4gQXBwbGUgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICA4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiBUaGUgT3JpZ2luYWwgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvciBpbiBwYXJ0IHByZS1yZWxlYXNlLCB1bnRlc3RlZCwgb3Igbm90IGZ1bGx5IHRlc3RlZCB3b3Jrcy4gVGhlIE9yaWdpbmFsIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBpcyBhdCBZb3VyIHNvbGUgYW5kIGVudGlyZSByaXNrLiBUSEUgT1JJR0lOQUwgQ09ERSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFdJVEhPVVQgV0FSUkFOVFksIFVQR1JBREVTIE9SIFNVUFBPUlQgT0YgQU5ZIEtJTkQgQU5EIEFQUExFIEFORCBBUFBMRSdTIExJQ0VOU09SKFMpIChGT1IgVEhFIFBVUlBPU0VTIE9GIFNFQ1RJT05TIDggQU5EIDksIEFQUExFIEFORCBBUFBMRSdTIExJQ0VOU09SKFMpIEFSRSBDT0xMRUNUSVZFTFkgUkVGRVJSRUQgVE8gQVMgXCJBUFBMRVwiKSBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIFNBVElTRkFDVE9SWSBRVUFMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gQVBQTEUgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBPUklHSU5BTCBDT0RFIFdJTEwgTUVFVCBZT1VSIFJFUVVJUkVNRU5UUywgT1IgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBPUklHSU5BTCBDT0RFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLCBPUiBUSEFUIERFRkVDVFMgSU4gVEhFIE9SSUdJTkFMIENPREUgV0lMTCBCRSBDT1JSRUNURUQuIE5PIE9SQUwgT1IgV1JJVFRFTiBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgQVBQTEUgT1IgQU4gQVBQTEUgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWSBPUiBJTiBBTlkgV0FZIElOQ1JFQVNFIFRIRSBTQ09QRSBPRiBUSElTIFdBUlJBTlRZLiBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgT3JpZ2luYWwgQ29kZSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuXG5cbiAgIDkuIExpYWJpbGl0eS5cblxuICAgICAgOS4xIEluZnJpbmdlbWVudC4gSWYgYW55IG9mIHRoZSBPcmlnaW5hbCBDb2RlIGJlY29tZXMgdGhlIHN1YmplY3Qgb2ZhIGNsYWltIG9mIGluZnJpbmdlbWVudCAoXCJBZmZlY3RlZCBPcmlnaW5hbCBDb2RlXCIpLCBBcHBsZSBtYXksIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24gYW5kIG9wdGlvbjogKGEpIGF0dGVtcHQgdG8gcHJvY3VyZSB0aGUgcmlnaHRzIG5lY2Vzc2FyeSBmb3IgWW91IHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlOyAoYikgbW9kaWZ5IHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIHNvIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIGluZnJpbmdpbmc7IG9yIChjKSB0ZXJtaW5hdGUgWW91ciByaWdodHMgdG8gdXNlIHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlLCBlZmZlY3RpdmUgaW1tZWRpYXRlbHkgdXBvbiBBcHBsZSdzIHBvc3Rpbmcgb2YgYSBub3RpY2UgdG8gc3VjaCBlZmZlY3Qgb24gdGhlIEFwcGxlIHdlYiBzaXRlIHRoYXQgaXMgdXNlZCBmb3IgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICA5LjIgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgU0hBTEwgQVBQTEUgQkUgTElBQkxFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBPUklHSU5BTCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSIFVOREVSIEEgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUyBBTkQgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GIEVTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBSRU1FRFkuIEluIG5vIGV2ZW50IHNoYWxsIEFwcGxlJ3MgdG90YWwgbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsIGRhbWFnZXMgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUgYW1vdW50IG9mIGZpZnR5IGRvbGxhcnMgKCQ1MC4wMCkuXG5cbiAgIDEwLiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgXCJBcHBsZVwiLCBcIkFwcGxlIENvbXB1dGVyXCIsIFwiTWFjIE9TIFhcIiwgXCJNYWMgT1MgWCBTZXJ2ZXJcIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gQXBwbGUgKGNvbGxlY3RpdmVseSBcIkFwcGxlIE1hcmtzXCIpIGFuZCBubyBBcHBsZSBNYXJrcyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlXG5cbiAgIG90aGVyIHRoYW4gYXMgcGVybWl0dGVkIGJ5IGFuZCBpbiBzdHJpY3QgY29tcGxpYW5jZSBhdCBhbGwgdGltZXMgd2l0aCBBcHBsZSdzIHRoaXJkIHBhcnR5IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzIHdoaWNoIGFyZSBwb3N0ZWQgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vbGVnYWwvZ3VpZGVsaW5lc2ZvcjNyZHBhcnRpZXMuaHRtbC5cblxuICAgMTEuIE93bmVyc2hpcC4gQXBwbGUgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG9yIG9uIGJlaGFsZiBvZiBBcHBsZSAoXCJBcHBsZSBNb2RpZmljYXRpb25zXCIpLCBhbmQgc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIEFwcGxlIG1heSwgYXQgaXRzIHNvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSwgb3Igb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBvciBtYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLiBBcHBsZSdzIGRldmVsb3BtZW50LCB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCBzdWJsaWNlbnNpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgd2lsbCBub3QgYmUgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuXG5cbiAgIDEyLiBUZXJtaW5hdGlvbi5cblxuICAgICAgMTIuMSBUZXJtaW5hdGlvbi4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlOlxuXG4gICAgICAgICAoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoO1xuXG4gICAgICAgICAoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9ucyA5LjEgYW5kL29yIDEzLjYoYik7IG9yXG5cbiAgICAgICAgIChjKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBBcHBsZS5cblxuICAgICAgMTIuMiBFZmZlY3Qgb2YgVGVybWluYXRpb24uIFVwb24gdGVybWluYXRpb24sIFlvdSBhZ3JlZSB0byBpbW1lZGlhdGVseSBzdG9wIGFueSBmdXJ0aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlLCBvciBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIGluIHRoZSBjYXNlIG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb24gOS4xLCBhbmQgdG8gZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgb3IgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSAoaW4gdGhlIGNhc2Ugb2ZcblxuICAgICAgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbiA5LjEpIHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBoYXZlIGJlZW4gcHJvcGVybHkgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgc2hvdWxkIHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kIDEzLiBOZWl0aGVyIHBhcnR5IHdpbGwgYmUgbGlhYmxlIHRvIHRoZSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLCBpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydCBzb2xlbHkgYXMgYSByZXN1bHQgb2YgdGVybWluYXRpbmcgdGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMsIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBiZSB3aXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mIGVpdGhlciBwYXJ0eS5cblxuICAgMTMuIE1pc2NlbGxhbmVvdXMuXG5cbiAgICAgIDEzLjEgRXhwb3J0IExhdyBBc3N1cmFuY2VzLiBZb3UgbWF5IG5vdCB1c2Ugb3Igb3RoZXJ3aXNlIGV4cG9ydCBvciByZS1leHBvcnQgdGhlIE9yaWdpbmFsIENvZGUgZXhjZXB0IGFzIGF1dGhvcml6ZWQgYnkgVW5pdGVkIFN0YXRlcyBsYXcgYW5kIHRoZSBsYXdzIG9mIHRoZSBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIE9yaWdpbmFsIENvZGUgd2FzIG9idGFpbmVkLiBJbiBwYXJ0aWN1bGFyLCBidXQgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgT3JpZ2luYWwgQ29kZSBtYXkgbm90IGJlIGV4cG9ydGVkIG9yIHJlLWV4cG9ydGVkIChhKSBpbnRvIChvciB0byBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mKSBhbnkgVS5TLiBlbWJhcmdvZWQgY291bnRyeSBvciAoYikgdG8gYW55b25lIG9uIHRoZSBVLlMuIFRyZWFzdXJ5IERlcGFydG1lbnQncyBsaXN0IG9mIFNwZWNpYWxseSBEZXNpZ25hdGVkIE5hdGlvbmFscyBvciB0aGUgVS5TLiBEZXBhcnRtZW50IG9mIENvbW1lcmNlJ3MgVGFibGUgb2YgRGVuaWFsIE9yZGVycy4gQnkgdXNpbmcgdGhlIE9yaWdpbmFsIENvZGUsIFlvdSByZXByZXNlbnQgYW5kIHdhcnJhbnQgdGhhdCBZb3UgYXJlIG5vdCBsb2NhdGVkIGluLCB1bmRlciBjb250cm9sIG9mLCBvciBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mIGFueSBzdWNoIGNvdW50cnkgb3Igb24gYW55IHN1Y2ggbGlzdC5cblxuICAgICAgMTMuMiBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIENvdmVyZWQgQ29kZSBpcyBhIFwiY29tbWVyY2lhbCBpdGVtXCIgYXMgZGVmaW5lZCBpbiBGQVIgMi4xMDEuIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIHJpZ2h0cyBpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkgcHJvdmlkZWQgdG8gdGhlIHB1YmxpYyBhcyBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4gVGhpcyBjdXN0b21hcnkgY29tbWVyY2lhbCBsaWNlbnNlIGluIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpblxuXG4gICAgICBhY2NvcmRhbmNlIHdpdGggRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyIFNvZnR3YXJlKSBhbmQsIGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgcHVyY2hhc2VzLCBERkFSIDI1Mi4yMjctNzAxNSAoVGVjaG5pY2FsIERhdGEgLS0gQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMgKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24pLiBBY2NvcmRpbmdseSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLlxuXG4gICAgICAxMy4zIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBZb3UgYW5kIEFwcGxlLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvciBvdGhlcndpc2UuXG5cbiAgICAgIDEzLjQgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIEFwcGxlJ3MgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS5cblxuICAgICAgMTMuNSBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gRmFpbHVyZSBieSBBcHBsZSB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQgb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciB3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEzLjYgU2V2ZXJhYmlsaXR5LiAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBvciBwb3J0aW9uIHRoZXJlb2YsIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgZWNvbm9taWMgYmVuZWZpdHMgYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiAoYikgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yIHNwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YgdGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuXG5cbiAgICAgIDEzLjcgRGlzcHV0ZSBSZXNvbHV0aW9uLiBBbnkgbGl0aWdhdGlvbiBvciBvdGhlciBkaXNwdXRlIHJlc29sdXRpb24gYmV0d2VlbiBZb3UgYW5kIEFwcGxlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCBhbmQgWW91IGFuZCBBcHBsZSBoZXJlYnkgY29uc2VudCB0byB0aGUgcGVyc29uYWwganVyaXNkaWN0aW9uIG9mLCBhbmQgdmVudWUgaW4sIHRoZSBzdGF0ZSBhbmQgZmVkZXJhbCBjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5zZS4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuXG5cbiAgICAgIDEzLjggRW50aXJlIEFncmVlbWVudDsgR292ZXJuaW5nIExhdy4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YgQ2FsaWZvcm5pYSBsYXcgY29uY2VybmluZyBjb25mbGljdHMgb2YgbGF3LlxuXG4gICAgICBXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nIGNsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcyBwYXJ0aWVzIG9udCBleGlnZSBxdWUgbGUgcHJlc2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cyBjb25uZXhlcyBzb2llbnQgcmVkaWdlcyBlbiBhbmdsYWlzLiBFWEhJQklUIEEuXG5cblwiUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk5IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIFRoaXMgZmlsZSBjb250YWlucyBPcmlnaW5hbCBDb2RlIGFuZC9vciBNb2RpZmljYXRpb25zIG9mIE9yaWdpbmFsIENvZGUgYXMgZGVmaW5lZCBpbiBhbmQgdGhhdCBhcmUgc3ViamVjdCB0byB0aGUgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgJ0xpY2Vuc2UnKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBQbGVhc2Ugb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwcGxlLmNvbS9wdWJsaWNzb3VyY2UgYW5kIHJlYWQgaXQgYmVmb3JlIHVzaW5nIHRoaXMgZmlsZS5cblxuVGhlIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0VNRU5ULiBQbGVhc2Ugc2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXCIiXSwibGljZW5zZUlkcyI6WyJBUFNMLTEuMCJdLCJrZXl3b3JkcyI6WyIxIDAgbWFyY2giLCIwIG1hcmNoIDE2IiwibWFyY2ggMTYgMTk5OSIsIjE2IDE5OTkgcGxlYXNlIiwiMSBhcHBsaWNhYmxlIHBhdGVudHMiLCJhcHBsaWNhYmxlIHBhdGVudHMgbWVhbiIsInBhdGVudHMgbWVhbiBhIiwiaSBwYXRlbnRzIG9yIiwiaSBwYXRlbnRzIGFuZCIsInBhdGVudHMgYW5kIHBhdGVudCIsImFuZCBwYXRlbnQgYXBwbGljYXRpb25zIiwiMSAzIGRlcGxveSIsIjMgZGVwbG95IG1lYW5zIiwibWFubmVyIDEgNCIsIjEgNSBtb2RpZmljYXRpb25zIiwiNSBtb2RpZmljYXRpb25zIG1lYW4iLCI2IG9yaWdpbmFsIGNvZGUiLCJzdWNoIHdvcmsgMSIsIndvcmsgMSA3IiwiMSA3IHNvdXJjZSIsIjcgc291cmNlIGNvZGUiLCJjb2RlIDEgOCIsIjEgOCB5b3UiLCI4IHlvdSBvciIsInMgYXBwbGljYWJsZSBwYXRlbnRzIiwicGF0ZW50cyBhbmQgY29weXJpZ2h0cyIsImxvbmdlciBjIG11c3QiLCJjIG11c3Qgbm90aWZ5IiwibXVzdCBub3RpZnkgYXBwbGUiLCJub3RpZnkgYXBwbGUgYW5kIiwiYXBwbGUgYW5kIG90aGVyIiwiYW5kIG90aGVyIHRoaXJkIiwib3RoZXIgdGhpcmQgcGFydGllcyIsInRoaXJkIHBhcnRpZXMgb2YiLCJwYXJ0aWVzIG9mIGhvdyIsInRvIG9idGFpbiB5b3VyIiwib2J0YWluIHlvdXIgZGVwbG95ZWQiLCJkZXBsb3llZCBtb2RpZmljYXRpb25zIGJ5Iiwic3VibWl0dGluZyB0aGUgcmVxdWlyZWQiLCJyZXF1aXJlZCBpbmZvcm1hdGlvbiBmb3VuZCIsIm1vZGlmaWNhdGlvbnMgaHRtbCBhbmQiLCJodG1sIGFuZCBkIiwidGhlIHN1YmplY3Qgb2ZhIiwic3ViamVjdCBvZmEgY2xhaW0iLCJvZmEgY2xhaW0gb2YiLCJvZiBpbmZyaW5nZW1lbnQgYWZmZWN0ZWQiLCJpbmZyaW5nZW1lbnQgYWZmZWN0ZWQgb3JpZ2luYWwiLCJjb2RlIGFwcGxlIG1heSIsInNvbGUgZGlzY3JldGlvbiBhbmQiLCJkaXNjcmV0aW9uIGFuZCBvcHRpb24iLCJhbmQgb3B0aW9uIGEiLCJuZWNlc3NhcnkgZm9yIHlvdSIsIm9yIGMgdGVybWluYXRlIiwiYyB0ZXJtaW5hdGUgeW91ciIsInVzZSB0aGUgYWZmZWN0ZWQiLCJvcmlnaW5hbCBjb2RlIGVmZmVjdGl2ZSIsImNvZGUgZWZmZWN0aXZlIGltbWVkaWF0ZWx5IiwiaW4gc2VjdGlvbnMgOSIsInNlY3Rpb25zIDkgMSIsImFuZCBvciAxMyIsIm9yIDEzIDYiLCIxMyA2IGIiLCI2IGIgb3IiLCIxIGFuZCB0byIsIjkgMSB0aGF0IiwiMSB0aGF0IGFyZSIsIjEzIDEgZXhwb3J0IiwiMSBleHBvcnQgbGF3IiwiZXhwb3J0IGxhdyBhc3N1cmFuY2VzIiwibGF3IGFzc3VyYW5jZXMgeW91IiwiYXNzdXJhbmNlcyB5b3UgbWF5Iiwib3Igb3RoZXJ3aXNlIGV4cG9ydCIsIm90aGVyd2lzZSBleHBvcnQgb3IiLCJleHBvcnQgb3IgcmUiLCJvciByZSBleHBvcnQiLCJyZSBleHBvcnQgdGhlIiwiZXhwb3J0IHRoZSBvcmlnaW5hbCIsIm9yaWdpbmFsIGNvZGUgZXhjZXB0IiwiY29kZSBleGNlcHQgYXMiLCJleGNlcHQgYXMgYXV0aG9yaXplZCIsImFzIGF1dGhvcml6ZWQgYnkiLCJhdXRob3JpemVkIGJ5IHVuaXRlZCIsInVuaXRlZCBzdGF0ZXMgbGF3Iiwic3RhdGVzIGxhdyBhbmQiLCJhbmQgdGhlIGxhd3MiLCJ3aGljaCB0aGUgb3JpZ2luYWwiLCJjb2RlIHdhcyBvYnRhaW5lZCIsIndhcyBvYnRhaW5lZCBpbiIsIm9idGFpbmVkIGluIHBhcnRpY3VsYXIiLCJpbiBwYXJ0aWN1bGFyIGJ1dCIsInBhcnRpY3VsYXIgYnV0IHdpdGhvdXQiLCJidXQgd2l0aG91dCBsaW1pdGF0aW9uIiwibGltaXRhdGlvbiB0aGUgb3JpZ2luYWwiLCJjb2RlIG1heSBub3QiLCJub3QgYmUgZXhwb3J0ZWQiLCJiZSBleHBvcnRlZCBvciIsImV4cG9ydGVkIG9yIHJlIiwicmUgZXhwb3J0ZWQgYSIsImV4cG9ydGVkIGEgaW50byIsImEgaW50byBvciIsImludG8gb3IgdG8iLCJvciB0byBhIiwidG8gYSBuYXRpb25hbCIsIm9mIGFueSB1IiwiYW55IHUgcyIsInMgZW1iYXJnb2VkIGNvdW50cnkiLCJlbWJhcmdvZWQgY291bnRyeSBvciIsImNvdW50cnkgb3IgYiIsImIgdG8gYW55b25lIiwidG8gYW55b25lIG9uIiwiYW55b25lIG9uIHRoZSIsIm9uIHRoZSB1IiwidSBzIHRyZWFzdXJ5IiwicyB0cmVhc3VyeSBkZXBhcnRtZW50IiwidHJlYXN1cnkgZGVwYXJ0bWVudCBzIiwiZGVwYXJ0bWVudCBzIGxpc3QiLCJzIGxpc3Qgb2YiLCJsaXN0IG9mIHNwZWNpYWxseSIsIm9mIHNwZWNpYWxseSBkZXNpZ25hdGVkIiwic3BlY2lhbGx5IGRlc2lnbmF0ZWQgbmF0aW9uYWxzIiwiZGVzaWduYXRlZCBuYXRpb25hbHMgb3IiLCJuYXRpb25hbHMgb3IgdGhlIiwib2YgY29tbWVyY2UgcyIsImNvbW1lcmNlIHMgdGFibGUiLCJzIHRhYmxlIG9mIiwidGFibGUgb2YgZGVuaWFsIiwib2YgZGVuaWFsIG9yZGVycyIsImRlbmlhbCBvcmRlcnMgYnkiLCJvcmRlcnMgYnkgdXNpbmciLCJ1c2luZyB0aGUgb3JpZ2luYWwiLCJjb2RlIHlvdSByZXByZXNlbnQiLCJ5b3UgcmVwcmVzZW50IGFuZCIsInJlcHJlc2VudCBhbmQgd2FycmFudCIsImFuZCB3YXJyYW50IHRoYXQiLCJ3YXJyYW50IHRoYXQgeW91IiwiYXJlIG5vdCBsb2NhdGVkIiwibm90IGxvY2F0ZWQgaW4iLCJsb2NhdGVkIGluIHVuZGVyIiwiaW4gdW5kZXIgY29udHJvbCIsInVuZGVyIGNvbnRyb2wgb2YiLCJvZiBvciBhIiwib3IgYSBuYXRpb25hbCIsImFueSBzdWNoIGNvdW50cnkiLCJzdWNoIGNvdW50cnkgb3IiLCJjb3VudHJ5IG9yIG9uIiwib3Igb24gYW55Iiwib24gYW55IHN1Y2giLCJhbnkgc3VjaCBsaXN0Iiwic3VjaCBsaXN0IDEzIiwibGlzdCAxMyAyIiwiMTMgMiBnb3Zlcm5tZW50IiwiMiBnb3Zlcm5tZW50IGVuZCIsImhlcmVpbiAxMyAzIiwiMTMgMyByZWxhdGlvbnNoaXAiLCIzIHJlbGF0aW9uc2hpcCBvZiIsIm90aGVyd2lzZSAxMyA0IiwiMTMgNCBpbmRlcGVuZGVudCIsIjQgaW5kZXBlbmRlbnQgZGV2ZWxvcG1lbnQiLCJkaXN0cmlidXRlIDEzIDUiLCIxMyA1IHdhaXZlciIsIjUgd2FpdmVyIGNvbnN0cnVjdGlvbiIsImxpY2Vuc2UgMTMgNiIsIjEzIDYgc2V2ZXJhYmlsaXR5IiwiNiBzZXZlcmFiaWxpdHkgYSIsImNvbnRyb2wgMTMgNyIsIjEzIDcgZGlzcHV0ZSIsIjcgZGlzcHV0ZSByZXNvbHV0aW9uIiwiZXhjbHVkZWQgMTMgOCIsIjEzIDggZW50aXJlIiwiYyAxOTk5IGFwcGxlIiwiMTk5OSBhcHBsZSBjb21wdXRlciIsInZlcnNpb24gMSAwIG1hcmNoIiwiMSAwIG1hcmNoIDE2IiwiMCBtYXJjaCAxNiAxOTk5IiwibWFyY2ggMTYgMTk5OSBwbGVhc2UiLCIxNiAxOTk5IHBsZWFzZSByZWFkIiwiMSAxIGFwcGxpY2FibGUgcGF0ZW50cyIsIjEgYXBwbGljYWJsZSBwYXRlbnRzIG1lYW4iLCJhcHBsaWNhYmxlIHBhdGVudHMgbWVhbiBhIiwicGF0ZW50cyBtZWFuIGEgaW4iLCJyaWdodHMgaSBwYXRlbnRzIG9yIiwiaSBwYXRlbnRzIG9yIHBhdGVudCIsIm9yIHBhdGVudCBhcHBsaWNhdGlvbnMgdGhhdCIsImFwcGxlIGFuZCBpaSB3aG9zZSIsInJpZ2h0cyBpIHBhdGVudHMgYW5kIiwiaSBwYXRlbnRzIGFuZCBwYXRlbnQiLCJwYXRlbnRzIGFuZCBwYXRlbnQgYXBwbGljYXRpb25zIiwiYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMgdGhhdCIsInlvdSBhbmQgaWkgd2hvc2UiLCJjb2RlIDEgMiBjb3ZlcmVkIiwicG9ydGlvbnMgdGhlcmVvZiAxIDMiLCJ0aGVyZW9mIDEgMyBkZXBsb3kiLCIxIDMgZGVwbG95IG1lYW5zIiwiMyBkZXBsb3kgbWVhbnMgdG8iLCJvciBtYW5uZXIgMSA0IiwibWFubmVyIDEgNCBsYXJnZXIiLCJsaWNlbnNlIDEgNSBtb2RpZmljYXRpb25zIiwiMSA1IG1vZGlmaWNhdGlvbnMgbWVhbiIsIjUgbW9kaWZpY2F0aW9ucyBtZWFuIGFueSIsImNvdmVyZWQgY29kZSAxIDYiXX0seyJsaWNlbnNlVGV4dHMiOlsiQVBQTEUgUFVCTElDIFNPVVJDRSBMSUNFTlNFXG5cblZlcnNpb24gMS4xIC0gQXByaWwgMTksIDE5OTkgUGxlYXNlIHJlYWQgdGhpcyBMaWNlbnNlIGNhcmVmdWxseSBiZWZvcmUgZG93bmxvYWRpbmcgdGhpcyBzb2Z0d2FyZS5cblxuQnkgZG93bmxvYWRpbmcgYW5kIHVzaW5nIHRoaXMgc29mdHdhcmUsIHlvdSBhcmUgYWdyZWVpbmcgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGRvIG5vdCBvciBjYW5ub3QgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgcGxlYXNlIGRvIG5vdCBkb3dubG9hZCBvciB1c2UgdGhlIHNvZnR3YXJlLlxuXG4gICAxLiBHZW5lcmFsOyBEZWZpbml0aW9ucy4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBBcHBsZSBDb21wdXRlciwgSW5jLiAoXCJBcHBsZVwiKSBwdWJsaWNseSBhbm5vdW5jZXMgYXMgc3ViamVjdCB0byB0aGlzIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBhbmQgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IEFwcGxlIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzIFwiT3JpZ2luYWwgQ29kZVwiIGFuZCBzdGF0aW5nIHRoYXQgaXQgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgdmVyc2lvbiAxLjEgKG9yIHN1YnNlcXVlbnQgdmVyc2lvbiB0aGVyZW9mKSwgYXMgaXQgbWF5IGJlIHJldmlzZWQgZnJvbSB0aW1lIHRvIHRpbWUgYnkgQXBwbGUgKFwiTGljZW5zZVwiKS4gQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6XG5cbiAgICAgIDEuMSBcIkFmZmVjdGVkIE9yaWdpbmFsIENvZGVcIiBtZWFucyBvbmx5IHRob3NlIHNwZWNpZmljIHBvcnRpb25zIG9mIE9yaWdpbmFsIENvZGUgdGhhdCBhbGxlZ2VkbHkgaW5mcmluZ2UgdXBvbiBhbnkgcGFydHkncyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIGFyZSBvdGhlcndpc2UgdGhlIHN1YmplY3Qgb2YgYSBjbGFpbSBvZiBpbmZyaW5nZW1lbnQuXG5cbiAgICAgIDEuMiBcIkFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0c1wiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBBcHBsZSBpcyB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBBcHBsZSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UgYW5kL29yIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgd2l0aG91dCBpbmZyaW5nZW1lbnQ7IGFuZCAoYikgaW4gdGhlIGNhc2Ugd2hlcmUgWW91IGFyZSB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3UgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBpbiBZb3VyIE1vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS5cblxuICAgICAgMS4zIFwiQ292ZXJlZCBDb2RlXCIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuXG5cbiAgICAgIDEuNCBcIkRlcGxveVwiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlciB0aGFuIGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCAoUlx1MDAyNkQpLCBhbmQgaW5jbHVkZXMgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgYW5kIGFsbCBpbnRlcm5hbCB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgQ29kZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gZXhjZXB0IGZvciBSXHUwMDI2RCB1c2UsIGFzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLlxuXG4gICAgICAxLjUgXCJMYXJnZXIgV29ya1wiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuNiBcIk1vZGlmaWNhdGlvbnNcIiBtZWFuIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgYW5kL29yIGNoYW5nZSB0bywgdGhlIHN1YnN0YW5jZSBhbmQvb3Igc3RydWN0dXJlIG9mIENvdmVyZWQgQ29kZS4gV2hlbiBjb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogKGEpIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBDb3ZlcmVkIENvZGU7IGFuZC9vciAoYikgYW55IG5ldyBmaWxlIG9yIG90aGVyIHJlcHJlc2VudGF0aW9uIG9mIGNvbXB1dGVyIHByb2dyYW0gc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS5cblxuICAgICAgMS43IFwiT3JpZ2luYWwgQ29kZVwiIG1lYW5zIChhKSB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcyBvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuIGV4cHJlc3NseSBpZGVudGlmaWVkIGJ5IEFwcGxlIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2ggd29yazsgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIFNvdXJjZSBDb2RlIGFuZCBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS44IFwiU291cmNlIENvZGVcIiBtZWFucyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayB0aGF0IGlzIHN1aXRhYmxlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgKG9iamVjdCBjb2RlKS5cblxuICAgICAgMS45IFwiWW91XCIgb3IgXCJZb3VyXCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgXCJZb3VcIiBvciBcIllvdXJcIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlIFwiY29udHJvbFwiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgXHUwMDI2IFJlc3RyaWN0aW9ucy4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBBcHBsZSBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlIGFuZCBkb3dubG9hZCB0aGUgT3JpZ2luYWwgQ29kZSwgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi0gZXhjbHVzaXZlIGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YgQXBwbGUncyBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIGNvcHlyaWdodHMgY292ZXJpbmcgdGhlIE9yaWdpbmFsIENvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIDIuMSBZb3UgbWF5IHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIE9yaWdpbmFsIENvZGUsIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBzb2xlbHkgZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50LCBwcm92aWRlZCB0aGF0IFlvdSBtdXN0IGluIGVhY2ggaW5zdGFuY2U6XG5cbiAgICAgICAgIChhKSByZXRhaW4gYW5kIHJlcHJvZHVjZSBpbiBhbGwgY29waWVzIG9mIE9yaWdpbmFsIENvZGUgdGhlIGNvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgQXBwbGUgYXMgdGhleSBhcHBlYXIgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGFuZCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBpbiB0aGUgT3JpZ2luYWwgQ29kZSB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZTtcblxuICAgICAgICAgKGIpIGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YgQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNjsgYW5kXG5cbiAgICAgICAgIChjKSBjb21wbGV0ZWx5IGFuZCBhY2N1cmF0ZWx5IGRvY3VtZW50IGFsbCBNb2RpZmljYXRpb25zIHRoYXQgeW91IGhhdmUgbWFkZSBhbmQgdGhlIGRhdGUgb2YgZWFjaCBzdWNoIE1vZGlmaWNhdGlvbiwgZGVzaWduYXRlIHRoZSB2ZXJzaW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHlvdSB1c2VkLCBwcm9taW5lbnRseSBpbmNsdWRlIGEgZmlsZSBjYXJyeWluZyBzdWNoIGluZm9ybWF0aW9uIHdpdGggdGhlIE1vZGlmaWNhdGlvbnMsIGFuZCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgc3VjaCBNb2RpZmljYXRpb25zLlxuXG4gICAgICAyLjIgWW91IG1heSBEZXBsb3kgQ292ZXJlZCBDb2RlLCBwcm92aWRlZCB0aGF0IFlvdSBtdXN0IGluIGVhY2ggaW5zdGFuY2U6XG5cbiAgICAgICAgIChhKSBzYXRpc2Z5IGFsbCB0aGUgY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIuMSB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGU7XG5cbiAgICAgICAgIChiKSBtYWtlIGFsbCBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgcHVibGljbHkgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdmlhIGVsZWN0cm9uaWMgZGlzdHJpYnV0aW9uIChlLmcuIGRvd25sb2FkIGZyb20gYSB3ZWIgc2l0ZSkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgc3ViamVjdCB0byB0aGUgbGljZW5zZSBncmFudHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gMyBiZWxvdywgYW5kIGFueSBhZGRpdGlvbmFsIHRlcm1zIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyIHVuZGVyIFNlY3Rpb24gNi4gWW91IG11c3QgY29udGludWUgdG8gbWFrZSB0aGUgU291cmNlIENvZGUgb2YgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyB5b3UgRGVwbG95IHRoZSBDb3ZlcmVkIENvZGUgb3IgdHdlbHZlICgxMikgbW9udGhzIGZyb20gdGhlIGRhdGUgb2YgaW5pdGlhbCBEZXBsb3ltZW50LCB3aGljaGV2ZXIgaXMgbG9uZ2VyO1xuXG4gICAgICAgICAoYykgaWYgWW91IERlcGxveSBDb3ZlcmVkIENvZGUgY29udGFpbmluZyBNb2RpZmljYXRpb25zIG1hZGUgYnkgWW91LCBpbmZvcm0gb3RoZXJzIG9mIGhvdyB0byBvYnRhaW4gdGhvc2UgTW9kaWZpY2F0aW9ucyBieSBmaWxsaW5nIG91dCBhbmQgc3VibWl0dGluZyB0aGUgaW5mb3JtYXRpb24gZm91bmQgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlL21vZGlmaWNhdGlvbnMuaHRtbCwgaWYgYXZhaWxhYmxlOyBhbmRcblxuICAgICAgICAgKGQpIGlmIFlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwgaW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kIHdoZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlLlxuXG4gICAzLiBZb3VyIEdyYW50cy4gSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGEgY29uZGl0aW9uIHRvLCB0aGUgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlOlxuXG4gICAgICAoYSkgWW91IGhlcmVieSBncmFudCB0byBBcHBsZSBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMgb2YgdGhlIHNhbWUgc2NvcGUgYW5kIGV4dGVudCBhcyBBcHBsZSdzIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQgMi4yOyBhbmRcblxuICAgICAgKGIpIFlvdSBoZXJlYnkgZ3JhbnQgdG8gQXBwbGUgYW5kIGl0cyBzdWJzaWRpYXJpZXMgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsIGFuZCBpcnJldm9jYWJsZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGV4ZWN1dGUsIGNvbXBpbGUsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBvciBoYXZlIG1vZGlmaWVkIChmb3IgQXBwbGUgYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMpLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIFlvdXIgTW9kaWZpY2F0aW9ucywgaW4gYW55IGZvcm0sIHRocm91Z2ggbXVsdGlwbGUgdGllcnMgb2YgZGlzdHJpYnV0aW9uLlxuXG4gICA0LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi5cblxuICAgNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBBcHBsZSBoZXJlaW4uIE1vZGlmaWNhdGlvbnMgYW5kL29yIExhcmdlciBXb3JrcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLlxuXG4gICA2LiBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiAoXCJBZGRpdGlvbmFsIFRlcm1zXCIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIGFuZCBub3Qgb24gYmVoYWxmIG9mIEFwcGxlLiBZb3UgbXVzdCBvYnRhaW4gdGhlIHJlY2lwaWVudCdzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBBcHBsZSBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBBcHBsZSBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy5cblxuICAgNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIEFwcGxlIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHB1Ymxpc2hlZCBieSBBcHBsZS4gTm8gb25lIG90aGVyIHRoYW4gQXBwbGUgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICA4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiBUaGUgT3JpZ2luYWwgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvciBpbiBwYXJ0IHByZS1yZWxlYXNlLCB1bnRlc3RlZCwgb3Igbm90IGZ1bGx5IHRlc3RlZCB3b3Jrcy4gVGhlIE9yaWdpbmFsIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBpcyBhdCBZb3VyIHNvbGUgYW5kIGVudGlyZSByaXNrLiBUSEUgT1JJR0lOQUwgQ09ERSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFdJVEhPVVQgV0FSUkFOVFksIFVQR1JBREVTIE9SIFNVUFBPUlQgT0YgQU5ZIEtJTkQgQU5EIEFQUExFIEFORCBBUFBMRSdTIExJQ0VOU09SKFMpIChGT1IgVEhFIFBVUlBPU0VTIE9GIFNFQ1RJT05TIDggQU5EIDksIEFQUExFIEFORCBBUFBMRSdTIExJQ0VOU09SKFMpIEFSRSBDT0xMRUNUSVZFTFkgUkVGRVJSRUQgVE8gQVMgXCJBUFBMRVwiKSBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIFNBVElTRkFDVE9SWSBRVUFMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gQVBQTEUgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBPUklHSU5BTCBDT0RFIFdJTEwgTUVFVCBZT1VSIFJFUVVJUkVNRU5UUywgT1IgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBPUklHSU5BTCBDT0RFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi0gRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBPUklHSU5BTCBDT0RFIFdJTEwgQkUgQ09SUkVDVEVELiBOTyBPUkFMIE9SIFdSSVRURU4gSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOIEJZIEFQUExFIE9SIEFOIEFQUExFIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkUgU0hBTEwgQ1JFQVRFIEEgV0FSUkFOVFkgT1IgSU4gQU5ZIFdBWSBJTkNSRUFTRSBUSEUgU0NPUEUgT0YgVEhJUyBXQVJSQU5UWS4gWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIE9yaWdpbmFsIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlIG9wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGNvdWxkIGxlYWQgdG8gZGVhdGgsIHBlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlIHBoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLlxuXG4gICA5LiBMaWFiaWxpdHkuXG5cbiAgICAgIDkuMSBJbmZyaW5nZW1lbnQuIElmIGFueSBwb3J0aW9uIG9mLCBvciBmdW5jdGlvbmFsaXR5IGltcGxlbWVudGVkIGJ5LCB0aGUgT3JpZ2luYWwgQ29kZSBiZWNvbWVzIHRoZSBzdWJqZWN0IG9mIGEgY2xhaW0gb2YgaW5mcmluZ2VtZW50LCBBcHBsZSBtYXksIGF0IGl0cyBvcHRpb246IChhKSBhdHRlbXB0IHRvIHByb2N1cmUgdGhlIHJpZ2h0cyBuZWNlc3NhcnkgZm9yIEFwcGxlIGFuZCBZb3UgdG8gY29udGludWUgdXNpbmcgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGU7IChiKSBtb2RpZnkgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUgc28gdGhhdCBpdCBpcyBubyBsb25nZXIgaW5mcmluZ2luZzsgb3IgKGMpIHN1c3BlbmQgWW91ciByaWdodHMgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSB1bnRpbCBhIGZpbmFsIGRldGVybWluYXRpb24gb2YgdGhlIGNsYWltIGlzIG1hZGUgYnkgYSBjb3VydCBvciBnb3Zlcm5tZW50YWwgYWRtaW5pc3RyYXRpdmUgYWdlbmN5IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gYW5kIEFwcGxlIGxpZnRzIHRoZSBzdXNwZW5zaW9uIGFzIHNldCBmb3J0aCBiZWxvdy4gU3VjaCBzdXNwZW5zaW9uIG9mIHJpZ2h0cyB3aWxsIGJlIGVmZmVjdGl2ZSBpbW1lZGlhdGVseSB1cG9uIEFwcGxlJ3MgcG9zdGluZyBvZiBhIG5vdGljZSB0byBzdWNoIGVmZmVjdCBvbiB0aGUgQXBwbGUgd2ViIHNpdGUgdGhhdCBpcyB1c2VkIGZvciBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFVwb24gc3VjaCBmaW5hbCBkZXRlcm1pbmF0aW9uIGJlaW5nIG1hZGUsIGlmIEFwcGxlIGlzIGxlZ2FsbHkgYWJsZSwgd2l0aG91dCB0aGUgcGF5bWVudCBvZiBhIGZlZSBvciByb3lhbHR5LCB0byByZXN1bWUgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUsIEFwcGxlIHdpbGwgbGlmdCB0aGUgc3VzcGVuc2lvbiBvZiByaWdodHMgdG8gdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUgYnkgcG9zdGluZyBhIG5vdGljZSB0byBzdWNoIGVmZmVjdCBvbiB0aGUgQXBwbGUgd2ViIHNpdGUgdGhhdCBpcyB1c2VkIGZvciBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIExpY2Vuc2UuIElmIEFwcGxlIHN1c3BlbmRzIFlvdXIgcmlnaHRzIHRvIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUsIG5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCB0byByZXN0cmljdCBZb3UsIGF0IFlvdXIgb3B0aW9uIGFuZCBzdWJqZWN0IHRvIGFwcGxpY2FibGUgbGF3LCBmcm9tIHJlcGxhY2luZyB0aGUgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSB3aXRoIG5vbi1pbmZyaW5naW5nIGNvZGUgb3IgaW5kZXBlbmRlbnRseSBuZWdvdGlhdGluZyBmb3IgbmVjZXNzYXJ5IHJpZ2h0cyBmcm9tIHN1Y2ggdGhpcmQgcGFydHkuXG5cbiAgICAgIDkuMiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBTSEFMTCBBUFBMRSBCRSBMSUFCTEUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhJUyBMSUNFTlNFIE9SIFlPVVIgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIE9SSUdJTkFMIENPREUsIE9SIEFOWSBQT1JUSU9OIFRIRVJFT0YsIFdIRVRIRVIgVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFBST0RVQ1RTIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYgQVBQTEUgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gSW4gbm8gZXZlbnQgc2hhbGwgQXBwbGUncyB0b3RhbCBsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwgZGFtYWdlcyB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZWVkIHRoZSBhbW91bnQgb2YgZmlmdHkgZG9sbGFycyAoJDUwLjAwKS5cblxuICAgMTAuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBcIkFwcGxlXCIsIFwiQXBwbGUgQ29tcHV0ZXJcIiwgXCJNYWMgT1MgWFwiLCBcIk1hYyBPUyBYIFNlcnZlclwiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZyB0byBBcHBsZSAoY29sbGVjdGl2ZWx5IFwiQXBwbGUgTWFya3NcIikgYW5kIG5vIEFwcGxlIE1hcmtzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3RoZXIgdGhhbiBhcyBwZXJtaXR0ZWQgYnkgYW5kIGluIHN0cmljdCBjb21wbGlhbmNlIGF0IGFsbCB0aW1lcyB3aXRoIEFwcGxlJ3MgdGhpcmQgcGFydHkgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMgd2hpY2ggYXJlIHBvc3RlZCBhdCBodHRwOi8vd3d3LmFwcGxlLmNvbS9sZWdhbC9ndWlkZWxpbmVzZm9yM3JkcGFydGllcy5odG1sLlxuXG4gICAxMS4gT3duZXJzaGlwLiBBcHBsZSByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIEFwcGxlIChcIkFwcGxlIE1vZGlmaWNhdGlvbnNcIiksIGFuZCBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gQXBwbGUgbWF5LCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuIEFwcGxlJ3MgZGV2ZWxvcG1lbnQsIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgQ29kZSB3aWxsIG5vdCBiZSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS5cblxuICAgMTIuIFRlcm1pbmF0aW9uLlxuXG4gICAgICAxMi4xIFRlcm1pbmF0aW9uLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGU6XG5cbiAgICAgICAgIChhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHRlcm0ocykgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBicmVhY2g7XG5cbiAgICAgICAgIChiKSBpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YgdGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTMuNShiKTsgb3JcblxuICAgICAgICAgKGMpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIExpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IEFwcGxlLlxuXG4gICAgICAxMi4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgdG8gZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIFNlY3Rpb25zIDMsIDUsIDgsIDksIDEwLCAxMSwgMTIuMiBhbmQgMTMuIE5laXRoZXIgcGFydHkgd2lsbCBiZSBsaWFibGUgdG8gdGhlIG90aGVyIGZvciBjb21wZW5zYXRpb24sIGluZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZyB0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YgZWl0aGVyIHBhcnR5LlxuXG4gICAxMy4gTWlzY2VsbGFuZW91cy5cblxuICAgICAgMTMuMSBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIENvdmVyZWQgQ29kZSBpcyBhIFwiY29tbWVyY2lhbCBpdGVtXCIgYXMgZGVmaW5lZCBpbiBGQVIgMi4xMDEuIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIHJpZ2h0cyBpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkgcHJvdmlkZWQgdG8gdGhlIHB1YmxpYyBhcyBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4gVGhpcyBjdXN0b21hcnkgY29tbWVyY2lhbCBsaWNlbnNlIGluIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpbiBhY2NvcmRhbmNlIHdpdGggRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyIFNvZnR3YXJlKSBhbmQsIGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgcHVyY2hhc2VzLCBERkFSIDI1Mi4yMjctNzAxNSAoVGVjaG5pY2FsIERhdGEgLS0gQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMgKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24pLiBBY2NvcmRpbmdseSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLlxuXG4gICAgICAxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBZb3UgYW5kIEFwcGxlLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvciBvdGhlcndpc2UuXG5cbiAgICAgIDEzLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIEFwcGxlJ3MgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heVxuXG4gICAgICBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS5cblxuICAgICAgMTMuNCBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gRmFpbHVyZSBieSBBcHBsZSB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQgb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciB3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEzLjUgU2V2ZXJhYmlsaXR5LiAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBvciBwb3J0aW9uIHRoZXJlb2YsIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgZWNvbm9taWMgYmVuZWZpdHMgYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiAoYikgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yIHNwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YgdGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuXG5cbiAgICAgIDEzLjYgRGlzcHV0ZSBSZXNvbHV0aW9uLiBBbnkgbGl0aWdhdGlvbiBvciBvdGhlciBkaXNwdXRlIHJlc29sdXRpb24gYmV0d2VlbiBZb3UgYW5kIEFwcGxlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCBhbmQgWW91IGFuZCBBcHBsZSBoZXJlYnkgY29uc2VudCB0byB0aGUgcGVyc29uYWwganVyaXNkaWN0aW9uIG9mLCBhbmQgdmVudWUgaW4sIHRoZSBzdGF0ZSBhbmQgZmVkZXJhbCBjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5zZS4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuXG5cbiAgICAgIDEzLjcgRW50aXJlIEFncmVlbWVudDsgR292ZXJuaW5nIExhdy4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YgQ2FsaWZvcm5pYSBsYXcgY29uY2VybmluZyBjb25mbGljdHMgb2YgbGF3LlxuXG4gICAgICBXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nIGNsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcyBwYXJ0aWVzIG9udCBleGlnZSBxdWUgbGUgcHJlc2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cyBjb25uZXhlcyBzb2llbnQgcmVkaWdlcyBlbiBhbmdsYWlzLiBFWEhJQklUIEEuXG5cblwiUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gVGhpcyBmaWxlIGNvbnRhaW5zIE9yaWdpbmFsIENvZGUgYW5kL29yIE1vZGlmaWNhdGlvbnMgb2YgT3JpZ2luYWwgQ29kZSBhcyBkZWZpbmVkIGluIGFuZCB0aGF0IGFyZSBzdWJqZWN0IHRvIHRoZSBBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZyB0aGlzIGZpbGUuXG5cblRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tIElORlJJTkdFTUVOVC4gUGxlYXNlIHNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlwiIl0sImxpY2Vuc2VJZHMiOlsiQVBTTC0xLjEiXSwia2V5d29yZHMiOlsiMSAxIGFwcmlsIiwiMSBhcHJpbCAxOSIsImFwcmlsIDE5IDE5OTkiLCIxOSAxOTk5IHBsZWFzZSIsIjEgMSBhZmZlY3RlZCIsIjEgYWZmZWN0ZWQgb3JpZ2luYWwiLCJjb2RlIG1lYW5zIG9ubHkiLCJtZWFucyBvbmx5IHRob3NlIiwib25seSB0aG9zZSBzcGVjaWZpYyIsInRob3NlIHNwZWNpZmljIHBvcnRpb25zIiwic3BlY2lmaWMgcG9ydGlvbnMgb2YiLCJwb3J0aW9ucyBvZiBvcmlnaW5hbCIsImNvZGUgdGhhdCBhbGxlZ2VkbHkiLCJ0aGF0IGFsbGVnZWRseSBpbmZyaW5nZSIsImFsbGVnZWRseSBpbmZyaW5nZSB1cG9uIiwiaW5mcmluZ2UgdXBvbiBhbnkiLCJ1cG9uIGFueSBwYXJ0eSIsInJpZ2h0cyBvciBhcmUiLCJvciBhcmUgb3RoZXJ3aXNlIiwiYXJlIG90aGVyd2lzZSB0aGUiLCJvdGhlcndpc2UgdGhlIHN1YmplY3QiLCJvZiBpbmZyaW5nZW1lbnQgMSIsImluZnJpbmdlbWVudCAxIDIiLCIxIDIgYXBwbGljYWJsZSIsIjIgYXBwbGljYWJsZSBwYXRlbnQiLCJsb25nZXIgYyBpZiIsImNvdmVyZWQgY29kZSBjb250YWluaW5nIiwiY29kZSBjb250YWluaW5nIG1vZGlmaWNhdGlvbnMiLCJjb250YWluaW5nIG1vZGlmaWNhdGlvbnMgbWFkZSIsImJ5IHlvdSBpbmZvcm0iLCJ5b3UgaW5mb3JtIG90aGVycyIsImluZm9ybSBvdGhlcnMgb2YiLCJvdGhlcnMgb2YgaG93IiwidG8gb2J0YWluIHRob3NlIiwib2J0YWluIHRob3NlIG1vZGlmaWNhdGlvbnMiLCJ0aG9zZSBtb2RpZmljYXRpb25zIGJ5Iiwic3VibWl0dGluZyB0aGUgaW5mb3JtYXRpb24iLCJ0aGUgaW5mb3JtYXRpb24gZm91bmQiLCJtb2RpZmljYXRpb25zIGh0bWwgaWYiLCJodG1sIGlmIGF2YWlsYWJsZSIsImlmIGF2YWlsYWJsZSBhbmQiLCJhdmFpbGFibGUgYW5kIGQiLCJwb3J0aW9uIG9mIG9yIiwib2Ygb3IgZnVuY3Rpb25hbGl0eSIsIm9yIGZ1bmN0aW9uYWxpdHkgaW1wbGVtZW50ZWQiLCJmdW5jdGlvbmFsaXR5IGltcGxlbWVudGVkIGJ5IiwiaW1wbGVtZW50ZWQgYnkgdGhlIiwib2YgaW5mcmluZ2VtZW50IGFwcGxlIiwiaW5mcmluZ2VtZW50IGFwcGxlIG1heSIsImF0IGl0cyBvcHRpb24iLCJpdHMgb3B0aW9uIGEiLCJuZWNlc3NhcnkgZm9yIGFwcGxlIiwiYW5kIHlvdSB0byIsIm9yIGMgc3VzcGVuZCIsImMgc3VzcGVuZCB5b3VyIiwic3VzcGVuZCB5b3VyIHJpZ2h0cyIsInJlcHJvZHVjZSBtb2RpZnkgc3VibGljZW5zZSIsImRpc3RyaWJ1dGUgdGhlIGFmZmVjdGVkIiwib3JpZ2luYWwgY29kZSB1bnRpbCIsImNvZGUgdW50aWwgYSIsInVudGlsIGEgZmluYWwiLCJhIGZpbmFsIGRldGVybWluYXRpb24iLCJmaW5hbCBkZXRlcm1pbmF0aW9uIG9mIiwiZGV0ZXJtaW5hdGlvbiBvZiB0aGUiLCJvZiB0aGUgY2xhaW0iLCJ0aGUgY2xhaW0gaXMiLCJjbGFpbSBpcyBtYWRlIiwibWFkZSBieSBhIiwiYSBjb3VydCBvciIsImNvdXJ0IG9yIGdvdmVybm1lbnRhbCIsIm9yIGdvdmVybm1lbnRhbCBhZG1pbmlzdHJhdGl2ZSIsImdvdmVybm1lbnRhbCBhZG1pbmlzdHJhdGl2ZSBhZ2VuY3kiLCJhZG1pbmlzdHJhdGl2ZSBhZ2VuY3kgb2YiLCJhZ2VuY3kgb2YgY29tcGV0ZW50IiwiY29tcGV0ZW50IGp1cmlzZGljdGlvbiBhbmQiLCJqdXJpc2RpY3Rpb24gYW5kIGFwcGxlIiwiYW5kIGFwcGxlIGxpZnRzIiwiYXBwbGUgbGlmdHMgdGhlIiwibGlmdHMgdGhlIHN1c3BlbnNpb24iLCJ0aGUgc3VzcGVuc2lvbiBhcyIsInN1c3BlbnNpb24gYXMgc2V0IiwiZm9ydGggYmVsb3cgc3VjaCIsImJlbG93IHN1Y2ggc3VzcGVuc2lvbiIsInN1Y2ggc3VzcGVuc2lvbiBvZiIsIm9mIHJpZ2h0cyB3aWxsIiwicmlnaHRzIHdpbGwgYmUiLCJ3aWxsIGJlIGVmZmVjdGl2ZSIsImJlIGVmZmVjdGl2ZSBpbW1lZGlhdGVseSIsImxpY2Vuc2UgdXBvbiBzdWNoIiwidXBvbiBzdWNoIGZpbmFsIiwic3VjaCBmaW5hbCBkZXRlcm1pbmF0aW9uIiwiZmluYWwgZGV0ZXJtaW5hdGlvbiBiZWluZyIsImRldGVybWluYXRpb24gYmVpbmcgbWFkZSIsImJlaW5nIG1hZGUgaWYiLCJtYWRlIGlmIGFwcGxlIiwiaWYgYXBwbGUgaXMiLCJhcHBsZSBpcyBsZWdhbGx5IiwiaXMgbGVnYWxseSBhYmxlIiwibGVnYWxseSBhYmxlIHdpdGhvdXQiLCJhYmxlIHdpdGhvdXQgdGhlIiwid2l0aG91dCB0aGUgcGF5bWVudCIsInJveWFsdHkgdG8gcmVzdW1lIiwidG8gcmVzdW1lIHVzZSIsInJlc3VtZSB1c2UgcmVwcm9kdWN0aW9uIiwib2YgdGhlIGFmZmVjdGVkIiwiY29kZSBhcHBsZSB3aWxsIiwiYXBwbGUgd2lsbCBsaWZ0Iiwid2lsbCBsaWZ0IHRoZSIsImxpZnQgdGhlIHN1c3BlbnNpb24iLCJ0aGUgc3VzcGVuc2lvbiBvZiIsIm9mIHJpZ2h0cyB0byIsInRvIHRoZSBhZmZlY3RlZCIsIm9yaWdpbmFsIGNvZGUgYnkiLCJjb2RlIGJ5IHBvc3RpbmciLCJieSBwb3N0aW5nIGEiLCJwb3N0aW5nIGEgbm90aWNlIiwibGljZW5zZSBpZiBhcHBsZSIsImlmIGFwcGxlIHN1c3BlbmRzIiwiYXBwbGUgc3VzcGVuZHMgeW91ciIsInN1c3BlbmRzIHlvdXIgcmlnaHRzIiwicmlnaHRzIHRvIGFmZmVjdGVkIiwidG8gYWZmZWN0ZWQgb3JpZ2luYWwiLCJvcmlnaW5hbCBjb2RlIG5vdGhpbmciLCJiZSBjb25zdHJ1ZWQgdG8iLCJjb25zdHJ1ZWQgdG8gcmVzdHJpY3QiLCJ0byByZXN0cmljdCB5b3UiLCJyZXN0cmljdCB5b3UgYXQiLCJ5b3UgYXQgeW91ciIsInlvdXIgb3B0aW9uIGFuZCIsIm9wdGlvbiBhbmQgc3ViamVjdCIsImFwcGxpY2FibGUgbGF3IGZyb20iLCJsYXcgZnJvbSByZXBsYWNpbmciLCJmcm9tIHJlcGxhY2luZyB0aGUiLCJyZXBsYWNpbmcgdGhlIGFmZmVjdGVkIiwiY29kZSB3aXRoIG5vbiIsIndpdGggbm9uIGluZnJpbmdpbmciLCJub24gaW5mcmluZ2luZyBjb2RlIiwiaW5mcmluZ2luZyBjb2RlIG9yIiwiY29kZSBvciBpbmRlcGVuZGVudGx5Iiwib3IgaW5kZXBlbmRlbnRseSBuZWdvdGlhdGluZyIsImluZGVwZW5kZW50bHkgbmVnb3RpYXRpbmcgZm9yIiwibmVnb3RpYXRpbmcgZm9yIG5lY2Vzc2FyeSIsImZvciBuZWNlc3NhcnkgcmlnaHRzIiwibmVjZXNzYXJ5IHJpZ2h0cyBmcm9tIiwicmlnaHRzIGZyb20gc3VjaCIsImZyb20gc3VjaCB0aGlyZCIsInRoaXJkIHBhcnR5IDkiLCJwYXJ0eSA5IDIiLCIxOTk5IDIwMDAgYXBwbGUiLCIyMDAwIGFwcGxlIGNvbXB1dGVyIiwidmVyc2lvbiAxIDEgYXByaWwiLCIxIDEgYXByaWwgMTkiLCIxIGFwcmlsIDE5IDE5OTkiLCJhcHJpbCAxOSAxOTk5IHBsZWFzZSIsIjE5IDE5OTkgcGxlYXNlIHJlYWQiLCIxIG9yIHN1YnNlcXVlbnQgdmVyc2lvbiIsImxpY2Vuc2UgMSAxIGFmZmVjdGVkIiwiMSAxIGFmZmVjdGVkIG9yaWdpbmFsIiwiMSBhZmZlY3RlZCBvcmlnaW5hbCBjb2RlIiwiYWZmZWN0ZWQgb3JpZ2luYWwgY29kZSBtZWFucyIsIm9yaWdpbmFsIGNvZGUgbWVhbnMgb25seSIsImNvZGUgbWVhbnMgb25seSB0aG9zZSIsIm1lYW5zIG9ubHkgdGhvc2Ugc3BlY2lmaWMiLCJvbmx5IHRob3NlIHNwZWNpZmljIHBvcnRpb25zIiwidGhvc2Ugc3BlY2lmaWMgcG9ydGlvbnMgb2YiLCJzcGVjaWZpYyBwb3J0aW9ucyBvZiBvcmlnaW5hbCIsInBvcnRpb25zIG9mIG9yaWdpbmFsIGNvZGUiLCJvZiBvcmlnaW5hbCBjb2RlIHRoYXQiLCJvcmlnaW5hbCBjb2RlIHRoYXQgYWxsZWdlZGx5IiwiY29kZSB0aGF0IGFsbGVnZWRseSBpbmZyaW5nZSIsInRoYXQgYWxsZWdlZGx5IGluZnJpbmdlIHVwb24iLCJhbGxlZ2VkbHkgaW5mcmluZ2UgdXBvbiBhbnkiLCJpbmZyaW5nZSB1cG9uIGFueSBwYXJ0eSIsInVwb24gYW55IHBhcnR5IHMiLCJhbnkgcGFydHkgcyBpbnRlbGxlY3R1YWwiLCJwcm9wZXJ0eSByaWdodHMgb3IgYXJlIiwicmlnaHRzIG9yIGFyZSBvdGhlcndpc2UiLCJvciBhcmUgb3RoZXJ3aXNlIHRoZSIsImFyZSBvdGhlcndpc2UgdGhlIHN1YmplY3QiLCJvdGhlcndpc2UgdGhlIHN1YmplY3Qgb2YiLCJjbGFpbSBvZiBpbmZyaW5nZW1lbnQgMSIsIm9mIGluZnJpbmdlbWVudCAxIDIiLCJpbmZyaW5nZW1lbnQgMSAyIGFwcGxpY2FibGUiLCIxIDIgYXBwbGljYWJsZSBwYXRlbnQiLCIyIGFwcGxpY2FibGUgcGF0ZW50IHJpZ2h0cyIsImlzIGxvbmdlciBjIGlmIiwibG9uZ2VyIGMgaWYgeW91IiwiYyBpZiB5b3UgZGVwbG95IiwiZGVwbG95IGNvdmVyZWQgY29kZSBjb250YWluaW5nIiwiY292ZXJlZCBjb2RlIGNvbnRhaW5pbmcgbW9kaWZpY2F0aW9ucyIsImNvZGUgY29udGFpbmluZyBtb2RpZmljYXRpb25zIG1hZGUiLCJjb250YWluaW5nIG1vZGlmaWNhdGlvbnMgbWFkZSBieSIsIm1hZGUgYnkgeW91IGluZm9ybSIsImJ5IHlvdSBpbmZvcm0gb3RoZXJzIiwieW91IGluZm9ybSBvdGhlcnMgb2YiLCJpbmZvcm0gb3RoZXJzIG9mIGhvdyIsIm90aGVycyBvZiBob3cgdG8iLCJob3cgdG8gb2J0YWluIHRob3NlIiwidG8gb2J0YWluIHRob3NlIG1vZGlmaWNhdGlvbnMiLCJvYnRhaW4gdGhvc2UgbW9kaWZpY2F0aW9ucyBieSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgVmVyLiAxLjJcblxuICAgMS4gR2VuZXJhbDsgRGVmaW5pdGlvbnMuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggQXBwbGUgQ29tcHV0ZXIsIEluYy4gKFwiQXBwbGVcIikgbWFrZXMgcHVibGljbHkgYXZhaWxhYmxlIGFuZCB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgQXBwbGUgaWRlbnRpZnlpbmcgc3VjaCBwcm9ncmFtIG9yIHdvcmsgYXMgXCJPcmlnaW5hbCBDb2RlXCIgYW5kIHN0YXRpbmcgdGhhdCBpdCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSB2ZXJzaW9uIDEuMiAob3Igc3Vic2VxdWVudCB2ZXJzaW9uIHRoZXJlb2YpIChcIkxpY2Vuc2VcIikuIEFzIHVzZWQgaW4gdGhpcyBMaWNlbnNlOlxuXG4gICAgICAxLjEgXCJBcHBsaWNhYmxlIFBhdGVudCBSaWdodHNcIiBtZWFuOiAoYSkgaW4gdGhlIGNhc2Ugd2hlcmUgQXBwbGUgaXMgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gQXBwbGUgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBjb250YWluZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGJ1dCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIHVzZSwgcmVwcm9kdWNlIGFuZC9vciBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGhvdXQgaW5mcmluZ2VtZW50OyBhbmQgKGIpIGluIHRoZSBjYXNlIHdoZXJlIFlvdSBhcmUgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgaW4gWW91ciBNb2RpZmljYXRpb25zLCB0YWtlbiBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIE9yaWdpbmFsIENvZGUuXG5cbiAgICAgIDEuMiBcIkNvbnRyaWJ1dG9yXCIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLlxuXG4gICAgICAxLjMgXCJDb3ZlcmVkIENvZGVcIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi5cblxuICAgICAgMS40IFwiRGVwbG95XCIgbWVhbnMgdG8gdXNlLCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIG90aGVyIHRoYW4gZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IChSXHUwMDI2RCkgYW5kL29yIFBlcnNvbmFsIFVzZSwgYW5kIGluY2x1ZGVzIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgd2l0aGluIFlvdXIgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIGV4Y2VwdCBmb3IgUlx1MDAyNkQgdXNlIGFuZC9vciBQZXJzb25hbCBVc2UsIGFzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLlxuXG4gICAgICAxLjUgXCJMYXJnZXIgV29ya1wiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuNiBcIk1vZGlmaWNhdGlvbnNcIiBtZWFuIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgYW5kL29yIGNoYW5nZSB0bywgdGhlIHN1YnN0YW5jZSBhbmQvb3Igc3RydWN0dXJlIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4gV2hlbiBjb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogKGEpIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBDb3ZlcmVkIENvZGU7IGFuZC9vciAoYikgYW55IG5ldyBmaWxlIG9yIG90aGVyIHJlcHJlc2VudGF0aW9uIG9mIGNvbXB1dGVyIHByb2dyYW0gc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS5cblxuICAgICAgMS43IFwiT3JpZ2luYWwgQ29kZVwiIG1lYW5zIChhKSB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcyBvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuIGV4cHJlc3NseSBpZGVudGlmaWVkIGJ5IEFwcGxlIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2ggd29yazsgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIFNvdXJjZSBDb2RlIGFuZCBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS44IFwiUGVyc29uYWwgVXNlXCIgbWVhbnMgdXNlIG9mIENvdmVyZWQgQ29kZSBieSBhbiBpbmRpdmlkdWFsIHNvbGVseSBmb3IgaGlzIG9yIGhlciBwZXJzb25hbCwgcHJpdmF0ZSBhbmQgbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMuIEFuIGluZGl2aWR1YWwncyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGluIGhpcyBvciBoZXIgY2FwYWNpdHkgYXMgYW4gb2ZmaWNlciwgZW1wbG95ZWUsIG1lbWJlciwgaW5kZXBlbmRlbnQgY29udHJhY3RvciBvciBhZ2VudCBvZiBhIGNvcnBvcmF0aW9uLCBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gKGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwpIGRvZXMgbm90IHF1YWxpZnkgYXMgUGVyc29uYWwgVXNlLlxuXG4gICAgICAxLjkgXCJTb3VyY2UgQ29kZVwiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHRoYXQgaXMgc3VpdGFibGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSAob2JqZWN0IGNvZGUpLlxuXG4gICAgICAxLjEwIFwiWW91XCIgb3IgXCJZb3VyXCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgXCJZb3VcIiBvciBcIllvdXJcIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlIFwiY29udHJvbFwiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgXHUwMDI2IFJlc3RyaWN0aW9ucy5TdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIEFwcGxlIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIEFwcGxlJ3MgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBjb3B5cmlnaHRzIGNvdmVyaW5nIHRoZSBPcmlnaW5hbCBDb2RlLCB0byBkbyB0aGUgZm9sbG93aW5nOlxuXG4gICAgICAyLjEgWW91IG1heSB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIE9yaWdpbmFsIENvZGUsIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBzb2xlbHkgZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IGFuZC9vciBQZXJzb25hbCBVc2UsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZTpcblxuICAgICAgICAgKGEpIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBBcHBsZSBhcyB0aGV5IGFwcGVhciBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOyBhbmRcblxuICAgICAgICAgKGIpIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YgQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNi5cblxuICAgICAgMi4yIFlvdSBtYXkgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBhbmQgRGVwbG95IENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOlxuXG4gICAgICAgICAoYSkgWW91IG11c3Qgc2F0aXNmeSBhbGwgdGhlIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlO1xuXG4gICAgICAgICAoYikgWW91IG11c3QgZHVwbGljYXRlLCB0byB0aGUgZXh0ZW50IGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QsIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgTW9kaWZpY2F0aW9ucywgYW5kIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlO1xuXG4gICAgICAgICAoYykgWW91IG11c3QgbWFrZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIHB1YmxpY2x5IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGZvciBhcyBsb25nIGFzIHlvdSBEZXBsb3kgdGhlIENvdmVyZWQgQ29kZSBvciB0d2VsdmUgKDEyKSBtb250aHMgZnJvbSB0aGUgZGF0ZSBvZiBpbml0aWFsIERlcGxveW1lbnQsIHdoaWNoZXZlciBpcyBsb25nZXIuIFlvdSBzaG91bGQgcHJlZmVyYWJseSBkaXN0cmlidXRlIHRoZSBTb3VyY2UgQ29kZSBvZiBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgZWxlY3Ryb25pY2FsbHkgKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKTsgYW5kXG5cbiAgICAgICAgIChkKSBpZiBZb3UgRGVwbG95IENvdmVyZWQgQ29kZSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZS5cblxuICAgICAgMi4zIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgYWx0aG91Z2ggQXBwbGUgYW5kIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byB0aGVpciByZXNwZWN0aXZlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gQXBwbGUgYW5kIGVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW0gYW55IGxpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBZb3UgaGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgWW91IHRvIGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgQ29kZSwgaXQgaXMgWW91ciByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgIDMuIFlvdXIgR3JhbnRzLiBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZSBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2U6XG5cbiAgICAgIChhKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQpIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgQXBwbGUncyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMjsgYW5kXG5cbiAgICAgIChiKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBpdHMgc3Vic2lkaWFyaWVzIGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBhbmQgaXJyZXZvY2FibGUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50KSBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBvciBoYXZlIG1vZGlmaWVkIChmb3IgQXBwbGUgYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMpLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIFlvdXIgTW9kaWZpY2F0aW9ucywgaW4gYW55IGZvcm0sIHRocm91Z2ggbXVsdGlwbGUgdGllcnMgb2YgZGlzdHJpYnV0aW9uLlxuXG4gICA0LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi5cblxuICAgNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBBcHBsZSBoZXJlaW4uIE1vZGlmaWNhdGlvbnMgYW5kL29yIExhcmdlciBXb3JrcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLlxuXG4gICA2LiBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiAoXCJBZGRpdGlvbmFsIFRlcm1zXCIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIGFuZCBub3Qgb24gYmVoYWxmIG9mIEFwcGxlIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3Qgb2J0YWluIHRoZSByZWNpcGllbnQncyBhZ3JlZW1lbnQgdGhhdCBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgQXBwbGUgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0IEFwcGxlIG9yIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9mIGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMuXG5cbiAgIDcuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiBBcHBsZSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgWW91IG1heSBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBwdWJsaXNoZWQgYnkgQXBwbGUuIE5vIG9uZSBvdGhlciB0aGFuIEFwcGxlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgOC4gTk8gV0FSUkFOVFkgT1IgU1VQUE9SVC4gVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvciBpbiBwYXJ0IHByZS1yZWxlYXNlLCB1bnRlc3RlZCwgb3Igbm90IGZ1bGx5IHRlc3RlZCB3b3Jrcy4gVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBlcnJvcnMgdGhhdCBjb3VsZCBjYXVzZSBmYWlsdXJlcyBvciBsb3NzIG9mIGRhdGEsIGFuZCBtYXkgYmUgaW5jb21wbGV0ZSBvciBjb250YWluIGluYWNjdXJhY2llcy4gWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSwgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaXMgYXQgWW91ciBzb2xlIGFuZCBlbnRpcmUgcmlzay4gVEhFIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFdJVEhPVVQgV0FSUkFOVFksIFVQR1JBREVTIE9SIFNVUFBPUlQgT0YgQU5ZIEtJTkQgQU5EIEFQUExFIEFORCBBUFBMRSdTIExJQ0VOU09SKFMpIChDT0xMRUNUSVZFTFkgUkVGRVJSRUQgVE8gQVMgXCJBUFBMRVwiIEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQgOSkgQU5EIEFMTCBDT05UUklCVVRPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPRiBBQ0NVUkFDWSwgT0YgUVVJRVQgRU5KT1lNRU5ULCBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gQVBQTEUgQU5EIEVBQ0ggQ09OVFJJQlVUT1IgRE9FUyBOT1QgV0FSUkFOVCBBR0FJTlNUIElOVEVSRkVSRU5DRSBXSVRIIFlPVVIgRU5KT1lNRU5UIE9GIFRIRSBDT1ZFUkVEIENPREUsIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIE1FRVQgWU9VUiBSRVFVSVJFTUVOVFMsIFRIQVQgVEhFIE9QRVJBVElPTiBPRiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLCBPUiBUSEFUIERFRkVDVFMgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIENPUlJFQ1RFRC4gTk8gT1JBTCBPUiBXUklUVEVOIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSBBUFBMRSwgQU4gQVBQTEUgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBPUiBBTlkgQ09OVFJJQlVUT1IgU0hBTEwgQ1JFQVRFIEEgV0FSUkFOVFkuIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlIG9wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBDb3ZlcmVkIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuXG5cbiAgIDkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgQU5ZIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSElTIExJQ0VOU0UgT1IgWU9VUiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgQ09WRVJFRCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSIFVOREVSIEEgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIE9SIFNVQ0ggQ09OVFJJQlVUT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gSW4gbm8gZXZlbnQgc2hhbGwgQXBwbGUncyB0b3RhbCBsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwgZGFtYWdlcyAob3RoZXIgdGhhbiBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcpIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlIGFtb3VudCBvZiBmaWZ0eSBkb2xsYXJzICgkNTAuMDApLlxuXG4gICAxMC4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIFwiQXBwbGVcIiwgXCJBcHBsZSBDb21wdXRlclwiLCBcIk1hYyBPUyBYXCIsIFwiTWFjIE9TIFggU2VydmVyXCIsIFwiUXVpY2tUaW1lXCIsIFwiUXVpY2tUaW1lIFN0cmVhbWluZyBTZXJ2ZXJcIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gQXBwbGUgKGNvbGxlY3RpdmVseSBcIkFwcGxlIE1hcmtzXCIpIG9yIHRvIGFueSB0cmFkZW1hcmsgb3IgdHJhZGUgbmFtZSBiZWxvbmdpbmcgdG8gYW55IENvbnRyaWJ1dG9yLiBObyBBcHBsZSBNYXJrcyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG90aGVyIHRoYW4gYXMgcGVybWl0dGVkIGJ5IGFuZCBpbiBzdHJpY3QgY29tcGxpYW5jZSBhdCBhbGwgdGltZXMgd2l0aCBBcHBsZSdzIHRoaXJkIHBhcnR5IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzIHdoaWNoIGFyZSBwb3N0ZWQgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vbGVnYWwvZ3VpZGVsaW5lc2ZvcjNyZHBhcnRpZXMuaHRtbC5cblxuICAgMTEuIE93bmVyc2hpcC4gU3ViamVjdCB0byB0aGUgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBDb250cmlidXRvci4gQXBwbGUgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG9yIG9uIGJlaGFsZiBvZiBBcHBsZSAoXCJBcHBsZSBNb2RpZmljYXRpb25zXCIpLCBhbmQgc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIEFwcGxlIG1heSwgYXQgaXRzIHNvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSwgb3Igb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBvciBtYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLlxuXG4gICAxMi4gVGVybWluYXRpb24uXG5cbiAgICAgIDEyLjEgVGVybWluYXRpb24uIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZTpcblxuICAgICAgICAgKGEpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgdGVybShzKSBvZiB0aGlzIExpY2Vuc2UgYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIGJyZWFjaDtcblxuICAgICAgICAgKGIpIGltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxMy41KGIpOyBvclxuXG4gICAgICAgICAoYykgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSwgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IGFnYWluc3QgQXBwbGUuXG5cbiAgICAgIDEyLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBVcG9uIHRlcm1pbmF0aW9uLCBZb3UgYWdyZWUgdG8gaW1tZWRpYXRlbHkgc3RvcCBhbnkgZnVydGhlciB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCBzdWJsaWNlbnNpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCB0byBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIENvdmVyZWQgQ29kZSB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggaGF2ZSBiZWVuIHByb3Blcmx5IGdyYW50ZWQgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIHNob3VsZCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gU2VjdGlvbnMgMywgNSwgOCwgOSwgMTAsIDExLCAxMi4yIGFuZCAxMy4gTm8gcGFydHkgd2lsbCBiZSBsaWFibGUgdG8gYW55IG90aGVyIGZvciBjb21wZW5zYXRpb24sIGluZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZyB0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YgYW55IHBhcnR5LlxuXG4gICAxMy4gTWlzY2VsbGFuZW91cy5cblxuICAgICAgMTMuMSBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIENvdmVyZWQgQ29kZSBpcyBhIFwiY29tbWVyY2lhbCBpdGVtXCIgYXMgZGVmaW5lZCBpbiBGQVIgMi4xMDEuIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIHJpZ2h0cyBpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkgcHJvdmlkZWQgdG8gdGhlIHB1YmxpYyBhcyBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4gVGhpcyBjdXN0b21hcnkgY29tbWVyY2lhbCBsaWNlbnNlIGluIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpbiBhY2NvcmRhbmNlIHdpdGggRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyIFNvZnR3YXJlKSBhbmQsIGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgcHVyY2hhc2VzLCBERkFSIDI1Mi4yMjctNzAxNSAoVGVjaG5pY2FsIERhdGEgLS0gQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMgKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24pLiBBY2NvcmRpbmdseSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLlxuXG4gICAgICAxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBvciBhbW9uZ1lvdSwgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvciBvdGhlcndpc2UuXG5cbiAgICAgIDEzLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIEFwcGxlJ3MgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS5cblxuICAgICAgMTMuNCBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gRmFpbHVyZSBieSBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50IG9mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgd2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxMy41IFNldmVyYWJpbGl0eS4gKGEpIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbiB0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZSB3aWxsIGJlIGVuZm9yY2VkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBzbyBhcyB0byBlZmZlY3QgdGhlIGVjb25vbWljIGJlbmVmaXRzIGFuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gKGIpIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBpZiBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IgcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZC9vciBzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGggU2VjdGlvbnMgMiBhbmQvb3IgMyBvciBwcmV2ZW50cyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgZWl0aGVyIG9mIHRob3NlIFNlY3Rpb25zLCB0aGlzIExpY2Vuc2Ugd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgZGVzdHJveSBhbGwgY29waWVzIG9mIGl0IHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLlxuXG4gICAgICAxMy42IERpc3B1dGUgUmVzb2x1dGlvbi4gQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGJldHdlZW4gWW91IGFuZCBBcHBsZSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgQXBwbGUgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLlxuXG4gICAgICAxMy43IEVudGlyZSBBZ3JlZW1lbnQ7IEdvdmVybmluZyBMYXcuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBleGNlcHQgdGhhdCBib2R5IG9mIENhbGlmb3JuaWEgbGF3IGNvbmNlcm5pbmcgY29uZmxpY3RzIG9mIGxhdy5cblxuICAgICAgV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMgcGFydGllcyBvbnQgZXhpZ8OpIHF1ZSBsZSBwcsOpc2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cyBjb25uZXhlcyBzb2llbnQgcsOpZGlnw6lzIGVuIGFuZ2xhaXMuIEVYSElCSVQgQS5cblxuXCJQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuXG5UaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZiBPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMiAodGhlICdMaWNlbnNlJykuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZyB0aGlzIGZpbGUuXG5cblRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORCBBUFBMRSBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCBPUiBOT04tSU5GUklOR0VNRU5ULiBQbGVhc2Ugc2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXCIiXSwibGljZW5zZUlkcyI6WyJBUFNMLTEuMiJdLCJrZXl3b3JkcyI6WyJzb3VyY2UgbGljZW5zZSB2ZXIiLCJsaWNlbnNlIHZlciAxIiwidmVyIDEgMiIsIjIgMSBnZW5lcmFsIiwiMiBvciBzdWJzZXF1ZW50IiwidGhlcmVvZiBsaWNlbnNlIGFzIiwic2l0ZSBhbmQgZCIsImNvZGUgMiAzIiwieCBzZXJ2ZXIgcXVpY2t0aW1lIiwic2VydmVyIHF1aWNrdGltZSBxdWlja3RpbWUiLCJjb250cmlidXRvciBubyBhcHBsZSIsImJldHdlZW4gb3IgYW1vbmd5b3UiLCJvciBhbW9uZ3lvdSBhcHBsZSIsImFtb25neW91IGFwcGxlIG9yIiwiYyAxOTk5IDIwMDEiLCIxOTk5IDIwMDEgYXBwbGUiLCIyMDAxIGFwcGxlIGNvbXB1dGVyIiwicHVibGljIHNvdXJjZSBsaWNlbnNlIHZlciIsInNvdXJjZSBsaWNlbnNlIHZlciAxIiwibGljZW5zZSB2ZXIgMSAyIiwidmVyIDEgMiAxIiwiMSAyIDEgZ2VuZXJhbCIsIjIgMSBnZW5lcmFsIGRlZmluaXRpb25zIiwiY29tcHV0ZXIgaW5jIGFwcGxlIG1ha2VzIiwiMSAyIG9yIHN1YnNlcXVlbnQiLCIyIG9yIHN1YnNlcXVlbnQgdmVyc2lvbiIsInZlcnNpb24gdGhlcmVvZiBsaWNlbnNlIGFzIiwidGhlcmVvZiBsaWNlbnNlIGFzIHVzZWQiLCI2IDIgMiB5b3UiLCJ3ZWIgc2l0ZSBhbmQgZCIsInNpdGUgYW5kIGQgaWYiLCJzb3VyY2UgY29kZSAyIDMiLCJjb2RlIDIgMyB5b3UiLCJvcyB4IHNlcnZlciBxdWlja3RpbWUiLCJ4IHNlcnZlciBxdWlja3RpbWUgcXVpY2t0aW1lIiwic2VydmVyIHF1aWNrdGltZSBxdWlja3RpbWUgc3RyZWFtaW5nIiwiYW55IGNvbnRyaWJ1dG9yIG5vIGFwcGxlIiwiY29udHJpYnV0b3Igbm8gYXBwbGUgbWFya3MiLCJhc3NvY2lhdGlvbiBiZXR3ZWVuIG9yIGFtb25neW91IiwiYmV0d2VlbiBvciBhbW9uZ3lvdSBhcHBsZSIsIm9yIGFtb25neW91IGFwcGxlIG9yIiwiYW1vbmd5b3UgYXBwbGUgb3IgYW55IiwiY29weXJpZ2h0IGMgMTk5OSAyMDAxIiwiYyAxOTk5IDIwMDEgYXBwbGUiLCIxOTk5IDIwMDEgYXBwbGUgY29tcHV0ZXIiLCIyMDAxIGFwcGxlIGNvbXB1dGVyIGluYyIsImFwcGxlIHB1YmxpYyBzb3VyY2UgbGljZW5zZSB2ZXIiLCJwdWJsaWMgc291cmNlIGxpY2Vuc2UgdmVyIDEiLCJzb3VyY2UgbGljZW5zZSB2ZXIgMSAyIiwibGljZW5zZSB2ZXIgMSAyIDEiLCJ2ZXIgMSAyIDEgZ2VuZXJhbCIsIjEgMiAxIGdlbmVyYWwgZGVmaW5pdGlvbnMiLCIyIDEgZ2VuZXJhbCBkZWZpbml0aW9ucyB0aGlzIiwiYXBwbGUgY29tcHV0ZXIgaW5jIGFwcGxlIG1ha2VzIiwiY29tcHV0ZXIgaW5jIGFwcGxlIG1ha2VzIHB1YmxpY2x5IiwidmVyc2lvbiAxIDIgb3Igc3Vic2VxdWVudCIsIjEgMiBvciBzdWJzZXF1ZW50IHZlcnNpb24iLCIyIG9yIHN1YnNlcXVlbnQgdmVyc2lvbiB0aGVyZW9mIiwic3Vic2VxdWVudCB2ZXJzaW9uIHRoZXJlb2YgbGljZW5zZSBhcyIsInZlcnNpb24gdGhlcmVvZiBsaWNlbnNlIGFzIHVzZWQiLCJ0aGVyZW9mIGxpY2Vuc2UgYXMgdXNlZCBpbiIsInNlY3Rpb24gNiAyIDIgeW91IiwiNiAyIDIgeW91IG1heSIsImEgd2ViIHNpdGUgYW5kIGQiLCJ3ZWIgc2l0ZSBhbmQgZCBpZiIsInNpdGUgYW5kIGQgaWYgeW91Iiwic3VjaCBzb3VyY2UgY29kZSAyIDMiLCJzb3VyY2UgY29kZSAyIDMgeW91IiwiY29kZSAyIDMgeW91IGV4cHJlc3NseSIsInJlcHJvZHVjZSBkaXNwbGF5IHBlcmZvcm0gbW9kaWZ5IG9yIiwibWFjIG9zIHggc2VydmVyIHF1aWNrdGltZSIsIm9zIHggc2VydmVyIHF1aWNrdGltZSBxdWlja3RpbWUiLCJ4IHNlcnZlciBxdWlja3RpbWUgcXVpY2t0aW1lIHN0cmVhbWluZyIsInNlcnZlciBxdWlja3RpbWUgcXVpY2t0aW1lIHN0cmVhbWluZyBzZXJ2ZXIiLCJ0byBhbnkgY29udHJpYnV0b3Igbm8gYXBwbGUiLCJhbnkgY29udHJpYnV0b3Igbm8gYXBwbGUgbWFya3MiLCJjb250cmlidXRvciBubyBhcHBsZSBtYXJrcyBtYXkiLCJsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIG9yIGFtb25neW91IiwiYXNzb2NpYXRpb24gYmV0d2VlbiBvciBhbW9uZ3lvdSBhcHBsZSIsImJldHdlZW4gb3IgYW1vbmd5b3UgYXBwbGUgb3IiLCJvciBhbW9uZ3lvdSBhcHBsZSBvciBhbnkiLCJhbW9uZ3lvdSBhcHBsZSBvciBhbnkgY29udHJpYnV0b3IiLCJwb3J0aW9ucyBjb3B5cmlnaHQgYyAxOTk5IDIwMDEiLCJjb3B5cmlnaHQgYyAxOTk5IDIwMDEgYXBwbGUiLCJjIDE5OTkgMjAwMSBhcHBsZSBjb21wdXRlciIsIjE5OTkgMjAwMSBhcHBsZSBjb21wdXRlciBpbmMiLCIyMDAxIGFwcGxlIGNvbXB1dGVyIGluYyBhbGwiXX0seyJsaWNlbnNlVGV4dHMiOlsiQVBQTEUgUFVCTElDIFNPVVJDRSBMSUNFTlNFXG5cblZlcnNpb24gMi4wIC0gQXVndXN0IDYsIDIwMDMgUGxlYXNlIHJlYWQgdGhpcyBMaWNlbnNlIGNhcmVmdWxseSBiZWZvcmUgZG93bmxvYWRpbmcgdGhpcyBzb2Z0d2FyZS4gQnkgZG93bmxvYWRpbmcgb3IgdXNpbmcgdGhpcyBzb2Z0d2FyZSwgeW91IGFyZSBhZ3JlZWluZyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IG9yIGNhbm5vdCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBwbGVhc2UgZG8gbm90IGRvd25sb2FkIG9yIHVzZSB0aGUgc29mdHdhcmUuXG5cbkFwcGxlIE5vdGU6IEluIEphbnVhcnkgMjAwNywgQXBwbGUgY2hhbmdlZCBpdHMgY29ycG9yYXRlIG5hbWUgZnJvbSBcIkFwcGxlIENvbXB1dGVyLCBJbmMuXCIgdG8gXCJBcHBsZSBJbmMuXCIgVGhpcyBjaGFuZ2UgaGFzIGJlZW4gcmVmbGVjdGVkIGJlbG93IGFuZCBjb3B5cmlnaHQgeWVhcnMgdXBkYXRlZCwgYnV0IG5vIG90aGVyIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIEFQU0wgMi4wLlxuXG4gICAxLiBHZW5lcmFsOyBEZWZpbml0aW9ucy4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBBcHBsZSBJbmMuIChcIkFwcGxlXCIpIG1ha2VzIHB1YmxpY2x5IGF2YWlsYWJsZSBhbmQgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IEFwcGxlIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzIFwiT3JpZ2luYWwgQ29kZVwiIGFuZCBzdGF0aW5nIHRoYXQgaXQgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgdmVyc2lvbiAyLjAgKFwiTGljZW5zZVwiKS4gQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6XG5cbiAgICAgIDEuMSBcIkFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0c1wiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBBcHBsZSBpcyB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBBcHBsZSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UgYW5kL29yIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgd2l0aG91dCBpbmZyaW5nZW1lbnQ7IGFuZCAoYikgaW4gdGhlIGNhc2Ugd2hlcmUgWW91IGFyZSB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3UgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBpbiBZb3VyIE1vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS5cblxuICAgICAgMS4yIFwiQ29udHJpYnV0b3JcIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIDEuMyBcIkNvdmVyZWQgQ29kZVwiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLlxuXG4gICAgICAxLjQgXCJFeHRlcm5hbGx5IERlcGxveVwiIG1lYW5zOiAoYSkgdG8gc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0byBhbnlvbmUgb3RoZXIgdGhhbiBZb3U7IGFuZC9vciAoYikgdG8gdXNlIENvdmVyZWQgQ29kZSwgYWxvbmUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrLCBpbiBhbnkgd2F5IHRvIHByb3ZpZGUgYSBzZXJ2aWNlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRlbGl2ZXJ5IG9mIGNvbnRlbnQsIHRocm91Z2ggZWxlY3Ryb25pYyBjb21tdW5pY2F0aW9uIHdpdGggYSBjbGllbnQgb3RoZXIgdGhhbiBZb3UuXG5cbiAgICAgIDEuNSBcIkxhcmdlciBXb3JrXCIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS42IFwiTW9kaWZpY2F0aW9uc1wiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlIHRvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLiBXaGVuIGNvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIENvdmVyZWQgQ29kZTsgYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbSBzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLlxuXG4gICAgICAxLjcgXCJPcmlnaW5hbCBDb2RlXCIgbWVhbnMgKGEpIHRoZSBTb3VyY2UgQ29kZSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayBhcyBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zIG9yIHdvcmtzIG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHRoYXQgaGFzIGJlZW4gZXhwcmVzc2x5IGlkZW50aWZpZWQgYnkgQXBwbGUgYXMgc3VjaCBpbiB0aGUgaGVhZGVyIGZpbGUocykgb2Ygc3VjaCB3b3JrOyBhbmQgKGIpIHRoZSBvYmplY3QgY29kZSBjb21waWxlZCBmcm9tIHN1Y2ggU291cmNlIENvZGUgYW5kIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlXG5cbiAgICAgIDEuOCBcIlNvdXJjZSBDb2RlXCIgbWVhbnMgdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIChvYmplY3QgY29kZSkuXG5cbiAgICAgIDEuOSBcIllvdVwiIG9yIFwiWW91clwiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgb3IgXCJZb3VyXCIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCwgWW91LCB3aGVyZSBcImNvbnRyb2xcIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgIDIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zIFx1MDAyNiBSZXN0cmljdGlvbnMuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgQXBwbGUgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBZb3UgYWNjZXB0IHRoaXMgTGljZW5zZSBhbmQgZG93bmxvYWQgdGhlIE9yaWdpbmFsIENvZGUsIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YgQXBwbGUncyBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIGNvcHlyaWdodHMgY292ZXJpbmcgdGhlIE9yaWdpbmFsIENvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIDIuMSBVbm1vZGlmaWVkIENvZGUuIFlvdSBtYXkgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIGludGVybmFsbHkgZGlzdHJpYnV0ZSB3aXRoaW4gWW91ciBvcmdhbml6YXRpb24sIGFuZCBFeHRlcm5hbGx5IERlcGxveSB2ZXJiYXRpbSwgdW5tb2RpZmllZCBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGZvciBjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2U6XG5cbiAgICAgICAgIChhKSBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSBpbiBhbGwgY29waWVzIG9mIE9yaWdpbmFsIENvZGUgdGhlIGNvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgQXBwbGUgYXMgdGhleSBhcHBlYXIgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGFuZCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBpbiB0aGUgT3JpZ2luYWwgQ29kZSB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZTsgYW5kXG5cbiAgICAgICAgIChiKSBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIFNvdXJjZSBDb2RlIG9mIENvdmVyZWQgQ29kZSBhbmQgZG9jdW1lbnRhdGlvbiBZb3UgZGlzdHJpYnV0ZSBvciBFeHRlcm5hbGx5IERlcGxveSwgYW5kIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gc3VjaCBTb3VyY2UgQ29kZSB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlciwgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDYuXG5cbiAgICAgIDIuMiBNb2RpZmllZCBDb2RlLiBZb3UgbWF5IG1vZGlmeSBDb3ZlcmVkIENvZGUgYW5kIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBpbnRlcm5hbGx5IGRpc3RyaWJ1dGUgd2l0aGluIFlvdXIgb3JnYW5pemF0aW9uLCBhbmQgRXh0ZXJuYWxseSBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIGFuZCBDb3ZlcmVkIENvZGUsIGZvciBjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2UgWW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczpcblxuICAgICAgICAgKGEpIFlvdSBtdXN0IHNhdGlzZnkgYWxsIHRoZSBjb25kaXRpb25zIG9mIFNlY3Rpb24gMi4xIHdpdGggcmVzcGVjdCB0byB0aGUgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZTtcblxuICAgICAgICAgKGIpIFlvdSBtdXN0IGR1cGxpY2F0ZSwgdG8gdGhlIGV4dGVudCBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIE1vZGlmaWNhdGlvbnMsIGFuZCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgYW5kXG5cbiAgICAgICAgIChjKSBJZiBZb3UgRXh0ZXJuYWxseSBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zLCBZb3UgbXVzdCBtYWtlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIEV4dGVybmFsbHkgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBlaXRoZXIgYXZhaWxhYmxlIHRvIHRob3NlIHRvIHdob20gWW91IGhhdmUgRXh0ZXJuYWxseSBEZXBsb3llZCBZb3VyIE1vZGlmaWNhdGlvbnMsIG9yIHB1YmxpY2x5IGF2YWlsYWJsZS4gU291cmNlIENvZGUgb2YgWW91ciBFeHRlcm5hbGx5IERlcGxveWVkIE1vZGlmaWNhdGlvbnMgbXVzdCBiZSByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIGdyYW50cyBzZXQgZm9ydGggaW4gU2VjdGlvbiAzIGJlbG93LCBmb3IgYXMgbG9uZyBhcyB5b3UgRXh0ZXJuYWxseSBEZXBsb3kgdGhlIENvdmVyZWQgQ29kZSBvciB0d2VsdmUgKDEyKSBtb250aHMgZnJvbSB0aGUgZGF0ZSBvZiBpbml0aWFsIEV4dGVybmFsIERlcGxveW1lbnQsIHdoaWNoZXZlciBpcyBsb25nZXIuIFlvdSBzaG91bGQgcHJlZmVyYWJseSBkaXN0cmlidXRlIHRoZSBTb3VyY2UgQ29kZSBvZiBZb3VyIEV4dGVybmFsbHkgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBlbGVjdHJvbmljYWxseSAoZS5nLiBkb3dubG9hZCBmcm9tIGEgd2ViIHNpdGUpLlxuXG4gICAgICAyLjMgRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuIEluIGFkZGl0aW9uLCBpZiBZb3UgRXh0ZXJuYWxseSBEZXBsb3kgQ292ZXJlZCBDb2RlIChPcmlnaW5hbCBDb2RlIGFuZC9vciBNb2RpZmljYXRpb25zKSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZS5cblxuICAgICAgMi40IFRoaXJkIFBhcnR5IFJpZ2h0cy4gWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCBhbHRob3VnaCBBcHBsZSBhbmQgZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIHRoZWlyIHJlc3BlY3RpdmUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBBcHBsZSBhbmQgZWFjaCBDb250cmlidXRvciBkaXNjbGFpbSBhbnkgbGlhYmlsaXR5IHRvIFlvdSBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIFlvdSBoZXJlYnkgYXNzdW1lIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBZb3UgdG8gZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBDb2RlLCBpdCBpcyBZb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIENvdmVyZWQgQ29kZS5cblxuICAgMy4gWW91ciBHcmFudHMuIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IGhlcmVieSBncmFudCB0byBhbnkgcGVyc29uIG9yIGVudGl0eSByZWNlaXZpbmcgb3IgZGlzdHJpYnV0aW5nIENvdmVyZWQgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCwgaXJyZXZvY2FibGUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50KSBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBhbmQgRXh0ZXJuYWxseSBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgQXBwbGUncyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMiBhYm92ZS5cblxuICAgNC4gTGFyZ2VyIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBlYWNoIHN1Y2ggaW5zdGFuY2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuXG5cbiAgIDUuIExpbWl0YXRpb25zIG9uIFBhdGVudCBMaWNlbnNlLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9uIDIsIG5vIG90aGVyIHBhdGVudCByaWdodHMsIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgQXBwbGUgaGVyZWluLiBNb2RpZmljYXRpb25zIGFuZC9vciBMYXJnZXIgV29ya3MgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBBcHBsZSB3aGljaCBBcHBsZSBtYXkgZ3JhbnQgaW4gaXRzIHNvbGUgZGlzY3JldGlvbi5cblxuICAgNi4gQWRkaXRpb25hbCBUZXJtcy4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlaW4gKFwiQWRkaXRpb25hbCBUZXJtc1wiKSB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgYXMgWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG9idGFpbiB0aGUgcmVjaXBpZW50J3MgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIEFwcGxlIGFuZCBldmVyeSBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBBcHBsZSBvciBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbiBvZiBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zLlxuXG4gICA3LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gQXBwbGUgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gT25jZSBPcmlnaW5hbCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcHVibGlzaGVkIGJ5IEFwcGxlLiBObyBvbmUgb3RoZXIgdGhhbiBBcHBsZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgIDguIE5PIFdBUlJBTlRZIE9SIFNVUFBPUlQuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IgaW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUsIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suIFRIRSBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBXSVRIT1VUIFdBUlJBTlRZLCBVUEdSQURFUyBPUiBTVVBQT1JUIE9GIEFOWSBLSU5EIEFORCBBUFBMRSBBTkQgQVBQTEUnUyBMSUNFTlNPUihTKSAoQ09MTEVDVElWRUxZIFJFRkVSUkVEIFRPIEFTIFwiQVBQTEVcIiBGT1IgVEhFIFBVUlBPU0VTIE9GIFNFQ1RJT05TIDggQU5EIDkpIEFORCBBTEwgQ09OVFJJQlVUT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBPRiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT0YgQUNDVVJBQ1ksIE9GIFFVSUVUIEVOSk9ZTUVOVCwgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIEFQUExFIEFORCBFQUNIIENPTlRSSUJVVE9SIERPRVMgTk9UIFdBUlJBTlQgQUdBSU5TVCBJTlRFUkZFUkVOQ0UgV0lUSCBZT1VSIEVOSk9ZTUVOVCBPRiBUSEUgQ09WRVJFRCBDT0RFLCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBDT1JSRUNURUQuIE5PIE9SQUwgT1IgV1JJVFRFTiBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgQVBQTEUsIEFOIEFQUExFIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkUgT1IgQU5ZIENPTlRSSUJVVE9SIFNIQUxMIENSRUFURSBBIFdBUlJBTlRZLiBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGlzIG5vdCBpbnRlbmRlZCBmb3IgdXNlIGluIHRoZSBvcGVyYXRpb24gb2YgbnVjbGVhciBmYWNpbGl0aWVzLCBhaXJjcmFmdCBuYXZpZ2F0aW9uLCBjb21tdW5pY2F0aW9uIHN5c3RlbXMsIG9yIGFpciB0cmFmZmljIGNvbnRyb2wgbWFjaGluZXMgaW4gd2hpY2ggY2FzZSB0aGUgZmFpbHVyZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGNvdWxkIGxlYWQgdG8gZGVhdGgsIHBlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlIHBoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLlxuXG4gICA5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gVE8gVEhFIEVYVEVOVCBOT1QgUFJPSElCSVRFRCBCWSBMQVcsIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIEFOWSBDT05UUklCVVRPUiBCRSBMSUFCTEUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhJUyBMSUNFTlNFIE9SIFlPVVIgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFBPUlRJT04gVEhFUkVPRiwgV0hFVEhFUiBVTkRFUiBBIFRIRU9SWSBPRiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgUFJPRFVDVFMgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRiBBUFBMRSBPUiBTVUNIIENPTlRSSUJVVE9SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUyBBTkQgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GIEVTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBSRU1FRFkuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIExJTUlUQVRJT04gT0YgTElBQklMSVRZIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuIEluIG5vIGV2ZW50IHNoYWxsIEFwcGxlJ3MgdG90YWwgbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsIGRhbWFnZXMgKG90aGVyIHRoYW4gYXMgbWF5IGJlIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3KSB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZWVkIHRoZSBhbW91bnQgb2YgZmlmdHkgZG9sbGFycyAoJDUwLjAwKS5cblxuICAgMTAuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBcIkFwcGxlXCIsIFwiTWFjXCIsIFwiTWFjIE9TXCIsIFwiUXVpY2tUaW1lXCIsIFwiUXVpY2tUaW1lIFN0cmVhbWluZyBTZXJ2ZXJcIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgbG9nb3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nIHRvIEFwcGxlIChjb2xsZWN0aXZlbHkgXCJBcHBsZSBNYXJrc1wiKSBvciB0byBhbnkgdHJhZGVtYXJrLCBzZXJ2aWNlIG1hcmssIGxvZ28gb3IgdHJhZGUgbmFtZSBiZWxvbmdpbmcgdG8gYW55IENvbnRyaWJ1dG9yLiBZb3UgYWdyZWUgbm90IHRvIHVzZSBhbnkgQXBwbGUgTWFya3MgaW4gb3IgYXMgcGFydCBvZiB0aGUgbmFtZSBvZiBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3IgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvdGhlciB0aGFuIGFzIGV4cHJlc3NseSBwZXJtaXR0ZWQgYnkgYW5kIGluIHN0cmljdCBjb21wbGlhbmNlIGF0IGFsbCB0aW1lcyB3aXRoIEFwcGxlJ3MgdGhpcmQgcGFydHkgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMgd2hpY2ggYXJlIHBvc3RlZCBhdCBodHRwOi8vd3d3LmFwcGxlLmNvbS9sZWdhbC9ndWlkZWxpbmVzZm9yM3JkcGFydGllcy5odG1sLlxuXG4gICAxMS4gT3duZXJzaGlwLiBTdWJqZWN0IHRvIHRoZSBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIENvbnRyaWJ1dG9yLiBBcHBsZSByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIEFwcGxlIChcIkFwcGxlIE1vZGlmaWNhdGlvbnNcIiksIGFuZCBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gQXBwbGUgbWF5LCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuXG5cbiAgIDEyLiBUZXJtaW5hdGlvbi5cblxuICAgICAgMTIuMSBUZXJtaW5hdGlvbi4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlOlxuXG4gICAgICAgICAoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoO1xuXG4gICAgICAgICAoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEzLjUoYik7IG9yXG5cbiAgICAgICAgIChjKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBBcHBsZTsgcHJvdmlkZWQgdGhhdCBBcHBsZSBkaWQgbm90IGZpcnN0IGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IFlvdSBpbiB0aGF0IGluc3RhbmNlLlxuXG4gICAgICAxMi4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZS4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggaGF2ZSBiZWVuIHByb3Blcmx5IGdyYW50ZWQgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIHNob3VsZCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gU2VjdGlvbnMgMywgNSwgOCwgOSwgMTAsIDExLCAxMi4yIGFuZCAxMy4gTm8gcGFydHkgd2lsbCBiZSBsaWFibGUgdG8gYW55IG90aGVyIGZvciBjb21wZW5zYXRpb24sIGluZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZyB0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YgYW55IHBhcnR5LlxuXG4gICAxMy4gTWlzY2VsbGFuZW91cy5cblxuICAgICAgMTMuMSBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIENvdmVyZWQgQ29kZSBpcyBhIFwiY29tbWVyY2lhbCBpdGVtXCIgYXMgZGVmaW5lZCBpbiBGQVIgMi4xMDEuIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIHJpZ2h0cyBpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkgcHJvdmlkZWQgdG8gdGhlIHB1YmxpYyBhcyBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4gVGhpcyBjdXN0b21hcnkgY29tbWVyY2lhbCBsaWNlbnNlIGluIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpbiBhY2NvcmRhbmNlIHdpdGggRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyIFNvZnR3YXJlKSBhbmQsIGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgcHVyY2hhc2VzLCBERkFSIDI1Mi4yMjctNzAxNSAoVGVjaG5pY2FsIERhdGEgLS0gQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMgKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24pLiBBY2NvcmRpbmdseSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLlxuXG4gICAgICAxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBvciBhbW9uZyBZb3UsIEFwcGxlIG9yIGFueSBDb250cmlidXRvciwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQgdG8gdGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGFwcGVhcmFuY2Ugb3Igb3RoZXJ3aXNlLlxuXG4gICAgICAxMy4zIEluZGVwZW5kZW50IERldmVsb3BtZW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpciBBcHBsZSdzIHJpZ2h0IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIGhhdmUgb3RoZXJzIGRldmVsb3AgZm9yIGl0LCBtYXJrZXQgYW5kL29yIGRpc3RyaWJ1dGUgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0gdGhlIHNhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yIG90aGVyd2lzZSBjb21wZXRlIHdpdGgsIE1vZGlmaWNhdGlvbnMsIExhcmdlciBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkgZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0IG9yIGRpc3RyaWJ1dGUuXG5cbiAgICAgIDEzLjQgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uIEZhaWx1cmUgYnkgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudCBvZiB0aGF0IG9yIGFueSBvdGhlciBwcm92aXNpb24uIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHdpbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS5cblxuICAgICAgMTMuNSBTZXZlcmFiaWxpdHkuIChhKSBJZiBmb3IgYW55IHJlYXNvbiBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIHBvcnRpb24gdGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZSBlY29ub21pYyBiZW5lZml0cyBhbmQgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIChiKSBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgaWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQvb3Igc3BlY2lmaWNhbGx5IGNvbXBseWluZyB3aXRoIFNlY3Rpb25zIDIgYW5kL29yIDMgb3IgcHJldmVudHMgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGVpdGhlciBvZiB0aG9zZSBTZWN0aW9ucywgdGhpcyBMaWNlbnNlIHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlIGFuZCBZb3UgbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBpdCB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC5cblxuICAgICAgMTMuNiBEaXNwdXRlIFJlc29sdXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbiBiZXR3ZWVuIFlvdSBhbmQgQXBwbGUgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIHRha2UgcGxhY2UgaW4gdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIGFuZCBZb3UgYW5kIEFwcGxlIGhlcmVieSBjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyB3aXRoaW4gdGhhdCBEaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBMaWNlbnNlLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC5cblxuICAgICAgMTMuNyBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjZXB0IHRoYXQgYm9keSBvZiBDYWxpZm9ybmlhIGxhdyBjb25jZXJuaW5nIGNvbmZsaWN0cyBvZiBsYXcuXG5cbiAgICAgIFdoZXJlIFlvdSBhcmUgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZSBmb2xsb3dpbmcgY2xhdXNlIGFwcGxpZXM6IFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZCB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gTGVzIHBhcnRpZXMgb250IGV4aWfDqSBxdWUgbGUgcHLDqXNlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMgY29ubmV4ZXMgc29pZW50IHLDqWRpZ8OpcyBlbiBhbmdsYWlzLiBFWEhJQklUIEEuXG5cblwiUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuXG5UaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZiBPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDIuMCAodGhlICdMaWNlbnNlJykuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5vcGVuc291cmNlLmFwcGxlLmNvbS9hcHNsLyBhbmQgcmVhZCBpdCBiZWZvcmUgdXNpbmcgdGhpcyBmaWxlLlxuXG5UaGUgT3JpZ2luYWwgQ29kZSBhbmQgYWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGFyZSBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgQVBQTEUgSEVSRUJZIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBRVUlFVCBFTkpPWU1FTlQgT1IgTk9OLUlORlJJTkdFTUVOVC4gUGxlYXNlIHNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlwiIl0sImxpY2Vuc2VJZHMiOlsiQVBTTC0yLjAiXSwia2V5d29yZHMiOlsiMiAwIGF1Z3VzdCIsIjAgYXVndXN0IDYiLCJhdWd1c3QgNiAyMDAzIiwiNiAyMDAzIHBsZWFzZSIsIjIwMDMgcGxlYXNlIHJlYWQiLCJ0aGUgc29mdHdhcmUgYXBwbGUiLCJzb2Z0d2FyZSBhcHBsZSBub3RlIiwiYXBwbGUgbm90ZSBpbiIsIm5vdGUgaW4gamFudWFyeSIsImluIGphbnVhcnkgMjAwNyIsImphbnVhcnkgMjAwNyBhcHBsZSIsIjIwMDcgYXBwbGUgY2hhbmdlZCIsImFwcGxlIGNoYW5nZWQgaXRzIiwiY2hhbmdlZCBpdHMgY29ycG9yYXRlIiwiaXRzIGNvcnBvcmF0ZSBuYW1lIiwiY29ycG9yYXRlIG5hbWUgZnJvbSIsIm5hbWUgZnJvbSBhcHBsZSIsImZyb20gYXBwbGUgY29tcHV0ZXIiLCJjb21wdXRlciBpbmMgdG8iLCJpbmMgdG8gYXBwbGUiLCJ0byBhcHBsZSBpbmMiLCJhcHBsZSBpbmMgdGhpcyIsImluYyB0aGlzIGNoYW5nZSIsInRoaXMgY2hhbmdlIGhhcyIsImNoYW5nZSBoYXMgYmVlbiIsImhhcyBiZWVuIHJlZmxlY3RlZCIsImJlZW4gcmVmbGVjdGVkIGJlbG93IiwicmVmbGVjdGVkIGJlbG93IGFuZCIsImJlbG93IGFuZCBjb3B5cmlnaHQiLCJhbmQgY29weXJpZ2h0IHllYXJzIiwiY29weXJpZ2h0IHllYXJzIHVwZGF0ZWQiLCJ5ZWFycyB1cGRhdGVkIGJ1dCIsInVwZGF0ZWQgYnV0IG5vIiwiYnV0IG5vIG90aGVyIiwibm8gb3RoZXIgY2hhbmdlcyIsIm90aGVyIGNoYW5nZXMgaGF2ZSIsImJlZW4gbWFkZSB0byIsInRvIHRoZSBhcHNsIiwidGhlIGFwc2wgMiIsImFwc2wgMiAwIiwid2hpY2ggYXBwbGUgaW5jIiwiMCBsaWNlbnNlIGFzIiwiMSA0IGV4dGVybmFsbHkiLCI0IGV4dGVybmFsbHkgZGVwbG95IiwiZGVwbG95IG1lYW5zIGEiLCJtZWFucyBhIHRvIiwiYSB0byBzdWJsaWNlbnNlIiwidG8gc3VibGljZW5zZSBkaXN0cmlidXRlIiwib3RoZXJ3aXNlIG1ha2UgY292ZXJlZCIsIm1ha2UgY292ZXJlZCBjb2RlIiwiY29kZSBhdmFpbGFibGUgZGlyZWN0bHkiLCJhdmFpbGFibGUgZGlyZWN0bHkgb3IiLCJpbmRpcmVjdGx5IHRvIGFueW9uZSIsInRoYW4geW91IGFuZCIsImIgdG8gdXNlIiwidG8gdXNlIGNvdmVyZWQiLCJ1c2UgY292ZXJlZCBjb2RlIiwiY292ZXJlZCBjb2RlIGFsb25lIiwiY29kZSBhbG9uZSBvciIsImxhcmdlciB3b3JrIGluIiwid2F5IHRvIHByb3ZpZGUiLCJwcm92aWRlIGEgc2VydmljZSIsInNlcnZpY2UgaW5jbHVkaW5nIGJ1dCIsImxpbWl0ZWQgdG8gZGVsaXZlcnkiLCJ0byBkZWxpdmVyeSBvZiIsImRlbGl2ZXJ5IG9mIGNvbnRlbnQiLCJvZiBjb250ZW50IHRocm91Z2giLCJjb250ZW50IHRocm91Z2ggZWxlY3Ryb25pYyIsInRocm91Z2ggZWxlY3Ryb25pYyBjb21tdW5pY2F0aW9uIiwiZWxlY3Ryb25pYyBjb21tdW5pY2F0aW9uIHdpdGgiLCJjb21tdW5pY2F0aW9uIHdpdGggYSIsIndpdGggYSBjbGllbnQiLCJhIGNsaWVudCBvdGhlciIsImNsaWVudCBvdGhlciB0aGFuIiwieW91IDEgNSIsIjIgMSB1bm1vZGlmaWVkIiwiMSB1bm1vZGlmaWVkIGNvZGUiLCJ1bm1vZGlmaWVkIGNvZGUgeW91IiwiZXh0ZXJuYWxseSBkZXBsb3kgdmVyYmF0aW0iLCJkZXBsb3kgdmVyYmF0aW0gdW5tb2RpZmllZCIsInZlcmJhdGltIHVubW9kaWZpZWQgY29waWVzIiwiZGlzdHJpYnV0ZSBvciBleHRlcm5hbGx5IiwiZXh0ZXJuYWxseSBkZXBsb3kgYW5kIiwiZGVwbG95IGFuZCB5b3UiLCIyIDIgbW9kaWZpZWQiLCIyIG1vZGlmaWVkIGNvZGUiLCJtb2RpZmllZCBjb2RlIHlvdSIsIm1vZGlmeSBjb3ZlcmVkIGNvZGUiLCJhbmQgdXNlIHJlcHJvZHVjZSIsImluc3RhbmNlIHlvdSBhbHNvIiwiY2hhbmdlIGFuZCBjIiwiZGVwbG95ZWQgbW9kaWZpY2F0aW9ucyBlaXRoZXIiLCJtb2RpZmljYXRpb25zIGVpdGhlciBhdmFpbGFibGUiLCJlaXRoZXIgYXZhaWxhYmxlIHRvIiwiYXZhaWxhYmxlIHRvIHRob3NlIiwidG8gdGhvc2UgdG8iLCJ3aG9tIHlvdSBoYXZlIiwieW91IGhhdmUgZXh0ZXJuYWxseSIsImhhdmUgZXh0ZXJuYWxseSBkZXBsb3llZCIsImV4dGVybmFsbHkgZGVwbG95ZWQgeW91ciIsImRlcGxveWVkIHlvdXIgbW9kaWZpY2F0aW9ucyIsIm1vZGlmaWNhdGlvbnMgb3IgcHVibGljbHkiLCJvciBwdWJsaWNseSBhdmFpbGFibGUiLCJwdWJsaWNseSBhdmFpbGFibGUgc291cmNlIiwiZGVwbG95ZWQgbW9kaWZpY2F0aW9ucyBtdXN0IiwibW9kaWZpY2F0aW9ucyBtdXN0IGJlIiwibXVzdCBiZSByZWxlYXNlZCIsInRoZSB0ZXJtcyBzZXQiLCJ0ZXJtcyBzZXQgZm9ydGgiLCJhcyB5b3UgZXh0ZXJuYWxseSIsImV4dGVybmFsbHkgZGVwbG95IHRoZSIsIm9mIGluaXRpYWwgZXh0ZXJuYWwiLCJpbml0aWFsIGV4dGVybmFsIGRlcGxveW1lbnQiLCJleHRlcm5hbCBkZXBsb3ltZW50IHdoaWNoZXZlciIsIndlYiBzaXRlIDIiLCJzaXRlIDIgMyIsIjIgMyBkaXN0cmlidXRpb24iLCJleGVjdXRhYmxlIHZlcnNpb25zIGluIiwidmVyc2lvbnMgaW4gYWRkaXRpb24iLCJleHRlcm5hbGx5IGRlcGxveSBjb3ZlcmVkIiwiY292ZXJlZCBjb2RlIG9yaWdpbmFsIiwiY29kZSBvcmlnaW5hbCBjb2RlIiwibW9kaWZpY2F0aW9ucyBpbiBvYmplY3QiLCIyIDQgdGhpcmQiLCI0IHRoaXJkIHBhcnR5IiwicGFydHkgcmlnaHRzIHlvdSIsInJpZ2h0cyB5b3UgZXhwcmVzc2x5IiwiZ3JhbnQgdG8gYW55Iiwib3IgZW50aXR5IHJlY2VpdmluZyIsImVudGl0eSByZWNlaXZpbmcgb3IiLCJyZWNlaXZpbmcgb3IgZGlzdHJpYnV0aW5nIiwib3IgZGlzdHJpYnV0aW5nIGNvdmVyZWQiLCJkaXN0cmlidXRpbmcgY292ZXJlZCBjb2RlIiwiZnJlZSBwZXJwZXR1YWwgaXJyZXZvY2FibGUiLCJwZXJwZXR1YWwgaXJyZXZvY2FibGUgbGljZW5zZSIsInN1YmxpY2Vuc2UgZGlzdHJpYnV0ZSBhbmQiLCJkaXN0cmlidXRlIGFuZCBleHRlcm5hbGx5IiwiMiBhYm92ZSA0IiwiYWJvdmUgNCBsYXJnZXIiLCJuYW1lcyBhcHBsZSBtYWMiLCJhcHBsZSBtYWMgbWFjIiwibWFjIG1hYyBvcyIsIm1hYyBvcyBxdWlja3RpbWUiLCJvcyBxdWlja3RpbWUgcXVpY2t0aW1lIiwidXNlIGFueSBhcHBsZSIsImFueSBhcHBsZSBtYXJrcyIsImFwcGxlIG1hcmtzIGluIiwiY29kZSBvciB0byIsInRoYW4gYXMgZXhwcmVzc2x5IiwiYXMgZXhwcmVzc2x5IHBlcm1pdHRlZCIsImV4cHJlc3NseSBwZXJtaXR0ZWQgYnkiLCJhZ2FpbnN0IGFwcGxlIHByb3ZpZGVkIiwiYXBwbGUgcHJvdmlkZWQgdGhhdCIsInByb3ZpZGVkIHRoYXQgYXBwbGUiLCJ0aGF0IGFwcGxlIGRpZCIsImFwcGxlIGRpZCBub3QiLCJkaWQgbm90IGZpcnN0Iiwibm90IGZpcnN0IGNvbW1lbmNlIiwiZmlyc3QgY29tbWVuY2UgYW4iLCJpbmZyaW5nZW1lbnQgYWdhaW5zdCB5b3UiLCJhZ2FpbnN0IHlvdSBpbiIsInlvdSBpbiB0aGF0IiwiaW4gdGhhdCBpbnN0YW5jZSIsInRoYXQgaW5zdGFuY2UgMTIiLCJpbnN0YW5jZSAxMiAyIiwiY292ZXJlZCBjb2RlIGFsbCIsImNvZGUgYWxsIHN1YmxpY2Vuc2VzIiwiYW1vbmcgeW91IGFwcGxlIiwieW91IGFwcGxlIG9yIiwiYyAxOTk5IDIwMDciLCIxOTk5IDIwMDcgYXBwbGUiLCJodHRwIHd3dyBvcGVuc291cmNlIiwid3d3IG9wZW5zb3VyY2UgYXBwbGUiLCJvcGVuc291cmNlIGFwcGxlIGNvbSIsImFwcGxlIGNvbSBhcHNsIiwiY29tIGFwc2wgYW5kIiwiYXBzbCBhbmQgcmVhZCIsInZlcnNpb24gMiAwIGF1Z3VzdCIsIjIgMCBhdWd1c3QgNiIsIjAgYXVndXN0IDYgMjAwMyIsImF1Z3VzdCA2IDIwMDMgcGxlYXNlIiwiNiAyMDAzIHBsZWFzZSByZWFkIiwiMjAwMyBwbGVhc2UgcmVhZCB0aGlzIiwic29mdHdhcmUgYnkgZG93bmxvYWRpbmcgb3IiLCJkb3dubG9hZGluZyBvciB1c2luZyB0aGlzIiwib3IgdXNpbmcgdGhpcyBzb2Z0d2FyZSIsInVzZSB0aGUgc29mdHdhcmUgYXBwbGUiLCJ0aGUgc29mdHdhcmUgYXBwbGUgbm90ZSIsInNvZnR3YXJlIGFwcGxlIG5vdGUgaW4iLCJhcHBsZSBub3RlIGluIGphbnVhcnkiLCJub3RlIGluIGphbnVhcnkgMjAwNyIsImluIGphbnVhcnkgMjAwNyBhcHBsZSIsImphbnVhcnkgMjAwNyBhcHBsZSBjaGFuZ2VkIiwiMjAwNyBhcHBsZSBjaGFuZ2VkIGl0cyIsImFwcGxlIGNoYW5nZWQgaXRzIGNvcnBvcmF0ZSIsImNoYW5nZWQgaXRzIGNvcnBvcmF0ZSBuYW1lIiwiaXRzIGNvcnBvcmF0ZSBuYW1lIGZyb20iLCJjb3Jwb3JhdGUgbmFtZSBmcm9tIGFwcGxlIiwibmFtZSBmcm9tIGFwcGxlIGNvbXB1dGVyIiwiZnJvbSBhcHBsZSBjb21wdXRlciBpbmMiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhpcyBpcyBBUFJFQU1CTC5URVgsIHZlcnNpb24gMS4xMGUsIHdyaXR0ZW4gYnkgSGFucy1IZXJtYW5uIEJvZGVcblxuKEhIQk9ERUBET1NVTkkxLkJJVE5FVCksIGZvciB0aGUgQmliVGVYIGBhZGFwdGFibGUnIGZhbWlseSwgdmVyc2lvbiAxLjEwLlxuXG5TZWUgdGhlIGZpbGUgQVBSRUFNQkwuRE9DIGZvciBhIGRldGFpbGVkIGRvY3VtZW50YXRpb24uXG5cblRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgZXhwcmVzcyBvciBpbXBsaWVkLlxuXG5Db3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgSGFucy1IZXJtYW5uIEJvZGVcblxuUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgZG9jdW1lbnQgcHJvdmlkZWQgdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcmUgcHJlc2VydmVkIG9uIGFsbCBjb3BpZXMuXG5cblBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgZG9jdW1lbnQgdW5kZXIgdGhlIGNvbmRpdGlvbnMgZm9yIHZlcmJhdGltIGNvcHlpbmcsIHByb3ZpZGVkIHRoYXQgdGhlIGVudGlyZSByZXN1bHRpbmcgZGVyaXZlZCB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIHBlcm1pc3Npb24gbm90aWNlIGlkZW50aWNhbCB0byB0aGlzIG9uZS4iXSwibGljZW5zZUlkcyI6WyJBYnN0eWxlcyJdLCJrZXl3b3JkcyI6WyJ0aGlzIGlzIGFwcmVhbWJsIiwiaXMgYXByZWFtYmwgdGV4IiwiYXByZWFtYmwgdGV4IHZlcnNpb24iLCJ0ZXggdmVyc2lvbiAxIiwidmVyc2lvbiAxIDEwZSIsIjEgMTBlIHdyaXR0ZW4iLCIxMGUgd3JpdHRlbiBieSIsIndyaXR0ZW4gYnkgaGFucyIsImJ5IGhhbnMgaGVybWFubiIsImhlcm1hbm4gYm9kZSBoaGJvZGUiLCJib2RlIGhoYm9kZSBkb3N1bmkxIiwiaGhib2RlIGRvc3VuaTEgYml0bmV0IiwiZG9zdW5pMSBiaXRuZXQgZm9yIiwiYml0bmV0IGZvciB0aGUiLCJmb3IgdGhlIGJpYnRleCIsInRoZSBiaWJ0ZXggYWRhcHRhYmxlIiwiYmlidGV4IGFkYXB0YWJsZSBmYW1pbHkiLCJhZGFwdGFibGUgZmFtaWx5IHZlcnNpb24iLCJmYW1pbHkgdmVyc2lvbiAxIiwidmVyc2lvbiAxIDEwIiwiMSAxMCBzZWUiLCIxMCBzZWUgdGhlIiwidGhlIGZpbGUgYXByZWFtYmwiLCJmaWxlIGFwcmVhbWJsIGRvYyIsImFwcmVhbWJsIGRvYyBmb3IiLCJkb2MgZm9yIGEiLCJmb3IgYSBkZXRhaWxlZCIsImEgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiIsImRldGFpbGVkIGRvY3VtZW50YXRpb24gdGhpcyIsImRvY3VtZW50YXRpb24gdGhpcyBwcm9ncmFtIiwiaXMgZGlzdHJpYnV0ZWQgd2l0aG91dCIsImRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55Iiwib3IgaW1wbGllZCBjb3B5cmlnaHQiLCJpbXBsaWVkIGNvcHlyaWdodCBjIiwiYyAxOTkxIDE5OTIiLCIxOTkxIDE5OTIgaGFucyIsIjE5OTIgaGFucyBoZXJtYW5uIiwiaGVybWFubiBib2RlIHBlcm1pc3Npb24iLCJib2RlIHBlcm1pc3Npb24gaXMiLCJ0aGlzIGRvY3VtZW50IHByb3ZpZGVkIiwidGhpcyBpcyBhcHJlYW1ibCB0ZXgiLCJpcyBhcHJlYW1ibCB0ZXggdmVyc2lvbiIsImFwcmVhbWJsIHRleCB2ZXJzaW9uIDEiLCJ0ZXggdmVyc2lvbiAxIDEwZSIsInZlcnNpb24gMSAxMGUgd3JpdHRlbiIsIjEgMTBlIHdyaXR0ZW4gYnkiLCIxMGUgd3JpdHRlbiBieSBoYW5zIiwid3JpdHRlbiBieSBoYW5zIGhlcm1hbm4iLCJieSBoYW5zIGhlcm1hbm4gYm9kZSIsImhhbnMgaGVybWFubiBib2RlIGhoYm9kZSIsImhlcm1hbm4gYm9kZSBoaGJvZGUgZG9zdW5pMSIsImJvZGUgaGhib2RlIGRvc3VuaTEgYml0bmV0IiwiaGhib2RlIGRvc3VuaTEgYml0bmV0IGZvciIsImRvc3VuaTEgYml0bmV0IGZvciB0aGUiLCJiaXRuZXQgZm9yIHRoZSBiaWJ0ZXgiLCJmb3IgdGhlIGJpYnRleCBhZGFwdGFibGUiLCJ0aGUgYmlidGV4IGFkYXB0YWJsZSBmYW1pbHkiLCJiaWJ0ZXggYWRhcHRhYmxlIGZhbWlseSB2ZXJzaW9uIiwiYWRhcHRhYmxlIGZhbWlseSB2ZXJzaW9uIDEiLCJmYW1pbHkgdmVyc2lvbiAxIDEwIiwidmVyc2lvbiAxIDEwIHNlZSIsIjEgMTAgc2VlIHRoZSIsIjEwIHNlZSB0aGUgZmlsZSIsInNlZSB0aGUgZmlsZSBhcHJlYW1ibCIsInRoZSBmaWxlIGFwcmVhbWJsIGRvYyIsImZpbGUgYXByZWFtYmwgZG9jIGZvciIsImFwcmVhbWJsIGRvYyBmb3IgYSIsImRvYyBmb3IgYSBkZXRhaWxlZCIsImZvciBhIGRldGFpbGVkIGRvY3VtZW50YXRpb24iLCJhIGRldGFpbGVkIGRvY3VtZW50YXRpb24gdGhpcyIsImRldGFpbGVkIGRvY3VtZW50YXRpb24gdGhpcyBwcm9ncmFtIiwiZG9jdW1lbnRhdGlvbiB0aGlzIHByb2dyYW0gaXMiLCJwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQiLCJpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSIsImRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5IiwiZXhwcmVzcyBvciBpbXBsaWVkIGNvcHlyaWdodCIsIm9yIGltcGxpZWQgY29weXJpZ2h0IGMiLCJpbXBsaWVkIGNvcHlyaWdodCBjIDE5OTEiLCJjb3B5cmlnaHQgYyAxOTkxIDE5OTIiLCJjIDE5OTEgMTk5MiBoYW5zIiwiMTk5MSAxOTkyIGhhbnMgaGVybWFubiIsIjE5OTIgaGFucyBoZXJtYW5uIGJvZGUiLCJoYW5zIGhlcm1hbm4gYm9kZSBwZXJtaXNzaW9uIiwiaGVybWFubiBib2RlIHBlcm1pc3Npb24gaXMiLCJib2RlIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCIsIm9mIHRoaXMgZG9jdW1lbnQgcHJvdmlkZWQiLCJ0aGlzIGRvY3VtZW50IHByb3ZpZGVkIHRoYXQiLCJ2ZXJzaW9ucyBvZiB0aGlzIGRvY3VtZW50Iiwib2YgdGhpcyBkb2N1bWVudCB1bmRlciIsInRoaXMgaXMgYXByZWFtYmwgdGV4IHZlcnNpb24iLCJpcyBhcHJlYW1ibCB0ZXggdmVyc2lvbiAxIiwiYXByZWFtYmwgdGV4IHZlcnNpb24gMSAxMGUiLCJ0ZXggdmVyc2lvbiAxIDEwZSB3cml0dGVuIiwidmVyc2lvbiAxIDEwZSB3cml0dGVuIGJ5IiwiMSAxMGUgd3JpdHRlbiBieSBoYW5zIiwiMTBlIHdyaXR0ZW4gYnkgaGFucyBoZXJtYW5uIiwid3JpdHRlbiBieSBoYW5zIGhlcm1hbm4gYm9kZSIsImJ5IGhhbnMgaGVybWFubiBib2RlIGhoYm9kZSIsImhhbnMgaGVybWFubiBib2RlIGhoYm9kZSBkb3N1bmkxIiwiaGVybWFubiBib2RlIGhoYm9kZSBkb3N1bmkxIGJpdG5ldCIsImJvZGUgaGhib2RlIGRvc3VuaTEgYml0bmV0IGZvciIsImhoYm9kZSBkb3N1bmkxIGJpdG5ldCBmb3IgdGhlIiwiZG9zdW5pMSBiaXRuZXQgZm9yIHRoZSBiaWJ0ZXgiLCJiaXRuZXQgZm9yIHRoZSBiaWJ0ZXggYWRhcHRhYmxlIiwiZm9yIHRoZSBiaWJ0ZXggYWRhcHRhYmxlIGZhbWlseSIsInRoZSBiaWJ0ZXggYWRhcHRhYmxlIGZhbWlseSB2ZXJzaW9uIiwiYmlidGV4IGFkYXB0YWJsZSBmYW1pbHkgdmVyc2lvbiAxIiwiYWRhcHRhYmxlIGZhbWlseSB2ZXJzaW9uIDEgMTAiLCJmYW1pbHkgdmVyc2lvbiAxIDEwIHNlZSIsInZlcnNpb24gMSAxMCBzZWUgdGhlIiwiMSAxMCBzZWUgdGhlIGZpbGUiLCIxMCBzZWUgdGhlIGZpbGUgYXByZWFtYmwiLCJzZWUgdGhlIGZpbGUgYXByZWFtYmwgZG9jIiwidGhlIGZpbGUgYXByZWFtYmwgZG9jIGZvciIsImZpbGUgYXByZWFtYmwgZG9jIGZvciBhIiwiYXByZWFtYmwgZG9jIGZvciBhIGRldGFpbGVkIiwiZG9jIGZvciBhIGRldGFpbGVkIGRvY3VtZW50YXRpb24iLCJmb3IgYSBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIHRoaXMiLCJhIGRldGFpbGVkIGRvY3VtZW50YXRpb24gdGhpcyBwcm9ncmFtIiwiZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiB0aGlzIHByb2dyYW0gaXMiLCJkb2N1bWVudGF0aW9uIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCIsInRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IiwicHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSIsImlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5IiwiZGlzdHJpYnV0ZWQgd2l0aG91dCBhbnkgd2FycmFudHkgZXhwcmVzcyIsIndhcnJhbnR5IGV4cHJlc3Mgb3IgaW1wbGllZCBjb3B5cmlnaHQiLCJleHByZXNzIG9yIGltcGxpZWQgY29weXJpZ2h0IGMiLCJvciBpbXBsaWVkIGNvcHlyaWdodCBjIDE5OTEiLCJpbXBsaWVkIGNvcHlyaWdodCBjIDE5OTEgMTk5MiIsImNvcHlyaWdodCBjIDE5OTEgMTk5MiBoYW5zIiwiYyAxOTkxIDE5OTIgaGFucyBoZXJtYW5uIiwiMTk5MSAxOTkyIGhhbnMgaGVybWFubiBib2RlIiwiMTk5MiBoYW5zIGhlcm1hbm4gYm9kZSBwZXJtaXNzaW9uIiwiaGFucyBoZXJtYW5uIGJvZGUgcGVybWlzc2lvbiBpcyIsImhlcm1hbm4gYm9kZSBwZXJtaXNzaW9uIGlzIGdyYW50ZWQiLCJib2RlIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byIsImNvcGllcyBvZiB0aGlzIGRvY3VtZW50IHByb3ZpZGVkIiwib2YgdGhpcyBkb2N1bWVudCBwcm92aWRlZCB0aGF0IiwidGhpcyBkb2N1bWVudCBwcm92aWRlZCB0aGF0IHRoZSIsImRvY3VtZW50IHByb3ZpZGVkIHRoYXQgdGhlIGNvcHlyaWdodCIsIm1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgZG9jdW1lbnQiLCJ2ZXJzaW9ucyBvZiB0aGlzIGRvY3VtZW50IHVuZGVyIiwib2YgdGhpcyBkb2N1bWVudCB1bmRlciB0aGUiLCJ0aGlzIGRvY3VtZW50IHVuZGVyIHRoZSBjb25kaXRpb25zIiwiZG9jdW1lbnQgdW5kZXIgdGhlIGNvbmRpdGlvbnMgZm9yIl19LHsibGljZW5zZVRleHRzIjpbIkFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkKHIpIFNvdXJjZSBDb2RlIExpY2Vuc2UgQWdyZWVtZW50IENvcHlyaWdodChjKSAyMDA2IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5QbGVhc2UgcmVhZCB0aGlzIFNvdXJjZSBDb2RlIExpY2Vuc2UgQWdyZWVtZW50IGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvdXJjZSBjb2RlLlxuXG5BZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZCBncmFudHMgdG8geW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSBjb3B5cmlnaHQgbGljZW5zZSwgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoaXMgc291cmNlIGNvZGUgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcyBpbiBzb3VyY2Ugb3Igb2JqZWN0IGNvZGUgZm9ybSB3aXRob3V0IGFueSBhdHRyaWJ1dGlvbiByZXF1aXJlbWVudHMuXG5cblRoZSBuYW1lIFwiQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWRcIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBjb2RlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5Zb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LCBob2xkIGhhcm1sZXNzIGFuZCBkZWZlbmQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQgZnJvbSBhbmQgYWdhaW5zdCBhbnkgbG9zcywgZGFtYWdlLCBjbGFpbXMgb3IgbGF3c3VpdHMsIGluY2x1ZGluZyBhdHRvcm5leSdzIGZlZXMgdGhhdCBhcmlzZSBvciByZXN1bHQgZnJvbSB5b3VyIHVzZSBvciBkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLlxuXG5USElTIFNPVVJDRSBDT0RFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgXCJXSVRIIEFMTCBGQVVMVFNcIiwgV0lUSE9VVCBBTlkgVEVDSE5JQ0FMIFNVUFBPUlQgT1IgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIEFMU08sIFRIRVJFIElTIE5PIFdBUlJBTlRZIE9GIE5PTi1JTkZSSU5HRU1FTlQsIFRJVExFIE9SIFFVSUVUIEVOSk9ZTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgTUFDUk9NRURJQSBPUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPVVJDRSBDT0RFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiJdLCJsaWNlbnNlSWRzIjpbIkFkb2JlLTIwMDYiXSwia2V5d29yZHMiOlsic3lzdGVtcyBpbmNvcnBvcmF0ZWQgciIsImluY29ycG9yYXRlZCByIHNvdXJjZSIsInIgc291cmNlIGNvZGUiLCJsaWNlbnNlIGFncmVlbWVudCBjb3B5cmlnaHQiLCJhZ3JlZW1lbnQgY29weXJpZ2h0IGMiLCJjIDIwMDYgYWRvYmUiLCIyMDA2IGFkb2JlIHN5c3RlbXMiLCJyZWFkIHRoaXMgc291cmNlIiwibGljZW5zZSBhZ3JlZW1lbnQgY2FyZWZ1bGx5IiwiYWdyZWVtZW50IGNhcmVmdWxseSBiZWZvcmUiLCJjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIiwiYmVmb3JlIHVzaW5nIHRoZSIsInNvdXJjZSBjb2RlIGFkb2JlIiwiY29kZSBhZG9iZSBzeXN0ZW1zIiwic3lzdGVtcyBpbmNvcnBvcmF0ZWQgZ3JhbnRzIiwiaW5jb3Jwb3JhdGVkIGdyYW50cyB0byIsImNvZGUgYW5kIHN1Y2giLCJjb2RlIGZvcm0gd2l0aG91dCIsImZvcm0gd2l0aG91dCBhbnkiLCJ3aXRob3V0IGFueSBhdHRyaWJ1dGlvbiIsImFueSBhdHRyaWJ1dGlvbiByZXF1aXJlbWVudHMiLCJhdHRyaWJ1dGlvbiByZXF1aXJlbWVudHMgdGhlIiwicmVxdWlyZW1lbnRzIHRoZSBuYW1lIiwidGhlIG5hbWUgYWRvYmUiLCJuYW1lIGFkb2JlIHN5c3RlbXMiLCJzeXN0ZW1zIGluY29ycG9yYXRlZCBtdXN0IiwiaW5jb3Jwb3JhdGVkIG11c3Qgbm90Iiwic291cmNlIGNvZGUgd2l0aG91dCIsIndyaXR0ZW4gcGVybWlzc2lvbiB5b3UiLCJwZXJtaXNzaW9uIHlvdSBhZ3JlZSIsInRvIGluZGVtbmlmeSBob2xkIiwiaW5kZW1uaWZ5IGhvbGQgaGFybWxlc3MiLCJoYXJtbGVzcyBhbmQgZGVmZW5kIiwiYW5kIGRlZmVuZCBhZG9iZSIsImRlZmVuZCBhZG9iZSBzeXN0ZW1zIiwic3lzdGVtcyBpbmNvcnBvcmF0ZWQgZnJvbSIsImluY29ycG9yYXRlZCBmcm9tIGFuZCIsImFueSBsb3NzIGRhbWFnZSIsImxvc3MgZGFtYWdlIGNsYWltcyIsImRhbWFnZSBjbGFpbXMgb3IiLCJjbGFpbXMgb3IgbGF3c3VpdHMiLCJvciBsYXdzdWl0cyBpbmNsdWRpbmciLCJsYXdzdWl0cyBpbmNsdWRpbmcgYXR0b3JuZXkiLCJpbmNsdWRpbmcgYXR0b3JuZXkgcyIsInMgZmVlcyB0aGF0IiwiZmVlcyB0aGF0IGFyaXNlIiwidGhhdCBhcmlzZSBvciIsImFyaXNlIG9yIHJlc3VsdCIsIm9yIHJlc3VsdCBmcm9tIiwiY29kZSB0aGlzIHNvdXJjZSIsImlzIGFuZCB3aXRoIiwiYW5kIHdpdGggYWxsIiwiYWxsIGZhdWx0cyB3aXRob3V0IiwiZmF1bHRzIHdpdGhvdXQgYW55Iiwid2l0aG91dCBhbnkgdGVjaG5pY2FsIiwiYW55IHRlY2huaWNhbCBzdXBwb3J0Iiwic3VwcG9ydCBvciBhbnkiLCJvciBhbnkgZXhwcmVzc2VkIiwiYXJlIGRpc2NsYWltZWQgYWxzbyIsImRpc2NsYWltZWQgYWxzbyB0aGVyZSIsImFsc28gdGhlcmUgaXMiLCJub24gaW5mcmluZ2VtZW50IHRpdGxlIiwiaW5mcmluZ2VtZW50IHRpdGxlIG9yIiwidGl0bGUgb3IgcXVpZXQiLCJvciBxdWlldCBlbmpveW1lbnQiLCJxdWlldCBlbmpveW1lbnQgaW4iLCJlbmpveW1lbnQgaW4gbm8iLCJldmVudCBzaGFsbCBtYWNyb21lZGlhIiwic2hhbGwgbWFjcm9tZWRpYSBvciIsIm1hY3JvbWVkaWEgb3IgaXRzIiwib3IgaXRzIHN1cHBsaWVycyIsIml0cyBzdXBwbGllcnMgYmUiLCJzdXBwbGllcnMgYmUgbGlhYmxlIiwiY29kZSBldmVuIGlmIiwiYWRvYmUgc3lzdGVtcyBpbmNvcnBvcmF0ZWQgciIsInN5c3RlbXMgaW5jb3Jwb3JhdGVkIHIgc291cmNlIiwiaW5jb3Jwb3JhdGVkIHIgc291cmNlIGNvZGUiLCJyIHNvdXJjZSBjb2RlIGxpY2Vuc2UiLCJjb2RlIGxpY2Vuc2UgYWdyZWVtZW50IGNvcHlyaWdodCIsImxpY2Vuc2UgYWdyZWVtZW50IGNvcHlyaWdodCBjIiwiYWdyZWVtZW50IGNvcHlyaWdodCBjIDIwMDYiLCJjb3B5cmlnaHQgYyAyMDA2IGFkb2JlIiwiYyAyMDA2IGFkb2JlIHN5c3RlbXMiLCIyMDA2IGFkb2JlIHN5c3RlbXMgaW5jb3Jwb3JhdGVkIiwicGxlYXNlIHJlYWQgdGhpcyBzb3VyY2UiLCJyZWFkIHRoaXMgc291cmNlIGNvZGUiLCJ0aGlzIHNvdXJjZSBjb2RlIGxpY2Vuc2UiLCJjb2RlIGxpY2Vuc2UgYWdyZWVtZW50IGNhcmVmdWxseSIsImxpY2Vuc2UgYWdyZWVtZW50IGNhcmVmdWxseSBiZWZvcmUiLCJhZ3JlZW1lbnQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyIsImNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIiwiYmVmb3JlIHVzaW5nIHRoZSBzb3VyY2UiLCJ1c2luZyB0aGUgc291cmNlIGNvZGUiLCJ0aGUgc291cmNlIGNvZGUgYWRvYmUiLCJzb3VyY2UgY29kZSBhZG9iZSBzeXN0ZW1zIiwiY29kZSBhZG9iZSBzeXN0ZW1zIGluY29ycG9yYXRlZCIsImFkb2JlIHN5c3RlbXMgaW5jb3Jwb3JhdGVkIGdyYW50cyIsInN5c3RlbXMgaW5jb3Jwb3JhdGVkIGdyYW50cyB0byIsImluY29ycG9yYXRlZCBncmFudHMgdG8geW91IiwiZGlzcGxheSBwdWJsaWNseSBwZXJmb3JtIGFuZCIsInB1YmxpY2x5IHBlcmZvcm0gYW5kIGRpc3RyaWJ1dGUiLCJwZXJmb3JtIGFuZCBkaXN0cmlidXRlIHRoaXMiLCJ0aGlzIHNvdXJjZSBjb2RlIGFuZCIsInNvdXJjZSBjb2RlIGFuZCBzdWNoIiwiY29kZSBhbmQgc3VjaCBkZXJpdmF0aXZlIiwib2JqZWN0IGNvZGUgZm9ybSB3aXRob3V0IiwiY29kZSBmb3JtIHdpdGhvdXQgYW55IiwiZm9ybSB3aXRob3V0IGFueSBhdHRyaWJ1dGlvbiIsIndpdGhvdXQgYW55IGF0dHJpYnV0aW9uIHJlcXVpcmVtZW50cyIsImFueSBhdHRyaWJ1dGlvbiByZXF1aXJlbWVudHMgdGhlIiwiYXR0cmlidXRpb24gcmVxdWlyZW1lbnRzIHRoZSBuYW1lIiwicmVxdWlyZW1lbnRzIHRoZSBuYW1lIGFkb2JlIiwidGhlIG5hbWUgYWRvYmUgc3lzdGVtcyIsIm5hbWUgYWRvYmUgc3lzdGVtcyBpbmNvcnBvcmF0ZWQiLCJhZG9iZSBzeXN0ZW1zIGluY29ycG9yYXRlZCBtdXN0Iiwic3lzdGVtcyBpbmNvcnBvcmF0ZWQgbXVzdCBub3QiLCJpbmNvcnBvcmF0ZWQgbXVzdCBub3QgYmUiLCJkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSIsInRoZSBzb3VyY2UgY29kZSB3aXRob3V0Iiwic291cmNlIGNvZGUgd2l0aG91dCBwcmlvciIsInByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiB5b3UiLCJ3cml0dGVuIHBlcm1pc3Npb24geW91IGFncmVlIiwicGVybWlzc2lvbiB5b3UgYWdyZWUgdG8iLCJhZ3JlZSB0byBpbmRlbW5pZnkgaG9sZCIsInRvIGluZGVtbmlmeSBob2xkIGhhcm1sZXNzIiwiaW5kZW1uaWZ5IGhvbGQgaGFybWxlc3MgYW5kIiwiaG9sZCBoYXJtbGVzcyBhbmQgZGVmZW5kIiwiaGFybWxlc3MgYW5kIGRlZmVuZCBhZG9iZSIsImFuZCBkZWZlbmQgYWRvYmUgc3lzdGVtcyIsImRlZmVuZCBhZG9iZSBzeXN0ZW1zIGluY29ycG9yYXRlZCIsImFkb2JlIHN5c3RlbXMgaW5jb3Jwb3JhdGVkIGZyb20iLCJzeXN0ZW1zIGluY29ycG9yYXRlZCBmcm9tIGFuZCIsImluY29ycG9yYXRlZCBmcm9tIGFuZCBhZ2FpbnN0IiwiYWdhaW5zdCBhbnkgbG9zcyBkYW1hZ2UiLCJhbnkgbG9zcyBkYW1hZ2UgY2xhaW1zIiwibG9zcyBkYW1hZ2UgY2xhaW1zIG9yIiwiZGFtYWdlIGNsYWltcyBvciBsYXdzdWl0cyIsImNsYWltcyBvciBsYXdzdWl0cyBpbmNsdWRpbmciLCJvciBsYXdzdWl0cyBpbmNsdWRpbmcgYXR0b3JuZXkiLCJsYXdzdWl0cyBpbmNsdWRpbmcgYXR0b3JuZXkgcyIsImluY2x1ZGluZyBhdHRvcm5leSBzIGZlZXMiLCJhdHRvcm5leSBzIGZlZXMgdGhhdCIsInMgZmVlcyB0aGF0IGFyaXNlIiwiZmVlcyB0aGF0IGFyaXNlIG9yIiwidGhhdCBhcmlzZSBvciByZXN1bHQiLCJhcmlzZSBvciByZXN1bHQgZnJvbSIsIm9yIHJlc3VsdCBmcm9tIHlvdXIiLCJ5b3VyIHVzZSBvciBkaXN0cmlidXRpb24iLCJ0aGUgc291cmNlIGNvZGUgdGhpcyIsInNvdXJjZSBjb2RlIHRoaXMgc291cmNlIiwiY29kZSB0aGlzIHNvdXJjZSBjb2RlIiwidGhpcyBzb3VyY2UgY29kZSBpcyIsImFzIGlzIGFuZCB3aXRoIiwiaXMgYW5kIHdpdGggYWxsIiwiYW5kIHdpdGggYWxsIGZhdWx0cyIsIndpdGggYWxsIGZhdWx0cyB3aXRob3V0IiwiYWxsIGZhdWx0cyB3aXRob3V0IGFueSIsImZhdWx0cyB3aXRob3V0IGFueSB0ZWNobmljYWwiLCJ3aXRob3V0IGFueSB0ZWNobmljYWwgc3VwcG9ydCIsImFueSB0ZWNobmljYWwgc3VwcG9ydCBvciIsInRlY2huaWNhbCBzdXBwb3J0IG9yIGFueSIsInN1cHBvcnQgb3IgYW55IGV4cHJlc3NlZCIsIm9yIGFueSBleHByZXNzZWQgb3IiLCJwdXJwb3NlIGFyZSBkaXNjbGFpbWVkIGFsc28iLCJhcmUgZGlzY2xhaW1lZCBhbHNvIHRoZXJlIiwiZGlzY2xhaW1lZCBhbHNvIHRoZXJlIGlzIiwiYWxzbyB0aGVyZSBpcyBubyIsImlzIG5vIHdhcnJhbnR5IG9mIiwibm8gd2FycmFudHkgb2Ygbm9uIiwib2Ygbm9uIGluZnJpbmdlbWVudCB0aXRsZSIsIm5vbiBpbmZyaW5nZW1lbnQgdGl0bGUgb3IiLCJpbmZyaW5nZW1lbnQgdGl0bGUgb3IgcXVpZXQiLCJ0aXRsZSBvciBxdWlldCBlbmpveW1lbnQiLCJvciBxdWlldCBlbmpveW1lbnQgaW4iLCJxdWlldCBlbmpveW1lbnQgaW4gbm8iLCJlbmpveW1lbnQgaW4gbm8gZXZlbnQiLCJubyBldmVudCBzaGFsbCBtYWNyb21lZGlhIiwiZXZlbnQgc2hhbGwgbWFjcm9tZWRpYSBvciIsInNoYWxsIG1hY3JvbWVkaWEgb3IgaXRzIiwibWFjcm9tZWRpYSBvciBpdHMgc3VwcGxpZXJzIiwib3IgaXRzIHN1cHBsaWVycyBiZSIsIml0cyBzdXBwbGllcnMgYmUgbGlhYmxlIiwic3VwcGxpZXJzIGJlIGxpYWJsZSBmb3IiLCJ0aGlzIHNvdXJjZSBjb2RlIGV2ZW4iLCJzb3VyY2UgY29kZSBldmVuIGlmIiwiY29kZSBldmVuIGlmIGFkdmlzZWQiLCJhZG9iZSBzeXN0ZW1zIGluY29ycG9yYXRlZCByIHNvdXJjZSIsInN5c3RlbXMgaW5jb3Jwb3JhdGVkIHIgc291cmNlIGNvZGUiLCJpbmNvcnBvcmF0ZWQgciBzb3VyY2UgY29kZSBsaWNlbnNlIiwiciBzb3VyY2UgY29kZSBsaWNlbnNlIGFncmVlbWVudCIsInNvdXJjZSBjb2RlIGxpY2Vuc2UgYWdyZWVtZW50IGNvcHlyaWdodCIsImNvZGUgbGljZW5zZSBhZ3JlZW1lbnQgY29weXJpZ2h0IGMiLCJsaWNlbnNlIGFncmVlbWVudCBjb3B5cmlnaHQgYyAyMDA2IiwiYWdyZWVtZW50IGNvcHlyaWdodCBjIDIwMDYgYWRvYmUiLCJjb3B5cmlnaHQgYyAyMDA2IGFkb2JlIHN5c3RlbXMiLCJjIDIwMDYgYWRvYmUgc3lzdGVtcyBpbmNvcnBvcmF0ZWQiLCIyMDA2IGFkb2JlIHN5c3RlbXMgaW5jb3Jwb3JhdGVkIGFsbCIsImluY29ycG9yYXRlZCBhbGwgcmlnaHRzIHJlc2VydmVkIHBsZWFzZSIsInJlc2VydmVkIHBsZWFzZSByZWFkIHRoaXMgc291cmNlIiwicGxlYXNlIHJlYWQgdGhpcyBzb3VyY2UgY29kZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgKGMpIDE5OTcsMTk5OCwyMDAyLDIwMDcgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWRcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIGRvY3VtZW50YXRpb24gZmlsZSB0byB1c2UsIGNvcHksIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgZG9jdW1lbnRhdGlvbiwgYW5kIHRvIHBlcm1pdCBvdGhlcnMgdG8gZG8gdGhlIHNhbWUsIHByb3ZpZGVkIHRoYXQ6XG5cbiAgIC0gTm8gbW9kaWZpY2F0aW9uLCBlZGl0aW5nIG9yIG90aGVyIGFsdGVyYXRpb24gb2YgdGhpcyBkb2N1bWVudCBpcyBhbGxvd2VkOyBhbmRcblxuICAgLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBkb2N1bWVudGF0aW9uLlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgZG9jdW1lbnRhdGlvbiBmaWxlLCB0byBjcmVhdGUgdGhlaXIgb3duIGRlcml2YXRpdmUgd29ya3MgZnJvbSB0aGUgY29udGVudCBvZiB0aGlzIGRvY3VtZW50IHRvIHVzZSwgY29weSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgdGhlIGRlcml2YXRpdmUgd29ya3MsIGFuZCB0byBwZXJtaXQgb3RoZXJzIHRvIGRvIHRoZSBzYW1lLCBwcm92aWRlZCB0aGF0IHRoZSBkZXJpdmVkIHdvcmsgaXMgbm90IHJlcHJlc2VudGVkIGFzIGJlaW5nIGEgY29weSBvciB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQuXG5cbkFkb2JlIHNoYWxsIG5vdCBiZSBsaWFibGUgdG8gYW55IHBhcnR5IGZvciBhbnkgbG9zcyBvZiByZXZlbnVlIG9yIHByb2ZpdCBvciBmb3IgaW5kaXJlY3QsIGluY2lkZW50YWwsIHNwZWNpYWwsIGNvbnNlcXVlbnRpYWwsIG9yIG90aGVyIHNpbWlsYXIgZGFtYWdlcywgd2hldGhlciBiYXNlZCBvbiB0b3J0IChpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIG5lZ2xpZ2VuY2Ugb3Igc3RyaWN0IGxpYWJpbGl0eSksIGNvbnRyYWN0IG9yIG90aGVyIGxlZ2FsIG9yIGVxdWl0YWJsZSBncm91bmRzIGV2ZW4gaWYgQWRvYmUgaGFzIGJlZW4gYWR2aXNlZCBvciBoYWQgcmVhc29uIHRvIGtub3cgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4gVGhlIEFkb2JlIG1hdGVyaWFscyBhcmUgcHJvdmlkZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLiBBZG9iZSBzcGVjaWZpY2FsbHkgZGlzY2xhaW1zIGFsbCBleHByZXNzLCBzdGF0dXRvcnksIG9yIGltcGxpZWQgd2FycmFudGllcyByZWxhdGluZyB0byB0aGUgQWRvYmUgbWF0ZXJpYWxzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRob3NlIGNvbmNlcm5pbmcgbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIG9yIG5vbi1pbmZyaW5nZW1lbnQgb2YgYW55IHRoaXJkIHBhcnR5IHJpZ2h0cyByZWdhcmRpbmcgdGhlIEFkb2JlIG1hdGVyaWFscy4iXSwibGljZW5zZUlkcyI6WyJBZG9iZS1HbHlwaCJdLCJrZXl3b3JkcyI6WyJjb3B5cmlnaHQgYyAxOTk3IiwiYyAxOTk3IDE5OTgiLCIxOTk3IDE5OTggMjAwMiIsIjE5OTggMjAwMiAyMDA3IiwiMjAwMiAyMDA3IGFkb2JlIiwiMjAwNyBhZG9iZSBzeXN0ZW1zIiwic3lzdGVtcyBpbmNvcnBvcmF0ZWQgcGVybWlzc2lvbiIsImluY29ycG9yYXRlZCBwZXJtaXNzaW9uIGlzIiwiZmlsZSB0byB1c2UiLCJwcm92aWRlZCB0aGF0IG5vIiwidGhhdCBubyBtb2RpZmljYXRpb24iLCJubyBtb2RpZmljYXRpb24gZWRpdGluZyIsIm1vZGlmaWNhdGlvbiBlZGl0aW5nIG9yIiwiZWRpdGluZyBvciBvdGhlciIsIm9yIG90aGVyIGFsdGVyYXRpb24iLCJhbHRlcmF0aW9uIG9mIHRoaXMiLCJkb2N1bWVudCBpcyBhbGxvd2VkIiwiYWxsb3dlZCBhbmQgdGhlIiwidGhlIGRvY3VtZW50YXRpb24gcGVybWlzc2lvbiIsImRvY3VtZW50YXRpb24gcGVybWlzc2lvbiBpcyIsInRvIGNyZWF0ZSB0aGVpciIsImNyZWF0ZSB0aGVpciBvd24iLCJ0aGVpciBvd24gZGVyaXZhdGl2ZSIsIndvcmtzIGZyb20gdGhlIiwiZnJvbSB0aGUgY29udGVudCIsImRvY3VtZW50IHRvIHVzZSIsIm9yIHNlbGwgdGhlIiwic2VsbCB0aGUgZGVyaXZhdGl2ZSIsInRoYXQgdGhlIGRlcml2ZWQiLCJpcyBub3QgcmVwcmVzZW50ZWQiLCJub3QgcmVwcmVzZW50ZWQgYXMiLCJyZXByZXNlbnRlZCBhcyBiZWluZyIsImJlaW5nIGEgY29weSIsImNvcHkgb3IgdmVyc2lvbiIsIm9yIHZlcnNpb24gb2YiLCJ0aGlzIGRvY3VtZW50IGFkb2JlIiwiZG9jdW1lbnQgYWRvYmUgc2hhbGwiLCJhZG9iZSBzaGFsbCBub3QiLCJhbnkgbG9zcyBvZiIsIm9mIHJldmVudWUgb3IiLCJyZXZlbnVlIG9yIHByb2ZpdCIsIm9yIHByb2ZpdCBvciIsInByb2ZpdCBvciBmb3IiLCJvciBmb3IgaW5kaXJlY3QiLCJmb3IgaW5kaXJlY3QgaW5jaWRlbnRhbCIsImluY2lkZW50YWwgc3BlY2lhbCBjb25zZXF1ZW50aWFsIiwic3BlY2lhbCBjb25zZXF1ZW50aWFsIG9yIiwib3RoZXIgc2ltaWxhciBkYW1hZ2VzIiwic2ltaWxhciBkYW1hZ2VzIHdoZXRoZXIiLCJkYW1hZ2VzIHdoZXRoZXIgYmFzZWQiLCJiYXNlZCBvbiB0b3J0Iiwib24gdG9ydCBpbmNsdWRpbmciLCJjb250cmFjdCBvciBvdGhlciIsIm9yIGVxdWl0YWJsZSBncm91bmRzIiwiZXF1aXRhYmxlIGdyb3VuZHMgZXZlbiIsImdyb3VuZHMgZXZlbiBpZiIsImV2ZW4gaWYgYWRvYmUiLCJpZiBhZG9iZSBoYXMiLCJhZG9iZSBoYXMgYmVlbiIsImJlZW4gYWR2aXNlZCBvciIsImFkdmlzZWQgb3IgaGFkIiwib3IgaGFkIHJlYXNvbiIsImhhZCByZWFzb24gdG8iLCJyZWFzb24gdG8ga25vdyIsInRvIGtub3cgb2YiLCJrbm93IG9mIHRoZSIsImRhbWFnZXMgdGhlIGFkb2JlIiwiYWRvYmUgbWF0ZXJpYWxzIGFyZSIsIm1hdGVyaWFscyBhcmUgcHJvdmlkZWQiLCJhcmUgcHJvdmlkZWQgb24iLCJpcyBiYXNpcyBhZG9iZSIsImJhc2lzIGFkb2JlIHNwZWNpZmljYWxseSIsImFkb2JlIHNwZWNpZmljYWxseSBkaXNjbGFpbXMiLCJhbGwgZXhwcmVzcyBzdGF0dXRvcnkiLCJleHByZXNzIHN0YXR1dG9yeSBvciIsInN0YXR1dG9yeSBvciBpbXBsaWVkIiwiaW1wbGllZCB3YXJyYW50aWVzIHJlbGF0aW5nIiwid2FycmFudGllcyByZWxhdGluZyB0byIsInRvIHRoZSBhZG9iZSIsImFkb2JlIG1hdGVyaWFscyBpbmNsdWRpbmciLCJtYXRlcmlhbHMgaW5jbHVkaW5nIGJ1dCIsImxpbWl0ZWQgdG8gdGhvc2UiLCJ0byB0aG9zZSBjb25jZXJuaW5nIiwidGhvc2UgY29uY2VybmluZyBtZXJjaGFudGFiaWxpdHkiLCJjb25jZXJuaW5nIG1lcmNoYW50YWJpbGl0eSBvciIsInBhcnR5IHJpZ2h0cyByZWdhcmRpbmciLCJyaWdodHMgcmVnYXJkaW5nIHRoZSIsInJlZ2FyZGluZyB0aGUgYWRvYmUiLCJjb3B5cmlnaHQgYyAxOTk3IDE5OTgiLCJjIDE5OTcgMTk5OCAyMDAyIiwiMTk5NyAxOTk4IDIwMDIgMjAwNyIsIjE5OTggMjAwMiAyMDA3IGFkb2JlIiwiMjAwMiAyMDA3IGFkb2JlIHN5c3RlbXMiLCIyMDA3IGFkb2JlIHN5c3RlbXMgaW5jb3Jwb3JhdGVkIiwiYWRvYmUgc3lzdGVtcyBpbmNvcnBvcmF0ZWQgcGVybWlzc2lvbiIsInN5c3RlbXMgaW5jb3Jwb3JhdGVkIHBlcm1pc3Npb24gaXMiLCJpbmNvcnBvcmF0ZWQgcGVybWlzc2lvbiBpcyBoZXJlYnkiLCJkb2N1bWVudGF0aW9uIGZpbGUgdG8gdXNlIiwiZmlsZSB0byB1c2UgY29weSIsInRoZSBkb2N1bWVudGF0aW9uIGFuZCB0byIsImRvY3VtZW50YXRpb24gYW5kIHRvIHBlcm1pdCIsInNhbWUgcHJvdmlkZWQgdGhhdCBubyIsInByb3ZpZGVkIHRoYXQgbm8gbW9kaWZpY2F0aW9uIiwidGhhdCBubyBtb2RpZmljYXRpb24gZWRpdGluZyIsIm5vIG1vZGlmaWNhdGlvbiBlZGl0aW5nIG9yIiwibW9kaWZpY2F0aW9uIGVkaXRpbmcgb3Igb3RoZXIiLCJlZGl0aW5nIG9yIG90aGVyIGFsdGVyYXRpb24iLCJvciBvdGhlciBhbHRlcmF0aW9uIG9mIiwib3RoZXIgYWx0ZXJhdGlvbiBvZiB0aGlzIiwiYWx0ZXJhdGlvbiBvZiB0aGlzIGRvY3VtZW50IiwidGhpcyBkb2N1bWVudCBpcyBhbGxvd2VkIiwiZG9jdW1lbnQgaXMgYWxsb3dlZCBhbmQiLCJpcyBhbGxvd2VkIGFuZCB0aGUiLCJhbGxvd2VkIGFuZCB0aGUgYWJvdmUiLCJvZiB0aGUgZG9jdW1lbnRhdGlvbiBwZXJtaXNzaW9uIiwidGhlIGRvY3VtZW50YXRpb24gcGVybWlzc2lvbiBpcyIsImRvY3VtZW50YXRpb24gcGVybWlzc2lvbiBpcyBoZXJlYnkiLCJkb2N1bWVudGF0aW9uIGZpbGUgdG8gY3JlYXRlIiwiZmlsZSB0byBjcmVhdGUgdGhlaXIiLCJ0byBjcmVhdGUgdGhlaXIgb3duIiwiY3JlYXRlIHRoZWlyIG93biBkZXJpdmF0aXZlIiwidGhlaXIgb3duIGRlcml2YXRpdmUgd29ya3MiLCJvd24gZGVyaXZhdGl2ZSB3b3JrcyBmcm9tIiwiZGVyaXZhdGl2ZSB3b3JrcyBmcm9tIHRoZSIsIndvcmtzIGZyb20gdGhlIGNvbnRlbnQiLCJmcm9tIHRoZSBjb250ZW50IG9mIiwiY29udGVudCBvZiB0aGlzIGRvY3VtZW50Iiwib2YgdGhpcyBkb2N1bWVudCB0byIsInRoaXMgZG9jdW1lbnQgdG8gdXNlIiwiZG9jdW1lbnQgdG8gdXNlIGNvcHkiLCJhbmQgb3Igc2VsbCB0aGUiLCJvciBzZWxsIHRoZSBkZXJpdmF0aXZlIiwic2VsbCB0aGUgZGVyaXZhdGl2ZSB3b3JrcyIsIndvcmtzIGFuZCB0byBwZXJtaXQiLCJzYW1lIHByb3ZpZGVkIHRoYXQgdGhlIiwicHJvdmlkZWQgdGhhdCB0aGUgZGVyaXZlZCIsInRoYXQgdGhlIGRlcml2ZWQgd29yayIsImRlcml2ZWQgd29yayBpcyBub3QiLCJ3b3JrIGlzIG5vdCByZXByZXNlbnRlZCIsImlzIG5vdCByZXByZXNlbnRlZCBhcyIsIm5vdCByZXByZXNlbnRlZCBhcyBiZWluZyIsInJlcHJlc2VudGVkIGFzIGJlaW5nIGEiLCJhcyBiZWluZyBhIGNvcHkiLCJiZWluZyBhIGNvcHkgb3IiLCJhIGNvcHkgb3IgdmVyc2lvbiIsImNvcHkgb3IgdmVyc2lvbiBvZiIsIm9yIHZlcnNpb24gb2YgdGhpcyIsInZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCIsIm9mIHRoaXMgZG9jdW1lbnQgYWRvYmUiLCJ0aGlzIGRvY3VtZW50IGFkb2JlIHNoYWxsIiwiZG9jdW1lbnQgYWRvYmUgc2hhbGwgbm90IiwiYWRvYmUgc2hhbGwgbm90IGJlIiwicGFydHkgZm9yIGFueSBsb3NzIiwiZm9yIGFueSBsb3NzIG9mIiwiYW55IGxvc3Mgb2YgcmV2ZW51ZSIsImxvc3Mgb2YgcmV2ZW51ZSBvciIsIm9mIHJldmVudWUgb3IgcHJvZml0IiwicmV2ZW51ZSBvciBwcm9maXQgb3IiLCJvciBwcm9maXQgb3IgZm9yIiwicHJvZml0IG9yIGZvciBpbmRpcmVjdCIsIm9yIGZvciBpbmRpcmVjdCBpbmNpZGVudGFsIiwiZm9yIGluZGlyZWN0IGluY2lkZW50YWwgc3BlY2lhbCIsImluZGlyZWN0IGluY2lkZW50YWwgc3BlY2lhbCBjb25zZXF1ZW50aWFsIiwiaW5jaWRlbnRhbCBzcGVjaWFsIGNvbnNlcXVlbnRpYWwgb3IiLCJzcGVjaWFsIGNvbnNlcXVlbnRpYWwgb3Igb3RoZXIiLCJjb25zZXF1ZW50aWFsIG9yIG90aGVyIHNpbWlsYXIiLCJvciBvdGhlciBzaW1pbGFyIGRhbWFnZXMiLCJvdGhlciBzaW1pbGFyIGRhbWFnZXMgd2hldGhlciIsInNpbWlsYXIgZGFtYWdlcyB3aGV0aGVyIGJhc2VkIiwiZGFtYWdlcyB3aGV0aGVyIGJhc2VkIG9uIiwid2hldGhlciBiYXNlZCBvbiB0b3J0IiwiYmFzZWQgb24gdG9ydCBpbmNsdWRpbmciLCJvbiB0b3J0IGluY2x1ZGluZyB3aXRob3V0IiwibGlhYmlsaXR5IGNvbnRyYWN0IG9yIG90aGVyIiwiY29udHJhY3Qgb3Igb3RoZXIgbGVnYWwiLCJvciBvdGhlciBsZWdhbCBvciIsImxlZ2FsIG9yIGVxdWl0YWJsZSBncm91bmRzIiwib3IgZXF1aXRhYmxlIGdyb3VuZHMgZXZlbiIsImVxdWl0YWJsZSBncm91bmRzIGV2ZW4gaWYiLCJncm91bmRzIGV2ZW4gaWYgYWRvYmUiLCJldmVuIGlmIGFkb2JlIGhhcyIsImlmIGFkb2JlIGhhcyBiZWVuIiwiYWRvYmUgaGFzIGJlZW4gYWR2aXNlZCIsImhhcyBiZWVuIGFkdmlzZWQgb3IiLCJiZWVuIGFkdmlzZWQgb3IgaGFkIiwiYWR2aXNlZCBvciBoYWQgcmVhc29uIiwib3IgaGFkIHJlYXNvbiB0byIsImhhZCByZWFzb24gdG8ga25vdyIsInJlYXNvbiB0byBrbm93IG9mIiwidG8ga25vdyBvZiB0aGUiLCJrbm93IG9mIHRoZSBwb3NzaWJpbGl0eSIsInN1Y2ggZGFtYWdlcyB0aGUgYWRvYmUiLCJkYW1hZ2VzIHRoZSBhZG9iZSBtYXRlcmlhbHMiLCJ0aGUgYWRvYmUgbWF0ZXJpYWxzIGFyZSIsImFkb2JlIG1hdGVyaWFscyBhcmUgcHJvdmlkZWQiLCJtYXRlcmlhbHMgYXJlIHByb3ZpZGVkIG9uIiwiYXJlIHByb3ZpZGVkIG9uIGFuIiwiYXMgaXMgYmFzaXMgYWRvYmUiLCJpcyBiYXNpcyBhZG9iZSBzcGVjaWZpY2FsbHkiLCJiYXNpcyBhZG9iZSBzcGVjaWZpY2FsbHkgZGlzY2xhaW1zIl19LHsibGljZW5zZVRleHRzIjpbIihDKSAxOTg4LCAxOTg5IGJ5IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5UaGlzIGZpbGUgbWF5IGJlIGZyZWVseSBjb3BpZWQgYW5kIHJlZGlzdHJpYnV0ZWQgYXMgbG9uZyBhczpcblxuICAgMSkgVGhpcyBlbnRpcmUgbm90aWNlIGNvbnRpbnVlcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgZmlsZSxcblxuICAgMikgSWYgdGhlIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQgaW4gYW55IHdheSwgYSBub3RpY2Ugb2Ygc3VjaCBtb2RpZmljYXRpb24gaXMgY29uc3BpY3VvdXNseSBpbmRpY2F0ZWQuXG5cblBvc3RTY3JpcHQsIERpc3BsYXkgUG9zdFNjcmlwdCwgYW5kIEFkb2JlIGFyZSByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuXG5cblRIRSBJTkZPUk1BVElPTiBCRUxPVyBJUyBGVVJOSVNIRUQgQVMgSVMsIElTIFNVQkpFQ1QgVE8gQ0hBTkdFIFdJVEhPVVQgTk9USUNFLCBBTkQgU0hPVUxEIE5PVCBCRSBDT05TVFJVRUQgQVMgQSBDT01NSVRNRU5UIEJZIEFET0JFIFNZU1RFTVMgSU5DT1JQT1JBVEVELiBBRE9CRSBTWVNURU1TIElOQ09SUE9SQVRFRCBBU1NVTUVTIE5PIFJFU1BPTlNJQklMSVRZIE9SIExJQUJJTElUWSBGT1IgQU5ZIEVSUk9SUyBPUiBJTkFDQ1VSQUNJRVMsIE1BS0VTIE5PIFdBUlJBTlRZIE9GIEFOWSBLSU5EIChFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSkgV0lUSCBSRVNQRUNUIFRPIFRISVMgSU5GT1JNQVRJT04sIEFORCBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBQQVJUSUNVTEFSIFBVUlBPU0VTIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiJdLCJsaWNlbnNlSWRzIjpbIkFmbXBhcnNlIl0sImtleXdvcmRzIjpbImMgMTk4OCAxOTg5IiwiMTk4OCAxOTg5IGJ5IiwiMTk4OSBieSBhZG9iZSIsImZyZWVseSBjb3BpZWQgYW5kIiwiY29waWVkIGFuZCByZWRpc3RyaWJ1dGVkIiwiYW5kIHJlZGlzdHJpYnV0ZWQgYXMiLCJyZWRpc3RyaWJ1dGVkIGFzIGxvbmciLCJsb25nIGFzIDEiLCJhcyAxIHRoaXMiLCIxIHRoaXMgZW50aXJlIiwiZW50aXJlIG5vdGljZSBjb250aW51ZXMiLCJub3RpY2UgY29udGludWVzIHRvIiwiY29udGludWVzIHRvIGJlIiwidGhlIGZpbGUgMiIsImZpbGUgMiBpZiIsInRoZSBmaWxlIGhhcyIsIm1vZGlmaWVkIGluIGFueSIsIndheSBhIG5vdGljZSIsIm1vZGlmaWNhdGlvbiBpcyBjb25zcGljdW91c2x5IiwiaXMgY29uc3BpY3VvdXNseSBpbmRpY2F0ZWQiLCJjb25zcGljdW91c2x5IGluZGljYXRlZCBwb3N0c2NyaXB0IiwiaW5kaWNhdGVkIHBvc3RzY3JpcHQgZGlzcGxheSIsInBvc3RzY3JpcHQgZGlzcGxheSBwb3N0c2NyaXB0IiwiZGlzcGxheSBwb3N0c2NyaXB0IGFuZCIsInBvc3RzY3JpcHQgYW5kIGFkb2JlIiwiYW5kIGFkb2JlIGFyZSIsImFkb2JlIGFyZSByZWdpc3RlcmVkIiwiYXJlIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyIsInRyYWRlbWFya3Mgb2YgYWRvYmUiLCJvZiBhZG9iZSBzeXN0ZW1zIiwic3lzdGVtcyBpbmNvcnBvcmF0ZWQgdGhlIiwiaW5jb3Jwb3JhdGVkIHRoZSBpbmZvcm1hdGlvbiIsInRoZSBpbmZvcm1hdGlvbiBiZWxvdyIsImluZm9ybWF0aW9uIGJlbG93IGlzIiwiYmVsb3cgaXMgZnVybmlzaGVkIiwiaXMgZnVybmlzaGVkIGFzIiwiZnVybmlzaGVkIGFzIGlzIiwiYXMgaXMgaXMiLCJpcyBpcyBzdWJqZWN0Iiwic3ViamVjdCB0byBjaGFuZ2UiLCJ0byBjaGFuZ2Ugd2l0aG91dCIsImNoYW5nZSB3aXRob3V0IG5vdGljZSIsIndpdGhvdXQgbm90aWNlIGFuZCIsIm5vdGljZSBhbmQgc2hvdWxkIiwiYXMgYSBjb21taXRtZW50IiwiYSBjb21taXRtZW50IGJ5IiwiY29tbWl0bWVudCBieSBhZG9iZSIsInN5c3RlbXMgaW5jb3Jwb3JhdGVkIGFkb2JlIiwiaW5jb3Jwb3JhdGVkIGFkb2JlIHN5c3RlbXMiLCJzeXN0ZW1zIGluY29ycG9yYXRlZCBhc3N1bWVzIiwiaW5jb3Jwb3JhdGVkIGFzc3VtZXMgbm8iLCJhc3N1bWVzIG5vIHJlc3BvbnNpYmlsaXR5IiwicmVzcG9uc2liaWxpdHkgb3IgbGlhYmlsaXR5IiwiZXJyb3JzIG9yIGluYWNjdXJhY2llcyIsIm9yIGluYWNjdXJhY2llcyBtYWtlcyIsImluYWNjdXJhY2llcyBtYWtlcyBubyIsIm9yIHN0YXR1dG9yeSB3aXRoIiwic3RhdHV0b3J5IHdpdGggcmVzcGVjdCIsInRvIHRoaXMgaW5mb3JtYXRpb24iLCJ0aGlzIGluZm9ybWF0aW9uIGFuZCIsImluZm9ybWF0aW9uIGFuZCBleHByZXNzbHkiLCJhbmQgZXhwcmVzc2x5IGRpc2NsYWltcyIsImV4cHJlc3NseSBkaXNjbGFpbXMgYW55IiwiYW5kIGFsbCB3YXJyYW50aWVzIiwiYWxsIHdhcnJhbnRpZXMgb2YiLCJmaXRuZXNzIGZvciBwYXJ0aWN1bGFyIiwiZm9yIHBhcnRpY3VsYXIgcHVycG9zZXMiLCJwYXJ0aWN1bGFyIHB1cnBvc2VzIGFuZCIsInB1cnBvc2VzIGFuZCBub25pbmZyaW5nZW1lbnQiLCJjIDE5ODggMTk4OSBieSIsIjE5ODggMTk4OSBieSBhZG9iZSIsIjE5ODkgYnkgYWRvYmUgc3lzdGVtcyIsInJlc2VydmVkIHRoaXMgZmlsZSBtYXkiLCJiZSBmcmVlbHkgY29waWVkIGFuZCIsImZyZWVseSBjb3BpZWQgYW5kIHJlZGlzdHJpYnV0ZWQiLCJjb3BpZWQgYW5kIHJlZGlzdHJpYnV0ZWQgYXMiLCJhbmQgcmVkaXN0cmlidXRlZCBhcyBsb25nIiwicmVkaXN0cmlidXRlZCBhcyBsb25nIGFzIiwiYXMgbG9uZyBhcyAxIiwibG9uZyBhcyAxIHRoaXMiLCJhcyAxIHRoaXMgZW50aXJlIiwiMSB0aGlzIGVudGlyZSBub3RpY2UiLCJ0aGlzIGVudGlyZSBub3RpY2UgY29udGludWVzIiwiZW50aXJlIG5vdGljZSBjb250aW51ZXMgdG8iLCJub3RpY2UgY29udGludWVzIHRvIGJlIiwiY29udGludWVzIHRvIGJlIGluY2x1ZGVkIiwiaW5jbHVkZWQgaW4gdGhlIGZpbGUiLCJpbiB0aGUgZmlsZSAyIiwidGhlIGZpbGUgMiBpZiIsImZpbGUgMiBpZiB0aGUiLCJpZiB0aGUgZmlsZSBoYXMiLCJ0aGUgZmlsZSBoYXMgYmVlbiIsImZpbGUgaGFzIGJlZW4gbW9kaWZpZWQiLCJiZWVuIG1vZGlmaWVkIGluIGFueSIsIm1vZGlmaWVkIGluIGFueSB3YXkiLCJhbnkgd2F5IGEgbm90aWNlIiwid2F5IGEgbm90aWNlIG9mIiwiYSBub3RpY2Ugb2Ygc3VjaCIsIm5vdGljZSBvZiBzdWNoIG1vZGlmaWNhdGlvbiIsIm9mIHN1Y2ggbW9kaWZpY2F0aW9uIGlzIiwic3VjaCBtb2RpZmljYXRpb24gaXMgY29uc3BpY3VvdXNseSIsIm1vZGlmaWNhdGlvbiBpcyBjb25zcGljdW91c2x5IGluZGljYXRlZCIsImlzIGNvbnNwaWN1b3VzbHkgaW5kaWNhdGVkIHBvc3RzY3JpcHQiLCJjb25zcGljdW91c2x5IGluZGljYXRlZCBwb3N0c2NyaXB0IGRpc3BsYXkiLCJpbmRpY2F0ZWQgcG9zdHNjcmlwdCBkaXNwbGF5IHBvc3RzY3JpcHQiLCJwb3N0c2NyaXB0IGRpc3BsYXkgcG9zdHNjcmlwdCBhbmQiLCJkaXNwbGF5IHBvc3RzY3JpcHQgYW5kIGFkb2JlIiwicG9zdHNjcmlwdCBhbmQgYWRvYmUgYXJlIiwiYW5kIGFkb2JlIGFyZSByZWdpc3RlcmVkIiwiYWRvYmUgYXJlIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyIsImFyZSByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YiLCJyZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgYWRvYmUiLCJ0cmFkZW1hcmtzIG9mIGFkb2JlIHN5c3RlbXMiLCJvZiBhZG9iZSBzeXN0ZW1zIGluY29ycG9yYXRlZCIsImFkb2JlIHN5c3RlbXMgaW5jb3Jwb3JhdGVkIHRoZSIsInN5c3RlbXMgaW5jb3Jwb3JhdGVkIHRoZSBpbmZvcm1hdGlvbiIsImluY29ycG9yYXRlZCB0aGUgaW5mb3JtYXRpb24gYmVsb3ciLCJ0aGUgaW5mb3JtYXRpb24gYmVsb3cgaXMiLCJpbmZvcm1hdGlvbiBiZWxvdyBpcyBmdXJuaXNoZWQiLCJiZWxvdyBpcyBmdXJuaXNoZWQgYXMiLCJpcyBmdXJuaXNoZWQgYXMgaXMiLCJmdXJuaXNoZWQgYXMgaXMgaXMiLCJhcyBpcyBpcyBzdWJqZWN0IiwiaXMgaXMgc3ViamVjdCB0byIsImlzIHN1YmplY3QgdG8gY2hhbmdlIiwic3ViamVjdCB0byBjaGFuZ2Ugd2l0aG91dCIsInRvIGNoYW5nZSB3aXRob3V0IG5vdGljZSIsImNoYW5nZSB3aXRob3V0IG5vdGljZSBhbmQiLCJ3aXRob3V0IG5vdGljZSBhbmQgc2hvdWxkIiwibm90aWNlIGFuZCBzaG91bGQgbm90Iiwic2hvdWxkIG5vdCBiZSBjb25zdHJ1ZWQiLCJjb25zdHJ1ZWQgYXMgYSBjb21taXRtZW50IiwiYXMgYSBjb21taXRtZW50IGJ5IiwiYSBjb21taXRtZW50IGJ5IGFkb2JlIiwiY29tbWl0bWVudCBieSBhZG9iZSBzeXN0ZW1zIiwiYWRvYmUgc3lzdGVtcyBpbmNvcnBvcmF0ZWQgYWRvYmUiLCJzeXN0ZW1zIGluY29ycG9yYXRlZCBhZG9iZSBzeXN0ZW1zIiwiaW5jb3Jwb3JhdGVkIGFkb2JlIHN5c3RlbXMgaW5jb3Jwb3JhdGVkIiwiYWRvYmUgc3lzdGVtcyBpbmNvcnBvcmF0ZWQgYXNzdW1lcyIsInN5c3RlbXMgaW5jb3Jwb3JhdGVkIGFzc3VtZXMgbm8iLCJpbmNvcnBvcmF0ZWQgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSIsImFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgb3IiLCJubyByZXNwb25zaWJpbGl0eSBvciBsaWFiaWxpdHkiLCJyZXNwb25zaWJpbGl0eSBvciBsaWFiaWxpdHkgZm9yIiwib3IgbGlhYmlsaXR5IGZvciBhbnkiLCJsaWFiaWxpdHkgZm9yIGFueSBlcnJvcnMiLCJhbnkgZXJyb3JzIG9yIGluYWNjdXJhY2llcyIsImVycm9ycyBvciBpbmFjY3VyYWNpZXMgbWFrZXMiLCJvciBpbmFjY3VyYWNpZXMgbWFrZXMgbm8iLCJpbmFjY3VyYWNpZXMgbWFrZXMgbm8gd2FycmFudHkiLCJpbXBsaWVkIG9yIHN0YXR1dG9yeSB3aXRoIiwib3Igc3RhdHV0b3J5IHdpdGggcmVzcGVjdCIsInN0YXR1dG9yeSB3aXRoIHJlc3BlY3QgdG8iLCJyZXNwZWN0IHRvIHRoaXMgaW5mb3JtYXRpb24iLCJ0byB0aGlzIGluZm9ybWF0aW9uIGFuZCIsInRoaXMgaW5mb3JtYXRpb24gYW5kIGV4cHJlc3NseSIsImluZm9ybWF0aW9uIGFuZCBleHByZXNzbHkgZGlzY2xhaW1zIiwiYW5kIGV4cHJlc3NseSBkaXNjbGFpbXMgYW55IiwiZXhwcmVzc2x5IGRpc2NsYWltcyBhbnkgYW5kIiwiYW55IGFuZCBhbGwgd2FycmFudGllcyIsImFuZCBhbGwgd2FycmFudGllcyBvZiIsImFsbCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSIsIm1lcmNoYW50YWJpbGl0eSBmaXRuZXNzIGZvciBwYXJ0aWN1bGFyIiwiZml0bmVzcyBmb3IgcGFydGljdWxhciBwdXJwb3NlcyIsImZvciBwYXJ0aWN1bGFyIHB1cnBvc2VzIGFuZCIsInBhcnRpY3VsYXIgcHVycG9zZXMgYW5kIG5vbmluZnJpbmdlbWVudCIsInB1cnBvc2VzIGFuZCBub25pbmZyaW5nZW1lbnQgb2YiLCJjIDE5ODggMTk4OSBieSBhZG9iZSIsIjE5ODggMTk4OSBieSBhZG9iZSBzeXN0ZW1zIiwiMTk4OSBieSBhZG9iZSBzeXN0ZW1zIGluY29ycG9yYXRlZCIsImJ5IGFkb2JlIHN5c3RlbXMgaW5jb3Jwb3JhdGVkIGFsbCIsInJpZ2h0cyByZXNlcnZlZCB0aGlzIGZpbGUgbWF5IiwicmVzZXJ2ZWQgdGhpcyBmaWxlIG1heSBiZSIsImZpbGUgbWF5IGJlIGZyZWVseSBjb3BpZWQiLCJtYXkgYmUgZnJlZWx5IGNvcGllZCBhbmQiLCJiZSBmcmVlbHkgY29waWVkIGFuZCByZWRpc3RyaWJ1dGVkIiwiZnJlZWx5IGNvcGllZCBhbmQgcmVkaXN0cmlidXRlZCBhcyIsImNvcGllZCBhbmQgcmVkaXN0cmlidXRlZCBhcyBsb25nIiwiYW5kIHJlZGlzdHJpYnV0ZWQgYXMgbG9uZyBhcyIsInJlZGlzdHJpYnV0ZWQgYXMgbG9uZyBhcyAxIiwiYXMgbG9uZyBhcyAxIHRoaXMiLCJsb25nIGFzIDEgdGhpcyBlbnRpcmUiLCJhcyAxIHRoaXMgZW50aXJlIG5vdGljZSIsIjEgdGhpcyBlbnRpcmUgbm90aWNlIGNvbnRpbnVlcyIsInRoaXMgZW50aXJlIG5vdGljZSBjb250aW51ZXMgdG8iLCJlbnRpcmUgbm90aWNlIGNvbnRpbnVlcyB0byBiZSIsIm5vdGljZSBjb250aW51ZXMgdG8gYmUgaW5jbHVkZWQiLCJjb250aW51ZXMgdG8gYmUgaW5jbHVkZWQgaW4iLCJiZSBpbmNsdWRlZCBpbiB0aGUgZmlsZSIsImluY2x1ZGVkIGluIHRoZSBmaWxlIDIiLCJpbiB0aGUgZmlsZSAyIGlmIiwidGhlIGZpbGUgMiBpZiB0aGUiLCJmaWxlIDIgaWYgdGhlIGZpbGUiLCIyIGlmIHRoZSBmaWxlIGhhcyIsImlmIHRoZSBmaWxlIGhhcyBiZWVuIiwidGhlIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQiLCJmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIGluIiwiaGFzIGJlZW4gbW9kaWZpZWQgaW4gYW55IiwiYmVlbiBtb2RpZmllZCBpbiBhbnkgd2F5IiwibW9kaWZpZWQgaW4gYW55IHdheSBhIl19LHsibGljZW5zZVRleHRzIjpbIkFsYWRkaW4gRnJlZSBQdWJsaWMgTGljZW5zZVxuXG4oVmVyc2lvbiA4LCBOb3ZlbWJlciAxOCwgMTk5OSkgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk3LCAxOTk4LCAxOTk5IEFsYWRkaW4gRW50ZXJwcmlzZXMsXG5cbk1lbmxvIFBhcmssIENhbGlmb3JuaWEsIFUuUy5BLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBOT1RFOiBUaGlzIExpY2Vuc2UgaXMgbm90IHRoZSBzYW1lIGFzIGFueSBvZiB0aGUgR05VIExpY2Vuc2VzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJdHMgdGVybXMgYXJlIHN1YnN0YW50aWFsbHkgZGlmZmVyZW50IGZyb20gdGhvc2Ugb2YgdGhlIEdOVSBMaWNlbnNlcy4gSWYgeW91IGFyZSBmYW1pbGlhciB3aXRoIHRoZSBHTlUgTGljZW5zZXMsIHBsZWFzZSByZWFkIHRoaXMgbGljZW5zZSB3aXRoIGV4dHJhIGNhcmUuXG5cbkFsYWRkaW4gRW50ZXJwcmlzZXMgaGVyZWJ5IGdyYW50cyB0byBhbnlvbmUgdGhlIHBlcm1pc3Npb24gdG8gYXBwbHkgdGhpcyBMaWNlbnNlIHRvIHRoZWlyIG93biB3b3JrLCBhcyBsb25nIGFzIHRoZSBlbnRpcmUgTGljZW5zZSAoaW5jbHVkaW5nIHRoZSBhYm92ZSBub3RpY2VzIGFuZCB0aGlzIHBhcmFncmFwaCkgaXMgY29waWVkIHdpdGggbm8gY2hhbmdlcywgYWRkaXRpb25zLCBvciBkZWxldGlvbnMgZXhjZXB0IGZvciBjaGFuZ2luZyB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIFNlY3Rpb24gMCB0byBpbmNsdWRlIGEgc3VpdGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmsgdG8gd2hpY2ggdGhlIGxpY2Vuc2UgaXMgYmVpbmcgYXBwbGllZCBhbmQgb2YgdGhlIHBlcnNvbiBvciBlbnRpdHkgdGhhdCBob2xkcyB0aGUgY29weXJpZ2h0IGluIHRoZSB3b3JrLCBhbmQsIGlmIHRoZSBMaWNlbnNlIGlzIGJlaW5nIGFwcGxpZWQgdG8gYSB3b3JrIGNyZWF0ZWQgaW4gYSBjb3VudHJ5IG90aGVyIHRoYW4gdGhlIFVuaXRlZCBTdGF0ZXMsIHJlcGxhY2luZyB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIFNlY3Rpb24gNiB3aXRoIGFuIGFwcHJvcHJpYXRlIHJlZmVyZW5jZSB0byB0aGUgbGF3cyBvZiB0aGUgYXBwcm9wcmlhdGUgY291bnRyeS5cblxuICAgMC4gU3ViamVjdCBNYXR0ZXJcblxuICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIGNvbXB1dGVyIHByb2dyYW0ga25vd24gYXMgXCJBbGFkZGluIEdob3N0c2NyaXB0LlwiIFRoZSBcIlByb2dyYW1cIiwgYmVsb3csIHJlZmVycyB0byBzdWNoIHByb2dyYW0uIFRoZSBQcm9ncmFtIGlzIGEgY29weXJpZ2h0ZWQgd29yayB3aG9zZSBjb3B5cmlnaHQgaXMgaGVsZCBieSBBbGFkZGluIEVudGVycHJpc2VzICh0aGUgXCJMaWNlbnNvclwiKS4gUGxlYXNlIG5vdGUgdGhhdCBBbGFkZGluIEdob3N0c2NyaXB0IGlzIG5laXRoZXIgdGhlIHByb2dyYW0ga25vd24gYXMgXCJHTlUgR2hvc3RzY3JpcHRcIiBub3IgdGhlIHZlcnNpb24gb2YgR2hvc3RzY3JpcHQgYXZhaWxhYmxlIGZvciBjb21tZXJjaWFsIGxpY2Vuc2luZyBmcm9tIEFydGlmZXggU29mdHdhcmUgSW5jLlxuXG4gICBBIFwid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbVwiIG1lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBQcm9ncmFtLCBhcyBkZWZpbmVkIGluIHRoZSBVbml0ZWQgU3RhdGVzIENvcHlyaWdodCBBY3Qgb2YgMTk3Niwgc3VjaCBhcyBhIHRyYW5zbGF0aW9uIG9yIGEgbW9kaWZpY2F0aW9uLlxuXG4gICBCWSBNT0RJRllJTkcgT1IgRElTVFJJQlVUSU5HIFRIRSBQUk9HUkFNIChPUiBBTlkgV09SSyBCQVNFRCBPTiBUSEUgUFJPR1JBTSksIFlPVSBJTkRJQ0FURSBZT1VSIEFDQ0VQVEFOQ0UgT0YgVEhJUyBMSUNFTlNFIFRPIERPIFNPLCBBTkQgQUxMIElUUyBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU5HIE9SIE1PRElGWUlORyBUSEUgUFJPR1JBTSBPUiBXT1JLUyBCQVNFRCBPTiBJVC4gTk9USElORyBPVEhFUiBUSEFOIFRISVMgTElDRU5TRSBHUkFOVFMgWU9VIFBFUk1JU1NJT04gVE8gTU9ESUZZIE9SIERJU1RSSUJVVEUgVEhFIFBST0dSQU0gT1IgSVRTIERFUklWQVRJVkUgV09SS1MuIFRIRVNFIEFDVElPTlMgQVJFIFBST0hJQklURUQgQlkgTEFXLiBJRiBZT1UgRE8gTk9UIEFDQ0VQVCBUSEVTRSBURVJNUyBBTkQgQ09ORElUSU9OUywgRE8gTk9UIE1PRElGWSBPUiBESVNUUklCVVRFIFRIRSBQUk9HUkFNLlxuXG4gICAxLiBMaWNlbnNlcy5cblxuICAgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyB5b3UgdGhlIGZvbGxvd2luZyByaWdodHMsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoIGFsbCBvZiB0aGUgcmVzdHJpY3Rpb25zIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UgYW5kIHByb3ZpZGVkLCBmdXJ0aGVyLCB0aGF0IHlvdSBkaXN0cmlidXRlIGFuIHVubW9kaWZpZWQgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgUHJvZ3JhbTpcblxuICAgICAgKGEpIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBsaXRlcmFsIChpLmUuLCB2ZXJiYXRpbSkgY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQgdGhyb3VnaG91dCB0aGUgd29ybGQsIGluIGFueSBtZWRpdW0uXG5cbiAgICAgIChiKSBZb3UgbWF5IG1vZGlmeSB0aGUgUHJvZ3JhbSwgY3JlYXRlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIHRocm91Z2hvdXQgdGhlIHdvcmxkLCBpbiBhbnkgbWVkaXVtLlxuXG4gICAyLiBSZXN0cmljdGlvbnMuXG5cbiAgIFRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAgICAoYSkgRGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIGJ5IGEgY29tbWVyY2lhbCBvcmdhbml6YXRpb24gdG8gYW55IHRoaXJkIHBhcnR5IGlzIHByb2hpYml0ZWQgaWYgYW55IHBheW1lbnQgaXMgbWFkZSBpbiBjb25uZWN0aW9uIHdpdGggc3VjaCBkaXN0cmlidXRpb24sIHdoZXRoZXIgZGlyZWN0bHkgKGFzIGluIHBheW1lbnQgZm9yIGEgY29weSBvZiB0aGUgUHJvZ3JhbSkgb3IgaW5kaXJlY3RseSAoYXMgaW4gcGF5bWVudCBmb3Igc29tZSBzZXJ2aWNlIHJlbGF0ZWQgdG8gdGhlIFByb2dyYW0sIG9yIHBheW1lbnQgZm9yIHNvbWUgcHJvZHVjdCBvciBzZXJ2aWNlIHRoYXQgaW5jbHVkZXMgYSBjb3B5IG9mIHRoZSBQcm9ncmFtIFwid2l0aG91dCBjaGFyZ2VcIjsgdGhlc2UgYXJlIG9ubHkgZXhhbXBsZXMsIGFuZCBub3QgYW4gZXhoYXVzdGl2ZSBlbnVtZXJhdGlvbiBvZiBwcm9oaWJpdGVkIGFjdGl2aXRpZXMpLiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgb2YgZGlzdHJpYnV0aW9uIGludm9sdmluZyBwYXltZW50IHNoYWxsIG5vdCBpbiBhbmQgb2YgdGhlbXNlbHZlcyBiZSBhIHZpb2xhdGlvbiBvZiB0aGlzIHJlc3RyaWN0aW9uOlxuXG4gICAgICAgICAoaSkgUG9zdGluZyB0aGUgUHJvZ3JhbSBvbiBhIHB1YmxpYyBhY2Nlc3MgaW5mb3JtYXRpb24gc3RvcmFnZSBhbmQgcmV0cmlldmFsIHNlcnZpY2UgZm9yIHdoaWNoIGEgZmVlIGlzIHJlY2VpdmVkIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIChzdWNoIGFzIGFuIG9uLWxpbmUgc2VydmljZSksIHByb3ZpZGVkIHRoYXQgdGhlIGZlZSBpcyBub3QgY29udGVudC1kZXBlbmRlbnQgKGkuZS4sIHRoZSBmZWUgd291bGQgYmUgdGhlIHNhbWUgZm9yIHJldHJpZXZpbmcgdGhlIHNhbWUgdm9sdW1lIG9mIGluZm9ybWF0aW9uIGNvbnNpc3Rpbmcgb2YgcmFuZG9tIGRhdGEpIGFuZCB0aGF0IGFjY2VzcyB0byB0aGUgc2VydmljZSBhbmQgdG8gdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGluZGVwZW5kZW50IG9mIGFueSBvdGhlciBwcm9kdWN0IG9yIHNlcnZpY2UuIEFuIGV4YW1wbGUgb2YgYSBzZXJ2aWNlIHRoYXQgZG9lcyBub3QgZmFsbCB1bmRlciB0aGlzIHNlY3Rpb24gaXMgYW4gb24tbGluZSBzZXJ2aWNlIHRoYXQgaXMgb3BlcmF0ZWQgYnkgYSBjb21wYW55IGFuZCB0aGF0IGlzIG9ubHkgYXZhaWxhYmxlIHRvIGN1c3RvbWVycyBvZiB0aGF0IGNvbXBhbnkuIChUaGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGVudW1lcmF0aW9uLilcblxuICAgICAgICAgKGlpKSBEaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gb24gcmVtb3ZhYmxlIGNvbXB1dGVyLXJlYWRhYmxlIG1lZGlhLCBwcm92aWRlZCB0aGF0IHRoZSBmaWxlcyBjb250YWluaW5nIHRoZSBQcm9ncmFtIGFyZSByZXByb2R1Y2VkIGVudGlyZWx5IGFuZCB2ZXJiYXRpbSBvbiBzdWNoIG1lZGlhLCB0aGF0IGFsbCBpbmZvcm1hdGlvbiBvbiBzdWNoIG1lZGlhIGJlIHJlZGlzdHJpYnV0YWJsZSBmb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgd2l0aG91dCBjaGFyZ2UsIGFuZCB0aGF0IHN1Y2ggbWVkaWEgYXJlIGRpc3RyaWJ1dGVkIGJ5IHRoZW1zZWx2ZXMgKGV4Y2VwdCBmb3IgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24pIGluZGVwZW5kZW50IG9mIGFueSBvdGhlciBwcm9kdWN0IG9yIHNlcnZpY2UuIEV4YW1wbGVzIG9mIHN1Y2ggbWVkaWEgaW5jbHVkZSBDRC1ST00sIG1hZ25ldGljIHRhcGUsIGFuZCBvcHRpY2FsIHN0b3JhZ2UgbWVkaWEuIChUaGlzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBhbiBleGhhdXN0aXZlIGxpc3QuKSBBbiBleGFtcGxlIG9mIGEgZGlzdHJpYnV0aW9uIHRoYXQgZG9lcyBub3QgZmFsbCB1bmRlciB0aGlzIHNlY3Rpb24gaXMgYSBDRC1ST00gaW5jbHVkZWQgaW4gYSBib29rIG9yIG1hZ2F6aW5lLiAoVGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBlbnVtZXJhdGlvbi4pXG5cbiAgICAgIChiKSBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gb2YgdGhlIFByb2dyYW0gYXJlIG5vdCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZSBhbmQgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIEZ1bmN0aW9uYWwgdXNlIChydW5uaW5nKSBvZiB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIGFueSBvdXRwdXQgcHJvZHVjZWQgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHN1YmplY3QgdG8gdGhpcyBsaWNlbnNlIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLlxuXG4gICAgICAoYykgWW91IG11c3QgbWVldCBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIHdpdGggcmVzcGVjdCB0byBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2ggdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mIChcInRoZSBXb3JrXCIpOlxuXG4gICAgICAgICAoaSkgSWYgeW91IGhhdmUgbW9kaWZpZWQgdGhlIFByb2dyYW0sIHlvdSBtdXN0IGNhdXNlIHRoZSBXb3JrIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgaGF2ZSBtb2RpZmllZCB0aGUgUHJvZ3JhbSdzIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBJbiBlYWNoIHNvdXJjZSBmaWxlIHRoYXQgeW91IGhhdmUgbW9kaWZpZWQsIHlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlIHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgdGhlIGZpbGUsIGluY2x1ZGluZyB5b3VyIG5hbWUsIHlvdXIgZS1tYWlsIGFkZHJlc3MgKGlmIGFueSksIGFuZCB0aGUgZGF0ZSBhbmQgcHVycG9zZSBvZiB0aGUgY2hhbmdlO1xuXG4gICAgICAgICAoaWkpIFlvdSBtdXN0IGNhdXNlIHRoZSBXb3JrIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYW5kIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlO1xuXG4gICAgICAgICAoaWlpKSBJZiB0aGUgV29yayBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5IHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgYXQgZWFjaCB0aW1lIHRoZSBXb3JrIGNvbW1lbmNlcyBvcGVyYXRpb24sIHRvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhIHdhcnJhbnR5KS4gU3VjaCBub3RpY2UgbXVzdCBhbHNvIHN0YXRlIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGVsbCB0aGUgdXNlciBob3cgdG8gdmlldyB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkZWQgd2l0aCB0aGUgV29yay4gKEV4Y2VwdGlvbnM6IGlmIHRoZSBQcm9ncmFtIGlzIGludGVyYWN0aXZlIGJ1dCBub3JtYWxseSBwcmludHMgb3IgZGlzcGxheXMgc3VjaCBhbiBhbm5vdW5jZW1lbnQgb25seSBhdCB0aGUgcmVxdWVzdCBvZiBhIHVzZXIsIHN1Y2ggYXMgaW4gYW4gXCJBYm91dCBib3hcIiwgdGhlIFdvcmsgaXMgcmVxdWlyZWQgdG8gcHJpbnQgb3IgZGlzcGxheSB0aGUgbm90aWNlIG9ubHkgdW5kZXIgdGhlIHNhbWUgY2lyY3Vtc3RhbmNlczsgaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dCBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgdGhlIFdvcmsgaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pO1xuXG4gICAgICAgICAoaXYpIFlvdSBtdXN0IGFjY29tcGFueSB0aGUgV29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIGRlbGl2ZXJlZCBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4gVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUgY29kZS4gSWYgeW91IGRpc3RyaWJ1dGUgd2l0aCB0aGUgV29yayBhbnkgY29tcG9uZW50IHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgeW91IG11c3QgYWxzbyBkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSBvZiB0aGF0IGNvbXBvbmVudCBpZiB5b3UgaGF2ZSBpdCBhbmQgYXJlIGFsbG93ZWQgdG8gZG8gc287XG5cbiAgICAgICAgICh2KSBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgd3JpdHRlbiBvciBwcmludGVkIG1hdGVyaWFsIGF0IGFsbCB3aXRoIHRoZSBXb3JrLCBzdWNoIG1hdGVyaWFsIG11c3QgaW5jbHVkZSBlaXRoZXIgYSB3cml0dGVuIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBvciBhIHByb21pbmVudCB3cml0dGVuIGluZGljYXRpb24gdGhhdCB0aGUgV29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBhbmQgd3JpdHRlbiBpbnN0cnVjdGlvbnMgZm9yIHByaW50aW5nIGFuZC9vciBkaXNwbGF5aW5nIHRoZSBjb3B5IG9mIHRoZSBMaWNlbnNlIG9uIHRoZSBkaXN0cmlidXRpb24gbWVkaXVtO1xuXG4gICAgICAgICAodmkpIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudCdzIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uXG5cbiAgICAgICAgIElmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgdGhlIGVxdWl2YWxlbnQgYWJpbGl0eSB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWJpbGl0eSB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcyBkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLlxuXG4gICAzLiBSZXNlcnZhdGlvbiBvZiBSaWdodHMuXG5cbiAgIE5vIHJpZ2h0cyBhcmUgZ3JhbnRlZCB0byB0aGUgUHJvZ3JhbSBleGNlcHQgYXMgZXhwcmVzc2x5IHNldCBmb3J0aCBoZXJlaW4uIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLlxuXG4gICA0LiBPdGhlciBSZXN0cmljdGlvbnMuXG5cbiAgIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGZvciBhbnkgcmVhc29uLCBMaWNlbnNvciBtYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS5cblxuICAgNS4gTGltaXRhdGlvbnMuXG5cbiAgIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIFRPIFlPVSBcIkFTIElTLFwiIFdJVEhPVVQgV0FSUkFOVFkuIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JBTSwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi5cblxuICAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgTElDRU5TT1IsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDYuIEdlbmVyYWwuXG5cbiAgIFRoaXMgTGljZW5zZSBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgVS5TLkEuLCBleGNsdWRpbmcgY2hvaWNlIG9mIGxhdyBydWxlcy5cblxuICAgSWYgYW55IHBhcnQgb2YgdGhpcyBMaWNlbnNlIGlzIGZvdW5kIHRvIGJlIGluIGNvbmZsaWN0IHdpdGggdGhlIGxhdywgdGhhdCBwYXJ0IHNoYWxsIGJlIGludGVycHJldGVkIGluIGl0cyBicm9hZGVzdCBtZWFuaW5nIGNvbnNpc3RlbnQgd2l0aCB0aGUgbGF3LCBhbmQgbm8gb3RoZXIgcGFydHMgb2YgdGhlIExpY2Vuc2Ugc2hhbGwgYmUgYWZmZWN0ZWQuXG5cbiAgIEZvciBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgdXNlcnMsIHRoZSBQcm9ncmFtIGlzIHByb3ZpZGVkIHdpdGggUkVTVFJJQ1RFRCBSSUdIVFMuIElmIHlvdSBhcmUgYSB1bml0IG9yIGFnZW5jeSBvZiB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IG9yIGFyZSBhY3F1aXJpbmcgdGhlIFByb2dyYW0gZm9yIGFueSBzdWNoIHVuaXQgb3IgYWdlbmN5LCB0aGUgZm9sbG93aW5nIGFwcGx5OlxuXG4gICBJZiB0aGUgdW5pdCBvciBhZ2VuY3kgaXMgdGhlIERlcGFydG1lbnQgb2YgRGVmZW5zZSAoXCJET0RcIiksIHRoZSBQcm9ncmFtIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBhcmUgY2xhc3NpZmllZCBhcyBcImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmVcIiBhbmQgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb25cIiByZXNwZWN0aXZlbHkgYW5kLCBwdXJzdWFudCB0byBERkFSIFNlY3Rpb24gMjI3LjcyMDIsIHRoZSBHb3Zlcm5tZW50IGlzIGFjcXVpcmluZyB0aGUgUHJvZ3JhbSBhbmQgaXRzIGRvY3VtZW50YXRpb24gaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIHRoZSB1bml0IG9yIGFnZW5jeSBpcyBvdGhlciB0aGFuIERPRCwgdGhlIFByb2dyYW0gYW5kIGl0cyBkb2N1bWVudGF0aW9uIGFyZSBjbGFzc2lmaWVkIGFzIFwiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZVwiIGFuZCBcImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvblwiIHJlc3BlY3RpdmVseSBhbmQsIHB1cnN1YW50IHRvIEZBUiBTZWN0aW9uIDEyLjIxMiwgdGhlIEdvdmVybm1lbnQgaXMgYWNxdWlyaW5nIHRoZSBQcm9ncmFtIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4iXSwibGljZW5zZUlkcyI6WyJBbGFkZGluIl0sImtleXdvcmRzIjpbImFsYWRkaW4gZnJlZSBwdWJsaWMiLCJmcmVlIHB1YmxpYyBsaWNlbnNlIiwibGljZW5zZSB2ZXJzaW9uIDgiLCJ2ZXJzaW9uIDggbm92ZW1iZXIiLCI4IG5vdmVtYmVyIDE4Iiwibm92ZW1iZXIgMTggMTk5OSIsIjE4IDE5OTkgY29weXJpZ2h0IiwiMTk5NCAxOTk1IDE5OTciLCIxOTk1IDE5OTcgMTk5OCIsIjE5OTcgMTk5OCAxOTk5IiwiMTk5OCAxOTk5IGFsYWRkaW4iLCIxOTk5IGFsYWRkaW4gZW50ZXJwcmlzZXMiLCJhbGFkZGluIGVudGVycHJpc2VzIG1lbmxvIiwiZW50ZXJwcmlzZXMgbWVubG8gcGFyayIsIm1lbmxvIHBhcmsgY2FsaWZvcm5pYSIsInBhcmsgY2FsaWZvcm5pYSB1Iiwibm90IHRoZSBzYW1lIiwic2FtZSBhcyBhbnkiLCJhcyBhbnkgb2YiLCJnbnUgbGljZW5zZXMgcHVibGlzaGVkIiwibGljZW5zZXMgcHVibGlzaGVkIGJ5Iiwic29mdHdhcmUgZm91bmRhdGlvbiBpdHMiLCJmb3VuZGF0aW9uIGl0cyB0ZXJtcyIsInRlcm1zIGFyZSBzdWJzdGFudGlhbGx5IiwiYXJlIHN1YnN0YW50aWFsbHkgZGlmZmVyZW50Iiwic3Vic3RhbnRpYWxseSBkaWZmZXJlbnQgZnJvbSIsImdudSBsaWNlbnNlcyBpZiIsInlvdSBhcmUgZmFtaWxpYXIiLCJhcmUgZmFtaWxpYXIgd2l0aCIsImZhbWlsaWFyIHdpdGggdGhlIiwiZ251IGxpY2Vuc2VzIHBsZWFzZSIsImxpY2Vuc2VzIHBsZWFzZSByZWFkIiwibGljZW5zZSB3aXRoIGV4dHJhIiwid2l0aCBleHRyYSBjYXJlIiwiZXh0cmEgY2FyZSBhbGFkZGluIiwiY2FyZSBhbGFkZGluIGVudGVycHJpc2VzIiwiYWxhZGRpbiBlbnRlcnByaXNlcyBoZXJlYnkiLCJlbnRlcnByaXNlcyBoZXJlYnkgZ3JhbnRzIiwiZ3JhbnRzIHRvIGFueW9uZSIsInRvIGFueW9uZSB0aGUiLCJhbnlvbmUgdGhlIHBlcm1pc3Npb24iLCJ0aGUgcGVybWlzc2lvbiB0byIsInBlcm1pc3Npb24gdG8gYXBwbHkiLCJsaWNlbnNlIHRvIHRoZWlyIiwidG8gdGhlaXIgb3duIiwidGhlaXIgb3duIHdvcmsiLCJvd24gd29yayBhcyIsImFzIHRoZSBlbnRpcmUiLCJlbnRpcmUgbGljZW5zZSBpbmNsdWRpbmciLCJ0aGUgYWJvdmUgbm90aWNlcyIsImFib3ZlIG5vdGljZXMgYW5kIiwicGFyYWdyYXBoIGlzIGNvcGllZCIsImlzIGNvcGllZCB3aXRoIiwiY29waWVkIHdpdGggbm8iLCJ3aXRoIG5vIGNoYW5nZXMiLCJubyBjaGFuZ2VzIGFkZGl0aW9ucyIsImNoYW5nZXMgYWRkaXRpb25zIG9yIiwiYWRkaXRpb25zIG9yIGRlbGV0aW9ucyIsIm9yIGRlbGV0aW9ucyBleGNlcHQiLCJkZWxldGlvbnMgZXhjZXB0IGZvciIsImV4Y2VwdCBmb3IgY2hhbmdpbmciLCJmb3IgY2hhbmdpbmcgdGhlIiwiY2hhbmdpbmcgdGhlIGZpcnN0Iiwib2Ygc2VjdGlvbiAwIiwic2VjdGlvbiAwIHRvIiwiMCB0byBpbmNsdWRlIiwiaW5jbHVkZSBhIHN1aXRhYmxlIiwiYSBzdWl0YWJsZSBkZXNjcmlwdGlvbiIsInN1aXRhYmxlIGRlc2NyaXB0aW9uIG9mIiwiYmVpbmcgYXBwbGllZCBhbmQiLCJhcHBsaWVkIGFuZCBvZiIsImVudGl0eSB0aGF0IGhvbGRzIiwidGhhdCBob2xkcyB0aGUiLCJob2xkcyB0aGUgY29weXJpZ2h0Iiwid29yayBhbmQgaWYiLCJpZiB0aGUgbGljZW5zZSIsImJlaW5nIGFwcGxpZWQgdG8iLCJhIHdvcmsgY3JlYXRlZCIsIndvcmsgY3JlYXRlZCBpbiIsImNyZWF0ZWQgaW4gYSIsImEgY291bnRyeSBvdGhlciIsImNvdW50cnkgb3RoZXIgdGhhbiIsInRoYW4gdGhlIHVuaXRlZCIsInVuaXRlZCBzdGF0ZXMgcmVwbGFjaW5nIiwic3RhdGVzIHJlcGxhY2luZyB0aGUiLCJyZXBsYWNpbmcgdGhlIGZpcnN0Iiwic2VjdGlvbiA2IHdpdGgiLCI2IHdpdGggYW4iLCJ3aXRoIGFuIGFwcHJvcHJpYXRlIiwiYW4gYXBwcm9wcmlhdGUgcmVmZXJlbmNlIiwiYXBwcm9wcmlhdGUgcmVmZXJlbmNlIHRvIiwib2YgdGhlIGFwcHJvcHJpYXRlIiwidGhlIGFwcHJvcHJpYXRlIGNvdW50cnkiLCJhcHByb3ByaWF0ZSBjb3VudHJ5IDAiLCJjb3VudHJ5IDAgc3ViamVjdCIsIjAgc3ViamVjdCBtYXR0ZXIiLCJzdWJqZWN0IG1hdHRlciB0aGlzIiwibWF0dGVyIHRoaXMgbGljZW5zZSIsInRvIHRoZSBjb21wdXRlciIsImNvbXB1dGVyIHByb2dyYW0ga25vd24iLCJrbm93biBhcyBhbGFkZGluIiwiYXMgYWxhZGRpbiBnaG9zdHNjcmlwdCIsImFsYWRkaW4gZ2hvc3RzY3JpcHQgdGhlIiwiZ2hvc3RzY3JpcHQgdGhlIHByb2dyYW0iLCJzdWNoIHByb2dyYW0gdGhlIiwiaXMgYSBjb3B5cmlnaHRlZCIsImEgY29weXJpZ2h0ZWQgd29yayIsImNvcHlyaWdodGVkIHdvcmsgd2hvc2UiLCJ3b3JrIHdob3NlIGNvcHlyaWdodCIsIndob3NlIGNvcHlyaWdodCBpcyIsImNvcHlyaWdodCBpcyBoZWxkIiwiaXMgaGVsZCBieSIsImhlbGQgYnkgYWxhZGRpbiIsImJ5IGFsYWRkaW4gZW50ZXJwcmlzZXMiLCJhbGFkZGluIGVudGVycHJpc2VzIHRoZSIsImVudGVycHJpc2VzIHRoZSBsaWNlbnNvciIsInRoZSBsaWNlbnNvciBwbGVhc2UiLCJsaWNlbnNvciBwbGVhc2Ugbm90ZSIsIm5vdGUgdGhhdCBhbGFkZGluIiwidGhhdCBhbGFkZGluIGdob3N0c2NyaXB0IiwiYWxhZGRpbiBnaG9zdHNjcmlwdCBpcyIsImdob3N0c2NyaXB0IGlzIG5laXRoZXIiLCJpcyBuZWl0aGVyIHRoZSIsIm5laXRoZXIgdGhlIHByb2dyYW0iLCJ0aGUgcHJvZ3JhbSBrbm93biIsImtub3duIGFzIGdudSIsImFzIGdudSBnaG9zdHNjcmlwdCIsImdudSBnaG9zdHNjcmlwdCBub3IiLCJnaG9zdHNjcmlwdCBub3IgdGhlIiwibm9yIHRoZSB2ZXJzaW9uIiwidmVyc2lvbiBvZiBnaG9zdHNjcmlwdCIsIm9mIGdob3N0c2NyaXB0IGF2YWlsYWJsZSIsImdob3N0c2NyaXB0IGF2YWlsYWJsZSBmb3IiLCJhdmFpbGFibGUgZm9yIGNvbW1lcmNpYWwiLCJmb3IgY29tbWVyY2lhbCBsaWNlbnNpbmciLCJjb21tZXJjaWFsIGxpY2Vuc2luZyBmcm9tIiwibGljZW5zaW5nIGZyb20gYXJ0aWZleCIsImZyb20gYXJ0aWZleCBzb2Z0d2FyZSIsImFydGlmZXggc29mdHdhcmUgaW5jIiwic29mdHdhcmUgaW5jIGEiLCJpbmMgYSB3b3JrIiwic3RhdGVzIGNvcHlyaWdodCBhY3QiLCJjb3B5cmlnaHQgYWN0IG9mIiwiYWN0IG9mIDE5NzYiLCJvZiAxOTc2IHN1Y2giLCIxOTc2IHN1Y2ggYXMiLCJhIHRyYW5zbGF0aW9uIG9yIiwidHJhbnNsYXRpb24gb3IgYSIsImEgbW9kaWZpY2F0aW9uIGJ5IiwibW9kaWZpY2F0aW9uIGJ5IG1vZGlmeWluZyIsIml0IG5vdGhpbmcgb3RoZXIiLCJub3QgYWNjZXB0IHRoZXNlIiwiYW5kIGNvbmRpdGlvbnMgZG8iLCJwcm9ncmFtIDEgbGljZW5zZXMiLCIxIGxpY2Vuc2VzIGxpY2Vuc29yIiwibGljZW5zZXMgbGljZW5zb3IgaGVyZWJ5IiwieW91IHRoZSBmb2xsb3dpbmciLCJmb2xsb3dpbmcgcmlnaHRzIHByb3ZpZGVkIiwicmlnaHRzIHByb3ZpZGVkIHRoYXQiLCJvZiB0aGUgcmVzdHJpY3Rpb25zIiwiYW5kIHByb3ZpZGVkIGZ1cnRoZXIiLCJwcm92aWRlZCBmdXJ0aGVyIHRoYXQiLCJmdXJ0aGVyIHRoYXQgeW91IiwiZGlzdHJpYnV0ZSBhbiB1bm1vZGlmaWVkIiwicHJvZ3JhbSBhIHlvdSIsImFuZCBkaXN0cmlidXRlIGxpdGVyYWwiLCJkaXN0cmlidXRlIGxpdGVyYWwgaSIsImxpdGVyYWwgaSBlIiwiaSBlIHZlcmJhdGltIiwiZSB2ZXJiYXRpbSBjb3BpZXMiLCJyZWNlaXZlIGl0IHRocm91Z2hvdXQiLCJpdCB0aHJvdWdob3V0IHRoZSIsImFueSBtZWRpdW0gYiIsIm1lZGl1bSBiIHlvdSIsInRoZSBwcm9ncmFtIGNyZWF0ZSIsInByb2dyYW0gY3JlYXRlIHdvcmtzIiwiY3JlYXRlIHdvcmtzIGJhc2VkIiwib2Ygc3VjaCB0aHJvdWdob3V0Iiwic3VjaCB0aHJvdWdob3V0IHRoZSIsImFueSBtZWRpdW0gMiIsIm1lZGl1bSAyIHJlc3RyaWN0aW9ucyIsIjIgcmVzdHJpY3Rpb25zIHRoaXMiLCJyZXN0cmljdGlvbnMgdGhpcyBsaWNlbnNlIiwicmVzdHJpY3Rpb25zIGEgZGlzdHJpYnV0aW9uIiwicHJvZ3JhbSBieSBhIiwiYnkgYSBjb21tZXJjaWFsIiwiYSBjb21tZXJjaWFsIG9yZ2FuaXphdGlvbiIsImNvbW1lcmNpYWwgb3JnYW5pemF0aW9uIHRvIiwib3JnYW5pemF0aW9uIHRvIGFueSIsInBhcnR5IGlzIHByb2hpYml0ZWQiLCJpcyBwcm9oaWJpdGVkIGlmIiwicHJvaGliaXRlZCBpZiBhbnkiLCJpZiBhbnkgcGF5bWVudCIsImFueSBwYXltZW50IGlzIiwicGF5bWVudCBpcyBtYWRlIiwibWFkZSBpbiBjb25uZWN0aW9uIiwid2l0aCBzdWNoIGRpc3RyaWJ1dGlvbiIsInN1Y2ggZGlzdHJpYnV0aW9uIHdoZXRoZXIiLCJkaXN0cmlidXRpb24gd2hldGhlciBkaXJlY3RseSIsIndoZXRoZXIgZGlyZWN0bHkgYXMiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChjKSAxOTk1LTE5OTkgVGhlIEFwYWNoZSBHcm91cC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiBcIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIEFwYWNoZSBHcm91cCBmb3IgdXNlIGluIHRoZSBBcGFjaGUgSFRUUCBzZXJ2ZXIgcHJvamVjdCAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykgLlwiXG5cbiAgIDQuIFRoZSBuYW1lIFwiQXBhY2hlIFNlcnZlclwiIGFuZCBcIkFwYWNoZSBHcm91cFwiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZyAuXG5cbiAgIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkIFwiQXBhY2hlXCIgbm9yIG1heSBcIkFwYWNoZVwiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIEdyb3VwIC5cblxuICAgNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDpcblxuICAgXCJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBBcGFjaGUgR3JvdXAgZm9yIHVzZSBpbiB0aGUgQXBhY2hlIEhUVFAgc2VydmVyIHByb2plY3QgKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pIC5cIlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBUEFDSEUgR1JPVVAgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBHUk9VUCBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5UaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBHcm91cCBhbmQgd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gcHVibGljIGRvbWFpbiBzb2Z0d2FyZSB3cml0dGVuIGF0IHRoZSBOYXRpb25hbCBDZW50ZXIgZm9yIFN1cGVyY29tcHV0aW5nIEFwcGxpY2F0aW9ucywgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcywgVXJiYW5hLUNoYW1wYWlnbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBHcm91cCBhbmQgdGhlIEFwYWNoZSBIVFRQIHNlcnZlciBwcm9qZWN0LCBwbGVhc2Ugc2VlIFx1MDAzY2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9cdTAwM2UuIl0sImxpY2Vuc2VJZHMiOlsiQXBhY2hlLTEuMCJdLCJrZXl3b3JkcyI6WyIxOTk1IDE5OTkgdGhlIiwiMTk5OSB0aGUgYXBhY2hlIiwiYXBhY2hlIGdyb3VwIGFsbCIsImFwYWNoZSBvcmcgNCIsIm5hbWUgYXBhY2hlIHNlcnZlciIsImFwYWNoZSBzZXJ2ZXIgYW5kIiwic2VydmVyIGFuZCBhcGFjaGUiLCJhbmQgYXBhY2hlIGdyb3VwIiwiYXBhY2hlIGdyb3VwIG11c3QiLCJncm91cCBtdXN0IG5vdCIsImNhbGxlZCBhcGFjaGUgbm9yIiwiYXBhY2hlIG5vciBtYXkiLCJtYXkgYXBhY2hlIGFwcGVhciIsImFwYWNoZSBhcHBlYXIgaW4iLCJhcGFjaGUgZ3JvdXAgNiIsImdyb3VwIDYgcmVkaXN0cmlidXRpb25zIiwiYXBhY2hlIG9yZyB0aGlzIiwiYXBhY2hlIGdyb3VwIGFzIiwiZ3JvdXAgYXMgaXMiLCJhcGFjaGUgZ3JvdXAgb3IiLCJncm91cCBvciBpdHMiLCJncm91cCBhbmQgd2FzIiwiYmFzZWQgb24gcHVibGljIiwib24gcHVibGljIGRvbWFpbiIsImRvbWFpbiBzb2Z0d2FyZSB3cml0dGVuIiwic29mdHdhcmUgd3JpdHRlbiBhdCIsInVyYmFuYSBjaGFtcGFpZ24gZm9yIiwiY2hhbXBhaWduIGZvciBtb3JlIiwic2VydmVyIHByb2plY3QgcGxlYXNlIiwiYyAxOTk1IDE5OTkgdGhlIiwiMTk5NSAxOTk5IHRoZSBhcGFjaGUiLCIxOTk5IHRoZSBhcGFjaGUgZ3JvdXAiLCJ0aGUgYXBhY2hlIGdyb3VwIGFsbCIsImFwYWNoZSBncm91cCBhbGwgcmlnaHRzIiwid3d3IGFwYWNoZSBvcmcgNCIsImFwYWNoZSBvcmcgNCB0aGUiLCJvcmcgNCB0aGUgbmFtZSIsInRoZSBuYW1lIGFwYWNoZSBzZXJ2ZXIiLCJuYW1lIGFwYWNoZSBzZXJ2ZXIgYW5kIiwiYXBhY2hlIHNlcnZlciBhbmQgYXBhY2hlIiwic2VydmVyIGFuZCBhcGFjaGUgZ3JvdXAiLCJhbmQgYXBhY2hlIGdyb3VwIG11c3QiLCJhcGFjaGUgZ3JvdXAgbXVzdCBub3QiLCJncm91cCBtdXN0IG5vdCBiZSIsImJlIGNhbGxlZCBhcGFjaGUgbm9yIiwiY2FsbGVkIGFwYWNoZSBub3IgbWF5IiwiYXBhY2hlIG5vciBtYXkgYXBhY2hlIiwibm9yIG1heSBhcGFjaGUgYXBwZWFyIiwibWF5IGFwYWNoZSBhcHBlYXIgaW4iLCJhcGFjaGUgYXBwZWFyIGluIHRoZWlyIiwidGhlIGFwYWNoZSBncm91cCA2IiwiYXBhY2hlIGdyb3VwIDYgcmVkaXN0cmlidXRpb25zIiwiZ3JvdXAgNiByZWRpc3RyaWJ1dGlvbnMgb2YiLCJ3d3cgYXBhY2hlIG9yZyB0aGlzIiwiYXBhY2hlIG9yZyB0aGlzIHNvZnR3YXJlIiwicHJvdmlkZWQgYnkgdGhlIGFwYWNoZSIsInRoZSBhcGFjaGUgZ3JvdXAgYXMiLCJhcGFjaGUgZ3JvdXAgYXMgaXMiLCJncm91cCBhcyBpcyBhbmQiLCJzaGFsbCB0aGUgYXBhY2hlIGdyb3VwIiwidGhlIGFwYWNoZSBncm91cCBvciIsImFwYWNoZSBncm91cCBvciBpdHMiLCJncm91cCBvciBpdHMgY29udHJpYnV0b3JzIiwiYXBhY2hlIGdyb3VwIGFuZCB3YXMiLCJncm91cCBhbmQgd2FzIG9yaWdpbmFsbHkiLCJvcmlnaW5hbGx5IGJhc2VkIG9uIHB1YmxpYyIsImJhc2VkIG9uIHB1YmxpYyBkb21haW4iLCJvbiBwdWJsaWMgZG9tYWluIHNvZnR3YXJlIiwicHVibGljIGRvbWFpbiBzb2Z0d2FyZSB3cml0dGVuIiwiZG9tYWluIHNvZnR3YXJlIHdyaXR0ZW4gYXQiLCJzb2Z0d2FyZSB3cml0dGVuIGF0IHRoZSIsImlsbGlub2lzIHVyYmFuYSBjaGFtcGFpZ24gZm9yIiwidXJiYW5hIGNoYW1wYWlnbiBmb3IgbW9yZSIsImNoYW1wYWlnbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiIsIm9uIHRoZSBhcGFjaGUgZ3JvdXAiLCJhcGFjaGUgZ3JvdXAgYW5kIHRoZSIsImdyb3VwIGFuZCB0aGUgYXBhY2hlIiwiYW5kIHRoZSBhcGFjaGUgaHR0cCIsImh0dHAgc2VydmVyIHByb2plY3QgcGxlYXNlIiwic2VydmVyIHByb2plY3QgcGxlYXNlIHNlZSIsImNvcHlyaWdodCBjIDE5OTUgMTk5OSB0aGUiLCJjIDE5OTUgMTk5OSB0aGUgYXBhY2hlIiwiMTk5NSAxOTk5IHRoZSBhcGFjaGUgZ3JvdXAiLCIxOTk5IHRoZSBhcGFjaGUgZ3JvdXAgYWxsIiwidGhlIGFwYWNoZSBncm91cCBhbGwgcmlnaHRzIiwiYXBhY2hlIGdyb3VwIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJodHRwIHd3dyBhcGFjaGUgb3JnIDQiLCJ3d3cgYXBhY2hlIG9yZyA0IHRoZSIsImFwYWNoZSBvcmcgNCB0aGUgbmFtZSIsIm9yZyA0IHRoZSBuYW1lIGFwYWNoZSIsIjQgdGhlIG5hbWUgYXBhY2hlIHNlcnZlciIsInRoZSBuYW1lIGFwYWNoZSBzZXJ2ZXIgYW5kIiwibmFtZSBhcGFjaGUgc2VydmVyIGFuZCBhcGFjaGUiLCJhcGFjaGUgc2VydmVyIGFuZCBhcGFjaGUgZ3JvdXAiLCJzZXJ2ZXIgYW5kIGFwYWNoZSBncm91cCBtdXN0IiwiYW5kIGFwYWNoZSBncm91cCBtdXN0IG5vdCIsImFwYWNoZSBncm91cCBtdXN0IG5vdCBiZSIsImdyb3VwIG11c3Qgbm90IGJlIHVzZWQiLCJub3QgYmUgY2FsbGVkIGFwYWNoZSBub3IiLCJiZSBjYWxsZWQgYXBhY2hlIG5vciBtYXkiLCJjYWxsZWQgYXBhY2hlIG5vciBtYXkgYXBhY2hlIiwiYXBhY2hlIG5vciBtYXkgYXBhY2hlIGFwcGVhciIsIm5vciBtYXkgYXBhY2hlIGFwcGVhciBpbiIsIm1heSBhcGFjaGUgYXBwZWFyIGluIHRoZWlyIiwiYXBhY2hlIGFwcGVhciBpbiB0aGVpciBuYW1lIiwicGVybWlzc2lvbiBvZiB0aGUgYXBhY2hlIGdyb3VwIiwib2YgdGhlIGFwYWNoZSBncm91cCA2IiwidGhlIGFwYWNoZSBncm91cCA2IHJlZGlzdHJpYnV0aW9ucyIsImFwYWNoZSBncm91cCA2IHJlZGlzdHJpYnV0aW9ucyBvZiIsImdyb3VwIDYgcmVkaXN0cmlidXRpb25zIG9mIGFueSIsImh0dHAgd3d3IGFwYWNoZSBvcmcgdGhpcyIsInd3dyBhcGFjaGUgb3JnIHRoaXMgc29mdHdhcmUiLCJhcGFjaGUgb3JnIHRoaXMgc29mdHdhcmUgaXMiLCJpcyBwcm92aWRlZCBieSB0aGUgYXBhY2hlIiwicHJvdmlkZWQgYnkgdGhlIGFwYWNoZSBncm91cCIsImJ5IHRoZSBhcGFjaGUgZ3JvdXAgYXMiLCJ0aGUgYXBhY2hlIGdyb3VwIGFzIGlzIiwiYXBhY2hlIGdyb3VwIGFzIGlzIGFuZCIsImdyb3VwIGFzIGlzIGFuZCBhbnkiLCJldmVudCBzaGFsbCB0aGUgYXBhY2hlIGdyb3VwIiwic2hhbGwgdGhlIGFwYWNoZSBncm91cCBvciIsInRoZSBhcGFjaGUgZ3JvdXAgb3IgaXRzIiwiYXBhY2hlIGdyb3VwIG9yIGl0cyBjb250cmlidXRvcnMiLCJncm91cCBvciBpdHMgY29udHJpYnV0b3JzIGJlIiwiYmVoYWxmIG9mIHRoZSBhcGFjaGUgZ3JvdXAiLCJvZiB0aGUgYXBhY2hlIGdyb3VwIGFuZCIsInRoZSBhcGFjaGUgZ3JvdXAgYW5kIHdhcyIsImFwYWNoZSBncm91cCBhbmQgd2FzIG9yaWdpbmFsbHkiLCJncm91cCBhbmQgd2FzIG9yaWdpbmFsbHkgYmFzZWQiLCJ3YXMgb3JpZ2luYWxseSBiYXNlZCBvbiBwdWJsaWMiLCJvcmlnaW5hbGx5IGJhc2VkIG9uIHB1YmxpYyBkb21haW4iLCJiYXNlZCBvbiBwdWJsaWMgZG9tYWluIHNvZnR3YXJlIiwib24gcHVibGljIGRvbWFpbiBzb2Z0d2FyZSB3cml0dGVuIiwicHVibGljIGRvbWFpbiBzb2Z0d2FyZSB3cml0dGVuIGF0IiwiZG9tYWluIHNvZnR3YXJlIHdyaXR0ZW4gYXQgdGhlIiwic29mdHdhcmUgd3JpdHRlbiBhdCB0aGUgbmF0aW9uYWwiLCJvZiBpbGxpbm9pcyB1cmJhbmEgY2hhbXBhaWduIGZvciIsImlsbGlub2lzIHVyYmFuYSBjaGFtcGFpZ24gZm9yIG1vcmUiLCJ1cmJhbmEgY2hhbXBhaWduIGZvciBtb3JlIGluZm9ybWF0aW9uIiwiY2hhbXBhaWduIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIiwiaW5mb3JtYXRpb24gb24gdGhlIGFwYWNoZSBncm91cCIsIm9uIHRoZSBhcGFjaGUgZ3JvdXAgYW5kIiwidGhlIGFwYWNoZSBncm91cCBhbmQgdGhlIiwiYXBhY2hlIGdyb3VwIGFuZCB0aGUgYXBhY2hlIiwiZ3JvdXAgYW5kIHRoZSBhcGFjaGUgaHR0cCIsImFuZCB0aGUgYXBhY2hlIGh0dHAgc2VydmVyIiwiYXBhY2hlIGh0dHAgc2VydmVyIHByb2plY3QgcGxlYXNlIiwiaHR0cCBzZXJ2ZXIgcHJvamVjdCBwbGVhc2Ugc2VlIiwic2VydmVyIHByb2plY3QgcGxlYXNlIHNlZSBodHRwIl19LHsibGljZW5zZVRleHRzIjpbIkFwYWNoZSBMaWNlbnNlIDEuMSBDb3B5cmlnaHQgKGMpIDIwMDAgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDpcblxuICAgXCJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykgLlwiXG5cbiAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci5cblxuICAgNC4gVGhlIG5hbWUgXCJBcGFjaGVcIiBhbmQgXCJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvblwiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZyAuXG5cbiAgIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkIFwiQXBhY2hlXCIgW2V4LiBcIkpha2FydGEsXCIgXCJBcGFjaGUsXCIgb3IgXCJBcGFjaGUgQ29tbW9ucyxcIl0gbm9yIG1heSBcIkFwYWNoZVwiIFtleC4gdGhlIG5hbWVzXSBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEICcnQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5UaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgaHR0cDovL3d3dy5hcGFjaGUub3JnLy4gUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSBhcmUgYmFzZWQgdXBvbiBwdWJsaWMgZG9tYWluIHNvZnR3YXJlIG9yaWdpbmFsbHkgd3JpdHRlbiBhdCB0aGUgTmF0aW9uYWwgQ2VudGVyIGZvciBTdXBlcmNvbXB1dGluZyBBcHBsaWNhdGlvbnMsIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMsIFVyYmFuYS1DaGFtcGFpZ24uIl0sImxpY2Vuc2VJZHMiOlsiQXBhY2hlLTEuMSJdLCJrZXl3b3JkcyI6WyJhcGFjaGUgbGljZW5zZSAxIiwiYyAyMDAwIHRoZSIsIjIwMDAgdGhlIGFwYWNoZSIsInNvZnR3YXJlIGZvdW5kYXRpb24gaHR0cCIsImZvdW5kYXRpb24gaHR0cCB3d3ciLCJhcGFjaGUgb3JnIGFsdGVybmF0ZWx5IiwibmFtZSBhcGFjaGUgYW5kIiwiYXBhY2hlIGFuZCBhcGFjaGUiLCJhbmQgYXBhY2hlIHNvZnR3YXJlIiwic29mdHdhcmUgZm91bmRhdGlvbiBtdXN0IiwiZm91bmRhdGlvbiBtdXN0IG5vdCIsImNhbGxlZCBhcGFjaGUgZXgiLCJhcGFjaGUgZXggamFrYXJ0YSIsImV4IGpha2FydGEgYXBhY2hlIiwiamFrYXJ0YSBhcGFjaGUgb3IiLCJhcGFjaGUgb3IgYXBhY2hlIiwib3IgYXBhY2hlIGNvbW1vbnMiLCJhcGFjaGUgY29tbW9ucyBub3IiLCJjb21tb25zIG5vciBtYXkiLCJtYXkgYXBhY2hlIGV4IiwiYXBhY2hlIGV4IHRoZSIsImV4IHRoZSBuYW1lcyIsInRoZSBuYW1lcyBhcHBlYXIiLCJuYW1lcyBhcHBlYXIgaW4iLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIHRoaXMiLCJmb3VuZGF0aW9uIHRoaXMgc29mdHdhcmUiLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIGZvciIsImZvdW5kYXRpb24gZm9yIG1vcmUiLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIHBsZWFzZSIsImZvdW5kYXRpb24gcGxlYXNlIHNlZSIsImFwYWNoZSBvcmcgcG9ydGlvbnMiLCJvcmcgcG9ydGlvbnMgb2YiLCJzb2Z0d2FyZSBhcmUgYmFzZWQiLCJhcmUgYmFzZWQgdXBvbiIsImJhc2VkIHVwb24gcHVibGljIiwidXBvbiBwdWJsaWMgZG9tYWluIiwiZG9tYWluIHNvZnR3YXJlIG9yaWdpbmFsbHkiLCJzb2Z0d2FyZSBvcmlnaW5hbGx5IHdyaXR0ZW4iLCJvcmlnaW5hbGx5IHdyaXR0ZW4gYXQiLCJhcGFjaGUgbGljZW5zZSAxIDEiLCJsaWNlbnNlIDEgMSBjb3B5cmlnaHQiLCIxIGNvcHlyaWdodCBjIDIwMDAiLCJjb3B5cmlnaHQgYyAyMDAwIHRoZSIsImMgMjAwMCB0aGUgYXBhY2hlIiwiMjAwMCB0aGUgYXBhY2hlIHNvZnR3YXJlIiwiYXBhY2hlIHNvZnR3YXJlIGZvdW5kYXRpb24gYWxsIiwiYnkgdGhlIGFwYWNoZSBzb2Z0d2FyZSIsImFwYWNoZSBzb2Z0d2FyZSBmb3VuZGF0aW9uIGh0dHAiLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIGh0dHAgd3d3IiwiZm91bmRhdGlvbiBodHRwIHd3dyBhcGFjaGUiLCJ3d3cgYXBhY2hlIG9yZyBhbHRlcm5hdGVseSIsImFwYWNoZSBvcmcgYWx0ZXJuYXRlbHkgdGhpcyIsInRoZSBuYW1lIGFwYWNoZSBhbmQiLCJuYW1lIGFwYWNoZSBhbmQgYXBhY2hlIiwiYXBhY2hlIGFuZCBhcGFjaGUgc29mdHdhcmUiLCJhbmQgYXBhY2hlIHNvZnR3YXJlIGZvdW5kYXRpb24iLCJhcGFjaGUgc29mdHdhcmUgZm91bmRhdGlvbiBtdXN0Iiwic29mdHdhcmUgZm91bmRhdGlvbiBtdXN0IG5vdCIsImZvdW5kYXRpb24gbXVzdCBub3QgYmUiLCJiZSBjYWxsZWQgYXBhY2hlIGV4IiwiY2FsbGVkIGFwYWNoZSBleCBqYWthcnRhIiwiYXBhY2hlIGV4IGpha2FydGEgYXBhY2hlIiwiZXggamFrYXJ0YSBhcGFjaGUgb3IiLCJqYWthcnRhIGFwYWNoZSBvciBhcGFjaGUiLCJhcGFjaGUgb3IgYXBhY2hlIGNvbW1vbnMiLCJvciBhcGFjaGUgY29tbW9ucyBub3IiLCJhcGFjaGUgY29tbW9ucyBub3IgbWF5IiwiY29tbW9ucyBub3IgbWF5IGFwYWNoZSIsIm5vciBtYXkgYXBhY2hlIGV4IiwibWF5IGFwYWNoZSBleCB0aGUiLCJhcGFjaGUgZXggdGhlIG5hbWVzIiwiZXggdGhlIG5hbWVzIGFwcGVhciIsInRoZSBuYW1lcyBhcHBlYXIgaW4iLCJuYW1lcyBhcHBlYXIgaW4gdGhlaXIiLCJhcGFjaGUgc29mdHdhcmUgZm91bmRhdGlvbiB0aGlzIiwic29mdHdhcmUgZm91bmRhdGlvbiB0aGlzIHNvZnR3YXJlIiwiZm91bmRhdGlvbiB0aGlzIHNvZnR3YXJlIGlzIiwic2hhbGwgdGhlIGFwYWNoZSBzb2Z0d2FyZSIsImFwYWNoZSBzb2Z0d2FyZSBmb3VuZGF0aW9uIG9yIiwic29mdHdhcmUgZm91bmRhdGlvbiBvciBpdHMiLCJhcGFjaGUgc29mdHdhcmUgZm91bmRhdGlvbiBmb3IiLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIGZvciBtb3JlIiwiZm91bmRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiIsIm9uIHRoZSBhcGFjaGUgc29mdHdhcmUiLCJhcGFjaGUgc29mdHdhcmUgZm91bmRhdGlvbiBwbGVhc2UiLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIHBsZWFzZSBzZWUiLCJmb3VuZGF0aW9uIHBsZWFzZSBzZWUgaHR0cCIsInd3dyBhcGFjaGUgb3JnIHBvcnRpb25zIiwiYXBhY2hlIG9yZyBwb3J0aW9ucyBvZiIsIm9yZyBwb3J0aW9ucyBvZiB0aGlzIiwidGhpcyBzb2Z0d2FyZSBhcmUgYmFzZWQiLCJzb2Z0d2FyZSBhcmUgYmFzZWQgdXBvbiIsImFyZSBiYXNlZCB1cG9uIHB1YmxpYyIsImJhc2VkIHVwb24gcHVibGljIGRvbWFpbiIsInVwb24gcHVibGljIGRvbWFpbiBzb2Z0d2FyZSIsInB1YmxpYyBkb21haW4gc29mdHdhcmUgb3JpZ2luYWxseSIsImRvbWFpbiBzb2Z0d2FyZSBvcmlnaW5hbGx5IHdyaXR0ZW4iLCJzb2Z0d2FyZSBvcmlnaW5hbGx5IHdyaXR0ZW4gYXQiLCJvcmlnaW5hbGx5IHdyaXR0ZW4gYXQgdGhlIiwiYXBhY2hlIGxpY2Vuc2UgMSAxIGNvcHlyaWdodCIsImxpY2Vuc2UgMSAxIGNvcHlyaWdodCBjIiwiMSAxIGNvcHlyaWdodCBjIDIwMDAiLCIxIGNvcHlyaWdodCBjIDIwMDAgdGhlIiwiY29weXJpZ2h0IGMgMjAwMCB0aGUgYXBhY2hlIiwiYyAyMDAwIHRoZSBhcGFjaGUgc29mdHdhcmUiLCIyMDAwIHRoZSBhcGFjaGUgc29mdHdhcmUgZm91bmRhdGlvbiIsInRoZSBhcGFjaGUgc29mdHdhcmUgZm91bmRhdGlvbiBhbGwiLCJhcGFjaGUgc29mdHdhcmUgZm91bmRhdGlvbiBhbGwgcmlnaHRzIiwiZm91bmRhdGlvbiBhbGwgcmlnaHRzIHJlc2VydmVkIHJlZGlzdHJpYnV0aW9uIiwiZGV2ZWxvcGVkIGJ5IHRoZSBhcGFjaGUgc29mdHdhcmUiLCJieSB0aGUgYXBhY2hlIHNvZnR3YXJlIGZvdW5kYXRpb24iLCJ0aGUgYXBhY2hlIHNvZnR3YXJlIGZvdW5kYXRpb24gaHR0cCIsImFwYWNoZSBzb2Z0d2FyZSBmb3VuZGF0aW9uIGh0dHAgd3d3Iiwic29mdHdhcmUgZm91bmRhdGlvbiBodHRwIHd3dyBhcGFjaGUiLCJmb3VuZGF0aW9uIGh0dHAgd3d3IGFwYWNoZSBvcmciLCJodHRwIHd3dyBhcGFjaGUgb3JnIGFsdGVybmF0ZWx5Iiwid3d3IGFwYWNoZSBvcmcgYWx0ZXJuYXRlbHkgdGhpcyIsImFwYWNoZSBvcmcgYWx0ZXJuYXRlbHkgdGhpcyBhY2tub3dsZWRnbWVudCIsImFwcGVhciA0IHRoZSBuYW1lIGFwYWNoZSIsIjQgdGhlIG5hbWUgYXBhY2hlIGFuZCIsInRoZSBuYW1lIGFwYWNoZSBhbmQgYXBhY2hlIiwibmFtZSBhcGFjaGUgYW5kIGFwYWNoZSBzb2Z0d2FyZSIsImFwYWNoZSBhbmQgYXBhY2hlIHNvZnR3YXJlIGZvdW5kYXRpb24iLCJhbmQgYXBhY2hlIHNvZnR3YXJlIGZvdW5kYXRpb24gbXVzdCIsImFwYWNoZSBzb2Z0d2FyZSBmb3VuZGF0aW9uIG11c3Qgbm90Iiwic29mdHdhcmUgZm91bmRhdGlvbiBtdXN0IG5vdCBiZSIsImZvdW5kYXRpb24gbXVzdCBub3QgYmUgdXNlZCIsIm5vdCBiZSBjYWxsZWQgYXBhY2hlIGV4IiwiYmUgY2FsbGVkIGFwYWNoZSBleCBqYWthcnRhIiwiY2FsbGVkIGFwYWNoZSBleCBqYWthcnRhIGFwYWNoZSIsImFwYWNoZSBleCBqYWthcnRhIGFwYWNoZSBvciIsImV4IGpha2FydGEgYXBhY2hlIG9yIGFwYWNoZSIsImpha2FydGEgYXBhY2hlIG9yIGFwYWNoZSBjb21tb25zIiwiYXBhY2hlIG9yIGFwYWNoZSBjb21tb25zIG5vciIsIm9yIGFwYWNoZSBjb21tb25zIG5vciBtYXkiLCJhcGFjaGUgY29tbW9ucyBub3IgbWF5IGFwYWNoZSIsImNvbW1vbnMgbm9yIG1heSBhcGFjaGUgZXgiLCJub3IgbWF5IGFwYWNoZSBleCB0aGUiLCJtYXkgYXBhY2hlIGV4IHRoZSBuYW1lcyIsImFwYWNoZSBleCB0aGUgbmFtZXMgYXBwZWFyIiwiZXggdGhlIG5hbWVzIGFwcGVhciBpbiIsInRoZSBuYW1lcyBhcHBlYXIgaW4gdGhlaXIiLCJuYW1lcyBhcHBlYXIgaW4gdGhlaXIgbmFtZSIsInBlcm1pc3Npb24gb2YgdGhlIGFwYWNoZSBzb2Z0d2FyZSIsInRoZSBhcGFjaGUgc29mdHdhcmUgZm91bmRhdGlvbiB0aGlzIiwiYXBhY2hlIHNvZnR3YXJlIGZvdW5kYXRpb24gdGhpcyBzb2Z0d2FyZSIsInNvZnR3YXJlIGZvdW5kYXRpb24gdGhpcyBzb2Z0d2FyZSBpcyIsImZvdW5kYXRpb24gdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCIsImV2ZW50IHNoYWxsIHRoZSBhcGFjaGUgc29mdHdhcmUiLCJzaGFsbCB0aGUgYXBhY2hlIHNvZnR3YXJlIGZvdW5kYXRpb24iLCJ0aGUgYXBhY2hlIHNvZnR3YXJlIGZvdW5kYXRpb24gb3IiLCJhcGFjaGUgc29mdHdhcmUgZm91bmRhdGlvbiBvciBpdHMiLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIG9yIGl0cyBjb250cmlidXRvcnMiLCJiZWhhbGYgb2YgdGhlIGFwYWNoZSBzb2Z0d2FyZSIsInRoZSBhcGFjaGUgc29mdHdhcmUgZm91bmRhdGlvbiBmb3IiLCJhcGFjaGUgc29mdHdhcmUgZm91bmRhdGlvbiBmb3IgbW9yZSIsInNvZnR3YXJlIGZvdW5kYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24iLCJmb3VuZGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIiwiaW5mb3JtYXRpb24gb24gdGhlIGFwYWNoZSBzb2Z0d2FyZSIsIm9uIHRoZSBhcGFjaGUgc29mdHdhcmUgZm91bmRhdGlvbiIsInRoZSBhcGFjaGUgc29mdHdhcmUgZm91bmRhdGlvbiBwbGVhc2UiLCJhcGFjaGUgc29mdHdhcmUgZm91bmRhdGlvbiBwbGVhc2Ugc2VlIiwic29mdHdhcmUgZm91bmRhdGlvbiBwbGVhc2Ugc2VlIGh0dHAiLCJmb3VuZGF0aW9uIHBsZWFzZSBzZWUgaHR0cCB3d3ciLCJodHRwIHd3dyBhcGFjaGUgb3JnIHBvcnRpb25zIiwid3d3IGFwYWNoZSBvcmcgcG9ydGlvbnMgb2YiLCJhcGFjaGUgb3JnIHBvcnRpb25zIG9mIHRoaXMiLCJvcmcgcG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSIsIm9mIHRoaXMgc29mdHdhcmUgYXJlIGJhc2VkIiwidGhpcyBzb2Z0d2FyZSBhcmUgYmFzZWQgdXBvbiIsInNvZnR3YXJlIGFyZSBiYXNlZCB1cG9uIHB1YmxpYyIsImFyZSBiYXNlZCB1cG9uIHB1YmxpYyBkb21haW4iLCJiYXNlZCB1cG9uIHB1YmxpYyBkb21haW4gc29mdHdhcmUiLCJ1cG9uIHB1YmxpYyBkb21haW4gc29mdHdhcmUgb3JpZ2luYWxseSIsInB1YmxpYyBkb21haW4gc29mdHdhcmUgb3JpZ2luYWxseSB3cml0dGVuIiwiZG9tYWluIHNvZnR3YXJlIG9yaWdpbmFsbHkgd3JpdHRlbiBhdCIsInNvZnR3YXJlIG9yaWdpbmFsbHkgd3JpdHRlbiBhdCB0aGUiLCJvcmlnaW5hbGx5IHdyaXR0ZW4gYXQgdGhlIG5hdGlvbmFsIl19LHsibGljZW5zZVRleHRzIjpbIkFwYWNoZSBMaWNlbnNlXG5cblZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDRcblxuaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLyBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT05cblxuICAgMS4gRGVmaW5pdGlvbnMuXG5cbiAgICAgIFxuXG4gICAgICBcIkxpY2Vuc2VcIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LlxuXG4gICAgICBcblxuICAgICAgXCJMaWNlbnNvclwiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuXG5cbiAgICAgIFxuXG4gICAgICBcIkxlZ2FsIEVudGl0eVwiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcImNvbnRyb2xcIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgICAgXG5cbiAgICAgIFwiWW91XCIgKG9yIFwiWW91clwiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIFxuXG4gICAgICBcIlNvdXJjZVwiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuXG5cbiAgICAgIFxuXG4gICAgICBcIk9iamVjdFwiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLCBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuXG5cbiAgICAgIFxuXG4gICAgICBcIldvcmtcIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuXG5cbiAgICAgIFxuXG4gICAgICBcIkRlcml2YXRpdmUgV29ya3NcIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZSBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbiBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuXG5cbiAgICAgIFxuXG4gICAgICBcIkNvbnRyaWJ1dGlvblwiIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcInN1Ym1pdHRlZFwiIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0IGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzIFwiTm90IGEgQ29udHJpYnV0aW9uLlwiXG5cbiAgICAgIFxuXG4gICAgICBcIkNvbnRyaWJ1dG9yXCIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZCBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay5cblxuICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZSBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLlxuXG4gICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yayBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuXG5cbiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdSBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmRcblxuICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmRcblxuICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kXG5cbiAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhIFwiTk9USUNFXCIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvciBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZCBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbiBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZSBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS5cblxuICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvciBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuXG5cbiAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5IHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy5cblxuICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZSBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS5cblxuICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2ggQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueSByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZSBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLlxuXG4gICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24gb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OU1xuXG5BUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmsuXG5cblRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFwiW11cIiByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3QgaW5jbHVkZSB0aGUgYnJhY2tldHMhKSBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYSBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlIHNhbWUgXCJwcmludGVkIHBhZ2VcIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy5cblxuQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG5cbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cblxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5cbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcblxuV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcblxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIl0sImxpY2Vuc2VJZHMiOlsiQXBhY2hlLTIuMCJdLCJrZXl3b3JkcyI6WyIyIDAgamFudWFyeSIsIjAgamFudWFyeSAyMDA0IiwiamFudWFyeSAyMDA0IGh0dHAiLCIyMDA0IGh0dHAgd3d3Iiwib3JnIGxpY2Vuc2VzIHRlcm1zIiwibGljZW5zZXMgdGVybXMgYW5kIiwidmVyc2lvbiAyIDAgamFudWFyeSIsIjIgMCBqYW51YXJ5IDIwMDQiLCIwIGphbnVhcnkgMjAwNCBodHRwIiwiamFudWFyeSAyMDA0IGh0dHAgd3d3IiwiMjAwNCBodHRwIHd3dyBhcGFjaGUiLCJhcGFjaGUgb3JnIGxpY2Vuc2VzIHRlcm1zIiwib3JnIGxpY2Vuc2VzIHRlcm1zIGFuZCIsImxpY2Vuc2VzIHRlcm1zIGFuZCBjb25kaXRpb25zIiwibGljZW5zZSAyIDAgdW5sZXNzIiwibGljZW5zZSB2ZXJzaW9uIDIgMCBqYW51YXJ5IiwidmVyc2lvbiAyIDAgamFudWFyeSAyMDA0IiwiMiAwIGphbnVhcnkgMjAwNCBodHRwIiwiMCBqYW51YXJ5IDIwMDQgaHR0cCB3d3ciLCJqYW51YXJ5IDIwMDQgaHR0cCB3d3cgYXBhY2hlIiwiMjAwNCBodHRwIHd3dyBhcGFjaGUgb3JnIiwid3d3IGFwYWNoZSBvcmcgbGljZW5zZXMgdGVybXMiLCJhcGFjaGUgb3JnIGxpY2Vuc2VzIHRlcm1zIGFuZCIsIm9yZyBsaWNlbnNlcyB0ZXJtcyBhbmQgY29uZGl0aW9ucyIsImxpY2Vuc2VzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciIsImhvdyB0byBhcHBseSB0aGUgYXBhY2hlIiwid29yayB0byBhcHBseSB0aGUgYXBhY2hlIiwib3duZXIgbGljZW5zZWQgdW5kZXIgdGhlIGFwYWNoZSIsImxpY2Vuc2UgYXQgaHR0cCB3d3cgYXBhY2hlIiwibGljZW5zZXMgbGljZW5zZSAyIDAgdW5sZXNzIiwibGljZW5zZSAyIDAgdW5sZXNzIHJlcXVpcmVkIl19LHsibGljZW5zZVRleHRzIjpbIlRoZSBcIkFydGlzdGljIExpY2Vuc2VcIlxuXG5QcmVhbWJsZVxuXG5UaGUgaW50ZW50IG9mIHRoaXMgZG9jdW1lbnQgaXMgdG8gc3RhdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSBQYWNrYWdlIG1heSBiZSBjb3BpZWQsIHN1Y2ggdGhhdCB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYWludGFpbnMgc29tZSBzZW1ibGFuY2Ugb2YgYXJ0aXN0aWMgY29udHJvbCBvdmVyIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgcGFja2FnZSwgd2hpbGUgZ2l2aW5nIHRoZSB1c2VycyBvZiB0aGUgcGFja2FnZSB0aGUgcmlnaHQgdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoZSBQYWNrYWdlIGluIGEgbW9yZS1vci1sZXNzIGN1c3RvbWFyeSBmYXNoaW9uLCBwbHVzIHRoZSByaWdodCB0byBtYWtlIHJlYXNvbmFibGUgbW9kaWZpY2F0aW9ucy5cblxuRGVmaW5pdGlvbnM6XG5cblwiUGFja2FnZVwiIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlciwgYW5kIGRlcml2YXRpdmVzIG9mIHRoYXQgY29sbGVjdGlvbiBvZiBmaWxlcyBjcmVhdGVkIHRocm91Z2ggdGV4dHVhbCBtb2RpZmljYXRpb24uXG5cblwiU3RhbmRhcmQgVmVyc2lvblwiIHJlZmVycyB0byBzdWNoIGEgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQsIG9yIGhhcyBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgd2lzaGVzIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyIGFzIHNwZWNpZmllZCBiZWxvdy5cblxuXCJDb3B5cmlnaHQgSG9sZGVyXCIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yIGNvcHlyaWdodHMgZm9yIHRoZSBwYWNrYWdlLlxuXG5cIllvdVwiIGlzIHlvdSwgaWYgeW91J3JlIHRoaW5raW5nIGFib3V0IGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoaXMgUGFja2FnZS5cblxuXCJSZWFzb25hYmxlIGNvcHlpbmcgZmVlXCIgaXMgd2hhdGV2ZXIgeW91IGNhbiBqdXN0aWZ5IG9uIHRoZSBiYXNpcyBvZiBtZWRpYSBjb3N0LCBkdXBsaWNhdGlvbiBjaGFyZ2VzLCB0aW1lIG9mIHBlb3BsZSBpbnZvbHZlZCwgYW5kIHNvIG9uLiAoWW91IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGp1c3RpZnkgaXQgdG8gdGhlIENvcHlyaWdodCBIb2xkZXIsIGJ1dCBvbmx5IHRvIHRoZSBjb21wdXRpbmcgY29tbXVuaXR5IGF0IGxhcmdlIGFzIGEgbWFya2V0IHRoYXQgbXVzdCBiZWFyIHRoZSBmZWUuKVxuXG5cIkZyZWVseSBBdmFpbGFibGVcIiBtZWFucyB0aGF0IG5vIGZlZSBpcyBjaGFyZ2VkIGZvciB0aGUgaXRlbSBpdHNlbGYsIHRob3VnaCB0aGVyZSBtYXkgYmUgZmVlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUgaXRlbS4gSXQgYWxzbyBtZWFucyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIGl0ZW0gbWF5IHJlZGlzdHJpYnV0ZSBpdCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHRoZXkgcmVjZWl2ZWQgaXQuXG5cbiAgIDEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLlxuXG4gICAyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyIG1vZGlmaWNhdGlvbnMgZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIG9yIGZyb20gdGhlIENvcHlyaWdodCBIb2xkZXIuIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24uXG5cbiAgIDMuIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhpcyBQYWNrYWdlIGluIGFueSB3YXksIHByb3ZpZGVkIHRoYXQgeW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUgc3RhdGluZyBob3cgYW5kIHdoZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEpIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UgbWFrZSB0aGVtIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBwbGFjaW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWFqb3IgYXJjaGl2ZSBzaXRlIHN1Y2ggYXMgdXVuZXQudXUubmV0LCBvciBieSBhbGxvd2luZyB0aGUgQ29weXJpZ2h0IEhvbGRlciB0byBpbmNsdWRlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgUGFja2FnZS5cblxuICAgICAgYikgdXNlIHRoZSBtb2RpZmllZCBQYWNrYWdlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uLlxuXG4gICAgICBjKSByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBzbyB0aGUgbmFtZXMgZG8gbm90IGNvbmZsaWN0IHdpdGggc3RhbmRhcmQgZXhlY3V0YWJsZXMsIHdoaWNoIG11c3QgYWxzbyBiZSBwcm92aWRlZCwgYW5kIHByb3ZpZGUgYSBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSB0aGF0IGNsZWFybHkgZG9jdW1lbnRzIGhvdyBpdCBkaWZmZXJzIGZyb20gdGhlIFN0YW5kYXJkIFZlcnNpb24uXG5cbiAgICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLlxuXG4gICA0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSBkaXN0cmlidXRlIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZXMgYW5kIGxpYnJhcnkgZmlsZXMsIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLlxuXG4gICAgICBiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZiB0aGUgUGFja2FnZSB3aXRoIHlvdXIgbW9kaWZpY2F0aW9ucy5cblxuICAgICAgYykgZ2l2ZSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCBhbmQgY2xlYXJseSBkb2N1bWVudCB0aGUgZGlmZmVyZW5jZXMgaW4gbWFudWFsIHBhZ2VzIChvciBlcXVpdmFsZW50KSwgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLlxuXG4gICAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlci5cblxuICAgNS4gWW91IG1heSBjaGFyZ2UgYSByZWFzb25hYmxlIGNvcHlpbmcgZmVlIGZvciBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgUGFja2FnZS4gWW91IG1heSBjaGFyZ2UgYW55IGZlZSB5b3UgY2hvb3NlIGZvciBzdXBwb3J0IG9mIHRoaXMgUGFja2FnZS4gWW91IG1heSBub3QgY2hhcmdlIGEgZmVlIGZvciB0aGlzIFBhY2thZ2UgaXRzZWxmLiBIb3dldmVyLCB5b3UgbWF5IGRpc3RyaWJ1dGUgdGhpcyBQYWNrYWdlIGluIGFnZ3JlZ2F0ZSB3aXRoIG90aGVyIChwb3NzaWJseSBjb21tZXJjaWFsKSBwcm9ncmFtcyBhcyBwYXJ0IG9mIGEgbGFyZ2VyIChwb3NzaWJseSBjb21tZXJjaWFsKSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gcHJvdmlkZWQgdGhhdCB5b3UgZG8gbm90IGFkdmVydGlzZSB0aGlzIFBhY2thZ2UgYXMgYSBwcm9kdWN0IG9mIHlvdXIgb3duLiBZb3UgbWF5IGVtYmVkIHRoaXMgUGFja2FnZSdzIGludGVycHJldGVyIHdpdGhpbiBhbiBleGVjdXRhYmxlIG9mIHlvdXJzIChieSBsaW5raW5nKTsgdGhpcyBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgYSBtZXJlIGZvcm0gb2YgYWdncmVnYXRpb24sIHByb3ZpZGVkIHRoYXQgdGhlIGNvbXBsZXRlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIGludGVycHJldGVyIGlzIHNvIGVtYmVkZGVkLlxuXG4gICA2LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZCBhcyBvdXRwdXQgZnJvbSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGRvIG5vdCBhdXRvbWF0aWNhbGx5IGZhbGwgdW5kZXIgdGhlIGNvcHlyaWdodCBvZiB0aGlzIFBhY2thZ2UsIGJ1dCBiZWxvbmcgdG8gd2hvZXZlciBnZW5lcmF0ZWQgdGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcyBQYWNrYWdlLiBJZiBzdWNoIHNjcmlwdHMgb3IgbGlicmFyeSBmaWxlcyBhcmUgYWdncmVnYXRlZCB3aXRoIHRoaXMgUGFja2FnZSB2aWEgdGhlIHNvLWNhbGxlZCBcInVuZHVtcFwiIG9yIFwidW5leGVjXCIgbWV0aG9kcyBvZiBwcm9kdWNpbmcgYSBiaW5hcnkgZXhlY3V0YWJsZSBpbWFnZSwgdGhlbiBkaXN0cmlidXRpb24gb2Ygc3VjaCBhbiBpbWFnZSBzaGFsbCBuZWl0aGVyIGJlIGNvbnN0cnVlZCBhcyBhIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2Ugbm9yIHNoYWxsIGl0IGZhbGwgdW5kZXIgdGhlIHJlc3RyaWN0aW9ucyBvZiBQYXJhZ3JhcGhzIDMgYW5kIDQsIHByb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCByZXByZXNlbnQgc3VjaCBhbiBleGVjdXRhYmxlIGltYWdlIGFzIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2UuXG5cbiAgIDcuIEMgc3Vicm91dGluZXMgKG9yIGNvbXBhcmFibHkgY29tcGlsZWQgc3Vicm91dGluZXMgaW4gb3RoZXIgbGFuZ3VhZ2VzKSBzdXBwbGllZCBieSB5b3UgYW5kIGxpbmtlZCBpbnRvIHRoaXMgUGFja2FnZSBpbiBvcmRlciB0byBlbXVsYXRlIHN1YnJvdXRpbmVzIGFuZCB2YXJpYWJsZXMgb2YgdGhlIGxhbmd1YWdlIGRlZmluZWQgYnkgdGhpcyBQYWNrYWdlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYXJlIHRoZSBlcXVpdmFsZW50IG9mIGlucHV0IGFzIGluIFBhcmFncmFwaCA2LCBwcm92aWRlZCB0aGVzZSBzdWJyb3V0aW5lcyBkbyBub3QgY2hhbmdlIHRoZSBsYW5ndWFnZSBpbiBhbnkgd2F5IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gZmFpbCB0aGUgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlIGxhbmd1YWdlLlxuXG4gICA4LiBBZ2dyZWdhdGlvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aCBhIGNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGlzIGFsd2F5cyBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgdXNlIG9mIHRoaXMgUGFja2FnZSBpcyBlbWJlZGRlZDsgdGhhdCBpcywgd2hlbiBubyBvdmVydCBhdHRlbXB0IGlzIG1hZGUgdG8gbWFrZSB0aGlzIFBhY2thZ2UncyBpbnRlcmZhY2VzIHZpc2libGUgdG8gdGhlIGVuZCB1c2VyIG9mIHRoZSBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbi4gU3VjaCB1c2Ugc2hhbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBhIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2UuXG5cbiAgIDkuIFRoZSBuYW1lIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cbiAgIDEwLiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVGhlIEVuZCJdLCJsaWNlbnNlSWRzIjpbIkFydGlzdGljLTEuMC1QZXJsIl0sImtleXdvcmRzIjpbInlvdXIgb3duIHlvdSIsIm93biB5b3UgbWF5Iiwib2YgeW91ciBvd24geW91IiwieW91ciBvd24geW91IG1heSIsIm93biB5b3UgbWF5IGVtYmVkIiwicHJvZHVjdCBvZiB5b3VyIG93biB5b3UiLCJvZiB5b3VyIG93biB5b3UgbWF5IiwieW91ciBvd24geW91IG1heSBlbWJlZCIsIm93biB5b3UgbWF5IGVtYmVkIHRoaXMiLCJsYW5ndWFnZSA4IGFnZ3JlZ2F0aW9uIG9mIHRoaXMiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIEFydGlzdGljIExpY2Vuc2VcblxuUHJlYW1ibGVcblxuVGhlIGludGVudCBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIHN0YXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgUGFja2FnZSBtYXkgYmUgY29waWVkLCBzdWNoIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zIHNvbWUgc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIHBhY2thZ2UsIHdoaWxlIGdpdmluZyB0aGUgdXNlcnMgb2YgdGhlIHBhY2thZ2UgdGhlIHJpZ2h0IHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGUgUGFja2FnZSBpbiBhIG1vcmUtb3ItbGVzcyBjdXN0b21hcnkgZmFzaGlvbiwgcGx1cyB0aGUgcmlnaHQgdG8gbWFrZSByZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuXG5cbkRlZmluaXRpb25zOlxuXG5cIlBhY2thZ2VcIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgZmlsZXMgZGlzdHJpYnV0ZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gb2YgZmlsZXMgY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLlxuXG5cIlN0YW5kYXJkIFZlcnNpb25cIiByZWZlcnMgdG8gc3VjaCBhIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHdpc2hlcyBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci5cblxuXCJDb3B5cmlnaHQgSG9sZGVyXCIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yIGNvcHlyaWdodHMgZm9yIHRoZSBwYWNrYWdlLlxuXG5cIllvdVwiIGlzIHlvdSwgaWYgeW91J3JlIHRoaW5raW5nIGFib3V0IGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoaXMgUGFja2FnZS5cblxuXCJSZWFzb25hYmxlIGNvcHlpbmcgZmVlXCIgaXMgd2hhdGV2ZXIgeW91IGNhbiBqdXN0aWZ5IG9uIHRoZSBiYXNpcyBvZiBtZWRpYSBjb3N0LCBkdXBsaWNhdGlvbiBjaGFyZ2VzLCB0aW1lIG9mIHBlb3BsZSBpbnZvbHZlZCwgYW5kIHNvIG9uLiAoWW91IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGp1c3RpZnkgaXQgdG8gdGhlIENvcHlyaWdodCBIb2xkZXIsIGJ1dCBvbmx5IHRvIHRoZSBjb21wdXRpbmcgY29tbXVuaXR5IGF0IGxhcmdlIGFzIGEgbWFya2V0IHRoYXQgbXVzdCBiZWFyIHRoZSBmZWUuKVxuXG5cIkZyZWVseSBBdmFpbGFibGVcIiBtZWFucyB0aGF0IG5vIGZlZSBpcyBjaGFyZ2VkIGZvciB0aGUgaXRlbSBpdHNlbGYsIHRob3VnaCB0aGVyZSBtYXkgYmUgZmVlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUgaXRlbS4gSXQgYWxzbyBtZWFucyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIGl0ZW0gbWF5IHJlZGlzdHJpYnV0ZSBpdCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHRoZXkgcmVjZWl2ZWQgaXQuXG5cbiAgIDEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLlxuXG4gICAyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyIG1vZGlmaWNhdGlvbnMgZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIG9yIGZyb20gdGhlIENvcHlyaWdodCBIb2xkZXIuIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24uXG5cbiAgIDMuIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhpcyBQYWNrYWdlIGluIGFueSB3YXksIHByb3ZpZGVkIHRoYXQgeW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUgc3RhdGluZyBob3cgYW5kIHdoZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEpIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UgbWFrZSB0aGVtIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBwbGFjaW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWFqb3IgYXJjaGl2ZSBzaXRlIHN1Y2ggYXMgZnRwLnV1Lm5ldCwgb3IgYnkgYWxsb3dpbmcgdGhlIENvcHlyaWdodCBIb2xkZXIgdG8gaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIFBhY2thZ2UuXG5cbiAgICAgIGIpIHVzZSB0aGUgbW9kaWZpZWQgUGFja2FnZSBvbmx5IHdpdGhpbiB5b3VyIGNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbi5cblxuICAgICAgYykgcmVuYW1lIGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgc28gdGhlIG5hbWVzIGRvIG5vdCBjb25mbGljdCB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQsIGFuZCBwcm92aWRlIGEgc2VwYXJhdGUgbWFudWFsIHBhZ2UgZm9yIGVhY2ggbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGUgdGhhdCBjbGVhcmx5IGRvY3VtZW50cyBob3cgaXQgZGlmZmVycyBmcm9tIHRoZSBTdGFuZGFyZCBWZXJzaW9uLlxuXG4gICAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlci5cblxuICAgNC4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzpcblxuICAgICAgYSkgZGlzdHJpYnV0ZSBhIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJ5IGZpbGVzLCB0b2dldGhlciB3aXRoIGluc3RydWN0aW9ucyAoaW4gdGhlIG1hbnVhbCBwYWdlIG9yIGVxdWl2YWxlbnQpIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi5cblxuICAgICAgYikgYWNjb21wYW55IHRoZSBkaXN0cmlidXRpb24gd2l0aCB0aGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ugb2YgdGhlIFBhY2thZ2Ugd2l0aCB5b3VyIG1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIGMpIGFjY29tcGFueSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBTdGFuZGFyZCBWZXJzaW9uIGV4ZWN1dGFibGVzLCBnaXZpbmcgdGhlIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBub24tc3RhbmRhcmQgbmFtZXMsIGFuZCBjbGVhcmx5IGRvY3VtZW50aW5nIHRoZSBkaWZmZXJlbmNlcyBpbiBtYW51YWwgcGFnZXMgKG9yIGVxdWl2YWxlbnQpLCB0b2dldGhlciB3aXRoIGluc3RydWN0aW9ucyBvbiB3aGVyZSB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uXG5cbiAgICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLlxuXG4gICA1LiBZb3UgbWF5IGNoYXJnZSBhIHJlYXNvbmFibGUgY29weWluZyBmZWUgZm9yIGFueSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLiBZb3UgbWF5IGNoYXJnZSBhbnkgZmVlIHlvdSBjaG9vc2UgZm9yIHN1cHBvcnQgb2YgdGhpcyBQYWNrYWdlLiBZb3UgbWF5IG5vdCBjaGFyZ2UgYSBmZWUgZm9yIHRoaXMgUGFja2FnZSBpdHNlbGYuIEhvd2V2ZXIsIHlvdSBtYXkgZGlzdHJpYnV0ZSB0aGlzIFBhY2thZ2UgaW4gYWdncmVnYXRlIHdpdGggb3RoZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpIHByb2dyYW1zIGFzIHBhcnQgb2YgYSBsYXJnZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBwcm92aWRlZCB0aGF0IHlvdSBkbyBub3QgYWR2ZXJ0aXNlIHRoaXMgUGFja2FnZSBhcyBhIHByb2R1Y3Qgb2YgeW91ciBvd24uXG5cbiAgIDYuIFRoZSBzY3JpcHRzIGFuZCBsaWJyYXJ5IGZpbGVzIHN1cHBsaWVkIGFzIGlucHV0IHRvIG9yIHByb2R1Y2VkIGFzIG91dHB1dCBmcm9tIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgZG8gbm90IGF1dG9tYXRpY2FsbHkgZmFsbCB1bmRlciB0aGUgY29weXJpZ2h0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGJlbG9uZyB0byB3aG9tZXZlciBnZW5lcmF0ZWQgdGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcyBQYWNrYWdlLlxuXG4gICA3LiBDIG9yIHBlcmwgc3Vicm91dGluZXMgc3VwcGxpZWQgYnkgeW91IGFuZCBsaW5rZWQgaW50byB0aGlzIFBhY2thZ2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGlzIFBhY2thZ2UuXG5cbiAgIDguQWdncmVnYXRpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGggYSBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBpcyBhbHdheXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIHVzZSBvZiB0aGlzIFBhY2thZ2UgaXMgZW1iZWRkZWQ7IHRoYXQgaXMsIHdoZW4gbm8gb3ZlcnQgYXR0ZW1wdCBpcyBtYWRlIHRvIG1ha2UgdGhpcyBQYWNrYWdlJ3MgaW50ZXJmYWNlcyB2aXNpYmxlIHRvIHRoZSBlbmQgdXNlciBvZiB0aGUgY29tbWVyY2lhbCBkaXN0cmlidXRpb24uIFN1Y2ggdXNlIHNoYWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgYSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLlxuXG4gICA5LiBUaGUgbmFtZSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG4gICAxMC4gVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRoZSBFbmQiXSwibGljZW5zZUlkcyI6WyJBcnRpc3RpYy0xLjAtY2w4Il0sImtleXdvcmRzIjpbInBhY2thZ2UgOCBhZ2dyZWdhdGlvbiIsInRoaXMgcGFja2FnZSA4IGFnZ3JlZ2F0aW9uIiwicGFja2FnZSA4IGFnZ3JlZ2F0aW9uIG9mIiwib2YgdGhpcyBwYWNrYWdlIDggYWdncmVnYXRpb24iLCJ0aGlzIHBhY2thZ2UgOCBhZ2dyZWdhdGlvbiBvZiIsInBhY2thZ2UgOCBhZ2dyZWdhdGlvbiBvZiB0aGlzIl19LHsibGljZW5zZVRleHRzIjpbIlRoZSBBcnRpc3RpYyBMaWNlbnNlXG5cblByZWFtYmxlXG5cblRoZSBpbnRlbnQgb2YgdGhpcyBkb2N1bWVudCBpcyB0byBzdGF0ZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBhIFBhY2thZ2UgbWF5IGJlIGNvcGllZCwgc3VjaCB0aGF0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1haW50YWlucyBzb21lIHNlbWJsYW5jZSBvZiBhcnRpc3RpYyBjb250cm9sIG92ZXIgdGhlIGRldmVsb3BtZW50IG9mIHRoZSBwYWNrYWdlLCB3aGlsZSBnaXZpbmcgdGhlIHVzZXJzIG9mIHRoZSBwYWNrYWdlIHRoZSByaWdodCB0byB1c2UgYW5kIGRpc3RyaWJ1dGUgdGhlIFBhY2thZ2UgaW4gYSBtb3JlLW9yLWxlc3MgY3VzdG9tYXJ5IGZhc2hpb24sIHBsdXMgdGhlIHJpZ2h0IHRvIG1ha2UgcmVhc29uYWJsZSBtb2RpZmljYXRpb25zLlxuXG5EZWZpbml0aW9uczpcblxuXCJQYWNrYWdlXCIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIG9mIGZpbGVzIGNyZWF0ZWQgdGhyb3VnaCB0ZXh0dWFsIG1vZGlmaWNhdGlvbi5cblxuXCJTdGFuZGFyZCBWZXJzaW9uXCIgcmVmZXJzIHRvIHN1Y2ggYSBQYWNrYWdlIGlmIGl0IGhhcyBub3QgYmVlbiBtb2RpZmllZCwgb3IgaGFzIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB3aXNoZXMgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIuXG5cblwiQ29weXJpZ2h0IEhvbGRlclwiIGlzIHdob2V2ZXIgaXMgbmFtZWQgaW4gdGhlIGNvcHlyaWdodCBvciBjb3B5cmlnaHRzIGZvciB0aGUgcGFja2FnZS5cblxuXCJZb3VcIiBpcyB5b3UsIGlmIHlvdSdyZSB0aGlua2luZyBhYm91dCBjb3B5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGlzIFBhY2thZ2UuXG5cblwiUmVhc29uYWJsZSBjb3B5aW5nIGZlZVwiIGlzIHdoYXRldmVyIHlvdSBjYW4ganVzdGlmeSBvbiB0aGUgYmFzaXMgb2YgbWVkaWEgY29zdCwgZHVwbGljYXRpb24gY2hhcmdlcywgdGltZSBvZiBwZW9wbGUgaW52b2x2ZWQsIGFuZCBzbyBvbi4gKFlvdSB3aWxsIG5vdCBiZSByZXF1aXJlZCB0byBqdXN0aWZ5IGl0IHRvIHRoZSBDb3B5cmlnaHQgSG9sZGVyLCBidXQgb25seSB0byB0aGUgY29tcHV0aW5nIGNvbW11bml0eSBhdCBsYXJnZSBhcyBhIG1hcmtldCB0aGF0IG11c3QgYmVhciB0aGUgZmVlLilcblxuXCJGcmVlbHkgQXZhaWxhYmxlXCIgbWVhbnMgdGhhdCBubyBmZWUgaXMgY2hhcmdlZCBmb3IgdGhlIGl0ZW0gaXRzZWxmLCB0aG91Z2ggdGhlcmUgbWF5IGJlIGZlZXMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlIGl0ZW0uIEl0IGFsc28gbWVhbnMgdGhhdCByZWNpcGllbnRzIG9mIHRoZSBpdGVtIG1heSByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyB0aGV5IHJlY2VpdmVkIGl0LlxuXG4gICAxLiBZb3UgbWF5IG1ha2UgYW5kIGdpdmUgYXdheSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIHNvdXJjZSBmb3JtIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoaXMgUGFja2FnZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBkdXBsaWNhdGUgYWxsIG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgYXNzb2NpYXRlZCBkaXNjbGFpbWVycy5cblxuICAgMi4gWW91IG1heSBhcHBseSBidWcgZml4ZXMsIHBvcnRhYmlsaXR5IGZpeGVzIGFuZCBvdGhlciBtb2RpZmljYXRpb25zIGRlcml2ZWQgZnJvbSB0aGUgUHVibGljIERvbWFpbiBvciBmcm9tIHRoZSBDb3B5cmlnaHQgSG9sZGVyLiBBIFBhY2thZ2UgbW9kaWZpZWQgaW4gc3VjaCBhIHdheSBzaGFsbCBzdGlsbCBiZSBjb25zaWRlcmVkIHRoZSBTdGFuZGFyZCBWZXJzaW9uLlxuXG4gICAzLiBZb3UgbWF5IG90aGVyd2lzZSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoaXMgUGFja2FnZSBpbiBhbnkgd2F5LCBwcm92aWRlZCB0aGF0IHlvdSBpbnNlcnQgYSBwcm9taW5lbnQgbm90aWNlIGluIGVhY2ggY2hhbmdlZCBmaWxlIHN0YXRpbmcgaG93IGFuZCB3aGVuIHlvdSBjaGFuZ2VkIHRoYXQgZmlsZSwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSBwbGFjZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFB1YmxpYyBEb21haW4gb3Igb3RoZXJ3aXNlIG1ha2UgdGhlbSBGcmVlbHkgQXZhaWxhYmxlLCBzdWNoIGFzIGJ5IHBvc3Rpbmcgc2FpZCBtb2RpZmljYXRpb25zIHRvIFVzZW5ldCBvciBhbiBlcXVpdmFsZW50IG1lZGl1bSwgb3IgcGxhY2luZyB0aGUgbW9kaWZpY2F0aW9ucyBvbiBhIG1ham9yIGFyY2hpdmUgc2l0ZSBzdWNoIGFzIGZ0cC51dS5uZXQsIG9yIGJ5IGFsbG93aW5nIHRoZSBDb3B5cmlnaHQgSG9sZGVyIHRvIGluY2x1ZGUgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBQYWNrYWdlLlxuXG4gICAgICBiKSB1c2UgdGhlIG1vZGlmaWVkIFBhY2thZ2Ugb25seSB3aXRoaW4geW91ciBjb3Jwb3JhdGlvbiBvciBvcmdhbml6YXRpb24uXG5cbiAgICAgIGMpIHJlbmFtZSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHNvIHRoZSBuYW1lcyBkbyBub3QgY29uZmxpY3Qgd2l0aCBzdGFuZGFyZCBleGVjdXRhYmxlcywgd2hpY2ggbXVzdCBhbHNvIGJlIHByb3ZpZGVkLCBhbmQgcHJvdmlkZSBhIHNlcGFyYXRlIG1hbnVhbCBwYWdlIGZvciBlYWNoIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlIHRoYXQgY2xlYXJseSBkb2N1bWVudHMgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUgU3RhbmRhcmQgVmVyc2lvbi5cblxuICAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuXG5cbiAgIDQuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSwgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEpIGRpc3RyaWJ1dGUgYSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBleGVjdXRhYmxlcyBhbmQgbGlicmFyeSBmaWxlcywgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgKGluIHRoZSBtYW51YWwgcGFnZSBvciBlcXVpdmFsZW50KSBvbiB3aGVyZSB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uXG5cbiAgICAgIGIpIGFjY29tcGFueSB0aGUgZGlzdHJpYnV0aW9uIHdpdGggdGhlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIG9mIHRoZSBQYWNrYWdlIHdpdGggeW91ciBtb2RpZmljYXRpb25zLlxuXG4gICAgICBjKSBhY2NvbXBhbnkgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgU3RhbmRhcmQgVmVyc2lvbiBleGVjdXRhYmxlcywgZ2l2aW5nIHRoZSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCBhbmQgY2xlYXJseSBkb2N1bWVudGluZyB0aGUgZGlmZmVyZW5jZXMgaW4gbWFudWFsIHBhZ2VzIChvciBlcXVpdmFsZW50KSwgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLlxuXG4gICAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlci5cblxuICAgNS4gWW91IG1heSBjaGFyZ2UgYSByZWFzb25hYmxlIGNvcHlpbmcgZmVlIGZvciBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgUGFja2FnZS4gWW91IG1heSBjaGFyZ2UgYW55IGZlZSB5b3UgY2hvb3NlIGZvciBzdXBwb3J0IG9mIHRoaXMgUGFja2FnZS4gWW91IG1heSBub3QgY2hhcmdlIGEgZmVlIGZvciB0aGlzIFBhY2thZ2UgaXRzZWxmLiBIb3dldmVyLCB5b3UgbWF5IGRpc3RyaWJ1dGUgdGhpcyBQYWNrYWdlIGluIGFnZ3JlZ2F0ZSB3aXRoIG90aGVyIChwb3NzaWJseSBjb21tZXJjaWFsKSBwcm9ncmFtcyBhcyBwYXJ0IG9mIGEgbGFyZ2VyIChwb3NzaWJseSBjb21tZXJjaWFsKSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gcHJvdmlkZWQgdGhhdCB5b3UgZG8gbm90IGFkdmVydGlzZSB0aGlzIFBhY2thZ2UgYXMgYSBwcm9kdWN0IG9mIHlvdXIgb3duLlxuXG4gICA2LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZCBhcyBvdXRwdXQgZnJvbSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGRvIG5vdCBhdXRvbWF0aWNhbGx5IGZhbGwgdW5kZXIgdGhlIGNvcHlyaWdodCBvZiB0aGlzIFBhY2thZ2UsIGJ1dCBiZWxvbmcgdG8gd2hvbWV2ZXIgZ2VuZXJhdGVkIHRoZW0sIGFuZCBtYXkgYmUgc29sZCBjb21tZXJjaWFsbHksIGFuZCBtYXkgYmUgYWdncmVnYXRlZCB3aXRoIHRoaXMgUGFja2FnZS5cblxuICAgNy4gQyBvciBwZXJsIHN1YnJvdXRpbmVzIHN1cHBsaWVkIGJ5IHlvdSBhbmQgbGlua2VkIGludG8gdGhpcyBQYWNrYWdlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBQYWNrYWdlLlxuXG4gICA4LiBUaGUgbmFtZSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG4gICA5LiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVGhlIEVuZCJdLCJsaWNlbnNlSWRzIjpbIkFydGlzdGljLTEuMCJdLCJrZXl3b3JkcyI6bnVsbH0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIEFydGlzdGljIExpY2Vuc2UgMi4wXG5cbkNvcHlyaWdodCAoYykgMjAwMC0yMDA2LCBUaGUgUGVybCBGb3VuZGF0aW9uLlxuXG5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuXG5cblByZWFtYmxlXG5cblRoaXMgbGljZW5zZSBlc3RhYmxpc2hlcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggYSBnaXZlbiBmcmVlIHNvZnR3YXJlIFBhY2thZ2UgbWF5IGJlIGNvcGllZCwgbW9kaWZpZWQsIGRpc3RyaWJ1dGVkLCBhbmQvb3IgcmVkaXN0cmlidXRlZC4gVGhlIGludGVudCBpcyB0aGF0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1haW50YWlucyBzb21lIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhhdCBQYWNrYWdlIHdoaWxlIHN0aWxsIGtlZXBpbmcgdGhlIFBhY2thZ2UgYXZhaWxhYmxlIGFzIG9wZW4gc291cmNlIGFuZCBmcmVlIHNvZnR3YXJlLlxuXG5Zb3UgYXJlIGFsd2F5cyBwZXJtaXR0ZWQgdG8gbWFrZSBhcnJhbmdlbWVudHMgd2hvbGx5IG91dHNpZGUgb2YgdGhpcyBsaWNlbnNlIGRpcmVjdGx5IHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIgb2YgYSBnaXZlbiBQYWNrYWdlLiBJZiB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGRvIG5vdCBwZXJtaXQgdGhlIGZ1bGwgdXNlIHRoYXQgeW91IHByb3Bvc2UgdG8gbWFrZSBvZiB0aGUgUGFja2FnZSwgeW91IHNob3VsZCBjb250YWN0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIGFuZCBzZWVrIGEgZGlmZmVyZW50IGxpY2Vuc2luZyBhcnJhbmdlbWVudC5cblxuRGVmaW5pdGlvbnNcblxuICAgXG5cbiAgIFwiQ29weXJpZ2h0IEhvbGRlclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsKHMpIG9yIG9yZ2FuaXphdGlvbihzKSBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIGVudGlyZSBQYWNrYWdlLlxuXG4gICBcblxuICAgXCJDb250cmlidXRvclwiIG1lYW5zIGFueSBwYXJ0eSB0aGF0IGhhcyBjb250cmlidXRlZCBjb2RlIG9yIG90aGVyIG1hdGVyaWFsIHRvIHRoZSBQYWNrYWdlLCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIncyBwcm9jZWR1cmVzLlxuXG4gICBcblxuICAgXCJZb3VcIiBhbmQgXCJ5b3VyXCIgbWVhbnMgYW55IHBlcnNvbiB3aG8gd291bGQgbGlrZSB0byBjb3B5LCBkaXN0cmlidXRlLCBvciBtb2RpZnkgdGhlIFBhY2thZ2UuXG5cbiAgIFxuXG4gICBcIlBhY2thZ2VcIiBtZWFucyB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlciwgYW5kIGRlcml2YXRpdmVzIG9mIHRoYXQgY29sbGVjdGlvbiBhbmQvb3Igb2YgdGhvc2UgZmlsZXMuIEEgZ2l2ZW4gUGFja2FnZSBtYXkgY29uc2lzdCBvZiBlaXRoZXIgdGhlIFN0YW5kYXJkIFZlcnNpb24sIG9yIGEgTW9kaWZpZWQgVmVyc2lvbi5cblxuICAgXG5cbiAgIFwiRGlzdHJpYnV0ZVwiIG1lYW5zIHByb3ZpZGluZyBhIGNvcHkgb2YgdGhlIFBhY2thZ2Ugb3IgbWFraW5nIGl0IGFjY2Vzc2libGUgdG8gYW55b25lIGVsc2UsIG9yIGluIHRoZSBjYXNlIG9mIGEgY29tcGFueSBvciBvcmdhbml6YXRpb24sIHRvIG90aGVycyBvdXRzaWRlIG9mIHlvdXIgY29tcGFueSBvciBvcmdhbml6YXRpb24uXG5cbiAgIFxuXG4gICBcIkRpc3RyaWJ1dG9yIEZlZVwiIG1lYW5zIGFueSBmZWUgdGhhdCB5b3UgY2hhcmdlIGZvciBEaXN0cmlidXRpbmcgdGhpcyBQYWNrYWdlIG9yIHByb3ZpZGluZyBzdXBwb3J0IGZvciB0aGlzIFBhY2thZ2UgdG8gYW5vdGhlciBwYXJ0eS4gSXQgZG9lcyBub3QgbWVhbiBsaWNlbnNpbmcgZmVlcy5cblxuICAgXG5cbiAgIFwiU3RhbmRhcmQgVmVyc2lvblwiIHJlZmVycyB0byB0aGUgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQsIG9yIGhhcyBiZWVuIG1vZGlmaWVkIG9ubHkgaW4gd2F5cyBleHBsaWNpdGx5IHJlcXVlc3RlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlci5cblxuICAgXG5cbiAgIFwiTW9kaWZpZWQgVmVyc2lvblwiIG1lYW5zIHRoZSBQYWNrYWdlLCBpZiBpdCBoYXMgYmVlbiBjaGFuZ2VkLCBhbmQgc3VjaCBjaGFuZ2VzIHdlcmUgbm90IGV4cGxpY2l0bHkgcmVxdWVzdGVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyLlxuXG4gICBcblxuICAgXCJPcmlnaW5hbCBMaWNlbnNlXCIgbWVhbnMgdGhpcyBBcnRpc3RpYyBMaWNlbnNlIGFzIERpc3RyaWJ1dGVkIHdpdGggdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIFBhY2thZ2UsIGluIGl0cyBjdXJyZW50IHZlcnNpb24gb3IgYXMgaXQgbWF5IGJlIG1vZGlmaWVkIGJ5IFRoZSBQZXJsIEZvdW5kYXRpb24gaW4gdGhlIGZ1dHVyZS5cblxuICAgXG5cbiAgIFwiU291cmNlXCIgZm9ybSBtZWFucyB0aGUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24gc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlIFBhY2thZ2UuXG5cbiAgIFxuXG4gICBcIkNvbXBpbGVkXCIgZm9ybSBtZWFucyB0aGUgY29tcGlsZWQgYnl0ZWNvZGUsIG9iamVjdCBjb2RlLCBiaW5hcnksIG9yIGFueSBvdGhlciBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgdGhlIFNvdXJjZSBmb3JtLlxuXG5QZXJtaXNzaW9uIGZvciBVc2UgYW5kIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvblxuXG4gICAoMSkgWW91IGFyZSBwZXJtaXR0ZWQgdG8gdXNlIHRoZSBTdGFuZGFyZCBWZXJzaW9uIGFuZCBjcmVhdGUgYW5kIHVzZSBNb2RpZmllZCBWZXJzaW9ucyBmb3IgYW55IHB1cnBvc2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZG8gbm90IERpc3RyaWJ1dGUgdGhlIE1vZGlmaWVkIFZlcnNpb24uXG5cblBlcm1pc3Npb25zIGZvciBSZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvblxuXG4gICAoMikgWW91IG1heSBEaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIGluIGFueSBtZWRpdW0gd2l0aG91dCByZXN0cmljdGlvbiwgZWl0aGVyIGdyYXRpcyBvciBmb3IgYSBEaXN0cmlidXRvciBGZWUsIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLiBBdCB5b3VyIGRpc2NyZXRpb24sIHN1Y2ggdmVyYmF0aW0gY29waWVzIG1heSBvciBtYXkgbm90IGluY2x1ZGUgYSBDb21waWxlZCBmb3JtIG9mIHRoZSBQYWNrYWdlLlxuXG4gICAoMykgWW91IG1heSBhcHBseSBhbnkgYnVnIGZpeGVzLCBwb3J0YWJpbGl0eSBjaGFuZ2VzLCBhbmQgb3RoZXIgbW9kaWZpY2F0aW9ucyBtYWRlIGF2YWlsYWJsZSBmcm9tIHRoZSBDb3B5cmlnaHQgSG9sZGVyLiBUaGUgcmVzdWx0aW5nIFBhY2thZ2Ugd2lsbCBzdGlsbCBiZSBjb25zaWRlcmVkIHRoZSBTdGFuZGFyZCBWZXJzaW9uLCBhbmQgYXMgc3VjaCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIE9yaWdpbmFsIExpY2Vuc2UuXG5cbkRpc3RyaWJ1dGlvbiBvZiBNb2RpZmllZCBWZXJzaW9ucyBvZiB0aGUgUGFja2FnZSBhcyBTb3VyY2VcblxuICAgKDQpIFlvdSBtYXkgRGlzdHJpYnV0ZSB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYXMgU291cmNlIChlaXRoZXIgZ3JhdGlzIG9yIGZvciBhIERpc3RyaWJ1dG9yIEZlZSwgYW5kIHdpdGggb3Igd2l0aG91dCBhIENvbXBpbGVkIGZvcm0gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24pIHByb3ZpZGVkIHRoYXQgeW91IGNsZWFybHkgZG9jdW1lbnQgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUgU3RhbmRhcmQgVmVyc2lvbiwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGRvY3VtZW50aW5nIGFueSBub24tc3RhbmRhcmQgZmVhdHVyZXMsIGV4ZWN1dGFibGVzLCBvciBtb2R1bGVzLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIChhKSBtYWtlIHRoZSBNb2RpZmllZCBWZXJzaW9uIGF2YWlsYWJsZSB0byB0aGUgQ29weXJpZ2h0IEhvbGRlciBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiwgdW5kZXIgdGhlIE9yaWdpbmFsIExpY2Vuc2UsIHNvIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWF5IGluY2x1ZGUgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBTdGFuZGFyZCBWZXJzaW9uLlxuXG4gICAgICAoYikgZW5zdXJlIHRoYXQgaW5zdGFsbGF0aW9uIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBkb2VzIG5vdCBwcmV2ZW50IHRoZSB1c2VyIGluc3RhbGxpbmcgb3IgcnVubmluZyB0aGUgU3RhbmRhcmQgVmVyc2lvbi4gSW4gYWRkaXRpb24sIHRoZSBNb2RpZmllZCBWZXJzaW9uIG11c3QgYmVhciBhIG5hbWUgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbi5cblxuICAgICAgKGMpIGFsbG93IGFueW9uZSB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvIG1ha2UgdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIGF2YWlsYWJsZSB0byBvdGhlcnMgdW5kZXJcblxuICAgICAgICAgKGkpIHRoZSBPcmlnaW5hbCBMaWNlbnNlIG9yXG5cbiAgICAgICAgIChpaSkgYSBsaWNlbnNlIHRoYXQgcGVybWl0cyB0aGUgbGljZW5zZWUgdG8gZnJlZWx5IGNvcHksIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVzaW5nIHRoZSBzYW1lIGxpY2Vuc2luZyB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRoZSBjb3B5IHRoYXQgdGhlIGxpY2Vuc2VlIHJlY2VpdmVkLCBhbmQgcmVxdWlyZXMgdGhhdCB0aGUgU291cmNlIGZvcm0gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24sIGFuZCBvZiBhbnkgd29ya3MgZGVyaXZlZCBmcm9tIGl0LCBiZSBtYWRlIGZyZWVseSBhdmFpbGFibGUgaW4gdGhhdCBsaWNlbnNlIGZlZXMgYXJlIHByb2hpYml0ZWQgYnV0IERpc3RyaWJ1dG9yIEZlZXMgYXJlIGFsbG93ZWQuXG5cbkRpc3RyaWJ1dGlvbiBvZiBDb21waWxlZCBGb3JtcyBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvciBNb2RpZmllZCBWZXJzaW9ucyB3aXRob3V0IHRoZSBTb3VyY2VcblxuICAgKDUpIFlvdSBtYXkgRGlzdHJpYnV0ZSBDb21waWxlZCBmb3JtcyBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiB3aXRob3V0IHRoZSBTb3VyY2UsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgY29tcGxldGUgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBnZXQgdGhlIFNvdXJjZSBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbi4gU3VjaCBpbnN0cnVjdGlvbnMgbXVzdCBiZSB2YWxpZCBhdCB0aGUgdGltZSBvZiB5b3VyIGRpc3RyaWJ1dGlvbi4gSWYgdGhlc2UgaW5zdHJ1Y3Rpb25zLCBhdCBhbnkgdGltZSB3aGlsZSB5b3UgYXJlIGNhcnJ5aW5nIG91dCBzdWNoIGRpc3RyaWJ1dGlvbiwgYmVjb21lIGludmFsaWQsIHlvdSBtdXN0IHByb3ZpZGUgbmV3IGluc3RydWN0aW9ucyBvbiBkZW1hbmQgb3IgY2Vhc2UgZnVydGhlciBkaXN0cmlidXRpb24uIElmIHlvdSBwcm92aWRlIHZhbGlkIGluc3RydWN0aW9ucyBvciBjZWFzZSBkaXN0cmlidXRpb24gd2l0aGluIHRoaXJ0eSBkYXlzIGFmdGVyIHlvdSBiZWNvbWUgYXdhcmUgdGhhdCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBpbnZhbGlkLCB0aGVuIHlvdSBkbyBub3QgZm9yZmVpdCBhbnkgb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBsaWNlbnNlLlxuXG4gICAoNikgWW91IG1heSBEaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBpbiBDb21waWxlZCBmb3JtIHdpdGhvdXQgdGhlIFNvdXJjZSwgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGggU2VjdGlvbiA0IHdpdGggcmVzcGVjdCB0byB0aGUgU291cmNlIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uLlxuXG5BZ2dyZWdhdGluZyBvciBMaW5raW5nIHRoZSBQYWNrYWdlXG5cbiAgICg3KSBZb3UgbWF5IGFnZ3JlZ2F0ZSB0aGUgUGFja2FnZSAoZWl0aGVyIHRoZSBTdGFuZGFyZCBWZXJzaW9uIG9yIE1vZGlmaWVkIFZlcnNpb24pIHdpdGggb3RoZXIgcGFja2FnZXMgYW5kIERpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZyBhZ2dyZWdhdGlvbiBwcm92aWRlZCB0aGF0IHlvdSBkbyBub3QgY2hhcmdlIGEgbGljZW5zaW5nIGZlZSBmb3IgdGhlIFBhY2thZ2UuIERpc3RyaWJ1dG9yIEZlZXMgYXJlIHBlcm1pdHRlZCwgYW5kIGxpY2Vuc2luZyBmZWVzIGZvciBvdGhlciBjb21wb25lbnRzIGluIHRoZSBhZ2dyZWdhdGlvbiBhcmUgcGVybWl0dGVkLiBUaGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGFwcGx5IHRvIHRoZSB1c2UgYW5kIERpc3RyaWJ1dGlvbiBvZiB0aGUgU3RhbmRhcmQgb3IgTW9kaWZpZWQgVmVyc2lvbnMgYXMgaW5jbHVkZWQgaW4gdGhlIGFnZ3JlZ2F0aW9uLlxuXG4gICAoOCkgWW91IGFyZSBwZXJtaXR0ZWQgdG8gbGluayBNb2RpZmllZCBhbmQgU3RhbmRhcmQgVmVyc2lvbnMgd2l0aCBvdGhlciB3b3JrcywgdG8gZW1iZWQgdGhlIFBhY2thZ2UgaW4gYSBsYXJnZXIgd29yayBvZiB5b3VyIG93biwgb3IgdG8gYnVpbGQgc3RhbmQtYWxvbmUgYmluYXJ5IG9yIGJ5dGVjb2RlIHZlcnNpb25zIG9mIGFwcGxpY2F0aW9ucyB0aGF0IGluY2x1ZGUgdGhlIFBhY2thZ2UsIGFuZCBEaXN0cmlidXRlIHRoZSByZXN1bHQgd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhlIHJlc3VsdCBkb2VzIG5vdCBleHBvc2UgYSBkaXJlY3QgaW50ZXJmYWNlIHRvIHRoZSBQYWNrYWdlLlxuXG5JdGVtcyBUaGF0IGFyZSBOb3QgQ29uc2lkZXJlZCBQYXJ0IG9mIGEgTW9kaWZpZWQgVmVyc2lvblxuXG4gICAoOSkgV29ya3MgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBtb2R1bGVzIGFuZCBzY3JpcHRzKSB0aGF0IG1lcmVseSBleHRlbmQgb3IgbWFrZSB1c2Ugb2YgdGhlIFBhY2thZ2UsIGRvIG5vdCwgYnkgdGhlbXNlbHZlcywgY2F1c2UgdGhlIFBhY2thZ2UgdG8gYmUgYSBNb2RpZmllZCBWZXJzaW9uLiBJbiBhZGRpdGlvbiwgc3VjaCB3b3JrcyBhcmUgbm90IGNvbnNpZGVyZWQgcGFydHMgb2YgdGhlIFBhY2thZ2UgaXRzZWxmLCBhbmQgYXJlIG5vdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuXG5cbkdlbmVyYWwgUHJvdmlzaW9uc1xuXG4gICAoMTApIEFueSB1c2UsIG1vZGlmaWNhdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU3RhbmRhcmQgb3IgTW9kaWZpZWQgVmVyc2lvbnMgaXMgZ292ZXJuZWQgYnkgdGhpcyBBcnRpc3RpYyBMaWNlbnNlLiBCeSB1c2luZywgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUGFja2FnZSwgeW91IGFjY2VwdCB0aGlzIGxpY2Vuc2UuIERvIG5vdCB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGUgUGFja2FnZSwgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBsaWNlbnNlLlxuXG4gICAoMTEpIElmIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBoYXMgYmVlbiBkZXJpdmVkIGZyb20gYSBNb2RpZmllZCBWZXJzaW9uIG1hZGUgYnkgc29tZW9uZSBvdGhlciB0aGFuIHlvdSwgeW91IGFyZSBuZXZlcnRoZWxlc3MgcmVxdWlyZWQgdG8gZW5zdXJlIHRoYXQgeW91ciBNb2RpZmllZCBWZXJzaW9uIGNvbXBsaWVzIHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIGxpY2Vuc2UuXG5cbiAgICgxMikgVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IHlvdSB0aGUgcmlnaHQgdG8gdXNlIGFueSB0cmFkZW1hcmssIHNlcnZpY2UgbWFyaywgdHJhZGVuYW1lLCBvciBsb2dvIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyLlxuXG4gICAoMTMpIFRoaXMgbGljZW5zZSBpbmNsdWRlcyB0aGUgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCBmcmVlLW9mLWNoYXJnZSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFBhY2thZ2Ugd2l0aCByZXNwZWN0IHRvIGFueSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSBQYWNrYWdlLiBJZiB5b3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0pIGFnYWluc3QgYW55IHBhcnR5IGFsbGVnaW5nIHRoYXQgdGhlIFBhY2thZ2UgY29uc3RpdHV0ZXMgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIHRoaXMgQXJ0aXN0aWMgTGljZW5zZSB0byB5b3Ugc2hhbGwgdGVybWluYXRlIG9uIHRoZSBkYXRlIHRoYXQgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLlxuXG4gICAoMTQpIERpc2NsYWltZXIgb2YgV2FycmFudHk6XG5cbiAgIFRIRSBQQUNLQUdFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUy4gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBOT04tSU5GUklOR0VNRU5UIEFSRSBESVNDTEFJTUVEIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIFlPVVIgTE9DQUwgTEFXLiBVTkxFU1MgUkVRVUlSRUQgQlkgTEFXLCBOTyBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SIFdJTEwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSEUgUEFDS0FHRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iXSwibGljZW5zZUlkcyI6WyJBcnRpc3RpYy0yLjAiXSwia2V5d29yZHMiOlsiYXJ0aXN0aWMgbGljZW5zZSAyIiwiYyAyMDAwIDIwMDYiLCIyMDAwIDIwMDYgdGhlIiwiMjAwNiB0aGUgcGVybCIsInBlcmwgZm91bmRhdGlvbiBldmVyeW9uZSIsImZvdW5kYXRpb24gZXZlcnlvbmUgaXMiLCJhbGxvd2VkIHByZWFtYmxlIHRoaXMiLCJ0aGlzIGxpY2Vuc2UgZXN0YWJsaXNoZXMiLCJsaWNlbnNlIGVzdGFibGlzaGVzIHRoZSIsImVzdGFibGlzaGVzIHRoZSB0ZXJtcyIsIndoaWNoIGEgZ2l2ZW4iLCJhIGdpdmVuIGZyZWUiLCJnaXZlbiBmcmVlIHNvZnR3YXJlIiwiZnJlZSBzb2Z0d2FyZSBwYWNrYWdlIiwic29mdHdhcmUgcGFja2FnZSBtYXkiLCJiZSBjb3BpZWQgbW9kaWZpZWQiLCJjb3BpZWQgbW9kaWZpZWQgZGlzdHJpYnV0ZWQiLCJtb2RpZmllZCBkaXN0cmlidXRlZCBhbmQiLCJhbmQgb3IgcmVkaXN0cmlidXRlZCIsIm9yIHJlZGlzdHJpYnV0ZWQgdGhlIiwicmVkaXN0cmlidXRlZCB0aGUgaW50ZW50IiwiaW50ZW50IGlzIHRoYXQiLCJpcyB0aGF0IHRoZSIsIm1haW50YWlucyBzb21lIGFydGlzdGljIiwic29tZSBhcnRpc3RpYyBjb250cm9sIiwiZGV2ZWxvcG1lbnQgb2YgdGhhdCIsIm9mIHRoYXQgcGFja2FnZSIsInRoYXQgcGFja2FnZSB3aGlsZSIsInBhY2thZ2Ugd2hpbGUgc3RpbGwiLCJ3aGlsZSBzdGlsbCBrZWVwaW5nIiwic3RpbGwga2VlcGluZyB0aGUiLCJrZWVwaW5nIHRoZSBwYWNrYWdlIiwidGhlIHBhY2thZ2UgYXZhaWxhYmxlIiwicGFja2FnZSBhdmFpbGFibGUgYXMiLCJhdmFpbGFibGUgYXMgb3BlbiIsIm9wZW4gc291cmNlIGFuZCIsInNvdXJjZSBhbmQgZnJlZSIsImFuZCBmcmVlIHNvZnR3YXJlIiwieW91IGFyZSBhbHdheXMiLCJhcmUgYWx3YXlzIHBlcm1pdHRlZCIsImFsd2F5cyBwZXJtaXR0ZWQgdG8iLCJwZXJtaXR0ZWQgdG8gbWFrZSIsInRvIG1ha2UgYXJyYW5nZW1lbnRzIiwibWFrZSBhcnJhbmdlbWVudHMgd2hvbGx5IiwiYXJyYW5nZW1lbnRzIHdob2xseSBvdXRzaWRlIiwid2hvbGx5IG91dHNpZGUgb2YiLCJvdXRzaWRlIG9mIHRoaXMiLCJsaWNlbnNlIGRpcmVjdGx5IHdpdGgiLCJob2xkZXIgb2YgYSIsIm9mIGEgZ2l2ZW4iLCJnaXZlbiBwYWNrYWdlIGlmIiwiZG8gbm90IHBlcm1pdCIsIm5vdCBwZXJtaXQgdGhlIiwicGVybWl0IHRoZSBmdWxsIiwidGhlIGZ1bGwgdXNlIiwiZnVsbCB1c2UgdGhhdCIsInVzZSB0aGF0IHlvdSIsInRoYXQgeW91IHByb3Bvc2UiLCJ5b3UgcHJvcG9zZSB0byIsInByb3Bvc2UgdG8gbWFrZSIsInRvIG1ha2Ugb2YiLCJtYWtlIG9mIHRoZSIsInBhY2thZ2UgeW91IHNob3VsZCIsInlvdSBzaG91bGQgY29udGFjdCIsInNob3VsZCBjb250YWN0IHRoZSIsImNvbnRhY3QgdGhlIGNvcHlyaWdodCIsImhvbGRlciBhbmQgc2VlayIsImFuZCBzZWVrIGEiLCJzZWVrIGEgZGlmZmVyZW50IiwiYSBkaWZmZXJlbnQgbGljZW5zaW5nIiwiZGlmZmVyZW50IGxpY2Vuc2luZyBhcnJhbmdlbWVudCIsImxpY2Vuc2luZyBhcnJhbmdlbWVudCBkZWZpbml0aW9ucyIsImFycmFuZ2VtZW50IGRlZmluaXRpb25zIGNvcHlyaWdodCIsImRlZmluaXRpb25zIGNvcHlyaWdodCBob2xkZXIiLCJjb3B5cmlnaHQgaG9sZGVyIG1lYW5zIiwicyBvciBvcmdhbml6YXRpb24iLCJvciBvcmdhbml6YXRpb24gcyIsIm9yZ2FuaXphdGlvbiBzIG5hbWVkIiwicyBuYW1lZCBpbiIsImVudGlyZSBwYWNrYWdlIGNvbnRyaWJ1dG9yIiwicGFja2FnZSBjb250cmlidXRvciBtZWFucyIsIm1lYW5zIGFueSBwYXJ0eSIsImFueSBwYXJ0eSB0aGF0IiwicGFydHkgdGhhdCBoYXMiLCJoYXMgY29udHJpYnV0ZWQgY29kZSIsImNvbnRyaWJ1dGVkIGNvZGUgb3IiLCJwYWNrYWdlIGluIGFjY29yZGFuY2UiLCJob2xkZXIgcyBwcm9jZWR1cmVzIiwicyBwcm9jZWR1cmVzIHlvdSIsInByb2NlZHVyZXMgeW91IGFuZCIsInBlcnNvbiB3aG8gd291bGQiLCJ3aG8gd291bGQgbGlrZSIsImxpa2UgdG8gY29weSIsIm1vZGlmeSB0aGUgcGFja2FnZSIsInRoZSBwYWNrYWdlIHBhY2thZ2UiLCJwYWNrYWdlIHBhY2thZ2UgbWVhbnMiLCJwYWNrYWdlIG1lYW5zIHRoZSIsIm1lYW5zIHRoZSBjb2xsZWN0aW9uIiwidGhhdCBjb2xsZWN0aW9uIGFuZCIsImNvbGxlY3Rpb24gYW5kIG9yIiwiYW5kIG9yIG9mIiwib3Igb2YgdGhvc2UiLCJ0aG9zZSBmaWxlcyBhIiwiZmlsZXMgYSBnaXZlbiIsImdpdmVuIHBhY2thZ2UgbWF5IiwicGFja2FnZSBtYXkgY29uc2lzdCIsIm1heSBjb25zaXN0IG9mIiwiY29uc2lzdCBvZiBlaXRoZXIiLCJ2ZXJzaW9uIG9yIGEiLCJtb2RpZmllZCB2ZXJzaW9uIGRpc3RyaWJ1dGUiLCJ2ZXJzaW9uIGRpc3RyaWJ1dGUgbWVhbnMiLCJkaXN0cmlidXRlIG1lYW5zIHByb3ZpZGluZyIsIm1lYW5zIHByb3ZpZGluZyBhIiwidGhlIHBhY2thZ2Ugb3IiLCJwYWNrYWdlIG9yIG1ha2luZyIsIm9yIG1ha2luZyBpdCIsIm1ha2luZyBpdCBhY2Nlc3NpYmxlIiwiaXQgYWNjZXNzaWJsZSB0byIsImFjY2Vzc2libGUgdG8gYW55b25lIiwiZWxzZSBvciBpbiIsIm9mIGEgY29tcGFueSIsIm9yIG9yZ2FuaXphdGlvbiB0byIsIm9yZ2FuaXphdGlvbiB0byBvdGhlcnMiLCJ0byBvdGhlcnMgb3V0c2lkZSIsIm90aGVycyBvdXRzaWRlIG9mIiwib3V0c2lkZSBvZiB5b3VyIiwieW91ciBjb21wYW55IG9yIiwib3Igb3JnYW5pemF0aW9uIGRpc3RyaWJ1dG9yIiwib3JnYW5pemF0aW9uIGRpc3RyaWJ1dG9yIGZlZSIsImRpc3RyaWJ1dG9yIGZlZSBtZWFucyIsImZlZSBtZWFucyBhbnkiLCJtZWFucyBhbnkgZmVlIiwiYW55IGZlZSB0aGF0IiwiZmVlIHRoYXQgeW91IiwidGhhdCB5b3UgY2hhcmdlIiwiY2hhcmdlIGZvciBkaXN0cmlidXRpbmciLCJmb3IgZGlzdHJpYnV0aW5nIHRoaXMiLCJ0aGlzIHBhY2thZ2Ugb3IiLCJwYWNrYWdlIG9yIHByb3ZpZGluZyIsIm9yIHByb3ZpZGluZyBzdXBwb3J0IiwicHJvdmlkaW5nIHN1cHBvcnQgZm9yIiwiYW5vdGhlciBwYXJ0eSBpdCIsInBhcnR5IGl0IGRvZXMiLCJkb2VzIG5vdCBtZWFuIiwibm90IG1lYW4gbGljZW5zaW5nIiwibWVhbiBsaWNlbnNpbmcgZmVlcyIsImxpY2Vuc2luZyBmZWVzIHN0YW5kYXJkIiwiZmVlcyBzdGFuZGFyZCB2ZXJzaW9uIiwiYmVlbiBtb2RpZmllZCBvbmx5IiwibW9kaWZpZWQgb25seSBpbiIsIm9ubHkgaW4gd2F5cyIsImluIHdheXMgZXhwbGljaXRseSIsIndheXMgZXhwbGljaXRseSByZXF1ZXN0ZWQiLCJtb2RpZmllZCB2ZXJzaW9uIG1lYW5zIiwibWVhbnMgdGhlIHBhY2thZ2UiLCJiZWVuIGNoYW5nZWQgYW5kIiwiY2hhbmdlZCBhbmQgc3VjaCIsImFuZCBzdWNoIGNoYW5nZXMiLCJzdWNoIGNoYW5nZXMgd2VyZSIsImNoYW5nZXMgd2VyZSBub3QiLCJ3ZXJlIG5vdCBleHBsaWNpdGx5Iiwibm90IGV4cGxpY2l0bHkgcmVxdWVzdGVkIiwiY29weXJpZ2h0IGhvbGRlciBvcmlnaW5hbCIsImhvbGRlciBvcmlnaW5hbCBsaWNlbnNlIiwib3JpZ2luYWwgbGljZW5zZSBtZWFucyIsIm1lYW5zIHRoaXMgYXJ0aXN0aWMiLCJ3aXRoIHRoZSBzdGFuZGFyZCIsInBhY2thZ2UgaW4gaXRzIiwiaXRzIGN1cnJlbnQgdmVyc2lvbiIsImN1cnJlbnQgdmVyc2lvbiBvciIsInZlcnNpb24gb3IgYXMiLCJvciBhcyBpdCIsImJ5IHRoZSBwZXJsIiwicGVybCBmb3VuZGF0aW9uIGluIiwiZm91bmRhdGlvbiBpbiB0aGUiLCJ0aGUgZnV0dXJlIHNvdXJjZSIsImZ1dHVyZSBzb3VyY2UgZm9ybSIsInNvdXJjZSBmb3JtIG1lYW5zIiwiY29uZmlndXJhdGlvbiBmaWxlcyBmb3IiLCJ0aGUgcGFja2FnZSBjb21waWxlZCIsInBhY2thZ2UgY29tcGlsZWQgZm9ybSIsImNvbXBpbGVkIGZvcm0gbWVhbnMiLCJtZWFucyB0aGUgY29tcGlsZWQiLCJ0aGUgY29tcGlsZWQgYnl0ZWNvZGUiLCJjb21waWxlZCBieXRlY29kZSBvYmplY3QiLCJieXRlY29kZSBvYmplY3QgY29kZSIsIm9iamVjdCBjb2RlIGJpbmFyeSIsImNvZGUgYmluYXJ5IG9yIiwiYmluYXJ5IG9yIGFueSIsIm90aGVyIGZvcm0gcmVzdWx0aW5nIiwic291cmNlIGZvcm0gcGVybWlzc2lvbiIsImZvcm0gcGVybWlzc2lvbiBmb3IiLCJ1c2UgYW5kIG1vZGlmaWNhdGlvbiIsImFuZCBtb2RpZmljYXRpb24gd2l0aG91dCIsIndpdGhvdXQgZGlzdHJpYnV0aW9uIDEiLCJkaXN0cmlidXRpb24gMSB5b3UiLCJ2ZXJzaW9uIGFuZCBjcmVhdGUiLCJhbmQgY3JlYXRlIGFuZCIsImFuZCB1c2UgbW9kaWZpZWQiLCJ1c2UgbW9kaWZpZWQgdmVyc2lvbnMiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChjKSBcdTAwM2N5ZWFyXHUwMDNlIFx1MDAzY293bmVyXHUwMDNlIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEJlcmtlbGV5IFNvZnR3YXJlIERlc2lnbiwgSW5jLiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQmVya2VsZXkgU29mdHdhcmUgRGVzaWduLCBJbmMuIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiJdLCJsaWNlbnNlSWRzIjpbIkJTRC0xLUNsYXVzZSJdLCJrZXl3b3JkcyI6WyJmb2xsb3dpbmcgZGlzY2xhaW1lciB0aGlzIiwicHJvdmlkZWQgYnkgYmVya2VsZXkiLCJieSBiZXJrZWxleSBzb2Z0d2FyZSIsImRlc2lnbiBpbmMgYXMiLCJpbmMgYXMgaXMiLCJldmVudCBzaGFsbCBiZXJrZWxleSIsInNoYWxsIGJlcmtlbGV5IHNvZnR3YXJlIiwiZGVzaWduIGluYyBiZSIsInRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciB0aGlzIiwiZm9sbG93aW5nIGRpc2NsYWltZXIgdGhpcyBzb2Z0d2FyZSIsImlzIHByb3ZpZGVkIGJ5IGJlcmtlbGV5IiwicHJvdmlkZWQgYnkgYmVya2VsZXkgc29mdHdhcmUiLCJieSBiZXJrZWxleSBzb2Z0d2FyZSBkZXNpZ24iLCJzb2Z0d2FyZSBkZXNpZ24gaW5jIGFzIiwiZGVzaWduIGluYyBhcyBpcyIsImluYyBhcyBpcyBhbmQiLCJubyBldmVudCBzaGFsbCBiZXJrZWxleSIsImV2ZW50IHNoYWxsIGJlcmtlbGV5IHNvZnR3YXJlIiwic2hhbGwgYmVya2VsZXkgc29mdHdhcmUgZGVzaWduIiwic29mdHdhcmUgZGVzaWduIGluYyBiZSIsImRlc2lnbiBpbmMgYmUgbGlhYmxlIiwiYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciB0aGlzIiwidGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIHRoaXMgc29mdHdhcmUiLCJmb2xsb3dpbmcgZGlzY2xhaW1lciB0aGlzIHNvZnR3YXJlIGlzIiwic29mdHdhcmUgaXMgcHJvdmlkZWQgYnkgYmVya2VsZXkiLCJpcyBwcm92aWRlZCBieSBiZXJrZWxleSBzb2Z0d2FyZSIsInByb3ZpZGVkIGJ5IGJlcmtlbGV5IHNvZnR3YXJlIGRlc2lnbiIsImJ5IGJlcmtlbGV5IHNvZnR3YXJlIGRlc2lnbiBpbmMiLCJiZXJrZWxleSBzb2Z0d2FyZSBkZXNpZ24gaW5jIGFzIiwic29mdHdhcmUgZGVzaWduIGluYyBhcyBpcyIsImRlc2lnbiBpbmMgYXMgaXMgYW5kIiwiaW5jIGFzIGlzIGFuZCBhbnkiLCJpbiBubyBldmVudCBzaGFsbCBiZXJrZWxleSIsIm5vIGV2ZW50IHNoYWxsIGJlcmtlbGV5IHNvZnR3YXJlIiwiZXZlbnQgc2hhbGwgYmVya2VsZXkgc29mdHdhcmUgZGVzaWduIiwic2hhbGwgYmVya2VsZXkgc29mdHdhcmUgZGVzaWduIGluYyIsImJlcmtlbGV5IHNvZnR3YXJlIGRlc2lnbiBpbmMgYmUiLCJzb2Z0d2FyZSBkZXNpZ24gaW5jIGJlIGxpYWJsZSIsImRlc2lnbiBpbmMgYmUgbGlhYmxlIGZvciJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgRnJlZUJTRCBDb3B5cmlnaHQgQ29weXJpZ2h0IDE5OTItMjAxMiBUaGUgRnJlZUJTRCBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBGUkVFQlNEIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGUkVFQlNEIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5UaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiB0aGUgRnJlZUJTRCBQcm9qZWN0LiJdLCJsaWNlbnNlSWRzIjpbIkJTRC0yLUNsYXVzZS1GcmVlQlNEIl0sImtleXdvcmRzIjpbInRoZSBmcmVlYnNkIGNvcHlyaWdodCIsImZyZWVic2QgY29weXJpZ2h0IGNvcHlyaWdodCIsImNvcHlyaWdodCBjb3B5cmlnaHQgMTk5MiIsImNvcHlyaWdodCAxOTkyIDIwMTIiLCIxOTkyIDIwMTIgdGhlIiwiMjAxMiB0aGUgZnJlZWJzZCIsImZyZWVic2QgcHJvamVjdCBhbGwiLCJieSB0aGUgZnJlZWJzZCIsImZyZWVic2QgcHJvamVjdCBhcyIsInNoYWxsIHRoZSBmcmVlYnNkIiwiZnJlZWJzZCBwcm9qZWN0IG9yIiwicHJvamVjdCBvciBjb250cmlidXRvcnMiLCJvZiB0aGUgZnJlZWJzZCIsInRoZSBmcmVlYnNkIGNvcHlyaWdodCBjb3B5cmlnaHQiLCJmcmVlYnNkIGNvcHlyaWdodCBjb3B5cmlnaHQgMTk5MiIsImNvcHlyaWdodCBjb3B5cmlnaHQgMTk5MiAyMDEyIiwiY29weXJpZ2h0IDE5OTIgMjAxMiB0aGUiLCIxOTkyIDIwMTIgdGhlIGZyZWVic2QiLCIyMDEyIHRoZSBmcmVlYnNkIHByb2plY3QiLCJ0aGUgZnJlZWJzZCBwcm9qZWN0IGFsbCIsImZyZWVic2QgcHJvamVjdCBhbGwgcmlnaHRzIiwicHJvdmlkZWQgYnkgdGhlIGZyZWVic2QiLCJieSB0aGUgZnJlZWJzZCBwcm9qZWN0IiwidGhlIGZyZWVic2QgcHJvamVjdCBhcyIsImZyZWVic2QgcHJvamVjdCBhcyBpcyIsImV2ZW50IHNoYWxsIHRoZSBmcmVlYnNkIiwic2hhbGwgdGhlIGZyZWVic2QgcHJvamVjdCIsInRoZSBmcmVlYnNkIHByb2plY3Qgb3IiLCJmcmVlYnNkIHByb2plY3Qgb3IgY29udHJpYnV0b3JzIiwicHJvamVjdCBvciBjb250cmlidXRvcnMgYmUiLCJpbXBsaWVkIG9mIHRoZSBmcmVlYnNkIiwib2YgdGhlIGZyZWVic2QgcHJvamVjdCIsInRoZSBmcmVlYnNkIGNvcHlyaWdodCBjb3B5cmlnaHQgMTk5MiIsImZyZWVic2QgY29weXJpZ2h0IGNvcHlyaWdodCAxOTkyIDIwMTIiLCJjb3B5cmlnaHQgY29weXJpZ2h0IDE5OTIgMjAxMiB0aGUiLCJjb3B5cmlnaHQgMTk5MiAyMDEyIHRoZSBmcmVlYnNkIiwiMTk5MiAyMDEyIHRoZSBmcmVlYnNkIHByb2plY3QiLCIyMDEyIHRoZSBmcmVlYnNkIHByb2plY3QgYWxsIiwidGhlIGZyZWVic2QgcHJvamVjdCBhbGwgcmlnaHRzIiwiZnJlZWJzZCBwcm9qZWN0IGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJpcyBwcm92aWRlZCBieSB0aGUgZnJlZWJzZCIsInByb3ZpZGVkIGJ5IHRoZSBmcmVlYnNkIHByb2plY3QiLCJieSB0aGUgZnJlZWJzZCBwcm9qZWN0IGFzIiwidGhlIGZyZWVic2QgcHJvamVjdCBhcyBpcyIsImZyZWVic2QgcHJvamVjdCBhcyBpcyBhbmQiLCJubyBldmVudCBzaGFsbCB0aGUgZnJlZWJzZCIsImV2ZW50IHNoYWxsIHRoZSBmcmVlYnNkIHByb2plY3QiLCJzaGFsbCB0aGUgZnJlZWJzZCBwcm9qZWN0IG9yIiwidGhlIGZyZWVic2QgcHJvamVjdCBvciBjb250cmlidXRvcnMiLCJmcmVlYnNkIHByb2plY3Qgb3IgY29udHJpYnV0b3JzIGJlIiwicHJvamVjdCBvciBjb250cmlidXRvcnMgYmUgbGlhYmxlIiwib3IgaW1wbGllZCBvZiB0aGUgZnJlZWJzZCIsImltcGxpZWQgb2YgdGhlIGZyZWVic2QgcHJvamVjdCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uIGJ5IFxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIl0sImxpY2Vuc2VJZHMiOlsiQlNELTItQ2xhdXNlLU5ldEJTRCJdLCJrZXl3b3JkcyI6WyJjb3B5cmlnaHQgYyAyMDA4IiwiYyAyMDA4IHRoZSIsIjIwMDggdGhlIG5ldGJzZCIsImZvdW5kYXRpb24gaW5jIGFsbCIsInJlc2VydmVkIHRoaXMgY29kZSIsImRlcml2ZWQgZnJvbSBzb2Z0d2FyZSIsImZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQiLCJzb2Z0d2FyZSBjb250cmlidXRlZCB0byIsInRvIHRoZSBuZXRic2QiLCJuZXRic2QgZm91bmRhdGlvbiBieSIsImZvdW5kYXRpb24gYnkgcmVkaXN0cmlidXRpb24iLCJieSByZWRpc3RyaWJ1dGlvbiBhbmQiLCJieSB0aGUgbmV0YnNkIiwiZm91bmRhdGlvbiBpbmMgYW5kIiwic2hhbGwgdGhlIGZvdW5kYXRpb24iLCJ0aGUgZm91bmRhdGlvbiBvciIsImZvdW5kYXRpb24gb3IgY29udHJpYnV0b3JzIiwiY29weXJpZ2h0IGMgMjAwOCB0aGUiLCJjIDIwMDggdGhlIG5ldGJzZCIsIjIwMDggdGhlIG5ldGJzZCBmb3VuZGF0aW9uIiwibmV0YnNkIGZvdW5kYXRpb24gaW5jIGFsbCIsImZvdW5kYXRpb24gaW5jIGFsbCByaWdodHMiLCJyaWdodHMgcmVzZXJ2ZWQgdGhpcyBjb2RlIiwicmVzZXJ2ZWQgdGhpcyBjb2RlIGlzIiwidGhpcyBjb2RlIGlzIGRlcml2ZWQiLCJjb2RlIGlzIGRlcml2ZWQgZnJvbSIsImlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSIsImRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCIsImZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8iLCJzb2Z0d2FyZSBjb250cmlidXRlZCB0byB0aGUiLCJjb250cmlidXRlZCB0byB0aGUgbmV0YnNkIiwidG8gdGhlIG5ldGJzZCBmb3VuZGF0aW9uIiwidGhlIG5ldGJzZCBmb3VuZGF0aW9uIGJ5IiwibmV0YnNkIGZvdW5kYXRpb24gYnkgcmVkaXN0cmlidXRpb24iLCJmb3VuZGF0aW9uIGJ5IHJlZGlzdHJpYnV0aW9uIGFuZCIsImJ5IHJlZGlzdHJpYnV0aW9uIGFuZCB1c2UiLCJwcm92aWRlZCBieSB0aGUgbmV0YnNkIiwiYnkgdGhlIG5ldGJzZCBmb3VuZGF0aW9uIiwibmV0YnNkIGZvdW5kYXRpb24gaW5jIGFuZCIsImZvdW5kYXRpb24gaW5jIGFuZCBjb250cmlidXRvcnMiLCJldmVudCBzaGFsbCB0aGUgZm91bmRhdGlvbiIsInNoYWxsIHRoZSBmb3VuZGF0aW9uIG9yIiwidGhlIGZvdW5kYXRpb24gb3IgY29udHJpYnV0b3JzIiwiZm91bmRhdGlvbiBvciBjb250cmlidXRvcnMgYmUiLCJjb3B5cmlnaHQgYyAyMDA4IHRoZSBuZXRic2QiLCJjIDIwMDggdGhlIG5ldGJzZCBmb3VuZGF0aW9uIiwiMjAwOCB0aGUgbmV0YnNkIGZvdW5kYXRpb24gaW5jIiwidGhlIG5ldGJzZCBmb3VuZGF0aW9uIGluYyBhbGwiLCJuZXRic2QgZm91bmRhdGlvbiBpbmMgYWxsIHJpZ2h0cyIsImZvdW5kYXRpb24gaW5jIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJhbGwgcmlnaHRzIHJlc2VydmVkIHRoaXMgY29kZSIsInJpZ2h0cyByZXNlcnZlZCB0aGlzIGNvZGUgaXMiLCJyZXNlcnZlZCB0aGlzIGNvZGUgaXMgZGVyaXZlZCIsInRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20iLCJjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSIsImlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCIsImRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byIsImZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gdGhlIiwic29mdHdhcmUgY29udHJpYnV0ZWQgdG8gdGhlIG5ldGJzZCIsImNvbnRyaWJ1dGVkIHRvIHRoZSBuZXRic2QgZm91bmRhdGlvbiIsInRvIHRoZSBuZXRic2QgZm91bmRhdGlvbiBieSIsInRoZSBuZXRic2QgZm91bmRhdGlvbiBieSByZWRpc3RyaWJ1dGlvbiIsIm5ldGJzZCBmb3VuZGF0aW9uIGJ5IHJlZGlzdHJpYnV0aW9uIGFuZCIsImZvdW5kYXRpb24gYnkgcmVkaXN0cmlidXRpb24gYW5kIHVzZSIsImJ5IHJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4iLCJpcyBwcm92aWRlZCBieSB0aGUgbmV0YnNkIiwicHJvdmlkZWQgYnkgdGhlIG5ldGJzZCBmb3VuZGF0aW9uIiwiYnkgdGhlIG5ldGJzZCBmb3VuZGF0aW9uIGluYyIsInRoZSBuZXRic2QgZm91bmRhdGlvbiBpbmMgYW5kIiwibmV0YnNkIGZvdW5kYXRpb24gaW5jIGFuZCBjb250cmlidXRvcnMiLCJmb3VuZGF0aW9uIGluYyBhbmQgY29udHJpYnV0b3JzIGFzIiwibm8gZXZlbnQgc2hhbGwgdGhlIGZvdW5kYXRpb24iLCJldmVudCBzaGFsbCB0aGUgZm91bmRhdGlvbiBvciIsInNoYWxsIHRoZSBmb3VuZGF0aW9uIG9yIGNvbnRyaWJ1dG9ycyIsInRoZSBmb3VuZGF0aW9uIG9yIGNvbnRyaWJ1dG9ycyBiZSIsImZvdW5kYXRpb24gb3IgY29udHJpYnV0b3JzIGJlIGxpYWJsZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgKGMpIFx1MDAzY1lFQVJcdTAwM2UgXHUwMDNjQ09QWVJJR0hUIEhPTERFUlNcdTAwM2VcblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLCBlYWNoIGNvcHlyaWdodCBob2xkZXIgYW5kIGNvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gdGhvc2UgcmVjZWl2aW5nIHJpZ2h0cyB1bmRlciB0aGlzIGxpY2Vuc2UgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgZm9yIGZhaWx1cmUgdG8gc2F0aXNmeSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UpIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhpcyBzb2Z0d2FyZSwgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zLCBhbHJlYWR5IGFjcXVpcmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgbGljZW5zYWJsZSBieSBzdWNoIGNvcHlyaWdodCBob2xkZXIgb3IgY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5OlxuXG4gICAoYSkgdGhlaXIgQ29udHJpYnV0aW9uKHMpICh0aGUgbGljZW5zZWQgY29weXJpZ2h0cyBvZiBjb3B5cmlnaHQgaG9sZGVycyBhbmQgbm9uLWNvcHlyaWdodGFibGUgYWRkaXRpb25zIG9mIGNvbnRyaWJ1dG9ycywgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtKSBhbG9uZTsgb3JcblxuICAgKGIpIGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIGFkZGVkIGJ5IHN1Y2ggY29weXJpZ2h0IGhvbGRlciBvciBjb250cmlidXRvciwgaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQsIHN1Y2ggYWRkaXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24gdG8gYmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLlxuXG5FeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBhYm92ZSwgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIGZyb20gYW55IGNvcHlyaWdodCBob2xkZXIgb3IgY29udHJpYnV0b3IgaXMgZ3JhbnRlZCB1bmRlciB0aGlzIGxpY2Vuc2UsIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLlxuXG5ESVNDTEFJTUVSXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIl0sImxpY2Vuc2VJZHMiOlsiQlNELTItQ2xhdXNlLVBhdGVudCJdLCJrZXl3b3JkcyI6WyJjb3B5cmlnaHQgaG9sZGVycyByZWRpc3RyaWJ1dGlvbiIsImhvbGRlcnMgcmVkaXN0cmlidXRpb24gYW5kIiwidGhlIGRpc3RyaWJ1dGlvbiBzdWJqZWN0IiwiZGlzdHJpYnV0aW9uIHN1YmplY3QgdG8iLCJsaWNlbnNlIGVhY2ggY29weXJpZ2h0IiwiaG9sZGVyIGFuZCBjb250cmlidXRvciIsImFuZCBjb250cmlidXRvciBoZXJlYnkiLCJncmFudHMgdG8gdGhvc2UiLCJ0byB0aG9zZSByZWNlaXZpbmciLCJ0aG9zZSByZWNlaXZpbmcgcmlnaHRzIiwicmVjZWl2aW5nIHJpZ2h0cyB1bmRlciIsImxpY2Vuc2UgYSBwZXJwZXR1YWwiLCJleGNlcHQgZm9yIGZhaWx1cmUiLCJmb3IgZmFpbHVyZSB0byIsImZhaWx1cmUgdG8gc2F0aXNmeSIsImxpY2Vuc2UgcGF0ZW50IGxpY2Vuc2UiLCJvdGhlcndpc2UgdHJhbnNmZXIgdGhpcyIsInRyYW5zZmVyIHRoaXMgc29mdHdhcmUiLCJ0aGlzIHNvZnR3YXJlIHdoZXJlIiwic29mdHdhcmUgd2hlcmUgc3VjaCIsInBhdGVudCBjbGFpbXMgYWxyZWFkeSIsImNsYWltcyBhbHJlYWR5IGFjcXVpcmVkIiwiaGVyZWFmdGVyIGFjcXVpcmVkIGxpY2Vuc2FibGUiLCJhY3F1aXJlZCBsaWNlbnNhYmxlIGJ5IiwiaW5mcmluZ2VkIGJ5IGEiLCJieSBhIHRoZWlyIiwiYSB0aGVpciBjb250cmlidXRpb24iLCJjb250cmlidXRpb24gcyB0aGUiLCJzIHRoZSBsaWNlbnNlZCIsInRoZSBsaWNlbnNlZCBjb3B5cmlnaHRzIiwibGljZW5zZWQgY29weXJpZ2h0cyBvZiIsImNvcHlyaWdodHMgb2YgY29weXJpZ2h0IiwiaG9sZGVycyBhbmQgbm9uIiwiYW5kIG5vbiBjb3B5cmlnaHRhYmxlIiwibm9uIGNvcHlyaWdodGFibGUgYWRkaXRpb25zIiwiY29weXJpZ2h0YWJsZSBhZGRpdGlvbnMgb2YiLCJhZGRpdGlvbnMgb2YgY29udHJpYnV0b3JzIiwib2YgY29udHJpYnV0b3JzIGluIiwiY29udHJpYnV0b3JzIGluIHNvdXJjZSIsImJpbmFyeSBmb3JtIGFsb25lIiwiZm9ybSBhbG9uZSBvciIsImFsb25lIG9yIGIiLCJvciBiIGNvbWJpbmF0aW9uIiwiYiBjb21iaW5hdGlvbiBvZiIsIm9mIGF1dGhvcnNoaXAgdG8iLCJhdXRob3JzaGlwIHRvIHdoaWNoIiwicyB3YXMgYWRkZWQiLCJhZGRlZCBieSBzdWNoIiwib3IgY29udHJpYnV0b3IgaWYiLCJjb250cmlidXRvciBpZiBhdCIsInN1Y2ggYWRkaXRpb24gY2F1c2VzIiwiYWRkaXRpb24gY2F1c2VzIHN1Y2giLCJ0byBiZSBuZWNlc3NhcmlseSIsIm5lY2Vzc2FyaWx5IGluZnJpbmdlZCB0aGUiLCJpbmZyaW5nZWQgdGhlIHBhdGVudCIsInRoZSBjb250cmlidXRpb24gZXhjZXB0IiwiY29udHJpYnV0aW9uIGV4Y2VwdCBhcyIsImV4cHJlc3NseSBzdGF0ZWQgYWJvdmUiLCJzdGF0ZWQgYWJvdmUgbm8iLCJhYm92ZSBubyByaWdodHMiLCJvciBsaWNlbnNlcyBmcm9tIiwibGljZW5zZXMgZnJvbSBhbnkiLCJmcm9tIGFueSBjb3B5cmlnaHQiLCJvciBjb250cmlidXRvciBpcyIsImNvbnRyaWJ1dG9yIGlzIGdyYW50ZWQiLCJsaWNlbnNlIHdoZXRoZXIgZXhwcmVzc2x5Iiwib3Igb3RoZXJ3aXNlIGRpc2NsYWltZXIiLCJvdGhlcndpc2UgZGlzY2xhaW1lciB0aGlzIiwieWVhciBjb3B5cmlnaHQgaG9sZGVycyByZWRpc3RyaWJ1dGlvbiIsImNvcHlyaWdodCBob2xkZXJzIHJlZGlzdHJpYnV0aW9uIGFuZCIsImhvbGRlcnMgcmVkaXN0cmlidXRpb24gYW5kIHVzZSIsIndpdGggdGhlIGRpc3RyaWJ1dGlvbiBzdWJqZWN0IiwidGhlIGRpc3RyaWJ1dGlvbiBzdWJqZWN0IHRvIiwiZGlzdHJpYnV0aW9uIHN1YmplY3QgdG8gdGhlIiwidGhpcyBsaWNlbnNlIGVhY2ggY29weXJpZ2h0IiwibGljZW5zZSBlYWNoIGNvcHlyaWdodCBob2xkZXIiLCJlYWNoIGNvcHlyaWdodCBob2xkZXIgYW5kIiwiY29weXJpZ2h0IGhvbGRlciBhbmQgY29udHJpYnV0b3IiLCJob2xkZXIgYW5kIGNvbnRyaWJ1dG9yIGhlcmVieSIsImFuZCBjb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIiwiaGVyZWJ5IGdyYW50cyB0byB0aG9zZSIsImdyYW50cyB0byB0aG9zZSByZWNlaXZpbmciLCJ0byB0aG9zZSByZWNlaXZpbmcgcmlnaHRzIiwidGhvc2UgcmVjZWl2aW5nIHJpZ2h0cyB1bmRlciIsInJlY2VpdmluZyByaWdodHMgdW5kZXIgdGhpcyIsInRoaXMgbGljZW5zZSBhIHBlcnBldHVhbCIsImxpY2Vuc2UgYSBwZXJwZXR1YWwgd29ybGR3aWRlIiwiZnJlZSBpcnJldm9jYWJsZSBleGNlcHQgZm9yIiwiaXJyZXZvY2FibGUgZXhjZXB0IGZvciBmYWlsdXJlIiwiZXhjZXB0IGZvciBmYWlsdXJlIHRvIiwiZm9yIGZhaWx1cmUgdG8gc2F0aXNmeSIsImZhaWx1cmUgdG8gc2F0aXNmeSB0aGUiLCJvZiB0aGlzIGxpY2Vuc2UgcGF0ZW50IiwidGhpcyBsaWNlbnNlIHBhdGVudCBsaWNlbnNlIiwibGljZW5zZSBwYXRlbnQgbGljZW5zZSB0byIsImFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhpcyIsIm90aGVyd2lzZSB0cmFuc2ZlciB0aGlzIHNvZnR3YXJlIiwidHJhbnNmZXIgdGhpcyBzb2Z0d2FyZSB3aGVyZSIsInRoaXMgc29mdHdhcmUgd2hlcmUgc3VjaCIsInNvZnR3YXJlIHdoZXJlIHN1Y2ggbGljZW5zZSIsInRob3NlIHBhdGVudCBjbGFpbXMgYWxyZWFkeSIsInBhdGVudCBjbGFpbXMgYWxyZWFkeSBhY3F1aXJlZCIsImNsYWltcyBhbHJlYWR5IGFjcXVpcmVkIG9yIiwib3IgaGVyZWFmdGVyIGFjcXVpcmVkIGxpY2Vuc2FibGUiLCJoZXJlYWZ0ZXIgYWNxdWlyZWQgbGljZW5zYWJsZSBieSIsImFjcXVpcmVkIGxpY2Vuc2FibGUgYnkgc3VjaCIsImxpY2Vuc2FibGUgYnkgc3VjaCBjb3B5cmlnaHQiLCJob2xkZXIgb3IgY29udHJpYnV0b3IgdGhhdCIsIm9yIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIiwibmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IGEiLCJpbmZyaW5nZWQgYnkgYSB0aGVpciIsImJ5IGEgdGhlaXIgY29udHJpYnV0aW9uIiwiYSB0aGVpciBjb250cmlidXRpb24gcyIsInRoZWlyIGNvbnRyaWJ1dGlvbiBzIHRoZSIsImNvbnRyaWJ1dGlvbiBzIHRoZSBsaWNlbnNlZCIsInMgdGhlIGxpY2Vuc2VkIGNvcHlyaWdodHMiLCJ0aGUgbGljZW5zZWQgY29weXJpZ2h0cyBvZiIsImxpY2Vuc2VkIGNvcHlyaWdodHMgb2YgY29weXJpZ2h0IiwiY29weXJpZ2h0cyBvZiBjb3B5cmlnaHQgaG9sZGVycyIsIm9mIGNvcHlyaWdodCBob2xkZXJzIGFuZCIsImNvcHlyaWdodCBob2xkZXJzIGFuZCBub24iLCJob2xkZXJzIGFuZCBub24gY29weXJpZ2h0YWJsZSIsImFuZCBub24gY29weXJpZ2h0YWJsZSBhZGRpdGlvbnMiLCJub24gY29weXJpZ2h0YWJsZSBhZGRpdGlvbnMgb2YiLCJjb3B5cmlnaHRhYmxlIGFkZGl0aW9ucyBvZiBjb250cmlidXRvcnMiLCJhZGRpdGlvbnMgb2YgY29udHJpYnV0b3JzIGluIiwib2YgY29udHJpYnV0b3JzIGluIHNvdXJjZSIsImNvbnRyaWJ1dG9ycyBpbiBzb3VyY2Ugb3IiLCJvciBiaW5hcnkgZm9ybSBhbG9uZSIsImJpbmFyeSBmb3JtIGFsb25lIG9yIiwiZm9ybSBhbG9uZSBvciBiIiwiYWxvbmUgb3IgYiBjb21iaW5hdGlvbiIsIm9yIGIgY29tYmluYXRpb24gb2YiLCJiIGNvbWJpbmF0aW9uIG9mIHRoZWlyIiwid2l0aCB0aGUgd29yayBvZiIsIndvcmsgb2YgYXV0aG9yc2hpcCB0byIsIm9mIGF1dGhvcnNoaXAgdG8gd2hpY2giLCJhdXRob3JzaGlwIHRvIHdoaWNoIHN1Y2giLCJjb250cmlidXRpb24gcyB3YXMgYWRkZWQiLCJzIHdhcyBhZGRlZCBieSIsIndhcyBhZGRlZCBieSBzdWNoIiwiYWRkZWQgYnkgc3VjaCBjb3B5cmlnaHQiLCJob2xkZXIgb3IgY29udHJpYnV0b3IgaWYiLCJvciBjb250cmlidXRvciBpZiBhdCIsImNvbnRyaWJ1dG9yIGlmIGF0IHRoZSIsImNvbnRyaWJ1dGlvbiBpcyBhZGRlZCBzdWNoIiwiYWRkZWQgc3VjaCBhZGRpdGlvbiBjYXVzZXMiLCJzdWNoIGFkZGl0aW9uIGNhdXNlcyBzdWNoIiwiYWRkaXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24iLCJjb21iaW5hdGlvbiB0byBiZSBuZWNlc3NhcmlseSIsInRvIGJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCIsImJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCB0aGUiLCJuZWNlc3NhcmlseSBpbmZyaW5nZWQgdGhlIHBhdGVudCIsImluZnJpbmdlZCB0aGUgcGF0ZW50IGxpY2Vuc2UiLCJpbmNsdWRlIHRoZSBjb250cmlidXRpb24gZXhjZXB0IiwidGhlIGNvbnRyaWJ1dGlvbiBleGNlcHQgYXMiLCJjb250cmlidXRpb24gZXhjZXB0IGFzIGV4cHJlc3NseSIsImFzIGV4cHJlc3NseSBzdGF0ZWQgYWJvdmUiLCJleHByZXNzbHkgc3RhdGVkIGFib3ZlIG5vIiwic3RhdGVkIGFib3ZlIG5vIHJpZ2h0cyIsImFib3ZlIG5vIHJpZ2h0cyBvciIsInJpZ2h0cyBvciBsaWNlbnNlcyBmcm9tIiwib3IgbGljZW5zZXMgZnJvbSBhbnkiLCJsaWNlbnNlcyBmcm9tIGFueSBjb3B5cmlnaHQiLCJmcm9tIGFueSBjb3B5cmlnaHQgaG9sZGVyIiwiaG9sZGVyIG9yIGNvbnRyaWJ1dG9yIGlzIiwib3IgY29udHJpYnV0b3IgaXMgZ3JhbnRlZCIsImNvbnRyaWJ1dG9yIGlzIGdyYW50ZWQgdW5kZXIiLCJ0aGlzIGxpY2Vuc2Ugd2hldGhlciBleHByZXNzbHkiLCJsaWNlbnNlIHdoZXRoZXIgZXhwcmVzc2x5IGJ5IiwiZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIGRpc2NsYWltZXIiLCJvciBvdGhlcndpc2UgZGlzY2xhaW1lciB0aGlzIiwib3RoZXJ3aXNlIGRpc2NsYWltZXIgdGhpcyBzb2Z0d2FyZSIsImMgeWVhciBjb3B5cmlnaHQgaG9sZGVycyByZWRpc3RyaWJ1dGlvbiIsInllYXIgY29weXJpZ2h0IGhvbGRlcnMgcmVkaXN0cmlidXRpb24gYW5kIiwiY29weXJpZ2h0IGhvbGRlcnMgcmVkaXN0cmlidXRpb24gYW5kIHVzZSIsImhvbGRlcnMgcmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiIsInByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiBzdWJqZWN0Iiwid2l0aCB0aGUgZGlzdHJpYnV0aW9uIHN1YmplY3QgdG8iLCJ0aGUgZGlzdHJpYnV0aW9uIHN1YmplY3QgdG8gdGhlIiwiZGlzdHJpYnV0aW9uIHN1YmplY3QgdG8gdGhlIHRlcm1zIiwib2YgdGhpcyBsaWNlbnNlIGVhY2ggY29weXJpZ2h0IiwidGhpcyBsaWNlbnNlIGVhY2ggY29weXJpZ2h0IGhvbGRlciIsImxpY2Vuc2UgZWFjaCBjb3B5cmlnaHQgaG9sZGVyIGFuZCIsImVhY2ggY29weXJpZ2h0IGhvbGRlciBhbmQgY29udHJpYnV0b3IiLCJjb3B5cmlnaHQgaG9sZGVyIGFuZCBjb250cmlidXRvciBoZXJlYnkiLCJob2xkZXIgYW5kIGNvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMiLCJhbmQgY29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byIsImNvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gdGhvc2UiLCJoZXJlYnkgZ3JhbnRzIHRvIHRob3NlIHJlY2VpdmluZyIsImdyYW50cyB0byB0aG9zZSByZWNlaXZpbmcgcmlnaHRzIiwidG8gdGhvc2UgcmVjZWl2aW5nIHJpZ2h0cyB1bmRlciIsInRob3NlIHJlY2VpdmluZyByaWdodHMgdW5kZXIgdGhpcyIsInJlY2VpdmluZyByaWdodHMgdW5kZXIgdGhpcyBsaWNlbnNlIiwicmlnaHRzIHVuZGVyIHRoaXMgbGljZW5zZSBhIiwidW5kZXIgdGhpcyBsaWNlbnNlIGEgcGVycGV0dWFsIiwidGhpcyBsaWNlbnNlIGEgcGVycGV0dWFsIHdvcmxkd2lkZSIsImxpY2Vuc2UgYSBwZXJwZXR1YWwgd29ybGR3aWRlIG5vbiIsInJveWFsdHkgZnJlZSBpcnJldm9jYWJsZSBleGNlcHQgZm9yIiwiZnJlZSBpcnJldm9jYWJsZSBleGNlcHQgZm9yIGZhaWx1cmUiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChjKSBcdTAwM2N5ZWFyXHUwMDNlIFx1MDAzY293bmVyXHUwMDNlLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIl0sImxpY2Vuc2VJZHMiOlsiQlNELTItQ2xhdXNlIl0sImtleXdvcmRzIjpudWxsfSx7ImxpY2Vuc2VUZXh0cyI6WyJSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cbiAgIDQuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICdUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBcIlVuaXZlcnNpZGFkIGRlIFBhbGVybW8sIEFyZ2VudGluYVwiIChodHRwOi8vd3d3LnBhbGVybW8uZWR1LykuJ1xuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIl0sImxpY2Vuc2VJZHMiOlsiQlNELTMtQ2xhdXNlLUF0dHJpYnV0aW9uIl0sImtleXdvcmRzIjpbInBlcm1pc3Npb24gNCByZWRpc3RyaWJ1dGlvbnMiLCI0IHJlZGlzdHJpYnV0aW9ucyBvZiIsImJ5IHRoZSB1bml2ZXJzaWRhZCIsInRoZSB1bml2ZXJzaWRhZCBkZSIsInVuaXZlcnNpZGFkIGRlIHBhbGVybW8iLCJkZSBwYWxlcm1vIGFyZ2VudGluYSIsInBhbGVybW8gYXJnZW50aW5hIGh0dHAiLCJhcmdlbnRpbmEgaHR0cCB3d3ciLCJodHRwIHd3dyBwYWxlcm1vIiwid3d3IHBhbGVybW8gZWR1IiwicGFsZXJtbyBlZHUgdGhpcyIsIndyaXR0ZW4gcGVybWlzc2lvbiA0IHJlZGlzdHJpYnV0aW9ucyIsInBlcm1pc3Npb24gNCByZWRpc3RyaWJ1dGlvbnMgb2YiLCI0IHJlZGlzdHJpYnV0aW9ucyBvZiBhbnkiLCJkZXZlbG9wZWQgYnkgdGhlIHVuaXZlcnNpZGFkIiwiYnkgdGhlIHVuaXZlcnNpZGFkIGRlIiwidGhlIHVuaXZlcnNpZGFkIGRlIHBhbGVybW8iLCJ1bml2ZXJzaWRhZCBkZSBwYWxlcm1vIGFyZ2VudGluYSIsImRlIHBhbGVybW8gYXJnZW50aW5hIGh0dHAiLCJwYWxlcm1vIGFyZ2VudGluYSBodHRwIHd3dyIsImFyZ2VudGluYSBodHRwIHd3dyBwYWxlcm1vIiwiaHR0cCB3d3cgcGFsZXJtbyBlZHUiLCJ3d3cgcGFsZXJtbyBlZHUgdGhpcyIsInBhbGVybW8gZWR1IHRoaXMgc29mdHdhcmUiLCJlZHUgdGhpcyBzb2Z0d2FyZSBpcyIsInByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiA0IHJlZGlzdHJpYnV0aW9ucyIsIndyaXR0ZW4gcGVybWlzc2lvbiA0IHJlZGlzdHJpYnV0aW9ucyBvZiIsInBlcm1pc3Npb24gNCByZWRpc3RyaWJ1dGlvbnMgb2YgYW55IiwiNCByZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0iLCJzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIHVuaXZlcnNpZGFkIiwiZGV2ZWxvcGVkIGJ5IHRoZSB1bml2ZXJzaWRhZCBkZSIsImJ5IHRoZSB1bml2ZXJzaWRhZCBkZSBwYWxlcm1vIiwidGhlIHVuaXZlcnNpZGFkIGRlIHBhbGVybW8gYXJnZW50aW5hIiwidW5pdmVyc2lkYWQgZGUgcGFsZXJtbyBhcmdlbnRpbmEgaHR0cCIsImRlIHBhbGVybW8gYXJnZW50aW5hIGh0dHAgd3d3IiwicGFsZXJtbyBhcmdlbnRpbmEgaHR0cCB3d3cgcGFsZXJtbyIsImFyZ2VudGluYSBodHRwIHd3dyBwYWxlcm1vIGVkdSIsImh0dHAgd3d3IHBhbGVybW8gZWR1IHRoaXMiLCJ3d3cgcGFsZXJtbyBlZHUgdGhpcyBzb2Z0d2FyZSIsInBhbGVybW8gZWR1IHRoaXMgc29mdHdhcmUgaXMiLCJlZHUgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgQ2xlYXIgQlNEIExpY2Vuc2UgQ29weXJpZ2h0IChjKSBbeHh4eF0tW3h4eHhdIFtPd25lciBPcmdhbml6YXRpb25dXG5cbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgKHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIGluIHRoZSBkaXNjbGFpbWVyIGJlbG93KSBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBbT3duZXIgT3JnYW5pemF0aW9uXSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5OTyBFWFBSRVNTIE9SIElNUExJRUQgTElDRU5TRVMgVE8gQU5ZIFBBUlRZJ1MgUEFURU5UIFJJR0hUUyBBUkUgR1JBTlRFRCBCWSBUSElTIExJQ0VOU0UuIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iXSwibGljZW5zZUlkcyI6WyJCU0QtMy1DbGF1c2UtQ2xlYXIiXSwia2V5d29yZHMiOlsidGhlIGNsZWFyIGJzZCIsImNsZWFyIGJzZCBsaWNlbnNlIiwiYnNkIGxpY2Vuc2UgY29weXJpZ2h0IiwiY29weXJpZ2h0IGMgeHh4eCIsImMgeHh4eCB4eHh4IiwieHh4eCB4eHh4IG93bmVyIiwieHh4eCBvd25lciBvcmdhbml6YXRpb24iLCJvd25lciBvcmdhbml6YXRpb24gYWxsIiwib3JnYW5pemF0aW9uIGFsbCByaWdodHMiLCJhcmUgcGVybWl0dGVkIHN1YmplY3QiLCJwZXJtaXR0ZWQgc3ViamVjdCB0byIsImxpbWl0YXRpb25zIGluIHRoZSIsImluIHRoZSBkaXNjbGFpbWVyIiwiZGlzY2xhaW1lciBiZWxvdyBwcm92aWRlZCIsImJlbG93IHByb3ZpZGVkIHRoYXQiLCJuYW1lIG9mIG93bmVyIiwib2Ygb3duZXIgb3JnYW5pemF0aW9uIiwib3duZXIgb3JnYW5pemF0aW9uIG5vciIsIm9yZ2FuaXphdGlvbiBub3IgdGhlIiwid3JpdHRlbiBwZXJtaXNzaW9uIG5vIiwicGVybWlzc2lvbiBubyBleHByZXNzIiwiaW1wbGllZCBsaWNlbnNlcyB0byIsInBhcnR5IHMgcGF0ZW50IiwicyBwYXRlbnQgcmlnaHRzIiwicGF0ZW50IHJpZ2h0cyBhcmUiLCJ0aGUgY2xlYXIgYnNkIGxpY2Vuc2UiLCJjbGVhciBic2QgbGljZW5zZSBjb3B5cmlnaHQiLCJic2QgbGljZW5zZSBjb3B5cmlnaHQgYyIsImxpY2Vuc2UgY29weXJpZ2h0IGMgeHh4eCIsImNvcHlyaWdodCBjIHh4eHggeHh4eCIsImMgeHh4eCB4eHh4IG93bmVyIiwieHh4eCB4eHh4IG93bmVyIG9yZ2FuaXphdGlvbiIsInh4eHggb3duZXIgb3JnYW5pemF0aW9uIGFsbCIsIm93bmVyIG9yZ2FuaXphdGlvbiBhbGwgcmlnaHRzIiwib3JnYW5pemF0aW9uIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJtb2RpZmljYXRpb24gYXJlIHBlcm1pdHRlZCBzdWJqZWN0IiwiYXJlIHBlcm1pdHRlZCBzdWJqZWN0IHRvIiwicGVybWl0dGVkIHN1YmplY3QgdG8gdGhlIiwidGhlIGxpbWl0YXRpb25zIGluIHRoZSIsImxpbWl0YXRpb25zIGluIHRoZSBkaXNjbGFpbWVyIiwiaW4gdGhlIGRpc2NsYWltZXIgYmVsb3ciLCJ0aGUgZGlzY2xhaW1lciBiZWxvdyBwcm92aWRlZCIsImRpc2NsYWltZXIgYmVsb3cgcHJvdmlkZWQgdGhhdCIsImJlbG93IHByb3ZpZGVkIHRoYXQgdGhlIiwidGhlIG5hbWUgb2Ygb3duZXIiLCJuYW1lIG9mIG93bmVyIG9yZ2FuaXphdGlvbiIsIm9mIG93bmVyIG9yZ2FuaXphdGlvbiBub3IiLCJvd25lciBvcmdhbml6YXRpb24gbm9yIHRoZSIsIm9yZ2FuaXphdGlvbiBub3IgdGhlIG5hbWVzIiwicHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG5vIiwid3JpdHRlbiBwZXJtaXNzaW9uIG5vIGV4cHJlc3MiLCJwZXJtaXNzaW9uIG5vIGV4cHJlc3Mgb3IiLCJvciBpbXBsaWVkIGxpY2Vuc2VzIHRvIiwiaW1wbGllZCBsaWNlbnNlcyB0byBhbnkiLCJsaWNlbnNlcyB0byBhbnkgcGFydHkiLCJ0byBhbnkgcGFydHkgcyIsImFueSBwYXJ0eSBzIHBhdGVudCIsInBhcnR5IHMgcGF0ZW50IHJpZ2h0cyIsInMgcGF0ZW50IHJpZ2h0cyBhcmUiLCJwYXRlbnQgcmlnaHRzIGFyZSBncmFudGVkIiwicmlnaHRzIGFyZSBncmFudGVkIGJ5IiwiYXJlIGdyYW50ZWQgYnkgdGhpcyIsImJ5IHRoaXMgbGljZW5zZSB0aGlzIiwidGhpcyBsaWNlbnNlIHRoaXMgc29mdHdhcmUiLCJ0aGUgY2xlYXIgYnNkIGxpY2Vuc2UgY29weXJpZ2h0IiwiY2xlYXIgYnNkIGxpY2Vuc2UgY29weXJpZ2h0IGMiLCJic2QgbGljZW5zZSBjb3B5cmlnaHQgYyB4eHh4IiwibGljZW5zZSBjb3B5cmlnaHQgYyB4eHh4IHh4eHgiLCJjb3B5cmlnaHQgYyB4eHh4IHh4eHggb3duZXIiLCJjIHh4eHggeHh4eCBvd25lciBvcmdhbml6YXRpb24iLCJ4eHh4IHh4eHggb3duZXIgb3JnYW5pemF0aW9uIGFsbCIsInh4eHggb3duZXIgb3JnYW5pemF0aW9uIGFsbCByaWdodHMiLCJvd25lciBvcmdhbml6YXRpb24gYWxsIHJpZ2h0cyByZXNlcnZlZCIsIm9yZ2FuaXphdGlvbiBhbGwgcmlnaHRzIHJlc2VydmVkIHJlZGlzdHJpYnV0aW9uIiwid2l0aG91dCBtb2RpZmljYXRpb24gYXJlIHBlcm1pdHRlZCBzdWJqZWN0IiwibW9kaWZpY2F0aW9uIGFyZSBwZXJtaXR0ZWQgc3ViamVjdCB0byIsImFyZSBwZXJtaXR0ZWQgc3ViamVjdCB0byB0aGUiLCJwZXJtaXR0ZWQgc3ViamVjdCB0byB0aGUgbGltaXRhdGlvbnMiLCJ0byB0aGUgbGltaXRhdGlvbnMgaW4gdGhlIiwidGhlIGxpbWl0YXRpb25zIGluIHRoZSBkaXNjbGFpbWVyIiwibGltaXRhdGlvbnMgaW4gdGhlIGRpc2NsYWltZXIgYmVsb3ciLCJpbiB0aGUgZGlzY2xhaW1lciBiZWxvdyBwcm92aWRlZCIsInRoZSBkaXNjbGFpbWVyIGJlbG93IHByb3ZpZGVkIHRoYXQiLCJkaXNjbGFpbWVyIGJlbG93IHByb3ZpZGVkIHRoYXQgdGhlIiwiYmVsb3cgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIiwibmVpdGhlciB0aGUgbmFtZSBvZiBvd25lciIsInRoZSBuYW1lIG9mIG93bmVyIG9yZ2FuaXphdGlvbiIsIm5hbWUgb2Ygb3duZXIgb3JnYW5pemF0aW9uIG5vciIsIm9mIG93bmVyIG9yZ2FuaXphdGlvbiBub3IgdGhlIiwib3duZXIgb3JnYW5pemF0aW9uIG5vciB0aGUgbmFtZXMiLCJvcmdhbml6YXRpb24gbm9yIHRoZSBuYW1lcyBvZiIsInNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBubyIsInByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBubyBleHByZXNzIiwid3JpdHRlbiBwZXJtaXNzaW9uIG5vIGV4cHJlc3Mgb3IiLCJwZXJtaXNzaW9uIG5vIGV4cHJlc3Mgb3IgaW1wbGllZCIsIm5vIGV4cHJlc3Mgb3IgaW1wbGllZCBsaWNlbnNlcyIsImV4cHJlc3Mgb3IgaW1wbGllZCBsaWNlbnNlcyB0byIsIm9yIGltcGxpZWQgbGljZW5zZXMgdG8gYW55IiwiaW1wbGllZCBsaWNlbnNlcyB0byBhbnkgcGFydHkiLCJsaWNlbnNlcyB0byBhbnkgcGFydHkgcyIsInRvIGFueSBwYXJ0eSBzIHBhdGVudCIsImFueSBwYXJ0eSBzIHBhdGVudCByaWdodHMiLCJwYXJ0eSBzIHBhdGVudCByaWdodHMgYXJlIiwicyBwYXRlbnQgcmlnaHRzIGFyZSBncmFudGVkIiwicGF0ZW50IHJpZ2h0cyBhcmUgZ3JhbnRlZCBieSIsInJpZ2h0cyBhcmUgZ3JhbnRlZCBieSB0aGlzIiwiYXJlIGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlIiwiZ3JhbnRlZCBieSB0aGlzIGxpY2Vuc2UgdGhpcyIsImJ5IHRoaXMgbGljZW5zZSB0aGlzIHNvZnR3YXJlIiwidGhpcyBsaWNlbnNlIHRoaXMgc29mdHdhcmUgaXMiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChjKSAyMDAzLCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCB0aHJvdWdoIExhd3JlbmNlIEJlcmtlbGV5IE5hdGlvbmFsIExhYm9yYXRvcnkgKHN1YmplY3QgdG8gcmVjZWlwdCBvZiBhbnkgcmVxdWlyZWQgYXBwcm92YWxzIGZyb20gdGhlIFUuUy4gRGVwdC4gb2YgRW5lcmd5KS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAoMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAoMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAoMykgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBMYXdyZW5jZSBCZXJrZWxleSBOYXRpb25hbCBMYWJvcmF0b3J5LCBVLlMuIERlcHQuIG9mIEVuZXJneSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSICwgVEhFIFVOSVRFRCBTVEFURVMgR09WRVJOTUVOVCwgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5Zb3UgYXJlIHVuZGVyIG5vIG9ibGlnYXRpb24gd2hhdHNvZXZlciB0byBwcm92aWRlIGFueSBidWcgZml4ZXMsIHBhdGNoZXMsIG9yIHVwZ3JhZGVzIHRvIHRoZSBmZWF0dXJlcywgZnVuY3Rpb25hbGl0eSBvciBwZXJmb3JtYW5jZSBvZiB0aGUgc291cmNlIGNvZGUgKFwiRW5oYW5jZW1lbnRzXCIpIHRvIGFueW9uZTsgaG93ZXZlciwgaWYgeW91IGNob29zZSB0byBtYWtlIHlvdXIgRW5oYW5jZW1lbnRzIGF2YWlsYWJsZSBlaXRoZXIgcHVibGljbHksIG9yIGRpcmVjdGx5IHRvIExhd3JlbmNlIEJlcmtlbGV5IE5hdGlvbmFsIExhYm9yYXRvcnkgLCB3aXRob3V0IGltcG9zaW5nIGEgc2VwYXJhdGUgd3JpdHRlbiBsaWNlbnNlIGFncmVlbWVudCBmb3Igc3VjaCBFbmhhbmNlbWVudHMsIHRoZW4geW91IGhlcmVieSBncmFudCB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6IGEgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlIHBlcnBldHVhbCBsaWNlbnNlIHRvIGluc3RhbGwsIHVzZSwgbW9kaWZ5LCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsIGluY29ycG9yYXRlIGludG8gb3RoZXIgY29tcHV0ZXIgc29mdHdhcmUsIGRpc3RyaWJ1dGUsIGFuZCBzdWJsaWNlbnNlIHN1Y2ggRW5oYW5jZW1lbnRzIG9yIGRlcml2YXRpdmUgd29ya3MgdGhlcmVvZiwgaW4gYmluYXJ5IGFuZCBzb3VyY2UgY29kZSBmb3JtLiJdLCJsaWNlbnNlSWRzIjpbIkJTRC0zLUNsYXVzZS1MQk5MIl0sImtleXdvcmRzIjpbImMgMjAwMyB0aGUiLCIyMDAzIHRoZSByZWdlbnRzIiwib2YgY2FsaWZvcm5pYSB0aHJvdWdoIiwiY2FsaWZvcm5pYSB0aHJvdWdoIGxhd3JlbmNlIiwidGhyb3VnaCBsYXdyZW5jZSBiZXJrZWxleSIsIm5hdGlvbmFsIGxhYm9yYXRvcnkgc3ViamVjdCIsImxhYm9yYXRvcnkgc3ViamVjdCB0byIsInN1YmplY3QgdG8gcmVjZWlwdCIsInRvIHJlY2VpcHQgb2YiLCJyZWNlaXB0IG9mIGFueSIsIm9mIGFueSByZXF1aXJlZCIsImFueSByZXF1aXJlZCBhcHByb3ZhbHMiLCJyZXF1aXJlZCBhcHByb3ZhbHMgZnJvbSIsImFwcHJvdmFscyBmcm9tIHRoZSIsIm9mIGVuZXJneSBhbGwiLCJlbmVyZ3kgYWxsIHJpZ2h0cyIsIm9mIGNhbGlmb3JuaWEgbGF3cmVuY2UiLCJjYWxpZm9ybmlhIGxhd3JlbmNlIGJlcmtlbGV5IiwibmF0aW9uYWwgbGFib3JhdG9yeSB1IiwibGFib3JhdG9yeSB1IHMiLCJvZiBlbmVyZ3kgbm9yIiwiZW5lcmd5IG5vciB0aGUiLCJjb3B5cmlnaHQgb3duZXIgdGhlIiwib3duZXIgdGhlIHVuaXRlZCIsImdvdmVybm1lbnQgb3IgY29udHJpYnV0b3JzIiwiZGFtYWdlIHlvdSBhcmUiLCJubyBvYmxpZ2F0aW9uIHdoYXRzb2V2ZXIiLCJvYmxpZ2F0aW9uIHdoYXRzb2V2ZXIgdG8iLCJ3aGF0c29ldmVyIHRvIHByb3ZpZGUiLCJwcm92aWRlIGFueSBidWciLCJmaXhlcyBwYXRjaGVzIG9yIiwicGF0Y2hlcyBvciB1cGdyYWRlcyIsInVwZ3JhZGVzIHRvIHRoZSIsInRvIHRoZSBmZWF0dXJlcyIsInNvdXJjZSBjb2RlIGVuaGFuY2VtZW50cyIsImNvZGUgZW5oYW5jZW1lbnRzIHRvIiwiZW5oYW5jZW1lbnRzIHRvIGFueW9uZSIsInRvIGFueW9uZSBob3dldmVyIiwiYW55b25lIGhvd2V2ZXIgaWYiLCJjaG9vc2UgdG8gbWFrZSIsIm1ha2UgeW91ciBlbmhhbmNlbWVudHMiLCJ5b3VyIGVuaGFuY2VtZW50cyBhdmFpbGFibGUiLCJlbmhhbmNlbWVudHMgYXZhaWxhYmxlIGVpdGhlciIsImF2YWlsYWJsZSBlaXRoZXIgcHVibGljbHkiLCJlaXRoZXIgcHVibGljbHkgb3IiLCJwdWJsaWNseSBvciBkaXJlY3RseSIsIm9yIGRpcmVjdGx5IHRvIiwiZGlyZWN0bHkgdG8gbGF3cmVuY2UiLCJ0byBsYXdyZW5jZSBiZXJrZWxleSIsIm5hdGlvbmFsIGxhYm9yYXRvcnkgd2l0aG91dCIsImxhYm9yYXRvcnkgd2l0aG91dCBpbXBvc2luZyIsIndpdGhvdXQgaW1wb3NpbmcgYSIsImltcG9zaW5nIGEgc2VwYXJhdGUiLCJhZ3JlZW1lbnQgZm9yIHN1Y2giLCJmb3Igc3VjaCBlbmhhbmNlbWVudHMiLCJzdWNoIGVuaGFuY2VtZW50cyB0aGVuIiwiZW5oYW5jZW1lbnRzIHRoZW4geW91IiwidGhlbiB5b3UgaGVyZWJ5IiwiaGVyZWJ5IGdyYW50IHRoZSIsImdyYW50IHRoZSBmb2xsb3dpbmciLCJmb2xsb3dpbmcgbGljZW5zZSBhIiwiaW5zdGFsbCB1c2UgbW9kaWZ5IiwidXNlIG1vZGlmeSBwcmVwYXJlIiwibW9kaWZ5IHByZXBhcmUgZGVyaXZhdGl2ZSIsImRlcml2YXRpdmUgd29ya3MgaW5jb3Jwb3JhdGUiLCJ3b3JrcyBpbmNvcnBvcmF0ZSBpbnRvIiwiaW5jb3Jwb3JhdGUgaW50byBvdGhlciIsImludG8gb3RoZXIgY29tcHV0ZXIiLCJvdGhlciBjb21wdXRlciBzb2Z0d2FyZSIsImNvbXB1dGVyIHNvZnR3YXJlIGRpc3RyaWJ1dGUiLCJzb2Z0d2FyZSBkaXN0cmlidXRlIGFuZCIsImFuZCBzdWJsaWNlbnNlIHN1Y2giLCJzdWJsaWNlbnNlIHN1Y2ggZW5oYW5jZW1lbnRzIiwic3VjaCBlbmhhbmNlbWVudHMgb3IiLCJ0aGVyZW9mIGluIGJpbmFyeSIsImluIGJpbmFyeSBhbmQiLCJiaW5hcnkgYW5kIHNvdXJjZSIsImNvcHlyaWdodCBjIDIwMDMgdGhlIiwiYyAyMDAzIHRoZSByZWdlbnRzIiwiMjAwMyB0aGUgcmVnZW50cyBvZiIsInVuaXZlcnNpdHkgb2YgY2FsaWZvcm5pYSB0aHJvdWdoIiwib2YgY2FsaWZvcm5pYSB0aHJvdWdoIGxhd3JlbmNlIiwiY2FsaWZvcm5pYSB0aHJvdWdoIGxhd3JlbmNlIGJlcmtlbGV5IiwidGhyb3VnaCBsYXdyZW5jZSBiZXJrZWxleSBuYXRpb25hbCIsImJlcmtlbGV5IG5hdGlvbmFsIGxhYm9yYXRvcnkgc3ViamVjdCIsIm5hdGlvbmFsIGxhYm9yYXRvcnkgc3ViamVjdCB0byIsImxhYm9yYXRvcnkgc3ViamVjdCB0byByZWNlaXB0Iiwic3ViamVjdCB0byByZWNlaXB0IG9mIiwidG8gcmVjZWlwdCBvZiBhbnkiLCJyZWNlaXB0IG9mIGFueSByZXF1aXJlZCIsIm9mIGFueSByZXF1aXJlZCBhcHByb3ZhbHMiLCJhbnkgcmVxdWlyZWQgYXBwcm92YWxzIGZyb20iLCJyZXF1aXJlZCBhcHByb3ZhbHMgZnJvbSB0aGUiLCJhcHByb3ZhbHMgZnJvbSB0aGUgdSIsInRoZSB1IHMgZGVwdCIsImRlcHQgb2YgZW5lcmd5IGFsbCIsIm9mIGVuZXJneSBhbGwgcmlnaHRzIiwiZW5lcmd5IGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJ1bml2ZXJzaXR5IG9mIGNhbGlmb3JuaWEgbGF3cmVuY2UiLCJvZiBjYWxpZm9ybmlhIGxhd3JlbmNlIGJlcmtlbGV5IiwiY2FsaWZvcm5pYSBsYXdyZW5jZSBiZXJrZWxleSBuYXRpb25hbCIsImJlcmtlbGV5IG5hdGlvbmFsIGxhYm9yYXRvcnkgdSIsIm5hdGlvbmFsIGxhYm9yYXRvcnkgdSBzIiwibGFib3JhdG9yeSB1IHMgZGVwdCIsImRlcHQgb2YgZW5lcmd5IG5vciIsIm9mIGVuZXJneSBub3IgdGhlIiwiZW5lcmd5IG5vciB0aGUgbmFtZXMiLCJ0aGUgY29weXJpZ2h0IG93bmVyIHRoZSIsImNvcHlyaWdodCBvd25lciB0aGUgdW5pdGVkIiwib3duZXIgdGhlIHVuaXRlZCBzdGF0ZXMiLCJzdGF0ZXMgZ292ZXJubWVudCBvciBjb250cmlidXRvcnMiLCJnb3Zlcm5tZW50IG9yIGNvbnRyaWJ1dG9ycyBiZSIsInN1Y2ggZGFtYWdlIHlvdSBhcmUiLCJkYW1hZ2UgeW91IGFyZSB1bmRlciIsInVuZGVyIG5vIG9ibGlnYXRpb24gd2hhdHNvZXZlciIsIm5vIG9ibGlnYXRpb24gd2hhdHNvZXZlciB0byIsIm9ibGlnYXRpb24gd2hhdHNvZXZlciB0byBwcm92aWRlIiwid2hhdHNvZXZlciB0byBwcm92aWRlIGFueSIsInRvIHByb3ZpZGUgYW55IGJ1ZyIsInByb3ZpZGUgYW55IGJ1ZyBmaXhlcyIsImJ1ZyBmaXhlcyBwYXRjaGVzIG9yIiwiZml4ZXMgcGF0Y2hlcyBvciB1cGdyYWRlcyIsInBhdGNoZXMgb3IgdXBncmFkZXMgdG8iLCJvciB1cGdyYWRlcyB0byB0aGUiLCJ1cGdyYWRlcyB0byB0aGUgZmVhdHVyZXMiLCJ0byB0aGUgZmVhdHVyZXMgZnVuY3Rpb25hbGl0eSIsInBlcmZvcm1hbmNlIG9mIHRoZSBzb3VyY2UiLCJ0aGUgc291cmNlIGNvZGUgZW5oYW5jZW1lbnRzIiwic291cmNlIGNvZGUgZW5oYW5jZW1lbnRzIHRvIiwiY29kZSBlbmhhbmNlbWVudHMgdG8gYW55b25lIiwiZW5oYW5jZW1lbnRzIHRvIGFueW9uZSBob3dldmVyIiwidG8gYW55b25lIGhvd2V2ZXIgaWYiLCJhbnlvbmUgaG93ZXZlciBpZiB5b3UiLCJob3dldmVyIGlmIHlvdSBjaG9vc2UiLCJ5b3UgY2hvb3NlIHRvIG1ha2UiLCJjaG9vc2UgdG8gbWFrZSB5b3VyIiwidG8gbWFrZSB5b3VyIGVuaGFuY2VtZW50cyIsIm1ha2UgeW91ciBlbmhhbmNlbWVudHMgYXZhaWxhYmxlIiwieW91ciBlbmhhbmNlbWVudHMgYXZhaWxhYmxlIGVpdGhlciIsImVuaGFuY2VtZW50cyBhdmFpbGFibGUgZWl0aGVyIHB1YmxpY2x5IiwiYXZhaWxhYmxlIGVpdGhlciBwdWJsaWNseSBvciIsImVpdGhlciBwdWJsaWNseSBvciBkaXJlY3RseSIsInB1YmxpY2x5IG9yIGRpcmVjdGx5IHRvIiwib3IgZGlyZWN0bHkgdG8gbGF3cmVuY2UiLCJkaXJlY3RseSB0byBsYXdyZW5jZSBiZXJrZWxleSIsInRvIGxhd3JlbmNlIGJlcmtlbGV5IG5hdGlvbmFsIiwiYmVya2VsZXkgbmF0aW9uYWwgbGFib3JhdG9yeSB3aXRob3V0IiwibmF0aW9uYWwgbGFib3JhdG9yeSB3aXRob3V0IGltcG9zaW5nIiwibGFib3JhdG9yeSB3aXRob3V0IGltcG9zaW5nIGEiLCJ3aXRob3V0IGltcG9zaW5nIGEgc2VwYXJhdGUiLCJpbXBvc2luZyBhIHNlcGFyYXRlIHdyaXR0ZW4iLCJ3cml0dGVuIGxpY2Vuc2UgYWdyZWVtZW50IGZvciIsImxpY2Vuc2UgYWdyZWVtZW50IGZvciBzdWNoIiwiYWdyZWVtZW50IGZvciBzdWNoIGVuaGFuY2VtZW50cyIsImZvciBzdWNoIGVuaGFuY2VtZW50cyB0aGVuIiwic3VjaCBlbmhhbmNlbWVudHMgdGhlbiB5b3UiLCJlbmhhbmNlbWVudHMgdGhlbiB5b3UgaGVyZWJ5IiwidGhlbiB5b3UgaGVyZWJ5IGdyYW50IiwieW91IGhlcmVieSBncmFudCB0aGUiLCJoZXJlYnkgZ3JhbnQgdGhlIGZvbGxvd2luZyIsImdyYW50IHRoZSBmb2xsb3dpbmcgbGljZW5zZSIsInRoZSBmb2xsb3dpbmcgbGljZW5zZSBhIiwiZm9sbG93aW5nIGxpY2Vuc2UgYSBub24iLCJ0byBpbnN0YWxsIHVzZSBtb2RpZnkiLCJpbnN0YWxsIHVzZSBtb2RpZnkgcHJlcGFyZSIsInVzZSBtb2RpZnkgcHJlcGFyZSBkZXJpdmF0aXZlIiwibW9kaWZ5IHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyIsInByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBpbmNvcnBvcmF0ZSIsImRlcml2YXRpdmUgd29ya3MgaW5jb3Jwb3JhdGUgaW50byIsIndvcmtzIGluY29ycG9yYXRlIGludG8gb3RoZXIiLCJpbmNvcnBvcmF0ZSBpbnRvIG90aGVyIGNvbXB1dGVyIiwiaW50byBvdGhlciBjb21wdXRlciBzb2Z0d2FyZSIsIm90aGVyIGNvbXB1dGVyIHNvZnR3YXJlIGRpc3RyaWJ1dGUiLCJjb21wdXRlciBzb2Z0d2FyZSBkaXN0cmlidXRlIGFuZCIsInNvZnR3YXJlIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UiLCJkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHN1Y2giLCJhbmQgc3VibGljZW5zZSBzdWNoIGVuaGFuY2VtZW50cyIsInN1YmxpY2Vuc2Ugc3VjaCBlbmhhbmNlbWVudHMgb3IiLCJzdWNoIGVuaGFuY2VtZW50cyBvciBkZXJpdmF0aXZlIiwid29ya3MgdGhlcmVvZiBpbiBiaW5hcnkiLCJ0aGVyZW9mIGluIGJpbmFyeSBhbmQiLCJpbiBiaW5hcnkgYW5kIHNvdXJjZSIsImJpbmFyeSBhbmQgc291cmNlIGNvZGUiLCJjb3B5cmlnaHQgYyAyMDAzIHRoZSByZWdlbnRzIiwiYyAyMDAzIHRoZSByZWdlbnRzIG9mIiwiMjAwMyB0aGUgcmVnZW50cyBvZiB0aGUiLCJ0aGUgdW5pdmVyc2l0eSBvZiBjYWxpZm9ybmlhIHRocm91Z2giLCJ1bml2ZXJzaXR5IG9mIGNhbGlmb3JuaWEgdGhyb3VnaCBsYXdyZW5jZSIsIm9mIGNhbGlmb3JuaWEgdGhyb3VnaCBsYXdyZW5jZSBiZXJrZWxleSIsImNhbGlmb3JuaWEgdGhyb3VnaCBsYXdyZW5jZSBiZXJrZWxleSBuYXRpb25hbCIsInRocm91Z2ggbGF3cmVuY2UgYmVya2VsZXkgbmF0aW9uYWwgbGFib3JhdG9yeSIsImxhd3JlbmNlIGJlcmtlbGV5IG5hdGlvbmFsIGxhYm9yYXRvcnkgc3ViamVjdCIsImJlcmtlbGV5IG5hdGlvbmFsIGxhYm9yYXRvcnkgc3ViamVjdCB0byIsIm5hdGlvbmFsIGxhYm9yYXRvcnkgc3ViamVjdCB0byByZWNlaXB0IiwibGFib3JhdG9yeSBzdWJqZWN0IHRvIHJlY2VpcHQgb2YiLCJzdWJqZWN0IHRvIHJlY2VpcHQgb2YgYW55IiwidG8gcmVjZWlwdCBvZiBhbnkgcmVxdWlyZWQiLCJyZWNlaXB0IG9mIGFueSByZXF1aXJlZCBhcHByb3ZhbHMiLCJvZiBhbnkgcmVxdWlyZWQgYXBwcm92YWxzIGZyb20iLCJhbnkgcmVxdWlyZWQgYXBwcm92YWxzIGZyb20gdGhlIl19LHsibGljZW5zZVRleHRzIjpbIkNvcHlyaWdodCDCqSAyMDA4LCAyMDE0IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgT3JhY2xlIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5Zb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGlzIHNvZnR3YXJlIGlzIG5vdCBkZXNpZ25lZCwgbGljZW5zZWQgb3IgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgZGVzaWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBhbnkgbnVjbGVhciBmYWNpbGl0eS4iXSwibGljZW5zZUlkcyI6WyJCU0QtMy1DbGF1c2UtTm8tTnVjbGVhci1MaWNlbnNlLTIwMTQiXSwia2V5d29yZHMiOlsiY29weXJpZ2h0IDIwMDggMjAxNCIsIjIwMDggMjAxNCBvcmFjbGUiLCIyMDE0IG9yYWNsZSBhbmQiLCJvcmFjbGUgYW5kIG9yIiwiaXRzIGFmZmlsaWF0ZXMgYWxsIiwiYWZmaWxpYXRlcyBhbGwgcmlnaHRzIiwibGljZW5zZSB0ZXJtcyByZWRpc3RyaWJ1dGlvbiIsInRlcm1zIHJlZGlzdHJpYnV0aW9uIGFuZCIsIm5hbWUgb2Ygb3JhY2xlIiwib2Ygb3JhY2xlIGNvcnBvcmF0aW9uIiwib3JhY2xlIGNvcnBvcmF0aW9uIG5vciIsImNvcHlyaWdodCAyMDA4IDIwMTQgb3JhY2xlIiwiMjAwOCAyMDE0IG9yYWNsZSBhbmQiLCIyMDE0IG9yYWNsZSBhbmQgb3IiLCJvcmFjbGUgYW5kIG9yIGl0cyIsImFuZCBvciBpdHMgYWZmaWxpYXRlcyIsIm9yIGl0cyBhZmZpbGlhdGVzIGFsbCIsIml0cyBhZmZpbGlhdGVzIGFsbCByaWdodHMiLCJhZmZpbGlhdGVzIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJ0byBsaWNlbnNlIHRlcm1zIHJlZGlzdHJpYnV0aW9uIiwibGljZW5zZSB0ZXJtcyByZWRpc3RyaWJ1dGlvbiBhbmQiLCJ0ZXJtcyByZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIiwidGhlIG5hbWUgb2Ygb3JhY2xlIiwibmFtZSBvZiBvcmFjbGUgY29ycG9yYXRpb24iLCJvZiBvcmFjbGUgY29ycG9yYXRpb24gbm9yIiwib3JhY2xlIGNvcnBvcmF0aW9uIG5vciB0aGUiLCJjb3B5cmlnaHQgMjAwOCAyMDE0IG9yYWNsZSBhbmQiLCIyMDA4IDIwMTQgb3JhY2xlIGFuZCBvciIsIjIwMTQgb3JhY2xlIGFuZCBvciBpdHMiLCJvcmFjbGUgYW5kIG9yIGl0cyBhZmZpbGlhdGVzIiwiYW5kIG9yIGl0cyBhZmZpbGlhdGVzIGFsbCIsIm9yIGl0cyBhZmZpbGlhdGVzIGFsbCByaWdodHMiLCJpdHMgYWZmaWxpYXRlcyBhbGwgcmlnaHRzIHJlc2VydmVkIiwiYWZmaWxpYXRlcyBhbGwgcmlnaHRzIHJlc2VydmVkIHVzZSIsInN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyByZWRpc3RyaWJ1dGlvbiIsInRvIGxpY2Vuc2UgdGVybXMgcmVkaXN0cmlidXRpb24gYW5kIiwibGljZW5zZSB0ZXJtcyByZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIiwidGVybXMgcmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiIsIm5laXRoZXIgdGhlIG5hbWUgb2Ygb3JhY2xlIiwidGhlIG5hbWUgb2Ygb3JhY2xlIGNvcnBvcmF0aW9uIiwibmFtZSBvZiBvcmFjbGUgY29ycG9yYXRpb24gbm9yIiwib2Ygb3JhY2xlIGNvcnBvcmF0aW9uIG5vciB0aGUiLCJvcmFjbGUgY29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgMTk5NC0yMDA5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAqIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAqIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBvciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBcIkFTIElTLFwiIHdpdGhvdXQgYSB3YXJyYW50eSBvZiBhbnkga2luZC4gQUxMIEVYUFJFU1MgT1IgSU1QTElFRCBDT05ESVRJT05TLCBSRVBSRVNFTlRBVElPTlMgQU5EIFdBUlJBTlRJRVMsIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HRU1FTlQsIEFSRSBIRVJFQlkgRVhDTFVERUQuIFNVTiBNSUNST1NZU1RFTVMsIElOQy4gKFwiU1VOXCIpIEFORCBJVFMgTElDRU5TT1JTIFNIQUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFNVRkZFUkVEIEJZIExJQ0VOU0VFIEFTIEEgUkVTVUxUIE9GIFVTSU5HLCBNT0RJRllJTkcgT1IgRElTVFJJQlVUSU5HIFRISVMgU09GVFdBUkUgT1IgSVRTIERFUklWQVRJVkVTLiBJTiBOTyBFVkVOVCBXSUxMIFNVTiBPUiBJVFMgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZIExPU1QgUkVWRU5VRSwgUFJPRklUIE9SIERBVEEsIE9SIEZPUiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBDT05TRVFVRU5USUFMLCBJTkNJREVOVEFMIE9SIFBVTklUSVZFIERBTUFHRVMsIEhPV0VWRVIgQ0FVU0VEIEFORCBSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIE9SIElOQUJJTElUWSBUTyBVU0UgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBTVU4gSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG5Zb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGlzIHNvZnR3YXJlIGlzIG5vdCBkZXNpZ25lZCwgbGljZW5zZWQgb3IgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgZGVzaWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBhbnkgbnVjbGVhciBmYWNpbGl0eS4iXSwibGljZW5zZUlkcyI6WyJCU0QtMy1DbGF1c2UtTm8tTnVjbGVhci1MaWNlbnNlIl0sImtleXdvcmRzIjpbImNvcHlyaWdodCAxOTk0IDIwMDkiLCIxOTk0IDIwMDkgc3VuIiwiMjAwOSBzdW4gbWljcm9zeXN0ZW1zIiwiY29weXJpZ2h0IDE5OTQgMjAwOSBzdW4iLCIxOTk0IDIwMDkgc3VuIG1pY3Jvc3lzdGVtcyIsIjIwMDkgc3VuIG1pY3Jvc3lzdGVtcyBpbmMiLCJjb3B5cmlnaHQgMTk5NCAyMDA5IHN1biBtaWNyb3N5c3RlbXMiLCIxOTk0IDIwMDkgc3VuIG1pY3Jvc3lzdGVtcyBpbmMiLCIyMDA5IHN1biBtaWNyb3N5c3RlbXMgaW5jIGFsbCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgLSBSZWRpc3RyaWJ1dGlvbiBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgLSBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gb3IgdGhlIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgXCJBUyBJUyxcIiB3aXRob3V0IGEgd2FycmFudHkgb2YgYW55IGtpbmQuIEFMTCBFWFBSRVNTIE9SIElNUExJRUQgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TIEFORCBXQVJSQU5USUVTLCBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0VNRU5ULCBBUkUgSEVSRUJZIEVYQ0xVREVELiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuIChcIlNVTlwiKSBBTkQgSVRTIExJQ0VOU09SUyBTSEFMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBTVUZGRVJFRCBCWSBMSUNFTlNFRSBBUyBBIFJFU1VMVCBPRiBVU0lORywgTU9ESUZZSU5HIE9SIERJU1RSSUJVVElORyBUSElTIFNPRlRXQVJFIE9SIElUUyBERVJJVkFUSVZFUy4gSU4gTk8gRVZFTlQgV0lMTCBTVU4gT1IgSVRTIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBMT1NUIFJFVkVOVUUsIFBST0ZJVCBPUiBEQVRBLCBPUiBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgQ09OU0VRVUVOVElBTCwgSU5DSURFTlRBTCBPUiBQVU5JVElWRSBEQU1BR0VTLCBIT1dFVkVSIENBVVNFRCBBTkQgUkVHQVJETEVTUyBPRiBUSEUgVEhFT1JZIE9GIExJQUJJTElUWSwgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgU1VOIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuWW91IGFja25vd2xlZGdlIHRoYXQgdGhpcyBzb2Z0d2FyZSBpcyBub3QgZGVzaWduZWQgb3IgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgZGVzaWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBhbnkgbnVjbGVhciBmYWNpbGl0eS4iXSwibGljZW5zZUlkcyI6WyJCU0QtMy1DbGF1c2UtTm8tTnVjbGVhci1XYXJyYW50eSJdLCJrZXl3b3JkcyI6WyJjIDIwMDMgMjAwNSIsIjIwMDMgMjAwNSBzdW4iLCIyMDA1IHN1biBtaWNyb3N5c3RlbXMiLCJub3QgZGVzaWduZWQgb3IiLCJkZXNpZ25lZCBvciBpbnRlbmRlZCIsImNvcHlyaWdodCBjIDIwMDMgMjAwNSIsImMgMjAwMyAyMDA1IHN1biIsIjIwMDMgMjAwNSBzdW4gbWljcm9zeXN0ZW1zIiwiMjAwNSBzdW4gbWljcm9zeXN0ZW1zIGluYyIsImlzIG5vdCBkZXNpZ25lZCBvciIsIm5vdCBkZXNpZ25lZCBvciBpbnRlbmRlZCIsImRlc2lnbmVkIG9yIGludGVuZGVkIGZvciIsImNvcHlyaWdodCBjIDIwMDMgMjAwNSBzdW4iLCJjIDIwMDMgMjAwNSBzdW4gbWljcm9zeXN0ZW1zIiwiMjAwMyAyMDA1IHN1biBtaWNyb3N5c3RlbXMgaW5jIiwiMjAwNSBzdW4gbWljcm9zeXN0ZW1zIGluYyBhbGwiLCJzb2Z0d2FyZSBpcyBub3QgZGVzaWduZWQgb3IiLCJpcyBub3QgZGVzaWduZWQgb3IgaW50ZW5kZWQiLCJub3QgZGVzaWduZWQgb3IgaW50ZW5kZWQgZm9yIiwiZGVzaWduZWQgb3IgaW50ZW5kZWQgZm9yIHVzZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBsaXN0ZWQgaW4gdGhpcyBsaWNlbnNlIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRoZSBjb3B5cmlnaHQgaG9sZGVycyBwcm92aWRlIG5vIHJlYXNzdXJhbmNlcyB0aGF0IHRoZSBzb3VyY2UgY29kZSBwcm92aWRlZCBkb2VzIG5vdCBpbmZyaW5nZSBhbnkgcGF0ZW50LCBjb3B5cmlnaHQsIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIHRoaXJkIHBhcnRpZXMuIFRoZSBjb3B5cmlnaHQgaG9sZGVycyBkaXNjbGFpbSBhbnkgbGlhYmlsaXR5IHRvIGFueSByZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGFnYWluc3QgcmVjaXBpZW50IGJ5IGFueSB0aGlyZCBwYXJ0eSBmb3IgaW5mcmluZ2VtZW50IG9mIHRoYXQgcGFydGllcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iXSwibGljZW5zZUlkcyI6WyJCU0QtMy1DbGF1c2UtT3Blbi1NUEkiXSwia2V5d29yZHMiOlsiZm9sbG93aW5nIGRpc2NsYWltZXIgbGlzdGVkIiwiY29weXJpZ2h0IGhvbGRlcnMgbm9yIiwiaG9sZGVycyBub3IgdGhlIiwiY29weXJpZ2h0IGhvbGRlcnMgcHJvdmlkZSIsImhvbGRlcnMgcHJvdmlkZSBubyIsImNvcHlyaWdodCBvciBhbnkiLCJwYXJ0aWVzIHRoZSBjb3B5cmlnaHQiLCJjb3B5cmlnaHQgaG9sZGVycyBkaXNjbGFpbSIsImhvbGRlcnMgZGlzY2xhaW0gYW55IiwiY2xhaW1zIGJyb3VnaHQgYWdhaW5zdCIsImJyb3VnaHQgYWdhaW5zdCByZWNpcGllbnQiLCJhZ2FpbnN0IHJlY2lwaWVudCBieSIsInJlY2lwaWVudCBieSBhbnkiLCJwYXJ0eSBmb3IgaW5mcmluZ2VtZW50IiwiZm9yIGluZnJpbmdlbWVudCBvZiIsImluZnJpbmdlbWVudCBvZiB0aGF0Iiwib2YgdGhhdCBwYXJ0aWVzIiwidGhhdCBwYXJ0aWVzIGludGVsbGVjdHVhbCIsInBhcnRpZXMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IiwicHJvcGVydHkgcmlnaHRzIHRoaXMiLCJyaWdodHMgdGhpcyBzb2Z0d2FyZSIsInRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBsaXN0ZWQiLCJmb2xsb3dpbmcgZGlzY2xhaW1lciBsaXN0ZWQgaW4iLCJ0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm9yIiwiY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSIsImhvbGRlcnMgbm9yIHRoZSBuYW1lcyIsInBlcm1pc3Npb24gdGhlIGNvcHlyaWdodCBob2xkZXJzIiwidGhlIGNvcHlyaWdodCBob2xkZXJzIHByb3ZpZGUiLCJjb3B5cmlnaHQgaG9sZGVycyBwcm92aWRlIG5vIiwiaG9sZGVycyBwcm92aWRlIG5vIHJlYXNzdXJhbmNlcyIsImFueSBwYXRlbnQgY29weXJpZ2h0IG9yIiwicGF0ZW50IGNvcHlyaWdodCBvciBhbnkiLCJjb3B5cmlnaHQgb3IgYW55IG90aGVyIiwicHJvcGVydHkgcmlnaHRzIG9mIHRoaXJkIiwib2YgdGhpcmQgcGFydGllcyB0aGUiLCJ0aGlyZCBwYXJ0aWVzIHRoZSBjb3B5cmlnaHQiLCJwYXJ0aWVzIHRoZSBjb3B5cmlnaHQgaG9sZGVycyIsInRoZSBjb3B5cmlnaHQgaG9sZGVycyBkaXNjbGFpbSIsImNvcHlyaWdodCBob2xkZXJzIGRpc2NsYWltIGFueSIsImhvbGRlcnMgZGlzY2xhaW0gYW55IGxpYWJpbGl0eSIsImZvciBjbGFpbXMgYnJvdWdodCBhZ2FpbnN0IiwiY2xhaW1zIGJyb3VnaHQgYWdhaW5zdCByZWNpcGllbnQiLCJicm91Z2h0IGFnYWluc3QgcmVjaXBpZW50IGJ5IiwiYWdhaW5zdCByZWNpcGllbnQgYnkgYW55IiwicmVjaXBpZW50IGJ5IGFueSB0aGlyZCIsInRoaXJkIHBhcnR5IGZvciBpbmZyaW5nZW1lbnQiLCJwYXJ0eSBmb3IgaW5mcmluZ2VtZW50IG9mIiwiZm9yIGluZnJpbmdlbWVudCBvZiB0aGF0IiwiaW5mcmluZ2VtZW50IG9mIHRoYXQgcGFydGllcyIsIm9mIHRoYXQgcGFydGllcyBpbnRlbGxlY3R1YWwiLCJ0aGF0IHBhcnRpZXMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IiwicGFydGllcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIiwiaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyB0aGlzIiwicHJvcGVydHkgcmlnaHRzIHRoaXMgc29mdHdhcmUiLCJyaWdodHMgdGhpcyBzb2Z0d2FyZSBpcyIsImFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgbGlzdGVkIiwidGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGxpc3RlZCBpbiIsImZvbGxvd2luZyBkaXNjbGFpbWVyIGxpc3RlZCBpbiB0aGlzIiwibmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMiLCJvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm9yIiwidGhlIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUiLCJjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzIiwiaG9sZGVycyBub3IgdGhlIG5hbWVzIG9mIiwicHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIHRoZSBjb3B5cmlnaHQiLCJ3cml0dGVuIHBlcm1pc3Npb24gdGhlIGNvcHlyaWdodCBob2xkZXJzIiwicGVybWlzc2lvbiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgcHJvdmlkZSIsInRoZSBjb3B5cmlnaHQgaG9sZGVycyBwcm92aWRlIG5vIiwiY29weXJpZ2h0IGhvbGRlcnMgcHJvdmlkZSBubyByZWFzc3VyYW5jZXMiLCJob2xkZXJzIHByb3ZpZGUgbm8gcmVhc3N1cmFuY2VzIHRoYXQiLCJwcm92aWRlZCBkb2VzIG5vdCBpbmZyaW5nZSBhbnkiLCJkb2VzIG5vdCBpbmZyaW5nZSBhbnkgcGF0ZW50IiwiaW5mcmluZ2UgYW55IHBhdGVudCBjb3B5cmlnaHQgb3IiLCJhbnkgcGF0ZW50IGNvcHlyaWdodCBvciBhbnkiLCJwYXRlbnQgY29weXJpZ2h0IG9yIGFueSBvdGhlciIsImNvcHlyaWdodCBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIiwiaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiB0aGlyZCIsInByb3BlcnR5IHJpZ2h0cyBvZiB0aGlyZCBwYXJ0aWVzIiwicmlnaHRzIG9mIHRoaXJkIHBhcnRpZXMgdGhlIiwib2YgdGhpcmQgcGFydGllcyB0aGUgY29weXJpZ2h0IiwidGhpcmQgcGFydGllcyB0aGUgY29weXJpZ2h0IGhvbGRlcnMiLCJwYXJ0aWVzIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBkaXNjbGFpbSIsInRoZSBjb3B5cmlnaHQgaG9sZGVycyBkaXNjbGFpbSBhbnkiLCJjb3B5cmlnaHQgaG9sZGVycyBkaXNjbGFpbSBhbnkgbGlhYmlsaXR5IiwiaG9sZGVycyBkaXNjbGFpbSBhbnkgbGlhYmlsaXR5IHRvIiwicmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBhZ2FpbnN0IiwiZm9yIGNsYWltcyBicm91Z2h0IGFnYWluc3QgcmVjaXBpZW50IiwiY2xhaW1zIGJyb3VnaHQgYWdhaW5zdCByZWNpcGllbnQgYnkiLCJicm91Z2h0IGFnYWluc3QgcmVjaXBpZW50IGJ5IGFueSIsImFnYWluc3QgcmVjaXBpZW50IGJ5IGFueSB0aGlyZCIsInJlY2lwaWVudCBieSBhbnkgdGhpcmQgcGFydHkiLCJieSBhbnkgdGhpcmQgcGFydHkgZm9yIiwiYW55IHRoaXJkIHBhcnR5IGZvciBpbmZyaW5nZW1lbnQiLCJ0aGlyZCBwYXJ0eSBmb3IgaW5mcmluZ2VtZW50IG9mIiwicGFydHkgZm9yIGluZnJpbmdlbWVudCBvZiB0aGF0IiwiZm9yIGluZnJpbmdlbWVudCBvZiB0aGF0IHBhcnRpZXMiLCJpbmZyaW5nZW1lbnQgb2YgdGhhdCBwYXJ0aWVzIGludGVsbGVjdHVhbCIsIm9mIHRoYXQgcGFydGllcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkiLCJ0aGF0IHBhcnRpZXMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyIsInBhcnRpZXMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyB0aGlzIiwiaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyB0aGlzIHNvZnR3YXJlIiwicHJvcGVydHkgcmlnaHRzIHRoaXMgc29mdHdhcmUgaXMiLCJyaWdodHMgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgKGMpIFx1MDAzY3llYXJcdTAwM2UgXHUwMDNjb3duZXJcdTAwM2UuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiIsIkNvcHlyaWdodCAoYykgMjAxMiBKZXNzZSB2YW4gZGVuIEtpZWJvb20uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbm1ldDpcblxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyXG4gICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZVxuICAgIGRpc3RyaWJ1dGlvbi5cbiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG5cIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG5MSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG5PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcblNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbkxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG5USEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Vcbk9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIl0sImxpY2Vuc2VJZHMiOlsiQlNELTMtQ2xhdXNlIl0sImtleXdvcmRzIjpbImNvcHlyaWdodCBjIDIwMTIiLCJjIDIwMTIgamVzc2UiLCIyMDEyIGplc3NlIHZhbiIsImplc3NlIHZhbiBkZW4iLCJ2YW4gZGVuIGtpZWJvb20iLCJkZW4ga2llYm9vbSBhbGwiLCJraWVib29tIGFsbCByaWdodHMiLCJuYW1lIG9mIGdvb2dsZSIsIm9mIGdvb2dsZSBpbmMiLCJnb29nbGUgaW5jIG5vciIsImNvcHlyaWdodCBjIDIwMTIgamVzc2UiLCJjIDIwMTIgamVzc2UgdmFuIiwiMjAxMiBqZXNzZSB2YW4gZGVuIiwiamVzc2UgdmFuIGRlbiBraWVib29tIiwidmFuIGRlbiBraWVib29tIGFsbCIsImRlbiBraWVib29tIGFsbCByaWdodHMiLCJraWVib29tIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJ0aGUgbmFtZSBvZiBnb29nbGUiLCJuYW1lIG9mIGdvb2dsZSBpbmMiLCJvZiBnb29nbGUgaW5jIG5vciIsImdvb2dsZSBpbmMgbm9yIHRoZSIsImNvcHlyaWdodCBjIDIwMTIgamVzc2UgdmFuIiwiYyAyMDEyIGplc3NlIHZhbiBkZW4iLCIyMDEyIGplc3NlIHZhbiBkZW4ga2llYm9vbSIsImplc3NlIHZhbiBkZW4ga2llYm9vbSBhbGwiLCJ2YW4gZGVuIGtpZWJvb20gYWxsIHJpZ2h0cyIsImRlbiBraWVib29tIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJraWVib29tIGFsbCByaWdodHMgcmVzZXJ2ZWQgcmVkaXN0cmlidXRpb24iLCJuZWl0aGVyIHRoZSBuYW1lIG9mIGdvb2dsZSIsInRoZSBuYW1lIG9mIGdvb2dsZSBpbmMiLCJuYW1lIG9mIGdvb2dsZSBpbmMgbm9yIiwib2YgZ29vZ2xlIGluYyBub3IgdGhlIiwiZ29vZ2xlIGluYyBub3IgdGhlIG5hbWVzIl19LHsibGljZW5zZVRleHRzIjpbIkJTRC00LUNsYXVzZSAoVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLVNwZWNpZmljKVxuXG5Db3B5cmlnaHQgW3ZhcmlvdXMgeWVhcnNdIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6IFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuXG5cbiAgIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTICcnQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIl0sImxpY2Vuc2VJZHMiOlsiQlNELTQtQ2xhdXNlLVVDIl0sImtleXdvcmRzIjpbImJzZCA0IGNsYXVzZSIsIjQgY2xhdXNlIHVuaXZlcnNpdHkiLCJjbGF1c2UgdW5pdmVyc2l0eSBvZiIsIm9mIGNhbGlmb3JuaWEgc3BlY2lmaWMiLCJjYWxpZm9ybmlhIHNwZWNpZmljIGNvcHlyaWdodCIsInNwZWNpZmljIGNvcHlyaWdodCB2YXJpb3VzIiwiY29weXJpZ2h0IHZhcmlvdXMgeWVhcnMiLCJ2YXJpb3VzIHllYXJzIHRoZSIsInllYXJzIHRoZSByZWdlbnRzIiwiY29udHJpYnV0b3JzIDQgbmVpdGhlciIsImJzZCA0IGNsYXVzZSB1bml2ZXJzaXR5IiwiNCBjbGF1c2UgdW5pdmVyc2l0eSBvZiIsImNsYXVzZSB1bml2ZXJzaXR5IG9mIGNhbGlmb3JuaWEiLCJ1bml2ZXJzaXR5IG9mIGNhbGlmb3JuaWEgc3BlY2lmaWMiLCJvZiBjYWxpZm9ybmlhIHNwZWNpZmljIGNvcHlyaWdodCIsImNhbGlmb3JuaWEgc3BlY2lmaWMgY29weXJpZ2h0IHZhcmlvdXMiLCJzcGVjaWZpYyBjb3B5cmlnaHQgdmFyaW91cyB5ZWFycyIsImNvcHlyaWdodCB2YXJpb3VzIHllYXJzIHRoZSIsInZhcmlvdXMgeWVhcnMgdGhlIHJlZ2VudHMiLCJ5ZWFycyB0aGUgcmVnZW50cyBvZiIsImFuZCBpdHMgY29udHJpYnV0b3JzIDQiLCJpdHMgY29udHJpYnV0b3JzIDQgbmVpdGhlciIsImNvbnRyaWJ1dG9ycyA0IG5laXRoZXIgdGhlIiwiYnNkIDQgY2xhdXNlIHVuaXZlcnNpdHkgb2YiLCI0IGNsYXVzZSB1bml2ZXJzaXR5IG9mIGNhbGlmb3JuaWEiLCJjbGF1c2UgdW5pdmVyc2l0eSBvZiBjYWxpZm9ybmlhIHNwZWNpZmljIiwidW5pdmVyc2l0eSBvZiBjYWxpZm9ybmlhIHNwZWNpZmljIGNvcHlyaWdodCIsIm9mIGNhbGlmb3JuaWEgc3BlY2lmaWMgY29weXJpZ2h0IHZhcmlvdXMiLCJjYWxpZm9ybmlhIHNwZWNpZmljIGNvcHlyaWdodCB2YXJpb3VzIHllYXJzIiwic3BlY2lmaWMgY29weXJpZ2h0IHZhcmlvdXMgeWVhcnMgdGhlIiwiY29weXJpZ2h0IHZhcmlvdXMgeWVhcnMgdGhlIHJlZ2VudHMiLCJ2YXJpb3VzIHllYXJzIHRoZSByZWdlbnRzIG9mIiwieWVhcnMgdGhlIHJlZ2VudHMgb2YgdGhlIiwiYmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMgNCIsImFuZCBpdHMgY29udHJpYnV0b3JzIDQgbmVpdGhlciIsIml0cyBjb250cmlidXRvcnMgNCBuZWl0aGVyIHRoZSIsImNvbnRyaWJ1dG9ycyA0IG5laXRoZXIgdGhlIG5hbWUiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChjKSBcdTAwM2N5ZWFyXHUwMDNlIFx1MDAzY293bmVyXHUwMDNlLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OlxuXG4gICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBvcmdhbml6YXRpb24gLlxuXG4gICA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ09QWVJJR0hUIEhPTERFUiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iXSwibGljZW5zZUlkcyI6WyJCU0QtNC1DbGF1c2UiXSwia2V5d29yZHMiOlsiYnkgdGhlIG9yZ2FuaXphdGlvbiIsInRoZSBvcmdhbml6YXRpb24gNCIsIm9yZ2FuaXphdGlvbiA0IG5laXRoZXIiLCJieSBjb3B5cmlnaHQgaG9sZGVyIiwiZGV2ZWxvcGVkIGJ5IHRoZSBvcmdhbml6YXRpb24iLCJieSB0aGUgb3JnYW5pemF0aW9uIDQiLCJ0aGUgb3JnYW5pemF0aW9uIDQgbmVpdGhlciIsIm9yZ2FuaXphdGlvbiA0IG5laXRoZXIgdGhlIiwiaXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IiwicHJvdmlkZWQgYnkgY29weXJpZ2h0IGhvbGRlciIsImJ5IGNvcHlyaWdodCBob2xkZXIgYXMiLCJzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIG9yZ2FuaXphdGlvbiIsImRldmVsb3BlZCBieSB0aGUgb3JnYW5pemF0aW9uIDQiLCJieSB0aGUgb3JnYW5pemF0aW9uIDQgbmVpdGhlciIsInRoZSBvcmdhbml6YXRpb24gNCBuZWl0aGVyIHRoZSIsIm9yZ2FuaXphdGlvbiA0IG5laXRoZXIgdGhlIG5hbWUiLCJzb2Z0d2FyZSBpcyBwcm92aWRlZCBieSBjb3B5cmlnaHQiLCJpcyBwcm92aWRlZCBieSBjb3B5cmlnaHQgaG9sZGVyIiwicHJvdmlkZWQgYnkgY29weXJpZ2h0IGhvbGRlciBhcyIsImJ5IGNvcHlyaWdodCBob2xkZXIgYXMgaXMiXX0seyJsaWNlbnNlVGV4dHMiOlsiQlNEIFByb3RlY3Rpb24gTGljZW5zZVxuXG5GZWJydWFyeSAyMDAyIFByZWFtYmxlXG5cbi0tLS0tLS0tXG5cblRoZSBCZXJrZWxleSBTb2Z0d2FyZSBEaXN0cmlidXRpb24gKFwiQlNEXCIpIGxpY2Vuc2UgaGFzIHByb3ZlbiB2ZXJ5IGVmZmVjdGl2ZSBvdmVyIHRoZSB5ZWFycyBhdCBhbGxvd2luZyBmb3IgYSB3aWRlIHNwcmVhZCBvZiB3b3JrIHRocm91Z2hvdXQgYm90aCBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCBwcm9kdWN0cy4gRm9yIHByb2dyYW1tZXJzIHdob3NlIHByaW1hcnkgaW50ZW50aW9uIGlzIHRvIGltcHJvdmUgdGhlIGdlbmVyYWwgcXVhbGl0eSBvZiBhdmFpbGFibGUgc29mdHdhcmUsIGl0IGlzIGFyZ3VhYmxlIHRoYXQgdGhlcmUgaXMgbm8gYmV0dGVyIGxpY2Vuc2UgdGhhbiB0aGUgQlNEIGxpY2Vuc2UsIGFzIGl0IHBlcm1pdHMgaW1wcm92ZW1lbnRzIHRvIGJlIHVzZWQgd2hlcmV2ZXIgdGhleSB3aWxsIGhlbHAsIHdpdGhvdXQgaWRlYWxvZ2ljYWwgb3IgbWV0YWxsaWMgY29uc3RyYWludC5cblxuVGhpcyBpcyBvZiBwYXJ0aWN1bGFyIHZhbHVlIHRvIHRob3NlIHdobyBwcm9kdWNlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbnMgb2YgcHJvcG9zZWQgc3RhbmRhcmRzOiBUaGUgY2FzZSBvZiBUQ1AvSVAgY2xlYXJseSBpbGx1c3RyYXRlcyB0aGF0IGZyZWVseSBhbmQgdW5pdmVyc2FsbHkgYXZhaWxhYmxlIGltcGxlbWVudGF0aW9ucyBsZWFkcyB0aGUgcmFwaWQgYWNjZXB0YW5jZSBvZiBzdGFuZGFyZHMgLS0gb2Z0ZW4gZXZlbiBiZWluZyB1c2VkIGluc3RlYWQgb2YgYSBkZSBqdXJlIHN0YW5kYXJkIChlZywgT1NJIG5ldHdvcmsgbW9kZWxzKS5cblxuV2l0aCB0aGUgcmFwaWQgcHJvbGlmZXJhdGlvbiBvZiBzb2Z0d2FyZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGhvd2V2ZXIsIHRoZSBjb250aW51ZWQgc3VjY2VzcyBvZiB0aGlzIHJvbGUgaXMgY2FsbGVkIGludG8gcXVlc3Rpb24uIEdpdmVuIHRoYXQgdGhlIGluY2x1c2lvbiBvZiBhIGZldyBsaW5lcyBvZiBcIkdQTC10YWludGVkXCIgd29yayBpbnRvIGEgbGFyZ2VyIGJvZHkgb2Ygd29yayB3aWxsIHJlc3VsdCBpbiByZXN0cmljdGVkIGRpc3RyaWJ1dGlvbiAtLSBhbmQgZ2l2ZW4gdGhhdCBmdXJ0aGVyIHdvcmsgd2lsbCBsaWtlbHkgYnVpbGQgdXBvbiB0aGUgXCJ0YWludGVkXCIgcG9ydGlvbnMsIG1ha2luZyB0aGVtIGRpZmZpY3VsdCB0byByZW1vdmUgYXQgYSBmdXR1cmUgZGF0ZSAtLSB0aGVyZSBhcmUgaW5ldml0YWJsZSBjaXJjdW1zdGFuY2VzIHdoZXJlIGF1dGhvcnMgd291bGQsIGluIG9yZGVyIHRvIHByb3RlY3QgdGhlaXIgZ29hbCBvZiBwcm92aWRpbmcgZm9yIHRoZSB3aWRlc3ByZWFkIHVzYWdlIG9mIHRoZWlyIHdvcmssIHdpc2ggdG8gZ3VhcmQgYWdhaW5zdCBzdWNoIFwiR1BMLXRhaW50XCIuXG5cbkluIGFkZGl0aW9uLCBvbmUgY2FuIGltYWdpbmUgdGhhdCBjb21wYW5pZXMgd2hpY2ggb3BlcmF0ZSBieSBwcm9kdWNpbmcgYW5kIHNlbGxpbmcgKHBvc3NpYmx5IGNsb3NlZC1zb3VyY2UpIGNvZGUgd291bGQgd2lzaCB0byBwcm90ZWN0IHRoZW1zZWx2ZXMgYWdhaW5zdCB0aGUgcmlzZSBvZiBhIEdQTC1saWNlbnNlZCBjb21wZXRpdG9yLiBXaGlsZSB1bmRlciBleGlzdGluZyBsaWNlbnNlcyB0aGlzIHdvdWxkIG1lYW4gbm90IHJlbGVhc2luZyB0aGVpciBjb2RlIHVuZGVyIGFueSBmb3JtIG9mIG9wZW4gbGljZW5zZSwgaWYgYSBsaWNlbnNlIGV4aXN0ZWQgdW5kZXIgd2hpY2ggdGhleSBjb3VsZCBpbmNvcnBvcmF0ZSBhbnkgaW1wcm92ZW1lbnRzIGJhY2sgaW50byB0aGVpciBvd24gKGNvbW1lcmNpYWwpIHByb2R1Y3RzIHRoZW4gdGhleSBtaWdodCBiZSBmYXIgbW9yZSB3aWxsaW5nIHRvIHByb3ZpZGUgZm9yIG5vbi1jbG9zZWQgZGlzdHJpYnV0aW9uLlxuXG5Gb3IgdGhlIGFib3ZlIHJlYXNvbnMsIHdlIHB1dCBmb3J0aCB0aGlzIFwiQlNEIFByb3RlY3Rpb24gTGljZW5zZVwiOiBBIGxpY2Vuc2UgZGVzaWduZWQgdG8gcmV0YWluIHRoZSBmcmVlZG9tIGdyYW50ZWQgYnkgdGhlIEJTRCBsaWNlbnNlIHRvIHVzZSBsaWNlbnNlZCB3b3JrcyBpbiBhIHdpZGUgdmFyaWV0eSBvZiBzZXR0aW5ncywgYm90aCBub24tY29tbWVyY2lhbCBhbmQgY29tbWVyY2lhbCwgd2hpbGUgcHJvdGVjdGluZyB0aGUgd29yayBmcm9tIGhhdmluZyBmdXR1cmUgY29udHJpYnV0b3JzIHJlc3RyaWN0IHRoYXQgZnJlZWRvbS5cblxuVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiwgYW5kIG1vZGlmaWNhdGlvbiBmb2xsb3cuXG5cbkJTRCBQUk9URUNUSU9OIExJQ0VOU0UgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiwgQU5EIE1PRElGSUNBVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgIDAuIERlZmluaXRpb25zLlxuXG4gICAgICBhKSBcIlByb2dyYW1cIiwgYmVsb3csIHJlZmVycyB0byBhbnkgcHJvZ3JhbSBvciB3b3JrIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuXG5cbiAgICAgIGIpIEEgXCJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtXCIsIGJlbG93LCByZWZlcnMgdG8gZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdy5cblxuICAgICAgYykgXCJNb2RpZmljYXRpb25cIiwgYmVsb3csIHJlZmVycyB0byB0aGUgYWN0IG9mIGNyZWF0aW5nIGRlcml2YXRpdmUgd29ya3MuXG5cbiAgICAgIGQpIFwiWW91XCIsIGJlbG93LCByZWZlcnMgdG8gZWFjaCBsaWNlbnNlZS5cblxuICAgMS4gU2NvcGUuXG5cbiAgIFRoaXMgbGljZW5zZSBnb3Zlcm5zIHRoZSBjb3B5aW5nLCBkaXN0cmlidXRpb24sIGFuZCBtb2RpZmljYXRpb24gb2YgdGhlIFByb2dyYW0uIE90aGVyIGFjdGl2aXRpZXMgYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgbGljZW5zZTsgVGhlIGFjdCBvZiBydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0uXG5cbiAgIDIuIFZlcmJhdGltIGNvcGllcy5cblxuICAgWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLlxuXG4gICAzLiBNb2RpZmljYXRpb24gYW5kIHJlZGlzdHJpYnV0aW9uIHVuZGVyIGNsb3NlZCBsaWNlbnNlLlxuXG4gICBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtLCBhbmQgZGlzdHJpYnV0ZSB0aGUgcmVzdWx0aW5nIGRlcml2YXRpdmUgd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgICBhKSBUaGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvbiB0aGUgUHJvZ3JhbSBtdXN0IGJlIHJlcHJvZHVjZWQgYW5kIGluY2x1ZGVkIGluIHRoZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbiwgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCBpbiBhIG1hbm5lciBpbiB3aGljaCBzdWNoIG5vdGljZXMgYXJlIG5vcm1hbGx5IGRpc3RyaWJ1dGVkLlxuXG4gICAgICBiKSBUaGUgZGVyaXZhdGl2ZSB3b3JrIG11c3QgYmUgY2xlYXJseSBpZGVudGlmaWVkIGFzIHN1Y2gsIGluIG9yZGVyIHRoYXQgaXQgbWF5IG5vdCBiZSBjb25mdXNlZCB3aXRoIHRoZSBvcmlnaW5hbCB3b3JrLlxuXG4gICAgICBjKSBUaGUgbGljZW5zZSB1bmRlciB3aGljaCB0aGUgZGVyaXZhdGl2ZSB3b3JrIGlzIGRpc3RyaWJ1dGVkIG11c3QgZXhwcmVzc2x5IHByb2hpYml0IHRoZSBkaXN0cmlidXRpb24gb2YgZnVydGhlciBkZXJpdmF0aXZlIHdvcmtzLlxuXG4gICA0LiBNb2RpZmljYXRpb24gYW5kIHJlZGlzdHJpYnV0aW9uIHVuZGVyIG9wZW4gbGljZW5zZS5cblxuICAgWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSwgYW5kIGRpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZyBkZXJpdmF0aXZlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgICAgYSkgVGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb24gdGhlIFByb2dyYW0gbXVzdCBiZSByZXByb2R1Y2VkIGFuZCBpbmNsdWRlZCBpbiB0aGUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24sIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgaW4gYSBtYW5uZXIgaW4gd2hpY2ggc3VjaCBub3RpY2VzIGFyZSBub3JtYWxseSBkaXN0cmlidXRlZC5cblxuICAgICAgYikgWW91IG11c3QgY2xlYXJseSBpbmRpY2F0ZSB0aGUgbmF0dXJlIGFuZCBkYXRlIG9mIGFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIFByb2dyYW0uIFRoZSBmdWxsIGRldGFpbHMgbmVlZCBub3QgbmVjZXNzYXJpbHkgYmUgaW5jbHVkZWQgaW4gdGhlIGluZGl2aWR1YWwgbW9kaWZpZWQgZmlsZXMsIHByb3ZpZGVkIHRoYXQgZWFjaCBtb2RpZmllZCBmaWxlIGlzIGNsZWFybHkgbWFya2VkIGFzIHN1Y2ggYW5kIGluc3RydWN0aW9ucyBhcmUgaW5jbHVkZWQgb24gd2hlcmUgdGhlIGZ1bGwgZGV0YWlscyBvZiB0aGUgbW9kaWZpY2F0aW9ucyBtYXkgYmUgZm91bmQuXG5cbiAgICAgIGMpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICA1LiBJbXBsaWVkIGFjY2VwdGFuY2UuXG5cbiAgIFlvdSBtYXkgbm90IGNvcHkgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrcyBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgbGljZW5zZS4gQ29uc2VxdWVudGx5LCBhbnkgc3VjaCBhY3Rpb24gd2lsbCBiZSB0YWtlbiBhcyBpbXBsaWVkIGFjY2VwdGFuY2Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZS5cblxuICAgNi4gTk8gV0FSUkFOVFkuXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIl0sImxpY2Vuc2VJZHMiOlsiQlNELVByb3RlY3Rpb24iXSwia2V5d29yZHMiOlsicHJvdGVjdGlvbiBsaWNlbnNlIGZlYnJ1YXJ5IiwibGljZW5zZSBmZWJydWFyeSAyMDAyIiwiZmVicnVhcnkgMjAwMiBwcmVhbWJsZSIsIjIwMDIgcHJlYW1ibGUgdGhlIiwicHJlYW1ibGUgdGhlIGJlcmtlbGV5IiwidGhlIGJlcmtlbGV5IHNvZnR3YXJlIiwiYmVya2VsZXkgc29mdHdhcmUgZGlzdHJpYnV0aW9uIiwic29mdHdhcmUgZGlzdHJpYnV0aW9uIGJzZCIsImRpc3RyaWJ1dGlvbiBic2QgbGljZW5zZSIsImJzZCBsaWNlbnNlIGhhcyIsImxpY2Vuc2UgaGFzIHByb3ZlbiIsImhhcyBwcm92ZW4gdmVyeSIsInByb3ZlbiB2ZXJ5IGVmZmVjdGl2ZSIsInZlcnkgZWZmZWN0aXZlIG92ZXIiLCJlZmZlY3RpdmUgb3ZlciB0aGUiLCJvdmVyIHRoZSB5ZWFycyIsInRoZSB5ZWFycyBhdCIsInllYXJzIGF0IGFsbG93aW5nIiwiYXQgYWxsb3dpbmcgZm9yIiwiYWxsb3dpbmcgZm9yIGEiLCJmb3IgYSB3aWRlIiwiYSB3aWRlIHNwcmVhZCIsIndpZGUgc3ByZWFkIG9mIiwic3ByZWFkIG9mIHdvcmsiLCJvZiB3b3JrIHRocm91Z2hvdXQiLCJ3b3JrIHRocm91Z2hvdXQgYm90aCIsInRocm91Z2hvdXQgYm90aCBjb21tZXJjaWFsIiwibm9uIGNvbW1lcmNpYWwgcHJvZHVjdHMiLCJjb21tZXJjaWFsIHByb2R1Y3RzIGZvciIsInByb2R1Y3RzIGZvciBwcm9ncmFtbWVycyIsImZvciBwcm9ncmFtbWVycyB3aG9zZSIsInByb2dyYW1tZXJzIHdob3NlIHByaW1hcnkiLCJ3aG9zZSBwcmltYXJ5IGludGVudGlvbiIsInByaW1hcnkgaW50ZW50aW9uIGlzIiwiaW50ZW50aW9uIGlzIHRvIiwiaXMgdG8gaW1wcm92ZSIsInRvIGltcHJvdmUgdGhlIiwiaW1wcm92ZSB0aGUgZ2VuZXJhbCIsInRoZSBnZW5lcmFsIHF1YWxpdHkiLCJnZW5lcmFsIHF1YWxpdHkgb2YiLCJxdWFsaXR5IG9mIGF2YWlsYWJsZSIsIm9mIGF2YWlsYWJsZSBzb2Z0d2FyZSIsImF2YWlsYWJsZSBzb2Z0d2FyZSBpdCIsIml0IGlzIGFyZ3VhYmxlIiwiaXMgYXJndWFibGUgdGhhdCIsImFyZ3VhYmxlIHRoYXQgdGhlcmUiLCJpcyBubyBiZXR0ZXIiLCJubyBiZXR0ZXIgbGljZW5zZSIsImJldHRlciBsaWNlbnNlIHRoYW4iLCJsaWNlbnNlIHRoYW4gdGhlIiwidGhhbiB0aGUgYnNkIiwiYnNkIGxpY2Vuc2UgYXMiLCJsaWNlbnNlIGFzIGl0IiwiYXMgaXQgcGVybWl0cyIsIml0IHBlcm1pdHMgaW1wcm92ZW1lbnRzIiwicGVybWl0cyBpbXByb3ZlbWVudHMgdG8iLCJpbXByb3ZlbWVudHMgdG8gYmUiLCJiZSB1c2VkIHdoZXJldmVyIiwidXNlZCB3aGVyZXZlciB0aGV5Iiwid2hlcmV2ZXIgdGhleSB3aWxsIiwidGhleSB3aWxsIGhlbHAiLCJ3aWxsIGhlbHAgd2l0aG91dCIsImhlbHAgd2l0aG91dCBpZGVhbG9naWNhbCIsIndpdGhvdXQgaWRlYWxvZ2ljYWwgb3IiLCJpZGVhbG9naWNhbCBvciBtZXRhbGxpYyIsIm9yIG1ldGFsbGljIGNvbnN0cmFpbnQiLCJtZXRhbGxpYyBjb25zdHJhaW50IHRoaXMiLCJjb25zdHJhaW50IHRoaXMgaXMiLCJ0aGlzIGlzIG9mIiwiaXMgb2YgcGFydGljdWxhciIsIm9mIHBhcnRpY3VsYXIgdmFsdWUiLCJwYXJ0aWN1bGFyIHZhbHVlIHRvIiwidmFsdWUgdG8gdGhvc2UiLCJ0aG9zZSB3aG8gcHJvZHVjZSIsIndobyBwcm9kdWNlIHJlZmVyZW5jZSIsInByb2R1Y2UgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9ucyIsInJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbnMgb2YiLCJpbXBsZW1lbnRhdGlvbnMgb2YgcHJvcG9zZWQiLCJvZiBwcm9wb3NlZCBzdGFuZGFyZHMiLCJwcm9wb3NlZCBzdGFuZGFyZHMgdGhlIiwic3RhbmRhcmRzIHRoZSBjYXNlIiwiY2FzZSBvZiB0Y3AiLCJvZiB0Y3AgaXAiLCJ0Y3AgaXAgY2xlYXJseSIsImlwIGNsZWFybHkgaWxsdXN0cmF0ZXMiLCJjbGVhcmx5IGlsbHVzdHJhdGVzIHRoYXQiLCJpbGx1c3RyYXRlcyB0aGF0IGZyZWVseSIsInRoYXQgZnJlZWx5IGFuZCIsImZyZWVseSBhbmQgdW5pdmVyc2FsbHkiLCJhbmQgdW5pdmVyc2FsbHkgYXZhaWxhYmxlIiwidW5pdmVyc2FsbHkgYXZhaWxhYmxlIGltcGxlbWVudGF0aW9ucyIsImF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbnMgbGVhZHMiLCJpbXBsZW1lbnRhdGlvbnMgbGVhZHMgdGhlIiwibGVhZHMgdGhlIHJhcGlkIiwidGhlIHJhcGlkIGFjY2VwdGFuY2UiLCJyYXBpZCBhY2NlcHRhbmNlIG9mIiwiYWNjZXB0YW5jZSBvZiBzdGFuZGFyZHMiLCJvZiBzdGFuZGFyZHMgb2Z0ZW4iLCJzdGFuZGFyZHMgb2Z0ZW4gZXZlbiIsIm9mdGVuIGV2ZW4gYmVpbmciLCJldmVuIGJlaW5nIHVzZWQiLCJiZWluZyB1c2VkIGluc3RlYWQiLCJ1c2VkIGluc3RlYWQgb2YiLCJpbnN0ZWFkIG9mIGEiLCJvZiBhIGRlIiwiYSBkZSBqdXJlIiwiZGUganVyZSBzdGFuZGFyZCIsImp1cmUgc3RhbmRhcmQgZWciLCJzdGFuZGFyZCBlZyBvc2kiLCJlZyBvc2kgbmV0d29yayIsIm9zaSBuZXR3b3JrIG1vZGVscyIsIm5ldHdvcmsgbW9kZWxzIHdpdGgiLCJtb2RlbHMgd2l0aCB0aGUiLCJ3aXRoIHRoZSByYXBpZCIsInRoZSByYXBpZCBwcm9saWZlcmF0aW9uIiwicmFwaWQgcHJvbGlmZXJhdGlvbiBvZiIsInByb2xpZmVyYXRpb24gb2Ygc29mdHdhcmUiLCJvZiBzb2Z0d2FyZSBsaWNlbnNlZCIsInNvZnR3YXJlIGxpY2Vuc2VkIHVuZGVyIiwiaG93ZXZlciB0aGUgY29udGludWVkIiwidGhlIGNvbnRpbnVlZCBzdWNjZXNzIiwiY29udGludWVkIHN1Y2Nlc3Mgb2YiLCJzdWNjZXNzIG9mIHRoaXMiLCJvZiB0aGlzIHJvbGUiLCJ0aGlzIHJvbGUgaXMiLCJyb2xlIGlzIGNhbGxlZCIsImlzIGNhbGxlZCBpbnRvIiwiY2FsbGVkIGludG8gcXVlc3Rpb24iLCJpbnRvIHF1ZXN0aW9uIGdpdmVuIiwicXVlc3Rpb24gZ2l2ZW4gdGhhdCIsImdpdmVuIHRoYXQgdGhlIiwidGhhdCB0aGUgaW5jbHVzaW9uIiwib2YgYSBmZXciLCJsaW5lcyBvZiBncGwiLCJvZiBncGwgdGFpbnRlZCIsImdwbCB0YWludGVkIHdvcmsiLCJ0YWludGVkIHdvcmsgaW50byIsIndvcmsgaW50byBhIiwiYSBsYXJnZXIgYm9keSIsImxhcmdlciBib2R5IG9mIiwiYm9keSBvZiB3b3JrIiwib2Ygd29yayB3aWxsIiwid29yayB3aWxsIHJlc3VsdCIsIndpbGwgcmVzdWx0IGluIiwicmVzdWx0IGluIHJlc3RyaWN0ZWQiLCJpbiByZXN0cmljdGVkIGRpc3RyaWJ1dGlvbiIsInJlc3RyaWN0ZWQgZGlzdHJpYnV0aW9uIGFuZCIsImRpc3RyaWJ1dGlvbiBhbmQgZ2l2ZW4iLCJhbmQgZ2l2ZW4gdGhhdCIsImdpdmVuIHRoYXQgZnVydGhlciIsInRoYXQgZnVydGhlciB3b3JrIiwiZnVydGhlciB3b3JrIHdpbGwiLCJ3b3JrIHdpbGwgbGlrZWx5Iiwid2lsbCBsaWtlbHkgYnVpbGQiLCJsaWtlbHkgYnVpbGQgdXBvbiIsImJ1aWxkIHVwb24gdGhlIiwidXBvbiB0aGUgdGFpbnRlZCIsInRoZSB0YWludGVkIHBvcnRpb25zIiwidGFpbnRlZCBwb3J0aW9ucyBtYWtpbmciLCJwb3J0aW9ucyBtYWtpbmcgdGhlbSIsIm1ha2luZyB0aGVtIGRpZmZpY3VsdCIsInRoZW0gZGlmZmljdWx0IHRvIiwiZGlmZmljdWx0IHRvIHJlbW92ZSIsInRvIHJlbW92ZSBhdCIsInJlbW92ZSBhdCBhIiwiYXQgYSBmdXR1cmUiLCJhIGZ1dHVyZSBkYXRlIiwiZnV0dXJlIGRhdGUgdGhlcmUiLCJkYXRlIHRoZXJlIGFyZSIsInRoZXJlIGFyZSBpbmV2aXRhYmxlIiwiYXJlIGluZXZpdGFibGUgY2lyY3Vtc3RhbmNlcyIsImluZXZpdGFibGUgY2lyY3Vtc3RhbmNlcyB3aGVyZSIsImNpcmN1bXN0YW5jZXMgd2hlcmUgYXV0aG9ycyIsIndoZXJlIGF1dGhvcnMgd291bGQiLCJhdXRob3JzIHdvdWxkIGluIiwid291bGQgaW4gb3JkZXIiLCJvcmRlciB0byBwcm90ZWN0IiwidG8gcHJvdGVjdCB0aGVpciIsInByb3RlY3QgdGhlaXIgZ29hbCIsInRoZWlyIGdvYWwgb2YiLCJnb2FsIG9mIHByb3ZpZGluZyIsIm9mIHByb3ZpZGluZyBmb3IiLCJmb3IgdGhlIHdpZGVzcHJlYWQiLCJ0aGUgd2lkZXNwcmVhZCB1c2FnZSIsIndpZGVzcHJlYWQgdXNhZ2Ugb2YiLCJ1c2FnZSBvZiB0aGVpciIsIm9mIHRoZWlyIHdvcmsiLCJ0aGVpciB3b3JrIHdpc2giLCJ3b3JrIHdpc2ggdG8iLCJ3aXNoIHRvIGd1YXJkIiwidG8gZ3VhcmQgYWdhaW5zdCIsImd1YXJkIGFnYWluc3Qgc3VjaCIsImFnYWluc3Qgc3VjaCBncGwiLCJzdWNoIGdwbCB0YWludCIsImdwbCB0YWludCBpbiIsInRhaW50IGluIGFkZGl0aW9uIiwiaW4gYWRkaXRpb24gb25lIiwiYWRkaXRpb24gb25lIGNhbiIsIm9uZSBjYW4gaW1hZ2luZSIsImNhbiBpbWFnaW5lIHRoYXQiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChjKSAyMDExLCBEZXVzdHksIExMQ1xuXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoaXMgc29mdHdhcmUgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBEZXVzdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBEZXVzdHksIExMQy5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiJdLCJsaWNlbnNlSWRzIjpbIkJTRC1Tb3VyY2UtQ29kZSJdLCJrZXl3b3JkcyI6WyJjb3B5cmlnaHQgYyAyMDExIiwiYyAyMDExIGRldXN0eSIsIjIwMTEgZGV1c3R5IGxsYyIsImRldXN0eSBsbGMgYWxsIiwiZm9sbG93aW5nIGRpc2NsYWltZXIgbmVpdGhlciIsImRpc2NsYWltZXIgbmVpdGhlciB0aGUiLCJuYW1lIG9mIGRldXN0eSIsIm9mIGRldXN0eSBub3IiLCJkZXVzdHkgbm9yIHRoZSIsInBlcm1pc3Npb24gb2YgZGV1c3R5Iiwib2YgZGV1c3R5IGxsYyIsImRldXN0eSBsbGMgdGhpcyIsImxsYyB0aGlzIHNvZnR3YXJlIiwiY29weXJpZ2h0IGMgMjAxMSBkZXVzdHkiLCJjIDIwMTEgZGV1c3R5IGxsYyIsIjIwMTEgZGV1c3R5IGxsYyBhbGwiLCJkZXVzdHkgbGxjIGFsbCByaWdodHMiLCJzb2Z0d2FyZSBpbiBzb3VyY2UgYW5kIiwidGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIG5laXRoZXIiLCJmb2xsb3dpbmcgZGlzY2xhaW1lciBuZWl0aGVyIHRoZSIsImRpc2NsYWltZXIgbmVpdGhlciB0aGUgbmFtZSIsInRoZSBuYW1lIG9mIGRldXN0eSIsIm5hbWUgb2YgZGV1c3R5IG5vciIsIm9mIGRldXN0eSBub3IgdGhlIiwiZGV1c3R5IG5vciB0aGUgbmFtZXMiLCJ3cml0dGVuIHBlcm1pc3Npb24gb2YgZGV1c3R5IiwicGVybWlzc2lvbiBvZiBkZXVzdHkgbGxjIiwib2YgZGV1c3R5IGxsYyB0aGlzIiwiZGV1c3R5IGxsYyB0aGlzIHNvZnR3YXJlIiwibGxjIHRoaXMgc29mdHdhcmUgaXMiLCJjb3B5cmlnaHQgYyAyMDExIGRldXN0eSBsbGMiLCJjIDIwMTEgZGV1c3R5IGxsYyBhbGwiLCIyMDExIGRldXN0eSBsbGMgYWxsIHJpZ2h0cyIsImRldXN0eSBsbGMgYWxsIHJpZ2h0cyByZXNlcnZlZCIsIm9mIHRoaXMgc29mdHdhcmUgaW4gc291cmNlIiwidGhpcyBzb2Z0d2FyZSBpbiBzb3VyY2UgYW5kIiwic29mdHdhcmUgaW4gc291cmNlIGFuZCBiaW5hcnkiLCJhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIG5laXRoZXIiLCJ0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgbmVpdGhlciB0aGUiLCJmb2xsb3dpbmcgZGlzY2xhaW1lciBuZWl0aGVyIHRoZSBuYW1lIiwiZGlzY2xhaW1lciBuZWl0aGVyIHRoZSBuYW1lIG9mIiwibmVpdGhlciB0aGUgbmFtZSBvZiBkZXVzdHkiLCJ0aGUgbmFtZSBvZiBkZXVzdHkgbm9yIiwibmFtZSBvZiBkZXVzdHkgbm9yIHRoZSIsIm9mIGRldXN0eSBub3IgdGhlIG5hbWVzIiwiZGV1c3R5IG5vciB0aGUgbmFtZXMgb2YiLCJwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgZGV1c3R5Iiwid3JpdHRlbiBwZXJtaXNzaW9uIG9mIGRldXN0eSBsbGMiLCJwZXJtaXNzaW9uIG9mIGRldXN0eSBsbGMgdGhpcyIsIm9mIGRldXN0eSBsbGMgdGhpcyBzb2Z0d2FyZSIsImRldXN0eSBsbGMgdGhpcyBzb2Z0d2FyZSBpcyIsImxsYyB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIl19LHsibGljZW5zZVRleHRzIjpbIkJvb3N0IFNvZnR3YXJlIExpY2Vuc2UgLSBWZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieSB0aGlzIGxpY2Vuc2UgKHRoZSBcIlNvZnR3YXJlXCIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLCBleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzpcblxuVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRpbmcgdGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgYW5kIGFsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUgd29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5IGEgc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiJdLCJsaWNlbnNlSWRzIjpbIkJTTC0xLjAiXSwia2V5d29yZHMiOlsiYm9vc3Qgc29mdHdhcmUgbGljZW5zZSIsIjEgMCBhdWd1c3QiLCIwIGF1Z3VzdCAxN3RoIiwiYXVndXN0IDE3dGggMjAwMyIsIjE3dGggMjAwMyBwZXJtaXNzaW9uIiwiMjAwMyBwZXJtaXNzaW9uIGlzIiwib3Igb3JnYW5pemF0aW9uIG9idGFpbmluZyIsIm9yZ2FuaXphdGlvbiBvYnRhaW5pbmcgYSIsImFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQiLCJkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkiLCJyZXByb2R1Y2UgZGlzcGxheSBkaXN0cmlidXRlIiwiZGlzcGxheSBkaXN0cmlidXRlIGV4ZWN1dGUiLCJkaXN0cmlidXRlIGV4ZWN1dGUgYW5kIiwiZXhlY3V0ZSBhbmQgdHJhbnNtaXQiLCJ0cmFuc21pdCB0aGUgc29mdHdhcmUiLCJhbmQgdG8gcHJlcGFyZSIsInRvIHBlcm1pdCB0aGlyZCIsInBlcm1pdCB0aGlyZCBwYXJ0aWVzIiwicGFydGllcyB0byB3aG9tIiwiZG8gc28gYWxsIiwic28gYWxsIHN1YmplY3QiLCJhbGwgc3ViamVjdCB0byIsInRoZSBmb2xsb3dpbmcgdGhlIiwiYW5kIHRoaXMgZW50aXJlIiwidGhpcyBlbnRpcmUgc3RhdGVtZW50IiwiZW50aXJlIHN0YXRlbWVudCBpbmNsdWRpbmciLCJzdGF0ZW1lbnQgaW5jbHVkaW5nIHRoZSIsImFib3ZlIGxpY2Vuc2UgZ3JhbnQiLCJsaWNlbnNlIGdyYW50IHRoaXMiLCJncmFudCB0aGlzIHJlc3RyaWN0aW9uIiwidGhpcyByZXN0cmljdGlvbiBhbmQiLCJyZXN0cmljdGlvbiBhbmQgdGhlIiwiZm9sbG93aW5nIGRpc2NsYWltZXIgbXVzdCIsImRpc2NsYWltZXIgbXVzdCBiZSIsInBhcnQgYW5kIGFsbCIsImFsbCBkZXJpdmF0aXZlIHdvcmtzIiwic29mdHdhcmUgdW5sZXNzIHN1Y2giLCJ1bmxlc3Mgc3VjaCBjb3BpZXMiLCJzdWNoIGNvcGllcyBvciIsImNvcGllcyBvciBkZXJpdmF0aXZlIiwid29ya3MgYXJlIHNvbGVseSIsImFyZSBzb2xlbHkgaW4iLCJmb3JtIG9mIG1hY2hpbmUiLCJtYWNoaW5lIGV4ZWN1dGFibGUgb2JqZWN0IiwiYnkgYSBzb3VyY2UiLCJhIHNvdXJjZSBsYW5ndWFnZSIsInNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IiLCJsYW5ndWFnZSBwcm9jZXNzb3IgdGhlIiwicHJvY2Vzc29yIHRoZSBzb2Z0d2FyZSIsImJvb3N0IHNvZnR3YXJlIGxpY2Vuc2UgdmVyc2lvbiIsInZlcnNpb24gMSAwIGF1Z3VzdCIsIjEgMCBhdWd1c3QgMTd0aCIsIjAgYXVndXN0IDE3dGggMjAwMyIsImF1Z3VzdCAxN3RoIDIwMDMgcGVybWlzc2lvbiIsIjE3dGggMjAwMyBwZXJtaXNzaW9uIGlzIiwiMjAwMyBwZXJtaXNzaW9uIGlzIGhlcmVieSIsImFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uIiwicGVyc29uIG9yIG9yZ2FuaXphdGlvbiBvYnRhaW5pbmciLCJvciBvcmdhbml6YXRpb24gb2J0YWluaW5nIGEiLCJvcmdhbml6YXRpb24gb2J0YWluaW5nIGEgY29weSIsImFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIiwiYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieSIsImRvY3VtZW50YXRpb24gY292ZXJlZCBieSB0aGlzIiwidGhpcyBsaWNlbnNlIHRoZSBzb2Z0d2FyZSIsImxpY2Vuc2UgdGhlIHNvZnR3YXJlIHRvIiwidGhlIHNvZnR3YXJlIHRvIHVzZSIsInVzZSByZXByb2R1Y2UgZGlzcGxheSBkaXN0cmlidXRlIiwicmVwcm9kdWNlIGRpc3BsYXkgZGlzdHJpYnV0ZSBleGVjdXRlIiwiZGlzcGxheSBkaXN0cmlidXRlIGV4ZWN1dGUgYW5kIiwiZGlzdHJpYnV0ZSBleGVjdXRlIGFuZCB0cmFuc21pdCIsImV4ZWN1dGUgYW5kIHRyYW5zbWl0IHRoZSIsImFuZCB0cmFuc21pdCB0aGUgc29mdHdhcmUiLCJ0cmFuc21pdCB0aGUgc29mdHdhcmUgYW5kIiwic29mdHdhcmUgYW5kIHRvIHByZXBhcmUiLCJhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIiwiYW5kIHRvIHBlcm1pdCB0aGlyZCIsInRvIHBlcm1pdCB0aGlyZCBwYXJ0aWVzIiwicGVybWl0IHRoaXJkIHBhcnRpZXMgdG8iLCJ0aGlyZCBwYXJ0aWVzIHRvIHdob20iLCJwYXJ0aWVzIHRvIHdob20gdGhlIiwidG8gZG8gc28gYWxsIiwiZG8gc28gYWxsIHN1YmplY3QiLCJzbyBhbGwgc3ViamVjdCB0byIsImFsbCBzdWJqZWN0IHRvIHRoZSIsInRvIHRoZSBmb2xsb3dpbmcgdGhlIiwidGhlIGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IiwiZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlcyIsInRoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiIsInNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSIsImFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQiLCJ0aGlzIGVudGlyZSBzdGF0ZW1lbnQgaW5jbHVkaW5nIiwiZW50aXJlIHN0YXRlbWVudCBpbmNsdWRpbmcgdGhlIiwic3RhdGVtZW50IGluY2x1ZGluZyB0aGUgYWJvdmUiLCJpbmNsdWRpbmcgdGhlIGFib3ZlIGxpY2Vuc2UiLCJ0aGUgYWJvdmUgbGljZW5zZSBncmFudCIsImFib3ZlIGxpY2Vuc2UgZ3JhbnQgdGhpcyIsImxpY2Vuc2UgZ3JhbnQgdGhpcyByZXN0cmljdGlvbiIsImdyYW50IHRoaXMgcmVzdHJpY3Rpb24gYW5kIiwidGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIiwicmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmciLCJ0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgbXVzdCIsImZvbGxvd2luZyBkaXNjbGFpbWVyIG11c3QgYmUiLCJkaXNjbGFpbWVyIG11c3QgYmUgaW5jbHVkZWQiLCJpbiBwYXJ0IGFuZCBhbGwiLCJwYXJ0IGFuZCBhbGwgZGVyaXZhdGl2ZSIsImFuZCBhbGwgZGVyaXZhdGl2ZSB3b3JrcyIsImFsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIiwib2YgdGhlIHNvZnR3YXJlIHVubGVzcyIsInRoZSBzb2Z0d2FyZSB1bmxlc3Mgc3VjaCIsInNvZnR3YXJlIHVubGVzcyBzdWNoIGNvcGllcyIsInVubGVzcyBzdWNoIGNvcGllcyBvciIsInN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUiLCJjb3BpZXMgb3IgZGVyaXZhdGl2ZSB3b3JrcyIsImRlcml2YXRpdmUgd29ya3MgYXJlIHNvbGVseSIsIndvcmtzIGFyZSBzb2xlbHkgaW4iLCJhcmUgc29sZWx5IGluIHRoZSIsInNvbGVseSBpbiB0aGUgZm9ybSIsInRoZSBmb3JtIG9mIG1hY2hpbmUiLCJmb3JtIG9mIG1hY2hpbmUgZXhlY3V0YWJsZSIsIm9mIG1hY2hpbmUgZXhlY3V0YWJsZSBvYmplY3QiLCJtYWNoaW5lIGV4ZWN1dGFibGUgb2JqZWN0IGNvZGUiLCJleGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCIsIm9iamVjdCBjb2RlIGdlbmVyYXRlZCBieSIsImNvZGUgZ2VuZXJhdGVkIGJ5IGEiLCJnZW5lcmF0ZWQgYnkgYSBzb3VyY2UiLCJieSBhIHNvdXJjZSBsYW5ndWFnZSIsImEgc291cmNlIGxhbmd1YWdlIHByb2Nlc3NvciIsInNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IgdGhlIiwibGFuZ3VhZ2UgcHJvY2Vzc29yIHRoZSBzb2Z0d2FyZSIsInByb2Nlc3NvciB0aGUgc29mdHdhcmUgaXMiLCJib29zdCBzb2Z0d2FyZSBsaWNlbnNlIHZlcnNpb24gMSIsImxpY2Vuc2UgdmVyc2lvbiAxIDAgYXVndXN0IiwidmVyc2lvbiAxIDAgYXVndXN0IDE3dGgiLCIxIDAgYXVndXN0IDE3dGggMjAwMyIsIjAgYXVndXN0IDE3dGggMjAwMyBwZXJtaXNzaW9uIiwiYXVndXN0IDE3dGggMjAwMyBwZXJtaXNzaW9uIGlzIiwiMTd0aCAyMDAzIHBlcm1pc3Npb24gaXMgaGVyZWJ5IiwiMjAwMyBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIiwiY2hhcmdlIHRvIGFueSBwZXJzb24gb3IiLCJ0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIsImFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uIG9idGFpbmluZyIsInBlcnNvbiBvciBvcmdhbml6YXRpb24gb2J0YWluaW5nIGEiLCJvciBvcmdhbml6YXRpb24gb2J0YWluaW5nIGEgY29weSIsIm9yZ2FuaXphdGlvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIiwiYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSIsImNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCIsIm9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIiwic29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQiLCJhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieSIsImFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkgdGhpcyIsImRvY3VtZW50YXRpb24gY292ZXJlZCBieSB0aGlzIGxpY2Vuc2UiLCJieSB0aGlzIGxpY2Vuc2UgdGhlIHNvZnR3YXJlIiwidGhpcyBsaWNlbnNlIHRoZSBzb2Z0d2FyZSB0byIsImxpY2Vuc2UgdGhlIHNvZnR3YXJlIHRvIHVzZSIsInRoZSBzb2Z0d2FyZSB0byB1c2UgcmVwcm9kdWNlIiwic29mdHdhcmUgdG8gdXNlIHJlcHJvZHVjZSBkaXNwbGF5IiwidG8gdXNlIHJlcHJvZHVjZSBkaXNwbGF5IGRpc3RyaWJ1dGUiLCJ1c2UgcmVwcm9kdWNlIGRpc3BsYXkgZGlzdHJpYnV0ZSBleGVjdXRlIiwicmVwcm9kdWNlIGRpc3BsYXkgZGlzdHJpYnV0ZSBleGVjdXRlIGFuZCIsImRpc3BsYXkgZGlzdHJpYnV0ZSBleGVjdXRlIGFuZCB0cmFuc21pdCIsImRpc3RyaWJ1dGUgZXhlY3V0ZSBhbmQgdHJhbnNtaXQgdGhlIiwiZXhlY3V0ZSBhbmQgdHJhbnNtaXQgdGhlIHNvZnR3YXJlIiwiYW5kIHRyYW5zbWl0IHRoZSBzb2Z0d2FyZSBhbmQiLCJ0cmFuc21pdCB0aGUgc29mdHdhcmUgYW5kIHRvIiwidGhlIHNvZnR3YXJlIGFuZCB0byBwcmVwYXJlIiwic29mdHdhcmUgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSIsImFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MiLCJ0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YiLCJwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIiwid29ya3Mgb2YgdGhlIHNvZnR3YXJlIGFuZCIsInNvZnR3YXJlIGFuZCB0byBwZXJtaXQgdGhpcmQiLCJhbmQgdG8gcGVybWl0IHRoaXJkIHBhcnRpZXMiLCJ0byBwZXJtaXQgdGhpcmQgcGFydGllcyB0byIsInBlcm1pdCB0aGlyZCBwYXJ0aWVzIHRvIHdob20iLCJ0aGlyZCBwYXJ0aWVzIHRvIHdob20gdGhlIiwicGFydGllcyB0byB3aG9tIHRoZSBzb2Z0d2FyZSIsImZ1cm5pc2hlZCB0byBkbyBzbyBhbGwiLCJ0byBkbyBzbyBhbGwgc3ViamVjdCIsImRvIHNvIGFsbCBzdWJqZWN0IHRvIiwic28gYWxsIHN1YmplY3QgdG8gdGhlIiwiYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyIsInN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0aGUiLCJ0byB0aGUgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQiLCJ0aGUgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlcyIsImZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZXMgaW4iLCJ0aGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIiwibm90aWNlcyBpbiB0aGUgc29mdHdhcmUgYW5kIiwiaW4gdGhlIHNvZnR3YXJlIGFuZCB0aGlzIiwidGhlIHNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSIsInNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQiLCJhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50IGluY2x1ZGluZyIsInRoaXMgZW50aXJlIHN0YXRlbWVudCBpbmNsdWRpbmcgdGhlIiwiZW50aXJlIHN0YXRlbWVudCBpbmNsdWRpbmcgdGhlIGFib3ZlIiwic3RhdGVtZW50IGluY2x1ZGluZyB0aGUgYWJvdmUgbGljZW5zZSIsImluY2x1ZGluZyB0aGUgYWJvdmUgbGljZW5zZSBncmFudCIsInRoZSBhYm92ZSBsaWNlbnNlIGdyYW50IHRoaXMiLCJhYm92ZSBsaWNlbnNlIGdyYW50IHRoaXMgcmVzdHJpY3Rpb24iLCJsaWNlbnNlIGdyYW50IHRoaXMgcmVzdHJpY3Rpb24gYW5kIiwiZ3JhbnQgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIiwidGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDT1BZUklHSFQgTk9USUNFXG5cblRoZXNlIHBhdHRlcm5zIGFuZCB0aGUgZ2VuZXJhdGluZyBzaCBzY3JpcHQgYXJlIENvcHlyaWdodCAoYykgR01WIDE5OTFcblxuVGhlc2UgcGF0dGVybnMgd2VyZSBkZXZlbG9wZWQgZm9yIGludGVybmFsIEdNViB1c2UgYW5kIGFyZSBtYWRlIHB1YmxpYyBpbiB0aGUgaG9wZSB0aGF0IHRoZXkgd2lsbCBiZW5lZml0IG90aGVycy4gQWxzbywgc3ByZWFkaW5nIHRoZXNlIHBhdHRlcm5zIHRocm91Z2hvdXQgdGhlIFNwYW5pc2gtbGFuZ3VhZ2UgVGVYIGNvbW11bml0eSBpcyBleHBlY3RlZCB0byBwcm92aWRlIGJhY2stYmVuZWZpdHMgdG8gR01WIGluIHRoYXQgaXQgY2FuIGhlbHAga2VlcGluZyBHTVYgaW4gdGhlIG1haW5zdHJlYW0gb2Ygc3BhbmlzaCB1c2Vycy5cblxuSG93ZXZlciwgdGhpcyBpcyBnaXZlbiBmb3IgZnJlZSBhbmQgV0lUSE9VVCBBTlkgV0FSUkFOVFkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgY2FuIEp1bGlvIFNhbmNoZXosIEdNViwgSm9zJ2UgQS4gTWF+bmFzIG9yIGFueSBhZ2VudHMgb3IgcmVwcmVzZW50YXRpdmVzIHRoZXJlb2YgYmUgaGVsZCByZXNwb25zaWJsZSBmb3IgYW55IGVycm9ycyBpbiB0aGlzIHNvZnR3YXJlIG5vciBmb3IgYW55IGRhbWFnZXMgZGVyaXZlZCBmcm9tIGl0cyB1c2UsIGV2ZW4gaW4gY2FzZSBhbnkgb2YgdGhlIGFib3ZlIGhhcyBiZWVuIG5vdGlmaWVkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuIElmIGFueSBzdWNoIHNpdHVhdGlvbiBhcmlzZXMsIHlvdSByZXNwb25zaWJsZSBmb3IgcmVwYWlyLiBVc2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcyBhbiBleHBsaWNpdCBhY2NlcHRhbmNlIG9mIHRoZXNlIGNvbmRpdGlvbnMuXG5cbllvdSBjYW4gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiBZb3UgY2Fubm90IGRlbGV0ZSB0aGlzIGNvcHlyaWdodCBub3RpY2UuIElmIHlvdSBjaGFuZ2UgdGhpcyBzb2Z0d2FyZSwgeW91IG11c3QgaW5jbHVkZSBjb21tZW50cyBleHBsYWluaW5nIHdobywgd2hlbiBhbmQgd2h5LiBZb3UgYXJlIGtpbmRseSByZXF1ZXN0ZWQgdG8gc2VuZCBhbnkgY2hhbmdlcyB0byB0ZXhAZ212LmVzLiBJZiB5b3UgY2hhbmdlIHRoZSBnZW5lcmF0aW5nIHNjcmlwdCwgeW91IG11c3QgaW5jbHVkZSBjb2RlIGluIGl0IHN1Y2ggdGhhdCBhbnkgb3V0cHV0IGlzIGNsZWFybHkgbGFiZWxlZCBhcyBnZW5lcmF0ZWQgYnkgYSBtb2RpZmllZCBzY3JpcHQuIERlc3BpdGUgdGhlIGxhY2sgb2Ygd2FycmFudHksIHdlIHdvdWxkIGxpa2UgdG8gaGVhciBhYm91dCBhbnkgcHJvYmxlbSB5b3UgZmluZC4gUGxlYXNlIHJlcG9ydCBwcm9ibGVtcyB0byB0ZXhAZ212LmVzLiBFTkQgT0YgQ09QWVJJR0hUIE5PVElDRSJdLCJsaWNlbnNlSWRzIjpbIkJhaHlwaCJdLCJrZXl3b3JkcyI6WyJub3RpY2UgdGhlc2UgcGF0dGVybnMiLCJ0aGVzZSBwYXR0ZXJucyBhbmQiLCJwYXR0ZXJucyBhbmQgdGhlIiwiYW5kIHRoZSBnZW5lcmF0aW5nIiwidGhlIGdlbmVyYXRpbmcgc2giLCJnZW5lcmF0aW5nIHNoIHNjcmlwdCIsInNoIHNjcmlwdCBhcmUiLCJzY3JpcHQgYXJlIGNvcHlyaWdodCIsImNvcHlyaWdodCBjIGdtdiIsImMgZ212IDE5OTEiLCJnbXYgMTk5MSB0aGVzZSIsIjE5OTEgdGhlc2UgcGF0dGVybnMiLCJ0aGVzZSBwYXR0ZXJucyB3ZXJlIiwicGF0dGVybnMgd2VyZSBkZXZlbG9wZWQiLCJ3ZXJlIGRldmVsb3BlZCBmb3IiLCJkZXZlbG9wZWQgZm9yIGludGVybmFsIiwiZm9yIGludGVybmFsIGdtdiIsImludGVybmFsIGdtdiB1c2UiLCJnbXYgdXNlIGFuZCIsInVzZSBhbmQgYXJlIiwiYW5kIGFyZSBtYWRlIiwiYXJlIG1hZGUgcHVibGljIiwibWFkZSBwdWJsaWMgaW4iLCJwdWJsaWMgaW4gdGhlIiwiaG9wZSB0aGF0IHRoZXkiLCJ0aGF0IHRoZXkgd2lsbCIsInRoZXkgd2lsbCBiZW5lZml0Iiwid2lsbCBiZW5lZml0IG90aGVycyIsImJlbmVmaXQgb3RoZXJzIGFsc28iLCJvdGhlcnMgYWxzbyBzcHJlYWRpbmciLCJhbHNvIHNwcmVhZGluZyB0aGVzZSIsInNwcmVhZGluZyB0aGVzZSBwYXR0ZXJucyIsInRoZXNlIHBhdHRlcm5zIHRocm91Z2hvdXQiLCJwYXR0ZXJucyB0aHJvdWdob3V0IHRoZSIsInRocm91Z2hvdXQgdGhlIHNwYW5pc2giLCJ0aGUgc3BhbmlzaCBsYW5ndWFnZSIsInNwYW5pc2ggbGFuZ3VhZ2UgdGV4IiwibGFuZ3VhZ2UgdGV4IGNvbW11bml0eSIsInRleCBjb21tdW5pdHkgaXMiLCJjb21tdW5pdHkgaXMgZXhwZWN0ZWQiLCJleHBlY3RlZCB0byBwcm92aWRlIiwidG8gcHJvdmlkZSBiYWNrIiwicHJvdmlkZSBiYWNrIGJlbmVmaXRzIiwiYmFjayBiZW5lZml0cyB0byIsImJlbmVmaXRzIHRvIGdtdiIsInRvIGdtdiBpbiIsImdtdiBpbiB0aGF0IiwiaXQgY2FuIGhlbHAiLCJjYW4gaGVscCBrZWVwaW5nIiwiaGVscCBrZWVwaW5nIGdtdiIsImtlZXBpbmcgZ212IGluIiwiZ212IGluIHRoZSIsImluIHRoZSBtYWluc3RyZWFtIiwidGhlIG1haW5zdHJlYW0gb2YiLCJtYWluc3RyZWFtIG9mIHNwYW5pc2giLCJvZiBzcGFuaXNoIHVzZXJzIiwic3BhbmlzaCB1c2VycyBob3dldmVyIiwidXNlcnMgaG93ZXZlciB0aGlzIiwiaG93ZXZlciB0aGlzIGlzIiwidGhpcyBpcyBnaXZlbiIsImlzIGdpdmVuIGZvciIsImdpdmVuIGZvciBmcmVlIiwiZnJlZSBhbmQgd2l0aG91dCIsImFueSB3YXJyYW50eSB1bmRlciIsIndhcnJhbnR5IHVuZGVyIG5vIiwibm8gY2lyY3Vtc3RhbmNlcyBjYW4iLCJjaXJjdW1zdGFuY2VzIGNhbiBqdWxpbyIsImNhbiBqdWxpbyBzYW5jaGV6IiwianVsaW8gc2FuY2hleiBnbXYiLCJzYW5jaGV6IGdtdiBqb3MiLCJnbXYgam9zIGUiLCJqb3MgZSBhIiwiZSBhIG1hIiwiYSBtYSBuYXMiLCJtYSBuYXMgb3IiLCJuYXMgb3IgYW55Iiwib3IgYW55IGFnZW50cyIsImFueSBhZ2VudHMgb3IiLCJhZ2VudHMgb3IgcmVwcmVzZW50YXRpdmVzIiwib3IgcmVwcmVzZW50YXRpdmVzIHRoZXJlb2YiLCJyZXByZXNlbnRhdGl2ZXMgdGhlcmVvZiBiZSIsInRoZXJlb2YgYmUgaGVsZCIsImJlIGhlbGQgcmVzcG9uc2libGUiLCJhbnkgZXJyb3JzIGluIiwiZXJyb3JzIGluIHRoaXMiLCJzb2Z0d2FyZSBub3IgZm9yIiwiYW55IGRhbWFnZXMgZGVyaXZlZCIsImRhbWFnZXMgZGVyaXZlZCBmcm9tIiwiZGVyaXZlZCBmcm9tIGl0cyIsIml0cyB1c2UgZXZlbiIsInVzZSBldmVuIGluIiwiZXZlbiBpbiBjYXNlIiwiaW4gY2FzZSBhbnkiLCJjYXNlIGFueSBvZiIsInRoZSBhYm92ZSBoYXMiLCJhYm92ZSBoYXMgYmVlbiIsImhhcyBiZWVuIG5vdGlmaWVkIiwiYmVlbiBub3RpZmllZCBvZiIsInN1Y2ggZGFtYWdlcyBpZiIsImRhbWFnZXMgaWYgYW55IiwiaWYgYW55IHN1Y2giLCJhbnkgc3VjaCBzaXR1YXRpb24iLCJzdWNoIHNpdHVhdGlvbiBhcmlzZXMiLCJzaXR1YXRpb24gYXJpc2VzIHlvdSIsImFyaXNlcyB5b3UgcmVzcG9uc2libGUiLCJ5b3UgcmVzcG9uc2libGUgZm9yIiwicmVzcG9uc2libGUgZm9yIHJlcGFpciIsImZvciByZXBhaXIgdXNlIiwicmVwYWlyIHVzZSBvZiIsInNvZnR3YXJlIGlzIGFuIiwiaXMgYW4gZXhwbGljaXQiLCJhbiBleHBsaWNpdCBhY2NlcHRhbmNlIiwiZXhwbGljaXQgYWNjZXB0YW5jZSBvZiIsInRoZXNlIGNvbmRpdGlvbnMgeW91IiwiY29uZGl0aW9ucyB5b3UgY2FuIiwiYW55IHB1cnBvc2UgeW91IiwicHVycG9zZSB5b3UgY2Fubm90IiwieW91IGNhbm5vdCBkZWxldGUiLCJjYW5ub3QgZGVsZXRlIHRoaXMiLCJkZWxldGUgdGhpcyBjb3B5cmlnaHQiLCJjb3B5cmlnaHQgbm90aWNlIGlmIiwibXVzdCBpbmNsdWRlIGNvbW1lbnRzIiwiaW5jbHVkZSBjb21tZW50cyBleHBsYWluaW5nIiwiY29tbWVudHMgZXhwbGFpbmluZyB3aG8iLCJleHBsYWluaW5nIHdobyB3aGVuIiwid2hvIHdoZW4gYW5kIiwid2hlbiBhbmQgd2h5IiwiYW5kIHdoeSB5b3UiLCJ3aHkgeW91IGFyZSIsInlvdSBhcmUga2luZGx5IiwiYXJlIGtpbmRseSByZXF1ZXN0ZWQiLCJraW5kbHkgcmVxdWVzdGVkIHRvIiwicmVxdWVzdGVkIHRvIHNlbmQiLCJ0byBzZW5kIGFueSIsInNlbmQgYW55IGNoYW5nZXMiLCJjaGFuZ2VzIHRvIHRleCIsImdtdiBlcyBpZiIsImVzIGlmIHlvdSIsImNoYW5nZSB0aGUgZ2VuZXJhdGluZyIsInRoZSBnZW5lcmF0aW5nIHNjcmlwdCIsImdlbmVyYXRpbmcgc2NyaXB0IHlvdSIsInNjcmlwdCB5b3UgbXVzdCIsIm11c3QgaW5jbHVkZSBjb2RlIiwiaW5jbHVkZSBjb2RlIGluIiwiY29kZSBpbiBpdCIsImluIGl0IHN1Y2giLCJpdCBzdWNoIHRoYXQiLCJzdWNoIHRoYXQgYW55IiwidGhhdCBhbnkgb3V0cHV0IiwiYW55IG91dHB1dCBpcyIsIm91dHB1dCBpcyBjbGVhcmx5IiwiaXMgY2xlYXJseSBsYWJlbGVkIiwibGFiZWxlZCBhcyBnZW5lcmF0ZWQiLCJhcyBnZW5lcmF0ZWQgYnkiLCJieSBhIG1vZGlmaWVkIiwiYSBtb2RpZmllZCBzY3JpcHQiLCJtb2RpZmllZCBzY3JpcHQgZGVzcGl0ZSIsInNjcmlwdCBkZXNwaXRlIHRoZSIsImRlc3BpdGUgdGhlIGxhY2siLCJ0aGUgbGFjayBvZiIsImxhY2sgb2Ygd2FycmFudHkiLCJvZiB3YXJyYW50eSB3ZSIsIndhcnJhbnR5IHdlIHdvdWxkIiwid2Ugd291bGQgbGlrZSIsImxpa2UgdG8gaGVhciIsInRvIGhlYXIgYWJvdXQiLCJoZWFyIGFib3V0IGFueSIsImFib3V0IGFueSBwcm9ibGVtIiwiYW55IHByb2JsZW0geW91IiwicHJvYmxlbSB5b3UgZmluZCIsInlvdSBmaW5kIHBsZWFzZSIsImZpbmQgcGxlYXNlIHJlcG9ydCIsInBsZWFzZSByZXBvcnQgcHJvYmxlbXMiLCJyZXBvcnQgcHJvYmxlbXMgdG8iLCJwcm9ibGVtcyB0byB0ZXgiLCJnbXYgZXMgZW5kIiwiZXMgZW5kIG9mIiwiZW5kIG9mIGNvcHlyaWdodCIsIm9mIGNvcHlyaWdodCBub3RpY2UiLCJjb3B5cmlnaHQgbm90aWNlIHRoZXNlIHBhdHRlcm5zIiwibm90aWNlIHRoZXNlIHBhdHRlcm5zIGFuZCIsInRoZXNlIHBhdHRlcm5zIGFuZCB0aGUiLCJwYXR0ZXJucyBhbmQgdGhlIGdlbmVyYXRpbmciLCJhbmQgdGhlIGdlbmVyYXRpbmcgc2giLCJ0aGUgZ2VuZXJhdGluZyBzaCBzY3JpcHQiLCJnZW5lcmF0aW5nIHNoIHNjcmlwdCBhcmUiLCJzaCBzY3JpcHQgYXJlIGNvcHlyaWdodCIsInNjcmlwdCBhcmUgY29weXJpZ2h0IGMiLCJhcmUgY29weXJpZ2h0IGMgZ212IiwiY29weXJpZ2h0IGMgZ212IDE5OTEiLCJjIGdtdiAxOTkxIHRoZXNlIiwiZ212IDE5OTEgdGhlc2UgcGF0dGVybnMiLCIxOTkxIHRoZXNlIHBhdHRlcm5zIHdlcmUiLCJ0aGVzZSBwYXR0ZXJucyB3ZXJlIGRldmVsb3BlZCIsInBhdHRlcm5zIHdlcmUgZGV2ZWxvcGVkIGZvciIsIndlcmUgZGV2ZWxvcGVkIGZvciBpbnRlcm5hbCIsImRldmVsb3BlZCBmb3IgaW50ZXJuYWwgZ212IiwiZm9yIGludGVybmFsIGdtdiB1c2UiLCJpbnRlcm5hbCBnbXYgdXNlIGFuZCIsImdtdiB1c2UgYW5kIGFyZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGlzIGlzIGEgcGFja2FnZSBvZiBjb21tdXRhdGl2ZSBkaWFncmFtIG1hY3JvcyBidWlsdCBvbiB0b3Agb2YgWHktcGljIGJ5IE1pY2hhZWwgQmFyciAoZW1haWw6IGJhcnJAYmFycnMub3JnKS4gSXRzIHVzZSBpcyB1bnJlc3RyaWN0ZWQuIEl0IG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQsIHVuY2hhbmdlZCwgZm9yIG5vbi1jb21tZXJjaWFsIG9yIGNvbW1lcmNpYWwgdXNlLiBJZiBjaGFuZ2VkLCBpdCBtdXN0IGJlIHJlbmFtZWQuIEluY2x1c2lvbiBpbiBhIGNvbW1lcmNpYWwgc29mdHdhcmUgcGFja2FnZSBpcyBhbHNvIHBlcm1pdHRlZCwgYnV0IEkgd291bGQgYXBwcmVjaWF0ZSByZWNlaXZpbmcgYSBmcmVlIGNvcHkgZm9yIG15IHBlcnNvbmFsIGV4YW1pbmF0aW9uIGFuZCB1c2UuIFRoZXJlIGFyZSBubyBndWFyYW50ZWVzIHRoYXQgdGhpcyBwYWNrYWdlIGlzIGdvb2QgZm9yIGFueXRoaW5nLiBJIGhhdmUgdGVzdGVkIGl0IHdpdGggTGFUZVggMmUsIExhVGVYIDIuMDkgYW5kIFBsYWluIFRlWC4gQWx0aG91Z2ggSSBrbm93IG9mIG5vIHJlYXNvbiBpdCB3aWxsIG5vdCB3b3JrIHdpdGggQU1TVGVYLCBJIGhhdmUgbm90IHRlc3RlZCBpdC4iXSwibGljZW5zZUlkcyI6WyJCYXJyIl0sImtleXdvcmRzIjpbImlzIGEgcGFja2FnZSIsImEgcGFja2FnZSBvZiIsInBhY2thZ2Ugb2YgY29tbXV0YXRpdmUiLCJvZiBjb21tdXRhdGl2ZSBkaWFncmFtIiwiY29tbXV0YXRpdmUgZGlhZ3JhbSBtYWNyb3MiLCJkaWFncmFtIG1hY3JvcyBidWlsdCIsIm1hY3JvcyBidWlsdCBvbiIsImJ1aWx0IG9uIHRvcCIsIm9uIHRvcCBvZiIsInRvcCBvZiB4eSIsIm9mIHh5IHBpYyIsInh5IHBpYyBieSIsInBpYyBieSBtaWNoYWVsIiwiYnkgbWljaGFlbCBiYXJyIiwibWljaGFlbCBiYXJyIGVtYWlsIiwiYmFyciBlbWFpbCBiYXJyIiwiZW1haWwgYmFyciBiYXJycyIsImJhcnIgYmFycnMgb3JnIiwiYmFycnMgb3JnIGl0cyIsIm9yZyBpdHMgdXNlIiwidXNlIGlzIHVucmVzdHJpY3RlZCIsImlzIHVucmVzdHJpY3RlZCBpdCIsInVucmVzdHJpY3RlZCBpdCBtYXkiLCJiZSBmcmVlbHkgZGlzdHJpYnV0ZWQiLCJmcmVlbHkgZGlzdHJpYnV0ZWQgdW5jaGFuZ2VkIiwiZGlzdHJpYnV0ZWQgdW5jaGFuZ2VkIGZvciIsInVuY2hhbmdlZCBmb3Igbm9uIiwibm9uIGNvbW1lcmNpYWwgb3IiLCJjb21tZXJjaWFsIG9yIGNvbW1lcmNpYWwiLCJvciBjb21tZXJjaWFsIHVzZSIsImNvbW1lcmNpYWwgdXNlIGlmIiwidXNlIGlmIGNoYW5nZWQiLCJpZiBjaGFuZ2VkIGl0IiwiY2hhbmdlZCBpdCBtdXN0IiwiYmUgcmVuYW1lZCBpbmNsdXNpb24iLCJyZW5hbWVkIGluY2x1c2lvbiBpbiIsImluY2x1c2lvbiBpbiBhIiwiYSBjb21tZXJjaWFsIHNvZnR3YXJlIiwiY29tbWVyY2lhbCBzb2Z0d2FyZSBwYWNrYWdlIiwic29mdHdhcmUgcGFja2FnZSBpcyIsInBhY2thZ2UgaXMgYWxzbyIsImlzIGFsc28gcGVybWl0dGVkIiwicGVybWl0dGVkIGJ1dCBpIiwiYnV0IGkgd291bGQiLCJpIHdvdWxkIGFwcHJlY2lhdGUiLCJ3b3VsZCBhcHByZWNpYXRlIHJlY2VpdmluZyIsImFwcHJlY2lhdGUgcmVjZWl2aW5nIGEiLCJyZWNlaXZpbmcgYSBmcmVlIiwiYSBmcmVlIGNvcHkiLCJmcmVlIGNvcHkgZm9yIiwiY29weSBmb3IgbXkiLCJmb3IgbXkgcGVyc29uYWwiLCJteSBwZXJzb25hbCBleGFtaW5hdGlvbiIsInBlcnNvbmFsIGV4YW1pbmF0aW9uIGFuZCIsImV4YW1pbmF0aW9uIGFuZCB1c2UiLCJhbmQgdXNlIHRoZXJlIiwidXNlIHRoZXJlIGFyZSIsImFyZSBubyBndWFyYW50ZWVzIiwibm8gZ3VhcmFudGVlcyB0aGF0IiwiZ3VhcmFudGVlcyB0aGF0IHRoaXMiLCJ0aGF0IHRoaXMgcGFja2FnZSIsInBhY2thZ2UgaXMgZ29vZCIsImlzIGdvb2QgZm9yIiwiZ29vZCBmb3IgYW55dGhpbmciLCJmb3IgYW55dGhpbmcgaSIsImFueXRoaW5nIGkgaGF2ZSIsImkgaGF2ZSB0ZXN0ZWQiLCJoYXZlIHRlc3RlZCBpdCIsInRlc3RlZCBpdCB3aXRoIiwiaXQgd2l0aCBsYXRleCIsIndpdGggbGF0ZXggMmUiLCJsYXRleCAyZSBsYXRleCIsIjJlIGxhdGV4IDIiLCJsYXRleCAyIDA5IiwiMiAwOSBhbmQiLCIwOSBhbmQgcGxhaW4iLCJhbmQgcGxhaW4gdGV4IiwicGxhaW4gdGV4IGFsdGhvdWdoIiwidGV4IGFsdGhvdWdoIGkiLCJhbHRob3VnaCBpIGtub3ciLCJpIGtub3cgb2YiLCJrbm93IG9mIG5vIiwib2Ygbm8gcmVhc29uIiwibm8gcmVhc29uIGl0IiwicmVhc29uIGl0IHdpbGwiLCJ3aWxsIG5vdCB3b3JrIiwibm90IHdvcmsgd2l0aCIsIndvcmsgd2l0aCBhbXN0ZXgiLCJ3aXRoIGFtc3RleCBpIiwiYW1zdGV4IGkgaGF2ZSIsImkgaGF2ZSBub3QiLCJoYXZlIG5vdCB0ZXN0ZWQiLCJub3QgdGVzdGVkIGl0IiwidGhpcyBpcyBhIHBhY2thZ2UiLCJpcyBhIHBhY2thZ2Ugb2YiLCJhIHBhY2thZ2Ugb2YgY29tbXV0YXRpdmUiLCJwYWNrYWdlIG9mIGNvbW11dGF0aXZlIGRpYWdyYW0iLCJvZiBjb21tdXRhdGl2ZSBkaWFncmFtIG1hY3JvcyIsImNvbW11dGF0aXZlIGRpYWdyYW0gbWFjcm9zIGJ1aWx0IiwiZGlhZ3JhbSBtYWNyb3MgYnVpbHQgb24iLCJtYWNyb3MgYnVpbHQgb24gdG9wIiwiYnVpbHQgb24gdG9wIG9mIiwib24gdG9wIG9mIHh5IiwidG9wIG9mIHh5IHBpYyIsIm9mIHh5IHBpYyBieSIsInh5IHBpYyBieSBtaWNoYWVsIiwicGljIGJ5IG1pY2hhZWwgYmFyciIsImJ5IG1pY2hhZWwgYmFyciBlbWFpbCIsIm1pY2hhZWwgYmFyciBlbWFpbCBiYXJyIiwiYmFyciBlbWFpbCBiYXJyIGJhcnJzIiwiZW1haWwgYmFyciBiYXJycyBvcmciLCJiYXJyIGJhcnJzIG9yZyBpdHMiLCJiYXJycyBvcmcgaXRzIHVzZSIsIm9yZyBpdHMgdXNlIGlzIiwiaXRzIHVzZSBpcyB1bnJlc3RyaWN0ZWQiLCJ1c2UgaXMgdW5yZXN0cmljdGVkIGl0IiwiaXMgdW5yZXN0cmljdGVkIGl0IG1heSIsInVucmVzdHJpY3RlZCBpdCBtYXkgYmUiLCJtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIiwiYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuY2hhbmdlZCIsImZyZWVseSBkaXN0cmlidXRlZCB1bmNoYW5nZWQgZm9yIiwiZGlzdHJpYnV0ZWQgdW5jaGFuZ2VkIGZvciBub24iLCJ1bmNoYW5nZWQgZm9yIG5vbiBjb21tZXJjaWFsIiwiZm9yIG5vbiBjb21tZXJjaWFsIG9yIiwibm9uIGNvbW1lcmNpYWwgb3IgY29tbWVyY2lhbCIsImNvbW1lcmNpYWwgb3IgY29tbWVyY2lhbCB1c2UiLCJvciBjb21tZXJjaWFsIHVzZSBpZiIsImNvbW1lcmNpYWwgdXNlIGlmIGNoYW5nZWQiLCJ1c2UgaWYgY2hhbmdlZCBpdCIsImlmIGNoYW5nZWQgaXQgbXVzdCIsImNoYW5nZWQgaXQgbXVzdCBiZSIsIml0IG11c3QgYmUgcmVuYW1lZCIsIm11c3QgYmUgcmVuYW1lZCBpbmNsdXNpb24iLCJiZSByZW5hbWVkIGluY2x1c2lvbiBpbiIsInJlbmFtZWQgaW5jbHVzaW9uIGluIGEiLCJpbmNsdXNpb24gaW4gYSBjb21tZXJjaWFsIiwiaW4gYSBjb21tZXJjaWFsIHNvZnR3YXJlIiwiYSBjb21tZXJjaWFsIHNvZnR3YXJlIHBhY2thZ2UiLCJjb21tZXJjaWFsIHNvZnR3YXJlIHBhY2thZ2UgaXMiLCJzb2Z0d2FyZSBwYWNrYWdlIGlzIGFsc28iLCJwYWNrYWdlIGlzIGFsc28gcGVybWl0dGVkIiwiaXMgYWxzbyBwZXJtaXR0ZWQgYnV0IiwiYWxzbyBwZXJtaXR0ZWQgYnV0IGkiLCJwZXJtaXR0ZWQgYnV0IGkgd291bGQiLCJidXQgaSB3b3VsZCBhcHByZWNpYXRlIiwiaSB3b3VsZCBhcHByZWNpYXRlIHJlY2VpdmluZyIsIndvdWxkIGFwcHJlY2lhdGUgcmVjZWl2aW5nIGEiLCJhcHByZWNpYXRlIHJlY2VpdmluZyBhIGZyZWUiLCJyZWNlaXZpbmcgYSBmcmVlIGNvcHkiLCJhIGZyZWUgY29weSBmb3IiLCJmcmVlIGNvcHkgZm9yIG15IiwiY29weSBmb3IgbXkgcGVyc29uYWwiLCJmb3IgbXkgcGVyc29uYWwgZXhhbWluYXRpb24iLCJteSBwZXJzb25hbCBleGFtaW5hdGlvbiBhbmQiLCJwZXJzb25hbCBleGFtaW5hdGlvbiBhbmQgdXNlIiwiZXhhbWluYXRpb24gYW5kIHVzZSB0aGVyZSIsImFuZCB1c2UgdGhlcmUgYXJlIiwidXNlIHRoZXJlIGFyZSBubyIsInRoZXJlIGFyZSBubyBndWFyYW50ZWVzIiwiYXJlIG5vIGd1YXJhbnRlZXMgdGhhdCIsIm5vIGd1YXJhbnRlZXMgdGhhdCB0aGlzIiwiZ3VhcmFudGVlcyB0aGF0IHRoaXMgcGFja2FnZSIsInRoYXQgdGhpcyBwYWNrYWdlIGlzIiwidGhpcyBwYWNrYWdlIGlzIGdvb2QiLCJwYWNrYWdlIGlzIGdvb2QgZm9yIiwiaXMgZ29vZCBmb3IgYW55dGhpbmciLCJnb29kIGZvciBhbnl0aGluZyBpIiwiZm9yIGFueXRoaW5nIGkgaGF2ZSIsImFueXRoaW5nIGkgaGF2ZSB0ZXN0ZWQiLCJpIGhhdmUgdGVzdGVkIGl0IiwiaGF2ZSB0ZXN0ZWQgaXQgd2l0aCIsInRlc3RlZCBpdCB3aXRoIGxhdGV4IiwiaXQgd2l0aCBsYXRleCAyZSIsIndpdGggbGF0ZXggMmUgbGF0ZXgiLCJsYXRleCAyZSBsYXRleCAyIiwiMmUgbGF0ZXggMiAwOSIsImxhdGV4IDIgMDkgYW5kIiwiMiAwOSBhbmQgcGxhaW4iLCIwOSBhbmQgcGxhaW4gdGV4IiwiYW5kIHBsYWluIHRleCBhbHRob3VnaCIsInBsYWluIHRleCBhbHRob3VnaCBpIiwidGV4IGFsdGhvdWdoIGkga25vdyIsImFsdGhvdWdoIGkga25vdyBvZiIsImkga25vdyBvZiBubyIsImtub3cgb2Ygbm8gcmVhc29uIiwib2Ygbm8gcmVhc29uIGl0Iiwibm8gcmVhc29uIGl0IHdpbGwiLCJyZWFzb24gaXQgd2lsbCBub3QiLCJpdCB3aWxsIG5vdCB3b3JrIiwid2lsbCBub3Qgd29yayB3aXRoIiwibm90IHdvcmsgd2l0aCBhbXN0ZXgiLCJ3b3JrIHdpdGggYW1zdGV4IGkiLCJ3aXRoIGFtc3RleCBpIGhhdmUiLCJhbXN0ZXggaSBoYXZlIG5vdCIsImkgaGF2ZSBub3QgdGVzdGVkIiwiaGF2ZSBub3QgdGVzdGVkIGl0IiwidGhpcyBpcyBhIHBhY2thZ2Ugb2YiLCJpcyBhIHBhY2thZ2Ugb2YgY29tbXV0YXRpdmUiLCJhIHBhY2thZ2Ugb2YgY29tbXV0YXRpdmUgZGlhZ3JhbSIsInBhY2thZ2Ugb2YgY29tbXV0YXRpdmUgZGlhZ3JhbSBtYWNyb3MiXX0seyJsaWNlbnNlVGV4dHMiOlsiXCJUSEUgQkVFUi1XQVJFIExJQ0VOU0VcIiAoUmV2aXNpb24gNDIpOlxuXG5cdTAwM2NwaGtARnJlZUJTRC5PUkdcdTAwM2Ugd3JvdGUgdGhpcyBmaWxlLiBBcyBsb25nIGFzIHlvdSByZXRhaW4gdGhpcyBub3RpY2UgeW91IGNhbiBkbyB3aGF0ZXZlciB5b3Ugd2FudCB3aXRoIHRoaXMgc3R1ZmYuIElmIHdlIG1lZXQgc29tZSBkYXksIGFuZCB5b3UgdGhpbmsgdGhpcyBzdHVmZiBpcyB3b3J0aCBpdCwgeW91IGNhbiBidXkgbWUgYSBiZWVyIGluIHJldHVybiBQb3VsLUhlbm5pbmcgS2FtcCJdLCJsaWNlbnNlSWRzIjpbIkJlZXJ3YXJlIl0sImtleXdvcmRzIjpbInRoZSBiZWVyIHdhcmUiLCJiZWVyIHdhcmUgbGljZW5zZSIsIndhcmUgbGljZW5zZSByZXZpc2lvbiIsImxpY2Vuc2UgcmV2aXNpb24gNDIiLCJyZXZpc2lvbiA0MiBwaGsiLCI0MiBwaGsgZnJlZWJzZCIsInBoayBmcmVlYnNkIG9yZyIsImZyZWVic2Qgb3JnIHdyb3RlIiwib3JnIHdyb3RlIHRoaXMiLCJ3cm90ZSB0aGlzIGZpbGUiLCJmaWxlIGFzIGxvbmciLCJ0aGlzIG5vdGljZSB5b3UiLCJub3RpY2UgeW91IGNhbiIsImNhbiBkbyB3aGF0ZXZlciIsImRvIHdoYXRldmVyIHlvdSIsIndhbnQgd2l0aCB0aGlzIiwid2l0aCB0aGlzIHN0dWZmIiwidGhpcyBzdHVmZiBpZiIsInN0dWZmIGlmIHdlIiwiaWYgd2UgbWVldCIsIndlIG1lZXQgc29tZSIsIm1lZXQgc29tZSBkYXkiLCJzb21lIGRheSBhbmQiLCJkYXkgYW5kIHlvdSIsImFuZCB5b3UgdGhpbmsiLCJ5b3UgdGhpbmsgdGhpcyIsInRoaW5rIHRoaXMgc3R1ZmYiLCJ0aGlzIHN0dWZmIGlzIiwic3R1ZmYgaXMgd29ydGgiLCJpcyB3b3J0aCBpdCIsIndvcnRoIGl0IHlvdSIsInlvdSBjYW4gYnV5IiwiY2FuIGJ1eSBtZSIsImJ1eSBtZSBhIiwibWUgYSBiZWVyIiwiYSBiZWVyIGluIiwiYmVlciBpbiByZXR1cm4iLCJpbiByZXR1cm4gcG91bCIsInJldHVybiBwb3VsIGhlbm5pbmciLCJwb3VsIGhlbm5pbmcga2FtcCIsInRoZSBiZWVyIHdhcmUgbGljZW5zZSIsImJlZXIgd2FyZSBsaWNlbnNlIHJldmlzaW9uIiwid2FyZSBsaWNlbnNlIHJldmlzaW9uIDQyIiwibGljZW5zZSByZXZpc2lvbiA0MiBwaGsiLCJyZXZpc2lvbiA0MiBwaGsgZnJlZWJzZCIsIjQyIHBoayBmcmVlYnNkIG9yZyIsInBoayBmcmVlYnNkIG9yZyB3cm90ZSIsImZyZWVic2Qgb3JnIHdyb3RlIHRoaXMiLCJvcmcgd3JvdGUgdGhpcyBmaWxlIiwid3JvdGUgdGhpcyBmaWxlIGFzIiwidGhpcyBmaWxlIGFzIGxvbmciLCJmaWxlIGFzIGxvbmcgYXMiLCJhcyB5b3UgcmV0YWluIHRoaXMiLCJ5b3UgcmV0YWluIHRoaXMgbm90aWNlIiwicmV0YWluIHRoaXMgbm90aWNlIHlvdSIsInRoaXMgbm90aWNlIHlvdSBjYW4iLCJub3RpY2UgeW91IGNhbiBkbyIsInlvdSBjYW4gZG8gd2hhdGV2ZXIiLCJjYW4gZG8gd2hhdGV2ZXIgeW91IiwiZG8gd2hhdGV2ZXIgeW91IHdhbnQiLCJ3aGF0ZXZlciB5b3Ugd2FudCB3aXRoIiwieW91IHdhbnQgd2l0aCB0aGlzIiwid2FudCB3aXRoIHRoaXMgc3R1ZmYiLCJ3aXRoIHRoaXMgc3R1ZmYgaWYiLCJ0aGlzIHN0dWZmIGlmIHdlIiwic3R1ZmYgaWYgd2UgbWVldCIsImlmIHdlIG1lZXQgc29tZSIsIndlIG1lZXQgc29tZSBkYXkiLCJtZWV0IHNvbWUgZGF5IGFuZCIsInNvbWUgZGF5IGFuZCB5b3UiLCJkYXkgYW5kIHlvdSB0aGluayIsImFuZCB5b3UgdGhpbmsgdGhpcyIsInlvdSB0aGluayB0aGlzIHN0dWZmIiwidGhpbmsgdGhpcyBzdHVmZiBpcyIsInRoaXMgc3R1ZmYgaXMgd29ydGgiLCJzdHVmZiBpcyB3b3J0aCBpdCIsImlzIHdvcnRoIGl0IHlvdSIsIndvcnRoIGl0IHlvdSBjYW4iLCJpdCB5b3UgY2FuIGJ1eSIsInlvdSBjYW4gYnV5IG1lIiwiY2FuIGJ1eSBtZSBhIiwiYnV5IG1lIGEgYmVlciIsIm1lIGEgYmVlciBpbiIsImEgYmVlciBpbiByZXR1cm4iLCJiZWVyIGluIHJldHVybiBwb3VsIiwiaW4gcmV0dXJuIHBvdWwgaGVubmluZyIsInJldHVybiBwb3VsIGhlbm5pbmcga2FtcCIsInRoZSBiZWVyIHdhcmUgbGljZW5zZSByZXZpc2lvbiIsImJlZXIgd2FyZSBsaWNlbnNlIHJldmlzaW9uIDQyIiwid2FyZSBsaWNlbnNlIHJldmlzaW9uIDQyIHBoayIsImxpY2Vuc2UgcmV2aXNpb24gNDIgcGhrIGZyZWVic2QiLCJyZXZpc2lvbiA0MiBwaGsgZnJlZWJzZCBvcmciLCI0MiBwaGsgZnJlZWJzZCBvcmcgd3JvdGUiLCJwaGsgZnJlZWJzZCBvcmcgd3JvdGUgdGhpcyIsImZyZWVic2Qgb3JnIHdyb3RlIHRoaXMgZmlsZSIsIm9yZyB3cm90ZSB0aGlzIGZpbGUgYXMiLCJ3cm90ZSB0aGlzIGZpbGUgYXMgbG9uZyIsInRoaXMgZmlsZSBhcyBsb25nIGFzIiwiZmlsZSBhcyBsb25nIGFzIHlvdSIsImxvbmcgYXMgeW91IHJldGFpbiB0aGlzIiwiYXMgeW91IHJldGFpbiB0aGlzIG5vdGljZSIsInlvdSByZXRhaW4gdGhpcyBub3RpY2UgeW91IiwicmV0YWluIHRoaXMgbm90aWNlIHlvdSBjYW4iLCJ0aGlzIG5vdGljZSB5b3UgY2FuIGRvIiwibm90aWNlIHlvdSBjYW4gZG8gd2hhdGV2ZXIiLCJ5b3UgY2FuIGRvIHdoYXRldmVyIHlvdSIsImNhbiBkbyB3aGF0ZXZlciB5b3Ugd2FudCIsImRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGgiLCJ3aGF0ZXZlciB5b3Ugd2FudCB3aXRoIHRoaXMiLCJ5b3Ugd2FudCB3aXRoIHRoaXMgc3R1ZmYiLCJ3YW50IHdpdGggdGhpcyBzdHVmZiBpZiIsIndpdGggdGhpcyBzdHVmZiBpZiB3ZSIsInRoaXMgc3R1ZmYgaWYgd2UgbWVldCIsInN0dWZmIGlmIHdlIG1lZXQgc29tZSIsImlmIHdlIG1lZXQgc29tZSBkYXkiLCJ3ZSBtZWV0IHNvbWUgZGF5IGFuZCIsIm1lZXQgc29tZSBkYXkgYW5kIHlvdSIsInNvbWUgZGF5IGFuZCB5b3UgdGhpbmsiLCJkYXkgYW5kIHlvdSB0aGluayB0aGlzIiwiYW5kIHlvdSB0aGluayB0aGlzIHN0dWZmIiwieW91IHRoaW5rIHRoaXMgc3R1ZmYgaXMiLCJ0aGluayB0aGlzIHN0dWZmIGlzIHdvcnRoIiwidGhpcyBzdHVmZiBpcyB3b3J0aCBpdCIsInN0dWZmIGlzIHdvcnRoIGl0IHlvdSIsImlzIHdvcnRoIGl0IHlvdSBjYW4iLCJ3b3J0aCBpdCB5b3UgY2FuIGJ1eSIsIml0IHlvdSBjYW4gYnV5IG1lIiwieW91IGNhbiBidXkgbWUgYSIsImNhbiBidXkgbWUgYSBiZWVyIiwiYnV5IG1lIGEgYmVlciBpbiIsIm1lIGEgYmVlciBpbiByZXR1cm4iLCJhIGJlZXIgaW4gcmV0dXJuIHBvdWwiLCJiZWVyIGluIHJldHVybiBwb3VsIGhlbm5pbmciLCJpbiByZXR1cm4gcG91bCBoZW5uaW5nIGthbXAiXX0seyJsaWNlbnNlVGV4dHMiOlsiQml0VG9ycmVudCBPcGVuIFNvdXJjZSBMaWNlbnNlXG5cblZlcnNpb24gMS4wXG5cblRoaXMgQml0VG9ycmVudCBPcGVuIFNvdXJjZSBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpIGFwcGxpZXMgdG8gdGhlIEJpdFRvcnJlbnQgY2xpZW50IGFuZCByZWxhdGVkIHNvZnR3YXJlIHByb2R1Y3RzIGFzIHdlbGwgYXMgYW55IHVwZGF0ZXMgb3IgbWFpbnRlbmFuY2UgcmVsZWFzZXMgb2YgdGhhdCBzb2Z0d2FyZSAoXCJCaXRUb3JyZW50IFByb2R1Y3RzXCIpIHRoYXQgYXJlIGRpc3RyaWJ1dGVkIGJ5IEJpdFRvcnJlbnQsIEluYy4gKFwiTGljZW5zb3JcIikuIEFueSBCaXRUb3JyZW50IFByb2R1Y3QgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhpcyBMaWNlbnNlIGlzIGEgTGljZW5zZWQgUHJvZHVjdC4gTGljZW5zZWQgUHJvZHVjdCwgaW4gaXRzIGVudGlyZXR5LCBpcyBwcm90ZWN0ZWQgYnkgVS5TLiBjb3B5cmlnaHQgbGF3LiBUaGlzIExpY2Vuc2UgaWRlbnRpZmllcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggeW91IG1heSB1c2UsIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IExpY2Vuc2VkIFByb2R1Y3QuXG5cblByZWFtYmxlXG5cblRoaXMgUHJlYW1ibGUgaXMgaW50ZW5kZWQgdG8gZGVzY3JpYmUsIGluIHBsYWluIEVuZ2xpc2gsIHRoZSBuYXR1cmUgYW5kIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgdGhpcyBQcmVhbWJsZSBpcyBub3QgYSBwYXJ0IG9mIHRoaXMgbGljZW5zZS4gVGhlIGxlZ2FsIGVmZmVjdCBvZiB0aGlzIExpY2Vuc2UgaXMgZGVwZW5kZW50IG9ubHkgdXBvbiB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgYW5kIG5vdCB0aGlzIFByZWFtYmxlLlxuXG5UaGlzIExpY2Vuc2UgY29tcGxpZXMgd2l0aCB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbiBhbmQgaXMgZGVyaXZlZCBmcm9tIHRoZSBKYWJiZXIgT3BlbiBTb3VyY2UgTGljZW5zZSAxLjAgKHRoZSBcIkpPU0xcIiksIHdoaWNoIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IE9wZW4gU291cmNlIEluaXRpYXRpdmUuIFNlY3Rpb25zIDQoYykgYW5kIDQoZikoaWlpKSBmcm9tIHRoZSBKT1NMIGhhdmUgYmVlbiBkcm9wcGVkLlxuXG5UaGlzIExpY2Vuc2UgcHJvdmlkZXMgdGhhdDpcblxuICAgMS4gWW91IG1heSB1c2UsIHNlbGwgb3IgZ2l2ZSBhd2F5IHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBhbG9uZSBvciBhcyBhIGNvbXBvbmVudCBvZiBhbiBhZ2dyZWdhdGUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIGNvbnRhaW5pbmcgcHJvZ3JhbXMgZnJvbSBzZXZlcmFsIGRpZmZlcmVudCBzb3VyY2VzLiBObyByb3lhbHR5IG9yIG90aGVyIGZlZSBpcyByZXF1aXJlZC5cblxuICAgMi4gQm90aCBTb3VyY2UgQ29kZSBhbmQgZXhlY3V0YWJsZSB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCwgaW5jbHVkaW5nIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBwcmV2aW91cyBDb250cmlidXRvcnMsIGFyZSBhdmFpbGFibGUgZm9yIHlvdXIgdXNlLiAoVGhlIHRlcm1zIFwiTGljZW5zZWQgUHJvZHVjdCxcIiBcIk1vZGlmaWNhdGlvbnMsXCIgXCJDb250cmlidXRvcnNcIiBhbmQgXCJTb3VyY2UgQ29kZVwiIGFyZSBkZWZpbmVkIGluIHRoZSBMaWNlbnNlLilcblxuICAgMy4gWW91IGFyZSBhbGxvd2VkIHRvIG1ha2UgTW9kaWZpY2F0aW9ucyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCwgYW5kIHlvdSBjYW4gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgZnJvbSBpdC4gKFRoZSB0ZXJtIFwiRGVyaXZhdGl2ZSBXb3Jrc1wiIGlzIGRlZmluZWQgaW4gdGhlIExpY2Vuc2UuKVxuXG4gICA0LiBCeSBhY2NlcHRpbmcgdGhlIExpY2Vuc2VkIFByb2R1Y3QgdW5kZXIgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlLCB5b3UgYWdyZWUgdGhhdCBhbnkgTW9kaWZpY2F0aW9ucyB5b3UgbWFrZSB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCBhbmQgdGhlbiBkaXN0cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UuIEluIHBhcnRpY3VsYXIsIHlvdSBtdXN0IG1ha2UgdGhlIFNvdXJjZSBDb2RlIG9mIHlvdXIgTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgdG8gb3RoZXJzLlxuXG4gICA1LiBZb3UgbWF5IHVzZSB0aGUgTGljZW5zZWQgUHJvZHVjdCBmb3IgYW55IHB1cnBvc2UsIGJ1dCB0aGUgTGljZW5zb3IgaXMgbm90IHByb3ZpZGluZyB5b3UgYW55IHdhcnJhbnR5IHdoYXRzb2V2ZXIsIG5vciBpcyB0aGUgTGljZW5zb3IgYWNjZXB0aW5nIGFueSBsaWFiaWxpdHkgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc2VkIFByb2R1Y3QgZG9lc24ndCB3b3JrIHByb3Blcmx5IG9yIGNhdXNlcyB5b3UgYW55IGluanVyeSBvciBkYW1hZ2VzLlxuXG4gICA2LiBJZiB5b3Ugc3VibGljZW5zZSB0aGUgTGljZW5zZWQgUHJvZHVjdCBvciBEZXJpdmF0aXZlIFdvcmtzLCB5b3UgbWF5IGNoYXJnZSBmZWVzIGZvciB3YXJyYW50eSBvciBzdXBwb3J0LCBvciBmb3IgYWNjZXB0aW5nIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8geW91ciBjdXN0b21lcnMuIFlvdSBjYW5ub3QgY2hhcmdlIGZvciB0aGUgU291cmNlIENvZGUuXG5cbiAgIDcuIElmIHlvdSBhc3NlcnQgYW55IHBhdGVudCBjbGFpbXMgYWdhaW5zdCB0aGUgTGljZW5zb3IgcmVsYXRpbmcgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIG9yIGlmIHlvdSBicmVhY2ggYW55IHRlcm1zIG9mIHRoZSBMaWNlbnNlLCB5b3VyIHJpZ2h0cyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCB1bmRlciB0aGlzIExpY2Vuc2UgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUuXG5cbllvdSBtYXkgdXNlIHRoaXMgTGljZW5zZSB0byBkaXN0cmlidXRlIHlvdXIgb3duIERlcml2YXRpdmUgV29ya3MsIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlIHdpbGwgYXBwbHkgdG8geW91ciBEZXJpdmF0aXZlIFdvcmtzIGp1c3QgYXMgdGhleSBkbyB0byB0aGUgb3JpZ2luYWwgTGljZW5zZWQgUHJvZHVjdC5cblxuQWx0ZXJuYXRpdmVseSwgeW91IG1heSBkaXN0cmlidXRlIHlvdXIgRGVyaXZhdGl2ZSBXb3JrcyB1bmRlciBhbnkgb3RoZXIgT1NJLWFwcHJvdmVkIE9wZW4gU291cmNlIGxpY2Vuc2UsIG9yIHVuZGVyIGEgcHJvcHJpZXRhcnkgbGljZW5zZSBvZiB5b3VyIGNob2ljZS4gSWYgeW91IHVzZSBhbnkgbGljZW5zZSBvdGhlciB0aGFuIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgeW91IG11c3QgY29udGludWUgdG8gZnVsZmlsbCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSAoaW5jbHVkaW5nIHRoZSBwcm92aXNpb25zIHJlbGF0aW5nIHRvIHB1Ymxpc2hpbmcgdGhlIFNvdXJjZSBDb2RlKSBmb3IgdGhvc2UgcG9ydGlvbnMgb2YgeW91ciBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgY29uc2lzdCBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCwgaW5jbHVkaW5nIHRoZSBmaWxlcyBjb250YWluaW5nIE1vZGlmaWNhdGlvbnMuXG5cbk5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgbWF5IGJlIHB1Ymxpc2hlZCBmcm9tIHRpbWUgdG8gdGltZS4gWW91IG1heSBjaG9vc2UgdG8gY29udGludWUgdG8gdXNlIHRoZSBsaWNlbnNlIHRlcm1zIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBvciB0aG9zZSBmcm9tIHRoZSBuZXcgdmVyc2lvbi4gSG93ZXZlciwgb25seSB0aGUgTGljZW5zb3IgaGFzIHRoZSByaWdodCB0byBjaGFuZ2UgdGhlIExpY2Vuc2UgdGVybXMgYXMgdGhleSBhcHBseSB0byB0aGUgTGljZW5zZWQgUHJvZHVjdC5cblxuVGhpcyBMaWNlbnNlIHJlbGllcyBvbiBwcmVjaXNlIGRlZmluaXRpb25zIGZvciBjZXJ0YWluIHRlcm1zLiBUaG9zZSB0ZXJtcyBhcmUgZGVmaW5lZCB3aGVuIHRoZXkgYXJlIGZpcnN0IHVzZWQsIGFuZCB0aGUgZGVmaW5pdGlvbnMgYXJlIHJlcGVhdGVkIGZvciB5b3VyIGNvbnZlbmllbmNlIGluIGEgR2xvc3NhcnkgYXQgdGhlIGVuZCBvZiB0aGUgTGljZW5zZS5cblxuTGljZW5zZSBUZXJtc1xuXG4gICAxLiBHcmFudCBvZiBMaWNlbnNlIEZyb20gTGljZW5zb3IuIExpY2Vuc29yIGhlcmVieSBncmFudHMgeW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgdG8gZG8gdGhlIGZvbGxvd2luZzpcblxuICAgICAgYS4gVXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBhbnkgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3Igb3IgcG9ydGlvbnMgdGhlcmVvZiwgaW4gYm90aCBTb3VyY2UgQ29kZSBvciBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0sIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzIG9yIGFzIHBhcnQgb2YgRGVyaXZhdGl2ZSBXb3Jrcy5cblxuICAgICAgYi4gVW5kZXIgY2xhaW1zIG9mIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBNb2RpZmljYXRpb25zIG9yIHBvcnRpb25zIHRoZXJlb2YsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIGNsYWltIGlzIG5lY2Vzc2FyeSB0byBlbmFibGUgeW91IHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIE1vZGlmaWNhdGlvbnMgb3IgcG9ydGlvbnMgdGhlcmVvZiBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuXG5cbiAgIDIuIEdyYW50IG9mIExpY2Vuc2UgdG8gTW9kaWZpY2F0aW9ucyBGcm9tIENvbnRyaWJ1dG9yLiBcIk1vZGlmaWNhdGlvbnNcIiBtZWFucyBhbnkgYWRkaXRpb25zIHRvIG9yIGRlbGV0aW9ucyBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIChpKSBhIGZpbGUgY29udGFpbmluZyBMaWNlbnNlZCBQcm9kdWN0LCBvciAoaWkpIGFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIExpY2Vuc2VkIFByb2R1Y3QuIEhlcmVpbmFmdGVyIGluIHRoaXMgTGljZW5zZSwgdGhlIHRlcm0gXCJMaWNlbnNlZCBQcm9kdWN0XCIgc2hhbGwgaW5jbHVkZSBhbGwgcHJldmlvdXMgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSByZWNlaXZlIGZyb20gYW55IENvbnRyaWJ1dG9yLiBCeSBhcHBsaWNhdGlvbiBvZiB0aGUgcHJvdmlzaW9ucyBpbiBTZWN0aW9uIDQoYSkgYmVsb3csIGVhY2ggcGVyc29uIG9yIGVudGl0eSB3aG8gY3JlYXRlZCBvciBjb250cmlidXRlZCB0byB0aGUgY3JlYXRpb24gb2YsIGFuZCBkaXN0cmlidXRlZCwgYSBNb2RpZmljYXRpb24gKGEgXCJDb250cmlidXRvclwiKSBoZXJlYnkgZ3JhbnRzIHlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRvIGRvIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEuIFVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgYW55IE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluIGJvdGggU291cmNlIENvZGUgb3IgYXMgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLCBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcyBvciBhcyBwYXJ0IG9mIERlcml2YXRpdmUgV29ya3MuXG5cbiAgICAgIGIuIFVuZGVyIGNsYWltcyBvZiBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTW9kaWZpY2F0aW9ucyBvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBjbGFpbSBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIHlvdSB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBNb2RpZmljYXRpb25zIG9yIHBvcnRpb25zIHRoZXJlb2Ygb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLlxuXG4gICAzLiBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvIGdyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgc2VwYXJhdGUgZnJvbSB0aGUgTGljZW5zZWQgUHJvZHVjdCwgZm9yIGNvZGUgdGhhdCB5b3UgZGVsZXRlIGZyb20gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIG9yIGZvciBjb21iaW5hdGlvbnMgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3Qgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZWQgUHJvZHVjdC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBjb2RlIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLlxuXG4gICA0LiBZb3VyIE9ibGlnYXRpb25zIFJlZ2FyZGluZyBEaXN0cmlidXRpb24uXG5cbiAgICAgIGEuIEFwcGxpY2F0aW9uIG9mIFRoaXMgTGljZW5zZSB0byBZb3VyIE1vZGlmaWNhdGlvbnMuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB5b3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCwgeW91IGhlcmVieSBhZ3JlZSB0aGF0IGFueSBNb2RpZmljYXRpb25zIHRoYXQgeW91IGNyZWF0ZSBvciB0byB3aGljaCB5b3UgY29udHJpYnV0ZSwgYW5kIHdoaWNoIHlvdSBkaXN0cmlidXRlLCBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgU2VjdGlvbiAyLiBBbnkgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDcuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIE1vZGlmaWNhdGlvbnMgeW91IGRpc3RyaWJ1dGUuIFlvdSBhZ3JlZSBub3QgdG8gb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgb3IgZXhlY3V0YWJsZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IG9yIE1vZGlmaWNhdGlvbnMgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgeW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQoZCkuXG5cbiAgICAgIGIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gWW91IG11c3QgbWFrZSBhdmFpbGFibGUsIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCBhbmQgYW55IE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgZGlzdHJpYnV0ZSwgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIHlvdSBkaXN0cmlidXRlIGFueSBleGVjdXRhYmxlIG9yIG90aGVyIGZvcm0gb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QsIG9yIHZpYSBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YSAoYW4gXCJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc21cIikuIFRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IHZlcnNpb24gb2YgTGljZW5zZWQgUHJvZHVjdCBvciBNb2RpZmljYXRpb25zIHRoYXQgeW91IGRpc3RyaWJ1dGUgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHNhaWQgTGljZW5zZWQgUHJvZHVjdCBvciBNb2RpZmljYXRpb25zIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuXG5cbiAgICAgIGMuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLlxuXG4gICAgICAgICBpLiBUaGlyZCBQYXJ0eSBDbGFpbXMuIElmIHlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB0byBhIHRoaXJkIHBhcnR5J3MgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UsIHlvdSBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCBcIkxFR0FMXCIgdGhhdCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgeW91IG1ha2UgYW55IE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQoYiksIHlvdSBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyB5b3UgbWFrZSBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgTGljZW5zZWQgUHJvZHVjdCBmcm9tIHlvdSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuXG5cbiAgICAgICAgIGlpLiBDb250cmlidXRvciBBUElzLiBJZiB5b3VyIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgKFwiQVBJXCIpIGFuZCB5b3UgaGF2ZSBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHRoYXQgYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuXG5cbiAgICAgICAgIGlpaS4gUmVwcmVzZW50YXRpb25zLiBZb3UgcmVwcmVzZW50IHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gNChjKShpKSBhYm92ZSwgeW91IGJlbGlldmUgdGhhdCBhbnkgTW9kaWZpY2F0aW9ucyB5b3UgZGlzdHJpYnV0ZSBhcmUgeW91ciBvcmlnaW5hbCBjcmVhdGlvbnMgYW5kIHRoYXQgeW91IGhhdmUgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGQuIFJlcXVpcmVkIE5vdGljZXMuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24geW91IHByb3ZpZGUgYWxvbmcgd2l0aCB0aGUgU291cmNlIENvZGUgb2YgYW55IE1vZGlmaWNhdGlvbnMgeW91IGNyZWF0ZSBvciB0byB3aGljaCB5b3UgY29udHJpYnV0ZSwgYW5kIHdoaWNoIHlvdSBkaXN0cmlidXRlLCB3aGVyZXZlciB5b3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIExpY2Vuc2VkIFByb2R1Y3QuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGNvbnRhaW5lZCBpbiBFeGhpYml0IEEgKHRoZSBcIk5vdGljZVwiKSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBjb3B5IHlvdSBkaXN0cmlidXRlIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LiBJZiB5b3UgY3JlYXRlZCBhIE1vZGlmaWNhdGlvbiwgeW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIE5vdGljZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCB0aGUgTm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgc3VjaCBOb3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBMaWNlbnNlZCBQcm9kdWN0LiBIb3dldmVyLCB5b3UgbWF5IGRvIHNvIG9ubHkgb24geW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IHlvdSBhbG9uZSwgYW5kIHlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBMaWNlbnNvciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIExpY2Vuc29yIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgeW91IG9mZmVyLlxuXG4gICAgICBlLiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4gWW91IG1heSBkaXN0cmlidXRlIExpY2Vuc2VkIFByb2R1Y3QgYXMgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIHVuZGVyIGEgbGljZW5zZSBvZiB5b3VyIGNob2ljZSB0aGF0IG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSBwcm92aWRlZCAoaSkgeW91IGhhdmUgc2F0aXNmaWVkIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbnMgNChhKSB0aHJvdWdoIDQoZCkgZm9yIHRoYXQgZGlzdHJpYnV0aW9uLCAoaWkpIHlvdSBpbmNsdWRlIGEgY29uc3BpY3VvdXMgbm90aWNlIGluIHRoZSBleGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgY29sbGF0ZXJhbCBtYXRlcmlhbHMgc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIHlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiA0KGIpLCBhbmQgKGlpaSkgeW91IG1ha2UgaXQgY2xlYXIgdGhhdCBhbnkgdGVybXMgdGhhdCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgeW91IGFsb25lLCBub3QgYnkgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgTGljZW5zb3IgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IExpY2Vuc29yIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHRlcm1zIHlvdSBvZmZlci5cblxuICAgICAgZi4gRGlzdHJpYnV0aW9uIG9mIERlcml2YXRpdmUgV29ya3MuIFlvdSBtYXkgY3JlYXRlIERlcml2YXRpdmUgV29ya3MgKGUuZy4sIGNvbWJpbmF0aW9ucyBvZiBzb21lIG9yIGFsbCBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCB3aXRoIG90aGVyIGNvZGUpIGFuZCBkaXN0cmlidXRlIHRoZSBEZXJpdmF0aXZlIFdvcmtzIGFzIHByb2R1Y3RzIHVuZGVyIGFueSBvdGhlciBsaWNlbnNlIHlvdSBzZWxlY3QsIHdpdGggdGhlIHByb3Zpc28gdGhhdCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aG9zZSBwb3J0aW9ucyBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGNvbnNpc3Qgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3Qgb3IgYW55IE1vZGlmaWNhdGlvbnMgdGhlcmV0by5cblxuICAgNS4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLiBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciB5b3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiwgdGhlbiB5b3UgbXVzdCAoaSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIChpaSkgY2l0ZSB0aGUgc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoYXQgcHJvaGliaXRzIHlvdSBmcm9tIGFkaGVyaW5nIHRvIHRoZSBMaWNlbnNlLCBhbmQgKGlpaSkgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQoZCksIGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgYXQgY29tcHV0ZXIgcHJvZ3JhbW1pbmcgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LlxuXG4gICA2LiBBcHBsaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggTGljZW5zb3Igb3IgQ29udHJpYnV0b3IgaGFzIGF0dGFjaGVkIHRoZSBOb3RpY2UgaW4gRXhoaWJpdCBBLCB3aGljaCBpcyBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHRoaXMgcmVmZXJlbmNlLlxuXG4gICA3LiBWZXJzaW9ucyBvZiBUaGlzIExpY2Vuc2UuXG5cbiAgICAgIGEuIE5ldyBWZXJzaW9ucy4gTGljZW5zb3IgbWF5IHB1Ymxpc2ggZnJvbSB0aW1lIHRvIHRpbWUgcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLlxuXG4gICAgICBiLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLiBPbmNlIExpY2Vuc2VkIFByb2R1Y3QgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCB5b3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBMaWNlbnNlZCBQcm9kdWN0IHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBMaWNlbnNvci4gTm8gb25lIG90aGVyIHRoYW4gTGljZW5zb3IgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gTGljZW5zZWQgUHJvZHVjdCBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gRGVyaXZhdGl2ZSBXb3JrcyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHdoaWNoIHlvdSBtYXkgZG8gb25seSBpbiBvcmRlciB0byBhcHBseSBpdCB0byBzb2Z0d2FyZSB0aGF0IGlzIG5vdCBhbHJlYWR5IGEgTGljZW5zZWQgUHJvZHVjdCB1bmRlciB0aGlzIExpY2Vuc2UsIHlvdSBtdXN0IHJlbmFtZSB5b3VyIGxpY2Vuc2Ugc28gdGhhdCBpdCBpcyBub3QgY29uZnVzaW5nbHkgc2ltaWxhciB0byB0aGlzIExpY2Vuc2UsIGFuZCBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdCB5b3VyIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgdGhhdCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UuIEluIHNvIG5hbWluZyB5b3VyIGxpY2Vuc2UsIHlvdSBtYXkgbm90IHVzZSBhbnkgdHJhZGVtYXJrIG9mIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvci5cblxuICAgOC4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTElDRU5TRUQgUFJPRFVDVCBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gQVMgSVMgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIExJQ0VOU0VEIFBST0RVQ1QgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIExJQ0VOU0VEIFBST0RVQ1QgSVMgV0lUSCBZT1UuIFNIT1VMRCBMSUNFTlNFRCBQUk9EVUNUIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChBTkQgTk9UIFRIRSBMSUNFTlNPUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBMSUNFTlNFRCBQUk9EVUNUIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuXG5cbiAgIDkuIFRlcm1pbmF0aW9uLlxuXG4gICAgICBhLiBBdXRvbWF0aWMgVGVybWluYXRpb24gVXBvbiBCcmVhY2guIFRoaXMgbGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QgdGhhdCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIGxpY2Vuc2UuIFByb3Zpc2lvbnMgdGhhdCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHNoYWxsIHN1cnZpdmUuXG5cbiAgICAgIGIuIFRlcm1pbmF0aW9uIFVwb24gQXNzZXJ0aW9uIG9mIFBhdGVudCBJbmZyaW5nZW1lbnQuIElmIHlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IExpY2Vuc29yIG9yIGEgQ29udHJpYnV0b3IgKExpY2Vuc29yIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSB5b3UgZmlsZSBzdWNoIGFuIGFjdGlvbiBpcyByZWZlcnJlZCB0byBoZXJlaW4gYXMgUmVzcG9uZGVudCkgYWxsZWdpbmcgdGhhdCBMaWNlbnNlZCBQcm9kdWN0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBSZXNwb25kZW50IHRvIHlvdSB1bmRlciBTZWN0aW9ucyAxIG9yIDIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5IHVwb24gc2l4dHkgKDYwKSBkYXlzIG5vdGljZSBmcm9tIFJlc3BvbmRlbnQgKHRoZSBcIk5vdGljZSBQZXJpb2RcIikgdW5sZXNzIHdpdGhpbiB0aGF0IE5vdGljZSBQZXJpb2QgeW91IGVpdGhlciBhZ3JlZSBpbiB3cml0aW5nIChpKSB0byBwYXkgUmVzcG9uZGVudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmx5IHJveWFsdHkgZm9yIHlvdXIgcGFzdCBvciBmdXR1cmUgdXNlIG9mIExpY2Vuc2VkIFByb2R1Y3QgbWFkZSBieSBzdWNoIFJlc3BvbmRlbnQsIG9yIChpaSkgd2l0aGRyYXcgeW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0byBMaWNlbnNlZCBQcm9kdWN0IGFnYWluc3Qgc3VjaCBSZXNwb25kZW50LiBJZiB3aXRoaW4gc2FpZCBOb3RpY2UgUGVyaW9kIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgTGljZW5zb3IgdG8geW91IHVuZGVyIFNlY3Rpb25zIDEgYW5kIDIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2Ygc2FpZCBOb3RpY2UgUGVyaW9kLlxuXG4gICAgICBjLiBSZWFzb25hYmxlIFZhbHVlIG9mIFRoaXMgTGljZW5zZS4gSWYgeW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBSZXNwb25kZW50IGFsbGVnaW5nIHRoYXQgTGljZW5zZWQgUHJvZHVjdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc2FpZCBSZXNwb25kZW50IHVuZGVyIFNlY3Rpb25zIDEgYW5kIDIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS5cblxuICAgICAgZC4gTm8gUmV0cm9hY3RpdmUgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOShhKSBvciA5KGIpIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgbGljZW5zZXMgdG8gZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHRoYXQgaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSB5b3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLlxuXG4gICAxMC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFRIRSBMSUNFTlNPUiwgQU5ZIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgTElDRU5TRUQgUFJPRFVDVCwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZXG5cbiAgIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDExLiBSZXNwb25zaWJpbGl0eSBmb3IgQ2xhaW1zLiBBcyBiZXR3ZWVuIExpY2Vuc29yIGFuZCBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggTGljZW5zb3IgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvclxuXG4gICBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS5cblxuICAgMTIuIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBMaWNlbnNlZCBQcm9kdWN0IGlzIGEgY29tbWVyY2lhbCBpdGVtLCBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBhbmQgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIExpY2Vuc2VkIFByb2R1Y3Qgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLlxuXG4gICAxMy4gTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gWW91IGV4cHJlc3NseSBhZ3JlZSB0aGF0IGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgbGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhIG9yIHRoZSBTdXBlcmlvciBDb3VydCBvZiB0aGUgQ291bnR5IG9mIFNhbnRhIENsYXJhLCBDYWxpZm9ybmlhIChhcyBhcHByb3ByaWF0ZSksIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBZb3UgYW5kIExpY2Vuc29yIGV4cHJlc3NseSB3YWl2ZSBhbnkgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgbGl0aWdhdGlvbiBjb25jZXJuaW5nIExpY2Vuc2VkIFByb2R1Y3Qgb3IgdGhpcyBMaWNlbnNlLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gdGhhdCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuXG5cbiAgIDE0LiBEZWZpbml0aW9uIG9mIFlvdSBpbiBUaGlzIExpY2Vuc2UuIFlvdSB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDcuIEZvciBsZWdhbCBlbnRpdGllcywgeW91IGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIGNvbnRyb2wgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgIDE1LiBHbG9zc2FyeS4gQWxsIGRlZmluZWQgdGVybXMgaW4gdGhpcyBMaWNlbnNlIHRoYXQgYXJlIHVzZWQgaW4gbW9yZSB0aGFuIG9uZSBTZWN0aW9uIG9mIHRoaXMgTGljZW5zZSBhcmUgcmVwZWF0ZWQgaGVyZSwgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLCBmb3IgdGhlIGNvbnZlbmllbmNlIG9mIHRoZSByZWFkZXIuIFRoZSBTZWN0aW9uIG9mIHRoaXMgTGljZW5zZSBpbiB3aGljaCBlYWNoIGRlZmluZWQgdGVybSBpcyBmaXJzdCB1c2VkIGlzIHNob3duIGluIHBhcmVudGhlc2VzLlxuXG4gICBDb250cmlidXRvcjogRWFjaCBwZXJzb24gb3IgZW50aXR5IHdobyBjcmVhdGVkIG9yIGNvbnRyaWJ1dGVkIHRvIHRoZSBjcmVhdGlvbiBvZiwgYW5kIGRpc3RyaWJ1dGVkLCBhIE1vZGlmaWNhdGlvbi4gKFNlZSBTZWN0aW9uIDIpXG5cbiAgIERlcml2YXRpdmUgV29ya3M6IFRoYXQgdGVybSBhcyB1c2VkIGluIHRoaXMgTGljZW5zZSBpcyBkZWZpbmVkIHVuZGVyIFUuUy4gY29weXJpZ2h0IGxhdy4gKFNlZSBTZWN0aW9uIDEoYikpXG5cbiAgIExpY2Vuc2U6IFRoaXMgQml0VG9ycmVudCBPcGVuIFNvdXJjZSBMaWNlbnNlLiAoU2VlIGZpcnN0IHBhcmFncmFwaCBvZiBMaWNlbnNlKVxuXG4gICBMaWNlbnNlZCBQcm9kdWN0OiBBbnkgQml0VG9ycmVudCBQcm9kdWN0IGxpY2Vuc2VkIHB1cnN1YW50IHRvIHRoaXMgTGljZW5zZS4gVGhlIHRlcm0gXCJMaWNlbnNlZCBQcm9kdWN0XCIgaW5jbHVkZXMgYWxsIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMgZnJvbSBhbnkgQ29udHJpYnV0b3IgdGhhdCB5b3UgcmVjZWl2ZS4gKFNlZSBmaXJzdCBwYXJhZ3JhcGggb2YgTGljZW5zZSBhbmQgU2VjdGlvbiAyKVxuXG4gICBMaWNlbnNvcjogQml0VG9ycmVudCwgSW5jLiAoU2VlIGZpcnN0IHBhcmFncmFwaCBvZiBMaWNlbnNlKVxuXG4gICBNb2RpZmljYXRpb25zOiBBbnkgYWRkaXRpb25zIHRvIG9yIGRlbGV0aW9ucyBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIChpKSBhIGZpbGUgY29udGFpbmluZyBMaWNlbnNlZCBQcm9kdWN0LCBvciAoaWkpIGFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIExpY2Vuc2VkIFByb2R1Y3QuIChTZWUgU2VjdGlvbiAyKVxuXG4gICBOb3RpY2U6IFRoZSBub3RpY2UgY29udGFpbmVkIGluIEV4aGliaXQgQS4gKFNlZSBTZWN0aW9uIDQoZSkpXG5cbiAgIFNvdXJjZSBDb2RlOiBUaGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgY29udGFpbmVkIHRoZXJlaW4sIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLCBvciBhIGxpc3Qgb2YgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LiAoU2VlXG5cbiAgIFNlY3Rpb24gMShhKSlcblxuICAgWW91OiBUaGlzIHRlcm0gaXMgZGVmaW5lZCBpbiBTZWN0aW9uIDE0IG9mIHRoaXMgTGljZW5zZS4gRVhISUJJVCBBXG5cblRoZSBOb3RpY2UgYmVsb3cgbXVzdCBhcHBlYXIgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgY29weSB5b3UgZGlzdHJpYnV0ZSBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCBvciBhbnkgaGVyZXRvLiBDb250cmlidXRvcnMgdG8gYW55IE1vZGlmaWNhdGlvbnMgbWF5IGFkZCB0aGVpciBvd24gY29weXJpZ2h0IG5vdGljZXMgdG8gaWRlbnRpZnkgdGhlaXIgb3duIGNvbnRyaWJ1dGlvbnMuXG5cbkxpY2Vuc2U6XG5cblRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIEJpdFRvcnJlbnQgT3BlbiBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlIExpY2Vuc2UpLiBZb3UgbWF5IG5vdCBjb3B5IG9yIHVzZSB0aGlzIGZpbGUsIGluIGVpdGhlciBzb3VyY2UgY29kZSBvciBleGVjdXRhYmxlIGZvcm0sIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmJpdHRvcnJlbnQuY29tL2xpY2Vuc2UvLlxuXG5Tb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIl0sImxpY2Vuc2VJZHMiOlsiQml0VG9ycmVudC0xLjAiXSwia2V5d29yZHMiOlsiMCB0aGlzIGJpdHRvcnJlbnQiLCJoYXZlIGJlZW4gZHJvcHBlZCIsImJlZW4gZHJvcHBlZCB0aGlzIiwiZHJvcHBlZCB0aGlzIGxpY2Vuc2UiLCJ0aGF0IGFueSBsaXRpZ2F0aW9uIiwib3IgdGhlIHN1cGVyaW9yIiwiY291bnR5IG9mIHNhbnRhIiwib2Ygc2FudGEgY2xhcmEiLCJjbGFyYSBjYWxpZm9ybmlhIGFzIiwiY2FsaWZvcm5pYSBhcyBhcHByb3ByaWF0ZSIsImFzIGFwcHJvcHJpYXRlIHdpdGgiLCJhcHByb3ByaWF0ZSB3aXRoIHZlbnVlIiwiY29uY2VybmluZyBsaWNlbnNlZCBwcm9kdWN0IiwicHJvZHVjdCBvciB0aGlzIiwiZW50aXR5IDE1IGdsb3NzYXJ5IiwiMSAwIHRoaXMgYml0dG9ycmVudCIsIjAgdGhpcyBiaXR0b3JyZW50IG9wZW4iLCJqb3NsIGhhdmUgYmVlbiBkcm9wcGVkIiwiaGF2ZSBiZWVuIGRyb3BwZWQgdGhpcyIsImJlZW4gZHJvcHBlZCB0aGlzIGxpY2Vuc2UiLCJkcm9wcGVkIHRoaXMgbGljZW5zZSBwcm92aWRlcyIsImFncmVlIHRoYXQgYW55IGxpdGlnYXRpb24iLCJ0aGF0IGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIiwiY2FsaWZvcm5pYSBvciB0aGUgc3VwZXJpb3IiLCJvciB0aGUgc3VwZXJpb3IgY291cnQiLCJ0aGUgY291bnR5IG9mIHNhbnRhIiwiY291bnR5IG9mIHNhbnRhIGNsYXJhIiwib2Ygc2FudGEgY2xhcmEgY2FsaWZvcm5pYSIsInNhbnRhIGNsYXJhIGNhbGlmb3JuaWEgYXMiLCJjbGFyYSBjYWxpZm9ybmlhIGFzIGFwcHJvcHJpYXRlIiwiY2FsaWZvcm5pYSBhcyBhcHByb3ByaWF0ZSB3aXRoIiwiYXMgYXBwcm9wcmlhdGUgd2l0aCB2ZW51ZSIsImFwcHJvcHJpYXRlIHdpdGggdmVudWUgbHlpbmciLCJsaXRpZ2F0aW9uIGNvbmNlcm5pbmcgbGljZW5zZWQgcHJvZHVjdCIsImNvbmNlcm5pbmcgbGljZW5zZWQgcHJvZHVjdCBvciIsImxpY2Vuc2VkIHByb2R1Y3Qgb3IgdGhpcyIsInByb2R1Y3Qgb3IgdGhpcyBsaWNlbnNlIiwic3VjaCBlbnRpdHkgMTUgZ2xvc3NhcnkiLCJlbnRpdHkgMTUgZ2xvc3NhcnkgYWxsIiwidmVyc2lvbiAxIDAgdGhpcyBiaXR0b3JyZW50IiwiMSAwIHRoaXMgYml0dG9ycmVudCBvcGVuIiwiMCB0aGlzIGJpdHRvcnJlbnQgb3BlbiBzb3VyY2UiLCJ0aGUgam9zbCBoYXZlIGJlZW4gZHJvcHBlZCIsImpvc2wgaGF2ZSBiZWVuIGRyb3BwZWQgdGhpcyIsImhhdmUgYmVlbiBkcm9wcGVkIHRoaXMgbGljZW5zZSIsImJlZW4gZHJvcHBlZCB0aGlzIGxpY2Vuc2UgcHJvdmlkZXMiLCJkcm9wcGVkIHRoaXMgbGljZW5zZSBwcm92aWRlcyB0aGF0IiwiZXhwcmVzc2x5IGFncmVlIHRoYXQgYW55IGxpdGlnYXRpb24iLCJhZ3JlZSB0aGF0IGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIiwidGhhdCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byIsImRpc3RyaWN0IG9mIGNhbGlmb3JuaWEgb3IgdGhlIiwib2YgY2FsaWZvcm5pYSBvciB0aGUgc3VwZXJpb3IiLCJjYWxpZm9ybmlhIG9yIHRoZSBzdXBlcmlvciBjb3VydCIsIm9yIHRoZSBzdXBlcmlvciBjb3VydCBvZiIsIm9mIHRoZSBjb3VudHkgb2Ygc2FudGEiLCJ0aGUgY291bnR5IG9mIHNhbnRhIGNsYXJhIiwiY291bnR5IG9mIHNhbnRhIGNsYXJhIGNhbGlmb3JuaWEiLCJvZiBzYW50YSBjbGFyYSBjYWxpZm9ybmlhIGFzIiwic2FudGEgY2xhcmEgY2FsaWZvcm5pYSBhcyBhcHByb3ByaWF0ZSIsImNsYXJhIGNhbGlmb3JuaWEgYXMgYXBwcm9wcmlhdGUgd2l0aCIsImNhbGlmb3JuaWEgYXMgYXBwcm9wcmlhdGUgd2l0aCB2ZW51ZSIsImFzIGFwcHJvcHJpYXRlIHdpdGggdmVudWUgbHlpbmciLCJhcHByb3ByaWF0ZSB3aXRoIHZlbnVlIGx5aW5nIGluIiwiYW55IGxpdGlnYXRpb24gY29uY2VybmluZyBsaWNlbnNlZCBwcm9kdWN0IiwibGl0aWdhdGlvbiBjb25jZXJuaW5nIGxpY2Vuc2VkIHByb2R1Y3Qgb3IiLCJjb25jZXJuaW5nIGxpY2Vuc2VkIHByb2R1Y3Qgb3IgdGhpcyIsImxpY2Vuc2VkIHByb2R1Y3Qgb3IgdGhpcyBsaWNlbnNlIiwicHJvZHVjdCBvciB0aGlzIGxpY2Vuc2UgYW55Iiwib2Ygc3VjaCBlbnRpdHkgMTUgZ2xvc3NhcnkiLCJzdWNoIGVudGl0eSAxNSBnbG9zc2FyeSBhbGwiLCJlbnRpdHkgMTUgZ2xvc3NhcnkgYWxsIGRlZmluZWQiXX0seyJsaWNlbnNlVGV4dHMiOlsiQml0VG9ycmVudCBPcGVuIFNvdXJjZSBMaWNlbnNlXG5cblZlcnNpb24gMS4xXG5cblRoaXMgQml0VG9ycmVudCBPcGVuIFNvdXJjZSBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpIGFwcGxpZXMgdG8gdGhlIEJpdFRvcnJlbnQgY2xpZW50IGFuZCByZWxhdGVkIHNvZnR3YXJlIHByb2R1Y3RzIGFzIHdlbGwgYXMgYW55IHVwZGF0ZXMgb3IgbWFpbnRlbmFuY2UgcmVsZWFzZXMgb2YgdGhhdCBzb2Z0d2FyZSAoXCJCaXRUb3JyZW50IFByb2R1Y3RzXCIpIHRoYXQgYXJlIGRpc3RyaWJ1dGVkIGJ5IEJpdFRvcnJlbnQsIEluYy4gKFwiTGljZW5zb3JcIikuIEFueSBCaXRUb3JyZW50IFByb2R1Y3QgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhpcyBMaWNlbnNlIGlzIGEgTGljZW5zZWQgUHJvZHVjdC4gTGljZW5zZWQgUHJvZHVjdCwgaW4gaXRzIGVudGlyZXR5LCBpcyBwcm90ZWN0ZWQgYnkgVS5TLiBjb3B5cmlnaHQgbGF3LiBUaGlzIExpY2Vuc2UgaWRlbnRpZmllcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggeW91IG1heSB1c2UsIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IExpY2Vuc2VkIFByb2R1Y3QuXG5cblByZWFtYmxlXG5cblRoaXMgUHJlYW1ibGUgaXMgaW50ZW5kZWQgdG8gZGVzY3JpYmUsIGluIHBsYWluIEVuZ2xpc2gsIHRoZSBuYXR1cmUgYW5kIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgdGhpcyBQcmVhbWJsZSBpcyBub3QgYSBwYXJ0IG9mIHRoaXMgbGljZW5zZS4gVGhlIGxlZ2FsIGVmZmVjdCBvZiB0aGlzIExpY2Vuc2UgaXMgZGVwZW5kZW50IG9ubHkgdXBvbiB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgYW5kIG5vdCB0aGlzIFByZWFtYmxlLlxuXG5UaGlzIExpY2Vuc2UgY29tcGxpZXMgd2l0aCB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbiBhbmQgaXMgZGVyaXZlZCBmcm9tIHRoZSBKYWJiZXIgT3BlbiBTb3VyY2UgTGljZW5zZSAxLjAgKHRoZSBcIkpPU0xcIiksIHdoaWNoIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IE9wZW4gU291cmNlIEluaXRpYXRpdmUuIFNlY3Rpb25zIDQoYykgYW5kIDQoZikoaWlpKSBmcm9tIHRoZSBKT1NMIGhhdmUgYmVlbiBkZWxldGVkLlxuXG5UaGlzIExpY2Vuc2UgcHJvdmlkZXMgdGhhdDpcblxuICAgMS4gWW91IG1heSB1c2Ugb3IgZ2l2ZSBhd2F5IHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBhbG9uZSBvciBhcyBhIGNvbXBvbmVudCBvZiBhbiBhZ2dyZWdhdGUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIGNvbnRhaW5pbmcgcHJvZ3JhbXMgZnJvbSBzZXZlcmFsIGRpZmZlcmVudCBzb3VyY2VzLiBObyByb3lhbHR5IG9yIG90aGVyIGZlZSBpcyByZXF1aXJlZC5cblxuICAgMi4gQm90aCBTb3VyY2UgQ29kZSBhbmQgZXhlY3V0YWJsZSB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCwgaW5jbHVkaW5nIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBwcmV2aW91cyBDb250cmlidXRvcnMsIGFyZSBhdmFpbGFibGUgZm9yIHlvdXIgdXNlLiAoVGhlIHRlcm1zIFwiTGljZW5zZWQgUHJvZHVjdCxcIiBcIk1vZGlmaWNhdGlvbnMsXCIgXCJDb250cmlidXRvcnNcIiBhbmQgXCJTb3VyY2UgQ29kZVwiIGFyZSBkZWZpbmVkIGluIHRoZSBMaWNlbnNlLilcblxuICAgMy4gWW91IGFyZSBhbGxvd2VkIHRvIG1ha2UgTW9kaWZpY2F0aW9ucyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCwgYW5kIHlvdSBjYW4gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgZnJvbSBpdC4gKFRoZSB0ZXJtIFwiRGVyaXZhdGl2ZSBXb3Jrc1wiIGlzIGRlZmluZWQgaW4gdGhlIExpY2Vuc2UuKVxuXG4gICA0LiBCeSBhY2NlcHRpbmcgdGhlIExpY2Vuc2VkIFByb2R1Y3QgdW5kZXIgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlLCB5b3UgYWdyZWUgdGhhdCBhbnkgTW9kaWZpY2F0aW9ucyB5b3UgbWFrZSB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCBhbmQgdGhlbiBkaXN0cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UuIEluIHBhcnRpY3VsYXIsIHlvdSBtdXN0IG1ha2UgdGhlIFNvdXJjZSBDb2RlIG9mIHlvdXIgTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgdG8gb3RoZXJzIGZyZWUgb2YgY2hhcmdlIGFuZCB3aXRob3V0IGEgcm95YWx0eS5cblxuICAgNS4gWW91IG1heSBzZWxsLCBhY2NlcHQgZG9uYXRpb25zIG9yIG90aGVyd2lzZSByZWNlaXZlIGNvbXBlbnNhdGlvbiBmb3IgZXhlY3V0YWJsZSB2ZXJzaW9ucyBvZiBhIExpY2Vuc2VkIFByb2R1Y3QsIHdpdGhvdXQgcGF5aW5nIGEgcm95YWx0eSBvciBvdGhlciBmZWUgdG8gdGhlIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciwgcHJvdmlkZWQgdGhhdCBzdWNoIGV4ZWN1dGFibGUgdmVyc2lvbnMgY29udGFpbiB5b3VyIG9yIGFub3RoZXIgQ29udHJpYnV0b3IncyBtYXRlcmlhbCBNb2RpZmljYXRpb25zLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdG8gdGhlIGV4dGVudCB5b3VyIGV4ZWN1dGFibGUgdmVyc2lvbiBvZiBhIExpY2Vuc2VkIFByb2R1Y3QgZG9lcyBub3QgY29udGFpbiB5b3VyIG9yIGFub3RoZXIgQ29udHJpYnV0b3IncyBtYXRlcmlhbCBNb2RpZmljYXRpb25zLCB5b3UgbWF5IG5vdCBzZWxsLCBhY2NlcHQgZG9uYXRpb25zIG9yIG90aGVyd2lzZSByZWNlaXZlIGNvbXBlbnNhdGlvbiBmb3Igc3VjaCBleGVjdXRhYmxlLlxuXG4gICBZb3UgbWF5IHVzZSB0aGUgTGljZW5zZWQgUHJvZHVjdCBmb3IgYW55IHB1cnBvc2UsIGJ1dCB0aGUgTGljZW5zb3IgaXMgbm90IHByb3ZpZGluZyB5b3UgYW55IHdhcnJhbnR5IHdoYXRzb2V2ZXIsIG5vciBpcyB0aGUgTGljZW5zb3IgYWNjZXB0aW5nIGFueSBsaWFiaWxpdHkgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc2VkIFByb2R1Y3QgZG9lc24ndCB3b3JrIHByb3Blcmx5IG9yIGNhdXNlcyB5b3UgYW55IGluanVyeSBvciBkYW1hZ2VzLlxuXG4gICA2LiBJZiB5b3Ugc3VibGljZW5zZSB0aGUgTGljZW5zZWQgUHJvZHVjdCBvciBEZXJpdmF0aXZlIFdvcmtzLCB5b3UgbWF5IGNoYXJnZSBmZWVzIGZvciB3YXJyYW50eSBvciBzdXBwb3J0LCBvciBmb3IgYWNjZXB0aW5nIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8geW91ciBjdXN0b21lcnMuIFlvdSBjYW5ub3QgY2hhcmdlIGZvciwgc2VsbCwgYWNjZXB0IGRvbmF0aW9ucyBvciBvdGhlcndpc2UgcmVjZWl2ZSBjb21wZW5zYXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZS5cblxuICAgNy4gSWYgeW91IGFzc2VydCBhbnkgcGF0ZW50IGNsYWltcyBhZ2FpbnN0IHRoZSBMaWNlbnNvciByZWxhdGluZyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCwgb3IgaWYgeW91IGJyZWFjaCBhbnkgdGVybXMgb2YgdGhlIExpY2Vuc2UsIHlvdXIgcmlnaHRzIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHVuZGVyIHRoaXMgTGljZW5zZSBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZS5cblxuWW91IG1heSB1c2UgdGhpcyBMaWNlbnNlIHRvIGRpc3RyaWJ1dGUgeW91ciBvd24gRGVyaXZhdGl2ZSBXb3JrcywgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBhcHBseSB0byB5b3VyIERlcml2YXRpdmUgV29ya3MganVzdCBhcyB0aGV5IGRvIHRvIHRoZSBvcmlnaW5hbCBMaWNlbnNlZCBQcm9kdWN0LlxuXG5BbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGRpc3RyaWJ1dGUgeW91ciBEZXJpdmF0aXZlIFdvcmtzIHVuZGVyIGFueSBvdGhlciBPU0ktYXBwcm92ZWQgT3BlbiBTb3VyY2UgbGljZW5zZSwgb3IgdW5kZXIgYSBwcm9wcmlldGFyeSBsaWNlbnNlIG9mIHlvdXIgY2hvaWNlLiBJZiB5b3UgdXNlIGFueSBsaWNlbnNlIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlLCBob3dldmVyLCB5b3UgbXVzdCBjb250aW51ZSB0byBmdWxmaWxsIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgdGhlIHByb3Zpc2lvbnMgcmVsYXRpbmcgdG8gcHVibGlzaGluZyB0aGUgU291cmNlIENvZGUpIGZvciB0aG9zZSBwb3J0aW9ucyBvZiB5b3VyIERlcml2YXRpdmUgV29ya3MgdGhhdCBjb25zaXN0IG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBpbmNsdWRpbmcgdGhlIGZpbGVzIGNvbnRhaW5pbmdcblxuTW9kaWZpY2F0aW9ucy5cblxuTmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBtYXkgYmUgcHVibGlzaGVkIGZyb20gdGltZSB0byB0aW1lIGluIGNvbm5lY3Rpb24gd2l0aCBuZXcgdmVyc2lvbnMgb2YgYSBMaWNlbnNlZCBQcm9kdWN0IG9yIG90aGVyd2lzZS4gWW91IG1heSBjaG9vc2UgdG8gY29udGludWUgdG8gdXNlIHRoZSBsaWNlbnNlIHRlcm1zIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBmb3IgdGhlIExpY2Vuc2VkIFByb2R1Y3QgdGhhdCB3YXMgb3JpZ2luYWxseSBsaWNlbnNlZCBoZXJldW5kZXIsIGhvd2V2ZXIsIHRoZSBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIHdpbGwgYXQgYWxsIHRpbWVzIGFwcGx5IHRvIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCByZWxlYXNlZCBieSBMaWNlbnNvciBhZnRlciB0aGUgcmVsZWFzZSBvZiB0aGUgbmV3IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLiBPbmx5IHRoZSBMaWNlbnNvciBoYXMgdGhlIHJpZ2h0IHRvIGNoYW5nZSB0aGUgTGljZW5zZSB0ZXJtcyBhcyB0aGV5IGFwcGx5IHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0LlxuXG5UaGlzIExpY2Vuc2UgcmVsaWVzIG9uIHByZWNpc2UgZGVmaW5pdGlvbnMgZm9yIGNlcnRhaW4gdGVybXMuIFRob3NlIHRlcm1zIGFyZSBkZWZpbmVkIHdoZW4gdGhleSBhcmUgZmlyc3QgdXNlZCwgYW5kIHRoZSBkZWZpbml0aW9ucyBhcmUgcmVwZWF0ZWQgZm9yIHlvdXIgY29udmVuaWVuY2UgaW4gYSBHbG9zc2FyeSBhdCB0aGUgZW5kIG9mIHRoZSBMaWNlbnNlLlxuXG5MaWNlbnNlIFRlcm1zXG5cbiAgIDEuIEdyYW50IG9mIExpY2Vuc2UgRnJvbSBMaWNlbnNvci4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIHlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRvIGRvIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEuIFVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgYW55IE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBhIENvbnRyaWJ1dG9yIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluIGJvdGggU291cmNlIENvZGUgb3IgYXMgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLCBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcyBvciBhcyBwYXJ0IG9mIERlcml2YXRpdmUgV29ya3MuXG5cbiAgICAgIGIuIFVuZGVyIGNsYWltcyBvZiBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTW9kaWZpY2F0aW9ucyBvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBjbGFpbSBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIHlvdSB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBNb2RpZmljYXRpb25zIG9yIHBvcnRpb25zIHRoZXJlb2Ygb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLlxuXG4gICAyLiBHcmFudCBvZiBMaWNlbnNlIHRvIE1vZGlmaWNhdGlvbnMgRnJvbSBDb250cmlidXRvci4gXCJNb2RpZmljYXRpb25zXCIgbWVhbnMgYW55IGFkZGl0aW9ucyB0byBvciBkZWxldGlvbnMgZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiAoaSkgYSBmaWxlIGNvbnRhaW5pbmcgYSBMaWNlbnNlZCBQcm9kdWN0LCBvciAoaWkpIGFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIGEgTGljZW5zZWQgUHJvZHVjdC4gSGVyZWluYWZ0ZXIgaW4gdGhpcyBMaWNlbnNlLCB0aGUgdGVybSBcIkxpY2Vuc2VkIFByb2R1Y3RcIiBzaGFsbCBpbmNsdWRlIGFsbCBwcmV2aW91cyBNb2RpZmljYXRpb25zIHRoYXQgeW91IHJlY2VpdmUgZnJvbSBhbnkgQ29udHJpYnV0b3IuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgQnkgYXBwbGljYXRpb24gb2YgdGhlIHByb3Zpc2lvbnMgaW4gU2VjdGlvbiA0KGEpIGJlbG93LCBlYWNoIHBlcnNvbiBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgb3IgY29udHJpYnV0ZWQgdG8gdGhlIGNyZWF0aW9uIG9mLCBhbmQgZGlzdHJpYnV0ZWQsIGEgTW9kaWZpY2F0aW9uIChhIFwiQ29udHJpYnV0b3JcIikgaGVyZWJ5IGdyYW50cyB5b3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCB0byBkbyB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhLiBVc2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIGFueSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbiBib3RoIFNvdXJjZSBDb2RlIG9yIGFzIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSwgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMgb3IgYXMgcGFydCBvZiBEZXJpdmF0aXZlIFdvcmtzLlxuXG4gICAgICBiLiBVbmRlciBjbGFpbXMgb2YgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIE1vZGlmaWNhdGlvbnMgb3IgcG9ydGlvbnMgdGhlcmVvZiwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggY2xhaW0gaXMgbmVjZXNzYXJ5IHRvIGVuYWJsZSB5b3UgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTW9kaWZpY2F0aW9ucyBvciBwb3J0aW9ucyB0aGVyZW9mIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi5cblxuICAgMy4gRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHNlcGFyYXRlIGZyb20gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGZvciBjb2RlIHRoYXQgeW91IGRlbGV0ZSBmcm9tIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBvciBmb3IgY29tYmluYXRpb25zIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2VkIFByb2R1Y3QuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgY29kZSB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHlvdXIgdXNlIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCB5b3UgaGVyZWJ5IGFncmVlIHRoYXQgeW91IHdpbGwgbm90LCB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgTGljZW5zb3IsIHVzZSBhbnkgdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0IGFuZCB3aXRob3V0IGxpbWl0aW5nIHRoZSBmb3JlZ29pbmcsIHlvdSBoZXJlYnkgYWdyZWUgdGhhdCB5b3Ugd2lsbCBub3QgdXNlIG9yIGRpc3BsYXkgYW55IHRyYWRlbWFyayBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgaW4gYW55IGRvbWFpbiBuYW1lLCBkaXJlY3RvcnkgZmlsZXBhdGgsIGFkdmVydGlzZW1lbnQsIGxpbmsgb3Igb3RoZXIgcmVmZXJlbmNlIHRvIHlvdSBpbiBhbnkgbWFubmVyIG9yIGluIGFueSBtZWRpYS5cblxuICAgNC4gWW91ciBPYmxpZ2F0aW9ucyBSZWdhcmRpbmcgRGlzdHJpYnV0aW9uLlxuXG4gICAgICBhLiBBcHBsaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UgdG8gWW91ciBNb2RpZmljYXRpb25zLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgeW91ciB1c2Ugb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QsIHlvdSBoZXJlYnkgYWdyZWUgdGhhdCBhbnkgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUsIGFuZCB3aGljaCB5b3UgZGlzdHJpYnV0ZSwgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIFNlY3Rpb24gMi4gQW55IE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgY3JlYXRlIG9yIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA3LiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBNb2RpZmljYXRpb25zIHlvdSBkaXN0cmlidXRlLiBZb3UgYWdyZWUgbm90IHRvIG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIG9yIGV4ZWN1dGFibGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCBvciBNb2RpZmljYXRpb25zIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIHlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0KGQpLlxuXG4gICAgICBiLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIFlvdSBtdXN0IG1ha2UgYXZhaWxhYmxlLCB3aXRob3V0IGNoYXJnZSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGFuZCBhbnkgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBkaXN0cmlidXRlLCBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgeW91IGRpc3RyaWJ1dGUgYW55IGV4ZWN1dGFibGUgb3Igb3RoZXIgZm9ybSBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCwgb3IgdmlhIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhIChhbiBcIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbVwiKS4gVGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgdmVyc2lvbiBvZiBMaWNlbnNlZCBQcm9kdWN0IG9yIE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgZGlzdHJpYnV0ZSBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgYW55IGV4ZWN1dGFibGUgb3Igb3RoZXIgZm9ybSBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCBpcyBkaXN0cmlidXRlZCBieSB5b3UuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS5cblxuICAgICAgYy4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuXG5cbiAgICAgICAgIGkuIFRoaXJkIFBhcnR5IENsYWltcy4gSWYgeW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHRvIGEgdGhpcmQgcGFydHkncyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSwgeW91IG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkIFwiTEVHQUxcIiB0aGF0IGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciB5b3UgbWFrZSBhbnkgTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNChiKSwgeW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIHlvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGZyb20geW91IHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC5cblxuICAgICAgICAgaWkuIENvbnRyaWJ1dG9yIEFQSXMuIElmIHlvdXIgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSAoXCJBUElcIikgYW5kIHlvdSBoYXZlIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgdGhhdCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS5cblxuICAgICAgICAgaWlpLiBSZXByZXNlbnRhdGlvbnMuIFlvdSByZXByZXNlbnQgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byA0KGMpKGkpIGFib3ZlLCB5b3UgYmVsaWV2ZSB0aGF0IGFueSBNb2RpZmljYXRpb25zIHlvdSBkaXN0cmlidXRlIGFyZSB5b3VyIG9yaWdpbmFsIGNyZWF0aW9ucyBhbmQgdGhhdCB5b3UgaGF2ZSBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgZC4gUmVxdWlyZWQgTm90aWNlcy4gWW91IG11c3QgZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiB5b3UgcHJvdmlkZSBhbG9uZyB3aXRoIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgTW9kaWZpY2F0aW9ucyB5b3UgY3JlYXRlIG9yIHRvIHdoaWNoIHlvdSBjb250cmlidXRlLCBhbmQgd2hpY2ggeW91IGRpc3RyaWJ1dGUsIHdoZXJldmVyIHlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gTGljZW5zZWQgUHJvZHVjdC4gWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgY29udGFpbmVkIGluIEV4aGliaXQgQSAodGhlIFwiTm90aWNlXCIpIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYW55IGNvcHkgeW91IGRpc3RyaWJ1dGUgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QuIElmIHlvdSBjcmVhdGVkIGEgTW9kaWZpY2F0aW9uLCB5b3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgTm90aWNlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHRoZSBOb3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIE5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIExpY2Vuc2VkIFByb2R1Y3QuIEhvd2V2ZXIsIHlvdSBtYXkgZG8gc28gb25seSBvbiB5b3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgeW91IGFsb25lLCBhbmQgeW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIExpY2Vuc29yIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgTGljZW5zb3Igb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyB5b3Ugb2ZmZXIuXG5cbiAgICAgIGUuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiBZb3UgbWF5IGRpc3RyaWJ1dGUgTGljZW5zZWQgUHJvZHVjdCBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0gdW5kZXIgYSBsaWNlbnNlIG9mIHlvdXIgY2hvaWNlIHRoYXQgbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlIHByb3ZpZGVkIChpKSB5b3UgaGF2ZSBzYXRpc2ZpZWQgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9ucyA0KGEpIHRocm91Z2ggNChkKSBmb3IgdGhhdCBkaXN0cmlidXRpb24sIChpaSkgeW91IGluY2x1ZGUgYSBjb25zcGljdW91cyBub3RpY2UgaW4gdGhlIGV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFuZCBjb2xsYXRlcmFsIG1hdGVyaWFscyBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgeW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDQoYiksIGFuZCAoaWlpKSB5b3UgbWFrZSBpdCBjbGVhciB0aGF0IGFueSB0ZXJtcyB0aGF0IGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSB5b3UgYWxvbmUsIG5vdCBieSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBMaWNlbnNvciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgTGljZW5zb3Igb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgdGVybXMgeW91IG9mZmVyLlxuXG4gICAgICBmLiBEaXN0cmlidXRpb24gb2YgRGVyaXZhdGl2ZSBXb3Jrcy4gWW91IG1heSBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyAoZS5nLiwgY29tYmluYXRpb25zIG9mIHNvbWUgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHdpdGggb3RoZXIgY29kZSkgYW5kIGRpc3RyaWJ1dGUgdGhlIERlcml2YXRpdmUgV29ya3MgYXMgcHJvZHVjdHMgdW5kZXIgYW55IG90aGVyIGxpY2Vuc2UgeW91IHNlbGVjdCwgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRob3NlIHBvcnRpb25zIG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgY29uc2lzdCBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCBvciBhbnkgTW9kaWZpY2F0aW9ucyB0aGVyZXRvLlxuXG4gICAgICBnLiBDb21wZW5zYXRpb24gZm9yIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zIG9mIExpY2Vuc2VkIFByb2R1Y3RzLCBNb2RpZmljYXRpb25zIG9yIERlcml2YXRpdmUgV29ya3MuIE5vdHdpdGhzdGFuZGluZyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgY29udHJhcnksIGJ5IGRpc3RyaWJ1dGluZywgc2VsbGluZywgbGljZW5zaW5nLCBzdWJsaWNlbnNpbmcgb3Igb3RoZXJ3aXNlIG1ha2luZyBhdmFpbGFibGUgYW55IExpY2Vuc2VkIFByb2R1Y3QsIG9yIE1vZGlmaWNhdGlvbiBvciBEZXJpdmF0aXZlIFdvcmsgdGhlcmVvZiwgeW91IGFuZCBMaWNlbnNvciBoZXJlYnkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgeW91IG1heSBzZWxsLCBsaWNlbnNlIG9yIHN1YmxpY2Vuc2UgZm9yIGEgZmVlLCBhY2NlcHQgZG9uYXRpb25zIG9yIG90aGVyd2lzZSByZWNlaXZlIGNvbXBlbnNhdGlvbiBmb3IgZXhlY3V0YWJsZSB2ZXJzaW9ucyBvZiBhIExpY2Vuc2VkIFByb2R1Y3QsIHdpdGhvdXQgcGF5aW5nIGEgcm95YWx0eSBvciBvdGhlciBmZWUgdG8gdGhlIExpY2Vuc29yIG9yIGFueSBvdGhlciBDb250cmlidXRvciwgcHJvdmlkZWQgdGhhdCBzdWNoIGV4ZWN1dGFibGUgdmVyc2lvbnMgKGkpIGNvbnRhaW4geW91ciBvciBhbm90aGVyIENvbnRyaWJ1dG9yJ3MgbWF0ZXJpYWwgTW9kaWZpY2F0aW9ucywgb3IgKGlpKSBhcmUgb3RoZXJ3aXNlIG1hdGVyaWFsIERlcml2YXRpdmUgV29ya3MuIEZvciBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UsIGFuIGV4ZWN1dGFibGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCB3aWxsIGJlIGRlZW1lZCB0byBjb250YWluIGEgbWF0ZXJpYWwgTW9kaWZpY2F0aW9uLCBvciB3aWxsIG90aGVyd2lzZSBiZSBkZWVtZWQgYSBtYXRlcmlhbCBEZXJpdmF0aXZlIFdvcmssIGlmIChhKSB0aGUgTGljZW5zZWQgUHJvZHVjdCBpcyBtb2RpZmllZCB3aXRoIHlvdXIgb3duIG9yIGEgdGhpcmQgcGFydHkncyBzb2Z0d2FyZSBwcm9ncmFtcyBvciBvdGhlciBjb2RlLCBhbmQvb3IgdGhlIExpY2Vuc2VkIFByb2R1Y3QgaXMgY29tYmluZWQgd2l0aCBhIG51bWJlciBvZiB5b3VyIG93biBvciBhIHRoaXJkIHBhcnR5J3Mgc29mdHdhcmUgcHJvZ3JhbXMgb3IgY29kZSwgcmVzcGVjdGl2ZWx5LCBhbmQgKGIpIHN1Y2ggc29mdHdhcmUgcHJvZ3JhbXMgb3IgY29kZSBhZGQgb3IgY29udHJpYnV0ZSBtYXRlcmlhbCB2YWx1ZSwgZnVuY3Rpb25hbGl0eSBvciBmZWF0dXJlcyB0byB0aGUgTGljZW5zZSBQcm9kdWN0LiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdG8gdGhlIGV4dGVudCB5b3VyIGV4ZWN1dGFibGUgdmVyc2lvbiBvZiBhIExpY2Vuc2VkIFByb2R1Y3QgZG9lcyBub3QgY29udGFpbiB5b3VyIG9yIGFub3RoZXIgQ29udHJpYnV0b3IncyBtYXRlcmlhbCBNb2RpZmljYXRpb25zIG9yIGlzIG90aGVyd2lzZSBub3QgYSBtYXRlcmlhbCBEZXJpdmF0aXZlIFdvcmssIGluIGVhY2ggY2FzZSBhcyBjb250ZW1wbGF0ZWQgaGVyZWluLCB5b3UgbWF5IG5vdCBzZWxsLCBsaWNlbnNlIG9yIHN1YmxpY2Vuc2UgZm9yIGEgZmVlLCBhY2NlcHQgZG9uYXRpb25zIG9yIG90aGVyd2lzZSByZWNlaXZlIGNvbXBlbnNhdGlvbiBmb3Igc3VjaCBleGVjdXRhYmxlLiBBZGRpdGlvbmFsbHksIHdpdGhvdXQgbGltaXRhdGlvbiBvZiB0aGUgZm9yZWdvaW5nIGFuZCBub3R3aXRoc3RhbmRpbmcgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIGNvbnRyYXJ5LCB5b3UgY2Fubm90IGNoYXJnZSBmb3IsIHNlbGwsIGxpY2Vuc2Ugb3Igc3VibGljZW5zZSBmb3IgYSBmZWUsIGFjY2VwdCBkb25hdGlvbnMgb3Igb3RoZXJ3aXNlIHJlY2VpdmUgY29tcGVuc2F0aW9uIGZvciB0aGUgU291cmNlIENvZGUuXG5cbiAgIDUuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4gSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgeW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24sIHRoZW4geW91IG11c3QgKGkpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCAoaWkpIGNpdGUgdGhlIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGF0IHByb2hpYml0cyB5b3UgZnJvbSBhZGhlcmluZyB0byB0aGUgTGljZW5zZSwgYW5kIChpaWkpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiA0KGQpLCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIGF0IGNvbXB1dGVyIHByb2dyYW1taW5nIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC5cblxuICAgNi4gQXBwbGljYXRpb24gb2YgVGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIExpY2Vuc29yIG9yIENvbnRyaWJ1dG9yIGhhcyBhdHRhY2hlZCB0aGUgTm90aWNlIGluIEV4aGliaXQgQSwgd2hpY2ggaXMgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSB0aGlzIHJlZmVyZW5jZS5cblxuICAgNy4gVmVyc2lvbnMgb2YgVGhpcyBMaWNlbnNlLlxuXG4gICAgICBhLiBOZXcgVmVyc2lvbnMuIExpY2Vuc29yIG1heSBwdWJsaXNoIGZyb20gdGltZSB0byB0aW1lIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZS5cblxuICAgICAgYi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4gT25jZSBMaWNlbnNlZCBQcm9kdWN0IGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgeW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24sIHByb3ZpZGVkIHRoYXQgYW55IHN1Y2ggbGljZW5zZSBiZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgYXQgdGhlIHRpbWUsIGFuZCBoYXMgbm90IGJlZW4gcmV2b2tlZCBvciBvdGhlcndpc2UgdGVybWluYXRlZC4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBMaWNlbnNlZCBQcm9kdWN0IHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIChidXQgbm90IGFueSBwcmlvciB2ZXJzaW9uKSBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTGljZW5zb3IuIE5vIG9uZSBvdGhlciB0aGFuIExpY2Vuc29yIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIExpY2Vuc2VkIFByb2R1Y3QgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIERlcml2YXRpdmUgV29ya3Mgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCB3aGljaCB5b3UgbWF5IGRvIG9ubHkgaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gc29mdHdhcmUgdGhhdCBpcyBub3QgYWxyZWFkeSBhIExpY2Vuc2VkIFByb2R1Y3QgdW5kZXIgdGhpcyBMaWNlbnNlLCB5b3UgbXVzdCByZW5hbWUgeW91ciBsaWNlbnNlIHNvIHRoYXQgaXQgaXMgbm90IGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbXVzdCBtYWtlIGl0IGNsZWFyIHRoYXQgeW91ciBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHRoYXQgZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlLiBJbiBzbyBuYW1pbmcgeW91ciBsaWNlbnNlLCB5b3UgbWF5IG5vdCB1c2UgYW55IHRyYWRlbWFyayBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IuXG5cbiAgIDguIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExJQ0VOU0VEIFBST0RVQ1QgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIEFTIElTIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBMSUNFTlNFRCBQUk9EVUNUIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBMSUNFTlNFRCBQUk9EVUNUIElTIFdJVEggWU9VLiBTSE9VTEQgTElDRU5TRUQgUFJPRFVDVCBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoQU5EIE5PVCBUSEUgTElDRU5TT1IgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgTElDRU5TRUQgUFJPRFVDVCBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLlxuXG4gICA5LiBUZXJtaW5hdGlvbi5cblxuICAgICAgYS4gQXV0b21hdGljIFRlcm1pbmF0aW9uIFVwb24gQnJlYWNoLiBUaGlzIGxpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiB5b3UgZmFpbCB0byBjb21wbHkgd2l0aCB0aGUgdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIHRlbiAoMTApIGRheXMgb2YgYmVpbmcgbm90aWZpZWQgb2YgdGhlIGJyZWFjaCBieSB0aGUgTGljZW5zb3IuIEZvciBwdXJwb3NlcyBvZiB0aGlzIHByb3Zpc2lvbiwgcHJvb2Ygb2YgZGVsaXZlcnkgdmlhIGVtYWlsIHRvIHRoZSBhZGRyZXNzIGxpc3RlZCBpbiB0aGUgJ1dIT0lTJyBkYXRhYmFzZSBvZiB0aGUgcmVnaXN0cmFyIGZvciBhbnkgd2Vic2l0ZSB0aHJvdWdoIHdoaWNoIHlvdSBkaXN0cmlidXRlIG9yIG1hcmtldCBhbnkgTGljZW5zZWQgUHJvZHVjdCwgb3IgdG8gYW55IGFsdGVybmF0ZSBlbWFpbCBhZGRyZXNzIHdoaWNoIHlvdSBkZXNpZ25hdGUgaW4gd3JpdGluZyB0byB0aGUgTGljZW5zb3IsIHNoYWxsIGNvbnN0aXR1dGUgc3VmZmljaWVudCBub3RpZmljYXRpb24uIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCB0aGF0IGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgbGljZW5zZSBzbyBsb25nIGFzIHRoZXkgY29udGludWUgdG8gY29tcGx5ZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgdGhhdCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHNoYWxsIHN1cnZpdmUuXG5cbiAgICAgIGIuIFRlcm1pbmF0aW9uIFVwb24gQXNzZXJ0aW9uIG9mIFBhdGVudCBJbmZyaW5nZW1lbnQuIElmIHlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IExpY2Vuc29yIG9yIGEgQ29udHJpYnV0b3IgKExpY2Vuc29yIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSB5b3UgZmlsZSBzdWNoIGFuIGFjdGlvbiBpcyByZWZlcnJlZCB0byBoZXJlaW4gYXMgUmVzcG9uZGVudCkgYWxsZWdpbmcgdGhhdCBMaWNlbnNlZCBQcm9kdWN0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBSZXNwb25kZW50IHRvIHlvdSB1bmRlciBTZWN0aW9ucyAxIG9yIDIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5IHVwb24gc2l4dHkgKDYwKSBkYXlzIG5vdGljZSBmcm9tIFJlc3BvbmRlbnQgKHRoZSBcIk5vdGljZSBQZXJpb2RcIikgdW5sZXNzIHdpdGhpbiB0aGF0IE5vdGljZSBQZXJpb2QgeW91IGVpdGhlciBhZ3JlZSBpbiB3cml0aW5nIChpKSB0byBwYXkgUmVzcG9uZGVudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmx5IHJveWFsdHkgZm9yIHlvdXIgcGFzdCBvciBmdXR1cmUgdXNlIG9mIExpY2Vuc2VkIFByb2R1Y3QgbWFkZSBieSBzdWNoIFJlc3BvbmRlbnQsIG9yIChpaSkgd2l0aGRyYXcgeW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0byBMaWNlbnNlZCBQcm9kdWN0IGFnYWluc3Qgc3VjaCBSZXNwb25kZW50LiBJZiB3aXRoaW4gc2FpZCBOb3RpY2UgUGVyaW9kIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgTGljZW5zb3IgdG8geW91IHVuZGVyIFNlY3Rpb25zIDEgYW5kIDIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2Ygc2FpZCBOb3RpY2UgUGVyaW9kLlxuXG4gICAgICBjLiBSZWFzb25hYmxlIFZhbHVlIG9mIFRoaXMgTGljZW5zZS4gSWYgeW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBSZXNwb25kZW50IGFsbGVnaW5nIHRoYXQgTGljZW5zZWQgUHJvZHVjdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc2FpZCBSZXNwb25kZW50IHVuZGVyIFNlY3Rpb25zIDEgYW5kIDIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS5cblxuICAgICAgZC4gTm8gUmV0cm9hY3RpdmUgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOShhKSBvciA5KGIpIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgbGljZW5zZXMgdG8gZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHRoYXQgaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSB5b3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLlxuXG4gICAxMC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFRIRSBMSUNFTlNPUiwgQU5ZIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgTElDRU5TRUQgUFJPRFVDVCwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDExLiBSZXNwb25zaWJpbGl0eSBmb3IgQ2xhaW1zLiBBcyBiZXR3ZWVuIExpY2Vuc29yIGFuZCBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggTGljZW5zb3IgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS5cblxuICAgMTIuIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBMaWNlbnNlZCBQcm9kdWN0IGlzIGEgY29tbWVyY2lhbCBpdGVtLCBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBhbmQgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIExpY2Vuc2VkIFByb2R1Y3Qgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLlxuXG4gICAxMy4gTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gWW91IGV4cHJlc3NseSBhZ3JlZSB0aGF0IGluIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgbGljZW5zZSB0aGUgbG9zaW5nIHBhcnR5IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBjb3N0cyBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHRoYXQgcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLlxuXG4gICAxNC4gRGVmaW5pdGlvbiBvZiBZb3UgaW4gVGhpcyBMaWNlbnNlLiBZb3UgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA3LiBGb3IgbGVnYWwgZW50aXRpZXMsIHlvdSBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGgsIG9yIGFmZmlsaWF0ZWQgd2l0aCwgeW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBjb250cm9sIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBhZHZpc2luZyBhbnkgYWZmaWxpYXRlZCBlbnRpdHkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHRoYXQgYW55IHJpZ2h0cyBvciBwcml2aWxlZ2VzIGRlcml2ZWQgZnJvbSBvciBvYnRhaW5lZCBieSB3YXkgb2YgdGhpcyBMaWNlbnNlIGFyZSBzdWJqZWN0IHRvIHRoZSByZXN0cmljdGlvbnMgb3V0bGluZWQgaGVyZWluLlxuXG4gICAxNS4gR2xvc3NhcnkuIEFsbCBkZWZpbmVkIHRlcm1zIGluIHRoaXMgTGljZW5zZSB0aGF0IGFyZSB1c2VkIGluIG1vcmUgdGhhbiBvbmUgU2VjdGlvbiBvZiB0aGlzIExpY2Vuc2UgYXJlIHJlcGVhdGVkIGhlcmUsIGluIGFscGhhYmV0aWNhbCBvcmRlciwgZm9yIHRoZSBjb252ZW5pZW5jZSBvZiB0aGUgcmVhZGVyLiBUaGUgU2VjdGlvbiBvZiB0aGlzIExpY2Vuc2UgaW4gd2hpY2ggZWFjaCBkZWZpbmVkIHRlcm0gaXMgZmlyc3QgdXNlZCBpcyBzaG93biBpbiBwYXJlbnRoZXNlcy5cblxuICAgQ29udHJpYnV0b3I6IEVhY2ggcGVyc29uIG9yIGVudGl0eSB3aG8gY3JlYXRlZCBvciBjb250cmlidXRlZCB0byB0aGUgY3JlYXRpb24gb2YsIGFuZCBkaXN0cmlidXRlZCwgYSBNb2RpZmljYXRpb24uIChTZWUgU2VjdGlvbiAyKVxuXG4gICBEZXJpdmF0aXZlIFdvcmtzOiBUaGF0IHRlcm0gYXMgdXNlZCBpbiB0aGlzIExpY2Vuc2UgaXMgZGVmaW5lZCB1bmRlciBVLlMuIGNvcHlyaWdodCBsYXcuIChTZWUgU2VjdGlvbiAxKGIpKVxuXG4gICBMaWNlbnNlOiBUaGlzIEJpdFRvcnJlbnQgT3BlbiBTb3VyY2UgTGljZW5zZS4gKFNlZSBmaXJzdCBwYXJhZ3JhcGggb2YgTGljZW5zZSlcblxuICAgTGljZW5zZWQgUHJvZHVjdDogQW55IEJpdFRvcnJlbnQgUHJvZHVjdCBsaWNlbnNlZCBwdXJzdWFudCB0byB0aGlzIExpY2Vuc2UuIFRoZSB0ZXJtIFwiTGljZW5zZWQgUHJvZHVjdFwiIGluY2x1ZGVzIGFsbCBwcmV2aW91cyBNb2RpZmljYXRpb25zIGZyb20gYW55IENvbnRyaWJ1dG9yIHRoYXQgeW91IHJlY2VpdmUuIChTZWUgZmlyc3QgcGFyYWdyYXBoIG9mIExpY2Vuc2UgYW5kIFNlY3Rpb24gMilcblxuICAgTGljZW5zb3I6IEJpdFRvcnJlbnQsIEluYy4gKFNlZSBmaXJzdCBwYXJhZ3JhcGggb2YgTGljZW5zZSlcblxuICAgTW9kaWZpY2F0aW9uczogQW55IGFkZGl0aW9ucyB0byBvciBkZWxldGlvbnMgZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiAoaSkgYSBmaWxlIGNvbnRhaW5pbmcgTGljZW5zZWRcblxuICAgUHJvZHVjdCwgb3IgKGlpKSBhbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBMaWNlbnNlZCBQcm9kdWN0LiAoU2VlIFNlY3Rpb24gMilcblxuICAgTm90aWNlOiBUaGUgbm90aWNlIGNvbnRhaW5lZCBpbiBFeGhpYml0IEEuIChTZWUgU2VjdGlvbiA0KGUpKVxuXG4gICBTb3VyY2UgQ29kZTogVGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGNvbnRhaW5lZCB0aGVyZWluLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSwgb3IgYSBsaXN0IG9mIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdC4gKFNlZSBTZWN0aW9uIDEoYSkpXG5cbiAgIFlvdTogVGhpcyB0ZXJtIGlzIGRlZmluZWQgaW4gU2VjdGlvbiAxNCBvZiB0aGlzIExpY2Vuc2UuIEVYSElCSVQgQVxuXG5UaGUgTm90aWNlIGJlbG93IG11c3QgYXBwZWFyIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYW55IGNvcHkgeW91IGRpc3RyaWJ1dGUgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3Qgb3IgYW55IGhlcmV0by4gQ29udHJpYnV0b3JzIHRvIGFueSBNb2RpZmljYXRpb25zIG1heSBhZGQgdGhlaXIgb3duIGNvcHlyaWdodCBub3RpY2VzIHRvIGlkZW50aWZ5IHRoZWlyIG93biBjb250cmlidXRpb25zLlxuXG5MaWNlbnNlOlxuXG5UaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBCaXRUb3JyZW50IE9wZW4gU291cmNlIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSBMaWNlbnNlKS4gWW91IG1heSBub3QgY29weSBvciB1c2UgdGhpcyBmaWxlLCBpbiBlaXRoZXIgc291cmNlIGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtLCBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5iaXR0b3JyZW50LmNvbS9saWNlbnNlLy5cblxuU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG5CaXRUb3JyZW50LCBJbmMuIl0sImxpY2Vuc2VJZHMiOlsiQml0VG9ycmVudC0xLjEiXSwia2V5d29yZHMiOlsiMSB0aGlzIGJpdHRvcnJlbnQiLCJiZWVuIGRlbGV0ZWQgdGhpcyIsImRlbGV0ZWQgdGhpcyBsaWNlbnNlIiwidXNlIG9yIGdpdmUiLCJ0byBvdGhlcnMgZnJlZSIsIm90aGVycyBmcmVlIG9mIiwid2l0aG91dCBhIHJveWFsdHkiLCJhIHJveWFsdHkgNSIsInJveWFsdHkgNSB5b3UiLCJtYXkgc2VsbCBhY2NlcHQiLCJhbnkgY29udHJpYnV0b3IgcHJvdmlkZWQiLCJleGVjdXRhYmxlIHZlcnNpb25zIGNvbnRhaW4iLCJ2ZXJzaW9ucyBjb250YWluIHlvdXIiLCJtYXRlcmlhbCBtb2RpZmljYXRpb25zIGZvciIsIm1hdGVyaWFsIG1vZGlmaWNhdGlvbnMgeW91Iiwibm90IHNlbGwgYWNjZXB0Iiwic3VjaCBleGVjdXRhYmxlIHlvdSIsImV4ZWN1dGFibGUgeW91IG1heSIsImZvciBzZWxsIGFjY2VwdCIsInRpbWUgaW4gY29ubmVjdGlvbiIsImNvbm5lY3Rpb24gd2l0aCBuZXciLCJ3aXRoIG5ldyB2ZXJzaW9ucyIsIm9yIG90aGVyd2lzZSB5b3UiLCJwcm9kdWN0IHRoYXQgd2FzIiwidGhhdCB3YXMgb3JpZ2luYWxseSIsIndhcyBvcmlnaW5hbGx5IGxpY2Vuc2VkIiwib3JpZ2luYWxseSBsaWNlbnNlZCBoZXJldW5kZXIiLCJsaWNlbnNlZCBoZXJldW5kZXIgaG93ZXZlciIsImhlcmV1bmRlciBob3dldmVyIHRoZSIsImhvd2V2ZXIgdGhlIG5ldyIsInRoZSBuZXcgdmVyc2lvbnMiLCJsaWNlbnNlIHdpbGwgYXQiLCJhbGwgdGltZXMgYXBwbHkiLCJ0aW1lcyBhcHBseSB0byIsImFwcGx5IHRvIG5ldyIsInRvIG5ldyB2ZXJzaW9ucyIsImxpY2Vuc2VkIHByb2R1Y3QgcmVsZWFzZWQiLCJwcm9kdWN0IHJlbGVhc2VkIGJ5IiwicmVsZWFzZWQgYnkgbGljZW5zb3IiLCJieSBsaWNlbnNvciBhZnRlciIsImxpY2Vuc29yIGFmdGVyIHRoZSIsImFmdGVyIHRoZSByZWxlYXNlIiwidGhlIHJlbGVhc2Ugb2YiLCJsaWNlbnNlIG9ubHkgdGhlIiwiZmlsZSBjb250YWluaW5nIGEiLCJjb250YWluaW5nIGEgbGljZW5zZWQiLCJhbnkgY29udHJpYnV0b3Igc3ViamVjdCIsImNvbnRyaWJ1dG9yIHN1YmplY3QgdG8iLCJsaWNlbnNlIGJ5IGFwcGxpY2F0aW9uIiwidG8gbGljZW5zZSBhcyIsImxpY2Vuc2UgYXMgYW4iLCJ3aWxsIG5vdCB3aXRob3V0Iiwibm90IHdpdGhvdXQgdGhlIiwib2YgbGljZW5zb3IgdXNlIiwibGljZW5zb3IgdXNlIGFueSIsInVzZSBhbnkgdHJhZGVtYXJrcyIsImFueSB0cmFkZW1hcmtzIGNvcHlyaWdodHMiLCJzdGF0ZWQgaGVyZWluIGZvciIsImhlcmVpbiBmb3IgdGhlIiwib2YgZG91YnQgYW5kIiwiZG91YnQgYW5kIHdpdGhvdXQiLCJhbmQgd2l0aG91dCBsaW1pdGluZyIsImZvcmVnb2luZyB5b3UgaGVyZWJ5Iiwid2lsbCBub3QgdXNlIiwidXNlIG9yIGRpc3BsYXkiLCJvciBkaXNwbGF5IGFueSIsImRpc3BsYXkgYW55IHRyYWRlbWFyayIsImFueSBjb250cmlidXRvciBpbiIsImNvbnRyaWJ1dG9yIGluIGFueSIsImluIGFueSBkb21haW4iLCJhbnkgZG9tYWluIG5hbWUiLCJkb21haW4gbmFtZSBkaXJlY3RvcnkiLCJuYW1lIGRpcmVjdG9yeSBmaWxlcGF0aCIsImRpcmVjdG9yeSBmaWxlcGF0aCBhZHZlcnRpc2VtZW50IiwiZmlsZXBhdGggYWR2ZXJ0aXNlbWVudCBsaW5rIiwiYWR2ZXJ0aXNlbWVudCBsaW5rIG9yIiwibGluayBvciBvdGhlciIsIm9yIG90aGVyIHJlZmVyZW5jZSIsIm90aGVyIHJlZmVyZW5jZSB0byIsInJlZmVyZW5jZSB0byB5b3UiLCJhbnkgbWFubmVyIG9yIiwibWFubmVyIG9yIGluIiwiaW4gYW55IG1lZGlhIiwiYW55IG1lZGlhIDQiLCJtZWRpYSA0IHlvdXIiLCJtYWtlIGF2YWlsYWJsZSB3aXRob3V0Iiwid2l0aG91dCBjaGFyZ2UgdW5kZXIiLCJsb25nIGFzIGFueSIsImFzIGFueSBleGVjdXRhYmxlIiwibW9kaWZpY2F0aW9ucyB0aGVyZXRvIGciLCJ0aGVyZXRvIGcgY29tcGVuc2F0aW9uIiwiZyBjb21wZW5zYXRpb24gZm9yIiwiY29tcGVuc2F0aW9uIGZvciBkaXN0cmlidXRpb24iLCJ2ZXJzaW9ucyBvZiBsaWNlbnNlZCIsIm9mIGxpY2Vuc2VkIHByb2R1Y3RzIiwibGljZW5zZWQgcHJvZHVjdHMgbW9kaWZpY2F0aW9ucyIsInByb2R1Y3RzIG1vZGlmaWNhdGlvbnMgb3IiLCJtb2RpZmljYXRpb25zIG9yIGRlcml2YXRpdmUiLCJkZXJpdmF0aXZlIHdvcmtzIG5vdHdpdGhzdGFuZGluZyIsIndvcmtzIG5vdHdpdGhzdGFuZGluZyBhbnkiLCJ0aGUgY29udHJhcnkgYnkiLCJjb250cmFyeSBieSBkaXN0cmlidXRpbmciLCJieSBkaXN0cmlidXRpbmcgc2VsbGluZyIsImRpc3RyaWJ1dGluZyBzZWxsaW5nIGxpY2Vuc2luZyIsInNlbGxpbmcgbGljZW5zaW5nIHN1YmxpY2Vuc2luZyIsImxpY2Vuc2luZyBzdWJsaWNlbnNpbmcgb3IiLCJzdWJsaWNlbnNpbmcgb3Igb3RoZXJ3aXNlIiwibWFraW5nIGF2YWlsYWJsZSBhbnkiLCJhdmFpbGFibGUgYW55IGxpY2Vuc2VkIiwicHJvZHVjdCBvciBtb2RpZmljYXRpb24iLCJvciBtb2RpZmljYXRpb24gb3IiLCJtb2RpZmljYXRpb24gb3IgZGVyaXZhdGl2ZSIsImRlcml2YXRpdmUgd29yayB0aGVyZW9mIiwid29yayB0aGVyZW9mIHlvdSIsInRoZXJlb2YgeW91IGFuZCIsImxpY2Vuc29yIGhlcmVieSBhY2tub3dsZWRnZSIsImhlcmVieSBhY2tub3dsZWRnZSBhbmQiLCJtYXkgc2VsbCBsaWNlbnNlIiwib3RoZXIgY29udHJpYnV0b3IgcHJvdmlkZWQiLCJleGVjdXRhYmxlIHZlcnNpb25zIGkiLCJ2ZXJzaW9ucyBpIGNvbnRhaW4iLCJpIGNvbnRhaW4geW91ciIsIm9yIGlpIGFyZSIsImlpIGFyZSBvdGhlcndpc2UiLCJhcmUgb3RoZXJ3aXNlIG1hdGVyaWFsIiwib3RoZXJ3aXNlIG1hdGVyaWFsIGRlcml2YXRpdmUiLCJtYXRlcmlhbCBkZXJpdmF0aXZlIHdvcmtzIiwiZGVyaXZhdGl2ZSB3b3JrcyBmb3IiLCJ3b3JrcyBmb3IgcHVycG9zZXMiLCJsaWNlbnNlIGFuIGV4ZWN1dGFibGUiLCJsaWNlbnNlZCBwcm9kdWN0IHdpbGwiLCJwcm9kdWN0IHdpbGwgYmUiLCJ3aWxsIGJlIGRlZW1lZCIsImRlZW1lZCB0byBjb250YWluIiwiY29udGFpbiBhIG1hdGVyaWFsIiwiYSBtYXRlcmlhbCBtb2RpZmljYXRpb24iLCJtYXRlcmlhbCBtb2RpZmljYXRpb24gb3IiLCJtb2RpZmljYXRpb24gb3Igd2lsbCIsIm9yIHdpbGwgb3RoZXJ3aXNlIiwid2lsbCBvdGhlcndpc2UgYmUiLCJvdGhlcndpc2UgYmUgZGVlbWVkIiwiZGVlbWVkIGEgbWF0ZXJpYWwiLCJkZXJpdmF0aXZlIHdvcmsgaWYiLCJ3b3JrIGlmIGEiLCJhIHRoZSBsaWNlbnNlZCIsInByb2R1Y3QgaXMgbW9kaWZpZWQiLCJpcyBtb2RpZmllZCB3aXRoIiwibW9kaWZpZWQgd2l0aCB5b3VyIiwib3Igb3RoZXIgY29kZSIsIm9yIHRoZSBsaWNlbnNlZCIsInByb2R1Y3QgaXMgY29tYmluZWQiLCJjb21iaW5lZCB3aXRoIGEiLCJudW1iZXIgb2YgeW91ciIsIm9yIGNvZGUgcmVzcGVjdGl2ZWx5IiwiY29kZSByZXNwZWN0aXZlbHkgYW5kIiwicmVzcGVjdGl2ZWx5IGFuZCBiIiwiYW5kIGIgc3VjaCIsImIgc3VjaCBzb2Z0d2FyZSIsInN1Y2ggc29mdHdhcmUgcHJvZ3JhbXMiLCJvciBjb2RlIGFkZCIsImNvZGUgYWRkIG9yIiwiYWRkIG9yIGNvbnRyaWJ1dGUiLCJvciBjb250cmlidXRlIG1hdGVyaWFsIiwiY29udHJpYnV0ZSBtYXRlcmlhbCB2YWx1ZSIsIm1hdGVyaWFsIHZhbHVlIGZ1bmN0aW9uYWxpdHkiLCJ2YWx1ZSBmdW5jdGlvbmFsaXR5IG9yIiwiZnVuY3Rpb25hbGl0eSBvciBmZWF0dXJlcyIsIm9yIGZlYXR1cmVzIHRvIiwiZmVhdHVyZXMgdG8gdGhlIiwidGhlIGxpY2Vuc2UgcHJvZHVjdCIsImxpY2Vuc2UgcHJvZHVjdCBmb3IiLCJwcm9kdWN0IGZvciB0aGUiLCJtb2RpZmljYXRpb25zIG9yIGlzIiwiaXMgb3RoZXJ3aXNlIG5vdCIsIm90aGVyd2lzZSBub3QgYSIsIm5vdCBhIG1hdGVyaWFsIiwiZWFjaCBjYXNlIGFzIiwiY2FzZSBhcyBjb250ZW1wbGF0ZWQiLCJhcyBjb250ZW1wbGF0ZWQgaGVyZWluIiwiY29udGVtcGxhdGVkIGhlcmVpbiB5b3UiLCJub3Qgc2VsbCBsaWNlbnNlIiwic3VjaCBleGVjdXRhYmxlIGFkZGl0aW9uYWxseSIsImV4ZWN1dGFibGUgYWRkaXRpb25hbGx5IHdpdGhvdXQiLCJhZGRpdGlvbmFsbHkgd2l0aG91dCBsaW1pdGF0aW9uIiwid2l0aG91dCBsaW1pdGF0aW9uIG9mIiwibGltaXRhdGlvbiBvZiB0aGUiLCJ0aGUgZm9yZWdvaW5nIGFuZCIsImZvcmVnb2luZyBhbmQgbm90d2l0aHN0YW5kaW5nIiwidGhlIGNvbnRyYXJ5IHlvdSIsImNvbnRyYXJ5IHlvdSBjYW5ub3QiLCJmb3Igc2VsbCBsaWNlbnNlIiwic291cmNlIGNvZGUgNSIsImNvZGUgNSBpbmFiaWxpdHkiLCJ0aGF0IHZlcnNpb24gcHJvdmlkZWQiLCJhbnkgc3VjaCBsaWNlbnNlIiwic3VjaCBsaWNlbnNlIGJlIiwibGljZW5zZSBiZSBpbiIsImJlIGluIGZ1bGwiLCJhbmQgZWZmZWN0IGF0IiwiZWZmZWN0IGF0IHRoZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyIjIEJsdWUgT2FrIE1vZGVsIExpY2Vuc2VcblxuVmVyc2lvbiAxLjAuMFxuXG4jIyBQdXJwb3NlXG5cblRoaXMgbGljZW5zZSBnaXZlcyBldmVyeW9uZSBhcyBtdWNoIHBlcm1pc3Npb24gdG8gd29yayB3aXRoIHRoaXMgc29mdHdhcmUgYXMgcG9zc2libGUsIHdoaWxlIHByb3RlY3RpbmcgY29udHJpYnV0b3JzIGZyb20gbGlhYmlsaXR5LlxuXG4jIyBBY2NlcHRhbmNlXG5cbkluIG9yZGVyIHRvIHJlY2VpdmUgdGhpcyBsaWNlbnNlLCB5b3UgbXVzdCBhZ3JlZSB0byBpdHMgcnVsZXMuIFRoZSBydWxlcyBvZiB0aGlzIGxpY2Vuc2UgYXJlIGJvdGggb2JsaWdhdGlvbnMgdW5kZXIgdGhhdCBhZ3JlZW1lbnQgYW5kIGNvbmRpdGlvbnMgdG8geW91ciBsaWNlbnNlLiBZb3UgbXVzdCBub3QgZG8gYW55dGhpbmcgd2l0aCB0aGlzIHNvZnR3YXJlIHRoYXQgdHJpZ2dlcnMgYSBydWxlIHRoYXQgeW91IGNhbm5vdCBvciB3aWxsIG5vdCBmb2xsb3cuXG5cbiMjIENvcHlyaWdodFxuXG5FYWNoIGNvbnRyaWJ1dG9yIGxpY2Vuc2VzIHlvdSB0byBkbyBldmVyeXRoaW5nIHdpdGggdGhpcyBzb2Z0d2FyZSB0aGF0IHdvdWxkIG90aGVyd2lzZSBpbmZyaW5nZSB0aGF0IGNvbnRyaWJ1dG9yJ3MgY29weXJpZ2h0IGluIGl0LlxuXG4jIyBOb3RpY2VzXG5cbllvdSBtdXN0IGVuc3VyZSB0aGF0IGV2ZXJ5b25lIHdobyBnZXRzIGEgY29weSBvZiBhbnkgcGFydCBvZiB0aGlzIHNvZnR3YXJlIGZyb20geW91LCB3aXRoIG9yIHdpdGhvdXQgY2hhbmdlcywgYWxzbyBnZXRzIHRoZSB0ZXh0IG9mIHRoaXMgbGljZW5zZSBvciBhIGxpbmsgdG8gXHUwMDNjaHR0cHM6Ly9ibHVlb2FrY291bmNpbC5vcmcvbGljZW5zZS8xLjAuMFx1MDAzZS5cblxuIyMgRXhjdXNlXG5cbklmIGFueW9uZSBub3RpZmllcyB5b3UgaW4gd3JpdGluZyB0aGF0IHlvdSBoYXZlIG5vdCBjb21wbGllZCB3aXRoIFtOb3RpY2VzXSgjbm90aWNlcykgLCB5b3UgY2FuIGtlZXAgeW91ciBsaWNlbnNlIGJ5IHRha2luZyBhbGwgcHJhY3RpY2FsIHN0ZXBzIHRvIGNvbXBseSB3aXRoaW4gMzAgZGF5cyBhZnRlciB0aGUgbm90aWNlLiBJZiB5b3UgZG8gbm90IGRvIHNvLCB5b3VyIGxpY2Vuc2UgZW5kcyBpbW1lZGlhdGVseS5cblxuIyMgUGF0ZW50XG5cbkVhY2ggY29udHJpYnV0b3IgbGljZW5zZXMgeW91IHRvIGRvIGV2ZXJ5dGhpbmcgd2l0aCB0aGlzIHNvZnR3YXJlIHRoYXQgd291bGQgb3RoZXJ3aXNlIGluZnJpbmdlIGFueSBwYXRlbnQgY2xhaW1zIHRoZXkgY2FuIGxpY2Vuc2Ugb3IgYmVjb21lIGFibGUgdG8gbGljZW5zZS5cblxuIyMgUmVsaWFiaWxpdHlcblxuTm8gY29udHJpYnV0b3IgY2FuIHJldm9rZSB0aGlzIGxpY2Vuc2UuXG5cbiMjIE5vIExpYWJpbGl0eVxuXG4qKipBcyBmYXIgYXMgdGhlIGxhdyBhbGxvd3MsIHRoaXMgc29mdHdhcmUgY29tZXMgYXMgaXMsIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9yIGNvbmRpdGlvbiwgYW5kIG5vIGNvbnRyaWJ1dG9yIHdpbGwgYmUgbGlhYmxlIHRvIGFueW9uZSBmb3IgYW55IGRhbWFnZXMgcmVsYXRlZCB0byB0aGlzIHNvZnR3YXJlIG9yIHRoaXMgbGljZW5zZSwgdW5kZXIgYW55IGtpbmQgb2YgbGVnYWwgY2xhaW0uKioqIl0sImxpY2Vuc2VJZHMiOlsiQmx1ZU9hay0xLjAuMCJdLCJrZXl3b3JkcyI6WyJtb2RlbCBsaWNlbnNlIHZlcnNpb24iLCIwIDAgcHVycG9zZSIsIjAgcHVycG9zZSB0aGlzIiwibGljZW5zZSBnaXZlcyBldmVyeW9uZSIsImdpdmVzIGV2ZXJ5b25lIGFzIiwiZXZlcnlvbmUgYXMgbXVjaCIsImFzIG11Y2ggcGVybWlzc2lvbiIsIm11Y2ggcGVybWlzc2lvbiB0byIsInBlcm1pc3Npb24gdG8gd29yayIsInNvZnR3YXJlIGFzIHBvc3NpYmxlIiwiYXMgcG9zc2libGUgd2hpbGUiLCJwb3NzaWJsZSB3aGlsZSBwcm90ZWN0aW5nIiwid2hpbGUgcHJvdGVjdGluZyBjb250cmlidXRvcnMiLCJwcm90ZWN0aW5nIGNvbnRyaWJ1dG9ycyBmcm9tIiwiY29udHJpYnV0b3JzIGZyb20gbGlhYmlsaXR5IiwiZnJvbSBsaWFiaWxpdHkgYWNjZXB0YW5jZSIsImxpYWJpbGl0eSBhY2NlcHRhbmNlIGluIiwiYSBydWxlIHRoYXQiLCJydWxlIHRoYXQgeW91IiwidGhhdCB5b3UgY2Fubm90Iiwibm90IGZvbGxvdyBjb3B5cmlnaHQiLCJmb2xsb3cgY29weXJpZ2h0IGVhY2giLCJjb3B5cmlnaHQgZWFjaCBjb250cmlidXRvciIsIm90aGVyd2lzZSBpbmZyaW5nZSB0aGF0IiwiaW5mcmluZ2UgdGhhdCBjb250cmlidXRvciIsImluIGl0IG5vdGljZXMiLCJpdCBub3RpY2VzIHlvdSIsIm9yIGEgbGluayIsImxpbmsgdG8gaHR0cHMiLCJ0byBodHRwcyBibHVlb2FrY291bmNpbCIsIjAgMCBleGN1c2UiLCIwIGV4Y3VzZSBpZiIsImV4Y3VzZSBpZiBhbnlvbmUiLCJhbnlvbmUgbm90aWZpZXMgeW91Iiwibm90aWZpZXMgeW91IGluIiwieW91IGluIHdyaXRpbmciLCJoYXZlIG5vdCBjb21wbGllZCIsImNvbXBsaWVkIHdpdGggbm90aWNlcyIsIndpdGggbm90aWNlcyBub3RpY2VzIiwibm90aWNlcyBub3RpY2VzIHlvdSIsIm5vdGljZXMgeW91IGNhbiIsInlvdSBjYW4ga2VlcCIsImNhbiBrZWVwIHlvdXIiLCJrZWVwIHlvdXIgbGljZW5zZSIsInlvdXIgbGljZW5zZSBieSIsImRvIG5vdCBkbyIsImRvIHNvIHlvdXIiLCJzbyB5b3VyIGxpY2Vuc2UiLCJ5b3VyIGxpY2Vuc2UgZW5kcyIsImVuZHMgaW1tZWRpYXRlbHkgcGF0ZW50IiwiaW1tZWRpYXRlbHkgcGF0ZW50IGVhY2giLCJwYXRlbnQgZWFjaCBjb250cmlidXRvciIsInBhdGVudCBjbGFpbXMgdGhleSIsImNsYWltcyB0aGV5IGNhbiIsImxpY2Vuc2UgcmVsaWFiaWxpdHkgbm8iLCJyZWxpYWJpbGl0eSBubyBjb250cmlidXRvciIsIm5vIGNvbnRyaWJ1dG9yIGNhbiIsImNvbnRyaWJ1dG9yIGNhbiByZXZva2UiLCJjYW4gcmV2b2tlIHRoaXMiLCJjb25kaXRpb24gYW5kIG5vIiwiYW5kIG5vIGNvbnRyaWJ1dG9yIiwibm8gY29udHJpYnV0b3Igd2lsbCIsIm9hayBtb2RlbCBsaWNlbnNlIHZlcnNpb24iLCJtb2RlbCBsaWNlbnNlIHZlcnNpb24gMSIsInZlcnNpb24gMSAwIDAiLCIxIDAgMCBwdXJwb3NlIiwiMCAwIHB1cnBvc2UgdGhpcyIsIjAgcHVycG9zZSB0aGlzIGxpY2Vuc2UiLCJ0aGlzIGxpY2Vuc2UgZ2l2ZXMgZXZlcnlvbmUiLCJsaWNlbnNlIGdpdmVzIGV2ZXJ5b25lIGFzIiwiZ2l2ZXMgZXZlcnlvbmUgYXMgbXVjaCIsImV2ZXJ5b25lIGFzIG11Y2ggcGVybWlzc2lvbiIsImFzIG11Y2ggcGVybWlzc2lvbiB0byIsIm11Y2ggcGVybWlzc2lvbiB0byB3b3JrIiwicGVybWlzc2lvbiB0byB3b3JrIHdpdGgiLCJ0byB3b3JrIHdpdGggdGhpcyIsIndvcmsgd2l0aCB0aGlzIHNvZnR3YXJlIiwid2l0aCB0aGlzIHNvZnR3YXJlIGFzIiwidGhpcyBzb2Z0d2FyZSBhcyBwb3NzaWJsZSIsInNvZnR3YXJlIGFzIHBvc3NpYmxlIHdoaWxlIiwiYXMgcG9zc2libGUgd2hpbGUgcHJvdGVjdGluZyIsInBvc3NpYmxlIHdoaWxlIHByb3RlY3RpbmcgY29udHJpYnV0b3JzIiwid2hpbGUgcHJvdGVjdGluZyBjb250cmlidXRvcnMgZnJvbSIsInByb3RlY3RpbmcgY29udHJpYnV0b3JzIGZyb20gbGlhYmlsaXR5IiwiY29udHJpYnV0b3JzIGZyb20gbGlhYmlsaXR5IGFjY2VwdGFuY2UiLCJmcm9tIGxpYWJpbGl0eSBhY2NlcHRhbmNlIGluIiwibGlhYmlsaXR5IGFjY2VwdGFuY2UgaW4gb3JkZXIiLCJ0cmlnZ2VycyBhIHJ1bGUgdGhhdCIsImEgcnVsZSB0aGF0IHlvdSIsInJ1bGUgdGhhdCB5b3UgY2Fubm90IiwidGhhdCB5b3UgY2Fubm90IG9yIiwid2lsbCBub3QgZm9sbG93IGNvcHlyaWdodCIsIm5vdCBmb2xsb3cgY29weXJpZ2h0IGVhY2giLCJmb2xsb3cgY29weXJpZ2h0IGVhY2ggY29udHJpYnV0b3IiLCJjb3B5cmlnaHQgZWFjaCBjb250cmlidXRvciBsaWNlbnNlcyIsIndvdWxkIG90aGVyd2lzZSBpbmZyaW5nZSB0aGF0Iiwib3RoZXJ3aXNlIGluZnJpbmdlIHRoYXQgY29udHJpYnV0b3IiLCJpbmZyaW5nZSB0aGF0IGNvbnRyaWJ1dG9yIHMiLCJ0aGF0IGNvbnRyaWJ1dG9yIHMgY29weXJpZ2h0IiwiY29weXJpZ2h0IGluIGl0IG5vdGljZXMiLCJpbiBpdCBub3RpY2VzIHlvdSIsIml0IG5vdGljZXMgeW91IG11c3QiLCJsaWNlbnNlIG9yIGEgbGluayIsIm9yIGEgbGluayB0byIsImEgbGluayB0byBodHRwcyIsImxpbmsgdG8gaHR0cHMgYmx1ZW9ha2NvdW5jaWwiLCJ0byBodHRwcyBibHVlb2FrY291bmNpbCBvcmciLCIxIDAgMCBleGN1c2UiLCIwIDAgZXhjdXNlIGlmIiwiMCBleGN1c2UgaWYgYW55b25lIiwiZXhjdXNlIGlmIGFueW9uZSBub3RpZmllcyIsImlmIGFueW9uZSBub3RpZmllcyB5b3UiLCJhbnlvbmUgbm90aWZpZXMgeW91IGluIiwibm90aWZpZXMgeW91IGluIHdyaXRpbmciLCJ5b3UgaW4gd3JpdGluZyB0aGF0IiwidGhhdCB5b3UgaGF2ZSBub3QiLCJ5b3UgaGF2ZSBub3QgY29tcGxpZWQiLCJoYXZlIG5vdCBjb21wbGllZCB3aXRoIiwibm90IGNvbXBsaWVkIHdpdGggbm90aWNlcyIsImNvbXBsaWVkIHdpdGggbm90aWNlcyBub3RpY2VzIiwid2l0aCBub3RpY2VzIG5vdGljZXMgeW91Iiwibm90aWNlcyBub3RpY2VzIHlvdSBjYW4iLCJub3RpY2VzIHlvdSBjYW4ga2VlcCIsInlvdSBjYW4ga2VlcCB5b3VyIiwiY2FuIGtlZXAgeW91ciBsaWNlbnNlIiwia2VlcCB5b3VyIGxpY2Vuc2UgYnkiLCJ5b3VyIGxpY2Vuc2UgYnkgdGFraW5nIiwidGhlIG5vdGljZSBpZiB5b3UiLCJub3RpY2UgaWYgeW91IGRvIiwieW91IGRvIG5vdCBkbyIsImRvIG5vdCBkbyBzbyIsIm5vdCBkbyBzbyB5b3VyIiwiZG8gc28geW91ciBsaWNlbnNlIiwic28geW91ciBsaWNlbnNlIGVuZHMiLCJ5b3VyIGxpY2Vuc2UgZW5kcyBpbW1lZGlhdGVseSIsImxpY2Vuc2UgZW5kcyBpbW1lZGlhdGVseSBwYXRlbnQiLCJlbmRzIGltbWVkaWF0ZWx5IHBhdGVudCBlYWNoIiwiaW1tZWRpYXRlbHkgcGF0ZW50IGVhY2ggY29udHJpYnV0b3IiLCJwYXRlbnQgZWFjaCBjb250cmlidXRvciBsaWNlbnNlcyIsIm90aGVyd2lzZSBpbmZyaW5nZSBhbnkgcGF0ZW50IiwiaW5mcmluZ2UgYW55IHBhdGVudCBjbGFpbXMiLCJhbnkgcGF0ZW50IGNsYWltcyB0aGV5IiwicGF0ZW50IGNsYWltcyB0aGV5IGNhbiIsImNsYWltcyB0aGV5IGNhbiBsaWNlbnNlIiwidG8gbGljZW5zZSByZWxpYWJpbGl0eSBubyIsImxpY2Vuc2UgcmVsaWFiaWxpdHkgbm8gY29udHJpYnV0b3IiLCJyZWxpYWJpbGl0eSBubyBjb250cmlidXRvciBjYW4iLCJubyBjb250cmlidXRvciBjYW4gcmV2b2tlIiwiY29udHJpYnV0b3IgY2FuIHJldm9rZSB0aGlzIiwiY2FuIHJldm9rZSB0aGlzIGxpY2Vuc2UiLCJvciBjb25kaXRpb24gYW5kIG5vIiwiY29uZGl0aW9uIGFuZCBubyBjb250cmlidXRvciIsImFuZCBubyBjb250cmlidXRvciB3aWxsIiwibm8gY29udHJpYnV0b3Igd2lsbCBiZSIsImJsdWUgb2FrIG1vZGVsIGxpY2Vuc2UgdmVyc2lvbiIsIm9hayBtb2RlbCBsaWNlbnNlIHZlcnNpb24gMSIsIm1vZGVsIGxpY2Vuc2UgdmVyc2lvbiAxIDAiLCJsaWNlbnNlIHZlcnNpb24gMSAwIDAiLCJ2ZXJzaW9uIDEgMCAwIHB1cnBvc2UiLCIxIDAgMCBwdXJwb3NlIHRoaXMiLCIwIDAgcHVycG9zZSB0aGlzIGxpY2Vuc2UiLCIwIHB1cnBvc2UgdGhpcyBsaWNlbnNlIGdpdmVzIiwicHVycG9zZSB0aGlzIGxpY2Vuc2UgZ2l2ZXMgZXZlcnlvbmUiLCJ0aGlzIGxpY2Vuc2UgZ2l2ZXMgZXZlcnlvbmUgYXMiLCJsaWNlbnNlIGdpdmVzIGV2ZXJ5b25lIGFzIG11Y2giLCJnaXZlcyBldmVyeW9uZSBhcyBtdWNoIHBlcm1pc3Npb24iLCJldmVyeW9uZSBhcyBtdWNoIHBlcm1pc3Npb24gdG8iLCJhcyBtdWNoIHBlcm1pc3Npb24gdG8gd29yayIsIm11Y2ggcGVybWlzc2lvbiB0byB3b3JrIHdpdGgiLCJwZXJtaXNzaW9uIHRvIHdvcmsgd2l0aCB0aGlzIiwidG8gd29yayB3aXRoIHRoaXMgc29mdHdhcmUiLCJ3b3JrIHdpdGggdGhpcyBzb2Z0d2FyZSBhcyIsIndpdGggdGhpcyBzb2Z0d2FyZSBhcyBwb3NzaWJsZSIsInRoaXMgc29mdHdhcmUgYXMgcG9zc2libGUgd2hpbGUiLCJzb2Z0d2FyZSBhcyBwb3NzaWJsZSB3aGlsZSBwcm90ZWN0aW5nIiwiYXMgcG9zc2libGUgd2hpbGUgcHJvdGVjdGluZyBjb250cmlidXRvcnMiLCJwb3NzaWJsZSB3aGlsZSBwcm90ZWN0aW5nIGNvbnRyaWJ1dG9ycyBmcm9tIiwid2hpbGUgcHJvdGVjdGluZyBjb250cmlidXRvcnMgZnJvbSBsaWFiaWxpdHkiLCJwcm90ZWN0aW5nIGNvbnRyaWJ1dG9ycyBmcm9tIGxpYWJpbGl0eSBhY2NlcHRhbmNlIiwiY29udHJpYnV0b3JzIGZyb20gbGlhYmlsaXR5IGFjY2VwdGFuY2UgaW4iLCJmcm9tIGxpYWJpbGl0eSBhY2NlcHRhbmNlIGluIG9yZGVyIiwibGlhYmlsaXR5IGFjY2VwdGFuY2UgaW4gb3JkZXIgdG8iLCJhY2NlcHRhbmNlIGluIG9yZGVyIHRvIHJlY2VpdmUiLCJsaWNlbnNlIGFyZSBib3RoIG9ibGlnYXRpb25zIHVuZGVyIiwibm90IGRvIGFueXRoaW5nIHdpdGggdGhpcyIsInRoYXQgdHJpZ2dlcnMgYSBydWxlIHRoYXQiLCJ0cmlnZ2VycyBhIHJ1bGUgdGhhdCB5b3UiLCJhIHJ1bGUgdGhhdCB5b3UgY2Fubm90IiwicnVsZSB0aGF0IHlvdSBjYW5ub3Qgb3IiLCJ0aGF0IHlvdSBjYW5ub3Qgb3Igd2lsbCIsIm9yIHdpbGwgbm90IGZvbGxvdyBjb3B5cmlnaHQiLCJ3aWxsIG5vdCBmb2xsb3cgY29weXJpZ2h0IGVhY2giLCJub3QgZm9sbG93IGNvcHlyaWdodCBlYWNoIGNvbnRyaWJ1dG9yIiwiZm9sbG93IGNvcHlyaWdodCBlYWNoIGNvbnRyaWJ1dG9yIGxpY2Vuc2VzIiwiY29weXJpZ2h0IGVhY2ggY29udHJpYnV0b3IgbGljZW5zZXMgeW91IiwidGhhdCB3b3VsZCBvdGhlcndpc2UgaW5mcmluZ2UgdGhhdCIsIndvdWxkIG90aGVyd2lzZSBpbmZyaW5nZSB0aGF0IGNvbnRyaWJ1dG9yIiwib3RoZXJ3aXNlIGluZnJpbmdlIHRoYXQgY29udHJpYnV0b3IgcyIsImluZnJpbmdlIHRoYXQgY29udHJpYnV0b3IgcyBjb3B5cmlnaHQiLCJ0aGF0IGNvbnRyaWJ1dG9yIHMgY29weXJpZ2h0IGluIl19LHsibGljZW5zZVRleHRzIjpbIkNvcHlyaWdodCAxOTkzIEZyYW5jaXMgQm9yY2V1eFxuXG5Zb3UgbWF5IGZyZWVseSB1c2UsIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgZWFjaCBvZiB0aGUgZmlsZXMgaW4gdGhpcyBwYWNrYWdlIHdpdGhvdXQgbGltaXRhdGlvbi4gVGhlIHBhY2thZ2UgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmaWxlczpcblxuUkVBRE1FXG5cbmNvbXBhdGliaWxpdHkvT2xkRGlhZ3JhbVxuXG5jb21wYXRpYmlsaXR5L09sZE1heGlEaWFncmFtXG5cbmNvbXBhdGliaWxpdHkvT2xkTWljcm9EaWFncmFtXG5cbmNvbXBhdGliaWxpdHkvT2xkTWluaURpYWdyYW1cblxuY29tcGF0aWJpbGl0eS9PbGRNdWx0aXBsZUFycm93c1xuXG5kaWFncmFtL0RpYWdyYW1cblxuZGlhZ3JhbS9NYXhpRGlhZ3JhbVxuXG5kaWFncmFtL01pY3JvRGlhZ3JhbVxuXG5kaWFncmFtL01pbmlEaWFncmFtXG5cbmRpYWdyYW0vTXVsdGlwbGVBcnJvd3NcblxudXNlci1ndWlkZXMvRGlhZ3JhbV9Nb2RlX2RfRW1wbG9pXG5cbnVzZXItZ3VpZGVzL0RpYWdyYW1fUmVhZF9NZVxuXG5PZiBjb3Vyc2Ugbm8gc3VwcG9ydCBpcyBndWFyYW50ZWVkLCBidXQgdGhlIGF1dGhvciB3aWxsIGF0dGVtcHQgdG8gYXNzaXN0IHdpdGggcHJvYmxlbXMuIEN1cnJlbnQgZW1haWwgYWRkcmVzczpcblxuZnJhbmNpcyBkb3QgYm9yY2V1eCBhdCB1Y2xvdXZhaW4gZG90IGJlLiJdLCJsaWNlbnNlSWRzIjpbIkJvcmNldXgiXSwia2V5d29yZHMiOlsiY29weXJpZ2h0IDE5OTMgZnJhbmNpcyIsIjE5OTMgZnJhbmNpcyBib3JjZXV4IiwiZnJhbmNpcyBib3JjZXV4IHlvdSIsImJvcmNldXggeW91IG1heSIsIm1heSBmcmVlbHkgdXNlIiwiZnJlZWx5IHVzZSBtb2RpZnkiLCJvciBkaXN0cmlidXRlIGVhY2giLCJkaXN0cmlidXRlIGVhY2ggb2YiLCJwYWNrYWdlIHdpdGhvdXQgbGltaXRhdGlvbiIsImxpbWl0YXRpb24gdGhlIHBhY2thZ2UiLCJ0aGUgcGFja2FnZSBjb25zaXN0cyIsInBhY2thZ2UgY29uc2lzdHMgb2YiLCJ0aGUgZm9sbG93aW5nIGZpbGVzIiwiZm9sbG93aW5nIGZpbGVzIHJlYWRtZSIsImZpbGVzIHJlYWRtZSBjb21wYXRpYmlsaXR5IiwicmVhZG1lIGNvbXBhdGliaWxpdHkgb2xkZGlhZ3JhbSIsImNvbXBhdGliaWxpdHkgb2xkZGlhZ3JhbSBjb21wYXRpYmlsaXR5Iiwib2xkZGlhZ3JhbSBjb21wYXRpYmlsaXR5IG9sZG1heGlkaWFncmFtIiwiY29tcGF0aWJpbGl0eSBvbGRtYXhpZGlhZ3JhbSBjb21wYXRpYmlsaXR5Iiwib2xkbWF4aWRpYWdyYW0gY29tcGF0aWJpbGl0eSBvbGRtaWNyb2RpYWdyYW0iLCJjb21wYXRpYmlsaXR5IG9sZG1pY3JvZGlhZ3JhbSBjb21wYXRpYmlsaXR5Iiwib2xkbWljcm9kaWFncmFtIGNvbXBhdGliaWxpdHkgb2xkbWluaWRpYWdyYW0iLCJjb21wYXRpYmlsaXR5IG9sZG1pbmlkaWFncmFtIGNvbXBhdGliaWxpdHkiLCJvbGRtaW5pZGlhZ3JhbSBjb21wYXRpYmlsaXR5IG9sZG11bHRpcGxlYXJyb3dzIiwiY29tcGF0aWJpbGl0eSBvbGRtdWx0aXBsZWFycm93cyBkaWFncmFtIiwib2xkbXVsdGlwbGVhcnJvd3MgZGlhZ3JhbSBkaWFncmFtIiwiZGlhZ3JhbSBkaWFncmFtIGRpYWdyYW0iLCJkaWFncmFtIGRpYWdyYW0gbWF4aWRpYWdyYW0iLCJkaWFncmFtIG1heGlkaWFncmFtIGRpYWdyYW0iLCJtYXhpZGlhZ3JhbSBkaWFncmFtIG1pY3JvZGlhZ3JhbSIsImRpYWdyYW0gbWljcm9kaWFncmFtIGRpYWdyYW0iLCJtaWNyb2RpYWdyYW0gZGlhZ3JhbSBtaW5pZGlhZ3JhbSIsImRpYWdyYW0gbWluaWRpYWdyYW0gZGlhZ3JhbSIsIm1pbmlkaWFncmFtIGRpYWdyYW0gbXVsdGlwbGVhcnJvd3MiLCJkaWFncmFtIG11bHRpcGxlYXJyb3dzIHVzZXIiLCJtdWx0aXBsZWFycm93cyB1c2VyIGd1aWRlcyIsImd1aWRlcyBkaWFncmFtIG1vZGUiLCJkaWFncmFtIG1vZGUgZCIsIm1vZGUgZCBlbXBsb2kiLCJkIGVtcGxvaSB1c2VyIiwiZW1wbG9pIHVzZXIgZ3VpZGVzIiwiZ3VpZGVzIGRpYWdyYW0gcmVhZCIsImRpYWdyYW0gcmVhZCBtZSIsInJlYWQgbWUgb2YiLCJtZSBvZiBjb3Vyc2UiLCJvZiBjb3Vyc2Ugbm8iLCJjb3Vyc2Ugbm8gc3VwcG9ydCIsIm5vIHN1cHBvcnQgaXMiLCJzdXBwb3J0IGlzIGd1YXJhbnRlZWQiLCJpcyBndWFyYW50ZWVkIGJ1dCIsImd1YXJhbnRlZWQgYnV0IHRoZSIsImJ1dCB0aGUgYXV0aG9yIiwidGhlIGF1dGhvciB3aWxsIiwiYXV0aG9yIHdpbGwgYXR0ZW1wdCIsIndpbGwgYXR0ZW1wdCB0byIsImF0dGVtcHQgdG8gYXNzaXN0IiwidG8gYXNzaXN0IHdpdGgiLCJhc3Npc3Qgd2l0aCBwcm9ibGVtcyIsIndpdGggcHJvYmxlbXMgY3VycmVudCIsInByb2JsZW1zIGN1cnJlbnQgZW1haWwiLCJjdXJyZW50IGVtYWlsIGFkZHJlc3MiLCJlbWFpbCBhZGRyZXNzIGZyYW5jaXMiLCJhZGRyZXNzIGZyYW5jaXMgZG90IiwiZnJhbmNpcyBkb3QgYm9yY2V1eCIsImRvdCBib3JjZXV4IGF0IiwiYm9yY2V1eCBhdCB1Y2xvdXZhaW4iLCJhdCB1Y2xvdXZhaW4gZG90IiwidWNsb3V2YWluIGRvdCBiZSIsImNvcHlyaWdodCAxOTkzIGZyYW5jaXMgYm9yY2V1eCIsIjE5OTMgZnJhbmNpcyBib3JjZXV4IHlvdSIsImZyYW5jaXMgYm9yY2V1eCB5b3UgbWF5IiwiYm9yY2V1eCB5b3UgbWF5IGZyZWVseSIsInlvdSBtYXkgZnJlZWx5IHVzZSIsIm1heSBmcmVlbHkgdXNlIG1vZGlmeSIsImZyZWVseSB1c2UgbW9kaWZ5IGFuZCIsInVzZSBtb2RpZnkgYW5kIG9yIiwiYW5kIG9yIGRpc3RyaWJ1dGUgZWFjaCIsIm9yIGRpc3RyaWJ1dGUgZWFjaCBvZiIsImRpc3RyaWJ1dGUgZWFjaCBvZiB0aGUiLCJmaWxlcyBpbiB0aGlzIHBhY2thZ2UiLCJpbiB0aGlzIHBhY2thZ2Ugd2l0aG91dCIsInRoaXMgcGFja2FnZSB3aXRob3V0IGxpbWl0YXRpb24iLCJwYWNrYWdlIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUiLCJ3aXRob3V0IGxpbWl0YXRpb24gdGhlIHBhY2thZ2UiLCJsaW1pdGF0aW9uIHRoZSBwYWNrYWdlIGNvbnNpc3RzIiwidGhlIHBhY2thZ2UgY29uc2lzdHMgb2YiLCJwYWNrYWdlIGNvbnNpc3RzIG9mIHRoZSIsImNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmciLCJvZiB0aGUgZm9sbG93aW5nIGZpbGVzIiwidGhlIGZvbGxvd2luZyBmaWxlcyByZWFkbWUiLCJmb2xsb3dpbmcgZmlsZXMgcmVhZG1lIGNvbXBhdGliaWxpdHkiLCJmaWxlcyByZWFkbWUgY29tcGF0aWJpbGl0eSBvbGRkaWFncmFtIiwicmVhZG1lIGNvbXBhdGliaWxpdHkgb2xkZGlhZ3JhbSBjb21wYXRpYmlsaXR5IiwiY29tcGF0aWJpbGl0eSBvbGRkaWFncmFtIGNvbXBhdGliaWxpdHkgb2xkbWF4aWRpYWdyYW0iLCJvbGRkaWFncmFtIGNvbXBhdGliaWxpdHkgb2xkbWF4aWRpYWdyYW0gY29tcGF0aWJpbGl0eSIsImNvbXBhdGliaWxpdHkgb2xkbWF4aWRpYWdyYW0gY29tcGF0aWJpbGl0eSBvbGRtaWNyb2RpYWdyYW0iLCJvbGRtYXhpZGlhZ3JhbSBjb21wYXRpYmlsaXR5IG9sZG1pY3JvZGlhZ3JhbSBjb21wYXRpYmlsaXR5IiwiY29tcGF0aWJpbGl0eSBvbGRtaWNyb2RpYWdyYW0gY29tcGF0aWJpbGl0eSBvbGRtaW5pZGlhZ3JhbSIsIm9sZG1pY3JvZGlhZ3JhbSBjb21wYXRpYmlsaXR5IG9sZG1pbmlkaWFncmFtIGNvbXBhdGliaWxpdHkiLCJjb21wYXRpYmlsaXR5IG9sZG1pbmlkaWFncmFtIGNvbXBhdGliaWxpdHkgb2xkbXVsdGlwbGVhcnJvd3MiLCJvbGRtaW5pZGlhZ3JhbSBjb21wYXRpYmlsaXR5IG9sZG11bHRpcGxlYXJyb3dzIGRpYWdyYW0iLCJjb21wYXRpYmlsaXR5IG9sZG11bHRpcGxlYXJyb3dzIGRpYWdyYW0gZGlhZ3JhbSIsIm9sZG11bHRpcGxlYXJyb3dzIGRpYWdyYW0gZGlhZ3JhbSBkaWFncmFtIiwiZGlhZ3JhbSBkaWFncmFtIGRpYWdyYW0gbWF4aWRpYWdyYW0iLCJkaWFncmFtIGRpYWdyYW0gbWF4aWRpYWdyYW0gZGlhZ3JhbSIsImRpYWdyYW0gbWF4aWRpYWdyYW0gZGlhZ3JhbSBtaWNyb2RpYWdyYW0iLCJtYXhpZGlhZ3JhbSBkaWFncmFtIG1pY3JvZGlhZ3JhbSBkaWFncmFtIiwiZGlhZ3JhbSBtaWNyb2RpYWdyYW0gZGlhZ3JhbSBtaW5pZGlhZ3JhbSIsIm1pY3JvZGlhZ3JhbSBkaWFncmFtIG1pbmlkaWFncmFtIGRpYWdyYW0iLCJkaWFncmFtIG1pbmlkaWFncmFtIGRpYWdyYW0gbXVsdGlwbGVhcnJvd3MiLCJtaW5pZGlhZ3JhbSBkaWFncmFtIG11bHRpcGxlYXJyb3dzIHVzZXIiLCJkaWFncmFtIG11bHRpcGxlYXJyb3dzIHVzZXIgZ3VpZGVzIiwibXVsdGlwbGVhcnJvd3MgdXNlciBndWlkZXMgZGlhZ3JhbSIsInVzZXIgZ3VpZGVzIGRpYWdyYW0gbW9kZSIsImd1aWRlcyBkaWFncmFtIG1vZGUgZCIsImRpYWdyYW0gbW9kZSBkIGVtcGxvaSIsIm1vZGUgZCBlbXBsb2kgdXNlciIsImQgZW1wbG9pIHVzZXIgZ3VpZGVzIiwiZW1wbG9pIHVzZXIgZ3VpZGVzIGRpYWdyYW0iLCJ1c2VyIGd1aWRlcyBkaWFncmFtIHJlYWQiLCJndWlkZXMgZGlhZ3JhbSByZWFkIG1lIiwiZGlhZ3JhbSByZWFkIG1lIG9mIiwicmVhZCBtZSBvZiBjb3Vyc2UiLCJtZSBvZiBjb3Vyc2Ugbm8iLCJvZiBjb3Vyc2Ugbm8gc3VwcG9ydCIsImNvdXJzZSBubyBzdXBwb3J0IGlzIiwibm8gc3VwcG9ydCBpcyBndWFyYW50ZWVkIiwic3VwcG9ydCBpcyBndWFyYW50ZWVkIGJ1dCIsImlzIGd1YXJhbnRlZWQgYnV0IHRoZSIsImd1YXJhbnRlZWQgYnV0IHRoZSBhdXRob3IiLCJidXQgdGhlIGF1dGhvciB3aWxsIiwidGhlIGF1dGhvciB3aWxsIGF0dGVtcHQiLCJhdXRob3Igd2lsbCBhdHRlbXB0IHRvIiwid2lsbCBhdHRlbXB0IHRvIGFzc2lzdCIsImF0dGVtcHQgdG8gYXNzaXN0IHdpdGgiLCJ0byBhc3Npc3Qgd2l0aCBwcm9ibGVtcyIsImFzc2lzdCB3aXRoIHByb2JsZW1zIGN1cnJlbnQiLCJ3aXRoIHByb2JsZW1zIGN1cnJlbnQgZW1haWwiLCJwcm9ibGVtcyBjdXJyZW50IGVtYWlsIGFkZHJlc3MiLCJjdXJyZW50IGVtYWlsIGFkZHJlc3MgZnJhbmNpcyIsImVtYWlsIGFkZHJlc3MgZnJhbmNpcyBkb3QiLCJhZGRyZXNzIGZyYW5jaXMgZG90IGJvcmNldXgiLCJmcmFuY2lzIGRvdCBib3JjZXV4IGF0IiwiZG90IGJvcmNldXggYXQgdWNsb3V2YWluIiwiYm9yY2V1eCBhdCB1Y2xvdXZhaW4gZG90IiwiYXQgdWNsb3V2YWluIGRvdCBiZSIsImNvcHlyaWdodCAxOTkzIGZyYW5jaXMgYm9yY2V1eCB5b3UiLCIxOTkzIGZyYW5jaXMgYm9yY2V1eCB5b3UgbWF5IiwiZnJhbmNpcyBib3JjZXV4IHlvdSBtYXkgZnJlZWx5IiwiYm9yY2V1eCB5b3UgbWF5IGZyZWVseSB1c2UiLCJ5b3UgbWF5IGZyZWVseSB1c2UgbW9kaWZ5IiwibWF5IGZyZWVseSB1c2UgbW9kaWZ5IGFuZCIsImZyZWVseSB1c2UgbW9kaWZ5IGFuZCBvciIsInVzZSBtb2RpZnkgYW5kIG9yIGRpc3RyaWJ1dGUiLCJtb2RpZnkgYW5kIG9yIGRpc3RyaWJ1dGUgZWFjaCIsImFuZCBvciBkaXN0cmlidXRlIGVhY2ggb2YiLCJvciBkaXN0cmlidXRlIGVhY2ggb2YgdGhlIiwiZGlzdHJpYnV0ZSBlYWNoIG9mIHRoZSBmaWxlcyIsImVhY2ggb2YgdGhlIGZpbGVzIGluIiwidGhlIGZpbGVzIGluIHRoaXMgcGFja2FnZSIsImZpbGVzIGluIHRoaXMgcGFja2FnZSB3aXRob3V0IiwiaW4gdGhpcyBwYWNrYWdlIHdpdGhvdXQgbGltaXRhdGlvbiIsInRoaXMgcGFja2FnZSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIiwicGFja2FnZSB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHBhY2thZ2UiLCJ3aXRob3V0IGxpbWl0YXRpb24gdGhlIHBhY2thZ2UgY29uc2lzdHMiLCJsaW1pdGF0aW9uIHRoZSBwYWNrYWdlIGNvbnNpc3RzIG9mIiwidGhlIHBhY2thZ2UgY29uc2lzdHMgb2YgdGhlIiwicGFja2FnZSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIiwiY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmaWxlcyIsIm9mIHRoZSBmb2xsb3dpbmcgZmlsZXMgcmVhZG1lIiwidGhlIGZvbGxvd2luZyBmaWxlcyByZWFkbWUgY29tcGF0aWJpbGl0eSIsImZvbGxvd2luZyBmaWxlcyByZWFkbWUgY29tcGF0aWJpbGl0eSBvbGRkaWFncmFtIiwiZmlsZXMgcmVhZG1lIGNvbXBhdGliaWxpdHkgb2xkZGlhZ3JhbSBjb21wYXRpYmlsaXR5IiwicmVhZG1lIGNvbXBhdGliaWxpdHkgb2xkZGlhZ3JhbSBjb21wYXRpYmlsaXR5IG9sZG1heGlkaWFncmFtIiwiY29tcGF0aWJpbGl0eSBvbGRkaWFncmFtIGNvbXBhdGliaWxpdHkgb2xkbWF4aWRpYWdyYW0gY29tcGF0aWJpbGl0eSIsIm9sZGRpYWdyYW0gY29tcGF0aWJpbGl0eSBvbGRtYXhpZGlhZ3JhbSBjb21wYXRpYmlsaXR5IG9sZG1pY3JvZGlhZ3JhbSIsImNvbXBhdGliaWxpdHkgb2xkbWF4aWRpYWdyYW0gY29tcGF0aWJpbGl0eSBvbGRtaWNyb2RpYWdyYW0gY29tcGF0aWJpbGl0eSIsIm9sZG1heGlkaWFncmFtIGNvbXBhdGliaWxpdHkgb2xkbWljcm9kaWFncmFtIGNvbXBhdGliaWxpdHkgb2xkbWluaWRpYWdyYW0iLCJjb21wYXRpYmlsaXR5IG9sZG1pY3JvZGlhZ3JhbSBjb21wYXRpYmlsaXR5IG9sZG1pbmlkaWFncmFtIGNvbXBhdGliaWxpdHkiLCJvbGRtaWNyb2RpYWdyYW0gY29tcGF0aWJpbGl0eSBvbGRtaW5pZGlhZ3JhbSBjb21wYXRpYmlsaXR5IG9sZG11bHRpcGxlYXJyb3dzIiwiY29tcGF0aWJpbGl0eSBvbGRtaW5pZGlhZ3JhbSBjb21wYXRpYmlsaXR5IG9sZG11bHRpcGxlYXJyb3dzIGRpYWdyYW0iLCJvbGRtaW5pZGlhZ3JhbSBjb21wYXRpYmlsaXR5IG9sZG11bHRpcGxlYXJyb3dzIGRpYWdyYW0gZGlhZ3JhbSIsImNvbXBhdGliaWxpdHkgb2xkbXVsdGlwbGVhcnJvd3MgZGlhZ3JhbSBkaWFncmFtIGRpYWdyYW0iLCJvbGRtdWx0aXBsZWFycm93cyBkaWFncmFtIGRpYWdyYW0gZGlhZ3JhbSBtYXhpZGlhZ3JhbSIsImRpYWdyYW0gZGlhZ3JhbSBkaWFncmFtIG1heGlkaWFncmFtIGRpYWdyYW0iLCJkaWFncmFtIGRpYWdyYW0gbWF4aWRpYWdyYW0gZGlhZ3JhbSBtaWNyb2RpYWdyYW0iLCJkaWFncmFtIG1heGlkaWFncmFtIGRpYWdyYW0gbWljcm9kaWFncmFtIGRpYWdyYW0iLCJtYXhpZGlhZ3JhbSBkaWFncmFtIG1pY3JvZGlhZ3JhbSBkaWFncmFtIG1pbmlkaWFncmFtIiwiZGlhZ3JhbSBtaWNyb2RpYWdyYW0gZGlhZ3JhbSBtaW5pZGlhZ3JhbSBkaWFncmFtIiwibWljcm9kaWFncmFtIGRpYWdyYW0gbWluaWRpYWdyYW0gZGlhZ3JhbSBtdWx0aXBsZWFycm93cyIsImRpYWdyYW0gbWluaWRpYWdyYW0gZGlhZ3JhbSBtdWx0aXBsZWFycm93cyB1c2VyIiwibWluaWRpYWdyYW0gZGlhZ3JhbSBtdWx0aXBsZWFycm93cyB1c2VyIGd1aWRlcyIsImRpYWdyYW0gbXVsdGlwbGVhcnJvd3MgdXNlciBndWlkZXMgZGlhZ3JhbSIsIm11bHRpcGxlYXJyb3dzIHVzZXIgZ3VpZGVzIGRpYWdyYW0gbW9kZSIsInVzZXIgZ3VpZGVzIGRpYWdyYW0gbW9kZSBkIiwiZ3VpZGVzIGRpYWdyYW0gbW9kZSBkIGVtcGxvaSIsImRpYWdyYW0gbW9kZSBkIGVtcGxvaSB1c2VyIiwibW9kZSBkIGVtcGxvaSB1c2VyIGd1aWRlcyIsImQgZW1wbG9pIHVzZXIgZ3VpZGVzIGRpYWdyYW0iLCJlbXBsb2kgdXNlciBndWlkZXMgZGlhZ3JhbSByZWFkIl19LHsibGljZW5zZVRleHRzIjpbIiMgVGhlIENyeXB0b2dyYXBoaWMgQXV0b25vbXkgTGljZW5zZSwgdi4gMS4wXG5cbipUaGlzIENyeXB0b2dyYXBoaWMgQXV0b25vbXkgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKSBhcHBsaWVzIHRvIGFueSBXb3JrIHdob3NlIG93bmVyIGhhcyBtYXJrZWQgaXQgd2l0aCBhbnkgb2YgdGhlIGZvbGxvd2luZyBub3RpY2VzLCBvciBhIHNpbWlsYXIgZGVtb25zdHJhdGlvbiBvZiBpbnRlbnQ6ICpcblxuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBDQUwtMS4wXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBDcnlwdG9ncmFwaGljIEF1dG9ub215IExpY2Vuc2UgdmVyc2lvbiAxLjBcblxuXG5cbipvcipcblxuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBDQUwtMS4wLUNvbWJpbmVkLVdvcmstRXhjZXB0aW9uXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBDcnlwdG9ncmFwaGljIEF1dG9ub215IExpY2Vuc2UgdmVyc2lvbiAxLjAsIHdpdGggQ29tYmluZWQgV29yayBFeGNlcHRpb25cblxuX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1xuXG5cblxuICAgIyMgMS4gUHVycG9zZVxuXG4gICBUaGlzIExpY2Vuc2UgZ2l2ZXMgWW91IHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIHVzZSBhbmQgbW9kaWZ5IHRoZSBzb2Z0d2FyZSB0byB3aGljaCBpdCBhcHBsaWVzICh0aGUgXCJXb3JrXCIpLCBlaXRoZXIgYXMtaXMgb3IgaW4gbW9kaWZpZWQgZm9ybSwgZm9yIFlvdXIgcHJpdmF0ZSBwdXJwb3Nlcywgd2hpbGUgcHJvdGVjdGluZyB0aGUgb3duZXJzIGFuZCBjb250cmlidXRvcnMgdG8gdGhlIHNvZnR3YXJlIGZyb20gbGlhYmlsaXR5LlxuXG4gICBUaGlzIExpY2Vuc2UgYWxzbyBzdHJpdmVzIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gYW5kIGF1dG9ub215IG9mIHRoaXJkIHBhcnRpZXMgd2hvIHJlY2VpdmUgdGhlIFdvcmsgZnJvbSB5b3UuIElmIGFueSBub24tYWZmaWxpYXRlZCB0aGlyZCBwYXJ0eSByZWNlaXZlcyBhbnkgcGFydCwgYXNwZWN0LCBvciBlbGVtZW50IG9mIHRoZSBXb3JrIGZyb20gWW91LCB0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdGhhdCBZb3UgcHJvdmlkZSB0aGF0IHRoaXJkIHBhcnR5IGFsbCB0aGUgcGVybWlzc2lvbnMgYW5kIG1hdGVyaWFscyBuZWVkZWQgdG8gaW5kZXBlbmRlbnRseSB1c2UgYW5kIG1vZGlmeSB0aGUgV29yayB3aXRob3V0IHRoYXQgdGhpcmQgcGFydHkgaGF2aW5nIGEgbG9zcyBvZiBkYXRhIG9yIGNhcGFiaWxpdHkgZHVlIHRvIHlvdXIgYWN0aW9ucy5cblxuICAgVGhlIGZ1bGwgcGVybWlzc2lvbnMsIGNvbmRpdGlvbnMsIGFuZCBvdGhlciB0ZXJtcyBhcmUgbGFpZCBvdXQgYmVsb3cuXG5cbiAgICMjIDIuIFJlY2VpdmluZyBhIExpY2Vuc2VcblxuICAgSW4gb3JkZXIgdG8gcmVjZWl2ZSB0aGlzIExpY2Vuc2UsIFlvdSBtdXN0IGFncmVlIHRvIGl0cyBydWxlcy4gVGhlIHJ1bGVzIG9mIHRoaXMgTGljZW5zZSBhcmUgYm90aCBvYmxpZ2F0aW9ucyBvZiBZb3VyIGFncmVlbWVudCB3aXRoIHRoZSBMaWNlbnNvciBhbmQgY29uZGl0aW9ucyB0byB5b3VyIExpY2Vuc2UuIFlvdSBtdXN0IG5vdCBkbyBhbnl0aGluZyB3aXRoIHRoZSBXb3JrIHRoYXQgdHJpZ2dlcnMgYSBydWxlIFlvdSBjYW5ub3Qgb3Igd2lsbCBub3QgZm9sbG93LlxuXG4gICAgICAjIyMgMi4xLiBBcHBsaWNhdGlvblxuXG4gICAgICBUaGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFwcGx5IHRvIHRoZSBXb3JrIGFzIHlvdSByZWNlaXZlIGl0IGZyb20gTGljZW5zb3IsIGFzIHdlbGwgYXMgdG8gYW55IG1vZGlmaWNhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3IgaW1wbGVtZW50YXRpb25zIGNyZWF0ZWQgYnkgWW91IHRoYXQgY29udGFpbiBhbnkgbGljZW5zYWJsZSBwb3J0aW9uIG9mIHRoZSBXb3JrIChhIFwiTW9kaWZpZWQgV29ya1wiKS4gVW5sZXNzIHNwZWNpZmllZCwgYW55IHJlZmVyZW5jZSB0byB0aGUgV29yayBhbHNvIGFwcGxpZXMgdG8gYSBNb2RpZmllZCBXb3JrLlxuXG4gICAgICAjIyMgMi4yLiBPZmZlciBhbmQgQWNjZXB0YW5jZVxuXG4gICAgICBUaGlzIExpY2Vuc2UgaXMgYXV0b21hdGljYWxseSBvZmZlcmVkIHRvIGV2ZXJ5IHBlcnNvbiBhbmQgb3JnYW5pemF0aW9uLiBZb3Ugc2hvdyB0aGF0IHlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlIGFuZCBhZ3JlZSB0byBpdHMgY29uZGl0aW9ucyBieSB0YWtpbmcgYW55IGFjdGlvbiB3aXRoIHRoZSBXb3JrIHRoYXQsIGFic2VudCB0aGlzIExpY2Vuc2UsIHdvdWxkIGluZnJpbmdlIGFueSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaGVsZCBieSBMaWNlbnNvci5cblxuICAgICAgIyMjIDIuMy4gQ29tcGxpYW5jZSBhbmQgUmVtZWRpZXNcblxuICAgICAgQW55IGZhaWx1cmUgdG8gYWN0IGFjY29yZGluZyB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIHBsYWNlcyBZb3VyIHVzZSBvZiB0aGUgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGUgTGljZW5zZSBhbmQgaW5mcmluZ2VzIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIHRoZSBMaWNlbnNvci4gSW4gdGhlIGV2ZW50IG9mIGluZnJpbmdlbWVudCwgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBtYXkgYmUgZW5mb3JjZWQgYnkgTGljZW5zb3IgdW5kZXIgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIGFueSBqdXJpc2RpY3Rpb24gdG8gd2hpY2ggWW91IGFyZSBzdWJqZWN0LiBZb3UgYWxzbyBhZ3JlZSB0aGF0IGVpdGhlciB0aGUgTGljZW5zb3Igb3IgYSBSZWNpcGllbnQgKGFzIGFuIGludGVuZGVkIHRoaXJkLXBhcnR5IGJlbmVmaWNpYXJ5KSBtYXkgZW5mb3JjZSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIGFnYWluc3QgWW91IHZpYSBzcGVjaWZpYyBwZXJmb3JtYW5jZS5cblxuICAgIyMgMy4gUGVybWlzc2lvbnMgXG5cbiAgIFxuXG4gICAgICAjIyMgMy4xLiBQZXJtaXNzaW9ucyBHcmFudGVkXG5cbiAgICAgIENvbmRpdGlvbmVkIG9uIGNvbXBsaWFuY2Ugd2l0aCBzZWN0aW9uIDQsIGFuZCBzdWJqZWN0IHRvIHRoZSBsaW1pdGF0aW9ucyBvZiBzZWN0aW9uIDMuMiwgTGljZW5zb3IgZ3JhbnRzIFlvdSB0aGUgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIHBlcm1pc3Npb24gdG86XG5cbiAgICAgICAgICsgYSkgVGFrZSBhbnkgYWN0aW9uIHdpdGggdGhlIFdvcmsgdGhhdCB3b3VsZCBpbmZyaW5nZSB0aGUgbm9uLXBhdGVudCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiBhbnkganVyaXNkaWN0aW9uIHRvIHdoaWNoIFlvdSBhcmUgc3ViamVjdDsgYW5kXG5cbiAgICAgICAgICsgYikgY2xhaW1zIHRoYXQgTGljZW5zb3IgY2FuIGxpY2Vuc2Ugb3IgYmVjb21lcyBhYmxlIHRvIGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgdGhhdCB0aG9zZSBjbGFpbXMgYXJlIGVtYm9kaWVkIGluIHRoZSBXb3JrIGFzIGRpc3RyaWJ1dGVkIGJ5IExpY2Vuc29yLlxuXG4gICAgICAjIyMgMy4yLiBMaW1pdGF0aW9ucyBvbiBQZXJtaXNzaW9ucyBHcmFudGVkXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbnMgYXBwbHkgdG8gdGhlIHBlcm1pc3Npb25zIGdyYW50ZWQgaW4gc2VjdGlvbiAzLjE6XG5cbiAgICAgICAgIFxuXG4gICAgICAgICArIGEpIExpY2Vuc29yIGRvZXMgbm90IGdyYW50IGFueSBwYXRlbnQgbGljZW5zZSBmb3IgY2xhaW1zIHRoYXQgYXJlIG9ubHkgaW5mcmluZ2VkIGR1ZSB0byBtb2RpZmljYXRpb24gb2YgdGhlIFdvcmsgYXMgcHJvdmlkZWQgYnkgTGljZW5zb3IsIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgV29yayBhcyBwcm92aWRlZCBieSBMaWNlbnNvciwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgd2l0aCBhbnkgb3RoZXIgY29tcG9uZW50LCBpbmNsdWRpbmcgb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuXG5cbiAgICAgICAgIFxuXG4gICAgICAgICArIGIpIExpY2Vuc29yIGRvZXMgbm90IGdyYW50IGFueSBsaWNlbnNlIHRvIHRoZSB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBsb2dvcyBvZiBMaWNlbnNvciwgZXhjZXB0IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIGNvbXBseSB3aXRoIHRoZSBhdHRyaWJ1dGlvbiBjb25kaXRpb25zIGluIHNlY3Rpb24gNC4xIG9mIHRoaXMgTGljZW5zZS5cblxuICAgIyMgNC4gQ29uZGl0aW9uc1xuXG4gICBJZiBZb3UgZXhlcmNpc2UgYW55IHBlcm1pc3Npb24gZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UsIHN1Y2ggdGhhdCB0aGUgV29yaywgb3IgYW55IHBhcnQsIGFzcGVjdCwgb3IgZWxlbWVudCBvZiB0aGUgV29yaywgaXMgZGlzdHJpYnV0ZWQsIGNvbW11bmljYXRlZCwgbWFkZSBhdmFpbGFibGUsIG9yIG1hZGUgcGVyY2VwdGlibGUgdG8gYSBub24tQWZmaWxpYXRlIHRoaXJkIHBhcnR5IChhIFwiUmVjaXBpZW50XCIpLCBlaXRoZXIgdmlhIHBoeXNpY2FsIGRlbGl2ZXJ5IG9yIHZpYSBhIG5ldHdvcmsgY29ubmVjdGlvbiB0byB0aGUgUmVjaXBpZW50LCBZb3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICAgICMjIyA0LjEuIFByb3ZpZGUgQWNjZXNzIHRvIFNvdXJjZSBDb2RlXG5cbiAgICAgIFN1YmplY3QgdG8gdGhlIGV4Y2VwdGlvbiBpbiBzZWN0aW9uIDQuNCwgWW91IG11c3QgcHJvdmlkZSB0byBlYWNoIFJlY2lwaWVudCBhIGNvcHkgb2YsIG9yIG5vLWNoYXJnZSB1bnJlc3RyaWN0ZWQgbmV0d29yayBhY2Nlc3MgdG8sIHRoZSBTb3VyY2UgQ29kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBXb3JrIChcIkFjY2Vzc1wiKS5cblxuICAgICAgVGhlIFwiU291cmNlIENvZGVcIiBvZiB0aGUgV29yayBtZWFucyB0aGUgZm9ybSBvZiB0aGUgV29yayBwcmVmZXJyZWQgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLCBpbmNsdWRpbmcgYW55IGNvbW1lbnRzLCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLCBkb2N1bWVudGF0aW9uLCBoZWxwIG1hdGVyaWFscywgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucywgY3J5cHRvZ3JhcGhpYyBzZWVkcyBvciBrZXlzLCBhbmQgYW55IGluZm9ybWF0aW9uIHJlYXNvbmFibHkgbmVjZXNzYXJ5IGZvciB0aGUgUmVjaXBpZW50IHRvIGluZGVwZW5kZW50bHkgY29tcGlsZSBhbmQgdXNlIHRoZSBTb3VyY2UgQ29kZSBhbmQgdG8gaGF2ZSBmdWxsIGFjY2VzcyB0byB0aGUgZnVuY3Rpb25hbGl0eSBjb250YWluZWQgaW4gdGhlIFdvcmsuXG5cbiAgICAgICAgICMjIyMgNC4xLjEuIFByb3ZpZGluZyBOZXR3b3JrIEFjY2VzcyB0byB0aGUgU291cmNlIENvZGVcblxuICAgICAgICAgTmV0d29yayBBY2Nlc3MgdG8gdGhlIE5vdGljZXMgYW5kIFNvdXJjZSBDb2RlIG1heSBiZSBwcm92aWRlZCBieSBZb3Ugb3IgYnkgYSB0aGlyZCBwYXJ0eSwgc3VjaCBhcyBhIHB1YmxpYyBzb2Z0d2FyZSByZXBvc2l0b3J5LCBhbmQgbXVzdCBwZXJzaXN0IGR1cmluZyB0aGUgc2FtZSBwZXJpb2QgaW4gd2hpY2ggWW91IGV4ZXJjaXNlIGFueSBvZiB0aGUgcGVybWlzc2lvbnMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBmb3IgYXQgbGVhc3Qgb25lIHllYXIgdGhlcmVhZnRlci5cblxuICAgICAgICAgIyMjIyA0LjEuMi4gU291cmNlIENvZGUgZm9yIGEgTW9kaWZpZWQgV29ya1xuXG4gICAgICAgICBTdWJqZWN0IHRvIHRoZSBleGNlcHRpb24gaW4gc2VjdGlvbiA0LjUsIFlvdSBtdXN0IHByb3ZpZGUgdG8gZWFjaCBSZWNpcGllbnQgb2YgYSBNb2RpZmllZCBXb3JrIEFjY2VzcyB0byBTb3VyY2UgQ29kZSBjb3JyZXNwb25kaW5nIHRvIHRob3NlIHBvcnRpb25zIG9mIHRoZSBXb3JrIHJlbWFpbmluZyBpbiB0aGUgTW9kaWZpZWQgV29yayBhcyB3ZWxsIGFzIHRoZSBtb2RpZmljYXRpb25zIHVzZWQgYnkgWW91IHRvIGNyZWF0ZSB0aGUgTW9kaWZpZWQgV29yay4gVGhlIFNvdXJjZSBDb2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIE1vZGlmaWVkIFdvcmsgbXVzdCBiZSBwcm92aWRlZCB0byB0aGUgUmVjaXBpZW50IGVpdGhlciBhKSB1bmRlciB0aGlzIExpY2Vuc2UsIG9yIGIpIHVuZGVyIGEgQ29tcGF0aWJsZSBPcGVuIFNvdXJjZSBMaWNlbnNlLlxuXG4gICAgICAgICAjIyMjIDQuMS4zLiBDb29yZGluYXRlZCBEaXNjbG9zdXJlIG9mIFNlY3VyaXR5IFZ1bG5lcmFiaWxpdGllc1xuXG4gICAgICAgICBZb3UgbWF5IGRlbGF5IHByb3ZpZGluZyB0aGUgU291cmNlIENvZGUgY29ycmVzcG9uZGluZyB0byBhIHBhcnRpY3VsYXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBXb3JrIGZvciB1cCB0byBuaW5ldHkgKDkwKSBkYXlzICh0aGUgXCJFbWJhcmdvIFBlcmlvZFwiKSBpZjpcblxuICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICsgYSkgdGhlIG1vZGlmaWNhdGlvbiBpcyBpbnRlbmRlZCB0byBhZGRyZXNzIGEgbmV3bHktaWRlbnRpZmllZCB2dWxuZXJhYmlsaXR5IG9yIGEgc2VjdXJpdHkgZmxhdyBpbiB0aGUgV29yayxcblxuICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICsgYikgZGlzY2xvc3VyZSBvZiB0aGUgdnVsbmVyYWJpbGl0eSBvciBzZWN1cml0eSBmbGF3IGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBFbWJhcmdvIFBlcmlvZCB3b3VsZCBwdXQgdGhlIGRhdGEsIGlkZW50aXR5LCBvciBhdXRvbm9teSBvZiBvbmUgb3IgbW9yZSBSZWNpcGllbnRzIG9mIHRoZSBXb3JrIGF0IHNpZ25pZmljYW50IHJpc2ssXG5cbiAgICAgICAgICAgIFxuXG4gICAgICAgICAgICArIGMpIFlvdSBhcmUgcGFydGljaXBhdGluZyBpbiBhIGNvb3JkaW5hdGVkIGRpc2Nsb3N1cmUgb2YgdGhlIHZ1bG5lcmFiaWxpdHkgb3Igc2VjdXJpdHkgZmxhdyB3aXRoIG9uZSBvciBtb3JlIGFkZGl0aW9uYWwgTGljZW5zZWVzLCBhbmRcblxuICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICsgZCkgQWNjZXNzIHRvIHRoZSBTb3VyY2UgQ29kZSBwZXJ0YWluaW5nIHRvIHRoZSBtb2RpZmljYXRpb24gaXMgcHJvdmlkZWQgdG8gYWxsIFJlY2lwaWVudHMgYXQgdGhlIGVuZCBvZiB0aGUgRW1iYXJnbyBQZXJpb2QuXG5cbiAgICAgICMjIyA0LjIuIE1haW50YWluIFVzZXIgQXV0b25vbXlcblxuICAgICAgSW4gYWRkaXRpb24gdG8gcHJvdmlkaW5nIGVhY2ggUmVjaXBpZW50IHRoZSBvcHBvcnR1bml0eSB0byBoYXZlIEFjY2VzcyB0byB0aGUgU291cmNlIENvZGUsIFlvdSBjYW5ub3QgdXNlIHRoZSBwZXJtaXNzaW9ucyBnaXZlbiB1bmRlciB0aGlzIExpY2Vuc2UgdG8gaW50ZXJmZXJlIHdpdGggYSBSZWNpcGllbnQncyBhYmlsaXR5IHRvIGZ1bGx5IHVzZSBhbiBpbmRlcGVuZGVudCBjb3B5IG9mIHRoZSBXb3JrIGdlbmVyYXRlZCBmcm9tIHRoZSBTb3VyY2UgQ29kZSBZb3UgcHJvdmlkZSB3aXRoIHRoZSBSZWNpcGllbnQncyBvd24gVXNlciBEYXRhLlxuXG4gICAgICBcIlVzZXIgRGF0YVwiIG1lYW5zIGFueSBkYXRhIHRoYXQgaXMgYW4gaW5wdXQgdG8gb3IgYW4gb3V0cHV0IGZyb20gdGhlIFdvcmssIHdoZXJlIHRoZSBwcmVzZW5jZSBvZiB0aGUgZGF0YSBpcyBuZWNlc3NhcnkgZm9yIHN1YnN0YW50aWFsbHkgaWRlbnRpY2FsIHVzZSBvZiB0aGUgV29yayBpbiBhbiBlcXVpdmFsZW50IGNvbnRleHQgY2hvc2VuIGJ5IHRoZSBSZWNpcGllbnQsIGFuZCB3aGVyZSB0aGUgUmVjaXBpZW50IGhhcyBhbiBleGlzdGluZyBvd25lcnNoaXAgaW50ZXJlc3QsIGFuIGV4aXN0aW5nIHJpZ2h0IHRvIHBvc3Nlc3MsIG9yIHdoZXJlIHRoZSBkYXRhIGhhcyBiZWVuIGdlbmVyYXRlZCBieSwgZm9yLCBvciBoYXMgYmVlbiBhc3NpZ25lZCB0byB0aGUgUmVjaXBpZW50LlxuXG4gICAgICAgICAjIyMjIDQuMi4xLiBObyBXaXRoaG9sZGluZyBVc2VyIERhdGFcblxuICAgICAgICAgVGhyb3VnaG91dCBhbnkgcGVyaW9kIGluIHdoaWNoIFlvdSBleGVyY2lzZSBhbnkgb2YgdGhlIHBlcm1pc3Npb25zIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IG11c3QgYWxzbyBwcm92aWRlIHRvIGFueSBSZWNpcGllbnQgdG8gd2hvbSB5b3UgcHJvdmlkZSBzZXJ2aWNlcyB2aWEgdGhlIFdvcmssIGEgbm8tY2hhcmdlIGNvcHksIHByb3ZpZGVkIGluIGEgY29tbW9ubHkgdXNlZCBlbGVjdHJvbmljIGZvcm0sIG9mIHRoZSBSZWNpcGllbnQncyBVc2VyIERhdGEgaW4geW91ciBwb3NzZXNzaW9uLCB0byB0aGUgZXh0ZW50IHRoYXQgc3VjaCBVc2VyIERhdGEgaXMgYXZhaWxhYmxlIHRvIFlvdSBmb3IgdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFdvcmsuXG5cbiAgICAgICAgICMjIyMgNC4yLjIuIE5vIFRlY2huaWNhbCBNZWFzdXJlcyB0aGF0IExpbWl0IEFjY2Vzc1xuXG4gICAgICAgICBZb3UgbWF5IG5vdCwgYnkgbWVhbnMgb2YgdGhlIHVzZSBjcnlwdG9ncmFwaGljIG1ldGhvZHMgYXBwbGllZCB0byBhbnl0aGluZyBwcm92aWRlZCB0byB0aGUgUmVjaXBpZW50LCBieSBwb3NzZXNzaW9uIG9yIGNvbnRyb2wgb2YgY3J5cHRvZ3JhcGhpYyBrZXlzLCBzZWVkcywgaGFzaGVzLCBieSBhbnkgb3RoZXIgdGVjaG5vbG9naWNhbCBwcm90ZWN0aW9uIG1lYXN1cmVzLCBvciBieSBhbnkgb3RoZXIgbWV0aG9kLCBsaW1pdCBhIFJlY2lwaWVudCdzIGFiaWxpdHkgdG8gYWNjZXNzIGFueSBmdW5jdGlvbmFsaXR5IHByZXNlbnQgaW4gUmVjaXBpZW50J3MgaW5kZXBlbmRlbnQgY29weSBvZiB0aGUgV29yaywgb3IgdG8gZGVueSBhIFJlY2lwaWVudCBmdWxsIGNvbnRyb2wgb2YgdGhlIFJlY2lwaWVudCdzIFVzZXIgRGF0YS5cblxuICAgICAgICAgIyMjIyA0LjIuMy4gTm8gTGVnYWwgb3IgQ29udHJhY3R1YWwgTWVhc3VyZXMgdGhhdCBMaW1pdCBBY2Nlc3NcblxuICAgICAgICAgWW91IG1heSBub3QgY29udHJhY3R1YWxseSByZXN0cmljdCBhIFJlY2lwaWVudCdzIGFiaWxpdHkgdG8gaW5kZXBlbmRlbnRseSBleGVyY2lzZSB0aGUgcGVybWlzc2lvbnMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIFlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkIGNpcmN1bXZlbnRpb24gb2YgdGVjaG5pY2FsIHByb3RlY3Rpb24gbWVhc3VyZXMgdGhhdCBpbmNsdWRlIHVzZSBvZiB0aGUgV29yaywgYW5kIFlvdSB3YWl2ZSBhbnkgY2xhaW0gdGhhdCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBXb3JrIHdlcmUgbGltaXRlZCBvciBtb2RpZmllZCBhcyBhIG1lYW5zIG9mIGVuZm9yY2luZyB0aGUgbGVnYWwgcmlnaHRzIG9mIHRoaXJkIHBhcnRpZXMgYWdhaW5zdCBSZWNpcGllbnRzLlxuXG4gICAgICAjIyMgNC4zLiBQcm92aWRlIE5vdGljZXMgYW5kIEF0dHJpYnV0aW9uXG5cbiAgICAgIFlvdSBtdXN0IHJldGFpbiBhbGwgbGljZW5zaW5nLCBhdXRob3JzaGlwLCBvciBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZCBpbiB0aGUgU291cmNlIENvZGUgKHRoZSBcIk5vdGljZXNcIiksIGFuZCBwcm92aWRlIGFsbCBzdWNoIE5vdGljZXMgdG8gZWFjaCBSZWNpcGllbnQsIHRvZ2V0aGVyIHdpdGggYSBzdGF0ZW1lbnQgYWNrbm93bGVkZ2luZyB0aGUgdXNlIG9mIHRoZSBXb3JrLiBOb3RpY2VzIG1heSBiZSBwcm92aWRlZCBkaXJlY3RseSB0byBhIFJlY2lwaWVudCBvciB2aWEgYW4gZWFzeS10by1maW5kIGh5cGVybGluayB0byBhbiBJbnRlcm5ldCBsb2NhdGlvbiBhbHNvIHByb3ZpZGluZyBBY2Nlc3MgdG8gU291cmNlIENvZGUuXG5cbiAgICAgICMjIyA0LjQuIFNjb3BlIG9mIENvbmRpdGlvbnMgaW4gdGhpcyBMaWNlbnNlXG5cbiAgICAgIFlvdSBhcmUgcmVxdWlyZWQgdG8gdXBob2xkIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBvbmx5IHJlbGF0aXZlIHRvIHRob3NlIHdobyBhcmUgUmVjaXBpZW50cyBvZiB0aGUgV29yayBmcm9tIFlvdS4gT3RoZXIgdGhhbiBwcm92aWRpbmcgUmVjaXBpZW50cyB3aXRoIHRoZSBhcHBsaWNhYmxlIE5vdGljZXMsIEFjY2VzcyB0byBTb3VyY2UgQ29kZSwgYW5kIGEgY29weSBvZiBhbmQgZnVsbCBjb250cm9sIG9mIHRoZWlyIFVzZXIgRGF0YSwgbm90aGluZyBpbiB0aGlzIExpY2Vuc2UgcmVxdWlyZXMgWW91IHRvIHByb3ZpZGUgcHJvY2Vzc2luZyBzZXJ2aWNlcyB0byBvciBlbmdhZ2UgaW4gbmV0d29yayBpbnRlcmFjdGlvbnMgd2l0aCBhbnlvbmUuXG5cbiAgICAgICMjIyA0LjUuIENvbWJpbmVkIFdvcmsgRXhjZXB0aW9uXG5cbiAgICAgIEFzIGFuIGV4Y2VwdGlvbiB0byBjb25kaXRpb24gdGhhdCBZb3UgcHJvdmlkZSBSZWNpcGllbnRzIEFjY2VzcyB0byBTb3VyY2UgQ29kZSwgYW55IFNvdXJjZSBDb2RlIGZpbGVzIG1hcmtlZCBieSB0aGUgTGljZW5zb3IgYXMgaGF2aW5nIHRoZSBcIkNvbWJpbmVkIFdvcmsgRXhjZXB0aW9uLFwiIG9yIGFueSBvYmplY3QgY29kZSBleGNsdXNpdmVseSByZXN1bHRpbmcgZnJvbSBTb3VyY2UgQ29kZSBmaWxlcyBzbyBtYXJrZWQsIG1heSBiZSBjb21iaW5lZCB3aXRoIG90aGVyIFNvZnR3YXJlIGludG8gYSBcIkxhcmdlciBXb3JrLlwiIFNvIGxvbmcgYXMgeW91IGNvbXBseSB3aXRoIHRoZSByZXF1aXJlbWVudHMgdG8gcHJvdmlkZSBSZWNpcGllbnRzIHRoZSBhcHBsaWNhYmxlIE5vdGljZXMgYW5kIEFjY2VzcyB0byB0aGUgU291cmNlIENvZGUgcHJvdmlkZWQgdG8gWW91IGJ5IExpY2Vuc29yLCBhbmQgeW91IHByb3ZpZGUgUmVjaXBpZW50cyBhY2Nlc3MgdG8gdGhlaXIgVXNlciBEYXRhIGFuZCBkbyBub3QgbGltaXQgUmVjaXBpZW50J3MgYWJpbGl0eSB0byBpbmRlcGVuZGVudGx5IHdvcmsgd2l0aCB0aGVpciBVc2VyIERhdGEsIGFueSBvdGhlciBTb2Z0d2FyZSBpbiB0aGUgTGFyZ2VyIFdvcmsgYXMgd2VsbCBhcyB0aGUgTGFyZ2VyIFdvcmsgYXMgYSB3aG9sZSBtYXkgYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHlvdXIgY2hvaWNlLlxuXG4gICAjIyA1LiBUZXJtIGFuZCBUZXJtaW5hdGlvblxuXG4gICBUaGUgdGVybSBvZiB0aGlzIExpY2Vuc2UgYmVnaW5zIHdoZW4gWW91IHJlY2VpdmUgdGhlIFdvcmssIGFuZCBjb250aW51ZXMgdW50aWwgdGVybWluYXRlZCBmb3IgYW55IG9mIHRoZSByZWFzb25zIGRlc2NyaWJlZCBoZXJlaW4sIG9yIHVudGlsIGFsbCBMaWNlbnNvcidzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4gdGhlIFNvZnR3YXJlIGV4cGlyZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0IChcIlRlcm1cIikuIFRoaXMgTGljZW5zZSBjYW5ub3QgYmUgcmV2b2tlZCwgb25seSB0ZXJtaW5hdGVkIGZvciB0aGUgcmVhc29ucyBsaXN0ZWQgYmVsb3cuXG5cbiAgICAgICMjIyA1LjEuIEVmZmVjdCBvZiBUZXJtaW5hdGlvblxuXG4gICAgICBJZiB0aGlzIExpY2Vuc2UgaXMgdGVybWluYXRlZCBmb3IgYW55IHJlYXNvbiwgYWxsIHBlcm1pc3Npb25zIGdyYW50ZWQgdG8gWW91IHVuZGVyIFNlY3Rpb24gMyBieSBhbnkgTGljZW5zb3IgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUuIFlvdSB3aWxsIGltbWVkaWF0ZWx5IGNlYXNlIGV4ZXJjaXNpbmcgYW55IHBlcm1pc3Npb25zIGdyYW50ZWQgaW4gdGhpcyBMaWNlbnNlIHJlbGF0aXZlIHRvIHRoZSBXb3JrLCBpbmNsdWRpbmcgYXMgcGFydCBvZiBhbnkgTW9kaWZpZWQgV29yay5cblxuICAgICAgIyMjIDUuMi4gVGVybWluYXRpb24gZm9yIE5vbi1Db21wbGlhbmNlOyBSZWluc3RhdGVtZW50XG5cbiAgICAgIFRoaXMgTGljZW5zZSB0ZXJtaW5hdGVzIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gNC4gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0ZXJtaW5hdGlvbiBmb3Igbm9uLWNvbXBsaWFuY2UsIFlvdXIgcGVybWlzc2lvbnMgZm9yIHRoZSBXb3JrIHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcmVpbnN0YXRlZCBpZiBZb3UgY29tZSBpbnRvIGNvbXBsaWFuY2Ugd2l0aCBhbGwgdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAyIHdpdGhpbiBzaXh0eSAoNjApIGRheXMgb2YgYmVpbmcgbm90aWZpZWQgYnkgTGljZW5zb3Igb3IgYW4gaW50ZW5kZWQgdGhpcmQtcGFydHkgYmVuZWZpY2lhcnkgb2YgWW91ciBub25jb21wbGlhbmNlLiBZb3UgYXJlIGVsaWdpYmxlIGZvciByZWluc3RhdGVtZW50IG9mIHBlcm1pc3Npb25zIGZvciB0aGUgV29yayBvbmUgdGltZSBvbmx5LCBhbmQgb25seSBmb3IgdGhlIHNpeHR5IGRheXMgaW1tZWRpYXRlbHkgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygbm9uY29tcGxpYW5jZS4gTG9zcyBvZiBwZXJtaXNzaW9ucyBncmFudGVkIGZvciB0aGUgV29yayB1bmRlciB0aGlzIExpY2Vuc2UgZHVlIHRvIGVpdGhlciBhKSBzdXN0YWluZWQgbm9uY29tcGxpYW5jZSBsYXN0aW5nIG1vcmUgdGhhbiBzaXh0eSBkYXlzIG9yIGIpIHN1YnNlcXVlbnQgdGVybWluYXRpb24gZm9yIG5vbmNvbXBsaWFuY2UgYWZ0ZXIgcmVpbnN0YXRlbWVudCwgaXMgcGVybWFuZW50LCB1bmxlc3MgcmlnaHRzIGFyZSBzcGVjaWZpY2FsbHkgcmVzdG9yZWQgYnkgTGljZW5zb3IgaW4gd3JpdGluZy5cblxuICAgICAgIyMjIDUuMy4gVGVybWluYXRpb24gRHVlIHRvIExpdGlnYXRpb25cblxuICAgICAgSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYWdhaW5zdCBMaWNlbnNvciwgb3IgYW55IFJlY2lwaWVudCBvZiB0aGUgV29yaywgZWl0aGVyIGRpcmVjdCBvciBpbmRpcmVjdCwgYXNzZXJ0aW5nIHRoYXQgdGhlIFdvcmsgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbGwgcGVybWlzc2lvbnMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZS4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIGR1ZSB0byBsaXRpZ2F0aW9uLCBhbGwgcGVybWlzc2lvbnMgdmFsaWRseSBncmFudGVkIGJ5IFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uIEFkbWluaXN0cmF0aXZlIHJldmlldyBwcm9jZWR1cmVzLCBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zLCBjb3VudGVyY2xhaW1zIGluIHJlc3BvbnNlIHRvIHBhdGVudCBsaXRpZ2F0aW9uLCBhbmQgZW5mb3JjZW1lbnQgYWN0aW9ucyBhZ2FpbnN0IGZvcm1lciBMaWNlbnNlZXMgdGVybWluYXRlZCB1bmRlciB0aGlzIHNlY3Rpb24gZG8gbm90IGNhdXNlIHRlcm1pbmF0aW9uIGR1ZSB0byBsaXRpZ2F0aW9uLlxuXG4gICAjIyA2LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5IGFuZCBMaW1pdCBvbiBMaWFiaWxpdHlcblxuICAgQXMgZmFyIGFzIHRoZSBsYXcgYWxsb3dzLCB0aGUgV29yayBjb21lcyBBUy1JUywgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIGFuZCBubyBMaWNlbnNvciBvciBjb250cmlidXRvciB3aWxsIGJlIGxpYWJsZSB0byBhbnlvbmUgZm9yIGFueSBkYW1hZ2VzIHJlbGF0ZWQgdG8gdGhpcyBzb2Z0d2FyZSBvciB0aGlzIGxpY2Vuc2UsIHVuZGVyIGFueSBraW5kIG9mIGxlZ2FsIGNsYWltLCBvciBmb3IgYW55IHR5cGUgb2YgZGFtYWdlcywgaW5jbHVkaW5nIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IHR5cGUgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgbG9zcyBvZiBwcm9maXRzLCByZXZlbnVlLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLlxuXG4gICAjIyA3LiBPdGhlciBQcm92aXNpb25zIFxuXG4gICBcblxuICAgICAgIyMjIDcuMS4gQWZmaWxpYXRlc1xuXG4gICAgICBBbiBcIkFmZmlsaWF0ZVwiIG1lYW5zIGFueSBvdGhlciBlbnRpdHkgdGhhdCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIG9uZSBvciBtb3JlIGludGVybWVkaWFyaWVzLCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCwgdGhlIExpY2Vuc2VlLiBFbXBsb3llZXMgb2YgYSBMaWNlbnNlZSBhbmQgbmF0dXJhbCBwZXJzb25zIGFjdGluZyBhcyBjb250cmFjdG9ycyBleGNsdXNpdmVseSBwcm92aWRpbmcgc2VydmljZXMgdG8gTGljZW5zZWUgYXJlIGFsc28gQWZmaWxpYXRlcy5cblxuICAgICAgIyMjIDcuMi4gQ2hvaWNlIG9mIEp1cmlzZGljdGlvbiBhbmQgR292ZXJuaW5nIExhd1xuXG4gICAgICBBIExpY2Vuc29yIG1heSByZXF1aXJlIHRoYXQgYW55IGFjdGlvbiBvciBzdWl0IGJ5IGEgTGljZW5zZWUgcmVsYXRpbmcgdG8gYSBXb3JrIHByb3ZpZGVkIGJ5IExpY2Vuc29yIHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBwYXJ0aWN1bGFyIGp1cmlzZGljdGlvbiBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgYSBwYXJ0aWN1bGFyIGp1cmlzZGljdGlvbiAoZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucyksIGlmIExpY2Vuc29yIHByb3ZpZGVzIGNvbnNwaWN1b3VzIG5vdGljZSBvZiB0aGUgcGFydGljdWxhciBqdXJpc2RpY3Rpb24gdG8gYWxsIExpY2Vuc2Vlcy5cblxuICAgICAgIyMjIDcuMy4gTm8gU3VibGljZW5zaW5nXG5cbiAgICAgIFRoaXMgTGljZW5zZSBpcyBub3Qgc3VibGljZW5zYWJsZS4gRWFjaCB0aW1lIFlvdSBwcm92aWRlIHRoZSBXb3JrIG9yIGEgTW9kaWZpZWQgV29yayB0byBhIFJlY2lwaWVudCwgdGhlIFJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSB1bmRlciB0aGUgdGVybXMgZGVzY3JpYmVkIGluIHRoaXMgTGljZW5zZS4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc2VydmF0aW9ucywgY29uZGl0aW9ucywgb3Igb3RoZXIgcHJvdmlzaW9ucyBvbiBhbnkgUmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHBlcm1pc3Npb25zIGdyYW50ZWQgaGVyZWluLlxuXG4gICAgICAjIyMgNy40LiBBdHRvcm5leXMnIEZlZXNcblxuICAgICAgSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCBpbmNsdWRpbmcgYnkgYW4gaW50ZW5kZWQgdGhpcmQtcGFydHkgYmVuZWZpY2lhcnksIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaCBhY3Rpb24sIGluY2x1ZGluZyBhbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiBBIFwicHJldmFpbGluZyBwYXJ0eVwiIGlzIHRoZSBwYXJ0eSB0aGF0IGFjaGlldmVzLCBvciBhdm9pZHMsIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aHJvdWdoIHNldHRsZW1lbnQuIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgICMjIyA3LjUuIE5vIFdhaXZlclxuXG4gICAgICBBbnkgZmFpbHVyZSBieSBMaWNlbnNvciB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGNvbnN0aXR1dGUgYSBwcmVzZW50IG9yIGZ1dHVyZSB3YWl2ZXIgb2Ygc3VjaCBwcm92aXNpb24gbm9yIGxpbWl0IExpY2Vuc29yJ3MgYWJpbGl0eSB0byBlbmZvcmNlIHN1Y2ggcHJvdmlzaW9uIGF0IGEgbGF0ZXIgdGltZS5cblxuICAgICAgIyMjIDcuNi4gU2V2ZXJhYmlsaXR5XG5cbiAgICAgIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBBbnkgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHBvcnRpb24gd2lsbCBiZSBpbnRlcnByZXRlZCB0byB0aGUgZWZmZWN0IGFuZCBpbnRlbnQgb2YgdGhlIG9yaWdpbmFsIHBvcnRpb24uIElmIHN1Y2ggYSBjb25zdHJ1Y3Rpb24gaXMgbm90IHBvc3NpYmxlLCB0aGUgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHBvcnRpb24gd2lsbCBiZSBzZXZlcmVkIGZyb20gdGhpcyBMaWNlbnNlIGJ1dCB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2Ugd2lsbCByZW1haW4gaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LlxuXG4gICAgICAjIyMgNy43LiBMaWNlbnNlIGZvciB0aGUgVGV4dCBvZiB0aGlzIExpY2Vuc2VcblxuICAgICAgVGhlIHRleHQgb2YgdGhpcyBsaWNlbnNlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgNC4wIEludGVybmF0aW9uYWwgTGljZW5zZSwgd2l0aCB0aGUgY2F2ZWF0IHRoYXQgYW55IG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBsaWNlbnNlIG1heSBub3QgdXNlIHRoZSBuYW1lIFwiQ3J5cHRvZ3JhcGhpYyBBdXRvbm9teSBMaWNlbnNlXCIgb3IgYW55IG5hbWUgY29uZnVzaW5nbHkgc2ltaWxhciB0aGVyZXRvIHRvIGRlc2NyaWJlIGFueSBkZXJpdmVkIHdvcmsgb2YgdGhpcyBMaWNlbnNlLiJdLCJsaWNlbnNlSWRzIjpbIkNBTC0xLjAtQ29tYmluZWQtV29yay1FeGNlcHRpb24iLCJDQUwtMS4wIl0sImtleXdvcmRzIjpbImF1dG9ub215IGxpY2Vuc2UgdiIsIjAgdGhpcyBjcnlwdG9ncmFwaGljIiwidGhpcyBjcnlwdG9ncmFwaGljIGF1dG9ub215IiwiYXV0b25vbXkgbGljZW5zZSB0aGUiLCJhbnkgd29yayB3aG9zZSIsIndob3NlIG93bmVyIGhhcyIsIm93bmVyIGhhcyBtYXJrZWQiLCJoYXMgbWFya2VkIGl0IiwibWFya2VkIGl0IHdpdGgiLCJpdCB3aXRoIGFueSIsImZvbGxvd2luZyBub3RpY2VzIG9yIiwibm90aWNlcyBvciBhIiwib3IgYSBzaW1pbGFyIiwiYSBzaW1pbGFyIGRlbW9uc3RyYXRpb24iLCJzaW1pbGFyIGRlbW9uc3RyYXRpb24gb2YiLCJkZW1vbnN0cmF0aW9uIG9mIGludGVudCIsIm9mIGludGVudCBzcGR4IiwiaW50ZW50IHNwZHggbGljZW5zZSIsIjEgMCBsaWNlbnNlZCIsIjAgbGljZW5zZWQgdW5kZXIiLCIwIG9yIHNwZHgiLCJvciBzcGR4IGxpY2Vuc2UiLCIxIDAgY29tYmluZWQiLCIwIGNvbWJpbmVkIHdvcmsiLCJ3b3JrIGV4Y2VwdGlvbiBsaWNlbnNlZCIsImV4Y2VwdGlvbiBsaWNlbnNlZCB1bmRlciIsIjEgMCB3aXRoIiwiMCB3aXRoIGNvbWJpbmVkIiwid2l0aCBjb21iaW5lZCB3b3JrIiwid29yayBleGNlcHRpb24gMSIsImV4Y2VwdGlvbiAxIHB1cnBvc2UiLCIxIHB1cnBvc2UgdGhpcyIsImxpY2Vuc2UgZ2l2ZXMgeW91IiwiaXQgYXBwbGllcyB0aGUiLCJhcHBsaWVzIHRoZSB3b3JrIiwid29yayBlaXRoZXIgYXMiLCJlaXRoZXIgYXMgaXMiLCJhcyBpcyBvciIsImlzIG9yIGluIiwib3IgaW4gbW9kaWZpZWQiLCJtb2RpZmllZCBmb3JtIGZvciIsImZvcm0gZm9yIHlvdXIiLCJmb3IgeW91ciBwcml2YXRlIiwieW91ciBwcml2YXRlIHB1cnBvc2VzIiwicHJpdmF0ZSBwdXJwb3NlcyB3aGlsZSIsInB1cnBvc2VzIHdoaWxlIHByb3RlY3RpbmciLCJwcm90ZWN0aW5nIHRoZSBvd25lcnMiLCJ0aGUgb3duZXJzIGFuZCIsIm93bmVycyBhbmQgY29udHJpYnV0b3JzIiwic29mdHdhcmUgZnJvbSBsaWFiaWxpdHkiLCJmcm9tIGxpYWJpbGl0eSB0aGlzIiwibGlhYmlsaXR5IHRoaXMgbGljZW5zZSIsImxpY2Vuc2UgYWxzbyBzdHJpdmVzIiwiYWxzbyBzdHJpdmVzIHRvIiwic3RyaXZlcyB0byBwcm90ZWN0IiwiZnJlZWRvbSBhbmQgYXV0b25vbXkiLCJhbmQgYXV0b25vbXkgb2YiLCJhdXRvbm9teSBvZiB0aGlyZCIsInRoaXJkIHBhcnRpZXMgd2hvIiwicGFydGllcyB3aG8gcmVjZWl2ZSIsImZyb20geW91IGlmIiwieW91IGlmIGFueSIsImlmIGFueSBub24iLCJhbnkgbm9uIGFmZmlsaWF0ZWQiLCJub24gYWZmaWxpYXRlZCB0aGlyZCIsImFmZmlsaWF0ZWQgdGhpcmQgcGFydHkiLCJ0aGlyZCBwYXJ0eSByZWNlaXZlcyIsInBhcnR5IHJlY2VpdmVzIGFueSIsInJlY2VpdmVzIGFueSBwYXJ0IiwicmVxdWlyZXMgdGhhdCB5b3UiLCJ5b3UgcHJvdmlkZSB0aGF0IiwicHJvdmlkZSB0aGF0IHRoaXJkIiwidGhpcmQgcGFydHkgYWxsIiwicGFydHkgYWxsIHRoZSIsImFsbCB0aGUgcGVybWlzc2lvbnMiLCJ0aGUgcGVybWlzc2lvbnMgYW5kIiwicGVybWlzc2lvbnMgYW5kIG1hdGVyaWFscyIsImFuZCBtYXRlcmlhbHMgbmVlZGVkIiwibWF0ZXJpYWxzIG5lZWRlZCB0byIsIm5lZWRlZCB0byBpbmRlcGVuZGVudGx5IiwidG8gaW5kZXBlbmRlbnRseSB1c2UiLCJpbmRlcGVuZGVudGx5IHVzZSBhbmQiLCJ3b3JrIHdpdGhvdXQgdGhhdCIsIndpdGhvdXQgdGhhdCB0aGlyZCIsInRoaXJkIHBhcnR5IGhhdmluZyIsInBhcnR5IGhhdmluZyBhIiwiaGF2aW5nIGEgbG9zcyIsImEgbG9zcyBvZiIsImRhdGEgb3IgY2FwYWJpbGl0eSIsIm9yIGNhcGFiaWxpdHkgZHVlIiwiY2FwYWJpbGl0eSBkdWUgdG8iLCJkdWUgdG8geW91ciIsInRvIHlvdXIgYWN0aW9ucyIsInlvdXIgYWN0aW9ucyB0aGUiLCJhY3Rpb25zIHRoZSBmdWxsIiwidGhlIGZ1bGwgcGVybWlzc2lvbnMiLCJmdWxsIHBlcm1pc3Npb25zIGNvbmRpdGlvbnMiLCJwZXJtaXNzaW9ucyBjb25kaXRpb25zIGFuZCIsImNvbmRpdGlvbnMgYW5kIG90aGVyIiwiYW5kIG90aGVyIHRlcm1zIiwib3RoZXIgdGVybXMgYXJlIiwidGVybXMgYXJlIGxhaWQiLCJhcmUgbGFpZCBvdXQiLCJsYWlkIG91dCBiZWxvdyIsIm91dCBiZWxvdyAyIiwiYmVsb3cgMiByZWNlaXZpbmciLCIyIHJlY2VpdmluZyBhIiwicmVjZWl2aW5nIGEgbGljZW5zZSIsImEgbGljZW5zZSBpbiIsImJvdGggb2JsaWdhdGlvbnMgb2YiLCJvYmxpZ2F0aW9ucyBvZiB5b3VyIiwieW91ciBhZ3JlZW1lbnQgd2l0aCIsIndpdGggdGhlIGxpY2Vuc29yIiwibGljZW5zb3IgYW5kIGNvbmRpdGlvbnMiLCJ3b3JrIHRoYXQgdHJpZ2dlcnMiLCJydWxlIHlvdSBjYW5ub3QiLCJub3QgZm9sbG93IDIiLCJmb2xsb3cgMiAxIiwiMiAxIGFwcGxpY2F0aW9uIiwiMSBhcHBsaWNhdGlvbiB0aGUiLCJhcHBsaWNhdGlvbiB0aGUgdGVybXMiLCJyZWNlaXZlIGl0IGZyb20iLCJpdCBmcm9tIGxpY2Vuc29yIiwiZnJvbSBsaWNlbnNvciBhcyIsImxpY2Vuc29yIGFzIHdlbGwiLCJhbnkgbW9kaWZpY2F0aW9ucyBlbGFib3JhdGlvbnMiLCJtb2RpZmljYXRpb25zIGVsYWJvcmF0aW9ucyBvciIsImVsYWJvcmF0aW9ucyBvciBpbXBsZW1lbnRhdGlvbnMiLCJvciBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlZCIsImltcGxlbWVudGF0aW9ucyBjcmVhdGVkIGJ5IiwieW91IHRoYXQgY29udGFpbiIsInRoYXQgY29udGFpbiBhbnkiLCJjb250YWluIGFueSBsaWNlbnNhYmxlIiwiYW55IGxpY2Vuc2FibGUgcG9ydGlvbiIsImxpY2Vuc2FibGUgcG9ydGlvbiBvZiIsIndvcmsgYSBtb2RpZmllZCIsIm1vZGlmaWVkIHdvcmsgdW5sZXNzIiwid29yayB1bmxlc3Mgc3BlY2lmaWVkIiwidW5sZXNzIHNwZWNpZmllZCBhbnkiLCJzcGVjaWZpZWQgYW55IHJlZmVyZW5jZSIsIndvcmsgYWxzbyBhcHBsaWVzIiwidG8gYSBtb2RpZmllZCIsIm1vZGlmaWVkIHdvcmsgMiIsIjIgMiBvZmZlciIsIjIgb2ZmZXIgYW5kIiwib2ZmZXIgYW5kIGFjY2VwdGFuY2UiLCJhbmQgYWNjZXB0YW5jZSB0aGlzIiwicGVyc29uIGFuZCBvcmdhbml6YXRpb24iLCJhbmQgb3JnYW5pemF0aW9uIHlvdSIsIm9yZ2FuaXphdGlvbiB5b3Ugc2hvdyIsInlvdSBzaG93IHRoYXQiLCJzaG93IHRoYXQgeW91IiwidGhhdCB5b3UgYWNjZXB0IiwibGljZW5zZSBhbmQgYWdyZWUiLCJ0byBpdHMgY29uZGl0aW9ucyIsIml0cyBjb25kaXRpb25zIGJ5Iiwid29yayB0aGF0IGFic2VudCIsImJ5IGxpY2Vuc29yIDIiLCJsaWNlbnNvciAyIDMiLCIyIDMgY29tcGxpYW5jZSIsIjMgY29tcGxpYW5jZSBhbmQiLCJjb21wbGlhbmNlIGFuZCByZW1lZGllcyIsImFuZCByZW1lZGllcyBhbnkiLCJyZW1lZGllcyBhbnkgZmFpbHVyZSIsImFueSBmYWlsdXJlIHRvIiwiZmFpbHVyZSB0byBhY3QiLCJsaWNlbnNlIHBsYWNlcyB5b3VyIiwicGxhY2VzIHlvdXIgdXNlIiwidGhlIHdvcmsgb3V0c2lkZSIsImxpY2Vuc2UgYW5kIGluZnJpbmdlcyIsImFuZCBpbmZyaW5nZXMgdGhlIiwiaW5mcmluZ2VzIHRoZSBpbnRlbGxlY3R1YWwiLCJsaWNlbnNvciBpbiB0aGUiLCJldmVudCBvZiBpbmZyaW5nZW1lbnQiLCJvZiBpbmZyaW5nZW1lbnQgdGhlIiwidW5kZXIgdGhlIGludGVsbGVjdHVhbCIsImFyZSBzdWJqZWN0IHlvdSIsInN1YmplY3QgeW91IGFsc28iLCJ5b3UgYWxzbyBhZ3JlZSIsImFsc28gYWdyZWUgdGhhdCIsImFncmVlIHRoYXQgZWl0aGVyIiwidGhhdCBlaXRoZXIgdGhlIiwiZWl0aGVyIHRoZSBsaWNlbnNvciIsIm9yIGEgcmVjaXBpZW50IiwicmVjaXBpZW50IGFzIGFuIiwiYXMgYW4gaW50ZW5kZWQiLCJwYXJ0eSBiZW5lZmljaWFyeSBtYXkiLCJiZW5lZmljaWFyeSBtYXkgZW5mb3JjZSIsImxpY2Vuc2UgYWdhaW5zdCB5b3UiLCJhZ2FpbnN0IHlvdSB2aWEiLCJ5b3UgdmlhIHNwZWNpZmljIiwidmlhIHNwZWNpZmljIHBlcmZvcm1hbmNlIiwic3BlY2lmaWMgcGVyZm9ybWFuY2UgMyIsInBlcmZvcm1hbmNlIDMgcGVybWlzc2lvbnMiLCIzIHBlcm1pc3Npb25zIDMiLCJwZXJtaXNzaW9ucyAzIDEiLCIzIDEgcGVybWlzc2lvbnMiLCIxIHBlcm1pc3Npb25zIGdyYW50ZWQiLCJwZXJtaXNzaW9ucyBncmFudGVkIGNvbmRpdGlvbmVkIiwiZ3JhbnRlZCBjb25kaXRpb25lZCBvbiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb21wdXRlciBBc3NvY2lhdGVzIFRydXN0ZWQgT3BlbiBTb3VyY2UgTGljZW5zZVxuXG5WZXJzaW9uIDEuMVxuXG5QTEVBU0UgUkVBRCBUSElTIERPQ1VNRU5UIENBUkVGVUxMWSBBTkQgSU4gSVRTIEVOVElSRVRZLiBUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ09NUFVURVIgQVNTT0NJQVRFUyBUUlVTVEVEIE9QRU4gU09VUkNFIExJQ0VOU0UgKFwiTElDRU5TRVwiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFRIRSBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFIE9GIFRISVMgTElDRU5TRS5cblxuTGljZW5zZSBCYWNrZ3JvdW5kXG5cbkNvbXB1dGVyIEFzc29jaWF0ZXMgSW50ZXJuYXRpb25hbCwgSW5jLiAoQ0EpIGJlbGlldmVzIGluIG9wZW4gc291cmNlLiBXZSBiZWxpZXZlIHRoYXQgdGhlIG9wZW4gc291cmNlIGRldmVsb3BtZW50IGFwcHJvYWNoIGNhbiB0YWtlIGFwcHJvcHJpYXRlIHNvZnR3YXJlIHByb2dyYW1zIHRvIHVucHJlY2VkZW50ZWQgbGV2ZWxzIG9mIHF1YWxpdHksIGdyb3d0aCwgYW5kIGlubm92YXRpb24uIFRvIGRlbW9uc3RyYXRlIG91ciBjb250aW51aW5nIGNvbW1pdG1lbnQgdG8gb3BlbiBzb3VyY2UsIHdlIGFyZSByZWxlYXNpbmcgdGhlIFByb2dyYW0gKGFzIGRlZmluZWQgYmVsb3cpIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuVGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHBlcm1pdCBjb250cmlidXRvcnMgYW5kIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gdG8gdXNlIHRoZSBQcm9ncmFtLCBpbmNsdWRpbmcgaXRzIHNvdXJjZSBjb2RlLCBmcmVlbHkgYW5kIHdpdGhvdXQgbWFueSBvZiB0aGUgY29uY2VybnMgb2Ygc29tZSBvdGhlciBvcGVuIHNvdXJjZSBsaWNlbnNlcy4gQWx0aG91Z2ggd2UgZXhwZWN0IHRoZSB1bmRlcmx5aW5nIFByb2dyYW0sIGFuZCBDb250cmlidXRpb25zIChhcyBkZWZpbmVkIGJlbG93KSBtYWRlIHRvIHN1Y2ggUHJvZ3JhbSwgdG8gcmVtYWluIG9wZW4sIHRoaXMgTGljZW5zZSBpcyBkZXNpZ25lZCB0byBwZXJtaXQgeW91IHRvIG1haW50YWluIHlvdXIgb3duIHNvZnR3YXJlIHByb2dyYW1zIGZyZWUgb2YgdGhpcyBMaWNlbnNlIHVubGVzcyB5b3UgY2hvb3NlIHRvIGRvIHNvLiBUaHVzLCBvbmx5IHlvdXIgQ29udHJpYnV0aW9ucyB0byB0aGUgUHJvZ3JhbSBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cblRoZSBwcm92aXNpb25zIHRoYXQgZm9sbG93IHNldCBmb3J0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggeW91IG1heSB1c2UgdGhlIFByb2dyYW0uXG5cbiAgIDEuIERFRklOSVRJT05TXG5cbiAgICAgIDEuMSBDb250cmlidXRpb24gbWVhbnMgKGEpIGluIHRoZSBjYXNlIG9mIENBLCB0aGUgT3JpZ2luYWwgUHJvZ3JhbTsgYW5kIChiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIENvbnRyaWJ1dG9yIChpbmNsdWRpbmcgQ0EpLCBjaGFuZ2VzIGFuZCBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0sIHdoZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yIHRvIHVuYWZmaWxpYXRlZCB0aGlyZCBwYXJ0aWVzLiBBIENvbnRyaWJ1dGlvbiBvcmlnaW5hdGVzIGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9ycyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIHdoaWNoOiAoeCkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoeSkgYXJlIG5vdCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBQcm9ncmFtLlxuXG4gICAgICAxLjIgQ29udHJpYnV0b3IgbWVhbnMgQ0EgYW5kIGFueSBvdGhlciBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uXG5cbiAgICAgIDEuMyBDb250cmlidXRvciBWZXJzaW9uIG1lYW5zIGFzIHRvIGEgQ29udHJpYnV0b3IsIHRoYXQgdmVyc2lvbiBvZiB0aGUgUHJvZ3JhbSB0aGF0IGluY2x1ZGVzIHRoZSBDb250cmlidXRvcnMgQ29udHJpYnV0aW9uIGJ1dCBub3QgYW55IENvbnRyaWJ1dGlvbnMgbWFkZSB0byB0aGUgUHJvZ3JhbSB0aGVyZWFmdGVyLlxuXG4gICAgICAxLjQgTGFyZ2VyIFdvcmsgbWVhbnMgYSB3b3JrIHRoYXQgY29tYmluZXMgdGhlIFByb2dyYW0gb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuNSBMaWNlbnNlZCBQYXRlbnRzIG1lYW4gcGF0ZW50cyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3IgdGhhdCBhcmUgaW5mcmluZ2VkIGJ5IHRoZSB1c2Ugb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS5cblxuICAgICAgMS42IE9yaWdpbmFsIFByb2dyYW0gbWVhbnMgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlIHRvIHdoaWNoIHRoaXMgTGljZW5zZSBpcyBhdHRhY2hlZCBhbmQgYXMgcmVsZWFzZWQgYnkgQ0EsIGluY2x1ZGluZyBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUgYW5kIGRvY3VtZW50YXRpb24sIGlmIGFueS5cblxuICAgICAgMS43IFByb2dyYW0gbWVhbnMgdGhlIE9yaWdpbmFsIFByb2dyYW0gYW5kIENvbnRyaWJ1dGlvbnMuXG5cbiAgICAgIDEuOCBSZWNpcGllbnQgbWVhbnMgYW55b25lIHdobyBtb2RpZmllcywgY29waWVzLCB1c2VzIG9yIGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLlxuXG4gICAyLiBHUkFOVCBPRiBSSUdIVFNcblxuICAgICAgMi4xIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhbiBpcnJldm9jYWJsZSwgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGUgbGljZW5zZSBwcm92aWRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xIHNoYWxsIG5vdCBpbmNsdWRlIGEgbGljZW5zZSB0byBhbnkgTGljZW5zZWQgUGF0ZW50cyBvZiBhIENvbnRyaWJ1dG9yLlxuXG4gICAgICAyLjIgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGFuIGlycmV2b2NhYmxlLCBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIHRoZSBMaWNlbnNlZCBQYXRlbnRzIHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCBhbmQgaW1wb3J0IHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4yIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgdGhlIExpY2Vuc2VkIFBhdGVudHMgdG8gYmUgaW5mcmluZ2VkIGJ5IHN1Y2ggY29tYmluYXRpb24uIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBubyBsaWNlbnNlIGlzIGdyYW50ZWQgdW5kZXIgdGhpcyBTZWN0aW9uIDIuMjogKGEpIGZvciBhbnkgY29kZSBvciB3b3JrcyB0aGF0IGRvIG5vdCBpbmNsdWRlIHRoZSBDb250cmlidXRvciBWZXJzaW9uLCBhcyBpdCBleGlzdHMgYW5kIGlzIHVzZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBoZXJlb2Y7IChiKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IChpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyBvciAoaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBDb250cmlidXRpb25zIG1hZGUgYnkgZWFjaCBzdWNoIENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciAoYykgd2l0aCByZXNwZWN0IHRvIExpY2Vuc2VkIFBhdGVudHMgaW5mcmluZ2VkIGJ5IHRoZSBQcm9ncmFtIGluIHRoZSBhYnNlbmNlIG9mIENvbnRyaWJ1dGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yLlxuXG4gICAgICAyLjMgUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIGV4Y2VwdCBhcyBwcm92aWRlZCBpbiBTZWN0aW9uIDIuNCwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBwZXJzb24gb3IgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIHBlcnNvbiBvciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS5cblxuICAgICAgMi40IEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCBpdCBoYXMgYWxsIHJpZ2h0LCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gdGhlIGNvcHlyaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbnMsIGFuZCBoYXMgdGhlIHJpZ2h0IHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZXMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS5cblxuICAgMy4gRElTVFJJQlVUSU9OIFJFUVVJUkVNRU5UU1xuXG4gICAgICAzLjEgSWYgdGhlIFByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gb2JqZWN0IGNvZGUgZm9ybSwgdGhlbiBhIHByb21pbmVudCBub3RpY2UgbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLCBzdGF0aW5nIHRoYXQgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSB0aGUgQ29udHJpYnV0b3Igd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kIHdoZXJlIHRvIG9idGFpbiB0aGUgc291cmNlIGNvZGUuIEEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDpcblxuICAgICAgICAgKiBpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2U7IGFuZFxuXG4gICAgICAgICAqIGl0cyBsaWNlbnNlIGFncmVlbWVudDpcblxuICAgICAgICAgKiBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3O1xuXG4gICAgICAgICAqIGVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzLCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3O1xuXG4gICAgICAgICAqIHN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGFyZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgdGhhdCBDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kXG5cbiAgICAgICAgICogc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IgYXQgdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uLCBhbmQgaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyLlxuXG4gICAgICAzLjIgV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOlxuXG4gICAgICAgICAqIGl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlOyBhbmRcblxuICAgICAgICAgKiBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uXG5cbiAgICAgIDMuMyBUaGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYW55IENvbnRyaWJ1dG9yLiBIb3dldmVyLCBDb250cmlidXRvcnMgbWF5IG9ubHkgY2hhcmdlIFJlY2lwaWVudHMgYSBvbmUtdGltZSwgdXBmcm9udCBmZWUgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uIENvbnRyaWJ1dG9ycyBtYXkgbm90IGNoYXJnZSBSZWNpcGllbnRzIGFueSByZWN1cnJpbmcgY2hhcmdlLCBsaWNlbnNlIGZlZSwgb3IgYW55IG9uZ29pbmcgcm95YWx0eSBmb3IgdGhlIFJlY2lwaWVudHMgZXhlcmNpc2Ugb2YgaXRzIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgdG8gdGhlIFByb2dyYW0uIENvbnRyaWJ1dG9ycyBzaGFsbCBtYWtlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gdGhleSBkaXN0cmlidXRlIGF2YWlsYWJsZSBhdCBhIGNvc3QsIGlmIGFueSwgZXF1YWwgdG8gdGhlIGNvc3QgdG8gdGhlIENvbnRyaWJ1dG9yIHRvIHBoeXNpY2FsbHkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgd29yay4gSXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBMaWNlbnNlIHRvIHByb2hpYml0IGEgQ29udHJpYnV0b3IgZnJvbSBjaGFyZ2luZyBmZWVzIGZvciBhbnkgc2VydmljZSBvciBtYWludGVuYW5jZSB0aGF0IGEgQ29udHJpYnV0b3IgbWF5IGNoYXJnZSB0byBhIFJlY2lwaWVudCwgc28gbG9uZyBhcyBzdWNoIGZlZXMgYXJlIG5vdCBhbiBhdHRlbXB0IHRvIGNpcmN1bXZlbnQgdGhlIGZvcmVnb2luZyByZXN0cmljdGlvbnMgb24gY2hhcmdpbmcgcm95YWx0aWVzIG9yIG90aGVyIHJlY3VycmluZyBmZWVzIGZvciB0aGUgUHJvZ3JhbSBpdHNlbGYuXG5cbiAgICAgIDMuNCBBIENvbnRyaWJ1dG9yIG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIHRoZSBDb250cmlidXRvciBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBQcm9ncmFtLiBBbnkgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBpbmNsdWRpbmcgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrLCBtYXkgc3ViamVjdCBpdHNlbGYsIGJ1dCBub3QgYW55IG90aGVyIENvbnRyaWJ1dG9yLCB0byBhZGRpdGlvbmFsIGNvbnRyYWN0dWFsIGNvbW1pdG1lbnRzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgcGVyZm9ybWFuY2Ugd2FycmFudGllcyBhbmQgbm9uLWluZnJpbmdlbWVudCByZXByZXNlbnRhdGlvbnMgb24gc3VjaENvbnRyaWJ1dG9ycyBiZWhhbGYuIE5vIENvbnRyaWJ1dG9yIG1heSBjcmVhdGUgYW55IGFkZGl0aW9uYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoQ29tbWVyY2lhbCBDb250cmlidXRvcikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlciBDb250cmlidXRvciAoSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IpIHdobyBtYWRlIENvbnRyaWJ1dGlvbnMgdG8gdGhlIFByb2dyYW0gZGlzdHJpYnV0ZWQgYnkgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5IExvc3NlcykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucywgaW5jbHVkaW5nIGFueSBhZGRpdGlvbmFsIGNvbnRyYWN0dWFsIGNvbW1pdG1lbnRzLCBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LlxuXG4gICAgICAzLjUgSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5cyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgKGEpIGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgUHJvZ3JhbSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkIC4uL0lQX0lTU1VFUywgYW5kIChiKSBub3RpZnkgQ0EgaW4gd3JpdGluZyBhdCBDb21wdXRlciBBc3NvY2lhdGVzIEludGVybmF0aW9uYWwsIEluYy4sIE9uZSBDb21wdXRlciBBc3NvY2lhdGVzIFBsYXphLCBJc2xhbmRpYSwgTmV3IFlvcmsgMTE3NDksIEF0dG46IE9wZW4gU291cmNlIEdyb3VwIG9yIGJ5IGVtYWlsIGF0IG9wZW5zb3VyY2VAY2EuY29tLCBib3RoIGRlc2NyaWJpbmcgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgUmVjaXBpZW50IGFuZCBDQSB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0IHdpdGggcmVnYXJkIHRvIHN1Y2ggbWF0dGVyLiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBDb250cmlidXRpb24gaXMgbWFkZSBhdmFpbGFibGUsIENvbnRyaWJ1dG9yIHNoYWxsIGFsc28gcHJvbXB0bHkgbW9kaWZ5IHRoZSBJUF9JU1NVRVMgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBQcm9ncmFtIHRoYXQgc3VjaCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLlxuXG4gICAgICAzLjYgUmVjaXBpZW50IHNoYWxsIG5vdCByZW1vdmUsIG9ic2N1cmUsIG9yIG1vZGlmeSBhbnkgQ0Egb3Igb3RoZXIgQ29udHJpYnV0b3IgY29weXJpZ2h0IG9yIHBhdGVudCBwcm9wcmlldGFyeSBub3RpY2VzIGFwcGVhcmluZyBpbiB0aGUgUHJvZ3JhbSwgd2hldGhlciBpbiB0aGUgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlIG9yIGluIGFueSBkb2N1bWVudGF0aW9uLiBJbiBhZGRpdGlvbiB0byB0aGUgb2JsaWdhdGlvbnMgc2V0IGZvcnRoIGluIFNlY3Rpb24gNCwgZWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uXG5cbiAgIDQuIENPTlRSSUJVVElPTiBSRVNUUklDVElPTlNcblxuICAgICAgNC4xIEVhY2ggQ29udHJpYnV0b3IgbXVzdCBjYXVzZSB0aGUgUHJvZ3JhbSB0byB3aGljaCB0aGUgQ29udHJpYnV0b3IgcHJvdmlkZXMgYSBDb250cmlidXRpb24gdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgdGhlIENvbnRyaWJ1dG9yIG1hZGUgdG8gY3JlYXRlIGl0cyB2ZXJzaW9uIG9mIHRoZSBQcm9ncmFtIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBFYWNoIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBDb250cmlidXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSB0aGUgUHJvZ3JhbSBkaXN0cmlidXRlZCBieSBhIHByaW9yIENvbnRyaWJ1dG9yLCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIHByaW9yIENvbnRyaWJ1dG9yIGZyb20gd2hpY2ggc3VjaCBDb250cmlidXRpb24gd2FzIGRlcml2ZWQsIGluIChhKSB0aGUgUHJvZ3JhbSBzb3VyY2UgY29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIGV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggdGhlIENvbnRyaWJ1dG9yIGRlc2NyaWJlcyB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgUHJvZ3JhbS5cblxuICAgNS4gTk8gV0FSUkFOVFlcblxuICAgICAgNS4xIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgTElDRU5TRSwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgQVMgSVMgQU5EIElOIElUUyBQUkVTRU5UIFNUQVRFIEFORCBDT05ESVRJT04uIE5PIFdBUlJBTlRZLCBSRVBSRVNFTlRBVElPTiwgQ09ORElUSU9OLCBVTkRFUlRBS0lORyBPUiBURVJNLCBFWFBSRVNTIE9SIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIEFTIFRPIFRIRSBDT05ESVRJT04sIFFVQUxJVFksIERVUkFCSUxJVFksIFBFUkZPUk1BTkNFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFVTRSBPRiBUSEUgUFJPR1JBTSBJUyBHSVZFTiBPUiBBU1NVTUVEIEJZIEFOWSBDT05UUklCVVRPUiBBTkQgQUxMIFNVQ0ggV0FSUkFOVElFUywgUkVQUkVTRU5UQVRJT05TLCBDT05ESVRJT05TLCBVTkRFUlRBS0lOR1MgQU5EIFRFUk1TIEFSRSBIRVJFQlkgRVhDTFVERUQgVE8gVEhFIEZVTExFU1QgRVhURU5UIFBFUk1JVFRFRCBCWSBMQVcuXG5cbiAgICAgIDUuMiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLlxuXG4gICAgICA1LjMgRWFjaCBSZWNpcGllbnQgYWNrbm93bGVkZ2VzIHRoYXQgdGhlIFByb2dyYW0gaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlIG9wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBQcm9ncmFtIGNvdWxkIGxlYWQgdG8gZGVhdGgsIHBlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlIHBoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLlxuXG4gICA2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWVxuXG4gICAgICA2LjEgRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBMSUNFTlNFLCBBTkQgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgTEFXLCBOTyBDT05UUklCVVRPUiBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDcuIFRSQURFTUFSS1MgQU5EIEJSQU5ESU5HXG5cbiAgICAgIDcuMSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IFJlY2lwaWVudCBvciBhbnkgdGhpcmQgcGFydHkgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgbm93IG9yIHN1YnNlcXVlbnRseSBwb3N0ZWQgYXQgaHR0cDovL3d3dy5jYS5jb20vY2F0cmRtcmsuaHRtLCBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgbG9nb3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nIHRvIENBIChjb2xsZWN0aXZlbHkgQ0EgTWFya3MpIG9yIHRvIGFueSB0cmFkZW1hcmssIHNlcnZpY2UgbWFyaywgbG9nbyBvciB0cmFkZSBuYW1lIGJlbG9uZ2luZyB0byBhbnkgQ29udHJpYnV0b3IuIFJlY2lwaWVudCBhZ3JlZXMgbm90IHRvIHVzZSBhbnkgQ0EgTWFya3MgaW4gb3IgYXMgcGFydCBvZiB0aGUgbmFtZSBvZiBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIFByb2dyYW0gb3IgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgUHJvZ3JhbS5cblxuICAgICAgNy4yIFN1YmplY3QgdG8gU2VjdGlvbiA3LjEsIFJlY2lwaWVudHMgbWF5IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gdW5kZXIgdHJhZGVtYXJrcywgbG9nb3MsIGFuZCBwcm9kdWN0IG5hbWVzIGJlbG9uZ2luZyB0byB0aGUgUmVjaXBpZW50IHByb3ZpZGVkIHRoYXQgYWxsIGNvcHlyaWdodCBhbmQgb3RoZXIgYXR0cmlidXRpb24gbm90aWNlcyByZW1haW4gaW4gdGhlIFByb2dyYW0uXG5cbiAgIDguIFBBVEVOVCBMSVRJR0FUSU9OXG5cbiAgICAgIDguMSBJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBwZXJzb24gb3IgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnRzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudHMgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyLjIgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC5cblxuICAgOS4gT1dORVJTSElQXG5cbiAgICAgIDkuMSBTdWJqZWN0IHRvIHRoZSBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBpbiBTZWN0aW9ucyAyLjEgYW5kIDIuMiBhYm92ZSwgZWFjaCBDb250cmlidXRvciByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gYW55IENvbnRyaWJ1dGlvbnMgbWFkZSBieSBzdWNoIENvbnRyaWJ1dG9yLiBDQSByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFByb2dyYW0gYW5kIGFueSBDb250cmlidXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIENBIChDQSBDb250cmlidXRpb25zKSwgYW5kIHN1Y2ggQ0EgQ29udHJpYnV0aW9ucyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBDQSBtYXksIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggQ0EgQ29udHJpYnV0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugb3IgbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC5cblxuICAgMTAuIFRFUk1JTkFUSU9OXG5cbiAgICAgIDEwLjEgQWxsIG9mIFJlY2lwaWVudHMgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgUmVjaXBpZW50cyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgYXMgYSBDb250cmlidXRvciByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZSB0ZXJtaW5hdGlvbi5cblxuICAgMTEuIEdFTkVSQUxcblxuICAgICAgMTEuMSBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICAgICAxMS4yIENBIG1heSBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gTm8gb25lIG90aGVyIHRoYW4gQ0EgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxMS4zIElmIGl0IGlzIGltcG9zc2libGUgZm9yIFJlY2lwaWVudCB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIFByb2dyYW0gZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uLCB0aGVuIFJlY2lwaWVudCBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBJUF9JU1NVRVMgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgUHJvZ3JhbSBzb3VyY2UgY29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgUmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC5cblxuICAgICAgMTEuNCBUaGlzIExpY2Vuc2UgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrLiBObyBSZWNpcGllbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggUmVjaXBpZW50IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbiBiZXR3ZWVuIGEgUmVjaXBpZW50IGFuZCBDQSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgU3RhdGUgb2YgTmV3IFlvcmssIGFuZCBSZWNpcGllbnQgYW5kIENBIGhlcmVieSBjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyB3aXRoaW4gdGhhdCBkaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBMaWNlbnNlLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC5cblxuICAgICAgMTEuNSBXaGVyZSBSZWNpcGllbnQgaXMgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZSBmb2xsb3dpbmcgY2xhdXNlIGFwcGxpZXM6IFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZCB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gTGVzIHBhcnRpZXMgY29udHJhY3RhbnRlcyBjb25maXJtZW50IHF1J2VsbGVzIG9udCBleGlnZSBxdWUgbGUgcHJlc2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cyBhc3NvY2llcyBzb2llbnQgcmVkaWdlcyBlbiBhbmdsYWlzLlxuXG4gICAgICAxMS42IFRoZSBQcm9ncmFtIGlzIHN1YmplY3QgdG8gYWxsIGV4cG9ydCBhbmQgaW1wb3J0IGxhd3MsIHJlc3RyaWN0aW9ucyBhbmQgcmVndWxhdGlvbnMgb2YgdGhlIGNvdW50cnkgaW4gd2hpY2ggUmVjaXBpZW50IHJlY2VpdmVzIHRoZSBQcm9ncmFtLiBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBjb21wbHlpbmcgd2l0aCBhbmQgZW5zdXJpbmcgdGhhdCBSZWNpcGllbnQgZG9lcyBub3QgZXhwb3J0LCByZS1leHBvcnQsIG9yIGltcG9ydCB0aGUgUHJvZ3JhbSBpbiB2aW9sYXRpb24gb2Ygc3VjaCBsYXdzLCByZXN0cmljdGlvbnMgb3IgcmVndWxhdGlvbnMsIG9yIHdpdGhvdXQgYW55IG5lY2Vzc2FyeSBsaWNlbnNlcyBhbmQgYXV0aG9yaXphdGlvbnMuXG5cbiAgICAgIDExLjcgVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIl0sImxpY2Vuc2VJZHMiOlsiQ0FUT1NMLTEuMSJdLCJrZXl3b3JkcyI6WyIxIDEgcGxlYXNlIiwiMSBwbGVhc2UgcmVhZCIsImRvY3VtZW50IGNhcmVmdWxseSBhbmQiLCJjYXJlZnVsbHkgYW5kIGluIiwiaXRzIGVudGlyZXR5IHRoZSIsImVudGlyZXR5IHRoZSBhY2NvbXBhbnlpbmciLCJvZiB0aGlzIGNvbXB1dGVyIiwidGhpcyBjb21wdXRlciBhc3NvY2lhdGVzIiwicHJvZ3JhbSBjb25zdGl0dXRlcyB0aGUiLCJsaWNlbnNlIGxpY2Vuc2UgYmFja2dyb3VuZCIsImxpY2Vuc2UgYmFja2dyb3VuZCBjb21wdXRlciIsImJhY2tncm91bmQgY29tcHV0ZXIgYXNzb2NpYXRlcyIsImludGVybmF0aW9uYWwgaW5jIGNhIiwiaW5jIGNhIGJlbGlldmVzIiwiY2EgYmVsaWV2ZXMgaW4iLCJiZWxpZXZlcyBpbiBvcGVuIiwiaW4gb3BlbiBzb3VyY2UiLCJzb3VyY2Ugd2UgYmVsaWV2ZSIsInRoYXQgdGhlIG9wZW4iLCJzb3VyY2UgZGV2ZWxvcG1lbnQgYXBwcm9hY2giLCJkZXZlbG9wbWVudCBhcHByb2FjaCBjYW4iLCJhcHByb2FjaCBjYW4gdGFrZSIsImNhbiB0YWtlIGFwcHJvcHJpYXRlIiwidGFrZSBhcHByb3ByaWF0ZSBzb2Z0d2FyZSIsImFwcHJvcHJpYXRlIHNvZnR3YXJlIHByb2dyYW1zIiwic29mdHdhcmUgcHJvZ3JhbXMgdG8iLCJwcm9ncmFtcyB0byB1bnByZWNlZGVudGVkIiwidG8gdW5wcmVjZWRlbnRlZCBsZXZlbHMiLCJ1bnByZWNlZGVudGVkIGxldmVscyBvZiIsImxldmVscyBvZiBxdWFsaXR5Iiwib2YgcXVhbGl0eSBncm93dGgiLCJxdWFsaXR5IGdyb3d0aCBhbmQiLCJncm93dGggYW5kIGlubm92YXRpb24iLCJhbmQgaW5ub3ZhdGlvbiB0byIsImlubm92YXRpb24gdG8gZGVtb25zdHJhdGUiLCJ0byBkZW1vbnN0cmF0ZSBvdXIiLCJkZW1vbnN0cmF0ZSBvdXIgY29udGludWluZyIsIm91ciBjb250aW51aW5nIGNvbW1pdG1lbnQiLCJjb250aW51aW5nIGNvbW1pdG1lbnQgdG8iLCJjb21taXRtZW50IHRvIG9wZW4iLCJ0byBvcGVuIHNvdXJjZSIsInNvdXJjZSB3ZSBhcmUiLCJ3ZSBhcmUgcmVsZWFzaW5nIiwiYXJlIHJlbGVhc2luZyB0aGUiLCJyZWxlYXNpbmcgdGhlIHByb2dyYW0iLCJkZWZpbmVkIGJlbG93IHVuZGVyIiwiYmVsb3cgdW5kZXIgdGhpcyIsInRvIHBlcm1pdCBjb250cmlidXRvcnMiLCJwZXJtaXQgY29udHJpYnV0b3JzIGFuZCIsImNvbnRyaWJ1dG9ycyBhbmQgcmVjaXBpZW50cyIsImFuZCByZWNpcGllbnRzIG9mIiwicHJvZ3JhbSB0byB1c2UiLCJpbmNsdWRpbmcgaXRzIHNvdXJjZSIsImNvZGUgZnJlZWx5IGFuZCIsImZyZWVseSBhbmQgd2l0aG91dCIsImFuZCB3aXRob3V0IG1hbnkiLCJ3aXRob3V0IG1hbnkgb2YiLCJtYW55IG9mIHRoZSIsIm9mIHRoZSBjb25jZXJucyIsInRoZSBjb25jZXJucyBvZiIsImNvbmNlcm5zIG9mIHNvbWUiLCJvZiBzb21lIG90aGVyIiwic29tZSBvdGhlciBvcGVuIiwic291cmNlIGxpY2Vuc2VzIGFsdGhvdWdoIiwibGljZW5zZXMgYWx0aG91Z2ggd2UiLCJhbHRob3VnaCB3ZSBleHBlY3QiLCJ3ZSBleHBlY3QgdGhlIiwiZXhwZWN0IHRoZSB1bmRlcmx5aW5nIiwidGhlIHVuZGVybHlpbmcgcHJvZ3JhbSIsInVuZGVybHlpbmcgcHJvZ3JhbSBhbmQiLCJhbmQgY29udHJpYnV0aW9ucyBhcyIsImNvbnRyaWJ1dGlvbnMgYXMgZGVmaW5lZCIsImRlZmluZWQgYmVsb3cgbWFkZSIsImJlbG93IG1hZGUgdG8iLCJtYWRlIHRvIHN1Y2giLCJzdWNoIHByb2dyYW0gdG8iLCJwcm9ncmFtIHRvIHJlbWFpbiIsInRvIHJlbWFpbiBvcGVuIiwicmVtYWluIG9wZW4gdGhpcyIsIm9wZW4gdGhpcyBsaWNlbnNlIiwiZGVzaWduZWQgdG8gcGVybWl0IiwidG8gcGVybWl0IHlvdSIsInBlcm1pdCB5b3UgdG8iLCJ5b3UgdG8gbWFpbnRhaW4iLCJ0byBtYWludGFpbiB5b3VyIiwibWFpbnRhaW4geW91ciBvd24iLCJ5b3VyIG93biBzb2Z0d2FyZSIsIm93biBzb2Z0d2FyZSBwcm9ncmFtcyIsInNvZnR3YXJlIHByb2dyYW1zIGZyZWUiLCJwcm9ncmFtcyBmcmVlIG9mIiwiZnJlZSBvZiB0aGlzIiwidW5sZXNzIHlvdSBjaG9vc2UiLCJjaG9vc2UgdG8gZG8iLCJkbyBzbyB0aHVzIiwic28gdGh1cyBvbmx5IiwidGh1cyBvbmx5IHlvdXIiLCJvbmx5IHlvdXIgY29udHJpYnV0aW9ucyIsInRoZSBwcm92aXNpb25zIHRoYXQiLCJwcm92aXNpb25zIHRoYXQgZm9sbG93IiwidGhhdCBmb2xsb3cgc2V0IiwiZm9sbG93IHNldCBmb3J0aCIsInNldCBmb3J0aCB0aGUiLCJmb3J0aCB0aGUgdGVybXMiLCJwcm9ncmFtIDEgZGVmaW5pdGlvbnMiLCJjYXNlIG9mIGNhIiwib2YgY2EgdGhlIiwiY2EgdGhlIG9yaWdpbmFsIiwiZWFjaCBjb250cmlidXRvciBpbmNsdWRpbmciLCJjb250cmlidXRvciBpbmNsdWRpbmcgY2EiLCJpbmNsdWRpbmcgY2EgY2hhbmdlcyIsImNhIGNoYW5nZXMgYW5kIiwicGFydGljdWxhciBjb250cmlidXRvciB0byIsImNvbnRyaWJ1dG9yIHRvIHVuYWZmaWxpYXRlZCIsInRvIHVuYWZmaWxpYXRlZCB0aGlyZCIsInVuYWZmaWxpYXRlZCB0aGlyZCBwYXJ0aWVzIiwicGFydGllcyBhIGNvbnRyaWJ1dGlvbiIsIm9uIHN1Y2ggY29udHJpYnV0b3JzIiwic3VjaCBjb250cmlidXRvcnMgYmVoYWxmIiwiY29udHJpYnV0b3JzIGJlaGFsZiBjb250cmlidXRpb25zIiwicHJvZ3JhbSB3aGljaCB4Iiwid2hpY2ggeCBhcmUiLCJ4IGFyZSBzZXBhcmF0ZSIsImFncmVlbWVudCBhbmQgeSIsImFuZCB5IGFyZSIsInkgYXJlIG5vdCIsInByb2dyYW0gMSAyIiwiY29udHJpYnV0b3IgbWVhbnMgY2EiLCJtZWFucyBjYSBhbmQiLCJjYSBhbmQgYW55IiwicHJvZ3JhbSAxIDMiLCJ2ZXJzaW9uIG1lYW5zIGFzIiwibWVhbnMgYXMgdG8iLCJ0byBhIGNvbnRyaWJ1dG9yIiwiY29udHJpYnV0b3IgdGhhdCB2ZXJzaW9uIiwicHJvZ3JhbSB0aGF0IGluY2x1ZGVzIiwiaW5jbHVkZXMgdGhlIGNvbnRyaWJ1dG9ycyIsInRoZSBjb250cmlidXRvcnMgY29udHJpYnV0aW9uIiwiY29udHJpYnV0b3JzIGNvbnRyaWJ1dGlvbiBidXQiLCJjb250cmlidXRpb24gYnV0IG5vdCIsIm5vdCBhbnkgY29udHJpYnV0aW9ucyIsInRoZSBwcm9ncmFtIHRoZXJlYWZ0ZXIiLCJwcm9ncmFtIHRoZXJlYWZ0ZXIgMSIsInRoZXJlYWZ0ZXIgMSA0IiwiY29tYmluZXMgdGhlIHByb2dyYW0iLCJwcm9ncmFtIG9yIHBvcnRpb25zIiwiMSA1IGxpY2Vuc2VkIiwiNSBsaWNlbnNlZCBwYXRlbnRzIiwicGF0ZW50cyBtZWFuIHBhdGVudHMiLCJtZWFuIHBhdGVudHMgbGljZW5zYWJsZSIsInBhdGVudHMgbGljZW5zYWJsZSBieSIsInByb2dyYW0gMSA2IiwiNiBvcmlnaW5hbCBwcm9ncmFtIiwidG8gd2hpY2ggdGhpcyIsImxpY2Vuc2UgaXMgYXR0YWNoZWQiLCJpcyBhdHRhY2hlZCBhbmQiLCJhdHRhY2hlZCBhbmQgYXMiLCJhbmQgYXMgcmVsZWFzZWQiLCJyZWxlYXNlZCBieSBjYSIsImJ5IGNhIGluY2x1ZGluZyIsImNhIGluY2x1ZGluZyBzb3VyY2UiLCJpZiBhbnkgMSIsImFueSAxIDciLCIxIDcgcHJvZ3JhbSIsIjcgcHJvZ3JhbSBtZWFucyIsImFuZCBjb250cmlidXRpb25zIDEiLCJjb250cmlidXRpb25zIDEgOCIsIjEgOCByZWNpcGllbnQiLCI4IHJlY2lwaWVudCBtZWFucyIsImFueW9uZSB3aG8gbW9kaWZpZXMiLCJ3aG8gbW9kaWZpZXMgY29waWVzIiwibW9kaWZpZXMgY29waWVzIHVzZXMiLCJjb3BpZXMgdXNlcyBvciIsInVzZXMgb3IgZGlzdHJpYnV0ZXMiLCJwcm9ncmFtIDIgZ3JhbnQiLCJvZiByaWdodHMgMiIsInJpZ2h0cyAyIDEiLCJjb2RlIGZvcm0gZm9yIiwiZm9ybSBmb3IgdGhlIiwiZG91YnQgdGhlIGxpY2Vuc2UiLCIyIDEgc2hhbGwiLCIxIHNoYWxsIG5vdCIsImluY2x1ZGUgYSBsaWNlbnNlIiwibGljZW5zZSB0byBhbnkiLCJhbnkgbGljZW5zZWQgcGF0ZW50cyIsImxpY2Vuc2VkIHBhdGVudHMgb2YiLCJwYXRlbnRzIG9mIGEiLCJhIGNvbnRyaWJ1dG9yIDIiLCJjb250cmlidXRvciAyIDIiLCIyIDIgc3ViamVjdCIsImltcG9ydCB0aGUgY29udHJpYnV0aW9uIiwiZm9ybSB0aGUgbGljZW5zZSIsIjIgc2hhbGwgYXBwbHkiLCJjb250cmlidXRpb24gY2F1c2VzIHRoZSIsImNhdXNlcyB0aGUgbGljZW5zZWQiLCJwYXRlbnRzIHRvIGJlIiwidG8gYmUgaW5mcmluZ2VkIiwiaW5mcmluZ2VkIGJ5IHN1Y2giLCJieSBzdWNoIGNvbWJpbmF0aW9uIiwic3VjaCBjb21iaW5hdGlvbiBub3R3aXRoc3RhbmRpbmciLCJjb21iaW5hdGlvbiBub3R3aXRoc3RhbmRpbmcgdGhlIl19LHsibGljZW5zZVRleHRzIjpbIkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gMS4wIENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiBcIkFTLUlTXCIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLlxuXG5MaWNlbnNlXG5cblRIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFIChcIkNDUExcIiBPUiBcIkxJQ0VOU0VcIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC5cblxuQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy5cblxuICAgMS4gRGVmaW5pdGlvbnNcblxuICAgICAgYS4gXCJDb2xsZWN0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFwiRGVyaXZhdGl2ZSBXb3JrXCIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBcIkxpY2Vuc29yXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGQuIFwiT3JpZ2luYWwgQXV0aG9yXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLlxuXG4gICAgICBlLiBcIldvcmtcIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBmLiBcIllvdVwiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uXG5cbiAgIDIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy5cblxuICAgMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OlxuXG4gICAgICBhLiB0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7XG5cbiAgICAgIGIuIHRvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7XG5cbiAgICAgIGMuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7XG5cbiAgICAgIGQuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzO1xuXG4gICAgICBUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC5cblxuICAgNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAgICBhLiBZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuXG5cbiAgICAgIGIuIElmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sIFwiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvcixcIiBvciBcIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3JcIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuXG5cbiAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lclxuXG4gICAgICBhLiBCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcidzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6XG5cbiAgICAgICAgIGkuIExpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50cztcblxuICAgICAgICAgaWkuIFRoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS5cblxuICAgICAgYi4gRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhJUyBMSUNFTlNFIE9SIE9USEVSV0lTRSBBR1JFRUQgSU4gV1JJVElORyBPUiBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgVEhFIFdPUksgSVMgTElDRU5TRUQgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuXG5cbiAgIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00gTElBQklMSVRZIFRPIEEgVEhJUkQgUEFSVFkgUkVTVUxUSU5HIEZST00gQlJFQUNIIE9GIFRIRSBXQVJSQU5USUVTIElOIFNFQ1RJT04gNSwgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDcuIFRlcm1pbmF0aW9uXG5cbiAgICAgIGEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuXG5cbiAgIDguIE1pc2NlbGxhbmVvdXNcblxuICAgICAgYS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuXG5cbiAgICAgIGQuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuXG5cbiAgICAgIGUuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LlxuXG5DcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci5cblxuRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgXCJDcmVhdGl2ZSBDb21tb25zXCIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuXG5cbkNyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uIl0sImxpY2Vuc2VJZHMiOlsiQ0MtQlktMS4wIl0sImtleXdvcmRzIjpbImNvbW1vbnMgYXR0cmlidXRpb24gMSIsImF0dHJpYnV0aW9uIDEgMCIsImNyZWF0aXZlIGNvbW1vbnMgYXR0cmlidXRpb24gMSIsImNvbW1vbnMgYXR0cmlidXRpb24gMSAwIiwiYXR0cmlidXRpb24gMSAwIGNyZWF0aXZlIiwiY3JlYXRpdmUgY29tbW9ucyBhdHRyaWJ1dGlvbiAxIDAiLCJjb21tb25zIGF0dHJpYnV0aW9uIDEgMCBjcmVhdGl2ZSIsImF0dHJpYnV0aW9uIDEgMCBjcmVhdGl2ZSBjb21tb25zIl19LHsibGljZW5zZVRleHRzIjpbIkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gMi4wIENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiBcIkFTLUlTXCIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLlxuXG5MaWNlbnNlXG5cblRIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFIChcIkNDUExcIiBPUiBcIkxJQ0VOU0VcIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELlxuXG5CWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXG4gICAxLiBEZWZpbml0aW9uc1xuXG4gICAgICBhLiBcIkNvbGxlY3RpdmUgV29ya1wiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gXCJEZXJpdmF0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKFwic3luY2hpbmdcIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIFwiTGljZW5zb3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgZC4gXCJPcmlnaW5hbCBBdXRob3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuXG5cbiAgICAgIGUuIFwiV29ya1wiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGYuIFwiWW91XCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi5cblxuICAgMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLlxuXG4gICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6XG5cbiAgICAgIGEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgICAgYi4gdG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrcztcblxuICAgICAgYy4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgICAgZC4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3MuXG5cbiAgICAgIGUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246XG5cbiAgICAgICAgIGkuIFBlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay5cblxuICAgICAgICAgaWkuIE1lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoXCJjb3ZlciB2ZXJzaW9uXCIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLlxuXG4gICAgICBmLiBXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuXG5cbiAgIFRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLlxuXG4gICA0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG5cbiAgICAgIGEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC5cblxuICAgICAgYi4gSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCBcIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsXCIgb3IgXCJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yXCIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LlxuXG4gICA1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXJcblxuICAgVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS5cblxuICAgNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuICAgNy4gVGVybWluYXRpb25cblxuICAgICAgYS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS5cblxuICAgOC4gTWlzY2VsbGFuZW91c1xuXG4gICAgICBhLiBFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS5cblxuICAgICAgZC4gTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC5cblxuICAgICAgZS4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuXG5cbkNyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLlxuXG5FeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayBcIkNyZWF0aXZlIENvbW1vbnNcIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zJyB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS5cblxuQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4iXSwibGljZW5zZUlkcyI6WyJDQy1CWS0yLjAiXSwia2V5d29yZHMiOlsiYXR0cmlidXRpb24gMiAwIiwiY29tbW9ucyBhdHRyaWJ1dGlvbiAyIDAiLCJhdHRyaWJ1dGlvbiAyIDAgY3JlYXRpdmUiLCJjcmVhdGl2ZSBjb21tb25zIGF0dHJpYnV0aW9uIDIgMCIsImNvbW1vbnMgYXR0cmlidXRpb24gMiAwIGNyZWF0aXZlIiwiYXR0cmlidXRpb24gMiAwIGNyZWF0aXZlIGNvbW1vbnMiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiAyLjUgQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOIFwiQVMtSVNcIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuXG5cbkxpY2Vuc2VcblxuVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKFwiQ0NQTFwiIE9SIFwiTElDRU5TRVwiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuXG5cbkJZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cbiAgIDEuIERlZmluaXRpb25zXG5cbiAgICAgIGEuIFwiQ29sbGVjdGl2ZSBXb3JrXCIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBcIkRlcml2YXRpdmUgV29ya1wiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoXCJzeW5jaGluZ1wiKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gXCJMaWNlbnNvclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBkLiBcIk9yaWdpbmFsIEF1dGhvclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay5cblxuICAgICAgZS4gXCJXb3JrXCIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgZi4gXCJZb3VcIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLlxuXG4gICAyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuXG5cbiAgIDMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzpcblxuICAgICAgYS4gdG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzO1xuXG4gICAgICBiLiB0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzO1xuXG4gICAgICBjLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzO1xuXG4gICAgICBkLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3Jrcy5cblxuICAgICAgZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSB3b3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjpcblxuICAgICAgICAgaS4gUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLlxuXG4gICAgICAgICBpaS4gTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrIChcImNvdmVyIHZlcnNpb25cIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuXG5cbiAgICAgIGYuIFdlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS5cblxuICAgICAgVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuXG5cbiAgIDQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcblxuICAgICAgYS4gWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGIpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYiksIGFzIHJlcXVlc3RlZC5cblxuICAgICAgYi4gSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiBpbiBMaWNlbnNvcidzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgXCJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLFwiIG9yIFwiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvclwiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC5cblxuICAgNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyXG5cbiAgIFVOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDcuIFRlcm1pbmF0aW9uXG5cbiAgICAgIGEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuXG5cbiAgIDguIE1pc2NlbGxhbmVvdXNcblxuICAgICAgYS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuXG5cbiAgICAgIGQuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuXG5cbiAgICAgIGUuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LlxuXG5DcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci5cblxuRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgXCJDcmVhdGl2ZSBDb21tb25zXCIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuXG5cbkNyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uIl0sImxpY2Vuc2VJZHMiOlsiQ0MtQlktMi41Il0sImtleXdvcmRzIjpbImF0dHJpYnV0aW9uIDIgNSIsImNvbW1vbnMgYXR0cmlidXRpb24gMiA1IiwiYXR0cmlidXRpb24gMiA1IGNyZWF0aXZlIiwiY3JlYXRpdmUgY29tbW9ucyBhdHRyaWJ1dGlvbiAyIDUiLCJjb21tb25zIGF0dHJpYnV0aW9uIDIgNSBjcmVhdGl2ZSIsImF0dHJpYnV0aW9uIDIgNSBjcmVhdGl2ZSBjb21tb25zIl19LHsibGljZW5zZVRleHRzIjpbIkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gMy4wIFVucG9ydGVkIENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiBcIkFTLUlTXCIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLlxuXG5MaWNlbnNlXG5cblRIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFIChcIkNDUExcIiBPUiBcIkxJQ0VOU0VcIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELlxuXG5CWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXG4gICAxLiBEZWZpbml0aW9uc1xuXG4gICAgICBhLiBcIkFkYXB0YXRpb25cIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoXCJzeW5jaGluZ1wiKSB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBcIkNvbGxlY3Rpb25cIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3MsIHN1Y2ggYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvciBicm9hZGNhc3RzLCBvciBvdGhlciB3b3JrcyBvciBzdWJqZWN0IG1hdHRlciBvdGhlciB0aGFuIHdvcmtzIGxpc3RlZCBpbiBTZWN0aW9uIDEoZikgYmVsb3csIHdoaWNoLCBieSByZWFzb24gb2YgdGhlIHNlbGVjdGlvbiBhbmQgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIChhcyBkZWZpbmVkIGFib3ZlKSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gXCJEaXN0cmlidXRlXCIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kIGNvcGllcyBvZiB0aGUgV29yayBvciBBZGFwdGF0aW9uLCBhcyBhcHByb3ByaWF0ZSwgdGhyb3VnaCBzYWxlIG9yIG90aGVyIHRyYW5zZmVyIG9mIG93bmVyc2hpcC5cblxuICAgICAgZC4gXCJMaWNlbnNvclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgZS4gXCJPcmlnaW5hbCBBdXRob3JcIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiBubyBpbmRpdmlkdWFsIG9yIGVudGl0eSBjYW4gYmUgaWRlbnRpZmllZCwgdGhlIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsIG11c2ljaWFucywgZGFuY2VycywgYW5kIG90aGVyIHBlcnNvbnMgd2hvIGFjdCwgc2luZywgZGVsaXZlciwgZGVjbGFpbSwgcGxheSBpbiwgaW50ZXJwcmV0IG9yIG90aGVyd2lzZSBwZXJmb3JtIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuXG5cbiAgICAgIGYuIFwiV29ya1wiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay5cblxuICAgICAgZy4gXCJZb3VcIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLlxuXG4gICAgICBoLiBcIlB1YmxpY2x5IFBlcmZvcm1cIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy5cblxuICAgICAgaS4gXCJSZXByb2R1Y2VcIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mIGZpeGF0aW9uIGFuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uXG5cbiAgIDIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSBsaW1pdGF0aW9ucyBvciBleGNlcHRpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGZvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLlxuXG4gICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6XG5cbiAgICAgIGEuIHRvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aW9ucywgYW5kIHRvIFJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3Rpb25zO1xuXG4gICAgICBiLiB0byBjcmVhdGUgYW5kIFJlcHJvZHVjZSBBZGFwdGF0aW9ucyBwcm92aWRlZCB0aGF0IGFueSBzdWNoIEFkYXB0YXRpb24sIGluY2x1ZGluZyBhbnkgdHJhbnNsYXRpb24gaW4gYW55IG1lZGl1bSwgdGFrZXMgcmVhc29uYWJsZSBzdGVwcyB0byBjbGVhcmx5IGxhYmVsLCBkZW1hcmNhdGUgb3Igb3RoZXJ3aXNlIGlkZW50aWZ5IHRoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIG9yaWdpbmFsIFdvcmsuIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGNvdWxkIGJlIG1hcmtlZCBcIlRoZSBvcmlnaW5hbCB3b3JrIHdhcyB0cmFuc2xhdGVkIGZyb20gRW5nbGlzaCB0byBTcGFuaXNoLFwiIG9yIGEgbW9kaWZpY2F0aW9uIGNvdWxkIGluZGljYXRlIFwiVGhlIG9yaWdpbmFsIHdvcmsgaGFzIGJlZW4gbW9kaWZpZWQuXCI7XG5cbiAgICAgIGMuIHRvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9uczsgYW5kLFxuXG4gICAgICBkLiB0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIEFkYXB0YXRpb25zLlxuXG4gICAgICBlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDpcblxuICAgICAgICAgaS4gTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTtcblxuICAgICAgICAgaWkuIFdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCxcblxuICAgICAgICAgaWlpLiBWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3Igd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgIFRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC5cblxuICAgNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAgICBhLiBZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYiksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhbiBBZGFwdGF0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIEFkYXB0YXRpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYiksIGFzIHJlcXVlc3RlZC5cblxuICAgICAgYi4gSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKFwiQXR0cmlidXRpb24gUGFydGllc1wiKSBpbiBMaWNlbnNvcidzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyAoaWkpIHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgKGlpaSkgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVVJJLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCAoaXYpLCBjb25zaXN0ZW50IHdpdGggU2VjdGlvbiAzKGIpLCBpbiB0aGUgY2FzZSBvZiBhbiBBZGFwdGF0aW9uLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBBZGFwdGF0aW9uIChlLmcuLCBcIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsXCIgb3IgXCJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yXCIpLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0IChiKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy5cblxuICAgICAgYy4gRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3IncyBob25vciBvciByZXB1dGF0aW9uLiBMaWNlbnNvciBhZ3JlZXMgdGhhdCBpbiB0aG9zZSBqdXJpc2RpY3Rpb25zIChlLmcuIEphcGFuKSwgaW4gd2hpY2ggYW55IGV4ZXJjaXNlIG9mIHRoZSByaWdodCBncmFudGVkIGluIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHRoZSByaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSB3b3VsZCBiZSBkZWVtZWQgdG8gYmUgYSBkaXN0b3J0aW9uLCBtdXRpbGF0aW9uLCBtb2RpZmljYXRpb24gb3Igb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcidzIGhvbm9yIGFuZCByZXB1dGF0aW9uLCB0aGUgTGljZW5zb3Igd2lsbCB3YWl2ZSBvciBub3QgYXNzZXJ0LCBhcyBhcHByb3ByaWF0ZSwgdGhpcyBTZWN0aW9uLCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdywgdG8gZW5hYmxlIFlvdSB0byByZWFzb25hYmx5IGV4ZXJjaXNlIFlvdXIgcmlnaHQgdW5kZXIgU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAocmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgYnV0IG5vdCBvdGhlcndpc2UuXG5cbiAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lclxuXG4gICBVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICA2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG4gICA3LiBUZXJtaW5hdGlvblxuXG4gICAgICBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuXG5cbiAgIDguIE1pc2NlbGxhbmVvdXNcblxuICAgICAgYS4gRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiwgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICAgICBkLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuXG5cbiAgICAgIGUuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS5cblxuICAgICAgZi4gVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgdGhlIFByb3RlY3Rpb24gb2YgTGl0ZXJhcnkgYW5kIEFydGlzdGljIFdvcmtzIChhcyBhbWVuZGVkIG9uIFNlcHRlbWJlciAyOCwgMTk3OSksIHRoZSBSb21lIENvbnZlbnRpb24gb2YgMTk2MSwgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYgYW5kIHRoZSBVbml2ZXJzYWwgQ29weXJpZ2h0IENvbnZlbnRpb24gKGFzIHJldmlzZWQgb24gSnVseSAyNCwgMTk3MSkuIFRoZXNlIHJpZ2h0cyBhbmQgc3ViamVjdCBtYXR0ZXIgdGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSB0cmVhdHkgcHJvdmlzaW9ucyBpbiB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBzdWNoIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBkZWVtZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy5cblxuQ3JlYXRpdmUgQ29tbW9ucyBOb3RpY2VcblxuQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuXG5cbkV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayBcIkNyZWF0aXZlIENvbW1vbnNcIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zJyB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGlzIExpY2Vuc2UuXG5cbkNyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uIl0sImxpY2Vuc2VJZHMiOlsiQ0MtQlktMy4wIl0sImtleXdvcmRzIjpbImNvbW1vbnMgYXR0cmlidXRpb24gMyIsImF0dHJpYnV0aW9uIDMgMCIsIm9yIGNvbnNlbnQgdGhpcyIsImZyb20geW91IGUiLCJ5b3UgZSB0aGlzIiwiY3JlYXRpdmUgY29tbW9ucyBhdHRyaWJ1dGlvbiAzIiwiY29tbW9ucyBhdHRyaWJ1dGlvbiAzIDAiLCJhdHRyaWJ1dGlvbiAzIDAgdW5wb3J0ZWQiLCJ3YWl2ZXIgb3IgY29uc2VudCB0aGlzIiwib3IgY29uc2VudCB0aGlzIGxpY2Vuc2UiLCJjb25zZW50IHRoaXMgbGljZW5zZSBjb25zdGl0dXRlcyIsImNvbW11bmljYXRpb24gZnJvbSB5b3UgZSIsImZyb20geW91IGUgdGhpcyIsInlvdSBlIHRoaXMgbGljZW5zZSIsImUgdGhpcyBsaWNlbnNlIG1heSIsImNyZWF0aXZlIGNvbW1vbnMgYXR0cmlidXRpb24gMyAwIiwiY29tbW9ucyBhdHRyaWJ1dGlvbiAzIDAgdW5wb3J0ZWQiLCJhdHRyaWJ1dGlvbiAzIDAgdW5wb3J0ZWQgY3JlYXRpdmUiLCJzdWNoIHdhaXZlciBvciBjb25zZW50IHRoaXMiLCJ3YWl2ZXIgb3IgY29uc2VudCB0aGlzIGxpY2Vuc2UiLCJvciBjb25zZW50IHRoaXMgbGljZW5zZSBjb25zdGl0dXRlcyIsImNvbnNlbnQgdGhpcyBsaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSIsImFueSBjb21tdW5pY2F0aW9uIGZyb20geW91IGUiLCJjb21tdW5pY2F0aW9uIGZyb20geW91IGUgdGhpcyIsImZyb20geW91IGUgdGhpcyBsaWNlbnNlIiwieW91IGUgdGhpcyBsaWNlbnNlIG1heSIsImUgdGhpcyBsaWNlbnNlIG1heSBub3QiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiA0LjAgSW50ZXJuYXRpb25hbCBDcmVhdGl2ZSBDb21tb25zIENvcnBvcmF0aW9uIChcIkNyZWF0aXZlIENvbW1vbnNcIikgaXMgbm90IGEgbGF3IGZpcm0gYW5kIGRvZXMgbm90IHByb3ZpZGUgbGVnYWwgc2VydmljZXMgb3IgbGVnYWwgYWR2aWNlLiBEaXN0cmlidXRpb24gb2YgQ3JlYXRpdmUgQ29tbW9ucyBwdWJsaWMgbGljZW5zZXMgZG9lcyBub3QgY3JlYXRlIGEgbGF3eWVyLWNsaWVudCBvciBvdGhlciByZWxhdGlvbnNoaXAuIENyZWF0aXZlIENvbW1vbnMgbWFrZXMgaXRzIGxpY2Vuc2VzIGFuZCByZWxhdGVkIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBvbiBhbiBcImFzLWlzXCIgYmFzaXMuIENyZWF0aXZlIENvbW1vbnMgZ2l2ZXMgbm8gd2FycmFudGllcyByZWdhcmRpbmcgaXRzIGxpY2Vuc2VzLCBhbnkgbWF0ZXJpYWwgbGljZW5zZWQgdW5kZXIgdGhlaXIgdGVybXMgYW5kIGNvbmRpdGlvbnMsIG9yIGFueSByZWxhdGVkIGluZm9ybWF0aW9uLiBDcmVhdGl2ZSBDb21tb25zIGRpc2NsYWltcyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzIHJlc3VsdGluZyBmcm9tIHRoZWlyIHVzZSB0byB0aGUgZnVsbGVzdCBleHRlbnQgcG9zc2libGUuXG5cblVzaW5nIENyZWF0aXZlIENvbW1vbnMgUHVibGljIExpY2Vuc2VzXG5cbkNyZWF0aXZlIENvbW1vbnMgcHVibGljIGxpY2Vuc2VzIHByb3ZpZGUgYSBzdGFuZGFyZCBzZXQgb2YgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBjcmVhdG9ycyBhbmQgb3RoZXIgcmlnaHRzIGhvbGRlcnMgbWF5IHVzZSB0byBzaGFyZSBvcmlnaW5hbCB3b3JrcyBvZiBhdXRob3JzaGlwIGFuZCBvdGhlciBtYXRlcmlhbCBzdWJqZWN0IHRvIGNvcHlyaWdodCBhbmQgY2VydGFpbiBvdGhlciByaWdodHMgc3BlY2lmaWVkIGluIHRoZSBwdWJsaWMgbGljZW5zZSBiZWxvdy4gVGhlIGZvbGxvd2luZyBjb25zaWRlcmF0aW9ucyBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSwgYXJlIG5vdCBleGhhdXN0aXZlLCBhbmQgZG8gbm90IGZvcm0gcGFydCBvZiBvdXIgbGljZW5zZXMuXG5cbkNvbnNpZGVyYXRpb25zIGZvciBsaWNlbnNvcnM6IE91ciBwdWJsaWMgbGljZW5zZXMgYXJlIGludGVuZGVkIGZvciB1c2UgYnkgdGhvc2UgYXV0aG9yaXplZCB0byBnaXZlIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgbWF0ZXJpYWwgaW4gd2F5cyBvdGhlcndpc2UgcmVzdHJpY3RlZCBieSBjb3B5cmlnaHQgYW5kIGNlcnRhaW4gb3RoZXIgcmlnaHRzLiBPdXIgbGljZW5zZXMgYXJlIGlycmV2b2NhYmxlLiBMaWNlbnNvcnMgc2hvdWxkIHJlYWQgYW5kIHVuZGVyc3RhbmQgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlIHRoZXkgY2hvb3NlIGJlZm9yZSBhcHBseWluZyBpdC4gTGljZW5zb3JzIHNob3VsZCBhbHNvIHNlY3VyZSBhbGwgcmlnaHRzIG5lY2Vzc2FyeSBiZWZvcmUgYXBwbHlpbmcgb3VyIGxpY2Vuc2VzIHNvIHRoYXQgdGhlIHB1YmxpYyBjYW4gcmV1c2UgdGhlIG1hdGVyaWFsIGFzIGV4cGVjdGVkLiBMaWNlbnNvcnMgc2hvdWxkIGNsZWFybHkgbWFyayBhbnkgbWF0ZXJpYWwgbm90IHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UuIFRoaXMgaW5jbHVkZXMgb3RoZXIgQ0MtbGljZW5zZWQgbWF0ZXJpYWwsIG9yIG1hdGVyaWFsIHVzZWQgdW5kZXIgYW4gZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gY29weXJpZ2h0LiBNb3JlIGNvbnNpZGVyYXRpb25zIGZvciBsaWNlbnNvcnMgOiB3aWtpLmNyZWF0aXZlY29tbW9ucy5vcmcvQ29uc2lkZXJhdGlvbnNfZm9yX2xpY2Vuc29yc1xuXG5Db25zaWRlcmF0aW9ucyBmb3IgdGhlIHB1YmxpYzogQnkgdXNpbmcgb25lIG9mIG91ciBwdWJsaWMgbGljZW5zZXMsIGEgbGljZW5zb3IgZ3JhbnRzIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIGxpY2Vuc2VkIG1hdGVyaWFsIHVuZGVyIHNwZWNpZmllZCB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgdGhlIGxpY2Vuc29yJ3MgcGVybWlzc2lvbiBpcyBub3QgbmVjZXNzYXJ5IGZvciBhbnkgcmVhc29u4oCTZm9yIGV4YW1wbGUsIGJlY2F1c2Ugb2YgYW55IGFwcGxpY2FibGUgZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gY29weXJpZ2h04oCTdGhlbiB0aGF0IHVzZSBpcyBub3QgcmVndWxhdGVkIGJ5IHRoZSBsaWNlbnNlLiBPdXIgbGljZW5zZXMgZ3JhbnQgb25seSBwZXJtaXNzaW9ucyB1bmRlciBjb3B5cmlnaHQgYW5kIGNlcnRhaW4gb3RoZXIgcmlnaHRzIHRoYXQgYSBsaWNlbnNvciBoYXMgYXV0aG9yaXR5IHRvIGdyYW50LiBVc2Ugb2YgdGhlIGxpY2Vuc2VkIG1hdGVyaWFsIG1heSBzdGlsbCBiZSByZXN0cmljdGVkIGZvciBvdGhlciByZWFzb25zLCBpbmNsdWRpbmcgYmVjYXVzZSBvdGhlcnMgaGF2ZSBjb3B5cmlnaHQgb3Igb3RoZXIgcmlnaHRzIGluIHRoZSBtYXRlcmlhbC4gQSBsaWNlbnNvciBtYXkgbWFrZSBzcGVjaWFsIHJlcXVlc3RzLCBzdWNoIGFzIGFza2luZyB0aGF0IGFsbCBjaGFuZ2VzIGJlIG1hcmtlZCBvciBkZXNjcmliZWQuIEFsdGhvdWdoIG5vdCByZXF1aXJlZCBieSBvdXIgbGljZW5zZXMsIHlvdSBhcmUgZW5jb3VyYWdlZCB0byByZXNwZWN0IHRob3NlIHJlcXVlc3RzIHdoZXJlIHJlYXNvbmFibGUuIE1vcmUgY29uc2lkZXJhdGlvbnMgZm9yIHRoZSBwdWJsaWMgOiB3aWtpLmNyZWF0aXZlY29tbW9ucy5vcmcvQ29uc2lkZXJhdGlvbnNfZm9yX2xpY2Vuc2VlcyBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIDQuMCBJbnRlcm5hdGlvbmFsIFB1YmxpYyBMaWNlbnNlXG5cbkJ5IGV4ZXJjaXNpbmcgdGhlIExpY2Vuc2VkIFJpZ2h0cyAoZGVmaW5lZCBiZWxvdyksIFlvdSBhY2NlcHQgYW5kIGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gNC4wIEludGVybmF0aW9uYWwgUHVibGljIExpY2Vuc2UgKFwiUHVibGljIExpY2Vuc2VcIikuIFRvIHRoZSBleHRlbnQgdGhpcyBQdWJsaWMgTGljZW5zZSBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb250cmFjdCwgWW91IGFyZSBncmFudGVkIHRoZSBMaWNlbnNlZCBSaWdodHMgaW4gY29uc2lkZXJhdGlvbiBvZiBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGFuZCB0aGUgTGljZW5zb3IgZ3JhbnRzIFlvdSBzdWNoIHJpZ2h0cyBpbiBjb25zaWRlcmF0aW9uIG9mIGJlbmVmaXRzIHRoZSBMaWNlbnNvciByZWNlaXZlcyBmcm9tIG1ha2luZyB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXZhaWxhYmxlIHVuZGVyIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLlxuXG5TZWN0aW9uIDEg4oCTIERlZmluaXRpb25zLlxuXG4gICBhLiBBZGFwdGVkIE1hdGVyaWFsIG1lYW5zIG1hdGVyaWFsIHN1YmplY3QgdG8gQ29weXJpZ2h0IGFuZCBTaW1pbGFyIFJpZ2h0cyB0aGF0IGlzIGRlcml2ZWQgZnJvbSBvciBiYXNlZCB1cG9uIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBhbmQgaW4gd2hpY2ggdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIHRyYW5zbGF0ZWQsIGFsdGVyZWQsIGFycmFuZ2VkLCB0cmFuc2Zvcm1lZCwgb3Igb3RoZXJ3aXNlIG1vZGlmaWVkIGluIGEgbWFubmVyIHJlcXVpcmluZyBwZXJtaXNzaW9uIHVuZGVyIHRoZSBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIGhlbGQgYnkgdGhlIExpY2Vuc29yLiBGb3IgcHVycG9zZXMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgd2hlcmUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSwgb3Igc291bmQgcmVjb3JkaW5nLCBBZGFwdGVkIE1hdGVyaWFsIGlzIGFsd2F5cyBwcm9kdWNlZCB3aGVyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaXMgc3luY2hlZCBpbiB0aW1lZCByZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlLlxuXG4gICBiLiBBZGFwdGVyJ3MgTGljZW5zZSBtZWFucyB0aGUgbGljZW5zZSBZb3UgYXBwbHkgdG8gWW91ciBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIGluIFlvdXIgY29udHJpYnV0aW9ucyB0byBBZGFwdGVkIE1hdGVyaWFsIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgYy4gQ29weXJpZ2h0IGFuZCBTaW1pbGFyIFJpZ2h0cyBtZWFucyBjb3B5cmlnaHQgYW5kL29yIHNpbWlsYXIgcmlnaHRzIGNsb3NlbHkgcmVsYXRlZCB0byBjb3B5cmlnaHQgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHBlcmZvcm1hbmNlLCBicm9hZGNhc3QsIHNvdW5kIHJlY29yZGluZywgYW5kIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cywgd2l0aG91dCByZWdhcmQgdG8gaG93IHRoZSByaWdodHMgYXJlIGxhYmVsZWQgb3IgY2F0ZWdvcml6ZWQuIEZvciBwdXJwb3NlcyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLCB0aGUgcmlnaHRzIHNwZWNpZmllZCBpbiBTZWN0aW9uIDIoYikoMSktKDIpIGFyZSBub3QgQ29weXJpZ2h0IGFuZCBTaW1pbGFyIFJpZ2h0cy5cblxuICAgZC4gRWZmZWN0aXZlIFRlY2hub2xvZ2ljYWwgTWVhc3VyZXMgbWVhbnMgdGhvc2UgbWVhc3VyZXMgdGhhdCwgaW4gdGhlIGFic2VuY2Ugb2YgcHJvcGVyIGF1dGhvcml0eSwgbWF5IG5vdCBiZSBjaXJjdW12ZW50ZWQgdW5kZXIgbGF3cyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIEFydGljbGUgMTEgb2YgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBhZG9wdGVkIG9uIERlY2VtYmVyIDIwLCAxOTk2LCBhbmQvb3Igc2ltaWxhciBpbnRlcm5hdGlvbmFsIGFncmVlbWVudHMuXG5cbiAgIGUuIEV4Y2VwdGlvbnMgYW5kIExpbWl0YXRpb25zIG1lYW5zIGZhaXIgdXNlLCBmYWlyIGRlYWxpbmcsIGFuZC9vciBhbnkgb3RoZXIgZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gQ29weXJpZ2h0IGFuZCBTaW1pbGFyIFJpZ2h0cyB0aGF0IGFwcGxpZXMgdG8gWW91ciB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLlxuXG4gICBmLiBMaWNlbnNlZCBNYXRlcmlhbCBtZWFucyB0aGUgYXJ0aXN0aWMgb3IgbGl0ZXJhcnkgd29yaywgZGF0YWJhc2UsIG9yIG90aGVyIG1hdGVyaWFsIHRvIHdoaWNoIHRoZSBMaWNlbnNvciBhcHBsaWVkIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgIGcuIExpY2Vuc2VkIFJpZ2h0cyBtZWFucyB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgUHVibGljIExpY2Vuc2UsIHdoaWNoIGFyZSBsaW1pdGVkIHRvIGFsbCBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIHRoYXQgYXBwbHkgdG8gWW91ciB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGFuZCB0aGF0IHRoZSBMaWNlbnNvciBoYXMgYXV0aG9yaXR5IHRvIGxpY2Vuc2UuXG5cbiAgIGguIExpY2Vuc29yIG1lYW5zIHRoZSBpbmRpdmlkdWFsKHMpIG9yIGVudGl0eShpZXMpIGdyYW50aW5nIHJpZ2h0cyB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICBpLiBTaGFyZSBtZWFucyB0byBwcm92aWRlIG1hdGVyaWFsIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgdGhhdCByZXF1aXJlcyBwZXJtaXNzaW9uIHVuZGVyIHRoZSBMaWNlbnNlZCBSaWdodHMsIHN1Y2ggYXMgcmVwcm9kdWN0aW9uLCBwdWJsaWMgZGlzcGxheSwgcHVibGljIHBlcmZvcm1hbmNlLCBkaXN0cmlidXRpb24sIGRpc3NlbWluYXRpb24sIGNvbW11bmljYXRpb24sIG9yIGltcG9ydGF0aW9uLCBhbmQgdG8gbWFrZSBtYXRlcmlhbCBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbmNsdWRpbmcgaW4gd2F5cyB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZSBtYXRlcmlhbCBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgdGltZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW0uXG5cbiAgIGouIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cyBtZWFucyByaWdodHMgb3RoZXIgdGhhbiBjb3B5cmlnaHQgcmVzdWx0aW5nIGZyb20gRGlyZWN0aXZlIDk2LzkvRUMgb2YgdGhlIEV1cm9wZWFuIFBhcmxpYW1lbnQgYW5kIG9mIHRoZSBDb3VuY2lsIG9mIDExIE1hcmNoIDE5OTYgb24gdGhlIGxlZ2FsIHByb3RlY3Rpb24gb2YgZGF0YWJhc2VzLCBhcyBhbWVuZGVkIGFuZC9vciBzdWNjZWVkZWQsIGFzIHdlbGwgYXMgb3RoZXIgZXNzZW50aWFsbHkgZXF1aXZhbGVudCByaWdodHMgYW55d2hlcmUgaW4gdGhlIHdvcmxkLlxuXG4gICBrLiBZb3UgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgdGhlIExpY2Vuc2VkIFJpZ2h0cyB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlLiBZb3VyIGhhcyBhIGNvcnJlc3BvbmRpbmcgbWVhbmluZy5cblxuU2VjdGlvbiAyIOKAkyBTY29wZS5cblxuICAgYS4gTGljZW5zZSBncmFudC5cblxuICAgICAgMS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgdGhlIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1zdWJsaWNlbnNhYmxlLCBub24tZXhjbHVzaXZlLCBpcnJldm9jYWJsZSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMgaW4gdGhlIExpY2Vuc2VkIE1hdGVyaWFsIHRvOlxuXG4gICAgICAgICBBLiByZXByb2R1Y2UgYW5kIFNoYXJlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCwgaW4gd2hvbGUgb3IgaW4gcGFydDsgYW5kXG5cbiAgICAgICAgIEIuIHByb2R1Y2UsIHJlcHJvZHVjZSwgYW5kIFNoYXJlIEFkYXB0ZWQgTWF0ZXJpYWwuXG5cbiAgICAgIDIuIEV4Y2VwdGlvbnMgYW5kIExpbWl0YXRpb25zLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgRXhjZXB0aW9ucyBhbmQgTGltaXRhdGlvbnMgYXBwbHkgdG8gWW91ciB1c2UsIHRoaXMgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgYXBwbHksIGFuZCBZb3UgZG8gbm90IG5lZWQgdG8gY29tcGx5IHdpdGggaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLlxuXG4gICAgICAzLiBUZXJtLiBUaGUgdGVybSBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlIGlzIHNwZWNpZmllZCBpbiBTZWN0aW9uIDYoYSkuXG5cbiAgICAgIDQuIE1lZGlhIGFuZCBmb3JtYXRzOyB0ZWNobmljYWwgbW9kaWZpY2F0aW9ucyBhbGxvd2VkLiBUaGUgTGljZW5zb3IgYXV0aG9yaXplcyBZb3UgdG8gZXhlcmNpc2UgdGhlIExpY2Vuc2VkIFJpZ2h0cyBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGNyZWF0ZWQsIGFuZCB0byBtYWtlIHRlY2huaWNhbCBtb2RpZmljYXRpb25zIG5lY2Vzc2FyeSB0byBkbyBzby4gVGhlIExpY2Vuc29yIHdhaXZlcyBhbmQvb3IgYWdyZWVzIG5vdCB0byBhc3NlcnQgYW55IHJpZ2h0IG9yIGF1dGhvcml0eSB0byBmb3JiaWQgWW91IGZyb20gbWFraW5nIHRlY2huaWNhbCBtb2RpZmljYXRpb25zIG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgTGljZW5zZWQgUmlnaHRzLCBpbmNsdWRpbmcgdGVjaG5pY2FsIG1vZGlmaWNhdGlvbnMgbmVjZXNzYXJ5IHRvIGNpcmN1bXZlbnQgRWZmZWN0aXZlIFRlY2hub2xvZ2ljYWwgTWVhc3VyZXMuIEZvciBwdXJwb3NlcyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLCBzaW1wbHkgbWFraW5nIG1vZGlmaWNhdGlvbnMgYXV0aG9yaXplZCBieSB0aGlzIFNlY3Rpb24gMihhKSg0KSBuZXZlciBwcm9kdWNlcyBBZGFwdGVkIE1hdGVyaWFsLlxuXG4gICAgICA1LiBEb3duc3RyZWFtIHJlY2lwaWVudHMuXG5cbiAgICAgICAgIEEuIE9mZmVyIGZyb20gdGhlIExpY2Vuc29yIOKAkyBMaWNlbnNlZCBNYXRlcmlhbC4gRXZlcnkgcmVjaXBpZW50IG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGFuIG9mZmVyIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgICAgICAgIEIuIE5vIGRvd25zdHJlYW0gcmVzdHJpY3Rpb25zLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IHRlcm1zIG9yIGNvbmRpdGlvbnMgb24sIG9yIGFwcGx5IGFueSBFZmZlY3RpdmUgVGVjaG5vbG9naWNhbCBNZWFzdXJlcyB0bywgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlmIGRvaW5nIHNvIHJlc3RyaWN0cyBleGVyY2lzZSBvZiB0aGUgTGljZW5zZWQgUmlnaHRzIGJ5IGFueSByZWNpcGllbnQgb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLlxuXG4gICAgICA2LiBObyBlbmRvcnNlbWVudC4gTm90aGluZyBpbiB0aGlzIFB1YmxpYyBMaWNlbnNlIGNvbnN0aXR1dGVzIG9yIG1heSBiZSBjb25zdHJ1ZWQgYXMgcGVybWlzc2lvbiB0byBhc3NlcnQgb3IgaW1wbHkgdGhhdCBZb3UgYXJlLCBvciB0aGF0IFlvdXIgdXNlIG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBpcywgY29ubmVjdGVkIHdpdGgsIG9yIHNwb25zb3JlZCwgZW5kb3JzZWQsIG9yIGdyYW50ZWQgb2ZmaWNpYWwgc3RhdHVzIGJ5LCB0aGUgTGljZW5zb3Igb3Igb3RoZXJzIGRlc2lnbmF0ZWQgdG8gcmVjZWl2ZSBhdHRyaWJ1dGlvbiBhcyBwcm92aWRlZCBpbiBTZWN0aW9uIDMoYSkoMSkoQSkoaSkuXG5cbiAgIGIuIE90aGVyIHJpZ2h0cy5cblxuICAgICAgMS4gTW9yYWwgcmlnaHRzLCBzdWNoIGFzIHRoZSByaWdodCBvZiBpbnRlZ3JpdHksIGFyZSBub3QgbGljZW5zZWQgdW5kZXIgdGhpcyBQdWJsaWMgTGljZW5zZSwgbm9yIGFyZSBwdWJsaWNpdHksIHByaXZhY3ksIGFuZC9vciBvdGhlciBzaW1pbGFyIHBlcnNvbmFsaXR5IHJpZ2h0czsgaG93ZXZlciwgdG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhlIExpY2Vuc29yIHdhaXZlcyBhbmQvb3IgYWdyZWVzIG5vdCB0byBhc3NlcnQgYW55IHN1Y2ggcmlnaHRzIGhlbGQgYnkgdGhlIExpY2Vuc29yIHRvIHRoZSBsaW1pdGVkIGV4dGVudCBuZWNlc3NhcnkgdG8gYWxsb3cgWW91IHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMsIGJ1dCBub3Qgb3RoZXJ3aXNlLlxuXG4gICAgICAyLiBQYXRlbnQgYW5kIHRyYWRlbWFyayByaWdodHMgYXJlIG5vdCBsaWNlbnNlZCB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICAgICAzLiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGUgTGljZW5zb3Igd2FpdmVzIGFueSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyBmcm9tIFlvdSBmb3IgdGhlIGV4ZXJjaXNlIG9mIHRoZSBMaWNlbnNlZCBSaWdodHMsIHdoZXRoZXIgZGlyZWN0bHkgb3IgdGhyb3VnaCBhIGNvbGxlY3Rpbmcgc29jaWV0eSB1bmRlciBhbnkgdm9sdW50YXJ5IG9yIHdhaXZhYmxlIHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUuIEluIGFsbCBvdGhlciBjYXNlcyB0aGUgTGljZW5zb3IgZXhwcmVzc2x5IHJlc2VydmVzIGFueSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzLlxuXG5TZWN0aW9uIDMg4oCTIExpY2Vuc2UgQ29uZGl0aW9ucy5cblxuWW91ciBleGVyY2lzZSBvZiB0aGUgTGljZW5zZWQgUmlnaHRzIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zLlxuXG4gICBhLiBBdHRyaWJ1dGlvbi5cblxuICAgICAgMS4gSWYgWW91IFNoYXJlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCAoaW5jbHVkaW5nIGluIG1vZGlmaWVkIGZvcm0pLCBZb3UgbXVzdDpcblxuICAgICAgICAgQS4gcmV0YWluIHRoZSBmb2xsb3dpbmcgaWYgaXQgaXMgc3VwcGxpZWQgYnkgdGhlIExpY2Vuc29yIHdpdGggdGhlIExpY2Vuc2VkIE1hdGVyaWFsOlxuXG4gICAgICAgICAgICBpLiBpZGVudGlmaWNhdGlvbiBvZiB0aGUgY3JlYXRvcihzKSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIGFueSBvdGhlcnMgZGVzaWduYXRlZCB0byByZWNlaXZlIGF0dHJpYnV0aW9uLCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciAoaW5jbHVkaW5nIGJ5IHBzZXVkb255bSBpZiBkZXNpZ25hdGVkKTtcblxuICAgICAgICAgICAgaWkuIGEgY29weXJpZ2h0IG5vdGljZTtcblxuICAgICAgICAgICAgaWlpLiBhIG5vdGljZSB0aGF0IHJlZmVycyB0byB0aGlzIFB1YmxpYyBMaWNlbnNlO1xuXG4gICAgICAgICAgICBpdi4gYSBub3RpY2UgdGhhdCByZWZlcnMgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcztcblxuICAgICAgICAgICAgdi4gYSBVUkkgb3IgaHlwZXJsaW5rIHRvIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGU7XG5cbiAgICAgICAgIEIuIGluZGljYXRlIGlmIFlvdSBtb2RpZmllZCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIHJldGFpbiBhbiBpbmRpY2F0aW9uIG9mIGFueSBwcmV2aW91cyBtb2RpZmljYXRpb25zOyBhbmRcblxuICAgICAgICAgQy4gaW5kaWNhdGUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIGxpY2Vuc2VkIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UsIGFuZCBpbmNsdWRlIHRoZSB0ZXh0IG9mLCBvciB0aGUgVVJJIG9yIGh5cGVybGluayB0bywgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgMi4gWW91IG1heSBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMyhhKSgxKSBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgYmFzZWQgb24gdGhlIG1lZGl1bSwgbWVhbnMsIGFuZCBjb250ZXh0IGluIHdoaWNoIFlvdSBTaGFyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuIEZvciBleGFtcGxlLCBpdCBtYXkgYmUgcmVhc29uYWJsZSB0byBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGJ5IHByb3ZpZGluZyBhIFVSSSBvciBoeXBlcmxpbmsgdG8gYSByZXNvdXJjZSB0aGF0IGluY2x1ZGVzIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi5cblxuICAgICAgMy4gSWYgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciwgWW91IG11c3QgcmVtb3ZlIGFueSBvZiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgU2VjdGlvbiAzKGEpKDEpKEEpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZS5cblxuICAgICAgNC4gSWYgWW91IFNoYXJlIEFkYXB0ZWQgTWF0ZXJpYWwgWW91IHByb2R1Y2UsIHRoZSBBZGFwdGVyJ3MgTGljZW5zZSBZb3UgYXBwbHkgbXVzdCBub3QgcHJldmVudCByZWNpcGllbnRzIG9mIHRoZSBBZGFwdGVkIE1hdGVyaWFsIGZyb20gY29tcGx5aW5nIHdpdGggdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuU2VjdGlvbiA0IOKAkyBTdWkgR2VuZXJpcyBEYXRhYmFzZSBSaWdodHMuXG5cbldoZXJlIHRoZSBMaWNlbnNlZCBSaWdodHMgaW5jbHVkZSBTdWkgR2VuZXJpcyBEYXRhYmFzZSBSaWdodHMgdGhhdCBhcHBseSB0byBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWw6XG5cbiAgIGEuIGZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBTZWN0aW9uIDIoYSkoMSkgZ3JhbnRzIFlvdSB0aGUgcmlnaHQgdG8gZXh0cmFjdCwgcmV1c2UsIHJlcHJvZHVjZSwgYW5kIFNoYXJlIGFsbCBvciBhIHN1YnN0YW50aWFsIHBvcnRpb24gb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBkYXRhYmFzZTtcblxuICAgYi4gaWYgWW91IGluY2x1ZGUgYWxsIG9yIGEgc3Vic3RhbnRpYWwgcG9ydGlvbiBvZiB0aGUgZGF0YWJhc2UgY29udGVudHMgaW4gYSBkYXRhYmFzZSBpbiB3aGljaCBZb3UgaGF2ZSBTdWkgR2VuZXJpcyBEYXRhYmFzZSBSaWdodHMsIHRoZW4gdGhlIGRhdGFiYXNlIGluIHdoaWNoIFlvdSBoYXZlIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cyAoYnV0IG5vdCBpdHMgaW5kaXZpZHVhbCBjb250ZW50cykgaXMgQWRhcHRlZCBNYXRlcmlhbDsgYW5kXG5cbiAgIGMuIFlvdSBtdXN0IGNvbXBseSB3aXRoIHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMyhhKSBpZiBZb3UgU2hhcmUgYWxsIG9yIGEgc3Vic3RhbnRpYWwgcG9ydGlvbiBvZiB0aGUgY29udGVudHMgb2YgdGhlIGRhdGFiYXNlLlxuXG5Gb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyBTZWN0aW9uIDQgc3VwcGxlbWVudHMgYW5kIGRvZXMgbm90IHJlcGxhY2UgWW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlIHdoZXJlIHRoZSBMaWNlbnNlZCBSaWdodHMgaW5jbHVkZSBvdGhlciBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzLlxuXG5TZWN0aW9uIDUg4oCTIERpc2NsYWltZXIgb2YgV2FycmFudGllcyBhbmQgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuXG5cbiAgIGEuIFVubGVzcyBvdGhlcndpc2Ugc2VwYXJhdGVseSB1bmRlcnRha2VuIGJ5IHRoZSBMaWNlbnNvciwgdG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhlIExpY2Vuc29yIG9mZmVycyB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXMtaXMgYW5kIGFzLWF2YWlsYWJsZSwgYW5kIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBvciB3YXJyYW50aWVzIG9mIGFueSBraW5kIGNvbmNlcm5pbmcgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLCB3aGV0aGVyIGV4cHJlc3MsIGltcGxpZWQsIHN0YXR1dG9yeSwgb3Igb3RoZXIuIFRoaXMgaW5jbHVkZXMsIHdpdGhvdXQgbGltaXRhdGlvbiwgd2FycmFudGllcyBvZiB0aXRsZSwgbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgbm9uLWluZnJpbmdlbWVudCwgYWJzZW5jZSBvZiBsYXRlbnQgb3Igb3RoZXIgZGVmZWN0cywgYWNjdXJhY3ksIG9yIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGVycm9ycywgd2hldGhlciBvciBub3Qga25vd24gb3IgZGlzY292ZXJhYmxlLiBXaGVyZSBkaXNjbGFpbWVycyBvZiB3YXJyYW50aWVzIGFyZSBub3QgYWxsb3dlZCBpbiBmdWxsIG9yIGluIHBhcnQsIHRoaXMgZGlzY2xhaW1lciBtYXkgbm90IGFwcGx5IHRvIFlvdS5cblxuICAgYi4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgaW4gbm8gZXZlbnQgd2lsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIFlvdSBvbiBhbnkgbGVnYWwgdGhlb3J5IChpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgbmVnbGlnZW5jZSkgb3Igb3RoZXJ3aXNlIGZvciBhbnkgZGlyZWN0LCBzcGVjaWFsLCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgY29uc2VxdWVudGlhbCwgcHVuaXRpdmUsIGV4ZW1wbGFyeSwgb3Igb3RoZXIgbG9zc2VzLCBjb3N0cywgZXhwZW5zZXMsIG9yIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSBvciB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLCBldmVuIGlmIHRoZSBMaWNlbnNvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGxvc3NlcywgY29zdHMsIGV4cGVuc2VzLCBvciBkYW1hZ2VzLiBXaGVyZSBhIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IGlzIG5vdCBhbGxvd2VkIGluIGZ1bGwgb3IgaW4gcGFydCwgdGhpcyBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LlxuXG4gICBjLiBUaGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZCBhYm92ZSBzaGFsbCBiZSBpbnRlcnByZXRlZCBpbiBhIG1hbm5lciB0aGF0LCB0byB0aGUgZXh0ZW50IHBvc3NpYmxlLCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzIGFuIGFic29sdXRlIGRpc2NsYWltZXIgYW5kIHdhaXZlciBvZiBhbGwgbGlhYmlsaXR5LlxuXG5TZWN0aW9uIDYg4oCTIFRlcm0gYW5kIFRlcm1pbmF0aW9uLlxuXG4gICBhLiBUaGlzIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgZm9yIHRoZSB0ZXJtIG9mIHRoZSBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIGxpY2Vuc2VkIGhlcmUuIEhvd2V2ZXIsIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoaXMgUHVibGljIExpY2Vuc2UsIHRoZW4gWW91ciByaWdodHMgdW5kZXIgdGhpcyBQdWJsaWMgTGljZW5zZSB0ZXJtaW5hdGUgYXV0b21hdGljYWxseS5cblxuICAgYi4gV2hlcmUgWW91ciByaWdodCB0byB1c2UgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGhhcyB0ZXJtaW5hdGVkIHVuZGVyIFNlY3Rpb24gNihhKSwgaXQgcmVpbnN0YXRlczpcblxuICAgICAgMS4gYXV0b21hdGljYWxseSBhcyBvZiB0aGUgZGF0ZSB0aGUgdmlvbGF0aW9uIGlzIGN1cmVkLCBwcm92aWRlZCBpdCBpcyBjdXJlZCB3aXRoaW4gMzAgZGF5cyBvZiBZb3VyIGRpc2NvdmVyeSBvZiB0aGUgdmlvbGF0aW9uOyBvclxuXG4gICAgICAyLiB1cG9uIGV4cHJlc3MgcmVpbnN0YXRlbWVudCBieSB0aGUgTGljZW5zb3IuXG5cbiAgIGMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIFNlY3Rpb24gNihiKSBkb2VzIG5vdCBhZmZlY3QgYW55IHJpZ2h0IHRoZSBMaWNlbnNvciBtYXkgaGF2ZSB0byBzZWVrIHJlbWVkaWVzIGZvciBZb3VyIHZpb2xhdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgZC4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoZSBMaWNlbnNvciBtYXkgYWxzbyBvZmZlciB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgdW5kZXIgc2VwYXJhdGUgdGVybXMgb3IgY29uZGl0aW9ucyBvciBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXQgYW55IHRpbWU7IGhvd2V2ZXIsIGRvaW5nIHNvIHdpbGwgbm90IHRlcm1pbmF0ZSB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICBlLiBTZWN0aW9ucyAxLCA1LCA2LCA3LCBhbmQgOCBzdXJ2aXZlIHRlcm1pbmF0aW9uIG9mIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cblNlY3Rpb24gNyDigJMgT3RoZXIgVGVybXMgYW5kIENvbmRpdGlvbnMuXG5cbiAgIGEuIFRoZSBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IHRlcm1zIG9yIGNvbmRpdGlvbnMgY29tbXVuaWNhdGVkIGJ5IFlvdSB1bmxlc3MgZXhwcmVzc2x5IGFncmVlZC5cblxuICAgYi4gQW55IGFycmFuZ2VtZW50cywgdW5kZXJzdGFuZGluZ3MsIG9yIGFncmVlbWVudHMgcmVnYXJkaW5nIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBub3Qgc3RhdGVkIGhlcmVpbiBhcmUgc2VwYXJhdGUgZnJvbSBhbmQgaW5kZXBlbmRlbnQgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cblNlY3Rpb24gOCDigJMgSW50ZXJwcmV0YXRpb24uXG5cbiAgIGEuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90LCBhbmQgc2hhbGwgbm90IGJlIGludGVycHJldGVkIHRvLCByZWR1Y2UsIGxpbWl0LCByZXN0cmljdCwgb3IgaW1wb3NlIGNvbmRpdGlvbnMgb24gYW55IHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgdGhhdCBjb3VsZCBsYXdmdWxseSBiZSBtYWRlIHdpdGhvdXQgcGVybWlzc2lvbiB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICBiLiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlLCBpZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgUHVibGljIExpY2Vuc2UgaXMgZGVlbWVkIHVuZW5mb3JjZWFibGUsIGl0IHNoYWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBJZiB0aGUgcHJvdmlzaW9uIGNhbm5vdCBiZSByZWZvcm1lZCwgaXQgc2hhbGwgYmUgc2V2ZXJlZCBmcm9tIHRoaXMgUHVibGljIExpY2Vuc2Ugd2l0aG91dCBhZmZlY3RpbmcgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5pbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMuXG5cbiAgIGMuIE5vIHRlcm0gb3IgY29uZGl0aW9uIG9mIHRoaXMgUHVibGljIExpY2Vuc2Ugd2lsbCBiZSB3YWl2ZWQgYW5kIG5vIGZhaWx1cmUgdG8gY29tcGx5IGNvbnNlbnRlZCB0byB1bmxlc3MgZXhwcmVzc2x5IGFncmVlZCB0byBieSB0aGUgTGljZW5zb3IuXG5cbiAgIGQuIE5vdGhpbmcgaW4gdGhpcyBQdWJsaWMgTGljZW5zZSBjb25zdGl0dXRlcyBvciBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBsaW1pdGF0aW9uIHVwb24sIG9yIHdhaXZlciBvZiwgYW55IHByaXZpbGVnZXMgYW5kIGltbXVuaXRpZXMgdGhhdCBhcHBseSB0byB0aGUgTGljZW5zb3Igb3IgWW91LCBpbmNsdWRpbmcgZnJvbSB0aGUgbGVnYWwgcHJvY2Vzc2VzIG9mIGFueSBqdXJpc2RpY3Rpb24gb3IgYXV0aG9yaXR5LlxuXG5DcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIGl0cyBwdWJsaWMgbGljZW5zZXMuIE5vdHdpdGhzdGFuZGluZywgQ3JlYXRpdmUgQ29tbW9ucyBtYXkgZWxlY3QgdG8gYXBwbHkgb25lIG9mIGl0cyBwdWJsaWMgbGljZW5zZXMgdG8gbWF0ZXJpYWwgaXQgcHVibGlzaGVzIGFuZCBpbiB0aG9zZSBpbnN0YW5jZXMgd2lsbCBiZSBjb25zaWRlcmVkIHRoZSBcIkxpY2Vuc29yLlwiIFRoZSB0ZXh0IG9mIHRoZSBDcmVhdGl2ZSBDb21tb25zIHB1YmxpYyBsaWNlbnNlcyBpcyBkZWRpY2F0ZWQgdG8gdGhlIHB1YmxpYyBkb21haW4gdW5kZXIgdGhlIENDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb24uIEV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRoYXQgbWF0ZXJpYWwgaXMgc2hhcmVkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBwdWJsaWMgbGljZW5zZSBvciBhcyBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IHRoZSBDcmVhdGl2ZSBDb21tb25zIHBvbGljaWVzIHB1Ymxpc2hlZCBhdCBjcmVhdGl2ZWNvbW1vbnMub3JnL3BvbGljaWVzLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIG9mIHRoZSB0cmFkZW1hcmsgXCJDcmVhdGl2ZSBDb21tb25zXCIgb3IgYW55IG90aGVyIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCBpdHMgcHJpb3Igd3JpdHRlbiBjb25zZW50IGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBpbiBjb25uZWN0aW9uIHdpdGggYW55IHVuYXV0aG9yaXplZCBtb2RpZmljYXRpb25zIHRvIGFueSBvZiBpdHMgcHVibGljIGxpY2Vuc2VzIG9yIGFueSBvdGhlciBhcnJhbmdlbWVudHMsIHVuZGVyc3RhbmRpbmdzLCBvciBhZ3JlZW1lbnRzIGNvbmNlcm5pbmcgdXNlIG9mIGxpY2Vuc2VkIG1hdGVyaWFsLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyBwYXJhZ3JhcGggZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoZSBwdWJsaWMgbGljZW5zZXMuXG5cbkNyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBjcmVhdGl2ZWNvbW1vbnMub3JnLiJdLCJsaWNlbnNlSWRzIjpbIkNDLUJZLTQuMCJdLCJrZXl3b3JkcyI6WyJsaWNlbnNlIGkgc2hhcmUiLCJwdWJsaWMgbGljZW5zZSBpIHNoYXJlIiwibGljZW5zZSBpIHNoYXJlIG1lYW5zIiwiYXR0cmlidXRpb24gNCAwIGludGVybmF0aW9uYWwgY3JlYXRpdmUiLCJsaWNlbnNlZXMgY3JlYXRpdmUgY29tbW9ucyBhdHRyaWJ1dGlvbiA0IiwidGhpcyBjcmVhdGl2ZSBjb21tb25zIGF0dHJpYnV0aW9uIDQiLCJ0aGlzIHB1YmxpYyBsaWNlbnNlIGkgc2hhcmUiLCJwdWJsaWMgbGljZW5zZSBpIHNoYXJlIG1lYW5zIiwibGljZW5zZSBpIHNoYXJlIG1lYW5zIHRvIl19LHsibGljZW5zZVRleHRzIjpbIkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbCAxLjAgQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOIFwiQVMtSVNcIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuXG5cbkxpY2Vuc2VcblxuVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKFwiQ0NQTFwiIE9SIFwiTElDRU5TRVwiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBJUyBQUk9ISUJJVEVELlxuXG5CWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXG4gICAxLiBEZWZpbml0aW9uc1xuXG4gICAgICBhLiBcIkNvbGxlY3RpdmUgV29ya1wiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gXCJEZXJpdmF0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIFwiTGljZW5zb3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgZC4gXCJPcmlnaW5hbCBBdXRob3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuXG5cbiAgICAgIGUuIFwiV29ya1wiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGYuIFwiWW91XCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi5cblxuICAgMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLlxuXG4gICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6XG5cbiAgICAgIGEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgICAgYi4gdG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrcztcblxuICAgICAgYy4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgICAgZC4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7XG5cbiAgIFRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLlxuXG4gICA0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG5cbiAgICAgIGEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC5cblxuICAgICAgYi4gWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuXG5cbiAgICAgIGMuIElmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sIFwiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvcixcIiBvciBcIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3JcIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuXG5cbiAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lclxuXG4gICBCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcidzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6IExpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsgVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LiBFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy5cblxuICAgNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuICAgNy4gVGVybWluYXRpb25cblxuICAgICAgYS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS5cblxuICAgOC4gTWlzY2VsbGFuZW91c1xuXG4gICAgICBhLiBFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS5cblxuICAgICAgZC4gTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC5cblxuICAgICAgZS4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuXG5cbkNyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLlxuXG5FeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayBcIkNyZWF0aXZlIENvbW1vbnNcIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zJyB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS5cblxuQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4iXSwibGljZW5zZUlkcyI6WyJDQy1CWS1OQy0xLjAiXSwia2V5d29yZHMiOlsiYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCAxIiwiYW5kIGRpc2NsYWltZXIgYnkiLCJkaXNjbGFpbWVyIGJ5IG9mZmVyaW5nIiwicmVhc29uYWJsZSBpbnF1aXJ5IGxpY2Vuc29yIiwiaW5xdWlyeSBsaWNlbnNvciBoYXMiLCJvdGhlciBwYXltZW50cyB0aGUiLCJwYXltZW50cyB0aGUgd29yayIsInBhcnR5IGV4Y2VwdCBhcyIsImNvbW1vbnMgYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCAxIiwiYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCAxIDAiLCJ3YXJyYW50aWVzIGFuZCBkaXNjbGFpbWVyIGJ5IiwiYW5kIGRpc2NsYWltZXIgYnkgb2ZmZXJpbmciLCJkaXNjbGFpbWVyIGJ5IG9mZmVyaW5nIHRoZSIsImFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeSBsaWNlbnNvciIsInJlYXNvbmFibGUgaW5xdWlyeSBsaWNlbnNvciBoYXMiLCJpbnF1aXJ5IGxpY2Vuc29yIGhhcyBzZWN1cmVkIiwiYW55IG90aGVyIHBheW1lbnRzIHRoZSIsIm90aGVyIHBheW1lbnRzIHRoZSB3b3JrIiwicGF5bWVudHMgdGhlIHdvcmsgZG9lcyIsInRoaXJkIHBhcnR5IGV4Y2VwdCBhcyIsInBhcnR5IGV4Y2VwdCBhcyBleHByZXNzbHkiLCJjcmVhdGl2ZSBjb21tb25zIGF0dHJpYnV0aW9uIG5vbmNvbW1lcmNpYWwgMSIsImNvbW1vbnMgYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCAxIDAiLCJhdHRyaWJ1dGlvbiBub25jb21tZXJjaWFsIDEgMCBjcmVhdGl2ZSIsInJlcHJlc2VudGF0aW9ucyB3YXJyYW50aWVzIGFuZCBkaXNjbGFpbWVyIGJ5Iiwid2FycmFudGllcyBhbmQgZGlzY2xhaW1lciBieSBvZmZlcmluZyIsImFuZCBkaXNjbGFpbWVyIGJ5IG9mZmVyaW5nIHRoZSIsImRpc2NsYWltZXIgYnkgb2ZmZXJpbmcgdGhlIHdvcmsiLCJrbm93bGVkZ2UgYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5IGxpY2Vuc29yIiwiYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5IGxpY2Vuc29yIGhhcyIsInJlYXNvbmFibGUgaW5xdWlyeSBsaWNlbnNvciBoYXMgc2VjdXJlZCIsImlucXVpcnkgbGljZW5zb3IgaGFzIHNlY3VyZWQgYWxsIiwib3IgYW55IG90aGVyIHBheW1lbnRzIHRoZSIsImFueSBvdGhlciBwYXltZW50cyB0aGUgd29yayIsIm90aGVyIHBheW1lbnRzIHRoZSB3b3JrIGRvZXMiLCJwYXltZW50cyB0aGUgd29yayBkb2VzIG5vdCIsInRvIGFueSB0aGlyZCBwYXJ0eSBleGNlcHQiLCJhbnkgdGhpcmQgcGFydHkgZXhjZXB0IGFzIiwidGhpcmQgcGFydHkgZXhjZXB0IGFzIGV4cHJlc3NseSIsInBhcnR5IGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIl19LHsibGljZW5zZVRleHRzIjpbIkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbCAyLjAgQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOIFwiQVMtSVNcIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuXG5cbkxpY2Vuc2VcblxuVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKFwiQ0NQTFwiIE9SIFwiTElDRU5TRVwiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuXG5cbkJZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cbiAgIDEuIERlZmluaXRpb25zXG5cbiAgICAgIGEuIFwiQ29sbGVjdGl2ZSBXb3JrXCIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBcIkRlcml2YXRpdmUgV29ya1wiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoXCJzeW5jaGluZ1wiKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gXCJMaWNlbnNvclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBkLiBcIk9yaWdpbmFsIEF1dGhvclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay5cblxuICAgICAgZS4gXCJXb3JrXCIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgZi4gXCJZb3VcIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLlxuXG4gICAyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuXG5cbiAgIDMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzpcblxuICAgICAgYS4gdG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzO1xuXG4gICAgICBiLiB0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzO1xuXG4gICAgICBjLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzO1xuXG4gICAgICBkLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrcztcblxuICAgICAgVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChkKSBhbmQgNChlKS5cblxuICAgNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG5cbiAgICAgIGEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC5cblxuICAgICAgYi4gWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuXG5cbiAgICAgIGMuIElmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgXCJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLFwiIG9yIFwiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvclwiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC5cblxuICAgICAgZC4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjpcblxuICAgICAgICAgaS4gUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsgaWYgdGhhdCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi5cblxuICAgICAgICAgaWkuIE1lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrIChcImNvdmVyIHZlcnNpb25cIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY292ZXIgdmVyc2lvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uXG5cbiAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lclxuXG4gICBVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICA2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG4gICA3LiBUZXJtaW5hdGlvblxuXG4gICAgICBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLlxuXG4gICA4LiBNaXNjZWxsYW5lb3VzXG5cbiAgICAgIGEuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICAgICBkLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LlxuXG4gICAgICBlLiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS5cblxuQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuXG5cbkV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrIFwiQ3JlYXRpdmUgQ29tbW9uc1wiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnMnIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLlxuXG5DcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLiJdLCJsaWNlbnNlSWRzIjpbIkNDLUJZLU5DLTIuMCJdLCJrZXl3b3JkcyI6WyJub25jb21tZXJjaWFsIDIgMCIsIm1vbmV0YXJ5IGNvbXBlbnNhdGlvbiB3ZWJjYXN0aW5nIiwiY29tcGVuc2F0aW9uIHdlYmNhc3RpbmcgcmlnaHRzIiwiYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCAyIDAiLCJub25jb21tZXJjaWFsIDIgMCBjcmVhdGl2ZSIsInByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uIHdlYmNhc3RpbmciLCJtb25ldGFyeSBjb21wZW5zYXRpb24gd2ViY2FzdGluZyByaWdodHMiLCJjb21wZW5zYXRpb24gd2ViY2FzdGluZyByaWdodHMgYW5kIiwiY29tbW9ucyBhdHRyaWJ1dGlvbiBub25jb21tZXJjaWFsIDIgMCIsImF0dHJpYnV0aW9uIG5vbmNvbW1lcmNpYWwgMiAwIGNyZWF0aXZlIiwibm9uY29tbWVyY2lhbCAyIDAgY3JlYXRpdmUgY29tbW9ucyIsIm9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uIHdlYmNhc3RpbmciLCJwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiB3ZWJjYXN0aW5nIHJpZ2h0cyIsIm1vbmV0YXJ5IGNvbXBlbnNhdGlvbiB3ZWJjYXN0aW5nIHJpZ2h0cyBhbmQiLCJjb21wZW5zYXRpb24gd2ViY2FzdGluZyByaWdodHMgYW5kIHN0YXR1dG9yeSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwgMi41IENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiBcIkFTLUlTXCIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLlxuXG5MaWNlbnNlXG5cblRIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFIChcIkNDUExcIiBPUiBcIkxJQ0VOU0VcIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELlxuXG5CWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXG4gICAxLiBEZWZpbml0aW9uc1xuXG4gICAgICBhLiBcIkNvbGxlY3RpdmUgV29ya1wiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gXCJEZXJpdmF0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKFwic3luY2hpbmdcIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIFwiTGljZW5zb3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gXCJPcmlnaW5hbCBBdXRob3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuXG5cbiAgICAgIGQuIFwiV29ya1wiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGUuIFwiWW91XCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi5cblxuICAgMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLlxuXG4gICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6XG5cbiAgICAgIGEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgICAgYi4gdG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrcztcblxuICAgICAgYy4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgICAgZC4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7XG5cbiAgICAgIFRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZCkgYW5kIDQoZSkuXG5cbiAgIDQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAgICBhLiBZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLlxuXG4gICAgICBiLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChjKSwgYXMgcmVxdWVzdGVkLiBZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy5cblxuICAgICAgYy4gSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yJ3MgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCBcIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsXCIgb3IgXCJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yXCIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LlxuXG4gICAgICBkLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOlxuXG4gICAgICAgICBpLiBQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yayBpZiB0aGF0IHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLlxuXG4gICAgICAgICBpaS4gTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKFwiY292ZXIgdmVyc2lvblwiKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLlxuXG4gICAgICBlLiBXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi5cblxuICAgNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyXG5cbiAgIFVOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDcuIFRlcm1pbmF0aW9uXG5cbiAgICAgIGEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuXG5cbiAgIDguIE1pc2NlbGxhbmVvdXNcblxuICAgICAgYS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuXG5cbiAgICAgIGQuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuXG5cbiAgICAgIGUuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LlxuXG5DcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci5cblxuRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgXCJDcmVhdGl2ZSBDb21tb25zXCIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuXG5cbkNyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uIl0sImxpY2Vuc2VJZHMiOlsiQ0MtQlktTkMtMi41Il0sImtleXdvcmRzIjpbIm5vbmNvbW1lcmNpYWwgMiA1IiwidGhpcyBsaWNlbnNlIG9yaWdpbmFsIiwibGljZW5zZSBvcmlnaW5hbCBhdXRob3IiLCJ3b3JrIGQgd29yayIsImQgd29yayBtZWFucyIsImxpY2Vuc2UgZSB5b3UiLCJlIHlvdSBtZWFucyIsImdyYW50ZWQgaGVyZXVuZGVyIGIiLCJoZXJldW5kZXIgYiB5b3UiLCJhcyByZXF1ZXN0ZWQgeW91IiwicmVxdWVzdGVkIHlvdSBtYXkiLCJuYW1lIG9mIG9yaWdpbmFsIiwib2Ygb3JpZ2luYWwgYXV0aG9yIiwiYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCAyIDUiLCJub25jb21tZXJjaWFsIDIgNSBjcmVhdGl2ZSIsIm9mIHRoaXMgbGljZW5zZSBvcmlnaW5hbCIsInRoaXMgbGljZW5zZSBvcmlnaW5hbCBhdXRob3IiLCJsaWNlbnNlIG9yaWdpbmFsIGF1dGhvciBtZWFucyIsImNyZWF0ZWQgdGhlIHdvcmsgZCIsInRoZSB3b3JrIGQgd29yayIsIndvcmsgZCB3b3JrIG1lYW5zIiwiZCB3b3JrIG1lYW5zIHRoZSIsInRoaXMgbGljZW5zZSBlIHlvdSIsImxpY2Vuc2UgZSB5b3UgbWVhbnMiLCJlIHlvdSBtZWFucyBhbiIsInJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciBiIiwiZ3JhbnRlZCBoZXJldW5kZXIgYiB5b3UiLCJoZXJldW5kZXIgYiB5b3UgbWF5IiwiYyBhcyByZXF1ZXN0ZWQgeW91IiwiYXMgcmVxdWVzdGVkIHlvdSBtYXkiLCJyZXF1ZXN0ZWQgeW91IG1heSBub3QiLCJ0aGUgbmFtZSBvZiBvcmlnaW5hbCIsIm5hbWUgb2Ygb3JpZ2luYWwgYXV0aG9yIiwib2Ygb3JpZ2luYWwgYXV0aG9yIG9yIiwiY29tbW9ucyBhdHRyaWJ1dGlvbiBub25jb21tZXJjaWFsIDIgNSIsImF0dHJpYnV0aW9uIG5vbmNvbW1lcmNpYWwgMiA1IGNyZWF0aXZlIiwibm9uY29tbWVyY2lhbCAyIDUgY3JlYXRpdmUgY29tbW9ucyIsInRlcm1zIG9mIHRoaXMgbGljZW5zZSBvcmlnaW5hbCIsIm9mIHRoaXMgbGljZW5zZSBvcmlnaW5hbCBhdXRob3IiLCJ0aGlzIGxpY2Vuc2Ugb3JpZ2luYWwgYXV0aG9yIG1lYW5zIiwibGljZW5zZSBvcmlnaW5hbCBhdXRob3IgbWVhbnMgdGhlIiwid2hvIGNyZWF0ZWQgdGhlIHdvcmsgZCIsImNyZWF0ZWQgdGhlIHdvcmsgZCB3b3JrIiwidGhlIHdvcmsgZCB3b3JrIG1lYW5zIiwid29yayBkIHdvcmsgbWVhbnMgdGhlIiwiZCB3b3JrIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIiwib2YgdGhpcyBsaWNlbnNlIGUgeW91IiwidGhpcyBsaWNlbnNlIGUgeW91IG1lYW5zIiwibGljZW5zZSBlIHlvdSBtZWFucyBhbiIsImUgeW91IG1lYW5zIGFuIGluZGl2aWR1YWwiLCJ0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIGIiLCJyaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgYiB5b3UiLCJncmFudGVkIGhlcmV1bmRlciBiIHlvdSBtYXkiLCJoZXJldW5kZXIgYiB5b3UgbWF5IG5vdCIsImIgeW91IG1heSBub3Qgc3VibGljZW5zZSIsIjQgYyBhcyByZXF1ZXN0ZWQgeW91IiwiYyBhcyByZXF1ZXN0ZWQgeW91IG1heSIsImFzIHJlcXVlc3RlZCB5b3UgbWF5IG5vdCIsInJlcXVlc3RlZCB5b3UgbWF5IG5vdCBleGVyY2lzZSIsImkgdGhlIG5hbWUgb2Ygb3JpZ2luYWwiLCJ0aGUgbmFtZSBvZiBvcmlnaW5hbCBhdXRob3IiLCJuYW1lIG9mIG9yaWdpbmFsIGF1dGhvciBvciIsIm9mIG9yaWdpbmFsIGF1dGhvciBvciBwc2V1ZG9ueW0iXX0seyJsaWNlbnNlVGV4dHMiOlsiQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsIDMuMCBVbnBvcnRlZCBDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gXCJBUy1JU1wiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS5cblxuTGljZW5zZVxuXG5USEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoXCJDQ1BMXCIgT1IgXCJMSUNFTlNFXCIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC5cblxuQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRPIFRIRSBFWFRFTlQgVEhJUyBMSUNFTlNFIE1BWSBCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy5cblxuICAgMS4gRGVmaW5pdGlvbnNcblxuICAgICAgYS4gXCJBZGFwdGF0aW9uXCIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKFwic3luY2hpbmdcIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gXCJDb2xsZWN0aW9uXCIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIFwiRGlzdHJpYnV0ZVwiIG1lYW5zIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdGhlIG9yaWdpbmFsIGFuZCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgQWRhcHRhdGlvbiwgYXMgYXBwcm9wcmlhdGUsIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuXG5cbiAgICAgIGQuIFwiTGljZW5zb3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGUuIFwiT3JpZ2luYWwgQXV0aG9yXCIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LlxuXG4gICAgICBmLiBcIldvcmtcIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuXG5cbiAgICAgIGcuIFwiWW91XCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi5cblxuICAgICAgaC4gXCJQdWJsaWNseSBQZXJmb3JtXCIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsgYW5kIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgdGhvc2UgcHVibGljIHJlY2l0YXRpb25zLCBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2ggYSB3YXkgdGhhdCBtZW1iZXJzIG9mIHRoZSBwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb2YgdGhlIHBlcmZvcm1hbmNlcyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIGJ5IHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlOyB0byBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuXG5cbiAgICAgIGkuIFwiUmVwcm9kdWNlXCIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLlxuXG4gICAyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy5cblxuICAgMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OlxuXG4gICAgICBhLiB0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9ucztcblxuICAgICAgYi4gdG8gY3JlYXRlIGFuZCBSZXByb2R1Y2UgQWRhcHRhdGlvbnMgcHJvdmlkZWQgdGhhdCBhbnkgc3VjaCBBZGFwdGF0aW9uLCBpbmNsdWRpbmcgYW55IHRyYW5zbGF0aW9uIGluIGFueSBtZWRpdW0sIHRha2VzIHJlYXNvbmFibGUgc3RlcHMgdG8gY2xlYXJseSBsYWJlbCwgZGVtYXJjYXRlIG9yIG90aGVyd2lzZSBpZGVudGlmeSB0aGF0IGNoYW5nZXMgd2VyZSBtYWRlIHRvIHRoZSBvcmlnaW5hbCBXb3JrLiBGb3IgZXhhbXBsZSwgYSB0cmFuc2xhdGlvbiBjb3VsZCBiZSBtYXJrZWQgXCJUaGUgb3JpZ2luYWwgd29yayB3YXMgdHJhbnNsYXRlZCBmcm9tIEVuZ2xpc2ggdG8gU3BhbmlzaCxcIiBvciBhIG1vZGlmaWNhdGlvbiBjb3VsZCBpbmRpY2F0ZSBcIlRoZSBvcmlnaW5hbCB3b3JrIGhhcyBiZWVuIG1vZGlmaWVkLlwiO1xuXG4gICAgICBjLiB0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGlvbnM7IGFuZCxcblxuICAgICAgZC4gdG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSBBZGFwdGF0aW9ucy5cblxuICAgICAgVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIFN1YmplY3QgdG8gU2VjdGlvbiA4KGYpLCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gNChkKS5cblxuICAgNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAgICBhLiBZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYyksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhbiBBZGFwdGF0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIEFkYXB0YXRpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYyksIGFzIHJlcXVlc3RlZC5cblxuICAgICAgYi4gWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuXG5cbiAgICAgIGMuIElmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIChcIkF0dHJpYnV0aW9uIFBhcnRpZXNcIikgaW4gTGljZW5zb3IncyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQsIChpdikgY29uc2lzdGVudCB3aXRoIFNlY3Rpb24gMyhiKSwgaW4gdGhlIGNhc2Ugb2YgYW4gQWRhcHRhdGlvbiwgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgQWRhcHRhdGlvbiAoZS5nLiwgXCJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLFwiIG9yIFwiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvclwiKS4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNChjKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy5cblxuICAgICAgZC4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6XG5cbiAgICAgICAgIGkuIE5vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7XG5cbiAgICAgICAgIGlpLiBXYWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgaWYgWW91ciBleGVyY2lzZSBvZiBzdWNoIHJpZ2h0cyBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYikgYW5kIG90aGVyd2lzZSB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWU7IGFuZCxcblxuICAgICAgICAgaWlpLiBWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSB0aGF0IGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChjKS5cblxuICAgICAgZS4gRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3IncyBob25vciBvciByZXB1dGF0aW9uLiBMaWNlbnNvciBhZ3JlZXMgdGhhdCBpbiB0aG9zZSBqdXJpc2RpY3Rpb25zIChlLmcuIEphcGFuKSwgaW4gd2hpY2ggYW55IGV4ZXJjaXNlIG9mIHRoZSByaWdodCBncmFudGVkIGluIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHRoZSByaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSB3b3VsZCBiZSBkZWVtZWQgdG8gYmUgYSBkaXN0b3J0aW9uLCBtdXRpbGF0aW9uLCBtb2RpZmljYXRpb24gb3Igb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcidzIGhvbm9yIGFuZCByZXB1dGF0aW9uLCB0aGUgTGljZW5zb3Igd2lsbCB3YWl2ZSBvciBub3QgYXNzZXJ0LCBhcyBhcHByb3ByaWF0ZSwgdGhpcyBTZWN0aW9uLCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdywgdG8gZW5hYmxlIFlvdSB0byByZWFzb25hYmx5IGV4ZXJjaXNlIFlvdXIgcmlnaHQgdW5kZXIgU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAocmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgYnV0IG5vdCBvdGhlcndpc2UuXG5cbiAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lclxuXG4gICBVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICA2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG4gICA3LiBUZXJtaW5hdGlvblxuXG4gICAgICBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuXG5cbiAgIDguIE1pc2NlbGxhbmVvdXNcblxuICAgICAgYS4gRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiwgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICAgICBkLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LlxuXG4gICAgICBlLiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS5cblxuICAgICAgZi4gVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgdGhlIFByb3RlY3Rpb24gb2YgTGl0ZXJhcnkgYW5kIEFydGlzdGljIFdvcmtzIChhcyBhbWVuZGVkIG9uIFNlcHRlbWJlciAyOCwgMTk3OSksIHRoZSBSb21lIENvbnZlbnRpb24gb2YgMTk2MSwgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYgYW5kIHRoZSBVbml2ZXJzYWwgQ29weXJpZ2h0IENvbnZlbnRpb24gKGFzIHJldmlzZWQgb24gSnVseSAyNCwgMTk3MSkuIFRoZXNlIHJpZ2h0cyBhbmQgc3ViamVjdCBtYXR0ZXIgdGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSB0cmVhdHkgcHJvdmlzaW9ucyBpbiB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBzdWNoIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBkZWVtZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy5cblxuQ3JlYXRpdmUgQ29tbW9ucyBOb3RpY2VcblxuQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuXG5cbkV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayBcIkNyZWF0aXZlIENvbW1vbnNcIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zJyB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGUgTGljZW5zZS5cblxuQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4iXSwibGljZW5zZUlkcyI6WyJDQy1CWS1OQy0zLjAiXSwia2V5d29yZHMiOlsiYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCAzIiwibm9uY29tbWVyY2lhbCAzIDAiLCI0IGMgZSIsImMgZSBleGNlcHQiLCJjb21tb25zIGF0dHJpYnV0aW9uIG5vbmNvbW1lcmNpYWwgMyIsImF0dHJpYnV0aW9uIG5vbmNvbW1lcmNpYWwgMyAwIiwibm9uY29tbWVyY2lhbCAzIDAgdW5wb3J0ZWQiLCJzZWN0aW9uIDQgYyBlIiwiNCBjIGUgZXhjZXB0IiwiYyBlIGV4Y2VwdCBhcyIsImNyZWF0aXZlIGNvbW1vbnMgYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCAzIiwiY29tbW9ucyBhdHRyaWJ1dGlvbiBub25jb21tZXJjaWFsIDMgMCIsImF0dHJpYnV0aW9uIG5vbmNvbW1lcmNpYWwgMyAwIHVucG9ydGVkIiwibm9uY29tbWVyY2lhbCAzIDAgdW5wb3J0ZWQgY3JlYXRpdmUiLCJ1bmRlciBzZWN0aW9uIDQgYyBlIiwic2VjdGlvbiA0IGMgZSBleGNlcHQiLCI0IGMgZSBleGNlcHQgYXMiLCJjIGUgZXhjZXB0IGFzIG90aGVyd2lzZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwgNC4wIEludGVybmF0aW9uYWwgQ3JlYXRpdmUgQ29tbW9ucyBDb3Jwb3JhdGlvbiAoXCJDcmVhdGl2ZSBDb21tb25zXCIpIGlzIG5vdCBhIGxhdyBmaXJtIGFuZCBkb2VzIG5vdCBwcm92aWRlIGxlZ2FsIHNlcnZpY2VzIG9yIGxlZ2FsIGFkdmljZS4gRGlzdHJpYnV0aW9uIG9mIENyZWF0aXZlIENvbW1vbnMgcHVibGljIGxpY2Vuc2VzIGRvZXMgbm90IGNyZWF0ZSBhIGxhd3llci1jbGllbnQgb3Igb3RoZXIgcmVsYXRpb25zaGlwLiBDcmVhdGl2ZSBDb21tb25zIG1ha2VzIGl0cyBsaWNlbnNlcyBhbmQgcmVsYXRlZCBpbmZvcm1hdGlvbiBhdmFpbGFibGUgb24gYW4gXCJhcy1pc1wiIGJhc2lzLiBDcmVhdGl2ZSBDb21tb25zIGdpdmVzIG5vIHdhcnJhbnRpZXMgcmVnYXJkaW5nIGl0cyBsaWNlbnNlcywgYW55IG1hdGVyaWFsIGxpY2Vuc2VkIHVuZGVyIHRoZWlyIHRlcm1zIGFuZCBjb25kaXRpb25zLCBvciBhbnkgcmVsYXRlZCBpbmZvcm1hdGlvbi4gQ3JlYXRpdmUgQ29tbW9ucyBkaXNjbGFpbXMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcyByZXN1bHRpbmcgZnJvbSB0aGVpciB1c2UgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBvc3NpYmxlLlxuXG5Vc2luZyBDcmVhdGl2ZSBDb21tb25zIFB1YmxpYyBMaWNlbnNlc1xuXG5DcmVhdGl2ZSBDb21tb25zIHB1YmxpYyBsaWNlbnNlcyBwcm92aWRlIGEgc3RhbmRhcmQgc2V0IG9mIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgY3JlYXRvcnMgYW5kIG90aGVyIHJpZ2h0cyBob2xkZXJzIG1heSB1c2UgdG8gc2hhcmUgb3JpZ2luYWwgd29ya3Mgb2YgYXV0aG9yc2hpcCBhbmQgb3RoZXIgbWF0ZXJpYWwgc3ViamVjdCB0byBjb3B5cmlnaHQgYW5kIGNlcnRhaW4gb3RoZXIgcmlnaHRzIHNwZWNpZmllZCBpbiB0aGUgcHVibGljIGxpY2Vuc2UgYmVsb3cuIFRoZSBmb2xsb3dpbmcgY29uc2lkZXJhdGlvbnMgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHksIGFyZSBub3QgZXhoYXVzdGl2ZSwgYW5kIGRvIG5vdCBmb3JtIHBhcnQgb2Ygb3VyIGxpY2Vuc2VzLlxuXG4gICBcblxuICAgQ29uc2lkZXJhdGlvbnMgZm9yIGxpY2Vuc29yczogT3VyIHB1YmxpYyBsaWNlbnNlcyBhcmUgaW50ZW5kZWQgZm9yIHVzZSBieSB0aG9zZSBhdXRob3JpemVkIHRvIGdpdmUgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSBtYXRlcmlhbCBpbiB3YXlzIG90aGVyd2lzZSByZXN0cmljdGVkIGJ5IGNvcHlyaWdodCBhbmQgY2VydGFpbiBvdGhlciByaWdodHMuIE91ciBsaWNlbnNlcyBhcmUgaXJyZXZvY2FibGUuIExpY2Vuc29ycyBzaG91bGQgcmVhZCBhbmQgdW5kZXJzdGFuZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2UgdGhleSBjaG9vc2UgYmVmb3JlIGFwcGx5aW5nIGl0LiBMaWNlbnNvcnMgc2hvdWxkIGFsc28gc2VjdXJlIGFsbCByaWdodHMgbmVjZXNzYXJ5IGJlZm9yZSBhcHBseWluZyBvdXIgbGljZW5zZXMgc28gdGhhdCB0aGUgcHVibGljIGNhbiByZXVzZSB0aGUgbWF0ZXJpYWwgYXMgZXhwZWN0ZWQuIExpY2Vuc29ycyBzaG91bGQgY2xlYXJseSBtYXJrIGFueSBtYXRlcmlhbCBub3Qgc3ViamVjdCB0byB0aGUgbGljZW5zZS4gVGhpcyBpbmNsdWRlcyBvdGhlciBDQy1saWNlbnNlZCBtYXRlcmlhbCwgb3IgbWF0ZXJpYWwgdXNlZCB1bmRlciBhbiBleGNlcHRpb24gb3IgbGltaXRhdGlvbiB0byBjb3B5cmlnaHQuIE1vcmUgY29uc2lkZXJhdGlvbnMgZm9yIGxpY2Vuc29ycyA6IHdpa2kuY3JlYXRpdmVjb21tb25zLm9yZy9Db25zaWRlcmF0aW9uc19mb3JfbGljZW5zb3JzXG5cbiAgIFxuXG4gICBDb25zaWRlcmF0aW9ucyBmb3IgdGhlIHB1YmxpYzogQnkgdXNpbmcgb25lIG9mIG91ciBwdWJsaWMgbGljZW5zZXMsIGEgbGljZW5zb3IgZ3JhbnRzIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIGxpY2Vuc2VkIG1hdGVyaWFsIHVuZGVyIHNwZWNpZmllZCB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgdGhlIGxpY2Vuc29yJ3MgcGVybWlzc2lvbiBpcyBub3QgbmVjZXNzYXJ5IGZvciBhbnkgcmVhc29u4oCTZm9yIGV4YW1wbGUsIGJlY2F1c2Ugb2YgYW55IGFwcGxpY2FibGUgZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gY29weXJpZ2h04oCTdGhlbiB0aGF0IHVzZSBpcyBub3QgcmVndWxhdGVkIGJ5IHRoZSBsaWNlbnNlLiBPdXIgbGljZW5zZXMgZ3JhbnQgb25seSBwZXJtaXNzaW9ucyB1bmRlciBjb3B5cmlnaHQgYW5kIGNlcnRhaW4gb3RoZXIgcmlnaHRzIHRoYXQgYSBsaWNlbnNvciBoYXMgYXV0aG9yaXR5IHRvIGdyYW50LiBVc2Ugb2YgdGhlIGxpY2Vuc2VkIG1hdGVyaWFsIG1heSBzdGlsbCBiZSByZXN0cmljdGVkIGZvciBvdGhlciByZWFzb25zLCBpbmNsdWRpbmcgYmVjYXVzZSBvdGhlcnMgaGF2ZSBjb3B5cmlnaHQgb3Igb3RoZXIgcmlnaHRzIGluIHRoZSBtYXRlcmlhbC4gQSBsaWNlbnNvciBtYXkgbWFrZSBzcGVjaWFsIHJlcXVlc3RzLCBzdWNoIGFzIGFza2luZyB0aGF0IGFsbCBjaGFuZ2VzIGJlIG1hcmtlZCBvciBkZXNjcmliZWQuIEFsdGhvdWdoIG5vdCByZXF1aXJlZCBieSBvdXIgbGljZW5zZXMsIHlvdSBhcmUgZW5jb3VyYWdlZCB0byByZXNwZWN0IHRob3NlIHJlcXVlc3RzIHdoZXJlIHJlYXNvbmFibGUuIE1vcmUgY29uc2lkZXJhdGlvbnMgZm9yIHRoZSBwdWJsaWMgOiB3aWtpLmNyZWF0aXZlY29tbW9ucy5vcmcvQ29uc2lkZXJhdGlvbnNfZm9yX2xpY2Vuc2VlcyBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwgNC4wIEludGVybmF0aW9uYWwgUHVibGljIExpY2Vuc2VcblxuQnkgZXhlcmNpc2luZyB0aGUgTGljZW5zZWQgUmlnaHRzIChkZWZpbmVkIGJlbG93KSwgWW91IGFjY2VwdCBhbmQgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsIDQuMCBJbnRlcm5hdGlvbmFsIFB1YmxpYyBMaWNlbnNlIChcIlB1YmxpYyBMaWNlbnNlXCIpLiBUbyB0aGUgZXh0ZW50IHRoaXMgUHVibGljIExpY2Vuc2UgbWF5IGJlIGludGVycHJldGVkIGFzIGEgY29udHJhY3QsIFlvdSBhcmUgZ3JhbnRlZCB0aGUgTGljZW5zZWQgUmlnaHRzIGluIGNvbnNpZGVyYXRpb24gb2YgWW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBhbmQgdGhlIExpY2Vuc29yIGdyYW50cyBZb3Ugc3VjaCByaWdodHMgaW4gY29uc2lkZXJhdGlvbiBvZiBiZW5lZml0cyB0aGUgTGljZW5zb3IgcmVjZWl2ZXMgZnJvbSBtYWtpbmcgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGF2YWlsYWJsZSB1bmRlciB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgXG5cbiAgIFNlY3Rpb24gMSDigJMgRGVmaW5pdGlvbnMuXG5cbiAgICAgIGEuIEFkYXB0ZWQgTWF0ZXJpYWwgbWVhbnMgbWF0ZXJpYWwgc3ViamVjdCB0byBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIHRoYXQgaXMgZGVyaXZlZCBmcm9tIG9yIGJhc2VkIHVwb24gdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGFuZCBpbiB3aGljaCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaXMgdHJhbnNsYXRlZCwgYWx0ZXJlZCwgYXJyYW5nZWQsIHRyYW5zZm9ybWVkLCBvciBvdGhlcndpc2UgbW9kaWZpZWQgaW4gYSBtYW5uZXIgcmVxdWlyaW5nIHBlcm1pc3Npb24gdW5kZXIgdGhlIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgaGVsZCBieSB0aGUgTGljZW5zb3IuIEZvciBwdXJwb3NlcyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLCB3aGVyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlLCBvciBzb3VuZCByZWNvcmRpbmcsIEFkYXB0ZWQgTWF0ZXJpYWwgaXMgYWx3YXlzIHByb2R1Y2VkIHdoZXJlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBpcyBzeW5jaGVkIGluIHRpbWVkIHJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UuXG5cbiAgICAgIGIuIEFkYXB0ZXIncyBMaWNlbnNlIG1lYW5zIHRoZSBsaWNlbnNlIFlvdSBhcHBseSB0byBZb3VyIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgaW4gWW91ciBjb250cmlidXRpb25zIHRvIEFkYXB0ZWQgTWF0ZXJpYWwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICAgICBjLiBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIG1lYW5zIGNvcHlyaWdodCBhbmQvb3Igc2ltaWxhciByaWdodHMgY2xvc2VseSByZWxhdGVkIHRvIGNvcHlyaWdodCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcGVyZm9ybWFuY2UsIGJyb2FkY2FzdCwgc291bmQgcmVjb3JkaW5nLCBhbmQgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzLCB3aXRob3V0IHJlZ2FyZCB0byBob3cgdGhlIHJpZ2h0cyBhcmUgbGFiZWxlZCBvciBjYXRlZ29yaXplZC4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgUHVibGljIExpY2Vuc2UsIHRoZSByaWdodHMgc3BlY2lmaWVkIGluIFNlY3Rpb24gMihiKSgxKS0oMikgYXJlIG5vdCBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzLlxuXG4gICAgICBkLiBFZmZlY3RpdmUgVGVjaG5vbG9naWNhbCBNZWFzdXJlcyBtZWFucyB0aG9zZSBtZWFzdXJlcyB0aGF0LCBpbiB0aGUgYWJzZW5jZSBvZiBwcm9wZXIgYXV0aG9yaXR5LCBtYXkgbm90IGJlIGNpcmN1bXZlbnRlZCB1bmRlciBsYXdzIGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgQXJ0aWNsZSAxMSBvZiB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IGFkb3B0ZWQgb24gRGVjZW1iZXIgMjAsIDE5OTYsIGFuZC9vciBzaW1pbGFyIGludGVybmF0aW9uYWwgYWdyZWVtZW50cy5cblxuICAgICAgZS4gRXhjZXB0aW9ucyBhbmQgTGltaXRhdGlvbnMgbWVhbnMgZmFpciB1c2UsIGZhaXIgZGVhbGluZywgYW5kL29yIGFueSBvdGhlciBleGNlcHRpb24gb3IgbGltaXRhdGlvbiB0byBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIHRoYXQgYXBwbGllcyB0byBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuXG5cbiAgICAgIGYuIExpY2Vuc2VkIE1hdGVyaWFsIG1lYW5zIHRoZSBhcnRpc3RpYyBvciBsaXRlcmFyeSB3b3JrLCBkYXRhYmFzZSwgb3Igb3RoZXIgbWF0ZXJpYWwgdG8gd2hpY2ggdGhlIExpY2Vuc29yIGFwcGxpZWQgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgZy4gTGljZW5zZWQgUmlnaHRzIG1lYW5zIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3Ugc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgd2hpY2ggYXJlIGxpbWl0ZWQgdG8gYWxsIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgdGhhdCBhcHBseSB0byBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIHRoYXQgdGhlIExpY2Vuc29yIGhhcyBhdXRob3JpdHkgdG8gbGljZW5zZS5cblxuICAgICAgaC4gTGljZW5zb3IgbWVhbnMgdGhlIGluZGl2aWR1YWwocykgb3IgZW50aXR5KGllcykgZ3JhbnRpbmcgcmlnaHRzIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgICAgIGkuIE5vbkNvbW1lcmNpYWwgbWVhbnMgbm90IHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkcyBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24uIEZvciBwdXJwb3NlcyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLCB0aGUgZXhjaGFuZ2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGZvciBvdGhlciBtYXRlcmlhbCBzdWJqZWN0IHRvIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgYnkgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igc2ltaWxhciBtZWFucyBpcyBOb25Db21tZXJjaWFsIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2UuXG5cbiAgICAgIGouIFNoYXJlIG1lYW5zIHRvIHByb3ZpZGUgbWF0ZXJpYWwgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyB0aGF0IHJlcXVpcmVzIHBlcm1pc3Npb24gdW5kZXIgdGhlIExpY2Vuc2VkIFJpZ2h0cywgc3VjaCBhcyByZXByb2R1Y3Rpb24sIHB1YmxpYyBkaXNwbGF5LCBwdWJsaWMgcGVyZm9ybWFuY2UsIGRpc3RyaWJ1dGlvbiwgZGlzc2VtaW5hdGlvbiwgY29tbXVuaWNhdGlvbiwgb3IgaW1wb3J0YXRpb24sIGFuZCB0byBtYWtlIG1hdGVyaWFsIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluY2x1ZGluZyBpbiB3YXlzIHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlIG1hdGVyaWFsIGZyb20gYSBwbGFjZSBhbmQgYXQgYSB0aW1lIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbS5cblxuICAgICAgay4gU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzIG1lYW5zIHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCByZXN1bHRpbmcgZnJvbSBEaXJlY3RpdmUgOTYvOS9FQyBvZiB0aGUgRXVyb3BlYW4gUGFybGlhbWVudCBhbmQgb2YgdGhlIENvdW5jaWwgb2YgMTEgTWFyY2ggMTk5NiBvbiB0aGUgbGVnYWwgcHJvdGVjdGlvbiBvZiBkYXRhYmFzZXMsIGFzIGFtZW5kZWQgYW5kL29yIHN1Y2NlZWRlZCwgYXMgd2VsbCBhcyBvdGhlciBlc3NlbnRpYWxseSBlcXVpdmFsZW50IHJpZ2h0cyBhbnl3aGVyZSBpbiB0aGUgd29ybGQuXG5cbiAgICAgIGwuIFlvdSBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyB0aGUgTGljZW5zZWQgUmlnaHRzIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuIFlvdXIgaGFzIGEgY29ycmVzcG9uZGluZyBtZWFuaW5nLlxuXG4gICBcblxuICAgU2VjdGlvbiAyIOKAkyBTY29wZS5cblxuICAgICAgYS4gTGljZW5zZSBncmFudC5cblxuICAgICAgICAgMS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgdGhlIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1zdWJsaWNlbnNhYmxlLCBub24tZXhjbHVzaXZlLCBpcnJldm9jYWJsZSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMgaW4gdGhlIExpY2Vuc2VkIE1hdGVyaWFsIHRvOlxuXG4gICAgICAgICAgICBBLiByZXByb2R1Y2UgYW5kIFNoYXJlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCwgaW4gd2hvbGUgb3IgaW4gcGFydCwgZm9yIE5vbkNvbW1lcmNpYWwgcHVycG9zZXMgb25seTsgYW5kXG5cbiAgICAgICAgICAgIEIuIHByb2R1Y2UsIHJlcHJvZHVjZSwgYW5kIFNoYXJlIEFkYXB0ZWQgTWF0ZXJpYWwgZm9yIE5vbkNvbW1lcmNpYWwgcHVycG9zZXMgb25seS5cblxuICAgICAgICAgMi4gRXhjZXB0aW9ucyBhbmQgTGltaXRhdGlvbnMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSBFeGNlcHRpb25zIGFuZCBMaW1pdGF0aW9ucyBhcHBseSB0byBZb3VyIHVzZSwgdGhpcyBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBhcHBseSwgYW5kIFlvdSBkbyBub3QgbmVlZCB0byBjb21wbHkgd2l0aCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuXG5cbiAgICAgICAgIDMuIFRlcm0uIFRoZSB0ZXJtIG9mIHRoaXMgUHVibGljIExpY2Vuc2UgaXMgc3BlY2lmaWVkIGluIFNlY3Rpb24gNihhKS5cblxuICAgICAgICAgNC4gTWVkaWEgYW5kIGZvcm1hdHM7IHRlY2huaWNhbCBtb2RpZmljYXRpb25zIGFsbG93ZWQuIFRoZSBMaWNlbnNvciBhdXRob3JpemVzIFlvdSB0byBleGVyY2lzZSB0aGUgTGljZW5zZWQgUmlnaHRzIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgY3JlYXRlZCwgYW5kIHRvIG1ha2UgdGVjaG5pY2FsIG1vZGlmaWNhdGlvbnMgbmVjZXNzYXJ5IHRvIGRvIHNvLiBUaGUgTGljZW5zb3Igd2FpdmVzIGFuZC9vciBhZ3JlZXMgbm90IHRvIGFzc2VydCBhbnkgcmlnaHQgb3IgYXV0aG9yaXR5IHRvIGZvcmJpZCBZb3UgZnJvbSBtYWtpbmcgdGVjaG5pY2FsIG1vZGlmaWNhdGlvbnMgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMsIGluY2x1ZGluZyB0ZWNobmljYWwgbW9kaWZpY2F0aW9ucyBuZWNlc3NhcnkgdG8gY2lyY3VtdmVudCBFZmZlY3RpdmUgVGVjaG5vbG9naWNhbCBNZWFzdXJlcy4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgUHVibGljIExpY2Vuc2UsIHNpbXBseSBtYWtpbmcgbW9kaWZpY2F0aW9ucyBhdXRob3JpemVkIGJ5IHRoaXMgU2VjdGlvbiAyKGEpKDQpIG5ldmVyIHByb2R1Y2VzIEFkYXB0ZWQgTWF0ZXJpYWwuXG5cbiAgICAgICAgIDUuIERvd25zdHJlYW0gcmVjaXBpZW50cy5cblxuICAgICAgICAgICAgQS4gT2ZmZXIgZnJvbSB0aGUgTGljZW5zb3Ig4oCTIExpY2Vuc2VkIE1hdGVyaWFsLiBFdmVyeSByZWNpcGllbnQgb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYW4gb2ZmZXIgZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgdGhlIExpY2Vuc2VkIFJpZ2h0cyB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgICAgICAgQi4gTm8gZG93bnN0cmVhbSByZXN0cmljdGlvbnMuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgdGVybXMgb3IgY29uZGl0aW9ucyBvbiwgb3IgYXBwbHkgYW55IEVmZmVjdGl2ZSBUZWNobm9sb2dpY2FsIE1lYXN1cmVzIHRvLCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaWYgZG9pbmcgc28gcmVzdHJpY3RzIGV4ZXJjaXNlIG9mIHRoZSBMaWNlbnNlZCBSaWdodHMgYnkgYW55IHJlY2lwaWVudCBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuXG5cbiAgICAgICAgIDYuIE5vIGVuZG9yc2VtZW50LiBOb3RoaW5nIGluIHRoaXMgUHVibGljIExpY2Vuc2UgY29uc3RpdHV0ZXMgb3IgbWF5IGJlIGNvbnN0cnVlZCBhcyBwZXJtaXNzaW9uIHRvIGFzc2VydCBvciBpbXBseSB0aGF0IFlvdSBhcmUsIG9yIHRoYXQgWW91ciB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzLCBjb25uZWN0ZWQgd2l0aCwgb3Igc3BvbnNvcmVkLCBlbmRvcnNlZCwgb3IgZ3JhbnRlZCBvZmZpY2lhbCBzdGF0dXMgYnksIHRoZSBMaWNlbnNvciBvciBvdGhlcnMgZGVzaWduYXRlZCB0byByZWNlaXZlIGF0dHJpYnV0aW9uIGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gMyhhKSgxKShBKShpKS5cblxuICAgICAgYi4gT3RoZXIgcmlnaHRzLlxuXG4gICAgICAgICAxLiBNb3JhbCByaWdodHMsIHN1Y2ggYXMgdGhlIHJpZ2h0IG9mIGludGVncml0eSwgYXJlIG5vdCBsaWNlbnNlZCB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlLCBub3IgYXJlIHB1YmxpY2l0eSwgcHJpdmFjeSwgYW5kL29yIG90aGVyIHNpbWlsYXIgcGVyc29uYWxpdHkgcmlnaHRzOyBob3dldmVyLCB0byB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGUgTGljZW5zb3Igd2FpdmVzIGFuZC9vciBhZ3JlZXMgbm90IHRvIGFzc2VydCBhbnkgc3VjaCByaWdodHMgaGVsZCBieSB0aGUgTGljZW5zb3IgdG8gdGhlIGxpbWl0ZWQgZXh0ZW50IG5lY2Vzc2FyeSB0byBhbGxvdyBZb3UgdG8gZXhlcmNpc2UgdGhlIExpY2Vuc2VkIFJpZ2h0cywgYnV0IG5vdCBvdGhlcndpc2UuXG5cbiAgICAgICAgIDIuIFBhdGVudCBhbmQgdHJhZGVtYXJrIHJpZ2h0cyBhcmUgbm90IGxpY2Vuc2VkIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgICAgICAgIDMuIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoZSBMaWNlbnNvciB3YWl2ZXMgYW55IHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIGZyb20gWW91IGZvciB0aGUgZXhlcmNpc2Ugb2YgdGhlIExpY2Vuc2VkIFJpZ2h0cywgd2hldGhlciBkaXJlY3RseSBvciB0aHJvdWdoIGEgY29sbGVjdGluZyBzb2NpZXR5IHVuZGVyIGFueSB2b2x1bnRhcnkgb3Igd2FpdmFibGUgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZS4gSW4gYWxsIG90aGVyIGNhc2VzIHRoZSBMaWNlbnNvciBleHByZXNzbHkgcmVzZXJ2ZXMgYW55IHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMsIGluY2x1ZGluZyB3aGVuIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBpcyB1c2VkIG90aGVyIHRoYW4gZm9yIE5vbkNvbW1lcmNpYWwgcHVycG9zZXMuXG5cbiAgIFxuXG4gICBTZWN0aW9uIDMg4oCTIExpY2Vuc2UgQ29uZGl0aW9ucy5cblxuICAgWW91ciBleGVyY2lzZSBvZiB0aGUgTGljZW5zZWQgUmlnaHRzIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zLlxuXG4gICAgICBhLiBBdHRyaWJ1dGlvbi5cblxuICAgICAgICAgMS4gSWYgWW91IFNoYXJlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCAoaW5jbHVkaW5nIGluIG1vZGlmaWVkIGZvcm0pLCBZb3UgbXVzdDpcblxuICAgICAgICAgICAgQS4gcmV0YWluIHRoZSBmb2xsb3dpbmcgaWYgaXQgaXMgc3VwcGxpZWQgYnkgdGhlIExpY2Vuc29yIHdpdGggdGhlIExpY2Vuc2VkIE1hdGVyaWFsOlxuXG4gICAgICAgICAgICAgICBpLiBpZGVudGlmaWNhdGlvbiBvZiB0aGUgY3JlYXRvcihzKSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIGFueSBvdGhlcnMgZGVzaWduYXRlZCB0byByZWNlaXZlIGF0dHJpYnV0aW9uLCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciAoaW5jbHVkaW5nIGJ5IHBzZXVkb255bSBpZiBkZXNpZ25hdGVkKTtcblxuICAgICAgICAgICAgICAgaWkuIGEgY29weXJpZ2h0IG5vdGljZTtcblxuICAgICAgICAgICAgICAgaWlpLiBhIG5vdGljZSB0aGF0IHJlZmVycyB0byB0aGlzIFB1YmxpYyBMaWNlbnNlO1xuXG4gICAgICAgICAgICAgICBpdi4gYSBub3RpY2UgdGhhdCByZWZlcnMgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcztcblxuICAgICAgICAgICAgICAgdi4gYSBVUkkgb3IgaHlwZXJsaW5rIHRvIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGU7XG5cbiAgICAgICAgICAgIEIuIGluZGljYXRlIGlmIFlvdSBtb2RpZmllZCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIHJldGFpbiBhbiBpbmRpY2F0aW9uIG9mIGFueSBwcmV2aW91cyBtb2RpZmljYXRpb25zOyBhbmRcblxuICAgICAgICAgICAgQy4gaW5kaWNhdGUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIGxpY2Vuc2VkIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UsIGFuZCBpbmNsdWRlIHRoZSB0ZXh0IG9mLCBvciB0aGUgVVJJIG9yIGh5cGVybGluayB0bywgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgICAgMi4gWW91IG1heSBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMyhhKSgxKSBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgYmFzZWQgb24gdGhlIG1lZGl1bSwgbWVhbnMsIGFuZCBjb250ZXh0IGluIHdoaWNoIFlvdSBTaGFyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuIEZvciBleGFtcGxlLCBpdCBtYXkgYmUgcmVhc29uYWJsZSB0byBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGJ5IHByb3ZpZGluZyBhIFVSSSBvciBoeXBlcmxpbmsgdG8gYSByZXNvdXJjZSB0aGF0IGluY2x1ZGVzIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi5cblxuICAgICAgICAgMy4gSWYgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciwgWW91IG11c3QgcmVtb3ZlIGFueSBvZiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgU2VjdGlvbiAzKGEpKDEpKEEpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZS5cblxuICAgICAgICAgNC4gSWYgWW91IFNoYXJlIEFkYXB0ZWQgTWF0ZXJpYWwgWW91IHByb2R1Y2UsIHRoZSBBZGFwdGVyJ3MgTGljZW5zZSBZb3UgYXBwbHkgbXVzdCBub3QgcHJldmVudCByZWNpcGllbnRzIG9mIHRoZSBBZGFwdGVkIE1hdGVyaWFsIGZyb20gY29tcGx5aW5nIHdpdGggdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgXG5cbiAgIFNlY3Rpb24gNCDigJMgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzLlxuXG4gICBXaGVyZSB0aGUgTGljZW5zZWQgUmlnaHRzIGluY2x1ZGUgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzIHRoYXQgYXBwbHkgdG8gWW91ciB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsOlxuXG4gICAgICBhLiBmb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgU2VjdGlvbiAyKGEpKDEpIGdyYW50cyBZb3UgdGhlIHJpZ2h0IHRvIGV4dHJhY3QsIHJldXNlLCByZXByb2R1Y2UsIGFuZCBTaGFyZSBhbGwgb3IgYSBzdWJzdGFudGlhbCBwb3J0aW9uIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YWJhc2UgZm9yIE5vbkNvbW1lcmNpYWwgcHVycG9zZXMgb25seTtcblxuICAgICAgYi4gaWYgWW91IGluY2x1ZGUgYWxsIG9yIGEgc3Vic3RhbnRpYWwgcG9ydGlvbiBvZiB0aGUgZGF0YWJhc2UgY29udGVudHMgaW4gYSBkYXRhYmFzZSBpbiB3aGljaCBZb3UgaGF2ZSBTdWkgR2VuZXJpcyBEYXRhYmFzZSBSaWdodHMsIHRoZW4gdGhlIGRhdGFiYXNlIGluIHdoaWNoIFlvdSBoYXZlIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cyAoYnV0IG5vdCBpdHMgaW5kaXZpZHVhbCBjb250ZW50cykgaXMgQWRhcHRlZCBNYXRlcmlhbDsgYW5kXG5cbiAgICAgIGMuIFlvdSBtdXN0IGNvbXBseSB3aXRoIHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMyhhKSBpZiBZb3UgU2hhcmUgYWxsIG9yIGEgc3Vic3RhbnRpYWwgcG9ydGlvbiBvZiB0aGUgY29udGVudHMgb2YgdGhlIGRhdGFiYXNlLlxuXG4gICBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyBTZWN0aW9uIDQgc3VwcGxlbWVudHMgYW5kIGRvZXMgbm90IHJlcGxhY2UgWW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlIHdoZXJlIHRoZSBMaWNlbnNlZCBSaWdodHMgaW5jbHVkZSBvdGhlciBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzLlxuXG4gICBcblxuICAgU2VjdGlvbiA1IOKAkyBEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXMgYW5kIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LlxuXG4gICAgICBhLiBVbmxlc3Mgb3RoZXJ3aXNlIHNlcGFyYXRlbHkgdW5kZXJ0YWtlbiBieSB0aGUgTGljZW5zb3IsIHRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoZSBMaWNlbnNvciBvZmZlcnMgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGFzLWlzIGFuZCBhcy1hdmFpbGFibGUsIGFuZCBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgb3Igd2FycmFudGllcyBvZiBhbnkga2luZCBjb25jZXJuaW5nIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCwgd2hldGhlciBleHByZXNzLCBpbXBsaWVkLCBzdGF0dXRvcnksIG9yIG90aGVyLiBUaGlzIGluY2x1ZGVzLCB3aXRob3V0IGxpbWl0YXRpb24sIHdhcnJhbnRpZXMgb2YgdGl0bGUsIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIG5vbi1pbmZyaW5nZW1lbnQsIGFic2VuY2Ugb2YgbGF0ZW50IG9yIG90aGVyIGRlZmVjdHMsIGFjY3VyYWN5LCBvciB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBlcnJvcnMsIHdoZXRoZXIgb3Igbm90IGtub3duIG9yIGRpc2NvdmVyYWJsZS4gV2hlcmUgZGlzY2xhaW1lcnMgb2Ygd2FycmFudGllcyBhcmUgbm90IGFsbG93ZWQgaW4gZnVsbCBvciBpbiBwYXJ0LCB0aGlzIGRpc2NsYWltZXIgbWF5IG5vdCBhcHBseSB0byBZb3UuXG5cbiAgICAgIGIuIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIGluIG5vIGV2ZW50IHdpbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBZb3Ugb24gYW55IGxlZ2FsIHRoZW9yeSAoaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIG5lZ2xpZ2VuY2UpIG9yIG90aGVyd2lzZSBmb3IgYW55IGRpcmVjdCwgc3BlY2lhbCwgaW5kaXJlY3QsIGluY2lkZW50YWwsIGNvbnNlcXVlbnRpYWwsIHB1bml0aXZlLCBleGVtcGxhcnksIG9yIG90aGVyIGxvc3NlcywgY29zdHMsIGV4cGVuc2VzLCBvciBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIHRoaXMgUHVibGljIExpY2Vuc2Ugb3IgdXNlIG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCwgZXZlbiBpZiB0aGUgTGljZW5zb3IgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBsb3NzZXMsIGNvc3RzLCBleHBlbnNlcywgb3IgZGFtYWdlcy4gV2hlcmUgYSBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBpcyBub3QgYWxsb3dlZCBpbiBmdWxsIG9yIGluIHBhcnQsIHRoaXMgbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS5cblxuICAgICAgYy4gVGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyBhbmQgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgcHJvdmlkZWQgYWJvdmUgc2hhbGwgYmUgaW50ZXJwcmV0ZWQgaW4gYSBtYW5uZXIgdGhhdCwgdG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcyBhbiBhYnNvbHV0ZSBkaXNjbGFpbWVyIGFuZCB3YWl2ZXIgb2YgYWxsIGxpYWJpbGl0eS5cblxuICAgXG5cbiAgIFNlY3Rpb24gNiDigJMgVGVybSBhbmQgVGVybWluYXRpb24uXG5cbiAgICAgIGEuIFRoaXMgUHVibGljIExpY2Vuc2UgYXBwbGllcyBmb3IgdGhlIHRlcm0gb2YgdGhlIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgbGljZW5zZWQgaGVyZS4gSG93ZXZlciwgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhpcyBQdWJsaWMgTGljZW5zZSwgdGhlbiBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5LlxuXG4gICAgICBiLiBXaGVyZSBZb3VyIHJpZ2h0IHRvIHVzZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaGFzIHRlcm1pbmF0ZWQgdW5kZXIgU2VjdGlvbiA2KGEpLCBpdCByZWluc3RhdGVzOlxuXG4gICAgICAgICAxLiBhdXRvbWF0aWNhbGx5IGFzIG9mIHRoZSBkYXRlIHRoZSB2aW9sYXRpb24gaXMgY3VyZWQsIHByb3ZpZGVkIGl0IGlzIGN1cmVkIHdpdGhpbiAzMCBkYXlzIG9mIFlvdXIgZGlzY292ZXJ5IG9mIHRoZSB2aW9sYXRpb247IG9yXG5cbiAgICAgICAgIDIuIHVwb24gZXhwcmVzcyByZWluc3RhdGVtZW50IGJ5IHRoZSBMaWNlbnNvci5cblxuICAgICAgRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgU2VjdGlvbiA2KGIpIGRvZXMgbm90IGFmZmVjdCBhbnkgcmlnaHQgdGhlIExpY2Vuc29yIG1heSBoYXZlIHRvIHNlZWsgcmVtZWRpZXMgZm9yIFlvdXIgdmlvbGF0aW9ucyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICAgICBjLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhlIExpY2Vuc29yIG1heSBhbHNvIG9mZmVyIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB1bmRlciBzZXBhcmF0ZSB0ZXJtcyBvciBjb25kaXRpb25zIG9yIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBhdCBhbnkgdGltZTsgaG93ZXZlciwgZG9pbmcgc28gd2lsbCBub3QgdGVybWluYXRlIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgICAgIGQuIFNlY3Rpb25zIDEsIDUsIDYsIDcsIGFuZCA4IHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgXG5cbiAgIFNlY3Rpb24gNyDigJMgT3RoZXIgVGVybXMgYW5kIENvbmRpdGlvbnMuXG5cbiAgICAgIGEuIFRoZSBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IHRlcm1zIG9yIGNvbmRpdGlvbnMgY29tbXVuaWNhdGVkIGJ5IFlvdSB1bmxlc3MgZXhwcmVzc2x5IGFncmVlZC5cblxuICAgICAgYi4gQW55IGFycmFuZ2VtZW50cywgdW5kZXJzdGFuZGluZ3MsIG9yIGFncmVlbWVudHMgcmVnYXJkaW5nIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBub3Qgc3RhdGVkIGhlcmVpbiBhcmUgc2VwYXJhdGUgZnJvbSBhbmQgaW5kZXBlbmRlbnQgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgIFxuXG4gICBTZWN0aW9uIDgg4oCTIEludGVycHJldGF0aW9uLlxuXG4gICAgICBhLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCwgYW5kIHNoYWxsIG5vdCBiZSBpbnRlcnByZXRlZCB0bywgcmVkdWNlLCBsaW1pdCwgcmVzdHJpY3QsIG9yIGltcG9zZSBjb25kaXRpb25zIG9uIGFueSB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIHRoYXQgY291bGQgbGF3ZnVsbHkgYmUgbWFkZSB3aXRob3V0IHBlcm1pc3Npb24gdW5kZXIgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgYi4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgaWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlIGlzIGRlZW1lZCB1bmVuZm9yY2VhYmxlLCBpdCBzaGFsbCBiZSBhdXRvbWF0aWNhbGx5IHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gSWYgdGhlIHByb3Zpc2lvbiBjYW5ub3QgYmUgcmVmb3JtZWQsIGl0IHNoYWxsIGJlIHNldmVyZWQgZnJvbSB0aGlzIFB1YmxpYyBMaWNlbnNlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluaW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLlxuXG4gICAgICBjLiBObyB0ZXJtIG9yIGNvbmRpdGlvbiBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlIHdpbGwgYmUgd2FpdmVkIGFuZCBubyBmYWlsdXJlIHRvIGNvbXBseSBjb25zZW50ZWQgdG8gdW5sZXNzIGV4cHJlc3NseSBhZ3JlZWQgdG8gYnkgdGhlIExpY2Vuc29yLlxuXG4gICAgICBkLiBOb3RoaW5nIGluIHRoaXMgUHVibGljIExpY2Vuc2UgY29uc3RpdHV0ZXMgb3IgbWF5IGJlIGludGVycHJldGVkIGFzIGEgbGltaXRhdGlvbiB1cG9uLCBvciB3YWl2ZXIgb2YsIGFueSBwcml2aWxlZ2VzIGFuZCBpbW11bml0aWVzIHRoYXQgYXBwbHkgdG8gdGhlIExpY2Vuc29yIG9yIFlvdSwgaW5jbHVkaW5nIGZyb20gdGhlIGxlZ2FsIHByb2Nlc3NlcyBvZiBhbnkganVyaXNkaWN0aW9uIG9yIGF1dGhvcml0eS5cblxuQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byBpdHMgcHVibGljIGxpY2Vuc2VzLiBOb3R3aXRoc3RhbmRpbmcsIENyZWF0aXZlIENvbW1vbnMgbWF5IGVsZWN0IHRvIGFwcGx5IG9uZSBvZiBpdHMgcHVibGljIGxpY2Vuc2VzIHRvIG1hdGVyaWFsIGl0IHB1Ymxpc2hlcyBhbmQgaW4gdGhvc2UgaW5zdGFuY2VzIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUgXCJMaWNlbnNvci5cIiBUaGUgdGV4dCBvZiB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBwdWJsaWMgbGljZW5zZXMgaXMgZGVkaWNhdGVkIHRvIHRoZSBwdWJsaWMgZG9tYWluIHVuZGVyIHRoZSBDQzAgUHVibGljIERvbWFpbiBEZWRpY2F0aW9uLiBFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0aGF0IG1hdGVyaWFsIGlzIHNoYXJlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgcHVibGljIGxpY2Vuc2Ugb3IgYXMgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBwb2xpY2llcyBwdWJsaXNoZWQgYXQgY3JlYXRpdmVjb21tb25zLm9yZy9wb2xpY2llcywgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBvZiB0aGUgdHJhZGVtYXJrIFwiQ3JlYXRpdmUgQ29tbW9uc1wiIG9yIGFueSBvdGhlciB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgaXRzIHByaW9yIHdyaXR0ZW4gY29uc2VudCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgaW4gY29ubmVjdGlvbiB3aXRoIGFueSB1bmF1dGhvcml6ZWQgbW9kaWZpY2F0aW9ucyB0byBhbnkgb2YgaXRzIHB1YmxpYyBsaWNlbnNlcyBvciBhbnkgb3RoZXIgYXJyYW5nZW1lbnRzLCB1bmRlcnN0YW5kaW5ncywgb3IgYWdyZWVtZW50cyBjb25jZXJuaW5nIHVzZSBvZiBsaWNlbnNlZCBtYXRlcmlhbC4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgcGFyYWdyYXBoIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGUgcHVibGljIGxpY2Vuc2VzLlxuXG5DcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgY3JlYXRpdmVjb21tb25zLm9yZy4iXSwibGljZW5zZUlkcyI6WyJDQy1CWS1OQy00LjAiXSwia2V5d29yZHMiOlsibGljZW5zZSBpIG5vbmNvbW1lcmNpYWwiLCJpIG5vbmNvbW1lcmNpYWwgbWVhbnMiLCJ0aGUgZXhjaGFuZ2UgaiIsImV4Y2hhbmdlIGogc2hhcmUiLCJqIHNoYXJlIG1lYW5zIiwiYnkgdGhlbSBrIiwidGhlbSBrIHN1aSIsImsgc3VpIGdlbmVyaXMiLCJ0aGUgd29ybGQgbCIsIndvcmxkIGwgeW91IiwibCB5b3UgbWVhbnMiLCJwdWJsaWMgbGljZW5zZSBpIG5vbmNvbW1lcmNpYWwiLCJsaWNlbnNlIGkgbm9uY29tbWVyY2lhbCBtZWFucyIsImkgbm9uY29tbWVyY2lhbCBtZWFucyBub3QiLCJ3aXRoIHRoZSBleGNoYW5nZSBqIiwidGhlIGV4Y2hhbmdlIGogc2hhcmUiLCJleGNoYW5nZSBqIHNoYXJlIG1lYW5zIiwiaiBzaGFyZSBtZWFucyB0byIsImNob3NlbiBieSB0aGVtIGsiLCJieSB0aGVtIGsgc3VpIiwidGhlbSBrIHN1aSBnZW5lcmlzIiwiayBzdWkgZ2VuZXJpcyBkYXRhYmFzZSIsImluIHRoZSB3b3JsZCBsIiwidGhlIHdvcmxkIGwgeW91Iiwid29ybGQgbCB5b3UgbWVhbnMiLCJsIHlvdSBtZWFucyB0aGUiLCJub25jb21tZXJjaWFsIDQgMCBpbnRlcm5hdGlvbmFsIGNyZWF0aXZlIiwidGhpcyBwdWJsaWMgbGljZW5zZSBpIG5vbmNvbW1lcmNpYWwiLCJwdWJsaWMgbGljZW5zZSBpIG5vbmNvbW1lcmNpYWwgbWVhbnMiLCJsaWNlbnNlIGkgbm9uY29tbWVyY2lhbCBtZWFucyBub3QiLCJpIG5vbmNvbW1lcmNpYWwgbWVhbnMgbm90IHByaW1hcmlseSIsImNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2UgaiIsIndpdGggdGhlIGV4Y2hhbmdlIGogc2hhcmUiLCJ0aGUgZXhjaGFuZ2UgaiBzaGFyZSBtZWFucyIsImV4Y2hhbmdlIGogc2hhcmUgbWVhbnMgdG8iLCJqIHNoYXJlIG1lYW5zIHRvIHByb3ZpZGUiLCJpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW0gayIsImNob3NlbiBieSB0aGVtIGsgc3VpIiwiYnkgdGhlbSBrIHN1aSBnZW5lcmlzIiwidGhlbSBrIHN1aSBnZW5lcmlzIGRhdGFiYXNlIiwiayBzdWkgZ2VuZXJpcyBkYXRhYmFzZSByaWdodHMiLCJhbnl3aGVyZSBpbiB0aGUgd29ybGQgbCIsImluIHRoZSB3b3JsZCBsIHlvdSIsInRoZSB3b3JsZCBsIHlvdSBtZWFucyIsIndvcmxkIGwgeW91IG1lYW5zIHRoZSIsImwgeW91IG1lYW5zIHRoZSBpbmRpdmlkdWFsIl19LHsibGljZW5zZVRleHRzIjpbIkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tTm9EZXJpdnMtTm9uQ29tbWVyY2lhbCAxLjAgQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOIFwiQVMtSVNcIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuXG5cbkxpY2Vuc2VcblxuVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKFwiQ0NQTFwiIE9SIFwiTElDRU5TRVwiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBJUyBQUk9ISUJJVEVELlxuXG5CWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXG4gICAxLiBEZWZpbml0aW9uc1xuXG4gICAgICBhLiBcIkNvbGxlY3RpdmUgV29ya1wiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gXCJEZXJpdmF0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIFwiTGljZW5zb3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgZC4gXCJPcmlnaW5hbCBBdXRob3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuXG5cbiAgICAgIGUuIFwiV29ya1wiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGYuIFwiWW91XCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi5cblxuICAgMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLlxuXG4gICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6XG5cbiAgICAgIGEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgICAgYi4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgICAgVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuXG5cbiAgIDQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcblxuICAgICAgYS4gWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLlxuXG4gICAgICBiLiBZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy5cblxuICAgICAgYy4gSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC5cblxuICAgNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyXG5cbiAgICAgIGEuIEJ5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yJ3Mga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeTpcblxuICAgICAgICAgaS4gTGljZW5zb3IgaGFzIHNlY3VyZWQgYWxsIHJpZ2h0cyBpbiB0aGUgV29yayBuZWNlc3NhcnkgdG8gZ3JhbnQgdGhlIGxpY2Vuc2UgcmlnaHRzIGhlcmV1bmRlciBhbmQgdG8gcGVybWl0IHRoZSBsYXdmdWwgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aXRob3V0IFlvdSBoYXZpbmcgYW55IG9ibGlnYXRpb24gdG8gcGF5IGFueSByb3lhbHRpZXMsIGNvbXB1bHNvcnkgbGljZW5zZSBmZWVzLCByZXNpZHVhbHMgb3IgYW55IG90aGVyIHBheW1lbnRzO1xuXG4gICAgICAgICBpaS4gVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LlxuXG4gICAgICBiLiBFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy5cblxuICAgNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuICAgNy4gVGVybWluYXRpb25cblxuICAgICAgYS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuXG5cbiAgIDguIE1pc2NlbGxhbmVvdXNcblxuICAgICAgYS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICAgICBjLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LlxuXG4gICAgICBkLiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS5cblxuQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuXG5cbkV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrIFwiQ3JlYXRpdmUgQ29tbW9uc1wiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnMnIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLlxuXG5DcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLiJdLCJsaWNlbnNlSWRzIjpbIkNDLUJZLU5DLU5ELTEuMCJdLCJrZXl3b3JkcyI6WyJhdHRyaWJ1dGlvbiBub2Rlcml2cyBub25jb21tZXJjaWFsIiwibm9kZXJpdnMgbm9uY29tbWVyY2lhbCAxIiwiY29tbW9ucyBhdHRyaWJ1dGlvbiBub2Rlcml2cyBub25jb21tZXJjaWFsIiwiYXR0cmlidXRpb24gbm9kZXJpdnMgbm9uY29tbWVyY2lhbCAxIiwibm9kZXJpdnMgbm9uY29tbWVyY2lhbCAxIDAiLCJjcmVhdGl2ZSBjb21tb25zIGF0dHJpYnV0aW9uIG5vZGVyaXZzIG5vbmNvbW1lcmNpYWwiLCJjb21tb25zIGF0dHJpYnV0aW9uIG5vZGVyaXZzIG5vbmNvbW1lcmNpYWwgMSIsImF0dHJpYnV0aW9uIG5vZGVyaXZzIG5vbmNvbW1lcmNpYWwgMSAwIiwibm9kZXJpdnMgbm9uY29tbWVyY2lhbCAxIDAgY3JlYXRpdmUiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLU5vRGVyaXZzIDIuMCBDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gXCJBUy1JU1wiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS5cblxuTGljZW5zZVxuXG5USEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoXCJDQ1BMXCIgT1IgXCJMSUNFTlNFXCIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC5cblxuQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy5cblxuICAgMS4gRGVmaW5pdGlvbnNcblxuICAgICAgYS4gXCJDb2xsZWN0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFwiRGVyaXZhdGl2ZSBXb3JrXCIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlIChcInN5bmNoaW5nXCIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBcIkxpY2Vuc29yXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGQuIFwiT3JpZ2luYWwgQXV0aG9yXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLlxuXG4gICAgICBlLiBcIldvcmtcIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBmLiBcIllvdVwiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uXG5cbiAgIDIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy5cblxuICAgMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OlxuXG4gICAgICBhLiB0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7XG5cbiAgICAgIGIuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7XG5cbiAgIFRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLCBidXQgb3RoZXJ3aXNlIHlvdSBoYXZlIG5vIHJpZ2h0cyB0byBtYWtlIERlcml2YXRpdmUgV29ya3MuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChkKSBhbmQgNChlKS5cblxuICAgNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG5cbiAgICAgIGEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC5cblxuICAgICAgYi4gWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuXG5cbiAgICAgIGMuIElmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yaywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBhbmQgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcmsuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC5cblxuICAgICAgZC4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjpcblxuICAgICAgICAgaS4gUGVyZm9ybWFuY2YgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsgaWYgdGhhdCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi5cblxuICAgICAgICAgaWkuIE1lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrIChcImNvdmVyIHZlcnNpb25cIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY292ZXIgdmVyc2lvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi5cblxuICAgICAgZS4gV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uXG5cbiAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lclxuXG4gICBVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICA2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG4gICA3LiBUZXJtaW5hdGlvblxuXG4gICAgICBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS5cblxuICAgOC4gTWlzY2VsbGFuZW91c1xuXG4gICAgICBhLiBFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuXG5cbiAgICAgIGMuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuXG5cbiAgICAgIGQuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LlxuXG5DcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci5cblxuRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgXCJDcmVhdGl2ZSBDb21tb25zXCIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuXG5cbkNyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uIl0sImxpY2Vuc2VJZHMiOlsiQ0MtQlktTkMtTkQtMi4wIl0sImtleXdvcmRzIjpbImNvbXBvc2l0aW9uIGkgcGVyZm9ybWFuY2YiLCJpIHBlcmZvcm1hbmNmIHJveWFsdGllcyIsInBlcmZvcm1hbmNmIHJveWFsdGllcyB1bmRlciIsIm5vbmNvbW1lcmNpYWwgbm9kZXJpdnMgMiAwIiwibXVzaWNhbCBjb21wb3NpdGlvbiBpIHBlcmZvcm1hbmNmIiwiY29tcG9zaXRpb24gaSBwZXJmb3JtYW5jZiByb3lhbHRpZXMiLCJpIHBlcmZvcm1hbmNmIHJveWFsdGllcyB1bmRlciIsInBlcmZvcm1hbmNmIHJveWFsdGllcyB1bmRlciBibGFua2V0IiwiYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCBub2Rlcml2cyAyIDAiLCJub25jb21tZXJjaWFsIG5vZGVyaXZzIDIgMCBjcmVhdGl2ZSIsImEgbXVzaWNhbCBjb21wb3NpdGlvbiBpIHBlcmZvcm1hbmNmIiwibXVzaWNhbCBjb21wb3NpdGlvbiBpIHBlcmZvcm1hbmNmIHJveWFsdGllcyIsImNvbXBvc2l0aW9uIGkgcGVyZm9ybWFuY2Ygcm95YWx0aWVzIHVuZGVyIiwiaSBwZXJmb3JtYW5jZiByb3lhbHRpZXMgdW5kZXIgYmxhbmtldCIsInBlcmZvcm1hbmNmIHJveWFsdGllcyB1bmRlciBibGFua2V0IGxpY2Vuc2VzIl19LHsibGljZW5zZVRleHRzIjpbIkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1Ob0Rlcml2cyAyLjUgQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOIFwiQVMtSVNcIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuXG5cbkxpY2Vuc2VcblxuVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKFwiQ0NQTFwiIE9SIFwiTElDRU5TRVwiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuXG5cbkJZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cbiAgIDEuIERlZmluaXRpb25zXG5cbiAgICAgIGEuIFwiQ29sbGVjdGl2ZSBXb3JrXCIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBcIkRlcml2YXRpdmUgV29ya1wiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoXCJzeW5jaGluZ1wiKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gXCJMaWNlbnNvclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBkLiBcIk9yaWdpbmFsIEF1dGhvclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay5cblxuICAgICAgZS4gXCJXb3JrXCIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgZi4gXCJZb3VcIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLlxuXG4gICAyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuXG5cbiAgIDMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzpcblxuICAgICAgYS4gdG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzO1xuXG4gICAgICBiLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzO1xuXG4gICBUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZSBEZXJpdmF0aXZlIFdvcmtzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZCkgYW5kIDQoZSkuXG5cbiAgIDQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAgICBhLiBZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC5cblxuICAgICAgYi4gWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuXG5cbiAgICAgIGMuIElmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yaywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yJ3MgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgYW5kIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuXG5cbiAgICAgIGQuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246XG5cbiAgICAgICAgIGkuIFBlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uXG5cbiAgICAgICAgIGlpLiBNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoXCJjb3ZlciB2ZXJzaW9uXCIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvdmVyIHZlcnNpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uXG5cbiAgICAgIGUuIFdlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLlxuXG4gICA1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXJcblxuICAgVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS5cblxuICAgNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuICAgNy4gVGVybWluYXRpb25cblxuICAgICAgYS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuXG5cbiAgIDguIE1pc2NlbGxhbmVvdXNcblxuICAgICAgYS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICAgICBjLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LlxuXG4gICAgICBkLiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS5cblxuQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuXG5cbkV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrIFwiQ3JlYXRpdmUgQ29tbW9uc1wiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnMnIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLlxuXG5DcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLiJdLCJsaWNlbnNlSWRzIjpbIkNDLUJZLU5DLU5ELTIuNSJdLCJrZXl3b3JkcyI6WyJub25jb21tZXJjaWFsIG5vZGVyaXZzIDIgNSIsImF0dHJpYnV0aW9uIG5vbmNvbW1lcmNpYWwgbm9kZXJpdnMgMiA1Iiwibm9uY29tbWVyY2lhbCBub2Rlcml2cyAyIDUgY3JlYXRpdmUiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLU5vRGVyaXZzIDMuMCBVbnBvcnRlZCBDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gXCJBUy1JU1wiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS5cblxuTGljZW5zZVxuXG5USEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoXCJDQ1BMXCIgT1IgXCJMSUNFTlNFXCIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC5cblxuQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRPIFRIRSBFWFRFTlQgVEhJUyBMSUNFTlNFIE1BWSBCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy5cblxuICAgMS4gRGVmaW5pdGlvbnNcblxuICAgICAgYS4gXCJBZGFwdGF0aW9uXCIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKFwic3luY2hpbmdcIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gXCJDb2xsZWN0aW9uXCIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIFwiRGlzdHJpYnV0ZVwiIG1lYW5zIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdGhlIG9yaWdpbmFsIGFuZCBjb3BpZXMgb2YgdGhlIFdvcmsgdGhyb3VnaCBzYWxlIG9yIG90aGVyIHRyYW5zZmVyIG9mIG93bmVyc2hpcC5cblxuICAgICAgZC4gXCJMaWNlbnNvclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgZS4gXCJPcmlnaW5hbCBBdXRob3JcIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiBubyBpbmRpdmlkdWFsIG9yIGVudGl0eSBjYW4gYmUgaWRlbnRpZmllZCwgdGhlIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsIG11c2ljaWFucywgZGFuY2VycywgYW5kIG90aGVyIHBlcnNvbnMgd2hvIGFjdCwgc2luZywgZGVsaXZlciwgZGVjbGFpbSwgcGxheSBpbiwgaW50ZXJwcmV0IG9yIG90aGVyd2lzZSBwZXJmb3JtIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuXG5cbiAgICAgIGYuIFwiV29ya1wiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay5cblxuICAgICAgZy4gXCJZb3VcIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLlxuXG4gICAgICBoLiBcIlB1YmxpY2x5IFBlcmZvcm1cIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy5cblxuICAgICAgaS4gXCJSZXByb2R1Y2VcIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mIGZpeGF0aW9uIGFuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uXG5cbiAgIDIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSBsaW1pdGF0aW9ucyBvciBleGNlcHRpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGZvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLlxuXG4gICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6XG5cbiAgICAgIGEuIHRvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aW9ucywgYW5kIHRvIFJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3Rpb25zOyBhbmQsXG5cbiAgICAgIGIuIHRvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9ucy5cblxuICAgVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgQWRhcHRhdGlvbnMuIFN1YmplY3QgdG8gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQoZCkuXG5cbiAgIDQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcblxuICAgICAgYS4gWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuXG5cbiAgICAgIGIuIFlvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLlxuXG4gICAgICBjLiBJZiBZb3UgRGlzdHJpYnV0ZSwgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIChcIkF0dHJpYnV0aW9uIFBhcnRpZXNcIikgaW4gTGljZW5zb3IncyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0KGMpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy5cblxuICAgICAgZC4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6XG5cbiAgICAgICAgIGkuIE5vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7XG5cbiAgICAgICAgIGlpLiBXYWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgaWYgWW91ciBleGVyY2lzZSBvZiBzdWNoIHJpZ2h0cyBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYikgYW5kIG90aGVyd2lzZSB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWU7IGFuZCxcblxuICAgICAgICAgaWlpLiBWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSB0aGF0IGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChiKS5cblxuICAgICAgZS4gRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3IncyBob25vciBvciByZXB1dGF0aW9uLlxuXG4gICA1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXJcblxuICAgVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS5cblxuICAgNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuICAgNy4gVGVybWluYXRpb25cblxuICAgICAgYS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLlxuXG4gICA4LiBNaXNjZWxsYW5lb3VzXG5cbiAgICAgIGEuIEVhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGlvbiwgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS5cblxuICAgICAgYy4gTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC5cblxuICAgICAgZC4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuXG5cbiAgICAgIGUuIFRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuXG5cbkNyZWF0aXZlIENvbW1vbnMgTm90aWNlXG5cbkNyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLlxuXG5FeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2UgYnkgZWl0aGVyIHBhcnR5IG9mIHRoZSB0cmFkZW1hcmsgXCJDcmVhdGl2ZSBDb21tb25zXCIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhpcyBMaWNlbnNlLlxuXG5DcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLiJdLCJsaWNlbnNlSWRzIjpbIkNDLUJZLU5DLU5ELTMuMCJdLCJrZXl3b3JkcyI6WyJub25jb21tZXJjaWFsIG5vZGVyaXZzIDMiLCJpbiBjb2xsZWN0aW9ucyB0aGUiLCJjb2xsZWN0aW9ucyB0aGUgYWJvdmUiLCJzdWJqZWN0IHRvIDgiLCJ0byA4IGYiLCJhdXRob3JzIG9mIGNvbGxlY3Rpb24iLCJvZiBjb2xsZWN0aW9uIGFwcGVhcnMiLCI0IGIgZSIsImIgZSBleGNlcHQiLCJhdHRyaWJ1dGlvbiBub25jb21tZXJjaWFsIG5vZGVyaXZzIDMiLCJub25jb21tZXJjaWFsIG5vZGVyaXZzIDMgMCIsImluY29ycG9yYXRlZCBpbiBjb2xsZWN0aW9ucyB0aGUiLCJpbiBjb2xsZWN0aW9ucyB0aGUgYWJvdmUiLCJjb2xsZWN0aW9ucyB0aGUgYWJvdmUgcmlnaHRzIiwiYWRhcHRhdGlvbnMgc3ViamVjdCB0byA4Iiwic3ViamVjdCB0byA4IGYiLCJ0byA4IGYgYWxsIiwiY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgY29sbGVjdGlvbiIsImF1dGhvcnMgb2YgY29sbGVjdGlvbiBhcHBlYXJzIiwib2YgY29sbGVjdGlvbiBhcHBlYXJzIHRoZW4iLCJzZWN0aW9uIDQgYiBlIiwiNCBiIGUgZXhjZXB0IiwiYiBlIGV4Y2VwdCBhcyIsImNvbW1vbnMgYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCBub2Rlcml2cyAzIiwiYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCBub2Rlcml2cyAzIDAiLCJub25jb21tZXJjaWFsIG5vZGVyaXZzIDMgMCB1bnBvcnRlZCIsImFzIGluY29ycG9yYXRlZCBpbiBjb2xsZWN0aW9ucyB0aGUiLCJpbmNvcnBvcmF0ZWQgaW4gY29sbGVjdGlvbnMgdGhlIGFib3ZlIiwiaW4gY29sbGVjdGlvbnMgdGhlIGFib3ZlIHJpZ2h0cyIsImNvbGxlY3Rpb25zIHRoZSBhYm92ZSByaWdodHMgbWF5IiwibWFrZSBhZGFwdGF0aW9ucyBzdWJqZWN0IHRvIDgiLCJhZGFwdGF0aW9ucyBzdWJqZWN0IHRvIDggZiIsInN1YmplY3QgdG8gOCBmIGFsbCIsInRvIDggZiBhbGwgcmlnaHRzIiwiYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIGNvbGxlY3Rpb24iLCJjb250cmlidXRpbmcgYXV0aG9ycyBvZiBjb2xsZWN0aW9uIGFwcGVhcnMiLCJhdXRob3JzIG9mIGNvbGxlY3Rpb24gYXBwZWFycyB0aGVuIiwib2YgY29sbGVjdGlvbiBhcHBlYXJzIHRoZW4gYXMiLCJ1bmRlciBzZWN0aW9uIDQgYiBlIiwic2VjdGlvbiA0IGIgZSBleGNlcHQiLCI0IGIgZSBleGNlcHQgYXMiLCJiIGUgZXhjZXB0IGFzIG90aGVyd2lzZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtTm9EZXJpdmF0aXZlcyA0LjAgSW50ZXJuYXRpb25hbCBDcmVhdGl2ZSBDb21tb25zIENvcnBvcmF0aW9uIChcIkNyZWF0aXZlIENvbW1vbnNcIikgaXMgbm90IGEgbGF3IGZpcm0gYW5kIGRvZXMgbm90IHByb3ZpZGUgbGVnYWwgc2VydmljZXMgb3IgbGVnYWwgYWR2aWNlLiBEaXN0cmlidXRpb24gb2YgQ3JlYXRpdmUgQ29tbW9ucyBwdWJsaWMgbGljZW5zZXMgZG9lcyBub3QgY3JlYXRlIGEgbGF3eWVyLWNsaWVudCBvciBvdGhlciByZWxhdGlvbnNoaXAuIENyZWF0aXZlIENvbW1vbnMgbWFrZXMgaXRzIGxpY2Vuc2VzIGFuZCByZWxhdGVkIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBvbiBhbiBcImFzLWlzXCIgYmFzaXMuIENyZWF0aXZlIENvbW1vbnMgZ2l2ZXMgbm8gd2FycmFudGllcyByZWdhcmRpbmcgaXRzIGxpY2Vuc2VzLCBhbnkgbWF0ZXJpYWwgbGljZW5zZWQgdW5kZXIgdGhlaXIgdGVybXMgYW5kIGNvbmRpdGlvbnMsIG9yIGFueSByZWxhdGVkIGluZm9ybWF0aW9uLiBDcmVhdGl2ZSBDb21tb25zIGRpc2NsYWltcyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzIHJlc3VsdGluZyBmcm9tIHRoZWlyIHVzZSB0byB0aGUgZnVsbGVzdCBleHRlbnQgcG9zc2libGUuXG5cblVzaW5nIENyZWF0aXZlIENvbW1vbnMgUHVibGljIExpY2Vuc2VzXG5cbkNyZWF0aXZlIENvbW1vbnMgcHVibGljIGxpY2Vuc2VzIHByb3ZpZGUgYSBzdGFuZGFyZCBzZXQgb2YgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBjcmVhdG9ycyBhbmQgb3RoZXIgcmlnaHRzIGhvbGRlcnMgbWF5IHVzZSB0byBzaGFyZSBvcmlnaW5hbCB3b3JrcyBvZiBhdXRob3JzaGlwIGFuZCBvdGhlciBtYXRlcmlhbCBzdWJqZWN0IHRvIGNvcHlyaWdodCBhbmQgY2VydGFpbiBvdGhlciByaWdodHMgc3BlY2lmaWVkIGluIHRoZSBwdWJsaWMgbGljZW5zZSBiZWxvdy4gVGhlIGZvbGxvd2luZyBjb25zaWRlcmF0aW9ucyBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSwgYXJlIG5vdCBleGhhdXN0aXZlLCBhbmQgZG8gbm90IGZvcm0gcGFydCBvZiBvdXIgbGljZW5zZXMuXG5cbkNvbnNpZGVyYXRpb25zIGZvciBsaWNlbnNvcnM6IE91ciBwdWJsaWMgbGljZW5zZXMgYXJlIGludGVuZGVkIGZvciB1c2UgYnkgdGhvc2UgYXV0aG9yaXplZCB0byBnaXZlIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgbWF0ZXJpYWwgaW4gd2F5cyBvdGhlcndpc2UgcmVzdHJpY3RlZCBieSBjb3B5cmlnaHQgYW5kIGNlcnRhaW4gb3RoZXIgcmlnaHRzLiBPdXIgbGljZW5zZXMgYXJlIGlycmV2b2NhYmxlLiBMaWNlbnNvcnMgc2hvdWxkIHJlYWQgYW5kIHVuZGVyc3RhbmQgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlIHRoZXkgY2hvb3NlIGJlZm9yZSBhcHBseWluZyBpdC4gTGljZW5zb3JzIHNob3VsZCBhbHNvIHNlY3VyZSBhbGwgcmlnaHRzIG5lY2Vzc2FyeSBiZWZvcmUgYXBwbHlpbmcgb3VyIGxpY2Vuc2VzIHNvIHRoYXQgdGhlIHB1YmxpYyBjYW4gcmV1c2UgdGhlIG1hdGVyaWFsIGFzIGV4cGVjdGVkLiBMaWNlbnNvcnMgc2hvdWxkIGNsZWFybHkgbWFyayBhbnkgbWF0ZXJpYWwgbm90IHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UuIFRoaXMgaW5jbHVkZXMgb3RoZXIgQ0MtbGljZW5zZWQgbWF0ZXJpYWwsIG9yIG1hdGVyaWFsIHVzZWQgdW5kZXIgYW4gZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gY29weXJpZ2h0LiBNb3JlIGNvbnNpZGVyYXRpb25zIGZvciBsaWNlbnNvcnMgOiB3aWtpLmNyZWF0aXZlY29tbW9ucy5vcmcvQ29uc2lkZXJhdGlvbnNfZm9yX2xpY2Vuc29yc1xuXG5Db25zaWRlcmF0aW9ucyBmb3IgdGhlIHB1YmxpYzogQnkgdXNpbmcgb25lIG9mIG91ciBwdWJsaWMgbGljZW5zZXMsIGEgbGljZW5zb3IgZ3JhbnRzIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIGxpY2Vuc2VkIG1hdGVyaWFsIHVuZGVyIHNwZWNpZmllZCB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgdGhlIGxpY2Vuc29yJ3MgcGVybWlzc2lvbiBpcyBub3QgbmVjZXNzYXJ5IGZvciBhbnkgcmVhc29u4oCTZm9yIGV4YW1wbGUsIGJlY2F1c2Ugb2YgYW55IGFwcGxpY2FibGUgZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gY29weXJpZ2h04oCTdGhlbiB0aGF0IHVzZSBpcyBub3QgcmVndWxhdGVkIGJ5IHRoZSBsaWNlbnNlLiBPdXIgbGljZW5zZXMgZ3JhbnQgb25seSBwZXJtaXNzaW9ucyB1bmRlciBjb3B5cmlnaHQgYW5kIGNlcnRhaW4gb3RoZXIgcmlnaHRzIHRoYXQgYSBsaWNlbnNvciBoYXMgYXV0aG9yaXR5IHRvIGdyYW50LiBVc2Ugb2YgdGhlIGxpY2Vuc2VkIG1hdGVyaWFsIG1heSBzdGlsbCBiZSByZXN0cmljdGVkIGZvciBvdGhlciByZWFzb25zLCBpbmNsdWRpbmcgYmVjYXVzZSBvdGhlcnMgaGF2ZSBjb3B5cmlnaHQgb3Igb3RoZXIgcmlnaHRzIGluIHRoZSBtYXRlcmlhbC4gQSBsaWNlbnNvciBtYXkgbWFrZSBzcGVjaWFsIHJlcXVlc3RzLCBzdWNoIGFzIGFza2luZyB0aGF0IGFsbCBjaGFuZ2VzIGJlIG1hcmtlZCBvciBkZXNjcmliZWQuIEFsdGhvdWdoIG5vdCByZXF1aXJlZCBieSBvdXIgbGljZW5zZXMsIHlvdSBhcmUgZW5jb3VyYWdlZCB0byByZXNwZWN0IHRob3NlIHJlcXVlc3RzIHdoZXJlIHJlYXNvbmFibGUuIE1vcmUgY29uc2lkZXJhdGlvbnMgZm9yIHRoZSBwdWJsaWMgOiB3aWtpLmNyZWF0aXZlY29tbW9ucy5vcmcvQ29uc2lkZXJhdGlvbnNfZm9yX2xpY2Vuc2Vlc1xuXG5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtTm9EZXJpdmF0aXZlcyA0LjAgSW50ZXJuYXRpb25hbCBQdWJsaWMgTGljZW5zZVxuXG5CeSBleGVyY2lzaW5nIHRoZSBMaWNlbnNlZCBSaWdodHMgKGRlZmluZWQgYmVsb3cpLCBZb3UgYWNjZXB0IGFuZCBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtTm9EZXJpdmF0aXZlcyA0LjAgSW50ZXJuYXRpb25hbCBQdWJsaWMgTGljZW5zZSAoXCJQdWJsaWMgTGljZW5zZVwiKS4gVG8gdGhlIGV4dGVudCB0aGlzIFB1YmxpYyBMaWNlbnNlIG1heSBiZSBpbnRlcnByZXRlZCBhcyBhIGNvbnRyYWN0LCBZb3UgYXJlIGdyYW50ZWQgdGhlIExpY2Vuc2VkIFJpZ2h0cyBpbiBjb25zaWRlcmF0aW9uIG9mIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgYW5kIHRoZSBMaWNlbnNvciBncmFudHMgWW91IHN1Y2ggcmlnaHRzIGluIGNvbnNpZGVyYXRpb24gb2YgYmVuZWZpdHMgdGhlIExpY2Vuc29yIHJlY2VpdmVzIGZyb20gbWFraW5nIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBhdmFpbGFibGUgdW5kZXIgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuXG5cbiAgIFxuXG4gICBTZWN0aW9uIDEg4oCTIERlZmluaXRpb25zLlxuXG4gICAgICBhLiBBZGFwdGVkIE1hdGVyaWFsIG1lYW5zIG1hdGVyaWFsIHN1YmplY3QgdG8gQ29weXJpZ2h0IGFuZCBTaW1pbGFyIFJpZ2h0cyB0aGF0IGlzIGRlcml2ZWQgZnJvbSBvciBiYXNlZCB1cG9uIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBhbmQgaW4gd2hpY2ggdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIHRyYW5zbGF0ZWQsIGFsdGVyZWQsIGFycmFuZ2VkLCB0cmFuc2Zvcm1lZCwgb3Igb3RoZXJ3aXNlIG1vZGlmaWVkIGluIGEgbWFubmVyIHJlcXVpcmluZyBwZXJtaXNzaW9uIHVuZGVyIHRoZSBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIGhlbGQgYnkgdGhlIExpY2Vuc29yLiBGb3IgcHVycG9zZXMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgd2hlcmUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSwgb3Igc291bmQgcmVjb3JkaW5nLCBBZGFwdGVkIE1hdGVyaWFsIGlzIGFsd2F5cyBwcm9kdWNlZCB3aGVyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaXMgc3luY2hlZCBpbiB0aW1lZCByZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlLlxuXG4gICAgICBiLiBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIG1lYW5zIGNvcHlyaWdodCBhbmQvb3Igc2ltaWxhciByaWdodHMgY2xvc2VseSByZWxhdGVkIHRvIGNvcHlyaWdodCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcGVyZm9ybWFuY2UsIGJyb2FkY2FzdCwgc291bmQgcmVjb3JkaW5nLCBhbmQgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzLCB3aXRob3V0IHJlZ2FyZCB0byBob3cgdGhlIHJpZ2h0cyBhcmUgbGFiZWxlZCBvciBjYXRlZ29yaXplZC4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgUHVibGljIExpY2Vuc2UsIHRoZSByaWdodHMgc3BlY2lmaWVkIGluIFNlY3Rpb24gMihiKSgxKS0oMikgYXJlIG5vdCBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzLlxuXG4gICAgICBjLiBFZmZlY3RpdmUgVGVjaG5vbG9naWNhbCBNZWFzdXJlcyBtZWFucyB0aG9zZSBtZWFzdXJlcyB0aGF0LCBpbiB0aGUgYWJzZW5jZSBvZiBwcm9wZXIgYXV0aG9yaXR5LCBtYXkgbm90IGJlIGNpcmN1bXZlbnRlZCB1bmRlciBsYXdzIGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgQXJ0aWNsZSAxMSBvZiB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IGFkb3B0ZWQgb24gRGVjZW1iZXIgMjAsIDE5OTYsIGFuZC9vciBzaW1pbGFyIGludGVybmF0aW9uYWwgYWdyZWVtZW50cy5cblxuICAgICAgZC4gRXhjZXB0aW9ucyBhbmQgTGltaXRhdGlvbnMgbWVhbnMgZmFpciB1c2UsIGZhaXIgZGVhbGluZywgYW5kL29yIGFueSBvdGhlciBleGNlcHRpb24gb3IgbGltaXRhdGlvbiB0byBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIHRoYXQgYXBwbGllcyB0byBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuXG5cbiAgICAgIGUuIExpY2Vuc2VkIE1hdGVyaWFsIG1lYW5zIHRoZSBhcnRpc3RpYyBvciBsaXRlcmFyeSB3b3JrLCBkYXRhYmFzZSwgb3Igb3RoZXIgbWF0ZXJpYWwgdG8gd2hpY2ggdGhlIExpY2Vuc29yIGFwcGxpZWQgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgZi4gTGljZW5zZWQgUmlnaHRzIG1lYW5zIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3Ugc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgd2hpY2ggYXJlIGxpbWl0ZWQgdG8gYWxsIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgdGhhdCBhcHBseSB0byBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIHRoYXQgdGhlIExpY2Vuc29yIGhhcyBhdXRob3JpdHkgdG8gbGljZW5zZS5cblxuICAgICAgZy4gTGljZW5zb3IgbWVhbnMgdGhlIGluZGl2aWR1YWwocykgb3IgZW50aXR5KGllcykgZ3JhbnRpbmcgcmlnaHRzIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgICAgIGguIE5vbkNvbW1lcmNpYWwgbWVhbnMgbm90IHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkcyBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24uIEZvciBwdXJwb3NlcyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLCB0aGUgZXhjaGFuZ2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGZvciBvdGhlciBtYXRlcmlhbCBzdWJqZWN0IHRvIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgYnkgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igc2ltaWxhciBtZWFucyBpcyBOb25Db21tZXJjaWFsIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2UuXG5cbiAgICAgIGkuIFNoYXJlIG1lYW5zIHRvIHByb3ZpZGUgbWF0ZXJpYWwgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyB0aGF0IHJlcXVpcmVzIHBlcm1pc3Npb24gdW5kZXIgdGhlIExpY2Vuc2VkIFJpZ2h0cywgc3VjaCBhcyByZXByb2R1Y3Rpb24sIHB1YmxpYyBkaXNwbGF5LCBwdWJsaWMgcGVyZm9ybWFuY2UsIGRpc3RyaWJ1dGlvbiwgZGlzc2VtaW5hdGlvbiwgY29tbXVuaWNhdGlvbiwgb3IgaW1wb3J0YXRpb24sIGFuZCB0byBtYWtlIG1hdGVyaWFsIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluY2x1ZGluZyBpbiB3YXlzIHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlIG1hdGVyaWFsIGZyb20gYSBwbGFjZSBhbmQgYXQgYSB0aW1lIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbS5cblxuICAgICAgai4gU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzIG1lYW5zIHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCByZXN1bHRpbmcgZnJvbSBEaXJlY3RpdmUgOTYvOS9FQyBvZiB0aGUgRXVyb3BlYW4gUGFybGlhbWVudCBhbmQgb2YgdGhlIENvdW5jaWwgb2YgMTEgTWFyY2ggMTk5NiBvbiB0aGUgbGVnYWwgcHJvdGVjdGlvbiBvZiBkYXRhYmFzZXMsIGFzIGFtZW5kZWQgYW5kL29yIHN1Y2NlZWRlZCwgYXMgd2VsbCBhcyBvdGhlciBlc3NlbnRpYWxseSBlcXVpdmFsZW50IHJpZ2h0cyBhbnl3aGVyZSBpbiB0aGUgd29ybGQuXG5cbiAgICAgIGsuIFlvdSBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyB0aGUgTGljZW5zZWQgUmlnaHRzIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuIFlvdXIgaGFzIGEgY29ycmVzcG9uZGluZyBtZWFuaW5nLlxuXG4gICBcblxuICAgU2VjdGlvbiAyIOKAkyBTY29wZS5cblxuICAgICAgYS4gTGljZW5zZSBncmFudC5cblxuICAgICAgICAgMS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgdGhlIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1zdWJsaWNlbnNhYmxlLCBub24tZXhjbHVzaXZlLCBpcnJldm9jYWJsZSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMgaW4gdGhlIExpY2Vuc2VkIE1hdGVyaWFsIHRvOlxuXG4gICAgICAgICAgICBBLiByZXByb2R1Y2UgYW5kIFNoYXJlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCwgaW4gd2hvbGUgb3IgaW4gcGFydCwgZm9yIE5vbkNvbW1lcmNpYWwgcHVycG9zZXMgb25seTsgYW5kXG5cbiAgICAgICAgICAgIEIuIHByb2R1Y2UgYW5kIHJlcHJvZHVjZSwgYnV0IG5vdCBTaGFyZSwgQWRhcHRlZCBNYXRlcmlhbCBmb3IgTm9uQ29tbWVyY2lhbCBwdXJwb3NlcyBvbmx5LlxuXG4gICAgICAgICAyLiBFeGNlcHRpb25zIGFuZCBMaW1pdGF0aW9ucy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIEV4Y2VwdGlvbnMgYW5kIExpbWl0YXRpb25zIGFwcGx5IHRvIFlvdXIgdXNlLCB0aGlzIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IGFwcGx5LCBhbmQgWW91IGRvIG5vdCBuZWVkIHRvIGNvbXBseSB3aXRoIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgICAgICAgMy4gVGVybS4gVGhlIHRlcm0gb2YgdGhpcyBQdWJsaWMgTGljZW5zZSBpcyBzcGVjaWZpZWQgaW4gU2VjdGlvbiA2KGEpLlxuXG4gICAgICAgICA0LiBNZWRpYSBhbmQgZm9ybWF0czsgdGVjaG5pY2FsIG1vZGlmaWNhdGlvbnMgYWxsb3dlZC4gVGhlIExpY2Vuc29yIGF1dGhvcml6ZXMgWW91IHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBjcmVhdGVkLCBhbmQgdG8gbWFrZSB0ZWNobmljYWwgbW9kaWZpY2F0aW9ucyBuZWNlc3NhcnkgdG8gZG8gc28uIFRoZSBMaWNlbnNvciB3YWl2ZXMgYW5kL29yIGFncmVlcyBub3QgdG8gYXNzZXJ0IGFueSByaWdodCBvciBhdXRob3JpdHkgdG8gZm9yYmlkIFlvdSBmcm9tIG1ha2luZyB0ZWNobmljYWwgbW9kaWZpY2F0aW9ucyBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIExpY2Vuc2VkIFJpZ2h0cywgaW5jbHVkaW5nIHRlY2huaWNhbCBtb2RpZmljYXRpb25zIG5lY2Vzc2FyeSB0byBjaXJjdW12ZW50IEVmZmVjdGl2ZSBUZWNobm9sb2dpY2FsIE1lYXN1cmVzLiBGb3IgcHVycG9zZXMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgc2ltcGx5IG1ha2luZyBtb2RpZmljYXRpb25zIGF1dGhvcml6ZWQgYnkgdGhpcyBTZWN0aW9uIDIoYSkoNCkgbmV2ZXIgcHJvZHVjZXMgQWRhcHRlZCBNYXRlcmlhbC5cblxuICAgICAgICAgNS4gRG93bnN0cmVhbSByZWNpcGllbnRzLlxuXG4gICAgICAgICAgICBBLiBPZmZlciBmcm9tIHRoZSBMaWNlbnNvciDigJMgTGljZW5zZWQgTWF0ZXJpYWwuIEV2ZXJ5IHJlY2lwaWVudCBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXV0b21hdGljYWxseSByZWNlaXZlcyBhbiBvZmZlciBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSB0aGUgTGljZW5zZWQgUmlnaHRzIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICAgICAgICAgICBCLiBObyBkb3duc3RyZWFtIHJlc3RyaWN0aW9ucy4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCB0ZXJtcyBvciBjb25kaXRpb25zIG9uLCBvciBhcHBseSBhbnkgRWZmZWN0aXZlIFRlY2hub2xvZ2ljYWwgTWVhc3VyZXMgdG8sIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBpZiBkb2luZyBzbyByZXN0cmljdHMgZXhlcmNpc2Ugb2YgdGhlIExpY2Vuc2VkIFJpZ2h0cyBieSBhbnkgcmVjaXBpZW50IG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbC5cblxuICAgICAgICAgNi4gTm8gZW5kb3JzZW1lbnQuIE5vdGhpbmcgaW4gdGhpcyBQdWJsaWMgTGljZW5zZSBjb25zdGl0dXRlcyBvciBtYXkgYmUgY29uc3RydWVkIGFzIHBlcm1pc3Npb24gdG8gYXNzZXJ0IG9yIGltcGx5IHRoYXQgWW91IGFyZSwgb3IgdGhhdCBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaXMsIGNvbm5lY3RlZCB3aXRoLCBvciBzcG9uc29yZWQsIGVuZG9yc2VkLCBvciBncmFudGVkIG9mZmljaWFsIHN0YXR1cyBieSwgdGhlIExpY2Vuc29yIG9yIG90aGVycyBkZXNpZ25hdGVkIHRvIHJlY2VpdmUgYXR0cmlidXRpb24gYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiAzKGEpKDEpKEEpKGkpLlxuXG4gICAgICBiLiBPdGhlciByaWdodHMuXG5cbiAgICAgICAgIDEuIE1vcmFsIHJpZ2h0cywgc3VjaCBhcyB0aGUgcmlnaHQgb2YgaW50ZWdyaXR5LCBhcmUgbm90IGxpY2Vuc2VkIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UsIG5vciBhcmUgcHVibGljaXR5LCBwcml2YWN5LCBhbmQvb3Igb3RoZXIgc2ltaWxhciBwZXJzb25hbGl0eSByaWdodHM7IGhvd2V2ZXIsIHRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoZSBMaWNlbnNvciB3YWl2ZXMgYW5kL29yIGFncmVlcyBub3QgdG8gYXNzZXJ0IGFueSBzdWNoIHJpZ2h0cyBoZWxkIGJ5IHRoZSBMaWNlbnNvciB0byB0aGUgbGltaXRlZCBleHRlbnQgbmVjZXNzYXJ5IHRvIGFsbG93IFlvdSB0byBleGVyY2lzZSB0aGUgTGljZW5zZWQgUmlnaHRzLCBidXQgbm90IG90aGVyd2lzZS5cblxuICAgICAgICAgMi4gUGF0ZW50IGFuZCB0cmFkZW1hcmsgcmlnaHRzIGFyZSBub3QgbGljZW5zZWQgdW5kZXIgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgICAgMy4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhlIExpY2Vuc29yIHdhaXZlcyBhbnkgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgZnJvbSBZb3UgZm9yIHRoZSBleGVyY2lzZSBvZiB0aGUgTGljZW5zZWQgUmlnaHRzLCB3aGV0aGVyIGRpcmVjdGx5IG9yIHRocm91Z2ggYSBjb2xsZWN0aW5nIHNvY2lldHkgdW5kZXIgYW55IHZvbHVudGFyeSBvciB3YWl2YWJsZSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lLiBJbiBhbGwgb3RoZXIgY2FzZXMgdGhlIExpY2Vuc29yIGV4cHJlc3NseSByZXNlcnZlcyBhbnkgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcywgaW5jbHVkaW5nIHdoZW4gdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIHVzZWQgb3RoZXIgdGhhbiBmb3IgTm9uQ29tbWVyY2lhbCBwdXJwb3Nlcy5cblxuICAgXG5cbiAgIFNlY3Rpb24gMyDigJMgTGljZW5zZSBDb25kaXRpb25zLlxuXG4gICBZb3VyIGV4ZXJjaXNlIG9mIHRoZSBMaWNlbnNlZCBSaWdodHMgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMuXG5cbiAgICAgIGEuIEF0dHJpYnV0aW9uLlxuXG4gICAgICAgICAxLiBJZiBZb3UgU2hhcmUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLCBZb3UgbXVzdDpcblxuICAgICAgICAgICAgQS4gcmV0YWluIHRoZSBmb2xsb3dpbmcgaWYgaXQgaXMgc3VwcGxpZWQgYnkgdGhlIExpY2Vuc29yIHdpdGggdGhlIExpY2Vuc2VkIE1hdGVyaWFsOlxuXG4gICAgICAgICAgICAgICBpLiBpZGVudGlmaWNhdGlvbiBvZiB0aGUgY3JlYXRvcihzKSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIGFueSBvdGhlcnMgZGVzaWduYXRlZCB0byByZWNlaXZlIGF0dHJpYnV0aW9uLCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciAoaW5jbHVkaW5nIGJ5IHBzZXVkb255bSBpZiBkZXNpZ25hdGVkKTtcblxuICAgICAgICAgICAgICAgaWkuIGEgY29weXJpZ2h0IG5vdGljZTtcblxuICAgICAgICAgICAgICAgaWlpLiBhIG5vdGljZSB0aGF0IHJlZmVycyB0byB0aGlzIFB1YmxpYyBMaWNlbnNlO1xuXG4gICAgICAgICAgICAgICBpdi4gYSBub3RpY2UgdGhhdCByZWZlcnMgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcztcblxuICAgICAgICAgICAgICAgdi4gYSBVUkkgb3IgaHlwZXJsaW5rIHRvIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGU7XG5cbiAgICAgICAgICAgIEIuIGluZGljYXRlIGlmIFlvdSBtb2RpZmllZCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIHJldGFpbiBhbiBpbmRpY2F0aW9uIG9mIGFueSBwcmV2aW91cyBtb2RpZmljYXRpb25zOyBhbmRcblxuICAgICAgICAgICAgQy4gaW5kaWNhdGUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIGxpY2Vuc2VkIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UsIGFuZCBpbmNsdWRlIHRoZSB0ZXh0IG9mLCBvciB0aGUgVVJJIG9yIGh5cGVybGluayB0bywgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgICAgRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UgdG8gU2hhcmUgQWRhcHRlZCBNYXRlcmlhbC5cblxuICAgICAgICAgMi4gWW91IG1heSBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMyhhKSgxKSBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgYmFzZWQgb24gdGhlIG1lZGl1bSwgbWVhbnMsIGFuZCBjb250ZXh0IGluIHdoaWNoIFlvdSBTaGFyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuIEZvciBleGFtcGxlLCBpdCBtYXkgYmUgcmVhc29uYWJsZSB0byBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGJ5IHByb3ZpZGluZyBhIFVSSSBvciBoeXBlcmxpbmsgdG8gYSByZXNvdXJjZSB0aGF0IGluY2x1ZGVzIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi5cblxuICAgICAgICAgMy4gSWYgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciwgWW91IG11c3QgcmVtb3ZlIGFueSBvZiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgU2VjdGlvbiAzKGEpKDEpKEEpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZS5cblxuICAgXG5cbiAgIFNlY3Rpb24gNCDigJMgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzLlxuXG4gICBXaGVyZSB0aGUgTGljZW5zZWQgUmlnaHRzIGluY2x1ZGUgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzIHRoYXQgYXBwbHkgdG8gWW91ciB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsOlxuXG4gICAgICBhLiBmb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgU2VjdGlvbiAyKGEpKDEpIGdyYW50cyBZb3UgdGhlIHJpZ2h0IHRvIGV4dHJhY3QsIHJldXNlLCByZXByb2R1Y2UsIGFuZCBTaGFyZSBhbGwgb3IgYSBzdWJzdGFudGlhbCBwb3J0aW9uIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YWJhc2UgZm9yIE5vbkNvbW1lcmNpYWwgcHVycG9zZXMgb25seSBhbmQgcHJvdmlkZWQgWW91IGRvIG5vdCBTaGFyZSBBZGFwdGVkIE1hdGVyaWFsO1xuXG4gICAgICBiLiBpZiBZb3UgaW5jbHVkZSBhbGwgb3IgYSBzdWJzdGFudGlhbCBwb3J0aW9uIG9mIHRoZSBkYXRhYmFzZSBjb250ZW50cyBpbiBhIGRhdGFiYXNlIGluIHdoaWNoIFlvdSBoYXZlIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cywgdGhlbiB0aGUgZGF0YWJhc2UgaW4gd2hpY2ggWW91IGhhdmUgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzIChidXQgbm90IGl0cyBpbmRpdmlkdWFsIGNvbnRlbnRzKSBpcyBBZGFwdGVkIE1hdGVyaWFsOyBhbmRcblxuICAgICAgYy4gWW91IG11c3QgY29tcGx5IHdpdGggdGhlIGNvbmRpdGlvbnMgaW4gU2VjdGlvbiAzKGEpIGlmIFlvdSBTaGFyZSBhbGwgb3IgYSBzdWJzdGFudGlhbCBwb3J0aW9uIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YWJhc2UuXG5cbiAgIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIFNlY3Rpb24gNCBzdXBwbGVtZW50cyBhbmQgZG9lcyBub3QgcmVwbGFjZSBZb3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2Ugd2hlcmUgdGhlIExpY2Vuc2VkIFJpZ2h0cyBpbmNsdWRlIG90aGVyIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMuXG5cbiAgIFxuXG4gICBTZWN0aW9uIDUg4oCTIERpc2NsYWltZXIgb2YgV2FycmFudGllcyBhbmQgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuXG5cbiAgICAgIGEuIFVubGVzcyBvdGhlcndpc2Ugc2VwYXJhdGVseSB1bmRlcnRha2VuIGJ5IHRoZSBMaWNlbnNvciwgdG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhlIExpY2Vuc29yIG9mZmVycyB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXMtaXMgYW5kIGFzLWF2YWlsYWJsZSwgYW5kIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBvciB3YXJyYW50aWVzIG9mIGFueSBraW5kIGNvbmNlcm5pbmcgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLCB3aGV0aGVyIGV4cHJlc3MsIGltcGxpZWQsIHN0YXR1dG9yeSwgb3Igb3RoZXIuIFRoaXMgaW5jbHVkZXMsIHdpdGhvdXQgbGltaXRhdGlvbiwgd2FycmFudGllcyBvZiB0aXRsZSwgbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgbm9uLWluZnJpbmdlbWVudCwgYWJzZW5jZSBvZiBsYXRlbnQgb3Igb3RoZXIgZGVmZWN0cywgYWNjdXJhY3ksIG9yIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGVycm9ycywgd2hldGhlciBvciBub3Qga25vd24gb3IgZGlzY292ZXJhYmxlLiBXaGVyZSBkaXNjbGFpbWVycyBvZiB3YXJyYW50aWVzIGFyZSBub3QgYWxsb3dlZCBpbiBmdWxsIG9yIGluIHBhcnQsIHRoaXMgZGlzY2xhaW1lciBtYXkgbm90IGFwcGx5IHRvIFlvdS5cblxuICAgICAgYi4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgaW4gbm8gZXZlbnQgd2lsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIFlvdSBvbiBhbnkgbGVnYWwgdGhlb3J5IChpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgbmVnbGlnZW5jZSkgb3Igb3RoZXJ3aXNlIGZvciBhbnkgZGlyZWN0LCBzcGVjaWFsLCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgY29uc2VxdWVudGlhbCwgcHVuaXRpdmUsIGV4ZW1wbGFyeSwgb3Igb3RoZXIgbG9zc2VzLCBjb3N0cywgZXhwZW5zZXMsIG9yIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSBvciB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLCBldmVuIGlmIHRoZSBMaWNlbnNvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGxvc3NlcywgY29zdHMsIGV4cGVuc2VzLCBvciBkYW1hZ2VzLiBXaGVyZSBhIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IGlzIG5vdCBhbGxvd2VkIGluIGZ1bGwgb3IgaW4gcGFydCwgdGhpcyBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LlxuXG4gICAgICBjLiBUaGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZCBhYm92ZSBzaGFsbCBiZSBpbnRlcnByZXRlZCBpbiBhIG1hbm5lciB0aGF0LCB0byB0aGUgZXh0ZW50IHBvc3NpYmxlLCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzIGFuIGFic29sdXRlIGRpc2NsYWltZXIgYW5kIHdhaXZlciBvZiBhbGwgbGlhYmlsaXR5LlxuXG4gICBcblxuICAgU2VjdGlvbiA2IOKAkyBUZXJtIGFuZCBUZXJtaW5hdGlvbi5cblxuICAgICAgYS4gVGhpcyBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIGZvciB0aGUgdGVybSBvZiB0aGUgQ29weXJpZ2h0IGFuZCBTaW1pbGFyIFJpZ2h0cyBsaWNlbnNlZCBoZXJlLiBIb3dldmVyLCBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0aGlzIFB1YmxpYyBMaWNlbnNlLCB0aGVuIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkuXG5cbiAgICAgIGIuIFdoZXJlIFlvdXIgcmlnaHQgdG8gdXNlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBoYXMgdGVybWluYXRlZCB1bmRlciBTZWN0aW9uIDYoYSksIGl0IHJlaW5zdGF0ZXM6XG5cbiAgICAgICAgIDEuIGF1dG9tYXRpY2FsbHkgYXMgb2YgdGhlIGRhdGUgdGhlIHZpb2xhdGlvbiBpcyBjdXJlZCwgcHJvdmlkZWQgaXQgaXMgY3VyZWQgd2l0aGluIDMwIGRheXMgb2YgWW91ciBkaXNjb3Zlcnkgb2YgdGhlIHZpb2xhdGlvbjsgb3JcblxuICAgICAgICAgMi4gdXBvbiBleHByZXNzIHJlaW5zdGF0ZW1lbnQgYnkgdGhlIExpY2Vuc29yLlxuXG4gICAgICBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyBTZWN0aW9uIDYoYikgZG9lcyBub3QgYWZmZWN0IGFueSByaWdodCB0aGUgTGljZW5zb3IgbWF5IGhhdmUgdG8gc2VlayByZW1lZGllcyBmb3IgWW91ciB2aW9sYXRpb25zIG9mIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgICAgIGMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGUgTGljZW5zb3IgbWF5IGFsc28gb2ZmZXIgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIHVuZGVyIHNlcGFyYXRlIHRlcm1zIG9yIGNvbmRpdGlvbnMgb3Igc3RvcCBkaXN0cmlidXRpbmcgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGF0IGFueSB0aW1lOyBob3dldmVyLCBkb2luZyBzbyB3aWxsIG5vdCB0ZXJtaW5hdGUgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgZC4gU2VjdGlvbnMgMSwgNSwgNiwgNywgYW5kIDggc3Vydml2ZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICBcblxuICAgU2VjdGlvbiA3IOKAkyBPdGhlciBUZXJtcyBhbmQgQ29uZGl0aW9ucy5cblxuICAgICAgYS4gVGhlIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgdGVybXMgb3IgY29uZGl0aW9ucyBjb21tdW5pY2F0ZWQgYnkgWW91IHVubGVzcyBleHByZXNzbHkgYWdyZWVkLlxuXG4gICAgICBiLiBBbnkgYXJyYW5nZW1lbnRzLCB1bmRlcnN0YW5kaW5ncywgb3IgYWdyZWVtZW50cyByZWdhcmRpbmcgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIG5vdCBzdGF0ZWQgaGVyZWluIGFyZSBzZXBhcmF0ZSBmcm9tIGFuZCBpbmRlcGVuZGVudCBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgXG5cbiAgIFNlY3Rpb24gOCDigJMgSW50ZXJwcmV0YXRpb24uXG5cbiAgICAgIGEuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90LCBhbmQgc2hhbGwgbm90IGJlIGludGVycHJldGVkIHRvLCByZWR1Y2UsIGxpbWl0LCByZXN0cmljdCwgb3IgaW1wb3NlIGNvbmRpdGlvbnMgb24gYW55IHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgdGhhdCBjb3VsZCBsYXdmdWxseSBiZSBtYWRlIHdpdGhvdXQgcGVybWlzc2lvbiB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICAgICBiLiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlLCBpZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgUHVibGljIExpY2Vuc2UgaXMgZGVlbWVkIHVuZW5mb3JjZWFibGUsIGl0IHNoYWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBJZiB0aGUgcHJvdmlzaW9uIGNhbm5vdCBiZSByZWZvcm1lZCwgaXQgc2hhbGwgYmUgc2V2ZXJlZCBmcm9tIHRoaXMgUHVibGljIExpY2Vuc2Ugd2l0aG91dCBhZmZlY3RpbmcgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5pbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMuXG5cbiAgICAgIGMuIE5vIHRlcm0gb3IgY29uZGl0aW9uIG9mIHRoaXMgUHVibGljIExpY2Vuc2Ugd2lsbCBiZSB3YWl2ZWQgYW5kIG5vIGZhaWx1cmUgdG8gY29tcGx5IGNvbnNlbnRlZCB0byB1bmxlc3MgZXhwcmVzc2x5IGFncmVlZCB0byBieSB0aGUgTGljZW5zb3IuXG5cbiAgICAgIGQuIE5vdGhpbmcgaW4gdGhpcyBQdWJsaWMgTGljZW5zZSBjb25zdGl0dXRlcyBvciBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBsaW1pdGF0aW9uIHVwb24sIG9yIHdhaXZlciBvZiwgYW55IHByaXZpbGVnZXMgYW5kIGltbXVuaXRpZXMgdGhhdCBhcHBseSB0byB0aGUgTGljZW5zb3Igb3IgWW91LCBpbmNsdWRpbmcgZnJvbSB0aGUgbGVnYWwgcHJvY2Vzc2VzIG9mIGFueSBqdXJpc2RpY3Rpb24gb3IgYXV0aG9yaXR5LlxuXG5DcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIGl0cyBwdWJsaWMgbGljZW5zZXMuIE5vdHdpdGhzdGFuZGluZywgQ3JlYXRpdmUgQ29tbW9ucyBtYXkgZWxlY3QgdG8gYXBwbHkgb25lIG9mIGl0cyBwdWJsaWMgbGljZW5zZXMgdG8gbWF0ZXJpYWwgaXQgcHVibGlzaGVzIGFuZCBpbiB0aG9zZSBpbnN0YW5jZXMgd2lsbCBiZSBjb25zaWRlcmVkIHRoZSBcIkxpY2Vuc29yLlwiIFRoZSB0ZXh0IG9mIHRoZSBDcmVhdGl2ZSBDb21tb25zIHB1YmxpYyBsaWNlbnNlcyBpcyBkZWRpY2F0ZWQgdG8gdGhlIHB1YmxpYyBkb21haW4gdW5kZXIgdGhlIENDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb24uIEV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRoYXQgbWF0ZXJpYWwgaXMgc2hhcmVkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBwdWJsaWMgbGljZW5zZSBvciBhcyBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IHRoZSBDcmVhdGl2ZSBDb21tb25zIHBvbGljaWVzIHB1Ymxpc2hlZCBhdCBjcmVhdGl2ZWNvbW1vbnMub3JnL3BvbGljaWVzLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIG9mIHRoZSB0cmFkZW1hcmsgXCJDcmVhdGl2ZSBDb21tb25zXCIgb3IgYW55IG90aGVyIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCBpdHMgcHJpb3Igd3JpdHRlbiBjb25zZW50IGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBpbiBjb25uZWN0aW9uIHdpdGggYW55IHVuYXV0aG9yaXplZCBtb2RpZmljYXRpb25zIHRvIGFueSBvZiBpdHMgcHVibGljIGxpY2Vuc2VzIG9yIGFueSBvdGhlciBhcnJhbmdlbWVudHMsIHVuZGVyc3RhbmRpbmdzLCBvciBhZ3JlZW1lbnRzIGNvbmNlcm5pbmcgdXNlIG9mIGxpY2Vuc2VkIG1hdGVyaWFsLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyBwYXJhZ3JhcGggZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoZSBwdWJsaWMgbGljZW5zZXMuXG5cbkNyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBjcmVhdGl2ZWNvbW1vbnMub3JnLiJdLCJsaWNlbnNlSWRzIjpbIkNDLUJZLU5DLU5ELTQuMCJdLCJrZXl3b3JkcyI6WyJsaWNlbnNlIGggbm9uY29tbWVyY2lhbCIsImggbm9uY29tbWVyY2lhbCBtZWFucyIsInRoZSBleGNoYW5nZSBpIiwiZXhjaGFuZ2UgaSBzaGFyZSIsIm1hdGVyaWFsIDIgeW91Iiwib25seSBhbmQgcHJvdmlkZWQiLCJhbmQgcHJvdmlkZWQgeW91IiwicHVibGljIGxpY2Vuc2UgaCBub25jb21tZXJjaWFsIiwibGljZW5zZSBoIG5vbmNvbW1lcmNpYWwgbWVhbnMiLCJoIG5vbmNvbW1lcmNpYWwgbWVhbnMgbm90Iiwid2l0aCB0aGUgZXhjaGFuZ2UgaSIsInRoZSBleGNoYW5nZSBpIHNoYXJlIiwiZXhjaGFuZ2UgaSBzaGFyZSBtZWFucyIsInRoaXMgcHVibGljIGxpY2Vuc2UgZm9yIiwicHVibGljIGxpY2Vuc2UgZm9yIHRoZSIsImFkYXB0ZWQgbWF0ZXJpYWwgMiB5b3UiLCJtYXRlcmlhbCAyIHlvdSBtYXkiLCJwdXJwb3NlcyBvbmx5IGFuZCBwcm92aWRlZCIsIm9ubHkgYW5kIHByb3ZpZGVkIHlvdSIsImFuZCBwcm92aWRlZCB5b3UgZG8iLCJ0aGlzIHB1YmxpYyBsaWNlbnNlIGggbm9uY29tbWVyY2lhbCIsInB1YmxpYyBsaWNlbnNlIGggbm9uY29tbWVyY2lhbCBtZWFucyIsImxpY2Vuc2UgaCBub25jb21tZXJjaWFsIG1lYW5zIG5vdCIsImggbm9uY29tbWVyY2lhbCBtZWFucyBub3QgcHJpbWFyaWx5IiwiY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBpIiwid2l0aCB0aGUgZXhjaGFuZ2UgaSBzaGFyZSIsInRoZSBleGNoYW5nZSBpIHNoYXJlIG1lYW5zIiwiZXhjaGFuZ2UgaSBzaGFyZSBtZWFucyB0byIsIm9ubHkgYW5kIGIgcHJvZHVjZSBhbmQiLCJub3Qgc2hhcmUgYWRhcHRlZCBtYXRlcmlhbCBmb3IiLCJ0byB0aGlzIHB1YmxpYyBsaWNlbnNlIGZvciIsInRoaXMgcHVibGljIGxpY2Vuc2UgZm9yIHRoZSIsInB1YmxpYyBsaWNlbnNlIGZvciB0aGUgYXZvaWRhbmNlIiwidG8gc2hhcmUgYWRhcHRlZCBtYXRlcmlhbCAyIiwic2hhcmUgYWRhcHRlZCBtYXRlcmlhbCAyIHlvdSIsImFkYXB0ZWQgbWF0ZXJpYWwgMiB5b3UgbWF5IiwibWF0ZXJpYWwgMiB5b3UgbWF5IHNhdGlzZnkiLCJub25jb21tZXJjaWFsIHB1cnBvc2VzIG9ubHkgYW5kIHByb3ZpZGVkIiwicHVycG9zZXMgb25seSBhbmQgcHJvdmlkZWQgeW91Iiwib25seSBhbmQgcHJvdmlkZWQgeW91IGRvIiwiYW5kIHByb3ZpZGVkIHlvdSBkbyBub3QiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMS4wIENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiBcIkFTLUlTXCIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLlxuXG5MaWNlbnNlXG5cblRIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFIChcIkNDUExcIiBPUiBcIkxJQ0VOU0VcIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC5cblxuQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy5cblxuICAgMS4gRGVmaW5pdGlvbnNcblxuICAgICAgYS4gXCJDb2xsZWN0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFwiRGVyaXZhdGl2ZSBXb3JrXCIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBcIkxpY2Vuc29yXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGQuIFwiT3JpZ2luYWwgQXV0aG9yXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLlxuXG4gICAgICBlLiBcIldvcmtcIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBmLiBcIllvdVwiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uXG5cbiAgIDIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy5cblxuICAgMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OlxuXG4gICAgICBhLiB0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7XG5cbiAgICAgIGIuIHRvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7XG5cbiAgICAgIGMuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7XG5cbiAgICAgIGQuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzO1xuXG4gICBUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC5cblxuICAgNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAgICBhLiBZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuXG5cbiAgICAgIGIuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIFlvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLlxuXG4gICAgICBkLiBJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCBcIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsXCIgb3IgXCJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yXCIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LlxuXG4gICA1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXJcblxuICAgICAgYS4gQnkgb2ZmZXJpbmcgdGhlIFdvcmsgZm9yIHB1YmxpYyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCwgdG8gdGhlIGJlc3Qgb2YgTGljZW5zb3IncyBrbm93bGVkZ2UgYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5OlxuXG4gICAgICAgICBpLiBMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0byBwZXJtaXQgdGhlIGxhd2Z1bCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpdGhvdXQgWW91IGhhdmluZyBhbnkgb2JsaWdhdGlvbiB0byBwYXkgYW55IHJveWFsdGllcywgY29tcHVsc29yeSBsaWNlbnNlIGZlZXMsIHJlc2lkdWFscyBvciBhbnkgb3RoZXIgcGF5bWVudHM7XG5cbiAgICAgICAgIGlpLiBUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuXG5cbiAgICAgIGIuIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIENPTlRFTlRTIE9SIEFDQ1VSQUNZIE9GIFRIRSBXT1JLLlxuXG4gICA2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIEFORCBFWENFUFQgRk9SIERBTUFHRVMgQVJJU0lORyBGUk9NIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG4gICA3LiBUZXJtaW5hdGlvblxuXG4gICAgICBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLlxuXG4gICA4LiBNaXNjZWxsYW5lb3VzXG5cbiAgICAgIGEuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICAgICBkLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LlxuXG4gICAgICBlLiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS5cblxuQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuXG5cbkV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrIFwiQ3JlYXRpdmUgQ29tbW9uc1wiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnMnIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLlxuXG5DcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLiJdLCJsaWNlbnNlSWRzIjpbIkNDLUJZLU5DLVNBLTEuMCJdLCJrZXl3b3JkcyI6WyJub25jb21tZXJjaWFsIHNoYXJlYWxpa2UgMSIsImF0dHJpYnV0aW9uIG5vbmNvbW1lcmNpYWwgc2hhcmVhbGlrZSAxIiwibm9uY29tbWVyY2lhbCBzaGFyZWFsaWtlIDEgMCIsImNvbW1vbnMgYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCBzaGFyZWFsaWtlIDEiLCJhdHRyaWJ1dGlvbiBub25jb21tZXJjaWFsIHNoYXJlYWxpa2UgMSAwIiwibm9uY29tbWVyY2lhbCBzaGFyZWFsaWtlIDEgMCBjcmVhdGl2ZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAyLjAgQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOIFwiQVMtSVNcIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuXG5cbkxpY2Vuc2VcblxuVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKFwiQ0NQTFwiIE9SIFwiTElDRU5TRVwiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuXG5cbkJZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cbiAgIDEuIERlZmluaXRpb25zXG5cbiAgICAgIGEuIFwiQ29sbGVjdGl2ZSBXb3JrXCIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBcIkRlcml2YXRpdmUgV29ya1wiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoXCJzeW5jaGluZ1wiKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gXCJMaWNlbnNvclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBkLiBcIk9yaWdpbmFsIEF1dGhvclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay5cblxuICAgICAgZS4gXCJXb3JrXCIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgZi4gXCJZb3VcIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLlxuXG4gICAgICBnLiBcIkxpY2Vuc2UgRWxlbWVudHNcIiBtZWFucyB0aGUgZm9sbG93aW5nIGhpZ2gtbGV2ZWwgbGljZW5zZSBhdHRyaWJ1dGVzIGFzIHNlbGVjdGVkIGJ5IExpY2Vuc29yIGFuZCBpbmRpY2F0ZWQgaW4gdGhlIHRpdGxlIG9mIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIE5vbmNvbW1lcmNpYWwsIFNoYXJlQWxpa2UuXG5cbiAgIDIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy5cblxuICAgMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OlxuXG4gICAgICBhLiB0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7XG5cbiAgICAgIGIuIHRvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7XG5cbiAgICAgIGMuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7XG5cbiAgICAgIGQuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzO1xuXG4gICAgICBUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9ucyA0KGUpIGFuZCA0KGYpLlxuXG4gICA0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG5cbiAgICAgIGEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC5cblxuICAgICAgYi4gWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSwgb3IgYSBDcmVhdGl2ZSBDb21tb25zIGlDb21tb25zIGxpY2Vuc2UgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMi4wIEphcGFuKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugb3Igb3RoZXIgbGljZW5zZSBzcGVjaWZpZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy5cblxuICAgICAgZC4gSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCBcIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsXCIgb3IgXCJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yXCIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LlxuXG4gICAgICBlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOlxuXG4gICAgICAgICBpLiBQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yayBpZiB0aGF0IHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLlxuXG4gICAgICAgICBpaS4gTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKFwiY292ZXIgdmVyc2lvblwiKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLlxuXG4gICAgICBmLiBXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi5cblxuICAgNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyXG5cbiAgIFVOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDcuIFRlcm1pbmF0aW9uXG5cbiAgICAgIGEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuXG5cbiAgIDguIE1pc2NlbGxhbmVvdXNcblxuICAgICAgYS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuXG5cbiAgICAgIGQuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuXG5cbiAgICAgIGUuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LlxuXG5DcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci5cblxuRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgXCJDcmVhdGl2ZSBDb21tb25zXCIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuXG5cbkNyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uIl0sImxpY2Vuc2VJZHMiOlsiQ0MtQlktTkMtU0EtMi4wIl0sImtleXdvcmRzIjpbIm5vbmNvbW1lcmNpYWwgc2hhcmVhbGlrZSAyIDAgY3JlYXRpdmUiLCJub25jb21tZXJjaWFsIHNoYXJlYWxpa2UgMiAwIGphcGFuIl19LHsibGljZW5zZVRleHRzIjpbIkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDIuNSBDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gXCJBUy1JU1wiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS5cblxuTGljZW5zZVxuXG5USEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoXCJDQ1BMXCIgT1IgXCJMSUNFTlNFXCIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC5cblxuQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy5cblxuICAgMS4gRGVmaW5pdGlvbnNcblxuICAgICAgYS4gXCJDb2xsZWN0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFwiRGVyaXZhdGl2ZSBXb3JrXCIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlIChcInN5bmNoaW5nXCIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBcIkxpY2Vuc29yXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGQuIFwiT3JpZ2luYWwgQXV0aG9yXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLlxuXG4gICAgICBlLiBcIldvcmtcIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBmLiBcIllvdVwiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uXG5cbiAgICAgIGcuIFwiTGljZW5zZSBFbGVtZW50c1wiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgTm9uY29tbWVyY2lhbCwgU2hhcmVBbGlrZS5cblxuICAgMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLlxuXG4gICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6XG5cbiAgICAgIGEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgICAgYi4gdG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrcztcblxuICAgICAgYy4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgICAgZC4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7XG5cbiAgIFRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZSkgYW5kIDQoZikuXG5cbiAgIDQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcblxuICAgICAgYS4gWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGQpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoZCksIGFzIHJlcXVlc3RlZC5cblxuICAgICAgYi4gWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSwgb3IgYSBDcmVhdGl2ZSBDb21tb25zIGlDb21tb25zIGxpY2Vuc2UgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMi41IEphcGFuKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugb3Igb3RoZXIgbGljZW5zZSBzcGVjaWZpZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy5cblxuICAgICAgZC4gSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiBpbiBMaWNlbnNvcidzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgXCJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLFwiIG9yIFwiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvclwiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC5cblxuICAgICAgZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjpcblxuICAgICAgICAgaS4gUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsgaWYgdGhhdCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi5cblxuICAgICAgICAgaWkuIE1lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrIChcImNvdmVyIHZlcnNpb25cIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY292ZXIgdmVyc2lvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi5cblxuICAgICAgZi4gV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uXG5cbiAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lclxuXG4gICBVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICA2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG4gICA3LiBUZXJtaW5hdGlvblxuXG4gICAgICBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLlxuXG4gICA4LiBNaXNjZWxsYW5lb3VzXG5cbiAgICAgIGEuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICAgICBkLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LlxuXG4gICAgICBlLiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS5cblxuQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuXG5cbkV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrIFwiQ3JlYXRpdmUgQ29tbW9uc1wiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnMnIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLlxuXG5DcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLiJdLCJsaWNlbnNlSWRzIjpbIkNDLUJZLU5DLVNBLTIuNSJdLCJrZXl3b3JkcyI6WyJub25jb21tZXJjaWFsIHNoYXJlYWxpa2UgMiA1IGNyZWF0aXZlIiwibm9uY29tbWVyY2lhbCBzaGFyZWFsaWtlIDIgNSBqYXBhbiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAzLjAgVW5wb3J0ZWQgQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOIFwiQVMtSVNcIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuXG5cbkxpY2Vuc2VcblxuVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKFwiQ0NQTFwiIE9SIFwiTElDRU5TRVwiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuXG5cbkJZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cbiAgIDEuIERlZmluaXRpb25zXG5cbiAgICAgIGEuIFwiQWRhcHRhdGlvblwiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrLCBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgZGVyaXZhdGl2ZSB3b3JrLCBhcnJhbmdlbWVudCBvZiBtdXNpYyBvciBvdGhlciBhbHRlcmF0aW9ucyBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIG9yIHBob25vZ3JhbSBvciBwZXJmb3JtYW5jZSBhbmQgaW5jbHVkZXMgY2luZW1hdG9ncmFwaGljIGFkYXB0YXRpb25zIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkIGluY2x1ZGluZyBpbiBhbnkgZm9ybSByZWNvZ25pemFibHkgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSwgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlIChcInN5bmNoaW5nXCIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFwiQ29sbGVjdGlvblwiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3Jrcywgc3VjaCBhcyBlbmN5Y2xvcGVkaWFzIGFuZCBhbnRob2xvZ2llcywgb3IgcGVyZm9ybWFuY2VzLCBwaG9ub2dyYW1zIG9yIGJyb2FkY2FzdHMsIG9yIG90aGVyIHdvcmtzIG9yIHN1YmplY3QgbWF0dGVyIG90aGVyIHRoYW4gd29ya3MgbGlzdGVkIGluIFNlY3Rpb24gMShnKSBiZWxvdywgd2hpY2gsIGJ5IHJlYXNvbiBvZiB0aGUgc2VsZWN0aW9uIGFuZCBhcnJhbmdlbWVudCBvZiB0aGVpciBjb250ZW50cywgY29uc3RpdHV0ZSBpbnRlbGxlY3R1YWwgY3JlYXRpb25zLCBpbiB3aGljaCB0aGUgV29yayBpcyBpbmNsdWRlZCBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtIGFsb25nIHdpdGggb25lIG9yIG1vcmUgb3RoZXIgY29udHJpYnV0aW9ucywgZWFjaCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIHdoaWNoIHRvZ2V0aGVyIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gKGFzIGRlZmluZWQgYWJvdmUpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBcIkRpc3RyaWJ1dGVcIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIG9yIEFkYXB0YXRpb24sIGFzIGFwcHJvcHJpYXRlLCB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLlxuXG4gICAgICBkLiBcIkxpY2Vuc2UgRWxlbWVudHNcIiBtZWFucyB0aGUgZm9sbG93aW5nIGhpZ2gtbGV2ZWwgbGljZW5zZSBhdHRyaWJ1dGVzIGFzIHNlbGVjdGVkIGJ5IExpY2Vuc29yIGFuZCBpbmRpY2F0ZWQgaW4gdGhlIHRpdGxlIG9mIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIE5vbmNvbW1lcmNpYWwsIFNoYXJlQWxpa2UuXG5cbiAgICAgIGUuIFwiTGljZW5zb3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGYuIFwiT3JpZ2luYWwgQXV0aG9yXCIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LlxuXG4gICAgICBnLiBcIldvcmtcIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuXG5cbiAgICAgIGguIFwiWW91XCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi5cblxuICAgICAgaS4gXCJQdWJsaWNseSBQZXJmb3JtXCIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsgYW5kIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgdGhvc2UgcHVibGljIHJlY2l0YXRpb25zLCBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2ggYSB3YXkgdGhhdCBtZW1iZXJzIG9mIHRoZSBwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb2YgdGhlIHBlcmZvcm1hbmNlcyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIGJ5IHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlOyB0byBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuXG5cbiAgICAgIGouIFwiUmVwcm9kdWNlXCIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLlxuXG4gICAyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy5cblxuICAgMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OlxuXG4gICAgICBhLiB0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9ucztcblxuICAgICAgYi4gdG8gY3JlYXRlIGFuZCBSZXByb2R1Y2UgQWRhcHRhdGlvbnMgcHJvdmlkZWQgdGhhdCBhbnkgc3VjaCBBZGFwdGF0aW9uLCBpbmNsdWRpbmcgYW55IHRyYW5zbGF0aW9uIGluIGFueSBtZWRpdW0sIHRha2VzIHJlYXNvbmFibGUgc3RlcHMgdG8gY2xlYXJseSBsYWJlbCwgZGVtYXJjYXRlIG9yIG90aGVyd2lzZSBpZGVudGlmeSB0aGF0IGNoYW5nZXMgd2VyZSBtYWRlIHRvIHRoZSBvcmlnaW5hbCBXb3JrLiBGb3IgZXhhbXBsZSwgYSB0cmFuc2xhdGlvbiBjb3VsZCBiZSBtYXJrZWQgXCJUaGUgb3JpZ2luYWwgd29yayB3YXMgdHJhbnNsYXRlZCBmcm9tIEVuZ2xpc2ggdG8gU3BhbmlzaCxcIiBvciBhIG1vZGlmaWNhdGlvbiBjb3VsZCBpbmRpY2F0ZSBcIlRoZSBvcmlnaW5hbCB3b3JrIGhhcyBiZWVuIG1vZGlmaWVkLlwiO1xuXG4gICAgICBjLiB0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGlvbnM7IGFuZCxcblxuICAgICAgZC4gdG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSBBZGFwdGF0aW9ucy5cblxuICAgICAgVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIFN1YmplY3QgdG8gU2VjdGlvbiA4KGYpLCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNChlKS5cblxuICAgNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAgICBhLiBZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoZCksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhbiBBZGFwdGF0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIEFkYXB0YXRpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoZCksIGFzIHJlcXVlc3RlZC5cblxuICAgICAgYi4gWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiBvbmx5IHVuZGVyOiAoaSkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZTsgKGlpKSBhIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2U7IChpaWkpIGEgQ3JlYXRpdmUgQ29tbW9ucyBqdXJpc2RpY3Rpb24gbGljZW5zZSAoZWl0aGVyIHRoaXMgb3IgYSBsYXRlciBsaWNlbnNlIHZlcnNpb24pIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UgKGUuZy4sIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAzLjAgVVMpIChcIkFwcGxpY2FibGUgTGljZW5zZVwiKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVUkksIGZvciBBcHBsaWNhYmxlIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIGVhY2ggQWRhcHRhdGlvbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgQWRhcHRhdGlvbiB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhlIEFwcGxpY2FibGUgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgYXMgaW5jbHVkZWQgaW4gdGhlIEFkYXB0YXRpb24gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBBZGFwdGF0aW9uLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChiKSBhcHBsaWVzIHRvIHRoZSBBZGFwdGF0aW9uIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgQWRhcHRhdGlvbiBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLlxuXG4gICAgICBjLiBZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29uLW5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuXG5cbiAgICAgIGQuIElmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIChcIkF0dHJpYnV0aW9uIFBhcnRpZXNcIikgaW4gTGljZW5zb3IncyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQsIChpdikgY29uc2lzdGVudCB3aXRoIFNlY3Rpb24gMyhiKSwgaW4gdGhlIGNhc2Ugb2YgYW4gQWRhcHRhdGlvbiwgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgQWRhcHRhdGlvbiAoZS5nLiwgXCJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLFwiIG9yIFwiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvclwiKS4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNChkKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy5cblxuICAgICAgZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6XG5cbiAgICAgICAgIGkuIE5vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7XG5cbiAgICAgICAgIGlpLiBXYWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgaWYgWW91ciBleGVyY2lzZSBvZiBzdWNoIHJpZ2h0cyBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYykgYW5kIG90aGVyd2lzZSB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWU7IGFuZCxcblxuICAgICAgICAgaWlpLiBWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSB0aGF0IGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChjKS5cblxuICAgICAgZi4gRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3IncyBob25vciBvciByZXB1dGF0aW9uLiBMaWNlbnNvciBhZ3JlZXMgdGhhdCBpbiB0aG9zZSBqdXJpc2RpY3Rpb25zIChlLmcuIEphcGFuKSwgaW4gd2hpY2ggYW55IGV4ZXJjaXNlIG9mIHRoZSByaWdodCBncmFudGVkIGluIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHRoZSByaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSB3b3VsZCBiZSBkZWVtZWQgdG8gYmUgYSBkaXN0b3J0aW9uLCBtdXRpbGF0aW9uLCBtb2RpZmljYXRpb24gb3Igb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcidzIGhvbm9yIGFuZCByZXB1dGF0aW9uLCB0aGUgTGljZW5zb3Igd2lsbCB3YWl2ZSBvciBub3QgYXNzZXJ0LCBhcyBhcHByb3ByaWF0ZSwgdGhpcyBTZWN0aW9uLCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdywgdG8gZW5hYmxlIFlvdSB0byByZWFzb25hYmx5IGV4ZXJjaXNlIFlvdXIgcmlnaHQgdW5kZXIgU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAocmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgYnV0IG5vdCBvdGhlcndpc2UuXG5cbiAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lclxuXG4gICBVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HIEFORCBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFRISVMgRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICA2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG4gICA3LiBUZXJtaW5hdGlvblxuXG4gICAgICBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuXG5cbiAgIDguIE1pc2NlbGxhbmVvdXNcblxuICAgICAgYS4gRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiwgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICAgICBkLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LlxuXG4gICAgICBlLiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS5cblxuICAgICAgZi4gVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgdGhlIFByb3RlY3Rpb24gb2YgTGl0ZXJhcnkgYW5kIEFydGlzdGljIFdvcmtzIChhcyBhbWVuZGVkIG9uIFNlcHRlbWJlciAyOCwgMTk3OSksIHRoZSBSb21lIENvbnZlbnRpb24gb2YgMTk2MSwgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYgYW5kIHRoZSBVbml2ZXJzYWwgQ29weXJpZ2h0IENvbnZlbnRpb24gKGFzIHJldmlzZWQgb24gSnVseSAyNCwgMTk3MSkuIFRoZXNlIHJpZ2h0cyBhbmQgc3ViamVjdCBtYXR0ZXIgdGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSB0cmVhdHkgcHJvdmlzaW9ucyBpbiB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBzdWNoIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBkZWVtZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy5cblxuQ3JlYXRpdmUgQ29tbW9ucyBOb3RpY2VcblxuQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuXG5cbkV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayBcIkNyZWF0aXZlIENvbW1vbnNcIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zJyB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGlzIExpY2Vuc2UuXG5cbkNyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uIl0sImxpY2Vuc2VJZHMiOlsiQ0MtQlktTkMtU0EtMy4wIl0sImtleXdvcmRzIjpbInNlY3Rpb24gMSBnIiwiMSBnIGJlbG93IiwiZyBiZWxvdyB3aGljaCIsIm93bmVyc2hpcCBkIGxpY2Vuc2UiLCJkIGxpY2Vuc2UgZWxlbWVudHMiLCJub25jb21tZXJjaWFsIHNoYXJlYWxpa2UgZSIsInNoYXJlYWxpa2UgZSBsaWNlbnNvciIsImUgbGljZW5zb3IgbWVhbnMiLCJsaWNlbnNlIGYgb3JpZ2luYWwiLCJmIG9yaWdpbmFsIGF1dGhvciIsInRoZSBicm9hZGNhc3QgZyIsImJyb2FkY2FzdCBnIHdvcmsiLCJnIHdvcmsgbWVhbnMiLCJhcnRpc3RpYyB3b3JrIGgiLCJ3b3JrIGggeW91IiwiaCB5b3UgbWVhbnMiLCJwcmV2aW91cyB2aW9sYXRpb24gaSIsInZpb2xhdGlvbiBpIHB1YmxpY2x5IiwiaSBwdWJsaWNseSBwZXJmb3JtIiwib3IgaW1hZ2VzIGoiLCJpbWFnZXMgaiByZXByb2R1Y2UiLCJqIHJlcHJvZHVjZSBtZWFucyIsInRoZSByaWdodHMgZGVzY3JpYmVkIiwib25seSB1bmRlciBpIiwiaSB0aGUgdGVybXMiLCIwIHVzIGFwcGxpY2FibGUiLCJ1cyBhcHBsaWNhYmxlIGxpY2Vuc2UiLCJ1cmkgZm9yIGFwcGxpY2FibGUiLCJmb3IgYXBwbGljYWJsZSBsaWNlbnNlIiwiY29tcGVuc2F0aW9uIGluIGNvbiIsImluIGNvbiBuZWN0aW9uIiwiY29uIG5lY3Rpb24gd2l0aCIsIm5lY3Rpb24gd2l0aCB0aGUiLCI0IGQgbWF5IiwiZCBtYXkgYmUiLCJhdHRyaWJ1dGlvbiBwYXJ0aWVzIGUiLCJwYXJ0aWVzIGUgZm9yIiwiYyBhbmQgb3RoZXJ3aXNlIiwiNCBjIGYiLCJjIGYgZXhjZXB0IiwiZiBleGNlcHQgYXMiLCJ3cml0aW5nIGFuZCB0byIsImFwcGxpY2FibGUgbGF3IGxpY2Vuc29yIiwibGF3IGxpY2Vuc29yIG9mZmVycyIsImluIHNlY3Rpb24gMSBnIiwic2VjdGlvbiAxIGcgYmVsb3ciLCIxIGcgYmVsb3cgd2hpY2giLCJnIGJlbG93IHdoaWNoIGJ5Iiwib2Ygb3duZXJzaGlwIGQgbGljZW5zZSIsIm93bmVyc2hpcCBkIGxpY2Vuc2UgZWxlbWVudHMiLCJkIGxpY2Vuc2UgZWxlbWVudHMgbWVhbnMiLCJhdHRyaWJ1dGlvbiBub25jb21tZXJjaWFsIHNoYXJlYWxpa2UgZSIsIm5vbmNvbW1lcmNpYWwgc2hhcmVhbGlrZSBlIGxpY2Vuc29yIiwic2hhcmVhbGlrZSBlIGxpY2Vuc29yIG1lYW5zIiwiZSBsaWNlbnNvciBtZWFucyB0aGUiLCJ0aGlzIGxpY2Vuc2UgZiBvcmlnaW5hbCIsImxpY2Vuc2UgZiBvcmlnaW5hbCBhdXRob3IiLCJmIG9yaWdpbmFsIGF1dGhvciBtZWFucyIsInRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0IGciLCJ0aGUgYnJvYWRjYXN0IGcgd29yayIsImJyb2FkY2FzdCBnIHdvcmsgbWVhbnMiLCJnIHdvcmsgbWVhbnMgdGhlIiwib3IgYXJ0aXN0aWMgd29yayBoIiwiYXJ0aXN0aWMgd29yayBoIHlvdSIsIndvcmsgaCB5b3UgbWVhbnMiLCJoIHlvdSBtZWFucyBhbiIsImEgcHJldmlvdXMgdmlvbGF0aW9uIGkiLCJwcmV2aW91cyB2aW9sYXRpb24gaSBwdWJsaWNseSIsInZpb2xhdGlvbiBpIHB1YmxpY2x5IHBlcmZvcm0iLCJpIHB1YmxpY2x5IHBlcmZvcm0gbWVhbnMiLCJzb3VuZHMgb3IgaW1hZ2VzIGoiLCJvciBpbWFnZXMgaiByZXByb2R1Y2UiLCJpbWFnZXMgaiByZXByb2R1Y2UgbWVhbnMiLCJqIHJlcHJvZHVjZSBtZWFucyB0byIsInRvIHRoZSByaWdodHMgZGVzY3JpYmVkIiwidGhlIHJpZ2h0cyBkZXNjcmliZWQgaW4iLCJzZWN0aW9uIDQgZSA0IiwiYWRhcHRhdGlvbiBvbmx5IHVuZGVyIGkiLCJvbmx5IHVuZGVyIGkgdGhlIiwidW5kZXIgaSB0aGUgdGVybXMiLCJpIHRoZSB0ZXJtcyBvZiIsIjMgMCB1cyBhcHBsaWNhYmxlIiwiMCB1cyBhcHBsaWNhYmxlIGxpY2Vuc2UiLCJ1cyBhcHBsaWNhYmxlIGxpY2Vuc2UgeW91IiwidGhlIHVyaSBmb3IgYXBwbGljYWJsZSIsInVyaSBmb3IgYXBwbGljYWJsZSBsaWNlbnNlIiwiZm9yIGFwcGxpY2FibGUgbGljZW5zZSB3aXRoIiwibGljZW5zZSB5b3UgbXVzdCBrZWVwIiwiYXBwbGljYWJsZSBsaWNlbnNlIGMgeW91IiwibW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbiIsImNvbXBlbnNhdGlvbiBpbiBjb24gbmVjdGlvbiIsImluIGNvbiBuZWN0aW9uIHdpdGgiLCJjb24gbmVjdGlvbiB3aXRoIHRoZSIsIm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2UiLCJ0aGlzIHNlY3Rpb24gNCBkIiwic2VjdGlvbiA0IGQgbWF5IiwiNCBkIG1heSBiZSIsImQgbWF5IGJlIGltcGxlbWVudGVkIiwib3IgYXR0cmlidXRpb24gcGFydGllcyBlIiwiYXR0cmlidXRpb24gcGFydGllcyBlIGZvciIsInBhcnRpZXMgZSBmb3IgdGhlIiwic2VjdGlvbiA0IGMgYW5kIiwiNCBjIGFuZCBvdGhlcndpc2UiLCJjIGFuZCBvdGhlcndpc2Ugd2FpdmVzIiwic2VjdGlvbiA0IGMgZiIsIjQgYyBmIGV4Y2VwdCIsImMgZiBleGNlcHQgYXMiLCJmIGV4Y2VwdCBhcyBvdGhlcndpc2UiLCJwYXJ0aWVzIGluIHdyaXRpbmcgYW5kIiwiaW4gd3JpdGluZyBhbmQgdG8iLCJ3cml0aW5nIGFuZCB0byB0aGUiLCJhbmQgdG8gdGhlIGZ1bGxlc3QiLCJieSBhcHBsaWNhYmxlIGxhdyBsaWNlbnNvciIsImFwcGxpY2FibGUgbGF3IGxpY2Vuc29yIG9mZmVycyIsImxhdyBsaWNlbnNvciBvZmZlcnMgdGhlIiwiY29tbW9ucyBhdHRyaWJ1dGlvbiBub25jb21tZXJjaWFsIHNoYXJlYWxpa2UgMyIsIm5vbmNvbW1lcmNpYWwgc2hhcmVhbGlrZSAzIDAgdW5wb3J0ZWQiLCJsaXN0ZWQgaW4gc2VjdGlvbiAxIGciLCJpbiBzZWN0aW9uIDEgZyBiZWxvdyIsInNlY3Rpb24gMSBnIGJlbG93IHdoaWNoIiwiMSBnIGJlbG93IHdoaWNoIGJ5IiwiZyBiZWxvdyB3aGljaCBieSByZWFzb24iLCJ0cmFuc2ZlciBvZiBvd25lcnNoaXAgZCBsaWNlbnNlIiwib2Ygb3duZXJzaGlwIGQgbGljZW5zZSBlbGVtZW50cyIsIm93bmVyc2hpcCBkIGxpY2Vuc2UgZWxlbWVudHMgbWVhbnMiLCJkIGxpY2Vuc2UgZWxlbWVudHMgbWVhbnMgdGhlIiwibGljZW5zZSBhdHRyaWJ1dGlvbiBub25jb21tZXJjaWFsIHNoYXJlYWxpa2UgZSIsImF0dHJpYnV0aW9uIG5vbmNvbW1lcmNpYWwgc2hhcmVhbGlrZSBlIGxpY2Vuc29yIiwibm9uY29tbWVyY2lhbCBzaGFyZWFsaWtlIGUgbGljZW5zb3IgbWVhbnMiLCJzaGFyZWFsaWtlIGUgbGljZW5zb3IgbWVhbnMgdGhlIiwiZSBsaWNlbnNvciBtZWFucyB0aGUgaW5kaXZpZHVhbCIsIm9mIHRoaXMgbGljZW5zZSBmIG9yaWdpbmFsIiwidGhpcyBsaWNlbnNlIGYgb3JpZ2luYWwgYXV0aG9yIiwibGljZW5zZSBmIG9yaWdpbmFsIGF1dGhvciBtZWFucyIsImYgb3JpZ2luYWwgYXV0aG9yIG1lYW5zIGluIiwidGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdCBnIiwidHJhbnNtaXRzIHRoZSBicm9hZGNhc3QgZyB3b3JrIiwidGhlIGJyb2FkY2FzdCBnIHdvcmsgbWVhbnMiLCJicm9hZGNhc3QgZyB3b3JrIG1lYW5zIHRoZSIsImcgd29yayBtZWFucyB0aGUgbGl0ZXJhcnkiLCJsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrIGgiLCJvciBhcnRpc3RpYyB3b3JrIGggeW91IiwiYXJ0aXN0aWMgd29yayBoIHlvdSBtZWFucyIsIndvcmsgaCB5b3UgbWVhbnMgYW4iLCJoIHlvdSBtZWFucyBhbiBpbmRpdmlkdWFsIiwiZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbiBpIiwiYSBwcmV2aW91cyB2aW9sYXRpb24gaSBwdWJsaWNseSIsInByZXZpb3VzIHZpb2xhdGlvbiBpIHB1YmxpY2x5IHBlcmZvcm0iLCJ2aW9sYXRpb24gaSBwdWJsaWNseSBwZXJmb3JtIG1lYW5zIiwiaSBwdWJsaWNseSBwZXJmb3JtIG1lYW5zIHRvIiwic2lnbnMgc291bmRzIG9yIGltYWdlcyBqIiwic291bmRzIG9yIGltYWdlcyBqIHJlcHJvZHVjZSIsIm9yIGltYWdlcyBqIHJlcHJvZHVjZSBtZWFucyIsImltYWdlcyBqIHJlcHJvZHVjZSBtZWFucyB0byIsImogcmVwcm9kdWNlIG1lYW5zIHRvIG1ha2UiLCJsaW1pdGVkIHRvIHRoZSByaWdodHMgZGVzY3JpYmVkIiwidG8gdGhlIHJpZ2h0cyBkZXNjcmliZWQgaW4iLCJ0aGUgcmlnaHRzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIiwiaW4gc2VjdGlvbiA0IGUgNCIsInNlY3Rpb24gNCBlIDQgcmVzdHJpY3Rpb25zIiwiYW4gYWRhcHRhdGlvbiBvbmx5IHVuZGVyIGkiLCJhZGFwdGF0aW9uIG9ubHkgdW5kZXIgaSB0aGUiLCJvbmx5IHVuZGVyIGkgdGhlIHRlcm1zIiwidW5kZXIgaSB0aGUgdGVybXMgb2YiLCJpIHRoZSB0ZXJtcyBvZiB0aGlzIiwidGVybXMgb2YgdGhpcyBsaWNlbnNlIGlpIiwib2YgdGhpcyBsaWNlbnNlIGlpIGEiLCJnIGF0dHJpYnV0aW9uIG5vbmNvbW1lcmNpYWwgc2hhcmVhbGlrZSAzIiwibm9uY29tbWVyY2lhbCBzaGFyZWFsaWtlIDMgMCB1cyIsInNoYXJlYWxpa2UgMyAwIHVzIGFwcGxpY2FibGUiLCIzIDAgdXMgYXBwbGljYWJsZSBsaWNlbnNlIiwiMCB1cyBhcHBsaWNhYmxlIGxpY2Vuc2UgeW91IiwidXMgYXBwbGljYWJsZSBsaWNlbnNlIHlvdSBtdXN0IiwiYXBwbGljYWJsZSBsaWNlbnNlIHlvdSBtdXN0IGluY2x1ZGUiLCJvciB0aGUgdXJpIGZvciBhcHBsaWNhYmxlIiwidGhlIHVyaSBmb3IgYXBwbGljYWJsZSBsaWNlbnNlIiwidXJpIGZvciBhcHBsaWNhYmxlIGxpY2Vuc2Ugd2l0aCIsImZvciBhcHBsaWNhYmxlIGxpY2Vuc2Ugd2l0aCBldmVyeSIsIm9mIHRoZSBhcHBsaWNhYmxlIGxpY2Vuc2UgeW91IiwiYXBwbGljYWJsZSBsaWNlbnNlIHlvdSBtdXN0IGtlZXAiLCJsaWNlbnNlIHlvdSBtdXN0IGtlZXAgaW50YWN0IiwidGhlIGFwcGxpY2FibGUgbGljZW5zZSBjIHlvdSIsImFwcGxpY2FibGUgbGljZW5zZSBjIHlvdSBtYXkiLCJhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbiIsIm1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb24gbmVjdGlvbiIsImNvbXBlbnNhdGlvbiBpbiBjb24gbmVjdGlvbiB3aXRoIiwiaW4gY29uIG5lY3Rpb24gd2l0aCB0aGUiLCJjb24gbmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSIsIm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YiLCJkIGlmIHlvdSBkaXN0cmlidXRlIG9yIiwiYnkgdGhpcyBzZWN0aW9uIDQgZCIsInRoaXMgc2VjdGlvbiA0IGQgbWF5Iiwic2VjdGlvbiA0IGQgbWF5IGJlIiwiNCBkIG1heSBiZSBpbXBsZW1lbnRlZCIsImQgbWF5IGJlIGltcGxlbWVudGVkIGluIiwiYW5kIG9yIGF0dHJpYnV0aW9uIHBhcnRpZXMgZSIsIm9yIGF0dHJpYnV0aW9uIHBhcnRpZXMgZSBmb3IiLCJhdHRyaWJ1dGlvbiBwYXJ0aWVzIGUgZm9yIHRoZSIsInBhcnRpZXMgZSBmb3IgdGhlIGF2b2lkYW5jZSIsInVuZGVyIHNlY3Rpb24gNCBjIGFuZCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBDcmVhdGl2ZSBDb21tb25zIENvcnBvcmF0aW9uIChcIkNyZWF0aXZlIENvbW1vbnNcIikgaXMgbm90IGEgbGF3IGZpcm0gYW5kIGRvZXMgbm90IHByb3ZpZGUgbGVnYWwgc2VydmljZXMgb3IgbGVnYWwgYWR2aWNlLiBEaXN0cmlidXRpb24gb2YgQ3JlYXRpdmUgQ29tbW9ucyBwdWJsaWMgbGljZW5zZXMgZG9lcyBub3QgY3JlYXRlIGEgbGF3eWVyLWNsaWVudCBvciBvdGhlciByZWxhdGlvbnNoaXAuIENyZWF0aXZlIENvbW1vbnMgbWFrZXMgaXRzIGxpY2Vuc2VzIGFuZCByZWxhdGVkIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBvbiBhbiBcImFzLWlzXCIgYmFzaXMuIENyZWF0aXZlIENvbW1vbnMgZ2l2ZXMgbm8gd2FycmFudGllcyByZWdhcmRpbmcgaXRzIGxpY2Vuc2VzLCBhbnkgbWF0ZXJpYWwgbGljZW5zZWQgdW5kZXIgdGhlaXIgdGVybXMgYW5kIGNvbmRpdGlvbnMsIG9yIGFueSByZWxhdGVkIGluZm9ybWF0aW9uLiBDcmVhdGl2ZSBDb21tb25zIGRpc2NsYWltcyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzIHJlc3VsdGluZyBmcm9tIHRoZWlyIHVzZSB0byB0aGUgZnVsbGVzdCBleHRlbnQgcG9zc2libGUuXG5cblVzaW5nIENyZWF0aXZlIENvbW1vbnMgUHVibGljIExpY2Vuc2VzXG5cbkNyZWF0aXZlIENvbW1vbnMgcHVibGljIGxpY2Vuc2VzIHByb3ZpZGUgYSBzdGFuZGFyZCBzZXQgb2YgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBjcmVhdG9ycyBhbmQgb3RoZXIgcmlnaHRzIGhvbGRlcnMgbWF5IHVzZSB0byBzaGFyZSBvcmlnaW5hbCB3b3JrcyBvZiBhdXRob3JzaGlwIGFuZCBvdGhlciBtYXRlcmlhbCBzdWJqZWN0IHRvIGNvcHlyaWdodCBhbmQgY2VydGFpbiBvdGhlciByaWdodHMgc3BlY2lmaWVkIGluIHRoZSBwdWJsaWMgbGljZW5zZSBiZWxvdy4gVGhlIGZvbGxvd2luZyBjb25zaWRlcmF0aW9ucyBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSwgYXJlIG5vdCBleGhhdXN0aXZlLCBhbmQgZG8gbm90IGZvcm0gcGFydCBvZiBvdXIgbGljZW5zZXMuXG5cbkNvbnNpZGVyYXRpb25zIGZvciBsaWNlbnNvcnM6IE91ciBwdWJsaWMgbGljZW5zZXMgYXJlIGludGVuZGVkIGZvciB1c2UgYnkgdGhvc2UgYXV0aG9yaXplZCB0byBnaXZlIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgbWF0ZXJpYWwgaW4gd2F5cyBvdGhlcndpc2UgcmVzdHJpY3RlZCBieSBjb3B5cmlnaHQgYW5kIGNlcnRhaW4gb3RoZXIgcmlnaHRzLiBPdXIgbGljZW5zZXMgYXJlIGlycmV2b2NhYmxlLiBMaWNlbnNvcnMgc2hvdWxkIHJlYWQgYW5kIHVuZGVyc3RhbmQgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlIHRoZXkgY2hvb3NlIGJlZm9yZSBhcHBseWluZyBpdC4gTGljZW5zb3JzIHNob3VsZCBhbHNvIHNlY3VyZSBhbGwgcmlnaHRzIG5lY2Vzc2FyeSBiZWZvcmUgYXBwbHlpbmcgb3VyIGxpY2Vuc2VzIHNvIHRoYXQgdGhlIHB1YmxpYyBjYW4gcmV1c2UgdGhlIG1hdGVyaWFsIGFzIGV4cGVjdGVkLiBMaWNlbnNvcnMgc2hvdWxkIGNsZWFybHkgbWFyayBhbnkgbWF0ZXJpYWwgbm90IHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UuIFRoaXMgaW5jbHVkZXMgb3RoZXIgQ0MtbGljZW5zZWQgbWF0ZXJpYWwsIG9yIG1hdGVyaWFsIHVzZWQgdW5kZXIgYW4gZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gY29weXJpZ2h0LiBNb3JlIGNvbnNpZGVyYXRpb25zIGZvciBsaWNlbnNvcnMgOiB3aWtpLmNyZWF0aXZlY29tbW9ucy5vcmcvQ29uc2lkZXJhdGlvbnNfZm9yX2xpY2Vuc29yc1xuXG5Db25zaWRlcmF0aW9ucyBmb3IgdGhlIHB1YmxpYzogQnkgdXNpbmcgb25lIG9mIG91ciBwdWJsaWMgbGljZW5zZXMsIGEgbGljZW5zb3IgZ3JhbnRzIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIGxpY2Vuc2VkIG1hdGVyaWFsIHVuZGVyIHNwZWNpZmllZCB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgdGhlIGxpY2Vuc29yJ3MgcGVybWlzc2lvbiBpcyBub3QgbmVjZXNzYXJ5IGZvciBhbnkgcmVhc29u4oCTZm9yIGV4YW1wbGUsIGJlY2F1c2Ugb2YgYW55IGFwcGxpY2FibGUgZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gY29weXJpZ2h04oCTdGhlbiB0aGF0IHVzZSBpcyBub3QgcmVndWxhdGVkIGJ5IHRoZSBsaWNlbnNlLiBPdXIgbGljZW5zZXMgZ3JhbnQgb25seSBwZXJtaXNzaW9ucyB1bmRlciBjb3B5cmlnaHQgYW5kIGNlcnRhaW4gb3RoZXIgcmlnaHRzIHRoYXQgYSBsaWNlbnNvciBoYXMgYXV0aG9yaXR5IHRvIGdyYW50LiBVc2Ugb2YgdGhlIGxpY2Vuc2VkIG1hdGVyaWFsIG1heSBzdGlsbCBiZSByZXN0cmljdGVkIGZvciBvdGhlciByZWFzb25zLCBpbmNsdWRpbmcgYmVjYXVzZSBvdGhlcnMgaGF2ZSBjb3B5cmlnaHQgb3Igb3RoZXIgcmlnaHRzIGluIHRoZSBtYXRlcmlhbC4gQSBsaWNlbnNvciBtYXkgbWFrZSBzcGVjaWFsIHJlcXVlc3RzLCBzdWNoIGFzIGFza2luZyB0aGF0IGFsbCBjaGFuZ2VzIGJlIG1hcmtlZCBvciBkZXNjcmliZWQuIEFsdGhvdWdoIG5vdCByZXF1aXJlZCBieSBvdXIgbGljZW5zZXMsIHlvdSBhcmUgZW5jb3VyYWdlZCB0byByZXNwZWN0IHRob3NlIHJlcXVlc3RzIHdoZXJlIHJlYXNvbmFibGUuIE1vcmUgY29uc2lkZXJhdGlvbnMgZm9yIHRoZSBwdWJsaWMgOiB3aWtpLmNyZWF0aXZlY29tbW9ucy5vcmcvQ29uc2lkZXJhdGlvbnNfZm9yX2xpY2Vuc2Vlc1xuXG5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBQdWJsaWMgTGljZW5zZVxuXG5CeSBleGVyY2lzaW5nIHRoZSBMaWNlbnNlZCBSaWdodHMgKGRlZmluZWQgYmVsb3cpLCBZb3UgYWNjZXB0IGFuZCBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBQdWJsaWMgTGljZW5zZSAoXCJQdWJsaWMgTGljZW5zZVwiKS4gVG8gdGhlIGV4dGVudCB0aGlzIFB1YmxpYyBMaWNlbnNlIG1heSBiZSBpbnRlcnByZXRlZCBhcyBhIGNvbnRyYWN0LCBZb3UgYXJlIGdyYW50ZWQgdGhlIExpY2Vuc2VkIFJpZ2h0cyBpbiBjb25zaWRlcmF0aW9uIG9mIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgYW5kIHRoZSBMaWNlbnNvciBncmFudHMgWW91IHN1Y2ggcmlnaHRzIGluIGNvbnNpZGVyYXRpb24gb2YgYmVuZWZpdHMgdGhlIExpY2Vuc29yIHJlY2VpdmVzIGZyb20gbWFraW5nIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBhdmFpbGFibGUgdW5kZXIgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuXG5cblNlY3Rpb24gMSDigJMgRGVmaW5pdGlvbnMuXG5cbiAgIGEuIEFkYXB0ZWQgTWF0ZXJpYWwgbWVhbnMgbWF0ZXJpYWwgc3ViamVjdCB0byBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIHRoYXQgaXMgZGVyaXZlZCBmcm9tIG9yIGJhc2VkIHVwb24gdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGFuZCBpbiB3aGljaCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaXMgdHJhbnNsYXRlZCwgYWx0ZXJlZCwgYXJyYW5nZWQsIHRyYW5zZm9ybWVkLCBvciBvdGhlcndpc2UgbW9kaWZpZWQgaW4gYSBtYW5uZXIgcmVxdWlyaW5nIHBlcm1pc3Npb24gdW5kZXIgdGhlIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgaGVsZCBieSB0aGUgTGljZW5zb3IuIEZvciBwdXJwb3NlcyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLCB3aGVyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlLCBvciBzb3VuZCByZWNvcmRpbmcsIEFkYXB0ZWQgTWF0ZXJpYWwgaXMgYWx3YXlzIHByb2R1Y2VkIHdoZXJlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBpcyBzeW5jaGVkIGluIHRpbWVkIHJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UuXG5cbiAgIGIuIEFkYXB0ZXIncyBMaWNlbnNlIG1lYW5zIHRoZSBsaWNlbnNlIFlvdSBhcHBseSB0byBZb3VyIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgaW4gWW91ciBjb250cmlidXRpb25zIHRvIEFkYXB0ZWQgTWF0ZXJpYWwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICBjLiBCWS1OQy1TQSBDb21wYXRpYmxlIExpY2Vuc2UgbWVhbnMgYSBsaWNlbnNlIGxpc3RlZCBhdCBjcmVhdGl2ZWNvbW1vbnMub3JnL2NvbXBhdGlibGVsaWNlbnNlcywgYXBwcm92ZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucyBhcyBlc3NlbnRpYWxseSB0aGUgZXF1aXZhbGVudCBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICBkLiBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIG1lYW5zIGNvcHlyaWdodCBhbmQvb3Igc2ltaWxhciByaWdodHMgY2xvc2VseSByZWxhdGVkIHRvIGNvcHlyaWdodCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcGVyZm9ybWFuY2UsIGJyb2FkY2FzdCwgc291bmQgcmVjb3JkaW5nLCBhbmQgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzLCB3aXRob3V0IHJlZ2FyZCB0byBob3cgdGhlIHJpZ2h0cyBhcmUgbGFiZWxlZCBvciBjYXRlZ29yaXplZC4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgUHVibGljIExpY2Vuc2UsIHRoZSByaWdodHMgc3BlY2lmaWVkIGluIFNlY3Rpb24gMihiKSgxKS0oMikgYXJlIG5vdCBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzLlxuXG4gICBlLiBFZmZlY3RpdmUgVGVjaG5vbG9naWNhbCBNZWFzdXJlcyBtZWFucyB0aG9zZSBtZWFzdXJlcyB0aGF0LCBpbiB0aGUgYWJzZW5jZSBvZiBwcm9wZXIgYXV0aG9yaXR5LCBtYXkgbm90IGJlIGNpcmN1bXZlbnRlZCB1bmRlciBsYXdzIGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgQXJ0aWNsZSAxMSBvZiB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IGFkb3B0ZWQgb24gRGVjZW1iZXIgMjAsIDE5OTYsIGFuZC9vciBzaW1pbGFyIGludGVybmF0aW9uYWwgYWdyZWVtZW50cy5cblxuICAgZi4gRXhjZXB0aW9ucyBhbmQgTGltaXRhdGlvbnMgbWVhbnMgZmFpciB1c2UsIGZhaXIgZGVhbGluZywgYW5kL29yIGFueSBvdGhlciBleGNlcHRpb24gb3IgbGltaXRhdGlvbiB0byBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIHRoYXQgYXBwbGllcyB0byBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuXG5cbiAgIGcuIExpY2Vuc2UgRWxlbWVudHMgbWVhbnMgdGhlIGxpY2Vuc2UgYXR0cmlidXRlcyBsaXN0ZWQgaW4gdGhlIG5hbWUgb2YgYSBDcmVhdGl2ZSBDb21tb25zIFB1YmxpYyBMaWNlbnNlLiBUaGUgTGljZW5zZSBFbGVtZW50cyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlIGFyZSBBdHRyaWJ1dGlvbiwgTm9uQ29tbWVyY2lhbCwgYW5kIFNoYXJlQWxpa2UuXG5cbiAgIGguIExpY2Vuc2VkIE1hdGVyaWFsIG1lYW5zIHRoZSBhcnRpc3RpYyBvciBsaXRlcmFyeSB3b3JrLCBkYXRhYmFzZSwgb3Igb3RoZXIgbWF0ZXJpYWwgdG8gd2hpY2ggdGhlIExpY2Vuc29yIGFwcGxpZWQgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgaS4gTGljZW5zZWQgUmlnaHRzIG1lYW5zIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3Ugc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgd2hpY2ggYXJlIGxpbWl0ZWQgdG8gYWxsIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgdGhhdCBhcHBseSB0byBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIHRoYXQgdGhlIExpY2Vuc29yIGhhcyBhdXRob3JpdHkgdG8gbGljZW5zZS5cblxuICAgai4gTGljZW5zb3IgbWVhbnMgdGhlIGluZGl2aWR1YWwocykgb3IgZW50aXR5KGllcykgZ3JhbnRpbmcgcmlnaHRzIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgIGsuIE5vbkNvbW1lcmNpYWwgbWVhbnMgbm90IHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkcyBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24uIEZvciBwdXJwb3NlcyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLCB0aGUgZXhjaGFuZ2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGZvciBvdGhlciBtYXRlcmlhbCBzdWJqZWN0IHRvIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgYnkgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igc2ltaWxhciBtZWFucyBpcyBOb25Db21tZXJjaWFsIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2UuXG5cbiAgIGwuIFNoYXJlIG1lYW5zIHRvIHByb3ZpZGUgbWF0ZXJpYWwgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyB0aGF0IHJlcXVpcmVzIHBlcm1pc3Npb24gdW5kZXIgdGhlIExpY2Vuc2VkIFJpZ2h0cywgc3VjaCBhcyByZXByb2R1Y3Rpb24sIHB1YmxpYyBkaXNwbGF5LCBwdWJsaWMgcGVyZm9ybWFuY2UsIGRpc3RyaWJ1dGlvbiwgZGlzc2VtaW5hdGlvbiwgY29tbXVuaWNhdGlvbiwgb3IgaW1wb3J0YXRpb24sIGFuZCB0byBtYWtlIG1hdGVyaWFsIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluY2x1ZGluZyBpbiB3YXlzIHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlIG1hdGVyaWFsIGZyb20gYSBwbGFjZSBhbmQgYXQgYSB0aW1lIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbS5cblxuICAgbS4gU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzIG1lYW5zIHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCByZXN1bHRpbmcgZnJvbSBEaXJlY3RpdmUgOTYvOS9FQyBvZiB0aGUgRXVyb3BlYW4gUGFybGlhbWVudCBhbmQgb2YgdGhlIENvdW5jaWwgb2YgMTEgTWFyY2ggMTk5NiBvbiB0aGUgbGVnYWwgcHJvdGVjdGlvbiBvZiBkYXRhYmFzZXMsIGFzIGFtZW5kZWQgYW5kL29yIHN1Y2NlZWRlZCwgYXMgd2VsbCBhcyBvdGhlciBlc3NlbnRpYWxseSBlcXVpdmFsZW50IHJpZ2h0cyBhbnl3aGVyZSBpbiB0aGUgd29ybGQuXG5cbiAgIG4uIFlvdSBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyB0aGUgTGljZW5zZWQgUmlnaHRzIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuIFlvdXIgaGFzIGEgY29ycmVzcG9uZGluZyBtZWFuaW5nLlxuXG5TZWN0aW9uIDIg4oCTIFNjb3BlLlxuXG4gICBhLiBMaWNlbnNlIGdyYW50LlxuXG4gICAgICAxLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLCB0aGUgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLXN1YmxpY2Vuc2FibGUsIG5vbi1leGNsdXNpdmUsIGlycmV2b2NhYmxlIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIExpY2Vuc2VkIFJpZ2h0cyBpbiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgdG86XG5cbiAgICAgICAgIEEuIHJlcHJvZHVjZSBhbmQgU2hhcmUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBmb3IgTm9uQ29tbWVyY2lhbCBwdXJwb3NlcyBvbmx5OyBhbmRcblxuICAgICAgICAgQi4gcHJvZHVjZSwgcmVwcm9kdWNlLCBhbmQgU2hhcmUgQWRhcHRlZCBNYXRlcmlhbCBmb3IgTm9uQ29tbWVyY2lhbCBwdXJwb3NlcyBvbmx5LlxuXG4gICAgICAyLiBFeGNlcHRpb25zIGFuZCBMaW1pdGF0aW9ucy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIEV4Y2VwdGlvbnMgYW5kIExpbWl0YXRpb25zIGFwcGx5IHRvIFlvdXIgdXNlLCB0aGlzIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IGFwcGx5LCBhbmQgWW91IGRvIG5vdCBuZWVkIHRvIGNvbXBseSB3aXRoIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgICAgMy4gVGVybS4gVGhlIHRlcm0gb2YgdGhpcyBQdWJsaWMgTGljZW5zZSBpcyBzcGVjaWZpZWQgaW4gU2VjdGlvbiA2KGEpLlxuXG4gICAgICA0LiBNZWRpYSBhbmQgZm9ybWF0czsgdGVjaG5pY2FsIG1vZGlmaWNhdGlvbnMgYWxsb3dlZC4gVGhlIExpY2Vuc29yIGF1dGhvcml6ZXMgWW91IHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBjcmVhdGVkLCBhbmQgdG8gbWFrZSB0ZWNobmljYWwgbW9kaWZpY2F0aW9ucyBuZWNlc3NhcnkgdG8gZG8gc28uIFRoZSBMaWNlbnNvciB3YWl2ZXMgYW5kL29yIGFncmVlcyBub3QgdG8gYXNzZXJ0IGFueSByaWdodCBvciBhdXRob3JpdHkgdG8gZm9yYmlkIFlvdSBmcm9tIG1ha2luZyB0ZWNobmljYWwgbW9kaWZpY2F0aW9ucyBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIExpY2Vuc2VkIFJpZ2h0cywgaW5jbHVkaW5nIHRlY2huaWNhbCBtb2RpZmljYXRpb25zIG5lY2Vzc2FyeSB0byBjaXJjdW12ZW50IEVmZmVjdGl2ZSBUZWNobm9sb2dpY2FsIE1lYXN1cmVzLiBGb3IgcHVycG9zZXMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgc2ltcGx5IG1ha2luZyBtb2RpZmljYXRpb25zIGF1dGhvcml6ZWQgYnkgdGhpcyBTZWN0aW9uIDIoYSkoNCkgbmV2ZXIgcHJvZHVjZXMgQWRhcHRlZCBNYXRlcmlhbC5cblxuICAgICAgNS4gRG93bnN0cmVhbSByZWNpcGllbnRzLlxuXG4gICAgICAgICBBLiBPZmZlciBmcm9tIHRoZSBMaWNlbnNvciDigJMgTGljZW5zZWQgTWF0ZXJpYWwuIEV2ZXJ5IHJlY2lwaWVudCBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXV0b21hdGljYWxseSByZWNlaXZlcyBhbiBvZmZlciBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSB0aGUgTGljZW5zZWQgUmlnaHRzIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICAgICAgICBCLiBBZGRpdGlvbmFsIG9mZmVyIGZyb20gdGhlIExpY2Vuc29yIOKAkyBBZGFwdGVkIE1hdGVyaWFsLiBFdmVyeSByZWNpcGllbnQgb2YgQWRhcHRlZCBNYXRlcmlhbCBmcm9tIFlvdSBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGFuIG9mZmVyIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMgaW4gdGhlIEFkYXB0ZWQgTWF0ZXJpYWwgdW5kZXIgdGhlIGNvbmRpdGlvbnMgb2YgdGhlIEFkYXB0ZXIncyBMaWNlbnNlIFlvdSBhcHBseS5cblxuICAgICAgICAgQy4gTm8gZG93bnN0cmVhbSByZXN0cmljdGlvbnMuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgdGVybXMgb3IgY29uZGl0aW9ucyBvbiwgb3IgYXBwbHkgYW55IEVmZmVjdGl2ZSBUZWNobm9sb2dpY2FsIE1lYXN1cmVzIHRvLCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaWYgZG9pbmcgc28gcmVzdHJpY3RzIGV4ZXJjaXNlIG9mIHRoZSBMaWNlbnNlZCBSaWdodHMgYnkgYW55IHJlY2lwaWVudCBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuXG5cbiAgICAgIDYuIE5vIGVuZG9yc2VtZW50LiBOb3RoaW5nIGluIHRoaXMgUHVibGljIExpY2Vuc2UgY29uc3RpdHV0ZXMgb3IgbWF5IGJlIGNvbnN0cnVlZCBhcyBwZXJtaXNzaW9uIHRvIGFzc2VydCBvciBpbXBseSB0aGF0IFlvdSBhcmUsIG9yIHRoYXQgWW91ciB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzLCBjb25uZWN0ZWQgd2l0aCwgb3Igc3BvbnNvcmVkLCBlbmRvcnNlZCwgb3IgZ3JhbnRlZCBvZmZpY2lhbCBzdGF0dXMgYnksIHRoZSBMaWNlbnNvciBvciBvdGhlcnMgZGVzaWduYXRlZCB0byByZWNlaXZlIGF0dHJpYnV0aW9uIGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gMyhhKSgxKShBKShpKS5cblxuICAgYi4gT3RoZXIgcmlnaHRzLlxuXG4gICAgICAxLiBNb3JhbCByaWdodHMsIHN1Y2ggYXMgdGhlIHJpZ2h0IG9mIGludGVncml0eSwgYXJlIG5vdCBsaWNlbnNlZCB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlLCBub3IgYXJlIHB1YmxpY2l0eSwgcHJpdmFjeSwgYW5kL29yIG90aGVyIHNpbWlsYXIgcGVyc29uYWxpdHkgcmlnaHRzOyBob3dldmVyLCB0byB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGUgTGljZW5zb3Igd2FpdmVzIGFuZC9vciBhZ3JlZXMgbm90IHRvIGFzc2VydCBhbnkgc3VjaCByaWdodHMgaGVsZCBieSB0aGUgTGljZW5zb3IgdG8gdGhlIGxpbWl0ZWQgZXh0ZW50IG5lY2Vzc2FyeSB0byBhbGxvdyBZb3UgdG8gZXhlcmNpc2UgdGhlIExpY2Vuc2VkIFJpZ2h0cywgYnV0IG5vdCBvdGhlcndpc2UuXG5cbiAgICAgIDIuIFBhdGVudCBhbmQgdHJhZGVtYXJrIHJpZ2h0cyBhcmUgbm90IGxpY2Vuc2VkIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgICAgIDMuIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoZSBMaWNlbnNvciB3YWl2ZXMgYW55IHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIGZyb20gWW91IGZvciB0aGUgZXhlcmNpc2Ugb2YgdGhlIExpY2Vuc2VkIFJpZ2h0cywgd2hldGhlciBkaXJlY3RseSBvciB0aHJvdWdoIGEgY29sbGVjdGluZyBzb2NpZXR5IHVuZGVyIGFueSB2b2x1bnRhcnkgb3Igd2FpdmFibGUgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZS4gSW4gYWxsIG90aGVyIGNhc2VzIHRoZSBMaWNlbnNvciBleHByZXNzbHkgcmVzZXJ2ZXMgYW55IHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMsIGluY2x1ZGluZyB3aGVuIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBpcyB1c2VkIG90aGVyIHRoYW4gZm9yIE5vbkNvbW1lcmNpYWwgcHVycG9zZXMuXG5cblNlY3Rpb24gMyDigJMgTGljZW5zZSBDb25kaXRpb25zLlxuXG5Zb3VyIGV4ZXJjaXNlIG9mIHRoZSBMaWNlbnNlZCBSaWdodHMgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMuXG5cbiAgIGEuIEF0dHJpYnV0aW9uLlxuXG4gICAgICAxLiBJZiBZb3UgU2hhcmUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIChpbmNsdWRpbmcgaW4gbW9kaWZpZWQgZm9ybSksIFlvdSBtdXN0OlxuXG4gICAgICAgICBBLiByZXRhaW4gdGhlIGZvbGxvd2luZyBpZiBpdCBpcyBzdXBwbGllZCBieSB0aGUgTGljZW5zb3Igd2l0aCB0aGUgTGljZW5zZWQgTWF0ZXJpYWw6XG5cbiAgICAgICAgICAgIGkuIGlkZW50aWZpY2F0aW9uIG9mIHRoZSBjcmVhdG9yKHMpIG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBhbmQgYW55IG90aGVycyBkZXNpZ25hdGVkIHRvIHJlY2VpdmUgYXR0cmlidXRpb24sIGluIGFueSByZWFzb25hYmxlIG1hbm5lciByZXF1ZXN0ZWQgYnkgdGhlIExpY2Vuc29yIChpbmNsdWRpbmcgYnkgcHNldWRvbnltIGlmIGRlc2lnbmF0ZWQpO1xuXG4gICAgICAgICAgICBpaS4gYSBjb3B5cmlnaHQgbm90aWNlO1xuXG4gICAgICAgICAgICBpaWkuIGEgbm90aWNlIHRoYXQgcmVmZXJzIHRvIHRoaXMgUHVibGljIExpY2Vuc2U7XG5cbiAgICAgICAgICAgIGl2LiBhIG5vdGljZSB0aGF0IHJlZmVycyB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzO1xuXG4gICAgICAgICAgICBcblxuICAgICAgICAgICAgdi4gYSBVUkkgb3IgaHlwZXJsaW5rIHRvIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGU7XG5cbiAgICAgICAgIEIuIGluZGljYXRlIGlmIFlvdSBtb2RpZmllZCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIHJldGFpbiBhbiBpbmRpY2F0aW9uIG9mIGFueSBwcmV2aW91cyBtb2RpZmljYXRpb25zOyBhbmRcblxuICAgICAgICAgQy4gaW5kaWNhdGUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIGxpY2Vuc2VkIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UsIGFuZCBpbmNsdWRlIHRoZSB0ZXh0IG9mLCBvciB0aGUgVVJJIG9yIGh5cGVybGluayB0bywgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgMi4gWW91IG1heSBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMyhhKSgxKSBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgYmFzZWQgb24gdGhlIG1lZGl1bSwgbWVhbnMsIGFuZCBjb250ZXh0IGluIHdoaWNoIFlvdSBTaGFyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuIEZvciBleGFtcGxlLCBpdCBtYXkgYmUgcmVhc29uYWJsZSB0byBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGJ5IHByb3ZpZGluZyBhIFVSSSBvciBoeXBlcmxpbmsgdG8gYSByZXNvdXJjZSB0aGF0IGluY2x1ZGVzIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi5cblxuICAgICAgMy4gSWYgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciwgWW91IG11c3QgcmVtb3ZlIGFueSBvZiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgU2VjdGlvbiAzKGEpKDEpKEEpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZS5cblxuICAgYi4gU2hhcmVBbGlrZS5JbiBhZGRpdGlvbiB0byB0aGUgY29uZGl0aW9ucyBpbiBTZWN0aW9uIDMoYSksIGlmIFlvdSBTaGFyZSBBZGFwdGVkIE1hdGVyaWFsIFlvdSBwcm9kdWNlLCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYWxzbyBhcHBseS5cblxuICAgICAgMS4gVGhlIEFkYXB0ZXIncyBMaWNlbnNlIFlvdSBhcHBseSBtdXN0IGJlIGEgQ3JlYXRpdmUgQ29tbW9ucyBsaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cywgdGhpcyB2ZXJzaW9uIG9yIGxhdGVyLCBvciBhIEJZLU5DLVNBIENvbXBhdGlibGUgTGljZW5zZS5cblxuICAgICAgMi4gWW91IG11c3QgaW5jbHVkZSB0aGUgdGV4dCBvZiwgb3IgdGhlIFVSSSBvciBoeXBlcmxpbmsgdG8sIHRoZSBBZGFwdGVyJ3MgTGljZW5zZSBZb3UgYXBwbHkuIFlvdSBtYXkgc2F0aXNmeSB0aGlzIGNvbmRpdGlvbiBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgYmFzZWQgb24gdGhlIG1lZGl1bSwgbWVhbnMsIGFuZCBjb250ZXh0IGluIHdoaWNoIFlvdSBTaGFyZSBBZGFwdGVkIE1hdGVyaWFsLlxuXG4gICAgICAzLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IHRlcm1zIG9yIGNvbmRpdGlvbnMgb24sIG9yIGFwcGx5IGFueSBFZmZlY3RpdmUgVGVjaG5vbG9naWNhbCBNZWFzdXJlcyB0bywgQWRhcHRlZCBNYXRlcmlhbCB0aGF0IHJlc3RyaWN0IGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGUgQWRhcHRlcidzIExpY2Vuc2UgWW91IGFwcGx5LlxuXG5TZWN0aW9uIDQg4oCTIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cy5cblxuV2hlcmUgdGhlIExpY2Vuc2VkIFJpZ2h0cyBpbmNsdWRlIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cyB0aGF0IGFwcGx5IHRvIFlvdXIgdXNlIG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbDpcblxuICAgYS4gZm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFNlY3Rpb24gMihhKSgxKSBncmFudHMgWW91IHRoZSByaWdodCB0byBleHRyYWN0LCByZXVzZSwgcmVwcm9kdWNlLCBhbmQgU2hhcmUgYWxsIG9yIGEgc3Vic3RhbnRpYWwgcG9ydGlvbiBvZiB0aGUgY29udGVudHMgb2YgdGhlIGRhdGFiYXNlIGZvciBOb25Db21tZXJjaWFsIHB1cnBvc2VzIG9ubHk7XG5cbiAgIGIuIGlmIFlvdSBpbmNsdWRlIGFsbCBvciBhIHN1YnN0YW50aWFsIHBvcnRpb24gb2YgdGhlIGRhdGFiYXNlIGNvbnRlbnRzIGluIGEgZGF0YWJhc2UgaW4gd2hpY2ggWW91IGhhdmUgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzLCB0aGVuIHRoZSBkYXRhYmFzZSBpbiB3aGljaCBZb3UgaGF2ZSBTdWkgR2VuZXJpcyBEYXRhYmFzZSBSaWdodHMgKGJ1dCBub3QgaXRzIGluZGl2aWR1YWwgY29udGVudHMpIGlzIEFkYXB0ZWQgTWF0ZXJpYWwsIGluY2x1ZGluZyBmb3IgcHVycG9zZXMgb2YgU2VjdGlvbiAzKGIpOyBhbmRcblxuICAgYy4gWW91IG11c3QgY29tcGx5IHdpdGggdGhlIGNvbmRpdGlvbnMgaW4gU2VjdGlvbiAzKGEpIGlmIFlvdSBTaGFyZSBhbGwgb3IgYSBzdWJzdGFudGlhbCBwb3J0aW9uIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YWJhc2UuXG5cbiAgIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIFNlY3Rpb24gNCBzdXBwbGVtZW50cyBhbmQgZG9lcyBub3QgcmVwbGFjZSBZb3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2Ugd2hlcmUgdGhlIExpY2Vuc2VkIFJpZ2h0cyBpbmNsdWRlIG90aGVyIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMuXG5cblNlY3Rpb24gNSDigJMgRGlzY2xhaW1lciBvZiBXYXJyYW50aWVzIGFuZCBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS5cblxuICAgYS4gVW5sZXNzIG90aGVyd2lzZSBzZXBhcmF0ZWx5IHVuZGVydGFrZW4gYnkgdGhlIExpY2Vuc29yLCB0byB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBhcy1pcyBhbmQgYXMtYXZhaWxhYmxlLCBhbmQgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIG9yIHdhcnJhbnRpZXMgb2YgYW55IGtpbmQgY29uY2VybmluZyB0aGUgTGljZW5zZWQgTWF0ZXJpYWwsIHdoZXRoZXIgZXhwcmVzcywgaW1wbGllZCwgc3RhdHV0b3J5LCBvciBvdGhlci4gVGhpcyBpbmNsdWRlcywgd2l0aG91dCBsaW1pdGF0aW9uLCB3YXJyYW50aWVzIG9mIHRpdGxlLCBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBub24taW5mcmluZ2VtZW50LCBhYnNlbmNlIG9mIGxhdGVudCBvciBvdGhlciBkZWZlY3RzLCBhY2N1cmFjeSwgb3IgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgZXJyb3JzLCB3aGV0aGVyIG9yIG5vdCBrbm93biBvciBkaXNjb3ZlcmFibGUuIFdoZXJlIGRpc2NsYWltZXJzIG9mIHdhcnJhbnRpZXMgYXJlIG5vdCBhbGxvd2VkIGluIGZ1bGwgb3IgaW4gcGFydCwgdGhpcyBkaXNjbGFpbWVyIG1heSBub3QgYXBwbHkgdG8gWW91LlxuXG4gICBiLiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlLCBpbiBubyBldmVudCB3aWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gWW91IG9uIGFueSBsZWdhbCB0aGVvcnkgKGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBuZWdsaWdlbmNlKSBvciBvdGhlcndpc2UgZm9yIGFueSBkaXJlY3QsIHNwZWNpYWwsIGluZGlyZWN0LCBpbmNpZGVudGFsLCBjb25zZXF1ZW50aWFsLCBwdW5pdGl2ZSwgZXhlbXBsYXJ5LCBvciBvdGhlciBsb3NzZXMsIGNvc3RzLCBleHBlbnNlcywgb3IgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlIG9yIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwsIGV2ZW4gaWYgdGhlIExpY2Vuc29yIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggbG9zc2VzLCBjb3N0cywgZXhwZW5zZXMsIG9yIGRhbWFnZXMuIFdoZXJlIGEgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgaXMgbm90IGFsbG93ZWQgaW4gZnVsbCBvciBpbiBwYXJ0LCB0aGlzIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuXG5cbiAgIGMuIFRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkIGFib3ZlIHNoYWxsIGJlIGludGVycHJldGVkIGluIGEgbWFubmVyIHRoYXQsIHRvIHRoZSBleHRlbnQgcG9zc2libGUsIG1vc3QgY2xvc2VseSBhcHByb3hpbWF0ZXMgYW4gYWJzb2x1dGUgZGlzY2xhaW1lciBhbmQgd2FpdmVyIG9mIGFsbCBsaWFiaWxpdHkuXG5cblNlY3Rpb24gNiDigJMgVGVybSBhbmQgVGVybWluYXRpb24uXG5cbiAgIGEuIFRoaXMgUHVibGljIExpY2Vuc2UgYXBwbGllcyBmb3IgdGhlIHRlcm0gb2YgdGhlIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgbGljZW5zZWQgaGVyZS4gSG93ZXZlciwgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhpcyBQdWJsaWMgTGljZW5zZSwgdGhlbiBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5LlxuXG4gICBiLiBXaGVyZSBZb3VyIHJpZ2h0IHRvIHVzZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaGFzIHRlcm1pbmF0ZWQgdW5kZXIgU2VjdGlvbiA2KGEpLCBpdCByZWluc3RhdGVzOlxuXG4gICAgICAxLiBhdXRvbWF0aWNhbGx5IGFzIG9mIHRoZSBkYXRlIHRoZSB2aW9sYXRpb24gaXMgY3VyZWQsIHByb3ZpZGVkIGl0IGlzIGN1cmVkIHdpdGhpbiAzMCBkYXlzIG9mIFlvdXIgZGlzY292ZXJ5IG9mIHRoZSB2aW9sYXRpb247IG9yXG5cbiAgICAgIDIuIHVwb24gZXhwcmVzcyByZWluc3RhdGVtZW50IGJ5IHRoZSBMaWNlbnNvci5cblxuICAgRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgU2VjdGlvbiA2KGIpIGRvZXMgbm90IGFmZmVjdCBhbnkgcmlnaHQgdGhlIExpY2Vuc29yIG1heSBoYXZlIHRvIHNlZWsgcmVtZWRpZXMgZm9yIFlvdXIgdmlvbGF0aW9ucyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICBjLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhlIExpY2Vuc29yIG1heSBhbHNvIG9mZmVyIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB1bmRlciBzZXBhcmF0ZSB0ZXJtcyBvciBjb25kaXRpb25zIG9yIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBhdCBhbnkgdGltZTsgaG93ZXZlciwgZG9pbmcgc28gd2lsbCBub3QgdGVybWluYXRlIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgIGQuIFNlY3Rpb25zIDEsIDUsIDYsIDcsIGFuZCA4IHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuU2VjdGlvbiA3IOKAkyBPdGhlciBUZXJtcyBhbmQgQ29uZGl0aW9ucy5cblxuICAgYS4gVGhlIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgdGVybXMgb3IgY29uZGl0aW9ucyBjb21tdW5pY2F0ZWQgYnkgWW91IHVubGVzcyBleHByZXNzbHkgYWdyZWVkLlxuXG4gICBiLiBBbnkgYXJyYW5nZW1lbnRzLCB1bmRlcnN0YW5kaW5ncywgb3IgYWdyZWVtZW50cyByZWdhcmRpbmcgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIG5vdCBzdGF0ZWQgaGVyZWluIGFyZSBzZXBhcmF0ZSBmcm9tIGFuZCBpbmRlcGVuZGVudCBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuU2VjdGlvbiA4IOKAkyBJbnRlcnByZXRhdGlvbi5cblxuICAgYS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgUHVibGljIExpY2Vuc2UgZG9lcyBub3QsIGFuZCBzaGFsbCBub3QgYmUgaW50ZXJwcmV0ZWQgdG8sIHJlZHVjZSwgbGltaXQsIHJlc3RyaWN0LCBvciBpbXBvc2UgY29uZGl0aW9ucyBvbiBhbnkgdXNlIG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB0aGF0IGNvdWxkIGxhd2Z1bGx5IGJlIG1hZGUgd2l0aG91dCBwZXJtaXNzaW9uIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgIGIuIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIGlmIGFueSBwcm92aXNpb24gb2YgdGhpcyBQdWJsaWMgTGljZW5zZSBpcyBkZWVtZWQgdW5lbmZvcmNlYWJsZSwgaXQgc2hhbGwgYmUgYXV0b21hdGljYWxseSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIElmIHRoZSBwcm92aXNpb24gY2Fubm90IGJlIHJlZm9ybWVkLCBpdCBzaGFsbCBiZSBzZXZlcmVkIGZyb20gdGhpcyBQdWJsaWMgTGljZW5zZSB3aXRob3V0IGFmZmVjdGluZyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmluZyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgYy4gTm8gdGVybSBvciBjb25kaXRpb24gb2YgdGhpcyBQdWJsaWMgTGljZW5zZSB3aWxsIGJlIHdhaXZlZCBhbmQgbm8gZmFpbHVyZSB0byBjb21wbHkgY29uc2VudGVkIHRvIHVubGVzcyBleHByZXNzbHkgYWdyZWVkIHRvIGJ5IHRoZSBMaWNlbnNvci5cblxuICAgZC4gTm90aGluZyBpbiB0aGlzIFB1YmxpYyBMaWNlbnNlIGNvbnN0aXR1dGVzIG9yIG1heSBiZSBpbnRlcnByZXRlZCBhcyBhIGxpbWl0YXRpb24gdXBvbiwgb3Igd2FpdmVyIG9mLCBhbnkgcHJpdmlsZWdlcyBhbmQgaW1tdW5pdGllcyB0aGF0IGFwcGx5IHRvIHRoZSBMaWNlbnNvciBvciBZb3UsIGluY2x1ZGluZyBmcm9tIHRoZSBsZWdhbCBwcm9jZXNzZXMgb2YgYW55IGp1cmlzZGljdGlvbiBvciBhdXRob3JpdHkuXG5cbkNyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gaXRzIHB1YmxpYyBsaWNlbnNlcy4gTm90d2l0aHN0YW5kaW5nLCBDcmVhdGl2ZSBDb21tb25zIG1heSBlbGVjdCB0byBhcHBseSBvbmUgb2YgaXRzIHB1YmxpYyBsaWNlbnNlcyB0byBtYXRlcmlhbCBpdCBwdWJsaXNoZXMgYW5kIGluIHRob3NlIGluc3RhbmNlcyB3aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFwiTGljZW5zb3IuXCIgVGhlIHRleHQgb2YgdGhlIENyZWF0aXZlIENvbW1vbnMgcHVibGljIGxpY2Vuc2VzIGlzIGRlZGljYXRlZCB0byB0aGUgcHVibGljIGRvbWFpbiB1bmRlciB0aGUgQ0MwIFB1YmxpYyBEb21haW4gRGVkaWNhdGlvbi4gRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdGhhdCBtYXRlcmlhbCBpcyBzaGFyZWQgdW5kZXIgYSBDcmVhdGl2ZSBDb21tb25zIHB1YmxpYyBsaWNlbnNlIG9yIGFzIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgdGhlIENyZWF0aXZlIENvbW1vbnMgcG9saWNpZXMgcHVibGlzaGVkIGF0IGNyZWF0aXZlY29tbW9ucy5vcmcvcG9saWNpZXMsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2Ugb2YgdGhlIHRyYWRlbWFyayBcIkNyZWF0aXZlIENvbW1vbnNcIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IGl0cyBwcmlvciB3cml0dGVuIGNvbnNlbnQgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGluIGNvbm5lY3Rpb24gd2l0aCBhbnkgdW5hdXRob3JpemVkIG1vZGlmaWNhdGlvbnMgdG8gYW55IG9mIGl0cyBwdWJsaWMgbGljZW5zZXMgb3IgYW55IG90aGVyIGFycmFuZ2VtZW50cywgdW5kZXJzdGFuZGluZ3MsIG9yIGFncmVlbWVudHMgY29uY2VybmluZyB1c2Ugb2YgbGljZW5zZWQgbWF0ZXJpYWwuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHBhcmFncmFwaCBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhlIHB1YmxpYyBsaWNlbnNlcy5cblxuQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGNyZWF0aXZlY29tbW9ucy5vcmcuIl0sImxpY2Vuc2VJZHMiOlsiQ0MtQlktTkMtU0EtNC4wIl0sImtleXdvcmRzIjpbImMgYnkgbmMiLCJhcmUgYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCIsImF0dHJpYnV0aW9uIG5vbmNvbW1lcmNpYWwgYW5kIiwibm9uY29tbWVyY2lhbCBhbmQgc2hhcmVhbGlrZSIsImxpY2Vuc2UgayBub25jb21tZXJjaWFsIiwiayBub25jb21tZXJjaWFsIG1lYW5zIiwidGhlIGV4Y2hhbmdlIGwiLCJleGNoYW5nZSBsIHNoYXJlIiwibCBzaGFyZSBtZWFucyIsImJ5IHRoZW0gbSIsInRoZW0gbSBzdWkiLCJtIHN1aSBnZW5lcmlzIiwidGhlIHdvcmxkIG4iLCJ3b3JsZCBuIHlvdSIsIm4geW91IG1lYW5zIiwiYSBieSBuYyIsImxpY2Vuc2UgYyBieSBuYyIsImMgYnkgbmMgc2EiLCJsaWNlbnNlIGFyZSBhdHRyaWJ1dGlvbiBub25jb21tZXJjaWFsIiwiYXJlIGF0dHJpYnV0aW9uIG5vbmNvbW1lcmNpYWwgYW5kIiwiYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCBhbmQgc2hhcmVhbGlrZSIsIm5vbmNvbW1lcmNpYWwgYW5kIHNoYXJlYWxpa2UgaCIsInB1YmxpYyBsaWNlbnNlIGsgbm9uY29tbWVyY2lhbCIsImxpY2Vuc2UgayBub25jb21tZXJjaWFsIG1lYW5zIiwiayBub25jb21tZXJjaWFsIG1lYW5zIG5vdCIsIndpdGggdGhlIGV4Y2hhbmdlIGwiLCJ0aGUgZXhjaGFuZ2UgbCBzaGFyZSIsImV4Y2hhbmdlIGwgc2hhcmUgbWVhbnMiLCJsIHNoYXJlIG1lYW5zIHRvIiwiY2hvc2VuIGJ5IHRoZW0gbSIsImJ5IHRoZW0gbSBzdWkiLCJ0aGVtIG0gc3VpIGdlbmVyaXMiLCJtIHN1aSBnZW5lcmlzIGRhdGFiYXNlIiwiaW4gdGhlIHdvcmxkIG4iLCJ0aGUgd29ybGQgbiB5b3UiLCJ3b3JsZCBuIHlvdSBtZWFucyIsIm4geW91IG1lYW5zIHRoZSIsIm9yIGEgYnkgbmMiLCJhIGJ5IG5jIHNhIiwicHVibGljIGxpY2Vuc2UgYyBieSBuYyIsImxpY2Vuc2UgYyBieSBuYyBzYSIsImMgYnkgbmMgc2EgY29tcGF0aWJsZSIsIm5jIHNhIGNvbXBhdGlibGUgbGljZW5zZSBtZWFucyIsInB1YmxpYyBsaWNlbnNlIGFyZSBhdHRyaWJ1dGlvbiBub25jb21tZXJjaWFsIiwibGljZW5zZSBhcmUgYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCBhbmQiLCJhcmUgYXR0cmlidXRpb24gbm9uY29tbWVyY2lhbCBhbmQgc2hhcmVhbGlrZSIsImF0dHJpYnV0aW9uIG5vbmNvbW1lcmNpYWwgYW5kIHNoYXJlYWxpa2UgaCIsIm5vbmNvbW1lcmNpYWwgYW5kIHNoYXJlYWxpa2UgaCBsaWNlbnNlZCIsInRoaXMgcHVibGljIGxpY2Vuc2UgayBub25jb21tZXJjaWFsIiwicHVibGljIGxpY2Vuc2UgayBub25jb21tZXJjaWFsIG1lYW5zIiwibGljZW5zZSBrIG5vbmNvbW1lcmNpYWwgbWVhbnMgbm90IiwiayBub25jb21tZXJjaWFsIG1lYW5zIG5vdCBwcmltYXJpbHkiLCJjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIGwiLCJ3aXRoIHRoZSBleGNoYW5nZSBsIHNoYXJlIiwidGhlIGV4Y2hhbmdlIGwgc2hhcmUgbWVhbnMiLCJleGNoYW5nZSBsIHNoYXJlIG1lYW5zIHRvIiwibCBzaGFyZSBtZWFucyB0byBwcm92aWRlIiwiaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtIG0iLCJjaG9zZW4gYnkgdGhlbSBtIHN1aSIsImJ5IHRoZW0gbSBzdWkgZ2VuZXJpcyIsInRoZW0gbSBzdWkgZ2VuZXJpcyBkYXRhYmFzZSIsIm0gc3VpIGdlbmVyaXMgZGF0YWJhc2UgcmlnaHRzIiwiYW55d2hlcmUgaW4gdGhlIHdvcmxkIG4iLCJpbiB0aGUgd29ybGQgbiB5b3UiLCJ0aGUgd29ybGQgbiB5b3UgbWVhbnMiLCJ3b3JsZCBuIHlvdSBtZWFucyB0aGUiLCJuIHlvdSBtZWFucyB0aGUgaW5kaXZpZHVhbCIsImxhdGVyIG9yIGEgYnkgbmMiLCJvciBhIGJ5IG5jIHNhIiwiYSBieSBuYyBzYSBjb21wYXRpYmxlIiwibmMgc2EgY29tcGF0aWJsZSBsaWNlbnNlIDIiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob0Rlcml2cyAxLjAgQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOIFwiQVMtSVNcIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuXG5cbkxpY2Vuc2VcblxuVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKFwiQ0NQTFwiIE9SIFwiTElDRU5TRVwiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBJUyBQUk9ISUJJVEVELlxuXG5CWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXG4gICAxLiBEZWZpbml0aW9uc1xuXG4gICAgICBhLiBcIkNvbGxlY3RpdmUgV29ya1wiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gXCJEZXJpdmF0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIFwiTGljZW5zb3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgZC4gXCJPcmlnaW5hbCBBdXRob3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuXG5cbiAgICAgIGUuIFwiV29ya1wiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGYuIFwiWW91XCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi5cblxuICAgMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLlxuXG4gICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6XG5cbiAgICAgIGEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgICAgYi4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuXG5cbiAgIDQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcblxuICAgICAgYS4gWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLlxuXG4gICAgICBiLiBJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZC4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LlxuXG4gICA1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXJcblxuICAgICAgYS4gQnkgb2ZmZXJpbmcgdGhlIFdvcmsgZm9yIHB1YmxpYyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCwgdG8gdGhlIGJlc3Qgb2YgTGljZW5zb3IncyBrbm93bGVkZ2UgYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5OlxuXG4gICAgICAgICBpLiBMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0byBwZXJtaXQgdGhlIGxhd2Z1bCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpdGhvdXQgWW91IGhhdmluZyBhbnkgb2JsaWdhdGlvbiB0byBwYXkgYW55IHJveWFsdGllcywgY29tcHVsc29yeSBsaWNlbnNlIGZlZXMsIHJlc2lkdWFscyBvciBhbnkgb3RoZXIgcGF5bWVudHM7XG5cbiAgICAgICAgIGlpLiBUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuXG5cbiAgICAgIGIuIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIENPTlRFTlRTIE9SIEFDQ1VSQUNZIE9GIFRIRSBXT1JLLlxuXG4gICA2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIEFORCBFWENFUFQgRk9SIERBTUFHRVMgQVJJU0lORyBGUk9NIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG4gICA3LiBUZXJtaW5hdGlvblxuXG4gICAgICBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS5cblxuICAgOC4gTWlzY2VsbGFuZW91c1xuXG4gICAgICBhLiBFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuXG5cbiAgICAgIGMuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuXG5cbiAgICAgIGQuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LlxuXG5DcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci5cblxuRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgXCJDcmVhdGl2ZSBDb21tb25zXCIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuXG5cbkNyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uIl0sImxpY2Vuc2VJZHMiOlsiQ0MtQlktTkQtMS4wIl0sImtleXdvcmRzIjpbImF0dHJpYnV0aW9uIG5vZGVyaXZzIDEiLCJub2Rlcml2cyAxIDAiLCJjb21tb25zIGF0dHJpYnV0aW9uIG5vZGVyaXZzIDEiLCJhdHRyaWJ1dGlvbiBub2Rlcml2cyAxIDAiLCJub2Rlcml2cyAxIDAgY3JlYXRpdmUiLCJjcmVhdGl2ZSBjb21tb25zIGF0dHJpYnV0aW9uIG5vZGVyaXZzIDEiLCJjb21tb25zIGF0dHJpYnV0aW9uIG5vZGVyaXZzIDEgMCIsImF0dHJpYnV0aW9uIG5vZGVyaXZzIDEgMCBjcmVhdGl2ZSIsIm5vZGVyaXZzIDEgMCBjcmVhdGl2ZSBjb21tb25zIl19LHsibGljZW5zZVRleHRzIjpbIkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tTm9EZXJpdnMgMi4wIENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiBcIkFTLUlTXCIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLlxuXG5MaWNlbnNlXG5cblRIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFIChcIkNDUExcIiBPUiBcIkxJQ0VOU0VcIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELlxuXG5CWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXG4gICAxLiBEZWZpbml0aW9uc1xuXG4gICAgICBhLiBcIkNvbGxlY3RpdmUgV29ya1wiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gXCJEZXJpdmF0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKFwic3luY2hpbmdcIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIFwiTGljZW5zb3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgZC4gXCJPcmlnaW5hbCBBdXRob3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuXG5cbiAgICAgIGUuIFwiV29ya1wiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGYuIFwiWW91XCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi5cblxuICAgMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLlxuXG4gICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6XG5cbiAgICAgIGEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgICAgYi4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3Jrcy5cblxuICAgICAgYy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSB3b3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjpcblxuICAgICAgICAgaS4gUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLlxuXG4gICAgICAgICBpaS4gTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBzb2NpZXR5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoXCJjb3ZlciB2ZXJzaW9uXCIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLlxuXG4gICAgICBkLiBXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuXG5cbiAgIFxuXG4gICBUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZSBEZXJpdmF0aXZlIFdvcmtzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLlxuXG4gICA0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG5cbiAgICAgIGEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC5cblxuICAgICAgYi4gSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgYW5kIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuXG5cbiAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lclxuXG4gICBVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1BVEVSSUFMUywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDcuIFRlcm1pbmF0aW9uXG5cbiAgICAgIGEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLlxuXG4gICA4LiBNaXNjZWxsYW5lb3VzXG5cbiAgICAgIGEuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS5cblxuICAgICAgYy4gTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC5cblxuICAgICAgZC4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuXG5cbkNyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLlxuXG5FeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayBcIkNyZWF0aXZlIENvbW1vbnNcIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zJyB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS5cblxuQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uIl0sImxpY2Vuc2VJZHMiOlsiQ0MtQlktTkQtMi4wIl0sImtleXdvcmRzIjpbImNvbnRhY3RlZCBhdCBodHRwcyIsImF0IGh0dHBzIGNyZWF0aXZlY29tbW9ucyIsImh0dHBzIGNyZWF0aXZlY29tbW9ucyBvcmciLCJhdHRyaWJ1dGlvbiBub2Rlcml2cyAyIDAiLCJiZSBjb250YWN0ZWQgYXQgaHR0cHMiLCJjb250YWN0ZWQgYXQgaHR0cHMgY3JlYXRpdmVjb21tb25zIiwiYXQgaHR0cHMgY3JlYXRpdmVjb21tb25zIG9yZyIsImNvbW1vbnMgYXR0cmlidXRpb24gbm9kZXJpdnMgMiAwIiwiYXR0cmlidXRpb24gbm9kZXJpdnMgMiAwIGNyZWF0aXZlIiwibWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwcyIsImJlIGNvbnRhY3RlZCBhdCBodHRwcyBjcmVhdGl2ZWNvbW1vbnMiLCJjb250YWN0ZWQgYXQgaHR0cHMgY3JlYXRpdmVjb21tb25zIG9yZyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vRGVyaXZzIDIuNSBDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gXCJBUy1JU1wiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS5cblxuTGljZW5zZVxuXG5USEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoXCJDQ1BMXCIgT1IgXCJMSUNFTlNFXCIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC5cblxuQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy5cblxuICAgMS4gRGVmaW5pdGlvbnNcblxuICAgICAgYS4gXCJDb2xsZWN0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFwiRGVyaXZhdGl2ZSBXb3JrXCIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlIChcInN5bmNoaW5nXCIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBcIkxpY2Vuc29yXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGQuIFwiT3JpZ2luYWwgQXV0aG9yXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLlxuXG4gICAgICBlLiBcIldvcmtcIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBmLiBcIllvdVwiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uXG5cbiAgIDIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy5cblxuICAgMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OlxuXG4gICAgICBhLiB0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7XG5cbiAgICAgIGIuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3MuXG5cbiAgICAgIGMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246XG5cbiAgICAgICAgIGkuIFBlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay5cblxuICAgICAgICAgaWkuIE1lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgc29jaWV0eSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKFwiY292ZXIgdmVyc2lvblwiKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS5cblxuICAgICAgZC4gV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLlxuXG4gICBUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZSBEZXJpdmF0aXZlIFdvcmtzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLlxuXG4gICA0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG5cbiAgICAgIGEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChiKSwgYXMgcmVxdWVzdGVkLlxuXG4gICAgICBiLiBJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yJ3MgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgYW5kIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuXG5cbiAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lclxuXG4gICBVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1BVEVSSUFMUywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDcuIFRlcm1pbmF0aW9uXG5cbiAgICAgIGEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLlxuXG4gICA4LiBNaXNjZWxsYW5lb3VzXG5cbiAgICAgIGEuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS5cblxuICAgICAgYy4gTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC5cblxuICAgICAgZC4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuXG5cbkNyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLlxuXG5FeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayBcIkNyZWF0aXZlIENvbW1vbnNcIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zJyB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS5cblxuQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4iXSwibGljZW5zZUlkcyI6WyJDQy1CWS1ORC0yLjUiXSwia2V5d29yZHMiOlsiYXR0cmlidXRpb24gbm9kZXJpdnMgMiA1IiwiY29tbW9ucyBhdHRyaWJ1dGlvbiBub2Rlcml2cyAyIDUiLCJhdHRyaWJ1dGlvbiBub2Rlcml2cyAyIDUgY3JlYXRpdmUiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob0Rlcml2cyAzLjAgVW5wb3J0ZWQgQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOIFwiQVMtSVNcIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuXG5cbkxpY2Vuc2VcblxuVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKFwiQ0NQTFwiIE9SIFwiTElDRU5TRVwiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuXG5cbkJZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cbiAgIDEuIERlZmluaXRpb25zXG5cbiAgICAgIGEuIFwiQWRhcHRhdGlvblwiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrLCBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgZGVyaXZhdGl2ZSB3b3JrLCBhcnJhbmdlbWVudCBvZiBtdXNpYyBvciBvdGhlciBhbHRlcmF0aW9ucyBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIG9yIHBob25vZ3JhbSBvciBwZXJmb3JtYW5jZSBhbmQgaW5jbHVkZXMgY2luZW1hdG9ncmFwaGljIGFkYXB0YXRpb25zIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkIGluY2x1ZGluZyBpbiBhbnkgZm9ybSByZWNvZ25pemFibHkgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSwgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlIChcInN5bmNoaW5nXCIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFwiQ29sbGVjdGlvblwiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3Jrcywgc3VjaCBhcyBlbmN5Y2xvcGVkaWFzIGFuZCBhbnRob2xvZ2llcywgb3IgcGVyZm9ybWFuY2VzLCBwaG9ub2dyYW1zIG9yIGJyb2FkY2FzdHMsIG9yIG90aGVyIHdvcmtzIG9yIHN1YmplY3QgbWF0dGVyIG90aGVyIHRoYW4gd29ya3MgbGlzdGVkIGluIFNlY3Rpb24gMShmKSBiZWxvdywgd2hpY2gsIGJ5IHJlYXNvbiBvZiB0aGUgc2VsZWN0aW9uIGFuZCBhcnJhbmdlbWVudCBvZiB0aGVpciBjb250ZW50cywgY29uc3RpdHV0ZSBpbnRlbGxlY3R1YWwgY3JlYXRpb25zLCBpbiB3aGljaCB0aGUgV29yayBpcyBpbmNsdWRlZCBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtIGFsb25nIHdpdGggb25lIG9yIG1vcmUgb3RoZXIgY29udHJpYnV0aW9ucywgZWFjaCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIHdoaWNoIHRvZ2V0aGVyIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gKGFzIGRlZmluZWQgYWJvdmUpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBcIkRpc3RyaWJ1dGVcIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuXG5cbiAgICAgIGQuIFwiTGljZW5zb3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGUuIFwiT3JpZ2luYWwgQXV0aG9yXCIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LlxuXG4gICAgICBmLiBcIldvcmtcIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuXG5cbiAgICAgIGcuIFwiWW91XCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi5cblxuICAgICAgaC4gXCJQdWJsaWNseSBQZXJmb3JtXCIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsgYW5kIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgdGhvc2UgcHVibGljIHJlY2l0YXRpb25zLCBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2ggYSB3YXkgdGhhdCBtZW1iZXJzIG9mIHRoZSBwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb2YgdGhlIHBlcmZvcm1hbmNlcyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIGJ5IHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlOyB0byBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuXG5cbiAgICAgIGkuIFwiUmVwcm9kdWNlXCIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLlxuXG4gICAyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy5cblxuICAgMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OlxuXG4gICAgICBhLiB0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9uczsgYW5kLFxuXG4gICAgICBiLiB0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGlvbnMuXG5cbiAgICAgIGMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OlxuXG4gICAgICAgICBpLiBOb24td2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlO1xuXG4gICAgICAgICBpaS4gV2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2FuIGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsgYW5kLFxuXG4gICAgICAgICBpaWkuIFZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgQWRhcHRhdGlvbnMuIFN1YmplY3QgdG8gU2VjdGlvbiA4KGYpLCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLlxuXG4gICA0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG5cbiAgICAgIGEuIFlvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIFdvcmsgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yaywgWW91IG1heSBub3QgaW1wb3NlIGFueSBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSBhYmlsaXR5IG9mIGEgcmVjaXBpZW50IG9mIHRoZSBXb3JrIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGEpIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3Rpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChiKSwgYXMgcmVxdWVzdGVkLlxuXG4gICAgICBiLiBJZiBZb3UgRGlzdHJpYnV0ZSwgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIChcIkF0dHJpYnV0aW9uIFBhcnRpZXNcIikgaW4gTGljZW5zb3IncyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0KGIpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuXG5cbiAgICAgIGMuIEV4Y2VwdCBhcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcgYnkgdGhlIExpY2Vuc29yIG9yIGFzIG1heSBiZSBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpZiBZb3UgUmVwcm9kdWNlLCBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgZWl0aGVyIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGFueSBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgV29yayB3aGljaCB3b3VsZCBiZSBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yJ3MgaG9ub3Igb3IgcmVwdXRhdGlvbi5cblxuICAgNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyXG5cbiAgIFVOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDcuIFRlcm1pbmF0aW9uXG5cbiAgICAgIGEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQ29sbGVjdGlvbnMgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS5cblxuICAgOC4gTWlzY2VsbGFuZW91c1xuXG4gICAgICBhLiBFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3Rpb24sIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuXG5cbiAgICAgIGMuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuXG5cbiAgICAgIGQuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LlxuXG4gICAgICBlLiBUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIsIGFuZCB0aGUgc3ViamVjdCBtYXR0ZXIgcmVmZXJlbmNlZCwgaW4gdGhpcyBMaWNlbnNlIHdlcmUgZHJhZnRlZCB1dGlsaXppbmcgdGhlIHRlcm1pbm9sb2d5IG9mIHRoZSBCZXJuZSBDb252ZW50aW9uIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24gU2VwdGVtYmVyIDI4LCAxOTc5KSwgdGhlIFJvbWUgQ29udmVudGlvbiBvZiAxOTYxLCB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IG9mIDE5OTYsIHRoZSBXSVBPIFBlcmZvcm1hbmNlcyBhbmQgUGhvbm9ncmFtcyBUcmVhdHkgb2YgMTk5NiBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZCBvbiBKdWx5IDI0LCAxOTcxKS4gVGhlc2UgcmlnaHRzIGFuZCBzdWJqZWN0IG1hdHRlciB0YWtlIGVmZmVjdCBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZSBzb3VnaHQgdG8gYmUgZW5mb3JjZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHRyZWF0eSBwcm92aXNpb25zIGluIHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdy4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIHN1Y2ggYWRkaXRpb25hbCByaWdodHMgYXJlIGRlZW1lZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZTsgdGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byByZXN0cmljdCB0aGUgbGljZW5zZSBvZiBhbnkgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbGF3LlxuXG5DcmVhdGl2ZSBDb21tb25zIE5vdGljZVxuXG5DcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci5cblxuRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrIFwiQ3JlYXRpdmUgQ29tbW9uc1wiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnMnIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyB0cmFkZW1hcmsgcmVzdHJpY3Rpb24gZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoaXMgTGljZW5zZS5cblxuQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4iXSwibGljZW5zZUlkcyI6WyJDQy1CWS1ORC0zLjAiXSwia2V5d29yZHMiOlsiYXR0cmlidXRpb24gbm9kZXJpdnMgMyIsImluIGNvbGxlY3Rpb25zIGMiLCJjb2xsZWN0aW9ucyBjIGZvciIsIm9mIHRoZSBjb2xsZWN0aW9uIiwidGhlIGNvbGxlY3Rpb24gYXBwZWFycyIsImNvbW1vbnMgYXR0cmlidXRpb24gbm9kZXJpdnMgMyIsImF0dHJpYnV0aW9uIG5vZGVyaXZzIDMgMCIsImluY29ycG9yYXRlZCBpbiBjb2xsZWN0aW9ucyBjIiwiaW4gY29sbGVjdGlvbnMgYyBmb3IiLCJjb2xsZWN0aW9ucyBjIGZvciB0aGUiLCJhZGFwdGF0aW9ucyBzdWJqZWN0IHRvIHNlY3Rpb24iLCJhdXRob3JzIG9mIHRoZSBjb2xsZWN0aW9uIiwib2YgdGhlIGNvbGxlY3Rpb24gYXBwZWFycyIsInRoZSBjb2xsZWN0aW9uIGFwcGVhcnMgdGhlbiIsImNyZWF0aXZlIGNvbW1vbnMgYXR0cmlidXRpb24gbm9kZXJpdnMgMyIsImNvbW1vbnMgYXR0cmlidXRpb24gbm9kZXJpdnMgMyAwIiwiYXR0cmlidXRpb24gbm9kZXJpdnMgMyAwIHVucG9ydGVkIiwiYXMgaW5jb3Jwb3JhdGVkIGluIGNvbGxlY3Rpb25zIGMiLCJpbmNvcnBvcmF0ZWQgaW4gY29sbGVjdGlvbnMgYyBmb3IiLCJpbiBjb2xsZWN0aW9ucyBjIGZvciB0aGUiLCJjb2xsZWN0aW9ucyBjIGZvciB0aGUgYXZvaWRhbmNlIiwibWFrZSBhZGFwdGF0aW9ucyBzdWJqZWN0IHRvIHNlY3Rpb24iLCJhZGFwdGF0aW9ucyBzdWJqZWN0IHRvIHNlY3Rpb24gOCIsImNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBjb2xsZWN0aW9uIiwiYXV0aG9ycyBvZiB0aGUgY29sbGVjdGlvbiBhcHBlYXJzIiwib2YgdGhlIGNvbGxlY3Rpb24gYXBwZWFycyB0aGVuIiwidGhlIGNvbGxlY3Rpb24gYXBwZWFycyB0aGVuIGFzIl19LHsibGljZW5zZVRleHRzIjpbIkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tTm9EZXJpdmF0aXZlcyA0LjAgSW50ZXJuYXRpb25hbCBDcmVhdGl2ZSBDb21tb25zIENvcnBvcmF0aW9uIChcIkNyZWF0aXZlIENvbW1vbnNcIikgaXMgbm90IGEgbGF3IGZpcm0gYW5kIGRvZXMgbm90IHByb3ZpZGUgbGVnYWwgc2VydmljZXMgb3IgbGVnYWwgYWR2aWNlLiBEaXN0cmlidXRpb24gb2YgQ3JlYXRpdmUgQ29tbW9ucyBwdWJsaWMgbGljZW5zZXMgZG9lcyBub3QgY3JlYXRlIGEgbGF3eWVyLWNsaWVudCBvciBvdGhlciByZWxhdGlvbnNoaXAuIENyZWF0aXZlIENvbW1vbnMgbWFrZXMgaXRzIGxpY2Vuc2VzIGFuZCByZWxhdGVkIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBvbiBhbiBcImFzLWlzXCIgYmFzaXMuIENyZWF0aXZlIENvbW1vbnMgZ2l2ZXMgbm8gd2FycmFudGllcyByZWdhcmRpbmcgaXRzIGxpY2Vuc2VzLCBhbnkgbWF0ZXJpYWwgbGljZW5zZWQgdW5kZXIgdGhlaXIgdGVybXMgYW5kIGNvbmRpdGlvbnMsIG9yIGFueSByZWxhdGVkIGluZm9ybWF0aW9uLiBDcmVhdGl2ZSBDb21tb25zIGRpc2NsYWltcyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzIHJlc3VsdGluZyBmcm9tIHRoZWlyIHVzZSB0byB0aGUgZnVsbGVzdCBleHRlbnQgcG9zc2libGUuXG5cblVzaW5nIENyZWF0aXZlIENvbW1vbnMgUHVibGljIExpY2Vuc2VzXG5cbkNyZWF0aXZlIENvbW1vbnMgcHVibGljIGxpY2Vuc2VzIHByb3ZpZGUgYSBzdGFuZGFyZCBzZXQgb2YgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBjcmVhdG9ycyBhbmQgb3RoZXIgcmlnaHRzIGhvbGRlcnMgbWF5IHVzZSB0byBzaGFyZSBvcmlnaW5hbCB3b3JrcyBvZiBhdXRob3JzaGlwIGFuZCBvdGhlciBtYXRlcmlhbCBzdWJqZWN0IHRvIGNvcHlyaWdodCBhbmQgY2VydGFpbiBvdGhlciByaWdodHMgc3BlY2lmaWVkIGluIHRoZSBwdWJsaWMgbGljZW5zZSBiZWxvdy4gVGhlIGZvbGxvd2luZyBjb25zaWRlcmF0aW9ucyBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSwgYXJlIG5vdCBleGhhdXN0aXZlLCBhbmQgZG8gbm90IGZvcm0gcGFydCBvZiBvdXIgbGljZW5zZXMuXG5cbkNvbnNpZGVyYXRpb25zIGZvciBsaWNlbnNvcnM6IE91ciBwdWJsaWMgbGljZW5zZXMgYXJlIGludGVuZGVkIGZvciB1c2UgYnkgdGhvc2UgYXV0aG9yaXplZCB0byBnaXZlIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgbWF0ZXJpYWwgaW4gd2F5cyBvdGhlcndpc2UgcmVzdHJpY3RlZCBieSBjb3B5cmlnaHQgYW5kIGNlcnRhaW4gb3RoZXIgcmlnaHRzLiBPdXIgbGljZW5zZXMgYXJlIGlycmV2b2NhYmxlLiBMaWNlbnNvcnMgc2hvdWxkIHJlYWQgYW5kIHVuZGVyc3RhbmQgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlIHRoZXkgY2hvb3NlIGJlZm9yZSBhcHBseWluZyBpdC4gTGljZW5zb3JzIHNob3VsZCBhbHNvIHNlY3VyZSBhbGwgcmlnaHRzIG5lY2Vzc2FyeSBiZWZvcmUgYXBwbHlpbmcgb3VyIGxpY2Vuc2VzIHNvIHRoYXQgdGhlIHB1YmxpYyBjYW4gcmV1c2UgdGhlIG1hdGVyaWFsIGFzIGV4cGVjdGVkLiBMaWNlbnNvcnMgc2hvdWxkIGNsZWFybHkgbWFyayBhbnkgbWF0ZXJpYWwgbm90IHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UuIFRoaXMgaW5jbHVkZXMgb3RoZXIgQ0MtbGljZW5zZWQgbWF0ZXJpYWwsIG9yIG1hdGVyaWFsIHVzZWQgdW5kZXIgYW4gZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gY29weXJpZ2h0LiBNb3JlIGNvbnNpZGVyYXRpb25zIGZvciBsaWNlbnNvcnMgOiB3aWtpLmNyZWF0aXZlY29tbW9ucy5vcmcvQ29uc2lkZXJhdGlvbnNfZm9yX2xpY2Vuc29yc1xuXG5Db25zaWRlcmF0aW9ucyBmb3IgdGhlIHB1YmxpYzogQnkgdXNpbmcgb25lIG9mIG91ciBwdWJsaWMgbGljZW5zZXMsIGEgbGljZW5zb3IgZ3JhbnRzIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIGxpY2Vuc2VkIG1hdGVyaWFsIHVuZGVyIHNwZWNpZmllZCB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgdGhlIGxpY2Vuc29yJ3MgcGVybWlzc2lvbiBpcyBub3QgbmVjZXNzYXJ5IGZvciBhbnkgcmVhc29u4oCTZm9yIGV4YW1wbGUsIGJlY2F1c2Ugb2YgYW55IGFwcGxpY2FibGUgZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gY29weXJpZ2h04oCTdGhlbiB0aGF0IHVzZSBpcyBub3QgcmVndWxhdGVkIGJ5IHRoZSBsaWNlbnNlLiBPdXIgbGljZW5zZXMgZ3JhbnQgb25seSBwZXJtaXNzaW9ucyB1bmRlciBjb3B5cmlnaHQgYW5kIGNlcnRhaW4gb3RoZXIgcmlnaHRzIHRoYXQgYSBsaWNlbnNvciBoYXMgYXV0aG9yaXR5IHRvIGdyYW50LiBVc2Ugb2YgdGhlIGxpY2Vuc2VkIG1hdGVyaWFsIG1heSBzdGlsbCBiZSByZXN0cmljdGVkIGZvciBvdGhlciByZWFzb25zLCBpbmNsdWRpbmcgYmVjYXVzZSBvdGhlcnMgaGF2ZSBjb3B5cmlnaHQgb3Igb3RoZXIgcmlnaHRzIGluIHRoZSBtYXRlcmlhbC4gQSBsaWNlbnNvciBtYXkgbWFrZSBzcGVjaWFsIHJlcXVlc3RzLCBzdWNoIGFzIGFza2luZyB0aGF0IGFsbCBjaGFuZ2VzIGJlIG1hcmtlZCBvciBkZXNjcmliZWQuIEFsdGhvdWdoIG5vdCByZXF1aXJlZCBieSBvdXIgbGljZW5zZXMsIHlvdSBhcmUgZW5jb3VyYWdlZCB0byByZXNwZWN0IHRob3NlIHJlcXVlc3RzIHdoZXJlIHJlYXNvbmFibGUuIE1vcmUgY29uc2lkZXJhdGlvbnMgZm9yIHRoZSBwdWJsaWMgOiB3aWtpLmNyZWF0aXZlY29tbW9ucy5vcmcvQ29uc2lkZXJhdGlvbnNfZm9yX2xpY2Vuc2Vlc1xuXG5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vRGVyaXZhdGl2ZXMgNC4wIEludGVybmF0aW9uYWwgUHVibGljIExpY2Vuc2VcblxuQnkgZXhlcmNpc2luZyB0aGUgTGljZW5zZWQgUmlnaHRzIChkZWZpbmVkIGJlbG93KSwgWW91IGFjY2VwdCBhbmQgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob0Rlcml2YXRpdmVzIDQuMCBJbnRlcm5hdGlvbmFsIFB1YmxpYyBMaWNlbnNlIChcIlB1YmxpYyBMaWNlbnNlXCIpLiBUbyB0aGUgZXh0ZW50IHRoaXMgUHVibGljIExpY2Vuc2UgbWF5IGJlIGludGVycHJldGVkIGFzIGEgY29udHJhY3QsIFlvdSBhcmUgZ3JhbnRlZCB0aGUgTGljZW5zZWQgUmlnaHRzIGluIGNvbnNpZGVyYXRpb24gb2YgWW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBhbmQgdGhlIExpY2Vuc29yIGdyYW50cyBZb3Ugc3VjaCByaWdodHMgaW4gY29uc2lkZXJhdGlvbiBvZiBiZW5lZml0cyB0aGUgTGljZW5zb3IgcmVjZWl2ZXMgZnJvbSBtYWtpbmcgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGF2YWlsYWJsZSB1bmRlciB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuU2VjdGlvbiAxIOKAkyBEZWZpbml0aW9ucy5cblxuICAgYS4gQWRhcHRlZCBNYXRlcmlhbCBtZWFucyBtYXRlcmlhbCBzdWJqZWN0IHRvIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgdGhhdCBpcyBkZXJpdmVkIGZyb20gb3IgYmFzZWQgdXBvbiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIGluIHdoaWNoIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBpcyB0cmFuc2xhdGVkLCBhbHRlcmVkLCBhcnJhbmdlZCwgdHJhbnNmb3JtZWQsIG9yIG90aGVyd2lzZSBtb2RpZmllZCBpbiBhIG1hbm5lciByZXF1aXJpbmcgcGVybWlzc2lvbiB1bmRlciB0aGUgQ29weXJpZ2h0IGFuZCBTaW1pbGFyIFJpZ2h0cyBoZWxkIGJ5IHRoZSBMaWNlbnNvci4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgUHVibGljIExpY2Vuc2UsIHdoZXJlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2UsIG9yIHNvdW5kIHJlY29yZGluZywgQWRhcHRlZCBNYXRlcmlhbCBpcyBhbHdheXMgcHJvZHVjZWQgd2hlcmUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIHN5bmNoZWQgaW4gdGltZWQgcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZS5cblxuICAgYi4gQ29weXJpZ2h0IGFuZCBTaW1pbGFyIFJpZ2h0cyBtZWFucyBjb3B5cmlnaHQgYW5kL29yIHNpbWlsYXIgcmlnaHRzIGNsb3NlbHkgcmVsYXRlZCB0byBjb3B5cmlnaHQgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHBlcmZvcm1hbmNlLCBicm9hZGNhc3QsIHNvdW5kIHJlY29yZGluZywgYW5kIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cywgd2l0aG91dCByZWdhcmQgdG8gaG93IHRoZSByaWdodHMgYXJlIGxhYmVsZWQgb3IgY2F0ZWdvcml6ZWQuIEZvciBwdXJwb3NlcyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLCB0aGUgcmlnaHRzIHNwZWNpZmllZCBpbiBTZWN0aW9uIDIoYikoMSktKDIpIGFyZSBub3QgQ29weXJpZ2h0IGFuZCBTaW1pbGFyIFJpZ2h0cy5cblxuICAgYy4gRWZmZWN0aXZlIFRlY2hub2xvZ2ljYWwgTWVhc3VyZXMgbWVhbnMgdGhvc2UgbWVhc3VyZXMgdGhhdCwgaW4gdGhlIGFic2VuY2Ugb2YgcHJvcGVyIGF1dGhvcml0eSwgbWF5IG5vdCBiZSBjaXJjdW12ZW50ZWQgdW5kZXIgbGF3cyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIEFydGljbGUgMTEgb2YgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBhZG9wdGVkIG9uIERlY2VtYmVyIDIwLCAxOTk2LCBhbmQvb3Igc2ltaWxhciBpbnRlcm5hdGlvbmFsIGFncmVlbWVudHMuXG5cbiAgIGQuIEV4Y2VwdGlvbnMgYW5kIExpbWl0YXRpb25zIG1lYW5zIGZhaXIgdXNlLCBmYWlyIGRlYWxpbmcsIGFuZC9vciBhbnkgb3RoZXIgZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gQ29weXJpZ2h0IGFuZCBTaW1pbGFyIFJpZ2h0cyB0aGF0IGFwcGxpZXMgdG8gWW91ciB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLlxuXG4gICBlLiBMaWNlbnNlZCBNYXRlcmlhbCBtZWFucyB0aGUgYXJ0aXN0aWMgb3IgbGl0ZXJhcnkgd29yaywgZGF0YWJhc2UsIG9yIG90aGVyIG1hdGVyaWFsIHRvIHdoaWNoIHRoZSBMaWNlbnNvciBhcHBsaWVkIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgIGYuIExpY2Vuc2VkIFJpZ2h0cyBtZWFucyB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgUHVibGljIExpY2Vuc2UsIHdoaWNoIGFyZSBsaW1pdGVkIHRvIGFsbCBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIHRoYXQgYXBwbHkgdG8gWW91ciB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGFuZCB0aGF0IHRoZSBMaWNlbnNvciBoYXMgYXV0aG9yaXR5IHRvIGxpY2Vuc2UuXG5cbiAgIGcuIExpY2Vuc29yIG1lYW5zIHRoZSBpbmRpdmlkdWFsKHMpIG9yIGVudGl0eShpZXMpIGdyYW50aW5nIHJpZ2h0cyB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICBoLiBTaGFyZSBtZWFucyB0byBwcm92aWRlIG1hdGVyaWFsIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgdGhhdCByZXF1aXJlcyBwZXJtaXNzaW9uIHVuZGVyIHRoZSBMaWNlbnNlZCBSaWdodHMsIHN1Y2ggYXMgcmVwcm9kdWN0aW9uLCBwdWJsaWMgZGlzcGxheSwgcHVibGljIHBlcmZvcm1hbmNlLCBkaXN0cmlidXRpb24sIGRpc3NlbWluYXRpb24sIGNvbW11bmljYXRpb24sIG9yIGltcG9ydGF0aW9uLCBhbmQgdG8gbWFrZSBtYXRlcmlhbCBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbmNsdWRpbmcgaW4gd2F5cyB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZSBtYXRlcmlhbCBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgdGltZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW0uXG5cbiAgIGkuIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cyBtZWFucyByaWdodHMgb3RoZXIgdGhhbiBjb3B5cmlnaHQgcmVzdWx0aW5nIGZyb20gRGlyZWN0aXZlIDk2LzkvRUMgb2YgdGhlIEV1cm9wZWFuIFBhcmxpYW1lbnQgYW5kIG9mIHRoZSBDb3VuY2lsIG9mIDExIE1hcmNoIDE5OTYgb24gdGhlIGxlZ2FsIHByb3RlY3Rpb24gb2YgZGF0YWJhc2VzLCBhcyBhbWVuZGVkIGFuZC9vciBzdWNjZWVkZWQsIGFzIHdlbGwgYXMgb3RoZXIgZXNzZW50aWFsbHkgZXF1aXZhbGVudCByaWdodHMgYW55d2hlcmUgaW4gdGhlIHdvcmxkLlxuXG4gICBqLiBZb3UgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgdGhlIExpY2Vuc2VkIFJpZ2h0cyB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlLiBZb3VyIGhhcyBhIGNvcnJlc3BvbmRpbmcgbWVhbmluZy5cblxuU2VjdGlvbiAyIOKAkyBTY29wZS5cblxuICAgYS4gTGljZW5zZSBncmFudC5cblxuICAgICAgMS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgdGhlIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1zdWJsaWNlbnNhYmxlLCBub24tZXhjbHVzaXZlLCBpcnJldm9jYWJsZSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMgaW4gdGhlIExpY2Vuc2VkIE1hdGVyaWFsIHRvOlxuXG4gICAgICAgICBBLiByZXByb2R1Y2UgYW5kIFNoYXJlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCwgaW4gd2hvbGUgb3IgaW4gcGFydDsgYW5kXG5cbiAgICAgICAgIEIuIHByb2R1Y2UgYW5kIHJlcHJvZHVjZSwgYnV0IG5vdCBTaGFyZSwgQWRhcHRlZCBNYXRlcmlhbC5cblxuICAgICAgMi4gRXhjZXB0aW9ucyBhbmQgTGltaXRhdGlvbnMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSBFeGNlcHRpb25zIGFuZCBMaW1pdGF0aW9ucyBhcHBseSB0byBZb3VyIHVzZSwgdGhpcyBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBhcHBseSwgYW5kIFlvdSBkbyBub3QgbmVlZCB0byBjb21wbHkgd2l0aCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuXG5cbiAgICAgIDMuIFRlcm0uIFRoZSB0ZXJtIG9mIHRoaXMgUHVibGljIExpY2Vuc2UgaXMgc3BlY2lmaWVkIGluIFNlY3Rpb24gNihhKS5cblxuICAgICAgNC4gTWVkaWEgYW5kIGZvcm1hdHM7IHRlY2huaWNhbCBtb2RpZmljYXRpb25zIGFsbG93ZWQuIFRoZSBMaWNlbnNvciBhdXRob3JpemVzIFlvdSB0byBleGVyY2lzZSB0aGUgTGljZW5zZWQgUmlnaHRzIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgY3JlYXRlZCwgYW5kIHRvIG1ha2UgdGVjaG5pY2FsIG1vZGlmaWNhdGlvbnMgbmVjZXNzYXJ5IHRvIGRvIHNvLiBUaGUgTGljZW5zb3Igd2FpdmVzIGFuZC9vciBhZ3JlZXMgbm90IHRvIGFzc2VydCBhbnkgcmlnaHQgb3IgYXV0aG9yaXR5IHRvIGZvcmJpZCBZb3UgZnJvbSBtYWtpbmcgdGVjaG5pY2FsIG1vZGlmaWNhdGlvbnMgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMsIGluY2x1ZGluZyB0ZWNobmljYWwgbW9kaWZpY2F0aW9ucyBuZWNlc3NhcnkgdG8gY2lyY3VtdmVudCBFZmZlY3RpdmUgVGVjaG5vbG9naWNhbCBNZWFzdXJlcy4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgUHVibGljIExpY2Vuc2UsIHNpbXBseSBtYWtpbmcgbW9kaWZpY2F0aW9ucyBhdXRob3JpemVkIGJ5IHRoaXMgU2VjdGlvbiAyKGEpKDQpIG5ldmVyIHByb2R1Y2VzIEFkYXB0ZWQgTWF0ZXJpYWwuXG5cbiAgICAgIDUuIERvd25zdHJlYW0gcmVjaXBpZW50cy5cblxuICAgICAgICAgQS4gT2ZmZXIgZnJvbSB0aGUgTGljZW5zb3Ig4oCTIExpY2Vuc2VkIE1hdGVyaWFsLiBFdmVyeSByZWNpcGllbnQgb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYW4gb2ZmZXIgZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgdGhlIExpY2Vuc2VkIFJpZ2h0cyB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgICAgQi4gTm8gZG93bnN0cmVhbSByZXN0cmljdGlvbnMuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgdGVybXMgb3IgY29uZGl0aW9ucyBvbiwgb3IgYXBwbHkgYW55IEVmZmVjdGl2ZSBUZWNobm9sb2dpY2FsIE1lYXN1cmVzIHRvLCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaWYgZG9pbmcgc28gcmVzdHJpY3RzIGV4ZXJjaXNlIG9mIHRoZSBMaWNlbnNlZCBSaWdodHMgYnkgYW55IHJlY2lwaWVudCBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuXG5cbiAgICAgIDYuIE5vIGVuZG9yc2VtZW50LiBOb3RoaW5nIGluIHRoaXMgUHVibGljIExpY2Vuc2UgY29uc3RpdHV0ZXMgb3IgbWF5IGJlIGNvbnN0cnVlZCBhcyBwZXJtaXNzaW9uIHRvIGFzc2VydCBvciBpbXBseSB0aGF0IFlvdSBhcmUsIG9yIHRoYXQgWW91ciB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzLCBjb25uZWN0ZWQgd2l0aCwgb3Igc3BvbnNvcmVkLCBlbmRvcnNlZCwgb3IgZ3JhbnRlZCBvZmZpY2lhbCBzdGF0dXMgYnksIHRoZSBMaWNlbnNvciBvciBvdGhlcnMgZGVzaWduYXRlZCB0byByZWNlaXZlIGF0dHJpYnV0aW9uIGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gMyhhKSgxKShBKShpKS5cblxuICAgYi4gT3RoZXIgcmlnaHRzLlxuXG4gICAgICAxLiBNb3JhbCByaWdodHMsIHN1Y2ggYXMgdGhlIHJpZ2h0IG9mIGludGVncml0eSwgYXJlIG5vdCBsaWNlbnNlZCB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlLCBub3IgYXJlIHB1YmxpY2l0eSwgcHJpdmFjeSwgYW5kL29yIG90aGVyIHNpbWlsYXIgcGVyc29uYWxpdHkgcmlnaHRzOyBob3dldmVyLCB0byB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGUgTGljZW5zb3Igd2FpdmVzIGFuZC9vciBhZ3JlZXMgbm90IHRvIGFzc2VydCBhbnkgc3VjaCByaWdodHMgaGVsZCBieSB0aGUgTGljZW5zb3IgdG8gdGhlIGxpbWl0ZWQgZXh0ZW50IG5lY2Vzc2FyeSB0byBhbGxvdyBZb3UgdG8gZXhlcmNpc2UgdGhlIExpY2Vuc2VkIFJpZ2h0cywgYnV0IG5vdCBvdGhlcndpc2UuXG5cbiAgICAgIDIuIFBhdGVudCBhbmQgdHJhZGVtYXJrIHJpZ2h0cyBhcmUgbm90IGxpY2Vuc2VkIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgICAgIDMuIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoZSBMaWNlbnNvciB3YWl2ZXMgYW55IHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIGZyb20gWW91IGZvciB0aGUgZXhlcmNpc2Ugb2YgdGhlIExpY2Vuc2VkIFJpZ2h0cywgd2hldGhlciBkaXJlY3RseSBvciB0aHJvdWdoIGEgY29sbGVjdGluZyBzb2NpZXR5IHVuZGVyIGFueSB2b2x1bnRhcnkgb3Igd2FpdmFibGUgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZS4gSW4gYWxsIG90aGVyIGNhc2VzIHRoZSBMaWNlbnNvciBleHByZXNzbHkgcmVzZXJ2ZXMgYW55IHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMuXG5cblNlY3Rpb24gMyDigJMgTGljZW5zZSBDb25kaXRpb25zLlxuXG5Zb3VyIGV4ZXJjaXNlIG9mIHRoZSBMaWNlbnNlZCBSaWdodHMgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMuXG5cbiAgIGEuIEF0dHJpYnV0aW9uLlxuXG4gICAgICAxLiBJZiBZb3UgU2hhcmUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLCBZb3UgbXVzdDpcblxuICAgICAgICAgQS4gcmV0YWluIHRoZSBmb2xsb3dpbmcgaWYgaXQgaXMgc3VwcGxpZWQgYnkgdGhlIExpY2Vuc29yIHdpdGggdGhlIExpY2Vuc2VkIE1hdGVyaWFsOlxuXG4gICAgICAgICAgICBpLiBpZGVudGlmaWNhdGlvbiBvZiB0aGUgY3JlYXRvcihzKSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIGFueSBvdGhlcnMgZGVzaWduYXRlZCB0byByZWNlaXZlIGF0dHJpYnV0aW9uLCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciAoaW5jbHVkaW5nIGJ5IHBzZXVkb255bSBpZiBkZXNpZ25hdGVkKTtcblxuICAgICAgICAgICAgaWkuIGEgY29weXJpZ2h0IG5vdGljZTtcblxuICAgICAgICAgICAgaWlpLiBhIG5vdGljZSB0aGF0IHJlZmVycyB0byB0aGlzIFB1YmxpYyBMaWNlbnNlO1xuXG4gICAgICAgICAgICBpdi4gYSBub3RpY2UgdGhhdCByZWZlcnMgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcztcblxuICAgICAgICAgICAgdi4gYSBVUkkgb3IgaHlwZXJsaW5rIHRvIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGU7XG5cbiAgICAgICAgIEIuIGluZGljYXRlIGlmIFlvdSBtb2RpZmllZCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIHJldGFpbiBhbiBpbmRpY2F0aW9uIG9mIGFueSBwcmV2aW91cyBtb2RpZmljYXRpb25zOyBhbmRcblxuICAgICAgICAgQy4gaW5kaWNhdGUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIGxpY2Vuc2VkIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UsIGFuZCBpbmNsdWRlIHRoZSB0ZXh0IG9mLCBvciB0aGUgVVJJIG9yIGh5cGVybGluayB0bywgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgMi4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UgdG8gU2hhcmUgQWRhcHRlZCBNYXRlcmlhbC5cblxuICAgICAgMy4gWW91IG1heSBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMyhhKSgxKSBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgYmFzZWQgb24gdGhlIG1lZGl1bSwgbWVhbnMsIGFuZCBjb250ZXh0IGluIHdoaWNoIFlvdSBTaGFyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuIEZvciBleGFtcGxlLCBpdCBtYXkgYmUgcmVhc29uYWJsZSB0byBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGJ5IHByb3ZpZGluZyBhIFVSSSBvciBoeXBlcmxpbmsgdG8gYSByZXNvdXJjZSB0aGF0IGluY2x1ZGVzIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi5cblxuICAgICAgNC4gSWYgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciwgWW91IG11c3QgcmVtb3ZlIGFueSBvZiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgU2VjdGlvbiAzKGEpKDEpKEEpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZS5cblxuU2VjdGlvbiA0IOKAkyBTdWkgR2VuZXJpcyBEYXRhYmFzZSBSaWdodHMuXG5cbldoZXJlIHRoZSBMaWNlbnNlZCBSaWdodHMgaW5jbHVkZSBTdWkgR2VuZXJpcyBEYXRhYmFzZSBSaWdodHMgdGhhdCBhcHBseSB0byBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWw6XG5cbiAgIGEuIGZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBTZWN0aW9uIDIoYSkoMSkgZ3JhbnRzIFlvdSB0aGUgcmlnaHQgdG8gZXh0cmFjdCwgcmV1c2UsIHJlcHJvZHVjZSwgYW5kIFNoYXJlIGFsbCBvciBhIHN1YnN0YW50aWFsIHBvcnRpb24gb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBkYXRhYmFzZSwgcHJvdmlkZWQgWW91IGRvIG5vdCBTaGFyZSBBZGFwdGVkIE1hdGVyaWFsO1xuXG4gICBiLiBpZiBZb3UgaW5jbHVkZSBhbGwgb3IgYSBzdWJzdGFudGlhbCBwb3J0aW9uIG9mIHRoZSBkYXRhYmFzZSBjb250ZW50cyBpbiBhIGRhdGFiYXNlIGluIHdoaWNoIFlvdSBoYXZlIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cywgdGhlbiB0aGUgZGF0YWJhc2UgaW4gd2hpY2ggWW91IGhhdmUgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzIChidXQgbm90IGl0cyBpbmRpdmlkdWFsIGNvbnRlbnRzKSBpcyBBZGFwdGVkIE1hdGVyaWFsOyBhbmRcblxuICAgYy4gWW91IG11c3QgY29tcGx5IHdpdGggdGhlIGNvbmRpdGlvbnMgaW4gU2VjdGlvbiAzKGEpIGlmIFlvdSBTaGFyZSBhbGwgb3IgYSBzdWJzdGFudGlhbCBwb3J0aW9uIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YWJhc2UuXG5cbiAgIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIFNlY3Rpb24gNCBzdXBwbGVtZW50cyBhbmQgZG9lcyBub3QgcmVwbGFjZSBZb3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2Ugd2hlcmUgdGhlIExpY2Vuc2VkIFJpZ2h0cyBpbmNsdWRlIG90aGVyIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMuXG5cblNlY3Rpb24gNSDigJMgRGlzY2xhaW1lciBvZiBXYXJyYW50aWVzIGFuZCBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS5cblxuICAgYS4gVW5sZXNzIG90aGVyd2lzZSBzZXBhcmF0ZWx5IHVuZGVydGFrZW4gYnkgdGhlIExpY2Vuc29yLCB0byB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBhcy1pcyBhbmQgYXMtYXZhaWxhYmxlLCBhbmQgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIG9yIHdhcnJhbnRpZXMgb2YgYW55IGtpbmQgY29uY2VybmluZyB0aGUgTGljZW5zZWQgTWF0ZXJpYWwsIHdoZXRoZXIgZXhwcmVzcywgaW1wbGllZCwgc3RhdHV0b3J5LCBvciBvdGhlci4gVGhpcyBpbmNsdWRlcywgd2l0aG91dCBsaW1pdGF0aW9uLCB3YXJyYW50aWVzIG9mIHRpdGxlLCBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBub24taW5mcmluZ2VtZW50LCBhYnNlbmNlIG9mIGxhdGVudCBvciBvdGhlciBkZWZlY3RzLCBhY2N1cmFjeSwgb3IgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgZXJyb3JzLCB3aGV0aGVyIG9yIG5vdCBrbm93biBvciBkaXNjb3ZlcmFibGUuIFdoZXJlIGRpc2NsYWltZXJzIG9mIHdhcnJhbnRpZXMgYXJlIG5vdCBhbGxvd2VkIGluIGZ1bGwgb3IgaW4gcGFydCwgdGhpcyBkaXNjbGFpbWVyIG1heSBub3QgYXBwbHkgdG8gWW91LlxuXG4gICBiLiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlLCBpbiBubyBldmVudCB3aWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gWW91IG9uIGFueSBsZWdhbCB0aGVvcnkgKGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBuZWdsaWdlbmNlKSBvciBvdGhlcndpc2UgZm9yIGFueSBkaXJlY3QsIHNwZWNpYWwsIGluZGlyZWN0LCBpbmNpZGVudGFsLCBjb25zZXF1ZW50aWFsLCBwdW5pdGl2ZSwgZXhlbXBsYXJ5LCBvciBvdGhlciBsb3NzZXMsIGNvc3RzLCBleHBlbnNlcywgb3IgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlIG9yIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwsIGV2ZW4gaWYgdGhlIExpY2Vuc29yIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggbG9zc2VzLCBjb3N0cywgZXhwZW5zZXMsIG9yIGRhbWFnZXMuIFdoZXJlIGEgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgaXMgbm90IGFsbG93ZWQgaW4gZnVsbCBvciBpbiBwYXJ0LCB0aGlzIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuXG5cbiAgIGMuIFRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkIGFib3ZlIHNoYWxsIGJlIGludGVycHJldGVkIGluIGEgbWFubmVyIHRoYXQsIHRvIHRoZSBleHRlbnQgcG9zc2libGUsIG1vc3QgY2xvc2VseSBhcHByb3hpbWF0ZXMgYW4gYWJzb2x1dGUgZGlzY2xhaW1lciBhbmQgd2FpdmVyIG9mIGFsbCBsaWFiaWxpdHkuXG5cblNlY3Rpb24gNiDigJMgVGVybSBhbmQgVGVybWluYXRpb24uXG5cbiAgIGEuIFRoaXMgUHVibGljIExpY2Vuc2UgYXBwbGllcyBmb3IgdGhlIHRlcm0gb2YgdGhlIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgbGljZW5zZWQgaGVyZS4gSG93ZXZlciwgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhpcyBQdWJsaWMgTGljZW5zZSwgdGhlbiBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5LlxuXG4gICBiLiBXaGVyZSBZb3VyIHJpZ2h0IHRvIHVzZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaGFzIHRlcm1pbmF0ZWQgdW5kZXIgU2VjdGlvbiA2KGEpLCBpdCByZWluc3RhdGVzOlxuXG4gICAgICAxLiBhdXRvbWF0aWNhbGx5IGFzIG9mIHRoZSBkYXRlIHRoZSB2aW9sYXRpb24gaXMgY3VyZWQsIHByb3ZpZGVkIGl0IGlzIGN1cmVkIHdpdGhpbiAzMCBkYXlzIG9mIFlvdXIgZGlzY292ZXJ5IG9mIHRoZSB2aW9sYXRpb247IG9yXG5cbiAgICAgIDIuIHVwb24gZXhwcmVzcyByZWluc3RhdGVtZW50IGJ5IHRoZSBMaWNlbnNvci5cblxuICAgYy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgU2VjdGlvbiA2KGIpIGRvZXMgbm90IGFmZmVjdCBhbnkgcmlnaHQgdGhlIExpY2Vuc29yIG1heSBoYXZlIHRvIHNlZWsgcmVtZWRpZXMgZm9yIFlvdXIgdmlvbGF0aW9ucyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICBkLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhlIExpY2Vuc29yIG1heSBhbHNvIG9mZmVyIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB1bmRlciBzZXBhcmF0ZSB0ZXJtcyBvciBjb25kaXRpb25zIG9yIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBhdCBhbnkgdGltZTsgaG93ZXZlciwgZG9pbmcgc28gd2lsbCBub3QgdGVybWluYXRlIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgIGUuIFNlY3Rpb25zIDEsIDUsIDYsIDcsIGFuZCA4IHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuU2VjdGlvbiA3IOKAkyBPdGhlciBUZXJtcyBhbmQgQ29uZGl0aW9ucy5cblxuICAgYS4gVGhlIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgdGVybXMgb3IgY29uZGl0aW9ucyBjb21tdW5pY2F0ZWQgYnkgWW91IHVubGVzcyBleHByZXNzbHkgYWdyZWVkLlxuXG4gICBiLiBBbnkgYXJyYW5nZW1lbnRzLCB1bmRlcnN0YW5kaW5ncywgb3IgYWdyZWVtZW50cyByZWdhcmRpbmcgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIG5vdCBzdGF0ZWQgaGVyZWluIGFyZSBzZXBhcmF0ZSBmcm9tIGFuZCBpbmRlcGVuZGVudCBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuU2VjdGlvbiA4IOKAkyBJbnRlcnByZXRhdGlvbi5cblxuICAgYS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgUHVibGljIExpY2Vuc2UgZG9lcyBub3QsIGFuZCBzaGFsbCBub3QgYmUgaW50ZXJwcmV0ZWQgdG8sIHJlZHVjZSwgbGltaXQsIHJlc3RyaWN0LCBvciBpbXBvc2UgY29uZGl0aW9ucyBvbiBhbnkgdXNlIG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB0aGF0IGNvdWxkIGxhd2Z1bGx5IGJlIG1hZGUgd2l0aG91dCBwZXJtaXNzaW9uIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgIGIuIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIGlmIGFueSBwcm92aXNpb24gb2YgdGhpcyBQdWJsaWMgTGljZW5zZSBpcyBkZWVtZWQgdW5lbmZvcmNlYWJsZSwgaXQgc2hhbGwgYmUgYXV0b21hdGljYWxseSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIElmIHRoZSBwcm92aXNpb24gY2Fubm90IGJlIHJlZm9ybWVkLCBpdCBzaGFsbCBiZSBzZXZlcmVkIGZyb20gdGhpcyBQdWJsaWMgTGljZW5zZSB3aXRob3V0IGFmZmVjdGluZyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmluZyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgYy4gTm8gdGVybSBvciBjb25kaXRpb24gb2YgdGhpcyBQdWJsaWMgTGljZW5zZSB3aWxsIGJlIHdhaXZlZCBhbmQgbm8gZmFpbHVyZSB0byBjb21wbHkgY29uc2VudGVkIHRvIHVubGVzcyBleHByZXNzbHkgYWdyZWVkIHRvIGJ5IHRoZSBMaWNlbnNvci5cblxuICAgZC4gTm90aGluZyBpbiB0aGlzIFB1YmxpYyBMaWNlbnNlIGNvbnN0aXR1dGVzIG9yIG1heSBiZSBpbnRlcnByZXRlZCBhcyBhIGxpbWl0YXRpb24gdXBvbiwgb3Igd2FpdmVyIG9mLCBhbnkgcHJpdmlsZWdlcyBhbmQgaW1tdW5pdGllcyB0aGF0IGFwcGx5IHRvIHRoZSBMaWNlbnNvciBvciBZb3UsIGluY2x1ZGluZyBmcm9tIHRoZSBsZWdhbCBwcm9jZXNzZXMgb2YgYW55IGp1cmlzZGljdGlvbiBvciBhdXRob3JpdHkuXG5cbkNyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gaXRzIHB1YmxpYyBsaWNlbnNlcy4gTm90d2l0aHN0YW5kaW5nLCBDcmVhdGl2ZSBDb21tb25zIG1heSBlbGVjdCB0byBhcHBseSBvbmUgb2YgaXRzIHB1YmxpYyBsaWNlbnNlcyB0byBtYXRlcmlhbCBpdCBwdWJsaXNoZXMgYW5kIGluIHRob3NlIGluc3RhbmNlcyB3aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFwiTGljZW5zb3IuXCIgVGhlIHRleHQgb2YgdGhlIENyZWF0aXZlIENvbW1vbnMgcHVibGljIGxpY2Vuc2VzIGlzIGRlZGljYXRlZCB0byB0aGUgcHVibGljIGRvbWFpbiB1bmRlciB0aGUgQ0MwIFB1YmxpYyBEb21haW4gRGVkaWNhdGlvbi4gRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdGhhdCBtYXRlcmlhbCBpcyBzaGFyZWQgdW5kZXIgYSBDcmVhdGl2ZSBDb21tb25zIHB1YmxpYyBsaWNlbnNlIG9yIGFzIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgdGhlIENyZWF0aXZlIENvbW1vbnMgcG9saWNpZXMgcHVibGlzaGVkIGF0IGNyZWF0aXZlY29tbW9ucy5vcmcvcG9saWNpZXMsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2Ugb2YgdGhlIHRyYWRlbWFyayBcIkNyZWF0aXZlIENvbW1vbnNcIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IGl0cyBwcmlvciB3cml0dGVuIGNvbnNlbnQgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGluIGNvbm5lY3Rpb24gd2l0aCBhbnkgdW5hdXRob3JpemVkIG1vZGlmaWNhdGlvbnMgdG8gYW55IG9mIGl0cyBwdWJsaWMgbGljZW5zZXMgb3IgYW55IG90aGVyIGFycmFuZ2VtZW50cywgdW5kZXJzdGFuZGluZ3MsIG9yIGFncmVlbWVudHMgY29uY2VybmluZyB1c2Ugb2YgbGljZW5zZWQgbWF0ZXJpYWwuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHBhcmFncmFwaCBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhlIHB1YmxpYyBsaWNlbnNlcy5cblxuQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGNyZWF0aXZlY29tbW9ucy5vcmcuIl0sImxpY2Vuc2VJZHMiOlsiQ0MtQlktTkQtNC4wIl0sImtleXdvcmRzIjpbImxpY2Vuc2UgaCBzaGFyZSIsImggc2hhcmUgbWVhbnMiLCJieSB0aGVtIGkiLCJ0aGVtIGkgc3VpIiwiaSBzdWkgZ2VuZXJpcyIsInRoZSB3b3JsZCBqIiwid29ybGQgaiB5b3UiLCJqIHlvdSBtZWFucyIsImxpY2Vuc2UgMiBmb3IiLCIyIGZvciB0aGUiLCJyZXF1aXJlZCBpbmZvcm1hdGlvbiA0IiwiaW5mb3JtYXRpb24gNCBpZiIsIjQgaWYgcmVxdWVzdGVkIiwidGhlIGRhdGFiYXNlIHByb3ZpZGVkIiwiZGF0YWJhc2UgcHJvdmlkZWQgeW91IiwicHVibGljIGxpY2Vuc2UgaCBzaGFyZSIsImxpY2Vuc2UgaCBzaGFyZSBtZWFucyIsImggc2hhcmUgbWVhbnMgdG8iLCJjaG9zZW4gYnkgdGhlbSBpIiwiYnkgdGhlbSBpIHN1aSIsInRoZW0gaSBzdWkgZ2VuZXJpcyIsImkgc3VpIGdlbmVyaXMgZGF0YWJhc2UiLCJpbiB0aGUgd29ybGQgaiIsInRoZSB3b3JsZCBqIHlvdSIsIndvcmxkIGogeW91IG1lYW5zIiwiaiB5b3UgbWVhbnMgdGhlIiwicHVibGljIGxpY2Vuc2UgMiBmb3IiLCJsaWNlbnNlIDIgZm9yIHRoZSIsIjIgZm9yIHRoZSBhdm9pZGFuY2UiLCIzIHlvdSBtYXkgc2F0aXNmeSIsInRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbiA0IiwicmVxdWlyZWQgaW5mb3JtYXRpb24gNCBpZiIsImluZm9ybWF0aW9uIDQgaWYgcmVxdWVzdGVkIiwiNCBpZiByZXF1ZXN0ZWQgYnkiLCJvZiB0aGUgZGF0YWJhc2UgcHJvdmlkZWQiLCJ0aGUgZGF0YWJhc2UgcHJvdmlkZWQgeW91IiwiZGF0YWJhc2UgcHJvdmlkZWQgeW91IGRvIiwibGljZW5zZWVzIGNyZWF0aXZlIGNvbW1vbnMgYXR0cmlidXRpb24gbm9kZXJpdmF0aXZlcyIsInRoaXMgY3JlYXRpdmUgY29tbW9ucyBhdHRyaWJ1dGlvbiBub2Rlcml2YXRpdmVzIiwidGhpcyBwdWJsaWMgbGljZW5zZSBoIHNoYXJlIiwicHVibGljIGxpY2Vuc2UgaCBzaGFyZSBtZWFucyIsImxpY2Vuc2UgaCBzaGFyZSBtZWFucyB0byIsImggc2hhcmUgbWVhbnMgdG8gcHJvdmlkZSIsImluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbSBpIiwiY2hvc2VuIGJ5IHRoZW0gaSBzdWkiLCJieSB0aGVtIGkgc3VpIGdlbmVyaXMiLCJ0aGVtIGkgc3VpIGdlbmVyaXMgZGF0YWJhc2UiLCJpIHN1aSBnZW5lcmlzIGRhdGFiYXNlIHJpZ2h0cyIsImFueXdoZXJlIGluIHRoZSB3b3JsZCBqIiwiaW4gdGhlIHdvcmxkIGogeW91IiwidGhlIHdvcmxkIGogeW91IG1lYW5zIiwid29ybGQgaiB5b3UgbWVhbnMgdGhlIiwiaiB5b3UgbWVhbnMgdGhlIGluZGl2aWR1YWwiLCJwYXJ0IGFuZCBiIHByb2R1Y2UgYW5kIiwibm90IHNoYXJlIGFkYXB0ZWQgbWF0ZXJpYWwgMiIsInRoaXMgcHVibGljIGxpY2Vuc2UgMiBmb3IiLCJwdWJsaWMgbGljZW5zZSAyIGZvciB0aGUiLCJsaWNlbnNlIDIgZm9yIHRoZSBhdm9pZGFuY2UiLCIyIGZvciB0aGUgYXZvaWRhbmNlIG9mIiwidG8gc2hhcmUgYWRhcHRlZCBtYXRlcmlhbCAzIiwibWF0ZXJpYWwgMyB5b3UgbWF5IHNhdGlzZnkiLCIzIHlvdSBtYXkgc2F0aXNmeSB0aGUiLCJpbmNsdWRlcyB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gNCIsInRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbiA0IGlmIiwicmVxdWlyZWQgaW5mb3JtYXRpb24gNCBpZiByZXF1ZXN0ZWQiLCJpbmZvcm1hdGlvbiA0IGlmIHJlcXVlc3RlZCBieSIsIjQgaWYgcmVxdWVzdGVkIGJ5IHRoZSIsImNvbnRlbnRzIG9mIHRoZSBkYXRhYmFzZSBwcm92aWRlZCIsIm9mIHRoZSBkYXRhYmFzZSBwcm92aWRlZCB5b3UiLCJ0aGUgZGF0YWJhc2UgcHJvdmlkZWQgeW91IGRvIiwiZGF0YWJhc2UgcHJvdmlkZWQgeW91IGRvIG5vdCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMS4wIENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiBcIkFTLUlTXCIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLlxuXG5MaWNlbnNlXG5cblRIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFIChcIkNDUExcIiBPUiBcIkxJQ0VOU0VcIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC5cblxuQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy5cblxuICAgMS4gRGVmaW5pdGlvbnNcblxuICAgICAgYS4gXCJDb2xsZWN0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFwiRGVyaXZhdGl2ZSBXb3JrXCIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBcIkxpY2Vuc29yXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGQuIFwiT3JpZ2luYWwgQXV0aG9yXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLlxuXG4gICAgICBlLiBcIldvcmtcIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBmLiBcIllvdVwiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uXG5cbiAgIDIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy5cblxuICAgMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OlxuXG4gICAgICBhLiB0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7XG5cbiAgICAgIGIuIHRvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7XG5cbiAgICAgIGMuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7XG5cbiAgICAgIGQuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzO1xuXG4gICBUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC5cblxuICAgNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAgICBhLiBZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuXG5cbiAgICAgIGIuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIElmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sIFwiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvcixcIiBvciBcIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3JcIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuXG5cbiAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lclxuXG4gICAgICBhLiBCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcidzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6XG5cbiAgICAgICAgIGkuIExpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50cztcblxuICAgICAgICAgaWkuIFRoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS5cblxuICAgICAgYi4gRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhJUyBMSUNFTlNFIE9SIE9USEVSV0lTRSBBR1JFRUQgSU4gV1JJVElORyBPUiBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgVEhFIFdPUksgSVMgTElDRU5TRUQgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuXG5cbiAgIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00gTElBQklMSVRZIFRPIEEgVEhJUkQgUEFSVFkgUkVTVUxUSU5HIEZST00gQlJFQUNIIE9GIFRIRSBXQVJSQU5USUVTIElOIFNFQ1RJT04gNSwgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDcuIFRlcm1pbmF0aW9uXG5cbiAgICAgIGEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuXG5cbiAgIDguIE1pc2NlbGxhbmVvdXNcblxuICAgICAgYS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuXG5cbiAgICAgIGQuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuXG5cbiAgICAgIGUuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LlxuXG5DcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci5cblxuRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgXCJDcmVhdGl2ZSBDb21tb25zXCIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuXG5cbkNyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uIl0sImxpY2Vuc2VJZHMiOlsiQ0MtQlktU0EtMS4wIl0sImtleXdvcmRzIjpbImF0dHJpYnV0aW9uIHNoYXJlYWxpa2UgMSIsImNvbW1vbnMgYXR0cmlidXRpb24gc2hhcmVhbGlrZSAxIiwiYXR0cmlidXRpb24gc2hhcmVhbGlrZSAxIDAiLCJjcmVhdGl2ZSBjb21tb25zIGF0dHJpYnV0aW9uIHNoYXJlYWxpa2UgMSIsImNvbW1vbnMgYXR0cmlidXRpb24gc2hhcmVhbGlrZSAxIDAiLCJhdHRyaWJ1dGlvbiBzaGFyZWFsaWtlIDEgMCBjcmVhdGl2ZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi4wIENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiBcIkFTLUlTXCIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLlxuXG5MaWNlbnNlXG5cblRIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFIChcIkNDUExcIiBPUiBcIkxJQ0VOU0VcIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELlxuXG5CWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXG4gICAxLiBEZWZpbml0aW9uc1xuXG4gICAgICBhLiBcIkNvbGxlY3RpdmUgV29ya1wiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gXCJEZXJpdmF0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKFwic3luY2hpbmdcIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIFwiTGljZW5zb3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgZC4gXCJPcmlnaW5hbCBBdXRob3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuXG5cbiAgICAgIGUuIFwiV29ya1wiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGYuIFwiWW91XCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi5cblxuICAgICAgZy4gXCJMaWNlbnNlIEVsZW1lbnRzXCIgbWVhbnMgdGhlIGZvbGxvd2luZyBoaWdoLWxldmVsIGxpY2Vuc2UgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZiB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBTaGFyZUFsaWtlLlxuXG4gICAyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuXG5cbiAgIDMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzpcblxuICAgICAgYS4gdG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzO1xuXG4gICAgICBiLiB0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzO1xuXG4gICAgICBjLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzO1xuXG4gICAgICBkLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3Jrcy5cblxuICAgICAgZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSB3b3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjpcblxuICAgICAgICAgaS4gUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLlxuXG4gICAgICAgICBpaS4gTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBzb2NpZXR5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoXCJjb3ZlciB2ZXJzaW9uXCIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLlxuXG4gICAgICBmLiBXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuXG5cbiAgIFRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLlxuXG4gICA0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG5cbiAgICAgIGEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC5cblxuICAgICAgYi4gWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSwgb3IgYSBDcmVhdGl2ZSBDb21tb25zIGlDb21tb25zIGxpY2Vuc2UgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDIuMCBKYXBhbikuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIG9yIG90aGVyIGxpY2Vuc2Ugc3BlY2lmaWVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgZWFjaCBEZXJpdmF0aXZlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciwgYW5kIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgRGVyaXZhdGl2ZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBEZXJpdmF0aXZlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCBcIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsXCIgb3IgXCJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yXCIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LlxuXG4gICA1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXJcblxuICAgVU5MRVNTIE9USEVSV0lTRSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNQVRFUklBTFMsIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICA2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG4gICA3LiBUZXJtaW5hdGlvblxuXG4gICAgICBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLlxuXG4gICA4LiBNaXNjZWxsYW5lb3VzXG5cbiAgICAgIGEuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICAgICBkLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LlxuXG4gICAgICBlLiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS5cblxuQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuXG5cbkV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrIFwiQ3JlYXRpdmUgQ29tbW9uc1wiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnMnIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLlxuXG5DcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLiJdLCJsaWNlbnNlSWRzIjpbIkNDLUJZLVNBLTIuMCJdLCJrZXl3b3JkcyI6WyJjb21tb25zIGF0dHJpYnV0aW9uIHNoYXJlYWxpa2UgMiAwIiwiYXR0cmlidXRpb24gc2hhcmVhbGlrZSAyIDAgY3JlYXRpdmUiLCJnIGF0dHJpYnV0aW9uIHNoYXJlYWxpa2UgMiAwIiwiYXR0cmlidXRpb24gc2hhcmVhbGlrZSAyIDAgamFwYW4iXX0seyJsaWNlbnNlVGV4dHMiOlsiQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDIuNSBDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gXCJBUy1JU1wiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS5cblxuTGljZW5zZVxuXG5USEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoXCJDQ1BMXCIgT1IgXCJMSUNFTlNFXCIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC5cblxuQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy5cblxuICAgMS4gRGVmaW5pdGlvbnNcblxuICAgICAgYS4gXCJDb2xsZWN0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFwiRGVyaXZhdGl2ZSBXb3JrXCIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlIChcInN5bmNoaW5nXCIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBcIkxpY2Vuc29yXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGQuIFwiT3JpZ2luYWwgQXV0aG9yXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLlxuXG4gICAgICBlLiBcIldvcmtcIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBmLiBcIllvdVwiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uXG5cbiAgICAgIGcuIFwiTGljZW5zZSBFbGVtZW50c1wiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgU2hhcmVBbGlrZS5cblxuICAgMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLlxuXG4gICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6XG5cbiAgICAgIGEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgICAgYi4gdG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrcztcblxuICAgICAgYy4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrcztcblxuICAgICAgZC4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3MuXG5cbiAgICAgIGUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246XG5cbiAgICAgICAgIGkuIFBlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay5cblxuICAgICAgICAgaWkuIE1lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgc29jaWV0eSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKFwiY292ZXIgdmVyc2lvblwiKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS5cblxuICAgICAgZi4gV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLlxuXG4gICBUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC5cblxuICAgNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAgICBhLiBZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChjKSwgYXMgcmVxdWVzdGVkLlxuXG4gICAgICBiLiBZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlLCBvciBhIENyZWF0aXZlIENvbW1vbnMgaUNvbW1vbnMgbGljZW5zZSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlIChlLmcuIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi41IEphcGFuKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugb3Igb3RoZXIgbGljZW5zZSBzcGVjaWZpZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yJ3MgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCBcIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsXCIgb3IgXCJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yXCIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LlxuXG4gICA1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXJcblxuICAgVU5MRVNTIE9USEVSV0lTRSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNQVRFUklBTFMsIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICA2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG4gICA3LiBUZXJtaW5hdGlvblxuXG4gICAgICBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLlxuXG4gICA4LiBNaXNjZWxsYW5lb3VzXG5cbiAgICAgIGEuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICAgICBkLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LlxuXG4gICAgICBlLiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS5cblxuQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuXG5cbkV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrIFwiQ3JlYXRpdmUgQ29tbW9uc1wiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnMnIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLlxuXG5DcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLiJdLCJsaWNlbnNlSWRzIjpbIkNDLUJZLVNBLTIuNSJdLCJrZXl3b3JkcyI6WyJjb21tb25zIGF0dHJpYnV0aW9uIHNoYXJlYWxpa2UgMiA1IiwiYXR0cmlidXRpb24gc2hhcmVhbGlrZSAyIDUgY3JlYXRpdmUiLCJnIGF0dHJpYnV0aW9uIHNoYXJlYWxpa2UgMiA1IiwiYXR0cmlidXRpb24gc2hhcmVhbGlrZSAyIDUgamFwYW4iXX0seyJsaWNlbnNlVGV4dHMiOlsiQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDMuMCBVbnBvcnRlZCBDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gXCJBUy1JU1wiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS5cblxuTGljZW5zZVxuXG5USEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoXCJDQ1BMXCIgT1IgXCJMSUNFTlNFXCIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC5cblxuQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRPIFRIRSBFWFRFTlQgVEhJUyBMSUNFTlNFIE1BWSBCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy5cblxuICAgMS4gRGVmaW5pdGlvbnNcblxuICAgICAgYS4gXCJBZGFwdGF0aW9uXCIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKFwic3luY2hpbmdcIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYi4gXCJDb2xsZWN0aW9uXCIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIFwiQ3JlYXRpdmUgQ29tbW9ucyBDb21wYXRpYmxlIExpY2Vuc2VcIiBtZWFucyBhIGxpY2Vuc2UgdGhhdCBpcyBsaXN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvY29tcGF0aWJsZWxpY2Vuc2VzIHRoYXQgaGFzIGJlZW4gYXBwcm92ZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucyBhcyBiZWluZyBlc3NlbnRpYWxseSBlcXVpdmFsZW50IHRvIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nLCBhdCBhIG1pbmltdW0sIGJlY2F1c2UgdGhhdCBsaWNlbnNlOiAoaSkgY29udGFpbnMgdGVybXMgdGhhdCBoYXZlIHRoZSBzYW1lIHB1cnBvc2UsIG1lYW5pbmcgYW5kIGVmZmVjdCBhcyB0aGUgTGljZW5zZSBFbGVtZW50cyBvZiB0aGlzIExpY2Vuc2U7IGFuZCwgKGlpKSBleHBsaWNpdGx5IHBlcm1pdHMgdGhlIHJlbGljZW5zaW5nIG9mIGFkYXB0YXRpb25zIG9mIHdvcmtzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoYXQgbGljZW5zZSB1bmRlciB0aGlzIExpY2Vuc2Ugb3IgYSBDcmVhdGl2ZSBDb21tb25zIGp1cmlzZGljdGlvbiBsaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGQuIFwiRGlzdHJpYnV0ZVwiIG1lYW5zIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdGhlIG9yaWdpbmFsIGFuZCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgQWRhcHRhdGlvbiwgYXMgYXBwcm9wcmlhdGUsIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuXG5cbiAgICAgIGUuIFwiTGljZW5zZSBFbGVtZW50c1wiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgU2hhcmVBbGlrZS5cblxuICAgICAgZi4gXCJMaWNlbnNvclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgZy4gXCJPcmlnaW5hbCBBdXRob3JcIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiBubyBpbmRpdmlkdWFsIG9yIGVudGl0eSBjYW4gYmUgaWRlbnRpZmllZCwgdGhlIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsIG11c2ljaWFucywgZGFuY2VycywgYW5kIG90aGVyIHBlcnNvbnMgd2hvIGFjdCwgc2luZywgZGVsaXZlciwgZGVjbGFpbSwgcGxheSBpbiwgaW50ZXJwcmV0IG9yIG90aGVyd2lzZSBwZXJmb3JtIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuXG5cbiAgICAgIGguIFwiV29ya1wiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay5cblxuICAgICAgaS4gXCJZb3VcIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLlxuXG4gICAgICBqLiBcIlB1YmxpY2x5IFBlcmZvcm1cIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy5cblxuICAgICAgay4gXCJSZXByb2R1Y2VcIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mIGZpeGF0aW9uIGFuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uXG5cbiAgIDIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSBsaW1pdGF0aW9ucyBvciBleGNlcHRpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGZvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLlxuXG4gICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6XG5cbiAgICAgIGEuIHRvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aW9ucywgYW5kIHRvIFJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3Rpb25zO1xuXG4gICAgICBiLiB0byBjcmVhdGUgYW5kIFJlcHJvZHVjZSBBZGFwdGF0aW9ucyBwcm92aWRlZCB0aGF0IGFueSBzdWNoIEFkYXB0YXRpb24sIGluY2x1ZGluZyBhbnkgdHJhbnNsYXRpb24gaW4gYW55IG1lZGl1bSwgdGFrZXMgcmVhc29uYWJsZSBzdGVwcyB0byBjbGVhcmx5IGxhYmVsLCBkZW1hcmNhdGUgb3Igb3RoZXJ3aXNlIGlkZW50aWZ5IHRoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIG9yaWdpbmFsIFdvcmsuIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGNvdWxkIGJlIG1hcmtlZCBcIlRoZSBvcmlnaW5hbCB3b3JrIHdhcyB0cmFuc2xhdGVkIGZyb20gRW5nbGlzaCB0byBTcGFuaXNoLFwiIG9yIGEgbW9kaWZpY2F0aW9uIGNvdWxkIGluZGljYXRlIFwiVGhlIG9yaWdpbmFsIHdvcmsgaGFzIGJlZW4gbW9kaWZpZWQuXCI7XG5cbiAgICAgIGMuIHRvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9uczsgYW5kLFxuXG4gICAgICBkLiB0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIEFkYXB0YXRpb25zLlxuXG4gICAgICBlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDpcblxuICAgICAgICAgaS4gTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTtcblxuICAgICAgICAgaWkuIFdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCxcblxuICAgICAgICAgaWlpLiBWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3Igd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgIFRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC5cblxuICAgNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAgICBhLiBZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYyksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhbiBBZGFwdGF0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIEFkYXB0YXRpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYyksIGFzIHJlcXVlc3RlZC5cblxuICAgICAgYi4gWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZjogKGkpIHRoaXMgTGljZW5zZTsgKGlpKSBhIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2U7IChpaWkpIGEgQ3JlYXRpdmUgQ29tbW9ucyBqdXJpc2RpY3Rpb24gbGljZW5zZSAoZWl0aGVyIHRoaXMgb3IgYSBsYXRlciBsaWNlbnNlIHZlcnNpb24pIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UgKGUuZy4sIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMy4wIFVTKSk7IChpdikgYSBDcmVhdGl2ZSBDb21tb25zIENvbXBhdGlibGUgTGljZW5zZS4gSWYgeW91IGxpY2Vuc2UgdGhlIEFkYXB0YXRpb24gdW5kZXIgb25lIG9mIHRoZSBsaWNlbnNlcyBtZW50aW9uZWQgaW4gKGl2KSwgeW91IG11c3QgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoYXQgbGljZW5zZS4gSWYgeW91IGxpY2Vuc2UgdGhlIEFkYXB0YXRpb24gdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBvZiB0aGUgbGljZW5zZXMgbWVudGlvbmVkIGluIChpKSwgKGlpKSBvciAoaWlpKSAodGhlIFwiQXBwbGljYWJsZSBMaWNlbnNlXCIpLCB5b3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZSBnZW5lcmFsbHkgYW5kIHRoZSBmb2xsb3dpbmcgcHJvdmlzaW9uczogKEkpIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVVJJIGZvciwgdGhlIEFwcGxpY2FibGUgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgZWFjaCBBZGFwdGF0aW9uIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm07IChJSSkgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgQWRhcHRhdGlvbiB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlOyAoSUlJKSBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIGFzIGluY2x1ZGVkIGluIHRoZSBBZGFwdGF0aW9uIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm07IChJVikgd2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBBZGFwdGF0aW9uLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChiKSBhcHBsaWVzIHRvIHRoZSBBZGFwdGF0aW9uIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgQWRhcHRhdGlvbiBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLlxuXG4gICAgICBjLiBJZiBZb3UgRGlzdHJpYnV0ZSwgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0LCB1bmxlc3MgYSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgcHVyc3VhbnQgdG8gU2VjdGlvbiA0KGEpLCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiwgYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiAoXCJBdHRyaWJ1dGlvbiBQYXJ0aWVzXCIpIGluIExpY2Vuc29yJ3MgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IChpaSkgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyAoaWlpKSB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVUkksIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIChpdiksIGNvbnNpc3RlbnQgd2l0aCBTZWN0aW9uIDMoYiksIGluIHRoZSBjYXNlIG9mIGFuIEFkYXB0YXRpb24sIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIEFkYXB0YXRpb24gKGUuZy4sIFwiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvcixcIiBvciBcIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3JcIikuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQoYykgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24sIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycyBvZiB0aGUgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuXG5cbiAgICAgIGQuIEV4Y2VwdCBhcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcgYnkgdGhlIExpY2Vuc29yIG9yIGFzIG1heSBiZSBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpZiBZb3UgUmVwcm9kdWNlLCBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgZWl0aGVyIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgV29yayB3aGljaCB3b3VsZCBiZSBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yJ3MgaG9ub3Igb3IgcmVwdXRhdGlvbi4gTGljZW5zb3IgYWdyZWVzIHRoYXQgaW4gdGhvc2UganVyaXNkaWN0aW9ucyAoZS5nLiBKYXBhbiksIGluIHdoaWNoIGFueSBleGVyY2lzZSBvZiB0aGUgcmlnaHQgZ3JhbnRlZCBpbiBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlICh0aGUgcmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgd291bGQgYmUgZGVlbWVkIHRvIGJlIGEgZGlzdG9ydGlvbiwgbXV0aWxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3IncyBob25vciBhbmQgcmVwdXRhdGlvbiwgdGhlIExpY2Vuc29yIHdpbGwgd2FpdmUgb3Igbm90IGFzc2VydCwgYXMgYXBwcm9wcmlhdGUsIHRoaXMgU2VjdGlvbiwgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcsIHRvIGVuYWJsZSBZb3UgdG8gcmVhc29uYWJseSBleGVyY2lzZSBZb3VyIHJpZ2h0IHVuZGVyIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIGJ1dCBub3Qgb3RoZXJ3aXNlLlxuXG4gICA1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXJcblxuICAgVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS5cblxuICAgNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuICAgNy4gVGVybWluYXRpb25cblxuICAgICAgYS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLlxuXG4gICA4LiBNaXNjZWxsYW5lb3VzXG5cbiAgICAgIGEuIEVhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGlvbiwgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIuIEVhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24sIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS5cblxuICAgICAgZC4gTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC5cblxuICAgICAgZS4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuXG5cbiAgICAgIGYuIFRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuXG5cbkNyZWF0aXZlIENvbW1vbnMgTm90aWNlXG5cbkNyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLlxuXG5FeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2UgYnkgZWl0aGVyIHBhcnR5IG9mIHRoZSB0cmFkZW1hcmsgXCJDcmVhdGl2ZSBDb21tb25zXCIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhlIExpY2Vuc2UuXG5cbkNyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uIl0sImxpY2Vuc2VJZHMiOlsiQ0MtQlktU0EtMy4wIl0sImtleXdvcmRzIjpbImxpY2Vuc2UgYyBjcmVhdGl2ZSIsImMgY3JlYXRpdmUgY29tbW9ucyIsInRoYXQgaXMgbGlzdGVkIiwiaXMgbGlzdGVkIGF0IiwibGlzdGVkIGF0IGh0dHAiLCJvcmcgY29tcGF0aWJsZWxpY2Vuc2VzIHRoYXQiLCJjb21wYXRpYmxlbGljZW5zZXMgdGhhdCBoYXMiLCJjb21tb25zIGFzIGJlaW5nIiwiYXMgYmVpbmcgZXNzZW50aWFsbHkiLCJiZWluZyBlc3NlbnRpYWxseSBlcXVpdmFsZW50IiwiZXNzZW50aWFsbHkgZXF1aXZhbGVudCB0byIsImVxdWl2YWxlbnQgdG8gdGhpcyIsImxpY2Vuc2UgaW5jbHVkaW5nIGF0IiwiaW5jbHVkaW5nIGF0IGEiLCJhIG1pbmltdW0gYmVjYXVzZSIsIm1pbmltdW0gYmVjYXVzZSB0aGF0IiwiYmVjYXVzZSB0aGF0IGxpY2Vuc2UiLCJ0aGF0IGxpY2Vuc2UgaSIsImxpY2Vuc2UgaSBjb250YWlucyIsImkgY29udGFpbnMgdGVybXMiLCJ0ZXJtcyB0aGF0IGhhdmUiLCJ0aGF0IGhhdmUgdGhlIiwic2FtZSBwdXJwb3NlIG1lYW5pbmciLCJwdXJwb3NlIG1lYW5pbmcgYW5kIiwibWVhbmluZyBhbmQgZWZmZWN0IiwiYW5kIGVmZmVjdCBhcyIsImFuZCBpaSBleHBsaWNpdGx5IiwiaWkgZXhwbGljaXRseSBwZXJtaXRzIiwiZXhwbGljaXRseSBwZXJtaXRzIHRoZSIsInBlcm1pdHMgdGhlIHJlbGljZW5zaW5nIiwidGhlIHJlbGljZW5zaW5nIG9mIiwicmVsaWNlbnNpbmcgb2YgYWRhcHRhdGlvbnMiLCJvZiBhZGFwdGF0aW9ucyBvZiIsImFkYXB0YXRpb25zIG9mIHdvcmtzIiwib2Ygd29ya3MgbWFkZSIsInRoYXQgbGljZW5zZSB1bmRlciIsImxpY2Vuc2UgdW5kZXIgdGhpcyIsImp1cmlzZGljdGlvbiBsaWNlbnNlIHdpdGgiLCJsaWNlbnNlIGQgZGlzdHJpYnV0ZSIsImQgZGlzdHJpYnV0ZSBtZWFucyIsIm9mIG93bmVyc2hpcCBlIiwib3duZXJzaGlwIGUgbGljZW5zZSIsImUgbGljZW5zZSBlbGVtZW50cyIsImF0dHJpYnV0aW9uIHNoYXJlYWxpa2UgZiIsInNoYXJlYWxpa2UgZiBsaWNlbnNvciIsImYgbGljZW5zb3IgbWVhbnMiLCJ0aGlzIGxpY2Vuc2UgZyIsImxpY2Vuc2UgZyBvcmlnaW5hbCIsImcgb3JpZ2luYWwgYXV0aG9yIiwidGhlIGJyb2FkY2FzdCBoIiwiYnJvYWRjYXN0IGggd29yayIsImggd29yayBtZWFucyIsImFydGlzdGljIHdvcmsgaSIsIndvcmsgaSB5b3UiLCJpIHlvdSBtZWFucyIsInByZXZpb3VzIHZpb2xhdGlvbiBqIiwidmlvbGF0aW9uIGogcHVibGljbHkiLCJqIHB1YmxpY2x5IHBlcmZvcm0iLCJvciBpbWFnZXMgayIsImltYWdlcyBrIHJlcHJvZHVjZSIsImsgcmVwcm9kdWNlIG1lYW5zIiwiMCB1cyBpdiIsInVzIGl2IGEiLCJpdiBhIGNyZWF0aXZlIiwiYWRhcHRhdGlvbiB1bmRlciBvbmUiLCJtZW50aW9uZWQgaW4gaXYiLCJpbiBpdiB5b3UiLCJ0aGF0IGxpY2Vuc2UgaWYiLCJhZGFwdGF0aW9uIHVuZGVyIHRoZSIsIm1lbnRpb25lZCBpbiBpIiwiaW4gaSBpaSIsImkgaWkgb3IiLCJpaSBvciBpaWkiLCJvciBpaWkgdGhlIiwiaWlpIHRoZSBhcHBsaWNhYmxlIiwiYXBwbGljYWJsZSBsaWNlbnNlIGdlbmVyYWxseSIsImxpY2Vuc2UgZ2VuZXJhbGx5IGFuZCIsImdlbmVyYWxseSBhbmQgdGhlIiwidGhlIGZvbGxvd2luZyBwcm92aXNpb25zIiwiZm9sbG93aW5nIHByb3Zpc2lvbnMgaSIsInByb3Zpc2lvbnMgaSB5b3UiLCJpIHlvdSBtdXN0IiwidXJpIGZvciB0aGUiLCJmb3IgdGhlIGFwcGxpY2FibGUiLCJwdWJsaWNseSBwZXJmb3JtIGlpIiwicGVyZm9ybSBpaSB5b3UiLCJpaSB5b3UgbWF5IiwiYXBwbGljYWJsZSBsaWNlbnNlIGlpaSIsImxpY2Vuc2UgaWlpIHlvdSIsInB1YmxpY2x5IHBlcmZvcm0gaXYiLCJwZXJmb3JtIGl2IHdoZW4iLCJpdiB3aGVuIHlvdSIsInBhcnRpZXMgZCBleGNlcHQiLCJkIGV4Y2VwdCBhcyIsImNvbW1vbnMgYXR0cmlidXRpb24gc2hhcmVhbGlrZSAzIiwiYWRhcHRhdGlvbiBhcyBkZWZpbmVkIGJlbG93IiwidGhpcyBsaWNlbnNlIGMgY3JlYXRpdmUiLCJsaWNlbnNlIGMgY3JlYXRpdmUgY29tbW9ucyIsImMgY3JlYXRpdmUgY29tbW9ucyBjb21wYXRpYmxlIiwiY29tbW9ucyBjb21wYXRpYmxlIGxpY2Vuc2UgbWVhbnMiLCJtZWFucyBhIGxpY2Vuc2UgdGhhdCIsImxpY2Vuc2UgdGhhdCBpcyBsaXN0ZWQiLCJ0aGF0IGlzIGxpc3RlZCBhdCIsImlzIGxpc3RlZCBhdCBodHRwIiwibGlzdGVkIGF0IGh0dHAgY3JlYXRpdmVjb21tb25zIiwiaHR0cCBjcmVhdGl2ZWNvbW1vbnMgb3JnIGNvbXBhdGlibGVsaWNlbnNlcyIsImNyZWF0aXZlY29tbW9ucyBvcmcgY29tcGF0aWJsZWxpY2Vuc2VzIHRoYXQiLCJvcmcgY29tcGF0aWJsZWxpY2Vuc2VzIHRoYXQgaGFzIiwiY29tcGF0aWJsZWxpY2Vuc2VzIHRoYXQgaGFzIGJlZW4iLCJ0aGF0IGhhcyBiZWVuIGFwcHJvdmVkIiwiYmVlbiBhcHByb3ZlZCBieSBjcmVhdGl2ZSIsImNyZWF0aXZlIGNvbW1vbnMgYXMgYmVpbmciLCJjb21tb25zIGFzIGJlaW5nIGVzc2VudGlhbGx5IiwiYXMgYmVpbmcgZXNzZW50aWFsbHkgZXF1aXZhbGVudCIsImJlaW5nIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8iLCJlc3NlbnRpYWxseSBlcXVpdmFsZW50IHRvIHRoaXMiLCJlcXVpdmFsZW50IHRvIHRoaXMgbGljZW5zZSIsInRoaXMgbGljZW5zZSBpbmNsdWRpbmcgYXQiLCJsaWNlbnNlIGluY2x1ZGluZyBhdCBhIiwiaW5jbHVkaW5nIGF0IGEgbWluaW11bSIsImF0IGEgbWluaW11bSBiZWNhdXNlIiwiYSBtaW5pbXVtIGJlY2F1c2UgdGhhdCIsIm1pbmltdW0gYmVjYXVzZSB0aGF0IGxpY2Vuc2UiLCJiZWNhdXNlIHRoYXQgbGljZW5zZSBpIiwidGhhdCBsaWNlbnNlIGkgY29udGFpbnMiLCJsaWNlbnNlIGkgY29udGFpbnMgdGVybXMiLCJpIGNvbnRhaW5zIHRlcm1zIHRoYXQiLCJjb250YWlucyB0ZXJtcyB0aGF0IGhhdmUiLCJ0ZXJtcyB0aGF0IGhhdmUgdGhlIiwidGhhdCBoYXZlIHRoZSBzYW1lIiwiaGF2ZSB0aGUgc2FtZSBwdXJwb3NlIiwidGhlIHNhbWUgcHVycG9zZSBtZWFuaW5nIiwic2FtZSBwdXJwb3NlIG1lYW5pbmcgYW5kIiwicHVycG9zZSBtZWFuaW5nIGFuZCBlZmZlY3QiLCJtZWFuaW5nIGFuZCBlZmZlY3QgYXMiLCJhbmQgZWZmZWN0IGFzIHRoZSIsImVmZmVjdCBhcyB0aGUgbGljZW5zZSIsImFzIHRoZSBsaWNlbnNlIGVsZW1lbnRzIiwiZWxlbWVudHMgb2YgdGhpcyBsaWNlbnNlIiwidGhpcyBsaWNlbnNlIGFuZCBpaSIsImxpY2Vuc2UgYW5kIGlpIGV4cGxpY2l0bHkiLCJhbmQgaWkgZXhwbGljaXRseSBwZXJtaXRzIiwiaWkgZXhwbGljaXRseSBwZXJtaXRzIHRoZSIsImV4cGxpY2l0bHkgcGVybWl0cyB0aGUgcmVsaWNlbnNpbmciLCJwZXJtaXRzIHRoZSByZWxpY2Vuc2luZyBvZiIsInRoZSByZWxpY2Vuc2luZyBvZiBhZGFwdGF0aW9ucyIsInJlbGljZW5zaW5nIG9mIGFkYXB0YXRpb25zIG9mIiwib2YgYWRhcHRhdGlvbnMgb2Ygd29ya3MiLCJhZGFwdGF0aW9ucyBvZiB3b3JrcyBtYWRlIiwib2Ygd29ya3MgbWFkZSBhdmFpbGFibGUiLCJ3b3JrcyBtYWRlIGF2YWlsYWJsZSB1bmRlciIsIm1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoYXQiLCJ1bmRlciB0aGF0IGxpY2Vuc2UgdW5kZXIiLCJ0aGF0IGxpY2Vuc2UgdW5kZXIgdGhpcyIsImxpY2Vuc2UgdW5kZXIgdGhpcyBsaWNlbnNlIiwiY29tbW9ucyBqdXJpc2RpY3Rpb24gbGljZW5zZSB3aXRoIiwianVyaXNkaWN0aW9uIGxpY2Vuc2Ugd2l0aCB0aGUiLCJhcyB0aGlzIGxpY2Vuc2UgZCIsInRoaXMgbGljZW5zZSBkIGRpc3RyaWJ1dGUiLCJsaWNlbnNlIGQgZGlzdHJpYnV0ZSBtZWFucyIsImQgZGlzdHJpYnV0ZSBtZWFucyB0byIsInRyYW5zZmVyIG9mIG93bmVyc2hpcCBlIiwib2Ygb3duZXJzaGlwIGUgbGljZW5zZSIsIm93bmVyc2hpcCBlIGxpY2Vuc2UgZWxlbWVudHMiLCJlIGxpY2Vuc2UgZWxlbWVudHMgbWVhbnMiLCJsaWNlbnNlIGF0dHJpYnV0aW9uIHNoYXJlYWxpa2UgZiIsImF0dHJpYnV0aW9uIHNoYXJlYWxpa2UgZiBsaWNlbnNvciIsInNoYXJlYWxpa2UgZiBsaWNlbnNvciBtZWFucyIsImYgbGljZW5zb3IgbWVhbnMgdGhlIiwib2YgdGhpcyBsaWNlbnNlIGciLCJ0aGlzIGxpY2Vuc2UgZyBvcmlnaW5hbCIsImxpY2Vuc2UgZyBvcmlnaW5hbCBhdXRob3IiLCJnIG9yaWdpbmFsIGF1dGhvciBtZWFucyIsInRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0IGgiLCJ0aGUgYnJvYWRjYXN0IGggd29yayIsImJyb2FkY2FzdCBoIHdvcmsgbWVhbnMiLCJoIHdvcmsgbWVhbnMgdGhlIiwib3IgYXJ0aXN0aWMgd29yayBpIiwiYXJ0aXN0aWMgd29yayBpIHlvdSIsIndvcmsgaSB5b3UgbWVhbnMiLCJpIHlvdSBtZWFucyBhbiIsImEgcHJldmlvdXMgdmlvbGF0aW9uIGoiLCJwcmV2aW91cyB2aW9sYXRpb24gaiBwdWJsaWNseSIsInZpb2xhdGlvbiBqIHB1YmxpY2x5IHBlcmZvcm0iLCJqIHB1YmxpY2x5IHBlcmZvcm0gbWVhbnMiLCJzb3VuZHMgb3IgaW1hZ2VzIGsiLCJvciBpbWFnZXMgayByZXByb2R1Y2UiLCJpbWFnZXMgayByZXByb2R1Y2UgbWVhbnMiLCJrIHJlcHJvZHVjZSBtZWFucyB0byIsImFkYXB0YXRpb24gb25seSB1bmRlciB0aGUiLCJnIGF0dHJpYnV0aW9uIHNoYXJlYWxpa2UgMyIsIjMgMCB1cyBpdiIsIjAgdXMgaXYgYSIsInVzIGl2IGEgY3JlYXRpdmUiLCJpdiBhIGNyZWF0aXZlIGNvbW1vbnMiLCJhIGNyZWF0aXZlIGNvbW1vbnMgY29tcGF0aWJsZSIsImNvbW1vbnMgY29tcGF0aWJsZSBsaWNlbnNlIGlmIiwidGhlIGFkYXB0YXRpb24gdW5kZXIgb25lIiwiYWRhcHRhdGlvbiB1bmRlciBvbmUgb2YiLCJsaWNlbnNlcyBtZW50aW9uZWQgaW4gaXYiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIENyZWF0aXZlIENvbW1vbnMgQ29ycG9yYXRpb24gKFwiQ3JlYXRpdmUgQ29tbW9uc1wiKSBpcyBub3QgYSBsYXcgZmlybSBhbmQgZG9lcyBub3QgcHJvdmlkZSBsZWdhbCBzZXJ2aWNlcyBvciBsZWdhbCBhZHZpY2UuIERpc3RyaWJ1dGlvbiBvZiBDcmVhdGl2ZSBDb21tb25zIHB1YmxpYyBsaWNlbnNlcyBkb2VzIG5vdCBjcmVhdGUgYSBsYXd5ZXItY2xpZW50IG9yIG90aGVyIHJlbGF0aW9uc2hpcC4gQ3JlYXRpdmUgQ29tbW9ucyBtYWtlcyBpdHMgbGljZW5zZXMgYW5kIHJlbGF0ZWQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIG9uIGFuIFwiYXMtaXNcIiBiYXNpcy4gQ3JlYXRpdmUgQ29tbW9ucyBnaXZlcyBubyB3YXJyYW50aWVzIHJlZ2FyZGluZyBpdHMgbGljZW5zZXMsIGFueSBtYXRlcmlhbCBsaWNlbnNlZCB1bmRlciB0aGVpciB0ZXJtcyBhbmQgY29uZGl0aW9ucywgb3IgYW55IHJlbGF0ZWQgaW5mb3JtYXRpb24uIENyZWF0aXZlIENvbW1vbnMgZGlzY2xhaW1zIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMgcmVzdWx0aW5nIGZyb20gdGhlaXIgdXNlIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwb3NzaWJsZS5cblxuVXNpbmcgQ3JlYXRpdmUgQ29tbW9ucyBQdWJsaWMgTGljZW5zZXNcblxuQ3JlYXRpdmUgQ29tbW9ucyBwdWJsaWMgbGljZW5zZXMgcHJvdmlkZSBhIHN0YW5kYXJkIHNldCBvZiB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGNyZWF0b3JzIGFuZCBvdGhlciByaWdodHMgaG9sZGVycyBtYXkgdXNlIHRvIHNoYXJlIG9yaWdpbmFsIHdvcmtzIG9mIGF1dGhvcnNoaXAgYW5kIG90aGVyIG1hdGVyaWFsIHN1YmplY3QgdG8gY29weXJpZ2h0IGFuZCBjZXJ0YWluIG90aGVyIHJpZ2h0cyBzcGVjaWZpZWQgaW4gdGhlIHB1YmxpYyBsaWNlbnNlIGJlbG93LiBUaGUgZm9sbG93aW5nIGNvbnNpZGVyYXRpb25zIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5LCBhcmUgbm90IGV4aGF1c3RpdmUsIGFuZCBkbyBub3QgZm9ybSBwYXJ0IG9mIG91ciBsaWNlbnNlcy5cblxuQ29uc2lkZXJhdGlvbnMgZm9yIGxpY2Vuc29yczogT3VyIHB1YmxpYyBsaWNlbnNlcyBhcmUgaW50ZW5kZWQgZm9yIHVzZSBieSB0aG9zZSBhdXRob3JpemVkIHRvIGdpdmUgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSBtYXRlcmlhbCBpbiB3YXlzIG90aGVyd2lzZSByZXN0cmljdGVkIGJ5IGNvcHlyaWdodCBhbmQgY2VydGFpbiBvdGhlciByaWdodHMuIE91ciBsaWNlbnNlcyBhcmUgaXJyZXZvY2FibGUuIExpY2Vuc29ycyBzaG91bGQgcmVhZCBhbmQgdW5kZXJzdGFuZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2UgdGhleSBjaG9vc2UgYmVmb3JlIGFwcGx5aW5nIGl0LiBMaWNlbnNvcnMgc2hvdWxkIGFsc28gc2VjdXJlIGFsbCByaWdodHMgbmVjZXNzYXJ5IGJlZm9yZSBhcHBseWluZyBvdXIgbGljZW5zZXMgc28gdGhhdCB0aGUgcHVibGljIGNhbiByZXVzZSB0aGUgbWF0ZXJpYWwgYXMgZXhwZWN0ZWQuIExpY2Vuc29ycyBzaG91bGQgY2xlYXJseSBtYXJrIGFueSBtYXRlcmlhbCBub3Qgc3ViamVjdCB0byB0aGUgbGljZW5zZS4gVGhpcyBpbmNsdWRlcyBvdGhlciBDQy1saWNlbnNlZCBtYXRlcmlhbCwgb3IgbWF0ZXJpYWwgdXNlZCB1bmRlciBhbiBleGNlcHRpb24gb3IgbGltaXRhdGlvbiB0byBjb3B5cmlnaHQuIE1vcmUgY29uc2lkZXJhdGlvbnMgZm9yIGxpY2Vuc29ycyA6IHdpa2kuY3JlYXRpdmVjb21tb25zLm9yZy9Db25zaWRlcmF0aW9uc19mb3JfbGljZW5zb3JzXG5cbkNvbnNpZGVyYXRpb25zIGZvciB0aGUgcHVibGljOiBCeSB1c2luZyBvbmUgb2Ygb3VyIHB1YmxpYyBsaWNlbnNlcywgYSBsaWNlbnNvciBncmFudHMgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgbGljZW5zZWQgbWF0ZXJpYWwgdW5kZXIgc3BlY2lmaWVkIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiB0aGUgbGljZW5zb3IncyBwZXJtaXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkgZm9yIGFueSByZWFzb27igJNmb3IgZXhhbXBsZSwgYmVjYXVzZSBvZiBhbnkgYXBwbGljYWJsZSBleGNlcHRpb24gb3IgbGltaXRhdGlvbiB0byBjb3B5cmlnaHTigJN0aGVuIHRoYXQgdXNlIGlzIG5vdCByZWd1bGF0ZWQgYnkgdGhlIGxpY2Vuc2UuIE91ciBsaWNlbnNlcyBncmFudCBvbmx5IHBlcm1pc3Npb25zIHVuZGVyIGNvcHlyaWdodCBhbmQgY2VydGFpbiBvdGhlciByaWdodHMgdGhhdCBhIGxpY2Vuc29yIGhhcyBhdXRob3JpdHkgdG8gZ3JhbnQuIFVzZSBvZiB0aGUgbGljZW5zZWQgbWF0ZXJpYWwgbWF5IHN0aWxsIGJlIHJlc3RyaWN0ZWQgZm9yIG90aGVyIHJlYXNvbnMsIGluY2x1ZGluZyBiZWNhdXNlIG90aGVycyBoYXZlIGNvcHlyaWdodCBvciBvdGhlciByaWdodHMgaW4gdGhlIG1hdGVyaWFsLiBBIGxpY2Vuc29yIG1heSBtYWtlIHNwZWNpYWwgcmVxdWVzdHMsIHN1Y2ggYXMgYXNraW5nIHRoYXQgYWxsIGNoYW5nZXMgYmUgbWFya2VkIG9yIGRlc2NyaWJlZC5cblxuQWx0aG91Z2ggbm90IHJlcXVpcmVkIGJ5IG91ciBsaWNlbnNlcywgeW91IGFyZSBlbmNvdXJhZ2VkIHRvIHJlc3BlY3QgdGhvc2UgcmVxdWVzdHMgd2hlcmUgcmVhc29uYWJsZS4gTW9yZSBjb25zaWRlcmF0aW9ucyBmb3IgdGhlIHB1YmxpYyA6IHdpa2kuY3JlYXRpdmVjb21tb25zLm9yZy9Db25zaWRlcmF0aW9uc19mb3JfbGljZW5zZWVzXG5cbkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBQdWJsaWMgTGljZW5zZVxuXG5CeSBleGVyY2lzaW5nIHRoZSBMaWNlbnNlZCBSaWdodHMgKGRlZmluZWQgYmVsb3cpLCBZb3UgYWNjZXB0IGFuZCBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgNC4wIEludGVybmF0aW9uYWwgUHVibGljIExpY2Vuc2UgKFwiUHVibGljIExpY2Vuc2VcIikuIFRvIHRoZSBleHRlbnQgdGhpcyBQdWJsaWMgTGljZW5zZSBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb250cmFjdCwgWW91IGFyZSBncmFudGVkIHRoZSBMaWNlbnNlZCBSaWdodHMgaW4gY29uc2lkZXJhdGlvbiBvZiBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGFuZCB0aGUgTGljZW5zb3IgZ3JhbnRzIFlvdSBzdWNoIHJpZ2h0cyBpbiBjb25zaWRlcmF0aW9uIG9mIGJlbmVmaXRzIHRoZSBMaWNlbnNvciByZWNlaXZlcyBmcm9tIG1ha2luZyB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXZhaWxhYmxlIHVuZGVyIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLlxuXG5TZWN0aW9uIDEg4oCTIERlZmluaXRpb25zLlxuXG4gICBhLiBBZGFwdGVkIE1hdGVyaWFsIG1lYW5zIG1hdGVyaWFsIHN1YmplY3QgdG8gQ29weXJpZ2h0IGFuZCBTaW1pbGFyIFJpZ2h0cyB0aGF0IGlzIGRlcml2ZWQgZnJvbSBvciBiYXNlZCB1cG9uIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBhbmQgaW4gd2hpY2ggdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIHRyYW5zbGF0ZWQsIGFsdGVyZWQsIGFycmFuZ2VkLCB0cmFuc2Zvcm1lZCwgb3Igb3RoZXJ3aXNlIG1vZGlmaWVkIGluIGEgbWFubmVyIHJlcXVpcmluZyBwZXJtaXNzaW9uIHVuZGVyIHRoZSBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIGhlbGQgYnkgdGhlIExpY2Vuc29yLiBGb3IgcHVycG9zZXMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgd2hlcmUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSwgb3Igc291bmQgcmVjb3JkaW5nLCBBZGFwdGVkIE1hdGVyaWFsIGlzIGFsd2F5cyBwcm9kdWNlZCB3aGVyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgaXMgc3luY2hlZCBpbiB0aW1lZCByZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlLlxuXG4gICBiLiBBZGFwdGVyJ3MgTGljZW5zZSBtZWFucyB0aGUgbGljZW5zZSBZb3UgYXBwbHkgdG8gWW91ciBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIGluIFlvdXIgY29udHJpYnV0aW9ucyB0byBBZGFwdGVkIE1hdGVyaWFsIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgYy4gQlktU0EgQ29tcGF0aWJsZSBMaWNlbnNlIG1lYW5zIGEgbGljZW5zZSBsaXN0ZWQgYXQgY3JlYXRpdmVjb21tb25zLm9yZy9jb21wYXRpYmxlbGljZW5zZXMsIGFwcHJvdmVkIGJ5IENyZWF0aXZlIENvbW1vbnMgYXMgZXNzZW50aWFsbHkgdGhlIGVxdWl2YWxlbnQgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgZC4gQ29weXJpZ2h0IGFuZCBTaW1pbGFyIFJpZ2h0cyBtZWFucyBjb3B5cmlnaHQgYW5kL29yIHNpbWlsYXIgcmlnaHRzIGNsb3NlbHkgcmVsYXRlZCB0byBjb3B5cmlnaHQgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHBlcmZvcm1hbmNlLCBicm9hZGNhc3QsIHNvdW5kIHJlY29yZGluZywgYW5kIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cywgd2l0aG91dCByZWdhcmQgdG8gaG93IHRoZSByaWdodHMgYXJlIGxhYmVsZWQgb3IgY2F0ZWdvcml6ZWQuIEZvciBwdXJwb3NlcyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLCB0aGUgcmlnaHRzIHNwZWNpZmllZCBpbiBTZWN0aW9uIDIoYikoMSktKDIpIGFyZSBub3QgQ29weXJpZ2h0IGFuZCBTaW1pbGFyIFJpZ2h0cy5cblxuICAgZS4gRWZmZWN0aXZlIFRlY2hub2xvZ2ljYWwgTWVhc3VyZXMgbWVhbnMgdGhvc2UgbWVhc3VyZXMgdGhhdCwgaW4gdGhlIGFic2VuY2Ugb2YgcHJvcGVyIGF1dGhvcml0eSwgbWF5IG5vdCBiZSBjaXJjdW12ZW50ZWQgdW5kZXIgbGF3cyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIEFydGljbGUgMTEgb2YgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBhZG9wdGVkIG9uIERlY2VtYmVyIDIwLCAxOTk2LCBhbmQvb3Igc2ltaWxhciBpbnRlcm5hdGlvbmFsIGFncmVlbWVudHMuXG5cbiAgIGYuIEV4Y2VwdGlvbnMgYW5kIExpbWl0YXRpb25zIG1lYW5zIGZhaXIgdXNlLCBmYWlyIGRlYWxpbmcsIGFuZC9vciBhbnkgb3RoZXIgZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gQ29weXJpZ2h0IGFuZCBTaW1pbGFyIFJpZ2h0cyB0aGF0IGFwcGxpZXMgdG8gWW91ciB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLlxuXG4gICBnLiBMaWNlbnNlIEVsZW1lbnRzIG1lYW5zIHRoZSBsaWNlbnNlIGF0dHJpYnV0ZXMgbGlzdGVkIGluIHRoZSBuYW1lIG9mIGEgQ3JlYXRpdmUgQ29tbW9ucyBQdWJsaWMgTGljZW5zZS4gVGhlIExpY2Vuc2UgRWxlbWVudHMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSBhcmUgQXR0cmlidXRpb24gYW5kIFNoYXJlQWxpa2UuXG5cbiAgIGguIExpY2Vuc2VkIE1hdGVyaWFsIG1lYW5zIHRoZSBhcnRpc3RpYyBvciBsaXRlcmFyeSB3b3JrLCBkYXRhYmFzZSwgb3Igb3RoZXIgbWF0ZXJpYWwgdG8gd2hpY2ggdGhlIExpY2Vuc29yIGFwcGxpZWQgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgaS4gTGljZW5zZWQgUmlnaHRzIG1lYW5zIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3Ugc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSwgd2hpY2ggYXJlIGxpbWl0ZWQgdG8gYWxsIENvcHlyaWdodCBhbmQgU2ltaWxhciBSaWdodHMgdGhhdCBhcHBseSB0byBZb3VyIHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIHRoYXQgdGhlIExpY2Vuc29yIGhhcyBhdXRob3JpdHkgdG8gbGljZW5zZS5cblxuICAgai4gTGljZW5zb3IgbWVhbnMgdGhlIGluZGl2aWR1YWwocykgb3IgZW50aXR5KGllcykgZ3JhbnRpbmcgcmlnaHRzIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cbiAgIGsuIFNoYXJlIG1lYW5zIHRvIHByb3ZpZGUgbWF0ZXJpYWwgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyB0aGF0IHJlcXVpcmVzIHBlcm1pc3Npb24gdW5kZXIgdGhlIExpY2Vuc2VkIFJpZ2h0cywgc3VjaCBhcyByZXByb2R1Y3Rpb24sIHB1YmxpYyBkaXNwbGF5LCBwdWJsaWMgcGVyZm9ybWFuY2UsIGRpc3RyaWJ1dGlvbiwgZGlzc2VtaW5hdGlvbiwgY29tbXVuaWNhdGlvbiwgb3IgaW1wb3J0YXRpb24sIGFuZCB0byBtYWtlIG1hdGVyaWFsIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluY2x1ZGluZyBpbiB3YXlzIHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlIG1hdGVyaWFsIGZyb20gYSBwbGFjZSBhbmQgYXQgYSB0aW1lIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbS5cblxuICAgbC4gU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzIG1lYW5zIHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCByZXN1bHRpbmcgZnJvbSBEaXJlY3RpdmUgOTYvOS9FQyBvZiB0aGUgRXVyb3BlYW4gUGFybGlhbWVudCBhbmQgb2YgdGhlIENvdW5jaWwgb2YgMTEgTWFyY2ggMTk5NiBvbiB0aGUgbGVnYWwgcHJvdGVjdGlvbiBvZiBkYXRhYmFzZXMsIGFzIGFtZW5kZWQgYW5kL29yIHN1Y2NlZWRlZCwgYXMgd2VsbCBhcyBvdGhlciBlc3NlbnRpYWxseSBlcXVpdmFsZW50IHJpZ2h0cyBhbnl3aGVyZSBpbiB0aGUgd29ybGQuXG5cbiAgIG0uIFlvdSBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyB0aGUgTGljZW5zZWQgUmlnaHRzIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UuIFlvdXIgaGFzIGEgY29ycmVzcG9uZGluZyBtZWFuaW5nLlxuXG5TZWN0aW9uIDIg4oCTIFNjb3BlLlxuXG4gICBhLiBMaWNlbnNlIGdyYW50LlxuXG4gICAgICAxLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIFB1YmxpYyBMaWNlbnNlLCB0aGUgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLXN1YmxpY2Vuc2FibGUsIG5vbi1leGNsdXNpdmUsIGlycmV2b2NhYmxlIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIExpY2Vuc2VkIFJpZ2h0cyBpbiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgdG86XG5cbiAgICAgICAgIEEuIHJlcHJvZHVjZSBhbmQgU2hhcmUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLCBpbiB3aG9sZSBvciBpbiBwYXJ0OyBhbmRcblxuICAgICAgICAgQi4gcHJvZHVjZSwgcmVwcm9kdWNlLCBhbmQgU2hhcmUgQWRhcHRlZCBNYXRlcmlhbC5cblxuICAgICAgMi4gRXhjZXB0aW9ucyBhbmQgTGltaXRhdGlvbnMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSBFeGNlcHRpb25zIGFuZCBMaW1pdGF0aW9ucyBhcHBseSB0byBZb3VyIHVzZSwgdGhpcyBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBhcHBseSwgYW5kIFlvdSBkbyBub3QgbmVlZCB0byBjb21wbHkgd2l0aCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuXG5cbiAgICAgIDMuIFRlcm0uIFRoZSB0ZXJtIG9mIHRoaXMgUHVibGljIExpY2Vuc2UgaXMgc3BlY2lmaWVkIGluIFNlY3Rpb24gNihhKS5cblxuICAgICAgNC4gTWVkaWEgYW5kIGZvcm1hdHM7IHRlY2huaWNhbCBtb2RpZmljYXRpb25zIGFsbG93ZWQuIFRoZSBMaWNlbnNvciBhdXRob3JpemVzIFlvdSB0byBleGVyY2lzZSB0aGUgTGljZW5zZWQgUmlnaHRzIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgY3JlYXRlZCwgYW5kIHRvIG1ha2UgdGVjaG5pY2FsIG1vZGlmaWNhdGlvbnMgbmVjZXNzYXJ5IHRvIGRvIHNvLiBUaGUgTGljZW5zb3Igd2FpdmVzIGFuZC9vciBhZ3JlZXMgbm90IHRvIGFzc2VydCBhbnkgcmlnaHQgb3IgYXV0aG9yaXR5IHRvIGZvcmJpZCBZb3UgZnJvbSBtYWtpbmcgdGVjaG5pY2FsIG1vZGlmaWNhdGlvbnMgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMsIGluY2x1ZGluZyB0ZWNobmljYWwgbW9kaWZpY2F0aW9ucyBuZWNlc3NhcnkgdG8gY2lyY3VtdmVudCBFZmZlY3RpdmUgVGVjaG5vbG9naWNhbCBNZWFzdXJlcy4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgUHVibGljIExpY2Vuc2UsIHNpbXBseSBtYWtpbmcgbW9kaWZpY2F0aW9ucyBhdXRob3JpemVkIGJ5IHRoaXMgU2VjdGlvbiAyKGEpKDQpIG5ldmVyIHByb2R1Y2VzIEFkYXB0ZWQgTWF0ZXJpYWwuXG5cbiAgICAgIDUuIERvd25zdHJlYW0gcmVjaXBpZW50cy5cblxuICAgICAgICAgQS4gT2ZmZXIgZnJvbSB0aGUgTGljZW5zb3Ig4oCTIExpY2Vuc2VkIE1hdGVyaWFsLiBFdmVyeSByZWNpcGllbnQgb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYW4gb2ZmZXIgZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgdGhlIExpY2Vuc2VkIFJpZ2h0cyB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgICAgQi4gQWRkaXRpb25hbCBvZmZlciBmcm9tIHRoZSBMaWNlbnNvciDigJMgQWRhcHRlZCBNYXRlcmlhbC4gRXZlcnkgcmVjaXBpZW50IG9mIEFkYXB0ZWQgTWF0ZXJpYWwgZnJvbSBZb3UgYXV0b21hdGljYWxseSByZWNlaXZlcyBhbiBvZmZlciBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSB0aGUgTGljZW5zZWQgUmlnaHRzIGluIHRoZSBBZGFwdGVkIE1hdGVyaWFsIHVuZGVyIHRoZSBjb25kaXRpb25zIG9mIHRoZSBBZGFwdGVyJ3MgTGljZW5zZSBZb3UgYXBwbHkuXG5cbiAgICAgICAgIEMuIE5vIGRvd25zdHJlYW0gcmVzdHJpY3Rpb25zLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IHRlcm1zIG9yIGNvbmRpdGlvbnMgb24sIG9yIGFwcGx5IGFueSBFZmZlY3RpdmUgVGVjaG5vbG9naWNhbCBNZWFzdXJlcyB0bywgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlmIGRvaW5nIHNvIHJlc3RyaWN0cyBleGVyY2lzZSBvZiB0aGUgTGljZW5zZWQgUmlnaHRzIGJ5IGFueSByZWNpcGllbnQgb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLlxuXG4gICAgICA2LiBObyBlbmRvcnNlbWVudC4gTm90aGluZyBpbiB0aGlzIFB1YmxpYyBMaWNlbnNlIGNvbnN0aXR1dGVzIG9yIG1heSBiZSBjb25zdHJ1ZWQgYXMgcGVybWlzc2lvbiB0byBhc3NlcnQgb3IgaW1wbHkgdGhhdCBZb3UgYXJlLCBvciB0aGF0IFlvdXIgdXNlIG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBpcywgY29ubmVjdGVkIHdpdGgsIG9yIHNwb25zb3JlZCwgZW5kb3JzZWQsIG9yIGdyYW50ZWQgb2ZmaWNpYWwgc3RhdHVzIGJ5LCB0aGUgTGljZW5zb3Igb3Igb3RoZXJzIGRlc2lnbmF0ZWQgdG8gcmVjZWl2ZSBhdHRyaWJ1dGlvbiBhcyBwcm92aWRlZCBpbiBTZWN0aW9uIDMoYSkoMSkoQSkoaSkuXG5cbiAgIGIuIE90aGVyIHJpZ2h0cy5cblxuICAgICAgMS4gTW9yYWwgcmlnaHRzLCBzdWNoIGFzIHRoZSByaWdodCBvZiBpbnRlZ3JpdHksIGFyZSBub3QgbGljZW5zZWQgdW5kZXIgdGhpcyBQdWJsaWMgTGljZW5zZSwgbm9yIGFyZSBwdWJsaWNpdHksIHByaXZhY3ksIGFuZC9vciBvdGhlciBzaW1pbGFyIHBlcnNvbmFsaXR5IHJpZ2h0czsgaG93ZXZlciwgdG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhlIExpY2Vuc29yIHdhaXZlcyBhbmQvb3IgYWdyZWVzIG5vdCB0byBhc3NlcnQgYW55IHN1Y2ggcmlnaHRzIGhlbGQgYnkgdGhlIExpY2Vuc29yIHRvIHRoZSBsaW1pdGVkIGV4dGVudCBuZWNlc3NhcnkgdG8gYWxsb3cgWW91IHRvIGV4ZXJjaXNlIHRoZSBMaWNlbnNlZCBSaWdodHMsIGJ1dCBub3Qgb3RoZXJ3aXNlLlxuXG4gICAgICAyLiBQYXRlbnQgYW5kIHRyYWRlbWFyayByaWdodHMgYXJlIG5vdCBsaWNlbnNlZCB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICAgICAzLiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGUgTGljZW5zb3Igd2FpdmVzIGFueSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyBmcm9tIFlvdSBmb3IgdGhlIGV4ZXJjaXNlIG9mIHRoZSBMaWNlbnNlZCBSaWdodHMsIHdoZXRoZXIgZGlyZWN0bHkgb3IgdGhyb3VnaCBhIGNvbGxlY3Rpbmcgc29jaWV0eSB1bmRlciBhbnkgdm9sdW50YXJ5IG9yIHdhaXZhYmxlIHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUuIEluIGFsbCBvdGhlciBjYXNlcyB0aGUgTGljZW5zb3IgZXhwcmVzc2x5IHJlc2VydmVzIGFueSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzLlxuXG5TZWN0aW9uIDMg4oCTIExpY2Vuc2UgQ29uZGl0aW9ucy5cblxuWW91ciBleGVyY2lzZSBvZiB0aGUgTGljZW5zZWQgUmlnaHRzIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zLlxuXG4gICBhLiBBdHRyaWJ1dGlvbi5cblxuICAgICAgMS4gSWYgWW91IFNoYXJlIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCAoaW5jbHVkaW5nIGluIG1vZGlmaWVkIGZvcm0pLCBZb3UgbXVzdDpcblxuICAgICAgICAgQS4gcmV0YWluIHRoZSBmb2xsb3dpbmcgaWYgaXQgaXMgc3VwcGxpZWQgYnkgdGhlIExpY2Vuc29yIHdpdGggdGhlIExpY2Vuc2VkIE1hdGVyaWFsOlxuXG4gICAgICAgICAgICBpLiBpZGVudGlmaWNhdGlvbiBvZiB0aGUgY3JlYXRvcihzKSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIGFueSBvdGhlcnMgZGVzaWduYXRlZCB0byByZWNlaXZlIGF0dHJpYnV0aW9uLCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciAoaW5jbHVkaW5nIGJ5IHBzZXVkb255bSBpZiBkZXNpZ25hdGVkKTtcblxuICAgICAgICAgICAgaWkuIGEgY29weXJpZ2h0IG5vdGljZTtcblxuICAgICAgICAgICAgaWlpLiBhIG5vdGljZSB0aGF0IHJlZmVycyB0byB0aGlzIFB1YmxpYyBMaWNlbnNlO1xuXG4gICAgICAgICAgICBpdi4gYSBub3RpY2UgdGhhdCByZWZlcnMgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcztcblxuICAgICAgICAgICAgdi4gYSBVUkkgb3IgaHlwZXJsaW5rIHRvIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGU7XG5cbiAgICAgICAgIEIuIGluZGljYXRlIGlmIFlvdSBtb2RpZmllZCB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYW5kIHJldGFpbiBhbiBpbmRpY2F0aW9uIG9mIGFueSBwcmV2aW91cyBtb2RpZmljYXRpb25zOyBhbmRcblxuICAgICAgICAgQy4gaW5kaWNhdGUgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGlzIGxpY2Vuc2VkIHVuZGVyIHRoaXMgUHVibGljIExpY2Vuc2UsIGFuZCBpbmNsdWRlIHRoZSB0ZXh0IG9mLCBvciB0aGUgVVJJIG9yIGh5cGVybGluayB0bywgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgMi4gWW91IG1heSBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMyhhKSgxKSBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgYmFzZWQgb24gdGhlIG1lZGl1bSwgbWVhbnMsIGFuZCBjb250ZXh0IGluIHdoaWNoIFlvdSBTaGFyZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWwuIEZvciBleGFtcGxlLCBpdCBtYXkgYmUgcmVhc29uYWJsZSB0byBzYXRpc2Z5IHRoZSBjb25kaXRpb25zIGJ5IHByb3ZpZGluZyBhIFVSSSBvciBoeXBlcmxpbmsgdG8gYSByZXNvdXJjZSB0aGF0IGluY2x1ZGVzIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi5cblxuICAgICAgMy4gSWYgcmVxdWVzdGVkIGJ5IHRoZSBMaWNlbnNvciwgWW91IG11c3QgcmVtb3ZlIGFueSBvZiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgU2VjdGlvbiAzKGEpKDEpKEEpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZS5cblxuICAgYi4gU2hhcmVBbGlrZS5JbiBhZGRpdGlvbiB0byB0aGUgY29uZGl0aW9ucyBpbiBTZWN0aW9uIDMoYSksIGlmIFlvdSBTaGFyZSBBZGFwdGVkIE1hdGVyaWFsIFlvdSBwcm9kdWNlLCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYWxzbyBhcHBseS5cblxuICAgICAgMS4gVGhlIEFkYXB0ZXIncyBMaWNlbnNlIFlvdSBhcHBseSBtdXN0IGJlIGEgQ3JlYXRpdmUgQ29tbW9ucyBsaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cywgdGhpcyB2ZXJzaW9uIG9yIGxhdGVyLCBvciBhIEJZLVNBIENvbXBhdGlibGUgTGljZW5zZS5cblxuICAgICAgMi4gWW91IG11c3QgaW5jbHVkZSB0aGUgdGV4dCBvZiwgb3IgdGhlIFVSSSBvciBoeXBlcmxpbmsgdG8sIHRoZSBBZGFwdGVyJ3MgTGljZW5zZSBZb3UgYXBwbHkuIFlvdSBtYXkgc2F0aXNmeSB0aGlzIGNvbmRpdGlvbiBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXIgYmFzZWQgb24gdGhlIG1lZGl1bSwgbWVhbnMsIGFuZCBjb250ZXh0IGluIHdoaWNoIFlvdSBTaGFyZSBBZGFwdGVkIE1hdGVyaWFsLlxuXG4gICAgICAzLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IHRlcm1zIG9yIGNvbmRpdGlvbnMgb24sIG9yIGFwcGx5IGFueSBFZmZlY3RpdmUgVGVjaG5vbG9naWNhbCBNZWFzdXJlcyB0bywgQWRhcHRlZCBNYXRlcmlhbCB0aGF0IHJlc3RyaWN0IGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGUgQWRhcHRlcidzIExpY2Vuc2UgWW91IGFwcGx5LlxuXG5TZWN0aW9uIDQg4oCTIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cy5cblxuV2hlcmUgdGhlIExpY2Vuc2VkIFJpZ2h0cyBpbmNsdWRlIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cyB0aGF0IGFwcGx5IHRvIFlvdXIgdXNlIG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbDpcblxuICAgYS4gZm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFNlY3Rpb24gMihhKSgxKSBncmFudHMgWW91IHRoZSByaWdodCB0byBleHRyYWN0LCByZXVzZSwgcmVwcm9kdWNlLCBhbmQgU2hhcmUgYWxsIG9yIGEgc3Vic3RhbnRpYWwgcG9ydGlvbiBvZiB0aGUgY29udGVudHMgb2YgdGhlIGRhdGFiYXNlO1xuXG4gICBiLiBpZiBZb3UgaW5jbHVkZSBhbGwgb3IgYSBzdWJzdGFudGlhbCBwb3J0aW9uIG9mIHRoZSBkYXRhYmFzZSBjb250ZW50cyBpbiBhIGRhdGFiYXNlIGluIHdoaWNoIFlvdSBoYXZlIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cywgdGhlbiB0aGUgZGF0YWJhc2UgaW4gd2hpY2ggWW91IGhhdmUgU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzIChidXQgbm90IGl0cyBpbmRpdmlkdWFsIGNvbnRlbnRzKSBpcyBBZGFwdGVkIE1hdGVyaWFsLCBpbmNsdWRpbmcgZm9yIHB1cnBvc2VzIG9mIFNlY3Rpb24gMyhiKTsgYW5kXG5cbiAgIGMuIFlvdSBtdXN0IGNvbXBseSB3aXRoIHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMyhhKSBpZiBZb3UgU2hhcmUgYWxsIG9yIGEgc3Vic3RhbnRpYWwgcG9ydGlvbiBvZiB0aGUgY29udGVudHMgb2YgdGhlIGRhdGFiYXNlLlxuXG4gICBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyBTZWN0aW9uIDQgc3VwcGxlbWVudHMgYW5kIGRvZXMgbm90IHJlcGxhY2UgWW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlIHdoZXJlIHRoZSBMaWNlbnNlZCBSaWdodHMgaW5jbHVkZSBvdGhlciBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzLlxuXG5TZWN0aW9uIDUg4oCTIERpc2NsYWltZXIgb2YgV2FycmFudGllcyBhbmQgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuXG5cbiAgIGEuIFVubGVzcyBvdGhlcndpc2Ugc2VwYXJhdGVseSB1bmRlcnRha2VuIGJ5IHRoZSBMaWNlbnNvciwgdG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhlIExpY2Vuc29yIG9mZmVycyB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXMtaXMgYW5kIGFzLWF2YWlsYWJsZSwgYW5kIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBvciB3YXJyYW50aWVzIG9mIGFueSBraW5kIGNvbmNlcm5pbmcgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLCB3aGV0aGVyIGV4cHJlc3MsIGltcGxpZWQsIHN0YXR1dG9yeSwgb3Igb3RoZXIuIFRoaXMgaW5jbHVkZXMsIHdpdGhvdXQgbGltaXRhdGlvbiwgd2FycmFudGllcyBvZiB0aXRsZSwgbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgbm9uLWluZnJpbmdlbWVudCwgYWJzZW5jZSBvZiBsYXRlbnQgb3Igb3RoZXIgZGVmZWN0cywgYWNjdXJhY3ksIG9yIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGVycm9ycywgd2hldGhlciBvciBub3Qga25vd24gb3IgZGlzY292ZXJhYmxlLiBXaGVyZSBkaXNjbGFpbWVycyBvZiB3YXJyYW50aWVzIGFyZSBub3QgYWxsb3dlZCBpbiBmdWxsIG9yIGluIHBhcnQsIHRoaXMgZGlzY2xhaW1lciBtYXkgbm90IGFwcGx5IHRvIFlvdS5cblxuICAgYi4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgaW4gbm8gZXZlbnQgd2lsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIFlvdSBvbiBhbnkgbGVnYWwgdGhlb3J5IChpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgbmVnbGlnZW5jZSkgb3Igb3RoZXJ3aXNlIGZvciBhbnkgZGlyZWN0LCBzcGVjaWFsLCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgY29uc2VxdWVudGlhbCwgcHVuaXRpdmUsIGV4ZW1wbGFyeSwgb3Igb3RoZXIgbG9zc2VzLCBjb3N0cywgZXhwZW5zZXMsIG9yIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBQdWJsaWMgTGljZW5zZSBvciB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFsLCBldmVuIGlmIHRoZSBMaWNlbnNvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGxvc3NlcywgY29zdHMsIGV4cGVuc2VzLCBvciBkYW1hZ2VzLiBXaGVyZSBhIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IGlzIG5vdCBhbGxvd2VkIGluIGZ1bGwgb3IgaW4gcGFydCwgdGhpcyBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LlxuXG4gICBjLiBUaGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZCBhYm92ZSBzaGFsbCBiZSBpbnRlcnByZXRlZCBpbiBhIG1hbm5lciB0aGF0LCB0byB0aGUgZXh0ZW50IHBvc3NpYmxlLCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzIGFuIGFic29sdXRlIGRpc2NsYWltZXIgYW5kIHdhaXZlciBvZiBhbGwgbGlhYmlsaXR5LlxuXG5TZWN0aW9uIDYg4oCTIFRlcm0gYW5kIFRlcm1pbmF0aW9uLlxuXG4gICBhLiBUaGlzIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgZm9yIHRoZSB0ZXJtIG9mIHRoZSBDb3B5cmlnaHQgYW5kIFNpbWlsYXIgUmlnaHRzIGxpY2Vuc2VkIGhlcmUuIEhvd2V2ZXIsIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoaXMgUHVibGljIExpY2Vuc2UsIHRoZW4gWW91ciByaWdodHMgdW5kZXIgdGhpcyBQdWJsaWMgTGljZW5zZSB0ZXJtaW5hdGUgYXV0b21hdGljYWxseS5cblxuICAgYi4gV2hlcmUgWW91ciByaWdodCB0byB1c2UgdGhlIExpY2Vuc2VkIE1hdGVyaWFsIGhhcyB0ZXJtaW5hdGVkIHVuZGVyIFNlY3Rpb24gNihhKSwgaXQgcmVpbnN0YXRlczpcblxuICAgICAgMS4gYXV0b21hdGljYWxseSBhcyBvZiB0aGUgZGF0ZSB0aGUgdmlvbGF0aW9uIGlzIGN1cmVkLCBwcm92aWRlZCBpdCBpcyBjdXJlZCB3aXRoaW4gMzAgZGF5cyBvZiBZb3VyIGRpc2NvdmVyeSBvZiB0aGUgdmlvbGF0aW9uOyBvclxuXG4gICAgICAyLiB1cG9uIGV4cHJlc3MgcmVpbnN0YXRlbWVudCBieSB0aGUgTGljZW5zb3IuXG5cbiAgIGMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIFNlY3Rpb24gNihiKSBkb2VzIG5vdCBhZmZlY3QgYW55IHJpZ2h0IHRoZSBMaWNlbnNvciBtYXkgaGF2ZSB0byBzZWVrIHJlbWVkaWVzIGZvciBZb3VyIHZpb2xhdGlvbnMgb2YgdGhpcyBQdWJsaWMgTGljZW5zZS5cblxuICAgZC4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoZSBMaWNlbnNvciBtYXkgYWxzbyBvZmZlciB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgdW5kZXIgc2VwYXJhdGUgdGVybXMgb3IgY29uZGl0aW9ucyBvciBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgYXQgYW55IHRpbWU7IGhvd2V2ZXIsIGRvaW5nIHNvIHdpbGwgbm90IHRlcm1pbmF0ZSB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICBlLiBTZWN0aW9ucyAxLCA1LCA2LCA3LCBhbmQgOCBzdXJ2aXZlIHRlcm1pbmF0aW9uIG9mIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cblNlY3Rpb24gNyDigJMgT3RoZXIgVGVybXMgYW5kIENvbmRpdGlvbnMuXG5cbiAgIGEuIFRoZSBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IHRlcm1zIG9yIGNvbmRpdGlvbnMgY29tbXVuaWNhdGVkIGJ5IFlvdSB1bmxlc3MgZXhwcmVzc2x5IGFncmVlZC5cblxuICAgYi4gQW55IGFycmFuZ2VtZW50cywgdW5kZXJzdGFuZGluZ3MsIG9yIGFncmVlbWVudHMgcmVnYXJkaW5nIHRoZSBMaWNlbnNlZCBNYXRlcmlhbCBub3Qgc3RhdGVkIGhlcmVpbiBhcmUgc2VwYXJhdGUgZnJvbSBhbmQgaW5kZXBlbmRlbnQgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgUHVibGljIExpY2Vuc2UuXG5cblNlY3Rpb24gOCDigJMgSW50ZXJwcmV0YXRpb24uXG5cbiAgIGEuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90LCBhbmQgc2hhbGwgbm90IGJlIGludGVycHJldGVkIHRvLCByZWR1Y2UsIGxpbWl0LCByZXN0cmljdCwgb3IgaW1wb3NlIGNvbmRpdGlvbnMgb24gYW55IHVzZSBvZiB0aGUgTGljZW5zZWQgTWF0ZXJpYWwgdGhhdCBjb3VsZCBsYXdmdWxseSBiZSBtYWRlIHdpdGhvdXQgcGVybWlzc2lvbiB1bmRlciB0aGlzIFB1YmxpYyBMaWNlbnNlLlxuXG4gICBiLiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlLCBpZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgUHVibGljIExpY2Vuc2UgaXMgZGVlbWVkIHVuZW5mb3JjZWFibGUsIGl0IHNoYWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBJZiB0aGUgcHJvdmlzaW9uIGNhbm5vdCBiZSByZWZvcm1lZCwgaXQgc2hhbGwgYmUgc2V2ZXJlZCBmcm9tIHRoaXMgUHVibGljIExpY2Vuc2Ugd2l0aG91dCBhZmZlY3RpbmcgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5pbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMuXG5cbiAgIGMuIE5vIHRlcm0gb3IgY29uZGl0aW9uIG9mIHRoaXMgUHVibGljIExpY2Vuc2Ugd2lsbCBiZSB3YWl2ZWQgYW5kIG5vIGZhaWx1cmUgdG8gY29tcGx5IGNvbnNlbnRlZCB0byB1bmxlc3MgZXhwcmVzc2x5IGFncmVlZCB0byBieSB0aGUgTGljZW5zb3IuXG5cbiAgIGQuIE5vdGhpbmcgaW4gdGhpcyBQdWJsaWMgTGljZW5zZSBjb25zdGl0dXRlcyBvciBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgYSBsaW1pdGF0aW9uIHVwb24sIG9yIHdhaXZlciBvZiwgYW55IHByaXZpbGVnZXMgYW5kIGltbXVuaXRpZXMgdGhhdCBhcHBseSB0byB0aGUgTGljZW5zb3Igb3IgWW91LCBpbmNsdWRpbmcgZnJvbSB0aGUgbGVnYWwgcHJvY2Vzc2VzIG9mIGFueSBqdXJpc2RpY3Rpb24gb3IgYXV0aG9yaXR5LlxuXG5DcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIGl0cyBwdWJsaWMgbGljZW5zZXMuIE5vdHdpdGhzdGFuZGluZywgQ3JlYXRpdmUgQ29tbW9ucyBtYXkgZWxlY3QgdG8gYXBwbHkgb25lIG9mIGl0cyBwdWJsaWMgbGljZW5zZXMgdG8gbWF0ZXJpYWwgaXQgcHVibGlzaGVzIGFuZCBpbiB0aG9zZSBpbnN0YW5jZXMgd2lsbCBiZSBjb25zaWRlcmVkIHRoZSBcIkxpY2Vuc29yLlwiIFRoZSB0ZXh0IG9mIHRoZSBDcmVhdGl2ZSBDb21tb25zIHB1YmxpYyBsaWNlbnNlcyBpcyBkZWRpY2F0ZWQgdG8gdGhlIHB1YmxpYyBkb21haW4gdW5kZXIgdGhlIENDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb24uIEV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRoYXQgbWF0ZXJpYWwgaXMgc2hhcmVkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBwdWJsaWMgbGljZW5zZSBvciBhcyBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IHRoZSBDcmVhdGl2ZSBDb21tb25zIHBvbGljaWVzIHB1Ymxpc2hlZCBhdCBjcmVhdGl2ZWNvbW1vbnMub3JnL3BvbGljaWVzLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIG9mIHRoZSB0cmFkZW1hcmsgXCJDcmVhdGl2ZSBDb21tb25zXCIgb3IgYW55IG90aGVyIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCBpdHMgcHJpb3Igd3JpdHRlbiBjb25zZW50IGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBpbiBjb25uZWN0aW9uIHdpdGggYW55IHVuYXV0aG9yaXplZCBtb2RpZmljYXRpb25zIHRvIGFueSBvZiBpdHMgcHVibGljIGxpY2Vuc2VzIG9yIGFueSBvdGhlciBhcnJhbmdlbWVudHMsIHVuZGVyc3RhbmRpbmdzLCBvciBhZ3JlZW1lbnRzIGNvbmNlcm5pbmcgdXNlIG9mIGxpY2Vuc2VkIG1hdGVyaWFsLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyBwYXJhZ3JhcGggZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoZSBwdWJsaWMgbGljZW5zZXMuXG5cbkNyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBjcmVhdGl2ZWNvbW1vbnMub3JnLiJdLCJsaWNlbnNlSWRzIjpbIkNDLUJZLVNBLTQuMCJdLCJrZXl3b3JkcyI6WyJjIGJ5IHNhIiwiYXJlIGF0dHJpYnV0aW9uIGFuZCIsImF0dHJpYnV0aW9uIGFuZCBzaGFyZWFsaWtlIiwibGljZW5zZSBrIHNoYXJlIiwiayBzaGFyZSBtZWFucyIsImJ5IHRoZW0gbCIsInRoZW0gbCBzdWkiLCJsIHN1aSBnZW5lcmlzIiwidGhlIHdvcmxkIG0iLCJ3b3JsZCBtIHlvdSIsIm0geW91IG1lYW5zIiwiYSBieSBzYSIsImxpY2Vuc2UgYyBieSBzYSIsImMgYnkgc2EgY29tcGF0aWJsZSIsImxpY2Vuc2UgYXJlIGF0dHJpYnV0aW9uIGFuZCIsImFyZSBhdHRyaWJ1dGlvbiBhbmQgc2hhcmVhbGlrZSIsImF0dHJpYnV0aW9uIGFuZCBzaGFyZWFsaWtlIGgiLCJwdWJsaWMgbGljZW5zZSBrIHNoYXJlIiwibGljZW5zZSBrIHNoYXJlIG1lYW5zIiwiayBzaGFyZSBtZWFucyB0byIsImNob3NlbiBieSB0aGVtIGwiLCJieSB0aGVtIGwgc3VpIiwidGhlbSBsIHN1aSBnZW5lcmlzIiwibCBzdWkgZ2VuZXJpcyBkYXRhYmFzZSIsImluIHRoZSB3b3JsZCBtIiwidGhlIHdvcmxkIG0geW91Iiwid29ybGQgbSB5b3UgbWVhbnMiLCJtIHlvdSBtZWFucyB0aGUiLCJvciBhIGJ5IHNhIiwiYSBieSBzYSBjb21wYXRpYmxlIiwibGljZW5zZWVzIGNyZWF0aXZlIGNvbW1vbnMgYXR0cmlidXRpb24gc2hhcmVhbGlrZSIsInRoaXMgY3JlYXRpdmUgY29tbW9ucyBhdHRyaWJ1dGlvbiBzaGFyZWFsaWtlIiwicHVibGljIGxpY2Vuc2UgYyBieSBzYSIsImxpY2Vuc2UgYyBieSBzYSBjb21wYXRpYmxlIiwiYyBieSBzYSBjb21wYXRpYmxlIGxpY2Vuc2UiLCJieSBzYSBjb21wYXRpYmxlIGxpY2Vuc2UgbWVhbnMiLCJwdWJsaWMgbGljZW5zZSBhcmUgYXR0cmlidXRpb24gYW5kIiwibGljZW5zZSBhcmUgYXR0cmlidXRpb24gYW5kIHNoYXJlYWxpa2UiLCJhcmUgYXR0cmlidXRpb24gYW5kIHNoYXJlYWxpa2UgaCIsImF0dHJpYnV0aW9uIGFuZCBzaGFyZWFsaWtlIGggbGljZW5zZWQiLCJ0aGlzIHB1YmxpYyBsaWNlbnNlIGsgc2hhcmUiLCJwdWJsaWMgbGljZW5zZSBrIHNoYXJlIG1lYW5zIiwibGljZW5zZSBrIHNoYXJlIG1lYW5zIHRvIiwiayBzaGFyZSBtZWFucyB0byBwcm92aWRlIiwiaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtIGwiLCJjaG9zZW4gYnkgdGhlbSBsIHN1aSIsImJ5IHRoZW0gbCBzdWkgZ2VuZXJpcyIsInRoZW0gbCBzdWkgZ2VuZXJpcyBkYXRhYmFzZSIsImwgc3VpIGdlbmVyaXMgZGF0YWJhc2UgcmlnaHRzIiwiYW55d2hlcmUgaW4gdGhlIHdvcmxkIG0iLCJpbiB0aGUgd29ybGQgbSB5b3UiLCJ0aGUgd29ybGQgbSB5b3UgbWVhbnMiLCJ3b3JsZCBtIHlvdSBtZWFucyB0aGUiLCJtIHlvdSBtZWFucyB0aGUgaW5kaXZpZHVhbCIsImxhdGVyIG9yIGEgYnkgc2EiLCJvciBhIGJ5IHNhIGNvbXBhdGlibGUiLCJhIGJ5IHNhIGNvbXBhdGlibGUgbGljZW5zZSIsImJ5IHNhIGNvbXBhdGlibGUgbGljZW5zZSAyIl19LHsibGljZW5zZVRleHRzIjpbIlRoZSBwZXJzb24gb3IgcGVyc29ucyB3aG8gaGF2ZSBhc3NvY2lhdGVkIHdvcmsgd2l0aCB0aGlzIGRvY3VtZW50ICh0aGUgXCJEZWRpY2F0b3JcIiBvciBcIkNlcnRpZmllclwiKSBoZXJlYnkgZWl0aGVyIChhKSBjZXJ0aWZpZXMgdGhhdCwgdG8gdGhlIGJlc3Qgb2YgaGlzIGtub3dsZWRnZSwgdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCBpZGVudGlmaWVkIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluIG9mIHRoZSBjb3VudHJ5IGZyb20gd2hpY2ggdGhlIHdvcmsgaXMgcHVibGlzaGVkLCBvciAoYikgaGVyZWJ5IGRlZGljYXRlcyB3aGF0ZXZlciBjb3B5cmlnaHQgdGhlIGRlZGljYXRvcnMgaG9sZHMgaW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCBpZGVudGlmaWVkIGJlbG93ICh0aGUgXCJXb3JrXCIpIHRvIHRoZSBwdWJsaWMgZG9tYWluLiBBIGNlcnRpZmllciwgbW9yZW92ZXIsIGRlZGljYXRlcyBhbnkgY29weXJpZ2h0IGludGVyZXN0IGhlIG1heSBoYXZlIGluIHRoZSBhc3NvY2lhdGVkIHdvcmssIGFuZCBmb3IgdGhlc2UgcHVycG9zZXMsIGlzIGRlc2NyaWJlZCBhcyBhIFwiZGVkaWNhdG9yXCIgYmVsb3cuXG5cbkEgY2VydGlmaWVyIGhhcyB0YWtlbiByZWFzb25hYmxlIHN0ZXBzIHRvIHZlcmlmeSB0aGUgY29weXJpZ2h0IHN0YXR1cyBvZiB0aGlzIHdvcmsuIENlcnRpZmllciByZWNvZ25pemVzIHRoYXQgaGlzIGdvb2QgZmFpdGggZWZmb3J0cyBtYXkgbm90IHNoaWVsZCBoaW0gZnJvbSBsaWFiaWxpdHkgaWYgaW4gZmFjdCB0aGUgd29yayBjZXJ0aWZpZWQgaXMgbm90IGluIHRoZSBwdWJsaWMgZG9tYWluLlxuXG5EZWRpY2F0b3IgbWFrZXMgdGhpcyBkZWRpY2F0aW9uIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgcHVibGljIGF0IGxhcmdlIGFuZCB0byB0aGUgZGV0cmltZW50IG9mIHRoZSBEZWRpY2F0b3IncyBoZWlycyBhbmQgc3VjY2Vzc29ycy4gRGVkaWNhdG9yIGludGVuZHMgdGhpcyBkZWRpY2F0aW9uIHRvIGJlIGFuIG92ZXJ0IGFjdCBvZiByZWxpbnF1aXNobWVudCBpbiBwZXJwZXR1aXR5IG9mIGFsbCBwcmVzZW50IGFuZCBmdXR1cmUgcmlnaHRzIHVuZGVyIGNvcHlyaWdodCBsYXcsIHdoZXRoZXIgdmVzdGVkIG9yIGNvbnRpbmdlbnQsIGluIHRoZSBXb3JrLiBEZWRpY2F0b3IgdW5kZXJzdGFuZHMgdGhhdCBzdWNoIHJlbGlucXVpc2htZW50IG9mIGFsbCByaWdodHMgaW5jbHVkZXMgdGhlIHJlbGlucXVpc2htZW50IG9mIGFsbCByaWdodHMgdG8gZW5mb3JjZSAoYnkgbGF3c3VpdCBvciBvdGhlcndpc2UpIHRob3NlIGNvcHlyaWdodHMgaW4gdGhlIFdvcmsuXG5cbkRlZGljYXRvciByZWNvZ25pemVzIHRoYXQsIG9uY2UgcGxhY2VkIGluIHRoZSBwdWJsaWMgZG9tYWluLCB0aGUgV29yayBtYXkgYmUgZnJlZWx5IHJlcHJvZHVjZWQsIGRpc3RyaWJ1dGVkLCB0cmFuc21pdHRlZCwgdXNlZCwgbW9kaWZpZWQsIGJ1aWx0IHVwb24sIG9yIG90aGVyd2lzZSBleHBsb2l0ZWQgYnkgYW55b25lIGZvciBhbnkgcHVycG9zZSwgY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCwgYW5kIGluIGFueSB3YXksIGluY2x1ZGluZyBieSBtZXRob2RzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gaW52ZW50ZWQgb3IgY29uY2VpdmVkLiJdLCJsaWNlbnNlSWRzIjpbIkNDLVBEREMiXSwia2V5d29yZHMiOlsid2hvIGhhdmUgYXNzb2NpYXRlZCIsImhhdmUgYXNzb2NpYXRlZCB3b3JrIiwiYXNzb2NpYXRlZCB3b3JrIHdpdGgiLCJ3aXRoIHRoaXMgZG9jdW1lbnQiLCJkb2N1bWVudCB0aGUgZGVkaWNhdG9yIiwidGhlIGRlZGljYXRvciBvciIsImRlZGljYXRvciBvciBjZXJ0aWZpZXIiLCJvciBjZXJ0aWZpZXIgaGVyZWJ5IiwiY2VydGlmaWVyIGhlcmVieSBlaXRoZXIiLCJoZXJlYnkgZWl0aGVyIGEiLCJlaXRoZXIgYSBjZXJ0aWZpZXMiLCJhIGNlcnRpZmllcyB0aGF0IiwiY2VydGlmaWVzIHRoYXQgdG8iLCJiZXN0IG9mIGhpcyIsIm9mIGhpcyBrbm93bGVkZ2UiLCJoaXMga25vd2xlZGdlIHRoZSIsImtub3dsZWRnZSB0aGUgd29yayIsImF1dGhvcnNoaXAgaWRlbnRpZmllZCBpcyIsImlkZW50aWZpZWQgaXMgaW4iLCJwdWJsaWMgZG9tYWluIG9mIiwiZG9tYWluIG9mIHRoZSIsInRoZSBjb3VudHJ5IGZyb20iLCJjb3VudHJ5IGZyb20gd2hpY2giLCJ3b3JrIGlzIHB1Ymxpc2hlZCIsImlzIHB1Ymxpc2hlZCBvciIsInB1Ymxpc2hlZCBvciBiIiwib3IgYiBoZXJlYnkiLCJiIGhlcmVieSBkZWRpY2F0ZXMiLCJoZXJlYnkgZGVkaWNhdGVzIHdoYXRldmVyIiwiZGVkaWNhdGVzIHdoYXRldmVyIGNvcHlyaWdodCIsIndoYXRldmVyIGNvcHlyaWdodCB0aGUiLCJjb3B5cmlnaHQgdGhlIGRlZGljYXRvcnMiLCJ0aGUgZGVkaWNhdG9ycyBob2xkcyIsImRlZGljYXRvcnMgaG9sZHMgaW4iLCJob2xkcyBpbiB0aGUiLCJhdXRob3JzaGlwIGlkZW50aWZpZWQgYmVsb3ciLCJpZGVudGlmaWVkIGJlbG93IHRoZSIsImJlbG93IHRoZSB3b3JrIiwicHVibGljIGRvbWFpbiBhIiwiZG9tYWluIGEgY2VydGlmaWVyIiwiYSBjZXJ0aWZpZXIgbW9yZW92ZXIiLCJjZXJ0aWZpZXIgbW9yZW92ZXIgZGVkaWNhdGVzIiwibW9yZW92ZXIgZGVkaWNhdGVzIGFueSIsImRlZGljYXRlcyBhbnkgY29weXJpZ2h0IiwiYW55IGNvcHlyaWdodCBpbnRlcmVzdCIsImNvcHlyaWdodCBpbnRlcmVzdCBoZSIsImludGVyZXN0IGhlIG1heSIsImhlIG1heSBoYXZlIiwiaW4gdGhlIGFzc29jaWF0ZWQiLCJ0aGUgYXNzb2NpYXRlZCB3b3JrIiwiYXNzb2NpYXRlZCB3b3JrIGFuZCIsImFuZCBmb3IgdGhlc2UiLCJ0aGVzZSBwdXJwb3NlcyBpcyIsInB1cnBvc2VzIGlzIGRlc2NyaWJlZCIsImlzIGRlc2NyaWJlZCBhcyIsImRlc2NyaWJlZCBhcyBhIiwiYXMgYSBkZWRpY2F0b3IiLCJhIGRlZGljYXRvciBiZWxvdyIsImRlZGljYXRvciBiZWxvdyBhIiwiYmVsb3cgYSBjZXJ0aWZpZXIiLCJhIGNlcnRpZmllciBoYXMiLCJjZXJ0aWZpZXIgaGFzIHRha2VuIiwiaGFzIHRha2VuIHJlYXNvbmFibGUiLCJ0YWtlbiByZWFzb25hYmxlIHN0ZXBzIiwic3RlcHMgdG8gdmVyaWZ5IiwidG8gdmVyaWZ5IHRoZSIsInZlcmlmeSB0aGUgY29weXJpZ2h0IiwidGhlIGNvcHlyaWdodCBzdGF0dXMiLCJjb3B5cmlnaHQgc3RhdHVzIG9mIiwidGhpcyB3b3JrIGNlcnRpZmllciIsIndvcmsgY2VydGlmaWVyIHJlY29nbml6ZXMiLCJjZXJ0aWZpZXIgcmVjb2duaXplcyB0aGF0IiwicmVjb2duaXplcyB0aGF0IGhpcyIsInRoYXQgaGlzIGdvb2QiLCJoaXMgZ29vZCBmYWl0aCIsImdvb2QgZmFpdGggZWZmb3J0cyIsImZhaXRoIGVmZm9ydHMgbWF5IiwiZWZmb3J0cyBtYXkgbm90IiwibWF5IG5vdCBzaGllbGQiLCJub3Qgc2hpZWxkIGhpbSIsInNoaWVsZCBoaW0gZnJvbSIsImhpbSBmcm9tIGxpYWJpbGl0eSIsImZyb20gbGlhYmlsaXR5IGlmIiwibGlhYmlsaXR5IGlmIGluIiwiaWYgaW4gZmFjdCIsImluIGZhY3QgdGhlIiwiZmFjdCB0aGUgd29yayIsInRoZSB3b3JrIGNlcnRpZmllZCIsIndvcmsgY2VydGlmaWVkIGlzIiwiY2VydGlmaWVkIGlzIG5vdCIsImlzIG5vdCBpbiIsIm5vdCBpbiB0aGUiLCJwdWJsaWMgZG9tYWluIGRlZGljYXRvciIsImRvbWFpbiBkZWRpY2F0b3IgbWFrZXMiLCJkZWRpY2F0b3IgbWFrZXMgdGhpcyIsIm1ha2VzIHRoaXMgZGVkaWNhdGlvbiIsImRldHJpbWVudCBvZiB0aGUiLCJ0aGUgZGVkaWNhdG9yIHMiLCJkZWRpY2F0b3IgcyBoZWlycyIsImFuZCBzdWNjZXNzb3JzIGRlZGljYXRvciIsInN1Y2Nlc3NvcnMgZGVkaWNhdG9yIGludGVuZHMiLCJkZWRpY2F0b3IgaW50ZW5kcyB0aGlzIiwiaW50ZW5kcyB0aGlzIGRlZGljYXRpb24iLCJmdXR1cmUgcmlnaHRzIHVuZGVyIiwiY29weXJpZ2h0IGxhdyB3aGV0aGVyIiwibGF3IHdoZXRoZXIgdmVzdGVkIiwid2hldGhlciB2ZXN0ZWQgb3IiLCJvciBjb250aW5nZW50IGluIiwiY29udGluZ2VudCBpbiB0aGUiLCJ3b3JrIGRlZGljYXRvciB1bmRlcnN0YW5kcyIsImRlZGljYXRvciB1bmRlcnN0YW5kcyB0aGF0IiwidW5kZXJzdGFuZHMgdGhhdCBzdWNoIiwidGhhdCBzdWNoIHJlbGlucXVpc2htZW50Iiwic3VjaCByZWxpbnF1aXNobWVudCBvZiIsImFsbCByaWdodHMgaW5jbHVkZXMiLCJyaWdodHMgaW5jbHVkZXMgdGhlIiwiaW5jbHVkZXMgdGhlIHJlbGlucXVpc2htZW50IiwidGhlIHJlbGlucXVpc2htZW50IG9mIiwicmlnaHRzIHRvIGVuZm9yY2UiLCJ0byBlbmZvcmNlIGJ5IiwiZW5mb3JjZSBieSBsYXdzdWl0IiwiYnkgbGF3c3VpdCBvciIsImxhd3N1aXQgb3Igb3RoZXJ3aXNlIiwib3Igb3RoZXJ3aXNlIHRob3NlIiwib3RoZXJ3aXNlIHRob3NlIGNvcHlyaWdodHMiLCJ0aG9zZSBjb3B5cmlnaHRzIGluIiwid29yayBkZWRpY2F0b3IgcmVjb2duaXplcyIsImRlZGljYXRvciByZWNvZ25pemVzIHRoYXQiLCJyZWNvZ25pemVzIHRoYXQgb25jZSIsInRoYXQgb25jZSBwbGFjZWQiLCJvbmNlIHBsYWNlZCBpbiIsImRvbWFpbiB0aGUgd29yayIsImZyZWVseSByZXByb2R1Y2VkIGRpc3RyaWJ1dGVkIiwicmVwcm9kdWNlZCBkaXN0cmlidXRlZCB0cmFuc21pdHRlZCIsImRpc3RyaWJ1dGVkIHRyYW5zbWl0dGVkIHVzZWQiLCJ0cmFuc21pdHRlZCB1c2VkIG1vZGlmaWVkIiwidXNlZCBtb2RpZmllZCBidWlsdCIsIm1vZGlmaWVkIGJ1aWx0IHVwb24iLCJidWlsdCB1cG9uIG9yIiwidXBvbiBvciBvdGhlcndpc2UiLCJvciBvdGhlcndpc2UgZXhwbG9pdGVkIiwib3RoZXJ3aXNlIGV4cGxvaXRlZCBieSIsImV4cGxvaXRlZCBieSBhbnlvbmUiLCJieSBhbnlvbmUgZm9yIiwiY29tbWVyY2lhbCBhbmQgaW4iLCJhbnkgd2F5IGluY2x1ZGluZyIsIndheSBpbmNsdWRpbmcgYnkiLCJpbmNsdWRpbmcgYnkgbWV0aG9kcyIsImJ5IG1ldGhvZHMgdGhhdCIsIm1ldGhvZHMgdGhhdCBoYXZlIiwidGhhdCBoYXZlIG5vdCIsImhhdmUgbm90IHlldCIsIm5vdCB5ZXQgYmVlbiIsInlldCBiZWVuIGludmVudGVkIiwiYmVlbiBpbnZlbnRlZCBvciIsImludmVudGVkIG9yIGNvbmNlaXZlZCIsInRoZSBwZXJzb24gb3IgcGVyc29ucyIsIm9yIHBlcnNvbnMgd2hvIGhhdmUiLCJwZXJzb25zIHdobyBoYXZlIGFzc29jaWF0ZWQiLCJ3aG8gaGF2ZSBhc3NvY2lhdGVkIHdvcmsiLCJoYXZlIGFzc29jaWF0ZWQgd29yayB3aXRoIiwiYXNzb2NpYXRlZCB3b3JrIHdpdGggdGhpcyIsIndvcmsgd2l0aCB0aGlzIGRvY3VtZW50Iiwid2l0aCB0aGlzIGRvY3VtZW50IHRoZSIsInRoaXMgZG9jdW1lbnQgdGhlIGRlZGljYXRvciIsImRvY3VtZW50IHRoZSBkZWRpY2F0b3Igb3IiLCJ0aGUgZGVkaWNhdG9yIG9yIGNlcnRpZmllciIsImRlZGljYXRvciBvciBjZXJ0aWZpZXIgaGVyZWJ5Iiwib3IgY2VydGlmaWVyIGhlcmVieSBlaXRoZXIiLCJjZXJ0aWZpZXIgaGVyZWJ5IGVpdGhlciBhIiwiaGVyZWJ5IGVpdGhlciBhIGNlcnRpZmllcyIsImVpdGhlciBhIGNlcnRpZmllcyB0aGF0IiwiYSBjZXJ0aWZpZXMgdGhhdCB0byIsImNlcnRpZmllcyB0aGF0IHRvIHRoZSIsInRoZSBiZXN0IG9mIGhpcyIsImJlc3Qgb2YgaGlzIGtub3dsZWRnZSIsIm9mIGhpcyBrbm93bGVkZ2UgdGhlIiwiaGlzIGtub3dsZWRnZSB0aGUgd29yayIsImtub3dsZWRnZSB0aGUgd29yayBvZiIsIm9mIGF1dGhvcnNoaXAgaWRlbnRpZmllZCBpcyIsImF1dGhvcnNoaXAgaWRlbnRpZmllZCBpcyBpbiIsImlkZW50aWZpZWQgaXMgaW4gdGhlIiwiaXMgaW4gdGhlIHB1YmxpYyIsInRoZSBwdWJsaWMgZG9tYWluIG9mIiwicHVibGljIGRvbWFpbiBvZiB0aGUiLCJkb21haW4gb2YgdGhlIGNvdW50cnkiLCJvZiB0aGUgY291bnRyeSBmcm9tIiwidGhlIGNvdW50cnkgZnJvbSB3aGljaCIsImNvdW50cnkgZnJvbSB3aGljaCB0aGUiLCJmcm9tIHdoaWNoIHRoZSB3b3JrIiwidGhlIHdvcmsgaXMgcHVibGlzaGVkIiwid29yayBpcyBwdWJsaXNoZWQgb3IiLCJpcyBwdWJsaXNoZWQgb3IgYiIsInB1Ymxpc2hlZCBvciBiIGhlcmVieSIsIm9yIGIgaGVyZWJ5IGRlZGljYXRlcyIsImIgaGVyZWJ5IGRlZGljYXRlcyB3aGF0ZXZlciIsImhlcmVieSBkZWRpY2F0ZXMgd2hhdGV2ZXIgY29weXJpZ2h0IiwiZGVkaWNhdGVzIHdoYXRldmVyIGNvcHlyaWdodCB0aGUiLCJ3aGF0ZXZlciBjb3B5cmlnaHQgdGhlIGRlZGljYXRvcnMiLCJjb3B5cmlnaHQgdGhlIGRlZGljYXRvcnMgaG9sZHMiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ3JlYXRpdmUgQ29tbW9ucyBMZWdhbCBDb2RlXG5cbkNDMCAxLjAgVW5pdmVyc2FsIENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERPQ1VNRU5UIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gXCJBUy1JU1wiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBVU0UgT0YgVEhJUyBET0NVTUVOVCBPUiBUSEUgSU5GT1JNQVRJT04gT1IgV09SS1MgUFJPVklERUQgSEVSRVVOREVSLCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBUSEUgVVNFIE9GIFRISVMgRE9DVU1FTlQgT1IgVEhFIElORk9STUFUSU9OIE9SIFdPUktTIFBST1ZJREVEIEhFUkVVTkRFUi5cblxuU3RhdGVtZW50IG9mIFB1cnBvc2VcblxuVGhlIGxhd3Mgb2YgbW9zdCBqdXJpc2RpY3Rpb25zIHRocm91Z2hvdXQgdGhlIHdvcmxkIGF1dG9tYXRpY2FsbHkgY29uZmVyIGV4Y2x1c2l2ZSBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIChkZWZpbmVkIGJlbG93KSB1cG9uIHRoZSBjcmVhdG9yIGFuZCBzdWJzZXF1ZW50IG93bmVyKHMpIChlYWNoIGFuZCBhbGwsIGFuIFwib3duZXJcIikgb2YgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwIGFuZC9vciBhIGRhdGFiYXNlIChlYWNoLCBhIFwiV29ya1wiKS5cblxuQ2VydGFpbiBvd25lcnMgd2lzaCB0byBwZXJtYW5lbnRseSByZWxpbnF1aXNoIHRob3NlIHJpZ2h0cyB0byBhIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbnRyaWJ1dGluZyB0byBhIGNvbW1vbnMgb2YgY3JlYXRpdmUsIGN1bHR1cmFsIGFuZCBzY2llbnRpZmljIHdvcmtzIChcIkNvbW1vbnNcIikgdGhhdCB0aGUgcHVibGljIGNhbiByZWxpYWJseSBhbmQgd2l0aG91dCBmZWFyIG9mIGxhdGVyIGNsYWltcyBvZiBpbmZyaW5nZW1lbnQgYnVpbGQgdXBvbiwgbW9kaWZ5LCBpbmNvcnBvcmF0ZSBpbiBvdGhlciB3b3JrcywgcmV1c2UgYW5kIHJlZGlzdHJpYnV0ZSBhcyBmcmVlbHkgYXMgcG9zc2libGUgaW4gYW55IGZvcm0gd2hhdHNvZXZlciBhbmQgZm9yIGFueSBwdXJwb3NlcywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBjb21tZXJjaWFsIHB1cnBvc2VzLiBUaGVzZSBvd25lcnMgbWF5IGNvbnRyaWJ1dGUgdG8gdGhlIENvbW1vbnMgdG8gcHJvbW90ZSB0aGUgaWRlYWwgb2YgYSBmcmVlIGN1bHR1cmUgYW5kIHRoZSBmdXJ0aGVyIHByb2R1Y3Rpb24gb2YgY3JlYXRpdmUsIGN1bHR1cmFsIGFuZCBzY2llbnRpZmljIHdvcmtzLCBvciB0byBnYWluIHJlcHV0YXRpb24gb3IgZ3JlYXRlciBkaXN0cmlidXRpb24gZm9yIHRoZWlyIFdvcmsgaW4gcGFydCB0aHJvdWdoIHRoZSB1c2UgYW5kIGVmZm9ydHMgb2Ygb3RoZXJzLlxuXG5Gb3IgdGhlc2UgYW5kL29yIG90aGVyIHB1cnBvc2VzIGFuZCBtb3RpdmF0aW9ucywgYW5kIHdpdGhvdXQgYW55IGV4cGVjdGF0aW9uIG9mIGFkZGl0aW9uYWwgY29uc2lkZXJhdGlvbiBvciBjb21wZW5zYXRpb24sIHRoZSBwZXJzb24gYXNzb2NpYXRpbmcgQ0MwIHdpdGggYSBXb3JrICh0aGUgXCJBZmZpcm1lclwiKSwgdG8gdGhlIGV4dGVudCB0aGF0IGhlIG9yIHNoZSBpcyBhbiBvd25lciBvZiBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZSBXb3JrLCB2b2x1bnRhcmlseSBlbGVjdHMgdG8gYXBwbHkgQ0MwIHRvIHRoZSBXb3JrIGFuZCBwdWJsaWNseSBkaXN0cmlidXRlIHRoZSBXb3JrIHVuZGVyIGl0cyB0ZXJtcywgd2l0aCBrbm93bGVkZ2Ugb2YgaGlzIG9yIGhlciBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZSBXb3JrIGFuZCB0aGUgbWVhbmluZyBhbmQgaW50ZW5kZWQgbGVnYWwgZWZmZWN0IG9mIENDMCBvbiB0aG9zZSByaWdodHMuXG5cbiAgIDEuIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMuIEEgV29yayBtYWRlIGF2YWlsYWJsZSB1bmRlciBDQzAgbWF5IGJlIHByb3RlY3RlZCBieSBjb3B5cmlnaHQgYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIChcIkNvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHNcIikuIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgdGhlIGZvbGxvd2luZzpcblxuICAgICAgaS4gdGhlIHJpZ2h0IHRvIHJlcHJvZHVjZSwgYWRhcHQsIGRpc3RyaWJ1dGUsIHBlcmZvcm0sIGRpc3BsYXksIGNvbW11bmljYXRlLCBhbmQgdHJhbnNsYXRlIGEgV29yaztcblxuICAgICAgaWkuIG1vcmFsIHJpZ2h0cyByZXRhaW5lZCBieSB0aGUgb3JpZ2luYWwgYXV0aG9yKHMpIGFuZC9vciBwZXJmb3JtZXIocyk7XG5cbiAgICAgIGlpaS4gcHVibGljaXR5IGFuZCBwcml2YWN5IHJpZ2h0cyBwZXJ0YWluaW5nIHRvIGEgcGVyc29uJ3MgaW1hZ2Ugb3IgbGlrZW5lc3MgZGVwaWN0ZWQgaW4gYSBXb3JrO1xuXG4gICAgICBpdi4gcmlnaHRzIHByb3RlY3RpbmcgYWdhaW5zdCB1bmZhaXIgY29tcGV0aXRpb24gaW4gcmVnYXJkcyB0byBhIFdvcmssIHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIGluIHBhcmFncmFwaCA0KGEpLCBiZWxvdztcblxuICAgICAgdi4gcmlnaHRzIHByb3RlY3RpbmcgdGhlIGV4dHJhY3Rpb24sIGRpc3NlbWluYXRpb24sIHVzZSBhbmQgcmV1c2Ugb2YgZGF0YSBpbiBhIFdvcms7XG5cbiAgICAgIHZpLiBkYXRhYmFzZSByaWdodHMgKHN1Y2ggYXMgdGhvc2UgYXJpc2luZyB1bmRlciBEaXJlY3RpdmUgOTYvOS9FQyBvZiB0aGUgRXVyb3BlYW4gUGFybGlhbWVudCBhbmQgb2YgdGhlIENvdW5jaWwgb2YgMTEgTWFyY2ggMTk5NiBvbiB0aGUgbGVnYWwgcHJvdGVjdGlvbiBvZiBkYXRhYmFzZXMsIGFuZCB1bmRlciBhbnkgbmF0aW9uYWwgaW1wbGVtZW50YXRpb24gdGhlcmVvZiwgaW5jbHVkaW5nIGFueSBhbWVuZGVkIG9yIHN1Y2Nlc3NvciB2ZXJzaW9uIG9mIHN1Y2ggZGlyZWN0aXZlKTsgYW5kXG5cbiAgICAgIHZpaS4gb3RoZXIgc2ltaWxhciwgZXF1aXZhbGVudCBvciBjb3JyZXNwb25kaW5nIHJpZ2h0cyB0aHJvdWdob3V0IHRoZSB3b3JsZCBiYXNlZCBvbiBhcHBsaWNhYmxlIGxhdyBvciB0cmVhdHksIGFuZCBhbnkgbmF0aW9uYWwgaW1wbGVtZW50YXRpb25zIHRoZXJlb2YuXG5cbiAgIDIuIFdhaXZlci4gVG8gdGhlIGdyZWF0ZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnksIGJ1dCBub3QgaW4gY29udHJhdmVudGlvbiBvZiwgYXBwbGljYWJsZSBsYXcsIEFmZmlybWVyIGhlcmVieSBvdmVydGx5LCBmdWxseSwgcGVybWFuZW50bHksIGlycmV2b2NhYmx5IGFuZCB1bmNvbmRpdGlvbmFsbHkgd2FpdmVzLCBhYmFuZG9ucywgYW5kIHN1cnJlbmRlcnMgYWxsIG9mIEFmZmlybWVyJ3MgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBhbmQgYXNzb2NpYXRlZCBjbGFpbXMgYW5kIGNhdXNlcyBvZiBhY3Rpb24sIHdoZXRoZXIgbm93IGtub3duIG9yIHVua25vd24gKGluY2x1ZGluZyBleGlzdGluZyBhcyB3ZWxsIGFzIGZ1dHVyZSBjbGFpbXMgYW5kIGNhdXNlcyBvZiBhY3Rpb24pLCBpbiB0aGUgV29yayAoaSkgaW4gYWxsIHRlcnJpdG9yaWVzIHdvcmxkd2lkZSwgKGlpKSBmb3IgdGhlIG1heGltdW0gZHVyYXRpb24gcHJvdmlkZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgdHJlYXR5IChpbmNsdWRpbmcgZnV0dXJlIHRpbWUgZXh0ZW5zaW9ucyksIChpaWkpIGluIGFueSBjdXJyZW50IG9yIGZ1dHVyZSBtZWRpdW0gYW5kIGZvciBhbnkgbnVtYmVyIG9mIGNvcGllcywgYW5kIChpdikgZm9yIGFueSBwdXJwb3NlIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gY29tbWVyY2lhbCwgYWR2ZXJ0aXNpbmcgb3IgcHJvbW90aW9uYWwgcHVycG9zZXMgKHRoZSBcIldhaXZlclwiKS4gQWZmaXJtZXIgbWFrZXMgdGhlIFdhaXZlciBmb3IgdGhlIGJlbmVmaXQgb2YgZWFjaCBtZW1iZXIgb2YgdGhlIHB1YmxpYyBhdCBsYXJnZSBhbmQgdG8gdGhlIGRldHJpbWVudCBvZiBBZmZpcm1lcidzIGhlaXJzIGFuZCBzdWNjZXNzb3JzLCBmdWxseSBpbnRlbmRpbmcgdGhhdCBzdWNoIFdhaXZlciBzaGFsbCBub3QgYmUgc3ViamVjdCB0byByZXZvY2F0aW9uLCByZXNjaXNzaW9uLCBjYW5jZWxsYXRpb24sIHRlcm1pbmF0aW9uLCBvciBhbnkgb3RoZXIgbGVnYWwgb3IgZXF1aXRhYmxlIGFjdGlvbiB0byBkaXNydXB0IHRoZSBxdWlldCBlbmpveW1lbnQgb2YgdGhlIFdvcmsgYnkgdGhlIHB1YmxpYyBhcyBjb250ZW1wbGF0ZWQgYnkgQWZmaXJtZXIncyBleHByZXNzIFN0YXRlbWVudCBvZiBQdXJwb3NlLlxuXG4gICAzLiBQdWJsaWMgTGljZW5zZSBGYWxsYmFjay4gU2hvdWxkIGFueSBwYXJ0IG9mIHRoZSBXYWl2ZXIgZm9yIGFueSByZWFzb24gYmUganVkZ2VkIGxlZ2FsbHkgaW52YWxpZCBvciBpbmVmZmVjdGl2ZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgdGhlbiB0aGUgV2FpdmVyIHNoYWxsIGJlIHByZXNlcnZlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIHRha2luZyBpbnRvIGFjY291bnQgQWZmaXJtZXIncyBleHByZXNzIFN0YXRlbWVudCBvZiBQdXJwb3NlLiBJbiBhZGRpdGlvbiwgdG8gdGhlIGV4dGVudCB0aGUgV2FpdmVyIGlzIHNvIGp1ZGdlZCBBZmZpcm1lciBoZXJlYnkgZ3JhbnRzIHRvIGVhY2ggYWZmZWN0ZWQgcGVyc29uIGEgcm95YWx0eS1mcmVlLCBub24gdHJhbnNmZXJhYmxlLCBub24gc3VibGljZW5zYWJsZSwgbm9uIGV4Y2x1c2l2ZSwgaXJyZXZvY2FibGUgYW5kIHVuY29uZGl0aW9uYWwgbGljZW5zZSB0byBleGVyY2lzZSBBZmZpcm1lcidzIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW4gdGhlIFdvcmsgKGkpIGluIGFsbCB0ZXJyaXRvcmllcyB3b3JsZHdpZGUsIChpaSkgZm9yIHRoZSBtYXhpbXVtIGR1cmF0aW9uIHByb3ZpZGVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIHRyZWF0eSAoaW5jbHVkaW5nIGZ1dHVyZSB0aW1lIGV4dGVuc2lvbnMpLCAoaWlpKSBpbiBhbnkgY3VycmVudCBvciBmdXR1cmUgbWVkaXVtIGFuZCBmb3IgYW55IG51bWJlciBvZiBjb3BpZXMsIGFuZCAoaXYpIGZvciBhbnkgcHVycG9zZSB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGNvbW1lcmNpYWwsIGFkdmVydGlzaW5nIG9yIHByb21vdGlvbmFsIHB1cnBvc2VzICh0aGUgXCJMaWNlbnNlXCIpLiBUaGUgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIENDMCB3YXMgYXBwbGllZCBieSBBZmZpcm1lciB0byB0aGUgV29yay4gU2hvdWxkIGFueSBwYXJ0IG9mIHRoZSBMaWNlbnNlIGZvciBhbnkgcmVhc29uIGJlIGp1ZGdlZCBsZWdhbGx5IGludmFsaWQgb3IgaW5lZmZlY3RpdmUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIHN1Y2ggcGFydGlhbCBpbnZhbGlkaXR5IG9yIGluZWZmZWN0aXZlbmVzcyBzaGFsbCBub3QgaW52YWxpZGF0ZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBMaWNlbnNlLCBhbmQgaW4gc3VjaCBjYXNlIEFmZmlybWVyIGhlcmVieSBhZmZpcm1zIHRoYXQgaGUgb3Igc2hlIHdpbGwgbm90IChpKSBleGVyY2lzZSBhbnkgb2YgaGlzIG9yIGhlciByZW1haW5pbmcgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBpbiB0aGUgV29yayBvciAoaWkpIGFzc2VydCBhbnkgYXNzb2NpYXRlZCBjbGFpbXMgYW5kIGNhdXNlcyBvZiBhY3Rpb24gd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBpbiBlaXRoZXIgY2FzZSBjb250cmFyeSB0byBBZmZpcm1lcidzIGV4cHJlc3MgU3RhdGVtZW50IG9mIFB1cnBvc2UuXG5cbiAgIDQuIExpbWl0YXRpb25zIGFuZCBEaXNjbGFpbWVycy5cblxuICAgICAgYS4gTm8gdHJhZGVtYXJrIG9yIHBhdGVudCByaWdodHMgaGVsZCBieSBBZmZpcm1lciBhcmUgd2FpdmVkLCBhYmFuZG9uZWQsIHN1cnJlbmRlcmVkLCBsaWNlbnNlZCBvciBvdGhlcndpc2UgYWZmZWN0ZWQgYnkgdGhpcyBkb2N1bWVudC5cblxuICAgICAgYi4gQWZmaXJtZXIgb2ZmZXJzIHRoZSBXb3JrIGFzLWlzIGFuZCBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgb3Igd2FycmFudGllcyBvZiBhbnkga2luZCBjb25jZXJuaW5nIHRoZSBXb3JrLCBleHByZXNzLCBpbXBsaWVkLCBzdGF0dXRvcnkgb3Igb3RoZXJ3aXNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHdhcnJhbnRpZXMgb2YgdGl0bGUsIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIG5vbiBpbmZyaW5nZW1lbnQsIG9yIHRoZSBhYnNlbmNlIG9mIGxhdGVudCBvciBvdGhlciBkZWZlY3RzLCBhY2N1cmFjeSwgb3IgdGhlIHByZXNlbnQgb3IgYWJzZW5jZSBvZiBlcnJvcnMsIHdoZXRoZXIgb3Igbm90IGRpc2NvdmVyYWJsZSwgYWxsIHRvIHRoZSBncmVhdGVzdCBleHRlbnQgcGVybWlzc2libGUgdW5kZXIgYXBwbGljYWJsZSBsYXcuXG5cbiAgICAgIGMuIEFmZmlybWVyIGRpc2NsYWltcyByZXNwb25zaWJpbGl0eSBmb3IgY2xlYXJpbmcgcmlnaHRzIG9mIG90aGVyIHBlcnNvbnMgdGhhdCBtYXkgYXBwbHkgdG8gdGhlIFdvcmsgb3IgYW55IHVzZSB0aGVyZW9mLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwZXJzb24ncyBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZSBXb3JrLiBGdXJ0aGVyLCBBZmZpcm1lciBkaXNjbGFpbXMgcmVzcG9uc2liaWxpdHkgZm9yIG9idGFpbmluZyBhbnkgbmVjZXNzYXJ5IGNvbnNlbnRzLCBwZXJtaXNzaW9ucyBvciBvdGhlciByaWdodHMgcmVxdWlyZWQgZm9yIGFueSB1c2Ugb2YgdGhlIFdvcmsuXG5cbiAgICAgIGQuIEFmZmlybWVyIHVuZGVyc3RhbmRzIGFuZCBhY2tub3dsZWRnZXMgdGhhdCBDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgZG9jdW1lbnQgYW5kIGhhcyBubyBkdXR5IG9yIG9ibGlnYXRpb24gd2l0aCByZXNwZWN0IHRvIHRoaXMgQ0MwIG9yIHVzZSBvZiB0aGUgV29yay4gIl0sImxpY2Vuc2VJZHMiOlsiQ0MwLTEuMCJdLCJrZXl3b3JkcyI6WyJjcmVhdGl2ZSBjb21tb25zIGxlZ2FsIiwiY29tbW9ucyBsZWdhbCBjb2RlIiwibGVnYWwgY29kZSBjYzAiLCJjb2RlIGNjMCAxIiwiY2MwIDEgMCIsIjEgMCB1bml2ZXJzYWwiLCIwIHVuaXZlcnNhbCBjcmVhdGl2ZSIsInVuaXZlcnNhbCBjcmVhdGl2ZSBjb21tb25zIiwicmVnYXJkaW5nIHRoZSB1c2UiLCJwcm92aWRlZCBoZXJldW5kZXIgYW5kIiwiaGVyZXVuZGVyIGFuZCBkaXNjbGFpbXMiLCJwcm92aWRlZCBoZXJldW5kZXIgc3RhdGVtZW50IiwiaGVyZXVuZGVyIHN0YXRlbWVudCBvZiIsIm9mIHB1cnBvc2UgdGhlIiwicHVycG9zZSB0aGUgbGF3cyIsImxhd3Mgb2YgbW9zdCIsIm9mIG1vc3QganVyaXNkaWN0aW9ucyIsIm1vc3QganVyaXNkaWN0aW9ucyB0aHJvdWdob3V0IiwianVyaXNkaWN0aW9ucyB0aHJvdWdob3V0IHRoZSIsInRoZSB3b3JsZCBhdXRvbWF0aWNhbGx5Iiwid29ybGQgYXV0b21hdGljYWxseSBjb25mZXIiLCJhdXRvbWF0aWNhbGx5IGNvbmZlciBleGNsdXNpdmUiLCJjb25mZXIgZXhjbHVzaXZlIGNvcHlyaWdodCIsImV4Y2x1c2l2ZSBjb3B5cmlnaHQgYW5kIiwicmVsYXRlZCByaWdodHMgZGVmaW5lZCIsImRlZmluZWQgYmVsb3cgdXBvbiIsImJlbG93IHVwb24gdGhlIiwidXBvbiB0aGUgY3JlYXRvciIsInRoZSBjcmVhdG9yIGFuZCIsImNyZWF0b3IgYW5kIHN1YnNlcXVlbnQiLCJhbmQgc3Vic2VxdWVudCBvd25lciIsInN1YnNlcXVlbnQgb3duZXIgcyIsIm93bmVyIHMgZWFjaCIsInMgZWFjaCBhbmQiLCJlYWNoIGFuZCBhbGwiLCJhbmQgYWxsIGFuIiwiYWxsIGFuIG93bmVyIiwib3duZXIgb2YgYW4iLCJvZiBhbiBvcmlnaW5hbCIsImF1dGhvcnNoaXAgYW5kIG9yIiwib3IgYSBkYXRhYmFzZSIsImEgZGF0YWJhc2UgZWFjaCIsImRhdGFiYXNlIGVhY2ggYSIsImVhY2ggYSB3b3JrIiwiYSB3b3JrIGNlcnRhaW4iLCJ3b3JrIGNlcnRhaW4gb3duZXJzIiwiY2VydGFpbiBvd25lcnMgd2lzaCIsIm93bmVycyB3aXNoIHRvIiwid2lzaCB0byBwZXJtYW5lbnRseSIsInRvIHBlcm1hbmVudGx5IHJlbGlucXVpc2giLCJwZXJtYW5lbnRseSByZWxpbnF1aXNoIHRob3NlIiwicmVsaW5xdWlzaCB0aG9zZSByaWdodHMiLCJ0aG9zZSByaWdodHMgdG8iLCJwdXJwb3NlIG9mIGNvbnRyaWJ1dGluZyIsIm9mIGNvbnRyaWJ1dGluZyB0byIsImNvbnRyaWJ1dGluZyB0byBhIiwidG8gYSBjb21tb25zIiwiYSBjb21tb25zIG9mIiwiY29tbW9ucyBvZiBjcmVhdGl2ZSIsInNjaWVudGlmaWMgd29ya3MgY29tbW9ucyIsIndvcmtzIGNvbW1vbnMgdGhhdCIsImNvbW1vbnMgdGhhdCB0aGUiLCJwdWJsaWMgY2FuIHJlbGlhYmx5IiwiY2FuIHJlbGlhYmx5IGFuZCIsInJlbGlhYmx5IGFuZCB3aXRob3V0IiwiYW5kIHdpdGhvdXQgZmVhciIsIndpdGhvdXQgZmVhciBvZiIsImZlYXIgb2YgbGF0ZXIiLCJvZiBsYXRlciBjbGFpbXMiLCJsYXRlciBjbGFpbXMgb2YiLCJvZiBpbmZyaW5nZW1lbnQgYnVpbGQiLCJpbmZyaW5nZW1lbnQgYnVpbGQgdXBvbiIsImJ1aWxkIHVwb24gbW9kaWZ5IiwidXBvbiBtb2RpZnkgaW5jb3Jwb3JhdGUiLCJtb2RpZnkgaW5jb3Jwb3JhdGUgaW4iLCJpbmNvcnBvcmF0ZSBpbiBvdGhlciIsImluIG90aGVyIHdvcmtzIiwib3RoZXIgd29ya3MgcmV1c2UiLCJ3b3JrcyByZXVzZSBhbmQiLCJyZXVzZSBhbmQgcmVkaXN0cmlidXRlIiwiYW5kIHJlZGlzdHJpYnV0ZSBhcyIsInJlZGlzdHJpYnV0ZSBhcyBmcmVlbHkiLCJhcyBmcmVlbHkgYXMiLCJmcmVlbHkgYXMgcG9zc2libGUiLCJhcyBwb3NzaWJsZSBpbiIsInBvc3NpYmxlIGluIGFueSIsImZvcm0gd2hhdHNvZXZlciBhbmQiLCJ3aGF0c29ldmVyIGFuZCBmb3IiLCJhbnkgcHVycG9zZXMgaW5jbHVkaW5nIiwicHVycG9zZXMgaW5jbHVkaW5nIHdpdGhvdXQiLCJsaW1pdGF0aW9uIGNvbW1lcmNpYWwgcHVycG9zZXMiLCJjb21tZXJjaWFsIHB1cnBvc2VzIHRoZXNlIiwicHVycG9zZXMgdGhlc2Ugb3duZXJzIiwidGhlc2Ugb3duZXJzIG1heSIsIm93bmVycyBtYXkgY29udHJpYnV0ZSIsIm1heSBjb250cmlidXRlIHRvIiwiY29udHJpYnV0ZSB0byB0aGUiLCJ0byB0aGUgY29tbW9ucyIsInRoZSBjb21tb25zIHRvIiwiY29tbW9ucyB0byBwcm9tb3RlIiwicHJvbW90ZSB0aGUgaWRlYWwiLCJ0aGUgaWRlYWwgb2YiLCJpZGVhbCBvZiBhIiwiYSBmcmVlIGN1bHR1cmUiLCJmcmVlIGN1bHR1cmUgYW5kIiwiY3VsdHVyZSBhbmQgdGhlIiwiYW5kIHRoZSBmdXJ0aGVyIiwidGhlIGZ1cnRoZXIgcHJvZHVjdGlvbiIsImZ1cnRoZXIgcHJvZHVjdGlvbiBvZiIsInByb2R1Y3Rpb24gb2YgY3JlYXRpdmUiLCJzY2llbnRpZmljIHdvcmtzIG9yIiwid29ya3Mgb3IgdG8iLCJvciB0byBnYWluIiwidG8gZ2FpbiByZXB1dGF0aW9uIiwiZ2FpbiByZXB1dGF0aW9uIG9yIiwicmVwdXRhdGlvbiBvciBncmVhdGVyIiwib3IgZ3JlYXRlciBkaXN0cmlidXRpb24iLCJncmVhdGVyIGRpc3RyaWJ1dGlvbiBmb3IiLCJkaXN0cmlidXRpb24gZm9yIHRoZWlyIiwidGhlaXIgd29yayBpbiIsIndvcmsgaW4gcGFydCIsImluIHBhcnQgdGhyb3VnaCIsInBhcnQgdGhyb3VnaCB0aGUiLCJ1c2UgYW5kIGVmZm9ydHMiLCJhbmQgZWZmb3J0cyBvZiIsImVmZm9ydHMgb2Ygb3RoZXJzIiwib3RoZXJzIGZvciB0aGVzZSIsImZvciB0aGVzZSBhbmQiLCJ0aGVzZSBhbmQgb3IiLCJvciBvdGhlciBwdXJwb3NlcyIsIm90aGVyIHB1cnBvc2VzIGFuZCIsInB1cnBvc2VzIGFuZCBtb3RpdmF0aW9ucyIsImFuZCBtb3RpdmF0aW9ucyBhbmQiLCJtb3RpdmF0aW9ucyBhbmQgd2l0aG91dCIsIndpdGhvdXQgYW55IGV4cGVjdGF0aW9uIiwiYW55IGV4cGVjdGF0aW9uIG9mIiwiZXhwZWN0YXRpb24gb2YgYWRkaXRpb25hbCIsIm9mIGFkZGl0aW9uYWwgY29uc2lkZXJhdGlvbiIsImFkZGl0aW9uYWwgY29uc2lkZXJhdGlvbiBvciIsImNvbnNpZGVyYXRpb24gb3IgY29tcGVuc2F0aW9uIiwib3IgY29tcGVuc2F0aW9uIHRoZSIsImNvbXBlbnNhdGlvbiB0aGUgcGVyc29uIiwidGhlIHBlcnNvbiBhc3NvY2lhdGluZyIsInBlcnNvbiBhc3NvY2lhdGluZyBjYzAiLCJhc3NvY2lhdGluZyBjYzAgd2l0aCIsImNjMCB3aXRoIGEiLCJhIHdvcmsgdGhlIiwid29yayB0aGUgYWZmaXJtZXIiLCJ0aGUgYWZmaXJtZXIgdG8iLCJleHRlbnQgdGhhdCBoZSIsInNoZSBpcyBhbiIsImlzIGFuIG93bmVyIiwib3duZXIgb2YgY29weXJpZ2h0IiwidGhlIHdvcmsgdm9sdW50YXJpbHkiLCJ3b3JrIHZvbHVudGFyaWx5IGVsZWN0cyIsInZvbHVudGFyaWx5IGVsZWN0cyB0byIsImVsZWN0cyB0byBhcHBseSIsInRvIGFwcGx5IGNjMCIsImFwcGx5IGNjMCB0byIsImNjMCB0byB0aGUiLCJ3b3JrIGFuZCBwdWJsaWNseSIsImFuZCBwdWJsaWNseSBkaXN0cmlidXRlIiwicHVibGljbHkgZGlzdHJpYnV0ZSB0aGUiLCJ3b3JrIHVuZGVyIGl0cyIsInRlcm1zIHdpdGgga25vd2xlZGdlIiwid2l0aCBrbm93bGVkZ2Ugb2YiLCJrbm93bGVkZ2Ugb2YgaGlzIiwib3IgaGVyIGNvcHlyaWdodCIsImhlciBjb3B5cmlnaHQgYW5kIiwiYW5kIHRoZSBtZWFuaW5nIiwidGhlIG1lYW5pbmcgYW5kIiwibWVhbmluZyBhbmQgaW50ZW5kZWQiLCJhbmQgaW50ZW5kZWQgbGVnYWwiLCJpbnRlbmRlZCBsZWdhbCBlZmZlY3QiLCJlZmZlY3Qgb2YgY2MwIiwib2YgY2MwIG9uIiwiY2MwIG9uIHRob3NlIiwib24gdGhvc2UgcmlnaHRzIiwidGhvc2UgcmlnaHRzIDEiLCJyaWdodHMgMSBjb3B5cmlnaHQiLCIxIGNvcHlyaWdodCBhbmQiLCJyZWxhdGVkIHJpZ2h0cyBhIiwicmlnaHRzIGEgd29yayIsImEgd29yayBtYWRlIiwid29yayBtYWRlIGF2YWlsYWJsZSIsImF2YWlsYWJsZSB1bmRlciBjYzAiLCJ1bmRlciBjYzAgbWF5IiwiY2MwIG1heSBiZSIsIm1heSBiZSBwcm90ZWN0ZWQiLCJiZSBwcm90ZWN0ZWQgYnkiLCJhbmQgcmVsYXRlZCBvciIsInJlbGF0ZWQgb3IgbmVpZ2hib3JpbmciLCJvciBuZWlnaGJvcmluZyByaWdodHMiLCJuZWlnaGJvcmluZyByaWdodHMgY29weXJpZ2h0IiwicmVsYXRlZCByaWdodHMgY29weXJpZ2h0IiwicmVsYXRlZCByaWdodHMgaW5jbHVkZSIsInJpZ2h0cyBpbmNsdWRlIGJ1dCIsImZvbGxvd2luZyBpIHRoZSIsImkgdGhlIHJpZ2h0IiwidG8gcmVwcm9kdWNlIGFkYXB0Il19LHsibGljZW5zZVRleHRzIjpbIkNPTU1PTiBERVZFTE9QTUVOVCBBTkQgRElTVFJJQlVUSU9OIExJQ0VOU0UgKENEREwpXG5cblZlcnNpb24gMS4wXG5cbiAgIDEuIERlZmluaXRpb25zLlxuXG4gICAgICAxLjEuIFwiQ29udHJpYnV0b3JcIiBtZWFucyBlYWNoIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4yLiBcIkNvbnRyaWJ1dG9yIFZlcnNpb25cIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciAoaWYgYW55KSwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLlxuXG4gICAgICAxLjMuIFwiQ292ZXJlZCBTb2Z0d2FyZVwiIG1lYW5zIChhKSB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIG9yIChiKSBNb2RpZmljYXRpb25zLCBvciAoYykgdGhlIGNvbWJpbmF0aW9uIG9mIGZpbGVzIGNvbnRhaW5pbmcgT3JpZ2luYWwgU29mdHdhcmUgd2l0aCBmaWxlcyBjb250YWluaW5nIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi5cblxuICAgICAgMS40LiBcIkV4ZWN1dGFibGVcIiBtZWFucyB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLlxuXG4gICAgICAxLjUuIFwiSW5pdGlhbCBEZXZlbG9wZXJcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBmaXJzdCBtYWtlcyBPcmlnaW5hbCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjYuIFwiTGFyZ2VyIFdvcmtcIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBTb2Z0d2FyZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS43LiBcIkxpY2Vuc2VcIiBtZWFucyB0aGlzIGRvY3VtZW50LlxuXG4gICAgICAxLjguIFwiTGljZW5zYWJsZVwiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLlxuXG4gICAgICAxLjkuIFwiTW9kaWZpY2F0aW9uc1wiIG1lYW5zIHRoZSBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBmb3JtIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nOlxuXG4gICAgICAgICBBLiBBbnkgZmlsZSB0aGF0IHJlc3VsdHMgZnJvbSBhbiBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSBvciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIFNvZnR3YXJlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnM7XG5cbiAgICAgICAgIEIuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb247IG9yXG5cbiAgICAgICAgIEMuIEFueSBuZXcgZmlsZSB0aGF0IGlzIGNvbnRyaWJ1dGVkIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjEwLiBcIk9yaWdpbmFsIFNvZnR3YXJlXCIgbWVhbnMgdGhlIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0gb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB0aGF0IGlzIG9yaWdpbmFsbHkgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjExLiBcIlBhdGVudCBDbGFpbXNcIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci5cblxuICAgICAgMS4xMi4gXCJTb3VyY2UgQ29kZVwiIG1lYW5zIChhKSB0aGUgY29tbW9uIGZvcm0gb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSBpbiB3aGljaCBtb2RpZmljYXRpb25zIGFyZSBtYWRlIGFuZCAoYikgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIGluIG9yIHdpdGggc3VjaCBjb2RlLlxuXG4gICAgICAxLjEzLiBcIllvdVwiIChvciBcIllvdXJcIikgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBcIllvdVwiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcImNvbnRyb2xcIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgMi4gTGljZW5zZSBHcmFudHMuXG5cbiAgICAgIDIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LlxuXG4gICAgICBDb25kaXRpb25lZCB1cG9uIFlvdXIgY29tcGxpYW5jZSB3aXRoIFNlY3Rpb24gMy4xIGJlbG93IGFuZCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlOlxuXG4gICAgICAgICAoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAob3IgcG9ydGlvbnMgdGhlcmVvZiksIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgU29mdHdhcmUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChvciBwb3J0aW9ucyB0aGVyZW9mKS5cblxuICAgICAgICAgKGMpIFRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgb3Igb3RoZXJ3aXNlIG1ha2VzIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAgICAoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAoMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBvciAoMikgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiAoaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuXG5cbiAgICAgIDIuMi4gQ29udHJpYnV0b3IgR3JhbnQuXG5cbiAgICAgIENvbmRpdGlvbmVkIHVwb24gWW91ciBjb21wbGlhbmNlIHdpdGggU2VjdGlvbiAzLjEgYmVsb3cgYW5kIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlOlxuXG4gICAgICAgICAoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBTb2Z0d2FyZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAoMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgKDIpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS5cblxuICAgICAgICAgKGMpIFRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QgZGlzdHJpYnV0ZXMgb3Igb3RoZXJ3aXNlIG1ha2VzIHRoZSBNb2RpZmljYXRpb25zIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LlxuXG4gICAgICAgICAoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAoMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgKDIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiwgb3IgKGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yICgzKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIFNvZnR3YXJlIGluIHRoZSBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yLlxuXG4gICAzLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuXG5cbiAgICAgIDMuMS4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLlxuXG4gICAgICBBbnkgQ292ZXJlZCBTb2Z0d2FyZSB0aGF0IFlvdSBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIGF2YWlsYWJsZSBpbiBFeGVjdXRhYmxlIGZvcm0gbXVzdCBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gYW5kIHRoYXQgU291cmNlIENvZGUgZm9ybSBtdXN0IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgZm9ybSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBZb3UgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUuIFlvdSBtdXN0IGluZm9ybSByZWNpcGllbnRzIG9mIGFueSBzdWNoIENvdmVyZWQgU29mdHdhcmUgaW4gRXhlY3V0YWJsZSBmb3JtIGFzIHRvIGhvdyB0aGV5IGNhbiBvYnRhaW4gc3VjaCBDb3ZlcmVkIFNvZnR3YXJlIGluIFNvdXJjZSBDb2RlIGZvcm0gaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLlxuXG4gICAgICAzLjIuIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIFRoZSBNb2RpZmljYXRpb25zIHRoYXQgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IHJlcHJlc2VudCB0aGF0IFlvdSBiZWxpZXZlIFlvdXIgTW9kaWZpY2F0aW9ucyBhcmUgWW91ciBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgWW91IGhhdmUgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDMuMy4gUmVxdWlyZWQgTm90aWNlcy5cblxuICAgICAgWW91IG11c3QgaW5jbHVkZSBhIG5vdGljZSBpbiBlYWNoIG9mIFlvdXIgTW9kaWZpY2F0aW9ucyB0aGF0IGlkZW50aWZpZXMgWW91IGFzIHRoZSBDb250cmlidXRvciBvZiB0aGUgTW9kaWZpY2F0aW9uLiBZb3UgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIENvdmVyZWQgU29mdHdhcmUsIG9yIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBvciBhbnkgZGVzY3JpcHRpdmUgdGV4dCBnaXZpbmcgYXR0cmlidXRpb24gdG8gYW55IENvbnRyaWJ1dG9yIG9yIHRoZSBJbml0aWFsIERldmVsb3Blci5cblxuICAgICAgMy40LiBBcHBsaWNhdGlvbiBvZiBBZGRpdGlvbmFsIFRlcm1zLlxuXG4gICAgICBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBDb3ZlcmVkIFNvZnR3YXJlIGluIFNvdXJjZSBDb2RlIGZvcm0gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBTb2Z0d2FyZS4gSG93ZXZlciwgeW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjUuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLlxuXG4gICAgICBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgZm9ybSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSBmb3JtIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCdzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgZm9ybSBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgU29mdHdhcmUgaW4gRXhlY3V0YWJsZSBmb3JtIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UsIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci5cblxuICAgICAgMy42LiBMYXJnZXIgV29ya3MuXG5cbiAgICAgIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgU29mdHdhcmUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLlxuXG4gICA0LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS5cblxuICAgICAgNC4xLiBOZXcgVmVyc2lvbnMuXG5cbiAgICAgIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaXMgdGhlIGluaXRpYWwgbGljZW5zZSBzdGV3YXJkIGFuZCBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBFeGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiA0LjMsIG5vIG9uZSBvdGhlciB0aGFuIHRoZSBsaWNlbnNlIHN0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBMaWNlbnNlLlxuXG4gICAgICA0LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuXG5cbiAgICAgIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHVuZGVyIHdoaWNoIFlvdSBvcmlnaW5hbGx5IHJlY2VpdmVkIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLiBJZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW5jbHVkZXMgYSBub3RpY2UgaW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHByb2hpYml0aW5nIGl0IGZyb20gYmVpbmcgZGlzdHJpYnV0ZWQgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtdXN0IGRpc3RyaWJ1dGUgYW5kIG1ha2UgdGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZCB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4gT3RoZXJ3aXNlLCBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IHRoZSBsaWNlbnNlIHN0ZXdhcmQuXG5cbiAgICAgIDQuMy4gTW9kaWZpZWQgVmVyc2lvbnMuXG5cbiAgICAgIFdoZW4gWW91IGFyZSBhbiBJbml0aWFsIERldmVsb3BlciBhbmQgWW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGxpY2Vuc2UgZm9yIFlvdXIgT3JpZ2luYWwgU29mdHdhcmUsIFlvdSBtYXkgY3JlYXRlIGFuZCB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpZiBZb3U6IChhKSByZW5hbWUgdGhlIGxpY2Vuc2UgYW5kIHJlbW92ZSBhbnkgcmVmZXJlbmNlcyB0byB0aGUgbmFtZSBvZiB0aGUgbGljZW5zZSBzdGV3YXJkIChleGNlcHQgdG8gbm90ZSB0aGF0IHRoZSBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpOyBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlLlxuXG4gICA1LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLlxuXG4gICBDT1ZFUkVEIFNPRlRXQVJFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBTT0ZUV0FSRSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBTT0ZUV0FSRSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIFNPRlRXQVJFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIFNPRlRXQVJFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuXG5cbiAgIDYuIFRFUk1JTkFUSU9OLlxuXG4gICAgICA2LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuXG5cbiAgICAgIDYuMi4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyIG9yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGFzc2VydCBzdWNoIGNsYWltIGlzIHJlZmVycmVkIHRvIGFzIFwiUGFydGljaXBhbnRcIikgYWxsZWdpbmcgdGhhdCB0aGUgUGFydGljaXBhbnQgU29mdHdhcmUgKG1lYW5pbmcgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gd2hlcmUgdGhlIFBhcnRpY2lwYW50IGlzIGEgQ29udHJpYnV0b3Igb3IgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHdoZXJlIHRoZSBQYXJ0aWNpcGFudCBpcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIpIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCwgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIChpZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaXMgbm90IHRoZSBQYXJ0aWNpcGFudCkgYW5kIGFsbCBDb250cmlidXRvcnMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHkgYW5kIGF1dG9tYXRpY2FsbHkgYXQgdGhlIGV4cGlyYXRpb24gb2Ygc3VjaCA2MCBkYXkgbm90aWNlIHBlcmlvZCwgdW5sZXNzIGlmIHdpdGhpbiBzdWNoIDYwIGRheSBwZXJpb2QgWW91IHdpdGhkcmF3IFlvdXIgY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBQYXJ0aWNpcGFudCBTb2Z0d2FyZSBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQgZWl0aGVyIHVuaWxhdGVyYWxseSBvciBwdXJzdWFudCB0byBhIHdyaXR0ZW4gYWdyZWVtZW50IHdpdGggUGFydGljaXBhbnQuXG5cbiAgICAgIDYuMy4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDYuMSBvciA2LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlcyB0aGF0IGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gKGV4Y2x1ZGluZyBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSBieSBhbnkgZGlzdHJpYnV0b3IpIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uXG5cbiAgIDcuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLlxuXG4gICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBTT0ZUV0FSRSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NUIFBST0ZJVFMsIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDguIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuXG5cbiAgIFRoZSBDb3ZlcmVkIFNvZnR3YXJlIGlzIGEgXCJjb21tZXJjaWFsIGl0ZW0sXCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mIFwiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZVwiIChhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBhdCA0OCBDLkYuUi4gwqcgMjUyLjIyNy03MDE0KGEpKDEpKSBhbmQgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb25cIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgU29mdHdhcmUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLiBUaGlzIFUuUy4gR292ZXJubWVudCBSaWdodHMgY2xhdXNlIGlzIGluIGxpZXUgb2YsIGFuZCBzdXBlcnNlZGVzLCBhbnkgb3RoZXIgRkFSLCBERkFSLCBvciBvdGhlciBjbGF1c2Ugb3IgcHJvdmlzaW9uIHRoYXQgYWRkcmVzc2VzIEdvdmVybm1lbnQgcmlnaHRzIGluIGNvbXB1dGVyIHNvZnR3YXJlIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgOS4gTUlTQ0VMTEFORU9VUy5cblxuICAgVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3IG9mIHRoZSBqdXJpc2RpY3Rpb24gc3BlY2lmaWVkIGluIGEgbm90aWNlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgc3VjaCBqdXJpc2RpY3Rpb24ncyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gQW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgY291cnRzIGxvY2F0ZWQgaW4gdGhlIGp1cmlzZGljdGlvbiBhbmQgdmVudWUgc3BlY2lmaWVkIGluIGEgbm90aWNlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuIFlvdSBhZ3JlZSB0aGF0IFlvdSBhbG9uZSBhcmUgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2Ugd2l0aCB0aGUgVW5pdGVkIFN0YXRlcyBleHBvcnQgYWRtaW5pc3RyYXRpb24gcmVndWxhdGlvbnMgKGFuZCB0aGUgZXhwb3J0IGNvbnRyb2wgbGF3cyBhbmQgcmVndWxhdGlvbiBvZiBhbnkgb3RoZXIgY291bnRyaWVzKSB3aGVuIFlvdSB1c2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlIGFueSBDb3ZlcmVkIFNvZnR3YXJlLlxuXG4gICAxMC4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy5cblxuICAgQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LiJdLCJsaWNlbnNlSWRzIjpbIkNEREwtMS4wIl0sImtleXdvcmRzIjpbIm1pY3Jvc3lzdGVtcyBpbmMgaXMiLCJpbmMgaXMgdGhlIiwiNiAzIGluIiwiY2RkbCB2ZXJzaW9uIDEgMCIsInN1biBtaWNyb3N5c3RlbXMgaW5jIGlzIiwibWljcm9zeXN0ZW1zIGluYyBpcyB0aGUiLCJpbmMgaXMgdGhlIGluaXRpYWwiLCJwYXJ0aWNpcGFudCA2IDMgaW4iLCI2IDMgaW4gdGhlIiwibGljZW5zZSBjZGRsIHZlcnNpb24gMSAwIiwiY2RkbCB2ZXJzaW9uIDEgMCAxIiwiNCAxIG5ldyB2ZXJzaW9ucyBzdW4iLCJ2ZXJzaW9ucyBzdW4gbWljcm9zeXN0ZW1zIGluYyBpcyIsInN1biBtaWNyb3N5c3RlbXMgaW5jIGlzIHRoZSIsIm1pY3Jvc3lzdGVtcyBpbmMgaXMgdGhlIGluaXRpYWwiLCJpbmMgaXMgdGhlIGluaXRpYWwgbGljZW5zZSIsIndpdGggcGFydGljaXBhbnQgNiAzIGluIiwicGFydGljaXBhbnQgNiAzIGluIHRoZSIsIjYgMyBpbiB0aGUgZXZlbnQiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ09NTU9OIERFVkVMT1BNRU5UIEFORCBESVNUUklCVVRJT04gTElDRU5TRSAoQ0RETClcblxuVmVyc2lvbiAxLjFcblxuICAgMS4gRGVmaW5pdGlvbnMuXG5cbiAgICAgIDEuMS4gXCJDb250cmlidXRvclwiIG1lYW5zIGVhY2ggaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLlxuXG4gICAgICAxLjIuIFwiQ29udHJpYnV0b3IgVmVyc2lvblwiIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yIChpZiBhbnkpLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuXG5cbiAgICAgIDEuMy4gXCJDb3ZlcmVkIFNvZnR3YXJlXCIgbWVhbnMgKGEpIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgb3IgKGIpIE1vZGlmaWNhdGlvbnMsIG9yIChjKSB0aGUgY29tYmluYXRpb24gb2YgZmlsZXMgY29udGFpbmluZyBPcmlnaW5hbCBTb2Z0d2FyZSB3aXRoIGZpbGVzIGNvbnRhaW5pbmcgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLlxuXG4gICAgICAxLjQuIFwiRXhlY3V0YWJsZVwiIG1lYW5zIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuXG5cbiAgICAgIDEuNS4gXCJJbml0aWFsIERldmVsb3BlclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IGZpcnN0IG1ha2VzIE9yaWdpbmFsIFNvZnR3YXJlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuNi4gXCJMYXJnZXIgV29ya1wiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIFNvZnR3YXJlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjcuIFwiTGljZW5zZVwiIG1lYW5zIHRoaXMgZG9jdW1lbnQuXG5cbiAgICAgIDEuOC4gXCJMaWNlbnNhYmxlXCIgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uXG5cbiAgICAgIDEuOS4gXCJNb2RpZmljYXRpb25zXCIgbWVhbnMgdGhlIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0gb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgICAgIEEuIEFueSBmaWxlIHRoYXQgcmVzdWx0cyBmcm9tIGFuIGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgU29mdHdhcmUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucztcblxuICAgICAgICAgQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbjsgb3JcblxuICAgICAgICAgQy4gQW55IG5ldyBmaWxlIHRoYXQgaXMgY29udHJpYnV0ZWQgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuMTAuIFwiT3JpZ2luYWwgU29mdHdhcmVcIiBtZWFucyB0aGUgU291cmNlIENvZGUgYW5kIEV4ZWN1dGFibGUgZm9ybSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHRoYXQgaXMgb3JpZ2luYWxseSByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuMTEuIFwiUGF0ZW50IENsYWltc1wiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLlxuXG4gICAgICAxLjEyLiBcIlNvdXJjZSBDb2RlXCIgbWVhbnMgKGEpIHRoZSBjb21tb24gZm9ybSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIGluIHdoaWNoIG1vZGlmaWNhdGlvbnMgYXJlIG1hZGUgYW5kIChiKSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgaW4gb3Igd2l0aCBzdWNoIGNvZGUuXG5cbiAgICAgIDEuMTMuIFwiWW91XCIgKG9yIFwiWW91clwiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbFwiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAyLiBMaWNlbnNlIEdyYW50cy5cblxuICAgICAgMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuXG5cbiAgICAgIENvbmRpdGlvbmVkIHVwb24gWW91ciBjb21wbGlhbmNlIHdpdGggU2VjdGlvbiAzLjEgYmVsb3cgYW5kIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2U6XG5cbiAgICAgICAgIChhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZFxuXG4gICAgICAgICAoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBTb2Z0d2FyZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLlxuXG4gICAgICAgICAoYykgVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBvciBvdGhlcndpc2UgbWFrZXMgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgICAgIChkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6ICgxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIG9yICgyKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IChpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgb3IgKGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy5cblxuICAgICAgMi4yLiBDb250cmlidXRvciBHcmFudC5cblxuICAgICAgQ29uZGl0aW9uZWQgdXBvbiBZb3VyIGNvbXBsaWFuY2Ugd2l0aCBTZWN0aW9uIDMuMSBiZWxvdyBhbmQgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2U6XG5cbiAgICAgICAgIChhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIFNvZnR3YXJlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZFxuXG4gICAgICAgICAoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6ICgxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAoMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLlxuXG4gICAgICAgICAoYykgVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBkaXN0cmlidXRlcyBvciBvdGhlcndpc2UgbWFrZXMgdGhlIE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuXG5cbiAgICAgICAgIChkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6ICgxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAoMikgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiAoaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uLCBvciAoaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgKDMpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgU29mdHdhcmUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuXG5cbiAgIDMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy5cblxuICAgICAgMy4xLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuXG5cbiAgICAgIEFueSBDb3ZlcmVkIFNvZnR3YXJlIHRoYXQgWW91IGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlIGluIEV4ZWN1dGFibGUgZm9ybSBtdXN0IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSBhbmQgdGhhdCBTb3VyY2UgQ29kZSBmb3JtIG11c3QgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBmb3JtIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIFlvdSBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIGF2YWlsYWJsZS4gWW91IG11c3QgaW5mb3JtIHJlY2lwaWVudHMgb2YgYW55IHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSBpbiBFeGVjdXRhYmxlIGZvcm0gYXMgdG8gaG93IHRoZXkgY2FuIG9idGFpbiBzdWNoIENvdmVyZWQgU29mdHdhcmUgaW4gU291cmNlIENvZGUgZm9ybSBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuXG5cbiAgICAgIDMuMi4gTW9kaWZpY2F0aW9ucy5cblxuICAgICAgVGhlIE1vZGlmaWNhdGlvbnMgdGhhdCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgcmVwcmVzZW50IHRoYXQgWW91IGJlbGlldmUgWW91ciBNb2RpZmljYXRpb25zIGFyZSBZb3VyIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBZb3UgaGF2ZSBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgMy4zLiBSZXF1aXJlZCBOb3RpY2VzLlxuXG4gICAgICBZb3UgbXVzdCBpbmNsdWRlIGEgbm90aWNlIGluIGVhY2ggb2YgWW91ciBNb2RpZmljYXRpb25zIHRoYXQgaWRlbnRpZmllcyBZb3UgYXMgdGhlIENvbnRyaWJ1dG9yIG9mIHRoZSBNb2RpZmljYXRpb24uIFlvdSBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSwgb3IgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIG9yIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGdpdmluZyBhdHRyaWJ1dGlvbiB0byBhbnkgQ29udHJpYnV0b3Igb3IgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLlxuXG4gICAgICAzLjQuIEFwcGxpY2F0aW9uIG9mIEFkZGl0aW9uYWwgVGVybXMuXG5cbiAgICAgIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IENvdmVyZWQgU29mdHdhcmUgaW4gU291cmNlIENvZGUgZm9ybSB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIFNvZnR3YXJlLiBIb3dldmVyLCB5b3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuXG5cbiAgICAgIDMuNS4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuXG5cbiAgICAgIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSBmb3JtIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIGZvcm0gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSBmb3JtIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpbiBFeGVjdXRhYmxlIGZvcm0gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSwgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjYuIExhcmdlciBXb3Jrcy5cblxuICAgICAgWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBTb2Z0d2FyZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgU29mdHdhcmUuXG5cbiAgIDQuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLlxuXG4gICAgICA0LjEuIE5ldyBWZXJzaW9ucy5cblxuICAgICAgT3JhY2xlIGlzIHRoZSBpbml0aWFsIGxpY2Vuc2Ugc3Rld2FyZCBhbmQgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gRXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gNC4zLCBubyBvbmUgb3RoZXIgdGhhbiB0aGUgbGljZW5zZSBzdGV3YXJkIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgNC4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLlxuXG4gICAgICBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgdGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZCB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4gSWYgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluY2x1ZGVzIGEgbm90aWNlIGluIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBwcm9oaWJpdGluZyBpdCBmcm9tIGJlaW5nIGRpc3RyaWJ1dGVkIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1bmRlciBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbXVzdCBkaXN0cmlidXRlIGFuZCBtYWtlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgdW5kZXIgd2hpY2ggWW91IG9yaWdpbmFsbHkgcmVjZWl2ZWQgdGhlIENvdmVyZWQgU29mdHdhcmUuIE90aGVyd2lzZSwgWW91IG1heSBhbHNvIGNob29zZSB0byB1c2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgdGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSB0aGUgbGljZW5zZSBzdGV3YXJkLlxuXG4gICAgICA0LjMuIE1vZGlmaWVkIFZlcnNpb25zLlxuXG4gICAgICBXaGVuIFlvdSBhcmUgYW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIFlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBsaWNlbnNlIGZvciBZb3VyIE9yaWdpbmFsIFNvZnR3YXJlLCBZb3UgbWF5IGNyZWF0ZSBhbmQgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaWYgWW91OiAoYSkgcmVuYW1lIHRoZSBsaWNlbnNlIGFuZCByZW1vdmUgYW55IHJlZmVyZW5jZXMgdG8gdGhlIG5hbWUgb2YgdGhlIGxpY2Vuc2Ugc3Rld2FyZCAoZXhjZXB0IHRvIG5vdGUgdGhhdCB0aGUgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKTsgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZS5cblxuICAgNS4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS5cblxuICAgQ09WRVJFRCBTT0ZUV0FSRSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgU09GVFdBUkUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgU09GVFdBUkUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBTT0ZUV0FSRSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBTT0ZUV0FSRSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLlxuXG4gICA2LiBURVJNSU5BVElPTi5cblxuICAgICAgNi4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLlxuXG4gICAgICA2LjIuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3BlciBvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBhc3NlcnQgc3VjaCBjbGFpbSBpcyByZWZlcnJlZCB0byBhcyBcIlBhcnRpY2lwYW50XCIpIGFsbGVnaW5nIHRoYXQgdGhlIFBhcnRpY2lwYW50IFNvZnR3YXJlIChtZWFuaW5nIHRoZSBDb250cmlidXRvciBWZXJzaW9uIHdoZXJlIHRoZSBQYXJ0aWNpcGFudCBpcyBhIENvbnRyaWJ1dG9yIG9yIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSB3aGVyZSB0aGUgUGFydGljaXBhbnQgaXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyKSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQsIHRoZSBJbml0aWFsIERldmVsb3BlciAoaWYgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGlzIG5vdCB0aGUgUGFydGljaXBhbnQpIGFuZCBhbGwgQ29udHJpYnV0b3JzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5IGFuZCBhdXRvbWF0aWNhbGx5IGF0IHRoZSBleHBpcmF0aW9uIG9mIHN1Y2ggNjAgZGF5IG5vdGljZSBwZXJpb2QsIHVubGVzcyBpZiB3aXRoaW4gc3VjaCA2MCBkYXkgcGVyaW9kIFlvdSB3aXRoZHJhdyBZb3VyIGNsYWltIHdpdGggcmVzcGVjdCB0byB0aGUgUGFydGljaXBhbnQgU29mdHdhcmUgYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50IGVpdGhlciB1bmlsYXRlcmFsbHkgb3IgcHVyc3VhbnQgdG8gYSB3cml0dGVuIGFncmVlbWVudCB3aXRoIFBhcnRpY2lwYW50LlxuXG4gICAgICA2LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCB0aGUgUGFydGljaXBhbnQgU29mdHdhcmUgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLlxuXG4gICAgICA2LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA2LjEgb3IgNi4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZXMgdGhhdCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIChleGNsdWRpbmcgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgYnkgYW55IGRpc3RyaWJ1dG9yKSBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLlxuXG4gICA3LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS5cblxuICAgVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgU09GVFdBUkUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS5cblxuICAgOC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy5cblxuICAgVGhlIENvdmVyZWQgU29mdHdhcmUgaXMgYSBcImNvbW1lcmNpYWwgaXRlbSxcIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlXCIgKGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGF0IDQ4IEMuRi5SLiDCpyAyNTIuMjI3LTcwMTQoYSkoMSkpIGFuZCBcImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvblwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBTb2Z0d2FyZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uIFRoaXMgVS5TLiBHb3Zlcm5tZW50IFJpZ2h0cyBjbGF1c2UgaXMgaW4gbGlldSBvZiwgYW5kIHN1cGVyc2VkZXMsIGFueSBvdGhlciBGQVIsIERGQVIsIG9yIG90aGVyIGNsYXVzZSBvciBwcm92aXNpb24gdGhhdCBhZGRyZXNzZXMgR292ZXJubWVudCByaWdodHMgaW4gY29tcHV0ZXIgc29mdHdhcmUgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICA5LiBNSVNDRUxMQU5FT1VTLlxuXG4gICBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXcgb2YgdGhlIGp1cmlzZGljdGlvbiBzcGVjaWZpZWQgaW4gYSBub3RpY2UgY29udGFpbmVkIHdpdGhpbiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBzdWNoIGp1cmlzZGljdGlvbidzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBBbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBjb3VydHMgbG9jYXRlZCBpbiB0aGUganVyaXNkaWN0aW9uIGFuZCB2ZW51ZSBzcGVjaWZpZWQgaW4gYSBub3RpY2UgY29udGFpbmVkIHdpdGhpbiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4gWW91IGFncmVlIHRoYXQgWW91IGFsb25lIGFyZSByZXNwb25zaWJsZSBmb3IgY29tcGxpYW5jZSB3aXRoIHRoZSBVbml0ZWQgU3RhdGVzIGV4cG9ydCBhZG1pbmlzdHJhdGlvbiByZWd1bGF0aW9ucyAoYW5kIHRoZSBleHBvcnQgY29udHJvbCBsYXdzIGFuZCByZWd1bGF0aW9uIG9mIGFueSBvdGhlciBjb3VudHJpZXMpIHdoZW4gWW91IHVzZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUgYW55IENvdmVyZWQgU29mdHdhcmUuXG5cbiAgIDEwLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLlxuXG4gICBBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuXG5cbk5PVElDRSBQVVJTVUFOVCBUTyBTRUNUSU9OIDkgT0YgVEhFIENPTU1PTiBERVZFTE9QTUVOVCBBTkQgRElTVFJJQlVUSU9OIExJQ0VOU0UgKENEREwpXG5cblRoZSBjb2RlIHJlbGVhc2VkIHVuZGVyIHRoZSBDRERMIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhIChleGNsdWRpbmcgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMpLiBBbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSBhbmQgdGhlIHN0YXRlIGNvdXJ0cyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEuIl0sImxpY2Vuc2VJZHMiOlsiQ0RETC0xLjEiXSwia2V5d29yZHMiOlsibmV3IHZlcnNpb25zIG9yYWNsZSIsInZlcnNpb25zIG9yYWNsZSBpcyIsIm9yYWNsZSBpcyB0aGUiLCI2IDMgaWYiLCJwYXJ0aWNpcGFudCBzb2Z0d2FyZSBkaXJlY3RseSIsIm9yIGxpY2Vuc2UgNiIsIm9mIGxpYWJpbGl0eSBub3RpY2UiLCJsaWFiaWxpdHkgbm90aWNlIHB1cnN1YW50Iiwibm90aWNlIHB1cnN1YW50IHRvIiwidG8gc2VjdGlvbiA5Iiwic2VjdGlvbiA5IG9mIiwiOSBvZiB0aGUiLCJ0aGUgY29tbW9uIGRldmVsb3BtZW50IiwibGljZW5zZSBjZGRsIHRoZSIsImNkZGwgdGhlIGNvZGUiLCJ0aGUgY29kZSByZWxlYXNlZCIsImNvZGUgcmVsZWFzZWQgdW5kZXIiLCJ1bmRlciB0aGUgY2RkbCIsInRoZSBjZGRsIHNoYWxsIiwiY2RkbCBzaGFsbCBiZSIsInRoZSBzdGF0ZSBjb3VydHMiLCJjZGRsIHZlcnNpb24gMSAxIiwiMSBuZXcgdmVyc2lvbnMgb3JhY2xlIiwibmV3IHZlcnNpb25zIG9yYWNsZSBpcyIsInZlcnNpb25zIG9yYWNsZSBpcyB0aGUiLCJvcmFjbGUgaXMgdGhlIGluaXRpYWwiLCJwYXJ0aWNpcGFudCA2IDMgaWYiLCI2IDMgaWYgeW91IiwidGhlIHBhcnRpY2lwYW50IHNvZnR3YXJlIGRpcmVjdGx5IiwicGFydGljaXBhbnQgc29mdHdhcmUgZGlyZWN0bHkgb3IiLCJwYXltZW50IG9yIGxpY2Vuc2UgNiIsIm9yIGxpY2Vuc2UgNiA0IiwibGljZW5zZSA2IDQgaW4iLCJhZG1pc3Npb24gb2YgbGlhYmlsaXR5IG5vdGljZSIsIm9mIGxpYWJpbGl0eSBub3RpY2UgcHVyc3VhbnQiLCJsaWFiaWxpdHkgbm90aWNlIHB1cnN1YW50IHRvIiwibm90aWNlIHB1cnN1YW50IHRvIHNlY3Rpb24iLCJwdXJzdWFudCB0byBzZWN0aW9uIDkiLCJ0byBzZWN0aW9uIDkgb2YiLCJzZWN0aW9uIDkgb2YgdGhlIiwiOSBvZiB0aGUgY29tbW9uIiwib2YgdGhlIGNvbW1vbiBkZXZlbG9wbWVudCIsInRoZSBjb21tb24gZGV2ZWxvcG1lbnQgYW5kIiwiZGlzdHJpYnV0aW9uIGxpY2Vuc2UgY2RkbCB0aGUiLCJsaWNlbnNlIGNkZGwgdGhlIGNvZGUiLCJjZGRsIHRoZSBjb2RlIHJlbGVhc2VkIiwidGhlIGNvZGUgcmVsZWFzZWQgdW5kZXIiLCJjb2RlIHJlbGVhc2VkIHVuZGVyIHRoZSIsInJlbGVhc2VkIHVuZGVyIHRoZSBjZGRsIiwidW5kZXIgdGhlIGNkZGwgc2hhbGwiLCJ0aGUgY2RkbCBzaGFsbCBiZSIsImNkZGwgc2hhbGwgYmUgZ292ZXJuZWQiLCJjYWxpZm9ybmlhIGFuZCB0aGUgc3RhdGUiLCJhbmQgdGhlIHN0YXRlIGNvdXJ0cyIsInRoZSBzdGF0ZSBjb3VydHMgb2YiLCJzdGF0ZSBjb3VydHMgb2YgdGhlIiwibGljZW5zZSBjZGRsIHZlcnNpb24gMSAxIiwiY2RkbCB2ZXJzaW9uIDEgMSAxIiwiNCAxIG5ldyB2ZXJzaW9ucyBvcmFjbGUiLCIxIG5ldyB2ZXJzaW9ucyBvcmFjbGUgaXMiLCJuZXcgdmVyc2lvbnMgb3JhY2xlIGlzIHRoZSIsInZlcnNpb25zIG9yYWNsZSBpcyB0aGUgaW5pdGlhbCIsIm9yYWNsZSBpcyB0aGUgaW5pdGlhbCBsaWNlbnNlIiwid2l0aCBwYXJ0aWNpcGFudCA2IDMgaWYiLCJwYXJ0aWNpcGFudCA2IDMgaWYgeW91IiwiNiAzIGlmIHlvdSBhc3NlcnQiLCJhZ2FpbnN0IHBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgdGhlIiwidGhhdCB0aGUgcGFydGljaXBhbnQgc29mdHdhcmUgZGlyZWN0bHkiLCJ0aGUgcGFydGljaXBhbnQgc29mdHdhcmUgZGlyZWN0bHkgb3IiLCJwYXJ0aWNpcGFudCBzb2Z0d2FyZSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IiwiYW55IHBheW1lbnQgb3IgbGljZW5zZSA2IiwicGF5bWVudCBvciBsaWNlbnNlIDYgNCIsIm9yIGxpY2Vuc2UgNiA0IGluIiwibGljZW5zZSA2IDQgaW4gdGhlIiwiYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkgbm90aWNlIiwiYWRtaXNzaW9uIG9mIGxpYWJpbGl0eSBub3RpY2UgcHVyc3VhbnQiLCJvZiBsaWFiaWxpdHkgbm90aWNlIHB1cnN1YW50IHRvIiwibGlhYmlsaXR5IG5vdGljZSBwdXJzdWFudCB0byBzZWN0aW9uIiwibm90aWNlIHB1cnN1YW50IHRvIHNlY3Rpb24gOSIsInB1cnN1YW50IHRvIHNlY3Rpb24gOSBvZiIsInRvIHNlY3Rpb24gOSBvZiB0aGUiLCJzZWN0aW9uIDkgb2YgdGhlIGNvbW1vbiIsIjkgb2YgdGhlIGNvbW1vbiBkZXZlbG9wbWVudCIsIm9mIHRoZSBjb21tb24gZGV2ZWxvcG1lbnQgYW5kIiwidGhlIGNvbW1vbiBkZXZlbG9wbWVudCBhbmQgZGlzdHJpYnV0aW9uIiwiYW5kIGRpc3RyaWJ1dGlvbiBsaWNlbnNlIGNkZGwgdGhlIiwiZGlzdHJpYnV0aW9uIGxpY2Vuc2UgY2RkbCB0aGUgY29kZSIsImxpY2Vuc2UgY2RkbCB0aGUgY29kZSByZWxlYXNlZCIsImNkZGwgdGhlIGNvZGUgcmVsZWFzZWQgdW5kZXIiLCJ0aGUgY29kZSByZWxlYXNlZCB1bmRlciB0aGUiLCJjb2RlIHJlbGVhc2VkIHVuZGVyIHRoZSBjZGRsIiwicmVsZWFzZWQgdW5kZXIgdGhlIGNkZGwgc2hhbGwiLCJ1bmRlciB0aGUgY2RkbCBzaGFsbCBiZSIsInRoZSBjZGRsIHNoYWxsIGJlIGdvdmVybmVkIiwiY2RkbCBzaGFsbCBiZSBnb3Zlcm5lZCBieSIsImRpc3RyaWN0IG9mIGNhbGlmb3JuaWEgYW5kIHRoZSIsIm9mIGNhbGlmb3JuaWEgYW5kIHRoZSBzdGF0ZSIsImNhbGlmb3JuaWEgYW5kIHRoZSBzdGF0ZSBjb3VydHMiLCJhbmQgdGhlIHN0YXRlIGNvdXJ0cyBvZiIsInRoZSBzdGF0ZSBjb3VydHMgb2YgdGhlIiwic3RhdGUgY291cnRzIG9mIHRoZSBzdGF0ZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb21tdW5pdHkgRGF0YSBMaWNlbnNlIEFncmVlbWVudCAtIFBlcm1pc3NpdmUgLSBWZXJzaW9uIDEuMFxuXG5UaGlzIGlzIHRoZSBDb21tdW5pdHkgRGF0YSBMaWNlbnNlIEFncmVlbWVudCAtIFBlcm1pc3NpdmUsIFZlcnNpb24gMS4wIChcIkFncmVlbWVudFwiKS4gRGF0YSBpcyBwcm92aWRlZCB0byBZb3UgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYnkgZWFjaCBvZiB0aGUgRGF0YSBQcm92aWRlcnMuIFlvdXIgZXhlcmNpc2Ugb2YgYW55IG9mIHRoZSByaWdodHMgYW5kIHBlcm1pc3Npb25zIGdyYW50ZWQgYmVsb3cgY29uc3RpdHV0ZXMgWW91ciBhY2NlcHRhbmNlIGFuZCBhZ3JlZW1lbnQgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LlxuXG5UaGUgYmVuZWZpdHMgdGhhdCBlYWNoIERhdGEgUHJvdmlkZXIgcmVjZWl2ZXMgZnJvbSBtYWtpbmcgRGF0YSBhdmFpbGFibGUgYW5kIHRoYXQgWW91IHJlY2VpdmUgZnJvbSBEYXRhIG9yIG90aGVyd2lzZSB1bmRlciB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzaGFsbCBiZSBkZWVtZWQgc3VmZmljaWVudCBjb25zaWRlcmF0aW9uIGZvciB0aGUgZm9ybWF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LiBBY2NvcmRpbmdseSwgRGF0YSBQcm92aWRlcihzKSBhbmQgWW91ICh0aGUgXCJQYXJ0aWVzXCIpIGFncmVlIGFzIGZvbGxvd3M6XG5cbiAgIFNlY3Rpb24gMS4gRGVmaW5pdGlvbnNcblxuICAgICAgMS4xIFwiQWRkXCIgbWVhbnMgdG8gc3VwcGxlbWVudCBEYXRhIHdpdGggWW91ciBvd24gb3Igc29tZW9uZSBlbHNlJ3MgRGF0YSwgcmVzdWx0aW5nIGluIFlvdXIgXCJBZGRpdGlvbnMuXCIgQWRkaXRpb25zIGRvIG5vdCBpbmNsdWRlIFJlc3VsdHMuXG5cbiAgICAgIDEuMiBcIkNvbXB1dGF0aW9uYWwgVXNlXCIgbWVhbnMgWW91ciBhbmFseXNpcyAodGhyb3VnaCB0aGUgdXNlIG9mIGNvbXB1dGF0aW9uYWwgZGV2aWNlcyBvciBvdGhlcndpc2UpIG9yIG90aGVyIGludGVycHJldGF0aW9uIG9mIERhdGEuIEJ5IHdheSBvZiBleGFtcGxlIGFuZCBub3QgbGltaXRhdGlvbiwgXCJDb21wdXRhdGlvbmFsIFVzZVwiIGluY2x1ZGVzIHRoZSBhcHBsaWNhdGlvbiBvZiBhbnkgY29tcHV0YXRpb25hbCBhbmFseXRpY2FsIHRlY2huaXF1ZSwgdGhlIHB1cnBvc2Ugb2Ygd2hpY2ggaXMgdGhlIGFuYWx5c2lzIG9mIGFueSBEYXRhIGluIGRpZ2l0YWwgZm9ybSB0byBnZW5lcmF0ZSBpbmZvcm1hdGlvbiBhYm91dCBEYXRhIHN1Y2ggYXMgcGF0dGVybnMsIHRyZW5kcywgY29ycmVsYXRpb25zLCBpbmZlcmVuY2VzLCBpbnNpZ2h0cyBhbmQgYXR0cmlidXRlcy5cblxuICAgICAgMS4zIFwiRGF0YVwiIG1lYW5zIHRoZSBpbmZvcm1hdGlvbiAoaW5jbHVkaW5nIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgaW1hZ2VzIG9yIHRleHQpLCBjb2xsZWN0aXZlbHkgb3IgaW5kaXZpZHVhbGx5LCB3aGV0aGVyIGNyZWF0ZWQgb3IgZ2F0aGVyZWQgYnkgYSBEYXRhIFByb3ZpZGVyIG9yIGFuIEVudGl0eSBhY3Rpbmcgb24gaXRzIGJlaGFsZiwgdG8gd2hpY2ggcmlnaHRzIGFyZSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LlxuXG4gICAgICAxLjQgXCJEYXRhIFByb3ZpZGVyXCIgbWVhbnMgYW55IEVudGl0eSAoaW5jbHVkaW5nIGFueSBlbXBsb3llZSBvciBjb250cmFjdG9yIG9mIHN1Y2ggRW50aXR5IGF1dGhvcml6ZWQgdG8gUHVibGlzaCBEYXRhIG9uIGJlaGFsZiBvZiBzdWNoIEVudGl0eSkgdGhhdCBQdWJsaXNoZXMgRGF0YSB1bmRlciB0aGlzIEFncmVlbWVudCBwcmlvciB0byBZb3VyIFJlY2VpdmluZyBpdC5cblxuICAgICAgMS41IFwiRW5oYW5jZWQgRGF0YVwiIG1lYW5zIHRoZSBzdWJzZXQgb2YgRGF0YSB0aGF0IFlvdSBQdWJsaXNoIGFuZCB0aGF0IGlzIGNvbXBvc2VkIG9mIChhKSBZb3VyIEFkZGl0aW9ucyBhbmQvb3IgKGIpIE1vZGlmaWNhdGlvbnMgdG8gRGF0YSBZb3UgaGF2ZSByZWNlaXZlZCB1bmRlciB0aGlzIEFncmVlbWVudC5cblxuICAgICAgMS42IFwiRW50aXR5XCIgbWVhbnMgYW55IG5hdHVyYWwgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiB0aGF0IGV4aXN0cyB1bmRlciB0aGUgbGF3cyBvZiB0aGUganVyaXNkaWN0aW9uIGluIHdoaWNoIGl0IGlzIG9yZ2FuaXplZCwgdG9nZXRoZXIgd2l0aCBhbGwgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcImNvbnRyb2xcIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCAoYikgdGhlIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIHNlY3VyaXRpZXMsIChjKSB0aGUgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkgb3IsIChkKSB0aGUgYWJpbGl0eSB0byBhcHBvaW50LCB3aGV0aGVyIGJ5IGFncmVlbWVudCBvciByaWdodCwgdGhlIG1ham9yaXR5IG9mIGRpcmVjdG9ycyBvZiBhbiBFbnRpdHkuXG5cbiAgICAgIDEuNyBcIk1vZGlmeVwiIG1lYW5zIHRvIGRlbGV0ZSwgZXJhc2UsIGNvcnJlY3Qgb3IgcmUtYXJyYW5nZSBEYXRhLCByZXN1bHRpbmcgaW4gXCJNb2RpZmljYXRpb25zLlwiIE1vZGlmaWNhdGlvbnMgZG8gbm90IGluY2x1ZGUgUmVzdWx0cy5cblxuICAgICAgMS44IFwiUHVibGlzaFwiIG1lYW5zIHRvIG1ha2UgYWxsIG9yIGEgc3Vic2V0IG9mIERhdGEgKGluY2x1ZGluZyBZb3VyIEVuaGFuY2VkIERhdGEpIGF2YWlsYWJsZSBpbiBhbnkgbWFubmVyIHdoaWNoIGVuYWJsZXMgaXRzIFVzZSwgaW5jbHVkaW5nIGJ5IHByb3ZpZGluZyBhIGNvcHkgb24gcGh5c2ljYWwgbWVkaWEgb3IgcmVtb3RlIGFjY2Vzcy4gRm9yIGFueSBmb3JtIG9mIEVudGl0eSwgdGhhdCBpcyB0byBtYWtlIHRoZSBEYXRhIGF2YWlsYWJsZSB0byBhbnkgaW5kaXZpZHVhbCB3aG8gaXMgbm90IGVtcGxveWVkIGJ5IHRoYXQgRW50aXR5IG9yIGVuZ2FnZWQgYXMgYSBjb250cmFjdG9yIG9yIGFnZW50IHRvIHBlcmZvcm0gd29yayBvbiB0aGF0IEVudGl0eSdzIGJlaGFsZi4gQSBcIlB1YmxpY2F0aW9uXCIgb2NjdXJzIGVhY2ggdGltZSBZb3UgUHVibGlzaCBEYXRhLlxuXG4gICAgICAxLjkgXCJSZWNlaXZlXCIgb3IgXCJSZWNlaXZlc1wiIG1lYW5zIHRvIGhhdmUgYmVlbiBnaXZlbiBhY2Nlc3MgdG8gRGF0YSwgbG9jYWxseSBvciByZW1vdGVseS5cblxuICAgICAgMS4xMCBcIlJlc3VsdHNcIiBtZWFucyB0aGUgb3V0Y29tZXMgb3Igb3V0cHV0cyB0aGF0IFlvdSBvYnRhaW4gZnJvbSBZb3VyIENvbXB1dGF0aW9uYWwgVXNlIG9mIERhdGEuIFJlc3VsdHMgc2hhbGwgbm90IGluY2x1ZGUgbW9yZSB0aGFuIGEgZGUgbWluaW1pcyBwb3J0aW9uIG9mIHRoZSBEYXRhIG9uIHdoaWNoIHRoZSBDb21wdXRhdGlvbmFsIFVzZSBpcyBiYXNlZC5cblxuICAgICAgMS4xMSBcIlN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0c1wiIG1lYW5zIHJpZ2h0cywgb3RoZXIgdGhhbiBjb3B5cmlnaHQsIHJlc3VsdGluZyBmcm9tIERpcmVjdGl2ZSA5Ni85L0VDIG9mIHRoZSBFdXJvcGVhbiBQYXJsaWFtZW50IGFuZCBvZiB0aGUgQ291bmNpbCBvZiAxMSBNYXJjaCAxOTk2IG9uIHRoZSBsZWdhbCBwcm90ZWN0aW9uIG9mIGRhdGFiYXNlcywgYXMgYW1lbmRlZCBhbmQvb3Igc3VjY2VlZGVkLCBhcyB3ZWxsIGFzIG90aGVyIGVxdWl2YWxlbnQgcmlnaHRzIGFueXdoZXJlIGluIHRoZSB3b3JsZC5cblxuICAgICAgMS4xMiBcIlVzZVwiIG1lYW5zIHVzaW5nIERhdGEgKGluY2x1ZGluZyBhY2Nlc3NpbmcsIGNvcHlpbmcsIHN0dWR5aW5nLCByZXZpZXdpbmcsIGFkYXB0aW5nLCBhbmFseXppbmcsIGV2YWx1YXRpbmcsIG9yIG1ha2luZyBDb21wdXRhdGlvbmFsIFVzZSBvZiBpdCksIGVpdGhlciBieSBtYWNoaW5lcyBvciBodW1hbnMsIG9yIGEgY29tYmluYXRpb24gb2YgYm90aC5cblxuICAgICAgMS4xMyBcIllvdVwiIG9yIFwiWW91clwiIG1lYW5zIGFueSBFbnRpdHkgdGhhdCBSZWNlaXZlcyBEYXRhIHVuZGVyIHRoaXMgQWdyZWVtZW50LlxuXG4gICBTZWN0aW9uIDIuIFJpZ2h0IGFuZCBMaWNlbnNlIHRvIFVzZSBhbmQgdG8gUHVibGlzaFxuXG4gICAgICAyLjEgU3ViamVjdCB0byB0aGUgY29uZGl0aW9ucyBzZXQgZm9ydGggaW4gU2VjdGlvbiAzIG9mIHRoaXMgQWdyZWVtZW50LCBEYXRhIFByb3ZpZGVyKHMpIGhlcmVieSBncmFudChzKSB0byBZb3UgYSB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiA1KSByaWdodCB0bzogKGEpIFVzZSBEYXRhOyBhbmQgKGIpIFB1Ymxpc2ggRGF0YS5cblxuICAgICAgMi4yIFRvIHRoZSBleHRlbnQgdGhhdCB0aGUgRGF0YSBvciB0aGUgY29vcmRpbmF0aW9uLCBzZWxlY3Rpb24gb3IgYXJyYW5nZW1lbnQgb2YgRGF0YSBpcyBwcm90ZWN0ZWQgb3IgcHJvdGVjdGFibGUgdW5kZXIgY29weXJpZ2h0LCBTdWkgR2VuZXJpcyBEYXRhYmFzZSBSaWdodHMsIG9yIG90aGVyIGxhdywgRGF0YSBQcm92aWRlcihzKSBmdXJ0aGVyIGFncmVlKHMpIHRoYXQgc3VjaCBEYXRhIG9yIGNvb3JkaW5hdGlvbiwgc2VsZWN0aW9uIG9yIGFycmFuZ2VtZW50IGlzIGhlcmVieSBsaWNlbnNlZCB0byBZb3UgYW5kIHRvIGFueW9uZSBlbHNlIHdobyBSZWNlaXZlcyBEYXRhIHVuZGVyIHRoaXMgQWdyZWVtZW50IGZvciBVc2UgYW5kIFB1YmxpY2F0aW9uLCBzdWJqZWN0IHRvIHRoZSBjb25kaXRpb25zIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMgb2YgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgICAgIDIuMyBFeGNlcHQgZm9yIHRoZXNlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZXhwcmVzc2x5IGdyYW50ZWQsIG5vIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgYXJlIGdyYW50ZWQgb3Igc2hvdWxkIGJlIGltcGxpZWQuXG5cbiAgIFNlY3Rpb24gMy4gQ29uZGl0aW9ucyBvbiBSaWdodHMgR3JhbnRlZFxuXG4gICAgICAzLjEgSWYgWW91IFB1Ymxpc2ggRGF0YSBZb3UgUmVjZWl2ZSBvciBFbmhhbmNlZCBEYXRhOlxuXG4gICAgICAgICAoYSkgWW91IG1heSBkbyBzbyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UgcHJvdmlkZWQgdGhhdCBZb3UgZ2l2ZSBhbnlvbmUgd2hvIFJlY2VpdmVzIHRoZSBEYXRhIGZyb20gWW91IHRoZSB0ZXh0IG9mIHRoaXMgQWdyZWVtZW50LCB0aGUgbmFtZSBvZiB0aGlzIEFncmVlbWVudCBhbmQvb3IgYSBoeXBlcmxpbmsgb3Igb3RoZXIgbWV0aG9kIHJlYXNvbmFibHkgbGlrZWx5IHRvIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSB0ZXh0IG9mIHRoaXMgQWdyZWVtZW50OyBhbmRcblxuICAgICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBEYXRhIGZpbGVzIGNvbnRhaW5pbmcgRW5oYW5jZWQgRGF0YSB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyB0aGF0IFlvdSBoYXZlIGNoYW5nZWQgdGhvc2UgZmlsZXM7IGFuZFxuXG4gICAgICAgICAoYykgSWYgWW91IFB1Ymxpc2ggRGF0YSBZb3UgUmVjZWl2ZSwgWW91IG11c3QgcHJlc2VydmUgYWxsIGNyZWRpdCBvciBhdHRyaWJ1dGlvbiB0byB0aGUgRGF0YSBQcm92aWRlcihzKS4gU3VjaCByZXRhaW5lZCBjcmVkaXQgb3IgYXR0cmlidXRpb24gaW5jbHVkZXMgYW55IG9mIHRoZSBmb2xsb3dpbmcgdG8gdGhlIGV4dGVudCB0aGV5IGV4aXN0IGluIERhdGEgYXMgWW91IGhhdmUgUmVjZWl2ZWQgaXQ6IGxlZ2FsIG5vdGljZXMgb3IgbWV0YWRhdGE7IGlkZW50aWZpY2F0aW9uIG9mIHRoZSBEYXRhIFByb3ZpZGVyKHMpOyBvciBoeXBlcmxpbmtzIHRvIERhdGEgdG8gdGhlIGV4dGVudCBpdCBpcyBwcmFjdGljYWwgdG8gZG8gc28uXG5cbiAgICAgIDMuMiBZb3UgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiB0aGF0IEVuaGFuY2VkIERhdGEsIG9yIGZvciBhbnkgY29tYmluYXRpb24gb2YgRGF0YSBhbmQgRW5oYW5jZWQgRGF0YSBhcyBhIHdob2xlLCBwcm92aWRlZCB0aGF0IFlvdXIgVXNlIGFuZCBQdWJsaWNhdGlvbiBvZiB0aGF0IGNvbWJpbmVkIERhdGEgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGggdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS5cblxuICAgICAgMy4zIFlvdSBhbmQgZWFjaCBEYXRhIFByb3ZpZGVyIGFncmVlIHRoYXQgRW5oYW5jZWQgRGF0YSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCBhIHdvcmsgb2Ygam9pbnQgYXV0aG9yc2hpcCBieSB2aXJ0dWUgb2YgaXRzIHJlbGF0aW9uc2hpcCB0byBEYXRhIGxpY2Vuc2VkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBzaGFsbCBub3QgcmVxdWlyZSBlaXRoZXIgYW55IG9ibGlnYXRpb24gb2YgYWNjb3VudGluZyB0byBvciB0aGUgY29uc2VudCBvZiBhbnkgRGF0YSBQcm92aWRlci5cblxuICAgICAgMy40IFRoaXMgQWdyZWVtZW50IGltcG9zZXMgbm8gb2JsaWdhdGlvbnMgb3IgcmVzdHJpY3Rpb25zIG9uIFlvdXIgVXNlIG9yIFB1YmxpY2F0aW9uIG9mIFJlc3VsdHMuXG5cbiAgIFNlY3Rpb24gNC4gRGF0YSBQcm92aWRlcihzKScgUmVwcmVzZW50YXRpb25zXG5cbiAgICAgIDQuMSBFYWNoIERhdGEgUHJvdmlkZXIgcmVwcmVzZW50cyB0aGF0IHRoZSBEYXRhIFByb3ZpZGVyIGhhcyBleGVyY2lzZWQgcmVhc29uYWJsZSBjYXJlLCB0byBhc3N1cmUgdGhhdDogKGEpIHRoZSBEYXRhIGl0IFB1Ymxpc2hlcyB3YXMgY3JlYXRlZCBvciBnZW5lcmF0ZWQgYnkgaXQgb3Igd2FzIG9idGFpbmVkIGZyb20gb3RoZXJzIHdpdGggdGhlIHJpZ2h0IHRvIFB1Ymxpc2ggdGhlIERhdGEgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCAoYikgUHVibGljYXRpb24gb2Ygc3VjaCBEYXRhIGRvZXMgbm90IHZpb2xhdGUgYW55IHByaXZhY3kgb3IgY29uZmlkZW50aWFsaXR5IG9ibGlnYXRpb24gdW5kZXJ0YWtlbiBieSB0aGUgRGF0YSBQcm92aWRlci5cblxuICAgU2VjdGlvbiA1LiBUZXJtaW5hdGlvblxuXG4gICAgICA1LjEgQWxsIG9mIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHdpbGwgdGVybWluYXRlLCBhbmQgWW91ciByaWdodCB0byBSZWNlaXZlLCBVc2Ugb3IgUHVibGlzaCB0aGUgRGF0YSB3aWxsIGJlIHJldm9rZWQgb3IgbW9kaWZpZWQgaWYgWW91IG1hdGVyaWFsbHkgZmFpbCB0byBjb21wbHkgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIFlvdSBkbyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgWW91ciByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBZb3UgYWdyZWUgdG8gY2Vhc2UgUmVjZWlwdCwgVXNlIGFuZCBQdWJsaWNhdGlvbiBvZiBEYXRhLiBIb3dldmVyLCBZb3VyIG9ibGlnYXRpb25zIGFuZCBhbnkgcmlnaHRzIGFuZCBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IFlvdSB1bmRlciB0aGlzIEFncmVlbWVudCByZWxhdGluZyB0byBEYXRhIHRoYXQgWW91IFB1Ymxpc2hlZCBwcmlvciB0byBzdWNoIHRlcm1pbmF0aW9uIHdpbGwgY29udGludWUgYW5kIHN1cnZpdmUuXG5cbiAgICAgIDUuMiBJZiBZb3UgaW5zdGl0dXRlIGxpdGlnYXRpb24gYWdhaW5zdCBhIERhdGEgUHJvdmlkZXIgb3IgYW55b25lIGVsc2Ugd2hvIFJlY2VpdmVzIHRoZSBEYXRhIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBpbiBhIGxhd3N1aXQpIGJhc2VkIG9uIHRoZSBEYXRhLCBvdGhlciB0aGFuIGEgY2xhaW0gYXNzZXJ0aW5nIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudCwgdGhlbiBhbnkgcmlnaHRzIHByZXZpb3VzbHkgZ3JhbnRlZCB0byBZb3UgdG8gUmVjZWl2ZSwgVXNlIGFuZCBQdWJsaXNoIERhdGEgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgd2lsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLlxuXG4gICBTZWN0aW9uIDYuIERpc2NsYWltZXIgb2YgV2FycmFudGllcyBhbmQgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHlcblxuICAgICAgNi4xIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgREFUQSAoSU5DTFVESU5HIEVOSEFOQ0VEIERBVEEpIElTIFBST1ZJREVEIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cblxuICAgICAgNi4yIE5FSVRIRVIgWU9VIE5PUiBBTlkgREFUQSBQUk9WSURFUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIERBVEEgT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG4gICBTZWN0aW9uIDcuIE1pc2NlbGxhbmVvdXNcblxuICAgICAgNy4xIFlvdSBhZ3JlZSB0aGF0IGl0IGlzIHNvbGVseSBZb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGNvbXBseSB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3Mgd2l0aCByZWdhcmQgdG8gWW91ciBVc2Ugb3IgUHVibGljYXRpb24gb2YgRGF0YSwgaW5jbHVkaW5nIGFueSBhcHBsaWNhYmxlIHByaXZhY3ksIGRhdGEgcHJvdGVjdGlvbiwgc2VjdXJpdHkgYW5kIGV4cG9ydCBsYXdzLiBZb3UgYWdyZWUgdG8gdGFrZSByZWFzb25hYmxlIHN0ZXBzIHRvIGFzc2lzdCBhIERhdGEgUHJvdmlkZXIgZnVsZmlsbGluZyByZXNwb25zaWJpbGl0aWVzIHRvIGNvbXBseSB3aXRoIGFwcGxpY2FibGUgbGF3cyB3aXRoIHJlZ2FyZCB0byBVc2Ugb3IgUHVibGljYXRpb24gb2YgRGF0YSBSZWNlaXZlZCBoZXJldW5kZXIuXG5cbiAgICAgIDcuMiBZb3UgYW5kIERhdGEgUHJvdmlkZXIocyksIGNvbGxlY3RpdmVseSBhbmQgaW5kaXZpZHVhbGx5LCB3YWl2ZSBhbmQvb3IgYWdyZWUgbm90IHRvIGFzc2VydCwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LCBhbnkgbW9yYWwgcmlnaHRzIFlvdSBvciB0aGV5IGhvbGQgaW4gRGF0YS5cblxuICAgICAgNy4zIFRoaXMgQWdyZWVtZW50IGNvbmZlcnMgbm8gcmlnaHRzIG9yIHJlbWVkaWVzIHVwb24gYW55IHBlcnNvbiBvciBlbnRpdHkgb3RoZXIgdGhhbiB0aGUgUGFydGllcyBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBoZWlycywgZXhlY3V0b3JzLCBzdWNjZXNzb3JzIGFuZCBhc3NpZ25zLlxuXG4gICAgICA3LjQgVGhlIERhdGEgUHJvdmlkZXIocykgcmVzZXJ2ZSBubyByaWdodCBvciBleHBlY3RhdGlvbiBvZiBwcml2YWN5LCBkYXRhIHByb3RlY3Rpb24gb3IgY29uZmlkZW50aWFsaXR5IGluIGFueSBEYXRhIHRoYXQgdGhleSBQdWJsaXNoIHVuZGVyIHRoaXMgQWdyZWVtZW50LiBJZiBZb3UgY2hvb3NlIHRvIFB1Ymxpc2ggRGF0YSB1bmRlciB0aGlzIEFncmVlbWVudCwgWW91IHNpbWlsYXJseSBkbyBzbyB3aXRoIG5vIHJlc2VydmF0aW9uIG9yIGV4cGVjdGF0aW9uIG9mIGFueSByaWdodHMgb2YgcHJpdmFjeSBvciBjb25maWRlbnRpYWxpdHkgaW4gdGhhdCBEYXRhLlxuXG4gICAgICA3LjUgVGhlIENvbW11bml0eSBEYXRhIExpY2Vuc2UgQWdyZWVtZW50IHdvcmtncm91cCB1bmRlciBUaGUgTGludXggRm91bmRhdGlvbiBpcyB0aGUgc3Rld2FyZCBvZiB0aGlzIEFncmVlbWVudCAoXCJTdGV3YXJkXCIpLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgU3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSBvciBwdWJsaXNoIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIEFncmVlbWVudC4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gWW91IG1heSBVc2UgYW5kIFB1Ymxpc2ggRGF0YSBSZWNlaXZlZCBoZXJldW5kZXIgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggWW91IG9yaWdpbmFsbHkgUmVjZWl2ZWQgdGhlIERhdGEsIG9yIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgU3Rld2FyZC4iXSwibGljZW5zZUlkcyI6WyJDRExBLVBlcm1pc3NpdmUtMS4wIl0sImtleXdvcmRzIjpbIjEgNyBtb2RpZnkiLCI3IG1vZGlmeSBtZWFucyIsInJlc3VsdHMgMSA4IiwiMSA4IHB1Ymxpc2giLCI4IHB1Ymxpc2ggbWVhbnMiLCJkYXRhIDEgOSIsIjEgOSByZWNlaXZlIiwiOSByZWNlaXZlIG9yIiwicmVtb3RlbHkgMSAxMCIsIjEgMTAgcmVzdWx0cyIsIjEwIHJlc3VsdHMgbWVhbnMiLCJiYXNlZCAxIDExIiwiMSAxMSBzdWkiLCIxMSBzdWkgZ2VuZXJpcyIsIndvcmxkIDEgMTIiLCIxIDEyIHVzZSIsIjEyIHVzZSBtZWFucyIsImJvdGggMSAxMyIsImRhdGEgYSB5b3UiLCJ0aGF0IHlvdSBnaXZlIiwieW91IGdpdmUgYW55b25lIiwidGhlIGRhdGEgZnJvbSIsImRhdGEgZnJvbSB5b3UiLCJmcm9tIHlvdSB0aGUiLCJ5b3UgdGhlIHRleHQiLCJvZiB0aGF0IGVuaGFuY2VkIiwiZm9yIGFueSBjb21iaW5hdGlvbiIsImNvbWJpbmF0aW9uIG9mIGRhdGEiLCJkYXRhIGFuZCBlbmhhbmNlZCIsImFuZCBlbmhhbmNlZCBkYXRhIiwiZW5oYW5jZWQgZGF0YSBhcyIsIndob2xlIHByb3ZpZGVkIHRoYXQiLCJwdWJsaWNhdGlvbiBvZiB0aGF0Iiwib2YgdGhhdCBjb21iaW5lZCIsInRoYXQgY29tYmluZWQgZGF0YSIsImNvbWJpbmVkIGRhdGEgb3RoZXJ3aXNlIiwiZGF0YSBvdGhlcndpc2UgY29tcGxpZXMiLCIzIHlvdSBhbmQiLCJwcm92aWRlciAzIDQiLCIzIDQgdGhpcyIsImVudGl0eSAxIDcgbW9kaWZ5IiwiMSA3IG1vZGlmeSBtZWFucyIsIjcgbW9kaWZ5IG1lYW5zIHRvIiwiaW5jbHVkZSByZXN1bHRzIDEgOCIsInJlc3VsdHMgMSA4IHB1Ymxpc2giLCIxIDggcHVibGlzaCBtZWFucyIsIjggcHVibGlzaCBtZWFucyB0byIsInB1Ymxpc2ggZGF0YSAxIDkiLCJkYXRhIDEgOSByZWNlaXZlIiwiMSA5IHJlY2VpdmUgb3IiLCI5IHJlY2VpdmUgb3IgcmVjZWl2ZXMiLCJvciByZW1vdGVseSAxIDEwIiwicmVtb3RlbHkgMSAxMCByZXN1bHRzIiwiMSAxMCByZXN1bHRzIG1lYW5zIiwiMTAgcmVzdWx0cyBtZWFucyB0aGUiLCJpcyBiYXNlZCAxIDExIiwiYmFzZWQgMSAxMSBzdWkiLCIxIDExIHN1aSBnZW5lcmlzIiwiMTEgc3VpIGdlbmVyaXMgZGF0YWJhc2UiLCJ0aGUgd29ybGQgMSAxMiIsIndvcmxkIDEgMTIgdXNlIiwiMSAxMiB1c2UgbWVhbnMiLCIxMiB1c2UgbWVhbnMgdXNpbmciLCJvZiBib3RoIDEgMTMiLCJib3RoIDEgMTMgeW91IiwiZW5oYW5jZWQgZGF0YSBhIHlvdSIsImRhdGEgYSB5b3UgbWF5IiwiYSB5b3UgbWF5IGRvIiwibWF5IGRvIHNvIHVuZGVyIiwicHJvdmlkZWQgdGhhdCB5b3UgZ2l2ZSIsInRoYXQgeW91IGdpdmUgYW55b25lIiwieW91IGdpdmUgYW55b25lIHdobyIsImdpdmUgYW55b25lIHdobyByZWNlaXZlcyIsInJlY2VpdmVzIHRoZSBkYXRhIGZyb20iLCJ0aGUgZGF0YSBmcm9tIHlvdSIsImRhdGEgZnJvbSB5b3UgdGhlIiwiZnJvbSB5b3UgdGhlIHRleHQiLCJ5b3UgdGhlIHRleHQgb2YiLCJhZ3JlZW1lbnQgYW5kIGIgeW91IiwiMiB5b3UgbWF5IHByb3ZpZGUiLCJ5b3UgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCIsIm9yIGRpc3RyaWJ1dGlvbiBvZiB0aGF0IiwiZGlzdHJpYnV0aW9uIG9mIHRoYXQgZW5oYW5jZWQiLCJvZiB0aGF0IGVuaGFuY2VkIGRhdGEiLCJ0aGF0IGVuaGFuY2VkIGRhdGEgb3IiLCJlbmhhbmNlZCBkYXRhIG9yIGZvciIsImRhdGEgb3IgZm9yIGFueSIsIm9yIGZvciBhbnkgY29tYmluYXRpb24iLCJmb3IgYW55IGNvbWJpbmF0aW9uIG9mIiwiYW55IGNvbWJpbmF0aW9uIG9mIGRhdGEiLCJjb21iaW5hdGlvbiBvZiBkYXRhIGFuZCIsIm9mIGRhdGEgYW5kIGVuaGFuY2VkIiwiZGF0YSBhbmQgZW5oYW5jZWQgZGF0YSIsImFuZCBlbmhhbmNlZCBkYXRhIGFzIiwiZW5oYW5jZWQgZGF0YSBhcyBhIiwiZGF0YSBhcyBhIHdob2xlIiwiYSB3aG9sZSBwcm92aWRlZCB0aGF0Iiwid2hvbGUgcHJvdmlkZWQgdGhhdCB5b3VyIiwicHJvdmlkZWQgdGhhdCB5b3VyIHVzZSIsInRoYXQgeW91ciB1c2UgYW5kIiwieW91ciB1c2UgYW5kIHB1YmxpY2F0aW9uIiwiYW5kIHB1YmxpY2F0aW9uIG9mIHRoYXQiLCJwdWJsaWNhdGlvbiBvZiB0aGF0IGNvbWJpbmVkIiwib2YgdGhhdCBjb21iaW5lZCBkYXRhIiwidGhhdCBjb21iaW5lZCBkYXRhIG90aGVyd2lzZSIsImNvbWJpbmVkIGRhdGEgb3RoZXJ3aXNlIGNvbXBsaWVzIiwiZGF0YSBvdGhlcndpc2UgY29tcGxpZXMgd2l0aCIsImxpY2Vuc2UgMyAzIHlvdSIsIjMgMyB5b3UgYW5kIiwiMyB5b3UgYW5kIGVhY2giLCJkYXRhIHByb3ZpZGVyIDMgNCIsInByb3ZpZGVyIDMgNCB0aGlzIiwiMyA0IHRoaXMgYWdyZWVtZW50IiwiNCB0aGlzIGFncmVlbWVudCBpbXBvc2VzIiwicGVybWlzc2l2ZSB2ZXJzaW9uIDEgMCB0aGlzIiwicGVybWlzc2l2ZSB2ZXJzaW9uIDEgMCBhZ3JlZW1lbnQiLCJhbiBlbnRpdHkgMSA3IG1vZGlmeSIsImVudGl0eSAxIDcgbW9kaWZ5IG1lYW5zIiwiMSA3IG1vZGlmeSBtZWFucyB0byIsIjcgbW9kaWZ5IG1lYW5zIHRvIGRlbGV0ZSIsIm5vdCBpbmNsdWRlIHJlc3VsdHMgMSA4IiwiaW5jbHVkZSByZXN1bHRzIDEgOCBwdWJsaXNoIiwicmVzdWx0cyAxIDggcHVibGlzaCBtZWFucyIsIjEgOCBwdWJsaXNoIG1lYW5zIHRvIiwiOCBwdWJsaXNoIG1lYW5zIHRvIG1ha2UiLCJ5b3UgcHVibGlzaCBkYXRhIDEgOSIsInB1Ymxpc2ggZGF0YSAxIDkgcmVjZWl2ZSIsImRhdGEgMSA5IHJlY2VpdmUgb3IiLCIxIDkgcmVjZWl2ZSBvciByZWNlaXZlcyIsIjkgcmVjZWl2ZSBvciByZWNlaXZlcyBtZWFucyIsImxvY2FsbHkgb3IgcmVtb3RlbHkgMSAxMCIsIm9yIHJlbW90ZWx5IDEgMTAgcmVzdWx0cyIsInJlbW90ZWx5IDEgMTAgcmVzdWx0cyBtZWFucyIsIjEgMTAgcmVzdWx0cyBtZWFucyB0aGUiLCIxMCByZXN1bHRzIG1lYW5zIHRoZSBvdXRjb21lcyIsInVzZSBpcyBiYXNlZCAxIDExIiwiaXMgYmFzZWQgMSAxMSBzdWkiLCJiYXNlZCAxIDExIHN1aSBnZW5lcmlzIiwiMSAxMSBzdWkgZ2VuZXJpcyBkYXRhYmFzZSIsIjExIHN1aSBnZW5lcmlzIGRhdGFiYXNlIHJpZ2h0cyIsImluIHRoZSB3b3JsZCAxIDEyIiwidGhlIHdvcmxkIDEgMTIgdXNlIiwid29ybGQgMSAxMiB1c2UgbWVhbnMiLCIxIDEyIHVzZSBtZWFucyB1c2luZyIsIjEyIHVzZSBtZWFucyB1c2luZyBkYXRhIiwiY29tYmluYXRpb24gb2YgYm90aCAxIDEzIiwib2YgYm90aCAxIDEzIHlvdSIsImJvdGggMSAxMyB5b3Ugb3IiLCJvciBlbmhhbmNlZCBkYXRhIGEgeW91IiwiZW5oYW5jZWQgZGF0YSBhIHlvdSBtYXkiLCJkYXRhIGEgeW91IG1heSBkbyIsImEgeW91IG1heSBkbyBzbyIsInlvdSBtYXkgZG8gc28gdW5kZXIiLCJtYXkgZG8gc28gdW5kZXIgYSIsInNvIHVuZGVyIGEgbGljZW5zZSBvZiIsImNob2ljZSBwcm92aWRlZCB0aGF0IHlvdSBnaXZlIiwicHJvdmlkZWQgdGhhdCB5b3UgZ2l2ZSBhbnlvbmUiLCJ0aGF0IHlvdSBnaXZlIGFueW9uZSB3aG8iLCJ5b3UgZ2l2ZSBhbnlvbmUgd2hvIHJlY2VpdmVzIiwiZ2l2ZSBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSIsIndobyByZWNlaXZlcyB0aGUgZGF0YSBmcm9tIiwicmVjZWl2ZXMgdGhlIGRhdGEgZnJvbSB5b3UiLCJ0aGUgZGF0YSBmcm9tIHlvdSB0aGUiLCJkYXRhIGZyb20geW91IHRoZSB0ZXh0IiwiZnJvbSB5b3UgdGhlIHRleHQgb2YiLCJ5b3UgdGhlIHRleHQgb2YgdGhpcyIsInRleHQgb2YgdGhpcyBhZ3JlZW1lbnQgYW5kIiwidGhpcyBhZ3JlZW1lbnQgYW5kIGIgeW91IiwiYWdyZWVtZW50IGFuZCBiIHlvdSBtdXN0IiwiMyAyIHlvdSBtYXkgcHJvdmlkZSIsIjIgeW91IG1heSBwcm92aWRlIGFkZGl0aW9uYWwiLCJ5b3UgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciIsInJlcHJvZHVjdGlvbiBvciBkaXN0cmlidXRpb24gb2YgdGhhdCIsIm9yIGRpc3RyaWJ1dGlvbiBvZiB0aGF0IGVuaGFuY2VkIiwiZGlzdHJpYnV0aW9uIG9mIHRoYXQgZW5oYW5jZWQgZGF0YSIsIm9mIHRoYXQgZW5oYW5jZWQgZGF0YSBvciIsInRoYXQgZW5oYW5jZWQgZGF0YSBvciBmb3IiLCJlbmhhbmNlZCBkYXRhIG9yIGZvciBhbnkiLCJkYXRhIG9yIGZvciBhbnkgY29tYmluYXRpb24iLCJvciBmb3IgYW55IGNvbWJpbmF0aW9uIG9mIiwiZm9yIGFueSBjb21iaW5hdGlvbiBvZiBkYXRhIiwiYW55IGNvbWJpbmF0aW9uIG9mIGRhdGEgYW5kIiwiY29tYmluYXRpb24gb2YgZGF0YSBhbmQgZW5oYW5jZWQiLCJvZiBkYXRhIGFuZCBlbmhhbmNlZCBkYXRhIiwiZGF0YSBhbmQgZW5oYW5jZWQgZGF0YSBhcyIsImFuZCBlbmhhbmNlZCBkYXRhIGFzIGEiLCJlbmhhbmNlZCBkYXRhIGFzIGEgd2hvbGUiLCJkYXRhIGFzIGEgd2hvbGUgcHJvdmlkZWQiLCJhcyBhIHdob2xlIHByb3ZpZGVkIHRoYXQiLCJhIHdob2xlIHByb3ZpZGVkIHRoYXQgeW91ciIsIndob2xlIHByb3ZpZGVkIHRoYXQgeW91ciB1c2UiLCJwcm92aWRlZCB0aGF0IHlvdXIgdXNlIGFuZCIsInRoYXQgeW91ciB1c2UgYW5kIHB1YmxpY2F0aW9uIiwieW91ciB1c2UgYW5kIHB1YmxpY2F0aW9uIG9mIiwidXNlIGFuZCBwdWJsaWNhdGlvbiBvZiB0aGF0IiwiYW5kIHB1YmxpY2F0aW9uIG9mIHRoYXQgY29tYmluZWQiLCJwdWJsaWNhdGlvbiBvZiB0aGF0IGNvbWJpbmVkIGRhdGEiLCJvZiB0aGF0IGNvbWJpbmVkIGRhdGEgb3RoZXJ3aXNlIiwidGhhdCBjb21iaW5lZCBkYXRhIG90aGVyd2lzZSBjb21wbGllcyIsImNvbWJpbmVkIGRhdGEgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29tbXVuaXR5IERhdGEgTGljZW5zZSBBZ3JlZW1lbnQgLSBTaGFyaW5nIC0gVmVyc2lvbiAxLjBcblxuVGhpcyBpcyB0aGUgQ29tbXVuaXR5IERhdGEgTGljZW5zZSBBZ3JlZW1lbnQgLSBTaGFyaW5nLCBWZXJzaW9uIDEuMCAoXCJBZ3JlZW1lbnRcIikuIERhdGEgaXMgcHJvdmlkZWQgdG8gWW91IHVuZGVyIHRoaXMgQWdyZWVtZW50IGJ5IGVhY2ggb2YgdGhlIERhdGEgUHJvdmlkZXJzLiBZb3VyIGV4ZXJjaXNlIG9mIGFueSBvZiB0aGUgcmlnaHRzIGFuZCBwZXJtaXNzaW9ucyBncmFudGVkIGJlbG93IGNvbnN0aXR1dGVzIFlvdXIgYWNjZXB0YW5jZSBhbmQgYWdyZWVtZW50IHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC5cblxuVGhlIGJlbmVmaXRzIHRoYXQgZWFjaCBEYXRhIFByb3ZpZGVyIHJlY2VpdmVzIGZyb20gbWFraW5nIERhdGEgYXZhaWxhYmxlIGFuZCB0aGF0IFlvdSByZWNlaXZlIGZyb20gRGF0YSBvciBvdGhlcndpc2UgdW5kZXIgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2hhbGwgYmUgZGVlbWVkIHN1ZmZpY2llbnQgY29uc2lkZXJhdGlvbiBmb3IgdGhlIGZvcm1hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4gQWNjb3JkaW5nbHksIERhdGEgUHJvdmlkZXIocykgYW5kIFlvdSAodGhlIFwiUGFydGllc1wiKSBhZ3JlZSBhcyBmb2xsb3dzOlxuXG4gICBTZWN0aW9uIDEuIERlZmluaXRpb25zXG5cbiAgICAgIDEuMSBcIkFkZFwiIG1lYW5zIHRvIHN1cHBsZW1lbnQgRGF0YSB3aXRoIFlvdXIgb3duIG9yIHNvbWVvbmUgZWxzZSdzIERhdGEsIHJlc3VsdGluZyBpbiBZb3VyIFwiQWRkaXRpb25zLlwiIEFkZGl0aW9ucyBkbyBub3QgaW5jbHVkZSBSZXN1bHRzLlxuXG4gICAgICAxLjIgXCJDb21wdXRhdGlvbmFsIFVzZVwiIG1lYW5zIFlvdXIgYW5hbHlzaXMgKHRocm91Z2ggdGhlIHVzZSBvZiBjb21wdXRhdGlvbmFsIGRldmljZXMgb3Igb3RoZXJ3aXNlKSBvciBvdGhlciBpbnRlcnByZXRhdGlvbiBvZiBEYXRhLiBCeSB3YXkgb2YgZXhhbXBsZSBhbmQgbm90IGxpbWl0YXRpb24sIFwiQ29tcHV0YXRpb25hbCBVc2VcIiBpbmNsdWRlcyB0aGUgYXBwbGljYXRpb24gb2YgYW55IGNvbXB1dGF0aW9uYWwgYW5hbHl0aWNhbCB0ZWNobmlxdWUsIHRoZSBwdXJwb3NlIG9mIHdoaWNoIGlzIHRoZSBhbmFseXNpcyBvZiBhbnkgRGF0YSBpbiBkaWdpdGFsIGZvcm0gdG8gZ2VuZXJhdGUgaW5mb3JtYXRpb24gYWJvdXQgRGF0YSBzdWNoIGFzIHBhdHRlcm5zLCB0cmVuZHMsIGNvcnJlbGF0aW9ucywgaW5mZXJlbmNlcywgaW5zaWdodHMgYW5kIGF0dHJpYnV0ZXMuXG5cbiAgICAgIDEuMyBcIkRhdGFcIiBtZWFucyB0aGUgaW5mb3JtYXRpb24gKGluY2x1ZGluZyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGltYWdlcyBvciB0ZXh0KSwgY29sbGVjdGl2ZWx5IG9yIGluZGl2aWR1YWxseSwgd2hldGhlciBjcmVhdGVkIG9yIGdhdGhlcmVkIGJ5IGEgRGF0YSBQcm92aWRlciBvciBhbiBFbnRpdHkgYWN0aW5nIG9uIGl0cyBiZWhhbGYsIHRvIHdoaWNoIHJpZ2h0cyBhcmUgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudC5cblxuICAgICAgMS40IFwiRGF0YSBQcm92aWRlclwiIG1lYW5zIGFueSBFbnRpdHkgKGluY2x1ZGluZyBhbnkgZW1wbG95ZWUgb3IgY29udHJhY3RvciBvZiBzdWNoIEVudGl0eSBhdXRob3JpemVkIHRvIFB1Ymxpc2ggRGF0YSBvbiBiZWhhbGYgb2Ygc3VjaCBFbnRpdHkpIHRoYXQgUHVibGlzaGVzIERhdGEgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgcHJpb3IgdG8gWW91ciBSZWNlaXZpbmcgaXQuXG5cbiAgICAgIDEuNSBcIkVuaGFuY2VkIERhdGFcIiBtZWFucyB0aGUgc3Vic2V0IG9mIERhdGEgdGhhdCBZb3UgUHVibGlzaCBhbmQgdGhhdCBpcyBjb21wb3NlZCBvZiAoYSkgWW91ciBBZGRpdGlvbnMgYW5kL29yIChiKSBNb2RpZmljYXRpb25zIHRvIERhdGEgWW91IGhhdmUgcmVjZWl2ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgICAgIDEuNiBcIkVudGl0eVwiIG1lYW5zIGFueSBuYXR1cmFsIHBlcnNvbiBvciBvcmdhbml6YXRpb24gdGhhdCBleGlzdHMgdW5kZXIgdGhlIGxhd3Mgb2YgdGhlIGp1cmlzZGljdGlvbiBpbiB3aGljaCBpdCBpcyBvcmdhbml6ZWQsIHRvZ2V0aGVyIHdpdGggYWxsIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJjb250cm9sXCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgKGIpIHRoZSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBzZWN1cml0aWVzLCAoYykgdGhlIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5IG9yLCAoZCkgdGhlIGFiaWxpdHkgdG8gYXBwb2ludCwgd2hldGhlciBieSBhZ3JlZW1lbnQgb3IgcmlnaHQsIHRoZSBtYWpvcml0eSBvZiBkaXJlY3RvcnMgb2YgYW4gRW50aXR5LlxuXG4gICAgICAxLjcgXCJMZWRnZXJcIiBtZWFucyBhIGRpZ2l0YWwgcmVjb3JkIG9mIERhdGEgb3IgZ3JhbnRzIG9mIHJpZ2h0cyBpbiBEYXRhIGdvdmVybmVkIGJ5IHRoaXMgQWdyZWVtZW50LCB1c2luZyBhbnkgdGVjaG5vbG9neSBoYXZpbmcgZnVuY3Rpb25hbGl0eSB0byByZWNvcmQgYW5kIHN0b3JlIERhdGEgb3IgZ3JhbnRzLCBjb250cmlidXRpb25zLCBvciBsaWNlbnNlcyB0byBEYXRhIGdvdmVybmVkIGJ5IHRoaXMgQWdyZWVtZW50LlxuXG4gICAgICAxLjggXCJNb2RpZnlcIiBtZWFucyB0byBkZWxldGUsIGVyYXNlLCBjb3JyZWN0IG9yIHJlLWFycmFuZ2UgRGF0YSwgcmVzdWx0aW5nIGluIFwiTW9kaWZpY2F0aW9ucy5cIiBNb2RpZmljYXRpb25zIGRvIG5vdCBpbmNsdWRlIFJlc3VsdHMuXG5cbiAgICAgIDEuOSBcIlB1Ymxpc2hcIiBtZWFucyB0byBtYWtlIGFsbCBvciBhIHN1YnNldCBvZiBEYXRhIChpbmNsdWRpbmcgWW91ciBFbmhhbmNlZCBEYXRhKSBhdmFpbGFibGUgaW4gYW55IG1hbm5lciB3aGljaCBlbmFibGVzIGl0cyBVc2UsIGluY2x1ZGluZyBieSBwcm92aWRpbmcgYSBjb3B5IG9uIHBoeXNpY2FsIG1lZGlhIG9yIHJlbW90ZSBhY2Nlc3MuIEZvciBhbnkgZm9ybSBvZiBFbnRpdHksIHRoYXQgaXMgdG8gbWFrZSB0aGUgRGF0YSBhdmFpbGFibGUgdG8gYW55IGluZGl2aWR1YWwgd2hvIGlzIG5vdCBlbXBsb3llZCBieSB0aGF0IEVudGl0eSBvciBlbmdhZ2VkIGFzIGEgY29udHJhY3RvciBvciBhZ2VudCB0byBwZXJmb3JtIHdvcmsgb24gdGhhdCBFbnRpdHkncyBiZWhhbGYuIEEgXCJQdWJsaWNhdGlvblwiIG9jY3VycyBlYWNoIHRpbWUgWW91IFB1Ymxpc2ggRGF0YS5cblxuICAgICAgMS4xMCBcIlJlY2VpdmVcIiBvciBcIlJlY2VpdmVzXCIgbWVhbnMgdG8gaGF2ZSBiZWVuIGdpdmVuIGFjY2VzcyB0byBEYXRhLCBsb2NhbGx5IG9yIHJlbW90ZWx5LlxuXG4gICAgICAxLjExIFwiUmVzdWx0c1wiIG1lYW5zIHRoZSBvdXRjb21lcyBvciBvdXRwdXRzIHRoYXQgWW91IG9idGFpbiBmcm9tIFlvdXIgQ29tcHV0YXRpb25hbCBVc2Ugb2YgRGF0YS4gUmVzdWx0cyBzaGFsbCBub3QgaW5jbHVkZSBtb3JlIHRoYW4gYSBkZSBtaW5pbWlzIHBvcnRpb24gb2YgdGhlIERhdGEgb24gd2hpY2ggdGhlIENvbXB1dGF0aW9uYWwgVXNlIGlzIGJhc2VkLlxuXG4gICAgICAxLjEyIFwiU3VpIEdlbmVyaXMgRGF0YWJhc2UgUmlnaHRzXCIgbWVhbnMgcmlnaHRzLCBvdGhlciB0aGFuIGNvcHlyaWdodCwgcmVzdWx0aW5nIGZyb20gRGlyZWN0aXZlIDk2LzkvRUMgb2YgdGhlIEV1cm9wZWFuIFBhcmxpYW1lbnQgYW5kIG9mIHRoZSBDb3VuY2lsIG9mIDExIE1hcmNoIDE5OTYgb24gdGhlIGxlZ2FsIHByb3RlY3Rpb24gb2YgZGF0YWJhc2VzLCBhcyBhbWVuZGVkIGFuZC9vciBzdWNjZWVkZWQsIGFzIHdlbGwgYXMgb3RoZXIgZXF1aXZhbGVudCByaWdodHMgYW55d2hlcmUgaW4gdGhlIHdvcmxkLlxuXG4gICAgICAxLjEzIFwiVXNlXCIgbWVhbnMgdXNpbmcgRGF0YSAoaW5jbHVkaW5nIGFjY2Vzc2luZywgY29weWluZywgc3R1ZHlpbmcsIHJldmlld2luZywgYWRhcHRpbmcsIGFuYWx5emluZywgZXZhbHVhdGluZywgb3IgbWFraW5nIENvbXB1dGF0aW9uYWwgVXNlIG9mIGl0KSwgZWl0aGVyIGJ5IG1hY2hpbmVzIG9yIGh1bWFucywgb3IgYSBjb21iaW5hdGlvbiBvZiBib3RoLlxuXG4gICAgICAxLjE0IFwiWW91XCIgb3IgXCJZb3VyXCIgbWVhbnMgYW55IEVudGl0eSB0aGF0IFJlY2VpdmVzIERhdGEgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgIFNlY3Rpb24gMi4gUmlnaHQgYW5kIExpY2Vuc2UgdG8gVXNlIGFuZCB0byBQdWJsaXNoXG5cbiAgICAgIDIuMSBTdWJqZWN0IHRvIHRoZSBjb25kaXRpb25zIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMgb2YgdGhpcyBBZ3JlZW1lbnQsIERhdGEgUHJvdmlkZXIocykgaGVyZWJ5IGdyYW50KHMpIHRvIFlvdSBhIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBwcm92aWRlZCBpbiBTZWN0aW9uIDUpIHJpZ2h0IHRvOiAoYSkgVXNlIERhdGE7IGFuZCAoYikgUHVibGlzaCBEYXRhLlxuXG4gICAgICAyLjIgVG8gdGhlIGV4dGVudCB0aGF0IHRoZSBEYXRhIG9yIHRoZSBjb29yZGluYXRpb24sIHNlbGVjdGlvbiBvciBhcnJhbmdlbWVudCBvZiBEYXRhIGlzIHByb3RlY3RlZCBvciBwcm90ZWN0YWJsZSB1bmRlciBjb3B5cmlnaHQsIFN1aSBHZW5lcmlzIERhdGFiYXNlIFJpZ2h0cywgb3Igb3RoZXIgbGF3LCBEYXRhIFByb3ZpZGVyKHMpIGZ1cnRoZXIgYWdyZWUocykgdGhhdCBzdWNoIERhdGEgb3IgY29vcmRpbmF0aW9uLCBzZWxlY3Rpb24gb3IgYXJyYW5nZW1lbnQgaXMgaGVyZWJ5IGxpY2Vuc2VkIHRvIFlvdSBhbmQgdG8gYW55b25lIGVsc2Ugd2hvIFJlY2VpdmVzIERhdGEgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgZm9yIFVzZSBhbmQgUHVibGljYXRpb24sIHN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGluIFNlY3Rpb24gMyBvZiB0aGlzIEFncmVlbWVudC5cblxuICAgICAgMi4zIEV4Y2VwdCBmb3IgdGhlc2UgcmlnaHRzIGFuZCBsaWNlbnNlcyBleHByZXNzbHkgZ3JhbnRlZCwgbm8gb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBhcmUgZ3JhbnRlZCBvciBzaG91bGQgYmUgaW1wbGllZC5cblxuICAgU2VjdGlvbiAzLiBDb25kaXRpb25zIG9uIFJpZ2h0cyBHcmFudGVkXG5cbiAgICAgIDMuMSBJZiBZb3UgUHVibGlzaCBEYXRhIFlvdSBSZWNlaXZlIG9yIEVuaGFuY2VkIERhdGE6XG5cbiAgICAgICAgIChhKSBUaGUgRGF0YSAoaW5jbHVkaW5nIHRoZSBFbmhhbmNlZCBEYXRhKSBtdXN0IGJlIFB1Ymxpc2hlZCB1bmRlciB0aGlzIEFncmVlbWVudCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBTZWN0aW9uIDM7IGFuZFxuXG4gICAgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IERhdGEgZmlsZXMgY29udGFpbmluZyBFbmhhbmNlZCBEYXRhIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHRoYXQgWW91IGhhdmUgY2hhbmdlZCB0aG9zZSBmaWxlczsgYW5kXG5cbiAgICAgICAgIChjKSBJZiBZb3UgUHVibGlzaCBEYXRhIFlvdSBSZWNlaXZlLCBZb3UgbXVzdCBwcmVzZXJ2ZSBhbGwgY3JlZGl0IG9yIGF0dHJpYnV0aW9uIHRvIHRoZSBEYXRhIFByb3ZpZGVyKHMpLiBTdWNoIHJldGFpbmVkIGNyZWRpdCBvciBhdHRyaWJ1dGlvbiBpbmNsdWRlcyBhbnkgb2YgdGhlIGZvbGxvd2luZyB0byB0aGUgZXh0ZW50IHRoZXkgZXhpc3QgaW4gRGF0YSBhcyBZb3UgaGF2ZSBSZWNlaXZlZCBpdDogbGVnYWwgbm90aWNlcyBvciBtZXRhZGF0YTsgaWRlbnRpZmljYXRpb24gb2YgdGhlIERhdGEgUHJvdmlkZXIocyk7IG9yIGh5cGVybGlua3MgdG8gRGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByYWN0aWNhbCB0byBkbyBzby5cblxuICAgICAgMy4yIFlvdSBtYXkgbm90IHJlc3RyaWN0IG9yIGRldGVyIHRoZSBhYmlsaXR5IG9mIGFueW9uZSB3aG8gUmVjZWl2ZXMgdGhlIERhdGEgKGEpIHRvIFB1Ymxpc2ggdGhlIERhdGEgaW4gYSBwdWJsaWNseS1hY2Nlc3NpYmxlIG1hbm5lciBvciAoYikgaWYgdGhlIHByb2plY3QgaGFzIGRlc2lnbmF0ZWQgYSBMZWRnZXIgZm9yIHJlY29yZGluZyBEYXRhIG9yIGdyYW50cyBvZiByaWdodHMgaW4gRGF0YSBmb3IgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIHRvIHJlY29yZCB0aGUgRGF0YSBvciBncmFudHMgb2YgcmlnaHRzIGluIERhdGEgaW4gdGhlIExlZGdlci5cblxuICAgICAgMy4zIElmIFlvdSBQdWJsaXNoIERhdGEgWW91IFJlY2VpdmUsIFlvdSBtdXN0IGRvIHNvIHVuZGVyIGFuIHVubW9kaWZpZWQgZm9ybSBvZiB0aGlzIEFncmVlbWVudCBhbmQgaW5jbHVkZSB0aGUgdGV4dCBvZiB0aGlzIEFncmVlbWVudCwgdGhlIG5hbWUgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kL29yIGEgaHlwZXJsaW5rIG9yIG90aGVyIG1ldGhvZCByZWFzb25hYmx5IGxpa2VseSB0byBwcm92aWRlIGEgY29weSBvZiB0aGUgdGV4dCBvZiB0aGlzIEFncmVlbWVudC4gWW91IG1heSBub3QgbW9kaWZ5IHRoaXMgQWdyZWVtZW50IG9yIGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ5IGFkZGluZyBhbnkgcmVzdHJpY3Rpb24gb24gY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCBVc2Ugb2YgRGF0YSAoaW5jbHVkaW5nIFlvdXIgRW5oYW5jZWQgRGF0YSkgb3IgYnkgbGltaXRpbmcgcGVybWl0dGVkIFVzZSBvZiBzdWNoIERhdGEgdG8gYW55IHBhcnRpY3VsYXIgcGxhdGZvcm0sIHRlY2hub2xvZ3kgb3IgZmllbGQgb2YgZW5kZWF2b3IuIE5vdGljZXMgdGhhdCBwdXJwb3J0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBvZiBubyBlZmZlY3QuXG5cbiAgICAgIDMuNCBZb3UgYW5kIGVhY2ggRGF0YSBQcm92aWRlciBhZ3JlZSB0aGF0IEVuaGFuY2VkIERhdGEgc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgYSB3b3JrIG9mIGpvaW50IGF1dGhvcnNoaXAgYnkgdmlydHVlIG9mIGl0cyByZWxhdGlvbnNoaXAgdG8gRGF0YSBsaWNlbnNlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgc2hhbGwgbm90IHJlcXVpcmUgZWl0aGVyIGFueSBvYmxpZ2F0aW9uIG9mIGFjY291bnRpbmcgdG8gb3IgdGhlIGNvbnNlbnQgb2YgYW55IERhdGEgUHJvdmlkZXIuXG5cbiAgICAgIDMuNSBUaGlzIEFncmVlbWVudCBpbXBvc2VzIG5vIG9ibGlnYXRpb25zIG9yIHJlc3RyaWN0aW9ucyBvbiBZb3VyIFVzZSBvciBQdWJsaWNhdGlvbiBvZiBSZXN1bHRzLlxuXG4gICBTZWN0aW9uIDQuIERhdGEgUHJvdmlkZXIocyknIFJlcHJlc2VudGF0aW9uc1xuXG4gICAgICA0LjEgRWFjaCBEYXRhIFByb3ZpZGVyIHJlcHJlc2VudHMgdGhhdCB0aGUgRGF0YSBQcm92aWRlciBoYXMgZXhlcmNpc2VkIHJlYXNvbmFibGUgY2FyZSwgdG8gYXNzdXJlIHRoYXQ6IChhKSB0aGUgRGF0YSBpdCBQdWJsaXNoZXMgd2FzIGNyZWF0ZWQgb3IgZ2VuZXJhdGVkIGJ5IGl0IG9yIHdhcyBvYnRhaW5lZCBmcm9tIG90aGVycyB3aXRoIHRoZSByaWdodCB0byBQdWJsaXNoIHRoZSBEYXRhIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgKGIpIFB1YmxpY2F0aW9uIG9mIHN1Y2ggRGF0YSBkb2VzIG5vdCB2aW9sYXRlIGFueSBwcml2YWN5IG9yIGNvbmZpZGVudGlhbGl0eSBvYmxpZ2F0aW9uIHVuZGVydGFrZW4gYnkgdGhlIERhdGEgUHJvdmlkZXIuXG5cbiAgIFNlY3Rpb24gNS4gVGVybWluYXRpb25cblxuICAgICAgNS4xIEFsbCBvZiBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB3aWxsIHRlcm1pbmF0ZSwgYW5kIFlvdXIgcmlnaHQgdG8gUmVjZWl2ZSwgVXNlIG9yIFB1Ymxpc2ggdGhlIERhdGEgd2lsbCBiZSByZXZva2VkIG9yIG1vZGlmaWVkIGlmIFlvdSBtYXRlcmlhbGx5IGZhaWwgdG8gY29tcGx5IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBZb3UgZG8gbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgWW91IGFncmVlIHRvIGNlYXNlIFJlY2VpcHQsIFVzZSBhbmQgUHVibGljYXRpb24gb2YgRGF0YS4gSG93ZXZlciwgWW91ciBvYmxpZ2F0aW9ucyBhbmQgYW55IHJpZ2h0cyBhbmQgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSBZb3UgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgcmVsYXRpbmcgdG8gRGF0YSB0aGF0IFlvdSBQdWJsaXNoZWQgcHJpb3IgdG8gc3VjaCB0ZXJtaW5hdGlvbiB3aWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLlxuXG4gICAgICA1LjIgSWYgWW91IGluc3RpdHV0ZSBsaXRpZ2F0aW9uIGFnYWluc3QgYSBEYXRhIFByb3ZpZGVyIG9yIGFueW9uZSBlbHNlIHdobyBSZWNlaXZlcyB0aGUgRGF0YSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gaW4gYSBsYXdzdWl0KSBiYXNlZCBvbiB0aGUgRGF0YSwgb3RoZXIgdGhhbiBhIGNsYWltIGFzc2VydGluZyBicmVhY2ggb2YgdGhpcyBBZ3JlZW1lbnQsIHRoZW4gYW55IHJpZ2h0cyBwcmV2aW91c2x5IGdyYW50ZWQgdG8gWW91IHRvIFJlY2VpdmUsIFVzZSBhbmQgUHVibGlzaCBEYXRhIHVuZGVyIHRoaXMgQWdyZWVtZW50IHdpbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC5cblxuICAgU2VjdGlvbiA2LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXMgYW5kIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5XG5cbiAgICAgIDYuMSBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIERBVEEgKElOQ0xVRElORyBFTkhBTkNFRCBEQVRBKSBJUyBQUk9WSURFRCBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG5cbiAgICAgIDYuMiBORUlUSEVSIFlPVSBOT1IgQU5ZIERBVEEgUFJPVklERVJTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBEQVRBIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuICAgU2VjdGlvbiA3LiBNaXNjZWxsYW5lb3VzXG5cbiAgICAgIDcuMSBZb3UgYWdyZWUgdGhhdCBpdCBpcyBzb2xlbHkgWW91ciByZXNwb25zaWJpbGl0eSB0byBjb21wbHkgd2l0aCBhbGwgYXBwbGljYWJsZSBsYXdzIHdpdGggcmVnYXJkIHRvIFlvdXIgVXNlIG9yIFB1YmxpY2F0aW9uIG9mIERhdGEsIGluY2x1ZGluZyBhbnkgYXBwbGljYWJsZSBwcml2YWN5LCBkYXRhIHByb3RlY3Rpb24sIHNlY3VyaXR5IGFuZCBleHBvcnQgbGF3cy4gWW91IGFncmVlIHRvIHRha2UgcmVhc29uYWJsZSBzdGVwcyB0byBhc3Npc3QgYSBEYXRhIFByb3ZpZGVyIGZ1bGZpbGxpbmcgcmVzcG9uc2liaWxpdGllcyB0byBjb21wbHkgd2l0aCBhcHBsaWNhYmxlIGxhd3Mgd2l0aCByZWdhcmQgdG8gVXNlIG9yIFB1YmxpY2F0aW9uIG9mIERhdGEgUmVjZWl2ZWQgaGVyZXVuZGVyLlxuXG4gICAgICA3LjIgWW91IGFuZCBEYXRhIFByb3ZpZGVyKHMpLCBjb2xsZWN0aXZlbHkgYW5kIGluZGl2aWR1YWxseSwgd2FpdmUgYW5kL29yIGFncmVlIG5vdCB0byBhc3NlcnQsIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdywgYW55IG1vcmFsIHJpZ2h0cyBZb3Ugb3IgdGhleSBob2xkIGluIERhdGEuXG5cbiAgICAgIDcuMyBUaGlzIEFncmVlbWVudCBjb25mZXJzIG5vIHJpZ2h0cyBvciByZW1lZGllcyB1cG9uIGFueSBwZXJzb24gb3IgZW50aXR5IG90aGVyIHRoYW4gdGhlIFBhcnRpZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgaGVpcnMsIGV4ZWN1dG9ycywgc3VjY2Vzc29ycyBhbmQgYXNzaWducy5cblxuICAgICAgNy40IFRoZSBEYXRhIFByb3ZpZGVyKHMpIHJlc2VydmUgbm8gcmlnaHQgb3IgZXhwZWN0YXRpb24gb2YgcHJpdmFjeSwgZGF0YSBwcm90ZWN0aW9uIG9yIGNvbmZpZGVudGlhbGl0eSBpbiBhbnkgRGF0YSB0aGF0IHRoZXkgUHVibGlzaCB1bmRlciB0aGlzIEFncmVlbWVudC4gSWYgWW91IGNob29zZSB0byBQdWJsaXNoIERhdGEgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIFlvdSBzaW1pbGFybHkgZG8gc28gd2l0aCBubyByZXNlcnZhdGlvbiBvciBleHBlY3RhdGlvbiBvZiBhbnkgcmlnaHRzIG9mIHByaXZhY3kgb3IgY29uZmlkZW50aWFsaXR5IGluIHRoYXQgRGF0YS5cblxuICAgICAgNy41IFRoZSBDb21tdW5pdHkgRGF0YSBMaWNlbnNlIEFncmVlbWVudCB3b3JrZ3JvdXAgdW5kZXIgVGhlIExpbnV4IEZvdW5kYXRpb24gaXMgdGhlIHN0ZXdhcmQgb2YgdGhpcyBBZ3JlZW1lbnQgKFwiU3Rld2FyZFwiKS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIFN0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgb3IgcHVibGlzaCBuZXcgdmVyc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFlvdSBtYXkgVXNlIGFuZCBQdWJsaXNoIERhdGEgUmVjZWl2ZWQgaGVyZXVuZGVyIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIFlvdSBvcmlnaW5hbGx5IFJlY2VpdmVkIHRoZSBEYXRhLCBvciB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIFN0ZXdhcmQuIl0sImxpY2Vuc2VJZHMiOlsiQ0RMQS1TaGFyaW5nLTEuMCJdLCJrZXl3b3JkcyI6WyIxIDcgbGVkZ2VyIiwiNyBsZWRnZXIgbWVhbnMiLCJsZWRnZXIgbWVhbnMgYSIsIm1lYW5zIGEgZGlnaXRhbCIsImEgZGlnaXRhbCByZWNvcmQiLCJkaWdpdGFsIHJlY29yZCBvZiIsInJlY29yZCBvZiBkYXRhIiwiaW4gZGF0YSBnb3Zlcm5lZCIsInRoaXMgYWdyZWVtZW50IHVzaW5nIiwiYWdyZWVtZW50IHVzaW5nIGFueSIsInVzaW5nIGFueSB0ZWNobm9sb2d5IiwiYW55IHRlY2hub2xvZ3kgaGF2aW5nIiwidGVjaG5vbG9neSBoYXZpbmcgZnVuY3Rpb25hbGl0eSIsImhhdmluZyBmdW5jdGlvbmFsaXR5IHRvIiwiZnVuY3Rpb25hbGl0eSB0byByZWNvcmQiLCJ0byByZWNvcmQgYW5kIiwicmVjb3JkIGFuZCBzdG9yZSIsImFuZCBzdG9yZSBkYXRhIiwic3RvcmUgZGF0YSBvciIsIm9yIGdyYW50cyBjb250cmlidXRpb25zIiwiZ3JhbnRzIGNvbnRyaWJ1dGlvbnMgb3IiLCJjb250cmlidXRpb25zIG9yIGxpY2Vuc2VzIiwibGljZW5zZXMgdG8gZGF0YSIsInRvIGRhdGEgZ292ZXJuZWQiLCJhZ3JlZW1lbnQgMSA4IiwiMSA4IG1vZGlmeSIsIjggbW9kaWZ5IG1lYW5zIiwicmVzdWx0cyAxIDkiLCIxIDkgcHVibGlzaCIsIjkgcHVibGlzaCBtZWFucyIsImRhdGEgMSAxMCIsIjEgMTAgcmVjZWl2ZSIsIjEwIHJlY2VpdmUgb3IiLCJyZW1vdGVseSAxIDExIiwiMSAxMSByZXN1bHRzIiwiMTEgcmVzdWx0cyBtZWFucyIsImJhc2VkIDEgMTIiLCIxIDEyIHN1aSIsIjEyIHN1aSBnZW5lcmlzIiwid29ybGQgMSAxMyIsIjEgMTMgdXNlIiwiMTMgdXNlIG1lYW5zIiwiYm90aCAxIDE0IiwiZGF0YSBhIHRoZSIsImRhdGEgaW5jbHVkaW5nIHRoZSIsImluY2x1ZGluZyB0aGUgZW5oYW5jZWQiLCJ0aGUgZW5oYW5jZWQgZGF0YSIsImVuaGFuY2VkIGRhdGEgbXVzdCIsImRhdGEgbXVzdCBiZSIsIm11c3QgYmUgcHVibGlzaGVkIiwiYmUgcHVibGlzaGVkIHVuZGVyIiwiYWdyZWVtZW50IGluIGFjY29yZGFuY2UiLCJtYXkgbm90IHJlc3RyaWN0IiwicmVzdHJpY3Qgb3IgZGV0ZXIiLCJvciBkZXRlciB0aGUiLCJkZXRlciB0aGUgYWJpbGl0eSIsImFiaWxpdHkgb2YgYW55b25lIiwib2YgYW55b25lIHdobyIsInRoZSBkYXRhIGEiLCJkYXRhIGEgdG8iLCJhIHRvIHB1Ymxpc2giLCJ0aGUgZGF0YSBpbiIsImluIGEgcHVibGljbHkiLCJwdWJsaWNseSBhY2Nlc3NpYmxlIG1hbm5lciIsImFjY2Vzc2libGUgbWFubmVyIG9yIiwibWFubmVyIG9yIGIiLCJvciBiIGlmIiwiaWYgdGhlIHByb2plY3QiLCJ0aGUgcHJvamVjdCBoYXMiLCJwcm9qZWN0IGhhcyBkZXNpZ25hdGVkIiwiaGFzIGRlc2lnbmF0ZWQgYSIsImRlc2lnbmF0ZWQgYSBsZWRnZXIiLCJhIGxlZGdlciBmb3IiLCJsZWRnZXIgZm9yIHJlY29yZGluZyIsImZvciByZWNvcmRpbmcgZGF0YSIsInJlY29yZGluZyBkYXRhIG9yIiwiaW4gZGF0YSBmb3IiLCJkYXRhIGZvciBwdXJwb3NlcyIsImFncmVlbWVudCB0byByZWNvcmQiLCJ0byByZWNvcmQgdGhlIiwicmVjb3JkIHRoZSBkYXRhIiwiaW4gZGF0YSBpbiIsImluIHRoZSBsZWRnZXIiLCJ0aGUgbGVkZ2VyIDMiLCJsZWRnZXIgMyAzIiwic28gdW5kZXIgYW4iLCJ1bmRlciBhbiB1bm1vZGlmaWVkIiwiYW4gdW5tb2RpZmllZCBmb3JtIiwidW5tb2RpZmllZCBmb3JtIG9mIiwiYWdyZWVtZW50IGFuZCBpbmNsdWRlIiwibm90IG1vZGlmeSB0aGlzIiwiYWdyZWVtZW50IG9yIGltcG9zZSIsImFncmVlbWVudCBpbmNsdWRpbmcgYnkiLCJpbmNsdWRpbmcgYnkgYWRkaW5nIiwiYnkgYWRkaW5nIGFueSIsImFkZGluZyBhbnkgcmVzdHJpY3Rpb24iLCJhbnkgcmVzdHJpY3Rpb24gb24iLCJyZXN0cmljdGlvbiBvbiBjb21tZXJjaWFsIiwib24gY29tbWVyY2lhbCBvciIsImRhdGEgb3IgYnkiLCJvciBieSBsaW1pdGluZyIsImJ5IGxpbWl0aW5nIHBlcm1pdHRlZCIsImxpbWl0aW5nIHBlcm1pdHRlZCB1c2UiLCJwZXJtaXR0ZWQgdXNlIG9mIiwic3VjaCBkYXRhIHRvIiwiZGF0YSB0byBhbnkiLCJ0byBhbnkgcGFydGljdWxhciIsImFueSBwYXJ0aWN1bGFyIHBsYXRmb3JtIiwicGFydGljdWxhciBwbGF0Zm9ybSB0ZWNobm9sb2d5IiwicGxhdGZvcm0gdGVjaG5vbG9neSBvciIsInRlY2hub2xvZ3kgb3IgZmllbGQiLCJvciBmaWVsZCBvZiIsIm9mIGVuZGVhdm9yIG5vdGljZXMiLCJlbmRlYXZvciBub3RpY2VzIHRoYXQiLCJub3RpY2VzIHRoYXQgcHVycG9ydCIsInB1cnBvcnQgdG8gbW9kaWZ5Iiwib2Ygbm8gZWZmZWN0Iiwibm8gZWZmZWN0IDMiLCJlZmZlY3QgMyA0IiwiNCB5b3UgYW5kIiwicHJvdmlkZXIgMyA1IiwiMyA1IHRoaXMiLCJlbnRpdHkgMSA3IGxlZGdlciIsIjEgNyBsZWRnZXIgbWVhbnMiLCI3IGxlZGdlciBtZWFucyBhIiwibGVkZ2VyIG1lYW5zIGEgZGlnaXRhbCIsIm1lYW5zIGEgZGlnaXRhbCByZWNvcmQiLCJhIGRpZ2l0YWwgcmVjb3JkIG9mIiwiZGlnaXRhbCByZWNvcmQgb2YgZGF0YSIsInJlY29yZCBvZiBkYXRhIG9yIiwib2YgZGF0YSBvciBncmFudHMiLCJyaWdodHMgaW4gZGF0YSBnb3Zlcm5lZCIsImluIGRhdGEgZ292ZXJuZWQgYnkiLCJieSB0aGlzIGFncmVlbWVudCB1c2luZyIsInRoaXMgYWdyZWVtZW50IHVzaW5nIGFueSIsImFncmVlbWVudCB1c2luZyBhbnkgdGVjaG5vbG9neSIsInVzaW5nIGFueSB0ZWNobm9sb2d5IGhhdmluZyIsImFueSB0ZWNobm9sb2d5IGhhdmluZyBmdW5jdGlvbmFsaXR5IiwidGVjaG5vbG9neSBoYXZpbmcgZnVuY3Rpb25hbGl0eSB0byIsImhhdmluZyBmdW5jdGlvbmFsaXR5IHRvIHJlY29yZCIsImZ1bmN0aW9uYWxpdHkgdG8gcmVjb3JkIGFuZCIsInRvIHJlY29yZCBhbmQgc3RvcmUiLCJyZWNvcmQgYW5kIHN0b3JlIGRhdGEiLCJhbmQgc3RvcmUgZGF0YSBvciIsInN0b3JlIGRhdGEgb3IgZ3JhbnRzIiwiZGF0YSBvciBncmFudHMgY29udHJpYnV0aW9ucyIsIm9yIGdyYW50cyBjb250cmlidXRpb25zIG9yIiwiZ3JhbnRzIGNvbnRyaWJ1dGlvbnMgb3IgbGljZW5zZXMiLCJjb250cmlidXRpb25zIG9yIGxpY2Vuc2VzIHRvIiwib3IgbGljZW5zZXMgdG8gZGF0YSIsImxpY2Vuc2VzIHRvIGRhdGEgZ292ZXJuZWQiLCJ0byBkYXRhIGdvdmVybmVkIGJ5IiwiYnkgdGhpcyBhZ3JlZW1lbnQgMSIsInRoaXMgYWdyZWVtZW50IDEgOCIsImFncmVlbWVudCAxIDggbW9kaWZ5IiwiMSA4IG1vZGlmeSBtZWFucyIsIjggbW9kaWZ5IG1lYW5zIHRvIiwiaW5jbHVkZSByZXN1bHRzIDEgOSIsInJlc3VsdHMgMSA5IHB1Ymxpc2giLCIxIDkgcHVibGlzaCBtZWFucyIsIjkgcHVibGlzaCBtZWFucyB0byIsInB1Ymxpc2ggZGF0YSAxIDEwIiwiZGF0YSAxIDEwIHJlY2VpdmUiLCIxIDEwIHJlY2VpdmUgb3IiLCIxMCByZWNlaXZlIG9yIHJlY2VpdmVzIiwib3IgcmVtb3RlbHkgMSAxMSIsInJlbW90ZWx5IDEgMTEgcmVzdWx0cyIsIjEgMTEgcmVzdWx0cyBtZWFucyIsIjExIHJlc3VsdHMgbWVhbnMgdGhlIiwiaXMgYmFzZWQgMSAxMiIsImJhc2VkIDEgMTIgc3VpIiwiMSAxMiBzdWkgZ2VuZXJpcyIsIjEyIHN1aSBnZW5lcmlzIGRhdGFiYXNlIiwidGhlIHdvcmxkIDEgMTMiLCJ3b3JsZCAxIDEzIHVzZSIsIjEgMTMgdXNlIG1lYW5zIiwiMTMgdXNlIG1lYW5zIHVzaW5nIiwib2YgYm90aCAxIDE0IiwiYm90aCAxIDE0IHlvdSIsImVuaGFuY2VkIGRhdGEgYSB0aGUiLCJkYXRhIGEgdGhlIGRhdGEiLCJhIHRoZSBkYXRhIGluY2x1ZGluZyIsInRoZSBkYXRhIGluY2x1ZGluZyB0aGUiLCJkYXRhIGluY2x1ZGluZyB0aGUgZW5oYW5jZWQiLCJpbmNsdWRpbmcgdGhlIGVuaGFuY2VkIGRhdGEiLCJ0aGUgZW5oYW5jZWQgZGF0YSBtdXN0IiwiZW5oYW5jZWQgZGF0YSBtdXN0IGJlIiwiZGF0YSBtdXN0IGJlIHB1Ymxpc2hlZCIsIm11c3QgYmUgcHVibGlzaGVkIHVuZGVyIiwiYmUgcHVibGlzaGVkIHVuZGVyIHRoaXMiLCJwdWJsaXNoZWQgdW5kZXIgdGhpcyBhZ3JlZW1lbnQiLCJ0aGlzIGFncmVlbWVudCBpbiBhY2NvcmRhbmNlIiwiYWdyZWVtZW50IGluIGFjY29yZGFuY2Ugd2l0aCIsInNlY3Rpb24gMyBhbmQgYiIsIjIgeW91IG1heSBub3QiLCJ5b3UgbWF5IG5vdCByZXN0cmljdCIsIm1heSBub3QgcmVzdHJpY3Qgb3IiLCJub3QgcmVzdHJpY3Qgb3IgZGV0ZXIiLCJyZXN0cmljdCBvciBkZXRlciB0aGUiLCJvciBkZXRlciB0aGUgYWJpbGl0eSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDT05UUkFUIERFIExJQ0VOQ0UgREUgTE9HSUNJRUwgTElCUkUgQ2VDSUxMIEF2ZXJ0aXNzZW1lbnRcblxuQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgaXNzdWUgZCd1bmUgY29uY2VydGF0aW9uIGVudHJlIHNlcyBhdXRldXJzIGFmaW4gcXVlIGxlIHJlc3BlY3QgZGUgZGV1eCBncmFuZHMgcHJpbmNpcGVzIHByw6lzaWRlIMOgIHNhIHLDqWRhY3Rpb246XG5cbiAgIOKAoiBkJ3VuZSBwYXJ0LCBzYSBjb25mb3JtaXTDqSBhdSBkcm9pdCBmcmFuw6dhaXMsIHRhbnQgYXUgcmVnYXJkIGR1IGRyb2l0IGRlIGxhIHJlc3BvbnNhYmlsaXTDqSBjaXZpbGUgcXVlIGR1IGRyb2l0IGRlIGxhIHByb3ByacOpdMOpIGludGVsbGVjdHVlbGxlIGV0IGRlIGxhIHByb3RlY3Rpb24gcXUnaWwgb2ZmcmUgYXV4IGF1dGV1cnMgZXQgdGl0dWxhaXJlcyBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgdW4gbG9naWNpZWwuXG5cbiAgIOKAoiBkJ2F1dHJlIHBhcnQsIGxlIHJlc3BlY3QgZGVzIHByaW5jaXBlcyBkZSBkaWZmdXNpb24gZGVzIGxvZ2ljaWVscyBsaWJyZXM6IGFjY8OocyBhdSBjb2RlIHNvdXJjZSwgZHJvaXRzIMOpdGVuZHVzIGNvbmbDqXLDqXMgYXV4IHV0aWxpc2F0ZXVycy5cblxuTGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSBDZUNJTEwxIHNvbnQ6XG5cbkNvbW1pc3NhcmlhdCDDoCBsJ0VuZXJnaWUgQXRvbWlxdWUg4oCTIENFQSwgw6l0YWJsaXNzZW1lbnQgcHVibGljIGRlIGNhcmFjdMOocmUgc2NpZW50aWZpcXVlIHRlY2huaXF1ZSBldCBpbmR1c3RyaWVsLCBkb250IGxlIHNpw6hnZSBlc3Qgc2l0dcOpIDMxLTMzIHJ1ZSBkZSBsYSBGw6lkw6lyYXRpb24sIDc1NzUyIFBBUklTIGNlZGV4IDE1LlxuXG5DZW50cmUgTmF0aW9uYWwgZGUgbGEgUmVjaGVyY2hlIFNjaWVudGlmaXF1ZSDigJMgQ05SUywgw6l0YWJsaXNzZW1lbnQgcHVibGljIMOgIGNhcmFjdMOocmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2nDqGdlIGVzdCBzaXR1w6kgMyBydWUgTWljaGVsLUFuZ2UgNzU3OTQgUGFyaXMgY2VkZXggMTYuXG5cbkluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUg4oCTIElOUklBLCDDqXRhYmxpc3NlbWVudCBwdWJsaWMgw6AgY2FyYWN0w6hyZSBzY2llbnRpZmlxdWUgZXQgdGVjaG5vbG9naXF1ZSwgZG9udCBsZSBzacOoZ2UgZXN0IHNpdHXDqSBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleC5cblxuUFJFQU1CVUxFXG5cbkNlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGRvbnQgbCdvYmplY3RpZiBlc3QgZGUgY29uZsOpcmVyIGF1eCB1dGlsaXNhdGV1cnMgbGEgbGliZXJ0w6kgZGUgbW9kaWZpY2F0aW9uIGV0IGRlIHJlZGlzdHJpYnV0aW9uIGR1IGxvZ2ljaWVsIHLDqWdpIHBhciBjZXR0ZSBsaWNlbmNlIGRhbnMgbGUgY2FkcmUgZCd1biBtb2TDqGxlIGRlIGRpZmZ1c2lvbiDCq29wZW4gc291cmNlwrsuXG5cbkwnZXhlcmNpY2UgZGUgY2VzIGxpYmVydMOpcyBlc3QgYXNzb3J0aSBkZSBjZXJ0YWlucyBkZXZvaXJzIMOgIGxhIGNoYXJnZSBkZXMgdXRpbGlzYXRldXJzIGFmaW4gZGUgcHLDqXNlcnZlciBjZSBzdGF0dXQgYXUgY291cnMgZGVzIHJlZGlzdHJpYnV0aW9ucyB1bHTDqXJpZXVyZXMuXG5cbkwnYWNjZXNzaWJpbGl0w6kgYXUgY29kZSBzb3VyY2UgZXQgbGVzIGRyb2l0cyBkZSBjb3BpZSwgZGUgbW9kaWZpY2F0aW9uIGV0IGRlIHJlZGlzdHJpYnV0aW9uIHF1aSBlbiBkw6ljb3VsZW50IG9udCBwb3VyIGNvbnRyZXBhcnRpZSBkZSBuJ29mZnJpciBhdXggdXRpbGlzYXRldXJzIHF1J3VuZSBnYXJhbnRpZSBsaW1pdMOpZSBldCBkZSBuZSBmYWlyZSBwZXNlciBzdXIgbCdhdXRldXIgZHUgbG9naWNpZWwsIGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBldCBsZXMgY29uY8OpZGFudHMgc3VjY2Vzc2lmcyBxdSd1bmUgcmVzcG9uc2FiaWxpdMOpIHJlc3RyZWludGUuXG5cbkEgY2V0IMOpZ2FyZCBsJ2F0dGVudGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGVzdCBhdHRpcsOpZSBzdXIgbGVzIHJpc3F1ZXMgYXNzb2Npw6lzIGF1IGNoYXJnZW1lbnQsIMOgIGwndXRpbGlzYXRpb24sIMOgIGxhIG1vZGlmaWNhdGlvbiBldC9vdSBhdSBkw6l2ZWxvcHBlbWVudCBldCDDoCBsYSByZXByb2R1Y3Rpb24gZHUgbG9naWNpZWwgcGFyIGwndXRpbGlzYXRldXIgw6l0YW50IGRvbm7DqSBzYSBzcMOpY2lmaWNpdMOpIGRlIGxvZ2ljaWVsIGxpYnJlLCBxdWkgcGV1dCBsZSByZW5kcmUgY29tcGxleGUgw6AgbWFuaXB1bGVyIGV0IHF1aSBsZSByw6lzZXJ2ZSBkb25jIMOgIGRlcyBkw6l2ZWxvcHBldXJzIGV0IGRlcyBwcm9mZXNzaW9ubmVscyBhdmVydGlzIHBvc3PDqWRhbnQgZGVzIGNvbm5haXNzYW5jZXMgaW5mb3JtYXRpcXVlcyBhcHByb2ZvbmRpZXMuIExlcyB1dGlsaXNhdGV1cnMgc29udCBkb25jIGludml0w6lzIMOgIGNoYXJnZXIgZXQgdGVzdGVyIGwnYWTDqXF1YXRpb24gZHUgTG9naWNpZWwgw6AgbGV1cnMgYmVzb2lucyBkYW5zIGRlcyBjb25kaXRpb25zIHBlcm1ldHRhbnQgZCdhc3N1cmVyIGxhIHPDqWN1cml0w6kgZGUgbGV1cnMgc3lzdMOobWVzIGV0IG91IGRlIGxldXJzIGRvbm7DqWVzIGV0LCBwbHVzIGfDqW7DqXJhbGVtZW50LCDDoCBsJ3V0aWxpc2VyIGV0IGwnZXhwbG9pdGVyIGRhbnMgbGVzIG3Dqm1lIGNvbmRpdGlvbnMgZGUgc8OpY3VyaXTDqS4gQ2UgY29udHJhdCBwZXV0IMOqdHJlIHJlcHJvZHVpdCBldCBkaWZmdXPDqSBsaWJyZW1lbnQsIHNvdXMgcsOpc2VydmUgZGUgbGUgY29uc2VydmVyIGVuIGwnw6l0YXQsIHNhbnMgYWpvdXQgbmkgc3VwcHJlc3Npb24gZGUgY2xhdXNlcy5cblxuQ2UgY29udHJhdCBlc3Qgc3VzY2VwdGlibGUgZGUgcydhcHBsaXF1ZXIgw6AgdG91dCBsb2dpY2llbCBkb250IGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkw6ljaWRlIGRlIHNvdW1ldHRyZSBsJ2V4cGxvaXRhdGlvbiBhdXggZGlzcG9zaXRpb25zIHF1J2lsIGNvbnRpZW50LlxuXG5BcnRpY2xlIDFlciAtIERFRklOSVRJT05TXG5cbkRhbnMgY2UgY29udHJhdCwgbGVzIHRlcm1lcyBzdWl2YW50cywgbG9yc3F1J2lscyBzZXJvbnQgw6ljcml0cyBhdmVjIHVuZSBsZXR0cmUgY2FwaXRhbGUsIGF1cm9udCBsYSBzaWduaWZpY2F0aW9uIHN1aXZhbnRlOlxuXG5Db250cmF0OiBkw6lzaWduZSBsZSBwcsOpc2VudCBjb250cmF0IGRlIGxpY2VuY2UsIHNlcyDDqXZlbnR1ZWxsZXMgdmVyc2lvbnMgcG9zdMOpcmlldXJlcyBldCBhbm5leGVzLlxuXG5Mb2dpY2llbDogZMOpc2lnbmUgbGUgbG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIE9iamV0IGV0L291IGRlIENvZGUgU291cmNlIGV0IGxlIGNhcyDDqWNow6lhbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyIMOpdGF0IGF1IG1vbWVudCBkZSBsJ2FjY2VwdGF0aW9uIGR1XG5cbkNvbnRyYXQgcGFyIGxlIExpY2VuY2nDqS5cblxuTG9naWNpZWwgSW5pdGlhbDogZMOpc2lnbmUgbGUgTG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIFNvdXJjZSBldCBkZSBDb2RlIE9iamV0IGV0IGxlIGNhcyDDqWNow6lhbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyIMOpdGF0IGF1IG1vbWVudCBkZSBsZXVyIHByZW1pw6hyZSBkaWZmdXNpb24gc291cyBsZXMgdGVybWVzIGR1IENvbnRyYXQuXG5cbkxvZ2ljaWVsIE1vZGlmacOpOiBkw6lzaWduZSBsZSBMb2dpY2llbCBtb2RpZmnDqSBwYXIgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi5cblxuQ29kZSBTb3VyY2U6IGTDqXNpZ25lIGwnZW5zZW1ibGUgZGVzIGluc3RydWN0aW9ucyBldCBkZXMgbGlnbmVzIGRlIHByb2dyYW1tZSBkdSBMb2dpY2llbCBldCBhdXF1ZWwgbCdhY2PDqHMgZXN0IG7DqWNlc3NhaXJlIGVuIHZ1ZSBkZSBtb2RpZmllciBsZSBMb2dpY2llbC5cblxuQ29kZSBPYmpldDogZMOpc2lnbmUgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIGlzc3VzIGRlIGxhIGNvbXBpbGF0aW9uIGR1IENvZGUgU291cmNlLlxuXG5UaXR1bGFpcmUgOiBkw6lzaWduZSBsZSBkw6l0ZW50ZXVyIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGQnYXV0ZXVyIHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLlxuXG5MaWNlbmNpw6kocyk6IGTDqXNpZ25lIGxlIG91IGxlcyB1dGlsaXNhdGV1cihzKSBkdSBMb2dpY2llbCBheWFudCBhY2NlcHTDqSBsZSBDb250cmF0LlxuXG5Db250cmlidXRldXI6IGTDqXNpZ25lIGxlIExpY2VuY2nDqSBhdXRldXIgZCdhdSBtb2lucyB1bmUgQ29udHJpYnV0aW9uLlxuXG5Db25jw6lkYW50OiBkw6lzaWduZSBsZSBUaXR1bGFpcmUgb3UgdG91dGUgcGVyc29ubmUgcGh5c2lxdWUgb3UgbW9yYWxlIGRpc3RyaWJ1YW50IGxlIExvZ2ljaWVsIHNvdXMgbGUgQ29udHJhdC5cblxuQ29udHJpYnV0aW9uczogZMOpc2lnbmUgbCdlbnNlbWJsZSBkZXMgbW9kaWZpY2F0aW9ucywgY29ycmVjdGlvbnMsIHRyYWR1Y3Rpb25zLCBhZGFwdGF0aW9ucyBldC9vdSBub3V2ZWxsZXMgZm9uY3Rpb25uYWxpdMOpcyBpbnTDqWdyw6llcyBkYW5zIGxlIExvZ2ljaWVsIHBhciB0b3V0XG5cbkNvbnRyaWJ1dGV1ciwgYWluc2kgcXVlIGxlcyBNb2R1bGVzIFN0YXRpcXVlcy5cblxuTW9kdWxlOiBkw6lzaWduZSB1biBlbnNlbWJsZSBkZSBmaWNoaWVycyBzb3VyY2VzIHkgY29tcHJpcyBsZXVyIGRvY3VtZW50YXRpb24gcXVpLCB1bmUgZm9pcyBjb21waWzDqSBzb3VzIGZvcm1lIGV4w6ljdXRhYmxlLCBwZXJtZXQgZGUgcsOpYWxpc2VyIGRlcyBmb25jdGlvbm5hbGl0w6lzIG91XG5cbnNlcnZpY2VzIHN1cHBsw6ltZW50YWlyZXMgw6AgY2V1eCBmb3VybmlzIHBhciBsZSBMb2dpY2llbC5cblxuTW9kdWxlIER5bmFtaXF1ZTogZMOpc2lnbmUgdG91dCBNb2R1bGUsIGNyw6nDqSBwYXIgbGUgQ29udHJpYnV0ZXVyLCBpbmTDqXBlbmRhbnQgZHUgTG9naWNpZWwsIHRlbCBxdWUgY2UgTW9kdWxlIGV0IGxlIExvZ2ljaWVsIHNvbnQgc291cyBmb3JtZSBkZSBkZXV4IGV4w6ljdXRhYmxlcyBpbmTDqXBlbmRhbnRzIHF1aSBzJ2V4w6ljdXRlbnQgZGFucyB1biBlc3BhY2UgZCdhZHJlc3NhZ2UgaW5kw6lwZW5kYW50LCBsJ3VuIGFwcGVsYW50IGwnYXV0cmUgYXUgbW9tZW50IGRlIGxldXIgZXjDqWN1dGlvbi5cblxuTW9kdWxlIFN0YXRpcXVlOiBkw6lzaWduZSB0b3V0IE1vZHVsZSBjcsOpw6kgcGFyIGxlIENvbnRyaWJ1dGV1ciBldCBsacOpIGF1IExvZ2ljaWVsIHBhciB1biBsaWVuIHN0YXRpcXVlIHJlbmRhbnQgbGV1ciBjb2RlIG9iamV0IGTDqXBlbmRhbnQgbCd1biBkZSBsJ2F1dHJlLiBDZSBNb2R1bGUgZXQgbGUgTG9naWNpZWwgYXVxdWVsIGlsIGVzdCBsacOpLCBzb250IHJlZ3JvdXDDqXMgZW4gdW4gc2V1bCBleMOpY3V0YWJsZS5cblxuUGFydGllczogZMOpc2lnbmUgY29sbGVjdGl2ZW1lbnQgbGUgTGljZW5jacOpIGV0IGxlIENvbmPDqWRhbnQuXG5cbkNlcyB0ZXJtZXMgcydlbnRlbmRlbnQgYXUgc2luZ3VsaWVyIGNvbW1lIGF1IHBsdXJpZWwuXG5cbkFydGljbGUgMiAtIE9CSkVUXG5cbkxlIENvbnRyYXQgYSBwb3VyIG9iamV0IGxhIGNvbmNlc3Npb24gcGFyIGxlIENvbmPDqWRhbnQgYXUgTGljZW5jacOpIGQndW5lIExpY2VuY2Ugbm9uIGV4Y2x1c2l2ZSwgdHJhbnNmw6lyYWJsZSBldCBtb25kaWFsZSBkdSBMb2dpY2llbCB0ZWxsZSBxdWUgZMOpZmluaWUgY2ktYXByw6hzIMOgIGwnYXJ0aWNsZSA1IHBvdXIgdG91dGUgbGEgZHVyw6llIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwb3J0YW50IHN1ciBjZSBMb2dpY2llbC5cblxuQXJ0aWNsZSAzIC0gQUNDRVBUQVRJT05cblxuICAgMy4xLiBMJ2FjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpw6kgZGVzIHRlcm1lcyBkdSBDb250cmF0IGVzdCByw6lwdXTDqWUgYWNxdWlzZSBkdSBmYWl0IGR1IHByZW1pZXIgZGVzIGZhaXRzIHN1aXZhbnRzOlxuXG4gICAgICDigKIgKGkpIGxlIGNoYXJnZW1lbnQgZHUgTG9naWNpZWwgcGFyIHRvdXQgbW95ZW4gbm90YW1tZW50IHBhciB0w6lsw6ljaGFyZ2VtZW50IMOgIHBhcnRpciBkJ3VuIHNlcnZldXIgZGlzdGFudCBvdSBwYXIgY2hhcmdlbWVudCDDoCBwYXJ0aXIgZCd1biBzdXBwb3J0IHBoeXNpcXVlO1xuXG4gICAgICDigKIgKGlpKSBsZSBwcmVtaWVyIGV4ZXJjaWNlIHBhciBsZSBMaWNlbmNpw6kgZGUgbCd1biBxdWVsY29ucXVlIGRlcyBkcm9pdHMgY29uY8OpZMOpcyBwYXIgbGUgQ29udHJhdC5cblxuICAgMy4yLiBVbiBleGVtcGxhaXJlIGR1IENvbnRyYXQsIGNvbnRlbmFudCBub3RhbW1lbnQgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmIGF1eCBzcMOpY2lmaWNpdMOpcyBkdSBMb2dpY2llbCwgw6AgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgw6AgbGEgbGltaXRhdGlvbiDDoCB1biB1c2FnZSBwYXIgZGVzIHV0aWxpc2F0ZXVycyBleHDDqXJpbWVudMOpcyBhIMOpdMOpIG1pcyDDoCBkaXNwb3NpdGlvbiBkdSBMaWNlbmNpw6kgcHLDqWFsYWJsZW1lbnQgw6Agc29uIGFjY2VwdGF0aW9uIHRlbGxlIHF1ZSBkw6lmaW5pZSDDoCBsJ2FydGljbGUgMy4xIGNpIGRlc3N1cyBldCBsZSBMaWNlbmNpw6kgcmVjb25uYcOudCBlbiBhdm9pciBwcmlzIGNvbm5haXNzYW5jZXMuXG5cbkFydGljbGUgNCAtIEVOVFJFRSBFTiBWSUdVRVVSIEVUIERVUkVFXG5cbiAgIDQuMS4gRU5UUkVFIEVOIFZJR1VFVVJcblxuICAgTGUgQ29udHJhdCBlbnRyZSBlbiB2aWd1ZXVyIMOgIGxhIGRhdGUgZGUgc29uIGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpw6kgdGVsbGUgcXVlIGTDqWZpbmllIGVuIDMuMS5cblxuICAgNC4yLiBEVVJFRVxuXG4gICBMZSBDb250cmF0IHByb2R1aXJhIHNlcyBlZmZldHMgcGVuZGFudCB0b3V0ZSBsYSBkdXLDqWUgbMOpZ2FsZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHBvcnRhbnQgc3VyIGxlIExvZ2ljaWVsLlxuXG5BcnRpY2xlIDUgLSBFVEVORFVFIERFUyBEUk9JVFMgQ09OQ0VERVNcblxuTGUgQ29uY8OpZGFudCBjb25jw6hkZSBhdSBMaWNlbmNpw6ksIHF1aSBhY2NlcHRlLCBsZXMgZHJvaXRzIHN1aXZhbnRzIHN1ciBsZSBMb2dpY2llbCBwb3VyIHRvdXRlcyBkZXN0aW5hdGlvbnMgZXQgcG91ciBsYSBkdXLDqWUgZHUgQ29udHJhdCBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwcsOocyBkw6l0YWlsbMOpZXMuXG5cblBhciBhaWxsZXVycywgbGUgQ29uY8OpZGFudCBjb25jw6hkZSBhdSBMaWNlbmNpw6kgw6AgdGl0cmUgZ3JhY2lldXggbGVzIGRyb2l0cyBkJ2V4cGxvaXRhdGlvbiBkdSBvdSBkZXMgYnJldmV0cyBxdSdpbCBkw6l0aWVudCBzdXIgdG91dCBvdSBwYXJ0aWUgZGVzIGludmVudGlvbnNcblxuaW1wbMOpbWVudMOpZXMgZGFucyBsZSBMb2dpY2llbC5cblxuICAgNS4xLiBEUk9JVFMgRCdVVElMSVNBVElPTlxuXG4gICBMZSBMaWNlbmNpw6kgZXN0IGF1dG9yaXPDqSDDoCB1dGlsaXNlciBsZSBMb2dpY2llbCwgc2FucyByZXN0cmljdGlvbiBxdWFudCBhdXggZG9tYWluZXMgZCdhcHBsaWNhdGlvbiwgw6l0YW50IGNpLWFwcsOocyBwcsOpY2lzw6kgcXVlIGNlbGEgY29tcG9ydGU6XG5cbiAgICAgIDEuIGxhIHJlcHJvZHVjdGlvbiBwZXJtYW5lbnRlIG91IHByb3Zpc29pcmUgZHUgTG9naWNpZWwgZW4gdG91dCBvdSBwYXJ0aWUgcGFyIHRvdXQgbW95ZW4gZXQgc291cyB0b3V0ZSBmb3JtZS5cblxuICAgICAgMi4gbGUgY2hhcmdlbWVudCwgbCdhZmZpY2hhZ2UsIGwnZXjDqWN1dGlvbiwgb3UgbGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgc3VyIHRvdXQgc3VwcG9ydC5cblxuICAgICAgMy4gbGEgcG9zc2liaWxpdMOpIGQnZW4gb2JzZXJ2ZXIsIGQnZW4gw6l0dWRpZXIsIG91IGQnZW4gdGVzdGVyIGxlIGZvbmN0aW9ubmVtZW50IGFmaW4gZGUgZMOpdGVybWluZXIgbGVzIGlkw6llcyBldCBwcmluY2lwZXMgcXVpIHNvbnQgw6AgbGEgYmFzZSBkZSBuJ2ltcG9ydGUgcXVlbCDDqWzDqW1lbnQgZGUgY2UgTG9naWNpZWw7IGV0IGNlY2ksIGxvcnNxdWUgbGUgTGljZW5jacOpIGVmZmVjdHVlIHRvdXRlIG9ww6lyYXRpb24gZGUgY2hhcmdlbWVudCwgZCdhZmZpY2hhZ2UsIGQnZXjDqWN1dGlvbiwgZGUgdHJhbnNtaXNzaW9uIG91IGRlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHF1J2lsIGVzdCBlbiBkcm9pdCBkJ2VmZmVjdHVlciBlbiB2ZXJ0dSBkdSBDb250cmF0LlxuXG4gICA1LjIuIERST0lUIEQnQVBQT1JURVIgREVTIENPTlRSSUJVVElPTlNcblxuICAgTGUgZHJvaXQgZCdhcHBvcnRlciBkZXMgQ29udHJpYnV0aW9ucyBjb21wb3J0ZSBsZSBkcm9pdCBkZSB0cmFkdWlyZSwgZCdhZGFwdGVyLCBkJ2FycmFuZ2VyIG91IGQnYXBwb3J0ZXIgdG91dGUgYXV0cmUgbW9kaWZpY2F0aW9uIGR1IExvZ2ljaWVsIGV0IGxlIGRyb2l0IGRlIHJlcHJvZHVpcmUgbGUgTG9naWNpZWwgZW4gcsOpc3VsdGFudC5cblxuICAgTGUgTGljZW5jacOpIGVzdCBhdXRvcmlzw6kgw6AgYXBwb3J0ZXIgdG91dGUgQ29udHJpYnV0aW9uIGF1IExvZ2ljaWVsIHNvdXMgcsOpc2VydmUgZGUgbWVudGlvbm5lciwgZGUgZmHDp29uIGV4cGxpY2l0ZSwgc29uIG5vbSBlbiB0YW50IHF1J2F1dGV1ciBkZSBjZXR0ZSBDb250cmlidXRpb24gZXQgbGEgZGF0ZSBkZSBjcsOpYXRpb24gZGUgY2VsbGUtY2kuXG5cbiAgIDUuMy4gRFJPSVRTIERFIERJU1RSSUJVVElPTiBFVCBERSBESUZGVVNJT05cblxuICAgTGUgZHJvaXQgZGUgZGlzdHJpYnV0aW9uIGV0IGRlIGRpZmZ1c2lvbiBjb21wb3J0ZSBub3RhbW1lbnQgbGUgZHJvaXQgZGUgdHJhbnNtZXR0cmUgZXQgZGUgY29tbXVuaXF1ZXIgbGUgTG9naWNpZWwgYXUgcHVibGljIHN1ciB0b3V0IHN1cHBvcnQgZXQgcGFyIHRvdXQgbW95ZW4gYWluc2kgcXVlIGxlIGRyb2l0IGRlIG1ldHRyZSBzdXIgbGUgbWFyY2jDqSDDoCB0aXRyZSBvbsOpcmV1eCBvdSBncmF0dWl0LCB1biBvdSBkZXMgZXhlbXBsYWlyZXMgZHUgTG9naWNpZWwgcGFyIHRvdXQgcHJvY8OpZMOpLlxuXG4gICBMZSBMaWNlbmNpw6kgZXN0IGF1dG9yaXPDqSDDoCByZWRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkdSBMb2dpY2llbCwgbW9kaWZpw6kgb3Ugbm9uLCDDoCBkZXMgdGllcnMgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHLDqHMgZMOpdGFpbGzDqWVzLlxuXG4gICAgICA1LjMuMS4gUkVESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgU0FOUyBNT0RJRklDQVRJT05cblxuICAgICAgTGUgTGljZW5jacOpIGVzdCBhdXRvcmlzw6kgw6AgcmVkaXN0cmlidWVyIGRlcyBjb3BpZXMgY29uZm9ybWVzIGR1IExvZ2ljaWVsLCBzb3VzIGZvcm1lIGRlIENvZGUgU291cmNlIG91IGRlIENvZGUgT2JqZXQsIMOgIGNvbmRpdGlvbiBxdWUgY2V0dGUgcmVkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0w6kgZXQgc29pdCBhY2NvbXBhZ27DqWU6XG5cbiAgICAgICAgIDEuIGQndW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LFxuXG4gICAgICAgICAyLiBkJ3VuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiDDoCBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0w6kgZHUgQ29uY8OpZGFudCB0ZWxsZSBxdWUgcHLDqXZ1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LFxuXG4gICAgICAgICBldCBxdWUsIGRhbnMgbGUgY2FzIG/DuSBzZXVsIGxlIENvZGUgT2JqZXQgZHUgTG9naWNpZWwgZXN0IHJlZGlzdHJpYnXDqSwgbGUgTGljZW5jacOpIHBlcm1ldHRlIGF1eCBmdXR1cnMgTGljZW5jacOpcyBkJ2FjY8OpZGVyIGZhY2lsZW1lbnQgYXUgQ29kZSBTb3VyY2UgY29tcGxldCBkdSBMb2dpY2llbCBlbiBpbmRpcXVhbnQgbGVzIG1vZGFsaXTDqXMgZCdhY2PDqHMsIMOpdGFudCBlbnRlbmR1IHF1ZSBsZSBjb8O7dCBhZGRpdGlvbm5lbCBkJ2FjcXVpc2l0aW9uIGR1IENvZGUgU291cmNlIG5lIGRldnJhIHBhcyBleGPDqWRlciBsZSBzaW1wbGUgY2/Du3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uw6llcy5cblxuICAgICAgNS4zLjIuIFJFRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIE1PRElGSUVcblxuICAgICAgTG9yc3F1ZSBsZSBMaWNlbmNpw6kgYXBwb3J0ZSB1bmUgQ29udHJpYnV0aW9uIGF1IExvZ2ljaWVsLCBsZXMgY29uZGl0aW9ucyBkZSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBNb2RpZmnDqSBzb250IGFsb3JzIHNvdW1pc2VzIMOgIGwnaW50w6lncmFsaXTDqSBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQuXG5cbiAgICAgIExlIExpY2VuY2nDqSBlc3QgYXV0b3Jpc8OpIMOgIHJlZGlzdHJpYnVlciBsZSBMb2dpY2llbCBNb2RpZmnDqSwgc291cyBmb3JtZSBkZSBDb2RlIFNvdXJjZSBvdSBkZSBDb2RlIE9iamV0LCDDoCBjb25kaXRpb24gcXVlIGNldHRlIHJlZGlzdHJpYnV0aW9uIHJlc3BlY3RlIGxlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBkYW5zIGxldXIgdG90YWxpdMOpIGV0IHNvaXQgYWNjb21wYWduw6llOlxuXG4gICAgICAgICAxLiBkJ3VuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCxcblxuICAgICAgICAgMi4gZCd1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgw6AgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgZGUgcmVzcG9uc2FiaWxpdMOpIGR1IGNvbmPDqWRhbnQgdGVsbGUgcXVlIHByw6l2dWUgYXV4IGFydGljbGVzIDggZXQgOSxcblxuICAgICAgICAgZXQgcXVlLCBkYW5zIGxlIGNhcyBvw7kgc2V1bCBsZSBDb2RlIE9iamV0IGR1IExvZ2ljaWVsIE1vZGlmacOpIGVzdCByZWRpc3RyaWJ1w6ksIGxlIExpY2VuY2nDqSBwZXJtZXR0ZSBhdXggZnV0dXJzIExpY2VuY2nDqXMgZCdhY2PDqWRlciBmYWNpbGVtZW50IGF1IENvZGUgU291cmNlIGNvbXBsZXQgZHUgTG9naWNpZWwgTW9kaWZpw6kgZW4gaW5kaXF1YW50IGxlcyBtb2RhbGl0w6lzIGQnYWNjw6hzLCDDqXRhbnQgZW50ZW5kdSBxdWUgbGUgY2/Du3QgYWRkaXRpb25uZWwgZCdhY3F1aXNpdGlvbiBkdSBDb2RlIFNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjw6lkZXIgbGUgc2ltcGxlIGNvw7t0IGRlIHRyYW5zZmVydCBkZXMgZG9ubsOpZXMuXG5cbiAgICAgIDUuMy4zLiBSRURJU1RSSUJVVElPTiBERVMgTU9EVUxFUyBEWU5BTUlRVUVTXG5cbiAgICAgIExvcnNxdWUgbGUgTGljZW5jacOpIGEgZMOpdmVsb3Bww6kgdW4gTW9kdWxlIER5bmFtaXF1ZSBsZXMgY29uZGl0aW9ucyBkdSBDb250cmF0IG5lIHMnYXBwbGlxdWVudCBwYXMgw6AgY2UgTW9kdWxlIER5bmFtaXF1ZSwgcXVpIHBldXQgw6p0cmUgZGlzdHJpYnXDqSBzb3VzIHVuIGNvbnRyYXQgZGUgbGljZW5jZSBkaWZmw6lyZW50LlxuXG4gICAgICA1LjMuNC4gQ09NUEFUSUJJTElURSBBVkVDIExBIExJQ0VOQ0UgR1BMXG5cbiAgICAgIERhbnMgbGUgY2FzIG/DuSBsZSBMb2dpY2llbCwgTW9kaWZpw6kgb3Ugbm9uLCBlc3QgaW50w6lncsOpIMOgIHVuIGNvZGUgc291bWlzIGF1eCBkaXNwb3NpdGlvbnMgZGUgbGEgbGljZW5jZSBHUEwsIGxlIExpY2VuY2nDqSBlc3QgYXV0b3Jpc8OpIMOgIHJlZGlzdHJpYnVlciBsJ2Vuc2VtYmxlIHNvdXMgbGEgbGljZW5jZSBHUEwuXG5cbiAgICAgIERhbnMgbGUgY2FzIG/DuSBsZSBMb2dpY2llbCBNb2RpZmnDqSBpbnTDqGdyZSB1biBjb2RlIHNvdW1pcyBhdXggZGlzcG9zaXRpb25zIGRlIGxhIGxpY2VuY2UgR1BMLCBsZSBMaWNlbmNpw6kgZXN0IGF1dG9yaXPDqSDDoCByZWRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwgTW9kaWZpw6kgc291cyBsYSBsaWNlbmNlIEdQTC5cblxuQXJ0aWNsZSA2IC0gUFJPUFJJRVRFIElOVEVMTEVDVFVFTExFXG5cbiAgIDYuMS4gU1VSIExFIExPR0lDSUVMIElOSVRJQUxcblxuICAgTGUgVGl0dWxhaXJlIGVzdCBkw6l0ZW50ZXVyIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLiBUb3V0ZSB1dGlsaXNhdGlvbiBkdSBMb2dpY2llbCBJbml0aWFsIGVzdCBzb3VtaXNlIGF1IHJlc3BlY3QgZGVzIGNvbmRpdGlvbnMgZGFucyBsZXNxdWVsbGVzIGxlIFRpdHVsYWlyZSBhIGNob2lzaSBkZSBkaWZmdXNlciBzb24gxZN1dnJlIGV0IG51bCBhdXRyZSBuJ2EgbGEgZmFjdWx0w6kgZGUgbW9kaWZpZXIgbGVzIGNvbmRpdGlvbnMgZGUgZGlmZnVzaW9uIGRlIGNlIExvZ2ljaWVsIEluaXRpYWwuXG5cbiAgIExlIFRpdHVsYWlyZSBzJ2VuZ2FnZSDDoCBtYWludGVuaXIgbGEgZGlmZnVzaW9uIGR1IExvZ2ljaWVsIGluaXRpYWwgc291cyBsZXMgY29uZGl0aW9ucyBkdSBDb250cmF0IGV0IGNlLCBwb3VyIGxhIGR1csOpZSB2aXPDqWUgw6AgbCdhcnRpY2xlIDQuMi5cblxuICAgNi4yLiBTVVIgTEVTIENPTlRSSUJVVElPTlNcblxuICAgTGVzIGRyb2l0cyBkZSBwcm9wcmnDqXTDqSBpbnRlbGxlY3R1ZWxsZSBzdXIgbGVzIENvbnRyaWJ1dGlvbnMgc29udCBhdHRhY2jDqXMgYXUgdGl0dWxhaXJlIGRlIGRyb2l0cyBwYXRyaW1vbmlhdXggZMOpc2lnbsOpIHBhciBsYSBsw6lnaXNsYXRpb24gYXBwbGljYWJsZS5cblxuICAgNi4zLiBTVVIgTEVTIE1PRFVMRVMgRFlOQU1JUVVFU1xuXG4gICBMZSBMaWNlbmNpw6kgYXlhbnQgZMOpdmVsb3Bww6kgdW4gTW9kdWxlIER5bmFtaXF1ZSBlc3QgdGl0dWxhaXJlIGRlcyBkcm9pdHMgZGUgcHJvcHJpw6l0w6kgaW50ZWxsZWN0dWVsbGUgc3VyIGNlIE1vZHVsZSBEeW5hbWlxdWUgZXQgcmVzdGUgbGlicmUgZHUgY2hvaXggZHUgY29udHJhdCByw6lnaXNzYW50IHNhIGRpZmZ1c2lvbi5cblxuICAgNi40LiBESVNQT1NJVElPTlMgQ09NTVVORVNcblxuICAgICAgNi40LjEuIExlIExpY2VuY2nDqSBzJ2VuZ2FnZSBleHByZXNzw6ltZW50OlxuXG4gICAgICAgICAxLiDDoCBuZSBwYXMgc3VwcHJpbWVyIG91IG1vZGlmaWVyIGRlIHF1ZWxxdWUgbWFuacOocmUgcXVlIGNlIHNvaXQgbGVzIG1lbnRpb25zIGRlIHByb3ByacOpdMOpIGludGVsbGVjdHVlbGxlIGFwcG9zw6llcyBzdXIgbGUgTG9naWNpZWw7XG5cbiAgICAgICAgIDIuIMOgIHJlcHJvZHVpcmUgw6AgbCdpZGVudGlxdWUgbGVzZGl0ZXMgbWVudGlvbnMgZGUgcHJvcHJpw6l0w6kgaW50ZWxsZWN0dWVsbGUgc3VyIGxlcyBjb3BpZXMgZHUgTG9naWNpZWwuXG5cbiAgICAgIDYuNC4yLiBMZSBMaWNlbmNpw6kgcydlbmdhZ2Ugw6AgbmUgcGFzIHBvcnRlciBhdHRlaW50ZSwgZGlyZWN0ZW1lbnQgb3UgaW5kaXJlY3RlbWVudCwgYXV4IGRyb2l0cyBkZSBwcm9wcmnDqXTDqSBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMgZXQgw6AgcHJlbmRyZSwgbGUgY2FzIMOpY2jDqWFudCwgw6AgbCfDqWdhcmQgZGUgc29uIHBlcnNvbm5lbCB0b3V0ZXMgbGVzIG1lc3VyZXMgbsOpY2Vzc2FpcmVzIHBvdXIgYXNzdXJlciBsZSByZXNwZWN0IGRlcyBkaXRzIGRyb2l0cyBkZSBwcm9wcmnDqXTDqSBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMuXG5cbkFydGljbGUgNyAtIFNFUlZJQ0VTIEFTU09DSUVTXG5cbiAgIDcuMS4gTGUgQ29udHJhdCBuJ29ibGlnZSBlbiBhdWN1biBjYXMgbGUgQ29uY8OpZGFudCDDoCBsYSByw6lhbGlzYXRpb24gZGUgcHJlc3RhdGlvbnMgZCdhc3Npc3RhbmNlIHRlY2huaXF1ZSBvdSBkZSBtYWludGVuYW5jZSBkdSBMb2dpY2llbC5cblxuICAgQ2VwZW5kYW50IGxlIENvbmPDqWRhbnQgcmVzdGUgbGlicmUgZGUgcHJvcG9zZXIgY2UgdHlwZSBkZSBzZXJ2aWNlcy4gTGVzIHRlcm1lcyBldCBjb25kaXRpb25zIGQndW5lIHRlbGxlIGFzc2lzdGFuY2UgdGVjaG5pcXVlIGV0L291IGQndW5lIHRlbGxlIG1haW50ZW5hbmNlIHNlcm9udCBhbG9ycyBkw6l0ZXJtaW7DqXMgZGFucyB1biBhY3RlIHPDqXBhcsOpLiBDZXMgYWN0ZXMgZGUgbWFpbnRlbmFuY2UgZXQvb3UgYXNzaXN0YW5jZSB0ZWNobmlxdWUgbidlbmdhZ2Vyb250IHF1ZSBsYSBzZXVsZSByZXNwb25zYWJpbGl0w6kgZHUgQ29uY8OpZGFudCBxdWkgbGVzIHByb3Bvc2UuXG5cbiAgIDcuMi4gRGUgbcOqbWUsIHRvdXQgQ29uY8OpZGFudCBlc3QgbGlicmUgZGUgcHJvcG9zZXIsIHNvdXMgc2Egc2V1bGUgcmVzcG9uc2FiaWxpdMOpLCDDoCBzZXMgbGljZW5jacOpcyB1bmUgZ2FyYW50aWUsIHF1aSBuJ2VuZ2FnZXJhIHF1ZSBsdWksIGxvcnMgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgZXQvb3UgZHUgTG9naWNpZWwgTW9kaWZpw6kgZXQgY2UsIGRhbnMgbGVzIGNvbmRpdGlvbnMgcXUnaWwgc291aGFpdGUuIENldHRlIGdhcmFudGllIGV0IGxlcyBtb2RhbGl0w6lzIGZpbmFuY2nDqHJlcyBkZSBzb24gYXBwbGljYXRpb24gZmVyb250IGwnb2JqZXQgZCd1biBhY3RlIHPDqXBhcsOpIGVudHJlIGxlIENvbmPDqWRhbnQgZXQgbGUgTGljZW5jacOpLlxuXG5BcnRpY2xlIDggLSBSRVNQT05TQUJJTElURVxuXG4gICA4LjEuIFNvdXMgcsOpc2VydmUgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsJ2FydGljbGUgOC4yLCBzaSBsZSBDb25jw6lkYW50IG4nZXjDqWN1dGUgcGFzIHRvdXQgb3UgcGFydGllIGRlcyBvYmxpZ2F0aW9ucyBtaXNlcyDDoCBzYSBjaGFyZ2UgcGFyIGxlIENvbnRyYXQsIGxlIExpY2VuY2nDqSBhIGxhIGZhY3VsdMOpLCBzb3VzIHLDqXNlcnZlIGRlIHByb3V2ZXIgbGEgZmF1dGUgZHUgQ29uY8OpZGFudCBjb25jZXJuw6ksIGRlIHNvbGxpY2l0ZXIgbGEgcsOpcGFyYXRpb24gZHUgcHLDqWp1ZGljZSBkaXJlY3QgcXUnaWwgc3ViaXQgZXQgZG9udCBpbCBhcHBvcnRlcmEgbGEgcHJldXZlLlxuXG4gICA4LjIuIExhIHJlc3BvbnNhYmlsaXTDqSBkdSBDb25jw6lkYW50IGVzdCBsaW1pdMOpZSBhdXggZW5nYWdlbWVudHMgcHJpcyBlbiBhcHBsaWNhdGlvbiBkdSBDb250cmF0IGV0IG5lIHNhdXJhaXQgw6p0cmUgZW5nYWfDqWUgZW4gcmFpc29uIG5vdGFtbWVudDooaSkgZGVzIGRvbW1hZ2VzIGR1cyDDoCBsJ2luZXjDqWN1dGlvbiwgdG90YWxlIG91IHBhcnRpZWxsZSwgZGUgc2VzIG9ibGlnYXRpb25zIHBhciBsZSBMaWNlbmNpw6ksIChpaSkgZGVzIGRvbW1hZ2VzIGRpcmVjdHMgb3UgaW5kaXJlY3RzIGTDqWNvdWxhbnQgZGUgbCd1dGlsaXNhdGlvbiBvdSBkZXMgcGVyZm9ybWFuY2VzIGR1IExvZ2ljaWVsIHN1YmlzIHBhciBsZSBMaWNlbmNpw6kgbG9yc3F1J2lsIHMnYWdpdCBkJ3VuIHByb2Zlc3Npb25uZWwgdXRpbGlzYW50IGxlIExvZ2ljaWVsIMOgIGRlcyBmaW5zIHByb2Zlc3Npb25uZWxsZXMgZXQgKGlpaSkgZGVzIGRvbW1hZ2VzIGluZGlyZWN0cyBkw6ljb3VsYW50IGRlIGwndXRpbGlzYXRpb24gb3UgZGVzIHBlcmZvcm1hbmNlcyBkdSBMb2dpY2llbC4gTGVzIFBhcnRpZXMgY29udmllbm5lbnQgZXhwcmVzc8OpbWVudCBxdWUgdG91dCBwcsOpanVkaWNlIGZpbmFuY2llciBvdSBjb21tZXJjaWFsIChwYXIgZXhlbXBsZSBwZXJ0ZSBkZSBkb25uw6llcywgcGVydGUgZGUgYsOpbsOpZmljZXMsIHBlcnRlIGQnZXhwbG9pdGF0aW9uLCBwZXJ0ZSBkZSBjbGllbnTDqGxlIG91IGRlIGNvbW1hbmRlcywgbWFucXVlIMOgIGdhZ25lciwgdHJvdWJsZSBjb21tZXJjaWFsIHF1ZWxjb25xdWUpIG91IHRvdXRlIGFjdGlvbiBkaXJpZ8OpZSBjb250cmUgbGUgTGljZW5jacOpIHBhciB1biB0aWVycywgY29uc3RpdHVlIHVuIGRvbW1hZ2UgaW5kaXJlY3QgZXQgbidvdXZyZSBwYXMgZHJvaXQgw6AgcsOpcGFyYXRpb24gcGFyIGxlIENvbmPDqWRhbnQuXG5cbkFydGljbGUgOSAtIEdBUkFOVElFXG5cbiAgIDkuMS4gTGUgTGljZW5jacOpIHJlY29ubmHDrnQgcXVlIGwnw6l0YXQgYWN0dWVsIGRlcyBjb25uYWlzc2FuY2VzIHNjaWVudGlmaXF1ZXMgZXQgdGVjaG5pcXVlcyBhdSBtb21lbnQgZGUgbGEgbWlzZSBlbiBjaXJjdWxhdGlvbiBkdSBMb2dpY2llbCBuZSBwZXJtZXQgcGFzIGQnZW4gdGVzdGVyIGV0IGQnZW4gdsOpcmlmaWVyIHRvdXRlcyBsZXMgdXRpbGlzYXRpb25zIG5pIGRlIGTDqXRlY3RlciBsJ2V4aXN0ZW5jZSBkJ8OpdmVudHVlbHMgZMOpZmF1dHMuIEwnYXR0ZW50aW9uIGR1IExpY2VuY2nDqSBhIMOpdMOpIGF0dGlyw6llIHN1ciBjZSBwb2ludCBzdXIgbGVzIHJpc3F1ZXMgYXNzb2Npw6lzIGF1IGNoYXJnZW1lbnQsIMOgIGwndXRpbGlzYXRpb24sIGxhIG1vZGlmaWNhdGlvbiBldC9vdSBhdSBkw6l2ZWxvcHBlbWVudCBldCDDoCBsYSByZXByb2R1Y3Rpb24gZHUgTG9naWNpZWwgcXVpIHNvbnQgcsOpc2VydsOpcyDDoCBkZXMgdXRpbGlzYXRldXJzIGF2ZXJ0aXMuXG5cbiAgIElsIHJlbMOodmUgZGUgbGEgcmVzcG9uc2FiaWxpdMOpIGR1IExpY2VuY2nDqSBkZSBjb250csO0bGVyLCBwYXIgdG91cyBtb3llbnMsIGwnYWTDqXF1YXRpb24gZHUgcHJvZHVpdCDDoCBzZXMgYmVzb2lucywgc29uIGJvbiBmb25jdGlvbm5lbWVudCBldCBkZSBzJ2Fzc3VyZXIgcXUnaWwgbmUgY2F1c2VyYSBwYXMgZGUgZG9tbWFnZXMgYXV4IHBlcnNvbm5lcyBldCBhdXggYmllbnMuXG5cbiAgIDkuMi4gTGUgQ29uY8OpZGFudCBkw6ljbGFyZSBkZSBib25uZSBmb2kgw6p0cmUgZW4gZHJvaXQgZGUgY29uY8OpZGVyIGwnZW5zZW1ibGUgZGVzIGRyb2l0cyBhdHRhY2jDqXMgYXUgTG9naWNpZWwgKGNvbXByZW5hbnQgbm90YW1tZW50IGxlcyBkcm9pdHMgdmlzw6lzIMOgIGwnYXJ0aWNsZSA1KS5cblxuICAgOS4zLiBMZSBMaWNlbmNpw6kgcmVjb25uYcOudCBxdWUgbGUgTG9naWNpZWwgZXN0IGZvdXJuaSDCq2VuIGwnw6l0YXTCuyBwYXIgbGUgQ29uY8OpZGFudCBzYW5zIGF1dHJlIGdhcmFudGllLCBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBjZWxsZSBwcsOpdnVlIMOgIGwnYXJ0aWNsZSA5LjIgZXQgbm90YW1tZW50IHNhbnMgYXVjdW5lIGdhcmFudGllIHN1ciBzYSB2YWxldXIgY29tbWVyY2lhbGUsIHNvbiBjYXJhY3TDqHJlIHPDqWN1cmlzw6ksIGlubm92YW50IG91IHBlcnRpbmVudC5cblxuICAgRW4gcGFydGljdWxpZXIsIGxlIENvbmPDqWRhbnQgbmUgZ2FyYW50aXQgcGFzIHF1ZSBsZSBMb2dpY2llbCBlc3QgZXhlbXB0IGQnZXJyZXVyLCBxdSdpbCBmb25jdGlvbm5lcmEgc2FucyBpbnRlcnJ1cHRpb24sIHF1J2lsIHNlcmEgY29tcGF0aWJsZSBhdmVjIGwnw6lxdWlwZW1lbnQgZHUgTGljZW5jacOpIGV0IHNhIGNvbmZpZ3VyYXRpb24gbG9naWNpZWxsZSBuaSBxdSdpbCByZW1wbGlyYSBsZXMgYmVzb2lucyBkdSBMaWNlbmNpw6kuXG5cbiAgIDkuNC4gTGUgQ29uY8OpZGFudCBuZSBnYXJhbnRpdCBwYXMsIGRlIG1hbmnDqHJlIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGxlIExvZ2ljaWVsIG5lIHBvcnRlIHBhcyBhdHRlaW50ZSDDoCB1biBxdWVsY29ucXVlIGRyb2l0IGRlIHByb3ByacOpdMOpIGludGVsbGVjdHVlbGxlIGQndW4gdGllcnMgcG9ydGFudCBzdXIgdW4gYnJldmV0LCB1biBsb2dpY2llbCBvdSBzdXIgdG91dCBhdXRyZSBkcm9pdCBkZSBwcm9wcmnDqXTDqS4gQWluc2ksIGxlIENvbmPDqWRhbnQgZXhjbHV0IHRvdXRlIGdhcmFudGllIGF1IHByb2ZpdCBkdSBMaWNlbmNpw6kgY29udHJlIGxlcyBhY3Rpb25zIGVuIGNvbnRyZWZhw6dvbiBxdWkgcG91cnJhaWVudCDDqnRyZSBkaWxpZ2VudMOpZXMgYXUgdGl0cmUgZGUgbCd1dGlsaXNhdGlvbiwgZGUgbGEgbW9kaWZpY2F0aW9uLCBldCBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbC4gTsOpYW5tb2lucywgc2kgZGUgdGVsbGVzIGFjdGlvbnMgc29udCBleGVyY8OpZXMgY29udHJlIGxlIExpY2VuY2nDqSwgbGUgQ29uY8OpZGFudCBsdWkgYXBwb3J0ZXJhIHNvbiBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgcG91ciBzYSBkw6lmZW5zZS4gQ2V0dGUgYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIGVzdCBkw6l0ZXJtaW7DqWUgYXUgY2FzIHBhciBjYXMgZW50cmUgbGUgQ29uY8OpZGFudCBjb25jZXJuw6kgZXQgbGUgTGljZW5jacOpIGRhbnMgbGUgY2FkcmUgZCd1biBwcm90b2NvbGUgZCdhY2NvcmQuIExlIENvbmPDqWRhbnQgZMOpZ2FnZSB0b3V0ZSByZXNwb25zYWJpbGl0w6kgcXVhbnQgw6AgbCd1dGlsaXNhdGlvbiBkZSBsYSBkw6lub21pbmF0aW9uIGR1IExvZ2ljaWVsIHBhciBsZSBMaWNlbmNpw6kuIEF1Y3VuZSBnYXJhbnRpZSBuJ2VzdCBhcHBvcnTDqWUgcXVhbnQgw6AgbCdleGlzdGVuY2UgZGUgZHJvaXRzIGFudMOpcmlldXJzIHN1ciBsZSBub20gZHUgTG9naWNpZWwgZXQgc3VyIGwnZXhpc3RlbmNlIGQndW5lIG1hcnF1ZS5cblxuQXJ0aWNsZSAxMCAtIFJFU0lMSUFUSU9OXG5cbiAgIDEwLjEuIEVuIGNhcyBkZSBtYW5xdWVtZW50IHBhciBsZSBMaWNlbmNpw6kgYXV4IG9ibGlnYXRpb25zIG1pc2VzIMOgIHNhIGNoYXJnZSBwYXIgbGUgQ29udHJhdCwgbGUgQ29uY8OpZGFudCBwb3VycmEgcsOpc2lsaWVyIGRlIHBsZWluIGRyb2l0IGxlIENvbnRyYXQgdHJlbnRlICgzMCkgam91cnMgYXByw6hzIG5vdGlmaWNhdGlvbiBhZHJlc3PDqWUgYXUgTGljZW5jacOpIGV0IHJlc3TDqWUgc2FucyBlZmZldC5cblxuICAgMTAuMi4gTGUgTGljZW5jacOpIGRvbnQgbGUgQ29udHJhdCBlc3QgcsOpc2lsacOpIG4nZXN0IHBsdXMgYXV0b3Jpc8OpIMOgIHV0aWxpc2VyLCBtb2RpZmllciBvdSBkaXN0cmlidWVyIGxlIExvZ2ljaWVsLiBDZXBlbmRhbnQsIHRvdXRlcyBsZXMgbGljZW5jZXMgcXUnaWwgYXVyYSBjb25jw6lkw6llcyBhbnTDqXJpZXVyZW1lbnQgw6AgbGEgcsOpc2lsaWF0aW9uIGR1IENvbnRyYXQgcmVzdGVyb250IHZhbGlkZXMgc291cyByw6lzZXJ2ZSBxdSdlbGxlcyBhaWVudCDDqXTDqSBlZmZlY3R1w6llcyBlbiBjb25mb3JtaXTDqSBhdmVjIGxlIENvbnRyYXQuXG5cbkFydGljbGUgMTEgLSBESVNQT1NJVElPTlMgRElWRVJTRVNcblxuICAgMTEuMS4gQ0FVU0UgRVhURVJJRVVSRVxuXG4gICBBdWN1bmUgZGVzIFBhcnRpZXMgbmUgc2VyYSByZXNwb25zYWJsZSBkJ3VuIHJldGFyZCBvdSBkJ3VuZSBkw6lmYWlsbGFuY2UgZCdleMOpY3V0aW9uIGR1IENvbnRyYXQgcXVpIHNlcmFpdCBkw7sgw6AgdW4gY2FzIGRlIGZvcmNlIG1hamV1cmUsIHVuIGNhcyBmb3J0dWl0IG91IHVuZSBjYXVzZSBleHTDqXJpZXVyZSwgdGVsbGUgcXVlLCBub3RhbW1lbnQsIGxlIG1hdXZhaXMgZm9uY3Rpb25uZW1lbnQgb3UgbGVzIGludGVycnVwdGlvbnMgZHUgcsOpc2VhdSDDqWxlY3RyaXF1ZSBvdSBkZSB0w6lsw6ljb21tdW5pY2F0aW9uLCBsYSBwYXJhbHlzaWUgZHUgcsOpc2VhdSBsacOpZSDDoCB1bmUgYXR0YXF1ZSBpbmZvcm1hdGlxdWUsIGwnaW50ZXJ2ZW50aW9uIGRlcyBhdXRvcml0w6lzIGdvdXZlcm5lbWVudGFsZXMsIGxlcyBjYXRhc3Ryb3BoZXMgbmF0dXJlbGxlcywgbGVzIGTDqWfDonRzIGRlcyBlYXV4LCBsZXMgdHJlbWJsZW1lbnRzIGRlIHRlcnJlLCBsZSBmZXUsIGxlcyBleHBsb3Npb25zLCBsZXMgZ3LDqHZlcyBldCBsZXMgY29uZmxpdHMgc29jaWF1eCwgbCfDqXRhdCBkZSBndWVycmXigKZcblxuICAgMTEuMi4gTGUgZmFpdCwgcGFyIGwndW5lIG91IGwnYXV0cmUgZGVzIFBhcnRpZXMsIGQnb21ldHRyZSBlbiB1bmUgb3UgcGx1c2lldXJzIG9jY2FzaW9ucyBkZSBzZSBwcsOpdmFsb2lyIGQndW5lIG91IHBsdXNpZXVycyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCwgbmUgcG91cnJhIGVuIGF1Y3VuIGNhcyBpbXBsaXF1ZXIgcmVub25jaWF0aW9uIHBhciBsYSBQYXJ0aWUgaW50w6lyZXNzw6llIMOgIHMnZW4gcHLDqXZhbG9pciB1bHTDqXJpZXVyZW1lbnQuXG5cbiAgIDExLjMuIExlIENvbnRyYXQgYW5udWxlIGV0IHJlbXBsYWNlIHRvdXRlIGNvbnZlbnRpb24gYW50w6lyaWV1cmUsIMOpY3JpdGUgb3Ugb3JhbGUsIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBsZSBtw6ptZSBvYmpldCBldCBjb25zdGl0dWUgbCdhY2NvcmQgZW50aWVyIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBjZXQgb2JqZXQuIEF1Y3VuZSBhZGRpdGlvbiBvdSBtb2RpZmljYXRpb24gYXV4IHRlcm1lcyBkdSBDb250cmF0IG4nYXVyYSBkJ2VmZmV0IMOgIGwnw6lnYXJkIGRlcyBQYXJ0aWVzIMOgIG1vaW5zIGQnw6p0cmUgZmFpdGUgcGFyIMOpY3JpdCBldCBzaWduw6llIHBhciBsZXVycyByZXByw6lzZW50YW50cyBkw7ttZW50IGhhYmlsaXTDqXMuXG5cbiAgIDExLjQuIERhbnMgbCdoeXBvdGjDqHNlIG/DuSB1bmUgb3UgcGx1c2lldXJzIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBzJ2F2w6hyZXJhaXQgY29udHJhaXJlIMOgIHVuZSBsb2kgb3Ugw6AgdW4gdGV4dGUgYXBwbGljYWJsZSwgZXhpc3RhbnRzIG91IGZ1dHVycywgY2V0dGUgbG9pIG91IGNlIHRleHRlIHByw6l2YXVkcmFpdCwgZXQgbGVzIFBhcnRpZXMgZmVyYWllbnQgbGVzIGFtZW5kZW1lbnRzIG7DqWNlc3NhaXJlcyBwb3VyIHNlIGNvbmZvcm1lciDDoCBjZXR0ZSBsb2kgb3Ugw6AgY2UgdGV4dGUuIFRvdXRlcyBsZXMgYXV0cmVzIGRpc3Bvc2l0aW9ucyByZXN0ZXJvbnQgZW4gdmlndWV1ci4gRGUgbcOqbWUsIGxhIG51bGxpdMOpLCBwb3VyIHF1ZWxxdWUgcmFpc29uIHF1ZSBjZSBzb2l0LCBkJ3VuZSBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgbmUgc2F1cmFpdCBlbnRyYcOubmVyIGxhIG51bGxpdMOpIGRlIGwnZW5zZW1ibGUgZHUgQ29udHJhdC5cblxuICAgMTEuNS4gTEFOR1VFXG5cbiAgIExlIENvbnRyYXQgZXN0IHLDqWRpZ8OpIGVuIGxhbmd1ZSBmcmFuw6dhaXNlIGV0IGVuIGxhbmd1ZSBhbmdsYWlzZS4gRW4gY2FzIGRlIGRpdmVyZ2VuY2UgZCdpbnRlcnByw6l0YXRpb24sIHNldWxlIGxhIHZlcnNpb24gZnJhbsOnYWlzZSBmYWl0IGZvaS5cblxuQXJ0aWNsZSAxMiAtIE5PVVZFTExFUyBWRVJTSU9OUyBEVSBDT05UUkFUXG5cbiAgIDEyLjEuIFRvdXRlIHBlcnNvbm5lIGVzdCBhdXRvcmlzw6llIMOgIGNvcGllciBldCBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZGUgY2UgQ29udHJhdC5cblxuICAgMTIuMi4gQWZpbiBkJ2VuIHByw6lzZXJ2ZXIgbGEgY29ow6lyZW5jZSwgbGUgdGV4dGUgZHUgQ29udHJhdCBlc3QgcHJvdMOpZ8OpIGV0IG5lIHBldXQgw6p0cmUgbW9kaWZpw6kgcXVlIHBhciBsZXMgYXV0ZXVycyBkZSBsYSBsaWNlbmNlLCBsZXNxdWVscyBzZSByw6lzZXJ2ZW50IGxlIGRyb2l0IGRlIHB1YmxpZXIgcMOpcmlvZGlxdWVtZW50IGRlcyBtaXNlcyDDoCBqb3VyIG91IGRlIG5vdXZlbGxlcyB2ZXJzaW9ucyBkdSBDb250cmF0LCBxdWkgcG9zc8OoZGVyb250IGNoYWN1bmUgdW4gbnVtw6lybyBkaXN0aW5jdC4gQ2VzIHZlcnNpb25zIHVsdMOpcmlldXJlcyBzZXJvbnQgc3VzY2VwdGlibGVzIGRlIHByZW5kcmUgZW4gY29tcHRlIGRlIG5vdXZlbGxlcyBwcm9ibMOpbWF0aXF1ZXMgcmVuY29udHLDqWVzIHBhciBsZXMgbG9naWNpZWxzIGxpYnJlcy5cblxuICAgMTIuMy4gVG91dCBMb2dpY2llbCBkaWZmdXPDqSBzb3VzIHVuZSB2ZXJzaW9uIGRvbm7DqWUgZHUgQ29udHJhdCBuZSBwb3VycmEgZmFpcmUgbCdvYmpldCBkJ3VuZSBkaWZmdXNpb24gdWx0w6lyaWV1cmUgcXVlIHNvdXMgbGEgbcOqbWUgdmVyc2lvbiBkdSBDb250cmF0IG91IHVuZSB2ZXJzaW9uIHBvc3TDqXJpZXVyZSwgc291cyByw6lzZXJ2ZSBkZXMgZGlzcG9zaXRpb25zIGRlIGwnYXJ0aWNsZSA1LjMuNC5cblxuQXJ0aWNsZSAxMyAtIExPSSBBUFBMSUNBQkxFIEVUIENPTVBFVEVOQ0UgVEVSUklUT1JJQUxFXG5cbiAgIDEzLjEuIExlIENvbnRyYXQgZXN0IHLDqWdpIHBhciBsYSBsb2kgZnJhbsOnYWlzZS4gTGVzIFBhcnRpZXMgY29udmllbm5lbnQgZGUgdGVudGVyIGRlIHLDqWdsZXIgw6AgbCdhbWlhYmxlIGxlcyBkaWZmw6lyZW5kcyBvdSBsaXRpZ2VzIHF1aSB2aWVuZHJhaWVudCDDoCBzZSBwcm9kdWlyZSBwYXIgc3VpdGUgb3Ugw6AgbCdvY2Nhc2lvbiBkdSBDb250cmF0LlxuXG4gICAxMy4yLiBBIGTDqWZhdXQgZCdhY2NvcmQgYW1pYWJsZSBkYW5zIHVuIGTDqWxhaSBkZSBkZXV4ICgyKSBtb2lzIMOgIGNvbXB0ZXIgZGUgbGV1ciBzdXJ2ZW5hbmNlIGV0IHNhdWYgc2l0dWF0aW9uIHJlbGV2YW50IGQndW5lIHByb2PDqWR1cmUgZCd1cmdlbmNlLCBsZXMgZGlmZsOpcmVuZHMgb3UgbGl0aWdlcyBzZXJvbnQgcG9ydMOpcyBwYXIgbGEgUGFydGllIGxhIHBsdXMgZGlsaWdlbnRlIGRldmFudCBsZXMgVHJpYnVuYXV4IGNvbXDDqXRlbnRzIGRlIFBhcmlzLlxuXG4xIENlOiBDRUEsIEM6IENOUlMsIEk6IElOUklBLCBMTDogTG9naWNpZWwgTGlicmUgVmVyc2lvbiAxIGR1IDIxLzA2LzIwMDQiXSwibGljZW5zZUlkcyI6WyJDRUNJTEwtMS4wIl0sImtleXdvcmRzIjpbImxpYnJlIGNlY2lsbCBhdmVydGlzc2VtZW50IiwiY2VjaWxsIGF2ZXJ0aXNzZW1lbnQgY2UiLCJhdmVydGlzc2VtZW50IGNlIGNvbnRyYXQiLCJsb2dpY2llbCBsaWJyZSBpc3N1ZSIsImxpYnJlIGlzc3VlIGQiLCJpc3N1ZSBkIHVuZSIsImQgdW5lIGNvbmNlcnRhdGlvbiIsInVuZSBjb25jZXJ0YXRpb24gZW50cmUiLCJjb25jZXJ0YXRpb24gZW50cmUgc2VzIiwiZW50cmUgc2VzIGF1dGV1cnMiLCJzZXMgYXV0ZXVycyBhZmluIiwiYXV0ZXVycyBhZmluIHF1ZSIsImFmaW4gcXVlIGxlIiwicXVlIGxlIHJlc3BlY3QiLCJsZSByZXNwZWN0IGRlIiwicmVzcGVjdCBkZSBkZXV4IiwiZGUgZGV1eCBncmFuZHMiLCJkZXV4IGdyYW5kcyBwcmluY2lwZXMiLCJncmFuZHMgcHJpbmNpcGVzIHByIiwicHJpbmNpcGVzIHByIHNpZGUiLCJwciBzaWRlIHNhIiwic2lkZSBzYSByIiwic2EgciBkYWN0aW9uIiwiciBkYWN0aW9uIGQiLCJkYWN0aW9uIGQgdW5lIiwiZCB1bmUgcGFydCIsInVuZSBwYXJ0IHNhIiwicGFydCBzYSBjb25mb3JtaXQiLCJzYSBjb25mb3JtaXQgYXUiLCJjb25mb3JtaXQgYXUgZHJvaXQiLCJmcmFuIGFpcyB0YW50IiwiYWlzIHRhbnQgYXUiLCJ0YW50IGF1IHJlZ2FyZCIsImF1IHJlZ2FyZCBkdSIsInJlZ2FyZCBkdSBkcm9pdCIsImxhIHJlc3BvbnNhYmlsaXQgY2l2aWxlIiwicmVzcG9uc2FiaWxpdCBjaXZpbGUgcXVlIiwiY2l2aWxlIHF1ZSBkdSIsInF1ZSBkdSBkcm9pdCIsImludGVsbGVjdHVlbGxlIGV0IGRlIiwiZGUgbGEgcHJvdGVjdGlvbiIsImxhIHByb3RlY3Rpb24gcXUiLCJwcm90ZWN0aW9uIHF1IGlsIiwicXUgaWwgb2ZmcmUiLCJpbCBvZmZyZSBhdXgiLCJvZmZyZSBhdXggYXV0ZXVycyIsImF1eCBhdXRldXJzIGV0IiwiYXV0ZXVycyBldCB0aXR1bGFpcmVzIiwiZXQgdGl0dWxhaXJlcyBkZXMiLCJ0aXR1bGFpcmVzIGRlcyBkcm9pdHMiLCJwYXRyaW1vbmlhdXggc3VyIHVuIiwic3VyIHVuIGxvZ2ljaWVsIiwibG9naWNpZWwgZCBhdXRyZSIsImQgYXV0cmUgcGFydCIsImF1dHJlIHBhcnQgbGUiLCJwYXJ0IGxlIHJlc3BlY3QiLCJyZXNwZWN0IGRlcyBwcmluY2lwZXMiLCJkZXMgcHJpbmNpcGVzIGRlIiwicHJpbmNpcGVzIGRlIGRpZmZ1c2lvbiIsImRlIGRpZmZ1c2lvbiBkZXMiLCJkaWZmdXNpb24gZGVzIGxvZ2ljaWVscyIsImxvZ2ljaWVscyBsaWJyZXMgYWNjIiwibGlicmVzIGFjYyBzIiwiYWNjIHMgYXUiLCJzIGF1IGNvZGUiLCJjb2RlIHNvdXJjZSBkcm9pdHMiLCJzb3VyY2UgZHJvaXRzIHRlbmR1cyIsImRyb2l0cyB0ZW5kdXMgY29uZiIsInRlbmR1cyBjb25mIHIiLCJjb25mIHIgcyIsInIgcyBhdXgiLCJzIGF1eCB1dGlsaXNhdGV1cnMiLCJhdXggdXRpbGlzYXRldXJzIGxlcyIsInV0aWxpc2F0ZXVycyBsZXMgYXV0ZXVycyIsImxhIGxpY2VuY2UgY2VjaWxsMSIsImxpY2VuY2UgY2VjaWxsMSBzb250IiwiY2VjaWxsMSBzb250IGNvbW1pc3NhcmlhdCIsInNvbnQgY29tbWlzc2FyaWF0IGwiLCJhdG9taXF1ZSBjZWEgdGFibGlzc2VtZW50IiwiY2VhIHRhYmxpc3NlbWVudCBwdWJsaWMiLCJ0YWJsaXNzZW1lbnQgcHVibGljIGRlIiwicHVibGljIGRlIGNhcmFjdCIsImRlIGNhcmFjdCByZSIsInJlIHNjaWVudGlmaXF1ZSB0ZWNobmlxdWUiLCJzY2llbnRpZmlxdWUgdGVjaG5pcXVlIGV0IiwidGVjaG5pcXVlIGV0IGluZHVzdHJpZWwiLCJldCBpbmR1c3RyaWVsIGRvbnQiLCJpbmR1c3RyaWVsIGRvbnQgbGUiLCJlc3Qgc2l0dSAzMSIsInNpdHUgMzEgMzMiLCJjZWRleCAxNSBjZW50cmUiLCIxNSBjZW50cmUgbmF0aW9uYWwiLCJzY2llbnRpZmlxdWUgY25ycyB0YWJsaXNzZW1lbnQiLCJjbnJzIHRhYmxpc3NlbWVudCBwdWJsaWMiLCJlc3Qgc2l0dSAzIiwic2l0dSAzIHJ1ZSIsImNlZGV4IDE2IGluc3RpdHV0IiwiMTYgaW5zdGl0dXQgbmF0aW9uYWwiLCJhdXRvbWF0aXF1ZSBpbnJpYSB0YWJsaXNzZW1lbnQiLCJpbnJpYSB0YWJsaXNzZW1lbnQgcHVibGljIiwiZXN0IHNpdHUgZG9tYWluZSIsInNpdHUgZG9tYWluZSBkZSIsImNoZXNuYXkgY2VkZXggcHJlYW1idWxlIiwiY2VkZXggcHJlYW1idWxlIGNlIiwicHJlYW1idWxlIGNlIGNvbnRyYXQiLCJsb2dpY2llbCBsaWJyZSBkb250IiwibGlicmUgZG9udCBsIiwiZG9udCBsIG9iamVjdGlmIiwibCBvYmplY3RpZiBlc3QiLCJvYmplY3RpZiBlc3QgZGUiLCJlc3QgZGUgY29uZiIsImRlIGNvbmYgcmVyIiwiY29uZiByZXIgYXV4IiwicmVyIGF1eCB1dGlsaXNhdGV1cnMiLCJhdXggdXRpbGlzYXRldXJzIGxhIiwidXRpbGlzYXRldXJzIGxhIGxpYmVydCIsImxpYmVydCBkZSBtb2RpZmljYXRpb24iLCJkdSBsb2dpY2llbCByIiwibG9naWNpZWwgciBnaSIsImdpIHBhciBjZXR0ZSIsImNldHRlIGxpY2VuY2UgZGFucyIsImxpY2VuY2UgZGFucyBsZSIsImQgdW4gbW9kIiwidW4gbW9kIGxlIiwibW9kIGxlIGRlIiwibGUgZGUgZGlmZnVzaW9uIiwiZGUgZGlmZnVzaW9uIG9wZW4iLCJkaWZmdXNpb24gb3BlbiBzb3VyY2UiLCJvcGVuIHNvdXJjZSBsIiwic291cmNlIGwgZXhlcmNpY2UiLCJsIGV4ZXJjaWNlIGRlIiwiZXhlcmNpY2UgZGUgY2VzIiwiZGUgY2VzIGxpYmVydCIsImNlcyBsaWJlcnQgcyIsImxpYmVydCBzIGVzdCIsInMgZXN0IGFzc29ydGkiLCJlc3QgYXNzb3J0aSBkZSIsImFzc29ydGkgZGUgY2VydGFpbnMiLCJkZSBjZXJ0YWlucyBkZXZvaXJzIiwiY2VydGFpbnMgZGV2b2lycyBsYSIsImRldm9pcnMgbGEgY2hhcmdlIiwibGEgY2hhcmdlIGRlcyIsImNoYXJnZSBkZXMgdXRpbGlzYXRldXJzIiwiZGVzIHV0aWxpc2F0ZXVycyBhZmluIiwidXRpbGlzYXRldXJzIGFmaW4gZGUiLCJhZmluIGRlIHByIiwiZGUgcHIgc2VydmVyIiwicHIgc2VydmVyIGNlIiwic2VydmVyIGNlIHN0YXR1dCIsImNlIHN0YXR1dCBhdSIsInN0YXR1dCBhdSBjb3VycyIsImF1IGNvdXJzIGRlcyIsImNvdXJzIGRlcyByZWRpc3RyaWJ1dGlvbnMiLCJkZXMgcmVkaXN0cmlidXRpb25zIHVsdCIsInJlZGlzdHJpYnV0aW9ucyB1bHQgcmlldXJlcyIsInVsdCByaWV1cmVzIGwiLCJyaWV1cmVzIGwgYWNjZXNzaWJpbGl0IiwibCBhY2Nlc3NpYmlsaXQgYXUiLCJhY2Nlc3NpYmlsaXQgYXUgY29kZSIsInNvdXJjZSBldCBsZXMiLCJkcm9pdHMgZGUgY29waWUiLCJjb3BpZSBkZSBtb2RpZmljYXRpb24iLCJkZSByZWRpc3RyaWJ1dGlvbiBxdWkiLCJyZWRpc3RyaWJ1dGlvbiBxdWkgZW4iLCJxdWkgZW4gZCIsImVuIGQgY291bGVudCIsImQgY291bGVudCBvbnQiLCJjb3VsZW50IG9udCBwb3VyIiwib250IHBvdXIgY29udHJlcGFydGllIiwicG91ciBjb250cmVwYXJ0aWUgZGUiLCJjb250cmVwYXJ0aWUgZGUgbiIsImRlIG4gb2ZmcmlyIiwibiBvZmZyaXIgYXV4Iiwib2ZmcmlyIGF1eCB1dGlsaXNhdGV1cnMiLCJhdXggdXRpbGlzYXRldXJzIHF1IiwidXRpbGlzYXRldXJzIHF1IHVuZSIsInF1IHVuZSBnYXJhbnRpZSIsInVuZSBnYXJhbnRpZSBsaW1pdCIsImdhcmFudGllIGxpbWl0IGUiLCJsaW1pdCBlIGV0IiwiZSBldCBkZSIsImV0IGRlIG5lIiwiZGUgbmUgZmFpcmUiLCJuZSBmYWlyZSBwZXNlciIsImZhaXJlIHBlc2VyIHN1ciIsInBlc2VyIHN1ciBsIiwic3VyIGwgYXV0ZXVyIiwibCBhdXRldXIgZHUiLCJhdXRldXIgZHUgbG9naWNpZWwiLCJkdSBsb2dpY2llbCBsZSIsImxvZ2ljaWVsIGxlIHRpdHVsYWlyZSIsImRyb2l0cyBwYXRyaW1vbmlhdXggZXQiLCJwYXRyaW1vbmlhdXggZXQgbGVzIiwiZXQgbGVzIGNvbmMiLCJsZXMgY29uYyBkYW50cyIsImNvbmMgZGFudHMgc3VjY2Vzc2lmcyIsImRhbnRzIHN1Y2Nlc3NpZnMgcXUiLCJzdWNjZXNzaWZzIHF1IHVuZSIsInF1IHVuZSByZXNwb25zYWJpbGl0IiwidW5lIHJlc3BvbnNhYmlsaXQgcmVzdHJlaW50ZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJGUkVFIFNPRlRXQVJFIExJQ0VOU0lORyBBR1JFRU1FTlQgQ2VDSUxMIE5vdGljZVxuXG5UaGlzIEFncmVlbWVudCBpcyBhIGZyZWUgc29mdHdhcmUgbGljZW5zZSB0aGF0IGlzIHRoZSByZXN1bHQgb2YgZGlzY3Vzc2lvbnMgYmV0d2VlbiBpdHMgYXV0aG9ycyBpbiBvcmRlciB0byBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRoZSB0d28gbWFpbiBwcmluY2lwbGVzIGd1aWRpbmcgaXRzIGRyYWZ0aW5nOlxuXG4gICAtIGZpcnN0bHksIGl0cyBjb25mb3JtaXR5IHdpdGggRnJlbmNoIGxhdywgYm90aCBhcyByZWdhcmRzIHRoZSBsYXcgb2YgdG9ydHMgYW5kIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXcsIGFuZCB0aGUgcHJvdGVjdGlvbiB0aGF0IGl0IG9mZmVycyB0byBhdXRob3JzIGFuZCB0aGUgaG9sZGVycyBvZiBlY29ub21pYyByaWdodHMgb3ZlciBzb2Z0d2FyZS5cblxuICAgLSBzZWNvbmRseSwgY29tcGxpYW5jZSB3aXRoIHRoZSBwcmluY2lwbGVzIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIGZyZWUgc29mdHdhcmU6IGFjY2VzcyB0byBzb3VyY2UgY29kZXMsIGV4dGVuZGVkIHVzZXItcmlnaHRzLlxuXG5UaGUgZm9sbG93aW5nIGJvZGllcyBhcmUgdGhlIGF1dGhvcnMgb2YgdGhpcyBsaWNlbnNlIENlQ0lMTCAoQ2UgOiBDRUEsIEMgOiBDTlJTLCBJIDogSU5SSUEsIExMIDogTG9naWNpZWwgTGlicmUpOlxuXG4gICBcblxuICAgQ29tbWlzc2FyaWF0IMOgIGwnRW5lcmdpZSBBdG9taXF1ZSAtIENFQSwgYSBwdWJsaWMgc2NpZW50aWZpYywgdGVjaG5pY2FsIGFuZCBpbmR1c3RyaWFsIGVzdGFibGlzaG1lbnQsIGhhdmluZyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGF0IDMxLTMzIHJ1ZSBkZSBsYSBGw6lkw6lyYXRpb24sIDc1NzUyIFBBUklTIGNlZGV4IDE1LCBGcmFuY2UuXG5cbiAgIFxuXG4gICBDZW50cmUgTmF0aW9uYWwgZGUgbGEgUmVjaGVyY2hlIFNjaWVudGlmaXF1ZSAtIENOUlMsIGEgcHVibGljIHNjaWVudGlmaWMgYW5kIHRlY2hub2xvZ2ljYWwgZXN0YWJsaXNobWVudCwgaGF2aW5nIGl0cyBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MgYXQgMyBydWUgTWljaGVsLUFuZ2UgNzU3OTQgUGFyaXMgY2VkZXggMTYsIEZyYW5jZS5cblxuICAgXG5cbiAgIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUgLSBJTlJJQSwgYSBwdWJsaWMgc2NpZW50aWZpYyBhbmQgdGVjaG5vbG9naWNhbCBlc3RhYmxpc2htZW50LCBoYXZpbmcgaXRzIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBhdCBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleC5cblxuICAgXG5cbiAgIFBSRUFNQkxFXG5cbiAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgRnJlZSBTb2Z0d2FyZSBMaWNlbnNpbmcgQWdyZWVtZW50IGlzIHRvIGdyYW50IHVzZXJzIHRoZSByaWdodCB0byBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgZ292ZXJuZWQgYnkgdGhpcyBsaWNlbnNlIHdpdGhpbiB0aGUgZnJhbWV3b3JrIG9mIGFuIFwib3BlbiBzb3VyY2VcIiBkaXN0cmlidXRpb24gbW9kZWwuXG5cbiAgIFRoZSBleGVyY2lzaW5nIG9mIHRoZXNlIHJpZ2h0cyBpcyBjb25kaXRpb25hbCB1cG9uIGNlcnRhaW4gb2JsaWdhdGlvbnMgZm9yIHVzZXJzIHNvIGFzIHRvIGVuc3VyZSB0aGF0IHRoaXMgc3RhdHVzIGlzIHJldGFpbmVkIGZvciBzdWJzZXF1ZW50IHJlZGlzdHJpYnV0aW9uIG9wZXJhdGlvbnMuXG5cbiAgIEFzIGEgY291bnRlcnBhcnQgdG8gdGhlIGFjY2VzcyB0byB0aGUgc291cmNlIGNvZGUgYW5kIHJpZ2h0cyB0byBjb3B5LCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSBncmFudGVkIGJ5IHRoZSBsaWNlbnNlLCB1c2VycyBhcmUgcHJvdmlkZWQgb25seSB3aXRoIGEgbGltaXRlZCB3YXJyYW50eSBhbmQgdGhlIHNvZnR3YXJlJ3MgYXV0aG9yLCB0aGUgaG9sZGVyIG9mIHRoZSBlY29ub21pYyByaWdodHMsIGFuZCB0aGUgc3VjY2Vzc2l2ZSBsaWNlbnNvcnMgb25seSBoYXZlIGxpbWl0ZWQgbGlhYmlsaXR5LlxuXG4gICBJbiB0aGlzIHJlc3BlY3QsIGl0IGlzIGJyb3VnaHQgdG8gdGhlIHVzZXIncyBhdHRlbnRpb24gdGhhdCB0aGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGxvYWRpbmcsIHVzaW5nLCBtb2RpZnlpbmcgYW5kL29yIGRldmVsb3Bpbmcgb3IgcmVwcm9kdWNpbmcgdGhlIHNvZnR3YXJlIGJ5IHRoZSB1c2VyIGdpdmVuIGl0cyBuYXR1cmUgb2YgRnJlZSBTb2Z0d2FyZSwgdGhhdCBtYXkgbWVhbiB0aGF0IGl0IGlzIGNvbXBsaWNhdGVkIHRvIG1hbmlwdWxhdGUsIGFuZCB0aGF0IGFsc28gdGhlcmVmb3JlIG1lYW5zIHRoYXQgaXQgaXMgcmVzZXJ2ZWQgZm9yIGRldmVsb3BlcnMgYW5kIGV4cGVyaWVuY2VkIHByb2Zlc3Npb25hbHMgaGF2aW5nIGluLWRlcHRoIGNvbXB1dGVyIGtub3dsZWRnZS4gVXNlcnMgYXJlIHRoZXJlZm9yZSBlbmNvdXJhZ2VkIHRvIGxvYWQgYW5kIHRlc3QgdGhlIFNvZnR3YXJlJ3Mgc3VpdGFiaWxpdHkgYXMgcmVnYXJkcyB0aGVpciByZXF1aXJlbWVudHMgaW4gY29uZGl0aW9ucyBlbmFibGluZyB0aGUgc2VjdXJpdHkgb2YgdGhlaXIgc3lzdGVtcyBhbmQvb3IgZGF0YSB0byBiZSBlbnN1cmVkIGFuZCwgbW9yZSBnZW5lcmFsbHksIHRvIHVzZSBhbmQgb3BlcmF0ZSBpdCBpbiB0aGUgc2FtZSBjb25kaXRpb25zIG9mIHNlY3VyaXR5LiBUaGlzIEFncmVlbWVudCBtYXkgYmUgZnJlZWx5IHJlcHJvZHVjZWQgYW5kIHB1Ymxpc2hlZCwgcHJvdmlkZWQgaXQgaXMgbm90IGFsdGVyZWQsIGFuZCB0aGF0IG5vIEFydGljbGVzIGFyZSBlaXRoZXIgYWRkZWQgb3IgcmVtb3ZlZCBoZXJlZnJvbS5cblxuICAgVGhpcyBBZ3JlZW1lbnQgbWF5IGFwcGx5IHRvIGFueSBvciBhbGwgc29mdHdhcmUgZm9yIHdoaWNoIHRoZSBob2xkZXIgb2YgdGhlIGVjb25vbWljIHJpZ2h0cyBkZWNpZGVzIHRvIHN1Ym1pdCB0aGUgb3BlcmF0aW9uIHRoZXJlb2YgdG8gaXRzIHByb3Zpc2lvbnMuXG5cbiAgIEFydGljbGUgMSAtIERFRklOSVRJT05TXG5cbiAgIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIHdoZW4gdGhlIGZvbGxvd2luZyBleHByZXNzaW9ucyBjb21tZW5jZSB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIsIHRoZXkgc2hhbGwgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmc6XG5cbiAgICAgIFxuXG4gICAgICBBZ3JlZW1lbnQ6IG1lYW5zIHRoaXMgTGljZW5zaW5nIEFncmVlbWVudCwgYW5kIGFueSBvciBhbGwgb2YgaXRzIHN1YnNlcXVlbnQgdmVyc2lvbnMuXG5cbiAgICAgIFxuXG4gICAgICBTb2Z0d2FyZTogbWVhbnMgdGhlIHNvZnR3YXJlIGluIGl0cyBPYmplY3QgQ29kZSBhbmQvb3IgU291cmNlIENvZGUgZm9ybSBhbmQsIHdoZXJlIGFwcGxpY2FibGUsIGl0cyBkb2N1bWVudGF0aW9uLCBcImFzIGlzXCIgYXQgdGhlIHRpbWUgd2hlbiB0aGUgTGljZW5zZWUgYWNjZXB0cyB0aGUgQWdyZWVtZW50LlxuXG4gICAgICBcblxuICAgICAgSW5pdGlhbCBTb2Z0d2FyZTogbWVhbnMgdGhlIFNvZnR3YXJlIGluIGl0cyBTb3VyY2UgQ29kZSBhbmQvb3IgT2JqZWN0IENvZGUgZm9ybSBhbmQsIHdoZXJlIGFwcGxpY2FibGUsIGl0cyBkb2N1bWVudGF0aW9uLCBcImFzIGlzXCIgYXQgdGhlIHRpbWUgd2hlbiBpdCBpcyBkaXN0cmlidXRlZCBmb3IgdGhlIGZpcnN0IHRpbWUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBBZ3JlZW1lbnQuXG5cbiAgICAgIFxuXG4gICAgICBNb2RpZmllZCBTb2Z0d2FyZTogbWVhbnMgdGhlIFNvZnR3YXJlIG1vZGlmaWVkIGJ5IGF0IGxlYXN0IG9uZSBDb250cmlidXRpb24uXG5cbiAgICAgIFxuXG4gICAgICBTb3VyY2UgQ29kZTogbWVhbnMgYWxsIHRoZSBTb2Z0d2FyZSdzIGluc3RydWN0aW9ucyBhbmQgcHJvZ3JhbSBsaW5lcyB0byB3aGljaCBhY2Nlc3MgaXMgcmVxdWlyZWQgc28gYXMgdG8gbW9kaWZ5IHRoZSBTb2Z0d2FyZS5cblxuICAgICAgXG5cbiAgICAgIE9iamVjdCBDb2RlOiBtZWFucyB0aGUgYmluYXJ5IGZpbGVzIG9yaWdpbmF0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBTb3VyY2UgQ29kZS5cblxuICAgICAgXG5cbiAgICAgIEhvbGRlcjogbWVhbnMgdGhlIGhvbGRlciBvZiB0aGUgZWNvbm9taWMgcmlnaHRzIG92ZXIgdGhlIEluaXRpYWwgU29mdHdhcmUuXG5cbiAgICAgIFxuXG4gICAgICBMaWNlbnNlZShzKTogbWVhbihzKSB0aGUgU29mdHdhcmUgdXNlcihzKSBoYXZpbmcgYWNjZXB0ZWQgdGhlIEFncmVlbWVudC5cblxuICAgICAgXG5cbiAgICAgIENvbnRyaWJ1dG9yOiBtZWFucyBhIExpY2Vuc2VlIGhhdmluZyBtYWRlIGF0IGxlYXN0IG9uZSBDb250cmlidXRpb24uXG5cbiAgICAgIFxuXG4gICAgICBMaWNlbnNvcjogbWVhbnMgdGhlIEhvbGRlciwgb3IgYW55IG9yIGFsbCBvdGhlciBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSwgdGhhdCBkaXN0cmlidXRlcyB0aGUgU29mdHdhcmUgdW5kZXIgdGhlIEFncmVlbWVudC5cblxuICAgICAgXG5cbiAgICAgIENvbnRyaWJ1dGlvbnM6IG1lYW4gYW55IG9yIGFsbCBtb2RpZmljYXRpb25zLCBjb3JyZWN0aW9ucywgdHJhbnNsYXRpb25zLCBhZGFwdGF0aW9ucyBhbmQvb3IgbmV3IGZ1bmN0aW9uYWxpdGllcyBpbnRlZ3JhdGVkIGludG8gdGhlIFNvZnR3YXJlIGJ5IGFueSBvciBhbGwgQ29udHJpYnV0b3IsIGFuZCB0aGUgU3RhdGljIE1vZHVsZXMuXG5cbiAgICAgIFxuXG4gICAgICBNb2R1bGU6IG1lYW5zIGEgc2V0IG9mIHNvdXJjZXMgZmlsZXMgaW5jbHVkaW5nIHRoZWlyIGRvY3VtZW50YXRpb24gdGhhdCwgb25jZSBjb21waWxlZCBpbiBleGVjdXRhYmxlIGZvcm0sIGVuYWJsZXMgc3VwcGxlbWVudGFyeSBmdW5jdGlvbmFsaXRpZXMgb3Igc2VydmljZXMgdG8gYmUgZGV2ZWxvcGVkIGluIGFkZGl0aW9uIHRvIHRob3NlIG9mZmVyZWQgYnkgdGhlIFNvZnR3YXJlLlxuXG4gICAgICBcblxuICAgICAgRHluYW1pYyBNb2R1bGU6IG1lYW5zIGFueSBvciBhbGwgbW9kdWxlLCBjcmVhdGVkIGJ5IHRoZSBDb250cmlidXRvciwgdGhhdCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgU29mdHdhcmUsIHNvIHRoYXQgdGhpcyBtb2R1bGUgYW5kIHRoZSBTb2Z0d2FyZSBhcmUgaW4gdHdvIGRpZmZlcmVudCBleGVjdXRhYmxlIGZvcm1zIHRoYXQgYXJlIHJ1biBpbiBzZXBhcmF0ZSBhZGRyZXNzIHNwYWNlcywgd2l0aCBvbmUgY2FsbGluZyB0aGUgb3RoZXIgd2hlbiB0aGV5IGFyZSBydW4uXG5cbiAgICAgIFxuXG4gICAgICBTdGF0aWMgTW9kdWxlOiBtZWFucyBhbnkgb3IgYWxsIG1vZHVsZSwgY3JlYXRlZCBieSB0aGUgQ29udHJpYnV0b3IgYW5kIGNvbm5lY3RlZCB0byB0aGUgU29mdHdhcmUgYnkgYSBzdGF0aWMgbGluayB0aGF0IG1ha2VzIHRoZWlyIG9iamVjdCBjb2RlcyBpbnRlcmRlcGVuZGVudC4gVGhpcyBtb2R1bGUgYW5kIHRoZSBTb2Z0d2FyZSB0byB3aGljaCBpdCBpcyBjb25uZWN0ZWQsIGFyZSBjb21iaW5lZCBpbiBhIHNpbmdsZSBleGVjdXRhYmxlLlxuXG4gICAgICBcblxuICAgICAgUGFydGllczogbWVhbiBib3RoIHRoZSBMaWNlbnNlZSBhbmQgdGhlIExpY2Vuc29yLlxuXG4gICBUaGVzZSBleHByZXNzaW9ucyBtYXkgYmUgdXNlZCBib3RoIGluIHNpbmd1bGFyIGFuZCBwbHVyYWwgZm9ybS5cblxuICAgQXJ0aWNsZSAyIC0gUFVSUE9TRVxuXG4gICBUaGUgcHVycG9zZSBvZiB0aGUgQWdyZWVtZW50IGlzIHRvIGVuYWJsZSB0aGUgTGljZW5zb3IgdG8gZ3JhbnQgdGhlIExpY2Vuc2VlIGEgZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgdHJhbnNmZXJhYmxlIGFuZCB3b3JsZHdpZGUgTGljZW5zZSBmb3IgdGhlIFNvZnR3YXJlIGFzIHNldCBmb3J0aCBpbiBBcnRpY2xlIDUgaGVyZWluYWZ0ZXIgZm9yIHRoZSB3aG9sZSB0ZXJtIG9mIHByb3RlY3Rpb24gb2YgdGhlIHJpZ2h0cyBvdmVyIHNhaWQgU29mdHdhcmUuXG5cbiAgIEFydGljbGUgMyAtIEFDQ0VQVEFOQ0VcblxuICAgICAgMy4xLiBUaGUgTGljZW5zZWUgc2hhbGwgYmUgZGVlbWVkIGFzIGhhdmluZyBhY2NlcHRlZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYnkgdGhlIG9jY3VycmVuY2Ugb2YgdGhlIGZpcnN0IG9mIHRoZSBmb2xsb3dpbmcgZXZlbnRzOlxuXG4gICAgICAgICAoaSkgbG9hZGluZyB0aGUgU29mdHdhcmUgYnkgYW55IG9yIGFsbCBtZWFucywgbm90YWJseSwgYnkgZG93bmxvYWRpbmcgZnJvbSBhIHJlbW90ZSBzZXJ2ZXIsIG9yIGJ5IGxvYWRpbmcgZnJvbSBhIHBoeXNpY2FsIG1lZGl1bTtcblxuICAgICAgICAgKGlpKSB0aGUgZmlyc3QgdGltZSB0aGUgTGljZW5zZWUgZXhlcmNpc2VzIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLlxuXG4gICAgICAzLjIuIE9uZSBjb3B5IG9mIHRoZSBBZ3JlZW1lbnQsIGNvbnRhaW5pbmcgYSBub3RpY2UgcmVsYXRpbmcgdG8gdGhlIHNwZWNpZmljIG5hdHVyZSBvZiB0aGUgU29mdHdhcmUsIHRvIHRoZSBsaW1pdGVkIHdhcnJhbnR5LCBhbmQgdG8gdGhlIGxpbWl0YXRpb24gdG8gdXNlIGJ5IGV4cGVyaWVuY2VkIHVzZXJzIGhhcyBiZWVuIHByb3ZpZGVkIHRvIHRoZSBMaWNlbnNlZSBwcmlvciB0byBpdHMgYWNjZXB0YW5jZSBhcyBzZXQgZm9ydGggaW4gQXJ0aWNsZSAzLjEgaGVyZWluYWJvdmUsIGFuZCB0aGUgTGljZW5zZWUgaGVyZWJ5IGFja25vd2xlZGdlcyB0aGF0IGl0IGlzIGF3YXJlIHRoZXJlb2YuXG5cbiAgIEFydGljbGUgNCAtIEVGRkVDVElWRSBEQVRFIEFORCBURVJNXG5cbiAgICAgIDQuMS4gRUZGRUNUSVZFIERBVEVcblxuICAgICAgVGhlIEFncmVlbWVudCBzaGFsbCBiZWNvbWUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIHdoZW4gaXQgaXMgYWNjZXB0ZWQgYnkgdGhlIExpY2Vuc2VlIGFzIHNldCBmb3J0aCBpbiBBcnRpY2xlIDMuMS5cblxuICAgICAgNC4yLiBURVJNXG5cbiAgICAgIFRoZSBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIGluIGZvcmNlIGR1cmluZyB0aGUgd2hvbGUgbGVnYWwgdGVybSBvZiBwcm90ZWN0aW9uIG9mIHRoZSBlY29ub21pYyByaWdodHMgb3ZlciB0aGUgU29mdHdhcmUuXG5cbiAgIEFydGljbGUgNSAtIFNDT1BFIE9GIFRIRSBSSUdIVFMgR1JBTlRFRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgVGhlIExpY2Vuc29yIGhlcmVieSBncmFudHMgdG8gdGhlIExpY2Vuc2VlLCB0aGF0IGFjY2VwdHMgc3VjaCwgdGhlIGZvbGxvd2luZyByaWdodHMgYXMgcmVnYXJkcyB0aGUgU29mdHdhcmUgZm9yIGFueSBvciBhbGwgdXNlLCBhbmQgZm9yIHRoZSB0ZXJtIG9mIHRoZSBBZ3JlZW1lbnQsIG9uIHRoZSBiYXNpcyBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGhlcmVpbmFmdGVyLlxuXG4gICBPdGhlcndpc2UsIHRoZSBMaWNlbnNvciBncmFudHMgdG8gdGhlIExpY2Vuc2VlIGZyZWUgb2YgY2hhcmdlIGV4cGxvaXRhdGlvbiByaWdodHMgb24gdGhlIHBhdGVudHMgaGUgaG9sZHMgb24gd2hvbGUgb3IgcGFydCBvZiB0aGUgaW52ZW50aW9ucyBpbXBsZW1lbnRlZCBpbiB0aGUgU29mdHdhcmUuXG5cbiAgICAgIDUuMS4gUklHSFRTIE9GIFVTRVxuXG4gICAgICBUaGUgTGljZW5zZWUgaXMgYXV0aG9yaXplZCB0byB1c2UgdGhlIFNvZnR3YXJlLCB1bnJlc3RyaWN0ZWRseSwgYXMgcmVnYXJkcyB0aGUgZmllbGRzIG9mIGFwcGxpY2F0aW9uLCB3aXRoIGl0IGJlaW5nIGhlcmVpbmFmdGVyIHNwZWNpZmllZCB0aGF0IHRoaXMgcmVsYXRlcyB0bzpcblxuICAgICAgICAgMS4gcGVybWFuZW50IG9yIHRlbXBvcmFyeSByZXByb2R1Y3Rpb24gb2YgYWxsIG9yIHBhcnQgb2YgdGhlIFNvZnR3YXJlIGJ5IGFueSBvciBhbGwgbWVhbnMgYW5kIGluIGFueSBvciBhbGwgZm9ybS5cblxuICAgICAgICAgMi4gbG9hZGluZywgZGlzcGxheWluZywgcnVubmluZywgb3Igc3RvcmluZyB0aGUgU29mdHdhcmUgb24gYW55IG9yIGFsbCBtZWRpdW0uXG5cbiAgICAgICAgIDMuIGVudGl0bGVtZW50IHRvIG9ic2VydmUsIHN0dWR5IG9yIHRlc3QgdGhlIG9wZXJhdGlvbiB0aGVyZW9mIHNvIGFzIHRvIGVzdGFibGlzaCB0aGUgaWRlYXMgYW5kIHByaW5jaXBsZXMgdGhhdCBmb3JtIHRoZSBiYXNpcyBmb3IgYW55IG9yIGFsbCBjb25zdGl0dWVudCBlbGVtZW50cyBvZiBzYWlkIFNvZnR3YXJlLiBUaGlzIHNoYWxsIGFwcGx5IHdoZW4gdGhlIExpY2Vuc2VlIGNhcnJpZXMgb3V0IGFueSBvciBhbGwgbG9hZGluZywgZGlzcGxheWluZywgcnVubmluZywgdHJhbnNtaXNzaW9uIG9yIHN0b3JhZ2Ugb3BlcmF0aW9uIGFzIHJlZ2FyZHMgdGhlIFNvZnR3YXJlLCB0aGF0IGl0IGlzIGVudGl0bGVkIHRvIGNhcnJ5IG91dCBoZXJldW5kZXIuXG5cbiAgICAgIDUuMi4gRU5USVRMRU1FTlQgVE8gTUFLRSBDT05UUklCVVRJT05TXG5cbiAgICAgIFRoZSByaWdodCB0byBtYWtlIENvbnRyaWJ1dGlvbnMgaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIHRyYW5zbGF0ZSwgYWRhcHQsIGFycmFuZ2UsIG9yIG1ha2UgYW55IG9yIGFsbCBtb2RpZmljYXRpb24gdG8gdGhlIFNvZnR3YXJlLCBhbmQgdGhlIHJpZ2h0IHRvIHJlcHJvZHVjZSB0aGUgcmVzdWx0aW5nIFNvZnR3YXJlLlxuXG4gICAgICBUaGUgTGljZW5zZWUgaXMgYXV0aG9yaXplZCB0byBtYWtlIGFueSBvciBhbGwgQ29udHJpYnV0aW9uIHRvIHRoZSBTb2Z0d2FyZSBwcm92aWRlZCB0aGF0IGl0IGV4cGxpY2l0bHkgbWVudGlvbnMgaXRzIG5hbWUgYXMgdGhlIGF1dGhvciBvZiBzYWlkIENvbnRyaWJ1dGlvbiBhbmQgdGhlIGRhdGUgb2YgdGhlIGRldmVsb3BtZW50IHRoZXJlb2YuXG5cbiAgICAgIDUuMy4gRElTVFJJQlVUSU9OIEFORCBQVUJMSUNBVElPTiBSSUdIVFNcblxuICAgICAgSW4gcGFydGljdWxhciwgdGhlIHJpZ2h0IG9mIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24gaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIHRyYW5zbWl0IGFuZCBjb21tdW5pY2F0ZSB0aGUgU29mdHdhcmUgdG8gdGhlIGdlbmVyYWwgcHVibGljIG9uIGFueSBvciBhbGwgbWVkaXVtLCBhbmQgYnkgYW55IG9yIGFsbCBtZWFucywgYW5kIHRoZSByaWdodCB0byBtYXJrZXQsIGVpdGhlciBpbiBjb25zaWRlcmF0aW9uIG9mIGEgZmVlLCBvciBmcmVlIG9mIGNoYXJnZSwgYSBjb3B5IG9yIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgYnkgbWVhbnMgb2YgYW55IG9yIGFsbCBwcm9jZXNzLiBUaGUgTGljZW5zZWUgaXMgZnVydGhlciBhdXRob3JpemVkIHRvIHJlZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIG1vZGlmaWVkIG9yIHVubW9kaWZpZWQgU29mdHdhcmUgdG8gdGhpcmQgcGFydGllcyBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBoZXJlaW5hZnRlci5cblxuICAgICAgICAgNS4zLjEuIFJFRElTVFJJQlVUSU9OIE9GIFNPRlRXQVJFIFdJVEhPVVQgTU9ESUZJQ0FUSU9OXG5cbiAgICAgICAgIFRoZSBMaWNlbnNlZSBpcyBhdXRob3JpemVkIHRvIHJlZGlzdHJpYnV0ZSB0cnVlIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgaW4gU291cmNlIENvZGUgb3IgT2JqZWN0IENvZGUgZm9ybSwgcHJvdmlkZWQgdGhhdCBzYWlkIHJlZGlzdHJpYnV0aW9uIGNvbXBsaWVzIHdpdGggYWxsIHRoZSBwcm92aXNpb25zIG9mIHRoZSBBZ3JlZW1lbnQgYW5kIGlzIGFjY29tcGFuaWVkIGJ5OlxuXG4gICAgICAgICAgICAxLiBhIGNvcHkgb2YgdGhlIEFncmVlbWVudCxcblxuICAgICAgICAgICAgMi4gYSBub3RpY2UgcmVsYXRpbmcgdG8gdGhlIGxpbWl0YXRpb24gb2YgYm90aCB0aGUgTGljZW5zb3IncyB3YXJyYW50eSBhbmQgbGlhYmlsaXR5IGFzIHNldCBmb3J0aCBpbiBBcnRpY2xlcyA4IGFuZCA5LFxuXG4gICAgICAgICBhbmQgdGhhdCwgaW4gdGhlIGV2ZW50IHRoYXQgb25seSB0aGUgU29mdHdhcmUncyBPYmplY3QgQ29kZSBpcyByZWRpc3RyaWJ1dGVkLCB0aGUgTGljZW5zZWUgYWxsb3dzIGZ1dHVyZSBMaWNlbnNlZXMgdW5oaW5kZXJlZCBhY2Nlc3MgdG8gdGhlIFNvZnR3YXJlJ3MgZnVsbCBTb3VyY2UgQ29kZSBieSBwcm92aWRpbmcgdGhlbSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgYWNjZXNzIHRoZXJldG8sIGl0IGJlaW5nIHVuZGVyc3Rvb2QgdGhhdCB0aGUgYWRkaXRpb25hbCBjb3N0IG9mIGFjcXVpcmluZyB0aGUgU291cmNlIENvZGUgc2hhbGwgbm90IGV4Y2VlZCB0aGUgY29zdCBvZiB0cmFuc2ZlcnJpbmcgdGhlIGRhdGEuXG5cbiAgICAgICAgIDUuMy4yLiBSRURJU1RSSUJVVElPTiBPRiBNT0RJRklFRCBTT0ZUV0FSRVxuXG4gICAgICAgICBXaGVuIHRoZSBMaWNlbnNlZSBtYWtlcyBhIENvbnRyaWJ1dGlvbiB0byB0aGUgU29mdHdhcmUsIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdGhlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBNb2RpZmllZCBTb2Z0d2FyZSBzaGFsbCB0aGVuIGJlIHN1YmplY3QgdG8gYWxsIHRoZSBwcm92aXNpb25zIGhlcmVvZi5cblxuICAgICAgICAgVGhlIExpY2Vuc2VlIGlzIGF1dGhvcml6ZWQgdG8gcmVkaXN0cmlidXRlIHRoZSBNb2RpZmllZCBTb2Z0d2FyZSwgaW4gU291cmNlIENvZGUgb3IgT2JqZWN0IENvZGUgZm9ybSwgcHJvdmlkZWQgdGhhdCBzYWlkIHJlZGlzdHJpYnV0aW9uIGNvbXBsaWVzIHdpdGggYWxsIHRoZSBwcm92aXNpb25zIG9mIHRoZSBBZ3JlZW1lbnQgYW5kIGlzIGFjY29tcGFuaWVkIGJ5OlxuXG4gICAgICAgICAgICAxLiBhIGNvcHkgb2YgdGhlIEFncmVlbWVudCxcblxuICAgICAgICAgICAgMi4gYSBub3RpY2UgcmVsYXRpbmcgdG8gdGhlIGxpbWl0YXRpb24gb2YgYm90aCB0aGUgTGljZW5zb3IncyB3YXJyYW50eSBhbmQgbGlhYmlsaXR5IGFzIHNldCBmb3J0aCBpbiBBcnRpY2xlcyA4IGFuZCA5LFxuXG4gICAgICAgICBhbmQgdGhhdCwgaW4gdGhlIGV2ZW50IHRoYXQgb25seSB0aGUgTW9kaWZpZWQgU29mdHdhcmUncyBPYmplY3QgQ29kZSBpcyByZWRpc3RyaWJ1dGVkLCB0aGUgTGljZW5zZWUgYWxsb3dzIGZ1dHVyZSBMaWNlbnNlZXMgdW5oaW5kZXJlZCBhY2Nlc3MgdG8gdGhlIE1vZGlmaWVkIFNvZnR3YXJlJ3MgZnVsbCBTb3VyY2UgQ29kZSBieSBwcm92aWRpbmcgdGhlbSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgYWNjZXNzIHRoZXJldG8sIGl0IGJlaW5nIHVuZGVyc3Rvb2QgdGhhdCB0aGUgYWRkaXRpb25hbCBjb3N0IG9mIGFjcXVpcmluZyB0aGUgU291cmNlIENvZGUgc2hhbGwgbm90IGV4Y2VlZCB0aGUgY29zdCBvZiB0cmFuc2ZlcnJpbmcgdGhlIGRhdGEuXG5cbiAgICAgICAgIDUuMy4zLiBSRURJU1RSSUJVVElPTiBPRiBEWU5BTUlDIE1PRFVMRVNcblxuICAgICAgICAgV2hlbiB0aGUgTGljZW5zZWUgaGFzIGRldmVsb3BlZCBhIER5bmFtaWMgTW9kdWxlLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZW9mIGRvIG5vdCBhcHBseSB0byBzYWlkIER5bmFtaWMgTW9kdWxlLCB0aGF0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBhIHNlcGFyYXRlIExpY2Vuc2luZyBBZ3JlZW1lbnQuXG5cbiAgICAgICAgIDUuMy40LiBDT01QQVRJQklMSVRZIFdJVEggVEhFIEdQTCBMSUNFTlNFXG5cbiAgICAgICAgIEluIHRoZSBldmVudCB0aGF0IHRoZSBNb2RpZmllZCBvciB1bm1vZGlmaWVkIFNvZnR3YXJlIGlzIGluY2x1ZGVkIGluIGEgY29kZSB0aGF0IGlzIHN1YmplY3QgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBMaWNlbnNlLCB0aGUgTGljZW5zZWUgaXMgYXV0aG9yaXplZCB0byByZWRpc3RyaWJ1dGUgdGhlIHdob2xlIHVuZGVyIHRoZSBHUEwgTGljZW5zZS5cblxuICAgICAgICAgSW4gdGhlIGV2ZW50IHRoYXQgdGhlIE1vZGlmaWVkIFNvZnR3YXJlIGluY2x1ZGVzIGEgY29kZSB0aGF0IGlzIHN1YmplY3QgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBMaWNlbnNlLCB0aGUgTGljZW5zZWUgaXMgYXV0aG9yaXplZCB0byByZWRpc3RyaWJ1dGUgdGhlIE1vZGlmaWVkIFNvZnR3YXJlIHVuZGVyIHRoZSBHUEwgTGljZW5zZS5cblxuICAgQXJ0aWNsZSA2IC0gSU5URUxMRUNUVUFMIFBST1BFUlRZXG5cbiAgICAgIDYuMS4gT1ZFUiBUSEUgSU5JVElBTCBTT0ZUV0FSRVxuXG4gICAgICBUaGUgSG9sZGVyIG93bnMgdGhlIGVjb25vbWljIHJpZ2h0cyBvdmVyIHRoZSBJbml0aWFsIFNvZnR3YXJlLiBBbnkgb3IgYWxsIHVzZSBvZiB0aGUgSW5pdGlhbCBTb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIEhvbGRlciBoYXMgZWxlY3RlZCB0byBkaXN0cmlidXRlIGl0cyB3b3JrIGFuZCBubyBvbmUgc2hhbGwgYmUgZW50aXRsZWQgdG8gYW5kIGl0IHNoYWxsIGhhdmUgc29sZSBlbnRpdGxlbWVudCB0byBtb2RpZnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHNhaWQgSW5pdGlhbCBTb2Z0d2FyZS5cblxuICAgICAgVGhlIEhvbGRlciB1bmRlcnRha2VzIHRvIG1haW50YWluIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIEluaXRpYWwgU29mdHdhcmUgdW5kZXIgdGhlIGNvbmRpdGlvbnMgb2YgdGhlIEFncmVlbWVudCwgZm9yIHRoZSBkdXJhdGlvbiBzZXQgZm9ydGggaW4gYXJ0aWNsZSA0LjIuLlxuXG4gICAgICA2LjIuIE9WRVIgVEhFIENPTlRSSUJVVElPTlNcblxuICAgICAgVGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3ZlciB0aGUgQ29udHJpYnV0aW9ucyBiZWxvbmcgdG8gdGhlIGhvbGRlciBvZiB0aGUgZWNvbm9taWMgcmlnaHRzIGFzIGRlc2lnbmF0ZWQgYnkgZWZmZWN0aXZlIGxlZ2lzbGF0aW9uLlxuXG4gICAgICA2LjMuIE9WRVIgVEhFIERZTkFNSUMgTU9EVUxFU1xuXG4gICAgICBUaGUgTGljZW5zZWUgaGF2aW5nIGRldmVsb3BlZCBhIER5bmFtaWMgTW9kdWxlIGlzIHRoZSBob2xkZXIgb2YgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3ZlciBzYWlkIER5bmFtaWMgTW9kdWxlIGFuZCBpcyBmcmVlIHRvIGNob29zZSB0aGUgYWdyZWVtZW50IHRoYXQgc2hhbGwgZ292ZXJuIGl0cyBkaXN0cmlidXRpb24uXG5cbiAgICAgIDYuNC4gSk9JTlQgUFJPVklTSU9OU1xuXG4gICAgICAgICBcblxuICAgICAgICAgNi40LjEuIFRoZSBMaWNlbnNlZSBleHByZXNzbHkgdW5kZXJ0YWtlczpcblxuICAgICAgICAgICAgMS4gbm90IHRvIHJlbW92ZSwgb3IgbW9kaWZ5LCBpbiBhbnkgb3IgYWxsIG1hbm5lciwgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBub3RpY2VzIGFmZml4ZWQgdG8gdGhlIFNvZnR3YXJlO1xuXG4gICAgICAgICAgICAyLiB0byByZXByb2R1Y2Ugc2FpZCBub3RpY2VzLCBpbiBhbiBpZGVudGljYWwgbWFubmVyLCBpbiB0aGUgY29waWVzIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgICAgICAgXG5cbiAgICAgICAgIDYuNC4yLiBUaGUgTGljZW5zZWUgdW5kZXJ0YWtlcyBub3QgdG8gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZSB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiB0aGUgSG9sZGVyIGFuZC9vciBDb250cmlidXRvcnMgYW5kIHRvIHRha2UsIHdoZXJlIGFwcGxpY2FibGUsIHZpcy3DoC12aXMgaXRzIHN0YWZmLCBhbnkgb3IgYWxsIG1lYXN1cmVzIHJlcXVpcmVkIHRvIGVuc3VyZSByZXNwZWN0IGZvciBzYWlkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgdGhlIEhvbGRlciBhbmQvb3IgQ29udHJpYnV0b3JzLlxuXG4gICBBcnRpY2xlIDcgLSBSRUxBVEVEIFNFUlZJQ0VTXG5cbiAgICAgIDcuMS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBzaGFsbCB0aGUgQWdyZWVtZW50IG9ibGlnZSB0aGUgTGljZW5zb3IgdG8gcHJvdmlkZSB0ZWNobmljYWwgYXNzaXN0YW5jZSBvciBtYWludGVuYW5jZSBzZXJ2aWNlcyBmb3IgdGhlIFNvZnR3YXJlLlxuXG4gICAgICBIb3dldmVyLCB0aGUgTGljZW5zb3IgaXMgZW50aXRsZWQgdG8gb2ZmZXIgdGhpcyB0eXBlIG9mIHNlcnZpY2UuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiBzdWNoIHRlY2huaWNhbCBhc3Npc3RhbmNlLCBhbmQvb3Igc3VjaCBtYWludGVuYW5jZSwgc2hhbGwgdGhlbiBiZSBzZXQgZm9ydGggaW4gYSBzZXBhcmF0ZSBpbnN0cnVtZW50LiBPbmx5IHRoZSBMaWNlbnNvciBvZmZlcmluZyBzYWlkIG1haW50ZW5hbmNlIGFuZC9vciB0ZWNobmljYWwgYXNzaXN0YW5jZSBzZXJ2aWNlcyBzaGFsbCBpbmN1ciBsaWFiaWxpdHkgdGhlcmVmb3IuXG5cbiAgICAgIDcuMi4gU2ltaWxhcmx5LCBhbnkgb3IgYWxsIExpY2Vuc29yIHNoYWxsIGJlIGVudGl0bGVkIHRvIG9mZmVyIHRvIGl0cyBMaWNlbnNlZXMsIHVuZGVyIGl0cyBvd24gcmVzcG9uc2liaWxpdHksIGEgd2FycmFudHksIHRoYXQgc2hhbGwgb25seSBiZSBiaW5kaW5nIHVwb24gaXRzZWxmLCBmb3IgdGhlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSBhbmQvb3IgdGhlIE1vZGlmaWVkIFNvZnR3YXJlLCB1bmRlciB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGl0IHNoYWxsIGRlY2lkZSB1cG9uIGl0c2VsZi4gU2FpZCB3YXJyYW50eSwgYW5kIHRoZSBmaW5hbmNpYWwgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgaXRzIGFwcGxpY2F0aW9uLCBzaGFsbCBiZSBzdWJqZWN0IHRvIGEgc2VwYXJhdGUgaW5zdHJ1bWVudCBleGVjdXRlZCBiZXR3ZWVuIHRoZSBMaWNlbnNvciBhbmQgdGhlIExpY2Vuc2VlLlxuXG4gICBBcnRpY2xlIDggLSBMSUFCSUxJVFlcblxuICAgICAgOC4xLiBTdWJqZWN0IHRvIHRoZSBwcm92aXNpb25zIG9mIEFydGljbGUgOC4yLCBzaG91bGQgdGhlIExpY2Vuc29yIGZhaWwgdG8gZnVsZmlsbCBhbGwgb3IgcGFydCBvZiBpdHMgb2JsaWdhdGlvbnMgaGVyZXVuZGVyLCB0aGUgTGljZW5zZWUgc2hhbGwgYmUgZW50aXRsZWQgdG8gY2xhaW0gY29tcGVuc2F0aW9uIGZvciB0aGUgZGlyZWN0IGxvc3Mgc3VmZmVyZWQgYXMgYSByZXN1bHQgb2YgYSBmYXVsdCBvbiB0aGUgcGFydCBvZiB0aGUgTGljZW5zb3IsIHN1YmplY3QgdG8gcHJvdmlkaW5nIGV2aWRlbmNlIG9mIGl0LlxuXG4gICAgICA4LjIuIFRoZSBMaWNlbnNvcidzIGxpYWJpbGl0eSBpcyBsaW1pdGVkIHRvIHRoZSBjb21taXRtZW50cyBtYWRlIHVuZGVyIHRoaXMgTGljZW5zaW5nIEFncmVlbWVudCBhbmQgc2hhbGwgbm90IGJlIGluY3VycmVkIGFzIGEgcmVzdWx0ICwgaW4gcGFydGljdWxhcjogKGkpIG9mIGxvc3MgZHVlIHRoZSBMaWNlbnNlZSdzIHRvdGFsIG9yIHBhcnRpYWwgZmFpbHVyZSB0byBmdWxmaWxsIGl0cyBvYmxpZ2F0aW9ucywgKGlpKSBkaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBsb3NzIGR1ZSB0byB0aGUgU29mdHdhcmUncyB1c2Ugb3IgcGVyZm9ybWFuY2UgdGhhdCBpcyBzdWZmZXJlZCBieSB0aGUgTGljZW5zZWUsIHdoZW4gdGhlIGxhdHRlciBpcyBhIHByb2Zlc3Npb25hbCB1c2luZyBzYWlkIFNvZnR3YXJlIGZvciBwcm9mZXNzaW9uYWwgcHVycG9zZXMgYW5kIChpaWkpIGNvbnNlcXVlbnRpYWwgbG9zcyBkdWUgdG8gdGhlIFNvZnR3YXJlJ3MgdXNlIG9yIHBlcmZvcm1hbmNlLiBUaGUgUGFydGllcyBleHByZXNzbHkgYWdyZWUgdGhhdCBhbnkgb3IgYWxsIHBlY3VuaWFyeSBvciBidXNpbmVzcyBsb3NzIChpLmUuIGxvc3Mgb2YgZGF0YSwgbG9zcyBvZiBwcm9maXRzLCBvcGVyYXRpbmcgbG9zcywgbG9zcyBvZiBjdXN0b21lcnMgb3Igb3JkZXJzLCBvcHBvcnR1bml0eSBjb3N0LCBhbnkgZGlzdHVyYmFuY2UgdG8gYnVzaW5lc3MgYWN0aXZpdGllcykgb3IgYW55IG9yIGFsbCBsZWdhbCBwcm9jZWVkaW5ncyBpbnN0aXR1dGVkIGFnYWluc3QgdGhlIExpY2Vuc2VlIGJ5IGEgdGhpcmQgcGFydHksIHNoYWxsIGNvbnN0aXR1dGUgY29uc2VxdWVudGlhbCBsb3NzIGFuZCBzaGFsbCBub3QgcHJvdmlkZSBlbnRpdGxlbWVudCB0byBhbnkgb3IgYWxsIGNvbXBlbnNhdGlvbiBmcm9tIHRoZSBMaWNlbnNvci5cblxuICAgQXJ0aWNsZSA5IC0gV0FSUkFOVFlcblxuICAgICAgOS4xLiBUaGUgTGljZW5zZWUgYWNrbm93bGVkZ2VzIHRoYXQgdGhlIGN1cnJlbnQgc2l0dWF0aW9uIGFzIHJlZ2FyZHMgc2NpZW50aWZpYyBhbmQgdGVjaG5pY2FsIGtub3ctaG93IGF0IHRoZSB0aW1lIHdoZW4gdGhlIFNvZnR3YXJlIHdhcyBkaXN0cmlidXRlZCBkaWQgbm90IGVuYWJsZSBhbGwgcG9zc2libGUgdXNlcyB0byBiZSB0ZXN0ZWQgYW5kIHZlcmlmaWVkLCBub3IgZm9yIHRoZSBwcmVzZW5jZSBvZiBhbnkgb3IgYWxsIGZhdWx0cyB0byBiZSBkZXRlY3RlZC4gSW4gdGhpcyByZXNwZWN0LCB0aGUgTGljZW5zZWUncyBhdHRlbnRpb24gaGFzIGJlZW4gZHJhd24gdG8gdGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBsb2FkaW5nLCB1c2luZywgbW9kaWZ5aW5nIGFuZC9vciBkZXZlbG9waW5nIGFuZCByZXByb2R1Y2luZyB0aGUgU29mdHdhcmUgdGhhdCBhcmUgcmVzZXJ2ZWQgZm9yIGV4cGVyaWVuY2VkIHVzZXJzLlxuXG4gICAgICBUaGUgTGljZW5zZWUgc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIHZlcmlmeWluZywgYnkgYW55IG9yIGFsbCBtZWFucywgdGhlIHByb2R1Y3QncyBzdWl0YWJpbGl0eSBmb3IgaXRzIHJlcXVpcmVtZW50cywgaXRzIGR1ZSBhbmQgcHJvcGVyIGZ1bmN0aW9uaW5nLCBhbmQgZm9yIGVuc3VyaW5nIHRoYXQgaXQgc2hhbGwgbm90IGNhdXNlIGRhbWFnZSB0byBlaXRoZXIgcGVyc29ucyBvciBwcm9wZXJ0eS5cblxuICAgICAgOS4yLiBUaGUgTGljZW5zb3IgaGVyZWJ5IHJlcHJlc2VudHMsIGluIGdvb2QgZmFpdGgsIHRoYXQgaXQgaXMgZW50aXRsZWQgdG8gZ3JhbnQgYWxsIHRoZSByaWdodHMgb24gdGhlIFNvZnR3YXJlIChpbmNsdWRpbmcgaW4gcGFydGljdWxhciB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBBcnRpY2xlIDUgaGVyZW9mIG92ZXIgdGhlIFNvZnR3YXJlKS5cblxuICAgICAgOS4zLiBUaGUgTGljZW5zZWUgYWNrbm93bGVkZ2VzIHRoYXQgdGhlIFNvZnR3YXJlIGlzIHN1cHBsaWVkIFwiYXMgaXNcIiBieSB0aGUgTGljZW5zb3Igd2l0aG91dCBhbnkgb3IgYWxsIG90aGVyIGV4cHJlc3Mgb3IgdGFjaXQgd2FycmFudHksIG90aGVyIHRoYW4gdGhhdCBwcm92aWRlZCBmb3IgaW4gQXJ0aWNsZSA5LjIgYW5kLCBpbiBwYXJ0aWN1bGFyLCB3aXRob3V0IGFueSBvciBhbGwgd2FycmFudHkgYXMgdG8gaXRzIG1hcmtldCB2YWx1ZSwgaXRzIHNlY3VyZWQsIGlubm92YXRpdmUgb3IgcmVsZXZhbnQgbmF0dXJlLlxuXG4gICAgICBTcGVjaWZpY2FsbHksIHRoZSBMaWNlbnNvciBkb2VzIG5vdCB3YXJyYW50IHRoYXQgdGhlIFNvZnR3YXJlIGlzIGZyZWUgZnJvbSBhbnkgb3IgYWxsIGVycm9yLCB0aGF0IGl0IHNoYWxsIG9wZXJhdGUgY29udGludW91c2x5LCB0aGF0IGl0IHNoYWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgTGljZW5zZWUncyBvd24gZXF1aXBtZW50IGFuZCBpdHMgc29mdHdhcmUgY29uZmlndXJhdGlvbiwgbm9yIHRoYXQgaXQgc2hhbGwgbWVldCB0aGUgTGljZW5zZWUncyByZXF1aXJlbWVudHMuXG5cbiAgICAgIDkuNC4gVGhlIExpY2Vuc29yIGRvZXMgbm90IGVpdGhlciBleHByZXNzbHkgb3IgdGFjaXRseSB3YXJyYW50IHRoYXQgdGhlIFNvZnR3YXJlIGRvZXMgbm90IGluZnJpbmdlIGFueSBvciBhbGwgdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHJpZ2h0IHJlbGF0aW5nIHRvIGEgcGF0ZW50LCBzb2Z0d2FyZSBvciB0byBhbnkgb3IgYWxsIG90aGVyIHByb3BlcnR5IHJpZ2h0LiBNb3Jlb3ZlciwgdGhlIExpY2Vuc29yIHNoYWxsIG5vdCBob2xkIHRoZSBMaWNlbnNlZSBoYXJtbGVzcyBhZ2FpbnN0IGFueSBvciBhbGwgcHJvY2VlZGluZ3MgZm9yIGluZnJpbmdlbWVudCB0aGF0IG1heSBiZSBpbnN0aXR1dGVkIGluIHJlc3BlY3Qgb2YgdGhlIHVzZSwgbW9kaWZpY2F0aW9uIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUuIE5ldmVydGhlbGVzcywgc2hvdWxkIHN1Y2ggcHJvY2VlZGluZ3MgYmUgaW5zdGl0dXRlZCBhZ2FpbnN0IHRoZSBMaWNlbnNlZSwgdGhlIExpY2Vuc29yIHNoYWxsIHByb3ZpZGUgaXQgd2l0aCB0ZWNobmljYWwgYW5kIGxlZ2FsIGFzc2lzdGFuY2UgZm9yIGl0cyBkZWZlbnNlLiBTdWNoIHRlY2huaWNhbCBhbmQgbGVnYWwgYXNzaXN0YW5jZSBzaGFsbCBiZSBkZWNpZGVkIHVwb24gb24gYSBjYXNlLWJ5LWNhc2UgYmFzaXMgYmV0d2VlbiB0aGUgcmVsZXZhbnQgTGljZW5zb3IgYW5kIHRoZSBMaWNlbnNlZSBwdXJzdWFudCB0byBhIG1lbW9yYW5kdW0gb2YgdW5kZXJzdGFuZGluZy4gVGhlIExpY2Vuc29yIGRpc2NsYWltcyBhbnkgb3IgYWxsIGxpYWJpbGl0eSBhcyByZWdhcmRzIHRoZSBMaWNlbnNlZSdzIHVzZSBvZiB0aGUgU29mdHdhcmUncyBuYW1lLiBObyB3YXJyYW50eSBzaGFsbCBiZSBwcm92aWRlZCBhcyByZWdhcmRzIHRoZSBleGlzdGVuY2Ugb2YgcHJpb3IgcmlnaHRzIG92ZXIgdGhlIG5hbWUgb2YgdGhlIFNvZnR3YXJlIGFuZCBhcyByZWdhcmRzIHRoZSBleGlzdGVuY2Ugb2YgYSB0cmFkZW1hcmsuXG5cbiAgIEFydGljbGUgMTAgLSBURVJNSU5BVElPTlxuXG4gICAgICAxMC4xLiBJbiB0aGUgZXZlbnQgb2YgYSBicmVhY2ggYnkgdGhlIExpY2Vuc2VlIG9mIGl0cyBvYmxpZ2F0aW9ucyBoZXJldW5kZXIsIHRoZSBMaWNlbnNvciBtYXkgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgdGhpcnR5ICgzMCkgZGF5cyBhZnRlciBub3RpY2UgaGFzIGJlZW4gc2VudCB0byB0aGUgTGljZW5zZWUgYW5kIGhhcyByZW1haW5lZCBpbmVmZmVjdGl2ZS5cblxuICAgICAgMTAuMi4gVGhlIExpY2Vuc2VlIHdob3NlIEFncmVlbWVudCBpcyB0ZXJtaW5hdGVkIHNoYWxsIG5vIGxvbmdlciBiZSBhdXRob3JpemVkIHRvIHVzZSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlLiBIb3dldmVyLCBhbnkgb3IgYWxsIGxpY2Vuc2VzIHRoYXQgaXQgbWF5IGhhdmUgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBvZiB0aGUgQWdyZWVtZW50IHNoYWxsIHJlbWFpbiB2YWxpZCBzdWJqZWN0IHRvIHRoZWlyIGhhdmluZyBiZWVuIGdyYW50ZWQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlb2YuXG5cbiAgIEFydGljbGUgMTEgLSBNSVNDRUxMQU5FT1VTIFBST1ZJU0lPTlNcblxuICAgICAgMTEuMS4gRVhDVVNBQkxFIEVWRU5UU1xuXG4gICAgICBOZWl0aGVyIFBhcnR5IHNoYWxsIGJlIGxpYWJsZSBmb3IgYW55IG9yIGFsbCBkZWxheSwgb3IgZmFpbHVyZSB0byBwZXJmb3JtIHRoZSBBZ3JlZW1lbnQsIHRoYXQgbWF5IGJlIGF0dHJpYnV0YWJsZSB0byBhbiBldmVudCBvZiBmb3JjZSBtYWpldXJlLCBhbiBhY3Qgb2YgR29kIG9yIGFuIG91dHNpZGUgY2F1c2UsIHN1Y2ggYXMsIG5vdGFibHksIGRlZmVjdGl2ZSBmdW5jdGlvbmluZywgb3IgaW50ZXJydXB0aW9ucyBhZmZlY3RpbmcgdGhlIGVsZWN0cmljaXR5IG9yIHRlbGVjb21tdW5pY2F0aW9ucyBuZXR3b3JrcywgYmxvY2tpbmcgb2YgdGhlIG5ldHdvcmsgZm9sbG93aW5nIGEgdmlydXMgYXR0YWNrLCB0aGUgaW50ZXJ2ZW50aW9uIG9mIHRoZSBnb3Zlcm5tZW50IGF1dGhvcml0aWVzLCBuYXR1cmFsIGRpc2FzdGVycywgd2F0ZXIgZGFtYWdlLCBlYXJ0aHF1YWtlcywgZmlyZSwgZXhwbG9zaW9ucywgc3RyaWtlcyBhbmQgbGFib3IgdW5yZXN0LCB3YXIsIGV0Yy5cblxuICAgICAgMTEuMi4gVGhlIGZhY3QgdGhhdCBlaXRoZXIgUGFydHkgbWF5IGZhaWwsIG9uIG9uZSBvciBzZXZlcmFsIG9jY2FzaW9ucywgdG8gaW52b2tlIG9uZSBvciBzZXZlcmFsIG9mIHRoZSBwcm92aXNpb25zIGhlcmVvZiwgc2hhbGwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBiZSBpbnRlcnByZXRlZCBhcyBiZWluZyBhIHdhaXZlciBieSB0aGUgaW50ZXJlc3RlZCBQYXJ0eSBvZiBpdHMgZW50aXRsZW1lbnQgdG8gaW52b2tlIHNhaWQgcHJvdmlzaW9uKHMpIHN1YnNlcXVlbnRseS5cblxuICAgICAgMTEuMy4gVGhlIEFncmVlbWVudCBjYW5jZWxzIGFuZCByZXBsYWNlcyBhbnkgb3IgYWxsIHByZXZpb3VzIGFncmVlbWVudCwgd2hldGhlciB3cml0dGVuIG9yIG9yYWwsIGJldHdlZW4gdGhlIFBhcnRpZXMgYW5kIGhhdmluZyB0aGUgc2FtZSBwdXJwb3NlLCBhbmQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZXR5IG9mIHRoZSBhZ3JlZW1lbnQgYmV0d2VlbiBzYWlkIFBhcnRpZXMgY29uY2VybmluZyBzYWlkIHB1cnBvc2UuIE5vIHN1cHBsZW1lbnQgb3IgbW9kaWZpY2F0aW9uIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlb2Ygc2hhbGwgYmUgZWZmZWN0aXZlIGFzIHJlZ2FyZHMgdGhlIFBhcnRpZXMgdW5sZXNzIGl0IGlzIG1hZGUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZWlyIGR1bHkgYXV0aG9yaXplZCByZXByZXNlbnRhdGl2ZXMuXG5cbiAgICAgIDExLjQuIEluIHRoZSBldmVudCB0aGF0IG9uZSBvciBzZXZlcmFsIG9mIHRoZSBwcm92aXNpb25zIGhlcmVvZiB3ZXJlIHRvIGNvbmZsaWN0IHdpdGggYSBjdXJyZW50IG9yIGZ1dHVyZSBhcHBsaWNhYmxlIGFjdCBvciBsZWdpc2xhdGl2ZSB0ZXh0LCBzYWlkIGFjdCBvciBsZWdpc2xhdGl2ZSB0ZXh0IHNoYWxsIHRha2UgcHJlY2VkZW5jZSwgYW5kIHRoZSBQYXJ0aWVzIHNoYWxsIG1ha2UgdGhlIG5lY2Vzc2FyeSBhbWVuZG1lbnRzIHNvIGFzIHRvIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBzYWlkIGFjdCBvciBsZWdpc2xhdGl2ZSB0ZXh0LiBBbGwgdGhlIG90aGVyIHByb3Zpc2lvbnMgc2hhbGwgcmVtYWluIGVmZmVjdGl2ZS4gU2ltaWxhcmx5LCB0aGUgZmFjdCB0aGF0IGEgcHJvdmlzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgbWF5IGJlIG51bGwgYW5kIHZvaWQsIGZvciBhbnkgcmVhc29uIHdoYXRzb2V2ZXIsIHNoYWxsIG5vdCBjYXVzZSB0aGUgQWdyZWVtZW50IGFzIGEgd2hvbGUgdG8gYmUgbnVsbCBhbmQgdm9pZC5cblxuICAgICAgMTEuNS4gTEFOR1VBR0VcblxuICAgICAgVGhlIEFncmVlbWVudCBpcyBkcmFmdGVkIGluIGJvdGggRnJlbmNoIGFuZCBFbmdsaXNoLiBJbiB0aGUgZXZlbnQgb2YgYSBjb25mbGljdCBhcyByZWdhcmRzIGNvbnN0cnVjdGlvbiwgdGhlIEZyZW5jaCB2ZXJzaW9uIHNoYWxsIGJlIGRlZW1lZCBhdXRoZW50aWMuXG5cbiAgIEFydGljbGUgMTIgLSBORVcgVkVSU0lPTlMgT0YgVEhFIEFHUkVFTUVOVFxuXG4gICAgICAxMi4xLiBBbnkgb3IgYWxsIHBlcnNvbiBpcyBhdXRob3JpemVkIHRvIGR1cGxpY2F0ZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgICAgIDEyLjIuIFNvIGFzIHRvIGVuc3VyZSBjb2hlcmVuY2UsIHRoZSB3b3JkaW5nIG9mIHRoaXMgQWdyZWVtZW50IGlzIHByb3RlY3RlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgYnkgdGhlIGF1dGhvcnMgb2YgdGhlIExpY2Vuc2UsIHRoYXQgcmVzZXJ2ZSB0aGUgcmlnaHQgdG8gcGVyaW9kaWNhbGx5IHB1Ymxpc2ggdXBkYXRlcyBvciBuZXcgdmVyc2lvbnMgb2YgdGhlIEFncmVlbWVudCwgZWFjaCB3aXRoIGEgc2VwYXJhdGUgbnVtYmVyLiBUaGVzZSBzdWJzZXF1ZW50IHZlcnNpb25zIG1heSBhZGRyZXNzIG5ldyBpc3N1ZXMgZW5jb3VudGVyZWQgYnkgRnJlZSBTb2Z0d2FyZS5cblxuICAgICAgMTIuMy4gQW55IG9yIGFsbCBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciBhIGdpdmVuIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBtYXkgb25seSBiZSBzdWJzZXF1ZW50bHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50LCBvciBhIHN1YnNlcXVlbnQgdmVyc2lvbiwgc3ViamVjdCB0byB0aGUgcHJvdmlzaW9ucyBvZiBhcnRpY2xlIDUuMy40LlxuXG4gICBBcnRpY2xlIDEzIC0gR09WRVJOSU5HIExBVyBBTkQgSlVSSVNESUNUSU9OXG5cbiAgICAgIDEzLjEuIFRoZSBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgRnJlbmNoIGxhdy4gVGhlIFBhcnRpZXMgYWdyZWUgdG8gZW5kZWF2b3IgdG8gc2V0dGxlIHRoZSBkaXNhZ3JlZW1lbnRzIG9yIGRpc3B1dGVzIHRoYXQgbWF5IGFyaXNlIGR1cmluZyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIEFncmVlbWVudCBvdXQtb2YtY291cnQuXG5cbiAgICAgIDEzLjIuIEluIHRoZSBhYnNlbmNlIG9mIGFuIG91dC1vZi1jb3VydCBzZXR0bGVtZW50IHdpdGhpbiB0d28gKDIpIG1vbnRocyBhcyBmcm9tIHRoZWlyIG9jY3VycmVuY2UsIGFuZCB1bmxlc3MgZW1lcmdlbmN5IHByb2NlZWRpbmdzIGFyZSBuZWNlc3NhcnksIHRoZSBkaXNhZ3JlZW1lbnRzIG9yIGRpc3B1dGVzIHNoYWxsIGJlIHJlZmVycmVkIHRvIHRoZSBQYXJpcyBDb3VydHMgaGF2aW5nIGp1cmlzZGljdGlvbiwgYnkgdGhlIGZpcnN0IFBhcnR5IHRvIHRha2UgYWN0aW9uLlxuXG5WZXJzaW9uIDEuMSBvZiAxMC8yNi8yMDA0Il0sImxpY2Vuc2VJZHMiOlsiQ0VDSUxMLTEuMSJdLCJrZXl3b3JkcyI6WyJsaWNlbnNpbmcgYWdyZWVtZW50IGNlY2lsbCIsImFncmVlbWVudCBjZWNpbGwgbm90aWNlIiwiY2VjaWxsIG5vdGljZSB0aGlzIiwic29mdHdhcmUgbGljZW5zZSB0aGF0IiwiZHJhZnRpbmcgZmlyc3RseSBpdHMiLCJmaXJzdGx5IGl0cyBjb25mb3JtaXR5IiwiaXRzIGNvbmZvcm1pdHkgd2l0aCIsImNvbmZvcm1pdHkgd2l0aCBmcmVuY2giLCJ3aXRoIGZyZW5jaCBsYXciLCJmcmVuY2ggbGF3IGJvdGgiLCJsYXcgYm90aCBhcyIsIm9mZmVycyB0byBhdXRob3JzIiwidG8gYXV0aG9ycyBhbmQiLCJhdXRob3JzIGFuZCB0aGUiLCJhbmQgdGhlIGhvbGRlcnMiLCJ0aGUgaG9sZGVycyBvZiIsImhvbGRlcnMgb2YgZWNvbm9taWMiLCJvZiBlY29ub21pYyByaWdodHMiLCJvdmVyIHNvZnR3YXJlIHNlY29uZGx5Iiwic29mdHdhcmUgc2Vjb25kbHkgY29tcGxpYW5jZSIsInNlY29uZGx5IGNvbXBsaWFuY2Ugd2l0aCIsInRoZSBwcmluY2lwbGVzIGZvciIsInByaW5jaXBsZXMgZm9yIHRoZSIsInRvIHNvdXJjZSBjb2RlcyIsInNvdXJjZSBjb2RlcyBleHRlbmRlZCIsImNvZGVzIGV4dGVuZGVkIHVzZXIiLCJleHRlbmRlZCB1c2VyIHJpZ2h0cyIsInVzZXIgcmlnaHRzIHRoZSIsInJpZ2h0cyB0aGUgZm9sbG93aW5nIiwidGhlIGZvbGxvd2luZyBib2RpZXMiLCJmb2xsb3dpbmcgYm9kaWVzIGFyZSIsImJvZGllcyBhcmUgdGhlIiwiYXJlIHRoZSBhdXRob3JzIiwidGhpcyBsaWNlbnNlIGNlY2lsbCIsImxpY2Vuc2UgY2VjaWxsIGNlIiwiY2VjaWxsIGNlIGNlYSIsImxvZ2ljaWVsIGxpYnJlIGNvbW1pc3NhcmlhdCIsImxpYnJlIGNvbW1pc3NhcmlhdCBsIiwiYW5kIGluZHVzdHJpYWwgZXN0YWJsaXNobWVudCIsImluZHVzdHJpYWwgZXN0YWJsaXNobWVudCBoYXZpbmciLCJidXNpbmVzcyBhdCAzMSIsImF0IDMxIDMzIiwiY2VkZXggMTUgZnJhbmNlIiwiMTUgZnJhbmNlIGNlbnRyZSIsImNoZXNuYXkgY2VkZXggcHJlYW1ibGUiLCJjZWRleCBwcmVhbWJsZSB0aGUiLCJsaWNlbnNpbmcgYWdyZWVtZW50IGlzIiwidGhhdCB0aGlzIHN0YXR1cyIsInRoaXMgc3RhdHVzIGlzIiwic3RhdHVzIGlzIHJldGFpbmVkIiwiaXMgcmV0YWluZWQgZm9yIiwicmV0YWluZWQgZm9yIHN1YnNlcXVlbnQiLCJmb3Igc3Vic2VxdWVudCByZWRpc3RyaWJ1dGlvbiIsInN1YnNlcXVlbnQgcmVkaXN0cmlidXRpb24gb3BlcmF0aW9ucyIsInJlZGlzdHJpYnV0aW9uIG9wZXJhdGlvbnMgYXMiLCJvcGVyYXRpb25zIGFzIGEiLCJhcyBhIGNvdW50ZXJwYXJ0IiwiYSBjb3VudGVycGFydCB0byIsImNvdW50ZXJwYXJ0IHRvIHRoZSIsInRvIHRoZSBhY2Nlc3MiLCJ0aGUgYWNjZXNzIHRvIiwiY29kZSBhbmQgcmlnaHRzIiwidGhpcyByZXNwZWN0IGl0IiwicmVzcGVjdCBpdCBpcyIsIml0IGlzIGJyb3VnaHQiLCJpcyBicm91Z2h0IHRvIiwicyBhdHRlbnRpb24gdGhhdCIsImF0dGVudGlvbiB0aGF0IHRoZSIsInRoYXQgdGhlIHJpc2tzIiwidGhlIHVzZXIgZ2l2ZW4iLCJ1c2VyIGdpdmVuIGl0cyIsImdpdmVuIGl0cyBuYXR1cmUiLCJpdHMgbmF0dXJlIG9mIiwibmF0dXJlIG9mIGZyZWUiLCJ0aGF0IG1heSBtZWFuIiwibWF5IG1lYW4gdGhhdCIsIm1lYW4gdGhhdCBpdCIsIml0IGlzIGNvbXBsaWNhdGVkIiwiaXMgY29tcGxpY2F0ZWQgdG8iLCJjb21wbGljYXRlZCB0byBtYW5pcHVsYXRlIiwidG8gbWFuaXB1bGF0ZSBhbmQiLCJtYW5pcHVsYXRlIGFuZCB0aGF0IiwiYW5kIHRoYXQgYWxzbyIsInRoYXQgYWxzbyB0aGVyZWZvcmUiLCJhbHNvIHRoZXJlZm9yZSBtZWFucyIsInRoZXJlZm9yZSBtZWFucyB0aGF0IiwiaXQgaXMgcmVzZXJ2ZWQiLCJ0ZXN0IHRoZSBzb2Z0d2FyZSIsInNvZnR3YXJlIHMgc3VpdGFiaWxpdHkiLCJzIHN1aXRhYmlsaXR5IGFzIiwic3VpdGFiaWxpdHkgYXMgcmVnYXJkcyIsInRoYXQgbm8gYXJ0aWNsZXMiLCJubyBhcnRpY2xlcyBhcmUiLCJhcnRpY2xlcyBhcmUgZWl0aGVyIiwic3VibWl0IHRoZSBvcGVyYXRpb24iLCJvcGVyYXRpb24gdGhlcmVvZiB0byIsIm1lYW5zIHRoaXMgbGljZW5zaW5nIiwiYW5kIGFueSBvciIsIm9mIGl0cyBzdWJzZXF1ZW50IiwiaXRzIHN1YnNlcXVlbnQgdmVyc2lvbnMiLCJzdWJzZXF1ZW50IHZlcnNpb25zIHNvZnR3YXJlIiwidmVyc2lvbnMgc29mdHdhcmUgbWVhbnMiLCJhbmQgb3Igb2JqZWN0IiwidGltZSB3aGVuIGl0IiwiaXMgZGlzdHJpYnV0ZWQgZm9yIiwiZGlzdHJpYnV0ZWQgZm9yIHRoZSIsImZvciB0aGUgZmlyc3QiLCJmaXJzdCB0aW1lIHVuZGVyIiwidGltZSB1bmRlciB0aGUiLCJzb2Z0d2FyZSBsaWNlbnNlZSBzIiwibGljZW5zZWUgcyBtZWFuIiwicyBtZWFuIHMiLCJtZWFuIHMgdGhlIiwicyB0aGUgc29mdHdhcmUiLCJhbGwgb3RoZXIgaW5kaXZpZHVhbCIsInRoZSBhZ3JlZW1lbnQgY29udHJpYnV0aW9ucyIsImFncmVlbWVudCBjb250cmlidXRpb25zIG1lYW4iLCJjb250cmlidXRpb25zIG1lYW4gYW55IiwibWVhbiBhbnkgb3IiLCJvciBuZXcgZnVuY3Rpb25hbGl0aWVzIiwibmV3IGZ1bmN0aW9uYWxpdGllcyBpbnRlZ3JhdGVkIiwiZnVuY3Rpb25hbGl0aWVzIGludGVncmF0ZWQgaW50byIsIm9yIGFsbCBjb250cmlidXRvciIsImFsbCBjb250cmlidXRvciBhbmQiLCJhbmQgdGhlIHN0YXRpYyIsInRoZSBzdGF0aWMgbW9kdWxlcyIsInN0YXRpYyBtb2R1bGVzIG1vZHVsZSIsImRvY3VtZW50YXRpb24gdGhhdCBvbmNlIiwidGhhdCBvbmNlIGNvbXBpbGVkIiwib25jZSBjb21waWxlZCBpbiIsImNvbXBpbGVkIGluIGV4ZWN1dGFibGUiLCJleGVjdXRhYmxlIGZvcm0gZW5hYmxlcyIsImZvcm0gZW5hYmxlcyBzdXBwbGVtZW50YXJ5IiwiZW5hYmxlcyBzdXBwbGVtZW50YXJ5IGZ1bmN0aW9uYWxpdGllcyIsInN1cHBsZW1lbnRhcnkgZnVuY3Rpb25hbGl0aWVzIG9yIiwiZnVuY3Rpb25hbGl0aWVzIG9yIHNlcnZpY2VzIiwib3Igc2VydmljZXMgdG8iLCJzZXJ2aWNlcyB0byBiZSIsInRvIGJlIGRldmVsb3BlZCIsImJlIGRldmVsb3BlZCBpbiIsImRldmVsb3BlZCBpbiBhZGRpdGlvbiIsInRoZSBzb2Z0d2FyZSBkeW5hbWljIiwic29mdHdhcmUgZHluYW1pYyBtb2R1bGUiLCJkeW5hbWljIG1vZHVsZSBtZWFucyIsInRoZSBjb250cmlidXRvciB0aGF0IiwiY29udHJpYnV0b3IgdGhhdCBpcyIsInRoYXQgaXMgaW5kZXBlbmRlbnQiLCJpcyBpbmRlcGVuZGVudCBvZiIsInNvZnR3YXJlIGFyZSBpbiIsImFyZSBpbiB0d28iLCJpbiB0d28gZGlmZmVyZW50IiwidHdvIGRpZmZlcmVudCBleGVjdXRhYmxlIiwiZGlmZmVyZW50IGV4ZWN1dGFibGUgZm9ybXMiLCJleGVjdXRhYmxlIGZvcm1zIHRoYXQiLCJmb3JtcyB0aGF0IGFyZSIsInRoYXQgYXJlIHJ1biIsImFyZSBydW4gaW4iLCJhcmUgcnVuIHN0YXRpYyIsInJ1biBzdGF0aWMgbW9kdWxlIiwic3RhdGljIG1vZHVsZSBtZWFucyIsImNvbnRyaWJ1dG9yIGFuZCBjb25uZWN0ZWQiLCJhbmQgY29ubmVjdGVkIHRvIiwic29mdHdhcmUgYnkgYSIsImJ5IGEgc3RhdGljIiwiYSBzdGF0aWMgbGluayIsInN0YXRpYyBsaW5rIHRoYXQiLCJsaW5rIHRoYXQgbWFrZXMiLCJ0aGF0IG1ha2VzIHRoZWlyIiwibWFrZXMgdGhlaXIgb2JqZWN0IiwidGhlaXIgb2JqZWN0IGNvZGVzIiwib2JqZWN0IGNvZGVzIGludGVyZGVwZW5kZW50IiwiY29kZXMgaW50ZXJkZXBlbmRlbnQgdGhpcyIsImludGVyZGVwZW5kZW50IHRoaXMgbW9kdWxlIiwiaXQgaXMgY29ubmVjdGVkIiwiaXMgY29ubmVjdGVkIGFyZSIsImNvbm5lY3RlZCBhcmUgY29tYmluZWQiLCJhcmUgY29tYmluZWQgaW4iLCJjb21iaW5lZCBpbiBhIiwiYSBzaW5nbGUgZXhlY3V0YWJsZSIsInNpbmdsZSBleGVjdXRhYmxlIHBhcnRpZXMiLCJleGVjdXRhYmxlIHBhcnRpZXMgbWVhbiIsInRvIGVuYWJsZSB0aGUiLCJlbmFibGUgdGhlIGxpY2Vuc29yIiwibGljZW5zb3IgdG8gZ3JhbnQiLCJncmFudCB0aGUgbGljZW5zZWUiLCJ0aGUgbGljZW5zZWUgYSIsImxpY2Vuc2VlIGEgZnJlZSIsImEgZnJlZSBub24iLCJieSB0aGUgb2NjdXJyZW5jZSIsInRvIHRoZSBzcGVjaWZpYyIsInRoZSBzcGVjaWZpYyBuYXR1cmUiLCJzcGVjaWZpYyBuYXR1cmUgb2YiLCJ0aGUgbGltaXRhdGlvbiB0byIsImxpbWl0YXRpb24gdG8gdXNlIiwidXNlIGJ5IGV4cGVyaWVuY2VkIiwiYnkgZXhwZXJpZW5jZWQgdXNlcnMiLCJpdCBpcyBhd2FyZSIsImlzIGF3YXJlIHRoZXJlb2YiLCJhd2FyZSB0aGVyZW9mIGFydGljbGUiLCJpbiBmb3JjZSBkdXJpbmciXX0seyJsaWNlbnNlVGV4dHMiOlsiQ2VDSUxMIEZSRUUgU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQgTm90aWNlXG5cblRoaXMgQWdyZWVtZW50IGlzIGEgRnJlZSBTb2Z0d2FyZSBsaWNlbnNlIGFncmVlbWVudCB0aGF0IGlzIHRoZSByZXN1bHQgb2YgZGlzY3Vzc2lvbnMgYmV0d2VlbiBpdHMgYXV0aG9ycyBpbiBvcmRlciB0byBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRoZSB0d28gbWFpbiBwcmluY2lwbGVzIGd1aWRpbmcgaXRzIGRyYWZ0aW5nOlxuXG4gICAqIGZpcnN0bHksIGNvbXBsaWFuY2Ugd2l0aCB0aGUgcHJpbmNpcGxlcyBnb3Zlcm5pbmcgdGhlIGRpc3RyaWJ1dGlvbiBvZiBGcmVlIFNvZnR3YXJlOiBhY2Nlc3MgdG8gc291cmNlIGNvZGUsIGJyb2FkIHJpZ2h0cyBncmFudGVkIHRvIHVzZXJzLFxuXG4gICAqIHNlY29uZGx5LCB0aGUgZWxlY3Rpb24gb2YgYSBnb3Zlcm5pbmcgbGF3LCBGcmVuY2ggbGF3LCB3aXRoIHdoaWNoIGl0IGlzIGNvbmZvcm1hbnQsIGJvdGggYXMgcmVnYXJkcyB0aGUgbGF3IG9mIHRvcnRzIGFuZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3LCBhbmQgdGhlIHByb3RlY3Rpb24gdGhhdCBpdCBvZmZlcnMgdG8gYm90aCBhdXRob3JzIGFuZCBob2xkZXJzIG9mIHRoZSBlY29ub21pYyByaWdodHMgb3ZlciBzb2Z0d2FyZS5cblxuVGhlIGF1dGhvcnMgb2YgdGhlIENlQ0lMTMK5IGxpY2Vuc2UgYXJlOlxuXG4gICBcblxuICAgQ29tbWlzc2FyaWF0IMOgIGwnRW5lcmdpZSBBdG9taXF1ZSAtIENFQSwgYSBwdWJsaWMgc2NpZW50aWZpYywgdGVjaG5pY2FsIGFuZCBpbmR1c3RyaWFsIHJlc2VhcmNoIGVzdGFibGlzaG1lbnQsIGhhdmluZyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGF0IDI1IHJ1ZSBMZWJsYW5jLCBpbW1ldWJsZSBMZSBQb25hbnQgRCwgNzUwMTUgUGFyaXMsIEZyYW5jZS5cblxuICAgXG5cbiAgIENlbnRyZSBOYXRpb25hbCBkZSBsYSBSZWNoZXJjaGUgU2NpZW50aWZpcXVlIC0gQ05SUywgYSBwdWJsaWMgc2NpZW50aWZpYyBhbmQgdGVjaG5vbG9naWNhbCBlc3RhYmxpc2htZW50LCBoYXZpbmcgaXRzIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBhdCAzIHJ1ZSBNaWNoZWwtQW5nZSwgNzU3OTQgUGFyaXMgY2VkZXggMTYsIEZyYW5jZS5cblxuICAgXG5cbiAgIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUgLSBJTlJJQSwgYSBwdWJsaWMgc2NpZW50aWZpYyBhbmQgdGVjaG5vbG9naWNhbCBlc3RhYmxpc2htZW50LCBoYXZpbmcgaXRzIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBhdCBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleCwgRnJhbmNlLlxuXG4gICBQcmVhbWJsZSBUaGUgcHVycG9zZSBvZiB0aGlzIEZyZWUgU29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgaXMgdG8gZ3JhbnQgdXNlcnMgdGhlIHJpZ2h0IHRvIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBnb3Zlcm5lZCBieSB0aGlzIGxpY2Vuc2Ugd2l0aGluIHRoZSBmcmFtZXdvcmsgb2YgYW4gb3BlbiBzb3VyY2UgZGlzdHJpYnV0aW9uIG1vZGVsLlxuXG4gICBUaGUgZXhlcmNpc2luZyBvZiB0aGVzZSByaWdodHMgaXMgY29uZGl0aW9uYWwgdXBvbiBjZXJ0YWluIG9ibGlnYXRpb25zIGZvciB1c2VycyBzbyBhcyB0byBwcmVzZXJ2ZSB0aGlzIHN0YXR1cyBmb3IgYWxsIHN1YnNlcXVlbnQgcmVkaXN0cmlidXRpb25zLlxuXG4gICBJbiBjb25zaWRlcmF0aW9uIG9mIGFjY2VzcyB0byB0aGUgc291cmNlIGNvZGUgYW5kIHRoZSByaWdodHMgdG8gY29weSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgZ3JhbnRlZCBieSB0aGUgbGljZW5zZSwgdXNlcnMgYXJlIHByb3ZpZGVkIG9ubHkgd2l0aCBhIGxpbWl0ZWQgd2FycmFudHkgYW5kIHRoZSBzb2Z0d2FyZSdzIGF1dGhvciwgdGhlIGhvbGRlciBvZiB0aGUgZWNvbm9taWMgcmlnaHRzLCBhbmQgdGhlIHN1Y2Nlc3NpdmUgbGljZW5zb3JzIG9ubHkgaGF2ZSBsaW1pdGVkIGxpYWJpbGl0eS5cblxuICAgSW4gdGhpcyByZXNwZWN0LCB0aGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGxvYWRpbmcsIHVzaW5nLCBtb2RpZnlpbmcgYW5kL29yIGRldmVsb3Bpbmcgb3IgcmVwcm9kdWNpbmcgdGhlIHNvZnR3YXJlIGJ5IHRoZSB1c2VyIGFyZSBicm91Z2h0IHRvIHRoZSB1c2VyJ3MgYXR0ZW50aW9uLCBnaXZlbiBpdHMgRnJlZSBTb2Z0d2FyZSBzdGF0dXMsIHdoaWNoIG1heSBtYWtlIGl0IGNvbXBsaWNhdGVkIHRvIHVzZSwgd2l0aCB0aGUgcmVzdWx0IHRoYXQgaXRzIHVzZSBpcyByZXNlcnZlZCBmb3IgZGV2ZWxvcGVycyBhbmQgZXhwZXJpZW5jZWQgcHJvZmVzc2lvbmFscyBoYXZpbmcgaW4tZGVwdGggY29tcHV0ZXIga25vd2xlZGdlLiBVc2VycyBhcmUgdGhlcmVmb3JlIGVuY291cmFnZWQgdG8gbG9hZCBhbmQgdGVzdCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIHNvZnR3YXJlIGFzIHJlZ2FyZHMgdGhlaXIgcmVxdWlyZW1lbnRzIGluIGNvbmRpdGlvbnMgZW5hYmxpbmcgdGhlIHNlY3VyaXR5IG9mIHRoZWlyIHN5c3RlbXMgYW5kL29yIGRhdGEgdG8gYmUgZW5zdXJlZCBhbmQsIG1vcmUgZ2VuZXJhbGx5LCB0byB1c2UgYW5kIG9wZXJhdGUgaXQgaW4gdGhlIHNhbWUgY29uZGl0aW9ucyBvZiBzZWN1cml0eS4gVGhpcyBBZ3JlZW1lbnQgbWF5IGJlIGZyZWVseSByZXByb2R1Y2VkIGFuZCBwdWJsaXNoZWQsIHByb3ZpZGVkIGl0IGlzIG5vdCBhbHRlcmVkLCBhbmQgdGhhdCBubyBwcm92aXNpb25zIGFyZSBlaXRoZXIgYWRkZWQgb3IgcmVtb3ZlZCBoZXJlZnJvbS5cblxuICAgVGhpcyBBZ3JlZW1lbnQgbWF5IGFwcGx5IHRvIGFueSBvciBhbGwgc29mdHdhcmUgZm9yIHdoaWNoIHRoZSBob2xkZXIgb2YgdGhlIGVjb25vbWljIHJpZ2h0cyBkZWNpZGVzIHRvIHN1Ym1pdCB0aGUgdXNlIHRoZXJlb2YgdG8gaXRzIHByb3Zpc2lvbnMuXG5cbiAgIEFydGljbGUgMSAtIERFRklOSVRJT05TXG5cbiAgIEZvciB0aGUgcHVycG9zZSBvZiB0aGlzIEFncmVlbWVudCwgd2hlbiB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb25zIGNvbW1lbmNlIHdpdGggYSBjYXBpdGFsIGxldHRlciwgdGhleSBzaGFsbCBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzpcblxuICAgICAgXG5cbiAgICAgIEFncmVlbWVudDogbWVhbnMgdGhpcyBsaWNlbnNlIGFncmVlbWVudCwgYW5kIGl0cyBwb3NzaWJsZSBzdWJzZXF1ZW50IHZlcnNpb25zIGFuZCBhbm5leGVzLlxuXG4gICAgICBcblxuICAgICAgU29mdHdhcmU6IG1lYW5zIHRoZSBzb2Z0d2FyZSBpbiBpdHMgT2JqZWN0IENvZGUgYW5kL29yIFNvdXJjZSBDb2RlIGZvcm0gYW5kLCB3aGVyZSBhcHBsaWNhYmxlLCBpdHMgZG9jdW1lbnRhdGlvbiwgXCJhcyBpc1wiIHdoZW4gdGhlIExpY2Vuc2VlIGFjY2VwdHMgdGhlIEFncmVlbWVudC5cblxuICAgICAgXG5cbiAgICAgIEluaXRpYWwgU29mdHdhcmU6IG1lYW5zIHRoZSBTb2Z0d2FyZSBpbiBpdHMgU291cmNlIENvZGUgYW5kIHBvc3NpYmx5IGl0cyBPYmplY3QgQ29kZSBmb3JtIGFuZCwgd2hlcmUgYXBwbGljYWJsZSwgaXRzIGRvY3VtZW50YXRpb24sIFwiYXMgaXNcIiB3aGVuIGl0IGlzIGZpcnN0IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQWdyZWVtZW50LlxuXG4gICAgICBcblxuICAgICAgTW9kaWZpZWQgU29mdHdhcmU6IG1lYW5zIHRoZSBTb2Z0d2FyZSBtb2RpZmllZCBieSBhdCBsZWFzdCBvbmUgQ29udHJpYnV0aW9uLlxuXG4gICAgICBcblxuICAgICAgU291cmNlIENvZGU6IG1lYW5zIGFsbCB0aGUgU29mdHdhcmUncyBpbnN0cnVjdGlvbnMgYW5kIHByb2dyYW0gbGluZXMgdG8gd2hpY2ggYWNjZXNzIGlzIHJlcXVpcmVkIHNvIGFzIHRvIG1vZGlmeSB0aGUgU29mdHdhcmUuXG5cbiAgICAgIFxuXG4gICAgICBPYmplY3QgQ29kZTogbWVhbnMgdGhlIGJpbmFyeSBmaWxlcyBvcmlnaW5hdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBvZiB0aGUgU291cmNlIENvZGUuXG5cbiAgICAgIFxuXG4gICAgICBIb2xkZXI6IG1lYW5zIHRoZSBob2xkZXIocykgb2YgdGhlIGVjb25vbWljIHJpZ2h0cyBvdmVyIHRoZSBJbml0aWFsIFNvZnR3YXJlLlxuXG4gICAgICBcblxuICAgICAgTGljZW5zZWU6IG1lYW5zIHRoZSBTb2Z0d2FyZSB1c2VyKHMpIGhhdmluZyBhY2NlcHRlZCB0aGUgQWdyZWVtZW50LlxuXG4gICAgICBcblxuICAgICAgQ29udHJpYnV0b3I6IG1lYW5zIGEgTGljZW5zZWUgaGF2aW5nIG1hZGUgYXQgbGVhc3Qgb25lIENvbnRyaWJ1dGlvbi5cblxuICAgICAgXG5cbiAgICAgIExpY2Vuc29yOiBtZWFucyB0aGUgSG9sZGVyLCBvciBhbnkgb3RoZXIgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHksIHdobyBkaXN0cmlidXRlcyB0aGUgU29mdHdhcmUgdW5kZXIgdGhlIEFncmVlbWVudC5cblxuICAgICAgXG5cbiAgICAgIENvbnRyaWJ1dGlvbjogbWVhbnMgYW55IG9yIGFsbCBtb2RpZmljYXRpb25zLCBjb3JyZWN0aW9ucywgdHJhbnNsYXRpb25zLCBhZGFwdGF0aW9ucyBhbmQvb3IgbmV3IGZ1bmN0aW9ucyBpbnRlZ3JhdGVkIGludG8gdGhlIFNvZnR3YXJlIGJ5IGFueSBvciBhbGwgQ29udHJpYnV0b3JzLCBhcyB3ZWxsIGFzIGFueSBvciBhbGwgSW50ZXJuYWwgTW9kdWxlcy5cblxuICAgICAgXG5cbiAgICAgIE1vZHVsZTogbWVhbnMgYSBzZXQgb2Ygc291cmNlcyBmaWxlcyBpbmNsdWRpbmcgdGhlaXIgZG9jdW1lbnRhdGlvbiB0aGF0IGVuYWJsZXMgc3VwcGxlbWVudGFyeSBmdW5jdGlvbnMgb3Igc2VydmljZXMgaW4gYWRkaXRpb24gdG8gdGhvc2Ugb2ZmZXJlZCBieSB0aGUgU29mdHdhcmUuXG5cbiAgICAgIFxuXG4gICAgICBFeHRlcm5hbCBNb2R1bGU6IG1lYW5zIGFueSBvciBhbGwgTW9kdWxlcywgbm90IGRlcml2ZWQgZnJvbSB0aGUgU29mdHdhcmUsIHNvIHRoYXQgdGhpcyBNb2R1bGUgYW5kIHRoZSBTb2Z0d2FyZSBydW4gaW4gc2VwYXJhdGUgYWRkcmVzcyBzcGFjZXMsIHdpdGggb25lIGNhbGxpbmcgdGhlIG90aGVyIHdoZW4gdGhleSBhcmUgcnVuLlxuXG4gICAgICBcblxuICAgICAgSW50ZXJuYWwgTW9kdWxlOiBtZWFucyBhbnkgb3IgYWxsIE1vZHVsZSwgY29ubmVjdGVkIHRvIHRoZSBTb2Z0d2FyZSBzbyB0aGF0IHRoZXkgYm90aCBleGVjdXRlIGluIHRoZSBzYW1lIGFkZHJlc3Mgc3BhY2UuXG5cbiAgICAgIFxuXG4gICAgICBHTlUgR1BMOiBtZWFucyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIG9yIGFueSBzdWJzZXF1ZW50IHZlcnNpb24sIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEluYy5cblxuICAgICAgXG5cbiAgICAgIFBhcnRpZXM6IG1lYW4gYm90aCB0aGUgTGljZW5zZWUgYW5kIHRoZSBMaWNlbnNvci5cblxuICAgVGhlc2UgZXhwcmVzc2lvbnMgbWF5IGJlIHVzZWQgYm90aCBpbiBzaW5ndWxhciBhbmQgcGx1cmFsIGZvcm0uXG5cbiAgIEFydGljbGUgMiAtIFBVUlBPU0VcblxuICAgVGhlIHB1cnBvc2Ugb2YgdGhlIEFncmVlbWVudCBpcyB0aGUgZ3JhbnQgYnkgdGhlIExpY2Vuc29yIHRvIHRoZSBMaWNlbnNlZSBvZiBhIG5vbi1leGNsdXNpdmUsIHRyYW5zZmVyYWJsZSBhbmQgd29ybGR3aWRlIGxpY2Vuc2UgZm9yIHRoZSBTb2Z0d2FyZSBhcyBzZXQgZm9ydGggaW4gQXJ0aWNsZSA1IGhlcmVpbmFmdGVyIGZvciB0aGUgd2hvbGUgdGVybSBvZiB0aGUgcHJvdGVjdGlvbiBncmFudGVkIGJ5IHRoZSByaWdodHMgb3ZlciBzYWlkIFNvZnR3YXJlLlxuXG4gICBBcnRpY2xlIDMgLSBBQ0NFUFRBTkNFXG5cbiAgICAgIDMuMSBUaGUgTGljZW5zZWUgc2hhbGwgYmUgZGVlbWVkIGFzIGhhdmluZyBhY2NlcHRlZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgdXBvbiB0aGUgb2NjdXJyZW5jZSBvZiB0aGUgZmlyc3Qgb2YgdGhlIGZvbGxvd2luZyBldmVudHM6XG5cbiAgICAgICAgIChpKSBsb2FkaW5nIHRoZSBTb2Z0d2FyZSBieSBhbnkgb3IgYWxsIG1lYW5zLCBub3RhYmx5LCBieSBkb3dubG9hZGluZyBmcm9tIGEgcmVtb3RlIHNlcnZlciwgb3IgYnkgbG9hZGluZyBmcm9tIGEgcGh5c2ljYWwgbWVkaXVtO1xuXG4gICAgICAgICAoaWkpIHRoZSBmaXJzdCB0aW1lIHRoZSBMaWNlbnNlZSBleGVyY2lzZXMgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuXG5cbiAgICAgIDMuMiBPbmUgY29weSBvZiB0aGUgQWdyZWVtZW50LCBjb250YWluaW5nIGEgbm90aWNlIHJlbGF0aW5nIHRvIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIFNvZnR3YXJlLCB0byB0aGUgbGltaXRlZCB3YXJyYW50eSwgYW5kIHRvIHRoZSBmYWN0IHRoYXQgaXRzIHVzZSBpcyByZXN0cmljdGVkIHRvIGV4cGVyaWVuY2VkIHVzZXJzIGhhcyBiZWVuIHByb3ZpZGVkIHRvIHRoZSBMaWNlbnNlZSBwcmlvciB0byBpdHMgYWNjZXB0YW5jZSBhcyBzZXQgZm9ydGggaW4gQXJ0aWNsZSAzLjEgaGVyZWluYWJvdmUsIGFuZCB0aGUgTGljZW5zZWUgaGVyZWJ5IGFja25vd2xlZGdlcyB0aGF0IGl0IGhhcyByZWFkIGFuZCB1bmRlcnN0b29kIGl0LlxuXG4gICBBcnRpY2xlIDQgLSBFRkZFQ1RJVkUgREFURSBBTkQgVEVSTVxuXG4gICAgICA0LjEgRUZGRUNUSVZFIERBVEVcblxuICAgICAgVGhlIEFncmVlbWVudCBzaGFsbCBiZWNvbWUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIHdoZW4gaXQgaXMgYWNjZXB0ZWQgYnkgdGhlIExpY2Vuc2VlIGFzIHNldCBmb3J0aCBpbiBBcnRpY2xlIDMuMS5cblxuICAgICAgNC4yIFRFUk1cblxuICAgICAgVGhlIEFncmVlbWVudCBzaGFsbCByZW1haW4gaW4gZm9yY2UgZm9yIHRoZSBlbnRpcmUgbGVnYWwgdGVybSBvZiBwcm90ZWN0aW9uIG9mIHRoZSBlY29ub21pYyByaWdodHMgb3ZlciB0aGUgU29mdHdhcmUuXG5cbiAgIEFydGljbGUgNSAtIFNDT1BFIE9GIFJJR0hUUyBHUkFOVEVEXG5cbiAgIFRoZSBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIHRvIHRoZSBMaWNlbnNlZSwgd2hvIGFjY2VwdHMsIHRoZSBmb2xsb3dpbmcgcmlnaHRzIG92ZXIgdGhlIFNvZnR3YXJlIGZvciBhbnkgb3IgYWxsIHVzZSwgYW5kIGZvciB0aGUgdGVybSBvZiB0aGUgQWdyZWVtZW50LCBvbiB0aGUgYmFzaXMgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBoZXJlaW5hZnRlci5cblxuICAgQmVzaWRlcywgaWYgdGhlIExpY2Vuc29yIG93bnMgb3IgY29tZXMgdG8gb3duIG9uZSBvciBtb3JlIHBhdGVudHMgcHJvdGVjdGluZyBhbGwgb3IgcGFydCBvZiB0aGUgZnVuY3Rpb25zIG9mIHRoZSBTb2Z0d2FyZSBvciBvZiBpdHMgY29tcG9uZW50cywgdGhlIExpY2Vuc29yIHVuZGVydGFrZXMgbm90IHRvIGVuZm9yY2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoZXNlIHBhdGVudHMgYWdhaW5zdCBzdWNjZXNzaXZlIExpY2Vuc2VlcyB1c2luZywgZXhwbG9pdGluZyBvciBtb2RpZnlpbmcgdGhlIFNvZnR3YXJlLiBJZiB0aGVzZSBwYXRlbnRzIGFyZSB0cmFuc2ZlcnJlZCwgdGhlIExpY2Vuc29yIHVuZGVydGFrZXMgdG8gaGF2ZSB0aGUgdHJhbnNmZXJlZXMgc3Vic2NyaWJlIHRvIHRoZSBvYmxpZ2F0aW9ucyBzZXQgZm9ydGggaW4gdGhpcyBwYXJhZ3JhcGguXG5cbiAgICAgIDUuMSBSSUdIVCBPRiBVU0VcblxuICAgICAgVGhlIExpY2Vuc2VlIGlzIGF1dGhvcml6ZWQgdG8gdXNlIHRoZSBTb2Z0d2FyZSwgd2l0aG91dCBhbnkgbGltaXRhdGlvbiBhcyB0byBpdHMgZmllbGRzIG9mIGFwcGxpY2F0aW9uLCB3aXRoIGl0IGJlaW5nIGhlcmVpbmFmdGVyIHNwZWNpZmllZCB0aGF0IHRoaXMgY29tcHJpc2VzOlxuXG4gICAgICAgICAxLiBwZXJtYW5lbnQgb3IgdGVtcG9yYXJ5IHJlcHJvZHVjdGlvbiBvZiBhbGwgb3IgcGFydCBvZiB0aGUgU29mdHdhcmUgYnkgYW55IG9yIGFsbCBtZWFucyBhbmQgaW4gYW55IG9yIGFsbCBmb3JtLlxuXG4gICAgICAgICAyLiBsb2FkaW5nLCBkaXNwbGF5aW5nLCBydW5uaW5nLCBvciBzdG9yaW5nIHRoZSBTb2Z0d2FyZSBvbiBhbnkgb3IgYWxsIG1lZGl1bS5cblxuICAgICAgICAgMy4gZW50aXRsZW1lbnQgdG8gb2JzZXJ2ZSwgc3R1ZHkgb3IgdGVzdCBpdHMgb3BlcmF0aW9uIHNvIGFzIHRvIGRldGVybWluZSB0aGUgaWRlYXMgYW5kIHByaW5jaXBsZXMgYmVoaW5kIGFueSBvciBhbGwgY29uc3RpdHVlbnQgZWxlbWVudHMgb2Ygc2FpZCBTb2Z0d2FyZS4gVGhpcyBzaGFsbCBhcHBseSB3aGVuIHRoZSBMaWNlbnNlZSBjYXJyaWVzIG91dCBhbnkgb3IgYWxsIGxvYWRpbmcsIGRpc3BsYXlpbmcsIHJ1bm5pbmcsIHRyYW5zbWlzc2lvbiBvciBzdG9yYWdlIG9wZXJhdGlvbiBhcyByZWdhcmRzIHRoZSBTb2Z0d2FyZSwgdGhhdCBpdCBpcyBlbnRpdGxlZCB0byBjYXJyeSBvdXQgaGVyZXVuZGVyLlxuXG4gICAgICA1LjIgRU5USVRMRU1FTlQgVE8gTUFLRSBDT05UUklCVVRJT05TXG5cbiAgICAgIFRoZSByaWdodCB0byBtYWtlIENvbnRyaWJ1dGlvbnMgaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIHRyYW5zbGF0ZSwgYWRhcHQsIGFycmFuZ2UsIG9yIG1ha2UgYW55IG9yIGFsbCBtb2RpZmljYXRpb25zIHRvIHRoZSBTb2Z0d2FyZSwgYW5kIHRoZSByaWdodCB0byByZXByb2R1Y2UgdGhlIHJlc3VsdGluZyBzb2Z0d2FyZS5cblxuICAgICAgVGhlIExpY2Vuc2VlIGlzIGF1dGhvcml6ZWQgdG8gbWFrZSBhbnkgb3IgYWxsIENvbnRyaWJ1dGlvbnMgdG8gdGhlIFNvZnR3YXJlIHByb3ZpZGVkIHRoYXQgaXQgaW5jbHVkZXMgYW4gZXhwbGljaXQgbm90aWNlIHRoYXQgaXQgaXMgdGhlIGF1dGhvciBvZiBzYWlkIENvbnRyaWJ1dGlvbiBhbmQgaW5kaWNhdGVzIHRoZSBkYXRlIG9mIHRoZSBjcmVhdGlvbiB0aGVyZW9mLlxuXG4gICAgICA1LjMgUklHSFQgT0YgRElTVFJJQlVUSU9OXG5cbiAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSByaWdodCBvZiBkaXN0cmlidXRpb24gaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2gsIHRyYW5zbWl0IGFuZCBjb21tdW5pY2F0ZSB0aGUgU29mdHdhcmUgdG8gdGhlIGdlbmVyYWwgcHVibGljIG9uIGFueSBvciBhbGwgbWVkaXVtLCBhbmQgYnkgYW55IG9yIGFsbCBtZWFucywgYW5kIHRoZSByaWdodCB0byBtYXJrZXQsIGVpdGhlciBpbiBjb25zaWRlcmF0aW9uIG9mIGEgZmVlLCBvciBmcmVlIG9mIGNoYXJnZSwgb25lIG9yIG1vcmUgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBieSBhbnkgbWVhbnMuXG5cbiAgICAgIFRoZSBMaWNlbnNlZSBpcyBmdXJ0aGVyIGF1dGhvcml6ZWQgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIG1vZGlmaWVkIG9yIHVubW9kaWZpZWQgU29mdHdhcmUgdG8gdGhpcmQgcGFydGllcyBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBoZXJlaW5hZnRlci5cblxuICAgICAgICAgNS4zLjEuIERJU1RSSUJVVElPTiBPRiBTT0ZUV0FSRSBXSVRIT1VUIE1PRElGSUNBVElPTlxuXG4gICAgICAgICBUaGUgTGljZW5zZWUgaXMgYXV0aG9yaXplZCB0byBkaXN0cmlidXRlIHRydWUgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBpbiBTb3VyY2UgQ29kZSBvciBPYmplY3QgQ29kZSBmb3JtLCBwcm92aWRlZCB0aGF0IHNhaWQgZGlzdHJpYnV0aW9uIGNvbXBsaWVzIHdpdGggYWxsIHRoZSBwcm92aXNpb25zIG9mIHRoZSBBZ3JlZW1lbnQgYW5kIGlzIGFjY29tcGFuaWVkIGJ5OlxuXG4gICAgICAgICAgICAxLiBhIGNvcHkgb2YgdGhlIEFncmVlbWVudCxcblxuICAgICAgICAgICAgMi4gYSBub3RpY2UgcmVsYXRpbmcgdG8gdGhlIGxpbWl0YXRpb24gb2YgYm90aCB0aGUgTGljZW5zb3IncyB3YXJyYW50eSBhbmQgbGlhYmlsaXR5IGFzIHNldCBmb3J0aCBpbiBBcnRpY2xlcyA4IGFuZCA5LFxuXG4gICAgICAgICBhbmQgdGhhdCwgaW4gdGhlIGV2ZW50IHRoYXQgb25seSB0aGUgT2JqZWN0IENvZGUgb2YgdGhlIFNvZnR3YXJlIGlzIHJlZGlzdHJpYnV0ZWQsIHRoZSBMaWNlbnNlZSBhbGxvd3MgZnV0dXJlIExpY2Vuc2VlcyB1bmhpbmRlcmVkIGFjY2VzcyB0byB0aGUgZnVsbCBTb3VyY2UgQ29kZSBvZiB0aGUgU29mdHdhcmUgYnkgaW5kaWNhdGluZyBob3cgdG8gYWNjZXNzIGl0LCBpdCBiZWluZyB1bmRlcnN0b29kIHRoYXQgdGhlIGFkZGl0aW9uYWwgY29zdCBvZiBhY3F1aXJpbmcgdGhlIFNvdXJjZSBDb2RlIHNoYWxsIG5vdCBleGNlZWQgdGhlIGNvc3Qgb2YgdHJhbnNmZXJyaW5nIHRoZSBkYXRhLlxuXG4gICAgICAgICA1LjMuMi4gRElTVFJJQlVUSU9OIE9GIE1PRElGSUVEIFNPRlRXQVJFXG5cbiAgICAgICAgIFdoZW4gdGhlIExpY2Vuc2VlIG1ha2VzIGEgQ29udHJpYnV0aW9uIHRvIHRoZSBTb2Z0d2FyZSwgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSByZXN1bHRpbmcgTW9kaWZpZWQgU29mdHdhcmUgYmVjb21lIHN1YmplY3QgdG8gYWxsIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50LlxuXG4gICAgICAgICBUaGUgTGljZW5zZWUgaXMgYXV0aG9yaXplZCB0byBkaXN0cmlidXRlIHRoZSBNb2RpZmllZCBTb2Z0d2FyZSwgaW4gc291cmNlIGNvZGUgb3Igb2JqZWN0IGNvZGUgZm9ybSwgcHJvdmlkZWQgdGhhdCBzYWlkIGRpc3RyaWJ1dGlvbiBjb21wbGllcyB3aXRoIGFsbCB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgQWdyZWVtZW50IGFuZCBpcyBhY2NvbXBhbmllZCBieTpcblxuICAgICAgICAgICAgMS4gYSBjb3B5IG9mIHRoZSBBZ3JlZW1lbnQsXG5cbiAgICAgICAgICAgIDIuIGEgbm90aWNlIHJlbGF0aW5nIHRvIHRoZSBsaW1pdGF0aW9uIG9mIGJvdGggdGhlIExpY2Vuc29yJ3Mgd2FycmFudHkgYW5kIGxpYWJpbGl0eSBhcyBzZXQgZm9ydGggaW4gQXJ0aWNsZXMgOCBhbmQgOSxcblxuICAgICAgICAgYW5kIHRoYXQsIGluIHRoZSBldmVudCB0aGF0IG9ubHkgdGhlIG9iamVjdCBjb2RlIG9mIHRoZSBNb2RpZmllZCBTb2Z0d2FyZSBpcyByZWRpc3RyaWJ1dGVkLCB0aGUgTGljZW5zZWUgYWxsb3dzIGZ1dHVyZSBMaWNlbnNlZXMgdW5oaW5kZXJlZCBhY2Nlc3MgdG8gdGhlIGZ1bGwgc291cmNlIGNvZGUgb2YgdGhlIE1vZGlmaWVkIFNvZnR3YXJlIGJ5IGluZGljYXRpbmcgaG93IHRvIGFjY2VzcyBpdCwgaXQgYmVpbmcgdW5kZXJzdG9vZCB0aGF0IHRoZSBhZGRpdGlvbmFsIGNvc3Qgb2YgYWNxdWlyaW5nIHRoZSBzb3VyY2UgY29kZSBzaGFsbCBub3QgZXhjZWVkIHRoZSBjb3N0IG9mIHRyYW5zZmVycmluZyB0aGUgZGF0YS5cblxuICAgICAgICAgNS4zLjMuIERJU1RSSUJVVElPTiBPRiBFWFRFUk5BTCBNT0RVTEVTXG5cbiAgICAgICAgIFdoZW4gdGhlIExpY2Vuc2VlIGhhcyBkZXZlbG9wZWQgYW4gRXh0ZXJuYWwgTW9kdWxlLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgZG8gbm90IGFwcGx5IHRvIHNhaWQgRXh0ZXJuYWwgTW9kdWxlLCB0aGF0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBhIHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50LlxuXG4gICAgICAgICA1LjMuNC4gQ09NUEFUSUJJTElUWSBXSVRIIFRIRSBHTlUgR1BMXG5cbiAgICAgICAgIFRoZSBMaWNlbnNlZSBjYW4gaW5jbHVkZSBhIGNvZGUgdGhhdCBpcyBzdWJqZWN0IHRvIHRoZSBwcm92aXNpb25zIG9mIG9uZSBvZiB0aGUgdmVyc2lvbnMgb2YgdGhlIEdOVSBHUEwgaW4gdGhlIE1vZGlmaWVkIG9yIHVubW9kaWZpZWQgU29mdHdhcmUsIGFuZCBkaXN0cmlidXRlIHRoYXQgZW50aXJlIGNvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBzYW1lIHZlcnNpb24gb2YgdGhlIEdOVSBHUEwuXG5cbiAgICAgICAgIFRoZSBMaWNlbnNlZSBjYW4gaW5jbHVkZSB0aGUgTW9kaWZpZWQgb3IgdW5tb2RpZmllZCBTb2Z0d2FyZSBpbiBhIGNvZGUgdGhhdCBpcyBzdWJqZWN0IHRvIHRoZSBwcm92aXNpb25zIG9mIG9uZSBvZiB0aGUgdmVyc2lvbnMgb2YgdGhlIEdOVSBHUEwsIGFuZCBkaXN0cmlidXRlIHRoYXQgZW50aXJlIGNvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBzYW1lIHZlcnNpb24gb2YgdGhlIEdOVSBHUEwuXG5cbiAgIEFydGljbGUgNiAtIElOVEVMTEVDVFVBTCBQUk9QRVJUWVxuXG4gICAgICA2LjEgT1ZFUiBUSEUgSU5JVElBTCBTT0ZUV0FSRVxuXG4gICAgICBUaGUgSG9sZGVyIG93bnMgdGhlIGVjb25vbWljIHJpZ2h0cyBvdmVyIHRoZSBJbml0aWFsIFNvZnR3YXJlLiBBbnkgb3IgYWxsIHVzZSBvZiB0aGUgSW5pdGlhbCBTb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIEhvbGRlciBoYXMgZWxlY3RlZCB0byBkaXN0cmlidXRlIGl0cyB3b3JrIGFuZCBubyBvbmUgc2hhbGwgYmUgZW50aXRsZWQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiBzYWlkIEluaXRpYWwgU29mdHdhcmUuXG5cbiAgICAgIFRoZSBIb2xkZXIgdW5kZXJ0YWtlcyB0aGF0IHRoZSBJbml0aWFsIFNvZnR3YXJlIHdpbGwgcmVtYWluIHJ1bGVkIGF0IGxlYXN0IGJ5IHRoaXMgQWdyZWVtZW50LCBmb3IgdGhlIGR1cmF0aW9uIHNldCBmb3J0aCBpbiBBcnRpY2xlIDQuMi5cblxuICAgICAgNi4yIE9WRVIgVEhFIENPTlRSSUJVVElPTlNcblxuICAgICAgVGhlIExpY2Vuc2VlIHdobyBkZXZlbG9wcyBhIENvbnRyaWJ1dGlvbiBpcyB0aGUgb3duZXIgb2YgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3ZlciB0aGlzIENvbnRyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IGFwcGxpY2FibGUgbGF3LlxuXG4gICAgICA2LjMgT1ZFUiBUSEUgRVhURVJOQUwgTU9EVUxFU1xuXG4gICAgICBUaGUgTGljZW5zZWUgd2hvIGRldmVsb3BzIGFuIEV4dGVybmFsIE1vZHVsZSBpcyB0aGUgb3duZXIgb2YgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3ZlciB0aGlzIEV4dGVybmFsIE1vZHVsZSBhcyBkZWZpbmVkIGJ5IGFwcGxpY2FibGUgbGF3IGFuZCBpcyBmcmVlIHRvIGNob29zZSB0aGUgdHlwZSBvZiBhZ3JlZW1lbnQgdGhhdCBzaGFsbCBnb3Zlcm4gaXRzIGRpc3RyaWJ1dGlvbi5cblxuICAgICAgNi40IEpPSU5UIFBST1ZJU0lPTlNcblxuICAgICAgVGhlIExpY2Vuc2VlIGV4cHJlc3NseSB1bmRlcnRha2VzOlxuXG4gICAgICAgICAxLiBub3QgdG8gcmVtb3ZlLCBvciBtb2RpZnksIGluIGFueSBtYW5uZXIsIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbm90aWNlcyBhdHRhY2hlZCB0byB0aGUgU29mdHdhcmU7XG5cbiAgICAgICAgIDIuIHRvIHJlcHJvZHVjZSBzYWlkIG5vdGljZXMsIGluIGFuIGlkZW50aWNhbCBtYW5uZXIsIGluIHRoZSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIG1vZGlmaWVkIG9yIG5vdC5cblxuICAgICAgVGhlIExpY2Vuc2VlIHVuZGVydGFrZXMgbm90IHRvIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2UgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgdGhlIEhvbGRlciBhbmQvb3IgQ29udHJpYnV0b3JzIG9uIHRoZSBTb2Z0d2FyZSBhbmQgdG8gdGFrZSwgd2hlcmUgYXBwbGljYWJsZSwgdmlzLcOgLXZpcyBpdHMgc3RhZmYsIGFueSBhbmQgYWxsIG1lYXN1cmVzIHJlcXVpcmVkIHRvIGVuc3VyZSByZXNwZWN0IG9mIHNhaWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiB0aGUgSG9sZGVyIGFuZC9vciBDb250cmlidXRvcnMuXG5cbiAgIEFydGljbGUgNyAtIFJFTEFURUQgU0VSVklDRVNcblxuICAgICAgNy4xIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgc2hhbGwgdGhlIEFncmVlbWVudCBvYmxpZ2UgdGhlIExpY2Vuc29yIHRvIHByb3ZpZGUgdGVjaG5pY2FsIGFzc2lzdGFuY2Ugb3IgbWFpbnRlbmFuY2Ugc2VydmljZXMgZm9yIHRoZSBTb2Z0d2FyZS5cblxuICAgICAgSG93ZXZlciwgdGhlIExpY2Vuc29yIGlzIGVudGl0bGVkIHRvIG9mZmVyIHRoaXMgdHlwZSBvZiBzZXJ2aWNlcy4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHN1Y2ggdGVjaG5pY2FsIGFzc2lzdGFuY2UsIGFuZC9vciBzdWNoIG1haW50ZW5hbmNlLCBzaGFsbCBiZSBzZXQgZm9ydGggaW4gYSBzZXBhcmF0ZSBpbnN0cnVtZW50LiBPbmx5IHRoZSBMaWNlbnNvciBvZmZlcmluZyBzYWlkIG1haW50ZW5hbmNlIGFuZC9vciB0ZWNobmljYWwgYXNzaXN0YW5jZSBzZXJ2aWNlcyBzaGFsbCBpbmN1ciBsaWFiaWxpdHkgdGhlcmVmb3IuXG5cbiAgICAgIDcuMiBTaW1pbGFybHksIGFueSBMaWNlbnNvciBpcyBlbnRpdGxlZCB0byBvZmZlciB0byBpdHMgbGljZW5zZWVzLCB1bmRlciBpdHMgc29sZSByZXNwb25zaWJpbGl0eSwgYSB3YXJyYW50eSwgdGhhdCBzaGFsbCBvbmx5IGJlIGJpbmRpbmcgdXBvbiBpdHNlbGYsIGZvciB0aGUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlIGFuZC9vciB0aGUgTW9kaWZpZWQgU29mdHdhcmUsIHVuZGVyIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgaXQgaXMgZnJlZSB0byBkZWNpZGUuIFNhaWQgd2FycmFudHksIGFuZCB0aGUgZmluYW5jaWFsIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIGl0cyBhcHBsaWNhdGlvbiwgc2hhbGwgYmUgc3ViamVjdCBvZiBhIHNlcGFyYXRlIGluc3RydW1lbnQgZXhlY3V0ZWQgYmV0d2VlbiB0aGUgTGljZW5zb3IgYW5kIHRoZSBMaWNlbnNlZS5cblxuICAgQXJ0aWNsZSA4IC0gTElBQklMSVRZXG5cbiAgICAgIDguMSBTdWJqZWN0IHRvIHRoZSBwcm92aXNpb25zIG9mIEFydGljbGUgOC4yLCB0aGUgTGljZW5zZWUgc2hhbGwgYmUgZW50aXRsZWQgdG8gY2xhaW0gY29tcGVuc2F0aW9uIGZvciBhbnkgZGlyZWN0IGxvc3MgaXQgbWF5IGhhdmUgc3VmZmVyZWQgZnJvbSB0aGUgU29mdHdhcmUgYXMgYSByZXN1bHQgb2YgYSBmYXVsdCBvbiB0aGUgcGFydCBvZiB0aGUgcmVsZXZhbnQgTGljZW5zb3IsIHN1YmplY3QgdG8gcHJvdmlkaW5nIGV2aWRlbmNlIHRoZXJlb2YuXG5cbiAgICAgIDguMiBUaGUgTGljZW5zb3IncyBsaWFiaWxpdHkgaXMgbGltaXRlZCB0byB0aGUgY29tbWl0bWVudHMgbWFkZSB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgc2hhbGwgbm90IGJlIGluY3VycmVkIGFzIGEgcmVzdWx0IG9mIGluIHBhcnRpY3VsYXI6IChpKSBsb3NzIGR1ZSB0aGUgTGljZW5zZWUncyB0b3RhbCBvciBwYXJ0aWFsIGZhaWx1cmUgdG8gZnVsZmlsbCBpdHMgb2JsaWdhdGlvbnMsIChpaSkgZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgbG9zcyB0aGF0IGlzIHN1ZmZlcmVkIGJ5IHRoZSBMaWNlbnNlZSBkdWUgdG8gdGhlIHVzZSBvciBwZXJmb3JtYW5jZSBvZiB0aGUgU29mdHdhcmUsIGFuZCAoaWlpKSBtb3JlIGdlbmVyYWxseSwgYW55IGNvbnNlcXVlbnRpYWwgbG9zcy4gSW4gcGFydGljdWxhciB0aGUgUGFydGllcyBleHByZXNzbHkgYWdyZWUgdGhhdCBhbnkgb3IgYWxsIHBlY3VuaWFyeSBvciBidXNpbmVzcyBsb3NzIChpLmUuIGxvc3Mgb2YgZGF0YSwgbG9zcyBvZiBwcm9maXRzLCBvcGVyYXRpbmcgbG9zcywgbG9zcyBvZiBjdXN0b21lcnMgb3Igb3JkZXJzLCBvcHBvcnR1bml0eSBjb3N0LCBhbnkgZGlzdHVyYmFuY2UgdG8gYnVzaW5lc3MgYWN0aXZpdGllcykgb3IgYW55IG9yIGFsbCBsZWdhbCBwcm9jZWVkaW5ncyBpbnN0aXR1dGVkIGFnYWluc3QgdGhlIExpY2Vuc2VlIGJ5IGEgdGhpcmQgcGFydHksIHNoYWxsIGNvbnN0aXR1dGUgY29uc2VxdWVudGlhbCBsb3NzIGFuZCBzaGFsbCBub3QgcHJvdmlkZSBlbnRpdGxlbWVudCB0byBhbnkgb3IgYWxsIGNvbXBlbnNhdGlvbiBmcm9tIHRoZSBMaWNlbnNvci5cblxuICAgQXJ0aWNsZSA5IC0gV0FSUkFOVFlcblxuICAgICAgOS4xIFRoZSBMaWNlbnNlZSBhY2tub3dsZWRnZXMgdGhhdCB0aGUgc2NpZW50aWZpYyBhbmQgdGVjaG5pY2FsIHN0YXRlLW9mLXRoZS1hcnQgd2hlbiB0aGUgU29mdHdhcmUgd2FzIGRpc3RyaWJ1dGVkIGRpZCBub3QgZW5hYmxlIGFsbCBwb3NzaWJsZSB1c2VzIHRvIGJlIHRlc3RlZCBhbmQgdmVyaWZpZWQsIG5vciBmb3IgdGhlIHByZXNlbmNlIG9mIHBvc3NpYmxlIGRlZmVjdHMgdG8gYmUgZGV0ZWN0ZWQuIEluIHRoaXMgcmVzcGVjdCwgdGhlIExpY2Vuc2VlJ3MgYXR0ZW50aW9uIGhhcyBiZWVuIGRyYXduIHRvIHRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggbG9hZGluZywgdXNpbmcsIG1vZGlmeWluZyBhbmQvb3IgZGV2ZWxvcGluZyBhbmQgcmVwcm9kdWNpbmcgdGhlIFNvZnR3YXJlIHdoaWNoIGFyZSByZXNlcnZlZCBmb3IgZXhwZXJpZW5jZWQgdXNlcnMuXG5cbiAgICAgIFRoZSBMaWNlbnNlZSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgdmVyaWZ5aW5nLCBieSBhbnkgb3IgYWxsIG1lYW5zLCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIHByb2R1Y3QgZm9yIGl0cyByZXF1aXJlbWVudHMsIGl0cyBnb29kIHdvcmtpbmcgb3JkZXIsIGFuZCBmb3IgZW5zdXJpbmcgdGhhdCBpdCBzaGFsbCBub3QgY2F1c2UgZGFtYWdlIHRvIGVpdGhlciBwZXJzb25zIG9yIHByb3BlcnRpZXMuXG5cbiAgICAgIDkuMiBUaGUgTGljZW5zb3IgaGVyZWJ5IHJlcHJlc2VudHMsIGluIGdvb2QgZmFpdGgsIHRoYXQgaXQgaXMgZW50aXRsZWQgdG8gZ3JhbnQgYWxsIHRoZSByaWdodHMgb3ZlciB0aGUgU29mdHdhcmUgKGluY2x1ZGluZyBpbiBwYXJ0aWN1bGFyIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIEFydGljbGUgNSkuXG5cbiAgICAgIDkuMyBUaGUgTGljZW5zZWUgYWNrbm93bGVkZ2VzIHRoYXQgdGhlIFNvZnR3YXJlIGlzIHN1cHBsaWVkIFwiYXMgaXNcIiBieSB0aGUgTGljZW5zb3Igd2l0aG91dCBhbnkgb3RoZXIgZXhwcmVzcyBvciB0YWNpdCB3YXJyYW50eSwgb3RoZXIgdGhhbiB0aGF0IHByb3ZpZGVkIGZvciBpbiBBcnRpY2xlIDkuMiBhbmQsIGluIHBhcnRpY3VsYXIsIHdpdGhvdXQgYW55IHdhcnJhbnR5IGFzIHRvIGl0cyBjb21tZXJjaWFsIHZhbHVlLCBpdHMgc2VjdXJlZCwgc2FmZSwgaW5ub3ZhdGl2ZSBvciByZWxldmFudCBuYXR1cmUuXG5cbiAgICAgIFNwZWNpZmljYWxseSwgdGhlIExpY2Vuc29yIGRvZXMgbm90IHdhcnJhbnQgdGhhdCB0aGUgU29mdHdhcmUgaXMgZnJlZSBmcm9tIGFueSBlcnJvciwgdGhhdCBpdCB3aWxsIG9wZXJhdGUgd2l0aG91dCBpbnRlcnJ1cHRpb24sIHRoYXQgaXQgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIExpY2Vuc2VlJ3Mgb3duIGVxdWlwbWVudCBhbmQgc29mdHdhcmUgY29uZmlndXJhdGlvbiwgbm9yIHRoYXQgaXQgd2lsbCBtZWV0IHRoZSBMaWNlbnNlZSdzIHJlcXVpcmVtZW50cy5cblxuICAgICAgOS40IFRoZSBMaWNlbnNvciBkb2VzIG5vdCBlaXRoZXIgZXhwcmVzc2x5IG9yIHRhY2l0bHkgd2FycmFudCB0aGF0IHRoZSBTb2Z0d2FyZSBkb2VzIG5vdCBpbmZyaW5nZSBhbnkgdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IHJlbGF0aW5nIHRvIGEgcGF0ZW50LCBzb2Z0d2FyZSBvciBhbnkgb3RoZXIgcHJvcGVydHkgcmlnaHQuIFRoZXJlZm9yZSwgdGhlIExpY2Vuc29yIGRpc2NsYWltcyBhbnkgYW5kIGFsbCBsaWFiaWxpdHkgdG93YXJkcyB0aGUgTGljZW5zZWUgYXJpc2luZyBvdXQgb2YgYW55IG9yIGFsbCBwcm9jZWVkaW5ncyBmb3IgaW5mcmluZ2VtZW50IHRoYXQgbWF5IGJlIGluc3RpdHV0ZWQgaW4gcmVzcGVjdCBvZiB0aGUgdXNlLCBtb2RpZmljYXRpb24gYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZS4gTmV2ZXJ0aGVsZXNzLCBzaG91bGQgc3VjaCBwcm9jZWVkaW5ncyBiZSBpbnN0aXR1dGVkIGFnYWluc3QgdGhlIExpY2Vuc2VlLCB0aGUgTGljZW5zb3Igc2hhbGwgcHJvdmlkZSBpdCB3aXRoIHRlY2huaWNhbCBhbmQgbGVnYWwgYXNzaXN0YW5jZSBmb3IgaXRzIGRlZmVuc2UuIFN1Y2ggdGVjaG5pY2FsIGFuZCBsZWdhbCBhc3Npc3RhbmNlIHNoYWxsIGJlIGRlY2lkZWQgb24gYSBjYXNlLWJ5LWNhc2UgYmFzaXMgYmV0d2VlbiB0aGUgcmVsZXZhbnQgTGljZW5zb3IgYW5kIHRoZSBMaWNlbnNlZSBwdXJzdWFudCB0byBhIG1lbW9yYW5kdW0gb2YgdW5kZXJzdGFuZGluZy4gVGhlIExpY2Vuc29yIGRpc2NsYWltcyBhbnkgYW5kIGFsbCBsaWFiaWxpdHkgYXMgcmVnYXJkcyB0aGUgTGljZW5zZWUncyB1c2Ugb2YgdGhlIG5hbWUgb2YgdGhlIFNvZnR3YXJlLiBObyB3YXJyYW50eSBpcyBnaXZlbiBhcyByZWdhcmRzIHRoZSBleGlzdGVuY2Ugb2YgcHJpb3IgcmlnaHRzIG92ZXIgdGhlIG5hbWUgb2YgdGhlIFNvZnR3YXJlIG9yIGFzIHJlZ2FyZHMgdGhlIGV4aXN0ZW5jZSBvZiBhIHRyYWRlbWFyay5cblxuICAgQXJ0aWNsZSAxMCAtIFRFUk1JTkFUSU9OXG5cbiAgICAgIDEwLjEgSW4gdGhlIGV2ZW50IG9mIGEgYnJlYWNoIGJ5IHRoZSBMaWNlbnNlZSBvZiBpdHMgb2JsaWdhdGlvbnMgaGVyZXVuZGVyLCB0aGUgTGljZW5zb3IgbWF5IGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IHRoaXJ0eSAoMzApIGRheXMgYWZ0ZXIgbm90aWNlIGhhcyBiZWVuIHNlbnQgdG8gdGhlIExpY2Vuc2VlIGFuZCBoYXMgcmVtYWluZWQgaW5lZmZlY3RpdmUuXG5cbiAgICAgIDEwLjIgQSBMaWNlbnNlZSB3aG9zZSBBZ3JlZW1lbnQgaXMgdGVybWluYXRlZCBzaGFsbCBubyBsb25nZXIgYmUgYXV0aG9yaXplZCB0byB1c2UsIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZS4gSG93ZXZlciwgYW55IGxpY2Vuc2VzIHRoYXQgaXQgbWF5IGhhdmUgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBvZiB0aGUgQWdyZWVtZW50IHNoYWxsIHJlbWFpbiB2YWxpZCBzdWJqZWN0IHRvIHRoZWlyIGhhdmluZyBiZWVuIGdyYW50ZWQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlb2YuXG5cbiAgIEFydGljbGUgMTEgLSBNSVNDRUxMQU5FT1VTXG5cbiAgICAgIDExLjEgRVhDVVNBQkxFIEVWRU5UU1xuXG4gICAgICBOZWl0aGVyIFBhcnR5IHNoYWxsIGJlIGxpYWJsZSBmb3IgYW55IG9yIGFsbCBkZWxheSwgb3IgZmFpbHVyZSB0byBwZXJmb3JtIHRoZSBBZ3JlZW1lbnQsIHRoYXQgbWF5IGJlIGF0dHJpYnV0YWJsZSB0byBhbiBldmVudCBvZiBmb3JjZSBtYWpldXJlLCBhbiBhY3Qgb2YgR29kIG9yIGFuIG91dHNpZGUgY2F1c2UsIHN1Y2ggYXMgZGVmZWN0aXZlIGZ1bmN0aW9uaW5nIG9yIGludGVycnVwdGlvbnMgb2YgdGhlIGVsZWN0cmljaXR5IG9yIHRlbGVjb21tdW5pY2F0aW9ucyBuZXR3b3JrcywgbmV0d29yayBwYXJhbHlzaXMgZm9sbG93aW5nIGEgdmlydXMgYXR0YWNrLCBpbnRlcnZlbnRpb24gYnkgZ292ZXJubWVudCBhdXRob3JpdGllcywgbmF0dXJhbCBkaXNhc3RlcnMsIHdhdGVyIGRhbWFnZSwgZWFydGhxdWFrZXMsIGZpcmUsIGV4cGxvc2lvbnMsIHN0cmlrZXMgYW5kIGxhYm9yIHVucmVzdCwgd2FyLCBldGMuXG5cbiAgICAgIDExLjIgQW55IGZhaWx1cmUgYnkgZWl0aGVyIFBhcnR5LCBvbiBvbmUgb3IgbW9yZSBvY2Nhc2lvbnMsIHRvIGludm9rZSBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvdmlzaW9ucyBoZXJlb2YsIHNoYWxsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYmUgaW50ZXJwcmV0ZWQgYXMgYmVpbmcgYSB3YWl2ZXIgYnkgdGhlIGludGVyZXN0ZWQgUGFydHkgb2YgaXRzIHJpZ2h0IHRvIGludm9rZSBzYWlkIHByb3Zpc2lvbihzKSBzdWJzZXF1ZW50bHkuXG5cbiAgICAgIDExLjMgVGhlIEFncmVlbWVudCBjYW5jZWxzIGFuZCByZXBsYWNlcyBhbnkgb3IgYWxsIHByZXZpb3VzIGFncmVlbWVudHMsIHdoZXRoZXIgd3JpdHRlbiBvciBvcmFsLCBiZXR3ZWVuIHRoZSBQYXJ0aWVzIGFuZCBoYXZpbmcgdGhlIHNhbWUgcHVycG9zZSwgYW5kIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmV0eSBvZiB0aGUgYWdyZWVtZW50IGJldHdlZW4gc2FpZCBQYXJ0aWVzIGNvbmNlcm5pbmcgc2FpZCBwdXJwb3NlLiBObyBzdXBwbGVtZW50IG9yIG1vZGlmaWNhdGlvbiB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZW9mIHNoYWxsIGJlIGVmZmVjdGl2ZSBhcyBiZXR3ZWVuIHRoZSBQYXJ0aWVzIHVubGVzcyBpdCBpcyBtYWRlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGVpciBkdWx5IGF1dGhvcml6ZWQgcmVwcmVzZW50YXRpdmVzLlxuXG4gICAgICAxMS40IEluIHRoZSBldmVudCB0aGF0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm92aXNpb25zIGhlcmVvZiB3ZXJlIHRvIGNvbmZsaWN0IHdpdGggYSBjdXJyZW50IG9yIGZ1dHVyZSBhcHBsaWNhYmxlIGFjdCBvciBsZWdpc2xhdGl2ZSB0ZXh0LCBzYWlkIGFjdCBvciBsZWdpc2xhdGl2ZSB0ZXh0IHNoYWxsIHByZXZhaWwsIGFuZCB0aGUgUGFydGllcyBzaGFsbCBtYWtlIHRoZSBuZWNlc3NhcnkgYW1lbmRtZW50cyBzbyBhcyB0byBjb21wbHkgd2l0aCBzYWlkIGFjdCBvciBsZWdpc2xhdGl2ZSB0ZXh0LiBBbGwgb3RoZXIgcHJvdmlzaW9ucyBzaGFsbCByZW1haW4gZWZmZWN0aXZlLiBTaW1pbGFybHksIGludmFsaWRpdHkgb2YgYSBwcm92aXNpb24gb2YgdGhlIEFncmVlbWVudCwgZm9yIGFueSByZWFzb24gd2hhdHNvZXZlciwgc2hhbGwgbm90IGNhdXNlIHRoZSBBZ3JlZW1lbnQgYXMgYSB3aG9sZSB0byBiZSBpbnZhbGlkLlxuXG4gICAgICAxMS41IExBTkdVQUdFXG5cbiAgICAgIFRoZSBBZ3JlZW1lbnQgaXMgZHJhZnRlZCBpbiBib3RoIEZyZW5jaCBhbmQgRW5nbGlzaCBhbmQgYm90aCB2ZXJzaW9ucyBhcmUgZGVlbWVkIGF1dGhlbnRpYy5cblxuICAgQXJ0aWNsZSAxMiAtIE5FVyBWRVJTSU9OUyBPRiBUSEUgQUdSRUVNRU5UXG5cbiAgICAgIDEyLjEgQW55IHBlcnNvbiBpcyBhdXRob3JpemVkIHRvIGR1cGxpY2F0ZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgICAgIDEyLjIgU28gYXMgdG8gZW5zdXJlIGNvaGVyZW5jZSwgdGhlIHdvcmRpbmcgb2YgdGhpcyBBZ3JlZW1lbnQgaXMgcHJvdGVjdGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBieSB0aGUgYXV0aG9ycyBvZiB0aGUgTGljZW5zZSwgd2hvIHJlc2VydmUgdGhlIHJpZ2h0IHRvIHBlcmlvZGljYWxseSBwdWJsaXNoIHVwZGF0ZXMgb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBBZ3JlZW1lbnQsIGVhY2ggd2l0aCBhIHNlcGFyYXRlIG51bWJlci4gVGhlc2Ugc3Vic2VxdWVudCB2ZXJzaW9ucyBtYXkgYWRkcmVzcyBuZXcgaXNzdWVzIGVuY291bnRlcmVkIGJ5IEZyZWUgU29mdHdhcmUuXG5cbiAgICAgIDEyLjMgQW55IFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZ2l2ZW4gdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IG1heSBvbmx5IGJlIHN1YnNlcXVlbnRseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgb3IgYSBzdWJzZXF1ZW50IHZlcnNpb24sIHN1YmplY3QgdG8gdGhlIHByb3Zpc2lvbnMgb2YgQXJ0aWNsZSA1LjMuNC5cblxuICAgQXJ0aWNsZSAxMyAtIEdPVkVSTklORyBMQVcgQU5EIEpVUklTRElDVElPTlxuXG4gICAgICAxMy4xIFRoZSBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgRnJlbmNoIGxhdy4gVGhlIFBhcnRpZXMgYWdyZWUgdG8gZW5kZWF2b3IgdG8gc2VlayBhbiBhbWljYWJsZSBzb2x1dGlvbiB0byBhbnkgZGlzYWdyZWVtZW50cyBvciBkaXNwdXRlcyB0aGF0IG1heSBhcmlzZSBkdXJpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBBZ3JlZW1lbnQuXG5cbiAgICAgIDEzLjIgRmFpbGluZyBhbiBhbWljYWJsZSBzb2x1dGlvbiB3aXRoaW4gdHdvICgyKSBtb250aHMgYXMgZnJvbSB0aGVpciBvY2N1cnJlbmNlLCBhbmQgdW5sZXNzIGVtZXJnZW5jeSBwcm9jZWVkaW5ncyBhcmUgbmVjZXNzYXJ5LCB0aGUgZGlzYWdyZWVtZW50cyBvciBkaXNwdXRlcyBzaGFsbCBiZSByZWZlcnJlZCB0byB0aGUgUGFyaXMgQ291cnRzIGhhdmluZyBqdXJpc2RpY3Rpb24sIGJ5IHRoZSBtb3JlIGRpbGlnZW50IFBhcnR5LlxuXG5WZXJzaW9uIDIuMCBkYXRlZCAyMDA2LTA5LTA1LiAxIENlQ0lMTCBzdGFuZHMgZm9yIENlKGEpIEMobnJzKSBJKG5yaWEpIEwob2dpY2llbCkgTChpYnJlKSJdLCJsaWNlbnNlSWRzIjpbIkNFQ0lMTC0yLjAiXSwia2V5d29yZHMiOlsiZm91bmRhdGlvbiBpbmMgcGFydGllcyIsImluYyBwYXJ0aWVzIG1lYW4iLCJtb2RpZmllZCBzb2Z0d2FyZSBieSIsImdudSBncGwgaW4iLCJncGwgaW4gdGhlIiwiZ3BsIGFuZCBkaXN0cmlidXRlIiwiZ251IGdwbCBhcnRpY2xlIiwicGFydHkgdmVyc2lvbiAyIiwiMiAwIGRhdGVkIiwic29mdHdhcmUgZm91bmRhdGlvbiBpbmMgcGFydGllcyIsImZvdW5kYXRpb24gaW5jIHBhcnRpZXMgbWVhbiIsImluYyBwYXJ0aWVzIG1lYW4gYm90aCIsInRoZSBzb2Z0d2FyZSBieSBpbmRpY2F0aW5nIiwidGhlIG1vZGlmaWVkIHNvZnR3YXJlIGJ5IiwibW9kaWZpZWQgc29mdHdhcmUgYnkgaW5kaWNhdGluZyIsImNvbXBhdGliaWxpdHkgd2l0aCB0aGUgZ251Iiwid2l0aCB0aGUgZ251IGdwbCIsInRoZSBnbnUgZ3BsIGluIiwiZ251IGdwbCBpbiB0aGUiLCJncGwgaW4gdGhlIG1vZGlmaWVkIiwiZ251IGdwbCBhbmQgZGlzdHJpYnV0ZSIsImdwbCBhbmQgZGlzdHJpYnV0ZSB0aGF0IiwidGhlIGdudSBncGwgYXJ0aWNsZSIsImdudSBncGwgYXJ0aWNsZSA2IiwiZ3BsIGFydGljbGUgNiBpbnRlbGxlY3R1YWwiLCJkaWxpZ2VudCBwYXJ0eSB2ZXJzaW9uIDIiLCJwYXJ0eSB2ZXJzaW9uIDIgMCIsInZlcnNpb24gMiAwIGRhdGVkIiwiMiAwIGRhdGVkIDIwMDYiLCJmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24gaW5jIHBhcnRpZXMiLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIGluYyBwYXJ0aWVzIG1lYW4iLCJmb3VuZGF0aW9uIGluYyBwYXJ0aWVzIG1lYW4gYm90aCIsImluYyBwYXJ0aWVzIG1lYW4gYm90aCB0aGUiLCJjb2RlIG9mIHRoZSBzb2Z0d2FyZSBieSIsIm9mIHRoZSBzb2Z0d2FyZSBieSBpbmRpY2F0aW5nIiwidGhlIHNvZnR3YXJlIGJ5IGluZGljYXRpbmcgaG93Iiwib2YgdGhlIG1vZGlmaWVkIHNvZnR3YXJlIGJ5IiwidGhlIG1vZGlmaWVkIHNvZnR3YXJlIGJ5IGluZGljYXRpbmciLCJtb2RpZmllZCBzb2Z0d2FyZSBieSBpbmRpY2F0aW5nIGhvdyIsIjQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBnbnUiLCJjb21wYXRpYmlsaXR5IHdpdGggdGhlIGdudSBncGwiLCJ3aXRoIHRoZSBnbnUgZ3BsIHRoZSIsIm9mIHRoZSBnbnUgZ3BsIGluIiwidGhlIGdudSBncGwgaW4gdGhlIiwiZ251IGdwbCBpbiB0aGUgbW9kaWZpZWQiLCJncGwgaW4gdGhlIG1vZGlmaWVkIG9yIiwib2YgdGhlIGdudSBncGwgdGhlIiwidGhlIGdudSBncGwgYW5kIGRpc3RyaWJ1dGUiLCJnbnUgZ3BsIGFuZCBkaXN0cmlidXRlIHRoYXQiLCJncGwgYW5kIGRpc3RyaWJ1dGUgdGhhdCBlbnRpcmUiLCJvZiB0aGUgZ251IGdwbCBhcnRpY2xlIiwidGhlIGdudSBncGwgYXJ0aWNsZSA2IiwiZ251IGdwbCBhcnRpY2xlIDYgaW50ZWxsZWN0dWFsIiwiZ3BsIGFydGljbGUgNiBpbnRlbGxlY3R1YWwgcHJvcGVydHkiLCJtb3JlIGRpbGlnZW50IHBhcnR5IHZlcnNpb24gMiIsImRpbGlnZW50IHBhcnR5IHZlcnNpb24gMiAwIiwicGFydHkgdmVyc2lvbiAyIDAgZGF0ZWQiLCJ2ZXJzaW9uIDIgMCBkYXRlZCAyMDA2IiwiMiAwIGRhdGVkIDIwMDYgMDkiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ2VDSUxMIEZSRUUgU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlRcblxuVmVyc2lvbiAyLjEgZGF0ZWQgMjAxMy0wNi0yMSBOb3RpY2VcblxuVGhpcyBBZ3JlZW1lbnQgaXMgYSBGcmVlIFNvZnR3YXJlIGxpY2Vuc2UgYWdyZWVtZW50IHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBkaXNjdXNzaW9ucyBiZXR3ZWVuIGl0cyBhdXRob3JzIGluIG9yZGVyIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIHR3byBtYWluIHByaW5jaXBsZXMgZ3VpZGluZyBpdHMgZHJhZnRpbmc6XG5cbiAgICogZmlyc3RseSwgY29tcGxpYW5jZSB3aXRoIHRoZSBwcmluY2lwbGVzIGdvdmVybmluZyB0aGUgZGlzdHJpYnV0aW9uIG9mIEZyZWUgU29mdHdhcmU6IGFjY2VzcyB0byBzb3VyY2UgY29kZSwgYnJvYWQgcmlnaHRzIGdyYW50ZWQgdG8gdXNlcnMsXG5cbiAgICogc2Vjb25kbHksIHRoZSBlbGVjdGlvbiBvZiBhIGdvdmVybmluZyBsYXcsIEZyZW5jaCBsYXcsIHdpdGggd2hpY2ggaXQgaXMgY29uZm9ybWFudCwgYm90aCBhcyByZWdhcmRzIHRoZSBsYXcgb2YgdG9ydHMgYW5kIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXcsIGFuZCB0aGUgcHJvdGVjdGlvbiB0aGF0IGl0IG9mZmVycyB0byBib3RoIGF1dGhvcnMgYW5kIGhvbGRlcnMgb2YgdGhlIGVjb25vbWljIHJpZ2h0cyBvdmVyIHNvZnR3YXJlLlxuXG5UaGUgYXV0aG9ycyBvZiB0aGUgQ2VDSUxMwrkgbGljZW5zZSBhcmU6XG5cbiAgIFxuXG4gICBDb21taXNzYXJpYXQgw6AgbCfDqW5lcmdpZSBhdG9taXF1ZSBldCBhdXggw6luZXJnaWVzIGFsdGVybmF0aXZlcyAtIENFQSwgYSBwdWJsaWMgc2NpZW50aWZpYywgdGVjaG5pY2FsIGFuZCBpbmR1c3RyaWFsIHJlc2VhcmNoIGVzdGFibGlzaG1lbnQsIGhhdmluZyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGF0IDI1IHJ1ZSBMZWJsYW5jLCBpbW1ldWJsZSBMZSBQb25hbnQgRCwgNzUwMTUgUGFyaXMsIEZyYW5jZS5cblxuICAgXG5cbiAgIENlbnRyZSBOYXRpb25hbCBkZSBsYSBSZWNoZXJjaGUgU2NpZW50aWZpcXVlIC0gQ05SUywgYSBwdWJsaWMgc2NpZW50aWZpYyBhbmQgdGVjaG5vbG9naWNhbCBlc3RhYmxpc2htZW50LCBoYXZpbmcgaXRzIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBhdCAzIHJ1ZSBNaWNoZWwtQW5nZSwgNzU3OTQgUGFyaXMgY2VkZXggMTYsIEZyYW5jZS5cblxuICAgXG5cbiAgIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUgLSBJbnJpYSwgYSBwdWJsaWMgc2NpZW50aWZpYyBhbmQgdGVjaG5vbG9naWNhbCBlc3RhYmxpc2htZW50LCBoYXZpbmcgaXRzIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBhdCBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleCwgRnJhbmNlLlxuXG4gICBQcmVhbWJsZSBUaGUgcHVycG9zZSBvZiB0aGlzIEZyZWUgU29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgaXMgdG8gZ3JhbnQgdXNlcnMgdGhlIHJpZ2h0IHRvIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBnb3Zlcm5lZCBieSB0aGlzIGxpY2Vuc2Ugd2l0aGluIHRoZSBmcmFtZXdvcmsgb2YgYW4gb3BlbiBzb3VyY2UgZGlzdHJpYnV0aW9uIG1vZGVsLlxuXG4gICBUaGUgZXhlcmNpc2luZyBvZiB0aGlzIHJpZ2h0IGlzIGNvbmRpdGlvbmFsIHVwb24gY2VydGFpbiBvYmxpZ2F0aW9ucyBmb3IgdXNlcnMgc28gYXMgdG8gcHJlc2VydmUgdGhpcyBzdGF0dXMgZm9yIGFsbCBzdWJzZXF1ZW50IHJlZGlzdHJpYnV0aW9ucy5cblxuICAgSW4gY29uc2lkZXJhdGlvbiBvZiBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGFuZCB0aGUgcmlnaHRzIHRvIGNvcHksIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIGdyYW50ZWQgYnkgdGhlIGxpY2Vuc2UsIHVzZXJzIGFyZSBwcm92aWRlZCBvbmx5IHdpdGggYSBsaW1pdGVkIHdhcnJhbnR5IGFuZCB0aGUgc29mdHdhcmUncyBhdXRob3IsIHRoZSBob2xkZXIgb2YgdGhlIGVjb25vbWljIHJpZ2h0cywgYW5kIHRoZSBzdWNjZXNzaXZlIGxpY2Vuc29ycyBvbmx5IGhhdmUgbGltaXRlZCBsaWFiaWxpdHkuXG5cbiAgIEluIHRoaXMgcmVzcGVjdCwgdGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBsb2FkaW5nLCB1c2luZywgbW9kaWZ5aW5nIGFuZC9vciBkZXZlbG9waW5nIG9yIHJlcHJvZHVjaW5nIHRoZSBzb2Z0d2FyZSBieSB0aGUgdXNlciBhcmUgYnJvdWdodCB0byB0aGUgdXNlcidzIGF0dGVudGlvbiwgZ2l2ZW4gaXRzIEZyZWUgU29mdHdhcmUgc3RhdHVzLCB3aGljaCBtYXkgbWFrZSBpdCBjb21wbGljYXRlZCB0byB1c2UsIHdpdGggdGhlIHJlc3VsdCB0aGF0IGl0cyB1c2UgaXMgcmVzZXJ2ZWQgZm9yIGRldmVsb3BlcnMgYW5kIGV4cGVyaWVuY2VkIHByb2Zlc3Npb25hbHMgaGF2aW5nIGluLWRlcHRoIGNvbXB1dGVyIGtub3dsZWRnZS4gVXNlcnMgYXJlIHRoZXJlZm9yZSBlbmNvdXJhZ2VkIHRvIGxvYWQgYW5kIHRlc3QgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBzb2Z0d2FyZSBhcyByZWdhcmRzIHRoZWlyIHJlcXVpcmVtZW50cyBpbiBjb25kaXRpb25zIGVuYWJsaW5nIHRoZSBzZWN1cml0eSBvZiB0aGVpciBzeXN0ZW1zIGFuZC9vciBkYXRhIHRvIGJlIGVuc3VyZWQgYW5kLCBtb3JlIGdlbmVyYWxseSwgdG8gdXNlIGFuZCBvcGVyYXRlIGl0IGluIHRoZSBzYW1lIGNvbmRpdGlvbnMgb2Ygc2VjdXJpdHkuIFRoaXMgQWdyZWVtZW50IG1heSBiZSBmcmVlbHkgcmVwcm9kdWNlZCBhbmQgcHVibGlzaGVkLCBwcm92aWRlZCBpdCBpcyBub3QgYWx0ZXJlZCwgYW5kIHRoYXQgbm8gcHJvdmlzaW9ucyBhcmUgZWl0aGVyIGFkZGVkIG9yIHJlbW92ZWQgaGVyZWZyb20uXG5cbiAgIFRoaXMgQWdyZWVtZW50IG1heSBhcHBseSB0byBhbnkgb3IgYWxsIHNvZnR3YXJlIGZvciB3aGljaCB0aGUgaG9sZGVyIG9mIHRoZSBlY29ub21pYyByaWdodHMgZGVjaWRlcyB0byBzdWJtaXQgdGhlIHVzZSB0aGVyZW9mIHRvIGl0cyBwcm92aXNpb25zLlxuXG4gICBGcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucyBjYW4gYmUgZm91bmQgb24gdGhlIG9mZmljaWFsIHdlYnNpdGUgb2YgdGhlIENlQ0lMTCBsaWNlbnNlcyBmYW1pbHkgKGh0dHA6Ly93d3cuY2VjaWxsLmluZm8vaW5kZXguZW4uaHRtbCkgZm9yIGFueSBuZWNlc3NhcnkgY2xhcmlmaWNhdGlvbi5cblxuICAgQXJ0aWNsZSAxIC0gREVGSU5JVElPTlNcblxuICAgRm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgQWdyZWVtZW50LCB3aGVuIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbnMgY29tbWVuY2Ugd2l0aCBhIGNhcGl0YWwgbGV0dGVyLCB0aGV5IHNoYWxsIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOlxuXG4gICAgICBcblxuICAgICAgQWdyZWVtZW50OiBtZWFucyB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgaXRzIHBvc3NpYmxlIHN1YnNlcXVlbnQgdmVyc2lvbnMgYW5kIGFubmV4ZXMuXG5cbiAgICAgIFxuXG4gICAgICBTb2Z0d2FyZTogbWVhbnMgdGhlIHNvZnR3YXJlIGluIGl0cyBPYmplY3QgQ29kZSBhbmQvb3IgU291cmNlIENvZGUgZm9ybSBhbmQsIHdoZXJlIGFwcGxpY2FibGUsIGl0cyBkb2N1bWVudGF0aW9uLCBcImFzIGlzXCIgd2hlbiB0aGUgTGljZW5zZWUgYWNjZXB0cyB0aGUgQWdyZWVtZW50LlxuXG4gICAgICBcblxuICAgICAgSW5pdGlhbCBTb2Z0d2FyZTogbWVhbnMgdGhlIFNvZnR3YXJlIGluIGl0cyBTb3VyY2UgQ29kZSBhbmQgcG9zc2libHkgaXRzIE9iamVjdCBDb2RlIGZvcm0gYW5kLCB3aGVyZSBhcHBsaWNhYmxlLCBpdHMgZG9jdW1lbnRhdGlvbiwgXCJhcyBpc1wiIHdoZW4gaXQgaXMgZmlyc3QgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBBZ3JlZW1lbnQuXG5cbiAgICAgIFxuXG4gICAgICBNb2RpZmllZCBTb2Z0d2FyZTogbWVhbnMgdGhlIFNvZnR3YXJlIG1vZGlmaWVkIGJ5IGF0IGxlYXN0IG9uZSBDb250cmlidXRpb24uXG5cbiAgICAgIFxuXG4gICAgICBTb3VyY2UgQ29kZTogbWVhbnMgYWxsIHRoZSBTb2Z0d2FyZSdzIGluc3RydWN0aW9ucyBhbmQgcHJvZ3JhbSBsaW5lcyB0byB3aGljaCBhY2Nlc3MgaXMgcmVxdWlyZWQgc28gYXMgdG8gbW9kaWZ5IHRoZSBTb2Z0d2FyZS5cblxuICAgICAgXG5cbiAgICAgIE9iamVjdCBDb2RlOiBtZWFucyB0aGUgYmluYXJ5IGZpbGVzIG9yaWdpbmF0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBTb3VyY2UgQ29kZS5cblxuICAgICAgXG5cbiAgICAgIEhvbGRlcjogbWVhbnMgdGhlIGhvbGRlcihzKSBvZiB0aGUgZWNvbm9taWMgcmlnaHRzIG92ZXIgdGhlIEluaXRpYWwgU29mdHdhcmUuXG5cbiAgICAgIFxuXG4gICAgICBMaWNlbnNlZTogbWVhbnMgdGhlIFNvZnR3YXJlIHVzZXIocykgaGF2aW5nIGFjY2VwdGVkIHRoZSBBZ3JlZW1lbnQuXG5cbiAgICAgIFxuXG4gICAgICBDb250cmlidXRvcjogbWVhbnMgYSBMaWNlbnNlZSBoYXZpbmcgbWFkZSBhdCBsZWFzdCBvbmUgQ29udHJpYnV0aW9uLlxuXG4gICAgICBcblxuICAgICAgTGljZW5zb3I6IG1lYW5zIHRoZSBIb2xkZXIsIG9yIGFueSBvdGhlciBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSwgd2hvIGRpc3RyaWJ1dGVzIHRoZSBTb2Z0d2FyZSB1bmRlciB0aGUgQWdyZWVtZW50LlxuXG4gICAgICBcblxuICAgICAgQ29udHJpYnV0aW9uOiBtZWFucyBhbnkgb3IgYWxsIG1vZGlmaWNhdGlvbnMsIGNvcnJlY3Rpb25zLCB0cmFuc2xhdGlvbnMsIGFkYXB0YXRpb25zIGFuZC9vciBuZXcgZnVuY3Rpb25zIGludGVncmF0ZWQgaW50byB0aGUgU29mdHdhcmUgYnkgYW55IG9yIGFsbCBDb250cmlidXRvcnMsIGFzIHdlbGwgYXMgYW55IG9yIGFsbCBJbnRlcm5hbCBNb2R1bGVzLlxuXG4gICAgICBcblxuICAgICAgTW9kdWxlOiBtZWFucyBhIHNldCBvZiBzb3VyY2VzIGZpbGVzIGluY2x1ZGluZyB0aGVpciBkb2N1bWVudGF0aW9uIHRoYXQgZW5hYmxlcyBzdXBwbGVtZW50YXJ5IGZ1bmN0aW9ucyBvciBzZXJ2aWNlcyBpbiBhZGRpdGlvbiB0byB0aG9zZSBvZmZlcmVkIGJ5IHRoZSBTb2Z0d2FyZS5cblxuICAgICAgXG5cbiAgICAgIEV4dGVybmFsIE1vZHVsZTogbWVhbnMgYW55IG9yIGFsbCBNb2R1bGVzLCBub3QgZGVyaXZlZCBmcm9tIHRoZSBTb2Z0d2FyZSwgc28gdGhhdCB0aGlzIE1vZHVsZSBhbmQgdGhlIFNvZnR3YXJlIHJ1biBpbiBzZXBhcmF0ZSBhZGRyZXNzIHNwYWNlcywgd2l0aCBvbmUgY2FsbGluZyB0aGUgb3RoZXIgd2hlbiB0aGV5IGFyZSBydW4uXG5cbiAgICAgIFxuXG4gICAgICBJbnRlcm5hbCBNb2R1bGU6IG1lYW5zIGFueSBvciBhbGwgTW9kdWxlLCBjb25uZWN0ZWQgdG8gdGhlIFNvZnR3YXJlIHNvIHRoYXQgdGhleSBib3RoIGV4ZWN1dGUgaW4gdGhlIHNhbWUgYWRkcmVzcyBzcGFjZS5cblxuICAgICAgXG5cbiAgICAgIEdOVSBHUEw6IG1lYW5zIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgb3IgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLlxuXG4gICAgICBcblxuICAgICAgR05VIEFmZmVybyBHUEw6IG1lYW5zIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIG9yIGFueSBzdWJzZXF1ZW50IHZlcnNpb24sIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEluYy5cblxuICAgICAgXG5cbiAgICAgIEVVUEw6IG1lYW5zIHRoZSBFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDEuMSBvciBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEV1cm9wZWFuIENvbW1pc3Npb24uXG5cbiAgICAgIFxuXG4gICAgICBQYXJ0aWVzOiBtZWFuIGJvdGggdGhlIExpY2Vuc2VlIGFuZCB0aGUgTGljZW5zb3IuXG5cbiAgIFRoZXNlIGV4cHJlc3Npb25zIG1heSBiZSB1c2VkIGJvdGggaW4gc2luZ3VsYXIgYW5kIHBsdXJhbCBmb3JtLlxuXG4gICBBcnRpY2xlIDIgLSBQVVJQT1NFXG5cbiAgIFRoZSBwdXJwb3NlIG9mIHRoZSBBZ3JlZW1lbnQgaXMgdGhlIGdyYW50IGJ5IHRoZSBMaWNlbnNvciB0byB0aGUgTGljZW5zZWUgb2YgYSBub24tZXhjbHVzaXZlLCB0cmFuc2ZlcmFibGUgYW5kIHdvcmxkd2lkZSBsaWNlbnNlIGZvciB0aGUgU29mdHdhcmUgYXMgc2V0IGZvcnRoIGluIEFydGljbGUgNSBcdTAwM2Mjc2NvcGVcdTAwM2UgaGVyZWluYWZ0ZXIgZm9yIHRoZSB3aG9sZSB0ZXJtIG9mIHRoZSBwcm90ZWN0aW9uIGdyYW50ZWQgYnkgdGhlIHJpZ2h0cyBvdmVyIHNhaWQgU29mdHdhcmUuXG5cbiAgIEFydGljbGUgMyAtIEFDQ0VQVEFOQ0VcblxuICAgICAgMy4xIFRoZSBMaWNlbnNlZSBzaGFsbCBiZSBkZWVtZWQgYXMgaGF2aW5nIGFjY2VwdGVkIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCB1cG9uIHRoZSBvY2N1cnJlbmNlIG9mIHRoZSBmaXJzdCBvZiB0aGUgZm9sbG93aW5nIGV2ZW50czpcblxuICAgICAgICAgKGkpIGxvYWRpbmcgdGhlIFNvZnR3YXJlIGJ5IGFueSBvciBhbGwgbWVhbnMsIG5vdGFibHksIGJ5IGRvd25sb2FkaW5nIGZyb20gYSByZW1vdGUgc2VydmVyLCBvciBieSBsb2FkaW5nIGZyb20gYSBwaHlzaWNhbCBtZWRpdW07XG5cbiAgICAgICAgIChpaSkgdGhlIGZpcnN0IHRpbWUgdGhlIExpY2Vuc2VlIGV4ZXJjaXNlcyBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci5cblxuICAgICAgMy4yIE9uZSBjb3B5IG9mIHRoZSBBZ3JlZW1lbnQsIGNvbnRhaW5pbmcgYSBub3RpY2UgcmVsYXRpbmcgdG8gdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgU29mdHdhcmUsIHRvIHRoZSBsaW1pdGVkIHdhcnJhbnR5LCBhbmQgdG8gdGhlIGZhY3QgdGhhdCBpdHMgdXNlIGlzIHJlc3RyaWN0ZWQgdG8gZXhwZXJpZW5jZWQgdXNlcnMgaGFzIGJlZW4gcHJvdmlkZWQgdG8gdGhlIExpY2Vuc2VlIHByaW9yIHRvIGl0cyBhY2NlcHRhbmNlIGFzIHNldCBmb3J0aCBpbiBBcnRpY2xlIDMuMSBcdTAwM2MjYWNjZXB0aW5nXHUwMDNlIGhlcmVpbmFib3ZlLCBhbmQgdGhlIExpY2Vuc2VlIGhlcmVieSBhY2tub3dsZWRnZXMgdGhhdCBpdCBoYXMgcmVhZCBhbmQgdW5kZXJzdG9vZCBpdC5cblxuICAgQXJ0aWNsZSA0IC0gRUZGRUNUSVZFIERBVEUgQU5EIFRFUk1cblxuICAgICAgNC4xIEVGRkVDVElWRSBEQVRFXG5cbiAgICAgIFRoZSBBZ3JlZW1lbnQgc2hhbGwgYmVjb21lIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSB3aGVuIGl0IGlzIGFjY2VwdGVkIGJ5IHRoZSBMaWNlbnNlZSBhcyBzZXQgZm9ydGggaW4gQXJ0aWNsZSAzLjEgXHUwMDNjI2FjY2VwdGluZ1x1MDAzZSAuXG5cbiAgICAgIDQuMiBURVJNXG5cbiAgICAgIFRoZSBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIGluIGZvcmNlIGZvciB0aGUgZW50aXJlIGxlZ2FsIHRlcm0gb2YgcHJvdGVjdGlvbiBvZiB0aGUgZWNvbm9taWMgcmlnaHRzIG92ZXIgdGhlIFNvZnR3YXJlLlxuXG4gICBBcnRpY2xlIDUgLSBTQ09QRSBPRiBSSUdIVFMgR1JBTlRFRFxuXG4gICBUaGUgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyB0byB0aGUgTGljZW5zZWUsIHdobyBhY2NlcHRzLCB0aGUgZm9sbG93aW5nIHJpZ2h0cyBvdmVyIHRoZSBTb2Z0d2FyZSBmb3IgYW55IG9yIGFsbCB1c2UsIGFuZCBmb3IgdGhlIHRlcm0gb2YgdGhlIEFncmVlbWVudCwgb24gdGhlIGJhc2lzIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggaGVyZWluYWZ0ZXIuXG5cbiAgIEJlc2lkZXMsIGlmIHRoZSBMaWNlbnNvciBvd25zIG9yIGNvbWVzIHRvIG93biBvbmUgb3IgbW9yZSBwYXRlbnRzIHByb3RlY3RpbmcgYWxsIG9yIHBhcnQgb2YgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgU29mdHdhcmUgb3Igb2YgaXRzIGNvbXBvbmVudHMsIHRoZSBMaWNlbnNvciB1bmRlcnRha2VzIG5vdCB0byBlbmZvcmNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGVzZSBwYXRlbnRzIGFnYWluc3Qgc3VjY2Vzc2l2ZSBMaWNlbnNlZXMgdXNpbmcsIGV4cGxvaXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBTb2Z0d2FyZS4gSWYgdGhlc2UgcGF0ZW50cyBhcmUgdHJhbnNmZXJyZWQsIHRoZSBMaWNlbnNvciB1bmRlcnRha2VzIHRvIGhhdmUgdGhlIHRyYW5zZmVyZWVzIHN1YnNjcmliZSB0byB0aGUgb2JsaWdhdGlvbnMgc2V0IGZvcnRoIGluIHRoaXMgcGFyYWdyYXBoLlxuXG4gICAgICA1LjEgUklHSFQgT0YgVVNFXG5cbiAgICAgIFRoZSBMaWNlbnNlZSBpcyBhdXRob3JpemVkIHRvIHVzZSB0aGUgU29mdHdhcmUsIHdpdGhvdXQgYW55IGxpbWl0YXRpb24gYXMgdG8gaXRzIGZpZWxkcyBvZiBhcHBsaWNhdGlvbiwgd2l0aCBpdCBiZWluZyBoZXJlaW5hZnRlciBzcGVjaWZpZWQgdGhhdCB0aGlzIGNvbXByaXNlczpcblxuICAgICAgICAgMS4gcGVybWFuZW50IG9yIHRlbXBvcmFyeSByZXByb2R1Y3Rpb24gb2YgYWxsIG9yIHBhcnQgb2YgdGhlIFNvZnR3YXJlIGJ5IGFueSBvciBhbGwgbWVhbnMgYW5kIGluIGFueSBvciBhbGwgZm9ybS5cblxuICAgICAgICAgMi4gbG9hZGluZywgZGlzcGxheWluZywgcnVubmluZywgb3Igc3RvcmluZyB0aGUgU29mdHdhcmUgb24gYW55IG9yIGFsbCBtZWRpdW0uXG5cbiAgICAgICAgIDMuIGVudGl0bGVtZW50IHRvIG9ic2VydmUsIHN0dWR5IG9yIHRlc3QgaXRzIG9wZXJhdGlvbiBzbyBhcyB0byBkZXRlcm1pbmUgdGhlIGlkZWFzIGFuZCBwcmluY2lwbGVzIGJlaGluZCBhbnkgb3IgYWxsIGNvbnN0aXR1ZW50IGVsZW1lbnRzIG9mIHNhaWQgU29mdHdhcmUuIFRoaXMgc2hhbGwgYXBwbHkgd2hlbiB0aGUgTGljZW5zZWUgY2FycmllcyBvdXQgYW55IG9yIGFsbCBsb2FkaW5nLCBkaXNwbGF5aW5nLCBydW5uaW5nLCB0cmFuc21pc3Npb24gb3Igc3RvcmFnZSBvcGVyYXRpb24gYXMgcmVnYXJkcyB0aGUgU29mdHdhcmUsIHRoYXQgaXQgaXMgZW50aXRsZWQgdG8gY2Fycnkgb3V0IGhlcmV1bmRlci5cblxuICAgICAgNS4yIEVOVElUTEVNRU5UIFRPIE1BS0UgQ09OVFJJQlVUSU9OU1xuXG4gICAgICBUaGUgcmlnaHQgdG8gbWFrZSBDb250cmlidXRpb25zIGluY2x1ZGVzIHRoZSByaWdodCB0byB0cmFuc2xhdGUsIGFkYXB0LCBhcnJhbmdlLCBvciBtYWtlIGFueSBvciBhbGwgbW9kaWZpY2F0aW9ucyB0byB0aGUgU29mdHdhcmUsIGFuZCB0aGUgcmlnaHQgdG8gcmVwcm9kdWNlIHRoZSByZXN1bHRpbmcgc29mdHdhcmUuXG5cbiAgICAgIFRoZSBMaWNlbnNlZSBpcyBhdXRob3JpemVkIHRvIG1ha2UgYW55IG9yIGFsbCBDb250cmlidXRpb25zIHRvIHRoZSBTb2Z0d2FyZSBwcm92aWRlZCB0aGF0IGl0IGluY2x1ZGVzIGFuIGV4cGxpY2l0IG5vdGljZSB0aGF0IGl0IGlzIHRoZSBhdXRob3Igb2Ygc2FpZCBDb250cmlidXRpb24gYW5kIGluZGljYXRlcyB0aGUgZGF0ZSBvZiB0aGUgY3JlYXRpb24gdGhlcmVvZi5cblxuICAgICAgNS4zIFJJR0hUIE9GIERJU1RSSUJVVElPTlxuXG4gICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgcmlnaHQgb2YgZGlzdHJpYnV0aW9uIGluY2x1ZGVzIHRoZSByaWdodCB0byBwdWJsaXNoLCB0cmFuc21pdCBhbmQgY29tbXVuaWNhdGUgdGhlIFNvZnR3YXJlIHRvIHRoZSBnZW5lcmFsIHB1YmxpYyBvbiBhbnkgb3IgYWxsIG1lZGl1bSwgYW5kIGJ5IGFueSBvciBhbGwgbWVhbnMsIGFuZCB0aGUgcmlnaHQgdG8gbWFya2V0LCBlaXRoZXIgaW4gY29uc2lkZXJhdGlvbiBvZiBhIGZlZSwgb3IgZnJlZSBvZiBjaGFyZ2UsIG9uZSBvciBtb3JlIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgYnkgYW55IG1lYW5zLlxuXG4gICAgICBUaGUgTGljZW5zZWUgaXMgZnVydGhlciBhdXRob3JpemVkIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBtb2RpZmllZCBvciB1bm1vZGlmaWVkIFNvZnR3YXJlIHRvIHRoaXJkIHBhcnRpZXMgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggaGVyZWluYWZ0ZXIuXG5cbiAgICAgICAgIDUuMy4xLiBESVNUUklCVVRJT04gT0YgU09GVFdBUkUgV0lUSE9VVCBNT0RJRklDQVRJT05cblxuICAgICAgICAgVGhlIExpY2Vuc2VlIGlzIGF1dGhvcml6ZWQgdG8gZGlzdHJpYnV0ZSB0cnVlIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgaW4gU291cmNlIENvZGUgb3IgT2JqZWN0IENvZGUgZm9ybSwgcHJvdmlkZWQgdGhhdCBzYWlkIGRpc3RyaWJ1dGlvbiBjb21wbGllcyB3aXRoIGFsbCB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgQWdyZWVtZW50IGFuZCBpcyBhY2NvbXBhbmllZCBieTpcblxuICAgICAgICAgICAgMS4gYSBjb3B5IG9mIHRoZSBBZ3JlZW1lbnQsXG5cbiAgICAgICAgICAgIDIuIGEgbm90aWNlIHJlbGF0aW5nIHRvIHRoZSBsaW1pdGF0aW9uIG9mIGJvdGggdGhlIExpY2Vuc29yJ3Mgd2FycmFudHkgYW5kIGxpYWJpbGl0eSBhcyBzZXQgZm9ydGggaW4gQXJ0aWNsZXMgOCBhbmQgOSxcblxuICAgICAgICAgYW5kIHRoYXQsIGluIHRoZSBldmVudCB0aGF0IG9ubHkgdGhlIE9iamVjdCBDb2RlIG9mIHRoZSBTb2Z0d2FyZSBpcyByZWRpc3RyaWJ1dGVkLCB0aGUgTGljZW5zZWUgYWxsb3dzIGVmZmVjdGl2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGwgU291cmNlIENvZGUgb2YgdGhlIFNvZnR3YXJlIGZvciBhIHBlcmlvZCBvZiBhdCBsZWFzdCB0aHJlZSB5ZWFycyBmcm9tIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlLCBpdCBiZWluZyB1bmRlcnN0b29kIHRoYXQgdGhlIGFkZGl0aW9uYWwgYWNxdWlzaXRpb24gY29zdCBvZiB0aGUgU291cmNlIENvZGUgc2hhbGwgbm90IGV4Y2VlZCB0aGUgY29zdCBvZiB0aGUgZGF0YSB0cmFuc2Zlci5cblxuICAgICAgICAgNS4zLjIuIERJU1RSSUJVVElPTiBPRiBNT0RJRklFRCBTT0ZUV0FSRVxuXG4gICAgICAgICBXaGVuIHRoZSBMaWNlbnNlZSBtYWtlcyBhIENvbnRyaWJ1dGlvbiB0byB0aGUgU29mdHdhcmUsIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgcmVzdWx0aW5nIE1vZGlmaWVkIFNvZnR3YXJlIGJlY29tZSBzdWJqZWN0IHRvIGFsbCB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudC5cblxuICAgICAgICAgVGhlIExpY2Vuc2VlIGlzIGF1dGhvcml6ZWQgdG8gZGlzdHJpYnV0ZSB0aGUgTW9kaWZpZWQgU29mdHdhcmUsIGluIHNvdXJjZSBjb2RlIG9yIG9iamVjdCBjb2RlIGZvcm0sIHByb3ZpZGVkIHRoYXQgc2FpZCBkaXN0cmlidXRpb24gY29tcGxpZXMgd2l0aCBhbGwgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEFncmVlbWVudCBhbmQgaXMgYWNjb21wYW5pZWQgYnk6XG5cbiAgICAgICAgICAgIDEuIGEgY29weSBvZiB0aGUgQWdyZWVtZW50LFxuXG4gICAgICAgICAgICAyLiBhIG5vdGljZSByZWxhdGluZyB0byB0aGUgbGltaXRhdGlvbiBvZiBib3RoIHRoZSBMaWNlbnNvcidzIHdhcnJhbnR5IGFuZCBsaWFiaWxpdHkgYXMgc2V0IGZvcnRoIGluIEFydGljbGVzIDggYW5kIDksXG5cbiAgICAgICAgIGFuZCwgaW4gdGhlIGV2ZW50IHRoYXQgb25seSB0aGUgb2JqZWN0IGNvZGUgb2YgdGhlIE1vZGlmaWVkIFNvZnR3YXJlIGlzIHJlZGlzdHJpYnV0ZWQsXG5cbiAgICAgICAgICAgIDMuIGEgbm90ZSBzdGF0aW5nIHRoZSBjb25kaXRpb25zIG9mIGVmZmVjdGl2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGwgc291cmNlIGNvZGUgb2YgdGhlIE1vZGlmaWVkIFNvZnR3YXJlIGZvciBhIHBlcmlvZCBvZiBhdCBsZWFzdCB0aHJlZSB5ZWFycyBmcm9tIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIE1vZGlmaWVkIFNvZnR3YXJlLCBpdCBiZWluZyB1bmRlcnN0b29kIHRoYXQgdGhlIGFkZGl0aW9uYWwgYWNxdWlzaXRpb24gY29zdCBvZiB0aGUgc291cmNlIGNvZGUgc2hhbGwgbm90IGV4Y2VlZCB0aGUgY29zdCBvZiB0aGUgZGF0YSB0cmFuc2Zlci5cblxuICAgICAgICAgNS4zLjMuIERJU1RSSUJVVElPTiBPRiBFWFRFUk5BTCBNT0RVTEVTXG5cbiAgICAgICAgIFdoZW4gdGhlIExpY2Vuc2VlIGhhcyBkZXZlbG9wZWQgYW4gRXh0ZXJuYWwgTW9kdWxlLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgZG8gbm90IGFwcGx5IHRvIHNhaWQgRXh0ZXJuYWwgTW9kdWxlLCB0aGF0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBhIHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50LlxuXG4gICAgICAgICA1LjMuNC4gQ09NUEFUSUJJTElUWSBXSVRIIE9USEVSIExJQ0VOU0VTXG5cbiAgICAgICAgIFRoZSBMaWNlbnNlZSBjYW4gaW5jbHVkZSBhIGNvZGUgdGhhdCBpcyBzdWJqZWN0IHRvIHRoZSBwcm92aXNpb25zIG9mIG9uZSBvZiB0aGUgdmVyc2lvbnMgb2YgdGhlIEdOVSBHUEwsIEdOVSBBZmZlcm8gR1BMIGFuZC9vciBFVVBMIGluIHRoZSBNb2RpZmllZCBvciB1bm1vZGlmaWVkIFNvZnR3YXJlLCBhbmQgZGlzdHJpYnV0ZSB0aGF0IGVudGlyZSBjb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgc2FtZSB2ZXJzaW9uIG9mIHRoZSBHTlUgR1BMLCBHTlUgQWZmZXJvIEdQTCBhbmQvb3IgRVVQTC5cblxuICAgICAgICAgVGhlIExpY2Vuc2VlIGNhbiBpbmNsdWRlIHRoZSBNb2RpZmllZCBvciB1bm1vZGlmaWVkIFNvZnR3YXJlIGluIGEgY29kZSB0aGF0IGlzIHN1YmplY3QgdG8gdGhlIHByb3Zpc2lvbnMgb2Ygb25lIG9mIHRoZSB2ZXJzaW9ucyBvZiB0aGUgR05VIEdQTCwgR05VIEFmZmVybyBHUEwgYW5kL29yIEVVUEwgYW5kIGRpc3RyaWJ1dGUgdGhhdCBlbnRpcmUgY29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHNhbWUgdmVyc2lvbiBvZiB0aGUgR05VIEdQTCwgR05VIEFmZmVybyBHUEwgYW5kL29yIEVVUEwuXG5cbiAgIEFydGljbGUgNiAtIElOVEVMTEVDVFVBTCBQUk9QRVJUWVxuXG4gICAgICA2LjEgT1ZFUiBUSEUgSU5JVElBTCBTT0ZUV0FSRVxuXG4gICAgICBUaGUgSG9sZGVyIG93bnMgdGhlIGVjb25vbWljIHJpZ2h0cyBvdmVyIHRoZSBJbml0aWFsIFNvZnR3YXJlLiBBbnkgb3IgYWxsIHVzZSBvZiB0aGUgSW5pdGlhbCBTb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIEhvbGRlciBoYXMgZWxlY3RlZCB0byBkaXN0cmlidXRlIGl0cyB3b3JrIGFuZCBubyBvbmUgc2hhbGwgYmUgZW50aXRsZWQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiBzYWlkIEluaXRpYWwgU29mdHdhcmUuXG5cbiAgICAgIFRoZSBIb2xkZXIgdW5kZXJ0YWtlcyB0aGF0IHRoZSBJbml0aWFsIFNvZnR3YXJlIHdpbGwgcmVtYWluIHJ1bGVkIGF0IGxlYXN0IGJ5IHRoaXMgQWdyZWVtZW50LCBmb3IgdGhlIGR1cmF0aW9uIHNldCBmb3J0aCBpbiBBcnRpY2xlIDQuMiBcdTAwM2MjdGVybVx1MDAzZSAuXG5cbiAgICAgIDYuMiBPVkVSIFRIRSBDT05UUklCVVRJT05TXG5cbiAgICAgIFRoZSBMaWNlbnNlZSB3aG8gZGV2ZWxvcHMgYSBDb250cmlidXRpb24gaXMgdGhlIG93bmVyIG9mIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG92ZXIgdGhpcyBDb250cmlidXRpb24gYXMgZGVmaW5lZCBieSBhcHBsaWNhYmxlIGxhdy5cblxuICAgICAgNi4zIE9WRVIgVEhFIEVYVEVSTkFMIE1PRFVMRVNcblxuICAgICAgVGhlIExpY2Vuc2VlIHdobyBkZXZlbG9wcyBhbiBFeHRlcm5hbCBNb2R1bGUgaXMgdGhlIG93bmVyIG9mIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG92ZXIgdGhpcyBFeHRlcm5hbCBNb2R1bGUgYXMgZGVmaW5lZCBieSBhcHBsaWNhYmxlIGxhdyBhbmQgaXMgZnJlZSB0byBjaG9vc2UgdGhlIHR5cGUgb2YgYWdyZWVtZW50IHRoYXQgc2hhbGwgZ292ZXJuIGl0cyBkaXN0cmlidXRpb24uXG5cbiAgICAgIDYuNCBKT0lOVCBQUk9WSVNJT05TXG5cbiAgICAgIFRoZSBMaWNlbnNlZSBleHByZXNzbHkgdW5kZXJ0YWtlczpcblxuICAgICAgICAgMS4gbm90IHRvIHJlbW92ZSwgb3IgbW9kaWZ5LCBpbiBhbnkgbWFubmVyLCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG5vdGljZXMgYXR0YWNoZWQgdG8gdGhlIFNvZnR3YXJlO1xuXG4gICAgICAgICAyLiB0byByZXByb2R1Y2Ugc2FpZCBub3RpY2VzLCBpbiBhbiBpZGVudGljYWwgbWFubmVyLCBpbiB0aGUgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBtb2RpZmllZCBvciBub3QuXG5cbiAgICAgIFRoZSBMaWNlbnNlZSB1bmRlcnRha2VzIG5vdCB0byBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9uIHRoZSBTb2Z0d2FyZSBvZiB0aGUgSG9sZGVyIGFuZC9vciBDb250cmlidXRvcnMsIGFuZCB0byB0YWtlLCB3aGVyZSBhcHBsaWNhYmxlLCB2aXMtw6AtdmlzIGl0cyBzdGFmZiwgYW55IGFuZCBhbGwgbWVhc3VyZXMgcmVxdWlyZWQgdG8gZW5zdXJlIHJlc3BlY3Qgb2Ygc2FpZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIHRoZSBIb2xkZXIgYW5kL29yIENvbnRyaWJ1dG9ycy5cblxuICAgQXJ0aWNsZSA3IC0gUkVMQVRFRCBTRVJWSUNFU1xuXG4gICAgICA3LjEgVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBzaGFsbCB0aGUgQWdyZWVtZW50IG9ibGlnZSB0aGUgTGljZW5zb3IgdG8gcHJvdmlkZSB0ZWNobmljYWwgYXNzaXN0YW5jZSBvciBtYWludGVuYW5jZSBzZXJ2aWNlcyBmb3IgdGhlIFNvZnR3YXJlLlxuXG4gICAgICBIb3dldmVyLCB0aGUgTGljZW5zb3IgaXMgZW50aXRsZWQgdG8gb2ZmZXIgdGhpcyB0eXBlIG9mIHNlcnZpY2VzLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Ygc3VjaCB0ZWNobmljYWwgYXNzaXN0YW5jZSwgYW5kL29yIHN1Y2ggbWFpbnRlbmFuY2UsIHNoYWxsIGJlIHNldCBmb3J0aCBpbiBhIHNlcGFyYXRlIGluc3RydW1lbnQuIE9ubHkgdGhlIExpY2Vuc29yIG9mZmVyaW5nIHNhaWQgbWFpbnRlbmFuY2UgYW5kL29yIHRlY2huaWNhbCBhc3Npc3RhbmNlIHNlcnZpY2VzIHNoYWxsIGluY3VyIGxpYWJpbGl0eSB0aGVyZWZvci5cblxuICAgICAgNy4yIFNpbWlsYXJseSwgYW55IExpY2Vuc29yIGlzIGVudGl0bGVkIHRvIG9mZmVyIHRvIGl0cyBsaWNlbnNlZXMsIHVuZGVyIGl0cyBzb2xlIHJlc3BvbnNpYmlsaXR5LCBhIHdhcnJhbnR5LCB0aGF0IHNoYWxsIG9ubHkgYmUgYmluZGluZyB1cG9uIGl0c2VsZiwgZm9yIHRoZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgYW5kL29yIHRoZSBNb2RpZmllZCBTb2Z0d2FyZSwgdW5kZXIgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBpdCBpcyBmcmVlIHRvIGRlY2lkZS4gU2FpZCB3YXJyYW50eSwgYW5kIHRoZSBmaW5hbmNpYWwgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgaXRzIGFwcGxpY2F0aW9uLCBzaGFsbCBiZSBzdWJqZWN0IG9mIGEgc2VwYXJhdGUgaW5zdHJ1bWVudCBleGVjdXRlZCBiZXR3ZWVuIHRoZSBMaWNlbnNvciBhbmQgdGhlIExpY2Vuc2VlLlxuXG4gICBBcnRpY2xlIDggLSBMSUFCSUxJVFlcblxuICAgICAgOC4xIFN1YmplY3QgdG8gdGhlIHByb3Zpc2lvbnMgb2YgQXJ0aWNsZSA4LjIsIHRoZSBMaWNlbnNlZSBzaGFsbCBiZSBlbnRpdGxlZCB0byBjbGFpbSBjb21wZW5zYXRpb24gZm9yIGFueSBkaXJlY3QgbG9zcyBpdCBtYXkgaGF2ZSBzdWZmZXJlZCBmcm9tIHRoZSBTb2Z0d2FyZSBhcyBhIHJlc3VsdCBvZiBhIGZhdWx0IG9uIHRoZSBwYXJ0IG9mIHRoZSByZWxldmFudCBMaWNlbnNvciwgc3ViamVjdCB0byBwcm92aWRpbmcgZXZpZGVuY2UgdGhlcmVvZi5cblxuICAgICAgOC4yIFRoZSBMaWNlbnNvcidzIGxpYWJpbGl0eSBpcyBsaW1pdGVkIHRvIHRoZSBjb21taXRtZW50cyBtYWRlIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBzaGFsbCBub3QgYmUgaW5jdXJyZWQgYXMgYSByZXN1bHQgb2YgaW4gcGFydGljdWxhcjogKGkpIGxvc3MgZHVlIHRoZSBMaWNlbnNlZSdzIHRvdGFsIG9yIHBhcnRpYWwgZmFpbHVyZSB0byBmdWxmaWxsIGl0cyBvYmxpZ2F0aW9ucywgKGlpKSBkaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBsb3NzIHRoYXQgaXMgc3VmZmVyZWQgYnkgdGhlIExpY2Vuc2VlIGR1ZSB0byB0aGUgdXNlIG9yIHBlcmZvcm1hbmNlIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIChpaWkpIG1vcmUgZ2VuZXJhbGx5LCBhbnkgY29uc2VxdWVudGlhbCBsb3NzLiBJbiBwYXJ0aWN1bGFyIHRoZSBQYXJ0aWVzIGV4cHJlc3NseSBhZ3JlZSB0aGF0IGFueSBvciBhbGwgcGVjdW5pYXJ5IG9yIGJ1c2luZXNzIGxvc3MgKGkuZS4gbG9zcyBvZiBkYXRhLCBsb3NzIG9mIHByb2ZpdHMsIG9wZXJhdGluZyBsb3NzLCBsb3NzIG9mIGN1c3RvbWVycyBvciBvcmRlcnMsIG9wcG9ydHVuaXR5IGNvc3QsIGFueSBkaXN0dXJiYW5jZSB0byBidXNpbmVzcyBhY3Rpdml0aWVzKSBvciBhbnkgb3IgYWxsIGxlZ2FsIHByb2NlZWRpbmdzIGluc3RpdHV0ZWQgYWdhaW5zdCB0aGUgTGljZW5zZWUgYnkgYSB0aGlyZCBwYXJ0eSwgc2hhbGwgY29uc3RpdHV0ZSBjb25zZXF1ZW50aWFsIGxvc3MgYW5kIHNoYWxsIG5vdCBwcm92aWRlIGVudGl0bGVtZW50IHRvIGFueSBvciBhbGwgY29tcGVuc2F0aW9uIGZyb20gdGhlIExpY2Vuc29yLlxuXG4gICBBcnRpY2xlIDkgLSBXQVJSQU5UWVxuXG4gICAgICA5LjEgVGhlIExpY2Vuc2VlIGFja25vd2xlZGdlcyB0aGF0IHRoZSBzY2llbnRpZmljIGFuZCB0ZWNobmljYWwgc3RhdGUtb2YtdGhlLWFydCB3aGVuIHRoZSBTb2Z0d2FyZSB3YXMgZGlzdHJpYnV0ZWQgZGlkIG5vdCBlbmFibGUgYWxsIHBvc3NpYmxlIHVzZXMgdG8gYmUgdGVzdGVkIGFuZCB2ZXJpZmllZCwgbm9yIGZvciB0aGUgcHJlc2VuY2Ugb2YgcG9zc2libGUgZGVmZWN0cyB0byBiZSBkZXRlY3RlZC4gSW4gdGhpcyByZXNwZWN0LCB0aGUgTGljZW5zZWUncyBhdHRlbnRpb24gaGFzIGJlZW4gZHJhd24gdG8gdGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBsb2FkaW5nLCB1c2luZywgbW9kaWZ5aW5nIGFuZC9vciBkZXZlbG9waW5nIGFuZCByZXByb2R1Y2luZyB0aGUgU29mdHdhcmUgd2hpY2ggYXJlIHJlc2VydmVkIGZvciBleHBlcmllbmNlZCB1c2Vycy5cblxuICAgICAgVGhlIExpY2Vuc2VlIHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciB2ZXJpZnlpbmcsIGJ5IGFueSBvciBhbGwgbWVhbnMsIHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgcHJvZHVjdCBmb3IgaXRzIHJlcXVpcmVtZW50cywgaXRzIGdvb2Qgd29ya2luZyBvcmRlciwgYW5kIGZvciBlbnN1cmluZyB0aGF0IGl0IHNoYWxsIG5vdCBjYXVzZSBkYW1hZ2UgdG8gZWl0aGVyIHBlcnNvbnMgb3IgcHJvcGVydGllcy5cblxuICAgICAgOS4yIFRoZSBMaWNlbnNvciBoZXJlYnkgcmVwcmVzZW50cywgaW4gZ29vZCBmYWl0aCwgdGhhdCBpdCBpcyBlbnRpdGxlZCB0byBncmFudCBhbGwgdGhlIHJpZ2h0cyBvdmVyIHRoZSBTb2Z0d2FyZSAoaW5jbHVkaW5nIGluIHBhcnRpY3VsYXIgdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gQXJ0aWNsZSA1IFx1MDAzYyNzY29wZVx1MDAzZSApLlxuXG4gICAgICA5LjMgVGhlIExpY2Vuc2VlIGFja25vd2xlZGdlcyB0aGF0IHRoZSBTb2Z0d2FyZSBpcyBzdXBwbGllZCBcImFzIGlzXCIgYnkgdGhlIExpY2Vuc29yIHdpdGhvdXQgYW55IG90aGVyIGV4cHJlc3Mgb3IgdGFjaXQgd2FycmFudHksIG90aGVyIHRoYW4gdGhhdCBwcm92aWRlZCBmb3IgaW4gQXJ0aWNsZSA5LjIgXHUwMDNjI2dvb2QtZmFpdGhcdTAwM2UgYW5kLCBpbiBwYXJ0aWN1bGFyLCB3aXRob3V0IGFueSB3YXJyYW50eSBhcyB0byBpdHMgY29tbWVyY2lhbCB2YWx1ZSwgaXRzIHNlY3VyZWQsIHNhZmUsIGlubm92YXRpdmUgb3IgcmVsZXZhbnQgbmF0dXJlLlxuXG4gICAgICBTcGVjaWZpY2FsbHksIHRoZSBMaWNlbnNvciBkb2VzIG5vdCB3YXJyYW50IHRoYXQgdGhlIFNvZnR3YXJlIGlzIGZyZWUgZnJvbSBhbnkgZXJyb3IsIHRoYXQgaXQgd2lsbCBvcGVyYXRlIHdpdGhvdXQgaW50ZXJydXB0aW9uLCB0aGF0IGl0IHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBMaWNlbnNlZSdzIG93biBlcXVpcG1lbnQgYW5kIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb24sIG5vciB0aGF0IGl0IHdpbGwgbWVldCB0aGUgTGljZW5zZWUncyByZXF1aXJlbWVudHMuXG5cbiAgICAgIDkuNCBUaGUgTGljZW5zb3IgZG9lcyBub3QgZWl0aGVyIGV4cHJlc3NseSBvciB0YWNpdGx5IHdhcnJhbnQgdGhhdCB0aGUgU29mdHdhcmUgZG9lcyBub3QgaW5mcmluZ2UgYW55IHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCByZWxhdGluZyB0byBhIHBhdGVudCwgc29mdHdhcmUgb3IgYW55IG90aGVyIHByb3BlcnR5IHJpZ2h0LiBUaGVyZWZvcmUsIHRoZSBMaWNlbnNvciBkaXNjbGFpbXMgYW55IGFuZCBhbGwgbGlhYmlsaXR5IHRvd2FyZHMgdGhlIExpY2Vuc2VlIGFyaXNpbmcgb3V0IG9mIGFueSBvciBhbGwgcHJvY2VlZGluZ3MgZm9yIGluZnJpbmdlbWVudCB0aGF0IG1heSBiZSBpbnN0aXR1dGVkIGluIHJlc3BlY3Qgb2YgdGhlIHVzZSwgbW9kaWZpY2F0aW9uIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUuIE5ldmVydGhlbGVzcywgc2hvdWxkIHN1Y2ggcHJvY2VlZGluZ3MgYmUgaW5zdGl0dXRlZCBhZ2FpbnN0IHRoZSBMaWNlbnNlZSwgdGhlIExpY2Vuc29yIHNoYWxsIHByb3ZpZGUgaXQgd2l0aCB0ZWNobmljYWwgYW5kIGxlZ2FsIGV4cGVydGlzZSBmb3IgaXRzIGRlZmVuc2UuIFN1Y2ggdGVjaG5pY2FsIGFuZCBsZWdhbCBleHBlcnRpc2Ugc2hhbGwgYmUgZGVjaWRlZCBvbiBhIGNhc2UtYnktY2FzZSBiYXNpcyBiZXR3ZWVuIHRoZSByZWxldmFudCBMaWNlbnNvciBhbmQgdGhlIExpY2Vuc2VlIHB1cnN1YW50IHRvIGEgbWVtb3JhbmR1bSBvZiB1bmRlcnN0YW5kaW5nLiBUaGUgTGljZW5zb3IgZGlzY2xhaW1zIGFueSBhbmQgYWxsIGxpYWJpbGl0eSBhcyByZWdhcmRzIHRoZSBMaWNlbnNlZSdzIHVzZSBvZiB0aGUgbmFtZSBvZiB0aGUgU29mdHdhcmUuIE5vIHdhcnJhbnR5IGlzIGdpdmVuIGFzIHJlZ2FyZHMgdGhlIGV4aXN0ZW5jZSBvZiBwcmlvciByaWdodHMgb3ZlciB0aGUgbmFtZSBvZiB0aGUgU29mdHdhcmUgb3IgYXMgcmVnYXJkcyB0aGUgZXhpc3RlbmNlIG9mIGEgdHJhZGVtYXJrLlxuXG4gICBBcnRpY2xlIDEwIC0gVEVSTUlOQVRJT05cblxuICAgICAgMTAuMSBJbiB0aGUgZXZlbnQgb2YgYSBicmVhY2ggYnkgdGhlIExpY2Vuc2VlIG9mIGl0cyBvYmxpZ2F0aW9ucyBoZXJldW5kZXIsIHRoZSBMaWNlbnNvciBtYXkgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgdGhpcnR5ICgzMCkgZGF5cyBhZnRlciBub3RpY2UgaGFzIGJlZW4gc2VudCB0byB0aGUgTGljZW5zZWUgYW5kIGhhcyByZW1haW5lZCBpbmVmZmVjdGl2ZS5cblxuICAgICAgMTAuMiBBIExpY2Vuc2VlIHdob3NlIEFncmVlbWVudCBpcyB0ZXJtaW5hdGVkIHNoYWxsIG5vIGxvbmdlciBiZSBhdXRob3JpemVkIHRvIHVzZSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlLiBIb3dldmVyLCBhbnkgbGljZW5zZXMgdGhhdCBpdCBtYXkgaGF2ZSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIG9mIHRoZSBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIHZhbGlkIHN1YmplY3QgdG8gdGhlaXIgaGF2aW5nIGJlZW4gZ3JhbnRlZCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGhlcmVvZi5cblxuICAgQXJ0aWNsZSAxMSAtIE1JU0NFTExBTkVPVVNcblxuICAgICAgMTEuMSBFWENVU0FCTEUgRVZFTlRTXG5cbiAgICAgIE5laXRoZXIgUGFydHkgc2hhbGwgYmUgbGlhYmxlIGZvciBhbnkgb3IgYWxsIGRlbGF5LCBvciBmYWlsdXJlIHRvIHBlcmZvcm0gdGhlIEFncmVlbWVudCwgdGhhdCBtYXkgYmUgYXR0cmlidXRhYmxlIHRvIGFuIGV2ZW50IG9mIGZvcmNlIG1hamV1cmUsIGFuIGFjdCBvZiBHb2Qgb3IgYW4gb3V0c2lkZSBjYXVzZSwgc3VjaCBhcyBkZWZlY3RpdmUgZnVuY3Rpb25pbmcgb3IgaW50ZXJydXB0aW9ucyBvZiB0aGUgZWxlY3RyaWNpdHkgb3IgdGVsZWNvbW11bmljYXRpb25zIG5ldHdvcmtzLCBuZXR3b3JrIHBhcmFseXNpcyBmb2xsb3dpbmcgYSB2aXJ1cyBhdHRhY2ssIGludGVydmVudGlvbiBieSBnb3Zlcm5tZW50IGF1dGhvcml0aWVzLCBuYXR1cmFsIGRpc2FzdGVycywgd2F0ZXIgZGFtYWdlLCBlYXJ0aHF1YWtlcywgZmlyZSwgZXhwbG9zaW9ucywgc3RyaWtlcyBhbmQgbGFib3IgdW5yZXN0LCB3YXIsIGV0Yy5cblxuICAgICAgMTEuMiBBbnkgZmFpbHVyZSBieSBlaXRoZXIgUGFydHksIG9uIG9uZSBvciBtb3JlIG9jY2FzaW9ucywgdG8gaW52b2tlIG9uZSBvciBtb3JlIG9mIHRoZSBwcm92aXNpb25zIGhlcmVvZiwgc2hhbGwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBiZSBpbnRlcnByZXRlZCBhcyBiZWluZyBhIHdhaXZlciBieSB0aGUgaW50ZXJlc3RlZCBQYXJ0eSBvZiBpdHMgcmlnaHQgdG8gaW52b2tlIHNhaWQgcHJvdmlzaW9uKHMpIHN1YnNlcXVlbnRseS5cblxuICAgICAgMTEuMyBUaGUgQWdyZWVtZW50IGNhbmNlbHMgYW5kIHJlcGxhY2VzIGFueSBvciBhbGwgcHJldmlvdXMgYWdyZWVtZW50cywgd2hldGhlciB3cml0dGVuIG9yIG9yYWwsIGJldHdlZW4gdGhlIFBhcnRpZXMgYW5kIGhhdmluZyB0aGUgc2FtZSBwdXJwb3NlLCBhbmQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZXR5IG9mIHRoZSBhZ3JlZW1lbnQgYmV0d2VlbiBzYWlkIFBhcnRpZXMgY29uY2VybmluZyBzYWlkIHB1cnBvc2UuIE5vIHN1cHBsZW1lbnQgb3IgbW9kaWZpY2F0aW9uIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlb2Ygc2hhbGwgYmUgZWZmZWN0aXZlIGFzIGJldHdlZW4gdGhlIFBhcnRpZXMgdW5sZXNzIGl0IGlzIG1hZGUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZWlyIGR1bHkgYXV0aG9yaXplZCByZXByZXNlbnRhdGl2ZXMuXG5cbiAgICAgIDExLjQgSW4gdGhlIGV2ZW50IHRoYXQgb25lIG9yIG1vcmUgb2YgdGhlIHByb3Zpc2lvbnMgaGVyZW9mIHdlcmUgdG8gY29uZmxpY3Qgd2l0aCBhIGN1cnJlbnQgb3IgZnV0dXJlIGFwcGxpY2FibGUgYWN0IG9yIGxlZ2lzbGF0aXZlIHRleHQsIHNhaWQgYWN0IG9yIGxlZ2lzbGF0aXZlIHRleHQgc2hhbGwgcHJldmFpbCwgYW5kIHRoZSBQYXJ0aWVzIHNoYWxsIG1ha2UgdGhlIG5lY2Vzc2FyeSBhbWVuZG1lbnRzIHNvIGFzIHRvIGNvbXBseSB3aXRoIHNhaWQgYWN0IG9yIGxlZ2lzbGF0aXZlIHRleHQuIEFsbCBvdGhlciBwcm92aXNpb25zIHNoYWxsIHJlbWFpbiBlZmZlY3RpdmUuIFNpbWlsYXJseSwgaW52YWxpZGl0eSBvZiBhIHByb3Zpc2lvbiBvZiB0aGUgQWdyZWVtZW50LCBmb3IgYW55IHJlYXNvbiB3aGF0c29ldmVyLCBzaGFsbCBub3QgY2F1c2UgdGhlIEFncmVlbWVudCBhcyBhIHdob2xlIHRvIGJlIGludmFsaWQuXG5cbiAgICAgIDExLjUgTEFOR1VBR0VcblxuICAgICAgVGhlIEFncmVlbWVudCBpcyBkcmFmdGVkIGluIGJvdGggRnJlbmNoIGFuZCBFbmdsaXNoIGFuZCBib3RoIHZlcnNpb25zIGFyZSBkZWVtZWQgYXV0aGVudGljLlxuXG4gICBBcnRpY2xlIDEyIC0gTkVXIFZFUlNJT05TIE9GIFRIRSBBR1JFRU1FTlRcblxuICAgICAgMTIuMSBBbnkgcGVyc29uIGlzIGF1dGhvcml6ZWQgdG8gZHVwbGljYXRlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGlzIEFncmVlbWVudC5cblxuICAgICAgMTIuMiBTbyBhcyB0byBlbnN1cmUgY29oZXJlbmNlLCB0aGUgd29yZGluZyBvZiB0aGlzIEFncmVlbWVudCBpcyBwcm90ZWN0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGJ5IHRoZSBhdXRob3JzIG9mIHRoZSBMaWNlbnNlLCB3aG8gcmVzZXJ2ZSB0aGUgcmlnaHQgdG8gcGVyaW9kaWNhbGx5IHB1Ymxpc2ggdXBkYXRlcyBvciBuZXcgdmVyc2lvbnMgb2YgdGhlIEFncmVlbWVudCwgZWFjaCB3aXRoIGEgc2VwYXJhdGUgbnVtYmVyLiBUaGVzZSBzdWJzZXF1ZW50IHZlcnNpb25zIG1heSBhZGRyZXNzIG5ldyBpc3N1ZXMgZW5jb3VudGVyZWQgYnkgRnJlZSBTb2Z0d2FyZS5cblxuICAgICAgMTIuMyBBbnkgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgYSBnaXZlbiB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgbWF5IG9ubHkgYmUgc3Vic2VxdWVudGx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBvciBhIHN1YnNlcXVlbnQgdmVyc2lvbiwgc3ViamVjdCB0byB0aGUgcHJvdmlzaW9ucyBvZiBBcnRpY2xlIDUuMy40IFx1MDAzYyNjb21wYXRpYmlsaXR5XHUwMDNlIC5cblxuICAgQXJ0aWNsZSAxMyAtIEdPVkVSTklORyBMQVcgQU5EIEpVUklTRElDVElPTlxuXG4gICAgICAxMy4xIFRoZSBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgRnJlbmNoIGxhdy4gVGhlIFBhcnRpZXMgYWdyZWUgdG8gZW5kZWF2b3IgdG8gc2VlayBhbiBhbWljYWJsZSBzb2x1dGlvbiB0byBhbnkgZGlzYWdyZWVtZW50cyBvciBkaXNwdXRlcyB0aGF0IG1heSBhcmlzZSBkdXJpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBBZ3JlZW1lbnQuXG5cbiAgICAgIDEzLjIgRmFpbGluZyBhbiBhbWljYWJsZSBzb2x1dGlvbiB3aXRoaW4gdHdvICgyKSBtb250aHMgYXMgZnJvbSB0aGVpciBvY2N1cnJlbmNlLCBhbmQgdW5sZXNzIGVtZXJnZW5jeSBwcm9jZWVkaW5ncyBhcmUgbmVjZXNzYXJ5LCB0aGUgZGlzYWdyZWVtZW50cyBvciBkaXNwdXRlcyBzaGFsbCBiZSByZWZlcnJlZCB0byB0aGUgUGFyaXMgQ291cnRzIGhhdmluZyBqdXJpc2RpY3Rpb24sIGJ5IHRoZSBtb3JlIGRpbGlnZW50IFBhcnR5LiAxIENlQ0lMTCBzdGFuZHMgZm9yIENlKGEpIEMobnJzKSBJKG5yaWEpIEwob2dpY2llbCkgTChpYnJlKSJdLCJsaWNlbnNlSWRzIjpbIkNFQ0lMTC0yLjEiXSwia2V5d29yZHMiOlsiYWdyZWVtZW50IHZlcnNpb24gMiIsIjIgMSBkYXRlZCIsIjEgZGF0ZWQgMjAxMyIsImRhdGVkIDIwMTMgMDYiLCIyMDEzIDA2IDIxIiwiMDYgMjEgbm90aWNlIiwiMjEgbm90aWNlIHRoaXMiLCJjb21taXNzYXJpYXQgbCBuZXJnaWUiLCJsIG5lcmdpZSBhdG9taXF1ZSIsIm5lcmdpZSBhdG9taXF1ZSBldCIsImF0b21pcXVlIGV0IGF1eCIsImV0IGF1eCBuZXJnaWVzIiwiYXV4IG5lcmdpZXMgYWx0ZXJuYXRpdmVzIiwibmVyZ2llcyBhbHRlcm5hdGl2ZXMgY2VhIiwiYWx0ZXJuYXRpdmVzIGNlYSBhIiwiaXRzIHByb3Zpc2lvbnMgZnJlcXVlbnRseSIsInByb3Zpc2lvbnMgZnJlcXVlbnRseSBhc2tlZCIsImZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zIiwiYXNrZWQgcXVlc3Rpb25zIGNhbiIsInF1ZXN0aW9ucyBjYW4gYmUiLCJiZSBmb3VuZCBvbiIsIm9uIHRoZSBvZmZpY2lhbCIsInRoZSBvZmZpY2lhbCB3ZWJzaXRlIiwib2ZmaWNpYWwgd2Vic2l0ZSBvZiIsIndlYnNpdGUgb2YgdGhlIiwidGhlIGNlY2lsbCBsaWNlbnNlcyIsImNlY2lsbCBsaWNlbnNlcyBmYW1pbHkiLCJsaWNlbnNlcyBmYW1pbHkgaHR0cCIsImZhbWlseSBodHRwIHd3dyIsImh0dHAgd3d3IGNlY2lsbCIsInd3dyBjZWNpbGwgaW5mbyIsImNlY2lsbCBpbmZvIGluZGV4IiwiaW5mbyBpbmRleCBlbiIsImluZGV4IGVuIGh0bWwiLCJlbiBodG1sIGZvciIsImh0bWwgZm9yIGFueSIsImZvciBhbnkgbmVjZXNzYXJ5IiwiYW55IG5lY2Vzc2FyeSBjbGFyaWZpY2F0aW9uIiwibmVjZXNzYXJ5IGNsYXJpZmljYXRpb24gYXJ0aWNsZSIsImNsYXJpZmljYXRpb24gYXJ0aWNsZSAxIiwiZm91bmRhdGlvbiBpbmMgZ251IiwiaW5jIGdudSBhZmZlcm8iLCJhZmZlcm8gZ3BsIG1lYW5zIiwiZm91bmRhdGlvbiBpbmMgZXVwbCIsImluYyBldXBsIG1lYW5zIiwiZXVwbCBtZWFucyB0aGUiLCJtZWFucyB0aGUgZXVyb3BlYW4iLCJldXJvcGVhbiBjb21taXNzaW9uIHBhcnRpZXMiLCJjb21taXNzaW9uIHBhcnRpZXMgbWVhbiIsIjUgc2NvcGUgaGVyZWluYWZ0ZXIiLCJzY29wZSBoZXJlaW5hZnRlciBmb3IiLCIxIGFjY2VwdGluZyBoZXJlaW5hYm92ZSIsImFjY2VwdGluZyBoZXJlaW5hYm92ZSBhbmQiLCIxIGFjY2VwdGluZyA0IiwiYWNjZXB0aW5nIDQgMiIsIjkgYW5kIGluIiwiaXMgcmVkaXN0cmlidXRlZCAzIiwicmVkaXN0cmlidXRlZCAzIGEiLCIzIGEgbm90ZSIsImEgbm90ZSBzdGF0aW5nIiwibm90ZSBzdGF0aW5nIHRoZSIsInN0YXRpbmcgdGhlIGNvbmRpdGlvbnMiLCJjb25kaXRpb25zIG9mIGVmZmVjdGl2ZSIsIm9mIGVmZmVjdGl2ZSBhY2Nlc3MiLCJtb2RpZmllZCBzb2Z0d2FyZSBmb3IiLCJjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIiLCJvdGhlciBsaWNlbnNlcyB0aGUiLCJsaWNlbnNlcyB0aGUgbGljZW5zZWUiLCJvciBldXBsIGluIiwiZXVwbCBpbiB0aGUiLCJvciBldXBsIHRoZSIsImV1cGwgdGhlIGxpY2Vuc2VlIiwib3IgZXVwbCBhbmQiLCJldXBsIGFuZCBkaXN0cmlidXRlIiwib3IgZXVwbCBhcnRpY2xlIiwiZXVwbCBhcnRpY2xlIDYiLCIyIHRlcm0gNiIsInRlcm0gNiAyIiwicHJvcGVydHkgcmlnaHRzIG9uIiwidGhlIHNvZnR3YXJlIG9mIiwiNSBzY29wZSA5Iiwic2NvcGUgOSAzIiwiOSAyIGdvb2QiLCIyIGdvb2QgZmFpdGgiLCJnb29kIGZhaXRoIGFuZCIsImZhaXRoIGFuZCBpbiIsImxlZ2FsIGV4cGVydGlzZSBmb3IiLCJleHBlcnRpc2UgZm9yIGl0cyIsImxlZ2FsIGV4cGVydGlzZSBzaGFsbCIsImV4cGVydGlzZSBzaGFsbCBiZSIsIjQgY29tcGF0aWJpbGl0eSBhcnRpY2xlIiwiY29tcGF0aWJpbGl0eSBhcnRpY2xlIDEzIiwiZGlsaWdlbnQgcGFydHkgMSIsInBhcnR5IDEgY2VjaWxsIiwic29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgdmVyc2lvbiIsImxpY2Vuc2UgYWdyZWVtZW50IHZlcnNpb24gMiIsImFncmVlbWVudCB2ZXJzaW9uIDIgMSIsInZlcnNpb24gMiAxIGRhdGVkIiwiMiAxIGRhdGVkIDIwMTMiLCIxIGRhdGVkIDIwMTMgMDYiLCJkYXRlZCAyMDEzIDA2IDIxIiwiMjAxMyAwNiAyMSBub3RpY2UiLCIwNiAyMSBub3RpY2UgdGhpcyIsIjIxIG5vdGljZSB0aGlzIGFncmVlbWVudCIsImFyZSBjb21taXNzYXJpYXQgbCBuZXJnaWUiLCJjb21taXNzYXJpYXQgbCBuZXJnaWUgYXRvbWlxdWUiLCJsIG5lcmdpZSBhdG9taXF1ZSBldCIsIm5lcmdpZSBhdG9taXF1ZSBldCBhdXgiLCJhdG9taXF1ZSBldCBhdXggbmVyZ2llcyIsImV0IGF1eCBuZXJnaWVzIGFsdGVybmF0aXZlcyIsImF1eCBuZXJnaWVzIGFsdGVybmF0aXZlcyBjZWEiLCJuZXJnaWVzIGFsdGVybmF0aXZlcyBjZWEgYSIsImFsdGVybmF0aXZlcyBjZWEgYSBwdWJsaWMiLCJ0byBpdHMgcHJvdmlzaW9ucyBmcmVxdWVudGx5IiwiaXRzIHByb3Zpc2lvbnMgZnJlcXVlbnRseSBhc2tlZCIsInByb3Zpc2lvbnMgZnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnMiLCJmcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucyBjYW4iLCJhc2tlZCBxdWVzdGlvbnMgY2FuIGJlIiwicXVlc3Rpb25zIGNhbiBiZSBmb3VuZCIsImNhbiBiZSBmb3VuZCBvbiIsImJlIGZvdW5kIG9uIHRoZSIsImZvdW5kIG9uIHRoZSBvZmZpY2lhbCIsIm9uIHRoZSBvZmZpY2lhbCB3ZWJzaXRlIiwidGhlIG9mZmljaWFsIHdlYnNpdGUgb2YiLCJvZmZpY2lhbCB3ZWJzaXRlIG9mIHRoZSIsIndlYnNpdGUgb2YgdGhlIGNlY2lsbCIsIm9mIHRoZSBjZWNpbGwgbGljZW5zZXMiLCJ0aGUgY2VjaWxsIGxpY2Vuc2VzIGZhbWlseSIsImNlY2lsbCBsaWNlbnNlcyBmYW1pbHkgaHR0cCIsImxpY2Vuc2VzIGZhbWlseSBodHRwIHd3dyIsImZhbWlseSBodHRwIHd3dyBjZWNpbGwiLCJodHRwIHd3dyBjZWNpbGwgaW5mbyIsInd3dyBjZWNpbGwgaW5mbyBpbmRleCIsImNlY2lsbCBpbmZvIGluZGV4IGVuIiwiaW5mbyBpbmRleCBlbiBodG1sIiwiaW5kZXggZW4gaHRtbCBmb3IiLCJlbiBodG1sIGZvciBhbnkiLCJodG1sIGZvciBhbnkgbmVjZXNzYXJ5IiwiZm9yIGFueSBuZWNlc3NhcnkgY2xhcmlmaWNhdGlvbiIsImFueSBuZWNlc3NhcnkgY2xhcmlmaWNhdGlvbiBhcnRpY2xlIiwibmVjZXNzYXJ5IGNsYXJpZmljYXRpb24gYXJ0aWNsZSAxIiwiY2xhcmlmaWNhdGlvbiBhcnRpY2xlIDEgZGVmaW5pdGlvbnMiLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIGluYyBnbnUiLCJmb3VuZGF0aW9uIGluYyBnbnUgYWZmZXJvIiwiaW5jIGdudSBhZmZlcm8gZ3BsIiwiZ251IGFmZmVybyBncGwgbWVhbnMiLCJhZmZlcm8gZ3BsIG1lYW5zIHRoZSIsIm1lYW5zIHRoZSBnbnUgYWZmZXJvIiwidmVyc2lvbiAzIG9yIGFueSIsIjMgb3IgYW55IHN1YnNlcXVlbnQiLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIGluYyBldXBsIiwiZm91bmRhdGlvbiBpbmMgZXVwbCBtZWFucyIsImluYyBldXBsIG1lYW5zIHRoZSIsImV1cGwgbWVhbnMgdGhlIGV1cm9wZWFuIiwibWVhbnMgdGhlIGV1cm9wZWFuIHVuaW9uIiwidGhlIGV1cm9wZWFuIHVuaW9uIHB1YmxpYyIsIjEgb3IgYW55IHN1YnNlcXVlbnQiLCJwdWJsaXNoZWQgYnkgdGhlIGV1cm9wZWFuIiwidGhlIGV1cm9wZWFuIGNvbW1pc3Npb24gcGFydGllcyIsImV1cm9wZWFuIGNvbW1pc3Npb24gcGFydGllcyBtZWFuIiwiY29tbWlzc2lvbiBwYXJ0aWVzIG1lYW4gYm90aCIsImFydGljbGUgNSBzY29wZSBoZXJlaW5hZnRlciIsIjUgc2NvcGUgaGVyZWluYWZ0ZXIgZm9yIiwic2NvcGUgaGVyZWluYWZ0ZXIgZm9yIHRoZSIsIjMgMSBhY2NlcHRpbmcgaGVyZWluYWJvdmUiLCIxIGFjY2VwdGluZyBoZXJlaW5hYm92ZSBhbmQiLCJhY2NlcHRpbmcgaGVyZWluYWJvdmUgYW5kIHRoZSIsIjMgMSBhY2NlcHRpbmcgNCIsIjEgYWNjZXB0aW5nIDQgMiIsImFjY2VwdGluZyA0IDIgdGVybSIsInRoZSBzb2Z0d2FyZSBmb3IgYSIsInRyYW5zZmVyIDUgMyAyIiwiYW5kIDkgYW5kIGluIiwiOSBhbmQgaW4gdGhlIiwic29mdHdhcmUgaXMgcmVkaXN0cmlidXRlZCAzIiwiaXMgcmVkaXN0cmlidXRlZCAzIGEiLCJyZWRpc3RyaWJ1dGVkIDMgYSBub3RlIiwiMyBhIG5vdGUgc3RhdGluZyIsImEgbm90ZSBzdGF0aW5nIHRoZSIsIm5vdGUgc3RhdGluZyB0aGUgY29uZGl0aW9ucyIsInN0YXRpbmcgdGhlIGNvbmRpdGlvbnMgb2YiLCJ0aGUgY29uZGl0aW9ucyBvZiBlZmZlY3RpdmUiLCJjb25kaXRpb25zIG9mIGVmZmVjdGl2ZSBhY2Nlc3MiLCJvZiBlZmZlY3RpdmUgYWNjZXNzIHRvIiwidGhlIG1vZGlmaWVkIHNvZnR3YXJlIGZvciIsIm1vZGlmaWVkIHNvZnR3YXJlIGZvciBhIiwidHJhbnNmZXIgNSAzIDMiLCI0IGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciIsImNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBsaWNlbnNlcyIsIndpdGggb3RoZXIgbGljZW5zZXMgdGhlIiwib3RoZXIgbGljZW5zZXMgdGhlIGxpY2Vuc2VlIiwibGljZW5zZXMgdGhlIGxpY2Vuc2VlIGNhbiIsImFuZCBvciBldXBsIGluIiwib3IgZXVwbCBpbiB0aGUiLCJldXBsIGluIHRoZSBtb2RpZmllZCIsImFuZCBvciBldXBsIHRoZSIsIm9yIGV1cGwgdGhlIGxpY2Vuc2VlIiwiZXVwbCB0aGUgbGljZW5zZWUgY2FuIiwiYW5kIG9yIGV1cGwgYW5kIiwib3IgZXVwbCBhbmQgZGlzdHJpYnV0ZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDZUNJTEwtQiBGUkVFIFNPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UIE5vdGljZVxuXG5UaGlzIEFncmVlbWVudCBpcyBhIEZyZWUgU29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgdGhhdCBpcyB0aGUgcmVzdWx0IG9mIGRpc2N1c3Npb25zIGJldHdlZW4gaXRzIGF1dGhvcnMgaW4gb3JkZXIgdG8gZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdHdvIG1haW4gcHJpbmNpcGxlcyBndWlkaW5nIGl0cyBkcmFmdGluZzpcblxuICAgKiBmaXJzdGx5LCBjb21wbGlhbmNlIHdpdGggdGhlIHByaW5jaXBsZXMgZ292ZXJuaW5nIHRoZSBkaXN0cmlidXRpb24gb2YgRnJlZSBTb2Z0d2FyZTogYWNjZXNzIHRvIHNvdXJjZSBjb2RlLCBicm9hZCByaWdodHMgZ3JhbnRlZCB0byB1c2VycyxcblxuICAgKiBzZWNvbmRseSwgdGhlIGVsZWN0aW9uIG9mIGEgZ292ZXJuaW5nIGxhdywgRnJlbmNoIGxhdywgd2l0aCB3aGljaCBpdCBpcyBjb25mb3JtYW50LCBib3RoIGFzIHJlZ2FyZHMgdGhlIGxhdyBvZiB0b3J0cyBhbmQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhdywgYW5kIHRoZSBwcm90ZWN0aW9uIHRoYXQgaXQgb2ZmZXJzIHRvIGJvdGggYXV0aG9ycyBhbmQgaG9sZGVycyBvZiB0aGUgZWNvbm9taWMgcmlnaHRzIG92ZXIgc29mdHdhcmUuXG5cblRoZSBhdXRob3JzIG9mIHRoZSBDZUNJTEzCuSBsaWNlbnNlIGFyZTpcblxuICAgXG5cbiAgIENvbW1pc3NhcmlhdCDDoCBsJ0VuZXJnaWUgQXRvbWlxdWUgLSBDRUEsIGEgcHVibGljIHNjaWVudGlmaWMsIHRlY2huaWNhbCBhbmQgaW5kdXN0cmlhbCByZXNlYXJjaCBlc3RhYmxpc2htZW50LCBoYXZpbmcgaXRzIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBhdCAyNSBydWUgTGVibGFuYywgaW1tZXVibGUgTGUgUG9uYW50IEQsIDc1MDE1IFBhcmlzLCBGcmFuY2UuXG5cbiAgIFxuXG4gICBDZW50cmUgTmF0aW9uYWwgZGUgbGEgUmVjaGVyY2hlIFNjaWVudGlmaXF1ZSAtIENOUlMsIGEgcHVibGljIHNjaWVudGlmaWMgYW5kIHRlY2hub2xvZ2ljYWwgZXN0YWJsaXNobWVudCwgaGF2aW5nIGl0cyBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MgYXQgMyBydWUgTWljaGVsLUFuZ2UsIDc1Nzk0IFBhcmlzIGNlZGV4IDE2LCBGcmFuY2UuXG5cbiAgIFxuXG4gICBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlIC0gSU5SSUEsIGEgcHVibGljIHNjaWVudGlmaWMgYW5kIHRlY2hub2xvZ2ljYWwgZXN0YWJsaXNobWVudCwgaGF2aW5nIGl0cyBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MgYXQgRG9tYWluZSBkZSBWb2x1Y2VhdSwgUm9jcXVlbmNvdXJ0LCBCUCAxMDUsIDc4MTUzIExlIENoZXNuYXkgY2VkZXgsIEZyYW5jZS5cblxuICAgUHJlYW1ibGUgVGhpcyBBZ3JlZW1lbnQgaXMgYW4gb3BlbiBzb3VyY2Ugc29mdHdhcmUgbGljZW5zZSBpbnRlbmRlZCB0byBnaXZlIHVzZXJzIHNpZ25pZmljYW50IGZyZWVkb20gdG8gbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIGxpY2Vuc2VkIGhlcmV1bmRlci5cblxuICAgVGhlIGV4ZXJjaXNpbmcgb2YgdGhpcyBmcmVlZG9tIGlzIGNvbmRpdGlvbmFsIHVwb24gYSBzdHJvbmcgb2JsaWdhdGlvbiBvZiBnaXZpbmcgY3JlZGl0cyBmb3IgZXZlcnlib2R5IHRoYXQgZGlzdHJpYnV0ZXMgYSBzb2Z0d2FyZSBpbmNvcnBvcmF0aW5nIGEgc29mdHdhcmUgcnVsZWQgYnkgdGhlIGN1cnJlbnQgbGljZW5zZSBzbyBhcyBhbGwgY29udHJpYnV0aW9ucyB0byBiZSBwcm9wZXJseSBpZGVudGlmaWVkIGFuZCBhY2tub3dsZWRnZWQuXG5cbiAgIEluIGNvbnNpZGVyYXRpb24gb2YgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBhbmQgdGhlIHJpZ2h0cyB0byBjb3B5LCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSBncmFudGVkIGJ5IHRoZSBsaWNlbnNlLCB1c2VycyBhcmUgcHJvdmlkZWQgb25seSB3aXRoIGEgbGltaXRlZCB3YXJyYW50eSBhbmQgdGhlIHNvZnR3YXJlJ3MgYXV0aG9yLCB0aGUgaG9sZGVyIG9mIHRoZSBlY29ub21pYyByaWdodHMsIGFuZCB0aGUgc3VjY2Vzc2l2ZSBsaWNlbnNvcnMgb25seSBoYXZlIGxpbWl0ZWQgbGlhYmlsaXR5LlxuXG4gICBJbiB0aGlzIHJlc3BlY3QsIHRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggbG9hZGluZywgdXNpbmcsIG1vZGlmeWluZyBhbmQvb3IgZGV2ZWxvcGluZyBvciByZXByb2R1Y2luZyB0aGUgc29mdHdhcmUgYnkgdGhlIHVzZXIgYXJlIGJyb3VnaHQgdG8gdGhlIHVzZXIncyBhdHRlbnRpb24sIGdpdmVuIGl0cyBGcmVlIFNvZnR3YXJlIHN0YXR1cywgd2hpY2ggbWF5IG1ha2UgaXQgY29tcGxpY2F0ZWQgdG8gdXNlLCB3aXRoIHRoZSByZXN1bHQgdGhhdCBpdHMgdXNlIGlzIHJlc2VydmVkIGZvciBkZXZlbG9wZXJzIGFuZCBleHBlcmllbmNlZCBwcm9mZXNzaW9uYWxzIGhhdmluZyBpbi1kZXB0aCBjb21wdXRlciBrbm93bGVkZ2UuIFVzZXJzIGFyZSB0aGVyZWZvcmUgZW5jb3VyYWdlZCB0byBsb2FkIGFuZCB0ZXN0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgc29mdHdhcmUgYXMgcmVnYXJkcyB0aGVpciByZXF1aXJlbWVudHMgaW4gY29uZGl0aW9ucyBlbmFibGluZyB0aGUgc2VjdXJpdHkgb2YgdGhlaXIgc3lzdGVtcyBhbmQvb3IgZGF0YSB0byBiZSBlbnN1cmVkIGFuZCwgbW9yZSBnZW5lcmFsbHksIHRvIHVzZSBhbmQgb3BlcmF0ZSBpdCBpbiB0aGUgc2FtZSBjb25kaXRpb25zIG9mIHNlY3VyaXR5LiBUaGlzIEFncmVlbWVudCBtYXkgYmUgZnJlZWx5IHJlcHJvZHVjZWQgYW5kIHB1Ymxpc2hlZCwgcHJvdmlkZWQgaXQgaXMgbm90IGFsdGVyZWQsIGFuZCB0aGF0IG5vIHByb3Zpc2lvbnMgYXJlIGVpdGhlciBhZGRlZCBvciByZW1vdmVkIGhlcmVmcm9tLlxuXG4gICBUaGlzIEFncmVlbWVudCBtYXkgYXBwbHkgdG8gYW55IG9yIGFsbCBzb2Z0d2FyZSBmb3Igd2hpY2ggdGhlIGhvbGRlciBvZiB0aGUgZWNvbm9taWMgcmlnaHRzIGRlY2lkZXMgdG8gc3VibWl0IHRoZSB1c2UgdGhlcmVvZiB0byBpdHMgcHJvdmlzaW9ucy5cblxuICAgQXJ0aWNsZSAxIC0gREVGSU5JVElPTlNcblxuICAgRm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgQWdyZWVtZW50LCB3aGVuIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbnMgY29tbWVuY2Ugd2l0aCBhIGNhcGl0YWwgbGV0dGVyLCB0aGV5IHNoYWxsIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOlxuXG4gICAgICBcblxuICAgICAgQWdyZWVtZW50OiBtZWFucyB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgaXRzIHBvc3NpYmxlIHN1YnNlcXVlbnQgdmVyc2lvbnMgYW5kIGFubmV4ZXMuXG5cbiAgICAgIFxuXG4gICAgICBTb2Z0d2FyZTogbWVhbnMgdGhlIHNvZnR3YXJlIGluIGl0cyBPYmplY3QgQ29kZSBhbmQvb3IgU291cmNlIENvZGUgZm9ybSBhbmQsIHdoZXJlIGFwcGxpY2FibGUsIGl0cyBkb2N1bWVudGF0aW9uLCBcImFzIGlzXCIgd2hlbiB0aGUgTGljZW5zZWUgYWNjZXB0cyB0aGUgQWdyZWVtZW50LlxuXG4gICAgICBcblxuICAgICAgSW5pdGlhbCBTb2Z0d2FyZTogbWVhbnMgdGhlIFNvZnR3YXJlIGluIGl0cyBTb3VyY2UgQ29kZSBhbmQgcG9zc2libHkgaXRzIE9iamVjdCBDb2RlIGZvcm0gYW5kLCB3aGVyZSBhcHBsaWNhYmxlLCBpdHMgZG9jdW1lbnRhdGlvbiwgXCJhcyBpc1wiIHdoZW4gaXQgaXMgZmlyc3QgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBBZ3JlZW1lbnQuXG5cbiAgICAgIFxuXG4gICAgICBNb2RpZmllZCBTb2Z0d2FyZTogbWVhbnMgdGhlIFNvZnR3YXJlIG1vZGlmaWVkIGJ5IGF0IGxlYXN0IG9uZSBDb250cmlidXRpb24uXG5cbiAgICAgIFxuXG4gICAgICBTb3VyY2UgQ29kZTogbWVhbnMgYWxsIHRoZSBTb2Z0d2FyZSdzIGluc3RydWN0aW9ucyBhbmQgcHJvZ3JhbSBsaW5lcyB0byB3aGljaCBhY2Nlc3MgaXMgcmVxdWlyZWQgc28gYXMgdG8gbW9kaWZ5IHRoZSBTb2Z0d2FyZS5cblxuICAgICAgXG5cbiAgICAgIE9iamVjdCBDb2RlOiBtZWFucyB0aGUgYmluYXJ5IGZpbGVzIG9yaWdpbmF0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBTb3VyY2UgQ29kZS5cblxuICAgICAgXG5cbiAgICAgIEhvbGRlcjogbWVhbnMgdGhlIGhvbGRlcihzKSBvZiB0aGUgZWNvbm9taWMgcmlnaHRzIG92ZXIgdGhlIEluaXRpYWwgU29mdHdhcmUuXG5cbiAgICAgIFxuXG4gICAgICBMaWNlbnNlZTogbWVhbnMgdGhlIFNvZnR3YXJlIHVzZXIocykgaGF2aW5nIGFjY2VwdGVkIHRoZSBBZ3JlZW1lbnQuXG5cbiAgICAgIFxuXG4gICAgICBDb250cmlidXRvcjogbWVhbnMgYSBMaWNlbnNlZSBoYXZpbmcgbWFkZSBhdCBsZWFzdCBvbmUgQ29udHJpYnV0aW9uLlxuXG4gICAgICBcblxuICAgICAgTGljZW5zb3I6IG1lYW5zIHRoZSBIb2xkZXIsIG9yIGFueSBvdGhlciBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSwgd2hvIGRpc3RyaWJ1dGVzIHRoZSBTb2Z0d2FyZSB1bmRlciB0aGUgQWdyZWVtZW50LlxuXG4gICAgICBcblxuICAgICAgQ29udHJpYnV0aW9uOiBtZWFucyBhbnkgb3IgYWxsIG1vZGlmaWNhdGlvbnMsIGNvcnJlY3Rpb25zLCB0cmFuc2xhdGlvbnMsIGFkYXB0YXRpb25zIGFuZC9vciBuZXcgZnVuY3Rpb25zIGludGVncmF0ZWQgaW50byB0aGUgU29mdHdhcmUgYnkgYW55IG9yIGFsbCBDb250cmlidXRvcnMsIGFzIHdlbGwgYXMgYW55IG9yIGFsbCBJbnRlcm5hbCBNb2R1bGVzLlxuXG4gICAgICBcblxuICAgICAgTW9kdWxlOiBtZWFucyBhIHNldCBvZiBzb3VyY2VzIGZpbGVzIGluY2x1ZGluZyB0aGVpciBkb2N1bWVudGF0aW9uIHRoYXQgZW5hYmxlcyBzdXBwbGVtZW50YXJ5IGZ1bmN0aW9ucyBvciBzZXJ2aWNlcyBpbiBhZGRpdGlvbiB0byB0aG9zZSBvZmZlcmVkIGJ5IHRoZSBTb2Z0d2FyZS5cblxuICAgICAgXG5cbiAgICAgIEV4dGVybmFsIE1vZHVsZTogbWVhbnMgYW55IG9yIGFsbCBNb2R1bGVzLCBub3QgZGVyaXZlZCBmcm9tIHRoZSBTb2Z0d2FyZSwgc28gdGhhdCB0aGlzIE1vZHVsZSBhbmQgdGhlIFNvZnR3YXJlIHJ1biBpbiBzZXBhcmF0ZSBhZGRyZXNzIHNwYWNlcywgd2l0aCBvbmUgY2FsbGluZyB0aGUgb3RoZXIgd2hlbiB0aGV5IGFyZSBydW4uXG5cbiAgICAgIFxuXG4gICAgICBJbnRlcm5hbCBNb2R1bGU6IG1lYW5zIGFueSBvciBhbGwgTW9kdWxlLCBjb25uZWN0ZWQgdG8gdGhlIFNvZnR3YXJlIHNvIHRoYXQgdGhleSBib3RoIGV4ZWN1dGUgaW4gdGhlIHNhbWUgYWRkcmVzcyBzcGFjZS5cblxuICAgICAgXG5cbiAgICAgIFBhcnRpZXM6IG1lYW4gYm90aCB0aGUgTGljZW5zZWUgYW5kIHRoZSBMaWNlbnNvci5cblxuICAgVGhlc2UgZXhwcmVzc2lvbnMgbWF5IGJlIHVzZWQgYm90aCBpbiBzaW5ndWxhciBhbmQgcGx1cmFsIGZvcm0uXG5cbiAgIEFydGljbGUgMiAtIFBVUlBPU0VcblxuICAgVGhlIHB1cnBvc2Ugb2YgdGhlIEFncmVlbWVudCBpcyB0aGUgZ3JhbnQgYnkgdGhlIExpY2Vuc29yIHRvIHRoZSBMaWNlbnNlZSBvZiBhIG5vbi1leGNsdXNpdmUsIHRyYW5zZmVyYWJsZSBhbmQgd29ybGR3aWRlIGxpY2Vuc2UgZm9yIHRoZSBTb2Z0d2FyZSBhcyBzZXQgZm9ydGggaW4gQXJ0aWNsZSA1IGhlcmVpbmFmdGVyIGZvciB0aGUgd2hvbGUgdGVybSBvZiB0aGUgcHJvdGVjdGlvbiBncmFudGVkIGJ5IHRoZSByaWdodHMgb3ZlciBzYWlkIFNvZnR3YXJlLlxuXG4gICBBcnRpY2xlIDMgLSBBQ0NFUFRBTkNFXG5cbiAgICAgIDMuMSBUaGUgTGljZW5zZWUgc2hhbGwgYmUgZGVlbWVkIGFzIGhhdmluZyBhY2NlcHRlZCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgdXBvbiB0aGUgb2NjdXJyZW5jZSBvZiB0aGUgZmlyc3Qgb2YgdGhlIGZvbGxvd2luZyBldmVudHM6XG5cbiAgICAgICAgIChpKSBsb2FkaW5nIHRoZSBTb2Z0d2FyZSBieSBhbnkgb3IgYWxsIG1lYW5zLCBub3RhYmx5LCBieSBkb3dubG9hZGluZyBmcm9tIGEgcmVtb3RlIHNlcnZlciwgb3IgYnkgbG9hZGluZyBmcm9tIGEgcGh5c2ljYWwgbWVkaXVtO1xuXG4gICAgICAgICAoaWkpIHRoZSBmaXJzdCB0aW1lIHRoZSBMaWNlbnNlZSBleGVyY2lzZXMgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuXG5cbiAgICAgIDMuMiBPbmUgY29weSBvZiB0aGUgQWdyZWVtZW50LCBjb250YWluaW5nIGEgbm90aWNlIHJlbGF0aW5nIHRvIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIFNvZnR3YXJlLCB0byB0aGUgbGltaXRlZCB3YXJyYW50eSwgYW5kIHRvIHRoZSBmYWN0IHRoYXQgaXRzIHVzZSBpcyByZXN0cmljdGVkIHRvIGV4cGVyaWVuY2VkIHVzZXJzIGhhcyBiZWVuIHByb3ZpZGVkIHRvIHRoZSBMaWNlbnNlZSBwcmlvciB0byBpdHMgYWNjZXB0YW5jZSBhcyBzZXQgZm9ydGggaW4gQXJ0aWNsZSAzLjEgaGVyZWluYWJvdmUsIGFuZCB0aGUgTGljZW5zZWUgaGVyZWJ5IGFja25vd2xlZGdlcyB0aGF0IGl0IGhhcyByZWFkIGFuZCB1bmRlcnN0b29kIGl0LlxuXG4gICBBcnRpY2xlIDQgLSBFRkZFQ1RJVkUgREFURSBBTkQgVEVSTVxuXG4gICAgICA0LjEgRUZGRUNUSVZFIERBVEVcblxuICAgICAgVGhlIEFncmVlbWVudCBzaGFsbCBiZWNvbWUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIHdoZW4gaXQgaXMgYWNjZXB0ZWQgYnkgdGhlIExpY2Vuc2VlIGFzIHNldCBmb3J0aCBpbiBBcnRpY2xlIDMuMS5cblxuICAgICAgNC4yIFRFUk1cblxuICAgICAgVGhlIEFncmVlbWVudCBzaGFsbCByZW1haW4gaW4gZm9yY2UgZm9yIHRoZSBlbnRpcmUgbGVnYWwgdGVybSBvZiBwcm90ZWN0aW9uIG9mIHRoZSBlY29ub21pYyByaWdodHMgb3ZlciB0aGUgU29mdHdhcmUuXG5cbiAgIEFydGljbGUgNSAtIFNDT1BFIE9GIFJJR0hUUyBHUkFOVEVEXG5cbiAgIFRoZSBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIHRvIHRoZSBMaWNlbnNlZSwgd2hvIGFjY2VwdHMsIHRoZSBmb2xsb3dpbmcgcmlnaHRzIG92ZXIgdGhlIFNvZnR3YXJlIGZvciBhbnkgb3IgYWxsIHVzZSwgYW5kIGZvciB0aGUgdGVybSBvZiB0aGUgQWdyZWVtZW50LCBvbiB0aGUgYmFzaXMgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBoZXJlaW5hZnRlci5cblxuICAgQmVzaWRlcywgaWYgdGhlIExpY2Vuc29yIG93bnMgb3IgY29tZXMgdG8gb3duIG9uZSBvciBtb3JlIHBhdGVudHMgcHJvdGVjdGluZyBhbGwgb3IgcGFydCBvZiB0aGUgZnVuY3Rpb25zIG9mIHRoZSBTb2Z0d2FyZSBvciBvZiBpdHMgY29tcG9uZW50cywgdGhlIExpY2Vuc29yIHVuZGVydGFrZXMgbm90IHRvIGVuZm9yY2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoZXNlIHBhdGVudHMgYWdhaW5zdCBzdWNjZXNzaXZlIExpY2Vuc2VlcyB1c2luZywgZXhwbG9pdGluZyBvciBtb2RpZnlpbmcgdGhlIFNvZnR3YXJlLiBJZiB0aGVzZSBwYXRlbnRzIGFyZSB0cmFuc2ZlcnJlZCwgdGhlIExpY2Vuc29yIHVuZGVydGFrZXMgdG8gaGF2ZSB0aGUgdHJhbnNmZXJlZXMgc3Vic2NyaWJlIHRvIHRoZSBvYmxpZ2F0aW9ucyBzZXQgZm9ydGggaW4gdGhpcyBwYXJhZ3JhcGguXG5cbiAgICAgIDUuMSBSSUdIVCBPRiBVU0VcblxuICAgICAgVGhlIExpY2Vuc2VlIGlzIGF1dGhvcml6ZWQgdG8gdXNlIHRoZSBTb2Z0d2FyZSwgd2l0aG91dCBhbnkgbGltaXRhdGlvbiBhcyB0byBpdHMgZmllbGRzIG9mIGFwcGxpY2F0aW9uLCB3aXRoIGl0IGJlaW5nIGhlcmVpbmFmdGVyIHNwZWNpZmllZCB0aGF0IHRoaXMgY29tcHJpc2VzOlxuXG4gICAgICAgICAxLiBwZXJtYW5lbnQgb3IgdGVtcG9yYXJ5IHJlcHJvZHVjdGlvbiBvZiBhbGwgb3IgcGFydCBvZiB0aGUgU29mdHdhcmUgYnkgYW55IG9yIGFsbCBtZWFucyBhbmQgaW4gYW55IG9yIGFsbCBmb3JtLlxuXG4gICAgICAgICAyLiBsb2FkaW5nLCBkaXNwbGF5aW5nLCBydW5uaW5nLCBvciBzdG9yaW5nIHRoZSBTb2Z0d2FyZSBvbiBhbnkgb3IgYWxsIG1lZGl1bS5cblxuICAgICAgICAgMy4gZW50aXRsZW1lbnQgdG8gb2JzZXJ2ZSwgc3R1ZHkgb3IgdGVzdCBpdHMgb3BlcmF0aW9uIHNvIGFzIHRvIGRldGVybWluZSB0aGUgaWRlYXMgYW5kIHByaW5jaXBsZXMgYmVoaW5kIGFueSBvciBhbGwgY29uc3RpdHVlbnQgZWxlbWVudHMgb2Ygc2FpZCBTb2Z0d2FyZS4gVGhpcyBzaGFsbCBhcHBseSB3aGVuIHRoZSBMaWNlbnNlZSBjYXJyaWVzIG91dCBhbnkgb3IgYWxsIGxvYWRpbmcsIGRpc3BsYXlpbmcsIHJ1bm5pbmcsIHRyYW5zbWlzc2lvbiBvciBzdG9yYWdlIG9wZXJhdGlvbiBhcyByZWdhcmRzIHRoZSBTb2Z0d2FyZSwgdGhhdCBpdCBpcyBlbnRpdGxlZCB0byBjYXJyeSBvdXQgaGVyZXVuZGVyLlxuXG4gICAgICA1LjIgRU5USVRMRU1FTlQgVE8gTUFLRSBDT05UUklCVVRJT05TXG5cbiAgICAgIFRoZSByaWdodCB0byBtYWtlIENvbnRyaWJ1dGlvbnMgaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIHRyYW5zbGF0ZSwgYWRhcHQsIGFycmFuZ2UsIG9yIG1ha2UgYW55IG9yIGFsbCBtb2RpZmljYXRpb25zIHRvIHRoZSBTb2Z0d2FyZSwgYW5kIHRoZSByaWdodCB0byByZXByb2R1Y2UgdGhlIHJlc3VsdGluZyBzb2Z0d2FyZS5cblxuICAgICAgVGhlIExpY2Vuc2VlIGlzIGF1dGhvcml6ZWQgdG8gbWFrZSBhbnkgb3IgYWxsIENvbnRyaWJ1dGlvbnMgdG8gdGhlIFNvZnR3YXJlIHByb3ZpZGVkIHRoYXQgaXQgaW5jbHVkZXMgYW4gZXhwbGljaXQgbm90aWNlIHRoYXQgaXQgaXMgdGhlIGF1dGhvciBvZiBzYWlkIENvbnRyaWJ1dGlvbiBhbmQgaW5kaWNhdGVzIHRoZSBkYXRlIG9mIHRoZSBjcmVhdGlvbiB0aGVyZW9mLlxuXG4gICAgICA1LjMgUklHSFQgT0YgRElTVFJJQlVUSU9OXG5cbiAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSByaWdodCBvZiBkaXN0cmlidXRpb24gaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2gsIHRyYW5zbWl0IGFuZCBjb21tdW5pY2F0ZSB0aGUgU29mdHdhcmUgdG8gdGhlIGdlbmVyYWwgcHVibGljIG9uIGFueSBvciBhbGwgbWVkaXVtLCBhbmQgYnkgYW55IG9yIGFsbCBtZWFucywgYW5kIHRoZSByaWdodCB0byBtYXJrZXQsIGVpdGhlciBpbiBjb25zaWRlcmF0aW9uIG9mIGEgZmVlLCBvciBmcmVlIG9mIGNoYXJnZSwgb25lIG9yIG1vcmUgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBieSBhbnkgbWVhbnMuXG5cbiAgICAgIFRoZSBMaWNlbnNlZSBpcyBmdXJ0aGVyIGF1dGhvcml6ZWQgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIG1vZGlmaWVkIG9yIHVubW9kaWZpZWQgU29mdHdhcmUgdG8gdGhpcmQgcGFydGllcyBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBoZXJlaW5hZnRlci5cblxuICAgICAgICAgNS4zLjEuIERJU1RSSUJVVElPTiBPRiBTT0ZUV0FSRSBXSVRIT1VUIE1PRElGSUNBVElPTlxuXG4gICAgICAgICBUaGUgTGljZW5zZWUgaXMgYXV0aG9yaXplZCB0byBkaXN0cmlidXRlIHRydWUgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBpbiBTb3VyY2UgQ29kZSBvciBPYmplY3QgQ29kZSBmb3JtLCBwcm92aWRlZCB0aGF0IHNhaWQgZGlzdHJpYnV0aW9uIGNvbXBsaWVzIHdpdGggYWxsIHRoZSBwcm92aXNpb25zIG9mIHRoZSBBZ3JlZW1lbnQgYW5kIGlzIGFjY29tcGFuaWVkIGJ5OlxuXG4gICAgICAgICAgICAxLiBhIGNvcHkgb2YgdGhlIEFncmVlbWVudCxcblxuICAgICAgICAgICAgMi4gYSBub3RpY2UgcmVsYXRpbmcgdG8gdGhlIGxpbWl0YXRpb24gb2YgYm90aCB0aGUgTGljZW5zb3IncyB3YXJyYW50eSBhbmQgbGlhYmlsaXR5IGFzIHNldCBmb3J0aCBpbiBBcnRpY2xlcyA4IGFuZCA5LFxuXG4gICAgICAgICBhbmQgdGhhdCwgaW4gdGhlIGV2ZW50IHRoYXQgb25seSB0aGUgT2JqZWN0IENvZGUgb2YgdGhlIFNvZnR3YXJlIGlzIHJlZGlzdHJpYnV0ZWQsIHRoZSBMaWNlbnNlZSBhbGxvd3MgZWZmZWN0aXZlIGFjY2VzcyB0byB0aGUgZnVsbCBTb3VyY2UgQ29kZSBvZiB0aGUgU29mdHdhcmUgYXQgYSBtaW5pbXVtIGR1cmluZyB0aGUgZW50aXJlIHBlcmlvZCBvZiBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSwgaXQgYmVpbmcgdW5kZXJzdG9vZCB0aGF0IHRoZSBhZGRpdGlvbmFsIGNvc3Qgb2YgYWNxdWlyaW5nIHRoZSBTb3VyY2UgQ29kZSBzaGFsbCBub3QgZXhjZWVkIHRoZSBjb3N0IG9mIHRyYW5zZmVycmluZyB0aGUgZGF0YS5cblxuICAgICAgICAgNS4zLjIuIERJU1RSSUJVVElPTiBPRiBNT0RJRklFRCBTT0ZUV0FSRVxuXG4gICAgICAgICBJZiB0aGUgTGljZW5zZWUgbWFrZXMgYW55IENvbnRyaWJ1dGlvbiB0byB0aGUgU29mdHdhcmUsIHRoZSByZXN1bHRpbmcgTW9kaWZpZWQgU29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGEgbGljZW5zZSBhZ3JlZW1lbnQgb3RoZXIgdGhhbiB0aGlzIEFncmVlbWVudCBzdWJqZWN0IHRvIGNvbXBsaWFuY2Ugd2l0aCB0aGUgcHJvdmlzaW9ucyBvZiBBcnRpY2xlIDUuMy40LlxuXG4gICAgICAgICA1LjMuMy4gRElTVFJJQlVUSU9OIE9GIEVYVEVSTkFMIE1PRFVMRVNcblxuICAgICAgICAgV2hlbiB0aGUgTGljZW5zZWUgaGFzIGRldmVsb3BlZCBhbiBFeHRlcm5hbCBNb2R1bGUsIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBkbyBub3QgYXBwbHkgdG8gc2FpZCBFeHRlcm5hbCBNb2R1bGUsIHRoYXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGEgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQuXG5cbiAgICAgICAgIDUuMy40LiBDUkVESVRTXG5cbiAgICAgICAgIEFueSBMaWNlbnNlZSB3aG8gbWF5IGRpc3RyaWJ1dGUgYSBNb2RpZmllZCBTb2Z0d2FyZSBoZXJlYnkgZXhwcmVzc2x5IGFncmVlcyB0bzpcblxuICAgICAgICAgICAgMS4gaW5kaWNhdGUgaW4gdGhlIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiB0aGF0IGl0IGlzIGJhc2VkIG9uIHRoZSBTb2Z0d2FyZSBsaWNlbnNlZCBoZXJldW5kZXIsIGFuZCByZXByb2R1Y2UgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBub3RpY2UgZm9yIHRoZSBTb2Z0d2FyZSxcblxuICAgICAgICAgICAgMi4gZW5zdXJlIHRoYXQgd3JpdHRlbiBpbmRpY2F0aW9ucyBvZiB0aGUgU29mdHdhcmUgaW50ZW5kZWQgdXNlLCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbm90aWNlIGFuZCBsaWNlbnNlIGhlcmV1bmRlciBhcmUgaW5jbHVkZWQgaW4gZWFzaWx5IGFjY2Vzc2libGUgZm9ybWF0IGZyb20gdGhlIE1vZGlmaWVkIFNvZnR3YXJlIGludGVyZmFjZSxcblxuICAgICAgICAgICAgMy4gbWVudGlvbiwgb24gYSBmcmVlbHkgYWNjZXNzaWJsZSB3ZWJzaXRlIGRlc2NyaWJpbmcgdGhlIE1vZGlmaWVkIFNvZnR3YXJlLCBhdCBsZWFzdCB0aHJvdWdob3V0IHRoZSBkaXN0cmlidXRpb24gdGVybSB0aGVyZW9mLCB0aGF0IGl0IGlzIGJhc2VkIG9uIHRoZSBTb2Z0d2FyZSBsaWNlbnNlZCBoZXJldW5kZXIsIGFuZCByZXByb2R1Y2UgdGhlIFNvZnR3YXJlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBub3RpY2UsXG5cbiAgICAgICAgICAgIDQuIHdoZXJlIGl0IGlzIGRpc3RyaWJ1dGVkIHRvIGEgdGhpcmQgcGFydHkgdGhhdCBtYXkgZGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFNvZnR3YXJlIHdpdGhvdXQgaGF2aW5nIHRvIG1ha2UgaXRzIHNvdXJjZSBjb2RlIGF2YWlsYWJsZSwgbWFrZSBpdHMgYmVzdCBlZmZvcnRzIHRvIGVuc3VyZSB0aGF0IHNhaWQgdGhpcmQgcGFydHkgYWdyZWVzIHRvIGNvbXBseSB3aXRoIHRoZSBvYmxpZ2F0aW9ucyBzZXQgZm9ydGggaW4gdGhpcyBBcnRpY2xlIC5cblxuICAgICAgICAgSWYgdGhlIFNvZnR3YXJlLCB3aGV0aGVyIG9yIG5vdCBtb2RpZmllZCwgaXMgZGlzdHJpYnV0ZWQgd2l0aCBhbiBFeHRlcm5hbCBNb2R1bGUgZGVzaWduZWQgZm9yIHVzZSBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFNvZnR3YXJlLCB0aGUgTGljZW5zZWUgc2hhbGwgc3VibWl0IHNhaWQgRXh0ZXJuYWwgTW9kdWxlIHRvIHRoZSBmb3JlZ29pbmcgb2JsaWdhdGlvbnMuXG5cbiAgICAgICAgIDUuMy41LiBDT01QQVRJQklMSVRZIFdJVEggVEhFIENlQ0lMTCBBTkQgQ2VDSUxMLUMgTElDRU5TRVNcblxuICAgICAgICAgV2hlcmUgYSBNb2RpZmllZCBTb2Z0d2FyZSBjb250YWlucyBhIENvbnRyaWJ1dGlvbiBzdWJqZWN0IHRvIHRoZSBDZUNJTEwgbGljZW5zZSwgdGhlIHByb3Zpc2lvbnMgc2V0IGZvcnRoIGluIEFydGljbGUgNS4zLjQgc2hhbGwgYmUgb3B0aW9uYWwuXG5cbiAgICAgICAgIEEgTW9kaWZpZWQgU29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBDZUNJTEwtQyBsaWNlbnNlLiBJbiBzdWNoIGEgY2FzZSB0aGUgcHJvdmlzaW9ucyBzZXQgZm9ydGggaW4gQXJ0aWNsZSA1LjMuNCBzaGFsbCBiZSBvcHRpb25hbC5cblxuICAgQXJ0aWNsZSA2IC0gSU5URUxMRUNUVUFMIFBST1BFUlRZXG5cbiAgICAgIDYuMSBPVkVSIFRIRSBJTklUSUFMIFNPRlRXQVJFXG5cbiAgICAgIFRoZSBIb2xkZXIgb3ducyB0aGUgZWNvbm9taWMgcmlnaHRzIG92ZXIgdGhlIEluaXRpYWwgU29mdHdhcmUuIEFueSBvciBhbGwgdXNlIG9mIHRoZSBJbml0aWFsIFNvZnR3YXJlIGlzIHN1YmplY3QgdG8gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUgSG9sZGVyIGhhcyBlbGVjdGVkIHRvIGRpc3RyaWJ1dGUgaXRzIHdvcmsgYW5kIG5vIG9uZSBzaGFsbCBiZSBlbnRpdGxlZCB0byBtb2RpZnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHNhaWQgSW5pdGlhbCBTb2Z0d2FyZS5cblxuICAgICAgVGhlIEhvbGRlciB1bmRlcnRha2VzIHRoYXQgdGhlIEluaXRpYWwgU29mdHdhcmUgd2lsbCByZW1haW4gcnVsZWQgYXQgbGVhc3QgYnkgdGhpcyBBZ3JlZW1lbnQsIGZvciB0aGUgZHVyYXRpb24gc2V0IGZvcnRoIGluIEFydGljbGUgNC4yLlxuXG4gICAgICA2LjIgT1ZFUiBUSEUgQ09OVFJJQlVUSU9OU1xuXG4gICAgICBUaGUgTGljZW5zZWUgd2hvIGRldmVsb3BzIGEgQ29udHJpYnV0aW9uIGlzIHRoZSBvd25lciBvZiB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdmVyIHRoaXMgQ29udHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgYXBwbGljYWJsZSBsYXcuXG5cbiAgICAgIDYuMyBPVkVSIFRIRSBFWFRFUk5BTCBNT0RVTEVTXG5cbiAgICAgIFRoZSBMaWNlbnNlZSB3aG8gZGV2ZWxvcHMgYW4gRXh0ZXJuYWwgTW9kdWxlIGlzIHRoZSBvd25lciBvZiB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdmVyIHRoaXMgRXh0ZXJuYWwgTW9kdWxlIGFzIGRlZmluZWQgYnkgYXBwbGljYWJsZSBsYXcgYW5kIGlzIGZyZWUgdG8gY2hvb3NlIHRoZSB0eXBlIG9mIGFncmVlbWVudCB0aGF0IHNoYWxsIGdvdmVybiBpdHMgZGlzdHJpYnV0aW9uLlxuXG4gICAgICA2LjQgSk9JTlQgUFJPVklTSU9OU1xuXG4gICAgICBUaGUgTGljZW5zZWUgZXhwcmVzc2x5IHVuZGVydGFrZXM6XG5cbiAgICAgICAgIDEuIG5vdCB0byByZW1vdmUsIG9yIG1vZGlmeSwgaW4gYW55IG1hbm5lciwgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBub3RpY2VzIGF0dGFjaGVkIHRvIHRoZSBTb2Z0d2FyZTtcblxuICAgICAgICAgMi4gdG8gcmVwcm9kdWNlIHNhaWQgbm90aWNlcywgaW4gYW4gaWRlbnRpY2FsIG1hbm5lciwgaW4gdGhlIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgbW9kaWZpZWQgb3Igbm90LlxuXG4gICAgICBUaGUgTGljZW5zZWUgdW5kZXJ0YWtlcyBub3QgdG8gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZSB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiB0aGUgSG9sZGVyIGFuZC9vciBDb250cmlidXRvcnMgb24gdGhlIFNvZnR3YXJlIGFuZCB0byB0YWtlLCB3aGVyZSBhcHBsaWNhYmxlLCB2aXMtw6AtdmlzIGl0cyBzdGFmZiwgYW55IGFuZCBhbGwgbWVhc3VyZXMgcmVxdWlyZWQgdG8gZW5zdXJlIHJlc3BlY3Qgb2Ygc2FpZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIHRoZSBIb2xkZXIgYW5kL29yIENvbnRyaWJ1dG9ycy5cblxuICAgQXJ0aWNsZSA3IC0gUkVMQVRFRCBTRVJWSUNFU1xuXG4gICAgICA3LjEgVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBzaGFsbCB0aGUgQWdyZWVtZW50IG9ibGlnZSB0aGUgTGljZW5zb3IgdG8gcHJvdmlkZSB0ZWNobmljYWwgYXNzaXN0YW5jZSBvciBtYWludGVuYW5jZSBzZXJ2aWNlcyBmb3IgdGhlIFNvZnR3YXJlLlxuXG4gICAgICBIb3dldmVyLCB0aGUgTGljZW5zb3IgaXMgZW50aXRsZWQgdG8gb2ZmZXIgdGhpcyB0eXBlIG9mIHNlcnZpY2VzLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Ygc3VjaCB0ZWNobmljYWwgYXNzaXN0YW5jZSwgYW5kL29yIHN1Y2ggbWFpbnRlbmFuY2UsIHNoYWxsIGJlIHNldCBmb3J0aCBpbiBhIHNlcGFyYXRlIGluc3RydW1lbnQuIE9ubHkgdGhlIExpY2Vuc29yIG9mZmVyaW5nIHNhaWQgbWFpbnRlbmFuY2UgYW5kL29yIHRlY2huaWNhbCBhc3Npc3RhbmNlIHNlcnZpY2VzIHNoYWxsIGluY3VyIGxpYWJpbGl0eSB0aGVyZWZvci5cblxuICAgICAgNy4yIFNpbWlsYXJseSwgYW55IExpY2Vuc29yIGlzIGVudGl0bGVkIHRvIG9mZmVyIHRvIGl0cyBsaWNlbnNlZXMsIHVuZGVyIGl0cyBzb2xlIHJlc3BvbnNpYmlsaXR5LCBhIHdhcnJhbnR5LCB0aGF0IHNoYWxsIG9ubHkgYmUgYmluZGluZyB1cG9uIGl0c2VsZiwgZm9yIHRoZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgYW5kL29yIHRoZSBNb2RpZmllZCBTb2Z0d2FyZSwgdW5kZXIgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBpdCBpcyBmcmVlIHRvIGRlY2lkZS4gU2FpZCB3YXJyYW50eSwgYW5kIHRoZSBmaW5hbmNpYWwgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgaXRzIGFwcGxpY2F0aW9uLCBzaGFsbCBiZSBzdWJqZWN0IG9mIGEgc2VwYXJhdGUgaW5zdHJ1bWVudCBleGVjdXRlZCBiZXR3ZWVuIHRoZSBMaWNlbnNvciBhbmQgdGhlIExpY2Vuc2VlLlxuXG4gICBBcnRpY2xlIDggLSBMSUFCSUxJVFlcblxuICAgICAgOC4xIFN1YmplY3QgdG8gdGhlIHByb3Zpc2lvbnMgb2YgQXJ0aWNsZSA4LjIsIHRoZSBMaWNlbnNlZSBzaGFsbCBiZSBlbnRpdGxlZCB0byBjbGFpbSBjb21wZW5zYXRpb24gZm9yIGFueSBkaXJlY3QgbG9zcyBpdCBtYXkgaGF2ZSBzdWZmZXJlZCBmcm9tIHRoZSBTb2Z0d2FyZSBhcyBhIHJlc3VsdCBvZiBhIGZhdWx0IG9uIHRoZSBwYXJ0IG9mIHRoZSByZWxldmFudCBMaWNlbnNvciwgc3ViamVjdCB0byBwcm92aWRpbmcgZXZpZGVuY2UgdGhlcmVvZi5cblxuICAgICAgOC4yIFRoZSBMaWNlbnNvcidzIGxpYWJpbGl0eSBpcyBsaW1pdGVkIHRvIHRoZSBjb21taXRtZW50cyBtYWRlIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBzaGFsbCBub3QgYmUgaW5jdXJyZWQgYXMgYSByZXN1bHQgb2YgaW4gcGFydGljdWxhcjogKGkpIGxvc3MgZHVlIHRoZSBMaWNlbnNlZSdzIHRvdGFsIG9yIHBhcnRpYWwgZmFpbHVyZSB0byBmdWxmaWxsIGl0cyBvYmxpZ2F0aW9ucywgKGlpKSBkaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBsb3NzIHRoYXQgaXMgc3VmZmVyZWQgYnkgdGhlIExpY2Vuc2VlIGR1ZSB0byB0aGUgdXNlIG9yIHBlcmZvcm1hbmNlIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIChpaWkpIG1vcmUgZ2VuZXJhbGx5LCBhbnkgY29uc2VxdWVudGlhbCBsb3NzLiBJbiBwYXJ0aWN1bGFyIHRoZSBQYXJ0aWVzIGV4cHJlc3NseSBhZ3JlZSB0aGF0IGFueSBvciBhbGwgcGVjdW5pYXJ5IG9yIGJ1c2luZXNzIGxvc3MgKGkuZS4gbG9zcyBvZiBkYXRhLCBsb3NzIG9mIHByb2ZpdHMsIG9wZXJhdGluZyBsb3NzLCBsb3NzIG9mIGN1c3RvbWVycyBvciBvcmRlcnMsIG9wcG9ydHVuaXR5IGNvc3QsIGFueSBkaXN0dXJiYW5jZSB0byBidXNpbmVzcyBhY3Rpdml0aWVzKSBvciBhbnkgb3IgYWxsIGxlZ2FsIHByb2NlZWRpbmdzIGluc3RpdHV0ZWQgYWdhaW5zdCB0aGUgTGljZW5zZWUgYnkgYSB0aGlyZCBwYXJ0eSwgc2hhbGwgY29uc3RpdHV0ZSBjb25zZXF1ZW50aWFsIGxvc3MgYW5kIHNoYWxsIG5vdCBwcm92aWRlIGVudGl0bGVtZW50IHRvIGFueSBvciBhbGwgY29tcGVuc2F0aW9uIGZyb20gdGhlIExpY2Vuc29yLlxuXG4gICBBcnRpY2xlIDkgLSBXQVJSQU5UWVxuXG4gICAgICA5LjEgVGhlIExpY2Vuc2VlIGFja25vd2xlZGdlcyB0aGF0IHRoZSBzY2llbnRpZmljIGFuZCB0ZWNobmljYWwgc3RhdGUtb2YtdGhlLWFydCB3aGVuIHRoZSBTb2Z0d2FyZSB3YXMgZGlzdHJpYnV0ZWQgZGlkIG5vdCBlbmFibGUgYWxsIHBvc3NpYmxlIHVzZXMgdG8gYmUgdGVzdGVkIGFuZCB2ZXJpZmllZCwgbm9yIGZvciB0aGUgcHJlc2VuY2Ugb2YgcG9zc2libGUgZGVmZWN0cyB0byBiZSBkZXRlY3RlZC4gSW4gdGhpcyByZXNwZWN0LCB0aGUgTGljZW5zZWUncyBhdHRlbnRpb24gaGFzIGJlZW4gZHJhd24gdG8gdGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBsb2FkaW5nLCB1c2luZywgbW9kaWZ5aW5nIGFuZC9vciBkZXZlbG9waW5nIGFuZCByZXByb2R1Y2luZyB0aGUgU29mdHdhcmUgd2hpY2ggYXJlIHJlc2VydmVkIGZvciBleHBlcmllbmNlZCB1c2Vycy5cblxuICAgICAgVGhlIExpY2Vuc2VlIHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciB2ZXJpZnlpbmcsIGJ5IGFueSBvciBhbGwgbWVhbnMsIHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgcHJvZHVjdCBmb3IgaXRzIHJlcXVpcmVtZW50cywgaXRzIGdvb2Qgd29ya2luZyBvcmRlciwgYW5kIGZvciBlbnN1cmluZyB0aGF0IGl0IHNoYWxsIG5vdCBjYXVzZSBkYW1hZ2UgdG8gZWl0aGVyIHBlcnNvbnMgb3IgcHJvcGVydGllcy5cblxuICAgICAgOS4yIFRoZSBMaWNlbnNvciBoZXJlYnkgcmVwcmVzZW50cywgaW4gZ29vZCBmYWl0aCwgdGhhdCBpdCBpcyBlbnRpdGxlZCB0byBncmFudCBhbGwgdGhlIHJpZ2h0cyBvdmVyIHRoZSBTb2Z0d2FyZSAoaW5jbHVkaW5nIGluIHBhcnRpY3VsYXIgdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gQXJ0aWNsZSA1KS5cblxuICAgICAgOS4zIFRoZSBMaWNlbnNlZSBhY2tub3dsZWRnZXMgdGhhdCB0aGUgU29mdHdhcmUgaXMgc3VwcGxpZWQgXCJhcyBpc1wiIGJ5IHRoZSBMaWNlbnNvciB3aXRob3V0IGFueSBvdGhlciBleHByZXNzIG9yIHRhY2l0IHdhcnJhbnR5LCBvdGhlciB0aGFuIHRoYXQgcHJvdmlkZWQgZm9yIGluIEFydGljbGUgOS4yIGFuZCwgaW4gcGFydGljdWxhciwgd2l0aG91dCBhbnkgd2FycmFudHkgYXMgdG8gaXRzIGNvbW1lcmNpYWwgdmFsdWUsIGl0cyBzZWN1cmVkLCBzYWZlLCBpbm5vdmF0aXZlIG9yIHJlbGV2YW50IG5hdHVyZS5cblxuICAgICAgU3BlY2lmaWNhbGx5LCB0aGUgTGljZW5zb3IgZG9lcyBub3Qgd2FycmFudCB0aGF0IHRoZSBTb2Z0d2FyZSBpcyBmcmVlIGZyb20gYW55IGVycm9yLCB0aGF0IGl0IHdpbGwgb3BlcmF0ZSB3aXRob3V0IGludGVycnVwdGlvbiwgdGhhdCBpdCB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgTGljZW5zZWUncyBvd24gZXF1aXBtZW50IGFuZCBzb2Z0d2FyZSBjb25maWd1cmF0aW9uLCBub3IgdGhhdCBpdCB3aWxsIG1lZXQgdGhlIExpY2Vuc2VlJ3MgcmVxdWlyZW1lbnRzLlxuXG4gICAgICA5LjQgVGhlIExpY2Vuc29yIGRvZXMgbm90IGVpdGhlciBleHByZXNzbHkgb3IgdGFjaXRseSB3YXJyYW50IHRoYXQgdGhlIFNvZnR3YXJlIGRvZXMgbm90IGluZnJpbmdlIGFueSB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgcmVsYXRpbmcgdG8gYSBwYXRlbnQsIHNvZnR3YXJlIG9yIGFueSBvdGhlciBwcm9wZXJ0eSByaWdodC4gVGhlcmVmb3JlLCB0aGUgTGljZW5zb3IgZGlzY2xhaW1zIGFueSBhbmQgYWxsIGxpYWJpbGl0eSB0b3dhcmRzIHRoZSBMaWNlbnNlZSBhcmlzaW5nIG91dCBvZiBhbnkgb3IgYWxsIHByb2NlZWRpbmdzIGZvciBpbmZyaW5nZW1lbnQgdGhhdCBtYXkgYmUgaW5zdGl0dXRlZCBpbiByZXNwZWN0IG9mIHRoZSB1c2UsIG1vZGlmaWNhdGlvbiBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlLiBOZXZlcnRoZWxlc3MsIHNob3VsZCBzdWNoIHByb2NlZWRpbmdzIGJlIGluc3RpdHV0ZWQgYWdhaW5zdCB0aGUgTGljZW5zZWUsIHRoZSBMaWNlbnNvciBzaGFsbCBwcm92aWRlIGl0IHdpdGggdGVjaG5pY2FsIGFuZCBsZWdhbCBhc3Npc3RhbmNlIGZvciBpdHMgZGVmZW5zZS4gU3VjaCB0ZWNobmljYWwgYW5kIGxlZ2FsIGFzc2lzdGFuY2Ugc2hhbGwgYmUgZGVjaWRlZCBvbiBhIGNhc2UtYnktY2FzZSBiYXNpcyBiZXR3ZWVuIHRoZSByZWxldmFudCBMaWNlbnNvciBhbmQgdGhlIExpY2Vuc2VlIHB1cnN1YW50IHRvIGEgbWVtb3JhbmR1bSBvZiB1bmRlcnN0YW5kaW5nLiBUaGUgTGljZW5zb3IgZGlzY2xhaW1zIGFueSBhbmQgYWxsIGxpYWJpbGl0eSBhcyByZWdhcmRzIHRoZSBMaWNlbnNlZSdzIHVzZSBvZiB0aGUgbmFtZSBvZiB0aGUgU29mdHdhcmUuIE5vIHdhcnJhbnR5IGlzIGdpdmVuIGFzIHJlZ2FyZHMgdGhlIGV4aXN0ZW5jZSBvZiBwcmlvciByaWdodHMgb3ZlciB0aGUgbmFtZSBvZiB0aGUgU29mdHdhcmUgb3IgYXMgcmVnYXJkcyB0aGUgZXhpc3RlbmNlIG9mIGEgdHJhZGVtYXJrLlxuXG4gICBBcnRpY2xlIDEwIC0gVEVSTUlOQVRJT05cblxuICAgICAgMTAuMSBJbiB0aGUgZXZlbnQgb2YgYSBicmVhY2ggYnkgdGhlIExpY2Vuc2VlIG9mIGl0cyBvYmxpZ2F0aW9ucyBoZXJldW5kZXIsIHRoZSBMaWNlbnNvciBtYXkgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgdGhpcnR5ICgzMCkgZGF5cyBhZnRlciBub3RpY2UgaGFzIGJlZW4gc2VudCB0byB0aGUgTGljZW5zZWUgYW5kIGhhcyByZW1haW5lZCBpbmVmZmVjdGl2ZS5cblxuICAgICAgMTAuMiBBIExpY2Vuc2VlIHdob3NlIEFncmVlbWVudCBpcyB0ZXJtaW5hdGVkIHNoYWxsIG5vIGxvbmdlciBiZSBhdXRob3JpemVkIHRvIHVzZSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlLiBIb3dldmVyLCBhbnkgbGljZW5zZXMgdGhhdCBpdCBtYXkgaGF2ZSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIG9mIHRoZSBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIHZhbGlkIHN1YmplY3QgdG8gdGhlaXIgaGF2aW5nIGJlZW4gZ3JhbnRlZCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGhlcmVvZi5cblxuICAgQXJ0aWNsZSAxMSAtIE1JU0NFTExBTkVPVVNcblxuICAgICAgMTEuMSBFWENVU0FCTEUgRVZFTlRTXG5cbiAgICAgIE5laXRoZXIgUGFydHkgc2hhbGwgYmUgbGlhYmxlIGZvciBhbnkgb3IgYWxsIGRlbGF5LCBvciBmYWlsdXJlIHRvIHBlcmZvcm0gdGhlIEFncmVlbWVudCwgdGhhdCBtYXkgYmUgYXR0cmlidXRhYmxlIHRvIGFuIGV2ZW50IG9mIGZvcmNlIG1hamV1cmUsIGFuIGFjdCBvZiBHb2Qgb3IgYW4gb3V0c2lkZSBjYXVzZSwgc3VjaCBhcyBkZWZlY3RpdmUgZnVuY3Rpb25pbmcgb3IgaW50ZXJydXB0aW9ucyBvZiB0aGUgZWxlY3RyaWNpdHkgb3IgdGVsZWNvbW11bmljYXRpb25zIG5ldHdvcmtzLCBuZXR3b3JrIHBhcmFseXNpcyBmb2xsb3dpbmcgYSB2aXJ1cyBhdHRhY2ssIGludGVydmVudGlvbiBieSBnb3Zlcm5tZW50IGF1dGhvcml0aWVzLCBuYXR1cmFsIGRpc2FzdGVycywgd2F0ZXIgZGFtYWdlLCBlYXJ0aHF1YWtlcywgZmlyZSwgZXhwbG9zaW9ucywgc3RyaWtlcyBhbmQgbGFib3IgdW5yZXN0LCB3YXIsIGV0Yy5cblxuICAgICAgMTEuMiBBbnkgZmFpbHVyZSBieSBlaXRoZXIgUGFydHksIG9uIG9uZSBvciBtb3JlIG9jY2FzaW9ucywgdG8gaW52b2tlIG9uZSBvciBtb3JlIG9mIHRoZSBwcm92aXNpb25zIGhlcmVvZiwgc2hhbGwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBiZSBpbnRlcnByZXRlZCBhcyBiZWluZyBhIHdhaXZlciBieSB0aGUgaW50ZXJlc3RlZCBQYXJ0eSBvZiBpdHMgcmlnaHQgdG8gaW52b2tlIHNhaWQgcHJvdmlzaW9uKHMpIHN1YnNlcXVlbnRseS5cblxuICAgICAgMTEuMyBUaGUgQWdyZWVtZW50IGNhbmNlbHMgYW5kIHJlcGxhY2VzIGFueSBvciBhbGwgcHJldmlvdXMgYWdyZWVtZW50cywgd2hldGhlciB3cml0dGVuIG9yIG9yYWwsIGJldHdlZW4gdGhlIFBhcnRpZXMgYW5kIGhhdmluZyB0aGUgc2FtZSBwdXJwb3NlLCBhbmQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZXR5IG9mIHRoZSBhZ3JlZW1lbnQgYmV0d2VlbiBzYWlkIFBhcnRpZXMgY29uY2VybmluZyBzYWlkIHB1cnBvc2UuIE5vIHN1cHBsZW1lbnQgb3IgbW9kaWZpY2F0aW9uIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlb2Ygc2hhbGwgYmUgZWZmZWN0aXZlIGFzIGJldHdlZW4gdGhlIFBhcnRpZXMgdW5sZXNzIGl0IGlzIG1hZGUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZWlyIGR1bHkgYXV0aG9yaXplZCByZXByZXNlbnRhdGl2ZXMuXG5cbiAgICAgIDExLjQgSW4gdGhlIGV2ZW50IHRoYXQgb25lIG9yIG1vcmUgb2YgdGhlIHByb3Zpc2lvbnMgaGVyZW9mIHdlcmUgdG8gY29uZmxpY3Qgd2l0aCBhIGN1cnJlbnQgb3IgZnV0dXJlIGFwcGxpY2FibGUgYWN0IG9yIGxlZ2lzbGF0aXZlIHRleHQsIHNhaWQgYWN0IG9yIGxlZ2lzbGF0aXZlIHRleHQgc2hhbGwgcHJldmFpbCwgYW5kIHRoZSBQYXJ0aWVzIHNoYWxsIG1ha2UgdGhlIG5lY2Vzc2FyeSBhbWVuZG1lbnRzIHNvIGFzIHRvIGNvbXBseSB3aXRoIHNhaWQgYWN0IG9yIGxlZ2lzbGF0aXZlIHRleHQuIEFsbCBvdGhlciBwcm92aXNpb25zIHNoYWxsIHJlbWFpbiBlZmZlY3RpdmUuIFNpbWlsYXJseSwgaW52YWxpZGl0eSBvZiBhIHByb3Zpc2lvbiBvZiB0aGUgQWdyZWVtZW50LCBmb3IgYW55IHJlYXNvbiB3aGF0c29ldmVyLCBzaGFsbCBub3QgY2F1c2UgdGhlIEFncmVlbWVudCBhcyBhIHdob2xlIHRvIGJlIGludmFsaWQuXG5cbiAgICAgIDExLjUgTEFOR1VBR0VcblxuICAgICAgVGhlIEFncmVlbWVudCBpcyBkcmFmdGVkIGluIGJvdGggRnJlbmNoIGFuZCBFbmdsaXNoIGFuZCBib3RoIHZlcnNpb25zIGFyZSBkZWVtZWQgYXV0aGVudGljLlxuXG4gICBBcnRpY2xlIDEyIC0gTkVXIFZFUlNJT05TIE9GIFRIRSBBR1JFRU1FTlRcblxuICAgICAgMTIuMSBBbnkgcGVyc29uIGlzIGF1dGhvcml6ZWQgdG8gZHVwbGljYXRlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGlzIEFncmVlbWVudC5cblxuICAgICAgMTIuMiBTbyBhcyB0byBlbnN1cmUgY29oZXJlbmNlLCB0aGUgd29yZGluZyBvZiB0aGlzIEFncmVlbWVudCBpcyBwcm90ZWN0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGJ5IHRoZSBhdXRob3JzIG9mIHRoZSBMaWNlbnNlLCB3aG8gcmVzZXJ2ZSB0aGUgcmlnaHQgdG8gcGVyaW9kaWNhbGx5IHB1Ymxpc2ggdXBkYXRlcyBvciBuZXcgdmVyc2lvbnMgb2YgdGhlIEFncmVlbWVudCwgZWFjaCB3aXRoIGEgc2VwYXJhdGUgbnVtYmVyLiBUaGVzZSBzdWJzZXF1ZW50IHZlcnNpb25zIG1heSBhZGRyZXNzIG5ldyBpc3N1ZXMgZW5jb3VudGVyZWQgYnkgRnJlZSBTb2Z0d2FyZS5cblxuICAgICAgMTIuMyBBbnkgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgYSBnaXZlbiB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgbWF5IG9ubHkgYmUgc3Vic2VxdWVudGx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBvciBhIHN1YnNlcXVlbnQgdmVyc2lvbi5cblxuICAgQXJ0aWNsZSAxMyAtIEdPVkVSTklORyBMQVcgQU5EIEpVUklTRElDVElPTlxuXG4gICAgICAxMy4xIFRoZSBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgRnJlbmNoIGxhdy4gVGhlIFBhcnRpZXMgYWdyZWUgdG8gZW5kZWF2b3IgdG8gc2VlayBhbiBhbWljYWJsZSBzb2x1dGlvbiB0byBhbnkgZGlzYWdyZWVtZW50cyBvciBkaXNwdXRlcyB0aGF0IG1heSBhcmlzZSBkdXJpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBBZ3JlZW1lbnQuXG5cbiAgICAgIDEzLjIgRmFpbGluZyBhbiBhbWljYWJsZSBzb2x1dGlvbiB3aXRoaW4gdHdvICgyKSBtb250aHMgYXMgZnJvbSB0aGVpciBvY2N1cnJlbmNlLCBhbmQgdW5sZXNzIGVtZXJnZW5jeSBwcm9jZWVkaW5ncyBhcmUgbmVjZXNzYXJ5LCB0aGUgZGlzYWdyZWVtZW50cyBvciBkaXNwdXRlcyBzaGFsbCBiZSByZWZlcnJlZCB0byB0aGUgUGFyaXMgQ291cnRzIGhhdmluZyBqdXJpc2RpY3Rpb24sIGJ5IHRoZSBtb3JlIGRpbGlnZW50IFBhcnR5LlxuXG5WZXJzaW9uIDEuMCBkYXRlZCAyMDA2LTA5LTA1LiAxIENlQ0lMTCBzdGFuZHMgZm9yIENlKGEpIEMobnJzKSBJKG5yaWEpIEwob2dpY2llbCkgTChpYnJlKSJdLCJsaWNlbnNlSWRzIjpbIkNFQ0lMTC1CIl0sImtleXdvcmRzIjpbImNlY2lsbCBiIGZyZWUiLCJiIGZyZWUgc29mdHdhcmUiLCJmcmFuY2UgcHJlYW1ibGUgdGhpcyIsInByZWFtYmxlIHRoaXMgYWdyZWVtZW50IiwiYWdyZWVtZW50IGlzIGFuIiwiaXMgYW4gb3BlbiIsInNvdXJjZSBzb2Z0d2FyZSBsaWNlbnNlIiwic29mdHdhcmUgbGljZW5zZSBpbnRlbmRlZCIsImxpY2Vuc2UgaW50ZW5kZWQgdG8iLCJ0byBnaXZlIHVzZXJzIiwiZ2l2ZSB1c2VycyBzaWduaWZpY2FudCIsInVzZXJzIHNpZ25pZmljYW50IGZyZWVkb20iLCJzaWduaWZpY2FudCBmcmVlZG9tIHRvIiwiZnJlZWRvbSB0byBtb2RpZnkiLCJsaWNlbnNlZCBoZXJldW5kZXIgdGhlIiwiaGVyZXVuZGVyIHRoZSBleGVyY2lzaW5nIiwib2YgdGhpcyBmcmVlZG9tIiwidGhpcyBmcmVlZG9tIGlzIiwiZnJlZWRvbSBpcyBjb25kaXRpb25hbCIsImNvbmRpdGlvbmFsIHVwb24gYSIsInVwb24gYSBzdHJvbmciLCJhIHN0cm9uZyBvYmxpZ2F0aW9uIiwic3Ryb25nIG9ibGlnYXRpb24gb2YiLCJvYmxpZ2F0aW9uIG9mIGdpdmluZyIsIm9mIGdpdmluZyBjcmVkaXRzIiwiZ2l2aW5nIGNyZWRpdHMgZm9yIiwiY3JlZGl0cyBmb3IgZXZlcnlib2R5IiwiZm9yIGV2ZXJ5Ym9keSB0aGF0IiwiZXZlcnlib2R5IHRoYXQgZGlzdHJpYnV0ZXMiLCJ0aGF0IGRpc3RyaWJ1dGVzIGEiLCJkaXN0cmlidXRlcyBhIHNvZnR3YXJlIiwiYSBzb2Z0d2FyZSBpbmNvcnBvcmF0aW5nIiwic29mdHdhcmUgaW5jb3Jwb3JhdGluZyBhIiwiaW5jb3Jwb3JhdGluZyBhIHNvZnR3YXJlIiwiYSBzb2Z0d2FyZSBydWxlZCIsInNvZnR3YXJlIHJ1bGVkIGJ5IiwicnVsZWQgYnkgdGhlIiwidGhlIGN1cnJlbnQgbGljZW5zZSIsImN1cnJlbnQgbGljZW5zZSBzbyIsImxpY2Vuc2Ugc28gYXMiLCJzbyBhcyBhbGwiLCJhcyBhbGwgY29udHJpYnV0aW9ucyIsImNvbnRyaWJ1dGlvbnMgdG8gYmUiLCJ0byBiZSBwcm9wZXJseSIsImJlIHByb3Blcmx5IGlkZW50aWZpZWQiLCJwcm9wZXJseSBpZGVudGlmaWVkIGFuZCIsImlkZW50aWZpZWQgYW5kIGFja25vd2xlZGdlZCIsImFuZCBhY2tub3dsZWRnZWQgaW4iLCJhY2tub3dsZWRnZWQgaW4gY29uc2lkZXJhdGlvbiIsImFkZHJlc3Mgc3BhY2UgcGFydGllcyIsInNwYWNlIHBhcnRpZXMgbWVhbiIsIm1vZGlmaWVkIHNvZnR3YXJlIGlmIiwibGljZW5zZWUgbWFrZXMgYW55IiwibWFrZXMgYW55IGNvbnRyaWJ1dGlvbiIsImFueSBjb250cmlidXRpb24gdG8iLCJzb2Z0d2FyZSB0aGUgcmVzdWx0aW5nIiwiNCA1IDMiLCIzIDQgY3JlZGl0cyIsIjQgY3JlZGl0cyBhbnkiLCJjcmVkaXRzIGFueSBsaWNlbnNlZSIsImFueSBsaWNlbnNlZSB3aG8iLCJsaWNlbnNlZSB3aG8gbWF5IiwibW9kaWZpZWQgc29mdHdhcmUgaGVyZWJ5Iiwic29mdHdhcmUgaGVyZWJ5IGV4cHJlc3NseSIsImhlcmVieSBleHByZXNzbHkgYWdyZWVzIiwiZXhwcmVzc2x5IGFncmVlcyB0byIsImFncmVlcyB0byAxIiwidG8gMSBpbmRpY2F0ZSIsIjEgaW5kaWNhdGUgaW4iLCJpbmRpY2F0ZSBpbiB0aGUiLCJpbiB0aGUgcmVsYXRlZCIsInRoZSByZWxhdGVkIGRvY3VtZW50YXRpb24iLCJyZWxhdGVkIGRvY3VtZW50YXRpb24gdGhhdCIsImRvY3VtZW50YXRpb24gdGhhdCBpdCIsInJlcHJvZHVjZSB0aGUgaW50ZWxsZWN0dWFsIiwicHJvcGVydHkgbm90aWNlIGZvciIsInNvZnR3YXJlIDIgZW5zdXJlIiwiMiBlbnN1cmUgdGhhdCIsImVuc3VyZSB0aGF0IHdyaXR0ZW4iLCJ0aGF0IHdyaXR0ZW4gaW5kaWNhdGlvbnMiLCJ3cml0dGVuIGluZGljYXRpb25zIG9mIiwiaW5kaWNhdGlvbnMgb2YgdGhlIiwic29mdHdhcmUgaW50ZW5kZWQgdXNlIiwiaW50ZW5kZWQgdXNlIGludGVsbGVjdHVhbCIsInVzZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkiLCJwcm9wZXJ0eSBub3RpY2UgYW5kIiwiYW5kIGxpY2Vuc2UgaGVyZXVuZGVyIiwibGljZW5zZSBoZXJldW5kZXIgYXJlIiwiaGVyZXVuZGVyIGFyZSBpbmNsdWRlZCIsImluY2x1ZGVkIGluIGVhc2lseSIsImluIGVhc2lseSBhY2Nlc3NpYmxlIiwiZWFzaWx5IGFjY2Vzc2libGUgZm9ybWF0IiwiYWNjZXNzaWJsZSBmb3JtYXQgZnJvbSIsImZvcm1hdCBmcm9tIHRoZSIsIm1vZGlmaWVkIHNvZnR3YXJlIGludGVyZmFjZSIsInNvZnR3YXJlIGludGVyZmFjZSAzIiwiaW50ZXJmYWNlIDMgbWVudGlvbiIsIjMgbWVudGlvbiBvbiIsIm1lbnRpb24gb24gYSIsIm9uIGEgZnJlZWx5IiwiZnJlZWx5IGFjY2Vzc2libGUgd2Vic2l0ZSIsImFjY2Vzc2libGUgd2Vic2l0ZSBkZXNjcmliaW5nIiwid2Vic2l0ZSBkZXNjcmliaW5nIHRoZSIsInNvZnR3YXJlIGF0IGxlYXN0IiwiYXQgbGVhc3QgdGhyb3VnaG91dCIsImxlYXN0IHRocm91Z2hvdXQgdGhlIiwidGhyb3VnaG91dCB0aGUgZGlzdHJpYnV0aW9uIiwidGhlIGRpc3RyaWJ1dGlvbiB0ZXJtIiwiZGlzdHJpYnV0aW9uIHRlcm0gdGhlcmVvZiIsInRlcm0gdGhlcmVvZiB0aGF0IiwidGhlcmVvZiB0aGF0IGl0IiwicmVwcm9kdWNlIHRoZSBzb2Z0d2FyZSIsInRoZSBzb2Z0d2FyZSBpbnRlbGxlY3R1YWwiLCJzb2Z0d2FyZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkiLCJwcm9wZXJ0eSBub3RpY2UgNCIsIm5vdGljZSA0IHdoZXJlIiwiNCB3aGVyZSBpdCIsImRpc3RyaWJ1dGVkIHRvIGEiLCJwYXJ0eSB0aGF0IG1heSIsInRoYXQgbWF5IGRpc3RyaWJ1dGUiLCJtb2RpZmllZCBzb2Z0d2FyZSB3aXRob3V0Iiwic29mdHdhcmUgd2l0aG91dCBoYXZpbmciLCJoYXZpbmcgdG8gbWFrZSIsInRvIG1ha2UgaXRzIiwibWFrZSBpdHMgc291cmNlIiwiY29kZSBhdmFpbGFibGUgbWFrZSIsImF2YWlsYWJsZSBtYWtlIGl0cyIsIm1ha2UgaXRzIGJlc3QiLCJpdHMgYmVzdCBlZmZvcnRzIiwiYmVzdCBlZmZvcnRzIHRvIiwiZWZmb3J0cyB0byBlbnN1cmUiLCJlbnN1cmUgdGhhdCBzYWlkIiwidGhhdCBzYWlkIHRoaXJkIiwic2FpZCB0aGlyZCBwYXJ0eSIsInRoaXJkIHBhcnR5IGFncmVlcyIsInBhcnR5IGFncmVlcyB0byIsImFncmVlcyB0byBjb21wbHkiLCJ3aXRoIHRoZSBvYmxpZ2F0aW9ucyIsImluIHRoaXMgYXJ0aWNsZSIsInRoaXMgYXJ0aWNsZSBpZiIsImFydGljbGUgaWYgdGhlIiwidGhlIHNvZnR3YXJlIHdoZXRoZXIiLCJzb2Z0d2FyZSB3aGV0aGVyIG9yIiwib3Igbm90IG1vZGlmaWVkIiwibm90IG1vZGlmaWVkIGlzIiwibW9kaWZpZWQgaXMgZGlzdHJpYnV0ZWQiLCJkaXN0cmlidXRlZCB3aXRoIGFuIiwid2l0aCBhbiBleHRlcm5hbCIsImV4dGVybmFsIG1vZHVsZSBkZXNpZ25lZCIsIm1vZHVsZSBkZXNpZ25lZCBmb3IiLCJsaWNlbnNlZSBzaGFsbCBzdWJtaXQiLCJzaGFsbCBzdWJtaXQgc2FpZCIsInN1Ym1pdCBzYWlkIGV4dGVybmFsIiwiZXh0ZXJuYWwgbW9kdWxlIHRvIiwibW9kdWxlIHRvIHRoZSIsInRoZSBmb3JlZ29pbmcgb2JsaWdhdGlvbnMiLCJmb3JlZ29pbmcgb2JsaWdhdGlvbnMgNSIsIm9ibGlnYXRpb25zIDUgMyIsIjUgMyA1IiwiMyA1IGNvbXBhdGliaWxpdHkiLCI1IGNvbXBhdGliaWxpdHkgd2l0aCIsInRoZSBjZWNpbGwgYW5kIiwiY2VjaWxsIGFuZCBjZWNpbGwiLCJhbmQgY2VjaWxsIGMiLCJjZWNpbGwgYyBsaWNlbnNlcyIsImMgbGljZW5zZXMgd2hlcmUiLCJsaWNlbnNlcyB3aGVyZSBhIiwid2hlcmUgYSBtb2RpZmllZCIsImNvbnRhaW5zIGEgY29udHJpYnV0aW9uIiwiYSBjb250cmlidXRpb24gc3ViamVjdCIsImNlY2lsbCBsaWNlbnNlIHRoZSIsImJlIG9wdGlvbmFsIGEiLCJvcHRpb25hbCBhIG1vZGlmaWVkIiwidW5kZXIgdGhlIGNlY2lsbCIsInRoZSBjZWNpbGwgYyIsImNlY2lsbCBjIGxpY2Vuc2UiLCJjIGxpY2Vuc2UgaW4iLCJiZSBvcHRpb25hbCBhcnRpY2xlIiwiY2VjaWxsIGIgZnJlZSBzb2Z0d2FyZSIsImIgZnJlZSBzb2Z0d2FyZSBsaWNlbnNlIiwiY2VkZXggZnJhbmNlIHByZWFtYmxlIHRoaXMiLCJmcmFuY2UgcHJlYW1ibGUgdGhpcyBhZ3JlZW1lbnQiLCJwcmVhbWJsZSB0aGlzIGFncmVlbWVudCBpcyIsInRoaXMgYWdyZWVtZW50IGlzIGFuIiwiYWdyZWVtZW50IGlzIGFuIG9wZW4iLCJpcyBhbiBvcGVuIHNvdXJjZSIsImFuIG9wZW4gc291cmNlIHNvZnR3YXJlIiwib3BlbiBzb3VyY2Ugc29mdHdhcmUgbGljZW5zZSIsInNvdXJjZSBzb2Z0d2FyZSBsaWNlbnNlIGludGVuZGVkIiwic29mdHdhcmUgbGljZW5zZSBpbnRlbmRlZCB0byIsImxpY2Vuc2UgaW50ZW5kZWQgdG8gZ2l2ZSIsImludGVuZGVkIHRvIGdpdmUgdXNlcnMiLCJ0byBnaXZlIHVzZXJzIHNpZ25pZmljYW50IiwiZ2l2ZSB1c2VycyBzaWduaWZpY2FudCBmcmVlZG9tIiwidXNlcnMgc2lnbmlmaWNhbnQgZnJlZWRvbSB0byIsInNpZ25pZmljYW50IGZyZWVkb20gdG8gbW9kaWZ5IiwiZnJlZWRvbSB0byBtb2RpZnkgYW5kIiwicmVkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBsaWNlbnNlZCIsInNvZnR3YXJlIGxpY2Vuc2VkIGhlcmV1bmRlciB0aGUiLCJsaWNlbnNlZCBoZXJldW5kZXIgdGhlIGV4ZXJjaXNpbmciXX0seyJsaWNlbnNlVGV4dHMiOlsiQ2VDSUxMLUMgRlJFRSBTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVCBOb3RpY2VcblxuVGhpcyBBZ3JlZW1lbnQgaXMgYSBGcmVlIFNvZnR3YXJlIGxpY2Vuc2UgYWdyZWVtZW50IHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBkaXNjdXNzaW9ucyBiZXR3ZWVuIGl0cyBhdXRob3JzIGluIG9yZGVyIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIHR3byBtYWluIHByaW5jaXBsZXMgZ3VpZGluZyBpdHMgZHJhZnRpbmc6XG5cbiAgICogZmlyc3RseSwgY29tcGxpYW5jZSB3aXRoIHRoZSBwcmluY2lwbGVzIGdvdmVybmluZyB0aGUgZGlzdHJpYnV0aW9uIG9mIEZyZWUgU29mdHdhcmU6IGFjY2VzcyB0byBzb3VyY2UgY29kZSwgYnJvYWQgcmlnaHRzIGdyYW50ZWQgdG8gdXNlcnMsXG5cbiAgICogc2Vjb25kbHksIHRoZSBlbGVjdGlvbiBvZiBhIGdvdmVybmluZyBsYXcsIEZyZW5jaCBsYXcsIHdpdGggd2hpY2ggaXQgaXMgY29uZm9ybWFudCwgYm90aCBhcyByZWdhcmRzIHRoZSBsYXcgb2YgdG9ydHMgYW5kIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXcsIGFuZCB0aGUgcHJvdGVjdGlvbiB0aGF0IGl0IG9mZmVycyB0byBib3RoIGF1dGhvcnMgYW5kIGhvbGRlcnMgb2YgdGhlIGVjb25vbWljIHJpZ2h0cyBvdmVyIHNvZnR3YXJlLlxuXG5UaGUgYXV0aG9ycyBvZiB0aGUgQ2VDSUxMwrkgbGljZW5zZSBhcmU6XG5cbiAgIFxuXG4gICBDb21taXNzYXJpYXQgw6AgbCdFbmVyZ2llIEF0b21pcXVlIC0gQ0VBLCBhIHB1YmxpYyBzY2llbnRpZmljLCB0ZWNobmljYWwgYW5kIGluZHVzdHJpYWwgcmVzZWFyY2ggZXN0YWJsaXNobWVudCwgaGF2aW5nIGl0cyBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MgYXQgMjUgcnVlIExlYmxhbmMsIGltbWV1YmxlIExlIFBvbmFudCBELCA3NTAxNSBQYXJpcywgRnJhbmNlLlxuXG4gICBcblxuICAgQ2VudHJlIE5hdGlvbmFsIGRlIGxhIFJlY2hlcmNoZSBTY2llbnRpZmlxdWUgLSBDTlJTLCBhIHB1YmxpYyBzY2llbnRpZmljIGFuZCB0ZWNobm9sb2dpY2FsIGVzdGFibGlzaG1lbnQsIGhhdmluZyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGF0IDMgcnVlIE1pY2hlbC1BbmdlLCA3NTc5NCBQYXJpcyBjZWRleCAxNiwgRnJhbmNlLlxuXG4gICBcblxuICAgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSAtIElOUklBLCBhIHB1YmxpYyBzY2llbnRpZmljIGFuZCB0ZWNobm9sb2dpY2FsIGVzdGFibGlzaG1lbnQsIGhhdmluZyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGF0IERvbWFpbmUgZGUgVm9sdWNlYXUsIFJvY3F1ZW5jb3VydCwgQlAgMTA1LCA3ODE1MyBMZSBDaGVzbmF5IGNlZGV4LCBGcmFuY2UuXG5cbiAgIFByZWFtYmxlIFRoZSBwdXJwb3NlIG9mIHRoaXMgRnJlZSBTb2Z0d2FyZSBsaWNlbnNlIGFncmVlbWVudCBpcyB0byBncmFudCB1c2VycyB0aGUgcmlnaHQgdG8gbW9kaWZ5IGFuZCByZS11c2UgdGhlIHNvZnR3YXJlIGdvdmVybmVkIGJ5IHRoaXMgbGljZW5zZS5cblxuICAgVGhlIGV4ZXJjaXNpbmcgb2YgdGhpcyByaWdodCBpcyBjb25kaXRpb25hbCB1cG9uIHRoZSBvYmxpZ2F0aW9uIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBjb21tdW5pdHkgdGhlIG1vZGlmaWNhdGlvbnMgbWFkZSB0byB0aGUgc291cmNlIGNvZGUgb2YgdGhlIHNvZnR3YXJlIHNvIGFzIHRvIGNvbnRyaWJ1dGUgdG8gaXRzIGV2b2x1dGlvbi5cblxuICAgSW4gY29uc2lkZXJhdGlvbiBvZiBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGFuZCB0aGUgcmlnaHRzIHRvIGNvcHksIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIGdyYW50ZWQgYnkgdGhlIGxpY2Vuc2UsIHVzZXJzIGFyZSBwcm92aWRlZCBvbmx5IHdpdGggYSBsaW1pdGVkIHdhcnJhbnR5IGFuZCB0aGUgc29mdHdhcmUncyBhdXRob3IsIHRoZSBob2xkZXIgb2YgdGhlIGVjb25vbWljIHJpZ2h0cywgYW5kIHRoZSBzdWNjZXNzaXZlIGxpY2Vuc29ycyBvbmx5IGhhdmUgbGltaXRlZCBsaWFiaWxpdHkuXG5cbiAgIEluIHRoaXMgcmVzcGVjdCwgdGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBsb2FkaW5nLCB1c2luZywgbW9kaWZ5aW5nIGFuZC9vciBkZXZlbG9waW5nIG9yIHJlcHJvZHVjaW5nIHRoZSBzb2Z0d2FyZSBieSB0aGUgdXNlciBhcmUgYnJvdWdodCB0byB0aGUgdXNlcidzIGF0dGVudGlvbiwgZ2l2ZW4gaXRzIEZyZWUgU29mdHdhcmUgc3RhdHVzLCB3aGljaCBtYXkgbWFrZSBpdCBjb21wbGljYXRlZCB0byB1c2UsIHdpdGggdGhlIHJlc3VsdCB0aGF0IGl0cyB1c2UgaXMgcmVzZXJ2ZWQgZm9yIGRldmVsb3BlcnMgYW5kIGV4cGVyaWVuY2VkIHByb2Zlc3Npb25hbHMgaGF2aW5nIGluLWRlcHRoIGNvbXB1dGVyIGtub3dsZWRnZS4gVXNlcnMgYXJlIHRoZXJlZm9yZSBlbmNvdXJhZ2VkIHRvIGxvYWQgYW5kIHRlc3QgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBzb2Z0d2FyZSBhcyByZWdhcmRzIHRoZWlyIHJlcXVpcmVtZW50cyBpbiBjb25kaXRpb25zIGVuYWJsaW5nIHRoZSBzZWN1cml0eSBvZiB0aGVpciBzeXN0ZW1zIGFuZC9vciBkYXRhIHRvIGJlIGVuc3VyZWQgYW5kLCBtb3JlIGdlbmVyYWxseSwgdG8gdXNlIGFuZCBvcGVyYXRlIGl0IGluIHRoZSBzYW1lIGNvbmRpdGlvbnMgb2Ygc2VjdXJpdHkuIFRoaXMgQWdyZWVtZW50IG1heSBiZSBmcmVlbHkgcmVwcm9kdWNlZCBhbmQgcHVibGlzaGVkLCBwcm92aWRlZCBpdCBpcyBub3QgYWx0ZXJlZCwgYW5kIHRoYXQgbm8gcHJvdmlzaW9ucyBhcmUgZWl0aGVyIGFkZGVkIG9yIHJlbW92ZWQgaGVyZWZyb20uXG5cbiAgIFRoaXMgQWdyZWVtZW50IG1heSBhcHBseSB0byBhbnkgb3IgYWxsIHNvZnR3YXJlIGZvciB3aGljaCB0aGUgaG9sZGVyIG9mIHRoZSBlY29ub21pYyByaWdodHMgZGVjaWRlcyB0byBzdWJtaXQgdGhlIHVzZSB0aGVyZW9mIHRvIGl0cyBwcm92aXNpb25zLlxuXG4gICBBcnRpY2xlIDEgLSBERUZJTklUSU9OU1xuXG4gICBGb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBBZ3JlZW1lbnQsIHdoZW4gdGhlIGZvbGxvd2luZyBleHByZXNzaW9ucyBjb21tZW5jZSB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIsIHRoZXkgc2hhbGwgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmc6XG5cbiAgICAgIFxuXG4gICAgICBBZ3JlZW1lbnQ6IG1lYW5zIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCBpdHMgcG9zc2libGUgc3Vic2VxdWVudCB2ZXJzaW9ucyBhbmQgYW5uZXhlcy5cblxuICAgICAgXG5cbiAgICAgIFNvZnR3YXJlOiBtZWFucyB0aGUgc29mdHdhcmUgaW4gaXRzIE9iamVjdCBDb2RlIGFuZC9vciBTb3VyY2UgQ29kZSBmb3JtIGFuZCwgd2hlcmUgYXBwbGljYWJsZSwgaXRzIGRvY3VtZW50YXRpb24sIFwiYXMgaXNcIiB3aGVuIHRoZSBMaWNlbnNlZSBhY2NlcHRzIHRoZSBBZ3JlZW1lbnQuXG5cbiAgICAgIFxuXG4gICAgICBJbml0aWFsIFNvZnR3YXJlOiBtZWFucyB0aGUgU29mdHdhcmUgaW4gaXRzIFNvdXJjZSBDb2RlIGFuZCBwb3NzaWJseSBpdHMgT2JqZWN0IENvZGUgZm9ybSBhbmQsIHdoZXJlIGFwcGxpY2FibGUsIGl0cyBkb2N1bWVudGF0aW9uLCBcImFzIGlzXCIgd2hlbiBpdCBpcyBmaXJzdCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEFncmVlbWVudC5cblxuICAgICAgXG5cbiAgICAgIE1vZGlmaWVkIFNvZnR3YXJlOiBtZWFucyB0aGUgU29mdHdhcmUgbW9kaWZpZWQgYnkgYXQgbGVhc3Qgb25lIEludGVncmF0ZWQgQ29udHJpYnV0aW9uLlxuXG4gICAgICBcblxuICAgICAgU291cmNlIENvZGU6IG1lYW5zIGFsbCB0aGUgU29mdHdhcmUncyBpbnN0cnVjdGlvbnMgYW5kIHByb2dyYW0gbGluZXMgdG8gd2hpY2ggYWNjZXNzIGlzIHJlcXVpcmVkIHNvIGFzIHRvIG1vZGlmeSB0aGUgU29mdHdhcmUuXG5cbiAgICAgIFxuXG4gICAgICBPYmplY3QgQ29kZTogbWVhbnMgdGhlIGJpbmFyeSBmaWxlcyBvcmlnaW5hdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBvZiB0aGUgU291cmNlIENvZGUuXG5cbiAgICAgIFxuXG4gICAgICBIb2xkZXI6IG1lYW5zIHRoZSBob2xkZXIocykgb2YgdGhlIGVjb25vbWljIHJpZ2h0cyBvdmVyIHRoZSBJbml0aWFsIFNvZnR3YXJlLlxuXG4gICAgICBcblxuICAgICAgTGljZW5zZWU6IG1lYW5zIHRoZSBTb2Z0d2FyZSB1c2VyKHMpIGhhdmluZyBhY2NlcHRlZCB0aGUgQWdyZWVtZW50LlxuXG4gICAgICBcblxuICAgICAgQ29udHJpYnV0b3I6IG1lYW5zIGEgTGljZW5zZWUgaGF2aW5nIG1hZGUgYXQgbGVhc3Qgb25lIEludGVncmF0ZWQgQ29udHJpYnV0aW9uLlxuXG4gICAgICBcblxuICAgICAgTGljZW5zb3I6IG1lYW5zIHRoZSBIb2xkZXIsIG9yIGFueSBvdGhlciBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSwgd2hvIGRpc3RyaWJ1dGVzIHRoZSBTb2Z0d2FyZSB1bmRlciB0aGUgQWdyZWVtZW50LlxuXG4gICAgICBcblxuICAgICAgSW50ZWdyYXRlZCBDb250cmlidXRpb246IG1lYW5zIGFueSBvciBhbGwgbW9kaWZpY2F0aW9ucywgY29ycmVjdGlvbnMsIHRyYW5zbGF0aW9ucywgYWRhcHRhdGlvbnMgYW5kL29yIG5ldyBmdW5jdGlvbnMgaW50ZWdyYXRlZCBpbnRvIHRoZSBTb3VyY2UgQ29kZSBieSBhbnkgb3IgYWxsIENvbnRyaWJ1dG9ycy5cblxuICAgICAgXG5cbiAgICAgIFJlbGF0ZWQgTW9kdWxlOiBtZWFucyBhIHNldCBvZiBzb3VyY2VzIGZpbGVzIGluY2x1ZGluZyB0aGVpciBkb2N1bWVudGF0aW9uIHRoYXQsIHdpdGhvdXQgbW9kaWZpY2F0aW9uIHRvIHRoZSBTb3VyY2UgQ29kZSwgZW5hYmxlcyBzdXBwbGVtZW50YXJ5IGZ1bmN0aW9ucyBvciBzZXJ2aWNlcyBpbiBhZGRpdGlvbiB0byB0aG9zZSBvZmZlcmVkIGJ5IHRoZSBTb2Z0d2FyZS5cblxuICAgICAgXG5cbiAgICAgIERlcml2YXRpdmUgU29mdHdhcmU6IG1lYW5zIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgU29mdHdhcmUsIG1vZGlmaWVkIG9yIG5vdCwgYW5kIG9mIGEgUmVsYXRlZCBNb2R1bGUuXG5cbiAgICAgIFxuXG4gICAgICBQYXJ0aWVzOiBtZWFuIGJvdGggdGhlIExpY2Vuc2VlIGFuZCB0aGUgTGljZW5zb3IuXG5cbiAgIFRoZXNlIGV4cHJlc3Npb25zIG1heSBiZSB1c2VkIGJvdGggaW4gc2luZ3VsYXIgYW5kIHBsdXJhbCBmb3JtLlxuXG4gICBBcnRpY2xlIDIgLSBQVVJQT1NFXG5cbiAgIFRoZSBwdXJwb3NlIG9mIHRoZSBBZ3JlZW1lbnQgaXMgdGhlIGdyYW50IGJ5IHRoZSBMaWNlbnNvciB0byB0aGUgTGljZW5zZWUgb2YgYSBub24tZXhjbHVzaXZlLCB0cmFuc2ZlcmFibGUgYW5kIHdvcmxkd2lkZSBsaWNlbnNlIGZvciB0aGUgU29mdHdhcmUgYXMgc2V0IGZvcnRoIGluIEFydGljbGUgNSBoZXJlaW5hZnRlciBmb3IgdGhlIHdob2xlIHRlcm0gb2YgdGhlIHByb3RlY3Rpb24gZ3JhbnRlZCBieSB0aGUgcmlnaHRzIG92ZXIgc2FpZCBTb2Z0d2FyZS5cblxuICAgQXJ0aWNsZSAzIC0gQUNDRVBUQU5DRVxuXG4gICAgICAzLjEgVGhlIExpY2Vuc2VlIHNoYWxsIGJlIGRlZW1lZCBhcyBoYXZpbmcgYWNjZXB0ZWQgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IHVwb24gdGhlIG9jY3VycmVuY2Ugb2YgdGhlIGZpcnN0IG9mIHRoZSBmb2xsb3dpbmcgZXZlbnRzOlxuXG4gICAgICAgICAoaSkgbG9hZGluZyB0aGUgU29mdHdhcmUgYnkgYW55IG9yIGFsbCBtZWFucywgbm90YWJseSwgYnkgZG93bmxvYWRpbmcgZnJvbSBhIHJlbW90ZSBzZXJ2ZXIsIG9yIGJ5IGxvYWRpbmcgZnJvbSBhIHBoeXNpY2FsIG1lZGl1bTtcblxuICAgICAgICAgKGlpKSB0aGUgZmlyc3QgdGltZSB0aGUgTGljZW5zZWUgZXhlcmNpc2VzIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLlxuXG4gICAgICAzLjIgT25lIGNvcHkgb2YgdGhlIEFncmVlbWVudCwgY29udGFpbmluZyBhIG5vdGljZSByZWxhdGluZyB0byB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBTb2Z0d2FyZSwgdG8gdGhlIGxpbWl0ZWQgd2FycmFudHksIGFuZCB0byB0aGUgZmFjdCB0aGF0IGl0cyB1c2UgaXMgcmVzdHJpY3RlZCB0byBleHBlcmllbmNlZCB1c2VycyBoYXMgYmVlbiBwcm92aWRlZCB0byB0aGUgTGljZW5zZWUgcHJpb3IgdG8gaXRzIGFjY2VwdGFuY2UgYXMgc2V0IGZvcnRoIGluIEFydGljbGUgMy4xIGhlcmVpbmFib3ZlLCBhbmQgdGhlIExpY2Vuc2VlIGhlcmVieSBhY2tub3dsZWRnZXMgdGhhdCBpdCBoYXMgcmVhZCBhbmQgdW5kZXJzdG9vZCBpdC5cblxuICAgQXJ0aWNsZSA0IC0gRUZGRUNUSVZFIERBVEUgQU5EIFRFUk1cblxuICAgICAgNC4xIEVGRkVDVElWRSBEQVRFXG5cbiAgICAgIFRoZSBBZ3JlZW1lbnQgc2hhbGwgYmVjb21lIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSB3aGVuIGl0IGlzIGFjY2VwdGVkIGJ5IHRoZSBMaWNlbnNlZSBhcyBzZXQgZm9ydGggaW4gQXJ0aWNsZSAzLjEuXG5cbiAgICAgIDQuMiBURVJNXG5cbiAgICAgIFRoZSBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIGluIGZvcmNlIGZvciB0aGUgZW50aXJlIGxlZ2FsIHRlcm0gb2YgcHJvdGVjdGlvbiBvZiB0aGUgZWNvbm9taWMgcmlnaHRzIG92ZXIgdGhlIFNvZnR3YXJlLlxuXG4gICBBcnRpY2xlIDUgLSBTQ09QRSBPRiBSSUdIVFMgR1JBTlRFRFxuXG4gICBUaGUgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyB0byB0aGUgTGljZW5zZWUsIHdobyBhY2NlcHRzLCB0aGUgZm9sbG93aW5nIHJpZ2h0cyBvdmVyIHRoZSBTb2Z0d2FyZSBmb3IgYW55IG9yIGFsbCB1c2UsIGFuZCBmb3IgdGhlIHRlcm0gb2YgdGhlIEFncmVlbWVudCwgb24gdGhlIGJhc2lzIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggaGVyZWluYWZ0ZXIuXG5cbiAgIEJlc2lkZXMsIGlmIHRoZSBMaWNlbnNvciBvd25zIG9yIGNvbWVzIHRvIG93biBvbmUgb3IgbW9yZSBwYXRlbnRzIHByb3RlY3RpbmcgYWxsIG9yIHBhcnQgb2YgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgU29mdHdhcmUgb3Igb2YgaXRzIGNvbXBvbmVudHMsIHRoZSBMaWNlbnNvciB1bmRlcnRha2VzIG5vdCB0byBlbmZvcmNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGVzZSBwYXRlbnRzIGFnYWluc3Qgc3VjY2Vzc2l2ZSBMaWNlbnNlZXMgdXNpbmcsIGV4cGxvaXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBTb2Z0d2FyZS4gSWYgdGhlc2UgcGF0ZW50cyBhcmUgdHJhbnNmZXJyZWQsIHRoZSBMaWNlbnNvciB1bmRlcnRha2VzIHRvIGhhdmUgdGhlIHRyYW5zZmVyZWVzIHN1YnNjcmliZSB0byB0aGUgb2JsaWdhdGlvbnMgc2V0IGZvcnRoIGluIHRoaXMgcGFyYWdyYXBoLlxuXG4gICAgICA1LjEgUklHSFQgT0YgVVNFXG5cbiAgICAgIFRoZSBMaWNlbnNlZSBpcyBhdXRob3JpemVkIHRvIHVzZSB0aGUgU29mdHdhcmUsIHdpdGhvdXQgYW55IGxpbWl0YXRpb24gYXMgdG8gaXRzIGZpZWxkcyBvZiBhcHBsaWNhdGlvbiwgd2l0aCBpdCBiZWluZyBoZXJlaW5hZnRlciBzcGVjaWZpZWQgdGhhdCB0aGlzIGNvbXByaXNlczpcblxuICAgICAgICAgMS4gcGVybWFuZW50IG9yIHRlbXBvcmFyeSByZXByb2R1Y3Rpb24gb2YgYWxsIG9yIHBhcnQgb2YgdGhlIFNvZnR3YXJlIGJ5IGFueSBvciBhbGwgbWVhbnMgYW5kIGluIGFueSBvciBhbGwgZm9ybS5cblxuICAgICAgICAgMi4gbG9hZGluZywgZGlzcGxheWluZywgcnVubmluZywgb3Igc3RvcmluZyB0aGUgU29mdHdhcmUgb24gYW55IG9yIGFsbCBtZWRpdW0uXG5cbiAgICAgICAgIDMuIGVudGl0bGVtZW50IHRvIG9ic2VydmUsIHN0dWR5IG9yIHRlc3QgaXRzIG9wZXJhdGlvbiBzbyBhcyB0byBkZXRlcm1pbmUgdGhlIGlkZWFzIGFuZCBwcmluY2lwbGVzIGJlaGluZCBhbnkgb3IgYWxsIGNvbnN0aXR1ZW50IGVsZW1lbnRzIG9mIHNhaWQgU29mdHdhcmUuIFRoaXMgc2hhbGwgYXBwbHkgd2hlbiB0aGUgTGljZW5zZWUgY2FycmllcyBvdXQgYW55IG9yIGFsbCBsb2FkaW5nLCBkaXNwbGF5aW5nLCBydW5uaW5nLCB0cmFuc21pc3Npb24gb3Igc3RvcmFnZSBvcGVyYXRpb24gYXMgcmVnYXJkcyB0aGUgU29mdHdhcmUsIHRoYXQgaXQgaXMgZW50aXRsZWQgdG8gY2Fycnkgb3V0IGhlcmV1bmRlci5cblxuICAgICAgNS4yIFJJR0hUIE9GIE1PRElGSUNBVElPTlxuXG4gICAgICBUaGUgcmlnaHQgb2YgbW9kaWZpY2F0aW9uIGluY2x1ZGVzIHRoZSByaWdodCB0byB0cmFuc2xhdGUsIGFkYXB0LCBhcnJhbmdlLCBvciBtYWtlIGFueSBvciBhbGwgbW9kaWZpY2F0aW9ucyB0byB0aGUgU29mdHdhcmUsIGFuZCB0aGUgcmlnaHQgdG8gcmVwcm9kdWNlIHRoZSByZXN1bHRpbmcgc29mdHdhcmUuIEl0IGluY2x1ZGVzLCBpbiBwYXJ0aWN1bGFyLCB0aGUgcmlnaHQgdG8gY3JlYXRlIGEgRGVyaXZhdGl2ZSBTb2Z0d2FyZS5cblxuICAgICAgVGhlIExpY2Vuc2VlIGlzIGF1dGhvcml6ZWQgdG8gbWFrZSBhbnkgb3IgYWxsIG1vZGlmaWNhdGlvbiB0byB0aGUgU29mdHdhcmUgcHJvdmlkZWQgdGhhdCBpdCBpbmNsdWRlcyBhbiBleHBsaWNpdCBub3RpY2UgdGhhdCBpdCBpcyB0aGUgYXV0aG9yIG9mIHNhaWQgbW9kaWZpY2F0aW9uIGFuZCBpbmRpY2F0ZXMgdGhlIGRhdGUgb2YgdGhlIGNyZWF0aW9uIHRoZXJlb2YuXG5cbiAgICAgIDUuMyBSSUdIVCBPRiBESVNUUklCVVRJT05cblxuICAgICAgSW4gcGFydGljdWxhciwgdGhlIHJpZ2h0IG9mIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCwgdHJhbnNtaXQgYW5kIGNvbW11bmljYXRlIHRoZSBTb2Z0d2FyZSB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgb24gYW55IG9yIGFsbCBtZWRpdW0sIGFuZCBieSBhbnkgb3IgYWxsIG1lYW5zLCBhbmQgdGhlIHJpZ2h0IHRvIG1hcmtldCwgZWl0aGVyIGluIGNvbnNpZGVyYXRpb24gb2YgYSBmZWUsIG9yIGZyZWUgb2YgY2hhcmdlLCBvbmUgb3IgbW9yZSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGJ5IGFueSBtZWFucy5cblxuICAgICAgVGhlIExpY2Vuc2VlIGlzIGZ1cnRoZXIgYXV0aG9yaXplZCB0byBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbW9kaWZpZWQgb3IgdW5tb2RpZmllZCBTb2Z0d2FyZSB0byB0aGlyZCBwYXJ0aWVzIGFjY29yZGluZyB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGhlcmVpbmFmdGVyLlxuXG4gICAgICAgICA1LjMuMS4gRElTVFJJQlVUSU9OIE9GIFNPRlRXQVJFIFdJVEhPVVQgTU9ESUZJQ0FUSU9OXG5cbiAgICAgICAgIFRoZSBMaWNlbnNlZSBpcyBhdXRob3JpemVkIHRvIGRpc3RyaWJ1dGUgdHJ1ZSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGluIFNvdXJjZSBDb2RlIG9yIE9iamVjdCBDb2RlIGZvcm0sIHByb3ZpZGVkIHRoYXQgc2FpZCBkaXN0cmlidXRpb24gY29tcGxpZXMgd2l0aCBhbGwgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEFncmVlbWVudCBhbmQgaXMgYWNjb21wYW5pZWQgYnk6XG5cbiAgICAgICAgICAgIDEuIGEgY29weSBvZiB0aGUgQWdyZWVtZW50LFxuXG4gICAgICAgICAgICAyLiBhIG5vdGljZSByZWxhdGluZyB0byB0aGUgbGltaXRhdGlvbiBvZiBib3RoIHRoZSBMaWNlbnNvcidzIHdhcnJhbnR5IGFuZCBsaWFiaWxpdHkgYXMgc2V0IGZvcnRoIGluIEFydGljbGVzIDggYW5kIDksXG5cbiAgICAgICAgIGFuZCB0aGF0LCBpbiB0aGUgZXZlbnQgdGhhdCBvbmx5IHRoZSBPYmplY3QgQ29kZSBvZiB0aGUgU29mdHdhcmUgaXMgcmVkaXN0cmlidXRlZCwgdGhlIExpY2Vuc2VlIGFsbG93cyBlZmZlY3RpdmUgYWNjZXNzIHRvIHRoZSBmdWxsIFNvdXJjZSBDb2RlIG9mIHRoZSBTb2Z0d2FyZSBhdCBhIG1pbmltdW0gZHVyaW5nIHRoZSBlbnRpcmUgcGVyaW9kIG9mIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlLCBpdCBiZWluZyB1bmRlcnN0b29kIHRoYXQgdGhlIGFkZGl0aW9uYWwgY29zdCBvZiBhY3F1aXJpbmcgdGhlIFNvdXJjZSBDb2RlIHNoYWxsIG5vdCBleGNlZWQgdGhlIGNvc3Qgb2YgdHJhbnNmZXJyaW5nIHRoZSBkYXRhLlxuXG4gICAgICAgICA1LjMuMi4gRElTVFJJQlVUSU9OIE9GIE1PRElGSUVEIFNPRlRXQVJFXG5cbiAgICAgICAgIFdoZW4gdGhlIExpY2Vuc2VlIG1ha2VzIGFuIEludGVncmF0ZWQgQ29udHJpYnV0aW9uIHRvIHRoZSBTb2Z0d2FyZSwgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSByZXN1bHRpbmcgTW9kaWZpZWQgU29mdHdhcmUgYmVjb21lIHN1YmplY3QgdG8gYWxsIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50LlxuXG4gICAgICAgICBUaGUgTGljZW5zZWUgaXMgYXV0aG9yaXplZCB0byBkaXN0cmlidXRlIHRoZSBNb2RpZmllZCBTb2Z0d2FyZSwgaW4gc291cmNlIGNvZGUgb3Igb2JqZWN0IGNvZGUgZm9ybSwgcHJvdmlkZWQgdGhhdCBzYWlkIGRpc3RyaWJ1dGlvbiBjb21wbGllcyB3aXRoIGFsbCB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgQWdyZWVtZW50IGFuZCBpcyBhY2NvbXBhbmllZCBieTpcblxuICAgICAgICAgICAgMS4gYSBjb3B5IG9mIHRoZSBBZ3JlZW1lbnQsXG5cbiAgICAgICAgICAgIDIuIGEgbm90aWNlIHJlbGF0aW5nIHRvIHRoZSBsaW1pdGF0aW9uIG9mIGJvdGggdGhlIExpY2Vuc29yJ3Mgd2FycmFudHkgYW5kIGxpYWJpbGl0eSBhcyBzZXQgZm9ydGggaW4gQXJ0aWNsZXMgOCBhbmQgOSxcblxuICAgICAgICAgYW5kIHRoYXQsIGluIHRoZSBldmVudCB0aGF0IG9ubHkgdGhlIG9iamVjdCBjb2RlIG9mIHRoZSBNb2RpZmllZCBTb2Z0d2FyZSBpcyByZWRpc3RyaWJ1dGVkLCB0aGUgTGljZW5zZWUgYWxsb3dzIGVmZmVjdGl2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGwgc291cmNlIGNvZGUgb2YgdGhlIE1vZGlmaWVkIFNvZnR3YXJlIGF0IGEgbWluaW11bSBkdXJpbmcgdGhlIGVudGlyZSBwZXJpb2Qgb2YgaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTW9kaWZpZWQgU29mdHdhcmUsIGl0IGJlaW5nIHVuZGVyc3Rvb2QgdGhhdCB0aGUgYWRkaXRpb25hbCBjb3N0IG9mIGFjcXVpcmluZyB0aGUgc291cmNlIGNvZGUgc2hhbGwgbm90IGV4Y2VlZCB0aGUgY29zdCBvZiB0cmFuc2ZlcnJpbmcgdGhlIGRhdGEuXG5cbiAgICAgICAgIDUuMy4zLiBESVNUUklCVVRJT04gT0YgREVSSVZBVElWRSBTT0ZUV0FSRVxuXG4gICAgICAgICBXaGVuIHRoZSBMaWNlbnNlZSBjcmVhdGVzIERlcml2YXRpdmUgU29mdHdhcmUsIHRoaXMgRGVyaXZhdGl2ZSBTb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgYSBsaWNlbnNlIGFncmVlbWVudCBvdGhlciB0aGFuIHRoaXMgQWdyZWVtZW50LCBzdWJqZWN0IHRvIGNvbXBsaWFuY2Ugd2l0aCB0aGUgcmVxdWlyZW1lbnQgdG8gaW5jbHVkZSBhIG5vdGljZSBjb25jZXJuaW5nIHRoZSByaWdodHMgb3ZlciB0aGUgU29mdHdhcmUgYXMgZGVmaW5lZCBpbiBBcnRpY2xlIDYuNC4gSW4gdGhlIGV2ZW50IHRoZSBjcmVhdGlvbiBvZiB0aGUgRGVyaXZhdGl2ZSBTb2Z0d2FyZSByZXF1aXJlZCBtb2RpZmljYXRpb24gb2YgdGhlIFNvdXJjZSBDb2RlLCB0aGUgTGljZW5zZWUgdW5kZXJ0YWtlcyB0aGF0OlxuXG4gICAgICAgICAgICAxLiB0aGUgcmVzdWx0aW5nIE1vZGlmaWVkIFNvZnR3YXJlIHdpbGwgYmUgZ292ZXJuZWQgYnkgdGhpcyBBZ3JlZW1lbnQsXG5cbiAgICAgICAgICAgIDIuIHRoZSBJbnRlZ3JhdGVkIENvbnRyaWJ1dGlvbnMgaW4gdGhlIHJlc3VsdGluZyBNb2RpZmllZCBTb2Z0d2FyZSB3aWxsIGJlIGNsZWFybHkgaWRlbnRpZmllZCBhbmQgZG9jdW1lbnRlZCxcblxuICAgICAgICAgICAgMy4gdGhlIExpY2Vuc2VlIHdpbGwgYWxsb3cgZWZmZWN0aXZlIGFjY2VzcyB0byB0aGUgc291cmNlIGNvZGUgb2YgdGhlIE1vZGlmaWVkIFNvZnR3YXJlLCBhdCBhIG1pbmltdW0gZHVyaW5nIHRoZSBlbnRpcmUgcGVyaW9kIG9mIGRpc3RyaWJ1dGlvbiBvZiB0aGUgRGVyaXZhdGl2ZSBTb2Z0d2FyZSwgc3VjaCB0aGF0IHN1Y2ggbW9kaWZpY2F0aW9ucyBtYXkgYmUgY2FycmllZCBvdmVyIGluIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBTb2Z0d2FyZTsgaXQgYmVpbmcgdW5kZXJzdG9vZCB0aGF0IHRoZSBhZGRpdGlvbmFsIGNvc3Qgb2YgcHVyY2hhc2luZyB0aGUgc291cmNlIGNvZGUgb2YgdGhlIE1vZGlmaWVkIFNvZnR3YXJlIHNoYWxsIG5vdCBleGNlZWQgdGhlIGNvc3Qgb2YgdHJhbnNmZXJyaW5nIHRoZSBkYXRhLlxuXG4gICAgICAgICA1LjMuNC4gQ09NUEFUSUJJTElUWSBXSVRIIFRIRSBDZUNJTEwgTElDRU5TRVxuXG4gICAgICAgICBXaGVuIGEgTW9kaWZpZWQgU29mdHdhcmUgY29udGFpbnMgYW4gSW50ZWdyYXRlZCBDb250cmlidXRpb24gc3ViamVjdCB0byB0aGUgQ2VDSUxMIGxpY2Vuc2UgYWdyZWVtZW50LCBvciB3aGVuIGEgRGVyaXZhdGl2ZSBTb2Z0d2FyZSBjb250YWlucyBhIFJlbGF0ZWQgTW9kdWxlIHN1YmplY3QgdG8gdGhlIENlQ0lMTCBsaWNlbnNlIGFncmVlbWVudCwgdGhlIHByb3Zpc2lvbnMgc2V0IGZvcnRoIGluIHRoZSB0aGlyZCBpdGVtIG9mIEFydGljbGUgNi40IGFyZSBvcHRpb25hbC5cblxuICAgQXJ0aWNsZSA2IC0gSU5URUxMRUNUVUFMIFBST1BFUlRZXG5cbiAgICAgIDYuMSBPVkVSIFRIRSBJTklUSUFMIFNPRlRXQVJFXG5cbiAgICAgIFRoZSBIb2xkZXIgb3ducyB0aGUgZWNvbm9taWMgcmlnaHRzIG92ZXIgdGhlIEluaXRpYWwgU29mdHdhcmUuIEFueSBvciBhbGwgdXNlIG9mIHRoZSBJbml0aWFsIFNvZnR3YXJlIGlzIHN1YmplY3QgdG8gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUgSG9sZGVyIGhhcyBlbGVjdGVkIHRvIGRpc3RyaWJ1dGUgaXRzIHdvcmsgYW5kIG5vIG9uZSBzaGFsbCBiZSBlbnRpdGxlZCB0byBtb2RpZnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHNhaWQgSW5pdGlhbCBTb2Z0d2FyZS5cblxuICAgICAgVGhlIEhvbGRlciB1bmRlcnRha2VzIHRoYXQgdGhlIEluaXRpYWwgU29mdHdhcmUgd2lsbCByZW1haW4gcnVsZWQgYXQgbGVhc3QgYnkgdGhpcyBBZ3JlZW1lbnQsIGZvciB0aGUgZHVyYXRpb24gc2V0IGZvcnRoIGluIEFydGljbGUgNC4yLlxuXG4gICAgICA2LjIgT1ZFUiBUSEUgSU5URUdSQVRFRCBDT05UUklCVVRJT05TXG5cbiAgICAgIFRoZSBMaWNlbnNlZSB3aG8gZGV2ZWxvcHMgYW4gSW50ZWdyYXRlZCBDb250cmlidXRpb24gaXMgdGhlIG93bmVyIG9mIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG92ZXIgdGhpcyBDb250cmlidXRpb24gYXMgZGVmaW5lZCBieSBhcHBsaWNhYmxlIGxhdy5cblxuICAgICAgNi4zIE9WRVIgVEhFIFJFTEFURUQgTU9EVUxFU1xuXG4gICAgICBUaGUgTGljZW5zZWUgd2hvIGRldmVsb3BzIGEgUmVsYXRlZCBNb2R1bGUgaXMgdGhlIG93bmVyIG9mIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG92ZXIgdGhpcyBSZWxhdGVkIE1vZHVsZSBhcyBkZWZpbmVkIGJ5IGFwcGxpY2FibGUgbGF3IGFuZCBpcyBmcmVlIHRvIGNob29zZSB0aGUgdHlwZSBvZiBhZ3JlZW1lbnQgdGhhdCBzaGFsbCBnb3Zlcm4gaXRzIGRpc3RyaWJ1dGlvbiB1bmRlciB0aGUgY29uZGl0aW9ucyBkZWZpbmVkIGluIEFydGljbGUgNS4zLjMuXG5cbiAgICAgIDYuNCBOT1RJQ0UgT0YgUklHSFRTXG5cbiAgICAgIFRoZSBMaWNlbnNlZSBleHByZXNzbHkgdW5kZXJ0YWtlczpcblxuICAgICAgICAgMS4gbm90IHRvIHJlbW92ZSwgb3IgbW9kaWZ5LCBpbiBhbnkgbWFubmVyLCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG5vdGljZXMgYXR0YWNoZWQgdG8gdGhlIFNvZnR3YXJlO1xuXG4gICAgICAgICAyLiB0byByZXByb2R1Y2Ugc2FpZCBub3RpY2VzLCBpbiBhbiBpZGVudGljYWwgbWFubmVyLCBpbiB0aGUgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBtb2RpZmllZCBvciBub3Q7XG5cbiAgICAgICAgIDMuIHRvIGVuc3VyZSB0aGF0IHVzZSBvZiB0aGUgU29mdHdhcmUsIGl0cyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbm90aWNlcyBhbmQgdGhlIGZhY3QgdGhhdCBpdCBpcyBnb3Zlcm5lZCBieSB0aGUgQWdyZWVtZW50IGlzIGluZGljYXRlZCBpbiBhIHRleHQgdGhhdCBpcyBlYXNpbHkgYWNjZXNzaWJsZSwgc3BlY2lmaWNhbGx5IGZyb20gdGhlIGludGVyZmFjZSBvZiBhbnkgRGVyaXZhdGl2ZSBTb2Z0d2FyZS5cblxuICAgICAgVGhlIExpY2Vuc2VlIHVuZGVydGFrZXMgbm90IHRvIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2UgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgdGhlIEhvbGRlciBhbmQvb3IgQ29udHJpYnV0b3JzIG9uIHRoZSBTb2Z0d2FyZSBhbmQgdG8gdGFrZSwgd2hlcmUgYXBwbGljYWJsZSwgdmlzLcOgLXZpcyBpdHMgc3RhZmYsIGFueSBhbmQgYWxsIG1lYXN1cmVzIHJlcXVpcmVkIHRvIGVuc3VyZSByZXNwZWN0IG9mIHNhaWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiB0aGUgSG9sZGVyIGFuZC9vciBDb250cmlidXRvcnMuXG5cbiAgIEFydGljbGUgNyAtIFJFTEFURUQgU0VSVklDRVNcblxuICAgICAgNy4xIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgc2hhbGwgdGhlIEFncmVlbWVudCBvYmxpZ2UgdGhlIExpY2Vuc29yIHRvIHByb3ZpZGUgdGVjaG5pY2FsIGFzc2lzdGFuY2Ugb3IgbWFpbnRlbmFuY2Ugc2VydmljZXMgZm9yIHRoZSBTb2Z0d2FyZS5cblxuICAgICAgSG93ZXZlciwgdGhlIExpY2Vuc29yIGlzIGVudGl0bGVkIHRvIG9mZmVyIHRoaXMgdHlwZSBvZiBzZXJ2aWNlcy4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHN1Y2ggdGVjaG5pY2FsIGFzc2lzdGFuY2UsIGFuZC9vciBzdWNoIG1haW50ZW5hbmNlLCBzaGFsbCBiZSBzZXQgZm9ydGggaW4gYSBzZXBhcmF0ZSBpbnN0cnVtZW50LiBPbmx5IHRoZSBMaWNlbnNvciBvZmZlcmluZyBzYWlkIG1haW50ZW5hbmNlIGFuZC9vciB0ZWNobmljYWwgYXNzaXN0YW5jZSBzZXJ2aWNlcyBzaGFsbCBpbmN1ciBsaWFiaWxpdHkgdGhlcmVmb3IuXG5cbiAgICAgIDcuMiBTaW1pbGFybHksIGFueSBMaWNlbnNvciBpcyBlbnRpdGxlZCB0byBvZmZlciB0byBpdHMgbGljZW5zZWVzLCB1bmRlciBpdHMgc29sZSByZXNwb25zaWJpbGl0eSwgYSB3YXJyYW50eSwgdGhhdCBzaGFsbCBvbmx5IGJlIGJpbmRpbmcgdXBvbiBpdHNlbGYsIGZvciB0aGUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlIGFuZC9vciB0aGUgTW9kaWZpZWQgU29mdHdhcmUsIHVuZGVyIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgaXQgaXMgZnJlZSB0byBkZWNpZGUuIFNhaWQgd2FycmFudHksIGFuZCB0aGUgZmluYW5jaWFsIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIGl0cyBhcHBsaWNhdGlvbiwgc2hhbGwgYmUgc3ViamVjdCBvZiBhIHNlcGFyYXRlIGluc3RydW1lbnQgZXhlY3V0ZWQgYmV0d2VlbiB0aGUgTGljZW5zb3IgYW5kIHRoZSBMaWNlbnNlZS5cblxuICAgQXJ0aWNsZSA4IC0gTElBQklMSVRZXG5cbiAgICAgIDguMSBTdWJqZWN0IHRvIHRoZSBwcm92aXNpb25zIG9mIEFydGljbGUgOC4yLCB0aGUgTGljZW5zZWUgc2hhbGwgYmUgZW50aXRsZWQgdG8gY2xhaW0gY29tcGVuc2F0aW9uIGZvciBhbnkgZGlyZWN0IGxvc3MgaXQgbWF5IGhhdmUgc3VmZmVyZWQgZnJvbSB0aGUgU29mdHdhcmUgYXMgYSByZXN1bHQgb2YgYSBmYXVsdCBvbiB0aGUgcGFydCBvZiB0aGUgcmVsZXZhbnQgTGljZW5zb3IsIHN1YmplY3QgdG8gcHJvdmlkaW5nIGV2aWRlbmNlIHRoZXJlb2YuXG5cbiAgICAgIDguMiBUaGUgTGljZW5zb3IncyBsaWFiaWxpdHkgaXMgbGltaXRlZCB0byB0aGUgY29tbWl0bWVudHMgbWFkZSB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgc2hhbGwgbm90IGJlIGluY3VycmVkIGFzIGEgcmVzdWx0IG9mIGluIHBhcnRpY3VsYXI6IChpKSBsb3NzIGR1ZSB0aGUgTGljZW5zZWUncyB0b3RhbCBvciBwYXJ0aWFsIGZhaWx1cmUgdG8gZnVsZmlsbCBpdHMgb2JsaWdhdGlvbnMsIChpaSkgZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgbG9zcyB0aGF0IGlzIHN1ZmZlcmVkIGJ5IHRoZSBMaWNlbnNlZSBkdWUgdG8gdGhlIHVzZSBvciBwZXJmb3JtYW5jZSBvZiB0aGUgU29mdHdhcmUsIGFuZCAoaWlpKSBtb3JlIGdlbmVyYWxseSwgYW55IGNvbnNlcXVlbnRpYWwgbG9zcy4gSW4gcGFydGljdWxhciB0aGUgUGFydGllcyBleHByZXNzbHkgYWdyZWUgdGhhdCBhbnkgb3IgYWxsIHBlY3VuaWFyeSBvciBidXNpbmVzcyBsb3NzIChpLmUuIGxvc3Mgb2YgZGF0YSwgbG9zcyBvZiBwcm9maXRzLCBvcGVyYXRpbmcgbG9zcywgbG9zcyBvZiBjdXN0b21lcnMgb3Igb3JkZXJzLCBvcHBvcnR1bml0eSBjb3N0LCBhbnkgZGlzdHVyYmFuY2UgdG8gYnVzaW5lc3MgYWN0aXZpdGllcykgb3IgYW55IG9yIGFsbCBsZWdhbCBwcm9jZWVkaW5ncyBpbnN0aXR1dGVkIGFnYWluc3QgdGhlIExpY2Vuc2VlIGJ5IGEgdGhpcmQgcGFydHksIHNoYWxsIGNvbnN0aXR1dGUgY29uc2VxdWVudGlhbCBsb3NzIGFuZCBzaGFsbCBub3QgcHJvdmlkZSBlbnRpdGxlbWVudCB0byBhbnkgb3IgYWxsIGNvbXBlbnNhdGlvbiBmcm9tIHRoZSBMaWNlbnNvci5cblxuICAgQXJ0aWNsZSA5IC0gV0FSUkFOVFlcblxuICAgICAgOS4xIFRoZSBMaWNlbnNlZSBhY2tub3dsZWRnZXMgdGhhdCB0aGUgc2NpZW50aWZpYyBhbmQgdGVjaG5pY2FsIHN0YXRlLW9mLXRoZS1hcnQgd2hlbiB0aGUgU29mdHdhcmUgd2FzIGRpc3RyaWJ1dGVkIGRpZCBub3QgZW5hYmxlIGFsbCBwb3NzaWJsZSB1c2VzIHRvIGJlIHRlc3RlZCBhbmQgdmVyaWZpZWQsIG5vciBmb3IgdGhlIHByZXNlbmNlIG9mIHBvc3NpYmxlIGRlZmVjdHMgdG8gYmUgZGV0ZWN0ZWQuIEluIHRoaXMgcmVzcGVjdCwgdGhlIExpY2Vuc2VlJ3MgYXR0ZW50aW9uIGhhcyBiZWVuIGRyYXduIHRvIHRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggbG9hZGluZywgdXNpbmcsIG1vZGlmeWluZyBhbmQvb3IgZGV2ZWxvcGluZyBhbmQgcmVwcm9kdWNpbmcgdGhlIFNvZnR3YXJlIHdoaWNoIGFyZSByZXNlcnZlZCBmb3IgZXhwZXJpZW5jZWQgdXNlcnMuXG5cbiAgICAgIFRoZSBMaWNlbnNlZSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgdmVyaWZ5aW5nLCBieSBhbnkgb3IgYWxsIG1lYW5zLCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIHByb2R1Y3QgZm9yIGl0cyByZXF1aXJlbWVudHMsIGl0cyBnb29kIHdvcmtpbmcgb3JkZXIsIGFuZCBmb3IgZW5zdXJpbmcgdGhhdCBpdCBzaGFsbCBub3QgY2F1c2UgZGFtYWdlIHRvIGVpdGhlciBwZXJzb25zIG9yIHByb3BlcnRpZXMuXG5cbiAgICAgIDkuMiBUaGUgTGljZW5zb3IgaGVyZWJ5IHJlcHJlc2VudHMsIGluIGdvb2QgZmFpdGgsIHRoYXQgaXQgaXMgZW50aXRsZWQgdG8gZ3JhbnQgYWxsIHRoZSByaWdodHMgb3ZlciB0aGUgU29mdHdhcmUgKGluY2x1ZGluZyBpbiBwYXJ0aWN1bGFyIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIEFydGljbGUgNSkuXG5cbiAgICAgIDkuMyBUaGUgTGljZW5zZWUgYWNrbm93bGVkZ2VzIHRoYXQgdGhlIFNvZnR3YXJlIGlzIHN1cHBsaWVkIFwiYXMgaXNcIiBieSB0aGUgTGljZW5zb3Igd2l0aG91dCBhbnkgb3RoZXIgZXhwcmVzcyBvciB0YWNpdCB3YXJyYW50eSwgb3RoZXIgdGhhbiB0aGF0IHByb3ZpZGVkIGZvciBpbiBBcnRpY2xlIDkuMiBhbmQsIGluIHBhcnRpY3VsYXIsIHdpdGhvdXQgYW55IHdhcnJhbnR5IGFzIHRvIGl0cyBjb21tZXJjaWFsIHZhbHVlLCBpdHMgc2VjdXJlZCwgc2FmZSwgaW5ub3ZhdGl2ZSBvciByZWxldmFudCBuYXR1cmUuXG5cbiAgICAgIFNwZWNpZmljYWxseSwgdGhlIExpY2Vuc29yIGRvZXMgbm90IHdhcnJhbnQgdGhhdCB0aGUgU29mdHdhcmUgaXMgZnJlZSBmcm9tIGFueSBlcnJvciwgdGhhdCBpdCB3aWxsIG9wZXJhdGUgd2l0aG91dCBpbnRlcnJ1cHRpb24sIHRoYXQgaXQgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIExpY2Vuc2VlJ3Mgb3duIGVxdWlwbWVudCBhbmQgc29mdHdhcmUgY29uZmlndXJhdGlvbiwgbm9yIHRoYXQgaXQgd2lsbCBtZWV0IHRoZSBMaWNlbnNlZSdzIHJlcXVpcmVtZW50cy5cblxuICAgICAgOS40IFRoZSBMaWNlbnNvciBkb2VzIG5vdCBlaXRoZXIgZXhwcmVzc2x5IG9yIHRhY2l0bHkgd2FycmFudCB0aGF0IHRoZSBTb2Z0d2FyZSBkb2VzIG5vdCBpbmZyaW5nZSBhbnkgdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IHJlbGF0aW5nIHRvIGEgcGF0ZW50LCBzb2Z0d2FyZSBvciBhbnkgb3RoZXIgcHJvcGVydHkgcmlnaHQuIFRoZXJlZm9yZSwgdGhlIExpY2Vuc29yIGRpc2NsYWltcyBhbnkgYW5kIGFsbCBsaWFiaWxpdHkgdG93YXJkcyB0aGUgTGljZW5zZWUgYXJpc2luZyBvdXQgb2YgYW55IG9yIGFsbCBwcm9jZWVkaW5ncyBmb3IgaW5mcmluZ2VtZW50IHRoYXQgbWF5IGJlIGluc3RpdHV0ZWQgaW4gcmVzcGVjdCBvZiB0aGUgdXNlLCBtb2RpZmljYXRpb24gYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZS4gTmV2ZXJ0aGVsZXNzLCBzaG91bGQgc3VjaCBwcm9jZWVkaW5ncyBiZSBpbnN0aXR1dGVkIGFnYWluc3QgdGhlIExpY2Vuc2VlLCB0aGUgTGljZW5zb3Igc2hhbGwgcHJvdmlkZSBpdCB3aXRoIHRlY2huaWNhbCBhbmQgbGVnYWwgYXNzaXN0YW5jZSBmb3IgaXRzIGRlZmVuc2UuIFN1Y2ggdGVjaG5pY2FsIGFuZCBsZWdhbCBhc3Npc3RhbmNlIHNoYWxsIGJlIGRlY2lkZWQgb24gYSBjYXNlLWJ5LWNhc2UgYmFzaXMgYmV0d2VlbiB0aGUgcmVsZXZhbnQgTGljZW5zb3IgYW5kIHRoZSBMaWNlbnNlZSBwdXJzdWFudCB0byBhIG1lbW9yYW5kdW0gb2YgdW5kZXJzdGFuZGluZy4gVGhlIExpY2Vuc29yIGRpc2NsYWltcyBhbnkgYW5kIGFsbCBsaWFiaWxpdHkgYXMgcmVnYXJkcyB0aGUgTGljZW5zZWUncyB1c2Ugb2YgdGhlIG5hbWUgb2YgdGhlIFNvZnR3YXJlLiBObyB3YXJyYW50eSBpcyBnaXZlbiBhcyByZWdhcmRzIHRoZSBleGlzdGVuY2Ugb2YgcHJpb3IgcmlnaHRzIG92ZXIgdGhlIG5hbWUgb2YgdGhlIFNvZnR3YXJlIG9yIGFzIHJlZ2FyZHMgdGhlIGV4aXN0ZW5jZSBvZiBhIHRyYWRlbWFyay5cblxuICAgQXJ0aWNsZSAxMCAtIFRFUk1JTkFUSU9OXG5cbiAgICAgIDEwLjEgSW4gdGhlIGV2ZW50IG9mIGEgYnJlYWNoIGJ5IHRoZSBMaWNlbnNlZSBvZiBpdHMgb2JsaWdhdGlvbnMgaGVyZXVuZGVyLCB0aGUgTGljZW5zb3IgbWF5IGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IHRoaXJ0eSAoMzApIGRheXMgYWZ0ZXIgbm90aWNlIGhhcyBiZWVuIHNlbnQgdG8gdGhlIExpY2Vuc2VlIGFuZCBoYXMgcmVtYWluZWQgaW5lZmZlY3RpdmUuXG5cbiAgICAgIDEwLjIgQSBMaWNlbnNlZSB3aG9zZSBBZ3JlZW1lbnQgaXMgdGVybWluYXRlZCBzaGFsbCBubyBsb25nZXIgYmUgYXV0aG9yaXplZCB0byB1c2UsIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZS4gSG93ZXZlciwgYW55IGxpY2Vuc2VzIHRoYXQgaXQgbWF5IGhhdmUgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBvZiB0aGUgQWdyZWVtZW50IHNoYWxsIHJlbWFpbiB2YWxpZCBzdWJqZWN0IHRvIHRoZWlyIGhhdmluZyBiZWVuIGdyYW50ZWQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlb2YuXG5cbiAgIEFydGljbGUgMTEgLSBNSVNDRUxMQU5FT1VTXG5cbiAgICAgIDExLjEgRVhDVVNBQkxFIEVWRU5UU1xuXG4gICAgICBOZWl0aGVyIFBhcnR5IHNoYWxsIGJlIGxpYWJsZSBmb3IgYW55IG9yIGFsbCBkZWxheSwgb3IgZmFpbHVyZSB0byBwZXJmb3JtIHRoZSBBZ3JlZW1lbnQsIHRoYXQgbWF5IGJlIGF0dHJpYnV0YWJsZSB0byBhbiBldmVudCBvZiBmb3JjZSBtYWpldXJlLCBhbiBhY3Qgb2YgR29kIG9yIGFuIG91dHNpZGUgY2F1c2UsIHN1Y2ggYXMgZGVmZWN0aXZlIGZ1bmN0aW9uaW5nIG9yIGludGVycnVwdGlvbnMgb2YgdGhlIGVsZWN0cmljaXR5IG9yIHRlbGVjb21tdW5pY2F0aW9ucyBuZXR3b3JrcywgbmV0d29yayBwYXJhbHlzaXMgZm9sbG93aW5nIGEgdmlydXMgYXR0YWNrLCBpbnRlcnZlbnRpb24gYnkgZ292ZXJubWVudCBhdXRob3JpdGllcywgbmF0dXJhbCBkaXNhc3RlcnMsIHdhdGVyIGRhbWFnZSwgZWFydGhxdWFrZXMsIGZpcmUsIGV4cGxvc2lvbnMsIHN0cmlrZXMgYW5kIGxhYm9yIHVucmVzdCwgd2FyLCBldGMuXG5cbiAgICAgIDExLjIgQW55IGZhaWx1cmUgYnkgZWl0aGVyIFBhcnR5LCBvbiBvbmUgb3IgbW9yZSBvY2Nhc2lvbnMsIHRvIGludm9rZSBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvdmlzaW9ucyBoZXJlb2YsIHNoYWxsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYmUgaW50ZXJwcmV0ZWQgYXMgYmVpbmcgYSB3YWl2ZXIgYnkgdGhlIGludGVyZXN0ZWQgUGFydHkgb2YgaXRzIHJpZ2h0IHRvIGludm9rZSBzYWlkIHByb3Zpc2lvbihzKSBzdWJzZXF1ZW50bHkuXG5cbiAgICAgIDExLjMgVGhlIEFncmVlbWVudCBjYW5jZWxzIGFuZCByZXBsYWNlcyBhbnkgb3IgYWxsIHByZXZpb3VzIGFncmVlbWVudHMsIHdoZXRoZXIgd3JpdHRlbiBvciBvcmFsLCBiZXR3ZWVuIHRoZSBQYXJ0aWVzIGFuZCBoYXZpbmcgdGhlIHNhbWUgcHVycG9zZSwgYW5kIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmV0eSBvZiB0aGUgYWdyZWVtZW50IGJldHdlZW4gc2FpZCBQYXJ0aWVzIGNvbmNlcm5pbmcgc2FpZCBwdXJwb3NlLiBObyBzdXBwbGVtZW50IG9yIG1vZGlmaWNhdGlvbiB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZW9mIHNoYWxsIGJlIGVmZmVjdGl2ZSBhcyBiZXR3ZWVuIHRoZSBQYXJ0aWVzIHVubGVzcyBpdCBpcyBtYWRlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGVpciBkdWx5IGF1dGhvcml6ZWQgcmVwcmVzZW50YXRpdmVzLlxuXG4gICAgICAxMS40IEluIHRoZSBldmVudCB0aGF0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm92aXNpb25zIGhlcmVvZiB3ZXJlIHRvIGNvbmZsaWN0IHdpdGggYSBjdXJyZW50IG9yIGZ1dHVyZSBhcHBsaWNhYmxlIGFjdCBvciBsZWdpc2xhdGl2ZSB0ZXh0LCBzYWlkIGFjdCBvciBsZWdpc2xhdGl2ZSB0ZXh0IHNoYWxsIHByZXZhaWwsIGFuZCB0aGUgUGFydGllcyBzaGFsbCBtYWtlIHRoZSBuZWNlc3NhcnkgYW1lbmRtZW50cyBzbyBhcyB0byBjb21wbHkgd2l0aCBzYWlkIGFjdCBvciBsZWdpc2xhdGl2ZSB0ZXh0LiBBbGwgb3RoZXIgcHJvdmlzaW9ucyBzaGFsbCByZW1haW4gZWZmZWN0aXZlLiBTaW1pbGFybHksIGludmFsaWRpdHkgb2YgYSBwcm92aXNpb24gb2YgdGhlIEFncmVlbWVudCwgZm9yIGFueSByZWFzb24gd2hhdHNvZXZlciwgc2hhbGwgbm90IGNhdXNlIHRoZSBBZ3JlZW1lbnQgYXMgYSB3aG9sZSB0byBiZSBpbnZhbGlkLlxuXG4gICAgICAxMS41IExBTkdVQUdFXG5cbiAgICAgIFRoZSBBZ3JlZW1lbnQgaXMgZHJhZnRlZCBpbiBib3RoIEZyZW5jaCBhbmQgRW5nbGlzaCBhbmQgYm90aCB2ZXJzaW9ucyBhcmUgZGVlbWVkIGF1dGhlbnRpYy5cblxuICAgQXJ0aWNsZSAxMiAtIE5FVyBWRVJTSU9OUyBPRiBUSEUgQUdSRUVNRU5UXG5cbiAgICAgIDEyLjEgQW55IHBlcnNvbiBpcyBhdXRob3JpemVkIHRvIGR1cGxpY2F0ZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgICAgIDEyLjIgU28gYXMgdG8gZW5zdXJlIGNvaGVyZW5jZSwgdGhlIHdvcmRpbmcgb2YgdGhpcyBBZ3JlZW1lbnQgaXMgcHJvdGVjdGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBieSB0aGUgYXV0aG9ycyBvZiB0aGUgTGljZW5zZSwgd2hvIHJlc2VydmUgdGhlIHJpZ2h0IHRvIHBlcmlvZGljYWxseSBwdWJsaXNoIHVwZGF0ZXMgb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBBZ3JlZW1lbnQsIGVhY2ggd2l0aCBhIHNlcGFyYXRlIG51bWJlci4gVGhlc2Ugc3Vic2VxdWVudCB2ZXJzaW9ucyBtYXkgYWRkcmVzcyBuZXcgaXNzdWVzIGVuY291bnRlcmVkIGJ5IEZyZWUgU29mdHdhcmUuXG5cbiAgICAgIDEyLjMgQW55IFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZ2l2ZW4gdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IG1heSBvbmx5IGJlIHN1YnNlcXVlbnRseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgb3IgYSBzdWJzZXF1ZW50IHZlcnNpb24uXG5cbiAgIEFydGljbGUgMTMgLSBHT1ZFUk5JTkcgTEFXIEFORCBKVVJJU0RJQ1RJT05cblxuICAgICAgMTMuMSBUaGUgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IEZyZW5jaCBsYXcuIFRoZSBQYXJ0aWVzIGFncmVlIHRvIGVuZGVhdm9yIHRvIHNlZWsgYW4gYW1pY2FibGUgc29sdXRpb24gdG8gYW55IGRpc2FncmVlbWVudHMgb3IgZGlzcHV0ZXMgdGhhdCBtYXkgYXJpc2UgZHVyaW5nIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgQWdyZWVtZW50LlxuXG4gICAgICAxMy4yIEZhaWxpbmcgYW4gYW1pY2FibGUgc29sdXRpb24gd2l0aGluIHR3byAoMikgbW9udGhzIGFzIGZyb20gdGhlaXIgb2NjdXJyZW5jZSwgYW5kIHVubGVzcyBlbWVyZ2VuY3kgcHJvY2VlZGluZ3MgYXJlIG5lY2Vzc2FyeSwgdGhlIGRpc2FncmVlbWVudHMgb3IgZGlzcHV0ZXMgc2hhbGwgYmUgcmVmZXJyZWQgdG8gdGhlIFBhcmlzIENvdXJ0cyBoYXZpbmcganVyaXNkaWN0aW9uLCBieSB0aGUgbW9yZSBkaWxpZ2VudCBQYXJ0eS5cblxuVmVyc2lvbiAxLjAgZGF0ZWQgMjAwNi0wOS0wNS4gMSBDZUNJTEwgc3RhbmRzIGZvciBDZShhKSBDKG5ycykgSShucmlhKSBMKG9naWNpZWwpIEwoaWJyZSkiXSwibGljZW5zZUlkcyI6WyJDRUNJTEwtQyJdLCJrZXl3b3JkcyI6WyJjZWNpbGwgYyBmcmVlIiwiYyBmcmVlIHNvZnR3YXJlIiwibW9kaWZ5IGFuZCByZSIsImxpY2Vuc2UgdGhlIGV4ZXJjaXNpbmciLCJjb25kaXRpb25hbCB1cG9uIHRoZSIsInVwb24gdGhlIG9ibGlnYXRpb24iLCJvYmxpZ2F0aW9uIHRvIG1ha2UiLCJ0aGUgY29tbXVuaXR5IHRoZSIsImNvbW11bml0eSB0aGUgbW9kaWZpY2F0aW9ucyIsInNvZnR3YXJlIHNvIGFzIiwiYXMgdG8gY29udHJpYnV0ZSIsInRvIGNvbnRyaWJ1dGUgdG8iLCJjb250cmlidXRlIHRvIGl0cyIsInRvIGl0cyBldm9sdXRpb24iLCJpdHMgZXZvbHV0aW9uIGluIiwiZXZvbHV0aW9uIGluIGNvbnNpZGVyYXRpb24iLCJpbnRlZ3JhdGVkIGNvbnRyaWJ1dGlvbiBzb3VyY2UiLCJpbnRlZ3JhdGVkIGNvbnRyaWJ1dGlvbiBsaWNlbnNvciIsInRoZSBhZ3JlZW1lbnQgaW50ZWdyYXRlZCIsImFncmVlbWVudCBpbnRlZ3JhdGVkIGNvbnRyaWJ1dGlvbiIsImludGVncmF0ZWQgY29udHJpYnV0aW9uIG1lYW5zIiwiY29kZSBieSBhbnkiLCJhbGwgY29udHJpYnV0b3JzIHJlbGF0ZWQiLCJjb250cmlidXRvcnMgcmVsYXRlZCBtb2R1bGUiLCJyZWxhdGVkIG1vZHVsZSBtZWFucyIsImRvY3VtZW50YXRpb24gdGhhdCB3aXRob3V0IiwidGhhdCB3aXRob3V0IG1vZGlmaWNhdGlvbiIsIndpdGhvdXQgbW9kaWZpY2F0aW9uIHRvIiwic291cmNlIGNvZGUgZW5hYmxlcyIsImNvZGUgZW5hYmxlcyBzdXBwbGVtZW50YXJ5Iiwic29mdHdhcmUgZGVyaXZhdGl2ZSBzb2Z0d2FyZSIsImRlcml2YXRpdmUgc29mdHdhcmUgbWVhbnMiLCJtZWFucyBhbnkgY29tYmluYXRpb24iLCJvciBub3QgYW5kIiwibm90IGFuZCBvZiIsImFuZCBvZiBhIiwib2YgYSByZWxhdGVkIiwicmVsYXRlZCBtb2R1bGUgcGFydGllcyIsIm1vZHVsZSBwYXJ0aWVzIG1lYW4iLCI1IDIgcmlnaHQiLCIyIHJpZ2h0IG9mIiwib2YgbW9kaWZpY2F0aW9uIHRoZSIsIm1vZGlmaWNhdGlvbiB0aGUgcmlnaHQiLCJvZiBtb2RpZmljYXRpb24gaW5jbHVkZXMiLCJtb2RpZmljYXRpb24gaW5jbHVkZXMgdGhlIiwicmVzdWx0aW5nIHNvZnR3YXJlIGl0Iiwic29mdHdhcmUgaXQgaW5jbHVkZXMiLCJpdCBpbmNsdWRlcyBpbiIsImluY2x1ZGVzIGluIHBhcnRpY3VsYXIiLCJvZiBzYWlkIG1vZGlmaWNhdGlvbiIsInNhaWQgbW9kaWZpY2F0aW9uIGFuZCIsIm1vZGlmaWNhdGlvbiBhbmQgaW5kaWNhdGVzIiwibGljZW5zZWUgbWFrZXMgYW4iLCJtYWtlcyBhbiBpbnRlZ3JhdGVkIiwiaW50ZWdyYXRlZCBjb250cmlidXRpb24gdG8iLCJvZiBkZXJpdmF0aXZlIHNvZnR3YXJlIiwiZGVyaXZhdGl2ZSBzb2Z0d2FyZSB3aGVuIiwidGhlIGxpY2Vuc2VlIGNyZWF0ZXMiLCJsaWNlbnNlZSBjcmVhdGVzIGRlcml2YXRpdmUiLCJjcmVhdGVzIGRlcml2YXRpdmUgc29mdHdhcmUiLCJkZXJpdmF0aXZlIHNvZnR3YXJlIHRoaXMiLCJzb2Z0d2FyZSB0aGlzIGRlcml2YXRpdmUiLCJ0aGlzIGRlcml2YXRpdmUgc29mdHdhcmUiLCJkZXJpdmF0aXZlIHNvZnR3YXJlIG1heSIsIndpdGggdGhlIHJlcXVpcmVtZW50IiwicmVxdWlyZW1lbnQgdG8gaW5jbHVkZSIsImEgbm90aWNlIGNvbmNlcm5pbmciLCJub3RpY2UgY29uY2VybmluZyB0aGUiLCJjb25jZXJuaW5nIHRoZSByaWdodHMiLCJ0aGUgZXZlbnQgdGhlIiwiZXZlbnQgdGhlIGNyZWF0aW9uIiwiZGVyaXZhdGl2ZSBzb2Z0d2FyZSByZXF1aXJlZCIsInNvZnR3YXJlIHJlcXVpcmVkIG1vZGlmaWNhdGlvbiIsInJlcXVpcmVkIG1vZGlmaWNhdGlvbiBvZiIsImNvZGUgdGhlIGxpY2Vuc2VlIiwibGljZW5zZWUgdW5kZXJ0YWtlcyB0aGF0IiwidW5kZXJ0YWtlcyB0aGF0IDEiLCIxIHRoZSByZXN1bHRpbmciLCIyIHRoZSBpbnRlZ3JhdGVkIiwiaW50ZWdyYXRlZCBjb250cmlidXRpb25zIGluIiwiY29udHJpYnV0aW9ucyBpbiB0aGUiLCJpbiB0aGUgcmVzdWx0aW5nIiwid2lsbCBiZSBjbGVhcmx5IiwiY2xlYXJseSBpZGVudGlmaWVkIGFuZCIsImlkZW50aWZpZWQgYW5kIGRvY3VtZW50ZWQiLCJhbmQgZG9jdW1lbnRlZCAzIiwiZG9jdW1lbnRlZCAzIHRoZSIsImxpY2Vuc2VlIHdpbGwgYWxsb3ciLCJ3aWxsIGFsbG93IGVmZmVjdGl2ZSIsImFsbG93IGVmZmVjdGl2ZSBhY2Nlc3MiLCJwZXJpb2Qgb2YgZGlzdHJpYnV0aW9uIiwiZGVyaXZhdGl2ZSBzb2Z0d2FyZSBzdWNoIiwic29mdHdhcmUgc3VjaCB0aGF0Iiwic3VjaCB0aGF0IHN1Y2giLCJzdWNoIG1vZGlmaWNhdGlvbnMgbWF5IiwibWF5IGJlIGNhcnJpZWQiLCJiZSBjYXJyaWVkIG92ZXIiLCJjYXJyaWVkIG92ZXIgaW4iLCJvdmVyIGluIGEiLCJpbiBhIHN1YnNlcXVlbnQiLCJjb3N0IG9mIHB1cmNoYXNpbmciLCJvZiBwdXJjaGFzaW5nIHRoZSIsInB1cmNoYXNpbmcgdGhlIHNvdXJjZSIsImNlY2lsbCBsaWNlbnNlIHdoZW4iLCJsaWNlbnNlIHdoZW4gYSIsIndoZW4gYSBtb2RpZmllZCIsInNvZnR3YXJlIGNvbnRhaW5zIGFuIiwiY29udGFpbnMgYW4gaW50ZWdyYXRlZCIsImludGVncmF0ZWQgY29udHJpYnV0aW9uIHN1YmplY3QiLCJsaWNlbnNlIGFncmVlbWVudCBvciIsImFncmVlbWVudCBvciB3aGVuIiwib3Igd2hlbiBhIiwid2hlbiBhIGRlcml2YXRpdmUiLCJkZXJpdmF0aXZlIHNvZnR3YXJlIGNvbnRhaW5zIiwiY29udGFpbnMgYSByZWxhdGVkIiwicmVsYXRlZCBtb2R1bGUgc3ViamVjdCIsIm1vZHVsZSBzdWJqZWN0IHRvIiwiYWdyZWVtZW50IHRoZSBwcm92aXNpb25zIiwiaW4gdGhlIHRoaXJkIiwidGhlIHRoaXJkIGl0ZW0iLCJ0aGlyZCBpdGVtIG9mIiwiaXRlbSBvZiBhcnRpY2xlIiwib2YgYXJ0aWNsZSA2IiwiNiA0IGFyZSIsIjQgYXJlIG9wdGlvbmFsIiwiYXJlIG9wdGlvbmFsIGFydGljbGUiLCJvdmVyIHRoZSBpbnRlZ3JhdGVkIiwiaW50ZWdyYXRlZCBjb250cmlidXRpb25zIHRoZSIsImRldmVsb3BzIGFuIGludGVncmF0ZWQiLCJpbnRlZ3JhdGVkIGNvbnRyaWJ1dGlvbiBpcyIsIm92ZXIgdGhlIHJlbGF0ZWQiLCJ0aGUgcmVsYXRlZCBtb2R1bGVzIiwicmVsYXRlZCBtb2R1bGVzIHRoZSIsImRldmVsb3BzIGEgcmVsYXRlZCIsInJlbGF0ZWQgbW9kdWxlIGlzIiwib3ZlciB0aGlzIHJlbGF0ZWQiLCJ0aGlzIHJlbGF0ZWQgbW9kdWxlIiwicmVsYXRlZCBtb2R1bGUgYXMiLCJpdHMgZGlzdHJpYnV0aW9uIHVuZGVyIiwidGhlIGNvbmRpdGlvbnMgZGVmaW5lZCIsImNvbmRpdGlvbnMgZGVmaW5lZCBpbiIsIjMgMyA2IiwiMyA2IDQiLCI2IDQgbm90aWNlIiwiNCBub3RpY2Ugb2YiLCJub3RpY2Ugb2YgcmlnaHRzIiwib2YgcmlnaHRzIHRoZSIsInJpZ2h0cyB0aGUgbGljZW5zZWUiLCJvciBub3QgMyIsIm5vdCAzIHRvIiwiMyB0byBlbnN1cmUiLCJlbnN1cmUgdGhhdCB1c2UiLCJzb2Z0d2FyZSBpdHMgaW50ZWxsZWN0dWFsIiwicHJvcGVydHkgbm90aWNlcyBhbmQiLCJhbmQgdGhlIGZhY3QiLCJmYWN0IHRoYXQgaXQiLCJieSB0aGUgYWdyZWVtZW50IiwiYWdyZWVtZW50IGlzIGluZGljYXRlZCIsImlzIGluZGljYXRlZCBpbiIsImluZGljYXRlZCBpbiBhIiwiYSB0ZXh0IHRoYXQiLCJ0ZXh0IHRoYXQgaXMiLCJ0aGF0IGlzIGVhc2lseSIsImlzIGVhc2lseSBhY2Nlc3NpYmxlIiwiZWFzaWx5IGFjY2Vzc2libGUgc3BlY2lmaWNhbGx5IiwiYWNjZXNzaWJsZSBzcGVjaWZpY2FsbHkgZnJvbSIsInNwZWNpZmljYWxseSBmcm9tIHRoZSIsImZyb20gdGhlIGludGVyZmFjZSIsInRoZSBpbnRlcmZhY2Ugb2YiLCJpbnRlcmZhY2Ugb2YgYW55IiwiYW55IGRlcml2YXRpdmUgc29mdHdhcmUiLCJjZWNpbGwgYyBmcmVlIHNvZnR3YXJlIiwiYyBmcmVlIHNvZnR3YXJlIGxpY2Vuc2UiLCJ0byBtb2RpZnkgYW5kIHJlIiwibW9kaWZ5IGFuZCByZSB1c2UiLCJyZSB1c2UgdGhlIHNvZnR3YXJlIiwidXNlIHRoZSBzb2Z0d2FyZSBnb3Zlcm5lZCIsInRoaXMgbGljZW5zZSB0aGUgZXhlcmNpc2luZyIsImxpY2Vuc2UgdGhlIGV4ZXJjaXNpbmcgb2YiLCJpcyBjb25kaXRpb25hbCB1cG9uIHRoZSIsImNvbmRpdGlvbmFsIHVwb24gdGhlIG9ibGlnYXRpb24iLCJ1cG9uIHRoZSBvYmxpZ2F0aW9uIHRvIiwidGhlIG9ibGlnYXRpb24gdG8gbWFrZSIsIm9ibGlnYXRpb24gdG8gbWFrZSBhdmFpbGFibGUiLCJ0byB0aGUgY29tbXVuaXR5IHRoZSIsInRoZSBjb21tdW5pdHkgdGhlIG1vZGlmaWNhdGlvbnMiLCJjb21tdW5pdHkgdGhlIG1vZGlmaWNhdGlvbnMgbWFkZSIsIm1hZGUgdG8gdGhlIHNvdXJjZSIsInRoZSBzb2Z0d2FyZSBzbyBhcyIsInNvZnR3YXJlIHNvIGFzIHRvIiwic28gYXMgdG8gY29udHJpYnV0ZSIsImFzIHRvIGNvbnRyaWJ1dGUgdG8iLCJ0byBjb250cmlidXRlIHRvIGl0cyIsImNvbnRyaWJ1dGUgdG8gaXRzIGV2b2x1dGlvbiIsInRvIGl0cyBldm9sdXRpb24gaW4iLCJpdHMgZXZvbHV0aW9uIGluIGNvbnNpZGVyYXRpb24iLCJldm9sdXRpb24gaW4gY29uc2lkZXJhdGlvbiBvZiIsIm9uZSBpbnRlZ3JhdGVkIGNvbnRyaWJ1dGlvbiBzb3VyY2UiLCJpbnRlZ3JhdGVkIGNvbnRyaWJ1dGlvbiBzb3VyY2UgY29kZSIsIm9uZSBpbnRlZ3JhdGVkIGNvbnRyaWJ1dGlvbiBsaWNlbnNvciJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDRVJOIE9ITCB2MS4xXG5cbjIwMTEtMDctMDggLSBDRVJOLCBHZW5ldmEsIFN3aXR6ZXJsYW5kXG5cbkNFUk4gT3BlbiBIYXJkd2FyZSBMaWNlbmNlIHYxLjFcblxuUHJlYW1ibGVcblxuVGhyb3VnaCB0aGlzIENFUk4gT3BlbiBIYXJkd2FyZSBMaWNlbmNlIChcIkNFUk4gT0hMXCIpIHZlcnNpb24gMS4xLCB0aGUgT3JnYW5pemF0aW9uIHdpc2hlcyB0byBkaXNzZW1pbmF0ZSBpdHMgaGFyZHdhcmUgZGVzaWducyAoYXMgcHVibGlzaGVkIG9uIGh0dHA6Ly93d3cub2h3ci5vcmcvKSBhcyB3aWRlbHkgYXMgcG9zc2libGUsIGFuZCBnZW5lcmFsbHkgdG8gZm9zdGVyIGNvbGxhYm9yYXRpb24gYW1vbmcgcHVibGljIHJlc2VhcmNoIGhhcmR3YXJlIGRlc2lnbmVycy4gVGhlIENFUk4gT0hMIGlzIGNvcHlyaWdodCBvZiBDRVJOLiBBbnlvbmUgaXMgd2VsY29tZSB0byB1c2UgdGhlIENFUk4gT0hMLCBpbiB1bm1vZGlmaWVkIGZvcm0gb25seSwgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgaGlzIG93biBPcGVuIEhhcmR3YXJlIGRlc2lnbnMuIEFueSBvdGhlciByaWdodCBpcyByZXNlcnZlZC5cblxuMS4gRGVmaW5pdGlvbnNcblxuSW4gdGhpcyBMaWNlbmNlLCB0aGUgZm9sbG93aW5nIHRlcm1zIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nczpcblxuXCJMaWNlbmNlXCIgbWVhbnMgdGhpcyBDRVJOIE9ITC5cblxuXCJEb2N1bWVudGF0aW9uXCIgbWVhbnMgc2NoZW1hdGljIGRpYWdyYW1zLCBkZXNpZ25zLCBjaXJjdWl0IG9yIGNpcmN1aXQgYm9hcmQgbGF5b3V0cywgbWVjaGFuaWNhbCBkcmF3aW5ncywgZmxvdyBjaGFydHMgYW5kIGRlc2NyaXB0aXZlIHRleHQsIGFuZCBvdGhlciBleHBsYW5hdG9yeSBtYXRlcmlhbCB0aGF0IGlzIGV4cGxpY2l0bHkgc3RhdGVkIGFzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5jZS4gVGhlIERvY3VtZW50YXRpb24gbWF5IGJlIGluIGFueSBtZWRpdW0sIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tcHV0ZXIgZmlsZXMgYW5kIHJlcHJlc2VudGF0aW9ucyBvbiBwYXBlciwgZmlsbSwgb3IgYW55IG90aGVyIG1lZGlhLlxuXG5cIlByb2R1Y3RcIiBtZWFucyBlaXRoZXIgYW4gZW50aXJlLCBvciBhbnkgcGFydCBvZiBhLCBkZXZpY2UgYnVpbHQgdXNpbmcgdGhlIERvY3VtZW50YXRpb24gb3IgdGhlIG1vZGlmaWVkIERvY3VtZW50YXRpb24uXG5cblwiTGljZW5zZWVcIiBtZWFucyBhbnkgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbmNlLlxuXG5cIkxpY2Vuc29yXCIgbWVhbnMgYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHRoYXQgY3JlYXRlcyBvciBtb2RpZmllcyBEb2N1bWVudGF0aW9uIGFuZCBzdWJzZXF1ZW50bHkgY29tbXVuaWNhdGVzIHRvIHRoZSBwdWJsaWMgYW5kLyBvciBkaXN0cmlidXRlcyB0aGUgcmVzdWx0aW5nIERvY3VtZW50YXRpb24gdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5jZS5cblxuQSBMaWNlbnNlZSBtYXkgYXQgdGhlIHNhbWUgdGltZSBiZSBhIExpY2Vuc29yLCBhbmQgdmljZSB2ZXJzYS5cblxuXG5cbjIuIEFwcGxpY2FiaWxpdHlcblxuICAgMi4xIFRoaXMgTGljZW5jZSBnb3Zlcm5zIHRoZSB1c2UsIGNvcHlpbmcsIG1vZGlmaWNhdGlvbiwgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIERvY3VtZW50YXRpb24sIGFuZCB0aGUgbWFudWZhY3R1cmUgYW5kIGRpc3RyaWJ1dGlvbiBvZiBQcm9kdWN0cy4gQnkgZXhlcmNpc2luZyBhbnkgcmlnaHQgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2VuY2UsIHRoZSBMaWNlbnNlZSBpcnJldm9jYWJseSBhY2NlcHRzIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLlxuXG4gICAyLjIgVGhpcyBMaWNlbmNlIGlzIGdyYW50ZWQgYnkgdGhlIExpY2Vuc29yIGRpcmVjdGx5IHRvIHRoZSBMaWNlbnNlZSwgYW5kIHNoYWxsIGFwcGx5IHdvcmxkd2lkZSBhbmQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRpbWUuIFRoZSBMaWNlbnNlZSBtYXkgYXNzaWduIGhpcyBsaWNlbmNlIHJpZ2h0cyBvciBncmFudCBzdWItbGljZW5jZXMuXG5cbiAgIDIuMyBUaGlzIExpY2VuY2UgZG9lcyBub3QgYXBwbHkgdG8gc29mdHdhcmUsIGZpcm13YXJlLCBvciBjb2RlIGxvYWRlZCBpbnRvIHByb2dyYW1tYWJsZSBkZXZpY2VzIHdoaWNoIG1heSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIERvY3VtZW50YXRpb24sIHRoZSBtb2RpZmllZCBEb2N1bWVudGF0aW9uIG9yIHdpdGggUHJvZHVjdHMuIFRoZSB1c2Ugb2Ygc3VjaCBzb2Z0d2FyZSwgZmlybXdhcmUsIG9yIGNvZGUgaXMgc3ViamVjdCB0byB0aGUgYXBwbGljYWJsZSBsaWNlbmNlIHRlcm1zIGFuZCBjb25kaXRpb25zLlxuXG4zLiBDb3B5aW5nLCBtb2RpZmljYXRpb24sIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBEb2N1bWVudGF0aW9uXG5cbiAgIDMuMSBUaGUgTGljZW5zZWUgc2hhbGwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBhbmQgdHJhZGVtYXJrcyBub3RpY2VzIGFuZCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5jZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB0aGF0IGlzIGluY2x1ZGVkIGluIHRoZSBEb2N1bWVudGF0aW9uLiBIZSBzaGFsbCBpbmNsdWRlIGEgY29weSB0aGVyZW9mIGluIGV2ZXJ5IGNvcHkgb2YgdGhlIGRvY3VtZW50YXRpb24gb3IsIGFzIHRoZSBjYXNlIG1heSBiZSwgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiwgdGhhdCBoZSBjb21tdW5pY2F0ZXMgdG8gdGhlIHB1YmxpYyBvciBkaXN0cmlidXRlcy5cblxuICAgMy4yIFRoZSBMaWNlbnNlZSBtYXkgdXNlLCBjb3B5LCBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgRG9jdW1lbnRhdGlvbiwgaW4gYW55IG1lZGl1bSwgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBpbiBzZWN0aW9uIDMuMS5cblxuICAgMy4zIFRoZSBMaWNlbnNlZSBtYXkgbW9kaWZ5IHRoZSBEb2N1bWVudGF0aW9uIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuIFRoZSBMaWNlbnNlZSBtYXkgY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyBhbmQgZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiAodGhlcmVieSBpbiBhZGRpdGlvbiB0byBiZWluZyBhIExpY2Vuc2VlIGFsc28gYmVjb21pbmcgYSBMaWNlbnNvciksIGFsd2F5cyBwcm92aWRlZCB0aGF0IGhlIHNoYWxsOlxuXG4gICAgICBhLiBjb21wbHkgd2l0aCBzZWN0aW9uIDMuMTtcblxuICAgICAgYi4gY2F1c2UgdGhlIG1vZGlmaWVkIERvY3VtZW50YXRpb24gdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHRoZSBMaWNlbnNlZSBoYXMgbW9kaWZpZWQgdGhlIERvY3VtZW50YXRpb24sIHdpdGggdGhlIGRhdGUgYW5kIGRldGFpbHMgb2YgdGhlIG1vZGlmaWNhdGlvbnM7XG5cbiAgICAgIGMuIGxpY2Vuc2UgdGhlIG1vZGlmaWVkIERvY3VtZW50YXRpb24gdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5jZSBvciwgd2hlcmUgYXBwbGljYWJsZSwgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5jZSBhcyBtYXkgYmUgaXNzdWVkIGJ5IENFUk47IGFuZFxuXG4gICAgICBkLiBzZW5kIGEgY29weSBvZiB0aGUgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiB0byBhbGwgTGljZW5zb3JzIHRoYXQgY29udHJpYnV0ZWQgdG8gdGhlIHBhcnRzIG9mIHRoZSBEb2N1bWVudGF0aW9uIHRoYXQgd2VyZSBtb2RpZmllZCwgYXMgd2VsbCBhcyB0byBhbnkgb3RoZXIgTGljZW5zb3Igd2hvIGhhcyByZXF1ZXN0ZWQgdG8gcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIG1vZGlmaWVkIERvY3VtZW50YXRpb24gYW5kIGhhcyBwcm92aWRlZCBhIG1lYW5zIG9mIGNvbnRhY3Qgd2l0aCB0aGUgRG9jdW1lbnRhdGlvbi5cblxuICAgMy40IFRoZSBMaWNlbmNlIGluY2x1ZGVzIGEgbGljZW5jZSB0byB0aG9zZSBwYXRlbnRzIG9yIHJlZ2lzdGVyZWQgZGVzaWducyB0aGF0IGFyZSBoZWxkIGJ5IHRoZSBMaWNlbnNvciwgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSB1c2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5jZS4gVGhlIHNjb3BlIG9mIHRoaXMgc2VjdGlvbiAzLjQgc2hhbGwgYmUgc3RyaWN0bHkgbGltaXRlZCB0byB0aGUgcGFydHMgb2YgdGhlIERvY3VtZW50YXRpb24gb3IgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiBjcmVhdGVkIGJ5IHRoZSBMaWNlbnNvci5cblxuNC4gTWFudWZhY3R1cmUgYW5kIGRpc3RyaWJ1dGlvbiBvZiBQcm9kdWN0c1xuXG4gICA0LjEgVGhlIExpY2Vuc2VlIG1heSBtYW51ZmFjdHVyZSBvciBkaXN0cmlidXRlIFByb2R1Y3RzIGFsd2F5cyBwcm92aWRlZCB0aGF0IHRoZSBMaWNlbnNlZSBkaXN0cmlidXRlcyB0byBlYWNoIHJlY2lwaWVudCBvZiBzdWNoIFByb2R1Y3RzIGEgY29weSBvZiB0aGUgRG9jdW1lbnRhdGlvbiBvciBtb2RpZmllZCBEb2N1bWVudGF0aW9uLCBhcyBhcHBsaWNhYmxlLCBhbmQgY29tcGxpZXMgd2l0aCBzZWN0aW9uIDMuXG5cbiAgIDQuMiBUaGUgTGljZW5zZWUgaXMgaW52aXRlZCB0byBpbmZvcm0gaW4gd3JpdGluZyBhbnkgTGljZW5zb3Igd2hvIGhhcyBpbmRpY2F0ZWQgaXRzIHdpc2ggdG8gcmVjZWl2ZSB0aGlzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0eXBlLCBxdWFudGl0eSBhbmQgZGF0ZXMgb2YgcHJvZHVjdGlvbiBvZiBQcm9kdWN0cyB0aGUgTGljZW5zZWUgaGFzIChoYWQpIG1hbnVmYWN0dXJlZC5cblxuNS4gV2FycmFudHkgYW5kIGxpYWJpbGl0eVxuXG4gICA1LjEgRElTQ0xBSU1FUiDigJMgVGhlIERvY3VtZW50YXRpb24gYW5kIGFueSBtb2RpZmllZCBEb2N1bWVudGF0aW9uIGFyZSBwcm92aWRlZCBcImFzIGlzXCIgYW5kIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudGllcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIG9mIHNhdGlzZmFjdG9yeSBxdWFsaXR5LCBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2Ugb3IgdXNlIGFyZSBkaXNjbGFpbWVkIGluIHJlc3BlY3Qgb2YgdGhlIERvY3VtZW50YXRpb24sIHRoZSBtb2RpZmllZCBEb2N1bWVudGF0aW9uIG9yIGFueSBQcm9kdWN0LiBUaGUgTGljZW5zb3IgbWFrZXMgbm8gcmVwcmVzZW50YXRpb24gdGhhdCB0aGUgRG9jdW1lbnRhdGlvbiwgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiwgb3IgYW55IFByb2R1Y3QsIGRvZXMgb3Igd2lsbCBub3QgaW5mcmluZ2UgYW55IHBhdGVudCwgY29weXJpZ2h0LCB0cmFkZSBzZWNyZXQgb3Igb3RoZXIgcHJvcHJpZXRhcnkgcmlnaHQuIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgdXNlLCBxdWFsaXR5LCBhbmQgcGVyZm9ybWFuY2Ugb2YgYSBQcm9kdWN0IHNoYWxsIGJlIHdpdGggdGhlIExpY2Vuc2VlIGFuZCBub3QgdGhlIExpY2Vuc29yLiBUaGlzIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgaXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbmNlIGFuZCBhIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50IG9mIGFueSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2VuY2UuIFRoZSBMaWNlbnNlZSB3YXJyYW50cyB0aGF0IGl0IGRvZXMgbm90IGFjdCBpbiBhIGNvbnN1bWVyIGNhcGFjaXR5LlxuXG4gICA1LjIgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkg4oCTIFRoZSBMaWNlbnNvciBzaGFsbCBoYXZlIG5vIGxpYWJpbGl0eSBmb3IgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgY29uc2VxdWVudGlhbCwgZXhlbXBsYXJ5LCBwdW5pdGl2ZSBvciBvdGhlciBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHByb2N1cmVtZW50IG9mIHN1YnN0aXR1dGUgZ29vZHMgb3Igc2VydmljZXMsIGxvc3Mgb2YgdXNlLCBkYXRhIG9yIHByb2ZpdHMsIG9yIGJ1c2luZXNzIGludGVycnVwdGlvbiwgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgY29udHJhY3QsIHdhcnJhbnR5LCB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIHByb2R1Y3QgbGlhYmlsaXR5IG9yIG90aGVyd2lzZSwgYXJpc2luZyBpbiBhbnkgd2F5IGluIHJlbGF0aW9uIHRvIHRoZSBEb2N1bWVudGF0aW9uLCBtb2RpZmllZCBEb2N1bWVudGF0aW9uIGFuZC9vciB0aGUgdXNlLCBtYW51ZmFjdHVyZSBvciBkaXN0cmlidXRpb24gb2YgYSBQcm9kdWN0LCBldmVuIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcywgYW5kIHRoZSBMaWNlbnNlZSBzaGFsbCBob2xkIHRoZSBMaWNlbnNvcihzKSBmcmVlIGFuZCBoYXJtbGVzcyBmcm9tIGFueSBsaWFiaWxpdHksIGNvc3RzLCBkYW1hZ2VzLCBmZWVzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nIGNsYWltcyBieSB0aGlyZCBwYXJ0aWVzLCBpbiByZWxhdGlvbiB0byBzdWNoIHVzZS5cblxuNi4gR2VuZXJhbFxuXG4gICA2LjEgVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5jZSBkbyBub3QgaW1wbHkgb3IgcmVwcmVzZW50IGFueSB0cmFuc2ZlciBvciBhc3NpZ25tZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgdG8gdGhlIExpY2Vuc2VlLlxuXG4gICA2LjIgVGhlIExpY2Vuc2VlIHNoYWxsIG5vdCB1c2Ugb3IgbWFrZSByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBuYW1lcywgYWNyb255bXMsIGltYWdlcyBvciBsb2dvcyB1bmRlciB3aGljaCB0aGUgTGljZW5zb3IgaXMga25vd24sIHNhdmUgaW4gc28gZmFyIGFzIHJlcXVpcmVkIHRvIGNvbXBseSB3aXRoIHNlY3Rpb24gMy4gQW55IHN1Y2ggcGVybWl0dGVkIHVzZSBvciByZWZlcmVuY2Ugc2hhbGwgYmUgZmFjdHVhbCBhbmQgc2hhbGwgaW4gbm8gZXZlbnQgc3VnZ2VzdCBhbnkga2luZCBvZiBlbmRvcnNlbWVudCBieSB0aGUgTGljZW5zb3Igb3IgaXRzIHBlcnNvbm5lbCBvZiB0aGUgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiBvciBhbnkgUHJvZHVjdCwgb3IgYW55IGtpbmQgb2YgaW1wbGljYXRpb24gYnkgdGhlIExpY2Vuc29yIG9yIGl0cyBwZXJzb25uZWwgaW4gdGhlIHByZXBhcmF0aW9uIG9mIHRoZSBtb2RpZmllZCBEb2N1bWVudGF0aW9uIG9yIFByb2R1Y3QuXG5cbiAgIDYuMyBDRVJOIG1heSBwdWJsaXNoIHVwZGF0ZWQgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbmNlIHdoaWNoIHJldGFpbiB0aGUgc2FtZSBnZW5lcmFsIHByb3Zpc2lvbnMgYXMgdGhpcyB2ZXJzaW9uLCBidXQgZGlmZmVyIGluIGRldGFpbCBzbyBmYXIgdGhpcyBpcyByZXF1aXJlZCBhbmQgcmVhc29uYWJsZS4gTmV3IHZlcnNpb25zIHdpbGwgYmUgcHVibGlzaGVkIHdpdGggYSB1bmlxdWUgdmVyc2lvbiBudW1iZXIuXG5cbiAgIDYuNCBUaGlzIExpY2VuY2Ugc2hhbGwgdGVybWluYXRlIHdpdGggaW1tZWRpYXRlIGVmZmVjdCwgdXBvbiB3cml0dGVuIG5vdGljZSBhbmQgd2l0aG91dCBpbnZvbHZlbWVudCBvZiBhIGNvdXJ0IGlmIHRoZSBMaWNlbnNlZSBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLCBvciBpZiB0aGUgTGljZW5zZWUgaW5pdGlhdGVzIGxlZ2FsIGFjdGlvbiBhZ2FpbnN0IExpY2Vuc29yIGluIHJlbGF0aW9uIHRvIHRoaXMgTGljZW5jZS4gU2VjdGlvbiA1IHNoYWxsIGNvbnRpbnVlIHRvIGFwcGx5LlxuXG4gICA2LjUgRXhjZXB0IGFzIG1heSBiZSBvdGhlcndpc2UgYWdyZWVkIHdpdGggdGhlIEludGVyZ292ZXJubWVudGFsIE9yZ2FuaXphdGlvbiwgYW55IGRpc3B1dGUgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5jZSBpbnZvbHZpbmcgYW4gSW50ZXJnb3Zlcm5tZW50YWwgT3JnYW5pemF0aW9uIHNoYWxsLCBieSB2aXJ0dWUgb2YgdGhlIGxhdHRlcidzIEludGVyZ292ZXJubWVudGFsIHN0YXR1cywgYmUgc2V0dGxlZCBieSBpbnRlcm5hdGlvbmFsIGFyYml0cmF0aW9uLiBUaGUgYXJiaXRyYXRpb24gcHJvY2VlZGluZ3Mgc2hhbGwgYmUgaGVsZCBhdCB0aGUgcGxhY2Ugd2hlcmUgdGhlIEludGVyZ292ZXJubWVudGFsIE9yZ2FuaXphdGlvbiBoYXMgaXRzIHNlYXQuIFRoZSBhcmJpdHJhbCBhd2FyZCBzaGFsbCBiZSBmaW5hbCBhbmQgYmluZGluZyB1cG9uIHRoZSBwYXJ0aWVzLCB3aG8gaGVyZWJ5IGV4cHJlc3NseSBhZ3JlZSB0byByZW5vdW5jZSBhbnkgZm9ybSBvZiBhcHBlYWwgb3IgcmV2aXNpb24uIl0sImxpY2Vuc2VJZHMiOlsiQ0VSTi1PSEwtMS4xIl0sImtleXdvcmRzIjpbIm9obCB2MSAxIiwidjEgMSAyMDExIiwiMSAyMDExIDA3IiwiMjAxMSAwNyAwOCIsIjA3IDA4IGNlcm4iLCIwOCBjZXJuIGdlbmV2YSIsImxpY2VuY2UgdjEgMSIsInYxIDEgcHJlYW1ibGUiLCIxIHByZWFtYmxlIHRocm91Z2giLCIxIHRoZSBvcmdhbml6YXRpb24iLCJ0aGUgb3JnYW5pemF0aW9uIHdpc2hlcyIsIm9yZ2FuaXphdGlvbiB3aXNoZXMgdG8iLCJ3aXNoZXMgdG8gZGlzc2VtaW5hdGUiLCJ0byBkaXNzZW1pbmF0ZSBpdHMiLCJkaXNzZW1pbmF0ZSBpdHMgaGFyZHdhcmUiLCJpdHMgaGFyZHdhcmUgZGVzaWducyIsImhhcmR3YXJlIGRlc2lnbnMgYXMiLCJkZXNpZ25zIGFzIHB1Ymxpc2hlZCIsImFzIHB1Ymxpc2hlZCBvbiIsInB1Ymxpc2hlZCBvbiBodHRwIiwib24gaHR0cCB3d3ciLCJodHRwIHd3dyBvaHdyIiwid3d3IG9od3Igb3JnIiwib2h3ciBvcmcgYXMiLCJvcmcgYXMgd2lkZWx5IiwiYXMgd2lkZWx5IGFzIiwid2lkZWx5IGFzIHBvc3NpYmxlIiwiYXMgcG9zc2libGUgYW5kIiwicG9zc2libGUgYW5kIGdlbmVyYWxseSIsImFuZCBnZW5lcmFsbHkgdG8iLCJnZW5lcmFsbHkgdG8gZm9zdGVyIiwiZm9zdGVyIGNvbGxhYm9yYXRpb24gYW1vbmciLCJjb2xsYWJvcmF0aW9uIGFtb25nIHB1YmxpYyIsImFtb25nIHB1YmxpYyByZXNlYXJjaCIsInB1YmxpYyByZXNlYXJjaCBoYXJkd2FyZSIsInJlc2VhcmNoIGhhcmR3YXJlIGRlc2lnbmVycyIsImlzIGNvcHlyaWdodCBvZiIsImNvcHlyaWdodCBvZiBjZXJuIiwib2YgY2VybiBhbnlvbmUiLCJkaXN0cmlidXRpb24gb2YgaGlzIiwib2YgaGlzIG93biIsImhpcyBvd24gb3BlbiIsImlzIHJlc2VydmVkIDEiLCJyZXNlcnZlZCAxIGRlZmluaXRpb25zIiwib3RoZXIgbWVkaWEgcHJvZHVjdCIsIm1lZGlhIHByb2R1Y3QgbWVhbnMiLCJ2ZXJzYSAyIGFwcGxpY2FiaWxpdHkiLCJ3aXRoIHByb2R1Y3RzIHRoZSIsInByb2R1Y3RzIHRoZSB1c2UiLCJjb2RlIGlzIHN1YmplY3QiLCJ3YXJyYW50aWVzIHRoYXQgaXMiLCJ1c2UgY29weSBjb21tdW5pY2F0ZSIsInBvcnRpb24gdGhlcmVvZiB0aGUiLCJ0aGVyZW9mIHRoZSBsaWNlbnNlZSIsImRhdGUgYW5kIGRldGFpbHMiLCJhbmQgZGV0YWlscyBvZiIsIm1vZGlmaWNhdGlvbnMgYyBsaWNlbnNlIiwiYyBsaWNlbnNlIHRoZSIsImJ5IGNlcm4gYW5kIiwiY2VybiBhbmQgZCIsImFuZCBkIHNlbmQiLCJkIHNlbmQgYSIsInNlbmQgYSBjb3B5IiwiZG9jdW1lbnRhdGlvbiB0byBhbGwiLCJ0byBhbGwgbGljZW5zb3JzIiwiYWxsIGxpY2Vuc29ycyB0aGF0IiwibGljZW5zb3JzIHRoYXQgY29udHJpYnV0ZWQiLCJ0aGF0IGNvbnRyaWJ1dGVkIHRvIiwiZG9jdW1lbnRhdGlvbiB0aGF0IHdlcmUiLCJ0aGF0IHdlcmUgbW9kaWZpZWQiLCJ3ZXJlIG1vZGlmaWVkIGFzIiwiYW55IG90aGVyIGxpY2Vuc29yIiwib3RoZXIgbGljZW5zb3Igd2hvIiwid2hvIGhhcyByZXF1ZXN0ZWQiLCJoYXMgcmVxdWVzdGVkIHRvIiwicmVxdWVzdGVkIHRvIHJlY2VpdmUiLCJkb2N1bWVudGF0aW9uIGFuZCBoYXMiLCJhbmQgaGFzIHByb3ZpZGVkIiwiaGFzIHByb3ZpZGVkIGEiLCJwcm92aWRlZCBhIG1lYW5zIiwibWVhbnMgb2YgY29udGFjdCIsIm9mIGNvbnRhY3Qgd2l0aCIsImNvbnRhY3Qgd2l0aCB0aGUiLCJkb2N1bWVudGF0aW9uIDMgNCIsIjQgdGhlIGxpY2VuY2UiLCJpbmNsdWRlcyBhIGxpY2VuY2UiLCJsaWNlbnNlZSBkaXN0cmlidXRlcyB0byIsImRpc3RyaWJ1dGVzIHRvIGVhY2giLCJzdWNoIHByb2R1Y3RzIGEiLCJwcm9kdWN0cyBhIGNvcHkiLCJhcHBsaWNhYmxlIGFuZCBjb21wbGllcyIsImFuZCBjb21wbGllcyB3aXRoIiwiY29tcGxpZXMgd2l0aCBzZWN0aW9uIiwidG8gaW5mb3JtIGluIiwiaW5mb3JtIGluIHdyaXRpbmciLCJpbiB3cml0aW5nIGFueSIsIndyaXRpbmcgYW55IGxpY2Vuc29yIiwiaGFzIGluZGljYXRlZCBpdHMiLCJpbmRpY2F0ZWQgaXRzIHdpc2giLCJpdHMgd2lzaCB0byIsIjYgMSB0aGUiLCJ0aGlzIGxpY2VuY2UgZG8iLCJsaWNlbmNlIGRvIG5vdCIsInRoZSBuYW1lcyBhY3JvbnltcyIsIm5hbWVzIGFjcm9ueW1zIGltYWdlcyIsImFjcm9ueW1zIGltYWdlcyBvciIsInRvIGFwcGx5IDYiLCJhcHBseSA2IDUiLCI2IDUgZXhjZXB0IiwiNSBleGNlcHQgYXMiLCJiZSBvdGhlcndpc2UgYWdyZWVkIiwib3RoZXJ3aXNlIGFncmVlZCB3aXRoIiwiYWdyZWVkIHdpdGggdGhlIiwid2l0aCB0aGUgaW50ZXJnb3Zlcm5tZW50YWwiLCJpbnRlcmdvdmVybm1lbnRhbCBvcmdhbml6YXRpb24gYW55Iiwib3JnYW5pemF0aW9uIGFueSBkaXNwdXRlIiwiYW55IGRpc3B1dGUgd2l0aCIsImRpc3B1dGUgd2l0aCByZXNwZWN0IiwidGhpcyBsaWNlbmNlIGludm9sdmluZyIsImxpY2VuY2UgaW52b2x2aW5nIGFuIiwiaW52b2x2aW5nIGFuIGludGVyZ292ZXJubWVudGFsIiwiYW4gaW50ZXJnb3Zlcm5tZW50YWwgb3JnYW5pemF0aW9uIiwiaW50ZXJnb3Zlcm5tZW50YWwgb3JnYW5pemF0aW9uIHNoYWxsIiwib3JnYW5pemF0aW9uIHNoYWxsIGJ5Iiwic2hhbGwgYnkgdmlydHVlIiwib2YgdGhlIGxhdHRlciIsInRoZSBsYXR0ZXIgcyIsImxhdHRlciBzIGludGVyZ292ZXJubWVudGFsIiwicyBpbnRlcmdvdmVybm1lbnRhbCBzdGF0dXMiLCJpbnRlcmdvdmVybm1lbnRhbCBzdGF0dXMgYmUiLCJzdGF0dXMgYmUgc2V0dGxlZCIsInNldHRsZWQgYnkgaW50ZXJuYXRpb25hbCIsImJ5IGludGVybmF0aW9uYWwgYXJiaXRyYXRpb24iLCJpbnRlcm5hdGlvbmFsIGFyYml0cmF0aW9uIHRoZSIsImFyYml0cmF0aW9uIHRoZSBhcmJpdHJhdGlvbiIsInRoZSBhcmJpdHJhdGlvbiBwcm9jZWVkaW5ncyIsImFyYml0cmF0aW9uIHByb2NlZWRpbmdzIHNoYWxsIiwicHJvY2VlZGluZ3Mgc2hhbGwgYmUiLCJiZSBoZWxkIGF0IiwiaGVsZCBhdCB0aGUiLCJhdCB0aGUgcGxhY2UiLCJ0aGUgcGxhY2Ugd2hlcmUiLCJwbGFjZSB3aGVyZSB0aGUiLCJ3aGVyZSB0aGUgaW50ZXJnb3Zlcm5tZW50YWwiLCJpbnRlcmdvdmVybm1lbnRhbCBvcmdhbml6YXRpb24gaGFzIiwib3JnYW5pemF0aW9uIGhhcyBpdHMiLCJoYXMgaXRzIHNlYXQiLCJpdHMgc2VhdCB0aGUiLCJzZWF0IHRoZSBhcmJpdHJhbCIsInRoZSBhcmJpdHJhbCBhd2FyZCIsImFyYml0cmFsIGF3YXJkIHNoYWxsIiwiYXdhcmQgc2hhbGwgYmUiLCJzaGFsbCBiZSBmaW5hbCIsImJlIGZpbmFsIGFuZCIsImFuZCBiaW5kaW5nIHVwb24iLCJiaW5kaW5nIHVwb24gdGhlIiwidXBvbiB0aGUgcGFydGllcyIsInBhcnRpZXMgd2hvIGhlcmVieSIsIndobyBoZXJlYnkgZXhwcmVzc2x5IiwiaGVyZWJ5IGV4cHJlc3NseSBhZ3JlZSIsImV4cHJlc3NseSBhZ3JlZSB0byIsImFncmVlIHRvIHJlbm91bmNlIiwidG8gcmVub3VuY2UgYW55IiwicmVub3VuY2UgYW55IGZvcm0iLCJmb3JtIG9mIGFwcGVhbCIsIm9mIGFwcGVhbCBvciIsImFwcGVhbCBvciByZXZpc2lvbiIsImNlcm4gb2hsIHYxIDEiLCJvaGwgdjEgMSAyMDExIiwidjEgMSAyMDExIDA3IiwiMSAyMDExIDA3IDA4IiwiMjAxMSAwNyAwOCBjZXJuIiwiMDcgMDggY2VybiBnZW5ldmEiLCIwOCBjZXJuIGdlbmV2YSBzd2l0emVybGFuZCIsImhhcmR3YXJlIGxpY2VuY2UgdjEgMSIsImxpY2VuY2UgdjEgMSBwcmVhbWJsZSIsInYxIDEgcHJlYW1ibGUgdGhyb3VnaCIsIjEgcHJlYW1ibGUgdGhyb3VnaCB0aGlzIiwib2hsIHZlcnNpb24gMSAxIiwiMSAxIHRoZSBvcmdhbml6YXRpb24iLCIxIHRoZSBvcmdhbml6YXRpb24gd2lzaGVzIiwidGhlIG9yZ2FuaXphdGlvbiB3aXNoZXMgdG8iLCJvcmdhbml6YXRpb24gd2lzaGVzIHRvIGRpc3NlbWluYXRlIiwid2lzaGVzIHRvIGRpc3NlbWluYXRlIGl0cyIsInRvIGRpc3NlbWluYXRlIGl0cyBoYXJkd2FyZSIsImRpc3NlbWluYXRlIGl0cyBoYXJkd2FyZSBkZXNpZ25zIiwiaXRzIGhhcmR3YXJlIGRlc2lnbnMgYXMiLCJoYXJkd2FyZSBkZXNpZ25zIGFzIHB1Ymxpc2hlZCIsImRlc2lnbnMgYXMgcHVibGlzaGVkIG9uIiwiYXMgcHVibGlzaGVkIG9uIGh0dHAiLCJwdWJsaXNoZWQgb24gaHR0cCB3d3ciLCJvbiBodHRwIHd3dyBvaHdyIiwiaHR0cCB3d3cgb2h3ciBvcmciLCJ3d3cgb2h3ciBvcmcgYXMiLCJvaHdyIG9yZyBhcyB3aWRlbHkiLCJvcmcgYXMgd2lkZWx5IGFzIiwiYXMgd2lkZWx5IGFzIHBvc3NpYmxlIiwid2lkZWx5IGFzIHBvc3NpYmxlIGFuZCIsImFzIHBvc3NpYmxlIGFuZCBnZW5lcmFsbHkiLCJwb3NzaWJsZSBhbmQgZ2VuZXJhbGx5IHRvIl19LHsibGljZW5zZVRleHRzIjpbIkNFUk4gT0hMIHYxLjJcblxuMjAxMy0wOS0wNiAtIENFUk4sIEdlbmV2YSwgU3dpdHplcmxhbmRcblxuQ0VSTiBPcGVuIEhhcmR3YXJlIExpY2VuY2UgdjEuMlxuXG5QcmVhbWJsZVxuXG5UaHJvdWdoIHRoaXMgQ0VSTiBPcGVuIEhhcmR3YXJlIExpY2VuY2UgKFwiQ0VSTiBPSExcIikgdmVyc2lvbiAxLjIsIENFUk4gd2lzaGVzIHRvIHByb3ZpZGUgYSB0b29sIHRvIGZvc3RlciBjb2xsYWJvcmF0aW9uIGFuZCBzaGFyaW5nIGFtb25nIGhhcmR3YXJlIGRlc2lnbmVycy4gVGhlIENFUk4gT0hMIGlzIGNvcHlyaWdodCBDRVJOLiBBbnlvbmUgaXMgd2VsY29tZSB0byB1c2UgdGhlIENFUk4gT0hMLCBpbiB1bm1vZGlmaWVkIGZvcm0gb25seSwgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlaXIgb3duIE9wZW4gSGFyZHdhcmUgZGVzaWducy4gQW55IG90aGVyIHJpZ2h0IGlzIHJlc2VydmVkLiBSZWxlYXNlIG9mIGhhcmR3YXJlIGRlc2lnbnMgdW5kZXIgdGhlIENFUk4gT0hMIGRvZXMgbm90IGNvbnN0aXR1dGUgYW4gZW5kb3JzZW1lbnQgb2YgdGhlIGxpY2Vuc29yIG9yIGl0cyBkZXNpZ25zIG5vciBkb2VzIGl0IGltcGx5IGFueSBpbnZvbHZlbWVudCBieSBDRVJOIGluIHRoZSBkZXZlbG9wbWVudCBvZiBzdWNoIGRlc2lnbnMuXG5cbjEuIERlZmluaXRpb25zXG5cbkluIHRoaXMgTGljZW5jZSwgdGhlIGZvbGxvd2luZyB0ZXJtcyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6XG5cblwiTGljZW5jZVwiIG1lYW5zIHRoaXMgQ0VSTiBPSEwuXG5cblwiRG9jdW1lbnRhdGlvblwiIG1lYW5zIHNjaGVtYXRpYyBkaWFncmFtcywgZGVzaWducywgY2lyY3VpdCBvciBjaXJjdWl0IGJvYXJkIGxheW91dHMsIG1lY2hhbmljYWwgZHJhd2luZ3MsIGZsb3cgY2hhcnRzIGFuZCBkZXNjcmlwdGl2ZSB0ZXh0LCBhbmQgb3RoZXIgZXhwbGFuYXRvcnkgbWF0ZXJpYWwgdGhhdCBpcyBleHBsaWNpdGx5IHN0YXRlZCBhcyBiZWluZyBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2VuY2UuIFRoZSBEb2N1bWVudGF0aW9uIG1heSBiZSBpbiBhbnkgbWVkaXVtLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGNvbXB1dGVyIGZpbGVzIGFuZCByZXByZXNlbnRhdGlvbnMgb24gcGFwZXIsIGZpbG0sIG9yIGFueSBvdGhlciBtZWRpYS5cblxuXCJEb2N1bWVudGF0aW9uIExvY2F0aW9uXCIgbWVhbnMgYSBsb2NhdGlvbiB3aGVyZSB0aGUgTGljZW5zb3IgaGFzIHBsYWNlZCBEb2N1bWVudGF0aW9uLCBhbmQgd2hpY2ggaGUgYmVsaWV2ZXMgd2lsbCBiZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBmcm9tIHRoZSBmaXJzdCBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb3IgZGlzdHJpYnV0aW9uIG9mIERvY3VtZW50YXRpb24uXG5cblwiUHJvZHVjdFwiIG1lYW5zIGVpdGhlciBhbiBlbnRpcmUsIG9yIGFueSBwYXJ0IG9mIGEsIGRldmljZSBidWlsdCB1c2luZyB0aGUgRG9jdW1lbnRhdGlvbiBvciB0aGUgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbi5cblxuXCJMaWNlbnNlZVwiIG1lYW5zIGFueSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2VuY2UuXG5cblwiTGljZW5zb3JcIiBtZWFucyBhbnkgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gdGhhdCBjcmVhdGVzIG9yIG1vZGlmaWVzIERvY3VtZW50YXRpb24gYW5kIHN1YnNlcXVlbnRseSBjb21tdW5pY2F0ZXMgdG8gdGhlIHB1YmxpYyBhbmQvIG9yIGRpc3RyaWJ1dGVzIHRoZSByZXN1bHRpbmcgRG9jdW1lbnRhdGlvbiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbmNlLlxuXG5BIExpY2Vuc2VlIG1heSBhdCB0aGUgc2FtZSB0aW1lIGJlIGEgTGljZW5zb3IsIGFuZCB2aWNlIHZlcnNhLlxuXG5Vc2Ugb2YgdGhlIG1hc2N1bGluZSBnZW5kZXIgaW5jbHVkZXMgdGhlIGZlbWluaW5lIGFuZCBuZXV0ZXIgZ2VuZGVycyBhbmQgaXMgZW1wbG95ZWQgc29sZWx5IHRvIGZhY2lsaXRhdGUgcmVhZGluZy5cblxuXG5cbjIuIEFwcGxpY2FiaWxpdHlcblxuICAgMi4xLiBUaGlzIExpY2VuY2UgZ292ZXJucyB0aGUgdXNlLCBjb3B5aW5nLCBtb2RpZmljYXRpb24sIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBEb2N1bWVudGF0aW9uLCBhbmQgdGhlIG1hbnVmYWN0dXJlIGFuZCBkaXN0cmlidXRpb24gb2YgUHJvZHVjdHMuIEJ5IGV4ZXJjaXNpbmcgYW55IHJpZ2h0IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbmNlLCB0aGUgTGljZW5zZWUgaXJyZXZvY2FibHkgYWNjZXB0cyB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgMi4yLiBUaGlzIExpY2VuY2UgaXMgZ3JhbnRlZCBieSB0aGUgTGljZW5zb3IgZGlyZWN0bHkgdG8gdGhlIExpY2Vuc2VlLCBhbmQgc2hhbGwgYXBwbHkgd29ybGR3aWRlIGFuZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGltZS4gVGhlIExpY2Vuc2VlIG1heSBhc3NpZ24gaGlzIGxpY2VuY2UgcmlnaHRzIG9yIGdyYW50IHN1Yi1saWNlbmNlcy5cblxuICAgMi4zLiBUaGlzIExpY2VuY2UgZG9lcyBub3QgZXh0ZW5kIHRvIHNvZnR3YXJlLCBmaXJtd2FyZSwgb3IgY29kZSBsb2FkZWQgaW50byBwcm9ncmFtbWFibGUgZGV2aWNlcyB3aGljaCBtYXkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBEb2N1bWVudGF0aW9uLCB0aGUgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiBvciB3aXRoIFByb2R1Y3RzLCB1bmxlc3Mgc3VjaCBzb2Z0d2FyZSwgZmlybXdhcmUsIG9yIGNvZGUgaXMgZXhwbGljaXRseSBleHByZXNzZWQgdG8gYmUgc3ViamVjdCB0byB0aGlzIExpY2VuY2UuIFRoZSB1c2Ugb2Ygc3VjaCBzb2Z0d2FyZSwgZmlybXdhcmUsIG9yIGNvZGUgaXMgb3RoZXJ3aXNlIHN1YmplY3QgdG8gdGhlIGFwcGxpY2FibGUgbGljZW5jZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuMy4gQ29weWluZywgbW9kaWZpY2F0aW9uLCBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgRG9jdW1lbnRhdGlvblxuXG4gICAzLjEuIFRoZSBMaWNlbnNlZSBzaGFsbCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IGFuZCB0cmFkZW1hcmtzIG5vdGljZXMsIGFsbCBub3RpY2VzIHJlZmVycmluZyB0byBEb2N1bWVudGF0aW9uIExvY2F0aW9uLCBhbmQgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2VuY2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIERvY3VtZW50YXRpb24uIEhlIHNoYWxsIGluY2x1ZGUgYSBjb3B5IHRoZXJlb2YgaW4gZXZlcnkgY29weSBvZiB0aGUgRG9jdW1lbnRhdGlvbiBvciwgYXMgdGhlIGNhc2UgbWF5IGJlLCBtb2RpZmllZCBEb2N1bWVudGF0aW9uLCB0aGF0IGhlIGNvbW11bmljYXRlcyB0byB0aGUgcHVibGljIG9yIGRpc3RyaWJ1dGVzLlxuXG4gICAzLjIuIFRoZSBMaWNlbnNlZSBtYXkgY29weSwgY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIERvY3VtZW50YXRpb24sIGluIGFueSBtZWRpdW0sIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgaW4gc2VjdGlvbiAzLjEuXG5cbiAgIDMuMy4gVGhlIExpY2Vuc2VlIG1heSBtb2RpZnkgdGhlIERvY3VtZW50YXRpb24gb3IgYW55IHBvcnRpb24gdGhlcmVvZiBwcm92aWRlZCB0aGF0IHVwb24gbW9kaWZpY2F0aW9uIG9mIHRoZSBEb2N1bWVudGF0aW9uLCB0aGUgTGljZW5zZWUgc2hhbGwgbWFrZSB0aGUgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiBhdmFpbGFibGUgZnJvbSBhIERvY3VtZW50YXRpb24gTG9jYXRpb24gc3VjaCB0aGF0IGl0IGNhbiBiZSBlYXNpbHkgbG9jYXRlZCBieSBhbiBvcmlnaW5hbCBMaWNlbnNvciBvbmNlIHRoZSBMaWNlbnNlZSBjb21tdW5pY2F0ZXMgdG8gdGhlIHB1YmxpYyBvciBkaXN0cmlidXRlcyB0aGUgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiB1bmRlciBzZWN0aW9uIDMuNCwgYW5kLCB3aGVyZSByZXF1aXJlZCBieSBzZWN0aW9uIDQuMSwgYnkgYSByZWNpcGllbnQgb2YgYSBQcm9kdWN0LiBIb3dldmVyLCB0aGUgTGljZW5zb3Igc2hhbGwgbm90IGFzc2VydCBoaXMgcmlnaHRzIHVuZGVyIHRoZSBmb3JlZ29pbmcgcHJvdmlzbyB1bmxlc3Mgb3IgdW50aWwgYSBQcm9kdWN0IGlzIGRpc3RyaWJ1dGVkLlxuXG4gICAzLjQuIFRoZSBMaWNlbnNlZSBtYXkgY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyBhbmQgZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiAodGhlcmVieSBpbiBhZGRpdGlvbiB0byBiZWluZyBhIExpY2Vuc2VlIGFsc28gYmVjb21pbmcgYSBMaWNlbnNvciksIGFsd2F5cyBwcm92aWRlZCB0aGF0IGhlIHNoYWxsOlxuXG4gICAgICBhKSBjb21wbHkgd2l0aCBzZWN0aW9uIDMuMTtcblxuICAgICAgYikgY2F1c2UgdGhlIG1vZGlmaWVkIERvY3VtZW50YXRpb24gdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHRoZSBMaWNlbnNlZSBoYXMgbW9kaWZpZWQgdGhlIERvY3VtZW50YXRpb24sIHdpdGggdGhlIGRhdGUgYW5kIGRlc2NyaXB0aW9uIG9mIHRoZSBtb2RpZmljYXRpb25zO1xuXG4gICAgICBjKSBjYXVzZSB0aGUgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiB0byBjYXJyeSBhIG5ldyBEb2N1bWVudGF0aW9uIExvY2F0aW9uIG5vdGljZSBpZiB0aGUgb3JpZ2luYWwgRG9jdW1lbnRhdGlvbiBwcm92aWRlZCBmb3Igb25lO1xuXG4gICAgICBkKSBtYWtlIGF2YWlsYWJsZSB0aGUgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiBhdCB0aGUgc2FtZSBsZXZlbCBvZiBhYnN0cmFjdGlvbiBhcyB0aGF0IG9mIHRoZSBEb2N1bWVudGF0aW9uLCBpbiB0aGUgcHJlZmVycmVkIGZvcm1hdCBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgKGUuZy4gdGhlIG5hdGl2ZSBmb3JtYXQgb2YgdGhlIENBRCB0b29sIGFzIGFwcGxpY2FibGUpLCBhbmQgaW4gdGhlIGV2ZW50IHRoYXQgZm9ybWF0IGlzIHByb3ByaWV0YXJ5LCBpbiBhIGZvcm1hdCB2aWV3YWJsZSB3aXRoIGEgdG9vbCBsaWNlbnNlZCB1bmRlciBhbiBPU0ktYXBwcm92ZWQgbGljZW5zZSBpZiB0aGUgcHJvcHJpZXRhcnkgdG9vbCBjYW4gY3JlYXRlIGl0OyBhbmRcblxuICAgICAgZSkgbGljZW5zZSB0aGUgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbmNlIG9yLCB3aGVyZSBhcHBsaWNhYmxlLCBhIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbmNlIGFzIG1heSBiZSBpc3N1ZWQgYnkgQ0VSTi5cblxuICAgMy41LiBUaGUgTGljZW5jZSBpbmNsdWRlcyBhIG5vbi1leGNsdXNpdmUgbGljZW5jZSB0byB0aG9zZSBwYXRlbnRzIG9yIHJlZ2lzdGVyZWQgZGVzaWducyB0aGF0IGFyZSBoZWxkIGJ5LCB1bmRlciB0aGUgY29udHJvbCBvZiwgb3Igc3ViLWxpY2Vuc2FibGUgYnkgdGhlIExpY2Vuc29yLCB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHVzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbmNlLiBUaGUgc2NvcGUgb2YgdGhpcyBzZWN0aW9uIDMuNSBzaGFsbCBiZSBzdHJpY3RseSBsaW1pdGVkIHRvIHRoZSBwYXJ0cyBvZiB0aGUgRG9jdW1lbnRhdGlvbiBvciBtb2RpZmllZCBEb2N1bWVudGF0aW9uIGNyZWF0ZWQgYnkgdGhlIExpY2Vuc29yLlxuXG40LiBNYW51ZmFjdHVyZSBhbmQgZGlzdHJpYnV0aW9uIG9mIFByb2R1Y3RzXG5cbiAgIDQuMS4gVGhlIExpY2Vuc2VlIG1heSBtYW51ZmFjdHVyZSBvciBkaXN0cmlidXRlIFByb2R1Y3RzIGFsd2F5cyBwcm92aWRlZCB0aGF0LCB3aGVyZSBzdWNoIG1hbnVmYWN0dXJlIG9yIGRpc3RyaWJ1dGlvbiByZXF1aXJlcyBhIGxpY2VuY2UgdW5kZXIgdGhpcyBMaWNlbmNlIHRoZSBMaWNlbnNlZSBwcm92aWRlcyB0byBlYWNoIHJlY2lwaWVudCBvZiBzdWNoIFByb2R1Y3RzIGFuIGVhc3kgbWVhbnMgb2YgYWNjZXNzaW5nIGEgY29weSBvZiB0aGUgRG9jdW1lbnRhdGlvbiBvciBtb2RpZmllZCBEb2N1bWVudGF0aW9uLCBhcyBhcHBsaWNhYmxlLCBhcyBzZXQgb3V0IGluIHNlY3Rpb24gMy5cblxuICAgNC4yLiBUaGUgTGljZW5zZWUgaXMgaW52aXRlZCB0byBpbmZvcm0gYW55IExpY2Vuc29yIHdobyBoYXMgaW5kaWNhdGVkIGhpcyB3aXNoIHRvIHJlY2VpdmUgdGhpcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHlwZSwgcXVhbnRpdHkgYW5kIGRhdGVzIG9mIHByb2R1Y3Rpb24gb2YgUHJvZHVjdHMgdGhlIExpY2Vuc2VlIGhhcyAoaGFkKSBtYW51ZmFjdHVyZWRcblxuNS4gV2FycmFudHkgYW5kIGxpYWJpbGl0eVxuXG4gICA1LjEuIERJU0NMQUlNRVIg4oCTIFRoZSBEb2N1bWVudGF0aW9uIGFuZCBhbnkgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiBhcmUgcHJvdmlkZWQgXCJhcyBpc1wiIGFuZCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnRpZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5LCBvZiBzYXRpc2ZhY3RvcnkgcXVhbGl0eSwgbm9uLWluZnJpbmdlbWVudCBvZiB0aGlyZCBwYXJ0eSByaWdodHMsIGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBvciB1c2UgYXJlIGRpc2NsYWltZWQgaW4gcmVzcGVjdCBvZiB0aGUgRG9jdW1lbnRhdGlvbiwgdGhlIG1vZGlmaWVkIERvY3VtZW50YXRpb24gb3IgYW55IFByb2R1Y3QuIFRoZSBMaWNlbnNvciBtYWtlcyBubyByZXByZXNlbnRhdGlvbiB0aGF0IHRoZSBEb2N1bWVudGF0aW9uLCBtb2RpZmllZCBEb2N1bWVudGF0aW9uLCBvciBhbnkgUHJvZHVjdCwgZG9lcyBvciB3aWxsIG5vdCBpbmZyaW5nZSBhbnkgcGF0ZW50LCBjb3B5cmlnaHQsIHRyYWRlIHNlY3JldCBvciBvdGhlciBwcm9wcmlldGFyeSByaWdodC4gVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSB1c2UsIHF1YWxpdHksIGFuZCBwZXJmb3JtYW5jZSBvZiBhIFByb2R1Y3Qgc2hhbGwgYmUgd2l0aCB0aGUgTGljZW5zZWUgYW5kIG5vdCB0aGUgTGljZW5zb3IuIFRoaXMgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBpcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2VuY2UgYW5kIGEgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnQgb2YgYW55IHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5jZS4gVGhlIExpY2Vuc2VlIHdhcnJhbnRzIHRoYXQgaXQgZG9lcyBub3QgYWN0IGluIGEgY29uc3VtZXIgY2FwYWNpdHkuXG5cbiAgIDUuMi4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkg4oCTIFRoZSBMaWNlbnNvciBzaGFsbCBoYXZlIG5vIGxpYWJpbGl0eSBmb3IgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgY29uc2VxdWVudGlhbCwgZXhlbXBsYXJ5LCBwdW5pdGl2ZSBvciBvdGhlciBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHByb2N1cmVtZW50IG9mIHN1YnN0aXR1dGUgZ29vZHMgb3Igc2VydmljZXMsIGxvc3Mgb2YgdXNlLCBkYXRhIG9yIHByb2ZpdHMsIG9yIGJ1c2luZXNzIGludGVycnVwdGlvbiwgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgY29udHJhY3QsIHdhcnJhbnR5LCB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIHByb2R1Y3QgbGlhYmlsaXR5IG9yIG90aGVyd2lzZSwgYXJpc2luZyBpbiBhbnkgd2F5IGluIHJlbGF0aW9uIHRvIHRoZSBEb2N1bWVudGF0aW9uLCBtb2RpZmllZCBEb2N1bWVudGF0aW9uIGFuZC9vciB0aGUgdXNlLCBtYW51ZmFjdHVyZSBvciBkaXN0cmlidXRpb24gb2YgYSBQcm9kdWN0LCBldmVuIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcywgYW5kIHRoZSBMaWNlbnNlZSBzaGFsbCBob2xkIHRoZSBMaWNlbnNvcihzKSBmcmVlIGFuZCBoYXJtbGVzcyBmcm9tIGFueSBsaWFiaWxpdHksIGNvc3RzLCBkYW1hZ2VzLCBmZWVzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nIGNsYWltcyBieSB0aGlyZCBwYXJ0aWVzLCBpbiByZWxhdGlvbiB0byBzdWNoIHVzZS5cblxuNi4gR2VuZXJhbFxuXG4gICA2LjEuIEV4Y2VwdCBmb3IgdGhlIHJpZ2h0cyBleHBsaWNpdGx5IGdyYW50ZWQgaGVyZXVuZGVyLCB0aGlzIExpY2VuY2UgZG9lcyBub3QgaW1wbHkgb3IgcmVwcmVzZW50IGFueSB0cmFuc2ZlciBvciBhc3NpZ25tZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgdG8gdGhlIExpY2Vuc2VlLlxuXG4gICA2LjIuIFRoZSBMaWNlbnNlZSBzaGFsbCBub3QgdXNlIG9yIG1ha2UgcmVmZXJlbmNlIHRvIGFueSBvZiB0aGUgbmFtZXMgKGluY2x1ZGluZyBhY3JvbnltcyBhbmQgYWJicmV2aWF0aW9ucyksIGltYWdlcywgb3IgbG9nb3MgdW5kZXIgd2hpY2ggdGhlIExpY2Vuc29yIGlzIGtub3duLCBzYXZlIGluIHNvIGZhciBhcyByZXF1aXJlZCB0byBjb21wbHkgd2l0aCBzZWN0aW9uIDMuIEFueSBzdWNoIHBlcm1pdHRlZCB1c2Ugb3IgcmVmZXJlbmNlIHNoYWxsIGJlIGZhY3R1YWwgYW5kIHNoYWxsIGluIG5vIGV2ZW50IHN1Z2dlc3QgYW55IGtpbmQgb2YgZW5kb3JzZW1lbnQgYnkgdGhlIExpY2Vuc29yIG9yIGl0cyBwZXJzb25uZWwgb2YgdGhlIG1vZGlmaWVkIERvY3VtZW50YXRpb24gb3IgYW55IFByb2R1Y3QsIG9yIGFueSBraW5kIG9mIGltcGxpY2F0aW9uIGJ5IHRoZSBMaWNlbnNvciBvciBpdHMgcGVyc29ubmVsIGluIHRoZSBwcmVwYXJhdGlvbiBvZiB0aGUgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiBvciBQcm9kdWN0LlxuXG4gICA2LjMuIENFUk4gbWF5IHB1Ymxpc2ggdXBkYXRlZCB2ZXJzaW9ucyBvZiB0aGlzIExpY2VuY2Ugd2hpY2ggcmV0YWluIHRoZSBzYW1lIGdlbmVyYWwgcHJvdmlzaW9ucyBhcyB0aGlzIHZlcnNpb24sIGJ1dCBkaWZmZXIgaW4gZGV0YWlsIHNvIGZhciB0aGlzIGlzIHJlcXVpcmVkIGFuZCByZWFzb25hYmxlLiBOZXcgdmVyc2lvbnMgd2lsbCBiZSBwdWJsaXNoZWQgd2l0aCBhIHVuaXF1ZSB2ZXJzaW9uIG51bWJlci5cblxuICAgNi40LiBUaGlzIExpY2VuY2Ugc2hhbGwgdGVybWluYXRlIHdpdGggaW1tZWRpYXRlIGVmZmVjdCwgdXBvbiB3cml0dGVuIG5vdGljZSBhbmQgd2l0aG91dCBpbnZvbHZlbWVudCBvZiBhIGNvdXJ0IGlmIHRoZSBMaWNlbnNlZSBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLCBvciBpZiB0aGUgTGljZW5zZWUgaW5pdGlhdGVzIGxlZ2FsIGFjdGlvbiBhZ2FpbnN0IExpY2Vuc29yIGluIHJlbGF0aW9uIHRvIHRoaXMgTGljZW5jZS4gU2VjdGlvbiA1IHNoYWxsIGNvbnRpbnVlIHRvIGFwcGx5LiJdLCJsaWNlbnNlSWRzIjpbIkNFUk4tT0hMLTEuMiJdLCJrZXl3b3JkcyI6WyJvaGwgdjEgMiIsInYxIDIgMjAxMyIsIjIgMjAxMyAwOSIsIjIwMTMgMDkgMDYiLCIwOSAwNiBjZXJuIiwiMDYgY2VybiBnZW5ldmEiLCJsaWNlbmNlIHYxIDIiLCJ2MSAyIHByZWFtYmxlIiwiMiBwcmVhbWJsZSB0aHJvdWdoIiwiMSAyIGNlcm4iLCIyIGNlcm4gd2lzaGVzIiwiY2VybiB3aXNoZXMgdG8iLCJ3aXNoZXMgdG8gcHJvdmlkZSIsInByb3ZpZGUgYSB0b29sIiwidG9vbCB0byBmb3N0ZXIiLCJmb3N0ZXIgY29sbGFib3JhdGlvbiBhbmQiLCJjb2xsYWJvcmF0aW9uIGFuZCBzaGFyaW5nIiwiYW5kIHNoYXJpbmcgYW1vbmciLCJzaGFyaW5nIGFtb25nIGhhcmR3YXJlIiwiY29weXJpZ2h0IGNlcm4gYW55b25lIiwiZGlzdHJpYnV0aW9uIG9mIHRoZWlyIiwib2YgdGhlaXIgb3duIiwidGhlaXIgb3duIG9wZW4iLCJpcyByZXNlcnZlZCByZWxlYXNlIiwicmVzZXJ2ZWQgcmVsZWFzZSBvZiIsInJlbGVhc2Ugb2YgaGFyZHdhcmUiLCJvZiBoYXJkd2FyZSBkZXNpZ25zIiwiaGFyZHdhcmUgZGVzaWducyB1bmRlciIsImRlc2lnbnMgdW5kZXIgdGhlIiwidW5kZXIgdGhlIGNlcm4iLCJjZXJuIG9obCBkb2VzIiwib2hsIGRvZXMgbm90IiwiZG9lcyBub3QgY29uc3RpdHV0ZSIsIm5vdCBjb25zdGl0dXRlIGFuIiwiYW4gZW5kb3JzZW1lbnQgb2YiLCJlbmRvcnNlbWVudCBvZiB0aGUiLCJvciBpdHMgZGVzaWducyIsIml0cyBkZXNpZ25zIG5vciIsImNlcm4gaW4gdGhlIiwiaW4gdGhlIGRldmVsb3BtZW50IiwiZGV2ZWxvcG1lbnQgb2Ygc3VjaCIsIm9mIHN1Y2ggZGVzaWducyIsInN1Y2ggZGVzaWducyAxIiwiZGVzaWducyAxIGRlZmluaXRpb25zIiwib3RoZXIgbWVkaWEgZG9jdW1lbnRhdGlvbiIsIm1lZGlhIGRvY3VtZW50YXRpb24gbG9jYXRpb24iLCJkb2N1bWVudGF0aW9uIGxvY2F0aW9uIG1lYW5zIiwibG9jYXRpb24gd2hlcmUgdGhlIiwiaGFzIHBsYWNlZCBkb2N1bWVudGF0aW9uIiwicGxhY2VkIGRvY3VtZW50YXRpb24gYW5kIiwiZG9jdW1lbnRhdGlvbiBhbmQgd2hpY2giLCJhbmQgd2hpY2ggaGUiLCJ3aGljaCBoZSBiZWxpZXZlcyIsImhlIGJlbGlldmVzIHdpbGwiLCJiZWxpZXZlcyB3aWxsIGJlIiwid2lsbCBiZSBwdWJsaWNseSIsImJlIHB1YmxpY2x5IGFjY2Vzc2libGUiLCJwdWJsaWNseSBhY2Nlc3NpYmxlIGZvciIsInRoZSBmaXJzdCBjb21tdW5pY2F0aW9uIiwiZmlyc3QgY29tbXVuaWNhdGlvbiB0byIsInB1YmxpYyBvciBkaXN0cmlidXRpb24iLCJkaXN0cmlidXRpb24gb2YgZG9jdW1lbnRhdGlvbiIsIm9mIGRvY3VtZW50YXRpb24gcHJvZHVjdCIsImRvY3VtZW50YXRpb24gcHJvZHVjdCBtZWFucyIsInZpY2UgdmVyc2EgdXNlIiwidmVyc2EgdXNlIG9mIiwib2YgdGhlIG1hc2N1bGluZSIsInRoZSBtYXNjdWxpbmUgZ2VuZGVyIiwibWFzY3VsaW5lIGdlbmRlciBpbmNsdWRlcyIsImdlbmRlciBpbmNsdWRlcyB0aGUiLCJpbmNsdWRlcyB0aGUgZmVtaW5pbmUiLCJ0aGUgZmVtaW5pbmUgYW5kIiwiZmVtaW5pbmUgYW5kIG5ldXRlciIsImFuZCBuZXV0ZXIgZ2VuZGVycyIsIm5ldXRlciBnZW5kZXJzIGFuZCIsImdlbmRlcnMgYW5kIGlzIiwiYW5kIGlzIGVtcGxveWVkIiwiaXMgZW1wbG95ZWQgc29sZWx5IiwiZW1wbG95ZWQgc29sZWx5IHRvIiwic29sZWx5IHRvIGZhY2lsaXRhdGUiLCJ0byBmYWNpbGl0YXRlIHJlYWRpbmciLCJmYWNpbGl0YXRlIHJlYWRpbmcgMiIsInJlYWRpbmcgMiBhcHBsaWNhYmlsaXR5IiwiZXh0ZW5kIHRvIHNvZnR3YXJlIiwid2l0aCBwcm9kdWN0cyB1bmxlc3MiLCJwcm9kdWN0cyB1bmxlc3Mgc3VjaCIsInVubGVzcyBzdWNoIHNvZnR3YXJlIiwiY29kZSBpcyBleHBsaWNpdGx5IiwiaXMgZXhwbGljaXRseSBleHByZXNzZWQiLCJleHBsaWNpdGx5IGV4cHJlc3NlZCB0byIsImV4cHJlc3NlZCB0byBiZSIsImxpY2VuY2UgdGhlIHVzZSIsImNvZGUgaXMgb3RoZXJ3aXNlIiwiaXMgb3RoZXJ3aXNlIHN1YmplY3QiLCJvdGhlcndpc2Ugc3ViamVjdCB0byIsInRyYWRlbWFya3Mgbm90aWNlcyBhbGwiLCJub3RpY2VzIGFsbCBub3RpY2VzIiwiYWxsIG5vdGljZXMgcmVmZXJyaW5nIiwibm90aWNlcyByZWZlcnJpbmcgdG8iLCJyZWZlcnJpbmcgdG8gZG9jdW1lbnRhdGlvbiIsInRvIGRvY3VtZW50YXRpb24gbG9jYXRpb24iLCJkb2N1bWVudGF0aW9uIGxvY2F0aW9uIGFuZCIsImxvY2F0aW9uIGFuZCBhbGwiLCJsaWNlbnNlZSBtYXkgY29weSIsIm1heSBjb3B5IGNvbW11bmljYXRlIiwicG9ydGlvbiB0aGVyZW9mIHByb3ZpZGVkIiwidGhlcmVvZiBwcm92aWRlZCB0aGF0IiwicHJvdmlkZWQgdGhhdCB1cG9uIiwidGhhdCB1cG9uIG1vZGlmaWNhdGlvbiIsInVwb24gbW9kaWZpY2F0aW9uIG9mIiwiZG9jdW1lbnRhdGlvbiB0aGUgbGljZW5zZWUiLCJsaWNlbnNlZSBzaGFsbCBtYWtlIiwibW9kaWZpZWQgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUiLCJkb2N1bWVudGF0aW9uIGF2YWlsYWJsZSBmcm9tIiwiZnJvbSBhIGRvY3VtZW50YXRpb24iLCJhIGRvY3VtZW50YXRpb24gbG9jYXRpb24iLCJkb2N1bWVudGF0aW9uIGxvY2F0aW9uIHN1Y2giLCJsb2NhdGlvbiBzdWNoIHRoYXQiLCJiZSBlYXNpbHkgbG9jYXRlZCIsImVhc2lseSBsb2NhdGVkIGJ5IiwibG9jYXRlZCBieSBhbiIsImJ5IGFuIG9yaWdpbmFsIiwiYW4gb3JpZ2luYWwgbGljZW5zb3IiLCJvcmlnaW5hbCBsaWNlbnNvciBvbmNlIiwibGljZW5zb3Igb25jZSB0aGUiLCJvbmNlIHRoZSBsaWNlbnNlZSIsInRoZSBsaWNlbnNlZSBjb21tdW5pY2F0ZXMiLCJsaWNlbnNlZSBjb21tdW5pY2F0ZXMgdG8iLCJkaXN0cmlidXRlcyB0aGUgbW9kaWZpZWQiLCJkb2N1bWVudGF0aW9uIHVuZGVyIHNlY3Rpb24iLCI0IGFuZCB3aGVyZSIsImFuZCB3aGVyZSByZXF1aXJlZCIsIndoZXJlIHJlcXVpcmVkIGJ5IiwiNCAxIGJ5IiwiMSBieSBhIiwiYSBwcm9kdWN0IGhvd2V2ZXIiLCJwcm9kdWN0IGhvd2V2ZXIgdGhlIiwic2hhbGwgbm90IGFzc2VydCIsIm5vdCBhc3NlcnQgaGlzIiwiYXNzZXJ0IGhpcyByaWdodHMiLCJoaXMgcmlnaHRzIHVuZGVyIiwidW5kZXIgdGhlIGZvcmVnb2luZyIsInRoZSBmb3JlZ29pbmcgcHJvdmlzbyIsImZvcmVnb2luZyBwcm92aXNvIHVubGVzcyIsInByb3Zpc28gdW5sZXNzIG9yIiwidW5sZXNzIG9yIHVudGlsIiwib3IgdW50aWwgYSIsInVudGlsIGEgcHJvZHVjdCIsImRpc3RyaWJ1dGVkIDMgNCIsIjQgdGhlIGxpY2Vuc2VlIiwiZGF0ZSBhbmQgZGVzY3JpcHRpb24iLCJtb2RpZmljYXRpb25zIGMgY2F1c2UiLCJjIGNhdXNlIHRoZSIsImNhcnJ5IGEgbmV3IiwiYSBuZXcgZG9jdW1lbnRhdGlvbiIsIm5ldyBkb2N1bWVudGF0aW9uIGxvY2F0aW9uIiwiZG9jdW1lbnRhdGlvbiBsb2NhdGlvbiBub3RpY2UiLCJsb2NhdGlvbiBub3RpY2UgaWYiLCJub3RpY2UgaWYgdGhlIiwidGhlIG9yaWdpbmFsIGRvY3VtZW50YXRpb24iLCJvcmlnaW5hbCBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIiwiZG9jdW1lbnRhdGlvbiBwcm92aWRlZCBmb3IiLCJwcm92aWRlZCBmb3Igb25lIiwiZm9yIG9uZSBkIiwib25lIGQgbWFrZSIsImQgbWFrZSBhdmFpbGFibGUiLCJhdmFpbGFibGUgdGhlIG1vZGlmaWVkIiwibW9kaWZpZWQgZG9jdW1lbnRhdGlvbiBhdCIsImRvY3VtZW50YXRpb24gYXQgdGhlIiwidGhlIHNhbWUgbGV2ZWwiLCJzYW1lIGxldmVsIG9mIiwibGV2ZWwgb2YgYWJzdHJhY3Rpb24iLCJvZiBhYnN0cmFjdGlvbiBhcyIsImFic3RyYWN0aW9uIGFzIHRoYXQiLCJhcyB0aGF0IG9mIiwidGhlIHByZWZlcnJlZCBmb3JtYXQiLCJwcmVmZXJyZWQgZm9ybWF0IGZvciIsImZvcm1hdCBmb3IgbWFraW5nIiwidG8gaXQgZSIsIml0IGUgZyIsImUgZyB0aGUiLCJnIHRoZSBuYXRpdmUiLCJ0aGUgbmF0aXZlIGZvcm1hdCIsIm5hdGl2ZSBmb3JtYXQgb2YiLCJmb3JtYXQgb2YgdGhlIiwib2YgdGhlIGNhZCIsInRoZSBjYWQgdG9vbCIsImNhZCB0b29sIGFzIiwidG9vbCBhcyBhcHBsaWNhYmxlIiwiYXBwbGljYWJsZSBhbmQgaW4iLCJldmVudCB0aGF0IGZvcm1hdCIsInRoYXQgZm9ybWF0IGlzIiwiaXMgcHJvcHJpZXRhcnkgaW4iLCJwcm9wcmlldGFyeSBpbiBhIiwiYSBmb3JtYXQgdmlld2FibGUiLCJmb3JtYXQgdmlld2FibGUgd2l0aCIsImEgdG9vbCBsaWNlbnNlZCIsInRvb2wgbGljZW5zZWQgdW5kZXIiLCJsaWNlbnNlZCB1bmRlciBhbiIsInVuZGVyIGFuIG9zaSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDRVJOIE9wZW4gSGFyZHdhcmUgTGljZW5jZSBWZXJzaW9uIDIgLSBQZXJtaXNzaXZlXG5cblByZWFtYmxlXG5cbkNFUk4gaGFzIGRldmVsb3BlZCB0aGlzIGxpY2VuY2UgdG8gcHJvbW90ZSBjb2xsYWJvcmF0aW9uIGFtb25nIGhhcmR3YXJlIGRlc2lnbmVycyBhbmQgdG8gcHJvdmlkZSBhIGxlZ2FsIHRvb2wgd2hpY2ggc3VwcG9ydHMgdGhlIGZyZWVkb20gdG8gdXNlLCBzdHVkeSwgbW9kaWZ5LCBzaGFyZSBhbmQgZGlzdHJpYnV0ZSBoYXJkd2FyZSBkZXNpZ25zIGFuZCBwcm9kdWN0cyBiYXNlZCBvbiB0aG9zZSBkZXNpZ25zLiBWZXJzaW9uIDIgb2YgdGhlIENFUk4gT3BlbiBIYXJkd2FyZSBMaWNlbmNlIGNvbWVzIGluIHRocmVlIHZhcmlhbnRzOiB0aGlzIGxpY2VuY2UsIENFUk4tT0hMLVAgKHBlcm1pc3NpdmUpOyBhbmQgdHdvIHJlY2lwcm9jYWwgbGljZW5jZXM6IENFUk4tIE9ITC1XICh3ZWFrbHkgcmVjaXByb2NhbCkgYW5kIENFUk4tT0hMLVMgKHN0cm9uZ2x5IHJlY2lwcm9jYWwpLlxuXG5UaGUgQ0VSTi1PSEwtUCBpcyBjb3B5cmlnaHQgQ0VSTiAyMDIwLiBBbnlvbmUgaXMgd2VsY29tZSB0byB1c2UgaXQsIGluIHVubW9kaWZpZWQgZm9ybSBvbmx5LlxuXG5Vc2Ugb2YgdGhpcyBMaWNlbmNlIGRvZXMgbm90IGltcGx5IGFueSBlbmRvcnNlbWVudCBieSBDRVJOIG9mIGFueSBMaWNlbnNvciBvciB0aGVpciBkZXNpZ25zIG5vciBkb2VzIGl0IGltcGx5IGFueSBpbnZvbHZlbWVudCBieSBDRVJOIGluIHRoZWlyIGRldmVsb3BtZW50LlxuXG4gICAxIERlZmluaXRpb25zXG5cbiAgICAgIDEuMSAnTGljZW5jZScgbWVhbnMgdGhpcyBDRVJOLU9ITC1QLlxuXG4gICAgICAxLjIgJ1NvdXJjZScgbWVhbnMgaW5mb3JtYXRpb24gc3VjaCBhcyBkZXNpZ24gbWF0ZXJpYWxzIG9yIGRpZ2l0YWwgY29kZSB3aGljaCBjYW4gYmUgYXBwbGllZCB0byBNYWtlIG9yIHRlc3QgYSBQcm9kdWN0IG9yIHRvIHByZXBhcmUgYSBQcm9kdWN0IGZvciB1c2UsIENvbnZleWFuY2Ugb3Igc2FsZSwgcmVnYXJkbGVzcyBvZiBpdHMgbWVkaXVtIG9yIGhvdyBpdCBpcyBleHByZXNzZWQuIEl0IG1heSBpbmNsdWRlIE5vdGljZXMuXG5cbiAgICAgIDEuMyAnQ292ZXJlZCBTb3VyY2UnIG1lYW5zIFNvdXJjZSB0aGF0IGlzIGV4cGxpY2l0bHkgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbmNlLlxuXG4gICAgICAxLjQgJ1Byb2R1Y3QnIG1lYW5zIGFueSBkZXZpY2UsIGNvbXBvbmVudCwgd29yayBvciBwaHlzaWNhbCBvYmplY3QsIHdoZXRoZXIgaW4gZmluaXNoZWQgb3IgaW50ZXJtZWRpYXRlIGZvcm0sIGFyaXNpbmcgZnJvbSB0aGUgdXNlLCBhcHBsaWNhdGlvbiBvciBwcm9jZXNzaW5nIG9mIENvdmVyZWQgU291cmNlLlxuXG4gICAgICAxLjUgJ01ha2UnIG1lYW5zIHRvIGNyZWF0ZSBvciBjb25maWd1cmUgc29tZXRoaW5nLCB3aGV0aGVyIGJ5IG1hbnVmYWN0dXJlLCBhc3NlbWJseSwgY29tcGlsaW5nLCBsb2FkaW5nIG9yIGFwcGx5aW5nIENvdmVyZWQgU291cmNlIG9yIGFub3RoZXIgUHJvZHVjdCBvciBvdGhlcndpc2UuXG5cbiAgICAgIDEuNiAnTm90aWNlJyBtZWFucyBjb3B5cmlnaHQsIGFja25vd2xlZGdlbWVudCBhbmQgdHJhZGVtYXJrIG5vdGljZXMsIHJlZmVyZW5jZXMgdG8gdGhlIGxvY2F0aW9uIG9mIGFueSBOb3RpY2VzLCBtb2RpZmljYXRpb24gbm90aWNlcyAoc3Vic2VjdGlvbiAzLjMoYikpIGFuZCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5jZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgQ292ZXJlZCBTb3VyY2UuXG5cbiAgICAgIDEuNyAnTGljZW5zZWUnIG9yICdZb3UnIG1lYW5zIGFueSBwZXJzb24gZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbmNlLlxuXG4gICAgICAxLjggJ0xpY2Vuc29yJyBtZWFucyBhIHBlcnNvbiB3aG8gY3JlYXRlcyBTb3VyY2Ugb3IgbW9kaWZpZXMgQ292ZXJlZCBTb3VyY2UgYW5kIHN1YnNlcXVlbnRseSBDb252ZXlzIHRoZSByZXN1bHRpbmcgQ292ZXJlZCBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5jZS4gQSBwZXJzb24gbWF5IGJlIGEgTGljZW5zZWUgYW5kIGEgTGljZW5zb3IgYXQgdGhlIHNhbWUgdGltZS5cblxuICAgICAgMS45ICdDb252ZXknIG1lYW5zIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgb3IgZGlzdHJpYnV0ZS5cblxuICAgMiBBcHBsaWNhYmlsaXR5XG5cbiAgICAgIDIuMSBUaGlzIExpY2VuY2UgZ292ZXJucyB0aGUgdXNlLCBjb3B5aW5nLCBtb2RpZmljYXRpb24sIENvbnZleWluZyBvZiBDb3ZlcmVkIFNvdXJjZSBhbmQgUHJvZHVjdHMsIGFuZCB0aGUgTWFraW5nIG9mIFByb2R1Y3RzLiBCeSBleGVyY2lzaW5nIGFueSByaWdodCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5jZSwgWW91IGlycmV2b2NhYmx5IGFjY2VwdCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgICAgMi4yIFRoaXMgTGljZW5jZSBpcyBncmFudGVkIGJ5IHRoZSBMaWNlbnNvciBkaXJlY3RseSB0byBZb3UsIGFuZCBzaGFsbCBhcHBseSB3b3JsZHdpZGUgYW5kIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aW1lLlxuXG4gICAgICAyLjMgWW91IHNoYWxsIG5vdCBhdHRlbXB0IHRvIHJlc3RyaWN0IGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbmNlIHRvIG90aGVyIExpY2Vuc2Vlcy5cblxuICAgICAgMi40IFRoaXMgTGljZW5jZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgZmFpciB1c2UsIGZhaXIgZGVhbGluZywgb3IgYW55IG90aGVyIHNpbWlsYXIgcmlnaHQuXG5cbiAgIDMgQ29weWluZywgbW9kaWZ5aW5nIGFuZCBDb252ZXlpbmcgQ292ZXJlZCBTb3VyY2VcblxuICAgICAgMy4xIFlvdSBtYXkgY29weSBhbmQgQ29udmV5IHZlcmJhdGltIGNvcGllcyBvZiBDb3ZlcmVkIFNvdXJjZSwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgWW91IHJldGFpbiBhbGwgTm90aWNlcy5cblxuICAgICAgMy4yIFlvdSBtYXkgbW9kaWZ5IENvdmVyZWQgU291cmNlLCBvdGhlciB0aGFuIE5vdGljZXMuXG5cbiAgICAgIFlvdSBtYXkgb25seSBkZWxldGUgTm90aWNlcyBpZiB0aGV5IGFyZSBubyBsb25nZXIgYXBwbGljYWJsZSB0byB0aGUgY29ycmVzcG9uZGluZyBDb3ZlcmVkIFNvdXJjZSBhcyBtb2RpZmllZCBieSBZb3UgYW5kIFlvdSBtYXkgYWRkIGFkZGl0aW9uYWwgTm90aWNlcyBhcHBsaWNhYmxlIHRvIFlvdXIgbW9kaWZpY2F0aW9ucy5cblxuICAgICAgMy4zIFlvdSBtYXkgQ29udmV5IG1vZGlmaWVkIENvdmVyZWQgU291cmNlICh3aXRoIHRoZSBlZmZlY3QgdGhhdCBZb3Ugc2hhbGwgYWxzbyBiZWNvbWUgYSBMaWNlbnNvcikgcHJvdmlkZWQgdGhhdCBZb3U6XG5cbiAgICAgICAgIGEpIHJldGFpbiBOb3RpY2VzIGFzIHJlcXVpcmVkIGluIHN1YnNlY3Rpb24gMy4yOyBhbmRcblxuICAgICAgICAgYikgYWRkIGEgTm90aWNlIHRvIHRoZSBtb2RpZmllZCBDb3ZlcmVkIFNvdXJjZSBzdGF0aW5nIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgaXQsIHdpdGggdGhlIGRhdGUgYW5kIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGhvdyBZb3UgaGF2ZSBtb2RpZmllZCBpdC5cblxuICAgICAgMy40IFlvdSBtYXkgQ29udmV5IENvdmVyZWQgU291cmNlIG9yIG1vZGlmaWVkIENvdmVyZWQgU291cmNlIHVuZGVyIGxpY2VuY2UgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZSBwcm92aWRlZCB0aGF0OlxuXG4gICAgICAgICBhKSBZb3UgY29tcGx5IGF0IGFsbCB0aW1lcyB3aXRoIHN1YnNlY3Rpb24gMy4zOyBhbmRcblxuICAgICAgICAgYikgWW91IHByb3ZpZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5jZSB0byBhbnlvbmUgdG8gd2hvbSBZb3UgQ29udmV5IENvdmVyZWQgU291cmNlIG9yIG1vZGlmaWVkIENvdmVyZWQgU291cmNlLlxuXG4gICA0IE1ha2luZyBhbmQgQ29udmV5aW5nIFByb2R1Y3RzXG5cbiAgIFlvdSBtYXkgTWFrZSBQcm9kdWN0cywgYW5kL29yIENvbnZleSB0aGVtLCBwcm92aWRlZCB0aGF0IFlvdSBlbnN1cmUgdGhhdCB0aGUgcmVjaXBpZW50IG9mIHRoZSBQcm9kdWN0IGhhcyBhY2Nlc3MgdG8gYW55IE5vdGljZXMgYXBwbGljYWJsZSB0byB0aGUgUHJvZHVjdC5cblxuICAgNSBESVNDTEFJTUVSIEFORCBMSUFCSUxJVFlcblxuICAgICAgNS4xIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgLS0gVGhlIENvdmVyZWQgU291cmNlIGFuZCBhbnkgUHJvZHVjdHMgYXJlIHByb3ZpZGVkICdhcyBpcycgYW5kIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudGllcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIG9mIHNhdGlzZmFjdG9yeSBxdWFsaXR5LCBub24taW5mcmluZ2VtZW50IG9mIHRoaXJkIHBhcnR5IHJpZ2h0cywgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIG9yIHVzZSBhcmUgZGlzY2xhaW1lZCBpbiByZXNwZWN0IG9mIGFueSBTb3VyY2Ugb3IgUHJvZHVjdCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4gVGhlIExpY2Vuc29yIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9uIHRoYXQgYW55IFNvdXJjZSBvciBQcm9kdWN0IGRvZXMgbm90IG9yIHdpbGwgbm90IGluZnJpbmdlIGFueSBwYXRlbnQsIGNvcHlyaWdodCwgdHJhZGUgc2VjcmV0IG9yIG90aGVyIHByb3ByaWV0YXJ5IHJpZ2h0LiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHVzZSwgcXVhbGl0eSwgYW5kIHBlcmZvcm1hbmNlIG9mIGFueSBTb3VyY2Ugb3IgUHJvZHVjdCBzaGFsbCBiZSB3aXRoIFlvdSBhbmQgbm90IHRoZSBMaWNlbnNvci4gVGhpcyBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGlzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5jZSBhbmQgYSBjb25kaXRpb24gZm9yIHRoZSBncmFudCBvZiBhbnkgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbmNlLlxuXG4gICAgICA1LjIgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSAtLSBUaGUgTGljZW5zb3Igc2hhbGwsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LCBoYXZlIG5vIGxpYWJpbGl0eSBmb3IgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgY29uc2VxdWVudGlhbCwgZXhlbXBsYXJ5LCBwdW5pdGl2ZSBvciBvdGhlciBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHByb2N1cmVtZW50IG9mIHN1YnN0aXR1dGUgZ29vZHMgb3Igc2VydmljZXMsIGxvc3Mgb2YgdXNlLCBkYXRhIG9yIHByb2ZpdHMsIG9yIGJ1c2luZXNzIGludGVycnVwdGlvbiwgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgY29udHJhY3QsIHdhcnJhbnR5LCB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIHByb2R1Y3QgbGlhYmlsaXR5IG9yIG90aGVyd2lzZSwgYXJpc2luZyBpbiBhbnkgd2F5IGluIHJlbGF0aW9uIHRvIHRoZSBDb3ZlcmVkIFNvdXJjZSwgbW9kaWZpZWQgQ292ZXJlZCBTb3VyY2UgYW5kL29yIHRoZSBNYWtpbmcgb3IgQ29udmV5YW5jZSBvZiBhIFByb2R1Y3QsIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLCBhbmQgWW91IHNoYWxsIGhvbGQgdGhlIExpY2Vuc29yKHMpIGZyZWUgYW5kIGhhcm1sZXNzIGZyb20gYW55IGxpYWJpbGl0eSwgY29zdHMsIGRhbWFnZXMsIGZlZXMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcgY2xhaW1zIGJ5IHRoaXJkIHBhcnRpZXMsIGluIHJlbGF0aW9uIHRvIHN1Y2ggdXNlLlxuXG4gICA2IFBhdGVudHNcblxuICAgICAgNi4xIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5jZSwgZWFjaCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uIDYsIG9yIHdoZXJlIHRlcm1pbmF0ZWQgYnkgdGhlIExpY2Vuc29yIGZvciBjYXVzZSkgcGF0ZW50IGxpY2Vuc2UgdG8gTWFrZSwgaGF2ZSBNYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ292ZXJlZCBTb3VyY2UgYW5kIFByb2R1Y3RzLCB3aGVyZSBzdWNoIGxpY2VuY2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIExpY2Vuc29yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGUgQ292ZXJlZCBTb3VyY2UgYXMgQ29udmV5ZWQgYnkgdGhhdCBMaWNlbnNvci5cblxuICAgICAgNi4yIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBDb3ZlcmVkIFNvdXJjZSBvciBhIFByb2R1Y3QgY29uc3RpdHV0ZXMgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCBvciBZb3Ugc2VlayBhbnkgZGVjbGFyYXRpb24gdGhhdCBhIHBhdGVudCBsaWNlbnNlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbmNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB0aGVuIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbmNlIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIHByb2Nlc3MgaXMgaW5pdGlhdGVkLlxuXG4gICA3IEdlbmVyYWxcblxuICAgICAgNy4xIElmIGFueSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5jZSBhcmUgb3Igc3Vic2VxdWVudGx5IGJlY29tZSBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgZm9yIGFueSByZWFzb24sIHRoZSByZW1haW5pbmcgcHJvdmlzaW9ucyBzaGFsbCByZW1haW4gZWZmZWN0aXZlLlxuXG4gICAgICA3LjIgWW91IHNoYWxsIG5vdCB1c2UgYW55IG9mIHRoZSBuYW1lIChpbmNsdWRpbmcgYWNyb255bXMgYW5kIGFiYnJldmlhdGlvbnMpLCBpbWFnZSwgb3IgbG9nbyBieSB3aGljaCB0aGUgTGljZW5zb3Igb3IgQ0VSTiBpcyBrbm93biwgZXhjZXB0IHdoZXJlIG5lZWRlZCB0byBjb21wbHkgd2l0aCBzZWN0aW9uIDMsIG9yIHdoZXJlIHRoZSB1c2UgaXMgb3RoZXJ3aXNlIGFsbG93ZWQgYnkgbGF3LiBBbnkgc3VjaCBwZXJtaXR0ZWQgdXNlIHNoYWxsIGJlIGZhY3R1YWwgYW5kIHNoYWxsIG5vdCBiZSBtYWRlIHNvIGFzIHRvIHN1Z2dlc3QgYW55IGtpbmQgb2YgZW5kb3JzZW1lbnQgb3IgaW1wbGljYXRpb24gb2YgaW52b2x2ZW1lbnQgYnkgdGhlIExpY2Vuc29yIG9yIGl0cyBwZXJzb25uZWwuXG5cbiAgICAgIDcuMyBDRVJOIG1heSBwdWJsaXNoIHVwZGF0ZWQgdmVyc2lvbnMgYW5kIHZhcmlhbnRzIG9mIHRoaXMgTGljZW5jZSB3aGljaCBpdCBjb25zaWRlcnMgdG8gYmUgaW4gdGhlIHNwaXJpdCBvZiB0aGlzIHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gTmV3IHZlcnNpb25zIHdpbGwgYmUgcHVibGlzaGVkIHdpdGggYSB1bmlxdWUgdmVyc2lvbiBudW1iZXIgYW5kIGEgdmFyaWFudCBpZGVudGlmaWVyIHNwZWNpZnlpbmcgdGhlIHZhcmlhbnQuIElmIHRoZSBMaWNlbnNvciBoYXMgc3BlY2lmaWVkIHRoYXQgYSBnaXZlbiB2YXJpYW50IGFwcGxpZXMgdG8gdGhlIENvdmVyZWQgU291cmNlIHdpdGhvdXQgc3BlY2lmeWluZyBhIHZlcnNpb24sIFlvdSBtYXkgdHJlYXQgdGhhdCBDb3ZlcmVkIFNvdXJjZSBhcyBiZWluZyByZWxlYXNlZCB1bmRlciBhbnkgdmVyc2lvbiBvZiB0aGUgQ0VSTi1PSEwgd2l0aCB0aGF0IHZhcmlhbnQuIElmIG5vIHZhcmlhbnQgaXMgc3BlY2lmaWVkLCB0aGUgQ292ZXJlZCBTb3VyY2Ugc2hhbGwgYmUgdHJlYXRlZCBhcyBiZWluZyByZWxlYXNlZCB1bmRlciBDRVJOLU9ITC1TLiBUaGUgTGljZW5zb3IgbWF5IGFsc28gc3BlY2lmeSB0aGF0IHRoZSBDb3ZlcmVkIFNvdXJjZSBpcyBzdWJqZWN0IHRvIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgQ0VSTi1PSEwgb3IgYW55IGxhdGVyIHZlcnNpb24gaW4gd2hpY2ggY2FzZSBZb3UgbWF5IGFwcGx5IHRoaXMgb3IgYW55IGxhdGVyIHZlcnNpb24gb2YgQ0VSTi1PSEwgd2l0aCB0aGUgc2FtZSB2YXJpYW50IGlkZW50aWZpZXIgcHVibGlzaGVkIGJ5IENFUk4uXG5cbiAgICAgIDcuNCBUaGlzIExpY2VuY2Ugc2hhbGwgbm90IGJlIGVuZm9yY2VhYmxlIGV4Y2VwdCBieSBhIExpY2Vuc29yIGFjdGluZyBhcyBzdWNoLCBhbmQgdGhpcmQgcGFydHkgYmVuZWZpY2lhcnkgcmlnaHRzIGFyZSBzcGVjaWZpY2FsbHkgZXhjbHVkZWQuIl0sImxpY2Vuc2VJZHMiOlsiQ0VSTi1PSEwtUC0yLjAiXSwia2V5d29yZHMiOlsidmVyc2lvbiAyIHBlcm1pc3NpdmUiLCIyIHBlcm1pc3NpdmUgcHJlYW1ibGUiLCJwZXJtaXNzaXZlIHByZWFtYmxlIGNlcm4iLCJ0aHJlZSB2YXJpYW50cyB0aGlzIiwidmFyaWFudHMgdGhpcyBsaWNlbmNlIiwib2hsIHAgaXMiLCJwIGlzIGNvcHlyaWdodCIsIm9obCBwIDEiLCJwIDEgMiIsIjIgc291cmNlIG1lYW5zIiwibm90aWNlcyAxIDMiLCIzIGNvdmVyZWQgc291cmNlIiwibGljZW5jZSAxIDQiLCIxIDQgcHJvZHVjdCIsIjQgcHJvZHVjdCBtZWFucyIsInNvdXJjZSAxIDUiLCIxIDUgbWFrZSIsIjUgbWFrZSBtZWFucyIsIm90aGVyd2lzZSAxIDYiLCIxIDYgbm90aWNlIiwiNiBub3RpY2UgbWVhbnMiLCJ0cmFkZW1hcmsgbm90aWNlcyByZWZlcmVuY2VzIiwibm90aWNlcyByZWZlcmVuY2VzIHRvIiwibG9jYXRpb24gb2YgYW55Iiwib2YgYW55IG5vdGljZXMiLCJhbnkgbm90aWNlcyBtb2RpZmljYXRpb24iLCJub3RpY2VzIG1vZGlmaWNhdGlvbiBub3RpY2VzIiwic291cmNlIDEgNyIsIjEgNyBsaWNlbnNlZSIsIjcgbGljZW5zZWUgb3IiLCJsaWNlbmNlIDEgOCIsImEgcGVyc29uIHdobyIsIndobyBjcmVhdGVzIHNvdXJjZSIsImNyZWF0ZXMgc291cmNlIG9yIiwic291cmNlIG9yIG1vZGlmaWVzIiwic291cmNlIGFuZCBzdWJzZXF1ZW50bHkiLCJhbmQgc3Vic2VxdWVudGx5IGNvbnZleXMiLCJzdWJzZXF1ZW50bHkgY29udmV5cyB0aGUiLCJjb252ZXlzIHRoZSByZXN1bHRpbmciLCJyZXN1bHRpbmcgY292ZXJlZCBzb3VyY2UiLCJsaWNlbmNlIGEgcGVyc29uIiwidGltZSAxIDkiLCIxIDkgY29udmV5IiwiOSBjb252ZXkgbWVhbnMiLCJ0aGFuIG5vdGljZXMgeW91IiwiYW5kIGIgYWRkIiwibW9kaWZpZWQgaXQgMyIsIml0IDMgNCIsInNvdXJjZSB1bmRlciBsaWNlbmNlIiwidW5kZXIgbGljZW5jZSB0ZXJtcyIsImxpY2VuY2UgdGVybXMgd2hpY2giLCJ0aGlzIGxpY2VuY2UgcHJvdmlkZWQiLCJsaWNlbmNlIHByb3ZpZGVkIHRoYXQiLCJhIHlvdSBjb21wbHkiLCJ5b3UgY29tcGx5IGF0IiwiY29tcGx5IGF0IGFsbCIsInRpbWVzIHdpdGggc3Vic2VjdGlvbiIsImIgeW91IHByb3ZpZGUiLCJsaWNlbmNlIHRvIGFueW9uZSIsInlvdSBjb252ZXkgY292ZXJlZCIsImNvdmVyZWQgc291cmNlIDQiLCJzb3VyY2UgNCBtYWtpbmciLCJ0aGF0IHlvdSBlbnN1cmUiLCJ5b3UgZW5zdXJlIHRoYXQiLCJwcm9kdWN0IGhhcyBhY2Nlc3MiLCJhY2Nlc3MgdG8gYW55IiwidG8gYW55IG5vdGljZXMiLCJhbnkgbm90aWNlcyBhcHBsaWNhYmxlIiwidGhlIHByb2R1Y3QgNSIsInByb2R1Y3QgNSBkaXNjbGFpbWVyIiwiNSBkaXNjbGFpbWVyIGFuZCIsInRoaXMgbGljZW5jZSA1IiwibGljZW5jZSA1IDIiLCI1IDIgZXhjbHVzaW9uIiwidXNlIDYgcGF0ZW50cyIsIjYgcGF0ZW50cyA2IiwicGF0ZW50cyA2IDEiLCI2IDEgc3ViamVjdCIsIjYgb3Igd2hlcmUiLCJvciB3aGVyZSB0ZXJtaW5hdGVkIiwid2hlcmUgdGVybWluYXRlZCBieSIsInRlcm1pbmF0ZWQgYnkgdGhlIiwibGljZW5zb3IgZm9yIGNhdXNlIiwiZm9yIGNhdXNlIHBhdGVudCIsImNhdXNlIHBhdGVudCBsaWNlbnNlIiwidGhhdCBsaWNlbnNvciA2IiwibGljZW5zb3IgNiAyIiwiaXMgaW5pdGlhdGVkIDciLCJpbml0aWF0ZWQgNyBnZW5lcmFsIiwiNyBnZW5lcmFsIDciLCJnZW5lcmFsIDcgMSIsInJlbWFpbiBlZmZlY3RpdmUgNyIsImVmZmVjdGl2ZSA3IDIiLCJpdHMgcGVyc29ubmVsIDciLCJwZXJzb25uZWwgNyAzIiwiNyAzIGNlcm4iLCJieSBjZXJuIDciLCJjZXJuIDcgNCIsIjcgNCB0aGlzIiwibGljZW5jZSB2ZXJzaW9uIDIgcGVybWlzc2l2ZSIsInZlcnNpb24gMiBwZXJtaXNzaXZlIHByZWFtYmxlIiwiMiBwZXJtaXNzaXZlIHByZWFtYmxlIGNlcm4iLCJwZXJtaXNzaXZlIHByZWFtYmxlIGNlcm4gaGFzIiwiaW4gdGhyZWUgdmFyaWFudHMgdGhpcyIsInRocmVlIHZhcmlhbnRzIHRoaXMgbGljZW5jZSIsInZhcmlhbnRzIHRoaXMgbGljZW5jZSBjZXJuIiwibGljZW5jZSBjZXJuIG9obCBwIiwidGhlIGNlcm4gb2hsIHAiLCJjZXJuIG9obCBwIGlzIiwib2hsIHAgaXMgY29weXJpZ2h0IiwicCBpcyBjb3B5cmlnaHQgY2VybiIsInRoaXMgY2VybiBvaGwgcCIsImNlcm4gb2hsIHAgMSIsIm9obCBwIDEgMiIsInAgMSAyIHNvdXJjZSIsIjEgMiBzb3VyY2UgbWVhbnMiLCIyIHNvdXJjZSBtZWFucyBpbmZvcm1hdGlvbiIsImluY2x1ZGUgbm90aWNlcyAxIDMiLCJub3RpY2VzIDEgMyBjb3ZlcmVkIiwiMSAzIGNvdmVyZWQgc291cmNlIiwiMyBjb3ZlcmVkIHNvdXJjZSBtZWFucyIsInRoaXMgbGljZW5jZSAxIDQiLCJsaWNlbmNlIDEgNCBwcm9kdWN0IiwiMSA0IHByb2R1Y3QgbWVhbnMiLCI0IHByb2R1Y3QgbWVhbnMgYW55IiwiY292ZXJlZCBzb3VyY2UgMSA1Iiwic291cmNlIDEgNSBtYWtlIiwiMSA1IG1ha2UgbWVhbnMiLCI1IG1ha2UgbWVhbnMgdG8iLCJvciBvdGhlcndpc2UgMSA2Iiwib3RoZXJ3aXNlIDEgNiBub3RpY2UiLCIxIDYgbm90aWNlIG1lYW5zIiwiNiBub3RpY2UgbWVhbnMgY29weXJpZ2h0IiwiYW5kIHRyYWRlbWFyayBub3RpY2VzIHJlZmVyZW5jZXMiLCJ0cmFkZW1hcmsgbm90aWNlcyByZWZlcmVuY2VzIHRvIiwibm90aWNlcyByZWZlcmVuY2VzIHRvIHRoZSIsInJlZmVyZW5jZXMgdG8gdGhlIGxvY2F0aW9uIiwidGhlIGxvY2F0aW9uIG9mIGFueSIsImxvY2F0aW9uIG9mIGFueSBub3RpY2VzIiwib2YgYW55IG5vdGljZXMgbW9kaWZpY2F0aW9uIiwiYW55IG5vdGljZXMgbW9kaWZpY2F0aW9uIG5vdGljZXMiLCJub3RpY2VzIG1vZGlmaWNhdGlvbiBub3RpY2VzIHN1YnNlY3Rpb24iLCJjb3ZlcmVkIHNvdXJjZSAxIDciLCJzb3VyY2UgMSA3IGxpY2Vuc2VlIiwiMSA3IGxpY2Vuc2VlIG9yIiwiNyBsaWNlbnNlZSBvciB5b3UiLCJ0aGlzIGxpY2VuY2UgMSA4IiwibGljZW5jZSAxIDggbGljZW5zb3IiLCI4IGxpY2Vuc29yIG1lYW5zIGEiLCJsaWNlbnNvciBtZWFucyBhIHBlcnNvbiIsIm1lYW5zIGEgcGVyc29uIHdobyIsImEgcGVyc29uIHdobyBjcmVhdGVzIiwicGVyc29uIHdobyBjcmVhdGVzIHNvdXJjZSIsIndobyBjcmVhdGVzIHNvdXJjZSBvciIsImNyZWF0ZXMgc291cmNlIG9yIG1vZGlmaWVzIiwic291cmNlIG9yIG1vZGlmaWVzIGNvdmVyZWQiLCJtb2RpZmllcyBjb3ZlcmVkIHNvdXJjZSBhbmQiLCJjb3ZlcmVkIHNvdXJjZSBhbmQgc3Vic2VxdWVudGx5Iiwic291cmNlIGFuZCBzdWJzZXF1ZW50bHkgY29udmV5cyIsImFuZCBzdWJzZXF1ZW50bHkgY29udmV5cyB0aGUiLCJzdWJzZXF1ZW50bHkgY29udmV5cyB0aGUgcmVzdWx0aW5nIiwiY29udmV5cyB0aGUgcmVzdWx0aW5nIGNvdmVyZWQiLCJ0aGUgcmVzdWx0aW5nIGNvdmVyZWQgc291cmNlIiwicmVzdWx0aW5nIGNvdmVyZWQgc291cmNlIHVuZGVyIiwidGhpcyBsaWNlbmNlIGEgcGVyc29uIiwibGljZW5jZSBhIHBlcnNvbiBtYXkiLCJzYW1lIHRpbWUgMSA5IiwidGltZSAxIDkgY29udmV5IiwiMSA5IGNvbnZleSBtZWFucyIsIjkgY29udmV5IG1lYW5zIHRvIiwib3RoZXIgdGhhbiBub3RpY2VzIHlvdSIsInRoYW4gbm90aWNlcyB5b3UgbWF5Iiwibm90aWNlcyB5b3UgbWF5IG9ubHkiLCJzdWJzZWN0aW9uIDMgMiBhbmQiLCIzIDIgYW5kIGIiLCIyIGFuZCBiIGFkZCIsImFuZCBiIGFkZCBhIiwiaGF2ZSBtb2RpZmllZCBpdCAzIiwibW9kaWZpZWQgaXQgMyA0IiwiaXQgMyA0IHlvdSIsIjMgNCB5b3UgbWF5IiwiNCB5b3UgbWF5IGNvbnZleSIsImNvdmVyZWQgc291cmNlIHVuZGVyIGxpY2VuY2UiLCJzb3VyY2UgdW5kZXIgbGljZW5jZSB0ZXJtcyIsInVuZGVyIGxpY2VuY2UgdGVybXMgd2hpY2giLCJsaWNlbmNlIHRlcm1zIHdoaWNoIGRpZmZlciIsImRpZmZlciBmcm9tIHRoZSB0ZXJtcyIsIm9mIHRoaXMgbGljZW5jZSBwcm92aWRlZCIsInRoaXMgbGljZW5jZSBwcm92aWRlZCB0aGF0IiwibGljZW5jZSBwcm92aWRlZCB0aGF0IGEiLCJwcm92aWRlZCB0aGF0IGEgeW91IiwidGhhdCBhIHlvdSBjb21wbHkiLCJhIHlvdSBjb21wbHkgYXQiLCJ5b3UgY29tcGx5IGF0IGFsbCIsImNvbXBseSBhdCBhbGwgdGltZXMiLCJhbGwgdGltZXMgd2l0aCBzdWJzZWN0aW9uIiwidGltZXMgd2l0aCBzdWJzZWN0aW9uIDMiLCJzdWJzZWN0aW9uIDMgMyBhbmQiLCIzIDMgYW5kIGIiLCJhbmQgYiB5b3UgcHJvdmlkZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDRVJOIE9wZW4gSGFyZHdhcmUgTGljZW5jZSBWZXJzaW9uIDIgLSBTdHJvbmdseSBSZWNpcHJvY2FsXG5cblByZWFtYmxlXG5cbkNFUk4gaGFzIGRldmVsb3BlZCB0aGlzIGxpY2VuY2UgdG8gcHJvbW90ZSBjb2xsYWJvcmF0aW9uIGFtb25nIGhhcmR3YXJlIGRlc2lnbmVycyBhbmQgdG8gcHJvdmlkZSBhIGxlZ2FsIHRvb2wgd2hpY2ggc3VwcG9ydHMgdGhlIGZyZWVkb20gdG8gdXNlLCBzdHVkeSwgbW9kaWZ5LCBzaGFyZSBhbmQgZGlzdHJpYnV0ZSBoYXJkd2FyZSBkZXNpZ25zIGFuZCBwcm9kdWN0cyBiYXNlZCBvbiB0aG9zZSBkZXNpZ25zLiBWZXJzaW9uIDIgb2YgdGhlIENFUk4gT3BlbiBIYXJkd2FyZSBMaWNlbmNlIGNvbWVzIGluIHRocmVlIHZhcmlhbnRzOiBDRVJOLU9ITC1QIChwZXJtaXNzaXZlKTsgYW5kIHR3byByZWNpcHJvY2FsIGxpY2VuY2VzOiBDRVJOLU9ITC1XICh3ZWFrbHkgcmVjaXByb2NhbCkgYW5kIHRoaXMgbGljZW5jZSwgQ0VSTi1PSEwtUyAoc3Ryb25nbHkgcmVjaXByb2NhbCkuXG5cblRoZSBDRVJOLU9ITC1TIGlzIGNvcHlyaWdodCBDRVJOIDIwMjAuIEFueW9uZSBpcyB3ZWxjb21lIHRvIHVzZSBpdCwgaW4gdW5tb2RpZmllZCBmb3JtIG9ubHkuXG5cblVzZSBvZiB0aGlzIExpY2VuY2UgZG9lcyBub3QgaW1wbHkgYW55IGVuZG9yc2VtZW50IGJ5IENFUk4gb2YgYW55IExpY2Vuc29yIG9yIHRoZWlyIGRlc2lnbnMgbm9yIGRvZXMgaXQgaW1wbHkgYW55IGludm9sdmVtZW50IGJ5IENFUk4gaW4gdGhlaXIgZGV2ZWxvcG1lbnQuXG5cbiAgIDEgRGVmaW5pdGlvbnNcblxuICAgICAgMS4xICdMaWNlbmNlJyBtZWFucyB0aGlzIENFUk4tT0hMLVMuXG5cbiAgICAgIDEuMiAnQ29tcGF0aWJsZSBMaWNlbmNlJyBtZWFuc1xuXG4gICAgICAgICBhKSBhbnkgZWFybGllciB2ZXJzaW9uIG9mIHRoZSBDRVJOIE9wZW4gSGFyZHdhcmUgbGljZW5jZSwgb3JcblxuICAgICAgICAgYikgYW55IHZlcnNpb24gb2YgdGhlIENFUk4tT0hMLVMsIG9yXG5cbiAgICAgICAgIGMpIGFueSBsaWNlbmNlIHdoaWNoIHBlcm1pdHMgWW91IHRvIHRyZWF0IHRoZSBTb3VyY2UgdG8gd2hpY2ggaXQgYXBwbGllcyBhcyBsaWNlbnNlZCB1bmRlciBDRVJOLU9ITC1TIHByb3ZpZGVkIHRoYXQgb24gQ29udmV5YW5jZSBvZiBhbnkgc3VjaCBTb3VyY2UsIG9yIGFueSBhc3NvY2lhdGVkIFByb2R1Y3QgWW91IHRyZWF0IHRoZSBTb3VyY2UgaW4gcXVlc3Rpb24gYXMgYmVpbmcgbGljZW5zZWQgdW5kZXIgQ0VSTi1PSEwtUy5cblxuICAgICAgMS4zICdTb3VyY2UnIG1lYW5zIGluZm9ybWF0aW9uIHN1Y2ggYXMgZGVzaWduIG1hdGVyaWFscyBvciBkaWdpdGFsIGNvZGUgd2hpY2ggY2FuIGJlIGFwcGxpZWQgdG8gTWFrZSBvciB0ZXN0IGEgUHJvZHVjdCBvciB0byBwcmVwYXJlIGEgUHJvZHVjdCBmb3IgdXNlLCBDb252ZXlhbmNlIG9yIHNhbGUsIHJlZ2FyZGxlc3Mgb2YgaXRzIG1lZGl1bSBvciBob3cgaXQgaXMgZXhwcmVzc2VkLiBJdCBtYXkgaW5jbHVkZSBOb3RpY2VzLlxuXG4gICAgICAxLjQgJ0NvdmVyZWQgU291cmNlJyBtZWFucyBTb3VyY2UgdGhhdCBpcyBleHBsaWNpdGx5IG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5jZS5cblxuICAgICAgMS41ICdQcm9kdWN0JyBtZWFucyBhbnkgZGV2aWNlLCBjb21wb25lbnQsIHdvcmsgb3IgcGh5c2ljYWwgb2JqZWN0LCB3aGV0aGVyIGluIGZpbmlzaGVkIG9yIGludGVybWVkaWF0ZSBmb3JtLCBhcmlzaW5nIGZyb20gdGhlIHVzZSwgYXBwbGljYXRpb24gb3IgcHJvY2Vzc2luZyBvZiBDb3ZlcmVkIFNvdXJjZS5cblxuICAgICAgMS42ICdNYWtlJyBtZWFucyB0byBjcmVhdGUgb3IgY29uZmlndXJlIHNvbWV0aGluZywgd2hldGhlciBieSBtYW51ZmFjdHVyZSwgYXNzZW1ibHksIGNvbXBpbGluZywgbG9hZGluZyBvciBhcHBseWluZyBDb3ZlcmVkIFNvdXJjZSBvciBhbm90aGVyIFByb2R1Y3Qgb3Igb3RoZXJ3aXNlLlxuXG4gICAgICAxLjcgJ0F2YWlsYWJsZSBDb21wb25lbnQnIG1lYW5zIGFueSBwYXJ0LCBzdWItYXNzZW1ibHksIGxpYnJhcnkgb3IgY29kZSB3aGljaDpcblxuICAgICAgICAgYSkgaXMgbGljZW5zZWQgdG8gWW91IGFzIENvbXBsZXRlIFNvdXJjZSB1bmRlciBhIENvbXBhdGlibGUgTGljZW5jZTsgb3JcblxuICAgICAgICAgYikgaXMgYXZhaWxhYmxlLCBhdCB0aGUgdGltZSBhIFByb2R1Y3Qgb3IgdGhlIFNvdXJjZSBjb250YWluaW5nIGl0IGlzIGZpcnN0IENvbnZleWVkLCB0byBZb3UgYW5kIGFueSBvdGhlciBwcm9zcGVjdGl2ZSBsaWNlbnNlZXNcblxuICAgICAgICAgICAgaSkgYXMgYSBwaHlzaWNhbCBwYXJ0IHdpdGggc3VmZmljaWVudCByaWdodHMgYW5kIGluZm9ybWF0aW9uIChpbmNsdWRpbmcgYW55IGNvbmZpZ3VyYXRpb24gYW5kIHByb2dyYW1taW5nIGZpbGVzIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBpdHMgY2hhcmFjdGVyaXN0aWNzIGFuZCBpbnRlcmZhY2VzKSB0byBlbmFibGUgaXQgZWl0aGVyIHRvIGJlIE1hZGUgaXRzZWxmLCBvciB0byBiZSBzb3VyY2VkIGFuZCB1c2VkIHRvIE1ha2UgdGhlIFByb2R1Y3Q7IG9yXG5cbiAgICAgICAgICAgIGlpKSBhcyBwYXJ0IG9mIHRoZSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIGEgdG9vbCB1c2VkIHRvIGRlc2lnbiBvciBNYWtlIHRoZSBQcm9kdWN0LlxuXG4gICAgICAxLjggJ0NvbXBsZXRlIFNvdXJjZScgbWVhbnMgdGhlIHNldCBvZiBhbGwgU291cmNlIG5lY2Vzc2FyeSB0byBNYWtlIGEgUHJvZHVjdCwgaW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywgaW5jbHVkaW5nIG5lY2Vzc2FyeSBpbnN0YWxsYXRpb24gYW5kIGludGVyZmFjaW5nIGluZm9ybWF0aW9uIGJvdGggZm9yIHRoZSBQcm9kdWN0LCBhbmQgZm9yIGFueSBpbmNsdWRlZCBBdmFpbGFibGUgQ29tcG9uZW50cy4gSWYgdGhlIGZvcm1hdCBpcyBwcm9wcmlldGFyeSwgaXQgbXVzdCBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIGluIGEgZm9ybWF0IChpZiB0aGUgcHJvcHJpZXRhcnkgdG9vbCBjYW4gY3JlYXRlIGl0KSB3aGljaCBpcyB2aWV3YWJsZSB3aXRoIGEgdG9vbCBhdmFpbGFibGUgdG8gcG90ZW50aWFsIGxpY2Vuc2VlcyBhbmQgbGljZW5zZWQgdW5kZXIgYSBsaWNlbmNlIGFwcHJvdmVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gb3IgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUuIENvbXBsZXRlIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRlIHRoZSBTb3VyY2Ugb2YgYW55IEF2YWlsYWJsZSBDb21wb25lbnQsIHByb3ZpZGVkIHRoYXQgWW91IGluY2x1ZGUgaW4gdGhlIENvbXBsZXRlIFNvdXJjZSBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIGVuYWJsZSBhIHJlY2lwaWVudCB0byBNYWtlIG9yIHNvdXJjZSBhbmQgdXNlIHRoZSBBdmFpbGFibGUgQ29tcG9uZW50IHRvIE1ha2UgdGhlIFByb2R1Y3QuXG5cbiAgICAgIDEuOSAnU291cmNlIExvY2F0aW9uJyBtZWFucyBhIGxvY2F0aW9uIHdoZXJlIGEgTGljZW5zb3IgaGFzIHBsYWNlZCBDb3ZlcmVkIFNvdXJjZSwgYW5kIHdoaWNoIHRoYXQgTGljZW5zb3IgcmVhc29uYWJseSBiZWxpZXZlcyB3aWxsIHJlbWFpbiBlYXNpbHkgYWNjZXNzaWJsZSBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgZm9yIGFueW9uZSB0byBvYnRhaW4gYSBkaWdpdGFsIGNvcHkuXG5cbiAgICAgIDEuMTAgJ05vdGljZScgbWVhbnMgY29weXJpZ2h0LCBhY2tub3dsZWRnZW1lbnQgYW5kIHRyYWRlbWFyayBub3RpY2VzLCBTb3VyY2UgTG9jYXRpb24gcmVmZXJlbmNlcywgbW9kaWZpY2F0aW9uIG5vdGljZXMgKHN1YnNlY3Rpb24gMy4zKGIpKSBhbmQgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2VuY2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIENvdmVyZWQgU291cmNlLlxuXG4gICAgICAxLjExICdMaWNlbnNlZScgb3IgJ1lvdScgbWVhbnMgYW55IHBlcnNvbiBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2VuY2UuXG5cbiAgICAgIDEuMTIgJ0xpY2Vuc29yJyBtZWFucyBhIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBjcmVhdGVzIG9yIG1vZGlmaWVzIENvdmVyZWQgU291cmNlLiBBIHBlcnNvbiBtYXkgYmUgYSBMaWNlbnNlZSBhbmQgYSBMaWNlbnNvciBhdCB0aGUgc2FtZSB0aW1lLlxuXG4gICAgICAxLjEzICdDb252ZXknIG1lYW5zIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgb3IgZGlzdHJpYnV0ZS5cblxuICAgMiBBcHBsaWNhYmlsaXR5XG5cbiAgICAgIDIuMSBUaGlzIExpY2VuY2UgZ292ZXJucyB0aGUgdXNlLCBjb3B5aW5nLCBtb2RpZmljYXRpb24sIENvbnZleWluZyBvZiBDb3ZlcmVkIFNvdXJjZSBhbmQgUHJvZHVjdHMsIGFuZCB0aGUgTWFraW5nIG9mIFByb2R1Y3RzLiBCeSBleGVyY2lzaW5nIGFueSByaWdodCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5jZSwgWW91IGlycmV2b2NhYmx5IGFjY2VwdCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgICAgMi4yIFRoaXMgTGljZW5jZSBpcyBncmFudGVkIGJ5IHRoZSBMaWNlbnNvciBkaXJlY3RseSB0byBZb3UsIGFuZCBzaGFsbCBhcHBseSB3b3JsZHdpZGUgYW5kIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aW1lLlxuXG4gICAgICAyLjMgWW91IHNoYWxsIG5vdCBhdHRlbXB0IHRvIHJlc3RyaWN0IGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbmNlIHRvIG90aGVyIExpY2Vuc2Vlcy5cblxuICAgICAgMi40IFRoaXMgTGljZW5jZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgZmFpciB1c2UsIGZhaXIgZGVhbGluZywgb3IgYW55IG90aGVyIHNpbWlsYXIgcmlnaHQuXG5cbiAgIDMgQ29weWluZywgbW9kaWZ5aW5nIGFuZCBDb252ZXlpbmcgQ292ZXJlZCBTb3VyY2VcblxuICAgICAgMy4xIFlvdSBtYXkgY29weSBhbmQgQ29udmV5IHZlcmJhdGltIGNvcGllcyBvZiBDb3ZlcmVkIFNvdXJjZSwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgWW91IHJldGFpbiBhbGwgTm90aWNlcy5cblxuICAgICAgMy4yIFlvdSBtYXkgbW9kaWZ5IENvdmVyZWQgU291cmNlLCBvdGhlciB0aGFuIE5vdGljZXMsIHByb3ZpZGVkIHRoYXQgWW91IGlycmV2b2NhYmx5IHVuZGVydGFrZSB0byBtYWtlIHRoYXQgbW9kaWZpZWQgQ292ZXJlZCBTb3VyY2UgYXZhaWxhYmxlIGZyb20gYSBTb3VyY2UgTG9jYXRpb24gc2hvdWxkIFlvdSBDb252ZXkgYSBQcm9kdWN0IGluIGNpcmN1bXN0YW5jZXMgd2hlcmUgdGhlIHJlY2lwaWVudCBkb2VzIG5vdCBvdGhlcndpc2UgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIG1vZGlmaWVkIENvdmVyZWQgU291cmNlLiBJbiBlYWNoIGNhc2Ugc3Vic2VjdGlvbiAzLjMgc2hhbGwgYXBwbHkuXG5cbiAgICAgIFlvdSBtYXkgb25seSBkZWxldGUgTm90aWNlcyBpZiB0aGV5IGFyZSBubyBsb25nZXIgYXBwbGljYWJsZSB0byB0aGUgY29ycmVzcG9uZGluZyBDb3ZlcmVkIFNvdXJjZSBhcyBtb2RpZmllZCBieSBZb3UgYW5kIFlvdSBtYXkgYWRkIGFkZGl0aW9uYWwgTm90aWNlcyBhcHBsaWNhYmxlIHRvIFlvdXIgbW9kaWZpY2F0aW9ucy4gSW5jbHVkaW5nIENvdmVyZWQgU291cmNlIGluIGEgbGFyZ2VyIHdvcmsgaXMgbW9kaWZ5aW5nIHRoZSBDb3ZlcmVkIFNvdXJjZSwgYW5kIHRoZSBsYXJnZXIgd29yayBiZWNvbWVzIG1vZGlmaWVkIENvdmVyZWQgU291cmNlLlxuXG4gICAgICAzLjMgWW91IG1heSBDb252ZXkgbW9kaWZpZWQgQ292ZXJlZCBTb3VyY2UgKHdpdGggdGhlIGVmZmVjdCB0aGF0IFlvdSBzaGFsbCBhbHNvIGJlY29tZSBhIExpY2Vuc29yKSBwcm92aWRlZCB0aGF0IFlvdTpcblxuICAgICAgICAgYSkgcmV0YWluIE5vdGljZXMgYXMgcmVxdWlyZWQgaW4gc3Vic2VjdGlvbiAzLjI7XG5cbiAgICAgICAgIGIpIGFkZCBhIE5vdGljZSB0byB0aGUgbW9kaWZpZWQgQ292ZXJlZCBTb3VyY2Ugc3RhdGluZyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIGl0LCB3aXRoIHRoZSBkYXRlIGFuZCBicmllZiBkZXNjcmlwdGlvbiBvZiBob3cgWW91IGhhdmUgbW9kaWZpZWQgaXQ7XG5cbiAgICAgICAgIGMpIGFkZCBhIFNvdXJjZSBMb2NhdGlvbiBOb3RpY2UgZm9yIHRoZSBtb2RpZmllZCBDb3ZlcmVkIFNvdXJjZSBpZiBZb3UgQ29udmV5IGluIGNpcmN1bXN0YW5jZXMgd2hlcmUgdGhlIHJlY2lwaWVudCBkb2VzIG5vdCBvdGhlcndpc2UgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIG1vZGlmaWVkIENvdmVyZWQgU291cmNlOyBhbmRcblxuICAgICAgICAgZCkgbGljZW5zZSB0aGUgbW9kaWZpZWQgQ292ZXJlZCBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5jZSAob3IsIGFzIHNldCBvdXQgaW4gc3Vic2VjdGlvbiA4LjMsIGEgbGF0ZXIgdmVyc2lvbiwgaWYgcGVybWl0dGVkIGJ5IHRoZSBsaWNlbmNlIG9mIHRoZSBvcmlnaW5hbCBDb3ZlcmVkIFNvdXJjZSkuIFN1Y2ggbW9kaWZpZWQgQ292ZXJlZCBTb3VyY2UgbXVzdCBiZSBsaWNlbnNlZCBhcyBhIHdob2xlLCBidXQgZXhjbHVkaW5nIEF2YWlsYWJsZSBDb21wb25lbnRzIGNvbnRhaW5lZCBpbiBpdCwgd2hpY2ggcmVtYWluIGxpY2Vuc2VkIHVuZGVyIHRoZWlyIG93biBhcHBsaWNhYmxlIGxpY2VuY2VzLlxuXG4gICA0IE1ha2luZyBhbmQgQ29udmV5aW5nIFByb2R1Y3RzXG5cbiAgIFlvdSBtYXkgTWFrZSBQcm9kdWN0cywgYW5kL29yIENvbnZleSB0aGVtLCBwcm92aWRlZCB0aGF0IFlvdSBlaXRoZXIgcHJvdmlkZSBlYWNoIHJlY2lwaWVudCB3aXRoIGEgY29weSBvZiB0aGUgQ29tcGxldGUgU291cmNlIG9yIGVuc3VyZSB0aGF0IGVhY2ggcmVjaXBpZW50IGlzIG5vdGlmaWVkIG9mIHRoZSBTb3VyY2UgTG9jYXRpb24gb2YgdGhlIENvbXBsZXRlIFNvdXJjZS4gVGhhdCBDb21wbGV0ZSBTb3VyY2UgaXMgQ292ZXJlZCBTb3VyY2UsIGFuZCBZb3UgbXVzdCBhY2NvcmRpbmdseSBzYXRpc2Z5IFlvdXIgb2JsaWdhdGlvbnMgc2V0IG91dCBpbiBzdWJzZWN0aW9uIDMuMy4gSWYgc3BlY2lmaWVkIGluIGEgTm90aWNlLCB0aGUgUHJvZHVjdCBtdXN0IHZpc2libHkgYW5kIHNlY3VyZWx5IGRpc3BsYXkgdGhlIFNvdXJjZSBMb2NhdGlvbiBvbiBpdCBvciBpdHMgcGFja2FnaW5nIG9yIGRvY3VtZW50YXRpb24gaW4gdGhlIG1hbm5lciBzcGVjaWZpZWQgaW4gdGhhdCBOb3RpY2UuXG5cbiAgIDUgUmVzZWFyY2ggYW5kIERldmVsb3BtZW50XG5cbiAgIFlvdSBtYXkgQ29udmV5IENvdmVyZWQgU291cmNlLCBtb2RpZmllZCBDb3ZlcmVkIFNvdXJjZSBvciBQcm9kdWN0cyB0byBhIGxlZ2FsIGVudGl0eSBjYXJyeWluZyBvdXQgZGV2ZWxvcG1lbnQsIHRlc3Rpbmcgb3IgcXVhbGl0eSBhc3N1cmFuY2Ugd29yayBvbiBZb3VyIGJlaGFsZiBwcm92aWRlZCB0aGF0IHRoZSB3b3JrIGlzIHBlcmZvcm1lZCBvbiB0ZXJtcyB3aGljaCBwcmV2ZW50IHRoZSBlbnRpdHkgZnJvbSBib3RoIHVzaW5nIHRoZSBTb3VyY2Ugb3IgUHJvZHVjdHMgZm9yIGl0cyBvd24gaW50ZXJuYWwgcHVycG9zZXMgYW5kIENvbnZleWluZyB0aGUgU291cmNlIG9yIFByb2R1Y3RzIG9yIGFueSBtb2RpZmljYXRpb25zIHRvIHRoZW0gdG8gYW55IHBlcnNvbiBvdGhlciB0aGFuIFlvdS4gQW55IG1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGUgZW50aXR5IHNoYWxsIGJlIGRlZW1lZCB0byBiZSBtYWRlIGJ5IFlvdSBwdXJzdWFudCB0byBzdWJzZWN0aW9uIDMuMi5cblxuICAgNiBESVNDTEFJTUVSIEFORCBMSUFCSUxJVFlcblxuICAgICAgNi4xIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgLS0gVGhlIENvdmVyZWQgU291cmNlIGFuZCBhbnkgUHJvZHVjdHMgYXJlIHByb3ZpZGVkICdhcyBpcycgYW5kIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudGllcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIG9mIHNhdGlzZmFjdG9yeSBxdWFsaXR5LCBub24taW5mcmluZ2VtZW50IG9mIHRoaXJkIHBhcnR5IHJpZ2h0cywgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIG9yIHVzZSBhcmUgZGlzY2xhaW1lZCBpbiByZXNwZWN0IG9mIGFueSBTb3VyY2Ugb3IgUHJvZHVjdCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4gVGhlIExpY2Vuc29yIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9uIHRoYXQgYW55IFNvdXJjZSBvciBQcm9kdWN0IGRvZXMgbm90IG9yIHdpbGwgbm90IGluZnJpbmdlIGFueSBwYXRlbnQsIGNvcHlyaWdodCwgdHJhZGUgc2VjcmV0IG9yIG90aGVyIHByb3ByaWV0YXJ5IHJpZ2h0LiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHVzZSwgcXVhbGl0eSwgYW5kIHBlcmZvcm1hbmNlIG9mIGFueSBTb3VyY2Ugb3IgUHJvZHVjdCBzaGFsbCBiZSB3aXRoIFlvdSBhbmQgbm90IHRoZSBMaWNlbnNvci4gVGhpcyBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGlzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5jZSBhbmQgYSBjb25kaXRpb24gZm9yIHRoZSBncmFudCBvZiBhbnkgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbmNlLlxuXG4gICAgICA2LjIgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSAtLSBUaGUgTGljZW5zb3Igc2hhbGwsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LCBoYXZlIG5vIGxpYWJpbGl0eSBmb3IgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgY29uc2VxdWVudGlhbCwgZXhlbXBsYXJ5LCBwdW5pdGl2ZSBvciBvdGhlciBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHByb2N1cmVtZW50IG9mIHN1YnN0aXR1dGUgZ29vZHMgb3Igc2VydmljZXMsIGxvc3Mgb2YgdXNlLCBkYXRhIG9yIHByb2ZpdHMsIG9yIGJ1c2luZXNzIGludGVycnVwdGlvbiwgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgY29udHJhY3QsIHdhcnJhbnR5LCB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIHByb2R1Y3QgbGlhYmlsaXR5IG9yIG90aGVyd2lzZSwgYXJpc2luZyBpbiBhbnkgd2F5IGluIHJlbGF0aW9uIHRvIHRoZSBDb3ZlcmVkIFNvdXJjZSwgbW9kaWZpZWQgQ292ZXJlZCBTb3VyY2UgYW5kL29yIHRoZSBNYWtpbmcgb3IgQ29udmV5YW5jZSBvZiBhIFByb2R1Y3QsIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLCBhbmQgWW91IHNoYWxsIGhvbGQgdGhlIExpY2Vuc29yKHMpIGZyZWUgYW5kIGhhcm1sZXNzIGZyb20gYW55IGxpYWJpbGl0eSwgY29zdHMsIGRhbWFnZXMsIGZlZXMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcgY2xhaW1zIGJ5IHRoaXJkIHBhcnRpZXMsIGluIHJlbGF0aW9uIHRvIHN1Y2ggdXNlLlxuXG4gICA3IFBhdGVudHNcblxuICAgICAgNy4xIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5jZSwgZWFjaCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gc3Vic2VjdGlvbnMgNy4yIGFuZCA4LjQpIHBhdGVudCBsaWNlbnNlIHRvIE1ha2UsIGhhdmUgTWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvdmVyZWQgU291cmNlIGFuZCBQcm9kdWN0cywgd2hlcmUgc3VjaCBsaWNlbmNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBMaWNlbnNvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhlIENvdmVyZWQgU291cmNlIGFzIENvbnZleWVkIGJ5IHRoYXQgTGljZW5zb3IuXG5cbiAgICAgIDcuMiBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgQ292ZXJlZCBTb3VyY2Ugb3IgYSBQcm9kdWN0IGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgb3IgWW91IHNlZWsgYW55IGRlY2xhcmF0aW9uIHRoYXQgYSBwYXRlbnQgbGljZW5zZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5jZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5jZSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBwcm9jZXNzIGlzIGluaXRpYXRlZC5cblxuICAgOCBHZW5lcmFsXG5cbiAgICAgIDguMSBJZiBhbnkgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2VuY2UgYXJlIG9yIHN1YnNlcXVlbnRseSBiZWNvbWUgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIGZvciBhbnkgcmVhc29uLCB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgc2hhbGwgcmVtYWluIGVmZmVjdGl2ZS5cblxuICAgICAgOC4yIFlvdSBzaGFsbCBub3QgdXNlIGFueSBvZiB0aGUgbmFtZSAoaW5jbHVkaW5nIGFjcm9ueW1zIGFuZCBhYmJyZXZpYXRpb25zKSwgaW1hZ2UsIG9yIGxvZ28gYnkgd2hpY2ggdGhlIExpY2Vuc29yIG9yIENFUk4gaXMga25vd24sIGV4Y2VwdCB3aGVyZSBuZWVkZWQgdG8gY29tcGx5IHdpdGggc2VjdGlvbiAzLCBvciB3aGVyZSB0aGUgdXNlIGlzIG90aGVyd2lzZSBhbGxvd2VkIGJ5IGxhdy4gQW55IHN1Y2ggcGVybWl0dGVkIHVzZSBzaGFsbCBiZSBmYWN0dWFsIGFuZCBzaGFsbCBub3QgYmUgbWFkZSBzbyBhcyB0byBzdWdnZXN0IGFueSBraW5kIG9mIGVuZG9yc2VtZW50IG9yIGltcGxpY2F0aW9uIG9mIGludm9sdmVtZW50IGJ5IHRoZSBMaWNlbnNvciBvciBpdHMgcGVyc29ubmVsLlxuXG4gICAgICA4LjMgQ0VSTiBtYXkgcHVibGlzaCB1cGRhdGVkIHZlcnNpb25zIGFuZCB2YXJpYW50cyBvZiB0aGlzIExpY2VuY2Ugd2hpY2ggaXQgY29uc2lkZXJzIHRvIGJlIGluIHRoZSBzcGlyaXQgb2YgdGhpcyB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuIE5ldyB2ZXJzaW9ucyB3aWxsIGJlIHB1Ymxpc2hlZCB3aXRoIGEgdW5pcXVlIHZlcnNpb24gbnVtYmVyIGFuZCBhIHZhcmlhbnQgaWRlbnRpZmllciBzcGVjaWZ5aW5nIHRoZSB2YXJpYW50LiBJZiB0aGUgTGljZW5zb3IgaGFzIHNwZWNpZmllZCB0aGF0IGEgZ2l2ZW4gdmFyaWFudCBhcHBsaWVzIHRvIHRoZSBDb3ZlcmVkIFNvdXJjZSB3aXRob3V0IHNwZWNpZnlpbmcgYSB2ZXJzaW9uLCBZb3UgbWF5IHRyZWF0IHRoYXQgQ292ZXJlZCBTb3VyY2UgYXMgYmVpbmcgcmVsZWFzZWQgdW5kZXIgYW55IHZlcnNpb24gb2YgdGhlIENFUk4tT0hMIHdpdGggdGhhdCB2YXJpYW50LiBJZiBubyB2YXJpYW50IGlzIHNwZWNpZmllZCwgdGhlIENvdmVyZWQgU291cmNlIHNoYWxsIGJlIHRyZWF0ZWQgYXMgYmVpbmcgcmVsZWFzZWQgdW5kZXIgQ0VSTi1PSEwtUy4gVGhlIExpY2Vuc29yIG1heSBhbHNvIHNwZWNpZnkgdGhhdCB0aGUgQ292ZXJlZCBTb3VyY2UgaXMgc3ViamVjdCB0byBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIENFUk4tT0hMIG9yIGFueSBsYXRlciB2ZXJzaW9uIGluIHdoaWNoIGNhc2UgWW91IG1heSBhcHBseSB0aGlzIG9yIGFueSBsYXRlciB2ZXJzaW9uIG9mIENFUk4tT0hMIHdpdGggdGhlIHNhbWUgdmFyaWFudCBpZGVudGlmaWVyIHB1Ymxpc2hlZCBieSBDRVJOLlxuXG4gICAgICA4LjQgVGhpcyBMaWNlbmNlIHNoYWxsIHRlcm1pbmF0ZSB3aXRoIGltbWVkaWF0ZSBlZmZlY3QgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgICAgOC41IEhvd2V2ZXIsIGlmIFlvdSBjZWFzZSBhbGwgYnJlYWNoZXMgb2YgdGhpcyBMaWNlbmNlLCB0aGVuIFlvdXIgTGljZW5jZSBmcm9tIGFueSBMaWNlbnNvciBpcyByZWluc3RhdGVkIHVubGVzcyBzdWNoIExpY2Vuc29yIGhhcyB0ZXJtaW5hdGVkIHRoaXMgTGljZW5jZSBieSBnaXZpbmcgWW91LCB3aGlsZSBZb3UgcmVtYWluIGluIGJyZWFjaCwgYSBub3RpY2Ugc3BlY2lmeWluZyB0aGUgYnJlYWNoIGFuZCByZXF1aXJpbmcgWW91IHRvIGN1cmUgaXQgd2l0aGluIDMwIGRheXMsIGFuZCBZb3UgaGF2ZSBmYWlsZWQgdG8gY29tZSBpbnRvIGNvbXBsaWFuY2UgaW4gYWxsIG1hdGVyaWFsIHJlc3BlY3RzIGJ5IHRoZSBlbmQgb2YgdGhlIDMwIGRheSBwZXJpb2QuIFNob3VsZCBZb3UgcmVwZWF0IHRoZSBicmVhY2ggYWZ0ZXIgcmVjZWlwdCBvZiBhIGN1cmUgbm90aWNlIGFuZCBzdWJzZXF1ZW50IHJlaW5zdGF0ZW1lbnQsIHRoaXMgTGljZW5jZSB3aWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgcGVybWFuZW50bHkuIFNlY3Rpb24gNiBzaGFsbCBjb250aW51ZSB0byBhcHBseSBhZnRlciBhbnkgdGVybWluYXRpb24uXG5cbiAgICAgIDguNiBUaGlzIExpY2VuY2Ugc2hhbGwgbm90IGJlIGVuZm9yY2VhYmxlIGV4Y2VwdCBieSBhIExpY2Vuc29yIGFjdGluZyBhcyBzdWNoLCBhbmQgdGhpcmQgcGFydHkgYmVuZWZpY2lhcnkgcmlnaHRzIGFyZSBzcGVjaWZpY2FsbHkgZXhjbHVkZWQuIl0sImxpY2Vuc2VJZHMiOlsiQ0VSTi1PSEwtUy0yLjAiXSwia2V5d29yZHMiOlsidmVyc2lvbiAyIHN0cm9uZ2x5IiwiMiBzdHJvbmdseSByZWNpcHJvY2FsIiwic3Ryb25nbHkgcmVjaXByb2NhbCBwcmVhbWJsZSIsInJlY2lwcm9jYWwgYW5kIHRoaXMiLCJhbmQgdGhpcyBsaWNlbmNlIiwib2hsIHMgaXMiLCJzIGlzIGNvcHlyaWdodCIsInMgMSAyIiwicyBvciBjIiwib2hsIHMgcHJvdmlkZWQiLCJzIHByb3ZpZGVkIHRoYXQiLCJzIDEgMyIsImxpY2Vuc2VlcyBpIGFzIiwiaSBhcyBhIiwiYXMgYSBwaHlzaWNhbCIsImEgcGh5c2ljYWwgcGFydCIsInBoeXNpY2FsIHBhcnQgd2l0aCIsInBhcnQgd2l0aCBzdWZmaWNpZW50IiwiMSA4IGNvbXBsZXRlIiwiOCBjb21wbGV0ZSBzb3VyY2UiLCJwcm9kdWN0IDEgOSIsIjkgc291cmNlIGxvY2F0aW9uIiwiY29weSAxIDEwIiwic291cmNlIDEgMTEiLCIxIDExIGxpY2Vuc2VlIiwiMTEgbGljZW5zZWUgb3IiLCJsaWNlbmNlIDEgMTIiLCIxIDEyIGxpY2Vuc29yIiwiMTIgbGljZW5zb3IgbWVhbnMiLCJ0aW1lIDEgMTMiLCIxIDEzIGNvbnZleSIsIjEzIGNvbnZleSBtZWFucyIsInlvdXIgbW9kaWZpY2F0aW9ucyBpbmNsdWRpbmciLCJtb2RpZmljYXRpb25zIGluY2x1ZGluZyBjb3ZlcmVkIiwiaW5jbHVkaW5nIGNvdmVyZWQgc291cmNlIiwic291cmNlIGluIGEiLCJ3b3JrIGlzIG1vZGlmeWluZyIsImlzIG1vZGlmeWluZyB0aGUiLCJtb2RpZnlpbmcgdGhlIGNvdmVyZWQiLCJzb3VyY2UgYW5kIHRoZSIsImxhcmdlciB3b3JrIGJlY29tZXMiLCJ3b3JrIGJlY29tZXMgbW9kaWZpZWQiLCJiZWNvbWVzIG1vZGlmaWVkIGNvdmVyZWQiLCJzb3VyY2UgMyAzIiwiaW4gaXQgd2hpY2giLCJpdCB3aGljaCByZW1haW4iLCJjb21wbGV0ZSBzb3VyY2UgaXMiLCJzb3VyY2UgaXMgY292ZXJlZCIsImlzIGNvdmVyZWQgc291cmNlIiwidGhhdCBub3RpY2UgNSIsIm5vdGljZSA1IHJlc2VhcmNoIiwiYnkgY2VybiA4IiwiY2VybiA4IDQiLCJsaWNlbmNlIHZlcnNpb24gMiBzdHJvbmdseSIsInZlcnNpb24gMiBzdHJvbmdseSByZWNpcHJvY2FsIiwiMiBzdHJvbmdseSByZWNpcHJvY2FsIHByZWFtYmxlIiwic3Ryb25nbHkgcmVjaXByb2NhbCBwcmVhbWJsZSBjZXJuIiwid2Vha2x5IHJlY2lwcm9jYWwgYW5kIHRoaXMiLCJyZWNpcHJvY2FsIGFuZCB0aGlzIGxpY2VuY2UiLCJhbmQgdGhpcyBsaWNlbmNlIGNlcm4iLCJsaWNlbmNlIGNlcm4gb2hsIHMiLCJjZXJuIG9obCBzIGlzIiwib2hsIHMgaXMgY29weXJpZ2h0IiwicyBpcyBjb3B5cmlnaHQgY2VybiIsInRoaXMgY2VybiBvaGwgcyIsIm9obCBzIDEgMiIsInMgMSAyIGNvbXBhdGlibGUiLCJvaGwgcyBvciBjIiwicyBvciBjIGFueSIsImNlcm4gb2hsIHMgcHJvdmlkZWQiLCJvaGwgcyBwcm92aWRlZCB0aGF0IiwicyBwcm92aWRlZCB0aGF0IG9uIiwib2hsIHMgMSAzIiwicyAxIDMgc291cmNlIiwicHJvc3BlY3RpdmUgbGljZW5zZWVzIGkgYXMiLCJsaWNlbnNlZXMgaSBhcyBhIiwiaSBhcyBhIHBoeXNpY2FsIiwiYXMgYSBwaHlzaWNhbCBwYXJ0IiwiYSBwaHlzaWNhbCBwYXJ0IHdpdGgiLCJwaHlzaWNhbCBwYXJ0IHdpdGggc3VmZmljaWVudCIsInBhcnQgd2l0aCBzdWZmaWNpZW50IHJpZ2h0cyIsInByb2R1Y3QgMSA4IGNvbXBsZXRlIiwiMSA4IGNvbXBsZXRlIHNvdXJjZSIsIjggY29tcGxldGUgc291cmNlIG1lYW5zIiwidGhlIHByb2R1Y3QgMSA5IiwicHJvZHVjdCAxIDkgc291cmNlIiwiMSA5IHNvdXJjZSBsb2NhdGlvbiIsIjkgc291cmNlIGxvY2F0aW9uIG1lYW5zIiwiZGlnaXRhbCBjb3B5IDEgMTAiLCJjb3B5IDEgMTAgbm90aWNlIiwiMTAgbm90aWNlIG1lYW5zIGNvcHlyaWdodCIsImNvdmVyZWQgc291cmNlIDEgMTEiLCJzb3VyY2UgMSAxMSBsaWNlbnNlZSIsIjEgMTEgbGljZW5zZWUgb3IiLCIxMSBsaWNlbnNlZSBvciB5b3UiLCJ0aGlzIGxpY2VuY2UgMSAxMiIsImxpY2VuY2UgMSAxMiBsaWNlbnNvciIsIjEgMTIgbGljZW5zb3IgbWVhbnMiLCIxMiBsaWNlbnNvciBtZWFucyBhIiwic2FtZSB0aW1lIDEgMTMiLCJ0aW1lIDEgMTMgY29udmV5IiwiMSAxMyBjb252ZXkgbWVhbnMiLCIxMyBjb252ZXkgbWVhbnMgdG8iLCJ0byB5b3VyIG1vZGlmaWNhdGlvbnMgaW5jbHVkaW5nIiwieW91ciBtb2RpZmljYXRpb25zIGluY2x1ZGluZyBjb3ZlcmVkIiwibW9kaWZpY2F0aW9ucyBpbmNsdWRpbmcgY292ZXJlZCBzb3VyY2UiLCJpbmNsdWRpbmcgY292ZXJlZCBzb3VyY2UgaW4iLCJjb3ZlcmVkIHNvdXJjZSBpbiBhIiwic291cmNlIGluIGEgbGFyZ2VyIiwibGFyZ2VyIHdvcmsgaXMgbW9kaWZ5aW5nIiwid29yayBpcyBtb2RpZnlpbmcgdGhlIiwiaXMgbW9kaWZ5aW5nIHRoZSBjb3ZlcmVkIiwibW9kaWZ5aW5nIHRoZSBjb3ZlcmVkIHNvdXJjZSIsImNvdmVyZWQgc291cmNlIGFuZCB0aGUiLCJzb3VyY2UgYW5kIHRoZSBsYXJnZXIiLCJ0aGUgbGFyZ2VyIHdvcmsgYmVjb21lcyIsImxhcmdlciB3b3JrIGJlY29tZXMgbW9kaWZpZWQiLCJ3b3JrIGJlY29tZXMgbW9kaWZpZWQgY292ZXJlZCIsImJlY29tZXMgbW9kaWZpZWQgY292ZXJlZCBzb3VyY2UiLCJtb2RpZmllZCBjb3ZlcmVkIHNvdXJjZSAzIiwiY292ZXJlZCBzb3VyY2UgMyAzIiwic291cmNlIDMgMyB5b3UiLCJjb250YWluZWQgaW4gaXQgd2hpY2giLCJpbiBpdCB3aGljaCByZW1haW4iLCJpdCB3aGljaCByZW1haW4gbGljZW5zZWQiLCJ0aGF0IGNvbXBsZXRlIHNvdXJjZSBpcyIsImNvbXBsZXRlIHNvdXJjZSBpcyBjb3ZlcmVkIiwic291cmNlIGlzIGNvdmVyZWQgc291cmNlIiwiaXMgY292ZXJlZCBzb3VyY2UgYW5kIiwiaW4gdGhhdCBub3RpY2UgNSIsInRoYXQgbm90aWNlIDUgcmVzZWFyY2giLCJub3RpY2UgNSByZXNlYXJjaCBhbmQiLCJwdWJsaXNoZWQgYnkgY2VybiA4IiwiYnkgY2VybiA4IDQiLCJjZXJuIDggNCB0aGlzIiwiaGFyZHdhcmUgbGljZW5jZSB2ZXJzaW9uIDIgc3Ryb25nbHkiLCJsaWNlbmNlIHZlcnNpb24gMiBzdHJvbmdseSByZWNpcHJvY2FsIiwidmVyc2lvbiAyIHN0cm9uZ2x5IHJlY2lwcm9jYWwgcHJlYW1ibGUiLCIyIHN0cm9uZ2x5IHJlY2lwcm9jYWwgcHJlYW1ibGUgY2VybiIsInN0cm9uZ2x5IHJlY2lwcm9jYWwgcHJlYW1ibGUgY2VybiBoYXMiLCJ3IHdlYWtseSByZWNpcHJvY2FsIGFuZCB0aGlzIiwid2Vha2x5IHJlY2lwcm9jYWwgYW5kIHRoaXMgbGljZW5jZSIsInJlY2lwcm9jYWwgYW5kIHRoaXMgbGljZW5jZSBjZXJuIiwiYW5kIHRoaXMgbGljZW5jZSBjZXJuIG9obCIsInRoaXMgbGljZW5jZSBjZXJuIG9obCBzIiwibGljZW5jZSBjZXJuIG9obCBzIHN0cm9uZ2x5IiwicmVjaXByb2NhbCB0aGUgY2VybiBvaGwgcyIsInRoZSBjZXJuIG9obCBzIGlzIiwiY2VybiBvaGwgcyBpcyBjb3B5cmlnaHQiLCJvaGwgcyBpcyBjb3B5cmlnaHQgY2VybiIsInMgaXMgY29weXJpZ2h0IGNlcm4gMjAyMCIsIm1lYW5zIHRoaXMgY2VybiBvaGwgcyIsInRoaXMgY2VybiBvaGwgcyAxIiwiY2VybiBvaGwgcyAxIDIiLCJvaGwgcyAxIDIgY29tcGF0aWJsZSIsInMgMSAyIGNvbXBhdGlibGUgbGljZW5jZSIsImNlcm4gb2hsIHMgb3IgYyIsIm9obCBzIG9yIGMgYW55IiwicyBvciBjIGFueSBsaWNlbmNlIiwidW5kZXIgY2VybiBvaGwgcyBwcm92aWRlZCIsImNlcm4gb2hsIHMgcHJvdmlkZWQgdGhhdCIsIm9obCBzIHByb3ZpZGVkIHRoYXQgb24iLCJzIHByb3ZpZGVkIHRoYXQgb24gY29udmV5YW5jZSIsInVuZGVyIGNlcm4gb2hsIHMgMSIsImNlcm4gb2hsIHMgMSAzIiwib2hsIHMgMSAzIHNvdXJjZSIsInMgMSAzIHNvdXJjZSBtZWFucyIsIm90aGVyIHByb3NwZWN0aXZlIGxpY2Vuc2VlcyBpIGFzIiwicHJvc3BlY3RpdmUgbGljZW5zZWVzIGkgYXMgYSIsImxpY2Vuc2VlcyBpIGFzIGEgcGh5c2ljYWwiLCJpIGFzIGEgcGh5c2ljYWwgcGFydCIsImFzIGEgcGh5c2ljYWwgcGFydCB3aXRoIiwiYSBwaHlzaWNhbCBwYXJ0IHdpdGggc3VmZmljaWVudCIsInBoeXNpY2FsIHBhcnQgd2l0aCBzdWZmaWNpZW50IHJpZ2h0cyIsInBhcnQgd2l0aCBzdWZmaWNpZW50IHJpZ2h0cyBhbmQiLCJ0aGUgcHJvZHVjdCAxIDggY29tcGxldGUiLCJwcm9kdWN0IDEgOCBjb21wbGV0ZSBzb3VyY2UiLCIxIDggY29tcGxldGUgc291cmNlIG1lYW5zIiwiOCBjb21wbGV0ZSBzb3VyY2UgbWVhbnMgdGhlIiwibWFrZSB0aGUgcHJvZHVjdCAxIDkiLCJ0aGUgcHJvZHVjdCAxIDkgc291cmNlIiwicHJvZHVjdCAxIDkgc291cmNlIGxvY2F0aW9uIiwiMSA5IHNvdXJjZSBsb2NhdGlvbiBtZWFucyIsIjkgc291cmNlIGxvY2F0aW9uIG1lYW5zIGEiLCJhIGRpZ2l0YWwgY29weSAxIDEwIiwiZGlnaXRhbCBjb3B5IDEgMTAgbm90aWNlIiwiY29weSAxIDEwIG5vdGljZSBtZWFucyIsIjEgMTAgbm90aWNlIG1lYW5zIGNvcHlyaWdodCIsIjEwIG5vdGljZSBtZWFucyBjb3B5cmlnaHQgYWNrbm93bGVkZ2VtZW50IiwidGhlIGNvdmVyZWQgc291cmNlIDEgMTEiLCJjb3ZlcmVkIHNvdXJjZSAxIDExIGxpY2Vuc2VlIiwic291cmNlIDEgMTEgbGljZW5zZWUgb3IiLCIxIDExIGxpY2Vuc2VlIG9yIHlvdSIsIjExIGxpY2Vuc2VlIG9yIHlvdSBtZWFucyIsInVuZGVyIHRoaXMgbGljZW5jZSAxIDEyIiwidGhpcyBsaWNlbmNlIDEgMTIgbGljZW5zb3IiLCJsaWNlbmNlIDEgMTIgbGljZW5zb3IgbWVhbnMiLCIxIDEyIGxpY2Vuc29yIG1lYW5zIGEiLCIxMiBsaWNlbnNvciBtZWFucyBhIG5hdHVyYWwiLCJ0aGUgc2FtZSB0aW1lIDEgMTMiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ0VSTiBPcGVuIEhhcmR3YXJlIExpY2VuY2UgVmVyc2lvbiAyIC0gV2Vha2x5IFJlY2lwcm9jYWxcblxuUHJlYW1ibGVcblxuQ0VSTiBoYXMgZGV2ZWxvcGVkIHRoaXMgbGljZW5jZSB0byBwcm9tb3RlIGNvbGxhYm9yYXRpb24gYW1vbmcgaGFyZHdhcmUgZGVzaWduZXJzIGFuZCB0byBwcm92aWRlIGEgbGVnYWwgdG9vbCB3aGljaCBzdXBwb3J0cyB0aGUgZnJlZWRvbSB0byB1c2UsIHN0dWR5LCBtb2RpZnksIHNoYXJlIGFuZCBkaXN0cmlidXRlIGhhcmR3YXJlIGRlc2lnbnMgYW5kIHByb2R1Y3RzIGJhc2VkIG9uIHRob3NlIGRlc2lnbnMuIFZlcnNpb24gMiBvZiB0aGUgQ0VSTiBPcGVuIEhhcmR3YXJlIExpY2VuY2UgY29tZXMgaW4gdGhyZWUgdmFyaWFudHM6IENFUk4tT0hMLVAgKHBlcm1pc3NpdmUpOyBhbmQgdHdvIHJlY2lwcm9jYWwgbGljZW5jZXM6IHRoaXMgbGljZW5jZSwgQ0VSTi0gT0hMLVcgKHdlYWtseSByZWNpcHJvY2FsKSBhbmQgQ0VSTi1PSEwtUyAoc3Ryb25nbHkgcmVjaXByb2NhbCkuXG5cblRoZSBDRVJOLU9ITC1XIGlzIGNvcHlyaWdodCBDRVJOIDIwMjAuIEFueW9uZSBpcyB3ZWxjb21lIHRvIHVzZSBpdCwgaW4gdW5tb2RpZmllZCBmb3JtIG9ubHkuXG5cblVzZSBvZiB0aGlzIExpY2VuY2UgZG9lcyBub3QgaW1wbHkgYW55IGVuZG9yc2VtZW50IGJ5IENFUk4gb2YgYW55IExpY2Vuc29yIG9yIHRoZWlyIGRlc2lnbnMgbm9yIGRvZXMgaXQgaW1wbHkgYW55IGludm9sdmVtZW50IGJ5IENFUk4gaW4gdGhlaXIgZGV2ZWxvcG1lbnQuXG5cbiAgIDEgRGVmaW5pdGlvbnNcblxuICAgICAgMS4xICdMaWNlbmNlJyBtZWFucyB0aGlzIENFUk4tT0hMLVcuXG5cbiAgICAgIDEuMiAnQ29tcGF0aWJsZSBMaWNlbmNlJyBtZWFuc1xuXG4gICAgICAgICBhKSBhbnkgZWFybGllciB2ZXJzaW9uIG9mIHRoZSBDRVJOIE9wZW4gSGFyZHdhcmUgbGljZW5jZSwgb3JcblxuICAgICAgICAgYikgYW55IHZlcnNpb24gb2YgdGhlIENFUk4tT0hMLVMgb3IgdGhlIENFUk4tT0hMLVcsIG9yXG5cbiAgICAgICAgIGMpIGFueSBsaWNlbmNlIHdoaWNoIHBlcm1pdHMgWW91IHRvIHRyZWF0IHRoZSBTb3VyY2UgdG8gd2hpY2ggaXQgYXBwbGllcyBhcyBsaWNlbnNlZCB1bmRlciBDRVJOLU9ITC1TIG9yIENFUk4tT0hMLVcgcHJvdmlkZWQgdGhhdCBvbiBDb252ZXlhbmNlIG9mIGFueSBzdWNoIFNvdXJjZSwgb3IgYW55IGFzc29jaWF0ZWQgUHJvZHVjdCBZb3UgdHJlYXQgdGhlIFNvdXJjZSBpbiBxdWVzdGlvbiBhcyBiZWluZyBsaWNlbnNlZCB1bmRlciBDRVJOLU9ITC1TIG9yIENFUk4tT0hMLVcgYXMgYXBwcm9wcmlhdGUuXG5cbiAgICAgIDEuMyAnU291cmNlJyBtZWFucyBpbmZvcm1hdGlvbiBzdWNoIGFzIGRlc2lnbiBtYXRlcmlhbHMgb3IgZGlnaXRhbCBjb2RlIHdoaWNoIGNhbiBiZSBhcHBsaWVkIHRvIE1ha2Ugb3IgdGVzdCBhIFByb2R1Y3Qgb3IgdG8gcHJlcGFyZSBhIFByb2R1Y3QgZm9yIHVzZSwgQ29udmV5YW5jZSBvciBzYWxlLCByZWdhcmRsZXNzIG9mIGl0cyBtZWRpdW0gb3IgaG93IGl0IGlzIGV4cHJlc3NlZC4gSXQgbWF5IGluY2x1ZGUgTm90aWNlcy5cblxuICAgICAgMS40ICdDb3ZlcmVkIFNvdXJjZScgbWVhbnMgU291cmNlIHRoYXQgaXMgZXhwbGljaXRseSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2VuY2UuXG5cbiAgICAgIDEuNSAnUHJvZHVjdCcgbWVhbnMgYW55IGRldmljZSwgY29tcG9uZW50LCB3b3JrIG9yIHBoeXNpY2FsIG9iamVjdCwgd2hldGhlciBpbiBmaW5pc2hlZCBvciBpbnRlcm1lZGlhdGUgZm9ybSwgYXJpc2luZyBmcm9tIHRoZSB1c2UsIGFwcGxpY2F0aW9uIG9yIHByb2Nlc3Npbmcgb2YgQ292ZXJlZCBTb3VyY2UuXG5cbiAgICAgIDEuNiAnTWFrZScgbWVhbnMgdG8gY3JlYXRlIG9yIGNvbmZpZ3VyZSBzb21ldGhpbmcsIHdoZXRoZXIgYnkgbWFudWZhY3R1cmUsIGFzc2VtYmx5LCBjb21waWxpbmcsIGxvYWRpbmcgb3IgYXBwbHlpbmcgQ292ZXJlZCBTb3VyY2Ugb3IgYW5vdGhlciBQcm9kdWN0IG9yIG90aGVyd2lzZS5cblxuICAgICAgMS43ICdBdmFpbGFibGUgQ29tcG9uZW50JyBtZWFucyBhbnkgcGFydCwgc3ViLWFzc2VtYmx5LCBsaWJyYXJ5IG9yIGNvZGUgd2hpY2g6XG5cbiAgICAgICAgIGEpIGlzIGxpY2Vuc2VkIHRvIFlvdSBhcyBDb21wbGV0ZSBTb3VyY2UgdW5kZXIgYSBDb21wYXRpYmxlIExpY2VuY2U7IG9yXG5cbiAgICAgICAgIGIpIGlzIGF2YWlsYWJsZSwgYXQgdGhlIHRpbWUgYSBQcm9kdWN0IG9yIHRoZSBTb3VyY2UgY29udGFpbmluZyBpdCBpcyBmaXJzdCBDb252ZXllZCwgdG8gWW91IGFuZCBhbnkgb3RoZXIgcHJvc3BlY3RpdmUgbGljZW5zZWVzXG5cbiAgICAgICAgICAgIGkpIHdpdGggc3VmZmljaWVudCByaWdodHMgYW5kIGluZm9ybWF0aW9uIChpbmNsdWRpbmcgYW55IGNvbmZpZ3VyYXRpb24gYW5kIHByb2dyYW1taW5nIGZpbGVzIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBpdHMgY2hhcmFjdGVyaXN0aWNzIGFuZCBpbnRlcmZhY2VzKSB0byBlbmFibGUgaXQgZWl0aGVyIHRvIGJlIE1hZGUgaXRzZWxmLCBvciB0byBiZSBzb3VyY2VkIGFuZCB1c2VkIHRvIE1ha2UgdGhlIFByb2R1Y3Q7IG9yXG5cbiAgICAgICAgICAgIGlpKSBhcyBwYXJ0IG9mIHRoZSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIGEgdG9vbCB1c2VkIHRvIGRlc2lnbiBvciBNYWtlIHRoZSBQcm9kdWN0LlxuXG4gICAgICAxLjggJ0V4dGVybmFsIE1hdGVyaWFsJyBtZWFucyBhbnl0aGluZyAoaW5jbHVkaW5nIFNvdXJjZSkgd2hpY2g6XG5cbiAgICAgICAgIGEpIGlzIG9ubHkgY29tYmluZWQgd2l0aCBDb3ZlcmVkIFNvdXJjZSBpbiBzdWNoIGEgd2F5IHRoYXQgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBDb3ZlcmVkIFNvdXJjZSB1c2luZyBhIGRvY3VtZW50ZWQgaW50ZXJmYWNlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgQ292ZXJlZCBTb3VyY2U7IGFuZFxuXG4gICAgICAgICBiKSBpcyBub3QgYSBkZXJpdmF0aXZlIG9mIG9yIGNvbnRhaW5zIENvdmVyZWQgU291cmNlLCBvciwgaWYgaXQgaXMsIGl0IGlzIHNvbGVseSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBmYWNpbGl0YXRlIHN1Y2ggaW50ZXJmYWNpbmcuXG5cbiAgICAgIDEuOSAnQ29tcGxldGUgU291cmNlJyBtZWFucyB0aGUgc2V0IG9mIGFsbCBTb3VyY2UgbmVjZXNzYXJ5IHRvIE1ha2UgYSBQcm9kdWN0LCBpbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLCBpbmNsdWRpbmcgbmVjZXNzYXJ5IGluc3RhbGxhdGlvbiBhbmQgaW50ZXJmYWNpbmcgaW5mb3JtYXRpb24gYm90aCBmb3IgdGhlIFByb2R1Y3QsIGFuZCBmb3IgYW55IGluY2x1ZGVkIEF2YWlsYWJsZSBDb21wb25lbnRzLiBJZiB0aGUgZm9ybWF0IGlzIHByb3ByaWV0YXJ5LCBpdCBtdXN0IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgaW4gYSBmb3JtYXQgKGlmIHRoZSBwcm9wcmlldGFyeSB0b29sIGNhbiBjcmVhdGUgaXQpIHdoaWNoIGlzIHZpZXdhYmxlIHdpdGggYSB0b29sIGF2YWlsYWJsZSB0byBwb3RlbnRpYWwgbGljZW5zZWVzIGFuZCBsaWNlbnNlZCB1bmRlciBhIGxpY2VuY2UgYXBwcm92ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBvciB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZS4gQ29tcGxldGUgU291cmNlIG5lZWQgbm90IGluY2x1ZGUgdGhlIFNvdXJjZSBvZiBhbnkgQXZhaWxhYmxlIENvbXBvbmVudCwgcHJvdmlkZWQgdGhhdCBZb3UgaW5jbHVkZSBpbiB0aGUgQ29tcGxldGUgU291cmNlIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gdG8gZW5hYmxlIGEgcmVjaXBpZW50IHRvIE1ha2Ugb3Igc291cmNlIGFuZCB1c2UgdGhlIEF2YWlsYWJsZSBDb21wb25lbnQgdG8gTWFrZSB0aGUgUHJvZHVjdC5cblxuICAgICAgMS4xMCAnU291cmNlIExvY2F0aW9uJyBtZWFucyBhIGxvY2F0aW9uIHdoZXJlIGEgTGljZW5zb3IgaGFzIHBsYWNlZCBDb3ZlcmVkIFNvdXJjZSwgYW5kIHdoaWNoIHRoYXQgTGljZW5zb3IgcmVhc29uYWJseSBiZWxpZXZlcyB3aWxsIHJlbWFpbiBlYXNpbHkgYWNjZXNzaWJsZSBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgZm9yIGFueW9uZSB0byBvYnRhaW4gYSBkaWdpdGFsIGNvcHkuXG5cbiAgICAgIDEuMTEgJ05vdGljZScgbWVhbnMgY29weXJpZ2h0LCBhY2tub3dsZWRnZW1lbnQgYW5kIHRyYWRlbWFyayBub3RpY2VzLCBTb3VyY2UgTG9jYXRpb24gcmVmZXJlbmNlcywgbW9kaWZpY2F0aW9uIG5vdGljZXMgKHN1YnNlY3Rpb24gMy4zKGIpKSBhbmQgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2VuY2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIENvdmVyZWQgU291cmNlLlxuXG4gICAgICAxLjEyICdMaWNlbnNlZScgb3IgJ1lvdScgbWVhbnMgYW55IHBlcnNvbiBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2VuY2UuXG5cbiAgICAgIDEuMTMgJ0xpY2Vuc29yJyBtZWFucyBhIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBjcmVhdGVzIG9yIG1vZGlmaWVzIENvdmVyZWQgU291cmNlLiBBIHBlcnNvbiBtYXkgYmUgYSBMaWNlbnNlZSBhbmQgYSBMaWNlbnNvciBhdCB0aGUgc2FtZSB0aW1lLlxuXG4gICAgICAxLjE0ICdDb252ZXknIG1lYW5zIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgb3IgZGlzdHJpYnV0ZS5cblxuICAgMiBBcHBsaWNhYmlsaXR5XG5cbiAgICAgIDIuMSBUaGlzIExpY2VuY2UgZ292ZXJucyB0aGUgdXNlLCBjb3B5aW5nLCBtb2RpZmljYXRpb24sIENvbnZleWluZyBvZiBDb3ZlcmVkIFNvdXJjZSBhbmQgUHJvZHVjdHMsIGFuZCB0aGUgTWFraW5nIG9mIFByb2R1Y3RzLiBCeSBleGVyY2lzaW5nIGFueSByaWdodCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5jZSwgWW91IGlycmV2b2NhYmx5IGFjY2VwdCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgICAgMi4yIFRoaXMgTGljZW5jZSBpcyBncmFudGVkIGJ5IHRoZSBMaWNlbnNvciBkaXJlY3RseSB0byBZb3UsIGFuZCBzaGFsbCBhcHBseSB3b3JsZHdpZGUgYW5kIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aW1lLlxuXG4gICAgICAyLjMgWW91IHNoYWxsIG5vdCBhdHRlbXB0IHRvIHJlc3RyaWN0IGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbmNlIHRvIG90aGVyIExpY2Vuc2Vlcy5cblxuICAgICAgMi40IFRoaXMgTGljZW5jZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgZmFpciB1c2UsIGZhaXIgZGVhbGluZywgb3IgYW55IG90aGVyIHNpbWlsYXIgcmlnaHQuXG5cbiAgIDMgQ29weWluZywgbW9kaWZ5aW5nIGFuZCBDb252ZXlpbmcgQ292ZXJlZCBTb3VyY2VcblxuICAgICAgMy4xIFlvdSBtYXkgY29weSBhbmQgQ29udmV5IHZlcmJhdGltIGNvcGllcyBvZiBDb3ZlcmVkIFNvdXJjZSwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgWW91IHJldGFpbiBhbGwgTm90aWNlcy5cblxuICAgICAgMy4yIFlvdSBtYXkgbW9kaWZ5IENvdmVyZWQgU291cmNlLCBvdGhlciB0aGFuIE5vdGljZXMsIHByb3ZpZGVkIHRoYXQgWW91IGlycmV2b2NhYmx5IHVuZGVydGFrZSB0byBtYWtlIHRoYXQgbW9kaWZpZWQgQ292ZXJlZCBTb3VyY2UgYXZhaWxhYmxlIGZyb20gYSBTb3VyY2UgTG9jYXRpb24gc2hvdWxkIFlvdSBDb252ZXkgYSBQcm9kdWN0IGluIGNpcmN1bXN0YW5jZXMgd2hlcmUgdGhlIHJlY2lwaWVudCBkb2VzIG5vdCBvdGhlcndpc2UgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIG1vZGlmaWVkIENvdmVyZWQgU291cmNlLiBJbiBlYWNoIGNhc2Ugc3Vic2VjdGlvbiAzLjMgc2hhbGwgYXBwbHkuXG5cbiAgICAgIFlvdSBtYXkgb25seSBkZWxldGUgTm90aWNlcyBpZiB0aGV5IGFyZSBubyBsb25nZXIgYXBwbGljYWJsZSB0byB0aGUgY29ycmVzcG9uZGluZyBDb3ZlcmVkIFNvdXJjZSBhcyBtb2RpZmllZCBieSBZb3UgYW5kIFlvdSBtYXkgYWRkIGFkZGl0aW9uYWwgTm90aWNlcyBhcHBsaWNhYmxlIHRvIFlvdXIgbW9kaWZpY2F0aW9ucy5cblxuICAgICAgMy4zIFlvdSBtYXkgQ29udmV5IG1vZGlmaWVkIENvdmVyZWQgU291cmNlICh3aXRoIHRoZSBlZmZlY3QgdGhhdCBZb3Ugc2hhbGwgYWxzbyBiZWNvbWUgYSBMaWNlbnNvcikgcHJvdmlkZWQgdGhhdCBZb3U6XG5cbiAgICAgICAgIGEpIHJldGFpbiBOb3RpY2VzIGFzIHJlcXVpcmVkIGluIHN1YnNlY3Rpb24gMy4yO1xuXG4gICAgICAgICBiKSBhZGQgYSBOb3RpY2UgdG8gdGhlIG1vZGlmaWVkIENvdmVyZWQgU291cmNlIHN0YXRpbmcgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCBpdCwgd2l0aCB0aGUgZGF0ZSBhbmQgYnJpZWYgZGVzY3JpcHRpb24gb2YgaG93IFlvdSBoYXZlIG1vZGlmaWVkIGl0O1xuXG4gICAgICAgICBjKSBhZGQgYSBTb3VyY2UgTG9jYXRpb24gTm90aWNlIGZvciB0aGUgbW9kaWZpZWQgQ292ZXJlZCBTb3VyY2UgaWYgWW91IENvbnZleSBpbiBjaXJjdW1zdGFuY2VzIHdoZXJlIHRoZSByZWNpcGllbnQgZG9lcyBub3Qgb3RoZXJ3aXNlIHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBtb2RpZmllZCBDb3ZlcmVkIFNvdXJjZTsgYW5kXG5cbiAgICAgICAgIGQpIGxpY2Vuc2UgdGhlIG1vZGlmaWVkIENvdmVyZWQgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2VuY2UgKG9yLCBhcyBzZXQgb3V0IGluIHN1YnNlY3Rpb24gOC4zLCBhIGxhdGVyIHZlcnNpb24sIGlmIHBlcm1pdHRlZCBieSB0aGUgbGljZW5jZSBvZiB0aGUgb3JpZ2luYWwgQ292ZXJlZCBTb3VyY2UpLiBTdWNoIG1vZGlmaWVkIENvdmVyZWQgU291cmNlIG11c3QgYmUgbGljZW5zZWQgYXMgYSB3aG9sZSwgYnV0IGV4Y2x1ZGluZyBBdmFpbGFibGUgQ29tcG9uZW50cyBjb250YWluZWQgaW4gaXQgb3IgRXh0ZXJuYWwgTWF0ZXJpYWwgdG8gd2hpY2ggaXQgaXMgaW50ZXJmYWNlZCwgd2hpY2ggcmVtYWluIGxpY2Vuc2VkIHVuZGVyIHRoZWlyIG93biBhcHBsaWNhYmxlIGxpY2VuY2VzLlxuXG4gICA0IE1ha2luZyBhbmQgQ29udmV5aW5nIFByb2R1Y3RzXG5cbiAgICAgIDQuMSBZb3UgbWF5IE1ha2UgUHJvZHVjdHMsIGFuZC9vciBDb252ZXkgdGhlbSwgcHJvdmlkZWQgdGhhdCBZb3UgZWl0aGVyIHByb3ZpZGUgZWFjaCByZWNpcGllbnQgd2l0aCBhIGNvcHkgb2YgdGhlIENvbXBsZXRlIFNvdXJjZSBvciBlbnN1cmUgdGhhdCBlYWNoIHJlY2lwaWVudCBpcyBub3RpZmllZCBvZiB0aGUgU291cmNlIExvY2F0aW9uIG9mIHRoZSBDb21wbGV0ZSBTb3VyY2UuIFRoYXQgQ29tcGxldGUgU291cmNlIGluY2x1ZGVzIENvdmVyZWQgU291cmNlIGFuZCBZb3UgbXVzdCBhY2NvcmRpbmdseSBzYXRpc2Z5IFlvdXIgb2JsaWdhdGlvbnMgc2V0IG91dCBpbiBzdWJzZWN0aW9uIDMuMy4gSWYgc3BlY2lmaWVkIGluIGEgTm90aWNlLCB0aGUgUHJvZHVjdCBtdXN0IHZpc2libHkgYW5kIHNlY3VyZWx5IGRpc3BsYXkgdGhlIFNvdXJjZSBMb2NhdGlvbiBvbiBpdCBvciBpdHMgcGFja2FnaW5nIG9yIGRvY3VtZW50YXRpb24gaW4gdGhlIG1hbm5lciBzcGVjaWZpZWQgaW4gdGhhdCBOb3RpY2UuXG5cbiAgICAgIDQuMiBXaGVyZSBZb3UgQ29udmV5IGEgUHJvZHVjdCB3aGljaCBpbmNvcnBvcmF0ZXMgRXh0ZXJuYWwgTWF0ZXJpYWwsIHRoZSBDb21wbGV0ZSBTb3VyY2UgZm9yIHRoYXQgUHJvZHVjdCB3aGljaCBZb3UgYXJlIHJlcXVpcmVkIHRvIHByb3ZpZGUgdW5kZXIgc3Vic2VjdGlvbiA0LjEgbmVlZCBub3QgaW5jbHVkZSBhbnkgU291cmNlIGZvciB0aGUgRXh0ZXJuYWwgTWF0ZXJpYWwuXG5cbiAgICAgIDQuMyBZb3UgbWF5IGxpY2Vuc2UgUHJvZHVjdHMgdW5kZXIgdGVybXMgb2YgWW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgc3VjaCB0ZXJtcyBkbyBub3QgcmVzdHJpY3Qgb3IgYXR0ZW1wdCB0byByZXN0cmljdCBhbnkgcmVjaXBpZW50cycgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5jZSB0byB0aGUgQ292ZXJlZCBTb3VyY2UuXG5cbiAgIDUgUmVzZWFyY2ggYW5kIERldmVsb3BtZW50XG5cbiAgIFlvdSBtYXkgQ29udmV5IENvdmVyZWQgU291cmNlLCBtb2RpZmllZCBDb3ZlcmVkIFNvdXJjZSBvciBQcm9kdWN0cyB0byBhIGxlZ2FsIGVudGl0eSBjYXJyeWluZyBvdXQgZGV2ZWxvcG1lbnQsIHRlc3Rpbmcgb3IgcXVhbGl0eSBhc3N1cmFuY2Ugd29yayBvbiBZb3VyIGJlaGFsZiBwcm92aWRlZCB0aGF0IHRoZSB3b3JrIGlzIHBlcmZvcm1lZCBvbiB0ZXJtcyB3aGljaCBwcmV2ZW50IHRoZSBlbnRpdHkgZnJvbSBib3RoIHVzaW5nIHRoZSBTb3VyY2Ugb3IgUHJvZHVjdHMgZm9yIGl0cyBvd24gaW50ZXJuYWwgcHVycG9zZXMgYW5kIENvbnZleWluZyB0aGUgU291cmNlIG9yIFByb2R1Y3RzIG9yIGFueSBtb2RpZmljYXRpb25zIHRvIHRoZW0gdG8gYW55IHBlcnNvbiBvdGhlciB0aGFuIFlvdS4gQW55IG1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGUgZW50aXR5IHNoYWxsIGJlIGRlZW1lZCB0byBiZSBtYWRlIGJ5IFlvdSBwdXJzdWFudCB0byBzdWJzZWN0aW9uIDMuMi5cblxuICAgNiBESVNDTEFJTUVSIEFORCBMSUFCSUxJVFlcblxuICAgICAgNi4xIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgLS0gVGhlIENvdmVyZWQgU291cmNlIGFuZCBhbnkgUHJvZHVjdHMgYXJlIHByb3ZpZGVkICdhcyBpcycgYW5kIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudGllcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIG9mIHNhdGlzZmFjdG9yeSBxdWFsaXR5LCBub24taW5mcmluZ2VtZW50IG9mIHRoaXJkIHBhcnR5IHJpZ2h0cywgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIG9yIHVzZSBhcmUgZGlzY2xhaW1lZCBpbiByZXNwZWN0IG9mIGFueSBTb3VyY2Ugb3IgUHJvZHVjdCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4gVGhlIExpY2Vuc29yIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9uIHRoYXQgYW55IFNvdXJjZSBvciBQcm9kdWN0IGRvZXMgbm90IG9yIHdpbGwgbm90IGluZnJpbmdlIGFueSBwYXRlbnQsIGNvcHlyaWdodCwgdHJhZGUgc2VjcmV0IG9yIG90aGVyIHByb3ByaWV0YXJ5IHJpZ2h0LiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHVzZSwgcXVhbGl0eSwgYW5kIHBlcmZvcm1hbmNlIG9mIGFueSBTb3VyY2Ugb3IgUHJvZHVjdCBzaGFsbCBiZSB3aXRoIFlvdSBhbmQgbm90IHRoZSBMaWNlbnNvci4gVGhpcyBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGlzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5jZSBhbmQgYSBjb25kaXRpb24gZm9yIHRoZSBncmFudCBvZiBhbnkgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbmNlLlxuXG4gICAgICA2LjIgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSAtLSBUaGUgTGljZW5zb3Igc2hhbGwsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LCBoYXZlIG5vIGxpYWJpbGl0eSBmb3IgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgY29uc2VxdWVudGlhbCwgZXhlbXBsYXJ5LCBwdW5pdGl2ZSBvciBvdGhlciBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHByb2N1cmVtZW50IG9mIHN1YnN0aXR1dGUgZ29vZHMgb3Igc2VydmljZXMsIGxvc3Mgb2YgdXNlLCBkYXRhIG9yIHByb2ZpdHMsIG9yIGJ1c2luZXNzIGludGVycnVwdGlvbiwgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgY29udHJhY3QsIHdhcnJhbnR5LCB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIHByb2R1Y3QgbGlhYmlsaXR5IG9yIG90aGVyd2lzZSwgYXJpc2luZyBpbiBhbnkgd2F5IGluIHJlbGF0aW9uIHRvIHRoZSBDb3ZlcmVkIFNvdXJjZSwgbW9kaWZpZWQgQ292ZXJlZCBTb3VyY2UgYW5kL29yIHRoZSBNYWtpbmcgb3IgQ29udmV5YW5jZSBvZiBhIFByb2R1Y3QsIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLCBhbmQgWW91IHNoYWxsIGhvbGQgdGhlIExpY2Vuc29yKHMpIGZyZWUgYW5kIGhhcm1sZXNzIGZyb20gYW55IGxpYWJpbGl0eSwgY29zdHMsIGRhbWFnZXMsIGZlZXMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcgY2xhaW1zIGJ5IHRoaXJkIHBhcnRpZXMsIGluIHJlbGF0aW9uIHRvIHN1Y2ggdXNlLlxuXG4gICA3IFBhdGVudHNcblxuICAgICAgNy4xIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5jZSwgZWFjaCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gc3Vic2VjdGlvbnMgNy4yIGFuZCA4LjQpIHBhdGVudCBsaWNlbnNlIHRvIE1ha2UsIGhhdmUgTWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvdmVyZWQgU291cmNlIGFuZCBQcm9kdWN0cywgd2hlcmUgc3VjaCBsaWNlbmNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBMaWNlbnNvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhlIENvdmVyZWQgU291cmNlIGFzIENvbnZleWVkIGJ5IHRoYXQgTGljZW5zb3IuXG5cbiAgICAgIDcuMiBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgQ292ZXJlZCBTb3VyY2Ugb3IgYSBQcm9kdWN0IGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgb3IgWW91IHNlZWsgYW55IGRlY2xhcmF0aW9uIHRoYXQgYSBwYXRlbnQgbGljZW5zZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5jZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5jZSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBwcm9jZXNzIGlzIGluaXRpYXRlZC5cblxuICAgOCBHZW5lcmFsXG5cbiAgICAgIDguMSBJZiBhbnkgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2VuY2UgYXJlIG9yIHN1YnNlcXVlbnRseSBiZWNvbWUgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIGZvciBhbnkgcmVhc29uLCB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgc2hhbGwgcmVtYWluIGVmZmVjdGl2ZS5cblxuICAgICAgOC4yIFlvdSBzaGFsbCBub3QgdXNlIGFueSBvZiB0aGUgbmFtZSAoaW5jbHVkaW5nIGFjcm9ueW1zIGFuZCBhYmJyZXZpYXRpb25zKSwgaW1hZ2UsIG9yIGxvZ28gYnkgd2hpY2ggdGhlIExpY2Vuc29yIG9yIENFUk4gaXMga25vd24sIGV4Y2VwdCB3aGVyZSBuZWVkZWQgdG8gY29tcGx5IHdpdGggc2VjdGlvbiAzLCBvciB3aGVyZSB0aGUgdXNlIGlzIG90aGVyd2lzZSBhbGxvd2VkIGJ5IGxhdy4gQW55IHN1Y2ggcGVybWl0dGVkIHVzZSBzaGFsbCBiZSBmYWN0dWFsIGFuZCBzaGFsbCBub3QgYmUgbWFkZSBzbyBhcyB0byBzdWdnZXN0IGFueSBraW5kIG9mIGVuZG9yc2VtZW50IG9yIGltcGxpY2F0aW9uIG9mIGludm9sdmVtZW50IGJ5IHRoZSBMaWNlbnNvciBvciBpdHMgcGVyc29ubmVsLlxuXG4gICAgICA4LjMgQ0VSTiBtYXkgcHVibGlzaCB1cGRhdGVkIHZlcnNpb25zIGFuZCB2YXJpYW50cyBvZiB0aGlzIExpY2VuY2Ugd2hpY2ggaXQgY29uc2lkZXJzIHRvIGJlIGluIHRoZSBzcGlyaXQgb2YgdGhpcyB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuIE5ldyB2ZXJzaW9ucyB3aWxsIGJlIHB1Ymxpc2hlZCB3aXRoIGEgdW5pcXVlIHZlcnNpb24gbnVtYmVyIGFuZCBhIHZhcmlhbnQgaWRlbnRpZmllciBzcGVjaWZ5aW5nIHRoZSB2YXJpYW50LiBJZiB0aGUgTGljZW5zb3IgaGFzIHNwZWNpZmllZCB0aGF0IGEgZ2l2ZW4gdmFyaWFudCBhcHBsaWVzIHRvIHRoZSBDb3ZlcmVkIFNvdXJjZSB3aXRob3V0IHNwZWNpZnlpbmcgYSB2ZXJzaW9uLCBZb3UgbWF5IHRyZWF0IHRoYXQgQ292ZXJlZCBTb3VyY2UgYXMgYmVpbmcgcmVsZWFzZWQgdW5kZXIgYW55IHZlcnNpb24gb2YgdGhlIENFUk4tT0hMIHdpdGggdGhhdCB2YXJpYW50LiBJZiBubyB2YXJpYW50IGlzIHNwZWNpZmllZCwgdGhlIENvdmVyZWQgU291cmNlIHNoYWxsIGJlIHRyZWF0ZWQgYXMgYmVpbmcgcmVsZWFzZWQgdW5kZXIgQ0VSTi1PSEwtUy4gVGhlIExpY2Vuc29yIG1heSBhbHNvIHNwZWNpZnkgdGhhdCB0aGUgQ292ZXJlZCBTb3VyY2UgaXMgc3ViamVjdCB0byBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIENFUk4tT0hMIG9yIGFueSBsYXRlciB2ZXJzaW9uIGluIHdoaWNoIGNhc2UgWW91IG1heSBhcHBseSB0aGlzIG9yIGFueSBsYXRlciB2ZXJzaW9uIG9mIENFUk4tT0hMIHdpdGggdGhlIHNhbWUgdmFyaWFudCBpZGVudGlmaWVyIHB1Ymxpc2hlZCBieSBDRVJOLlxuXG4gICAgICBZb3UgbWF5IHRyZWF0IENvdmVyZWQgU291cmNlIGxpY2Vuc2VkIHVuZGVyIENFUk4tT0hMLVcgYXMgbGljZW5zZWQgdW5kZXIgQ0VSTi1PSEwtUyBpZiBhbmQgb25seSBpZiBhbGwgQXZhaWxhYmxlIENvbXBvbmVudHMgcmVmZXJlbmNlZCBpbiB0aGUgQ292ZXJlZCBTb3VyY2UgY29tcGx5IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbiBvZiBBdmFpbGFibGUgQ29tcG9uZW50IGZvciBDRVJOLU9ITC1TLlxuXG4gICAgICA4LjQgVGhpcyBMaWNlbmNlIHNoYWxsIHRlcm1pbmF0ZSB3aXRoIGltbWVkaWF0ZSBlZmZlY3QgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgICAgOC41IEhvd2V2ZXIsIGlmIFlvdSBjZWFzZSBhbGwgYnJlYWNoZXMgb2YgdGhpcyBMaWNlbmNlLCB0aGVuIFlvdXIgTGljZW5jZSBmcm9tIGFueSBMaWNlbnNvciBpcyByZWluc3RhdGVkIHVubGVzcyBzdWNoIExpY2Vuc29yIGhhcyB0ZXJtaW5hdGVkIHRoaXMgTGljZW5jZSBieSBnaXZpbmcgWW91LCB3aGlsZSBZb3UgcmVtYWluIGluIGJyZWFjaCwgYSBub3RpY2Ugc3BlY2lmeWluZyB0aGUgYnJlYWNoIGFuZCByZXF1aXJpbmcgWW91IHRvIGN1cmUgaXQgd2l0aGluIDMwIGRheXMsIGFuZCBZb3UgaGF2ZSBmYWlsZWQgdG8gY29tZSBpbnRvIGNvbXBsaWFuY2UgaW4gYWxsIG1hdGVyaWFsIHJlc3BlY3RzIGJ5IHRoZSBlbmQgb2YgdGhlIDMwIGRheSBwZXJpb2QuIFNob3VsZCBZb3UgcmVwZWF0IHRoZSBicmVhY2ggYWZ0ZXIgcmVjZWlwdCBvZiBhIGN1cmUgbm90aWNlIGFuZCBzdWJzZXF1ZW50IHJlaW5zdGF0ZW1lbnQsIHRoaXMgTGljZW5jZSB3aWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgcGVybWFuZW50bHkuIFNlY3Rpb24gNiBzaGFsbCBjb250aW51ZSB0byBhcHBseSBhZnRlciBhbnkgdGVybWluYXRpb24uXG5cbiAgICAgIDguNiBUaGlzIExpY2VuY2Ugc2hhbGwgbm90IGJlIGVuZm9yY2VhYmxlIGV4Y2VwdCBieSBhIExpY2Vuc29yIGFjdGluZyBhcyBzdWNoLCBhbmQgdGhpcmQgcGFydHkgYmVuZWZpY2lhcnkgcmlnaHRzIGFyZSBzcGVjaWZpY2FsbHkgZXhjbHVkZWQuIl0sImxpY2Vuc2VJZHMiOlsiQ0VSTi1PSEwtVy0yLjAiXSwia2V5d29yZHMiOlsidmVyc2lvbiAyIHdlYWtseSIsIjIgd2Vha2x5IHJlY2lwcm9jYWwiLCJ3ZWFrbHkgcmVjaXByb2NhbCBwcmVhbWJsZSIsInJlY2lwcm9jYWwgbGljZW5jZXMgdGhpcyIsImxpY2VuY2VzIHRoaXMgbGljZW5jZSIsIm9obCB3IGlzIiwidyBpcyBjb3B5cmlnaHQiLCJvaGwgdyAxIiwidyAxIDIiLCJvciB0aGUgY2VybiIsIm9obCB3IG9yIiwidyBvciBjIiwib2hsIHcgcHJvdmlkZWQiLCJ3IHByb3ZpZGVkIHRoYXQiLCJ3IGFzIGFwcHJvcHJpYXRlIiwiYXMgYXBwcm9wcmlhdGUgMSIsImFwcHJvcHJpYXRlIDEgMyIsImxpY2Vuc2VlcyBpIHdpdGgiLCJpIHdpdGggc3VmZmljaWVudCIsIjEgOCBleHRlcm5hbCIsIjggZXh0ZXJuYWwgbWF0ZXJpYWwiLCJleHRlcm5hbCBtYXRlcmlhbCBtZWFucyIsIm1hdGVyaWFsIG1lYW5zIGFueXRoaW5nIiwibWVhbnMgYW55dGhpbmcgaW5jbHVkaW5nIiwiYW55dGhpbmcgaW5jbHVkaW5nIHNvdXJjZSIsImluY2x1ZGluZyBzb3VyY2Ugd2hpY2giLCJzb3VyY2Ugd2hpY2ggYSIsImEgaXMgb25seSIsImlzIG9ubHkgY29tYmluZWQiLCJvbmx5IGNvbWJpbmVkIHdpdGgiLCJjb21iaW5lZCB3aXRoIGNvdmVyZWQiLCJ3aXRoIGNvdmVyZWQgc291cmNlIiwic291cmNlIGluIHN1Y2giLCJ3YXkgdGhhdCBpdCIsInRoYXQgaXQgaW50ZXJmYWNlcyIsIml0IGludGVyZmFjZXMgd2l0aCIsImludGVyZmFjZXMgd2l0aCB0aGUiLCJjb3ZlcmVkIHNvdXJjZSB1c2luZyIsInNvdXJjZSB1c2luZyBhIiwidXNpbmcgYSBkb2N1bWVudGVkIiwiYSBkb2N1bWVudGVkIGludGVyZmFjZSIsImRvY3VtZW50ZWQgaW50ZXJmYWNlIHdoaWNoIiwiaW50ZXJmYWNlIHdoaWNoIGlzIiwic291cmNlIGFuZCBiIiwiYW5kIGIgaXMiLCJiIGlzIG5vdCIsImRlcml2YXRpdmUgb2Ygb3IiLCJvZiBvciBjb250YWlucyIsIm9yIGNvbnRhaW5zIGNvdmVyZWQiLCJjb250YWlucyBjb3ZlcmVkIHNvdXJjZSIsIml0IGlzIGl0IiwiaXMgaXQgaXMiLCJpcyBzb2xlbHkgdG8iLCJuZWNlc3NhcnkgdG8gZmFjaWxpdGF0ZSIsInRvIGZhY2lsaXRhdGUgc3VjaCIsImZhY2lsaXRhdGUgc3VjaCBpbnRlcmZhY2luZyIsInN1Y2ggaW50ZXJmYWNpbmcgMSIsImludGVyZmFjaW5nIDEgOSIsIjEgOSBjb21wbGV0ZSIsIjkgY29tcGxldGUgc291cmNlIiwicHJvZHVjdCAxIDEwIiwiMSAxMCBzb3VyY2UiLCIxMCBzb3VyY2UgbG9jYXRpb24iLCJjb3B5IDEgMTEiLCIxIDExIG5vdGljZSIsIjExIG5vdGljZSBtZWFucyIsInNvdXJjZSAxIDEyIiwiMSAxMiBsaWNlbnNlZSIsIjEyIGxpY2Vuc2VlIG9yIiwibGljZW5jZSAxIDEzIiwiMSAxMyBsaWNlbnNvciIsIjEzIGxpY2Vuc29yIG1lYW5zIiwidGltZSAxIDE0IiwiMSAxNCBjb252ZXkiLCIxNCBjb252ZXkgbWVhbnMiLCJpbiBpdCBvciIsIml0IG9yIGV4dGVybmFsIiwib3IgZXh0ZXJuYWwgbWF0ZXJpYWwiLCJleHRlcm5hbCBtYXRlcmlhbCB0byIsIml0IGlzIGludGVyZmFjZWQiLCJpcyBpbnRlcmZhY2VkIHdoaWNoIiwiaW50ZXJmYWNlZCB3aGljaCByZW1haW4iLCJjb252ZXlpbmcgcHJvZHVjdHMgNCIsImNvbXBsZXRlIHNvdXJjZSBpbmNsdWRlcyIsInNvdXJjZSBpbmNsdWRlcyBjb3ZlcmVkIiwiaW5jbHVkZXMgY292ZXJlZCBzb3VyY2UiLCJ0aGF0IG5vdGljZSA0Iiwibm90aWNlIDQgMiIsIjQgMiB3aGVyZSIsIjIgd2hlcmUgeW91Iiwid2hlcmUgeW91IGNvbnZleSIsImEgcHJvZHVjdCB3aGljaCIsInByb2R1Y3Qgd2hpY2ggaW5jb3Jwb3JhdGVzIiwid2hpY2ggaW5jb3Jwb3JhdGVzIGV4dGVybmFsIiwiaW5jb3Jwb3JhdGVzIGV4dGVybmFsIG1hdGVyaWFsIiwiZXh0ZXJuYWwgbWF0ZXJpYWwgdGhlIiwibWF0ZXJpYWwgdGhlIGNvbXBsZXRlIiwiY29tcGxldGUgc291cmNlIGZvciIsInNvdXJjZSBmb3IgdGhhdCIsInRoYXQgcHJvZHVjdCB3aGljaCIsInRvIHByb3ZpZGUgdW5kZXIiLCJwcm92aWRlIHVuZGVyIHN1YnNlY3Rpb24iLCJ1bmRlciBzdWJzZWN0aW9uIDQiLCJzdWJzZWN0aW9uIDQgMSIsIjQgMSBuZWVkIiwiMSBuZWVkIG5vdCIsImluY2x1ZGUgYW55IHNvdXJjZSIsImFueSBzb3VyY2UgZm9yIiwiZm9yIHRoZSBleHRlcm5hbCIsInRoZSBleHRlcm5hbCBtYXRlcmlhbCIsImV4dGVybmFsIG1hdGVyaWFsIDQiLCJtYXRlcmlhbCA0IDMiLCI0IDMgeW91IiwibWF5IGxpY2Vuc2UgcHJvZHVjdHMiLCJsaWNlbnNlIHByb2R1Y3RzIHVuZGVyIiwicHJvZHVjdHMgdW5kZXIgdGVybXMiLCJ0aGF0IHN1Y2ggdGVybXMiLCJzdWNoIHRlcm1zIGRvIiwicmVzdHJpY3Qgb3IgYXR0ZW1wdCIsIm9yIGF0dGVtcHQgdG8iLCJ0byByZXN0cmljdCBhbnkiLCJyZXN0cmljdCBhbnkgcmVjaXBpZW50cyIsImFueSByZWNpcGllbnRzIHJpZ2h0cyIsImNvdmVyZWQgc291cmNlIDUiLCJzb3VyY2UgNSByZXNlYXJjaCIsImJ5IGNlcm4geW91IiwiY2VybiB5b3UgbWF5IiwibWF5IHRyZWF0IGNvdmVyZWQiLCJ0cmVhdCBjb3ZlcmVkIHNvdXJjZSIsImNvdmVyZWQgc291cmNlIGxpY2Vuc2VkIiwic291cmNlIGxpY2Vuc2VkIHVuZGVyIiwidyBhcyBsaWNlbnNlZCIsIm9obCBzIGlmIiwicyBpZiBhbmQiLCJvbmx5IGlmIGFsbCIsImlmIGFsbCBhdmFpbGFibGUiLCJhbGwgYXZhaWxhYmxlIGNvbXBvbmVudHMiLCJhdmFpbGFibGUgY29tcG9uZW50cyByZWZlcmVuY2VkIiwiY29tcG9uZW50cyByZWZlcmVuY2VkIGluIiwicmVmZXJlbmNlZCBpbiB0aGUiLCJjb3ZlcmVkIHNvdXJjZSBjb21wbHkiLCJzb3VyY2UgY29tcGx5IHdpdGgiLCJ3aXRoIHRoZSBjb3JyZXNwb25kaW5nIiwidGhlIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbiIsImNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbiBvZiIsImRlZmluaXRpb24gb2YgYXZhaWxhYmxlIiwib2YgYXZhaWxhYmxlIGNvbXBvbmVudCIsImF2YWlsYWJsZSBjb21wb25lbnQgZm9yIiwiY29tcG9uZW50IGZvciBjZXJuIiwiZm9yIGNlcm4gb2hsIiwib2hsIHMgOCIsInMgOCA0IiwibGljZW5jZSB2ZXJzaW9uIDIgd2Vha2x5IiwidmVyc2lvbiAyIHdlYWtseSByZWNpcHJvY2FsIiwiMiB3ZWFrbHkgcmVjaXByb2NhbCBwcmVhbWJsZSIsIndlYWtseSByZWNpcHJvY2FsIHByZWFtYmxlIGNlcm4iLCJ0d28gcmVjaXByb2NhbCBsaWNlbmNlcyB0aGlzIiwicmVjaXByb2NhbCBsaWNlbmNlcyB0aGlzIGxpY2VuY2UiLCJsaWNlbmNlcyB0aGlzIGxpY2VuY2UgY2VybiIsImxpY2VuY2UgY2VybiBvaGwgdyIsImNlcm4gb2hsIHcgaXMiLCJvaGwgdyBpcyBjb3B5cmlnaHQiLCJ3IGlzIGNvcHlyaWdodCBjZXJuIiwidGhpcyBjZXJuIG9obCB3IiwiY2VybiBvaGwgdyAxIiwib2hsIHcgMSAyIiwidyAxIDIgY29tcGF0aWJsZSIsIm9obCBzIG9yIHRoZSIsInMgb3IgdGhlIGNlcm4iLCJvciB0aGUgY2VybiBvaGwiLCJjZXJuIG9obCB3IG9yIiwib2hsIHcgb3IgYyIsIncgb3IgYyBhbnkiLCJjZXJuIG9obCB3IHByb3ZpZGVkIiwib2hsIHcgcHJvdmlkZWQgdGhhdCIsIncgcHJvdmlkZWQgdGhhdCBvbiIsIm9obCB3IGFzIGFwcHJvcHJpYXRlIiwidyBhcyBhcHByb3ByaWF0ZSAxIiwiYXMgYXBwcm9wcmlhdGUgMSAzIiwiYXBwcm9wcmlhdGUgMSAzIHNvdXJjZSIsInByb3NwZWN0aXZlIGxpY2Vuc2VlcyBpIHdpdGgiLCJsaWNlbnNlZXMgaSB3aXRoIHN1ZmZpY2llbnQiLCJpIHdpdGggc3VmZmljaWVudCByaWdodHMiLCJwcm9kdWN0IDEgOCBleHRlcm5hbCIsIjEgOCBleHRlcm5hbCBtYXRlcmlhbCIsIjggZXh0ZXJuYWwgbWF0ZXJpYWwgbWVhbnMiLCJleHRlcm5hbCBtYXRlcmlhbCBtZWFucyBhbnl0aGluZyIsIm1hdGVyaWFsIG1lYW5zIGFueXRoaW5nIGluY2x1ZGluZyIsIm1lYW5zIGFueXRoaW5nIGluY2x1ZGluZyBzb3VyY2UiLCJhbnl0aGluZyBpbmNsdWRpbmcgc291cmNlIHdoaWNoIiwiaW5jbHVkaW5nIHNvdXJjZSB3aGljaCBhIiwic291cmNlIHdoaWNoIGEgaXMiLCJ3aGljaCBhIGlzIG9ubHkiLCJhIGlzIG9ubHkgY29tYmluZWQiLCJpcyBvbmx5IGNvbWJpbmVkIHdpdGgiLCJvbmx5IGNvbWJpbmVkIHdpdGggY292ZXJlZCIsImNvbWJpbmVkIHdpdGggY292ZXJlZCBzb3VyY2UiLCJ3aXRoIGNvdmVyZWQgc291cmNlIGluIiwiY292ZXJlZCBzb3VyY2UgaW4gc3VjaCIsInNvdXJjZSBpbiBzdWNoIGEiXX0seyJsaWNlbnNlVGV4dHMiOlsiXG5cbiAgIDEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiB0aGUgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzLCBoYXZpbmcgYW4gb2ZmaWNlIGF0IDE4OTUgUHJlc3RvbiBXaGl0ZSBEcml2ZSwgUmVzdG9uLCBWQSAyMDE5MSAoXCJDTlJJXCIpLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uIChcIkxpY2Vuc2VlXCIpIGFjY2Vzc2luZyBhbmQgdXNpbmcgSlB5dGhvbiB2ZXJzaW9uIDEuMS54IGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhcyBwcm92aWRlZCBoZXJlaW4gKFwiU29mdHdhcmVcIikuXG5cbiAgIFxuXG4gICAyLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBDTlJJIGhlcmVieSBncmFudHMgTGljZW5zZWUgYSBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgdGhlIFNvZnR3YXJlIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IENOUkkncyBMaWNlbnNlIEFncmVlbWVudCBhbmQgQ05SSSdzIG5vdGljZSBvZiBjb3B5cmlnaHQsIGkuZS4sIFwiQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzOyBBbGwgUmlnaHRzIFJlc2VydmVkXCIgYXJlIGJvdGggcmV0YWluZWQgaW4gdGhlIFNvZnR3YXJlLCBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2VlLlxuXG4gICBBbHRlcm5hdGl2ZWx5LCBpbiBsaWV1IG9mIENOUkkncyBMaWNlbnNlIEFncmVlbWVudCwgTGljZW5zZWUgbWF5IHN1YnN0aXR1dGUgdGhlIGZvbGxvd2luZyB0ZXh0IChvbWl0dGluZyB0aGUgcXVvdGVzKSwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgc3VjaCB0ZXh0IGlzIGRpc3BsYXllZCBwcm9taW5lbnRseSBpbiB0aGUgU29mdHdhcmUgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZTogXCJKUHl0aG9uIChWZXJzaW9uIDEuMS54KSBpcyBtYWRlIGF2YWlsYWJsZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpbiBDTlJJJ3MgTGljZW5zZSBBZ3JlZW1lbnQuIFRoaXMgQWdyZWVtZW50IG1heSBiZSBsb2NhdGVkIG9uIHRoZSBJbnRlcm5ldCB1c2luZyB0aGUgZm9sbG93aW5nIHVuaXF1ZSwgcGVyc2lzdGVudCBpZGVudGlmaWVyIChrbm93biBhcyBhIGhhbmRsZSk6IDE4OTUuMjIvMTAwNi4gVGhlIExpY2Vuc2UgbWF5IGFsc28gYmUgb2J0YWluZWQgZnJvbSBhIHByb3h5IHNlcnZlciBvbiB0aGUgV2ViIHVzaW5nIHRoZSBmb2xsb3dpbmcgVVJMOiBodHRwOi8vaGRsLmhhbmRsZS5uZXQvMTg5NS4yMi8xMDA2LlwiXG5cbiAgIDMuIEluIHRoZSBldmVudCBMaWNlbnNlZSBwcmVwYXJlcyBhIGRlcml2YXRpdmUgd29yayB0aGF0IGlzIGJhc2VkIG9uIG9yIGluY29ycG9yYXRlcyB0aGUgU29mdHdhcmUgb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UgdGhlIGRlcml2YXRpdmUgd29yayBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4gTGljZW5zZWUgaGVyZWJ5IGFncmVlcyB0byBpbmRpY2F0ZSBpbiBhbnkgc3VjaCB3b3JrLCBpbiBhIHByb21pbmVudGx5IHZpc2libGUgd2F5LCB0aGUgbmF0dXJlIG9mIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgdG8gQ05SSSdzIFNvZnR3YXJlLlxuXG4gICA0LiBMaWNlbnNlZSBtYXkgbm90IHVzZSBDTlJJIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZSwgaW5jbHVkaW5nIEpQeXRob24gb3IgQ05SSSwgaW4gYSB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuIExpY2Vuc2VlIG1heSB1c2UgdGhlIG1hcmsgSlB5dGhvbiBpbiBjb25uZWN0aW9uIHdpdGggTGljZW5zZWUncyBkZXJpdmF0aXZlIHZlcnNpb25zIHRoYXQgYXJlIGJhc2VkIG9uIG9yIGluY29ycG9yYXRlIHRoZSBTb2Z0d2FyZSwgYnV0IG9ubHkgaW4gdGhlIGZvcm0gXCJKUHl0aG9uLWJhc2VkIF9fX19fX19fX19fX19fX19fX18sXCIgb3IgZXF1aXZhbGVudC5cblxuICAgNS4gQ05SSSBpcyBtYWtpbmcgdGhlIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiBcIkFTIElTXCIgYmFzaXMuIENOUkkgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRC4gQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQ05SSSBNQUtFUyBOTyBBTkQgRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuXG5cbiAgIDYuIENOUkkgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBPVEhFUiBVU0VSUyBPRiBUSEUgU09GVFdBUkUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTIEEgUkVTVUxUIE9GIFVTSU5HLCBNT0RJRllJTkcgT1IgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQU5ZIERFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLiBTT01FIFNUQVRFUyBETyBOT1QgQUxMT1cgVEhFIExJTUlUQVRJT04gT1IgRVhDTFVTSU9OIE9GIExJQUJJTElUWSBTTyBUSEUgQUJPVkUgRElTQ0xBSU1FUiBNQVkgTk9UIEFQUExZIFRPIExJQ0VOU0VFLlxuXG4gICA3LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IG1heSBiZSB0ZXJtaW5hdGVkIGJ5IENOUkkgKGkpIGltbWVkaWF0ZWx5IHVwb24gd3JpdHRlbiBub3RpY2UgZnJvbSBDTlJJIG9mIGFueSBtYXRlcmlhbCBicmVhY2ggYnkgdGhlIExpY2Vuc2VlLCBpZiB0aGUgbmF0dXJlIG9mIHRoZSBicmVhY2ggaXMgc3VjaCB0aGF0IGl0IGNhbm5vdCBiZSBwcm9tcHRseSByZW1lZGllZDsgb3IgKGlpKSBzaXh0eSAoNjApIGRheXMgZm9sbG93aW5nIG5vdGljZSBmcm9tIENOUkkgdG8gTGljZW5zZWUgb2YgYSBtYXRlcmlhbCByZW1lZGlhYmxlIGJyZWFjaCwgaWYgTGljZW5zZWUgaGFzIG5vdCByZW1lZGllZCBzdWNoIGJyZWFjaCB3aXRoaW4gdGhhdCBzaXh0eS1kYXkgcGVyaW9kLlxuXG4gICA4LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBpbnRlcnByZXRlZCBpbiBhbGwgcmVzcGVjdHMgYnkgdGhlIGxhdyBvZiB0aGUgU3RhdGUgb2YgVmlyZ2luaWEsIGV4Y2x1ZGluZyBjb25mbGljdCBvZiBsYXcgcHJvdmlzaW9ucy4gTm90aGluZyBpbiB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIENOUkkgYW5kIExpY2Vuc2VlLlxuXG4gICA5LiBCeSBjbGlja2luZyBvbiB0aGUgXCJBQ0NFUFRcIiBidXR0b24gd2hlcmUgaW5kaWNhdGVkLCBvciBieSBpbnN0YWxsaW5nLCBjb3B5aW5nIG9yIG90aGVyd2lzZSB1c2luZyB0aGUgU29mdHdhcmUsIExpY2Vuc2VlIGFncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4iXSwibGljZW5zZUlkcyI6WyJDTlJJLUp5dGhvbiJdLCJrZXl3b3JkcyI6WyJhY2Nlc3NpbmcgYW5kIHVzaW5nIiwiYW5kIHVzaW5nIGpweXRob24iLCJ1c2luZyBqcHl0aG9uIHZlcnNpb24iLCIxIHggaW4iLCJ4IGluIHNvdXJjZSIsImRvY3VtZW50YXRpb24gYXMgcHJvdmlkZWQiLCJwcm92aWRlZCBoZXJlaW4gc29mdHdhcmUiLCJoZXJlaW4gc29mdHdhcmUgMiIsIjE5OTYgMTk5OSBjb3Jwb3JhdGlvbiIsIjE5OTkgY29ycG9yYXRpb24gZm9yIiwicmVzZXJ2ZWQgYXJlIGJvdGgiLCJhcmUgYm90aCByZXRhaW5lZCIsImJvdGggcmV0YWluZWQgaW4iLCJieSBsaWNlbnNlZSBhbHRlcm5hdGl2ZWx5IiwibGljZW5zZWUgYWx0ZXJuYXRpdmVseSBpbiIsImFsdGVybmF0aXZlbHkgaW4gbGlldSIsInRoZSBxdW90ZXMgcHJvdmlkZWQiLCJxdW90ZXMgcHJvdmlkZWQgaG93ZXZlciIsInRoYXQgc3VjaCB0ZXh0Iiwic3VjaCB0ZXh0IGlzIiwidGV4dCBpcyBkaXNwbGF5ZWQiLCJpcyBkaXNwbGF5ZWQgcHJvbWluZW50bHkiLCJkaXNwbGF5ZWQgcHJvbWluZW50bHkgaW4iLCJieSBsaWNlbnNlZSBqcHl0aG9uIiwibGljZW5zZWUganB5dGhvbiB2ZXJzaW9uIiwiMSB4IGlzIiwieCBpcyBtYWRlIiwiMjIgMTAwNiB0aGUiLCIxMDA2IHRoZSBsaWNlbnNlIiwib24gdGhlIHdlYiIsInRoZSB3ZWIgdXNpbmciLCJ3ZWIgdXNpbmcgdGhlIiwiMjIgMTAwNiAzIiwiMTAwNiAzIGluIiwib3IgaW5jb3Jwb3JhdGVzIHRoZSIsImluY29ycG9yYXRlcyB0aGUgc29mdHdhcmUiLCJzdWNoIHdvcmsgaW4iLCJpbiBhIHByb21pbmVudGx5IiwiYSBwcm9taW5lbnRseSB2aXNpYmxlIiwicHJvbWluZW50bHkgdmlzaWJsZSB3YXkiLCJ2aXNpYmxlIHdheSB0aGUiLCJ3YXkgdGhlIG5hdHVyZSIsIm1hZGUgdG8gY25yaSIsInRvIGNucmkgcyIsImNucmkgcyBzb2Z0d2FyZSIsInMgc29mdHdhcmUgNCIsInNvZnR3YXJlIDQgbGljZW5zZWUiLCI0IGxpY2Vuc2VlIG1heSIsIm5vdCB1c2UgY25yaSIsInRyYWRlIG5hbWUgaW5jbHVkaW5nIiwibmFtZSBpbmNsdWRpbmcganB5dGhvbiIsImluY2x1ZGluZyBqcHl0aG9uIG9yIiwianB5dGhvbiBvciBjbnJpIiwib3IgY25yaSBpbiIsImNucmkgaW4gYSIsInRoaXJkIHBhcnR5IGxpY2Vuc2VlIiwicGFydHkgbGljZW5zZWUgbWF5IiwidXNlIHRoZSBtYXJrIiwidGhlIG1hcmsganB5dGhvbiIsIm1hcmsganB5dGhvbiBpbiIsImpweXRob24gaW4gY29ubmVjdGlvbiIsImNvbm5lY3Rpb24gd2l0aCBsaWNlbnNlZSIsIndpdGggbGljZW5zZWUgcyIsImxpY2Vuc2VlIHMgZGVyaXZhdGl2ZSIsInMgZGVyaXZhdGl2ZSB2ZXJzaW9ucyIsImRlcml2YXRpdmUgdmVyc2lvbnMgdGhhdCIsInZlcnNpb25zIHRoYXQgYXJlIiwidGhhdCBhcmUgYmFzZWQiLCJvbiBvciBpbmNvcnBvcmF0ZSIsIm9yIGluY29ycG9yYXRlIHRoZSIsImluY29ycG9yYXRlIHRoZSBzb2Z0d2FyZSIsInNvZnR3YXJlIGJ1dCBvbmx5IiwiYnV0IG9ubHkgaW4iLCJ0aGUgZm9ybSBqcHl0aG9uIiwiZm9ybSBqcHl0aG9uIGJhc2VkIiwianB5dGhvbiBiYXNlZCBvciIsImJhc2VkIG9yIGVxdWl2YWxlbnQiLCJvciBlcXVpdmFsZW50IDUiLCJlcXVpdmFsZW50IDUgY25yaSIsIjUgY25yaSBpcyIsInBhcnR5IHJpZ2h0cyA2IiwicmlnaHRzIDYgY25yaSIsIjYgY25yaSBzaGFsbCIsIm9yIG90aGVyIHVzZXJzIiwidGhlcmVvZiBzb21lIHN0YXRlcyIsInNvbWUgc3RhdGVzIGRvIiwic3RhdGVzIGRvIG5vdCIsInRoZSBsaW1pdGF0aW9uIG9yIiwibGltaXRhdGlvbiBvciBleGNsdXNpb24iLCJvciBleGNsdXNpb24gb2YiLCJvZiBsaWFiaWxpdHkgc28iLCJsaWFiaWxpdHkgc28gdGhlIiwiYWJvdmUgZGlzY2xhaW1lciBtYXkiLCJ0byBsaWNlbnNlZSA3IiwibGljZW5zZWUgNyB0aGlzIiwibGljZW5zZSBhZ3JlZW1lbnQgbWF5IiwibWF5IGJlIHRlcm1pbmF0ZWQiLCJiZSB0ZXJtaW5hdGVkIGJ5IiwidGVybWluYXRlZCBieSBjbnJpIiwiYnkgY25yaSBpIiwiY25yaSBpIGltbWVkaWF0ZWx5IiwiaSBpbW1lZGlhdGVseSB1cG9uIiwiaW1tZWRpYXRlbHkgdXBvbiB3cml0dGVuIiwiZnJvbSBjbnJpIG9mIiwiY25yaSBvZiBhbnkiLCJvZiBhbnkgbWF0ZXJpYWwiLCJ0aGUgbGljZW5zZWUgaWYiLCJsaWNlbnNlZSBpZiB0aGUiLCJpZiB0aGUgbmF0dXJlIiwidGhlIGJyZWFjaCBpcyIsImJyZWFjaCBpcyBzdWNoIiwiaXMgc3VjaCB0aGF0IiwidGhhdCBpdCBjYW5ub3QiLCJpdCBjYW5ub3QgYmUiLCJjYW5ub3QgYmUgcHJvbXB0bHkiLCJiZSBwcm9tcHRseSByZW1lZGllZCIsInByb21wdGx5IHJlbWVkaWVkIG9yIiwicmVtZWRpZWQgb3IgaWkiLCJvciBpaSBzaXh0eSIsImlpIHNpeHR5IDYwIiwiNjAgZGF5cyBmb2xsb3dpbmciLCJkYXlzIGZvbGxvd2luZyBub3RpY2UiLCJmb2xsb3dpbmcgbm90aWNlIGZyb20iLCJmcm9tIGNucmkgdG8iLCJjbnJpIHRvIGxpY2Vuc2VlIiwidG8gbGljZW5zZWUgb2YiLCJvZiBhIG1hdGVyaWFsIiwiYSBtYXRlcmlhbCByZW1lZGlhYmxlIiwibWF0ZXJpYWwgcmVtZWRpYWJsZSBicmVhY2giLCJyZW1lZGlhYmxlIGJyZWFjaCBpZiIsImJyZWFjaCBpZiBsaWNlbnNlZSIsImhhcyBub3QgcmVtZWRpZWQiLCJub3QgcmVtZWRpZWQgc3VjaCIsInJlbWVkaWVkIHN1Y2ggYnJlYWNoIiwiYnJlYWNoIHdpdGhpbiB0aGF0Iiwid2l0aGluIHRoYXQgc2l4dHkiLCJ0aGF0IHNpeHR5IGRheSIsInNpeHR5IGRheSBwZXJpb2QiLCJkYXkgcGVyaW9kIDgiLCJwZXJpb2QgOCB0aGlzIiwiOCB0aGlzIGxpY2Vuc2UiLCJhbmQgbGljZW5zZWUgOSIsImxpY2Vuc2VlIDkgYnkiLCI5IGJ5IGNsaWNraW5nIiwib3IgYnkgaW5zdGFsbGluZyIsImJ5IGluc3RhbGxpbmcgY29weWluZyIsImxpY2Vuc2VlIGFjY2Vzc2luZyBhbmQgdXNpbmciLCJhY2Nlc3NpbmcgYW5kIHVzaW5nIGpweXRob24iLCJhbmQgdXNpbmcganB5dGhvbiB2ZXJzaW9uIiwidXNpbmcganB5dGhvbiB2ZXJzaW9uIDEiLCIxIDEgeCBpbiIsIjEgeCBpbiBzb3VyY2UiLCJ4IGluIHNvdXJjZSBvciIsImFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhcyBwcm92aWRlZCIsImRvY3VtZW50YXRpb24gYXMgcHJvdmlkZWQgaGVyZWluIiwiYXMgcHJvdmlkZWQgaGVyZWluIHNvZnR3YXJlIiwicHJvdmlkZWQgaGVyZWluIHNvZnR3YXJlIDIiLCJoZXJlaW4gc29mdHdhcmUgMiBzdWJqZWN0IiwidHJhbnNmZXJhYmxlIHJveWFsdHkgZnJlZSB3b3JsZCIsImUgY29weXJpZ2h0IGMgMTk5NiIsImMgMTk5NiAxOTk5IGNvcnBvcmF0aW9uIiwiMTk5NiAxOTk5IGNvcnBvcmF0aW9uIGZvciIsIjE5OTkgY29ycG9yYXRpb24gZm9yIG5hdGlvbmFsIiwicmlnaHRzIHJlc2VydmVkIGFyZSBib3RoIiwicmVzZXJ2ZWQgYXJlIGJvdGggcmV0YWluZWQiLCJhcmUgYm90aCByZXRhaW5lZCBpbiIsImJvdGggcmV0YWluZWQgaW4gdGhlIiwicHJlcGFyZWQgYnkgbGljZW5zZWUgYWx0ZXJuYXRpdmVseSIsImJ5IGxpY2Vuc2VlIGFsdGVybmF0aXZlbHkgaW4iLCJsaWNlbnNlZSBhbHRlcm5hdGl2ZWx5IGluIGxpZXUiLCJhbHRlcm5hdGl2ZWx5IGluIGxpZXUgb2YiLCJvbWl0dGluZyB0aGUgcXVvdGVzIHByb3ZpZGVkIiwidGhlIHF1b3RlcyBwcm92aWRlZCBob3dldmVyIiwicXVvdGVzIHByb3ZpZGVkIGhvd2V2ZXIgdGhhdCIsImhvd2V2ZXIgdGhhdCBzdWNoIHRleHQiLCJ0aGF0IHN1Y2ggdGV4dCBpcyIsInN1Y2ggdGV4dCBpcyBkaXNwbGF5ZWQiLCJ0ZXh0IGlzIGRpc3BsYXllZCBwcm9taW5lbnRseSIsImlzIGRpc3BsYXllZCBwcm9taW5lbnRseSBpbiIsImRpc3BsYXllZCBwcm9taW5lbnRseSBpbiB0aGUiLCJwcm9taW5lbnRseSBpbiB0aGUgc29mdHdhcmUiLCJwcmVwYXJlZCBieSBsaWNlbnNlZSBqcHl0aG9uIiwiYnkgbGljZW5zZWUganB5dGhvbiB2ZXJzaW9uIiwibGljZW5zZWUganB5dGhvbiB2ZXJzaW9uIDEiLCIxIDEgeCBpcyIsIjEgeCBpcyBtYWRlIiwieCBpcyBtYWRlIGF2YWlsYWJsZSIsImhhbmRsZSAxODk1IDIyIDEwMDYiLCIxODk1IDIyIDEwMDYgdGhlIiwiMjIgMTAwNiB0aGUgbGljZW5zZSIsIjEwMDYgdGhlIGxpY2Vuc2UgbWF5Iiwic2VydmVyIG9uIHRoZSB3ZWIiLCJvbiB0aGUgd2ViIHVzaW5nIiwidGhlIHdlYiB1c2luZyB0aGUiLCJ3ZWIgdXNpbmcgdGhlIGZvbGxvd2luZyIsIm5ldCAxODk1IDIyIDEwMDYiLCIxODk1IDIyIDEwMDYgMyIsIjIyIDEwMDYgMyBpbiIsIjEwMDYgMyBpbiB0aGUiLCJvbiBvciBpbmNvcnBvcmF0ZXMgdGhlIl19LHsibGljZW5zZVRleHRzIjpbIkNOUkkgT1BFTiBTT1VSQ0UgR1BMLUNPTVBBVElCTEUgTElDRU5TRSBBR1JFRU1FTlRcblxuSU1QT1JUQU5UOiBQTEVBU0UgUkVBRCBUSEUgRk9MTE9XSU5HIEFHUkVFTUVOVCBDQVJFRlVMTFkuXG5cbkJZIENMSUNLSU5HIE9OIFwiQUNDRVBUXCIgV0hFUkUgSU5ESUNBVEVEIEJFTE9XLCBPUiBCWSBDT1BZSU5HLCBJTlNUQUxMSU5HIE9SIE9USEVSV0lTRSBVU0lORyBQWVRIT04gMS42LjEgU09GVFdBUkUsIFlPVSBBUkUgREVFTUVEIFRPIEhBVkUgQUdSRUVEIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIExJQ0VOU0UgQUdSRUVNRU5ULlxuXG4gICAxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcywgaGF2aW5nIGFuIG9mZmljZSBhdCAxODk1IFByZXN0b24gV2hpdGUgRHJpdmUsIFJlc3RvbiwgVkEgMjAxOTEgKFwiQ05SSVwiKSwgYW5kIHRoZSBJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbiAoXCJMaWNlbnNlZVwiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42LjEgc29mdHdhcmUgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLlxuXG4gICAyLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBDTlJJIGhlcmVieSBncmFudHMgTGljZW5zZWUgYSBub25leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgd29ybGQtd2lkZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24gMS42LjEgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgQ05SSSdzIExpY2Vuc2UgQWdyZWVtZW50IGFuZCBDTlJJJ3Mgbm90aWNlIG9mIGNvcHlyaWdodCwgaS5lLiwgXCJDb3B5cmlnaHQgwqkgMTk5NS0yMDAxIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlczsgQWxsIFJpZ2h0cyBSZXNlcnZlZFwiIGFyZSByZXRhaW5lZCBpbiBQeXRob24gMS42LjEgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS4gQWx0ZXJuYXRlbHksIGluIGxpZXUgb2YgQ05SSSdzIExpY2Vuc2UgQWdyZWVtZW50LCBMaWNlbnNlZSBtYXkgc3Vic3RpdHV0ZSB0aGUgZm9sbG93aW5nIHRleHQgKG9taXR0aW5nIHRoZSBxdW90ZXMpOiBcIlB5dGhvbiAxLjYuMSBpcyBtYWRlIGF2YWlsYWJsZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpbiBDTlJJJ3MgTGljZW5zZSBBZ3JlZW1lbnQuIFRoaXMgQWdyZWVtZW50IHRvZ2V0aGVyIHdpdGggUHl0aG9uIDEuNi4xIG1heSBiZSBsb2NhdGVkIG9uIHRoZSBJbnRlcm5ldCB1c2luZyB0aGUgZm9sbG93aW5nIHVuaXF1ZSwgcGVyc2lzdGVudCBpZGVudGlmaWVyIChrbm93biBhcyBhIGhhbmRsZSk6IDE4OTUuMjIvMTAxMy4gVGhpcyBBZ3JlZW1lbnQgbWF5IGFsc28gYmUgb2J0YWluZWQgZnJvbSBhIHByb3h5IHNlcnZlciBvbiB0aGUgSW50ZXJuZXQgdXNpbmcgdGhlIGZvbGxvd2luZyBVUkw6IGh0dHA6Ly9oZGwuaGFuZGxlLm5ldC8xODk1LjIyLzEwMTNcIi5cblxuICAgMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24gb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiAxLjYuMSBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZSB0aGUgZGVyaXZhdGl2ZSB3b3JrIGF2YWlsYWJsZSB0byBvdGhlcnMgYXMgcHJvdmlkZWQgaGVyZWluLCB0aGVuIExpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZiB0aGUgY2hhbmdlcyBtYWRlIHRvIFB5dGhvbiAxLjYuMS5cblxuICAgNC4gQ05SSSBpcyBtYWtpbmcgUHl0aG9uIDEuNi4xIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiBcIkFTIElTXCIgYmFzaXMuIENOUkkgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRC4gQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQ05SSSBNQUtFUyBOTyBBTkQgRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIDEuNi4xIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuXG5cbiAgIDUuIENOUkkgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgUFlUSE9OIDEuNi4xIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMgQSBSRVNVTFQgT0YgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORyBQWVRIT04gMS42LjEsIE9SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi5cblxuICAgNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbCBicmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLlxuXG4gICA3LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBmZWRlcmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXcgb2YgdGhlIFVuaXRlZCBTdGF0ZXMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIGZlZGVyYWwgY29weXJpZ2h0IGxhdywgYW5kLCB0byB0aGUgZXh0ZW50IHN1Y2ggVS5TLiBmZWRlcmFsIGxhdyBkb2VzIG5vdCBhcHBseSwgYnkgdGhlIGxhdyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIFZpcmdpbmlhLCBleGNsdWRpbmcgVmlyZ2luaWEncyBjb25mbGljdCBvZiBsYXcgcHJvdmlzaW9ucy4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHdpdGggcmVnYXJkIHRvIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgb24gUHl0aG9uIDEuNi4xIHRoYXQgaW5jb3Jwb3JhdGUgbm9uLXNlcGFyYWJsZSBtYXRlcmlhbCB0aGF0IHdhcyBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdGhlIGxhdyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIFZpcmdpbmlhIHNoYWxsIGdvdmVybiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IG9ubHkgYXMgdG8gaXNzdWVzIGFyaXNpbmcgdW5kZXIgb3Igd2l0aCByZXNwZWN0IHRvIFBhcmFncmFwaHMgNCwgNSwgYW5kIDcgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gQ05SSSBhbmQgTGljZW5zZWUuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgQ05SSSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWUgaW4gYSB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuXG5cbiAgIDguIEJ5IGNsaWNraW5nIG9uIHRoZSBcIkFDQ0VQVFwiIGJ1dHRvbiB3aGVyZSBpbmRpY2F0ZWQsIG9yIGJ5IGNvcHlpbmcsIGluc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiAxLjYuMSwgTGljZW5zZWUgYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBBQ0NFUFQiXSwibGljZW5zZUlkcyI6WyJDTlJJLVB5dGhvbi1HUEwtQ29tcGF0aWJsZSJdLCJrZXl3b3JkcyI6WyJvcGVuIHNvdXJjZSBncGwiLCJzb3VyY2UgZ3BsIGNvbXBhdGlibGUiLCJncGwgY29tcGF0aWJsZSBsaWNlbnNlIiwiY29tcGF0aWJsZSBsaWNlbnNlIGFncmVlbWVudCIsImUgY29weXJpZ2h0IDE5OTUiLCJjb3B5cmlnaHQgMTk5NSAyMDAxIiwiMTk5NSAyMDAxIGNvcnBvcmF0aW9uIiwiMjAwMSBjb3Jwb3JhdGlvbiBmb3IiLCI2IDEgaXMiLCJ0aGlzIGFncmVlbWVudCB0b2dldGhlciIsImFncmVlbWVudCB0b2dldGhlciB3aXRoIiwidG9nZXRoZXIgd2l0aCBweXRob24iLCJ3aXRoIHB5dGhvbiAxIiwiNiAxIG1heSIsIjEgbWF5IGJlIiwiMjIgMTAxMyB0aGlzIiwiMTAxMyB0aGlzIGFncmVlbWVudCIsIjIyIDEwMTMgMyIsIjEwMTMgMyBpbiIsIjYgMSA0IiwiMSA0IGNucmkiLCI2IDEgYXZhaWxhYmxlIiwiMSBhdmFpbGFibGUgdG8iLCI2IDEgd2lsbCIsIjEgd2lsbCBub3QiLCJieSB0aGUgZmVkZXJhbCIsInRoZSBmZWRlcmFsIGludGVsbGVjdHVhbCIsImZlZGVyYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IiwicHJvcGVydHkgbGF3IG9mIiwidW5pdGVkIHN0YXRlcyBpbmNsdWRpbmciLCJzdGF0ZXMgaW5jbHVkaW5nIHdpdGhvdXQiLCJsaW1pdGF0aW9uIHRoZSBmZWRlcmFsIiwidGhlIGZlZGVyYWwgY29weXJpZ2h0IiwiZmVkZXJhbCBjb3B5cmlnaHQgbGF3IiwibGF3IGFuZCB0byIsImV4dGVudCBzdWNoIHUiLCJzdWNoIHUgcyIsInMgZmVkZXJhbCBsYXciLCJmZWRlcmFsIGxhdyBkb2VzIiwibGF3IGRvZXMgbm90Iiwibm90IGFwcGx5IGJ5IiwiYXBwbHkgYnkgdGhlIiwidmlyZ2luaWEgZXhjbHVkaW5nIHZpcmdpbmlhIiwiZXhjbHVkaW5nIHZpcmdpbmlhIHMiLCJ2aXJnaW5pYSBzIGNvbmZsaWN0IiwibGF3IHByb3Zpc2lvbnMgbm90d2l0aHN0YW5kaW5nIiwicHJvdmlzaW9ucyBub3R3aXRoc3RhbmRpbmcgdGhlIiwidGhlIGZvcmVnb2luZyB3aXRoIiwiZm9yZWdvaW5nIHdpdGggcmVnYXJkIiwicmVnYXJkIHRvIGRlcml2YXRpdmUiLCJiYXNlZCBvbiBweXRob24iLCJvbiBweXRob24gMSIsIjYgMSB0aGF0IiwiMSB0aGF0IGluY29ycG9yYXRlIiwidGhhdCBpbmNvcnBvcmF0ZSBub24iLCJpbmNvcnBvcmF0ZSBub24gc2VwYXJhYmxlIiwibm9uIHNlcGFyYWJsZSBtYXRlcmlhbCIsInNlcGFyYWJsZSBtYXRlcmlhbCB0aGF0IiwibWF0ZXJpYWwgdGhhdCB3YXMiLCJ0aGF0IHdhcyBwcmV2aW91c2x5Iiwid2FzIHByZXZpb3VzbHkgZGlzdHJpYnV0ZWQiLCJwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIiwibGljZW5zZSBncGwgdGhlIiwiZ3BsIHRoZSBsYXciLCJvZiB2aXJnaW5pYSBzaGFsbCIsInZpcmdpbmlhIHNoYWxsIGdvdmVybiIsInNoYWxsIGdvdmVybiB0aGlzIiwiZ292ZXJuIHRoaXMgbGljZW5zZSIsImxpY2Vuc2UgYWdyZWVtZW50IG9ubHkiLCJhZ3JlZW1lbnQgb25seSBhcyIsIm9ubHkgYXMgdG8iLCJhcyB0byBpc3N1ZXMiLCJ0byBpc3N1ZXMgYXJpc2luZyIsImlzc3VlcyBhcmlzaW5nIHVuZGVyIiwidW5kZXIgb3Igd2l0aCIsInJlc3BlY3QgdG8gcGFyYWdyYXBocyIsInRvIHBhcmFncmFwaHMgNCIsInBhcmFncmFwaHMgNCA1IiwiNCA1IGFuZCIsIjUgYW5kIDciLCI3IG9mIHRoaXMiLCJsaWNlbnNlIGFncmVlbWVudCBub3RoaW5nIiwiYWdyZWVtZW50IG5vdGhpbmcgaW4iLCI2IDEgbGljZW5zZWUiLCIxIGxpY2Vuc2VlIGFncmVlcyIsImNucmkgb3BlbiBzb3VyY2UgZ3BsIiwib3BlbiBzb3VyY2UgZ3BsIGNvbXBhdGlibGUiLCJzb3VyY2UgZ3BsIGNvbXBhdGlibGUgbGljZW5zZSIsImdwbCBjb21wYXRpYmxlIGxpY2Vuc2UgYWdyZWVtZW50IiwiY29tcGF0aWJsZSBsaWNlbnNlIGFncmVlbWVudCBpbXBvcnRhbnQiLCI2IDEgc29mdHdhcmUgeW91IiwiNiAxIHNvZnR3YXJlIGluIiwidXNlIHB5dGhvbiAxIDYiLCJpIGUgY29weXJpZ2h0IDE5OTUiLCJlIGNvcHlyaWdodCAxOTk1IDIwMDEiLCJjb3B5cmlnaHQgMTk5NSAyMDAxIGNvcnBvcmF0aW9uIiwiMTk5NSAyMDAxIGNvcnBvcmF0aW9uIGZvciIsIjIwMDEgY29ycG9yYXRpb24gZm9yIG5hdGlvbmFsIiwiaW4gcHl0aG9uIDEgNiIsIjEgNiAxIGlzIiwiNiAxIGlzIG1hZGUiLCJhZ3JlZW1lbnQgdGhpcyBhZ3JlZW1lbnQgdG9nZXRoZXIiLCJ0aGlzIGFncmVlbWVudCB0b2dldGhlciB3aXRoIiwiYWdyZWVtZW50IHRvZ2V0aGVyIHdpdGggcHl0aG9uIiwidG9nZXRoZXIgd2l0aCBweXRob24gMSIsIndpdGggcHl0aG9uIDEgNiIsIjEgNiAxIG1heSIsIjYgMSBtYXkgYmUiLCIxIG1heSBiZSBsb2NhdGVkIiwiaGFuZGxlIDE4OTUgMjIgMTAxMyIsIjE4OTUgMjIgMTAxMyB0aGlzIiwiMjIgMTAxMyB0aGlzIGFncmVlbWVudCIsIjEwMTMgdGhpcyBhZ3JlZW1lbnQgbWF5IiwibmV0IDE4OTUgMjIgMTAxMyIsIjE4OTUgMjIgMTAxMyAzIiwiMjIgMTAxMyAzIGluIiwiMTAxMyAzIGluIHRoZSIsImluY29ycG9yYXRlcyBweXRob24gMSA2IiwiMSBvciBhbnkgcGFydCIsInRvIHB5dGhvbiAxIDYiLCIxIDYgMSA0IiwiNiAxIDQgY25yaSIsIjEgNCBjbnJpIGlzIiwibWFraW5nIHB5dGhvbiAxIDYiLCIxIDYgMSBhdmFpbGFibGUiLCI2IDEgYXZhaWxhYmxlIHRvIiwiMSBhdmFpbGFibGUgdG8gbGljZW5zZWUiLCIxIDYgMSB3aWxsIiwiNiAxIHdpbGwgbm90IiwiMSB3aWxsIG5vdCBpbmZyaW5nZSIsInVzZXJzIG9mIHB5dGhvbiAxIiwiMSA2IDEgZm9yIiwiNiAxIGZvciBhbnkiLCIxIGZvciBhbnkgaW5jaWRlbnRhbCIsIjEgb3IgYW55IGRlcml2YXRpdmUiLCJnb3Zlcm5lZCBieSB0aGUgZmVkZXJhbCIsImJ5IHRoZSBmZWRlcmFsIGludGVsbGVjdHVhbCIsInRoZSBmZWRlcmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSIsImZlZGVyYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhdyIsImludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXcgb2YiLCJwcm9wZXJ0eSBsYXcgb2YgdGhlIiwibGF3IG9mIHRoZSB1bml0ZWQiLCJ0aGUgdW5pdGVkIHN0YXRlcyBpbmNsdWRpbmciLCJ1bml0ZWQgc3RhdGVzIGluY2x1ZGluZyB3aXRob3V0Iiwic3RhdGVzIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24iLCJ3aXRob3V0IGxpbWl0YXRpb24gdGhlIGZlZGVyYWwiLCJsaW1pdGF0aW9uIHRoZSBmZWRlcmFsIGNvcHlyaWdodCIsInRoZSBmZWRlcmFsIGNvcHlyaWdodCBsYXciLCJmZWRlcmFsIGNvcHlyaWdodCBsYXcgYW5kIiwiY29weXJpZ2h0IGxhdyBhbmQgdG8iLCJsYXcgYW5kIHRvIHRoZSIsInRoZSBleHRlbnQgc3VjaCB1IiwiZXh0ZW50IHN1Y2ggdSBzIiwic3VjaCB1IHMgZmVkZXJhbCIsInUgcyBmZWRlcmFsIGxhdyIsInMgZmVkZXJhbCBsYXcgZG9lcyIsImZlZGVyYWwgbGF3IGRvZXMgbm90IiwibGF3IGRvZXMgbm90IGFwcGx5IiwiZG9lcyBub3QgYXBwbHkgYnkiLCJub3QgYXBwbHkgYnkgdGhlIiwiYXBwbHkgYnkgdGhlIGxhdyIsImNvbW1vbndlYWx0aCBvZiB2aXJnaW5pYSBleGNsdWRpbmciLCJvZiB2aXJnaW5pYSBleGNsdWRpbmcgdmlyZ2luaWEiLCJ2aXJnaW5pYSBleGNsdWRpbmcgdmlyZ2luaWEgcyIsImV4Y2x1ZGluZyB2aXJnaW5pYSBzIGNvbmZsaWN0IiwidmlyZ2luaWEgcyBjb25mbGljdCBvZiIsIm9mIGxhdyBwcm92aXNpb25zIG5vdHdpdGhzdGFuZGluZyIsImxhdyBwcm92aXNpb25zIG5vdHdpdGhzdGFuZGluZyB0aGUiLCJwcm92aXNpb25zIG5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIiwibm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgd2l0aCIsInRoZSBmb3JlZ29pbmcgd2l0aCByZWdhcmQiLCJmb3JlZ29pbmcgd2l0aCByZWdhcmQgdG8iLCJ3aXRoIHJlZ2FyZCB0byBkZXJpdmF0aXZlIiwicmVnYXJkIHRvIGRlcml2YXRpdmUgd29ya3MiLCJ0byBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIiwid29ya3MgYmFzZWQgb24gcHl0aG9uIiwiYmFzZWQgb24gcHl0aG9uIDEiLCJvbiBweXRob24gMSA2IiwiMSA2IDEgdGhhdCIsIjYgMSB0aGF0IGluY29ycG9yYXRlIiwiMSB0aGF0IGluY29ycG9yYXRlIG5vbiIsInRoYXQgaW5jb3Jwb3JhdGUgbm9uIHNlcGFyYWJsZSIsImluY29ycG9yYXRlIG5vbiBzZXBhcmFibGUgbWF0ZXJpYWwiLCJub24gc2VwYXJhYmxlIG1hdGVyaWFsIHRoYXQiLCJzZXBhcmFibGUgbWF0ZXJpYWwgdGhhdCB3YXMiLCJtYXRlcmlhbCB0aGF0IHdhcyBwcmV2aW91c2x5IiwidGhhdCB3YXMgcHJldmlvdXNseSBkaXN0cmlidXRlZCIsIndhcyBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIiwicHJldmlvdXNseSBkaXN0cmlidXRlZCB1bmRlciB0aGUiLCJkaXN0cmlidXRlZCB1bmRlciB0aGUgZ251IiwicHVibGljIGxpY2Vuc2UgZ3BsIHRoZSIsImxpY2Vuc2UgZ3BsIHRoZSBsYXciLCJncGwgdGhlIGxhdyBvZiIsImNvbW1vbndlYWx0aCBvZiB2aXJnaW5pYSBzaGFsbCIsIm9mIHZpcmdpbmlhIHNoYWxsIGdvdmVybiIsInZpcmdpbmlhIHNoYWxsIGdvdmVybiB0aGlzIiwic2hhbGwgZ292ZXJuIHRoaXMgbGljZW5zZSIsImdvdmVybiB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50IiwidGhpcyBsaWNlbnNlIGFncmVlbWVudCBvbmx5IiwibGljZW5zZSBhZ3JlZW1lbnQgb25seSBhcyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDTlJJIE9QRU4gU09VUkNFIExJQ0VOU0UgQUdSRUVNRU5UXG5cbklNUE9SVEFOVDogUExFQVNFIFJFQUQgVEhFIEZPTExPV0lORyBBR1JFRU1FTlQgQ0FSRUZVTExZLlxuXG5CWSBDTElDS0lORyBPTiBcIkFDQ0VQVFwiIFdIRVJFIElORElDQVRFRCBCRUxPVywgT1IgQlkgQ09QWUlORywgSU5TVEFMTElORyBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OIDEuNiwgYmV0YSAxIFNPRlRXQVJFLCBZT1UgQVJFIERFRU1FRCBUTyBIQVZFIEFHUkVFRCBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBMSUNFTlNFIEFHUkVFTUVOVC5cblxuICAgMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMsIGhhdmluZyBhbiBvZmZpY2UgYXQgMTg5NSBQcmVzdG9uIFdoaXRlIERyaXZlLCBSZXN0b24sIFZBIDIwMTkxIChcIkNOUklcIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKFwiTGljZW5zZWVcIikgYWNjZXNzaW5nIGFuZCBvdGhlcndpc2UgdXNpbmcgUHl0aG9uIDEuNiwgYmV0YSAxIHNvZnR3YXJlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgYXMgcmVsZWFzZWQgYXQgdGhlIHd3dy5weXRob24ub3JnIEludGVybmV0IHNpdGUgb24gQXVndXN0IDQsIDIwMDAgKFwiUHl0aG9uIDEuNmIxXCIpLlxuXG4gICAyLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBDTlJJIGhlcmVieSBncmFudHMgTGljZW5zZWUgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uIDEuNmIxIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IENOUklzIExpY2Vuc2UgQWdyZWVtZW50IGlzIHJldGFpbmVkIGluIFB5dGhvbiAxLjZiMSwgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS5cblxuICAgQWx0ZXJuYXRlbHksIGluIGxpZXUgb2YgQ05SSXMgTGljZW5zZSBBZ3JlZW1lbnQsIExpY2Vuc2VlIG1heSBzdWJzdGl0dXRlIHRoZSBmb2xsb3dpbmcgdGV4dCAob21pdHRpbmcgdGhlIHF1b3Rlcyk6IFwiUHl0aG9uIDEuNiwgYmV0YSAxLCBpcyBtYWRlIGF2YWlsYWJsZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpbiBDTlJJcyBMaWNlbnNlIEFncmVlbWVudC4gVGhpcyBBZ3JlZW1lbnQgbWF5IGJlIGxvY2F0ZWQgb24gdGhlIEludGVybmV0IHVzaW5nIHRoZSBmb2xsb3dpbmcgdW5pcXVlLCBwZXJzaXN0ZW50IGlkZW50aWZpZXIgKGtub3duIGFzIGEgaGFuZGxlKTogMTg5NS4yMi8xMDExLiBUaGlzIEFncmVlbWVudCBtYXkgYWxzbyBiZSBvYnRhaW5lZCBmcm9tIGEgcHJveHkgc2VydmVyIG9uIHRoZSBJbnRlcm5ldCB1c2luZyB0aGUgVVJMOmh0dHA6Ly9oZGwuaGFuZGxlLm5ldC8xODk1LjIyLzEwMTFcIi5cblxuICAgMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24gb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiAxLjZiMSBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZSB0aGUgZGVyaXZhdGl2ZSB3b3JrIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGFzIHByb3ZpZGVkIGhlcmVpbiwgdGhlbiBMaWNlbnNlZSBoZXJlYnkgYWdyZWVzIHRvIGluZGljYXRlIGluIGFueSBzdWNoIHdvcmsgdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyBtYWRlIHRvIFB5dGhvbiAxLjZiMS5cblxuICAgNC4gQ05SSSBpcyBtYWtpbmcgUHl0aG9uIDEuNmIxIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiBcIkFTIElTXCIgYmFzaXMuIENOUkkgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRC4gQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQ05SSSBNQUtFUyBOTyBBTkQgRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIDEuNmIxIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuXG5cbiAgIDUuIENOUkkgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgVEhFIFNPRlRXQVJFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMgQSBSRVNVTFQgT0YgVVNJTkcsIE1PRElGWUlORyBPUiBESVNUUklCVVRJTkcgUFlUSE9OIDEuNmIxLCBPUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuXG5cbiAgIDYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwgYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgNy4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgaW50ZXJwcmV0ZWQgaW4gYWxsIHJlc3BlY3RzIGJ5IHRoZSBsYXcgb2YgdGhlIFN0YXRlIG9mIFZpcmdpbmlhLCBleGNsdWRpbmcgY29uZmxpY3Qgb2YgbGF3IHByb3Zpc2lvbnMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIENOUkkgYW5kIExpY2Vuc2VlLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIENOUkkgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55IHRoaXJkIHBhcnR5LlxuXG4gICA4LiBCeSBjbGlja2luZyBvbiB0aGUgXCJBQ0NFUFRcIiBidXR0b24gd2hlcmUgaW5kaWNhdGVkLCBvciBieSBjb3B5aW5nLCBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42YjEsIExpY2Vuc2VlIGFncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC5cblxuQUNDRVBUIl0sImxpY2Vuc2VJZHMiOlsiQ05SSS1QeXRob24iXSwia2V5d29yZHMiOlsic291cmNlIGxpY2Vuc2UgYWdyZWVtZW50IGltcG9ydGFudCIsIm9wZW4gc291cmNlIGxpY2Vuc2UgYWdyZWVtZW50IGltcG9ydGFudCIsInNvdXJjZSBsaWNlbnNlIGFncmVlbWVudCBpbXBvcnRhbnQgcGxlYXNlIl19LHsibGljZW5zZVRleHRzIjpbIkNvbW1vbiBQdWJsaWMgQXR0cmlidXRpb24gTGljZW5zZSBWZXJzaW9uIDEuMCAoQ1BBTClcblxuICAgMS4gXCJEZWZpbml0aW9uc1wiXG5cbiAgICAgIDEuMC4xIFwiQ29tbWVyY2lhbCBVc2VcIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUgQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LlxuXG4gICAgICAxLjEgXCJDb250cmlidXRvclwiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4yIFwiQ29udHJpYnV0b3IgVmVyc2lvblwiIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci5cblxuICAgICAgMS4zIFwiQ292ZXJlZCBDb2RlXCIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi5cblxuICAgICAgMS40IFwiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtXCIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuXG5cbiAgICAgIDEuNSBcIkV4ZWN1dGFibGVcIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS5cblxuICAgICAgMS42IFwiSW5pdGlhbCBEZXZlbG9wZXJcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuXG5cbiAgICAgIDEuNyBcIkxhcmdlciBXb3JrXCIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS44IFwiTGljZW5zZVwiIG1lYW5zIHRoaXMgZG9jdW1lbnQuXG5cbiAgICAgIDEuOC4xIFwiTGljZW5zYWJsZVwiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLlxuXG4gICAgICAxLjkgXCJNb2RpZmljYXRpb25zXCIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6XG5cbiAgICAgICAgIEEuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgICAgIEIuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIDEuMTAgXCJPcmlnaW5hbCBDb2RlXCIgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgMS4xMC4xIFwiUGF0ZW50IENsYWltc1wiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLlxuXG4gICAgICAxLjExIFwiU291cmNlIENvZGVcIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS5cblxuICAgICAgMS4xMiBcIllvdVwiIChvciBcIllvdXJcIikgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgXCJZb3VcIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJjb250cm9sXCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgIDIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuXG5cbiAgICAgIDIuMSBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuXG5cbiAgICAgIFRoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6XG5cbiAgICAgICAgIChhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZFxuXG4gICAgICAgICAoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuXG5cbiAgICAgICAgIChjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgICAgIChkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuXG5cbiAgICAgIDIuMiBDb250cmlidXRvciBHcmFudC5cblxuICAgICAgU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2VcblxuICAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuXG5cbiAgICAgICAgIChjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgICAgICAgIChkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci5cblxuICAgMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLlxuXG4gICAgICAzLjEgQXBwbGljYXRpb24gb2YgTGljZW5zZS5cblxuICAgICAgVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuXG5cbiAgICAgIDMuMiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuXG5cbiAgICAgIEFueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LlxuXG4gICAgICAzLjMgRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICAgICAzLjQgSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnNcblxuICAgICAgICAgKGEpIFRoaXJkIFBhcnR5IENsYWltcy4gSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5J3MgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvciB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCBcIkxFR0FMXCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC5cblxuICAgICAgICAgKGIpIENvbnRyaWJ1dG9yIEFQSXMuIElmIENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS5cblxuICAgICAgICAgKGMpIFJlcHJlc2VudGF0aW9ucy4gQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3IncyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAzLjUgUmVxdWlyZWQgTm90aWNlcy5cblxuICAgICAgWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgb3Igb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci5cblxuICAgICAgMy42IERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLlxuXG4gICAgICBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjcgTGFyZ2VyIFdvcmtzLlxuXG4gICAgICBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgIDQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi5cblxuICAgSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC5cblxuICAgNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLlxuXG4gICA2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS5cblxuICAgICAgNi4xIE5ldyBWZXJzaW9ucy5cblxuICAgICAgU29jaWFsdGV4dCwgSW5jLiAoXCJTb2NpYWx0ZXh0XCIpIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci5cblxuICAgICAgNi4yIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuXG5cbiAgICAgIE9uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBTb2NpYWx0ZXh0LiBObyBvbmUgb3RoZXIgdGhhbiBTb2NpYWx0ZXh0IGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgNi4zIERlcml2YXRpdmUgV29ya3MuXG5cbiAgICAgIElmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzIFwiU29jaWFsdGV4dFwiLCBcIkNQQUxcIiBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIENQQUwuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKVxuXG4gICA3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLlxuXG4gICBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIE9SSUdJTkFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuXG5cbiAgIDguIFRFUk1JTkFUSU9OLlxuXG4gICAgICA4LjEgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLlxuXG4gICAgICA4LjIgSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzIFwiUGFydGljaXBhbnRcIikgYWxsZWdpbmcgdGhhdDpcblxuICAgICAgICAgKGEpIHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0byB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzIG9mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YgdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS5cblxuICAgICAgICAgKGIpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LlxuXG4gICAgICA4LjMgSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS5cblxuICAgICAgOC40IEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi5cblxuICAgOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuXG5cbiAgIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBPUklHSU5BTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICAxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy5cblxuICAgVGhlIENvdmVyZWQgQ29kZSBpcyBhIFwiY29tbWVyY2lhbCBpdGVtLFwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiBcImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmVcIiBhbmQgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sXCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLlxuXG4gICAxMS4gTUlTQ0VMTEFORU9VUy5cblxuICAgVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuXG5cbiAgIDEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLlxuXG4gICBBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LlxuXG4gICAxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS5cblxuICAgSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzIE11bHRpcGxlLUxpY2Vuc2VkLiBNdWx0aXBsZS1MaWNlbnNlZCBtZWFucyB0aGF0IHRoZSBJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgWW91ciBjaG9pY2Ugb2YgdGhlIENQQUwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS5cblxuICAgMTQuIEFERElUSU9OQUwgVEVSTTogQVRUUklCVVRJT05cblxuICAgICAgKGEpIEFzIGEgbW9kZXN0IGF0dHJpYnV0aW9uIHRvIHRoZSBvcmdhbml6ZXIgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoZSBPcmlnaW5hbCBDb2RlIChcIk9yaWdpbmFsIERldmVsb3BlclwiKSwgaW4gdGhlIGhvcGUgdGhhdCBpdHMgcHJvbW90aW9uYWwgdmFsdWUgbWF5IGhlbHAganVzdGlmeSB0aGUgdGltZSwgbW9uZXkgYW5kIGVmZm9ydCBpbnZlc3RlZCBpbiB3cml0aW5nIHRoZSBPcmlnaW5hbCBDb2RlLCB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIG1heSBpbmNsdWRlIGluIEV4aGliaXQgQiAoXCJBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvblwiKSBhIHJlcXVpcmVtZW50IHRoYXQgZWFjaCB0aW1lIGFuIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIG9yIGEgTGFyZ2VyIFdvcmsgaXMgbGF1bmNoZWQgb3IgaW5pdGlhbGx5IHJ1biAod2hpY2ggaW5jbHVkZXMgaW5pdGlhdGluZyBhIHNlc3Npb24pLCBhIHByb21pbmVudCBkaXNwbGF5IG9mIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIncyBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiAoYXMgZGVmaW5lZCBiZWxvdykgbXVzdCBvY2N1ciBvbiB0aGUgZ3JhcGhpYyB1c2VyIGludGVyZmFjZSBlbXBsb3llZCBieSB0aGUgZW5kIHVzZXIgdG8gYWNjZXNzIHN1Y2ggQ292ZXJlZCBDb2RlICh3aGljaCBtYXkgaW5jbHVkZSBkaXNwbGF5IG9uIGEgc3BsYXNoIHNjcmVlbiksIGlmIGFueS4gVGhlIHNpemUgb2YgdGhlIGdyYXBoaWMgaW1hZ2Ugc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgb3RoZXIgZWxlbWVudHMgb2YgdGhlIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uLiBJZiB0aGUgYWNjZXNzIGJ5IHRoZSBlbmQgdXNlciB0byB0aGUgRXhlY3V0YWJsZSBhbmQgU291cmNlIENvZGUgZG9lcyBub3QgY3JlYXRlIGEgZ3JhcGhpYyB1c2VyIGludGVyZmFjZSBmb3IgYWNjZXNzIHRvIHRoZSBDb3ZlcmVkIENvZGUsIHRoaXMgb2JsaWdhdGlvbiBzaGFsbCBub3QgYXBwbHkuIElmIHRoZSBPcmlnaW5hbCBDb2RlIGRpc3BsYXlzIHN1Y2ggQXR0cmlidXRpb24gSW5mb3JtYXRpb24gaW4gYSBwYXJ0aWN1bGFyIGZvcm0gKHN1Y2ggYXMgaW4gdGhlIGZvcm0gb2YgYSBzcGxhc2ggc2NyZWVuLCBub3RpY2UgYXQgbG9naW4sIGFuIFwiYWJvdXRcIiBkaXNwbGF5LCBvciBkZWRpY2F0ZWQgYXR0cmlidXRpb24gYXJlYSBvbiB1c2VyIGludGVyZmFjZSBzY3JlZW5zKSwgY29udGludWVkIHVzZSBvZiBzdWNoIGZvcm0gZm9yIHRoYXQgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gaXMgb25lIHdheSBvZiBtZWV0aW5nIHRoaXMgcmVxdWlyZW1lbnQgZm9yIG5vdGljZS5cblxuICAgICAgKGIpIEF0dHJpYnV0aW9uIGluZm9ybWF0aW9uIG1heSBvbmx5IGluY2x1ZGUgYSBjb3B5cmlnaHQgbm90aWNlLCBhIGJyaWVmIHBocmFzZSwgZ3JhcGhpYyBpbWFnZSBhbmQgYSBVUkwgKFwiQXR0cmlidXRpb24gSW5mb3JtYXRpb25cIikgYW5kIGlzIHN1YmplY3QgdG8gdGhlIEF0dHJpYnV0aW9uIExpbWl0cyBhcyBkZWZpbmVkIGJlbG93LiBGb3IgdGhlc2UgcHVycG9zZXMsIHByb21pbmVudCBzaGFsbCBtZWFuIGRpc3BsYXkgZm9yIHN1ZmZpY2llbnQgZHVyYXRpb24gdG8gZ2l2ZSByZWFzb25hYmxlIG5vdGljZSB0byB0aGUgdXNlciBvZiB0aGUgaWRlbnRpdHkgb2YgdGhlIE9yaWdpbmFsIERldmVsb3BlciBhbmQgdGhhdCBpZiBZb3UgaW5jbHVkZSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBvciBzaW1pbGFyIGluZm9ybWF0aW9uIGZvciBvdGhlciBwYXJ0aWVzLCBZb3UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gZm9yIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgc2hhbGwgYmUgbm8gbGVzcyBwcm9taW5lbnQgdGhhbiBzdWNoIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG9yIHNpbWlsYXIgaW5mb3JtYXRpb24gZm9yIHRoZSBvdGhlciBwYXJ0eS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIG1heSBjaG9vc2UgdG8gc3BlY2lmeSBpbiBFeGhpYml0IEIgYmVsb3cgdGhhdCB0aGUgYWJvdmUgYXR0cmlidXRpb24gcmVxdWlyZW1lbnQgb25seSBhcHBsaWVzIHRvIGFuIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIHJlc3VsdGluZyBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBNb2RpZmljYXRpb24sIGJ1dCBub3QgYSBMYXJnZXIgV29yay4gVGhlIGludGVudCBpcyB0byBwcm92aWRlIGZvciByZWFzb25hYmx5IG1vZGVzdCBhdHRyaWJ1dGlvbiwgdGhlcmVmb3JlIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgY2Fubm90IHJlcXVpcmUgdGhhdCBZb3UgZGlzcGxheSwgYXQgYW55IHRpbWUsIG1vcmUgdGhhbiB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFzIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uOiAoYSkgYSBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyOyAoYikgYSB3b3JkIG9yIG9uZSBwaHJhc2UgKG5vdCBleGNlZWRpbmcgMTAgd29yZHMpOyAoYykgb25lIGdyYXBoaWMgaW1hZ2UgcHJvdmlkZWQgYnkgdGhlIE9yaWdpbmFsIERldmVsb3BlcjsgYW5kIChkKSBhIFVSTCAoY29sbGVjdGl2ZWx5LCB0aGUgXCJBdHRyaWJ1dGlvbiBMaW1pdHNcIikuXG5cbiAgICAgIChjKSBJZiBFeGhpYml0IEIgZG9lcyBub3QgaW5jbHVkZSBhbnkgQXR0cmlidXRpb24gSW5mb3JtYXRpb24sIHRoZW4gdGhlcmUgYXJlIG5vIHJlcXVpcmVtZW50cyBmb3IgWW91IHRvIGRpc3BsYXkgYW55IEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG9mIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIuXG5cbiAgICAgIChkKSBZb3UgYWNrbm93bGVkZ2UgdGhhdCBhbGwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBhbmQvb3IgdHJhZGUgbmFtZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gZGlzdHJpYnV0ZWQgd2l0aCB0aGUgQ292ZXJlZCBDb2RlIGFyZSB0aGUgZXhjbHVzaXZlIHByb3BlcnR5IG9mIHRoZWlyIG93bmVycyBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZWlyIG93bmVycywgb3IgdW5kZXIgY2lyY3Vtc3RhbmNlcyBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGxhdyBvciBhcyBleHByZXNzbHkgc2V0IG91dCBpbiB0aGlzIExpY2Vuc2UuXG5cbiAgIDE1LiBBRERJVElPTkFMIFRFUk06IE5FVFdPUksgVVNFLlxuXG4gICBUaGUgdGVybSBcIkV4dGVybmFsIERlcGxveW1lbnRcIiBtZWFucyB0aGUgdXNlLCBkaXN0cmlidXRpb24sIG9yIGNvbW11bmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBpbiBhbnkgd2F5IHN1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aG9zZSB3b3JrcyBhcmUgZGlzdHJpYnV0ZWQgb3IgY29tbXVuaWNhdGVkIHRvIHRob3NlIHBlcnNvbnMgb3IgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgbmV0d29yay4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdSBtdXN0IHRyZWF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIGFzIGEgZGlzdHJpYnV0aW9uIHVuZGVyIHNlY3Rpb24gMy4xIGFuZCBtYWtlIFNvdXJjZSBDb2RlIGF2YWlsYWJsZSB1bmRlciBTZWN0aW9uIDMuMi4gRVhISUJJVCBBLiBDb21tb24gUHVibGljIEF0dHJpYnV0aW9uIExpY2Vuc2UgVmVyc2lvbiAxLjAuXG5cblwiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgQ29tbW9uIFB1YmxpYyBBdHRyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBfX19fX19fX19fX19fIC4gVGhlIExpY2Vuc2UgaXMgYmFzZWQgb24gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgYnV0IFNlY3Rpb25zIDE0IGFuZCAxNSBoYXZlIGJlZW4gYWRkZWQgdG8gY292ZXIgdXNlIG9mIHNvZnR3YXJlIG92ZXIgYSBjb21wdXRlciBuZXR3b3JrIGFuZCBwcm92aWRlIGZvciBsaW1pdGVkIGF0dHJpYnV0aW9uIGZvciB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyLiBJbiBhZGRpdGlvbiwgRXhoaWJpdCBBIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBFeGhpYml0IEIuXG5cblNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cblRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX18gLlxuXG5UaGUgT3JpZ2luYWwgRGV2ZWxvcGVyIGlzIG5vdCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGlzIF9fX19fX19fX18gLiBJZiBsZWZ0IGJsYW5rLCB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIGlzIHRoZSBJbml0aWFsIERldmVsb3Blci5cblxuVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fXyAuIEFsbCBwb3J0aW9ucyBvZiB0aGUgY29kZSB3cml0dGVuIGJ5IF9fX19fX19fX19fIGFyZSBDb3B5cmlnaHQgKGMpIF9fX19fIC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuQ29udHJpYnV0b3IgX19fX19fX19fX19fX19fX19fX19fXyAuXG5cbkFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBfX19fXyBsaWNlbnNlICh0aGUgW19fX10gTGljZW5zZSksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLlxuXG5JZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgW19fX19dIExpY2Vuc2UgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIENQQUwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dIExpY2Vuc2UuIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBDUEFMIG9yIHRoZSBbX19fXSBMaWNlbnNlLlwiXG5cbltOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YgdGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl1cblxuRVhISUJJVCBCLiBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvblxuXG5BdHRyaWJ1dGlvbiBDb3B5cmlnaHQgTm90aWNlOiBfX19fX19fX19fX19fX19fX19fX19fX1xuXG5BdHRyaWJ1dGlvbiBQaHJhc2UgKG5vdCBleGNlZWRpbmcgMTAgd29yZHMpOiBfX19fX19fX19fX19fX19fX19fX19fX1xuXG5BdHRyaWJ1dGlvbiBVUkw6IF9fX19fX19fX19fX19fX19fX19fX19fXG5cbkdyYXBoaWMgSW1hZ2UgYXMgcHJvdmlkZWQgaW4gdGhlIENvdmVyZWQgQ29kZSwgaWYgYW55LlxuXG5EaXNwbGF5IG9mIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGlzIFtyZXF1aXJlZC9ub3QgcmVxdWlyZWRdIGluIExhcmdlciBXb3JrcyB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgQ1BBTCBhcyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhlIENQQUwuIl0sImxpY2Vuc2VJZHMiOlsiQ1BBTC0xLjAiXSwia2V5d29yZHMiOlsiMSAwIGNwYWwiLCIwIGNwYWwgMSIsImNwYWwgMSBkZWZpbml0aW9ucyIsIm5ldyB2ZXJzaW9ucyBzb2NpYWx0ZXh0IiwidmVyc2lvbnMgc29jaWFsdGV4dCBpbmMiLCJzb2NpYWx0ZXh0IGluYyBzb2NpYWx0ZXh0IiwiaW5jIHNvY2lhbHRleHQgbWF5Iiwic29jaWFsdGV4dCBtYXkgcHVibGlzaCIsInB1Ymxpc2hlZCBieSBzb2NpYWx0ZXh0IiwiYnkgc29jaWFsdGV4dCBubyIsInNvY2lhbHRleHQgbm8gb25lIiwib3RoZXIgdGhhbiBzb2NpYWx0ZXh0IiwidGhhbiBzb2NpYWx0ZXh0IGhhcyIsInNvY2lhbHRleHQgaGFzIHRoZSIsInRoZSBwaHJhc2VzIHNvY2lhbHRleHQiLCJwaHJhc2VzIHNvY2lhbHRleHQgY3BhbCIsInNvY2lhbHRleHQgY3BhbCBvciIsImNwYWwgb3IgYW55IiwiZnJvbSB0aGUgY3BhbCIsInRoZSBjcGFsIGZpbGxpbmciLCJjcGFsIGZpbGxpbmcgaW4iLCJvcmlnaW5hbCBkZXZlbG9wZXIgb3JpZ2luYWwiLCJvcmlnaW5hbCBkZXZlbG9wZXIgYW55IiwiYSAxNCBhZGRpdGlvbmFsIiwiMTQgYWRkaXRpb25hbCB0ZXJtIiwiYWRkaXRpb25hbCB0ZXJtIGF0dHJpYnV0aW9uIiwidGVybSBhdHRyaWJ1dGlvbiBhIiwiYXR0cmlidXRpb24gYSBhcyIsInRvIHRoZSBvcmdhbml6ZXIiLCJ0aGUgb3JnYW5pemVyIG9mIiwib3JnYW5pemVyIG9mIHRoZSIsIm9yaWdpbmFsIGNvZGUgb3JpZ2luYWwiLCJjb2RlIG9yaWdpbmFsIGRldmVsb3BlciIsIndyaXRpbmcgdGhlIG9yaWdpbmFsIiwiZGV2ZWxvcGVyIG1heSBpbmNsdWRlIiwiaW5jbHVkZSBpbiBleGhpYml0IiwiaW5mb3JtYXRpb24gYSByZXF1aXJlbWVudCIsIm9yIGEgbGFyZ2VyIiwid29yayBpcyBsYXVuY2hlZCIsImxhdW5jaGVkIG9yIGluaXRpYWxseSIsIm9yIGluaXRpYWxseSBydW4iLCJpbml0aWFsbHkgcnVuIHdoaWNoIiwicnVuIHdoaWNoIGluY2x1ZGVzIiwid2hpY2ggaW5jbHVkZXMgaW5pdGlhdGluZyIsImluY2x1ZGVzIGluaXRpYXRpbmcgYSIsImluaXRpYXRpbmcgYSBzZXNzaW9uIiwiYSBzZXNzaW9uIGEiLCJzZXNzaW9uIGEgcHJvbWluZW50Iiwib3JpZ2luYWwgZGV2ZWxvcGVyIHMiLCJkZXZlbG9wZXIgcyBhdHRyaWJ1dGlvbiIsImF0dHJpYnV0aW9uIGluZm9ybWF0aW9uIGFzIiwiZGVmaW5lZCBiZWxvdyBtdXN0IiwiYmVsb3cgbXVzdCBvY2N1ciIsIm11c3Qgb2NjdXIgb24iLCJvY2N1ciBvbiB0aGUiLCJvbiB0aGUgZ3JhcGhpYyIsInRoZSBncmFwaGljIHVzZXIiLCJ1c2VyIGludGVyZmFjZSBlbXBsb3llZCIsImludGVyZmFjZSBlbXBsb3llZCBieSIsImVtcGxveWVkIGJ5IHRoZSIsInVzZXIgdG8gYWNjZXNzIiwidG8gYWNjZXNzIHN1Y2giLCJhY2Nlc3Mgc3VjaCBjb3ZlcmVkIiwiY29kZSB3aGljaCBtYXkiLCJ3aGljaCBtYXkgaW5jbHVkZSIsIm1heSBpbmNsdWRlIGRpc3BsYXkiLCJpbmNsdWRlIGRpc3BsYXkgb24iLCJkaXNwbGF5IG9uIGEiLCJvbiBhIHNwbGFzaCIsInNwbGFzaCBzY3JlZW4gaWYiLCJzY3JlZW4gaWYgYW55IiwiYW55IHRoZSBzaXplIiwib2YgdGhlIGdyYXBoaWMiLCJ0aGUgZ3JhcGhpYyBpbWFnZSIsImdyYXBoaWMgaW1hZ2Ugc2hvdWxkIiwiaW1hZ2Ugc2hvdWxkIGJlIiwic2hvdWxkIGJlIGNvbnNpc3RlbnQiLCJ3aXRoIHRoZSBzaXplIiwidGhlIG90aGVyIGVsZW1lbnRzIiwib3RoZXIgZWxlbWVudHMgb2YiLCJpZiB0aGUgYWNjZXNzIiwidGhlIGFjY2VzcyBieSIsImFjY2VzcyBieSB0aGUiLCJ0byB0aGUgZXhlY3V0YWJsZSIsInNvdXJjZSBjb2RlIGRvZXMiLCJjcmVhdGUgYSBncmFwaGljIiwiYSBncmFwaGljIHVzZXIiLCJ1c2VyIGludGVyZmFjZSBmb3IiLCJpbnRlcmZhY2UgZm9yIGFjY2VzcyIsImNvdmVyZWQgY29kZSB0aGlzIiwiY29kZSB0aGlzIG9ibGlnYXRpb24iLCJ0aGlzIG9ibGlnYXRpb24gc2hhbGwiLCJvYmxpZ2F0aW9uIHNoYWxsIG5vdCIsIm9yaWdpbmFsIGNvZGUgZGlzcGxheXMiLCJjb2RlIGRpc3BsYXlzIHN1Y2giLCJkaXNwbGF5cyBzdWNoIGF0dHJpYnV0aW9uIiwiYXR0cmlidXRpb24gaW5mb3JtYXRpb24gaW4iLCJhIHBhcnRpY3VsYXIgZm9ybSIsInBhcnRpY3VsYXIgZm9ybSBzdWNoIiwib2YgYSBzcGxhc2giLCJzcGxhc2ggc2NyZWVuIG5vdGljZSIsInNjcmVlbiBub3RpY2UgYXQiLCJub3RpY2UgYXQgbG9naW4iLCJhdCBsb2dpbiBhbiIsImxvZ2luIGFuIGFib3V0IiwiYW4gYWJvdXQgZGlzcGxheSIsImFib3V0IGRpc3BsYXkgb3IiLCJkaXNwbGF5IG9yIGRlZGljYXRlZCIsIm9yIGRlZGljYXRlZCBhdHRyaWJ1dGlvbiIsImRlZGljYXRlZCBhdHRyaWJ1dGlvbiBhcmVhIiwiYXR0cmlidXRpb24gYXJlYSBvbiIsImFyZWEgb24gdXNlciIsIm9uIHVzZXIgaW50ZXJmYWNlIiwidXNlciBpbnRlcmZhY2Ugc2NyZWVucyIsImludGVyZmFjZSBzY3JlZW5zIGNvbnRpbnVlZCIsInNjcmVlbnMgY29udGludWVkIHVzZSIsImNvbnRpbnVlZCB1c2Ugb2YiLCJvZiBzdWNoIGZvcm0iLCJzdWNoIGZvcm0gZm9yIiwiZm9ybSBmb3IgdGhhdCIsImZvciB0aGF0IGF0dHJpYnV0aW9uIiwidGhhdCBhdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbiIsImluZm9ybWF0aW9uIGlzIG9uZSIsImlzIG9uZSB3YXkiLCJvbmUgd2F5IG9mIiwid2F5IG9mIG1lZXRpbmciLCJvZiBtZWV0aW5nIHRoaXMiLCJtZWV0aW5nIHRoaXMgcmVxdWlyZW1lbnQiLCJ0aGlzIHJlcXVpcmVtZW50IGZvciIsInJlcXVpcmVtZW50IGZvciBub3RpY2UiLCJmb3Igbm90aWNlIGIiLCJub3RpY2UgYiBhdHRyaWJ1dGlvbiIsImF0dHJpYnV0aW9uIGluZm9ybWF0aW9uIG1heSIsImluZm9ybWF0aW9uIG1heSBvbmx5IiwibWF5IG9ubHkgaW5jbHVkZSIsImEgYnJpZWYgcGhyYXNlIiwiYnJpZWYgcGhyYXNlIGdyYXBoaWMiLCJwaHJhc2UgZ3JhcGhpYyBpbWFnZSIsImdyYXBoaWMgaW1hZ2UgYW5kIiwiaW1hZ2UgYW5kIGEiLCJhbmQgYSB1cmwiLCJhIHVybCBhdHRyaWJ1dGlvbiIsInVybCBhdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbiIsImF0dHJpYnV0aW9uIGluZm9ybWF0aW9uIGFuZCIsImluZm9ybWF0aW9uIGFuZCBpcyIsImFuZCBpcyBzdWJqZWN0IiwiYXR0cmlidXRpb24gbGltaXRzIGFzIiwibGltaXRzIGFzIGRlZmluZWQiLCJiZWxvdyBmb3IgdGhlc2UiLCJ0aGVzZSBwdXJwb3NlcyBwcm9taW5lbnQiLCJwdXJwb3NlcyBwcm9taW5lbnQgc2hhbGwiLCJwcm9taW5lbnQgc2hhbGwgbWVhbiIsInNoYWxsIG1lYW4gZGlzcGxheSIsIm1lYW4gZGlzcGxheSBmb3IiLCJkaXNwbGF5IGZvciBzdWZmaWNpZW50IiwiZm9yIHN1ZmZpY2llbnQgZHVyYXRpb24iLCJzdWZmaWNpZW50IGR1cmF0aW9uIHRvIiwiZHVyYXRpb24gdG8gZ2l2ZSIsInRvIGdpdmUgcmVhc29uYWJsZSIsImdpdmUgcmVhc29uYWJsZSBub3RpY2UiLCJyZWFzb25hYmxlIG5vdGljZSB0byIsIm9mIHRoZSBpZGVudGl0eSIsInRoZSBpZGVudGl0eSBvZiIsImlkZW50aXR5IG9mIHRoZSIsImFuZCB0aGF0IGlmIiwieW91IGluY2x1ZGUgYXR0cmlidXRpb24iLCJpbmNsdWRlIGF0dHJpYnV0aW9uIGluZm9ybWF0aW9uIiwiZm9yIG90aGVyIHBhcnRpZXMiLCJvdGhlciBwYXJ0aWVzIHlvdSIsInBhcnRpZXMgeW91IG11c3QiLCJ0aGF0IHRoZSBhdHRyaWJ1dGlvbiIsImF0dHJpYnV0aW9uIGluZm9ybWF0aW9uIGZvciIsIm9yaWdpbmFsIGRldmVsb3BlciBzaGFsbCIsImRldmVsb3BlciBzaGFsbCBiZSIsImJlIG5vIGxlc3MiLCJubyBsZXNzIHByb21pbmVudCIsImxlc3MgcHJvbWluZW50IHRoYW4iLCJwcm9taW5lbnQgdGhhbiBzdWNoIiwidGhhbiBzdWNoIGF0dHJpYnV0aW9uIiwib3RoZXIgcGFydHkgZm9yIiwicGFydHkgZm9yIGdyZWF0ZXIiLCJjZXJ0YWludHkgdGhlIG9yaWdpbmFsIiwiZGV2ZWxvcGVyIG1heSBjaG9vc2UiLCJjaG9vc2UgdG8gc3BlY2lmeSIsInRvIHNwZWNpZnkgaW4iLCJzcGVjaWZ5IGluIGV4aGliaXQiLCJleGhpYml0IGIgYmVsb3ciLCJiIGJlbG93IHRoYXQiLCJiZWxvdyB0aGF0IHRoZSIsInNvdXJjZSBjb2RlIHJlc3VsdGluZyIsImNvZGUgcmVzdWx0aW5nIGZyb20iLCJhbnkgbW9kaWZpY2F0aW9uIGJ1dCIsIm1vZGlmaWNhdGlvbiBidXQgbm90Iiwibm90IGEgbGFyZ2VyIiwibGFyZ2VyIHdvcmsgdGhlIiwid29yayB0aGUgaW50ZW50IiwidGhlcmVmb3JlIHRoZSBvcmlnaW5hbCIsIm9yaWdpbmFsIGRldmVsb3BlciBjYW5ub3QiLCJkZXZlbG9wZXIgY2Fubm90IHJlcXVpcmUiLCJjYW5ub3QgcmVxdWlyZSB0aGF0Il19LHsibGljZW5zZVRleHRzIjpbIkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMFxuXG5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ09NTU9OIFBVQkxJQyBMSUNFTlNFIChcIkFHUkVFTUVOVFwiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULiAxLlxuXG5ERUZJTklUSU9OU1xuXG5cIkNvbnRyaWJ1dGlvblwiIG1lYW5zOlxuXG4gICBhKSBpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kXG5cbiAgIGIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjpcblxuICAgICAgaSkgY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kXG5cbiAgICAgIGlpKSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07XG5cbndoZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yIGlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgUHJvZ3JhbS5cblxuXCJDb250cmlidXRvclwiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uXG5cblwiTGljZW5zZWQgUGF0ZW50cyBcIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLlxuXG5cIlByb2dyYW1cIiBtZWFucyB0aGUgQ29udHJpYnV0aW9ucyBkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuXG5cblwiUmVjaXBpZW50XCIgbWVhbnMgYW55b25lIHdobyByZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuIDIuXG5cbkdSQU5UIE9GIFJJR0hUU1xuXG4gICBhKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS5cblxuICAgYikgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLlxuXG4gICBjKSBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLlxuXG4gICBkKSBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LiAzLlxuXG5SRVFVSVJFTUVOVFNcblxuQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OlxuXG4gICBhKSBpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kXG5cbiAgIGIpIGl0cyBsaWNlbnNlIGFncmVlbWVudDpcblxuICAgICAgaSkgZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTtcblxuICAgICAgaWkpIGVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzO1xuXG4gICAgICBpaWkpIHN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZFxuXG4gICAgICBpdikgc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZCBpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS5cblxuV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOlxuXG4gICBhKSBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmRcblxuICAgYikgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uXG5cbiAgIENvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkgY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS5cblxuICAgRWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDQuXG5cbkNPTU1FUkNJQUwgRElTVFJJQlVUSU9OXG5cbkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heSBhY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKFwiQ29tbWVyY2lhbCBDb250cmlidXRvclwiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yIChcIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yXCIpIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSBcIkxvc3Nlc1wiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyIHRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZCBhbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuXG5cbkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEgQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UgY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYSBjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLiA1LlxuXG5OTyBXQVJSQU5UWVxuXG5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDYuXG5cbkRJU0NMQUlNRVIgT0YgTElBQklMSVRZXG5cbkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIDcuXG5cbkdFTkVSQUxcblxuSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuXG5cbklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYSBDb250cmlidXRvciB3aXRoIHJlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBzb2Z0d2FyZSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCksIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgdG8gc3VjaCBSZWNpcGllbnQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gSW4gYWRkaXRpb24sIGlmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuXG5cbkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLCBSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLlxuXG5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMgY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50IFN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBJQk0gaXMgdGhlIGluaXRpYWwgQWdyZWVtZW50IFN0ZXdhcmQuIElCTSBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0byBzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLlxuXG5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uIl0sImxpY2Vuc2VJZHMiOlsiQ1BMLTEuMCJdLCJrZXl3b3JkcyI6WyJvZiB0aGlzIGNvbW1vbiIsInRoaXMgY29tbW9uIHB1YmxpYyIsInRoaXMgYWdyZWVtZW50IGlibSIsImFncmVlbWVudCBpYm0gaXMiLCJpYm0gaXMgdGhlIiwiYWdyZWVtZW50IHN0ZXdhcmQgaWJtIiwic3Rld2FyZCBpYm0gbWF5IiwiaWJtIG1heSBhc3NpZ24iLCJ0ZXJtcyBvZiB0aGlzIGNvbW1vbiIsIm9mIHRoaXMgY29tbW9uIHB1YmxpYyIsInRoaXMgY29tbW9uIHB1YmxpYyBsaWNlbnNlIiwiY29tbW9uIHB1YmxpYyBsaWNlbnNlIGFncmVlbWVudCIsIm1vZGlmeSB0aGlzIGFncmVlbWVudCBpYm0iLCJ0aGlzIGFncmVlbWVudCBpYm0gaXMiLCJhZ3JlZW1lbnQgaWJtIGlzIHRoZSIsImlibSBpcyB0aGUgaW5pdGlhbCIsImluaXRpYWwgYWdyZWVtZW50IHN0ZXdhcmQgaWJtIiwiYWdyZWVtZW50IHN0ZXdhcmQgaWJtIG1heSIsInN0ZXdhcmQgaWJtIG1heSBhc3NpZ24iLCJpYm0gbWF5IGFzc2lnbiB0aGUiLCJ0aGUgdGVybXMgb2YgdGhpcyBjb21tb24iLCJ0ZXJtcyBvZiB0aGlzIGNvbW1vbiBwdWJsaWMiLCJvZiB0aGlzIGNvbW1vbiBwdWJsaWMgbGljZW5zZSIsInRoaXMgY29tbW9uIHB1YmxpYyBsaWNlbnNlIGFncmVlbWVudCIsImNvbW1vbiBwdWJsaWMgbGljZW5zZSBhZ3JlZW1lbnQgYW55IiwidG8gbW9kaWZ5IHRoaXMgYWdyZWVtZW50IGlibSIsIm1vZGlmeSB0aGlzIGFncmVlbWVudCBpYm0gaXMiLCJ0aGlzIGFncmVlbWVudCBpYm0gaXMgdGhlIiwiYWdyZWVtZW50IGlibSBpcyB0aGUgaW5pdGlhbCIsImlibSBpcyB0aGUgaW5pdGlhbCBhZ3JlZW1lbnQiLCJ0aGUgaW5pdGlhbCBhZ3JlZW1lbnQgc3Rld2FyZCBpYm0iLCJpbml0aWFsIGFncmVlbWVudCBzdGV3YXJkIGlibSBtYXkiLCJhZ3JlZW1lbnQgc3Rld2FyZCBpYm0gbWF5IGFzc2lnbiIsInN0ZXdhcmQgaWJtIG1heSBhc3NpZ24gdGhlIiwiaWJtIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5Il19LHsibGljZW5zZVRleHRzIjpbIlRoZSBDb2RlIFByb2plY3QgT3BlbiBMaWNlbnNlIChDUE9MKSAxLjAyXG5cblByZWFtYmxlXG5cblRoaXMgTGljZW5zZSBnb3Zlcm5zIFlvdXIgdXNlIG9mIHRoZSBXb3JrLiBUaGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gYWxsb3cgZGV2ZWxvcGVycyB0byB1c2UgdGhlIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIEZpbGVzIHByb3ZpZGVkIGFzIHBhcnQgb2YgdGhlIFdvcmsgaW4gYW55IGFwcGxpY2F0aW9uIGluIGFueSBmb3JtLlxuXG5UaGUgbWFpbiBwb2ludHMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgYXJlOlxuXG4gICAtIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIEZpbGVzIGNhbiBiZSB1c2VkIGluIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zO1xuXG4gICAtIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIEZpbGVzIGNhbiBiZSByZWRpc3RyaWJ1dGVkOyBhbmRcblxuICAgLSBTb3VyY2UgQ29kZSBjYW4gYmUgbW9kaWZpZWQgdG8gY3JlYXRlIGRlcml2YXRpdmUgd29ya3MuXG5cbiAgIC0gTm8gY2xhaW0gb2Ygc3VpdGFiaWxpdHksIGd1YXJhbnRlZSwgb3IgYW55IHdhcnJhbnR5IHdoYXRzb2V2ZXIgaXMgcHJvdmlkZWQuIFRoZSBzb2Z0d2FyZSBpcyBwcm92aWRlZCBcImFzLWlzXCIuXG5cbiAgIC0gVGhlIEFydGljbGUgYWNjb21wYW55aW5nIHRoZSBXb3JrIG1heSBub3QgYmUgZGlzdHJpYnV0ZWQgb3IgcmVwdWJsaXNoZWQgd2l0aG91dCB0aGUgQXV0aG9yJ3MgY29uc2VudFxuXG5UaGlzIExpY2Vuc2UgaXMgZW50ZXJlZCBiZXR3ZWVuIFlvdSwgdGhlIGluZGl2aWR1YWwgb3Igb3RoZXIgZW50aXR5IHJlYWRpbmcgb3Igb3RoZXJ3aXNlIG1ha2luZyB1c2Ugb2YgdGhlIFdvcmsgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhpcyBMaWNlbnNlIGFuZCB0aGUgaW5kaXZpZHVhbCBvciBvdGhlciBlbnRpdHkgd2hpY2ggb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgKFwiQXV0aG9yXCIpLlxuXG5MaWNlbnNlXG5cblRIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDT0RFIFBST0pFQ1QgT1BFTiBMSUNFTlNFIChcIkxJQ0VOU0VcIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELlxuXG5CWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRUlOLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgQVVUSE9SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRUlOIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gQUNDRVBUIEFORCBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLCBZT1UgQ0FOTk9UIE1BS0UgQU5ZIFVTRSBPRiBUSEUgV09SSy5cblxuICAgMS4gRGVmaW5pdGlvbnMuXG5cbiAgICAgIGEuIFwiQXJ0aWNsZXNcIiBtZWFucywgY29sbGVjdGl2ZWx5LCBhbGwgYXJ0aWNsZXMgd3JpdHRlbiBieSBBdXRob3Igd2hpY2ggZGVzY3JpYmVzIGhvdyB0aGUgU291cmNlIENvZGUgYW5kIEV4ZWN1dGFibGUgRmlsZXMgZm9yIHRoZSBXb3JrIG1heSBiZSB1c2VkIGJ5IGEgdXNlci5cblxuICAgICAgYi4gXCJBdXRob3JcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYy4gXCJEZXJpdmF0aXZlIFdvcmtcIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MuXG5cbiAgICAgIGQuIFwiRXhlY3V0YWJsZSBGaWxlc1wiIHJlZmVyIHRvIHRoZSBleGVjdXRhYmxlcywgYmluYXJ5IGZpbGVzLCBjb25maWd1cmF0aW9uIGFuZCBhbnkgcmVxdWlyZWQgZGF0YSBmaWxlcyBpbmNsdWRlZCBpbiB0aGUgV29yay5cblxuICAgICAgZS4gXCJQdWJsaXNoZXJcIiBtZWFucyB0aGUgcHJvdmlkZXIgb2YgdGhlIHdlYnNpdGUsIG1hZ2F6aW5lLCBDRC1ST00sIERWRCBvciBvdGhlciBtZWRpdW0gZnJvbSBvciBieSB3aGljaCB0aGUgV29yayBpcyBvYnRhaW5lZCBieSBZb3UuXG5cbiAgICAgIGYuIFwiU291cmNlIENvZGVcIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2Ygc291cmNlIGNvZGUgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMgdXNlZCB0byBjcmVhdGUgdGhlIEV4ZWN1dGFibGUgRmlsZXMuXG5cbiAgICAgIGcuIFwiU3RhbmRhcmQgVmVyc2lvblwiIHJlZmVycyB0byBzdWNoIGEgV29yayBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQsIG9yIGhhcyBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29uc2VudCBvZiB0aGUgQXV0aG9yLCBzdWNoIGNvbnNlbnQgYmVpbmcgaW4gdGhlIGZ1bGwgZGlzY3JldGlvbiBvZiB0aGUgQXV0aG9yLlxuXG4gICAgICBoLiBcIldvcmtcIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgZmlsZXMgZGlzdHJpYnV0ZWQgYnkgdGhlIFB1Ymxpc2hlciwgaW5jbHVkaW5nIHRoZSBTb3VyY2UgQ29kZSwgRXhlY3V0YWJsZSBGaWxlcywgYmluYXJpZXMsIGRhdGEgZmlsZXMsIGRvY3VtZW50YXRpb24sIHdoaXRlcGFwZXJzIGFuZCB0aGUgQXJ0aWNsZXMuXG5cbiAgICAgIGkuIFwiWW91XCIgaXMgeW91LCBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aXNoaW5nIHRvIHVzZSB0aGUgV29yayBhbmQgZXhlcmNpc2UgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAyLiBGYWlyIFVzZS9GYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmYWlyIGRlYWxpbmcsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy5cblxuICAgMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgQXV0aG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6XG5cbiAgICAgIGEuIFlvdSBtYXkgdXNlIHRoZSBzdGFuZGFyZCB2ZXJzaW9uIG9mIHRoZSBTb3VyY2UgQ29kZSBvciBFeGVjdXRhYmxlIEZpbGVzIGluIFlvdXIgb3duIGFwcGxpY2F0aW9ucy5cblxuICAgICAgYi4gWW91IG1heSBhcHBseSBidWcgZml4ZXMsIHBvcnRhYmlsaXR5IGZpeGVzIGFuZCBvdGhlciBtb2RpZmljYXRpb25zIG9idGFpbmVkIGZyb20gdGhlIFB1YmxpYyBEb21haW4gb3IgZnJvbSB0aGUgQXV0aG9yLiBBIFdvcmsgbW9kaWZpZWQgaW4gc3VjaCBhIHdheSBzaGFsbCBzdGlsbCBiZSBjb25zaWRlcmVkIHRoZSBzdGFuZGFyZCB2ZXJzaW9uIGFuZCB3aWxsIGJlIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjLiBZb3UgbWF5IG90aGVyd2lzZSBtb2RpZnkgWW91ciBjb3B5IG9mIHRoaXMgV29yayAoZXhjbHVkaW5nIHRoZSBBcnRpY2xlcykgaW4gYW55IHdheSB0byBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHByb3ZpZGVkIHRoYXQgWW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUgc3RhdGluZyBob3csIHdoZW4gYW5kIHdoZXJlIFlvdSBjaGFuZ2VkIHRoYXQgZmlsZS5cblxuICAgICAgZC4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBzdGFuZGFyZCB2ZXJzaW9uIG9mIHRoZSBFeGVjdXRhYmxlIEZpbGVzIGFuZCBTb3VyY2UgQ29kZSBvciBEZXJpdmF0aXZlIFdvcmsgaW4gYWdncmVnYXRlIHdpdGggb3RoZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpIHByb2dyYW1zIGFzIHBhcnQgb2YgYSBsYXJnZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbi5cblxuICAgICAgZS4gVGhlIEFydGljbGVzIGRpc2N1c3NpbmcgdGhlIFdvcmsgcHVibGlzaGVkIGluIGFueSBmb3JtIGJ5IHRoZSBhdXRob3IgbWF5IG5vdCBiZSBkaXN0cmlidXRlZCBvciByZXB1Ymxpc2hlZCB3aXRob3V0IHRoZSBBdXRob3IncyBjb25zZW50LiBUaGUgYXV0aG9yIHJldGFpbnMgY29weXJpZ2h0IHRvIGFueSBzdWNoIEFydGljbGVzLiBZb3UgbWF5IHVzZSB0aGUgRXhlY3V0YWJsZSBGaWxlcyBhbmQgU291cmNlIENvZGUgcHVyc3VhbnQgdG8gdGhpcyBMaWNlbnNlIGJ1dCB5b3UgbWF5IG5vdCByZXBvc3Qgb3IgcmVwdWJsaXNoIG9yIG90aGVyd2lzZSBkaXN0cmlidXRlIG9yIG1ha2UgYXZhaWxhYmxlIHRoZSBBcnRpY2xlcywgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIHRoZSBBdXRob3IuXG5cbiAgIEFueSBzdWJyb3V0aW5lcyBvciBtb2R1bGVzIHN1cHBsaWVkIGJ5IFlvdSBhbmQgbGlua2VkIGludG8gdGhlIFNvdXJjZSBDb2RlIG9yIEV4ZWN1dGFibGUgRmlsZXMgb2YgdGhpcyBXb3JrIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBXb3JrIGFuZCB3aWxsIG5vdCBiZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDQuIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggQXV0aG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmsuXG5cbiAgIDUuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcblxuICAgICAgYS4gWW91IGFncmVlIG5vdCB0byByZW1vdmUgYW55IG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyBhbmQgYXNzb2NpYXRlZCBkaXNjbGFpbWVycyB0aGF0IG1heSBhcHBlYXIgaW4gdGhlIFNvdXJjZSBDb2RlIG9yIEV4ZWN1dGFibGUgRmlsZXMuXG5cbiAgICAgIGIuIFlvdSBhZ3JlZSBub3QgdG8gYWR2ZXJ0aXNlIG9yIGluIGFueSB3YXkgaW1wbHkgdGhhdCB0aGlzIFdvcmsgaXMgYSBwcm9kdWN0IG9mIFlvdXIgb3duLlxuXG4gICAgICBjLiBUaGUgbmFtZSBvZiB0aGUgQXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBXb3JrIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiB0aGUgQXV0aG9yLlxuXG4gICAgICBkLiBZb3UgYWdyZWUgbm90IHRvIHNlbGwsIGxlYXNlLCBvciByZW50IGFueSBwYXJ0IG9mIHRoZSBXb3JrLiBUaGlzIGRvZXMgbm90IHJlc3RyaWN0IHlvdSBmcm9tIGluY2x1ZGluZyB0aGUgV29yayBvciBhbnkgcGFydCBvZiB0aGUgV29yayBpbnNpZGUgYSBsYXJnZXIgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHRoYXQgaXRzZWxmIGlzIGJlaW5nIHNvbGQuIFRoZSBXb3JrIGJ5IGl0c2VsZiwgdGhvdWdoLCBjYW5ub3QgYmUgc29sZCwgbGVhc2VkIG9yIHJlbnRlZC5cblxuICAgICAgZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIEZpbGVzIGFuZCBTb3VyY2UgQ29kZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIEV4ZWN1dGFibGUgRmlsZXMgb3IgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUgYW5kIGVuc3VyZSB0aGF0IGFueW9uZSByZWNlaXZpbmcgc3VjaCBFeGVjdXRhYmxlIEZpbGVzIGFuZCBTb3VyY2UgQ29kZSBhZ3JlZXMgdGhhdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFwcGx5IHRvIHN1Y2ggRXhlY3V0YWJsZSBGaWxlcyBhbmQvb3IgU291cmNlIENvZGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSBGaWxlcyBvciBTb3VyY2UgQ29kZSB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGYuIFlvdSBhZ3JlZSBub3QgdG8gdXNlIHRoZSBXb3JrIGZvciBpbGxlZ2FsLCBpbW1vcmFsIG9yIGltcHJvcGVyIHB1cnBvc2VzLCBvciBvbiBwYWdlcyBjb250YWluaW5nIGlsbGVnYWwsIGltbW9yYWwgb3IgaW1wcm9wZXIgbWF0ZXJpYWwuIFRoZSBXb3JrIGlzIHN1YmplY3QgdG8gYXBwbGljYWJsZSBleHBvcnQgbGF3cy4gWW91IGFncmVlIHRvIGNvbXBseSB3aXRoIGFsbCBzdWNoIGxhd3MgYW5kIHJlZ3VsYXRpb25zIHRoYXQgbWF5IGFwcGx5IHRvIHRoZSBXb3JrIGFmdGVyIFlvdXIgcmVjZWlwdCBvZiB0aGUgV29yay5cblxuICAgNi4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyLiBUSElTIFdPUksgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBcIldIRVJFIElTXCIgQU5EIFwiQVMgQVZBSUxBQkxFXCIsIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT1IgR1VBUkFOVEVFUy4gWU9VLCBUSEUgVVNFUiwgQVNTVU1FIEFMTCBSSVNLIElOIElUUyBVU0UsIElOQ0xVRElORyBDT1BZUklHSFQgSU5GUklOR0VNRU5ULCBQQVRFTlQgSU5GUklOR0VNRU5ULCBTVUlUQUJJTElUWSwgRVRDLiBBVVRIT1IgRVhQUkVTU0xZIERJU0NMQUlNUyBBTEwgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBNRVJDSEFOVEFCTEUgUVVBTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgQU5ZIFdBUlJBTlRZIE9GIFRJVExFIE9SIE5PTi1JTkZSSU5HRU1FTlQsIE9SIFRIQVQgVEhFIFdPUksgKE9SIEFOWSBQT1JUSU9OIFRIRVJFT0YpIElTIENPUlJFQ1QsIFVTRUZVTCwgQlVHLUZSRUUgT1IgRlJFRSBPRiBWSVJVU0VTLiBZT1UgTVVTVCBQQVNTIFRISVMgRElTQ0xBSU1FUiBPTiBXSEVORVZFUiBZT1UgRElTVFJJQlVURSBUSEUgV09SSyBPUiBERVJJVkFUSVZFIFdPUktTLlxuXG4gICA3LiBJbmRlbW5pdHkuIFlvdSBhZ3JlZSB0byBkZWZlbmQsIGluZGVtbmlmeSBhbmQgaG9sZCBoYXJtbGVzcyB0aGUgQXV0aG9yIGFuZCB0aGUgUHVibGlzaGVyIGZyb20gYW5kIGFnYWluc3QgYW55IGNsYWltcywgc3VpdHMsIGxvc3NlcywgZGFtYWdlcywgbGlhYmlsaXRpZXMsIGNvc3RzLCBhbmQgZXhwZW5zZXMgKGluY2x1ZGluZyByZWFzb25hYmxlIGxlZ2FsIG9yIGF0dG9ybmV5cycgZmVlcykgcmVzdWx0aW5nIGZyb20gb3IgcmVsYXRpbmcgdG8gYW55IHVzZSBvZiB0aGUgV29yayBieSBZb3UuXG5cbiAgIDguIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBUSEUgQVVUSE9SIE9SIFRIRSBQVUJMSVNIRVIgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUksgT1IgT1RIRVJXSVNFLCBFVkVOIElGIFRIRSBBVVRIT1IgT1IgVEhFIFBVQkxJU0hFUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDkuIFRlcm1pbmF0aW9uLlxuXG4gICAgICBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIGFueSB0ZXJtIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNiwgNywgOCwgOSwgMTAgYW5kIDExIHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiLiBJZiBZb3UgYnJpbmcgYSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcGF0ZW50IG9yIGFueSBvdGhlciBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBhbnkgY29udHJpYnV0b3Igb3ZlciBpbmZyaW5nZW1lbnRzIFlvdSBjbGFpbSBhcmUgbWFkZSBieSB0aGUgV29yaywgeW91ciBMaWNlbnNlIGZyb20gc3VjaCBjb250cmlidXRvciB0byB0aGUgV29yayBlbmRzIGF1dG9tYXRpY2FsbHkuXG5cbiAgICAgIGMuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGlzIExpY2Vuc2UgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHRoZSBBdXRob3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuXG5cbiAgIDEwLiBQdWJsaXNoZXIuIFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhlIFB1Ymxpc2hlciBzaGFsbCBub3QsIHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzLCBiZSByZXNwb25zaWJsZSBmb3IgYW5kIHNoYWxsIG5vdCBoYXZlIGFueSBsaWFiaWxpdHkgaW4gcmVzcGVjdCBvZiB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcyBMaWNlbnNlLiBUaGUgUHVibGlzaGVyIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrIGFuZCBzaGFsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gVGhlIFB1Ymxpc2hlciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gY2Vhc2UgbWFraW5nIHRoZSBXb3JrIGF2YWlsYWJsZSB0byBZb3UgYXQgYW55IHRpbWUgd2l0aG91dCBub3RpY2VcblxuICAgMTEuIE1pc2NlbGxhbmVvdXNcblxuICAgICAgYS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBsb2NhdGlvbiBvZiB0aGUgaGVhZCBvZmZpY2Ugb2YgdGhlIEF1dGhvciBvciBpZiB0aGUgQXV0aG9yIGlzIGFuIGluZGl2aWR1YWwsIHRoZSBsYXdzIG9mIGxvY2F0aW9uIG9mIHRoZSBwcmluY2lwYWwgcGxhY2Ugb2YgcmVzaWRlbmNlIG9mIHRoZSBBdXRob3IuXG5cbiAgICAgIGIuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIExpY2Vuc2UsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuXG5cbiAgICAgIGMuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuXG5cbiAgICAgIGQuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlaW4uIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZWluLiBUaGUgQXV0aG9yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBBdXRob3IgYW5kIFlvdS4iXSwibGljZW5zZUlkcyI6WyJDUE9MLTEuMDIiXSwia2V5d29yZHMiOlsidGhlIGNvZGUgcHJvamVjdCIsIm9wZW4gbGljZW5zZSBjcG9sIiwibGljZW5zZSBjcG9sIDEiLCJjcG9sIDEgMDIiLCIxIDAyIHByZWFtYmxlIiwiMDIgcHJlYW1ibGUgdGhpcyIsImxpY2Vuc2UgZ292ZXJucyB5b3VyIiwiZ292ZXJucyB5b3VyIHVzZSIsInRvIGFsbG93IGRldmVsb3BlcnMiLCJhbGxvdyBkZXZlbG9wZXJzIHRvIiwiZGV2ZWxvcGVycyB0byB1c2UiLCJleGVjdXRhYmxlIGZpbGVzIHByb3ZpZGVkIiwiZmlsZXMgcHJvdmlkZWQgYXMiLCJwcm92aWRlZCBhcyBwYXJ0IiwiaW4gYW55IGFwcGxpY2F0aW9uIiwiYW55IGFwcGxpY2F0aW9uIGluIiwiYXBwbGljYXRpb24gaW4gYW55IiwiYW55IGZvcm0gdGhlIiwiZm9ybSB0aGUgbWFpbiIsInRoZSBtYWluIHBvaW50cyIsIm1haW4gcG9pbnRzIHN1YmplY3QiLCJwb2ludHMgc3ViamVjdCB0byIsImxpY2Vuc2UgYXJlIHNvdXJjZSIsImFyZSBzb3VyY2UgY29kZSIsInVzZWQgaW4gY29tbWVyY2lhbCIsImluIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zIiwiY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMgc291cmNlIiwiY2FuIGJlIHJlZGlzdHJpYnV0ZWQiLCJiZSByZWRpc3RyaWJ1dGVkIGFuZCIsInJlZGlzdHJpYnV0ZWQgYW5kIHNvdXJjZSIsIm1vZGlmaWVkIHRvIGNyZWF0ZSIsImRlcml2YXRpdmUgd29ya3Mgbm8iLCJ3b3JrcyBubyBjbGFpbSIsIm5vIGNsYWltIG9mIiwiY2xhaW0gb2Ygc3VpdGFiaWxpdHkiLCJvZiBzdWl0YWJpbGl0eSBndWFyYW50ZWUiLCJzdWl0YWJpbGl0eSBndWFyYW50ZWUgb3IiLCJndWFyYW50ZWUgb3IgYW55Iiwid2FycmFudHkgd2hhdHNvZXZlciBpcyIsIndoYXRzb2V2ZXIgaXMgcHJvdmlkZWQiLCJpcyBwcm92aWRlZCB0aGUiLCJwcm92aWRlZCB0aGUgc29mdHdhcmUiLCJpcyB0aGUgYXJ0aWNsZSIsInRoZSBhcnRpY2xlIGFjY29tcGFueWluZyIsImFydGljbGUgYWNjb21wYW55aW5nIHRoZSIsImFjY29tcGFueWluZyB0aGUgd29yayIsIndvcmsgbWF5IG5vdCIsInMgY29uc2VudCB0aGlzIiwibGljZW5zZSBpcyBlbnRlcmVkIiwiaXMgZW50ZXJlZCBiZXR3ZWVuIiwiZW50ZXJlZCBiZXR3ZWVuIHlvdSIsImJldHdlZW4geW91IHRoZSIsInlvdSB0aGUgaW5kaXZpZHVhbCIsIm90aGVyIGVudGl0eSByZWFkaW5nIiwiZW50aXR5IHJlYWRpbmcgb3IiLCJyZWFkaW5nIG9yIG90aGVyd2lzZSIsIm90aGVyd2lzZSBtYWtpbmcgdXNlIiwibWFraW5nIHVzZSBvZiIsIndvcmsgbGljZW5zZWQgcHVyc3VhbnQiLCJvdGhlciBlbnRpdHkgd2hpY2giLCJlbnRpdHkgd2hpY2ggb2ZmZXJzIiwid2hpY2ggb2ZmZXJzIHRoZSIsInRoaXMgbGljZW5zZSBhdXRob3IiLCJsaWNlbnNlIGF1dGhvciBsaWNlbnNlIiwiYXV0aG9yIGxpY2Vuc2UgdGhlIiwidGhpcyBjb2RlIHByb2plY3QiLCJvcGVuIGxpY2Vuc2UgbGljZW5zZSIsImxpY2Vuc2UgbGljZW5zZSB0aGUiLCJ3b3JrIHByb3ZpZGVkIGhlcmVpbiIsInByb3ZpZGVkIGhlcmVpbiB5b3UiLCJoZXJlaW4geW91IGFjY2VwdCIsInRoZSBhdXRob3IgZ3JhbnRzIiwiYXV0aG9yIGdyYW50cyB5b3UiLCJyaWdodHMgY29udGFpbmVkIGhlcmVpbiIsImNvbnRhaW5lZCBoZXJlaW4gaW4iLCJoZXJlaW4gaW4gY29uc2lkZXJhdGlvbiIsImFncmVlIHRvIGFjY2VwdCIsInRvIGFjY2VwdCBhbmQiLCJhY2NlcHQgYW5kIGJlIiwiYW5kIGJlIGJvdW5kIiwibGljZW5zZSB5b3UgY2Fubm90IiwieW91IGNhbm5vdCBtYWtlIiwiY2Fubm90IG1ha2UgYW55IiwidGhlIHdvcmsgMSIsIndvcmsgMSBkZWZpbml0aW9ucyIsImRlZmluaXRpb25zIGEgYXJ0aWNsZXMiLCJhIGFydGljbGVzIG1lYW5zIiwiYXJ0aWNsZXMgbWVhbnMgY29sbGVjdGl2ZWx5IiwibWVhbnMgY29sbGVjdGl2ZWx5IGFsbCIsImNvbGxlY3RpdmVseSBhbGwgYXJ0aWNsZXMiLCJhbGwgYXJ0aWNsZXMgd3JpdHRlbiIsImFydGljbGVzIHdyaXR0ZW4gYnkiLCJ3cml0dGVuIGJ5IGF1dGhvciIsImJ5IGF1dGhvciB3aGljaCIsImF1dGhvciB3aGljaCBkZXNjcmliZXMiLCJ3aGljaCBkZXNjcmliZXMgaG93IiwiZGVzY3JpYmVzIGhvdyB0aGUiLCJob3cgdGhlIHNvdXJjZSIsImV4ZWN1dGFibGUgZmlsZXMgZm9yIiwiYnkgYSB1c2VyIiwiYSB1c2VyIGIiLCJ1c2VyIGIgYXV0aG9yIiwiYiBhdXRob3IgbWVhbnMiLCJjIGRlcml2YXRpdmUgd29yayIsImV4aXN0aW5nIHdvcmtzIGQiLCJ3b3JrcyBkIGV4ZWN1dGFibGUiLCJkIGV4ZWN1dGFibGUgZmlsZXMiLCJleGVjdXRhYmxlIGZpbGVzIHJlZmVyIiwiZmlsZXMgcmVmZXIgdG8iLCJ0byB0aGUgZXhlY3V0YWJsZXMiLCJ0aGUgZXhlY3V0YWJsZXMgYmluYXJ5IiwiZXhlY3V0YWJsZXMgYmluYXJ5IGZpbGVzIiwiYmluYXJ5IGZpbGVzIGNvbmZpZ3VyYXRpb24iLCJmaWxlcyBjb25maWd1cmF0aW9uIGFuZCIsImNvbmZpZ3VyYXRpb24gYW5kIGFueSIsImFuZCBhbnkgcmVxdWlyZWQiLCJhbnkgcmVxdWlyZWQgZGF0YSIsInJlcXVpcmVkIGRhdGEgZmlsZXMiLCJkYXRhIGZpbGVzIGluY2x1ZGVkIiwid29yayBlIHB1Ymxpc2hlciIsImUgcHVibGlzaGVyIG1lYW5zIiwicHVibGlzaGVyIG1lYW5zIHRoZSIsIm1lYW5zIHRoZSBwcm92aWRlciIsInRoZSBwcm92aWRlciBvZiIsInByb3ZpZGVyIG9mIHRoZSIsIm9mIHRoZSB3ZWJzaXRlIiwidGhlIHdlYnNpdGUgbWFnYXppbmUiLCJ3ZWJzaXRlIG1hZ2F6aW5lIGNkIiwibWFnYXppbmUgY2Qgcm9tIiwiY2Qgcm9tIGR2ZCIsInJvbSBkdmQgb3IiLCJkdmQgb3Igb3RoZXIiLCJvciBvdGhlciBtZWRpdW0iLCJvdGhlciBtZWRpdW0gZnJvbSIsIm1lZGl1bSBmcm9tIG9yIiwiZnJvbSBvciBieSIsIm9yIGJ5IHdoaWNoIiwid29yayBpcyBvYnRhaW5lZCIsImlzIG9idGFpbmVkIGJ5Iiwib2J0YWluZWQgYnkgeW91IiwiYnkgeW91IGYiLCJ5b3UgZiBzb3VyY2UiLCJmIHNvdXJjZSBjb2RlIiwic291cmNlIGNvZGUgcmVmZXJzIiwiY29sbGVjdGlvbiBvZiBzb3VyY2UiLCJjb2RlIGFuZCBjb25maWd1cmF0aW9uIiwiY29uZmlndXJhdGlvbiBmaWxlcyB1c2VkIiwiZmlsZXMgdXNlZCB0byIsImNyZWF0ZSB0aGUgZXhlY3V0YWJsZSIsImV4ZWN1dGFibGUgZmlsZXMgZyIsImZpbGVzIGcgc3RhbmRhcmQiLCJnIHN0YW5kYXJkIHZlcnNpb24iLCJhIHdvcmsgaWYiLCJ3b3JrIGlmIGl0IiwidGhlIGF1dGhvciBzdWNoIiwiYXV0aG9yIHN1Y2ggY29uc2VudCIsInN1Y2ggY29uc2VudCBiZWluZyIsImNvbnNlbnQgYmVpbmcgaW4iLCJiZWluZyBpbiB0aGUiLCJpbiB0aGUgZnVsbCIsInRoZSBmdWxsIGRpc2NyZXRpb24iLCJmdWxsIGRpc2NyZXRpb24gb2YiLCJ0aGUgYXV0aG9yIGgiLCJhdXRob3IgaCB3b3JrIiwiaCB3b3JrIHJlZmVycyIsIndvcmsgcmVmZXJzIHRvIiwiYnkgdGhlIHB1Ymxpc2hlciIsInRoZSBwdWJsaXNoZXIgaW5jbHVkaW5nIiwicHVibGlzaGVyIGluY2x1ZGluZyB0aGUiLCJzb3VyY2UgY29kZSBleGVjdXRhYmxlIiwiY29kZSBleGVjdXRhYmxlIGZpbGVzIiwiZXhlY3V0YWJsZSBmaWxlcyBiaW5hcmllcyIsImZpbGVzIGJpbmFyaWVzIGRhdGEiLCJiaW5hcmllcyBkYXRhIGZpbGVzIiwiZGF0YSBmaWxlcyBkb2N1bWVudGF0aW9uIiwiZmlsZXMgZG9jdW1lbnRhdGlvbiB3aGl0ZXBhcGVycyIsImRvY3VtZW50YXRpb24gd2hpdGVwYXBlcnMgYW5kIiwid2hpdGVwYXBlcnMgYW5kIHRoZSIsImFuZCB0aGUgYXJ0aWNsZXMiLCJ0aGUgYXJ0aWNsZXMgaSIsImFydGljbGVzIGkgeW91IiwiaSB5b3UgaXMiLCJpcyB5b3UgYW4iLCJvciBlbnRpdHkgd2lzaGluZyIsImVudGl0eSB3aXNoaW5nIHRvIiwid2lzaGluZyB0byB1c2UiLCJ3b3JrIGFuZCBleGVyY2lzZSIsImFuZCBleGVyY2lzZSB5b3VyIiwiZXhlcmNpc2UgeW91ciByaWdodHMiLCJsaWNlbnNlIDIgZmFpciIsInVzZSBmYWlyIHVzZSIsImZhaXIgZGVhbGluZyBmaXJzdCIsImRlYWxpbmcgZmlyc3Qgc2FsZSIsInRoZSBhdXRob3IgaGVyZWJ5IiwiYmVsb3cgYSB5b3UiLCJleGVjdXRhYmxlIGZpbGVzIGluIiwiZmlsZXMgaW4geW91ciIsInlvdXIgb3duIGFwcGxpY2F0aW9ucyIsIm93biBhcHBsaWNhdGlvbnMgYiIsImFwcGxpY2F0aW9ucyBiIHlvdSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDVUEgT2ZmaWNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wXG5cbiAgIDEuIERlZmluaXRpb25zLlxuXG4gICAgICAxLjAuMS4gXCJDb21tZXJjaWFsIFVzZVwiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuXG5cbiAgICAgIDEuMS4gXCJDb250cmlidXRvclwiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4yLiBcIkNvbnRyaWJ1dG9yIFZlcnNpb25cIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuXG5cbiAgICAgIDEuMy4gXCJDb3ZlcmVkIENvZGVcIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLlxuXG4gICAgICAxLjQuIFwiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtXCIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuXG5cbiAgICAgIDEuNS4gXCJFeGVjdXRhYmxlXCIgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuXG5cbiAgICAgIDEuNi4gXCJJbml0aWFsIERldmVsb3BlclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS5cblxuICAgICAgMS43LiBcIkxhcmdlciBXb3JrXCIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS44LiBcIkxpY2Vuc2VcIiBtZWFucyB0aGlzIGRvY3VtZW50LlxuXG4gICAgICAxLjguMS4gXCJMaWNlbnNhYmxlXCIgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uXG5cbiAgICAgIDEuOS4gXCJNb2RpZmljYXRpb25zXCIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6XG5cbiAgICAgICAgIEEuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgICAgIEIuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIDEuMTAuIFwiT3JpZ2luYWwgQ29kZVwiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuMTAuMS4gXCJQYXRlbnQgQ2xhaW1zXCIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuXG5cbiAgICAgIDEuMTEuIFwiU291cmNlIENvZGVcIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS5cblxuICAgICAgMS4xMi4gXCJZb3VcIiAob3IgXCJZb3VyXCIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbFwiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLlxuXG4gICAgICAyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kXG5cbiAgICAgICAgIChiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS5cblxuICAgICAgICAgKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgICAgKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy5cblxuICAgICAgMi4yLiBDb250cmlidXRvciBHcmFudC4gU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2VcblxuICAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuXG5cbiAgICAgICAgIChjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgICAgICAgIChkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci5cblxuICAgMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLlxuXG4gICAgICAzLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuIFRoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LlxuXG4gICAgICAzLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuXG5cbiAgICAgIDMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICAgICAzLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzXG5cbiAgICAgICAgIChhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuIElmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSdzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgXCJMRUdBTFwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuXG5cbiAgICAgICAgIChiKSBDb250cmlidXRvciBBUElzLiBJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuXG5cbiAgICAgICAgIChjKSBSZXByZXNlbnRhdGlvbnMuIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3Mgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgMy41LiBSZXF1aXJlZCBOb3RpY2VzLiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjcuIExhcmdlciBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICA0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uXG5cbiAgIElmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuXG5cbiAgIDUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS5cblxuICAgNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuXG5cbiAgICAgIDYuMS4gTmV3IFZlcnNpb25zLiBDVUEgT2ZmaWNlIFByb2plY3QgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLlxuXG4gICAgICA2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIE9uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBDVUEgT2ZmaWNlIFByb2plY3QuIE5vIG9uZSBvdGhlciB0aGFuIENVQSBPZmZpY2UgUHJvamVjdCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4gSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgXCJDVUEgT2ZmaWNlXCIsIFwiQ1VBXCIsIFwiQ1VBUExcIiwgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBDVUEgT2ZmaWNlIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pXG5cbiAgIDcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuXG5cbiAgIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuXG5cbiAgIDguIFRFUk1JTkFUSU9OLlxuXG4gICAgICA4LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS5cblxuICAgICAgOC4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyBcIlBhcnRpY2lwYW50XCIpIGFsbGVnaW5nIHRoYXQ6XG5cbiAgICAgICAgIChhKSBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuXG5cbiAgICAgICAgIChiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC5cblxuICAgICAgOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLlxuXG4gICAgICA4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi5cblxuICAgOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuXG5cbiAgIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS5cblxuICAgMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuXG5cbiAgIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSBcImNvbW1lcmNpYWwgaXRlbSxcIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlXCIgYW5kIFwiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLFwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi5cblxuICAgMTEuIE1JU0NFTExBTkVPVVMuXG5cbiAgIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLlxuXG4gICAxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy5cblxuICAgQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LlxuXG4gICAxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS5cblxuICAgSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzIFwiTXVsdGlwbGUtTGljZW5zZWRcIi4gXCJNdWx0aXBsZS1MaWNlbnNlZFwiIG1lYW5zIHRoYXQgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlciBZb3VyIGNob2ljZSBvZiB0aGUgTlBMIG9yIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIEVYSElCSVQgQSAtIENVQSBPZmZpY2UgUHVibGljIExpY2Vuc2UuXG5cblwiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgQ1VBIE9mZmljZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL2N1YW9mZmljZS5zb3VyY2Vmb3JnZS5uZXQvXG5cblNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cblRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIC5cblxuVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fXyAuIFBvcnRpb25zIGNyZWF0ZWQgYnkgX19fX19fX19fX19fX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChDKSBfX19fX18gX19fX19fX19fX19fX19fX19fX19fX18gLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuXG5Db250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gLlxuXG5BbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgX19fX18gbGljZW5zZSAodGhlIFwiIFtfX19dIExpY2Vuc2VcIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgW19fX19dIExpY2Vuc2UgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIENVQVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXSBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGVpdGhlciB0aGUgQ1VBUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuXCJcblxuW05PVEU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZnJvbSB0aGUgdGV4dCBvZiB0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZSBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlIGZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXSJdLCJsaWNlbnNlSWRzIjpbIkNVQS1PUEwtMS4wIl0sImtleXdvcmRzIjpbIm5ldyB2ZXJzaW9ucyBjdWEiLCJ2ZXJzaW9ucyBjdWEgb2ZmaWNlIiwib2ZmaWNlIHByb2plY3QgbWF5IiwicHJvamVjdCBtYXkgcHVibGlzaCIsInB1Ymxpc2hlZCBieSBjdWEiLCJieSBjdWEgb2ZmaWNlIiwib2ZmaWNlIHByb2plY3Qgbm8iLCJwcm9qZWN0IG5vIG9uZSIsIm90aGVyIHRoYW4gY3VhIiwidGhhbiBjdWEgb2ZmaWNlIiwib2ZmaWNlIHByb2plY3QgaGFzIiwicHJvamVjdCBoYXMgdGhlIiwidGhlIHBocmFzZXMgY3VhIiwicGhyYXNlcyBjdWEgb2ZmaWNlIiwiY3VhIG9mZmljZSBjdWEiLCJvZmZpY2UgY3VhIGN1YXBsIiwiY3VhIGN1YXBsIG9yIiwiY3VhcGwgb3IgYW55IiwiZnJvbSB0aGUgY3VhIiwiZXhoaWJpdCBhIGN1YSIsImEgY3VhIG9mZmljZSIsInRvIHRoZSBjdWEiLCJhdCBodHRwIGN1YW9mZmljZSIsImh0dHAgY3Vhb2ZmaWNlIHNvdXJjZWZvcmdlIiwiY3Vhb2ZmaWNlIHNvdXJjZWZvcmdlIG5ldCIsInNvdXJjZWZvcmdlIG5ldCBzb2Z0d2FyZSIsIm5ldCBzb2Z0d2FyZSBkaXN0cmlidXRlZCIsInVuZGVyIHRoZSBjdWFwbCIsInRoZSBjdWFwbCBpbmRpY2F0ZSIsImN1YXBsIGluZGljYXRlIHlvdXIiLCJlaXRoZXIgdGhlIGN1YXBsIiwidGhlIGN1YXBsIG9yIiwiY3VhcGwgb3IgdGhlIiwiMSBuZXcgdmVyc2lvbnMgY3VhIiwibmV3IHZlcnNpb25zIGN1YSBvZmZpY2UiLCJ2ZXJzaW9ucyBjdWEgb2ZmaWNlIHByb2plY3QiLCJjdWEgb2ZmaWNlIHByb2plY3QgbWF5Iiwib2ZmaWNlIHByb2plY3QgbWF5IHB1Ymxpc2giLCJwcm9qZWN0IG1heSBwdWJsaXNoIHJldmlzZWQiLCJsaWNlbnNlIHB1Ymxpc2hlZCBieSBjdWEiLCJwdWJsaXNoZWQgYnkgY3VhIG9mZmljZSIsImJ5IGN1YSBvZmZpY2UgcHJvamVjdCIsImN1YSBvZmZpY2UgcHJvamVjdCBubyIsIm9mZmljZSBwcm9qZWN0IG5vIG9uZSIsInByb2plY3Qgbm8gb25lIG90aGVyIiwib25lIG90aGVyIHRoYW4gY3VhIiwib3RoZXIgdGhhbiBjdWEgb2ZmaWNlIiwidGhhbiBjdWEgb2ZmaWNlIHByb2plY3QiLCJjdWEgb2ZmaWNlIHByb2plY3QgaGFzIiwib2ZmaWNlIHByb2plY3QgaGFzIHRoZSIsInByb2plY3QgaGFzIHRoZSByaWdodCIsInRoYXQgdGhlIHBocmFzZXMgY3VhIiwidGhlIHBocmFzZXMgY3VhIG9mZmljZSIsInBocmFzZXMgY3VhIG9mZmljZSBjdWEiLCJjdWEgb2ZmaWNlIGN1YSBjdWFwbCIsIm9mZmljZSBjdWEgY3VhcGwgb3IiLCJjdWEgY3VhcGwgb3IgYW55IiwiY3VhcGwgb3IgYW55IGNvbmZ1c2luZ2x5IiwiZGlmZmVyIGZyb20gdGhlIGN1YSIsImZyb20gdGhlIGN1YSBvZmZpY2UiLCJvZmZpY2UgcHVibGljIGxpY2Vuc2UgZmlsbGluZyIsImEgZXhoaWJpdCBhIGN1YSIsImV4aGliaXQgYSBjdWEgb2ZmaWNlIiwiYSBjdWEgb2ZmaWNlIHB1YmxpYyIsIm9mZmljZSBwdWJsaWMgbGljZW5zZSB0aGUiLCJzdWJqZWN0IHRvIHRoZSBjdWEiLCJ0byB0aGUgY3VhIG9mZmljZSIsImxpY2Vuc2UgYXQgaHR0cCBjdWFvZmZpY2UiLCJhdCBodHRwIGN1YW9mZmljZSBzb3VyY2Vmb3JnZSIsImh0dHAgY3Vhb2ZmaWNlIHNvdXJjZWZvcmdlIG5ldCIsImN1YW9mZmljZSBzb3VyY2Vmb3JnZSBuZXQgc29mdHdhcmUiLCJzb3VyY2Vmb3JnZSBuZXQgc29mdHdhcmUgZGlzdHJpYnV0ZWQiLCJuZXQgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIiLCJmaWxlIHVuZGVyIHRoZSBjdWFwbCIsInVuZGVyIHRoZSBjdWFwbCBpbmRpY2F0ZSIsInRoZSBjdWFwbCBpbmRpY2F0ZSB5b3VyIiwiY3VhcGwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiIsInVuZGVyIGVpdGhlciB0aGUgY3VhcGwiLCJlaXRoZXIgdGhlIGN1YXBsIG9yIiwidGhlIGN1YXBsIG9yIHRoZSIsImN1YXBsIG9yIHRoZSBsaWNlbnNlIiwiNiAxIG5ldyB2ZXJzaW9ucyBjdWEiLCIxIG5ldyB2ZXJzaW9ucyBjdWEgb2ZmaWNlIiwibmV3IHZlcnNpb25zIGN1YSBvZmZpY2UgcHJvamVjdCIsInZlcnNpb25zIGN1YSBvZmZpY2UgcHJvamVjdCBtYXkiLCJjdWEgb2ZmaWNlIHByb2plY3QgbWF5IHB1Ymxpc2giLCJvZmZpY2UgcHJvamVjdCBtYXkgcHVibGlzaCByZXZpc2VkIiwicHJvamVjdCBtYXkgcHVibGlzaCByZXZpc2VkIGFuZCIsInRoZSBsaWNlbnNlIHB1Ymxpc2hlZCBieSBjdWEiLCJsaWNlbnNlIHB1Ymxpc2hlZCBieSBjdWEgb2ZmaWNlIiwicHVibGlzaGVkIGJ5IGN1YSBvZmZpY2UgcHJvamVjdCIsImJ5IGN1YSBvZmZpY2UgcHJvamVjdCBubyIsImN1YSBvZmZpY2UgcHJvamVjdCBubyBvbmUiLCJvZmZpY2UgcHJvamVjdCBubyBvbmUgb3RoZXIiLCJwcm9qZWN0IG5vIG9uZSBvdGhlciB0aGFuIiwibm8gb25lIG90aGVyIHRoYW4gY3VhIiwib25lIG90aGVyIHRoYW4gY3VhIG9mZmljZSIsIm90aGVyIHRoYW4gY3VhIG9mZmljZSBwcm9qZWN0IiwidGhhbiBjdWEgb2ZmaWNlIHByb2plY3QgaGFzIiwiY3VhIG9mZmljZSBwcm9qZWN0IGhhcyB0aGUiLCJvZmZpY2UgcHJvamVjdCBoYXMgdGhlIHJpZ2h0IiwicHJvamVjdCBoYXMgdGhlIHJpZ2h0IHRvIiwic28gdGhhdCB0aGUgcGhyYXNlcyBjdWEiLCJ0aGF0IHRoZSBwaHJhc2VzIGN1YSBvZmZpY2UiLCJ0aGUgcGhyYXNlcyBjdWEgb2ZmaWNlIGN1YSIsInBocmFzZXMgY3VhIG9mZmljZSBjdWEgY3VhcGwiLCJjdWEgb2ZmaWNlIGN1YSBjdWFwbCBvciIsIm9mZmljZSBjdWEgY3VhcGwgb3IgYW55IiwiY3VhIGN1YXBsIG9yIGFueSBjb25mdXNpbmdseSIsImN1YXBsIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIiwid2hpY2ggZGlmZmVyIGZyb20gdGhlIGN1YSIsImRpZmZlciBmcm9tIHRoZSBjdWEgb2ZmaWNlIiwiZnJvbSB0aGUgY3VhIG9mZmljZSBwdWJsaWMiLCJjdWEgb2ZmaWNlIHB1YmxpYyBsaWNlbnNlIGZpbGxpbmciLCJvZmZpY2UgcHVibGljIGxpY2Vuc2UgZmlsbGluZyBpbiIsImV4aGliaXQgYSBleGhpYml0IGEgY3VhIiwiYSBleGhpYml0IGEgY3VhIG9mZmljZSIsImV4aGliaXQgYSBjdWEgb2ZmaWNlIHB1YmxpYyIsImEgY3VhIG9mZmljZSBwdWJsaWMgbGljZW5zZSIsImN1YSBvZmZpY2UgcHVibGljIGxpY2Vuc2UgdGhlIiwib2ZmaWNlIHB1YmxpYyBsaWNlbnNlIHRoZSBjb250ZW50cyIsImFyZSBzdWJqZWN0IHRvIHRoZSBjdWEiLCJzdWJqZWN0IHRvIHRoZSBjdWEgb2ZmaWNlIiwidG8gdGhlIGN1YSBvZmZpY2UgcHVibGljIiwidGhlIGxpY2Vuc2UgYXQgaHR0cCBjdWFvZmZpY2UiLCJsaWNlbnNlIGF0IGh0dHAgY3Vhb2ZmaWNlIHNvdXJjZWZvcmdlIiwiYXQgaHR0cCBjdWFvZmZpY2Ugc291cmNlZm9yZ2UgbmV0IiwiaHR0cCBjdWFvZmZpY2Ugc291cmNlZm9yZ2UgbmV0IHNvZnR3YXJlIiwiY3Vhb2ZmaWNlIHNvdXJjZWZvcmdlIG5ldCBzb2Z0d2FyZSBkaXN0cmlidXRlZCIsInNvdXJjZWZvcmdlIG5ldCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciIsIm5ldCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUiLCJ0aGlzIGZpbGUgdW5kZXIgdGhlIGN1YXBsIiwiZmlsZSB1bmRlciB0aGUgY3VhcGwgaW5kaWNhdGUiLCJ1bmRlciB0aGUgY3VhcGwgaW5kaWNhdGUgeW91ciIsInRoZSBjdWFwbCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIiwiY3VhcGwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieSIsImZpbGUgdW5kZXIgZWl0aGVyIHRoZSBjdWFwbCIsInVuZGVyIGVpdGhlciB0aGUgY3VhcGwgb3IiLCJlaXRoZXIgdGhlIGN1YXBsIG9yIHRoZSIsInRoZSBjdWFwbCBvciB0aGUgbGljZW5zZSIsImN1YXBsIG9yIHRoZSBsaWNlbnNlIG5vdGUiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ2FsZGVyYSBJbnRlcm5hdGlvbmFsLCBJbmMuIGhlcmVieSBncmFudHMgYSBmZWUgZnJlZSBsaWNlbnNlIHRoYXQgaW5jbHVkZXMgdGhlIHJpZ2h0cyB1c2UsIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGlzIG5hbWVkIHNvdXJjZSBjb2RlLCBpbmNsdWRpbmcgY3JlYXRpbmcgZGVyaXZlZCBiaW5hcnkgcHJvZHVjdHMgY3JlYXRlZCBmcm9tIHRoZSBzb3VyY2UgY29kZS4gVGhlIHNvdXJjZSBjb2RlIGZvciB3aGljaCBDYWxkZXJhIEludGVybmF0aW9uYWwsIEluYy4gZ3JhbnRzIHJpZ2h0cyBhcmUgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIFVOSVggT3BlcmF0aW5nIFN5c3RlbXMgdGhhdCBvcGVyYXRlIG9uIHRoZSAxNi1CaXQgUERQLTExIENQVSBhbmQgZWFybHkgdmVyc2lvbnMgb2YgdGhlIDMyLUJpdCBVTklYIE9wZXJhdGluZyBTeXN0ZW0sIHdpdGggc3BlY2lmaWMgZXhjbHVzaW9uIG9mIFVOSVggU3lzdGVtIElJSSBhbmQgVU5JWCBTeXN0ZW0gViBhbmQgc3VjY2Vzc29yIG9wZXJhdGluZyBzeXN0ZW1zOlxuXG4zMi1iaXQgMzJWIFVOSVhcblxuMTYgYml0IFVOSVggVmVyc2lvbnMgMSwgMiwgMywgNCwgNSwgNiwgN1xuXG5DYWxkZXJhIEludGVybmF0aW9uYWwsIEluYy4gbWFrZXMgbm8gZ3VhcmFudGVlcyBvciBjb21taXRtZW50cyB0aGF0IGFueSBzb3VyY2UgY29kZSBpcyBhdmFpbGFibGUgZnJvbSBDYWxkZXJhIEludGVybmF0aW9uYWwsIEluYy5cblxuVGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlIGFwcGxpZXMgdG8gdGhlIHNvdXJjZSBjb2RlIGZpbGVzIGZvciB3aGljaCB0aGlzIGxpY2Vuc2UgaXMgZ3JhbnRlZC5cblxuQ29weXJpZ2h0KEMpIENhbGRlcmEgSW50ZXJuYXRpb25hbCBJbmMuIDIwMDEtMjAwMi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG5SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cblJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDpcblxuICAgXG5cbiAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgb3Igb3duZWQgYnkgQ2FsZGVyYSBJbnRlcm5hdGlvbmFsLCBJbmMuXG5cbk5laXRoZXIgdGhlIG5hbWUgb2YgQ2FsZGVyYSBJbnRlcm5hdGlvbmFsLCBJbmMuIG5vciB0aGUgbmFtZXMgb2Ygb3RoZXIgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVVNFIE9GIFRIRSBTT0ZUV0FSRSBQUk9WSURFRCBGT1IgVU5ERVIgVEhJUyBMSUNFTlNFIEJZIENBTERFUkEgSU5URVJOQVRJT05BTCwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQUxERVJBIElOVEVSTkFUSU9OQUwsIElOQy4gQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iXSwibGljZW5zZUlkcyI6WyJDYWxkZXJhIl0sImtleXdvcmRzIjpbImludGVybmF0aW9uYWwgaW5jIGhlcmVieSIsImluYyBoZXJlYnkgZ3JhbnRzIiwiaGVyZWJ5IGdyYW50cyBhIiwiZ3JhbnRzIGEgZmVlIiwiYSBmZWUgZnJlZSIsImZlZSBmcmVlIGxpY2Vuc2UiLCJmcmVlIGxpY2Vuc2UgdGhhdCIsImxpY2Vuc2UgdGhhdCBpbmNsdWRlcyIsImluY2x1ZGVzIHRoZSByaWdodHMiLCJ0aGUgcmlnaHRzIHVzZSIsInJpZ2h0cyB1c2UgbW9kaWZ5IiwiZGlzdHJpYnV0ZSB0aGlzIG5hbWVkIiwidGhpcyBuYW1lZCBzb3VyY2UiLCJuYW1lZCBzb3VyY2UgY29kZSIsImNvZGUgaW5jbHVkaW5nIGNyZWF0aW5nIiwiaW5jbHVkaW5nIGNyZWF0aW5nIGRlcml2ZWQiLCJjcmVhdGluZyBkZXJpdmVkIGJpbmFyeSIsImRlcml2ZWQgYmluYXJ5IHByb2R1Y3RzIiwiYmluYXJ5IHByb2R1Y3RzIGNyZWF0ZWQiLCJwcm9kdWN0cyBjcmVhdGVkIGZyb20iLCJjb2RlIGZvciB3aGljaCIsImZvciB3aGljaCBjYWxkZXJhIiwid2hpY2ggY2FsZGVyYSBpbnRlcm5hdGlvbmFsIiwiaW50ZXJuYXRpb25hbCBpbmMgZ3JhbnRzIiwiaW5jIGdyYW50cyByaWdodHMiLCJncmFudHMgcmlnaHRzIGFyZSIsInJpZ2h0cyBhcmUgbGltaXRlZCIsInRoZSBmb2xsb3dpbmcgdW5peCIsImZvbGxvd2luZyB1bml4IG9wZXJhdGluZyIsInVuaXggb3BlcmF0aW5nIHN5c3RlbXMiLCJvcGVyYXRpbmcgc3lzdGVtcyB0aGF0Iiwic3lzdGVtcyB0aGF0IG9wZXJhdGUiLCJ0aGF0IG9wZXJhdGUgb24iLCJvcGVyYXRlIG9uIHRoZSIsIm9uIHRoZSAxNiIsInRoZSAxNiBiaXQiLCIxNiBiaXQgcGRwIiwiYml0IHBkcCAxMSIsInBkcCAxMSBjcHUiLCIxMSBjcHUgYW5kIiwiY3B1IGFuZCBlYXJseSIsImFuZCBlYXJseSB2ZXJzaW9ucyIsImVhcmx5IHZlcnNpb25zIG9mIiwib2YgdGhlIDMyIiwidGhlIDMyIGJpdCIsIjMyIGJpdCB1bml4IiwiYml0IHVuaXggb3BlcmF0aW5nIiwidW5peCBvcGVyYXRpbmcgc3lzdGVtIiwib3BlcmF0aW5nIHN5c3RlbSB3aXRoIiwic3lzdGVtIHdpdGggc3BlY2lmaWMiLCJ3aXRoIHNwZWNpZmljIGV4Y2x1c2lvbiIsInNwZWNpZmljIGV4Y2x1c2lvbiBvZiIsImV4Y2x1c2lvbiBvZiB1bml4Iiwib2YgdW5peCBzeXN0ZW0iLCJ1bml4IHN5c3RlbSBpaWkiLCJzeXN0ZW0gaWlpIGFuZCIsImlpaSBhbmQgdW5peCIsImFuZCB1bml4IHN5c3RlbSIsInVuaXggc3lzdGVtIHYiLCJzeXN0ZW0gdiBhbmQiLCJ2IGFuZCBzdWNjZXNzb3IiLCJhbmQgc3VjY2Vzc29yIG9wZXJhdGluZyIsInN1Y2Nlc3NvciBvcGVyYXRpbmcgc3lzdGVtcyIsIm9wZXJhdGluZyBzeXN0ZW1zIDMyIiwic3lzdGVtcyAzMiBiaXQiLCIzMiBiaXQgMzJ2IiwiYml0IDMydiB1bml4IiwiMzJ2IHVuaXggMTYiLCJ1bml4IDE2IGJpdCIsIjE2IGJpdCB1bml4IiwiYml0IHVuaXggdmVyc2lvbnMiLCJ1bml4IHZlcnNpb25zIDEiLCI2IDcgY2FsZGVyYSIsIjcgY2FsZGVyYSBpbnRlcm5hdGlvbmFsIiwiaW50ZXJuYXRpb25hbCBpbmMgbWFrZXMiLCJubyBndWFyYW50ZWVzIG9yIiwiZ3VhcmFudGVlcyBvciBjb21taXRtZW50cyIsIm9yIGNvbW1pdG1lbnRzIHRoYXQiLCJjb21taXRtZW50cyB0aGF0IGFueSIsImF2YWlsYWJsZSBmcm9tIGNhbGRlcmEiLCJmcm9tIGNhbGRlcmEgaW50ZXJuYXRpb25hbCIsImludGVybmF0aW9uYWwgaW5jIHRoZSIsImluYyB0aGUgZm9sbG93aW5nIiwiY29weXJpZ2h0IG5vdGljZSBhcHBsaWVzIiwibm90aWNlIGFwcGxpZXMgdG8iLCJjb2RlIGZpbGVzIGZvciIsImZpbGVzIGZvciB3aGljaCIsImZvciB3aGljaCB0aGlzIiwiaXMgZ3JhbnRlZCBjb3B5cmlnaHQiLCJncmFudGVkIGNvcHlyaWdodCBjIiwiY29weXJpZ2h0IGMgY2FsZGVyYSIsImMgY2FsZGVyYSBpbnRlcm5hdGlvbmFsIiwiaW50ZXJuYXRpb25hbCBpbmMgMjAwMSIsImluYyAyMDAxIDIwMDIiLCIyMDAxIDIwMDIgYWxsIiwiYW5kIGRvY3VtZW50YXRpb24gbXVzdCIsImRvY3VtZW50YXRpb24gbXVzdCByZXRhaW4iLCJ0aGUgZGlzdHJpYnV0aW9uIGFsbCIsImRpc3RyaWJ1dGlvbiBhbGwgYWR2ZXJ0aXNpbmciLCJzb2Z0d2FyZSBkZXZlbG9wZWQgb3IiLCJkZXZlbG9wZWQgb3Igb3duZWQiLCJvd25lZCBieSBjYWxkZXJhIiwiaW50ZXJuYXRpb25hbCBpbmMgbmVpdGhlciIsImluYyBuZWl0aGVyIHRoZSIsIm5hbWUgb2YgY2FsZGVyYSIsIm9mIGNhbGRlcmEgaW50ZXJuYXRpb25hbCIsImludGVybmF0aW9uYWwgaW5jIG5vciIsIm5hbWVzIG9mIG90aGVyIiwib3RoZXIgY29udHJpYnV0b3JzIG1heSIsIndyaXR0ZW4gcGVybWlzc2lvbiB1c2UiLCJwZXJtaXNzaW9uIHVzZSBvZiIsInNvZnR3YXJlIHByb3ZpZGVkIGZvciIsImxpY2Vuc2UgYnkgY2FsZGVyYSIsImludGVybmF0aW9uYWwgaW5jIGFuZCIsImV2ZW50IHNoYWxsIGNhbGRlcmEiLCJzaGFsbCBjYWxkZXJhIGludGVybmF0aW9uYWwiLCJpbnRlcm5hdGlvbmFsIGluYyBiZSIsImNhbGRlcmEgaW50ZXJuYXRpb25hbCBpbmMgaGVyZWJ5IiwiaW50ZXJuYXRpb25hbCBpbmMgaGVyZWJ5IGdyYW50cyIsImluYyBoZXJlYnkgZ3JhbnRzIGEiLCJoZXJlYnkgZ3JhbnRzIGEgZmVlIiwiZ3JhbnRzIGEgZmVlIGZyZWUiLCJhIGZlZSBmcmVlIGxpY2Vuc2UiLCJmZWUgZnJlZSBsaWNlbnNlIHRoYXQiLCJmcmVlIGxpY2Vuc2UgdGhhdCBpbmNsdWRlcyIsImxpY2Vuc2UgdGhhdCBpbmNsdWRlcyB0aGUiLCJ0aGF0IGluY2x1ZGVzIHRoZSByaWdodHMiLCJpbmNsdWRlcyB0aGUgcmlnaHRzIHVzZSIsInRoZSByaWdodHMgdXNlIG1vZGlmeSIsInJpZ2h0cyB1c2UgbW9kaWZ5IGFuZCIsImFuZCBkaXN0cmlidXRlIHRoaXMgbmFtZWQiLCJkaXN0cmlidXRlIHRoaXMgbmFtZWQgc291cmNlIiwidGhpcyBuYW1lZCBzb3VyY2UgY29kZSIsIm5hbWVkIHNvdXJjZSBjb2RlIGluY2x1ZGluZyIsInNvdXJjZSBjb2RlIGluY2x1ZGluZyBjcmVhdGluZyIsImNvZGUgaW5jbHVkaW5nIGNyZWF0aW5nIGRlcml2ZWQiLCJpbmNsdWRpbmcgY3JlYXRpbmcgZGVyaXZlZCBiaW5hcnkiLCJjcmVhdGluZyBkZXJpdmVkIGJpbmFyeSBwcm9kdWN0cyIsImRlcml2ZWQgYmluYXJ5IHByb2R1Y3RzIGNyZWF0ZWQiLCJiaW5hcnkgcHJvZHVjdHMgY3JlYXRlZCBmcm9tIiwicHJvZHVjdHMgY3JlYXRlZCBmcm9tIHRoZSIsImNyZWF0ZWQgZnJvbSB0aGUgc291cmNlIiwic291cmNlIGNvZGUgZm9yIHdoaWNoIiwiY29kZSBmb3Igd2hpY2ggY2FsZGVyYSIsImZvciB3aGljaCBjYWxkZXJhIGludGVybmF0aW9uYWwiLCJ3aGljaCBjYWxkZXJhIGludGVybmF0aW9uYWwgaW5jIiwiY2FsZGVyYSBpbnRlcm5hdGlvbmFsIGluYyBncmFudHMiLCJpbnRlcm5hdGlvbmFsIGluYyBncmFudHMgcmlnaHRzIiwiaW5jIGdyYW50cyByaWdodHMgYXJlIiwiZ3JhbnRzIHJpZ2h0cyBhcmUgbGltaXRlZCIsInJpZ2h0cyBhcmUgbGltaXRlZCB0byIsImFyZSBsaW1pdGVkIHRvIHRoZSIsInRvIHRoZSBmb2xsb3dpbmcgdW5peCIsInRoZSBmb2xsb3dpbmcgdW5peCBvcGVyYXRpbmciLCJmb2xsb3dpbmcgdW5peCBvcGVyYXRpbmcgc3lzdGVtcyIsInVuaXggb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCIsIm9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgb3BlcmF0ZSIsInN5c3RlbXMgdGhhdCBvcGVyYXRlIG9uIiwidGhhdCBvcGVyYXRlIG9uIHRoZSIsIm9wZXJhdGUgb24gdGhlIDE2Iiwib24gdGhlIDE2IGJpdCIsInRoZSAxNiBiaXQgcGRwIiwiMTYgYml0IHBkcCAxMSIsImJpdCBwZHAgMTEgY3B1IiwicGRwIDExIGNwdSBhbmQiLCIxMSBjcHUgYW5kIGVhcmx5IiwiY3B1IGFuZCBlYXJseSB2ZXJzaW9ucyIsImFuZCBlYXJseSB2ZXJzaW9ucyBvZiIsImVhcmx5IHZlcnNpb25zIG9mIHRoZSIsInZlcnNpb25zIG9mIHRoZSAzMiIsIm9mIHRoZSAzMiBiaXQiLCJ0aGUgMzIgYml0IHVuaXgiLCIzMiBiaXQgdW5peCBvcGVyYXRpbmciLCJiaXQgdW5peCBvcGVyYXRpbmcgc3lzdGVtIiwidW5peCBvcGVyYXRpbmcgc3lzdGVtIHdpdGgiLCJvcGVyYXRpbmcgc3lzdGVtIHdpdGggc3BlY2lmaWMiLCJzeXN0ZW0gd2l0aCBzcGVjaWZpYyBleGNsdXNpb24iLCJ3aXRoIHNwZWNpZmljIGV4Y2x1c2lvbiBvZiIsInNwZWNpZmljIGV4Y2x1c2lvbiBvZiB1bml4IiwiZXhjbHVzaW9uIG9mIHVuaXggc3lzdGVtIiwib2YgdW5peCBzeXN0ZW0gaWlpIiwidW5peCBzeXN0ZW0gaWlpIGFuZCIsInN5c3RlbSBpaWkgYW5kIHVuaXgiLCJpaWkgYW5kIHVuaXggc3lzdGVtIiwiYW5kIHVuaXggc3lzdGVtIHYiLCJ1bml4IHN5c3RlbSB2IGFuZCIsInN5c3RlbSB2IGFuZCBzdWNjZXNzb3IiLCJ2IGFuZCBzdWNjZXNzb3Igb3BlcmF0aW5nIiwiYW5kIHN1Y2Nlc3NvciBvcGVyYXRpbmcgc3lzdGVtcyIsInN1Y2Nlc3NvciBvcGVyYXRpbmcgc3lzdGVtcyAzMiIsIm9wZXJhdGluZyBzeXN0ZW1zIDMyIGJpdCIsInN5c3RlbXMgMzIgYml0IDMydiIsIjMyIGJpdCAzMnYgdW5peCIsImJpdCAzMnYgdW5peCAxNiIsIjMydiB1bml4IDE2IGJpdCIsInVuaXggMTYgYml0IHVuaXgiLCIxNiBiaXQgdW5peCB2ZXJzaW9ucyIsImJpdCB1bml4IHZlcnNpb25zIDEiLCJ1bml4IHZlcnNpb25zIDEgMiIsInZlcnNpb25zIDEgMiAzIl19LHsibGljZW5zZVRleHRzIjpbIlRoZSBDbGFyaWZpZWQgQXJ0aXN0aWMgTGljZW5zZVxuXG5QcmVhbWJsZVxuXG5UaGUgaW50ZW50IG9mIHRoaXMgZG9jdW1lbnQgaXMgdG8gc3RhdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSBQYWNrYWdlIG1heSBiZSBjb3BpZWQsIHN1Y2ggdGhhdCB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYWludGFpbnMgc29tZSBzZW1ibGFuY2Ugb2YgYXJ0aXN0aWMgY29udHJvbCBvdmVyIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgcGFja2FnZSwgd2hpbGUgZ2l2aW5nIHRoZSB1c2VycyBvZiB0aGUgcGFja2FnZSB0aGUgcmlnaHQgdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoZSBQYWNrYWdlIGluIGEgbW9yZS1vci1sZXNzIGN1c3RvbWFyeSBmYXNoaW9uLCBwbHVzIHRoZSByaWdodCB0byBtYWtlIHJlYXNvbmFibGUgbW9kaWZpY2F0aW9ucy5cblxuRGVmaW5pdGlvbnM6XG5cblwiUGFja2FnZVwiIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlciwgYW5kIGRlcml2YXRpdmVzIG9mIHRoYXQgY29sbGVjdGlvbiBvZiBmaWxlcyBjcmVhdGVkIHRocm91Z2ggdGV4dHVhbCBtb2RpZmljYXRpb24uXG5cblwiU3RhbmRhcmQgVmVyc2lvblwiIHJlZmVycyB0byBzdWNoIGEgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQsIG9yIGhhcyBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgd2lzaGVzIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyIGFzIHNwZWNpZmllZCBiZWxvdy5cblxuXCJDb3B5cmlnaHQgSG9sZGVyXCIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yIGNvcHlyaWdodHMgZm9yIHRoZSBwYWNrYWdlLlxuXG5cIllvdVwiIGlzIHlvdSwgaWYgeW91J3JlIHRoaW5raW5nIGFib3V0IGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoaXMgUGFja2FnZS5cblxuXCJEaXN0cmlidXRpb24gZmVlXCIgaXMgYSBmZWUgeW91IGNoYXJnZSBmb3IgcHJvdmlkaW5nIGEgY29weSBvZiB0aGlzIFBhY2thZ2UgdG8gYW5vdGhlciBwYXJ0eS5cblxuXCJGcmVlbHkgQXZhaWxhYmxlXCIgbWVhbnMgdGhhdCBubyBmZWUgaXMgY2hhcmdlZCBmb3IgdGhlIHJpZ2h0IHRvIHVzZSB0aGUgaXRlbSwgdGhvdWdoIHRoZXJlIG1heSBiZSBmZWVzIGludm9sdmVkIGluIGhhbmRsaW5nIHRoZSBpdGVtLiBJdCBhbHNvIG1lYW5zIHRoYXQgcmVjaXBpZW50cyBvZiB0aGUgaXRlbSBtYXkgcmVkaXN0cmlidXRlIGl0IHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgdGhleSByZWNlaXZlZCBpdC5cblxuICAgMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZHVwbGljYXRlIGFsbCBvZiB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZXMgYW5kIGFzc29jaWF0ZWQgZGlzY2xhaW1lcnMuXG5cbiAgIDIuIFlvdSBtYXkgYXBwbHkgYnVnIGZpeGVzLCBwb3J0YWJpbGl0eSBmaXhlcyBhbmQgb3RoZXIgbW9kaWZpY2F0aW9ucyBkZXJpdmVkIGZyb20gdGhlIFB1YmxpYyBEb21haW4sIG9yIHRob3NlIG1hZGUgRnJlZWx5IEF2YWlsYWJsZSwgb3IgZnJvbSB0aGUgQ29weXJpZ2h0IEhvbGRlci4gQSBQYWNrYWdlIG1vZGlmaWVkIGluIHN1Y2ggYSB3YXkgc2hhbGwgc3RpbGwgYmUgY29uc2lkZXJlZCB0aGUgU3RhbmRhcmQgVmVyc2lvbi5cblxuICAgMy4gWW91IG1heSBvdGhlcndpc2UgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGlzIFBhY2thZ2UgaW4gYW55IHdheSwgcHJvdmlkZWQgdGhhdCB5b3UgaW5zZXJ0IGEgcHJvbWluZW50IG5vdGljZSBpbiBlYWNoIGNoYW5nZWQgZmlsZSBzdGF0aW5nIGhvdyBhbmQgd2hlbiB5b3UgY2hhbmdlZCB0aGF0IGZpbGUsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzpcblxuICAgICAgYSkgcGxhY2UgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBQdWJsaWMgRG9tYWluIG9yIG90aGVyd2lzZSBtYWtlIHRoZW0gRnJlZWx5IEF2YWlsYWJsZSwgc3VjaCBhcyBieSBwb3N0aW5nIHNhaWQgbW9kaWZpY2F0aW9ucyB0byBVc2VuZXQgb3IgYW4gZXF1aXZhbGVudCBtZWRpdW0sIG9yIHBsYWNpbmcgdGhlIG1vZGlmaWNhdGlvbnMgb24gYSBtYWpvciBuZXR3b3JrIGFyY2hpdmUgc2l0ZSBhbGxvd2luZyB1bnJlc3RyaWN0ZWQgYWNjZXNzIHRvIHRoZW0sIG9yIGJ5IGFsbG93aW5nIHRoZSBDb3B5cmlnaHQgSG9sZGVyIHRvIGluY2x1ZGUgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBQYWNrYWdlLlxuXG4gICAgICBiKSB1c2UgdGhlIG1vZGlmaWVkIFBhY2thZ2Ugb25seSB3aXRoaW4geW91ciBjb3Jwb3JhdGlvbiBvciBvcmdhbml6YXRpb24uXG5cbiAgICAgIGMpIHJlbmFtZSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHNvIHRoZSBuYW1lcyBkbyBub3QgY29uZmxpY3Qgd2l0aCBzdGFuZGFyZCBleGVjdXRhYmxlcywgd2hpY2ggbXVzdCBhbHNvIGJlIHByb3ZpZGVkLCBhbmQgcHJvdmlkZSBhIHNlcGFyYXRlIG1hbnVhbCBwYWdlIGZvciBlYWNoIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlIHRoYXQgY2xlYXJseSBkb2N1bWVudHMgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUgU3RhbmRhcmQgVmVyc2lvbi5cblxuICAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuXG5cbiAgICAgIGUpIHBlcm1pdCBhbmQgZW5jb3VyZ2UgYW55b25lIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIG1vZGlmaWVkIFBhY2thZ2UgcGVybWlzc2lvbiB0byBtYWtlIHlvdXIgbW9kaWZpY2F0aW9ucyBGcmVlbHkgQXZhaWxhYmxlIGluIHNvbWUgc3BlY2lmaWMgd2F5LlxuXG4gICA0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSBkaXN0cmlidXRlIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZXMgYW5kIGxpYnJhcnkgZmlsZXMsIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLlxuXG4gICAgICBiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZiB0aGUgUGFja2FnZSB3aXRoIHlvdXIgbW9kaWZpY2F0aW9ucy5cblxuICAgICAgYykgZ2l2ZSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCBhbmQgY2xlYXJseSBkb2N1bWVudCB0aGUgZGlmZmVyZW5jZXMgaW4gbWFudWFsIHBhZ2VzIChvciBlcXVpdmFsZW50KSwgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLlxuXG4gICAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlci5cblxuICAgICAgZSkgb2ZmZXIgdGhlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIG9mIHRoZSBQYWNrYWdlLCB3aXRoIHlvdXIgbW9kaWZpY2F0aW9ucywgYnkgbWFpbCBvcmRlci5cblxuICAgNS4gWW91IG1heSBjaGFyZ2UgYSBkaXN0cmlidXRpb24gZmVlIGZvciBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgUGFja2FnZS4gSWYgeW91IG9mZmVyIHN1cHBvcnQgZm9yIHRoaXMgUGFja2FnZSwgeW91IG1heSBjaGFyZ2UgYW55IGZlZSB5b3UgY2hvb3NlIGZvciB0aGF0IHN1cHBvcnQuIFlvdSBtYXkgbm90IGNoYXJnZSBhIGxpY2Vuc2UgZmVlIGZvciB0aGUgcmlnaHQgdG8gdXNlIHRoaXMgUGFja2FnZSBpdHNlbGYuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGlzIFBhY2thZ2UgaW4gYWdncmVnYXRlIHdpdGggb3RoZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwgYW5kIHBvc3NpYmx5IG5vbmZyZWUpIHByb2dyYW1zIGFzIHBhcnQgb2YgYSBsYXJnZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwgYW5kIHBvc3NpYmx5IG5vbmZyZWUpIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiwgYW5kIGNoYXJnZSBsaWNlbnNlIGZlZXMgZm9yIG90aGVyIHBhcnRzIG9mIHRoYXQgc29mdHdhcmUgZGlzdHJpYnV0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBub3QgYWR2ZXJ0aXNlIHRoaXMgUGFja2FnZSBhcyBhIHByb2R1Y3Qgb2YgeW91ciBvd24uIElmIHRoZSBQYWNrYWdlIGluY2x1ZGVzIGFuIGludGVycHJldGVyLCBZb3UgbWF5IGVtYmVkIHRoaXMgUGFja2FnZSdzIGludGVycHJldGVyIHdpdGhpbiBhbiBleGVjdXRhYmxlIG9mIHlvdXJzIChieSBsaW5raW5nKTsgdGhpcyBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgYSBtZXJlIGZvcm0gb2YgYWdncmVnYXRpb24sIHByb3ZpZGVkIHRoYXQgdGhlIGNvbXBsZXRlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIGludGVycHJldGVyIGlzIHNvIGVtYmVkZGVkLlxuXG4gICA2LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZCBhcyBvdXRwdXQgZnJvbSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGRvIG5vdCBhdXRvbWF0aWNhbGx5IGZhbGwgdW5kZXIgdGhlIGNvcHlyaWdodCBvZiB0aGlzIFBhY2thZ2UsIGJ1dCBiZWxvbmcgdG8gd2hvZXZlciBnZW5lcmF0ZWQgdGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcyBQYWNrYWdlLiBJZiBzdWNoIHNjcmlwdHMgb3IgbGlicmFyeSBmaWxlcyBhcmUgYWdncmVnYXRlZCB3aXRoIHRoaXMgUGFja2FnZSB2aWEgdGhlIHNvLWNhbGxlZCBcInVuZHVtcFwiIG9yIFwidW5leGVjXCIgbWV0aG9kcyBvZiBwcm9kdWNpbmcgYSBiaW5hcnkgZXhlY3V0YWJsZSBpbWFnZSwgdGhlbiBkaXN0cmlidXRpb24gb2Ygc3VjaCBhbiBpbWFnZSBzaGFsbCBuZWl0aGVyIGJlIGNvbnN0cnVlZCBhcyBhIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2Ugbm9yIHNoYWxsIGl0IGZhbGwgdW5kZXIgdGhlIHJlc3RyaWN0aW9ucyBvZiBQYXJhZ3JhcGhzIDMgYW5kIDQsIHByb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCByZXByZXNlbnQgc3VjaCBhbiBleGVjdXRhYmxlIGltYWdlIGFzIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2UuXG5cbiAgIDcuIEMgc3Vicm91dGluZXMgKG9yIGNvbXBhcmFibHkgY29tcGlsZWQgc3Vicm91dGluZXMgaW4gb3RoZXIgbGFuZ3VhZ2VzKSBzdXBwbGllZCBieSB5b3UgYW5kIGxpbmtlZCBpbnRvIHRoaXMgUGFja2FnZSBpbiBvcmRlciB0byBlbXVsYXRlIHN1YnJvdXRpbmVzIGFuZCB2YXJpYWJsZXMgb2YgdGhlIGxhbmd1YWdlIGRlZmluZWQgYnkgdGhpcyBQYWNrYWdlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYXJlIHRoZSBlcXVpdmFsZW50IG9mIGlucHV0IGFzIGluIFBhcmFncmFwaCA2LCBwcm92aWRlZCB0aGVzZSBzdWJyb3V0aW5lcyBkbyBub3QgY2hhbmdlIHRoZSBsYW5ndWFnZSBpbiBhbnkgd2F5IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gZmFpbCB0aGUgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlIGxhbmd1YWdlLlxuXG4gICA4LiBBZ2dyZWdhdGlvbiBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgUGFja2FnZSB3aXRoIGEgY29tbWVyY2lhbCBkaXN0cmlidXRpb24gaXMgYWx3YXlzIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSB1c2Ugb2YgdGhpcyBQYWNrYWdlIGlzIGVtYmVkZGVkOyB0aGF0IGlzLCB3aGVuIG5vIG92ZXJ0IGF0dGVtcHQgaXMgbWFkZSB0byBtYWtlIHRoaXMgUGFja2FnZSdzIGludGVyZmFjZXMgdmlzaWJsZSB0byB0aGUgZW5kIHVzZXIgb2YgdGhlIGNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uLiBTdWNoIHVzZSBzaGFsbCBub3QgYmUgY29uc3RydWVkIGFzIGEgZGlzdHJpYnV0aW9uIG9mIHRoaXMgUGFja2FnZS5cblxuICAgOS4gVGhlIG5hbWUgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuICAgMTAuIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUaGUgRW5kIl0sImxpY2Vuc2VJZHMiOlsiQ2xBcnRpc3RpYyJdLCJrZXl3b3JkcyI6WyJ0aGUgY2xhcmlmaWVkIGFydGlzdGljIiwiY2xhcmlmaWVkIGFydGlzdGljIGxpY2Vuc2UiLCJ0aGlzIHBhY2thZ2UgZGlzdHJpYnV0aW9uIiwicGFja2FnZSBkaXN0cmlidXRpb24gZmVlIiwiZGlzdHJpYnV0aW9uIGZlZSBpcyIsImZlZSBpcyBhIiwiaXMgYSBmZWUiLCJmZWUgeW91IGNoYXJnZSIsImNoYXJnZSBmb3IgcHJvdmlkaW5nIiwiYW5vdGhlciBwYXJ0eSBmcmVlbHkiLCJwYXJ0eSBmcmVlbHkgYXZhaWxhYmxlIiwidXNlIHRoZSBpdGVtIiwidGhlIGl0ZW0gdGhvdWdoIiwiaXRlbSB0aG91Z2ggdGhlcmUiLCJkb21haW4gb3IgdGhvc2UiLCJvciB0aG9zZSBtYWRlIiwidGhvc2UgbWFkZSBmcmVlbHkiLCJmcmVlbHkgYXZhaWxhYmxlIG9yIiwiYXZhaWxhYmxlIG9yIGZyb20iLCJhIG1ham9yIG5ldHdvcmsiLCJtYWpvciBuZXR3b3JrIGFyY2hpdmUiLCJuZXR3b3JrIGFyY2hpdmUgc2l0ZSIsImFyY2hpdmUgc2l0ZSBhbGxvd2luZyIsInNpdGUgYWxsb3dpbmcgdW5yZXN0cmljdGVkIiwiYWxsb3dpbmcgdW5yZXN0cmljdGVkIGFjY2VzcyIsInVucmVzdHJpY3RlZCBhY2Nlc3MgdG8iLCJhY2Nlc3MgdG8gdGhlbSIsInRvIHRoZW0gb3IiLCJ0aGVtIG9yIGJ5IiwiaG9sZGVyIGUgcGVybWl0IiwiZSBwZXJtaXQgYW5kIiwicGVybWl0IGFuZCBlbmNvdXJnZSIsImFuZCBlbmNvdXJnZSBhbnlvbmUiLCJlbmNvdXJnZSBhbnlvbmUgd2hvIiwibW9kaWZpZWQgcGFja2FnZSBwZXJtaXNzaW9uIiwicGFja2FnZSBwZXJtaXNzaW9uIHRvIiwibWFrZSB5b3VyIG1vZGlmaWNhdGlvbnMiLCJ5b3VyIG1vZGlmaWNhdGlvbnMgZnJlZWx5IiwibW9kaWZpY2F0aW9ucyBmcmVlbHkgYXZhaWxhYmxlIiwiYXZhaWxhYmxlIGluIHNvbWUiLCJpbiBzb21lIHNwZWNpZmljIiwic29tZSBzcGVjaWZpYyB3YXkiLCJzcGVjaWZpYyB3YXkgNCIsIndheSA0IHlvdSIsImhvbGRlciBlIG9mZmVyIiwiZSBvZmZlciB0aGUiLCJvZmZlciB0aGUgbWFjaGluZSIsIm1vZGlmaWNhdGlvbnMgYnkgbWFpbCIsImJ5IG1haWwgb3JkZXIiLCJtYWlsIG9yZGVyIDUiLCJvcmRlciA1IHlvdSIsImlmIHlvdSBvZmZlciIsInlvdSBvZmZlciBzdXBwb3J0Iiwib2ZmZXIgc3VwcG9ydCBmb3IiLCJjaG9vc2UgZm9yIHRoYXQiLCJmb3IgdGhhdCBzdXBwb3J0IiwidGhhdCBzdXBwb3J0IHlvdSIsInN1cHBvcnQgeW91IG1heSIsImNoYXJnZSBhIGxpY2Vuc2UiLCJsaWNlbnNlIGZlZSBmb3IiLCJ1c2UgdGhpcyBwYWNrYWdlIiwicGFja2FnZSBpdHNlbGYgeW91IiwicG9zc2libHkgbm9uZnJlZSBwcm9ncmFtcyIsIm5vbmZyZWUgcHJvZ3JhbXMgYXMiLCJwb3NzaWJseSBub25mcmVlIHNvZnR3YXJlIiwibm9uZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24iLCJzb2Z0d2FyZSBkaXN0cmlidXRpb24gYW5kIiwiZGlzdHJpYnV0aW9uIGFuZCBjaGFyZ2UiLCJhbmQgY2hhcmdlIGxpY2Vuc2UiLCJjaGFyZ2UgbGljZW5zZSBmZWVzIiwibGljZW5zZSBmZWVzIGZvciIsImZvciBvdGhlciBwYXJ0cyIsInBhcnRzIG9mIHRoYXQiLCJ0aGF0IHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiIsInlvdXIgb3duIGlmIiwib3duIGlmIHRoZSIsImluY2x1ZGVzIGFuIGludGVycHJldGVyIiwiYW4gaW50ZXJwcmV0ZXIgeW91IiwiaW50ZXJwcmV0ZXIgeW91IG1heSIsImFnZ3JlZ2F0aW9uIG9mIHRoZSIsInRoZSBjbGFyaWZpZWQgYXJ0aXN0aWMgbGljZW5zZSIsImNsYXJpZmllZCBhcnRpc3RpYyBsaWNlbnNlIHByZWFtYmxlIiwiZGlzdHJpYnV0aW5nIHRoaXMgcGFja2FnZSBkaXN0cmlidXRpb24iLCJ0aGlzIHBhY2thZ2UgZGlzdHJpYnV0aW9uIGZlZSIsInBhY2thZ2UgZGlzdHJpYnV0aW9uIGZlZSBpcyIsImRpc3RyaWJ1dGlvbiBmZWUgaXMgYSIsImZlZSBpcyBhIGZlZSIsImlzIGEgZmVlIHlvdSIsImEgZmVlIHlvdSBjaGFyZ2UiLCJmZWUgeW91IGNoYXJnZSBmb3IiLCJ5b3UgY2hhcmdlIGZvciBwcm92aWRpbmciLCJjaGFyZ2UgZm9yIHByb3ZpZGluZyBhIiwiZm9yIHByb3ZpZGluZyBhIGNvcHkiLCJ0byBhbm90aGVyIHBhcnR5IGZyZWVseSIsImFub3RoZXIgcGFydHkgZnJlZWx5IGF2YWlsYWJsZSIsInBhcnR5IGZyZWVseSBhdmFpbGFibGUgbWVhbnMiLCJjaGFyZ2VkIGZvciB0aGUgcmlnaHQiLCJ0byB1c2UgdGhlIGl0ZW0iLCJ1c2UgdGhlIGl0ZW0gdGhvdWdoIiwidGhlIGl0ZW0gdGhvdWdoIHRoZXJlIiwiaXRlbSB0aG91Z2ggdGhlcmUgbWF5IiwicHVibGljIGRvbWFpbiBvciB0aG9zZSIsImRvbWFpbiBvciB0aG9zZSBtYWRlIiwib3IgdGhvc2UgbWFkZSBmcmVlbHkiLCJ0aG9zZSBtYWRlIGZyZWVseSBhdmFpbGFibGUiLCJtYWRlIGZyZWVseSBhdmFpbGFibGUgb3IiLCJmcmVlbHkgYXZhaWxhYmxlIG9yIGZyb20iLCJhdmFpbGFibGUgb3IgZnJvbSB0aGUiLCJvbiBhIG1ham9yIG5ldHdvcmsiLCJhIG1ham9yIG5ldHdvcmsgYXJjaGl2ZSIsIm1ham9yIG5ldHdvcmsgYXJjaGl2ZSBzaXRlIiwibmV0d29yayBhcmNoaXZlIHNpdGUgYWxsb3dpbmciLCJhcmNoaXZlIHNpdGUgYWxsb3dpbmcgdW5yZXN0cmljdGVkIiwic2l0ZSBhbGxvd2luZyB1bnJlc3RyaWN0ZWQgYWNjZXNzIiwiYWxsb3dpbmcgdW5yZXN0cmljdGVkIGFjY2VzcyB0byIsInVucmVzdHJpY3RlZCBhY2Nlc3MgdG8gdGhlbSIsImFjY2VzcyB0byB0aGVtIG9yIiwidG8gdGhlbSBvciBieSIsInRoZW0gb3IgYnkgYWxsb3dpbmciLCJjb3B5cmlnaHQgaG9sZGVyIGUgcGVybWl0IiwiaG9sZGVyIGUgcGVybWl0IGFuZCIsImUgcGVybWl0IGFuZCBlbmNvdXJnZSIsInBlcm1pdCBhbmQgZW5jb3VyZ2UgYW55b25lIiwiYW5kIGVuY291cmdlIGFueW9uZSB3aG8iLCJlbmNvdXJnZSBhbnlvbmUgd2hvIHJlY2VpdmVzIiwib2YgdGhlIG1vZGlmaWVkIHBhY2thZ2UiLCJ0aGUgbW9kaWZpZWQgcGFja2FnZSBwZXJtaXNzaW9uIiwibW9kaWZpZWQgcGFja2FnZSBwZXJtaXNzaW9uIHRvIiwicGFja2FnZSBwZXJtaXNzaW9uIHRvIG1ha2UiLCJwZXJtaXNzaW9uIHRvIG1ha2UgeW91ciIsInRvIG1ha2UgeW91ciBtb2RpZmljYXRpb25zIiwibWFrZSB5b3VyIG1vZGlmaWNhdGlvbnMgZnJlZWx5IiwieW91ciBtb2RpZmljYXRpb25zIGZyZWVseSBhdmFpbGFibGUiLCJtb2RpZmljYXRpb25zIGZyZWVseSBhdmFpbGFibGUgaW4iLCJmcmVlbHkgYXZhaWxhYmxlIGluIHNvbWUiLCJhdmFpbGFibGUgaW4gc29tZSBzcGVjaWZpYyIsImluIHNvbWUgc3BlY2lmaWMgd2F5Iiwic29tZSBzcGVjaWZpYyB3YXkgNCIsInNwZWNpZmljIHdheSA0IHlvdSIsIndheSA0IHlvdSBtYXkiLCJjb3B5cmlnaHQgaG9sZGVyIGUgb2ZmZXIiLCJob2xkZXIgZSBvZmZlciB0aGUiLCJlIG9mZmVyIHRoZSBtYWNoaW5lIiwib2ZmZXIgdGhlIG1hY2hpbmUgcmVhZGFibGUiLCJ3aXRoIHlvdXIgbW9kaWZpY2F0aW9ucyBieSIsInlvdXIgbW9kaWZpY2F0aW9ucyBieSBtYWlsIiwibW9kaWZpY2F0aW9ucyBieSBtYWlsIG9yZGVyIiwiYnkgbWFpbCBvcmRlciA1IiwibWFpbCBvcmRlciA1IHlvdSIsIm9yZGVyIDUgeW91IG1heSIsImRpc3RyaWJ1dGlvbiBmZWUgZm9yIGFueSIsIm9mIHRoaXMgcGFja2FnZSBpZiIsInRoaXMgcGFja2FnZSBpZiB5b3UiLCJwYWNrYWdlIGlmIHlvdSBvZmZlciIsImlmIHlvdSBvZmZlciBzdXBwb3J0IiwieW91IG9mZmVyIHN1cHBvcnQgZm9yIiwib2ZmZXIgc3VwcG9ydCBmb3IgdGhpcyIsImZvciB0aGlzIHBhY2thZ2UgeW91IiwieW91IGNob29zZSBmb3IgdGhhdCIsImNob29zZSBmb3IgdGhhdCBzdXBwb3J0IiwiZm9yIHRoYXQgc3VwcG9ydCB5b3UiLCJ0aGF0IHN1cHBvcnQgeW91IG1heSIsInN1cHBvcnQgeW91IG1heSBub3QiLCJub3QgY2hhcmdlIGEgbGljZW5zZSIsImNoYXJnZSBhIGxpY2Vuc2UgZmVlIiwiYSBsaWNlbnNlIGZlZSBmb3IiLCJsaWNlbnNlIGZlZSBmb3IgdGhlIiwiZmVlIGZvciB0aGUgcmlnaHQiLCJyaWdodCB0byB1c2UgdGhpcyIsInRvIHVzZSB0aGlzIHBhY2thZ2UiLCJ1c2UgdGhpcyBwYWNrYWdlIGl0c2VsZiIsInRoaXMgcGFja2FnZSBpdHNlbGYgeW91IiwicGFja2FnZSBpdHNlbGYgeW91IG1heSIsIml0c2VsZiB5b3UgbWF5IGRpc3RyaWJ1dGUiLCJvdGhlciBwb3NzaWJseSBjb21tZXJjaWFsIGFuZCIsImFuZCBwb3NzaWJseSBub25mcmVlIHByb2dyYW1zIiwicG9zc2libHkgbm9uZnJlZSBwcm9ncmFtcyBhcyIsIm5vbmZyZWUgcHJvZ3JhbXMgYXMgcGFydCIsImxhcmdlciBwb3NzaWJseSBjb21tZXJjaWFsIGFuZCIsImFuZCBwb3NzaWJseSBub25mcmVlIHNvZnR3YXJlIiwicG9zc2libHkgbm9uZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24iLCJub25mcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBhbmQiLCJzb2Z0d2FyZSBkaXN0cmlidXRpb24gYW5kIGNoYXJnZSIsImRpc3RyaWJ1dGlvbiBhbmQgY2hhcmdlIGxpY2Vuc2UiLCJhbmQgY2hhcmdlIGxpY2Vuc2UgZmVlcyIsImNoYXJnZSBsaWNlbnNlIGZlZXMgZm9yIiwibGljZW5zZSBmZWVzIGZvciBvdGhlciIsImZlZXMgZm9yIG90aGVyIHBhcnRzIiwiZm9yIG90aGVyIHBhcnRzIG9mIiwib3RoZXIgcGFydHMgb2YgdGhhdCIsInBhcnRzIG9mIHRoYXQgc29mdHdhcmUiLCJvZiB0aGF0IHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiIsInRoYXQgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHByb3ZpZGVkIiwib2YgeW91ciBvd24gaWYiLCJ5b3VyIG93biBpZiB0aGUiLCJvd24gaWYgdGhlIHBhY2thZ2UiLCJwYWNrYWdlIGluY2x1ZGVzIGFuIGludGVycHJldGVyIiwiaW5jbHVkZXMgYW4gaW50ZXJwcmV0ZXIgeW91IiwiYW4gaW50ZXJwcmV0ZXIgeW91IG1heSIsImludGVycHJldGVyIHlvdSBtYXkgZW1iZWQiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29uZG9yIFB1YmxpYyBMaWNlbnNlXG5cblZlcnNpb24gMS4xLCBPY3RvYmVyIDMwLCAyMDAzIENvcHlyaWdodCDCqSAxOTkwLTIwMDYgQ29uZG9yIFRlYW0sIENvbXB1dGVyIFNjaWVuY2VzIERlcGFydG1lbnQsIFVuaXZlcnNpdHkgb2YgV2lzY29uc2luLU1hZGlzb24sIE1hZGlzb24sIFdJLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjb250YWN0OiBDb25kb3IgVGVhbSwgQXR0ZW50aW9uOiBQcm9mZXNzb3IgTWlyb24gTGl2bnksIERlcHQgb2YgQ29tcHV0ZXIgU2NpZW5jZXMsIDEyMTAgVy4gRGF5dG9uIFN0LiwgTWFkaXNvbiwgV0kgNTM3MDYtMTY4NSwgKDYwOCkgMjYyLTA4NTYgb3IgbWlyb25AY3Mud2lzYy5lZHUuXG5cblRoaXMgc29mdHdhcmUgcmVmZXJyZWQgdG8gYXMgdGhlIENvbmRvcsKuIFZlcnNpb24gNi54IHNvZnR3YXJlIChcIlNvZnR3YXJlXCIpIHdhcyBkZXZlbG9wZWQgYnkgdGhlIENvbmRvciBQcm9qZWN0LCBDb25kb3IgVGVhbSwgQ29tcHV0ZXIgU2NpZW5jZXMgRGVwYXJ0bWVudCwgVW5pdmVyc2l0eSBvZiBXaXNjb25zaW4tTWFkaXNvbiwgdW5kZXIgdGhlIGF1dGhvcml0eSBvZiB0aGUgQm9hcmQgb2YgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBXaXNjb25zaW4gU3lzdGVtIGFuZCBpbmNsdWRlcyB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIHRvIHRoZSBDb25kb3IgUHJvamVjdCAoXCJDb3B5cmlnaHQgSG9sZGVycyBhbmQgQ29udHJpYnV0b3JzIGFuZCB0aGUgVW5pdmVyc2l0eVwiKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIENvbmRvciBQcm9qZWN0LCBwbGVhc2Ugc2VlIGh0dHA6Ly93d3cuY29uZG9ycHJvamVjdC5vcmcvLlxuXG5JbnN0YWxsYXRpb24sIHVzZSwgcmVwcm9kdWN0aW9uLCBkaXNwbGF5LCBtb2RpZmljYXRpb24gYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCBhcmUgcGVybWl0dGVkLiBBbnkgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgbGljZW5zZSBpbmNsdWRpbmcgc3VibGljZW5zZXMgYnkgeW91IGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2YgdGhpcyBTb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgbXVzdCByZXByb2R1Y2UgdGhpcyBDb25kb3IgUHVibGljIExpY2Vuc2UgaW46ICgxKSB0aGUgU29mdHdhcmUsIGFuZCAoMikgYW55IHVzZXIgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBzaW1pbGFyIG1hdGVyaWFsIHdoaWNoIGlzIHByb3ZpZGVkIHdpdGggdGhlIFNvZnR3YXJlLlxuXG4gICBcblxuICAgMi4gQW55IHVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIGEgcmVkaXN0cmlidXRpb24gbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgbm90aWNlOlxuXG4gICBcIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBmcm9tIHRoZSBDb25kb3LCriBQcm9qZWN0IChodHRwOi8vd3d3LmNvbmRvcnByb2plY3Qub3JnLylcIlxuXG4gICBBbHRlcm5hdGl2ZWx5LCBpZiB0aGF0IGlzIHdoZXJlIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIsIHRoaXMgYWNrbm93bGVkZ21lbnQgbXVzdCBiZSByZXByb2R1Y2VkIGluIHRoZSBTb2Z0d2FyZSBpdHNlbGYuXG5cbiAgIDMuIEFueSBhY2FkZW1pYyByZXBvcnQsIHB1YmxpY2F0aW9uLCBvciBvdGhlciBhY2FkZW1pYyBkaXNjbG9zdXJlIG9mIHJlc3VsdHMgb2J0YWluZWQgd2l0aCB0aGlzIFNvZnR3YXJlIHdpbGwgYWNrbm93bGVkZ2UgdGhpcyBTb2Z0d2FyZSdzIHVzZSBieSBhbiBhcHByb3ByaWF0ZSBjaXRhdGlvbi5cblxuICAgNC4gVGhlIG5hbWUgQ29uZG9ywq4gaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiB0aGUgVW5pdmVyc2l0eSBvZiBXaXNjb25zaW4tTWFkaXNvbi4gVGhlIHRyYWRlbWFyayBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHNvZnR3YXJlLCBvciBwcm9kdWN0cyBkZXJpdmVkIHRoZXJlZnJvbSwgYW5kLCBvdGhlciB0aGFuIGFzIHJlcXVpcmVkIGJ5IHNlY3Rpb24gMiBhbmQgMyBhYm92ZSwgaXQgbWF5IG5vdCBiZSBhZmZpeGVkIHRvIG1vZGlmaWVkIHJlZGlzdHJpYnV0aW9ucyBvZiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gYXBwcm92YWwsIG9idGFpbmFibGUgdmlhIGVtYWlsIHRvIGNvbmRvci1hZG1pbkBjcy53aXNjLmVkdS5cblxuICAgNS4gVG8gdGhlIGV4dGVudCB0aGF0IHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSB0aGUgVW5pdmVyc2l0eSBvZiBXaXNjb25zaW4tTWFkaXNvbiBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2Ugb3Igc2FsZSBvZiB0aGUgU29mdHdhcmUsIHlvdSBhcmUgZ3JhbnRlZCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS0gZnJlZSBwZXJwZXR1YWwgbGljZW5zZSB1bmRlciBzdWNoIHBhdGVudCBjbGFpbXMsIHdpdGggdGhlIHJpZ2h0cyBmb3IgeW91IHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFNvZnR3YXJlIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtIGFuZCBkZXJpdmF0aXZlIHdvcmtzLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgU29mdHdhcmUgd2l0aCBvdGhlciBzb2Z0d2FyZSBpZiwgYXQgdGhlIHRpbWUgdGhlIFNvZnR3YXJlIGlzIGFkZGVkIGJ5IHlvdSwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgU29mdHdhcmUgY2F1c2VzIHN1Y2ggY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieSBzdWNoIHBhdGVudCBjbGFpbXMuIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgU29mdHdhcmUuIE5vIGhhcmR3YXJlIHBlciBzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuSWYgeW91IG9yIGFueSBzdWJzZXF1ZW50IHN1Yi1saWNlbnNlZSAoYSBgYFJlY2lwaWVudFwiKSBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgU29mdHdhcmUgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIHVuZGVyIHRoZSBwYXRlbnQgbGljZW5zZSBhYm92ZSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIFNvZnR3YXJlIHdoaWNoIGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHNhaWQgcGF0ZW50IGxpY2Vuc2UsIGlmIG5vdCBvdGhlcndpc2UgdGVybWluYXRlZCBwdXJzdWFudCB0byB0aGlzIHNlY3Rpb24uXG5cbiAgIDYuIERJU0NMQUlNRVJcblxuICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBBTkQgVEhFIFVOSVZFUlNJVFkgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBVU0UgQVJFIERJU0NMQUlNRUQuIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIEFORCBUSEUgVU5JVkVSU0lUWSBNQUtFIE5PIFJFUFJFU0VOVEFUSU9OIFRIQVQgVEhFIFNPRlRXQVJFLCBNT0RJRklDQVRJT05TLCBFTkhBTkNFTUVOVFMgT1IgREVSSVZBVElWRSBXT1JLUyBUSEVSRU9GLCBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgUEFURU5ULCBDT1BZUklHSFQsIFRSQURFTUFSSywgVFJBREUgU0VDUkVUIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hULlxuXG4gICA3LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWVxuXG4gICBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBBTkQgQU5ZIE9USEVSIE9GRklDRVIsIEFHRU5ULCBPUiBFTVBMT1lFRSBPRiBUSEUgVU5JVkVSU0lUWSBTSEFMTCBIQVZFIE5PIExJQUJJTElUWSBUTyBMSUNFTlNFRSBPUiBPVEhFUiBQRVJTT05TIEZPUiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBFWEVNUExBUlksIE9SIFBVTklUSVZFIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUywgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgUFJPRFVDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDguIENlcnRhaW4gdXNlcyBhbmQgdHJhbnNmZXJzIG9mIHRoZSBTb2Z0d2FyZSBvciBkb2N1bWVudGF0aW9uLCBhbmQvb3IgaXRlbXMgb3Igc29mdHdhcmUgaW5jb3Jwb3JhdGluZyB0aGUgQ29uZG9yIFNvZnR3YXJlIG9yIGRvY3VtZW50YXRpb24sIG1heSByZXF1aXJlIGEgbGljZW5zZSB1bmRlciBVLlMuIEV4cG9ydCBDb250cm9sIGxhd3MuIExpY2Vuc2VlIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQgYWxsIHVzZXMgYW5kIHRyYW5zZmVycyBvZiB0aGUgQ29uZG9yIFNvZnR3YXJlIG9yIGRvY3VtZW50YXRpb24gYW5kL29yIGFueSBpdGVtcyBvciBzb2Z0d2FyZSBpbmNvcnBvcmF0aW5nIENvbmRvciBzaGFsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggVS5TLiBFeHBvcnQgQ29udHJvbCBsYXdzLCBhbmQgTGljZW5zZWUgZnVydGhlciB1bmRlcnN0YW5kcyB0aGF0IGZhaWx1cmUgdG8gY29tcGx5IHdpdGggc3VjaCBleHBvcnQgY29udHJvbCBsYXdzIG1heSByZXN1bHQgaW4gY3JpbWluYWwgbGlhYmlsaXR5IHRvIExpY2Vuc2VlIHVuZGVyIFUuUy4gbGF3cy5cblxuICAgOS4gVGhlIENvbmRvciBUZWFtIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIENvbmRvciBQdWJsaWMgTGljZW5zZSAoYGB0aGlzIExpY2Vuc2VcIikgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgU29mdHdhcmUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHB1Ymxpc2hlZCBieSB0aGUgQ29uZG9yIFRlYW0uIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBDb25kb3IgVGVhbSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbjpcblxuQ29uZG9yIFRlYW1cblxuQXR0ZW50aW9uOiBQcm9mZXNzb3IgTWlyb24gTGl2bnlcblxuNzM2NyBDb21wdXRlciBTY2llbmNlc1xuXG4xMjEwIFcuIERheXRvbiBTdC5cblxuTWFkaXNvbiwgV0kgNTM3MDYtMTY4NVxuXG5taXJvbkBjcy53aXNjLmVkdVxuXG5odHRwOi8vcGFnZXMuY3Mud2lzYy5lZHUvfm1pcm9uL21pcm9uLmh0bWwiXSwibGljZW5zZUlkcyI6WyJDb25kb3ItMS4xIl0sImtleXdvcmRzIjpbIjEgMSBvY3RvYmVyIiwiMSBvY3RvYmVyIDMwIiwib2N0b2JlciAzMCAyMDAzIiwiMzAgMjAwMyBjb3B5cmlnaHQiLCIyMDAzIGNvcHlyaWdodCAxOTkwIiwiY29weXJpZ2h0IDE5OTAgMjAwNiIsIjE5OTAgMjAwNiBjb25kb3IiLCIyMDA2IGNvbmRvciB0ZWFtIiwid2lzY29uc2luIG1hZGlzb24gbWFkaXNvbiIsIm1hZGlzb24gbWFkaXNvbiB3aSIsIm1hZGlzb24gd2kgYWxsIiwid2kgYWxsIHJpZ2h0cyIsInJlc2VydmVkIGZvciBtb3JlIiwibW9yZSBpbmZvcm1hdGlvbiBjb250YWN0IiwiaW5mb3JtYXRpb24gY29udGFjdCBjb25kb3IiLCJjb250YWN0IGNvbmRvciB0ZWFtIiwibWlyb24gbGl2bnkgZGVwdCIsImxpdm55IGRlcHQgb2YiLCJkZXB0IG9mIGNvbXB1dGVyIiwib2YgY29tcHV0ZXIgc2NpZW5jZXMiLCI1MzcwNiAxNjg1IDYwOCIsIjE2ODUgNjA4IDI2MiIsIjYwOCAyNjIgMDg1NiIsIjI2MiAwODU2IG9yIiwiMDg1NiBvciBtaXJvbiIsIm9yIG1pcm9uIGNzIiwid2lzYyBlZHUgdGhpcyIsInRoaXMgc29mdHdhcmUgcmVmZXJyZWQiLCJzb2Z0d2FyZSByZWZlcnJlZCB0byIsImFzIHRoZSBjb25kb3IiLCJ0aGUgY29uZG9yIHZlcnNpb24iLCJjb25kb3IgdmVyc2lvbiA2IiwidmVyc2lvbiA2IHgiLCI2IHggc29mdHdhcmUiLCJ4IHNvZnR3YXJlIHNvZnR3YXJlIiwic29mdHdhcmUgc29mdHdhcmUgd2FzIiwic29mdHdhcmUgd2FzIGRldmVsb3BlZCIsImNvbmRvciBwcm9qZWN0IGNvbmRvciIsInByb2plY3QgY29uZG9yIHRlYW0iLCJ3aXNjb25zaW4gbWFkaXNvbiB1bmRlciIsIm1hZGlzb24gdW5kZXIgdGhlIiwidW5kZXIgdGhlIGF1dGhvcml0eSIsInRoZSBhdXRob3JpdHkgb2YiLCJhdXRob3JpdHkgb2YgdGhlIiwib2YgdGhlIGJvYXJkIiwidGhlIGJvYXJkIG9mIiwiYm9hcmQgb2YgcmVnZW50cyIsIm9mIHJlZ2VudHMgb2YiLCJvZiB3aXNjb25zaW4gc3lzdGVtIiwid2lzY29uc2luIHN5c3RlbSBhbmQiLCJzeXN0ZW0gYW5kIGluY2x1ZGVzIiwiYW5kIGluY2x1ZGVzIHZvbHVudGFyeSIsInRvIHRoZSBjb25kb3IiLCJjb25kb3IgcHJvamVjdCBjb3B5cmlnaHQiLCJwcm9qZWN0IGNvcHlyaWdodCBob2xkZXJzIiwidGhlIHVuaXZlcnNpdHkgZm9yIiwidW5pdmVyc2l0eSBmb3IgbW9yZSIsIm9uIHRoZSBjb25kb3IiLCJjb25kb3IgcHJvamVjdCBwbGVhc2UiLCJjb25kb3Jwcm9qZWN0IG9yZyBpbnN0YWxsYXRpb24iLCJsaWNlbnNlIGluY2x1ZGluZyBzdWJsaWNlbnNlcyIsImluY2x1ZGluZyBzdWJsaWNlbnNlcyBieSIsInN1YmxpY2Vuc2VzIGJ5IHlvdSIsInlvdSBpcyBzdWJqZWN0IiwibXVzdCByZXByb2R1Y2UgdGhpcyIsInJlcHJvZHVjZSB0aGlzIGNvbmRvciIsImxpY2Vuc2UgaW4gMSIsImluIDEgdGhlIiwiMSB0aGUgc29mdHdhcmUiLCJhbmQgMiBhbnkiLCJ1c2VyIGRvY3VtZW50YXRpb24gb3IiLCJkb2N1bWVudGF0aW9uIG9yIG90aGVyIiwib3RoZXIgc2ltaWxhciBtYXRlcmlhbCIsInNpbWlsYXIgbWF0ZXJpYWwgd2hpY2giLCJtYXRlcmlhbCB3aGljaCBpcyIsInNvZnR3YXJlIDIgYW55IiwiaW5jbHVkZXMgc29mdHdhcmUgZnJvbSIsImZyb20gdGhlIGNvbmRvciIsImNvbmRvciBwcm9qZWN0IGh0dHAiLCJjb25kb3Jwcm9qZWN0IG9yZyBhbHRlcm5hdGl2ZWx5IiwiaXRzZWxmIDMgYW55IiwiMyBhbnkgYWNhZGVtaWMiLCJhbnkgYWNhZGVtaWMgcmVwb3J0IiwiYWNhZGVtaWMgcmVwb3J0IHB1YmxpY2F0aW9uIiwicmVwb3J0IHB1YmxpY2F0aW9uIG9yIiwicHVibGljYXRpb24gb3Igb3RoZXIiLCJvciBvdGhlciBhY2FkZW1pYyIsIm90aGVyIGFjYWRlbWljIGRpc2Nsb3N1cmUiLCJhY2FkZW1pYyBkaXNjbG9zdXJlIG9mIiwiZGlzY2xvc3VyZSBvZiByZXN1bHRzIiwib2YgcmVzdWx0cyBvYnRhaW5lZCIsInJlc3VsdHMgb2J0YWluZWQgd2l0aCIsIm9idGFpbmVkIHdpdGggdGhpcyIsInRoaXMgc29mdHdhcmUgd2lsbCIsInNvZnR3YXJlIHdpbGwgYWNrbm93bGVkZ2UiLCJ3aWxsIGFja25vd2xlZGdlIHRoaXMiLCJhY2tub3dsZWRnZSB0aGlzIHNvZnR3YXJlIiwidGhpcyBzb2Z0d2FyZSBzIiwicyB1c2UgYnkiLCJ1c2UgYnkgYW4iLCJieSBhbiBhcHByb3ByaWF0ZSIsImFuIGFwcHJvcHJpYXRlIGNpdGF0aW9uIiwiYXBwcm9wcmlhdGUgY2l0YXRpb24gNCIsImNpdGF0aW9uIDQgdGhlIiwidGhlIG5hbWUgY29uZG9yIiwibmFtZSBjb25kb3IgaXMiLCJjb25kb3IgaXMgYSIsIndpc2NvbnNpbiBtYWRpc29uIHRoZSIsIm1hZGlzb24gdGhlIHRyYWRlbWFyayIsInRoZSB0cmFkZW1hcmsgbWF5IiwidHJhZGVtYXJrIG1heSBub3QiLCJkZXJpdmVkIHRoZXJlZnJvbSBhbmQiLCJ0aGVyZWZyb20gYW5kIG90aGVyIiwiYW5kIG90aGVyIHRoYW4iLCJ0aGFuIGFzIHJlcXVpcmVkIiwiYnkgc2VjdGlvbiAyIiwic2VjdGlvbiAyIGFuZCIsIjMgYWJvdmUgaXQiLCJhYm92ZSBpdCBtYXkiLCJub3QgYmUgYWZmaXhlZCIsImJlIGFmZml4ZWQgdG8iLCJhZmZpeGVkIHRvIG1vZGlmaWVkIiwidG8gbW9kaWZpZWQgcmVkaXN0cmlidXRpb25zIiwid3JpdHRlbiBhcHByb3ZhbCBvYnRhaW5hYmxlIiwiYXBwcm92YWwgb2J0YWluYWJsZSB2aWEiLCJvYnRhaW5hYmxlIHZpYSBlbWFpbCIsImVtYWlsIHRvIGNvbmRvciIsInRvIGNvbmRvciBhZG1pbiIsImNvbmRvciBhZG1pbiBjcyIsImFkbWluIGNzIHdpc2MiLCJ3aXNjIGVkdSA1IiwiZWR1IDUgdG8iLCI1IHRvIHRoZSIsImV4dGVudCB0aGF0IHBhdGVudCIsInRoYXQgcGF0ZW50IGNsYWltcyIsIndpc2NvbnNpbiBtYWRpc29uIGFyZSIsIm1hZGlzb24gYXJlIG5lY2Vzc2FyaWx5Iiwic2FsZSBvZiB0aGUiLCJhcmUgZ3JhbnRlZCBhIiwiZ3JhbnRlZCBhIG5vbiIsInBlcnBldHVhbCBsaWNlbnNlIHVuZGVyIiwibGljZW5zZSB1bmRlciBzdWNoIiwidW5kZXIgc3VjaCBwYXRlbnQiLCJwYXRlbnQgY2xhaW1zIHdpdGgiLCJjbGFpbXMgd2l0aCB0aGUiLCJ0aGUgcmlnaHRzIGZvciIsInJpZ2h0cyBmb3IgeW91IiwidHJhbnNmZXIgdGhlIHNvZnR3YXJlIiwiZm9ybSBhbmQgZGVyaXZhdGl2ZSIsIndvcmtzIHRoaXMgcGF0ZW50Iiwib3RoZXIgc29mdHdhcmUgaWYiLCJ0aW1lIHRoZSBzb2Z0d2FyZSIsInNvZnR3YXJlIGlzIGFkZGVkIiwiYnkgeW91IHN1Y2giLCJ5b3Ugc3VjaCBhZGRpdGlvbiIsInRoZSBzb2Z0d2FyZSBjYXVzZXMiLCJzb2Z0d2FyZSBjYXVzZXMgc3VjaCIsImNvdmVyZWQgYnkgc3VjaCIsImJ5IHN1Y2ggcGF0ZW50IiwicGF0ZW50IGNsYWltcyB0aGlzIiwiY2xhaW1zIHRoaXMgcGF0ZW50IiwiaW5jbHVkZSB0aGUgc29mdHdhcmUiLCJzb2Z0d2FyZSBubyBoYXJkd2FyZSIsImhlcmV1bmRlciBpZiB5b3UiLCJhbnkgc3Vic2VxdWVudCBzdWIiLCJzdWJzZXF1ZW50IHN1YiBsaWNlbnNlZSIsInN1YiBsaWNlbnNlZSBhIiwibGljZW5zZWUgYSByZWNpcGllbnQiLCJhIHJlY2lwaWVudCBpbnN0aXR1dGVzIiwic29mdHdhcmUgaW5mcmluZ2VzIHN1Y2giLCJvciBpbmRpcmVjdGx5IHVuZGVyIiwiaW5kaXJlY3RseSB1bmRlciB0aGUiLCJ1bmRlciB0aGUgcGF0ZW50IiwicGF0ZW50IGxpY2Vuc2UgYWJvdmUiLCJsaWNlbnNlIGFib3ZlIHNoYWxsIiwiYWJvdmUgc2hhbGwgdGVybWluYXRlIiwiZmlsZWQgYWxsIHN1YmxpY2Vuc2VzIiwidGVybWluYXRpb24gb2Ygc2FpZCIsIm9mIHNhaWQgcGF0ZW50Iiwic2FpZCBwYXRlbnQgbGljZW5zZSIsInBhdGVudCBsaWNlbnNlIGlmIiwibGljZW5zZSBpZiBub3QiLCJpZiBub3Qgb3RoZXJ3aXNlIiwibm90IG90aGVyd2lzZSB0ZXJtaW5hdGVkIiwib3RoZXJ3aXNlIHRlcm1pbmF0ZWQgcHVyc3VhbnQiLCJ0ZXJtaW5hdGVkIHB1cnN1YW50IHRvIiwiNiBkaXNjbGFpbWVyIHRoaXMiLCJ0aGUgdW5pdmVyc2l0eSBhcyIsInVuaXZlcnNpdHkgYXMgaXMiLCJkaXNjbGFpbWVkIHRoZSBjb3B5cmlnaHQiLCJ0aGUgdW5pdmVyc2l0eSBtYWtlIiwicGF0ZW50IGNvcHlyaWdodCB0cmFkZW1hcmsiLCJjb3B5cmlnaHQgdHJhZGVtYXJrIHRyYWRlIiwidHJhZGVtYXJrIHRyYWRlIHNlY3JldCIsInByb3ByaWV0YXJ5IHJpZ2h0IDciLCJyaWdodCA3IGxpbWl0YXRpb24iLCJsaWFiaWxpdHkgdGhlIGNvcHlyaWdodCIsImNvbnRyaWJ1dG9ycyBhbmQgYW55IiwiYW55IG90aGVyIG9mZmljZXIiLCJvdGhlciBvZmZpY2VyIGFnZW50Il19LHsibGljZW5zZVRleHRzIjpbIkNvcHlyaWdodCAoQykgMTk5NS0yMDA5IEdlcmQgTmV1Z2ViYXVlclxuXG5jd3B1enpsZS5kdHggaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLiBObyBhdXRob3Igb3IgZGlzdHJpYnV0b3IgYWNjZXB0cyByZXNwb25zaWJpbGl0eSB0byBhbnlvbmUgZm9yIHRoZSBjb25zZXF1ZW5jZXMgb2YgdXNpbmcgaXQgb3IgZm9yIHdoZXRoZXIgaXQgc2VydmVzIGFueSBwYXJ0aWN1bGFyIHB1cnBvc2Ugb3Igd29ya3MgYXQgYWxsLCB1bmxlc3MgaGUgc2F5cyBzbyBpbiB3cml0aW5nLlxuXG4uXG5cbkV2ZXJ5b25lIGlzIGdyYW50ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSBjd3B1enpsZS5kdHgsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcyBwcmVzZXJ2ZWQgYW5kIGFueSBtb2RpZmljYXRpb25zIGFyZSBpbmRpY2F0ZWQuIl0sImxpY2Vuc2VJZHMiOlsiQ3Jvc3N3b3JkIl0sImtleXdvcmRzIjpbImMgMTk5NSAyMDA5IiwiMTk5NSAyMDA5IGdlcmQiLCIyMDA5IGdlcmQgbmV1Z2ViYXVlciIsImdlcmQgbmV1Z2ViYXVlciBjd3B1enpsZSIsIm5ldWdlYmF1ZXIgY3dwdXp6bGUgZHR4IiwiY3dwdXp6bGUgZHR4IGlzIiwiZHR4IGlzIGRpc3RyaWJ1dGVkIiwiYW55IHdhcnJhbnR5IG5vIiwid2FycmFudHkgbm8gYXV0aG9yIiwidXNpbmcgaXQgb3IiLCJpdCBvciBmb3IiLCJ1bmxlc3MgaGUgc2F5cyIsImhlIHNheXMgc28iLCJhbmQgcmVkaXN0cmlidXRlIGN3cHV6emxlIiwicmVkaXN0cmlidXRlIGN3cHV6emxlIGR0eCIsImN3cHV6emxlIGR0eCBwcm92aWRlZCIsImR0eCBwcm92aWRlZCB0aGlzIiwicHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQiLCJpcyBwcmVzZXJ2ZWQgYW5kIiwicHJlc2VydmVkIGFuZCBhbnkiLCJhbnkgbW9kaWZpY2F0aW9ucyBhcmUiLCJtb2RpZmljYXRpb25zIGFyZSBpbmRpY2F0ZWQiLCJjb3B5cmlnaHQgYyAxOTk1IDIwMDkiLCJjIDE5OTUgMjAwOSBnZXJkIiwiMTk5NSAyMDA5IGdlcmQgbmV1Z2ViYXVlciIsIjIwMDkgZ2VyZCBuZXVnZWJhdWVyIGN3cHV6emxlIiwiZ2VyZCBuZXVnZWJhdWVyIGN3cHV6emxlIGR0eCIsIm5ldWdlYmF1ZXIgY3dwdXp6bGUgZHR4IGlzIiwiY3dwdXp6bGUgZHR4IGlzIGRpc3RyaWJ1dGVkIiwiZHR4IGlzIGRpc3RyaWJ1dGVkIGluIiwid2l0aG91dCBhbnkgd2FycmFudHkgbm8iLCJhbnkgd2FycmFudHkgbm8gYXV0aG9yIiwid2FycmFudHkgbm8gYXV0aG9yIG9yIiwiY29uc2VxdWVuY2VzIG9mIHVzaW5nIGl0Iiwib2YgdXNpbmcgaXQgb3IiLCJ1c2luZyBpdCBvciBmb3IiLCJpdCBvciBmb3Igd2hldGhlciIsImFsbCB1bmxlc3MgaGUgc2F5cyIsInVubGVzcyBoZSBzYXlzIHNvIiwiaGUgc2F5cyBzbyBpbiIsIm1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIGN3cHV6emxlIiwiYW5kIHJlZGlzdHJpYnV0ZSBjd3B1enpsZSBkdHgiLCJyZWRpc3RyaWJ1dGUgY3dwdXp6bGUgZHR4IHByb3ZpZGVkIiwiY3dwdXp6bGUgZHR4IHByb3ZpZGVkIHRoaXMiLCJkdHggcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQiLCJwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UiLCJjb3B5cmlnaHQgbm90aWNlIGlzIHByZXNlcnZlZCIsIm5vdGljZSBpcyBwcmVzZXJ2ZWQgYW5kIiwiaXMgcHJlc2VydmVkIGFuZCBhbnkiLCJwcmVzZXJ2ZWQgYW5kIGFueSBtb2RpZmljYXRpb25zIiwiYW5kIGFueSBtb2RpZmljYXRpb25zIGFyZSIsImFueSBtb2RpZmljYXRpb25zIGFyZSBpbmRpY2F0ZWQiLCJjb3B5cmlnaHQgYyAxOTk1IDIwMDkgZ2VyZCIsImMgMTk5NSAyMDA5IGdlcmQgbmV1Z2ViYXVlciIsIjE5OTUgMjAwOSBnZXJkIG5ldWdlYmF1ZXIgY3dwdXp6bGUiLCIyMDA5IGdlcmQgbmV1Z2ViYXVlciBjd3B1enpsZSBkdHgiLCJnZXJkIG5ldWdlYmF1ZXIgY3dwdXp6bGUgZHR4IGlzIiwibmV1Z2ViYXVlciBjd3B1enpsZSBkdHggaXMgZGlzdHJpYnV0ZWQiLCJjd3B1enpsZSBkdHggaXMgZGlzdHJpYnV0ZWQgaW4iLCJkdHggaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIiwiYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5IG5vIiwid2l0aG91dCBhbnkgd2FycmFudHkgbm8gYXV0aG9yIiwiYW55IHdhcnJhbnR5IG5vIGF1dGhvciBvciIsIndhcnJhbnR5IG5vIGF1dGhvciBvciBkaXN0cmlidXRvciIsInRoZSBjb25zZXF1ZW5jZXMgb2YgdXNpbmcgaXQiLCJjb25zZXF1ZW5jZXMgb2YgdXNpbmcgaXQgb3IiLCJvZiB1c2luZyBpdCBvciBmb3IiLCJ1c2luZyBpdCBvciBmb3Igd2hldGhlciIsIml0IG9yIGZvciB3aGV0aGVyIGl0IiwiYXQgYWxsIHVubGVzcyBoZSBzYXlzIiwiYWxsIHVubGVzcyBoZSBzYXlzIHNvIiwidW5sZXNzIGhlIHNheXMgc28gaW4iLCJoZSBzYXlzIHNvIGluIHdyaXRpbmciLCJjb3B5IG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIGN3cHV6emxlIiwibW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgY3dwdXp6bGUgZHR4IiwiYW5kIHJlZGlzdHJpYnV0ZSBjd3B1enpsZSBkdHggcHJvdmlkZWQiLCJyZWRpc3RyaWJ1dGUgY3dwdXp6bGUgZHR4IHByb3ZpZGVkIHRoaXMiLCJjd3B1enpsZSBkdHggcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQiLCJkdHggcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIiwicHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzIiwidGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzIHByZXNlcnZlZCIsImNvcHlyaWdodCBub3RpY2UgaXMgcHJlc2VydmVkIGFuZCIsIm5vdGljZSBpcyBwcmVzZXJ2ZWQgYW5kIGFueSIsImlzIHByZXNlcnZlZCBhbmQgYW55IG1vZGlmaWNhdGlvbnMiLCJwcmVzZXJ2ZWQgYW5kIGFueSBtb2RpZmljYXRpb25zIGFyZSIsImFuZCBhbnkgbW9kaWZpY2F0aW9ucyBhcmUgaW5kaWNhdGVkIl19LHsibGljZW5zZVRleHRzIjpbIkNyeXN0YWwgU3RhY2tlciBpcyBmcmVld2FyZS4gVGhpcyBtZWFucyB5b3UgY2FuIHBhc3MgY29waWVzIGFyb3VuZCBmcmVlbHkgcHJvdmlkZWQgeW91IGluY2x1ZGUgdGhpcyBkb2N1bWVudCBpbiBpdCdzIG9yaWdpbmFsIGZvcm0gaW4geW91ciBkaXN0cmlidXRpb24uIFBsZWFzZSBzZWUgdGhlIFwiQ29udGFjdGluZyBVc1wiIHNlY3Rpb24gb2YgdGhpcyBkb2N1bWVudCBpZiB5b3UgbmVlZCB0byBjb250YWN0IHVzIGZvciBhbnkgcmVhc29uLlxuXG5EaXNjbGFpbWVyXG5cbk5ld0NyZWF0dXJlIERlc2lnbiBtYWtlcyBubyBndWFyYW50ZWVzIHJlZ2FyZGluZyB0aGUgQ3J5c3RhbCBTdGFja2VyIHNvZnR3YXJlLiBXZSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGNhdXNlZCBieSBpdCwgdGhvdWdoIHRoZSBzb2Z0d2FyZSBpcyBub3Qga25vd24gdG8gY2F1c2UgYW55IHByb2JsZW1zLiBJZiB5b3UgaGF2ZSB0cm91YmxlIHdpdGggdGhlIHNvZnR3YXJlLCBzZWUgdGhlIFwiQ29udGFjdGluZyBVc1wiIHNlY3Rpb24gb2YgdGhpcyBkb2N1bWVudC5cblxuVGhlIHNvdXJjZSBjb2RlIGlzIHByb3ZpZGVkIGFzLWlzIGFuZCB5b3UgbWF5IGRvIHdpdGggaXQgd2hhdHNvZXZlciB5b3UgcGxlYXNlIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgdGhpcyBmaWxlIGluIGl0cyB1bm1vZGlmaWVkIGZvcm0gd2l0aCBhbnkgbmV3IGRpc3RyaWJ1dGlvbi4gTmV3Q3JlYXR1cmUgRGVzaWduIG1ha2VzIG5vIGdhdXJhbnRlZXMgcmVnYXJkaW5nIHRoZSB1c2FiaWxpdHkgb2YgdGhlIHNvdXJjZSBidXQgYXJlIHdpbGxpbmcgdG8gaGVscCB3aXRoIGFueSBwcm9ibGVtcyB5b3UgbWlnaHQgcnVuIGludG8uIFBsZWFzZSBzZWUgdGhlIFwiQ29udGFjdGluZyBVc1wiIHNlY3Rpb24gb2YgdGhpcyBkb2N1bWVudCBpZiB5b3UgbmVlZCB0byBnZXQgaW4gdG91Y2ggd2l0aCB1cyBhYm91dCBhbnkgaXNzdWVzIHlvdSBoYXZlIHJlZ2FyZGluZyB0aGUgc291cmNlLiJdLCJsaWNlbnNlSWRzIjpbIkNyeXN0YWxTdGFja2VyIl0sImtleXdvcmRzIjpbImNyeXN0YWwgc3RhY2tlciBpcyIsInN0YWNrZXIgaXMgZnJlZXdhcmUiLCJpcyBmcmVld2FyZSB0aGlzIiwiZnJlZXdhcmUgdGhpcyBtZWFucyIsInRoaXMgbWVhbnMgeW91IiwibWVhbnMgeW91IGNhbiIsInlvdSBjYW4gcGFzcyIsImNhbiBwYXNzIGNvcGllcyIsInBhc3MgY29waWVzIGFyb3VuZCIsImNvcGllcyBhcm91bmQgZnJlZWx5IiwiYXJvdW5kIGZyZWVseSBwcm92aWRlZCIsImZyZWVseSBwcm92aWRlZCB5b3UiLCJwcm92aWRlZCB5b3UgaW5jbHVkZSIsImRvY3VtZW50IGluIGl0IiwiaW4gaXQgcyIsIml0IHMgb3JpZ2luYWwiLCJzIG9yaWdpbmFsIGZvcm0iLCJvcmlnaW5hbCBmb3JtIGluIiwiZm9ybSBpbiB5b3VyIiwiaW4geW91ciBkaXN0cmlidXRpb24iLCJ5b3VyIGRpc3RyaWJ1dGlvbiBwbGVhc2UiLCJkaXN0cmlidXRpb24gcGxlYXNlIHNlZSIsIm5lZWQgdG8gY29udGFjdCIsInRvIGNvbnRhY3QgdXMiLCJjb250YWN0IHVzIGZvciIsInVzIGZvciBhbnkiLCJhbnkgcmVhc29uIGRpc2NsYWltZXIiLCJyZWFzb24gZGlzY2xhaW1lciBuZXdjcmVhdHVyZSIsImRpc2NsYWltZXIgbmV3Y3JlYXR1cmUgZGVzaWduIiwibm8gZ3VhcmFudGVlcyByZWdhcmRpbmciLCJndWFyYW50ZWVzIHJlZ2FyZGluZyB0aGUiLCJyZWdhcmRpbmcgdGhlIGNyeXN0YWwiLCJ0aGUgY3J5c3RhbCBzdGFja2VyIiwiY3J5c3RhbCBzdGFja2VyIHNvZnR3YXJlIiwic3RhY2tlciBzb2Z0d2FyZSB3ZSIsIndlIGFyZSBub3QiLCJmb3IgZGFtYWdlcyBjYXVzZWQiLCJjYXVzZWQgYnkgaXQiLCJieSBpdCB0aG91Z2giLCJpdCB0aG91Z2ggdGhlIiwidGhvdWdoIHRoZSBzb2Z0d2FyZSIsImlzIG5vdCBrbm93biIsIm5vdCBrbm93biB0byIsImtub3duIHRvIGNhdXNlIiwidG8gY2F1c2UgYW55IiwiY2F1c2UgYW55IHByb2JsZW1zIiwiYW55IHByb2JsZW1zIGlmIiwicHJvYmxlbXMgaWYgeW91IiwieW91IGhhdmUgdHJvdWJsZSIsImhhdmUgdHJvdWJsZSB3aXRoIiwidHJvdWJsZSB3aXRoIHRoZSIsInRoZSBzb2Z0d2FyZSBzZWUiLCJzb2Z0d2FyZSBzZWUgdGhlIiwiZG9jdW1lbnQgdGhlIHNvdXJjZSIsIm1heSBkbyB3aXRoIiwiZG8gd2l0aCBpdCIsIndpdGggaXQgd2hhdHNvZXZlciIsIml0IHdoYXRzb2V2ZXIgeW91Iiwid2hhdHNvZXZlciB5b3UgcGxlYXNlIiwieW91IHBsZWFzZSBwcm92aWRlZCIsInBsZWFzZSBwcm92aWRlZCB0aGF0IiwiaW5jbHVkZSB0aGlzIGZpbGUiLCJpbiBpdHMgdW5tb2RpZmllZCIsIml0cyB1bm1vZGlmaWVkIGZvcm0iLCJ1bm1vZGlmaWVkIGZvcm0gd2l0aCIsImZvcm0gd2l0aCBhbnkiLCJ3aXRoIGFueSBuZXciLCJhbnkgbmV3IGRpc3RyaWJ1dGlvbiIsIm5ldyBkaXN0cmlidXRpb24gbmV3Y3JlYXR1cmUiLCJkaXN0cmlidXRpb24gbmV3Y3JlYXR1cmUgZGVzaWduIiwibWFrZXMgbm8gZ2F1cmFudGVlcyIsIm5vIGdhdXJhbnRlZXMgcmVnYXJkaW5nIiwiZ2F1cmFudGVlcyByZWdhcmRpbmcgdGhlIiwicmVnYXJkaW5nIHRoZSB1c2FiaWxpdHkiLCJ0aGUgdXNhYmlsaXR5IG9mIiwidXNhYmlsaXR5IG9mIHRoZSIsInRoZSBzb3VyY2UgYnV0Iiwic291cmNlIGJ1dCBhcmUiLCJidXQgYXJlIHdpbGxpbmciLCJ3aWxsaW5nIHRvIGhlbHAiLCJ0byBoZWxwIHdpdGgiLCJoZWxwIHdpdGggYW55Iiwid2l0aCBhbnkgcHJvYmxlbXMiLCJhbnkgcHJvYmxlbXMgeW91IiwicHJvYmxlbXMgeW91IG1pZ2h0IiwieW91IG1pZ2h0IHJ1biIsIm1pZ2h0IHJ1biBpbnRvIiwicnVuIGludG8gcGxlYXNlIiwiaW50byBwbGVhc2Ugc2VlIiwibmVlZCB0byBnZXQiLCJ0byBnZXQgaW4iLCJnZXQgaW4gdG91Y2giLCJpbiB0b3VjaCB3aXRoIiwidG91Y2ggd2l0aCB1cyIsIndpdGggdXMgYWJvdXQiLCJ1cyBhYm91dCBhbnkiLCJhYm91dCBhbnkgaXNzdWVzIiwiYW55IGlzc3VlcyB5b3UiLCJpc3N1ZXMgeW91IGhhdmUiLCJ5b3UgaGF2ZSByZWdhcmRpbmciLCJoYXZlIHJlZ2FyZGluZyB0aGUiLCJyZWdhcmRpbmcgdGhlIHNvdXJjZSIsImNyeXN0YWwgc3RhY2tlciBpcyBmcmVld2FyZSIsInN0YWNrZXIgaXMgZnJlZXdhcmUgdGhpcyIsImlzIGZyZWV3YXJlIHRoaXMgbWVhbnMiLCJmcmVld2FyZSB0aGlzIG1lYW5zIHlvdSIsInRoaXMgbWVhbnMgeW91IGNhbiIsIm1lYW5zIHlvdSBjYW4gcGFzcyIsInlvdSBjYW4gcGFzcyBjb3BpZXMiLCJjYW4gcGFzcyBjb3BpZXMgYXJvdW5kIiwicGFzcyBjb3BpZXMgYXJvdW5kIGZyZWVseSIsImNvcGllcyBhcm91bmQgZnJlZWx5IHByb3ZpZGVkIiwiYXJvdW5kIGZyZWVseSBwcm92aWRlZCB5b3UiLCJmcmVlbHkgcHJvdmlkZWQgeW91IGluY2x1ZGUiLCJwcm92aWRlZCB5b3UgaW5jbHVkZSB0aGlzIiwieW91IGluY2x1ZGUgdGhpcyBkb2N1bWVudCIsInRoaXMgZG9jdW1lbnQgaW4gaXQiLCJkb2N1bWVudCBpbiBpdCBzIiwiaW4gaXQgcyBvcmlnaW5hbCIsIml0IHMgb3JpZ2luYWwgZm9ybSIsInMgb3JpZ2luYWwgZm9ybSBpbiIsIm9yaWdpbmFsIGZvcm0gaW4geW91ciIsImZvcm0gaW4geW91ciBkaXN0cmlidXRpb24iLCJpbiB5b3VyIGRpc3RyaWJ1dGlvbiBwbGVhc2UiLCJ5b3VyIGRpc3RyaWJ1dGlvbiBwbGVhc2Ugc2VlIiwiZGlzdHJpYnV0aW9uIHBsZWFzZSBzZWUgdGhlIiwieW91IG5lZWQgdG8gY29udGFjdCIsIm5lZWQgdG8gY29udGFjdCB1cyIsInRvIGNvbnRhY3QgdXMgZm9yIiwiY29udGFjdCB1cyBmb3IgYW55IiwidXMgZm9yIGFueSByZWFzb24iLCJmb3IgYW55IHJlYXNvbiBkaXNjbGFpbWVyIiwiYW55IHJlYXNvbiBkaXNjbGFpbWVyIG5ld2NyZWF0dXJlIiwicmVhc29uIGRpc2NsYWltZXIgbmV3Y3JlYXR1cmUgZGVzaWduIiwiZGlzY2xhaW1lciBuZXdjcmVhdHVyZSBkZXNpZ24gbWFrZXMiLCJkZXNpZ24gbWFrZXMgbm8gZ3VhcmFudGVlcyIsIm1ha2VzIG5vIGd1YXJhbnRlZXMgcmVnYXJkaW5nIiwibm8gZ3VhcmFudGVlcyByZWdhcmRpbmcgdGhlIiwiZ3VhcmFudGVlcyByZWdhcmRpbmcgdGhlIGNyeXN0YWwiLCJyZWdhcmRpbmcgdGhlIGNyeXN0YWwgc3RhY2tlciIsInRoZSBjcnlzdGFsIHN0YWNrZXIgc29mdHdhcmUiLCJjcnlzdGFsIHN0YWNrZXIgc29mdHdhcmUgd2UiLCJzdGFja2VyIHNvZnR3YXJlIHdlIGFyZSIsInNvZnR3YXJlIHdlIGFyZSBub3QiLCJ3ZSBhcmUgbm90IHJlc3BvbnNpYmxlIiwibm90IHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIiwicmVzcG9uc2libGUgZm9yIGRhbWFnZXMgY2F1c2VkIiwiZm9yIGRhbWFnZXMgY2F1c2VkIGJ5IiwiZGFtYWdlcyBjYXVzZWQgYnkgaXQiLCJjYXVzZWQgYnkgaXQgdGhvdWdoIiwiYnkgaXQgdGhvdWdoIHRoZSIsIml0IHRob3VnaCB0aGUgc29mdHdhcmUiLCJ0aG91Z2ggdGhlIHNvZnR3YXJlIGlzIiwic29mdHdhcmUgaXMgbm90IGtub3duIiwiaXMgbm90IGtub3duIHRvIiwibm90IGtub3duIHRvIGNhdXNlIiwia25vd24gdG8gY2F1c2UgYW55IiwidG8gY2F1c2UgYW55IHByb2JsZW1zIiwiY2F1c2UgYW55IHByb2JsZW1zIGlmIiwiYW55IHByb2JsZW1zIGlmIHlvdSIsInByb2JsZW1zIGlmIHlvdSBoYXZlIiwiaWYgeW91IGhhdmUgdHJvdWJsZSIsInlvdSBoYXZlIHRyb3VibGUgd2l0aCIsImhhdmUgdHJvdWJsZSB3aXRoIHRoZSIsInRyb3VibGUgd2l0aCB0aGUgc29mdHdhcmUiLCJ3aXRoIHRoZSBzb2Z0d2FyZSBzZWUiLCJ0aGUgc29mdHdhcmUgc2VlIHRoZSIsInNvZnR3YXJlIHNlZSB0aGUgY29udGFjdGluZyIsInRoaXMgZG9jdW1lbnQgdGhlIHNvdXJjZSIsImRvY3VtZW50IHRoZSBzb3VyY2UgY29kZSIsImlzIGFuZCB5b3UgbWF5IiwiYW5kIHlvdSBtYXkgZG8iLCJ5b3UgbWF5IGRvIHdpdGgiLCJtYXkgZG8gd2l0aCBpdCIsImRvIHdpdGggaXQgd2hhdHNvZXZlciIsIndpdGggaXQgd2hhdHNvZXZlciB5b3UiLCJpdCB3aGF0c29ldmVyIHlvdSBwbGVhc2UiLCJ3aGF0c29ldmVyIHlvdSBwbGVhc2UgcHJvdmlkZWQiLCJ5b3UgcGxlYXNlIHByb3ZpZGVkIHRoYXQiLCJwbGVhc2UgcHJvdmlkZWQgdGhhdCB5b3UiLCJ0aGF0IHlvdSBpbmNsdWRlIHRoaXMiLCJ5b3UgaW5jbHVkZSB0aGlzIGZpbGUiLCJpbmNsdWRlIHRoaXMgZmlsZSBpbiIsInRoaXMgZmlsZSBpbiBpdHMiLCJmaWxlIGluIGl0cyB1bm1vZGlmaWVkIiwiaW4gaXRzIHVubW9kaWZpZWQgZm9ybSIsIml0cyB1bm1vZGlmaWVkIGZvcm0gd2l0aCIsInVubW9kaWZpZWQgZm9ybSB3aXRoIGFueSIsImZvcm0gd2l0aCBhbnkgbmV3Iiwid2l0aCBhbnkgbmV3IGRpc3RyaWJ1dGlvbiIsImFueSBuZXcgZGlzdHJpYnV0aW9uIG5ld2NyZWF0dXJlIiwibmV3IGRpc3RyaWJ1dGlvbiBuZXdjcmVhdHVyZSBkZXNpZ24iLCJkaXN0cmlidXRpb24gbmV3Y3JlYXR1cmUgZGVzaWduIG1ha2VzIiwiZGVzaWduIG1ha2VzIG5vIGdhdXJhbnRlZXMiLCJtYWtlcyBubyBnYXVyYW50ZWVzIHJlZ2FyZGluZyIsIm5vIGdhdXJhbnRlZXMgcmVnYXJkaW5nIHRoZSIsImdhdXJhbnRlZXMgcmVnYXJkaW5nIHRoZSB1c2FiaWxpdHkiLCJyZWdhcmRpbmcgdGhlIHVzYWJpbGl0eSBvZiIsInRoZSB1c2FiaWxpdHkgb2YgdGhlIiwidXNhYmlsaXR5IG9mIHRoZSBzb3VyY2UiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ3ViZSBnYW1lIGVuZ2luZSBzb3VyY2UgY29kZSwgMjAgZGVjIDIwMDMgcmVsZWFzZS4gQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgV291dGVyIHZhbiBPb3J0bWVyc3Nlbi5cblxuVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuXG5cblBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLCBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0IGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcblxuICAgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuXG5cbiAgIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cblxuICAgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxuYWRkaXRpb25hbCBjbGF1c2Ugc3BlY2lmaWMgdG8gQ3ViZTpcblxuICAgNC4gU291cmNlIHZlcnNpb25zIG1heSBub3QgYmUgXCJyZWxpY2Vuc2VkXCIgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSB3aXRob3V0IG15IGV4cGxpY2l0bHkgd3JpdHRlbiBwZXJtaXNzaW9uLiJdLCJsaWNlbnNlSWRzIjpbIkN1YmUiXSwia2V5d29yZHMiOlsiY3ViZSBnYW1lIGVuZ2luZSIsImdhbWUgZW5naW5lIHNvdXJjZSIsImVuZ2luZSBzb3VyY2UgY29kZSIsInNvdXJjZSBjb2RlIDIwIiwiY29kZSAyMCBkZWMiLCIyMCBkZWMgMjAwMyIsImRlYyAyMDAzIHJlbGVhc2UiLCIyMDAzIHJlbGVhc2UgY29weXJpZ2h0IiwicmVsZWFzZSBjb3B5cmlnaHQgYyIsIjIwMDEgMjAwMyB3b3V0ZXIiLCIyMDAzIHdvdXRlciB2YW4iLCJ3b3V0ZXIgdmFuIG9vcnRtZXJzc2VuIiwidmFuIG9vcnRtZXJzc2VuIHRoaXMiLCJvb3J0bWVyc3NlbiB0aGlzIHNvZnR3YXJlIiwic291cmNlIGRpc3RyaWJ1dGlvbiBhZGRpdGlvbmFsIiwiZGlzdHJpYnV0aW9uIGFkZGl0aW9uYWwgY2xhdXNlIiwiYWRkaXRpb25hbCBjbGF1c2Ugc3BlY2lmaWMiLCJjbGF1c2Ugc3BlY2lmaWMgdG8iLCJzcGVjaWZpYyB0byBjdWJlIiwidG8gY3ViZSA0IiwiY3ViZSA0IHNvdXJjZSIsIjQgc291cmNlIHZlcnNpb25zIiwic291cmNlIHZlcnNpb25zIG1heSIsInZlcnNpb25zIG1heSBub3QiLCJub3QgYmUgcmVsaWNlbnNlZCIsImJlIHJlbGljZW5zZWQgdW5kZXIiLCJyZWxpY2Vuc2VkIHVuZGVyIGEiLCJkaWZmZXJlbnQgbGljZW5zZSB3aXRob3V0IiwibGljZW5zZSB3aXRob3V0IG15Iiwid2l0aG91dCBteSBleHBsaWNpdGx5IiwibXkgZXhwbGljaXRseSB3cml0dGVuIiwiZXhwbGljaXRseSB3cml0dGVuIHBlcm1pc3Npb24iLCJjdWJlIGdhbWUgZW5naW5lIHNvdXJjZSIsImdhbWUgZW5naW5lIHNvdXJjZSBjb2RlIiwiZW5naW5lIHNvdXJjZSBjb2RlIDIwIiwic291cmNlIGNvZGUgMjAgZGVjIiwiY29kZSAyMCBkZWMgMjAwMyIsIjIwIGRlYyAyMDAzIHJlbGVhc2UiLCJkZWMgMjAwMyByZWxlYXNlIGNvcHlyaWdodCIsIjIwMDMgcmVsZWFzZSBjb3B5cmlnaHQgYyIsInJlbGVhc2UgY29weXJpZ2h0IGMgMjAwMSIsImMgMjAwMSAyMDAzIHdvdXRlciIsIjIwMDEgMjAwMyB3b3V0ZXIgdmFuIiwiMjAwMyB3b3V0ZXIgdmFuIG9vcnRtZXJzc2VuIiwid291dGVyIHZhbiBvb3J0bWVyc3NlbiB0aGlzIiwidmFuIG9vcnRtZXJzc2VuIHRoaXMgc29mdHdhcmUiLCJvb3J0bWVyc3NlbiB0aGlzIHNvZnR3YXJlIGlzIiwiYW55IHNvdXJjZSBkaXN0cmlidXRpb24gYWRkaXRpb25hbCIsInNvdXJjZSBkaXN0cmlidXRpb24gYWRkaXRpb25hbCBjbGF1c2UiLCJkaXN0cmlidXRpb24gYWRkaXRpb25hbCBjbGF1c2Ugc3BlY2lmaWMiLCJhZGRpdGlvbmFsIGNsYXVzZSBzcGVjaWZpYyB0byIsImNsYXVzZSBzcGVjaWZpYyB0byBjdWJlIiwic3BlY2lmaWMgdG8gY3ViZSA0IiwidG8gY3ViZSA0IHNvdXJjZSIsImN1YmUgNCBzb3VyY2UgdmVyc2lvbnMiLCI0IHNvdXJjZSB2ZXJzaW9ucyBtYXkiLCJzb3VyY2UgdmVyc2lvbnMgbWF5IG5vdCIsInZlcnNpb25zIG1heSBub3QgYmUiLCJtYXkgbm90IGJlIHJlbGljZW5zZWQiLCJub3QgYmUgcmVsaWNlbnNlZCB1bmRlciIsImJlIHJlbGljZW5zZWQgdW5kZXIgYSIsInJlbGljZW5zZWQgdW5kZXIgYSBkaWZmZXJlbnQiLCJhIGRpZmZlcmVudCBsaWNlbnNlIHdpdGhvdXQiLCJkaWZmZXJlbnQgbGljZW5zZSB3aXRob3V0IG15IiwibGljZW5zZSB3aXRob3V0IG15IGV4cGxpY2l0bHkiLCJ3aXRob3V0IG15IGV4cGxpY2l0bHkgd3JpdHRlbiIsIm15IGV4cGxpY2l0bHkgd3JpdHRlbiBwZXJtaXNzaW9uIiwiY3ViZSBnYW1lIGVuZ2luZSBzb3VyY2UgY29kZSIsImdhbWUgZW5naW5lIHNvdXJjZSBjb2RlIDIwIiwiZW5naW5lIHNvdXJjZSBjb2RlIDIwIGRlYyIsInNvdXJjZSBjb2RlIDIwIGRlYyAyMDAzIiwiY29kZSAyMCBkZWMgMjAwMyByZWxlYXNlIiwiMjAgZGVjIDIwMDMgcmVsZWFzZSBjb3B5cmlnaHQiLCJkZWMgMjAwMyByZWxlYXNlIGNvcHlyaWdodCBjIiwiMjAwMyByZWxlYXNlIGNvcHlyaWdodCBjIDIwMDEiLCJyZWxlYXNlIGNvcHlyaWdodCBjIDIwMDEgMjAwMyIsImNvcHlyaWdodCBjIDIwMDEgMjAwMyB3b3V0ZXIiLCJjIDIwMDEgMjAwMyB3b3V0ZXIgdmFuIiwiMjAwMSAyMDAzIHdvdXRlciB2YW4gb29ydG1lcnNzZW4iLCIyMDAzIHdvdXRlciB2YW4gb29ydG1lcnNzZW4gdGhpcyIsIndvdXRlciB2YW4gb29ydG1lcnNzZW4gdGhpcyBzb2Z0d2FyZSIsInZhbiBvb3J0bWVyc3NlbiB0aGlzIHNvZnR3YXJlIGlzIiwib29ydG1lcnNzZW4gdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCIsImZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24gYWRkaXRpb25hbCIsImFueSBzb3VyY2UgZGlzdHJpYnV0aW9uIGFkZGl0aW9uYWwgY2xhdXNlIiwic291cmNlIGRpc3RyaWJ1dGlvbiBhZGRpdGlvbmFsIGNsYXVzZSBzcGVjaWZpYyIsImRpc3RyaWJ1dGlvbiBhZGRpdGlvbmFsIGNsYXVzZSBzcGVjaWZpYyB0byIsImFkZGl0aW9uYWwgY2xhdXNlIHNwZWNpZmljIHRvIGN1YmUiLCJjbGF1c2Ugc3BlY2lmaWMgdG8gY3ViZSA0Iiwic3BlY2lmaWMgdG8gY3ViZSA0IHNvdXJjZSIsInRvIGN1YmUgNCBzb3VyY2UgdmVyc2lvbnMiLCJjdWJlIDQgc291cmNlIHZlcnNpb25zIG1heSIsIjQgc291cmNlIHZlcnNpb25zIG1heSBub3QiLCJzb3VyY2UgdmVyc2lvbnMgbWF5IG5vdCBiZSIsInZlcnNpb25zIG1heSBub3QgYmUgcmVsaWNlbnNlZCIsIm1heSBub3QgYmUgcmVsaWNlbnNlZCB1bmRlciIsIm5vdCBiZSByZWxpY2Vuc2VkIHVuZGVyIGEiLCJiZSByZWxpY2Vuc2VkIHVuZGVyIGEgZGlmZmVyZW50IiwicmVsaWNlbnNlZCB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIiwidW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSB3aXRob3V0IiwiYSBkaWZmZXJlbnQgbGljZW5zZSB3aXRob3V0IG15IiwiZGlmZmVyZW50IGxpY2Vuc2Ugd2l0aG91dCBteSBleHBsaWNpdGx5IiwibGljZW5zZSB3aXRob3V0IG15IGV4cGxpY2l0bHkgd3JpdHRlbiIsIndpdGhvdXQgbXkgZXhwbGljaXRseSB3cml0dGVuIHBlcm1pc3Npb24iXX0seyJsaWNlbnNlVGV4dHMiOlsiRGV1dHNjaGUgRnJlaWUgU29mdHdhcmUgTGl6ZW56XG5cbihjKSBNaW5pc3Rlcml1bSBmw7xyIFdpc3NlbnNjaGFmdCB1bmQgRm9yc2NodW5nIE5vcmRyaGVpbi1XZXN0ZmFsZW4gMjAwNCBFcnN0ZWxsdCB2b24gQXhlbCBNZXR6Z2VyIHVuZCBUaWxsIEphZWdlciwgSW5zdGl0dXQgZsO8ciBSZWNodHNmcmFnZW4gZGVyIEZyZWllbiB1bmQgT3BlbiBTb3VyY2UgU29mdHdhcmUgLSAoIGh0dHA6Ly93d3cuaWZyb3NzLmRlICkgLlxuXG5QcsOkYW1iZWxcblxuU29mdHdhcmUgaXN0IG1laHIgYWxzIGVpbiBXaXJ0c2NoYWZ0c2d1dC4gU2llIGlzdCBkaWUgdGVjaG5pc2NoZSBHcnVuZGxhZ2UgZGVyIEluZm9ybWF0aW9uc2dlc2VsbHNjaGFmdC4gRGllIEZyYWdlIGRlciBUZWlsaGFiZSBkZXIgQWxsZ2VtZWluaGVpdCBpc3QgZGVzd2VnZW4gdm9uIGJlc29uZGVyZXIgQmVkZXV0dW5nLiBIZXJrw7ZtbWxpY2ggbGl6ZW56aWVydGUgUHJvZ3JhbW1lIHdlcmRlbiBudXIgaW0gT2JqZWN0IENvZGUgdmVydHJpZWJlbiwgZGVyIE51dHplciBkYXJmIGRhcyBQcm9ncmFtbSB3ZWRlciB2ZXLDpG5kZXJuIG5vY2ggd2VpdGVyZ2ViZW4uIERhcyBMaXplbnptb2RlbGwgZGVyIEZyZWllbiBTb2Z0d2FyZSAoc3lub255bSBcIk9wZW4gU291cmNlIFNvZnR3YXJlXCIpIGdld8OkaHJ0IElobmVuIGRhZ2VnZW4gdW1mYXNzZW5kZSBGcmVpaGVpdGVuIGltIFVtZ2FuZyBtaXQgZGVtIFByb2dyYW1tLiBEaWUgRGV1dHNjaGUgRnJlaWUgU29mdHdhcmUgTGl6ZW56IGZvbGd0IGRpZXNlbSBMaXplbnptb2RlbGwuIFNpZSBnZXfDpGhydCBJaG5lbiBkYXMgUmVjaHQsIGRhcyBQcm9ncmFtbSBpbiB1bWZhc3NlbmRlciBXZWlzZSB6dSBudXR6ZW4uIEVzIGlzdCBJaG5lbiBnZXN0YXR0ZXQsIGRhcyBQcm9ncmFtbSBuYWNoIElocmVuIFZvcnN0ZWxsdW5nZW4genUgdmVyw6RuZGVybiwgaW4gdmVyw6RuZGVydGVyIG9kZXIgdW52ZXLDpG5kZXJ0ZXIgRm9ybSB6dSB2ZXJ2aWVsZsOkbHRpZ2VuLCB6dSB2ZXJicmVpdGVuIHVuZCDDtmZmZW50bGljaCB6dWfDpG5nbGljaCB6dSBtYWNoZW4uIERpZXNlIFJlY2h0ZSB3ZXJkZW4gdW5lbnRnZWx0bGljaCBlaW5nZXLDpHVtdC5cblxuRGllIERldXRzY2hlIEZyZWllIFNvZnR3YXJlIExpemVueiB2ZXJiaW5kZXQgZGllIFJlY2h0c2VpbnLDpHVtdW5nIGFsbGVyZGluZ3MgbWl0IFBmbGljaHRlbiwgZGllIGRlbSBad2VjayBkaWVuZW4sIGRhcyBmcmVpZSBaaXJrdWxpZXJlbiBkZXMgUHJvZ3JhbW1zIHVuZCBhbGxlciB2ZXLDtmZmZW50bGljaHRlbiBGb3J0ZW50d2lja2x1bmdlbiB6dSBzaWNoZXJuLiBXZW5uIFNpZSBkYXMgUHJvZ3JhbW0gdmVyYnJlaXRlbiBvZGVyIMO2ZmZlbnRsaWNoIHp1Z8OkbmdsaWNoIG1hY2hlbiwgZGFubiBtw7xzc2VuIFNpZSBqZWRlbSwgZGVyIGRhcyBQcm9ncmFtbSB2b24gSWhuZW4gZXJow6RsdCwgZWluZSBLb3BpZSBkaWVzZXIgTGl6ZW56IG1pdGxpZWZlcm4gdW5kIGRlbiBadWdyaWZmIGF1ZiBkZW4gU291cmNlIENvZGUgZXJtw7ZnbGljaGVuLiBFaW5lIHdlaXRlcmUgUGZsaWNodCBiZXRyaWZmdCBGb3J0ZW50d2lja2x1bmdlbiBkZXMgUHJvZ3JhbW1zLiDDhG5kZXJ1bmdlbiBhbSBQcm9ncmFtbSwgZGllIFNpZSDDtmZmZW50bGljaCB2ZXJicmVpdGVuIG9kZXIgenVnw6RuZ2xpY2ggbWFjaGVuLCBtw7xzc2VuIG5hY2ggZGVuIEJlc3RpbW11bmdlbiBkaWVzZXIgTGl6ZW56IGZyZWkgZ2VnZWJlbiB3ZXJkZW4uXG5cbkRpZSBEZXV0c2NoZSBGcmVpZSBTb2Z0d2FyZSBMaXplbnogbmltbXQgYXVmIGRpZSBiZXNvbmRlcmVuIEFuZm9yZGVydW5nZW4gZGVzIGRldXRzY2hlbiB1bmQgZXVyb3DDpGlzY2hlbiBSZWNodHMgUsO8Y2tzaWNodC4gU2llIGlzdCB6d2Vpc3ByYWNoaWcgZ2VzdGFsdGV0IHVuZCBkYW1pdCBhdWNoIGF1ZiBkZW4gaW50ZXJuYXRpb25hbGVuIFZlcnRyaWViIGF1c2dlcmljaHRldC5cblxuICAgXG5cbiAgIMKnIDAgRGVmaW5pdGlvbmVuXG5cbiAgICAgIFxuXG4gICAgICBEb2t1bWVudGF0aW9uOiBEaWUgQmVzY2hyZWlidW5nIGRlcyBBdWZiYXVzIHVuZC9vZGVyIGRlciBTdHJ1a3R1ciBkZXIgUHJvZ3JhbW1pZXJ1bmcgdW5kL29kZXIgZGVyIEZ1bmt0aW9uYWxpdMOkdGVuIGRlcyBQcm9ncmFtbXMsIHVuYWJow6RuZ2lnIGRhdm9uLCBvYiBzaWUgaW0gU291cmNlIENvZGUgb2RlciBnZXNvbmRlcnQgdm9yZ2Vub21tZW4gd2lyZC5cblxuICAgICAgXG5cbiAgICAgIExpemVuejogRGllIHp3aXNjaGVuIGRlbSBMaXplbnpnZWJlciB1bmQgSWhuZW4gZ2VzY2hsb3NzZW5lIFZlcmVpbmJhcnVuZyBtaXQgZGVtIEluaGFsdCBkZXIgXCJEZXV0c2NoZW4gRnJlaWVuIFNvZnR3YXJlIExpemVuelwiIGJ6dy4gZGFzIEFuZ2Vib3QgaGllcnp1LlxuXG4gICAgICBcblxuICAgICAgTGl6ZW56bmVobWVyOiBKZWRlIG5hdMO8cmxpY2hlIG9kZXIganVyaXN0aXNjaGUgUGVyc29uLCBkaWUgZGllIExpemVueiBhbmdlbm9tbWVuIGhhdC5cblxuICAgICAgXG5cbiAgICAgIFByb2dyYW1tOiBKZWRlcyBDb21wdXRlcnByb2dyYW1tLCBkYXMgdm9uIGRlbiBSZWNodHNpbmhhYmVybiBuYWNoIGRlbiBCZXN0aW1tdW5nZW4gZGllc2VyIExpemVueiB2ZXJicmVpdGV0IG9kZXIgw7ZmZmVudGxpY2ggenVnw6RuZ2xpY2ggZ2VtYWNodCB3b3JkZW4gaXN0LlxuXG4gICAgICBcblxuICAgICAgT2JqZWN0IENvZGU6IERpZSBtYXNjaGluZW5sZXNiYXJlLCDDvGJlcnNldHp0ZSBGb3JtIGRlcyBQcm9ncmFtbXMuXG5cbiAgICAgIFxuXG4gICAgICDDlmZmZW50bGljaDogTmljaHQgbnVyIGFuIGVpbmVuIGJlc3RpbW10ZW4gUGVyc29uZW5rcmVpcyBnZXJpY2h0ZXQsIGRlciBwZXJzw7ZubGljaCBvZGVyIGR1cmNoIGRpZSBadWdlaMO2cmlna2VpdCB6dSBlaW5lciBqdXJpc3Rpc2NoZW4gUGVyc29uIG9kZXIgZWluZW0gw7ZmZmVudGxpY2hlbiBUcsOkZ2VyIG1pdGVpbmFuZGVyIHZlcmJ1bmRlbiBpc3QuXG5cbiAgICAgIFxuXG4gICAgICDDlmZmZW50bGljaCB6dWfDpG5nbGljaCBtYWNoZW46IERpZSDDtmZmZW50bGljaGUgV2VpdGVyZ2FiZSBkZXMgUHJvZ3JhbW1zIGluIHVua8O2cnBlcmxpY2hlciBGb3JtLCBpbnNiZXNvbmRlcmUgZGFzIEJlcmVpdGhhbHRlbiB6dW0gRG93bmxvYWQgaW4gRGF0ZW5uZXR6ZW4uXG5cbiAgICAgIFxuXG4gICAgICBSZWNodHNpbmhhYmVyOiBEZXIgYnp3LiBkaWUgVXJoZWJlciBvZGVyIHNvbnN0aWdlbiBJbmhhYmVyIGRlciBhdXNzY2hsaWXDn2xpY2hlbiBOdXR6dW5nc3JlY2h0ZSBhbiBkZW0gUHJvZ3JhbW0uXG5cbiAgICAgIFxuXG4gICAgICBTb3VyY2UgQ29kZTogRGllIGbDvHIgTWVuc2NoZW4gbGVzYmFyZSwgaW4gUHJvZ3JhbW1pZXJzcHJhY2hlIGRhcmdlc3RlbGx0ZSBGb3JtIGRlcyBQcm9ncmFtbXMuXG5cbiAgICAgIFxuXG4gICAgICBWZXLDpG5kZXJuOiBKZWRlIEVyd2VpdGVydW5nLCBLw7xyenVuZyB1bmQgQmVhcmJlaXR1bmcgZGVzIFByb2dyYW1tcywgaW5zYmVzb25kZXJlIFdlaXRlcmVudHdpY2tsdW5nZW4uXG5cbiAgICAgIFxuXG4gICAgICBWZXJicmVpdGVuOiBEaWUgw7ZmZmVudGxpY2hlIFdlaXRlcmdhYmUga8O2cnBlcmxpY2hlciBWZXJ2aWVsZsOkbHRpZ3VuZ3NzdMO8Y2tlLCBpbnNiZXNvbmRlcmUgYXVmIERhdGVudHLDpGdlcm4gb2RlciBpbiBWZXJiaW5kdW5nIG1pdCBIYXJkd2FyZS5cblxuICAgICAgXG5cbiAgICAgIFZvbGxzdMOkbmRpZ2VyIFNvdXJjZSBDb2RlOiBEZXIgU291cmNlIENvZGUgaW4gZGVyIGbDvHIgZGllIEVyc3RlbGx1bmcgYnp3LiBkaWUgQmVhcmJlaXR1bmcgYmVudXR6dGVuIEZvcm0genVzYW1tZW4gbWl0IGRlbiB6dXIgw5xiZXJzZXR6dW5nIHVuZCBJbnN0YWxsYXRpb24gZXJmb3JkZXJsaWNoZW4gS29uZmlndXJhdGlvbnNkYXRlaWVuIHVuZCBTb2Z0d2FyZS1XZXJremV1Z2VuLCBzb2Zlcm4gZGllc2UgaW4gZGVyIGJlbsO2dGlndGVuIEZvcm0gbmljaHQgYWxsZ2VtZWluIGdlYnLDpHVjaGxpY2ggKHouQi4gU3RhbmRhcmQtS29tcGlsZXIpIG9kZXIgZsO8ciBqZWRlcm1hbm4gbGl6ZW56Z2Viw7xocmVuZnJlaSBpbSBJbnRlcm5ldCBhYnJ1ZmJhciBzaW5kLlxuXG4gICBcblxuICAgwqcgMSBSZWNodGVcblxuICAgICAgKDEpIFNpZSBkw7xyZmVuIGRhcyBQcm9ncmFtbSBpbiB1bnZlcsOkbmRlcnRlciBGb3JtIHZlcnZpZWxmw6RsdGlnZW4sIHZlcmJyZWl0ZW4gdW5kIMO2ZmZlbnRsaWNoIHp1Z8OkbmdsaWNoIG1hY2hlbi5cblxuICAgICAgKDIpIFNpZSBkw7xyZmVuIGRhcyBQcm9ncmFtbSB2ZXLDpG5kZXJuIHVuZCBlbnRzcHJlY2hlbmQgdmVyw6RuZGVydGUgVmVyc2lvbmVuIHZlcnZpZWxmw6RsdGlnZW4sIHZlcmJyZWl0ZW4gdW5kIMO2ZmZlbnRsaWNoIHp1Z8OkbmdsaWNoIG1hY2hlbi4gR2VzdGF0dGV0IGlzdCBhdWNoIGRpZSBLb21iaW5hdGlvbiBkZXMgUHJvZ3JhbW1zIG9kZXIgVGVpbGVuIGhpZXJ2b24gbWl0IGFuZGVyZW4gUHJvZ3JhbW1lbi5cblxuICAgICAgKDMpIFNpZSBlcmhhbHRlbiBkaWUgUmVjaHRlIHVuZW50Z2VsdGxpY2guXG5cbiAgIFxuXG4gICDCpyAyIFBmbGljaHRlbiBiZWltIFZlcnRyaWViXG5cbiAgICAgICgxKSBXZW5uIFNpZSBkYXMgUHJvZ3JhbW0gdmVyYnJlaXRlbiBvZGVyIMO2ZmZlbnRsaWNoIHp1Z8OkbmdsaWNoIG1hY2hlbiwgc2VpIGVzIGluIHVudmVyw6RuZGVydGVyIG9kZXIgdmVyw6RuZGVydGVyIEZvcm0sIHNlaSBlcyBpbiBlaW5lciBLb21iaW5hdGlvbiBtaXQgYW5kZXJlbiBQcm9ncmFtbWVuIG9kZXIgaW4gVmVyYmluZHVuZyBtaXQgSGFyZHdhcmUsIGRhbm4gbcO8c3NlbiBzaWUgbWl0bGllZmVybjpcblxuICAgICAgMS4gYWxsZSBWZXJtZXJrZSBpbSBTb3VyY2UgQ29kZSB1bmQvb2RlciBPYmplY3QgQ29kZSwgZGllIGF1ZiBkaWVzZSBMaXplbnogaGlud2Vpc2VuO1xuXG4gICAgICAyLiBhbGxlIFZlcm1lcmtlIGltIFNvdXJjZSBDb2RlIHVuZC9vZGVyIE9iamVjdCBDb2RlLCBkaWUgw7xiZXIgZGllIFVyaGViZXIgZGVzIFByb2dyYW1tcyBBdXNrdW5mdCBnZWJlbjtcblxuICAgICAgMy4gZWluZW4gZsO8ciBkZW4gRW1wZsOkbmdlciBkZXV0bGljaCB3YWhybmVobWJhcmVuIEhpbndlaXMgYXVmIGRpZXNlIExpemVueiB1bmQgZGllIEludGVybmV0YWRyZXNzZSBcdTAwM2MgaHR0cDovL3d3dy5kLWZzbC5kZSBcdTAwM2UgO1xuXG4gICAgICA0LiBkZW4gdm9sbHN0w6RuZGlnZW4gVGV4dCBkaWVzZXIgTGl6ZW56IGluIGRldXRsaWNoIHdhaHJuZWhtYmFyZXIgV2Vpc2UuXG5cbiAgICAgICgyKSBXZW5uIGJlaSBkZXIgSW5zdGFsbGF0aW9uIGRlcyBQcm9ncmFtbXMgdW5kL29kZXIgYmVpbSBQcm9ncmFtbXN0YXJ0IExpemVuei0gdW5kL29kZXIgVmVydHJhZ3NiZWRpbmd1bmdlbiBhbmdlemVpZ3Qgd2VyZGVuLCBkYW5uIG3DvHNzZW5cblxuICAgICAgMS4gZGllc2UgTGl6ZW56LFxuXG4gICAgICAyLiBlaW4gSGlud2VpcyBhdWYgZGllc2UgTGl6ZW56IHVuZFxuXG4gICAgICAzLiBlaW4gSGlud2VpcyBhdWYgZGVuIG9kZXIgZGllIFJlY2h0c2luaGFiZXIgYW4gZGVuIGVyc3RlbiB1bnRlciBkaWVzZXIgTGl6ZW56IG51dHpiYXJlbiBQcm9ncmFtbWJlc3RhbmR0ZWlsZW5cblxuICAgICAgZWJlbmZhbGxzIGFuZ2V6ZWlndCB3ZXJkZW4uXG5cbiAgICAgICgzKSBTaWUgZMO8cmZlbiBkaWUgTnV0enVuZyBkZXMgUHJvZ3JhbW1zIG5pY2h0IHZvbiBQZmxpY2h0ZW4gb2RlciBCZWRpbmd1bmdlbiBhYmjDpG5naWcgbWFjaGVuLCBkaWUgbmljaHQgaW4gZGllc2VyIExpemVueiB2b3JnZXNlaGVuIHNpbmQuXG5cbiAgICAgICg0KSBTb2Zlcm4gU2llIG1pdCBkZW0gUHJvZ3JhbW0gZWluZSBEb2t1bWVudGF0aW9uIGVyaGFsdGVuIGhhYmVuLCBtdXNzIGRpZXNlIERva3VtZW50YXRpb24gZW50c3ByZWNoZW5kIG1pdGdlbGllZmVydCB3ZXJkZW4sIGVzIHNlaSBkZW5uLCBkaWUgZnJlaWUgTWl0bGllZmVydW5nIGRlciBEb2t1bWVudGF0aW9uIGlzdCBJaG5lbiBhdWZncnVuZCBkZXIgTGl6ZW56IGbDvHIgZGllIERva3VtZW50YXRpb24gbmljaHQgZ2VzdGF0dGV0LlxuXG4gICBcblxuICAgwqcgMyBXZWl0ZXJlIFBmbGljaHRlbiBiZWltIFZlcnRyaWViIHZlcsOkbmRlcnRlciBWZXJzaW9uZW5cblxuICAgICAgKDEpIFZlcsOkbmRlcnRlIFZlcnNpb25lbiBkZXMgUHJvZ3JhbW1zIGTDvHJmZW4gU2llIG51ciB1bnRlciBkZW4gQmVkaW5ndW5nZW4gZGllc2VyIExpemVueiB2ZXJicmVpdGVuIG9kZXIgw7ZmZmVudGxpY2ggenVnw6RuZ2xpY2ggbWFjaGVuLCBzbyBkYXNzIERyaXR0ZSBkYXMgdmVyw6RuZGVydGUgUHJvZ3JhbW0gaW5zZ2VzYW10IHVudGVyIGRpZXNlciBMaXplbnogbnV0emVuIGvDtm5uZW4uXG5cbiAgICAgICgyKSBXaXJkIGRhcyBQcm9ncmFtbSBvZGVyIGVpbiBUZWlsIGhpZXJ2b24gbWl0IGVpbmVtIGFuZGVyZW4gUHJvZ3JhbW0ga29tYmluaWVydCwgZ2lsdCBhdWNoIGRpZSBLb21iaW5hdGlvbiBpbnNnZXNhbXQgYWxzIGVpbmUgdmVyw6RuZGVydGUgVmVyc2lvbiBkZXMgUHJvZ3JhbW1zLCBlcyBzZWkgZGVubiwgZGFzIGFuZGVyZSBQcm9ncmFtbSBpc3QgZm9ybWFsIHVuZCBpbmhhbHRsaWNoIGVpZ2Vuc3TDpG5kaWcuIEVpbiBhbmRlcmVzIFByb2dyYW1tIGlzdCBkYW5uIGFscyBlaWdlbnN0w6RuZGlnIGFuenVzZWhlbiwgd2VubiBlcyBkaWUgZm9sZ2VuZGVuIFZvcmF1c3NldHp1bmdlbiBhbGxlIGVyZsO8bGx0OlxuXG4gICAgICAgICAxLiBEZXIgU291cmNlIENvZGUgZGVyIGtvbWJpbmllcnRlbiBQcm9ncmFtbWUgbXVzcyBqZXdlaWxzIGluIGVpZ2VuZW4gRGF0ZWllbiB2b3JoYW5kZW4gc2VpbiwgZGllIGtlaW5lIEJlc3RhbmR0ZWlsZSBkZXMgYW5kZXJlbiBUZWlscyBlbnRoYWx0ZW4sIGRpZSDDvGJlciBkaWUgenVyIFByb2dyYW1ta29tYmluYXRpb24gw7xibGljaGVuIHVuZCBlcmZvcmRlcmxpY2hlbiBJbmZvcm1hdGlvbmVuIMO8YmVyIGRlbiBhbmRlcmVuIFRlaWwgaGluYXVzZ2VoZW4sIHdvYmVpIGRlciBTb3VyY2UgQ29kZSBkZXMgYW5kZXJlbiBQcm9ncmFtbXMgbmljaHQgbWl0Z2VsaWVmZXJ0IHdlcmRlbiBtdXNzLlxuXG4gICAgICAgICAyLiBEZXIgbWl0IGRlbSBQcm9ncmFtbSBrb21iaW5pZXJ0ZSBUZWlsIG11c3MgYXVjaCBkYW5uIHNpbm52b2xsIG51dHpiYXIgc2Vpbiwgd2VubiBlciBuaWNodCBtaXQgZGVtIFByb2dyYW1tIGtvbWJpbmllcnQgd2lyZCwgdW5kIHp3YXIgZW50d2VkZXIgYWxsZWluZSBvZGVyIG1pdCBzb25zdGlnZW4gUHJvZ3JhbW1lbi4gV2FzIGFscyBcInNpbm52b2xsIG51dHpiYXJcIiBhbnp1c2VoZW4gaXN0LCByaWNodGV0IHNpY2ggbmFjaCBkZXIgQXVmZmFzc3VuZyBkZXIgYmV0cm9mZmVuZW4gRmFjaGtyZWlzZS4gWnUgZGVuIGJldHJvZmZlbmVuIEZhY2hrcmVpc2VuIGdlaMO2cmVuIGFsbGUgUGVyc29uZW4sIGRpZSBkYXMgUHJvZ3JhbW0gb2RlciBQcm9ncmFtbWUgbWl0IHZlcmdsZWljaGJhcmVyIEZ1bmt0aW9uYWxpdMOkdCBlbnR3aWNrZWxuLCBiZW51dHplbiwgdmVyYnJlaXRlbiBvZGVyIMO2ZmZlbnRsaWNoIHp1Z8OkbmdsaWNoIG1hY2hlbi5cblxuICAgICAgKDMpIFdlbm4gU2llIGRhcyBQcm9ncmFtbSBvZGVyIGVpbmVuIFRlaWwgaGllcnZvbiAtIHZlcsOkbmRlcnQgb2RlciB1bnZlcsOkbmRlcnQgLSB6dXNhbW1lbiBtaXQgZWluZW0gYW5kZXJlbiBQcm9ncmFtbSB2ZXJicmVpdGVuIG9kZXIgw7ZmZmVudGxpY2ggenVnw6RuZ2xpY2ggbWFjaGVuLCBkYXMgdW50ZXIgZGVyIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIGxpemVuemllcnQgd2lyZCwgZGFyZiBkYXMgUHJvZ3JhbW0gYXVjaCB1bnRlciBkZW4gQmVkaW5ndW5nZW4gZGVyIEdQTCBnZW51dHp0IHdlcmRlbiwgc29mZXJuIGVzIG1pdCBkZW0gYW5kZXJlbiBQcm9ncmFtbSBlaW4gXCJkZXJpdmF0aXZlIHdvcmtcIiBpbSBTaW5uZSBkZXIgR1BMIGJpbGRldC4gRGFiZWkgc29sbGVuIGRpZSBIaW53ZWlzZSBhdWYgZGllc2UgTGl6ZW56IGVudGZlcm50IHVuZCBkdXJjaCBlaW5lbiBIaW53ZWlzIGF1ZiBkaWUgR1BMIGVyc2V0enQgd2VyZGVuLiBPYiBiZWkgZGVyIFp1c2FtbWVuc3RlbGx1bmcgZWluIFwiZGVyaXZhdGUgd29ya1wiIGltIFNpbm5lIGRlciBHUEwgZW50c3RlaHQsIGJldXJ0ZWlsdCBzaWNoIG5hY2ggWmlmZmVyIDIgYikgZGVyIEdQTC4gRGllc2UgQmVzdGltbXVuZyBsYXV0ZXQ6IFwiWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXCIgRGllIEdQTCBrYW5uIGFiZ2VydWZlbiB3ZXJkZW4gdW50ZXIgaHR0cDovL3d3dy5mc2Yub3JnL2xpY2Vuc2VzL2dwbC5cblxuICAgICAgKDQpIFdlbm4gU2llIGRhcyBQcm9ncmFtbSBpbiBlaW5lciB2ZXLDpG5kZXJ0ZW4gRm9ybSB2ZXJicmVpdGVuIG9kZXIgw7ZmZmVudGxpY2ggenVnw6RuZ2xpY2ggbWFjaGVuLCBtw7xzc2VuIFNpZSBpbSBTb3VyY2UgQ29kZSBlaW5lbiBIaW53ZWlzIG1pdCBkZW4gw4RuZGVydW5nZW4gYXVmbmVobWVuIHVuZCBtaXQgZGVtIERhdHVtIGRlciDDhG5kZXJ1bmcgdmVyc2VoZW4uIERlciBIaW53ZWlzIG11c3MgZXJrZW5uZW4gbGFzc2VuLCB3ZWxjaGUgw4RuZGVydW5nZW4gdm9yZ2Vub21tZW4gd3VyZGVuIHVuZCBiZXN0ZWhlbmRlIFZlcm1lcmtlLCBkaWUgw7xiZXIgZGllIFVyaGViZXIgZGVzIFByb2dyYW1tcyBBdXNrdW5mdCBnZWJlbiwgw7xiZXJuZWhtZW4uIERpZXMgZ2lsdCB1bmFiaMOkbmdpZyBkYXZvbiwgb2IgU2llIGVpbmVuIGVpZ2VuZW4gVXJoZWJlcnZlcm1lcmsgaGluenVmw7xnZW4uIEFuc3RlbGxlIGVpbmVzIEhpbndlaXNlcyBpbSBTb3VyY2UgQ29kZSBrw7ZubmVuIFNpZSBhdWNoIGVpbiBWZXJzaW9uc2tvbnRyb2xsc3lzdGVtIHZlcndlbmRlbiBvZGVyIHdlaXRlcmbDvGhyZW4sIHNvZmVybiBkaWVzZXMgbWl0dmVyYnJlaXRldCB3aXJkIG9kZXIgw7ZmZmVudGxpY2ggenVnw6RuZ2xpY2ggaXN0LlxuXG4gICAgICAoNSkgU2llIGTDvHJmZW4gdm9uIERyaXR0ZW4gZsO8ciBkaWUgRWlucsOkdW11bmcgZWluZXMgZWluZmFjaGVuIE51dHp1bmdzcmVjaHRzIGFuIHZlcsOkbmRlcnRlbiBWZXJzaW9uZW4gZGVzIFByb2dyYW1tcyBrZWluIEVudGdlbHQgdmVybGFuZ2VuLlxuXG4gICAgICAoNikgV2VubiBTaWUgYW4gZGVyIHZlcsOkbmRlcnRlbiBWZXJzaW9uIGRlcyBQcm9ncmFtbXMgZWluIGFuZGVyZXMgU2NodXR6cmVjaHQgYWxzIGVpbiBVcmhlYmVycmVjaHQgZXJ3ZXJiZW4sIGluc2Jlc29uZGVyZSBlaW4gUGF0ZW50IG9kZXIgR2VicmF1Y2hzbXVzdGVyLCBsaXplbnppZXJlbiBTaWUgZGllc2VzIFNjaHV0enJlY2h0IGbDvHIgdmVyw6RuZGVydGUgdW5kIHVudmVyw6RuZGVydGUgVmVyc2lvbmVuIGRlcyBQcm9ncmFtbXMgaW4gZGVtIFVtZmFuZywgZGVyIGVyZm9yZGVybGljaCBpc3QsIHVtIGRpZSBSZWNodGUgYXVzIGRpZXNlciBMaXplbnogd2Focm5laG1lbiB6dSBrw7ZubmVuLlxuXG4gICBcblxuICAgwqcgNCBXZWl0ZXJlIFBmbGljaHRlbiBiZWltIFZlcnRyaWViIGltIE9iamVjdCBDb2RlXG5cbiAgICAgICgxKSBXZW5uIFNpZSBkYXMgUHJvZ3JhbW0gbnVyIGltIE9iamVjdCBDb2RlIHZlcmJyZWl0ZW4sIGRhbm4gbcO8c3NlbiBTaWUgenVzw6R0emxpY2ggenUgZGVuIGluIMKnIDIgdW5kIMKnIDMgZ2VyZWdlbHRlbiBQZmxpY2h0ZW4gZW50d2VkZXJcblxuICAgICAgICAgMS4gZGVuIHZvbGxzdMOkbmRpZ2VuIFNvdXJjZSBDb2RlIGltIEludGVybmV0IMO2ZmZlbnRsaWNoIHp1Z8OkbmdsaWNoIG1hY2hlbiB1bmQgYmVpIGRlciBWZXJicmVpdHVuZyBkZXMgT2JqZWN0IENvZGVzIGRldXRsaWNoIGF1ZiBkaWUgdm9sbHN0w6RuZGlnZSBJbnRlcm5ldGFkcmVzc2UgaGlud2Vpc2VuLCB1bnRlciBkZXIgZGVyIFNvdXJjZSBDb2RlIGFiZ2VydWZlbiB3ZXJkZW4ga2FubiBvZGVyXG5cbiAgICAgICAgIDIuIGRlbiB2b2xsc3TDpG5kaWdlbiBTb3VyY2UgQ29kZSBhdWYgZWluZW0gaGllcmbDvHIgw7xibGljaGVuIERhdGVudHLDpGdlciB1bnRlciBCZWFjaHR1bmcgZGVyIMKnwqcgMiB1bmQgMyBtaXR2ZXJicmVpdGVuLlxuXG4gICAgICAoMikgV2VubiBTaWUgZGFzIFByb2dyYW1tIGltIE9iamVjdCBDb2RlIMO2ZmZlbnRsaWNoIHp1Z8OkbmdsaWNoIG1hY2hlbiwgZGFubiBtw7xzc2VuIFNpZSB6dXPDpHR6bGljaCB6dSBkZW4gaW4gwqcgMiB1bmQgwqcgMyBnZXJlZ2VsdGVuIFBmbGljaHRlbiBkZW4gdm9sbHN0w6RuZGlnZW4gU291cmNlIENvZGUgaW0gSW50ZXJuZXQgw7ZmZmVudGxpY2ggenVnw6RuZ2xpY2ggbWFjaGVuIHVuZCBkYWJlaSBkZXV0bGljaCBhdWYgZGllIHZvbGxzdMOkbmRpZ2UgSW50ZXJuZXRhZHJlc3NlIGhpbndlaXNlbi5cblxuICAgICAgKDMpIFNvZmVybiBTaWUgbWl0IGRlbSBQcm9ncmFtbSBlaW5lIERva3VtZW50YXRpb24gZXJoYWx0ZW4gaGFiZW4sIG11c3MgZGllc2UgRG9rdW1lbnRhdGlvbiBlbnRzcHJlY2hlbmQgZGVyIEFic8OkdHplIDEgdW5kIDIgbWl0Z2VsaWVmZXJ0IHdlcmRlbiwgZXMgc2VpIGRlbm4sIGRpZSBmcmVpZSBNaXRsaWVmZXJ1bmcgZGVyIERva3VtZW50YXRpb24gaXN0IElobmVuIGF1ZmdydW5kIGRlciBMaXplbnogZsO8ciBkaWUgRG9rdW1lbnRhdGlvbiBuaWNodCBnZXN0YXR0ZXQuXG5cbiAgIFxuXG4gICDCpyA1IFZlcnRyYWdzc2NobHVzc1xuXG4gICAgICAoMSkgTWl0IGRpZXNlciBMaXplbnogd2lyZCBJaG5lbiB1bmQgamVkZXIgYW5kZXJlbiBQZXJzb24gZWluIEFuZ2Vib3QgYXVmIEFic2NobHVzcyBlaW5lcyBWZXJ0cmFnZXMgw7xiZXIgZGllIE51dHp1bmcgZGVzIFByb2dyYW1tcyB1bnRlciBkZW4gQmVkaW5ndW5nZW4gZGVyIERldXRzY2hlbiBGcmVpZW4gU29mdHdhcmVsaXplbnogdW50ZXJicmVpdGV0LlxuXG4gICAgICAoMikgU2llIGTDvHJmZW4gZGFzIFByb2dyYW1tIG5hY2ggZGVuIGpld2VpbHMgYW53ZW5kYmFyZW4gZ2VzZXR6bGljaGVuIFZvcnNjaHJpZnRlbiBiZXN0aW1tdW5nc2dlbcOkw58gYmVudXR6ZW4sIG9obmUgZGFzcyBlcyBkZXIgQW5uYWhtZSBkaWVzZXIgTGl6ZW56IGJlZGFyZi4gRGllc2VzIFJlY2h0IHVtZmFzc3QgaW4gZGVyIEV1cm9ww6Rpc2NoZW4gVW5pb24gdW5kIGluIGRlbiBtZWlzdGVuIGFuZGVyZW4gUmVjaHRzb3JkbnVuZ2VuIGluc2Jlc29uZGVyZSBkaWUgZm9sZ2VuZGVuIEJlZnVnbmlzc2U6XG5cbiAgICAgICAgIDEuIGRhcyBQcm9ncmFtbSBhYmxhdWZlbiB6dSBsYXNzZW4gc293aWUgZGllIEVyc3RlbGx1bmcgdm9uIGhpZXJmw7xyIGVyZm9yZGVybGljaGVuIFZlcnZpZWxmw6RsdGlndW5nZW4gaW0gSGF1cHQtIHVuZCBBcmJlaXRzc3BlaWNoZXI7XG5cbiAgICAgICAgIDIuIGRhcyBFcnN0ZWxsZW4gZWluZXIgU2ljaGVydW5nc2tvcGllO1xuXG4gICAgICAgICAzLiBkaWUgRmVobGVyYmVyaWNodGlndW5nO1xuXG4gICAgICAgICA0LiBkaWUgV2VpdGVyZ2FiZSBlaW5lciByZWNodG3DpMOfaWcgZXJ3b3JiZW5lbiBrw7ZycGVybGljaGVuIEtvcGllIGRlcyBQcm9ncmFtbXMuXG5cbiAgICAgICgzKSBTaWUgZXJrbMOkcmVuIElocmUgWnVzdGltbXVuZyB6dW0gQWJzY2hsdXNzIGRpZXNlciBMaXplbnosIGluZGVtIFNpZSBkYXMgUHJvZ3JhbW0gdmVyYnJlaXRlbiwgw7ZmZmVudGxpY2ggenVnw6RuZ2xpY2ggbWFjaGVuLCB2ZXLDpG5kZXJuIG9kZXIgaW4gZWluZXIgV2Vpc2UgdmVydmllbGbDpGx0aWdlbiwgZGllIMO8YmVyIGRpZSBiZXN0aW1tdW5nc2dlbcOkw59lIE51dHp1bmcgaW0gU2lubmUgdm9uIEFic2F0eiAyIGhpbmF1c2dlaHQuIEFiIGRpZXNlbSBaZWl0cHVua3QgaXN0IGRpZXNlIExpemVueiBhbHMgcmVjaHRsaWNoIHZlcmJpbmRsaWNoZXIgVmVydHJhZyB6d2lzY2hlbiBkZW4gUmVjaHRzaW5oYWJlcm4gdW5kIElobmVuIGdlc2NobG9zc2VuLCBvaG5lIGRhc3MgZXMgZWluZXMgWnVnYW5ncyBkZXIgQW5uYWhtZWVya2zDpHJ1bmcgYmVpIGRlbiBSZWNodHNpbmhhYmVybiBiZWRhcmYuXG5cbiAgICAgICg0KSBTaWUgdW5kIGplZGVyIGFuZGVyZSBMaXplbnpuZWhtZXIgZXJoYWx0ZW4gZGllIFJlY2h0ZSBhdXMgZGllc2VyIExpemVueiBkaXJla3Qgdm9uIGRlbiBSZWNodHNpbmhhYmVybi4gRWluZSBVbnRlcmxpemVuemllcnVuZyBvZGVyIMOcYmVydHJhZ3VuZyBkZXIgUmVjaHRlIGlzdCBuaWNodCBnZXN0YXR0ZXQuXG5cbiAgIFxuXG4gICDCpyA2IEJlZW5kaWd1bmcgZGVyIFJlY2h0ZSBiZWkgWnV3aWRlcmhhbmRsdW5nXG5cbiAgICAgICgxKSBKZWRlIFZlcmxldHp1bmcgSWhyZXIgVmVycGZsaWNodHVuZ2VuIGF1cyBkaWVzZXIgTGl6ZW56IGbDvGhydCB6dSBlaW5lciBhdXRvbWF0aXNjaGVuIEJlZW5kaWd1bmcgSWhyZXIgUmVjaHRlIGF1cyBkaWVzZXIgTGl6ZW56LlxuXG4gICAgICAoMikgRGllIFJlY2h0ZSBEcml0dGVyLCBkaWUgZGFzIFByb2dyYW1tIG9kZXIgUmVjaHRlIGFuIGRlbSBQcm9ncmFtbSB2b24gSWhuZW4gZXJoYWx0ZW4gaGFiZW4sIGJsZWliZW4gaGllcnZvbiB1bmJlcsO8aHJ0LlxuXG4gICBcblxuICAgwqcgNyBIYWZ0dW5nIHVuZCBHZXfDpGhybGVpc3R1bmdcblxuICAgICAgKDEpIEbDvHIgZW50Z2VnZW5zdGVoZW5kZSBSZWNodGUgRHJpdHRlciBoYWZ0ZW4gZGllIFJlY2h0c2luaGFiZXIgbnVyLCBzb2Zlcm4gc2llIEtlbm50bmlzIHZvbiBkaWVzZW4gUmVjaHRlbiBoYXR0ZW4sIG9obmUgU2llIHp1IGluZm9ybWllcmVuLlxuXG4gICAgICAoMikgRGllIEhhZnR1bmcgZsO8ciBGZWhsZXIgdW5kIHNvbnN0aWdlIE3DpG5nZWwgZGVzIFByb2dyYW1tcyByaWNodGV0IHNpY2ggbmFjaCBkZW4gYXXDn2VyaGFsYiBkaWVzZXIgTGl6ZW56IGdldHJvZmZlbmVuIFZlcmVpbmJhcnVuZ2VuIHp3aXNjaGVuIElobmVuIHVuZCBkZW4gUmVjaHRzaW5oYWJlcm4gb2Rlciwgd2VubiBlaW5lIHNvbGNoZSBWZXJlaW5iYXJ1bmcgbmljaHQgZXhpc3RpZXJ0LCBuYWNoIGRlbiBnZXNldHpsaWNoZW4gUmVnZWx1bmdlbi5cblxuICAgXG5cbiAgIMKnIDggVmVydHLDpGdlIG1pdCBEcml0dGVuXG5cbiAgICAgICgxKSBEaWVzZSBMaXplbnogcmVnZWx0IG51ciBkaWUgQmV6aWVodW5nIHp3aXNjaGVuIElobmVuIHVuZCBkZW4gUmVjaHRzaW5oYWJlcm4uIFNpZSBpc3QgbmljaHQgQmVzdGFuZHRlaWwgZGVyIFZlcnRyw6RnZSB6d2lzY2hlbiBJaG5lbiB1bmQgRHJpdHRlbi5cblxuICAgICAgKDIpIERpZSBMaXplbnogYmVzY2hyw6Rua3QgU2llIG5pY2h0IGluIGRlciBGcmVpaGVpdCwgbWl0IERyaXR0ZW4sIGRpZSB2b24gSWhuZW4gS29waWVuIGRlcyBQcm9ncmFtbXMgZXJoYWx0ZW4gb2RlciBMZWlzdHVuZ2VuIGluIEFuc3BydWNoIG5laG1lbiwgZGllIGltIFp1c2FtbWVuaGFuZyBtaXQgZGVtIFByb2dyYW1tIHN0ZWhlbiwgVmVydHLDpGdlIGJlbGllYmlnZW4gSW5oYWx0cyB6dSBzY2hsaWXDn2VuLCBzb2Zlcm4gU2llIGRhYmVpIElocmVuIFZlcnBmbGljaHR1bmdlbiBhdXMgZGllc2VyIExpemVueiBuYWNoa29tbWVuIHVuZCBkaWUgUmVjaHRlIGRlciBEcml0dGVuIGF1cyBkaWVzZXIgTGl6ZW56IG5pY2h0IGJlZWludHLDpGNodGlndCB3ZXJkZW4uIEluc2Jlc29uZGVyZSBkw7xyZmVuIFNpZSBmw7xyIGRpZSDDnGJlcmxhc3N1bmcgZGVzIFByb2dyYW1tcyBvZGVyIHNvbnN0aWdlIExlaXN0dW5nZW4gZWluIEVudGdlbHQgdmVybGFuZ2VuLlxuXG4gICAgICAoMykgRGllc2UgTGl6ZW56IHZlcnBmbGljaHRldCBTaWUgbmljaHQsIGRhcyBQcm9ncmFtbSBhbiBEcml0dGUgd2VpdGVyenVnZWJlbi4gRXMgc3RlaHQgSWhuZW4gZnJlaSB6dSBlbnRzY2hlaWRlbiwgd2VtIFNpZSBkYXMgUHJvZ3JhbW0genVnw6RuZ2xpY2ggbWFjaGVuLiBTaWUgZMO8cmZlbiBhYmVyIGRpZSB3ZWl0ZXJlIE51dHp1bmcgZHVyY2ggRHJpdHRlIG5pY2h0IGR1cmNoIGRlbiBFaW5zYXR6IHRlY2huaXNjaGVyIFNjaHV0em1hw59uYWhtZW4sIGluc2Jlc29uZGVyZSBkdXJjaCBkZW4gRWluc2F0eiB2b24gS29waWVyc2NodXR6dm9ycmljaHR1bmdlbiBqZWdsaWNoZXIgQXJ0LCB2ZXJoaW5kZXJuIG9kZXIgZXJzY2h3ZXJlbi4gRWluZSBwYXNzd29ydGdlc2Now7x0enRlIFp1Z2FuZ3NiZXNjaHLDpG5rdW5nIG9kZXIgZGllIE51dHp1bmcgaW4gZWluZW0gSW50cmFuZXQgd2lyZCBuaWNodCBhbHMgdGVjaG5pc2NoZSBTY2h1dHptYcOfbmFobWUgYW5nZXNlaGVuLlxuXG4gICBcblxuICAgwqcgOSBUZXh0IGRlciBMaXplbnpcblxuICAgICAgKDEpIERpZXNlIExpemVueiBpc3QgaW4gZGV1dHNjaGVyIHVuZCBlbmdsaXNjaGVyIFNwcmFjaGUgYWJnZWZhc3N0LiBCZWlkZSBGYXNzdW5nZW4gc2luZCBnbGVpY2ggdmVyYmluZGxpY2guIEVzIHdpcmQgdW50ZXJzdGVsbHQsIGRhc3MgZGllIGluIGRlciBMaXplbnogdmVyd2FuZHRlbiBCZWdyaWZmZSBpbiBiZWlkZW4gRmFzc3VuZ2VuIGRpZXNlbGJlIEJlZGV1dHVuZyBoYWJlbi4gRXJnZWJlbiBzaWNoIGRlbm5vY2ggVW50ZXJzY2hpZWRlLCBzbyBpc3QgZGllIEJlZGV1dHVuZyBtYcOfZ2VibGljaCwgd2VsY2hlIGRpZSBGYXNzdW5nZW4gdW50ZXIgQmVyw7xja3NpY2h0aWd1bmcgZGVzIFppZWxzIHVuZCBad2Vja3MgZGVyIExpemVueiBhbSBiZXN0ZW4gbWl0ZWluYW5kZXIgaW4gRWlua2xhbmcgYnJpbmd0LlxuXG4gICAgICAoMikgRGVyIExpemVuenJhdCBkZXIgRGV1dHNjaGVuIEZyZWllbiBTb2Z0d2FyZSBMaXplbnoga2FubiBtaXQgdmVyYmluZGxpY2hlciBXaXJrdW5nIG5ldWUgVmVyc2lvbmVuIGRlciBMaXplbnogaW4gS3JhZnQgc2V0emVuLCBzb3dlaXQgZGllcyBlcmZvcmRlcmxpY2ggdW5kIHp1bXV0YmFyIGlzdC4gTmV1ZSBWZXJzaW9uZW4gZGVyIExpemVueiB3ZXJkZW4gYXVmIGRlciBJbnRlcm5ldHNlaXRlIGh0dHA6Ly93d3cuZC1mc2wuZGUgbWl0IGVpbmVyIGVpbmRldXRpZ2VuIFZlcnNpb25zbnVtbWVyIHZlcsO2ZmZlbnRsaWNodC4gRGllIG5ldWUgVmVyc2lvbiBkZXIgTGl6ZW56IGVybGFuZ3QgZsO8ciBTaWUgdmVyYmluZGxpY2hlIFdpcmt1bmcsIHdlbm4gU2llIHZvbiBkZXJlbiBWZXLDtmZmZW50bGljaHVuZyBLZW5udG5pcyBnZW5vbW1lbiBoYWJlbi4gR2VzZXR6bGljaGUgUmVjaHRzYmVoZWxmZSBnZWdlbiBkaWUgw4RuZGVydW5nIGRlciBMaXplbnogd2VyZGVuIGR1cmNoIGRpZSB2b3JzdGVoZW5kZW4gQmVzdGltbXVuZ2VuIG5pY2h0IGJlc2NocsOkbmt0LlxuXG4gICAgICAoMykgU2llIGTDvHJmZW4gZGllc2UgTGl6ZW56IGluIHVudmVyw6RuZGVydGVyIEZvcm0gdmVydmllbGbDpGx0aWdlbiwgdmVyYnJlaXRlbiB1bmQgw7ZmZmVudGxpY2ggenVnw6RuZ2xpY2ggbWFjaGVuLlxuXG4gICBcblxuICAgwqcgMTAgQW53ZW5kYmFyZXMgUmVjaHRcblxuICAgQXVmIGRpZXNlIExpemVueiBmaW5kZXQgZGV1dHNjaGVzIFJlY2h0IEFud2VuZHVuZy5cblxuICAgQW5oYW5nOiBXaWUgdW50ZXJzdGVsbGVuIFNpZSBlaW4gUHJvZ3JhbW0gZGVyIERldXRzY2hlbiBGcmVpZW4gU29mdHdhcmUgTGl6ZW56P1xuXG4gICBVbSBqZWRlcm1hbm4gZGVuIEFic2NobHVzcyBkaWVzZXIgTGl6ZW56IHp1IGVybcO2Z2xpY2hlbiwgd2lyZCBlbXBmb2hsZW4sIGRhcyBQcm9ncmFtbSBtaXQgZm9sZ2VuZGVtIEhpbndlaXMgYXVmIGRpZSBMaXplbnogenUgdmVyc2VoZW46XG5cbiAgIFwiQ29weXJpZ2h0IChDKSAyMFtqal0gW05hbWUgZGVzIFJlY2h0c2luaGFiZXJzXS5cblxuICAgRGllc2VzIFByb2dyYW1tIGthbm4gZHVyY2ggamVkZXJtYW5uIGdlbcOkw58gZGVuIEJlc3RpbW11bmdlbiBkZXIgRGV1dHNjaGVuIEZyZWllbiBTb2Z0d2FyZSBMaXplbnogZ2VudXR6dCB3ZXJkZW4uXG5cbiAgIERpZSBMaXplbnoga2FubiB1bnRlciBodHRwOi8vd3d3LmQtZnNsLmRlIGFiZ2VydWZlbiB3ZXJkZW4uXCIiXSwibGljZW5zZUlkcyI6WyJELUZTTC0xLjAiXSwia2V5d29yZHMiOlsic29mdHdhcmUgbGl6ZW56IGMiLCJsaXplbnogYyBtaW5pc3Rlcml1bSIsImMgbWluaXN0ZXJpdW0gZiIsIm1pbmlzdGVyaXVtIGYgciIsImYgciB3aXNzZW5zY2hhZnQiLCJyIHdpc3NlbnNjaGFmdCB1bmQiLCJ3aXNzZW5zY2hhZnQgdW5kIGZvcnNjaHVuZyIsInVuZCBmb3JzY2h1bmcgbm9yZHJoZWluIiwiZm9yc2NodW5nIG5vcmRyaGVpbiB3ZXN0ZmFsZW4iLCJub3JkcmhlaW4gd2VzdGZhbGVuIDIwMDQiLCJ3ZXN0ZmFsZW4gMjAwNCBlcnN0ZWxsdCIsIjIwMDQgZXJzdGVsbHQgdm9uIiwiZXJzdGVsbHQgdm9uIGF4ZWwiLCJ2b24gYXhlbCBtZXR6Z2VyIiwiYXhlbCBtZXR6Z2VyIHVuZCIsIm1ldHpnZXIgdW5kIHRpbGwiLCJ1bmQgdGlsbCBqYWVnZXIiLCJ0aWxsIGphZWdlciBpbnN0aXR1dCIsImphZWdlciBpbnN0aXR1dCBmIiwiaW5zdGl0dXQgZiByIiwiZiByIHJlY2h0c2ZyYWdlbiIsInIgcmVjaHRzZnJhZ2VuIGRlciIsInJlY2h0c2ZyYWdlbiBkZXIgZnJlaWVuIiwiZGVyIGZyZWllbiB1bmQiLCJmcmVpZW4gdW5kIG9wZW4iLCJ1bmQgb3BlbiBzb3VyY2UiLCJzb3VyY2Ugc29mdHdhcmUgaHR0cCIsInNvZnR3YXJlIGh0dHAgd3d3IiwiaHR0cCB3d3cgaWZyb3NzIiwid3d3IGlmcm9zcyBkZSIsImlmcm9zcyBkZSBwciIsImRlIHByIGFtYmVsIiwicHIgYW1iZWwgc29mdHdhcmUiLCJhbWJlbCBzb2Z0d2FyZSBpc3QiLCJzb2Z0d2FyZSBpc3QgbWVociIsImlzdCBtZWhyIGFscyIsIm1laHIgYWxzIGVpbiIsImFscyBlaW4gd2lydHNjaGFmdHNndXQiLCJlaW4gd2lydHNjaGFmdHNndXQgc2llIiwid2lydHNjaGFmdHNndXQgc2llIGlzdCIsInNpZSBpc3QgZGllIiwiaXN0IGRpZSB0ZWNobmlzY2hlIiwiZGllIHRlY2huaXNjaGUgZ3J1bmRsYWdlIiwidGVjaG5pc2NoZSBncnVuZGxhZ2UgZGVyIiwiZ3J1bmRsYWdlIGRlciBpbmZvcm1hdGlvbnNnZXNlbGxzY2hhZnQiLCJkZXIgaW5mb3JtYXRpb25zZ2VzZWxsc2NoYWZ0IGRpZSIsImluZm9ybWF0aW9uc2dlc2VsbHNjaGFmdCBkaWUgZnJhZ2UiLCJkaWUgZnJhZ2UgZGVyIiwiZnJhZ2UgZGVyIHRlaWxoYWJlIiwiZGVyIHRlaWxoYWJlIGRlciIsInRlaWxoYWJlIGRlciBhbGxnZW1laW5oZWl0IiwiZGVyIGFsbGdlbWVpbmhlaXQgaXN0IiwiYWxsZ2VtZWluaGVpdCBpc3QgZGVzd2VnZW4iLCJpc3QgZGVzd2VnZW4gdm9uIiwiZGVzd2VnZW4gdm9uIGJlc29uZGVyZXIiLCJ2b24gYmVzb25kZXJlciBiZWRldXR1bmciLCJiZXNvbmRlcmVyIGJlZGV1dHVuZyBoZXJrIiwiYmVkZXV0dW5nIGhlcmsgbW1saWNoIiwiaGVyayBtbWxpY2ggbGl6ZW56aWVydGUiLCJtbWxpY2ggbGl6ZW56aWVydGUgcHJvZ3JhbW1lIiwibGl6ZW56aWVydGUgcHJvZ3JhbW1lIHdlcmRlbiIsInByb2dyYW1tZSB3ZXJkZW4gbnVyIiwid2VyZGVuIG51ciBpbSIsIm9iamVjdCBjb2RlIHZlcnRyaWViZW4iLCJjb2RlIHZlcnRyaWViZW4gZGVyIiwidmVydHJpZWJlbiBkZXIgbnV0emVyIiwiZGVyIG51dHplciBkYXJmIiwibnV0emVyIGRhcmYgZGFzIiwiZGFzIHByb2dyYW1tIHdlZGVyIiwicHJvZ3JhbW0gd2VkZXIgdmVyIiwid2VkZXIgdmVyIG5kZXJuIiwidmVyIG5kZXJuIG5vY2giLCJuZGVybiBub2NoIHdlaXRlcmdlYmVuIiwibm9jaCB3ZWl0ZXJnZWJlbiBkYXMiLCJ3ZWl0ZXJnZWJlbiBkYXMgbGl6ZW56bW9kZWxsIiwiZGFzIGxpemVuem1vZGVsbCBkZXIiLCJsaXplbnptb2RlbGwgZGVyIGZyZWllbiIsImRlciBmcmVpZW4gc29mdHdhcmUiLCJmcmVpZW4gc29mdHdhcmUgc3lub255bSIsInNvZnR3YXJlIHN5bm9ueW0gb3BlbiIsInN5bm9ueW0gb3BlbiBzb3VyY2UiLCJzb3VyY2Ugc29mdHdhcmUgZ2V3Iiwic29mdHdhcmUgZ2V3IGhydCIsImhydCBpaG5lbiBkYWdlZ2VuIiwiaWhuZW4gZGFnZWdlbiB1bWZhc3NlbmRlIiwiZGFnZWdlbiB1bWZhc3NlbmRlIGZyZWloZWl0ZW4iLCJ1bWZhc3NlbmRlIGZyZWloZWl0ZW4gaW0iLCJmcmVpaGVpdGVuIGltIHVtZ2FuZyIsImltIHVtZ2FuZyBtaXQiLCJ1bWdhbmcgbWl0IGRlbSIsImRlbSBwcm9ncmFtbSBkaWUiLCJwcm9ncmFtbSBkaWUgZGV1dHNjaGUiLCJzb2Z0d2FyZSBsaXplbnogZm9sZ3QiLCJsaXplbnogZm9sZ3QgZGllc2VtIiwiZm9sZ3QgZGllc2VtIGxpemVuem1vZGVsbCIsImRpZXNlbSBsaXplbnptb2RlbGwgc2llIiwibGl6ZW56bW9kZWxsIHNpZSBnZXciLCJzaWUgZ2V3IGhydCIsImhydCBpaG5lbiBkYXMiLCJpaG5lbiBkYXMgcmVjaHQiLCJkYXMgcmVjaHQgZGFzIiwicmVjaHQgZGFzIHByb2dyYW1tIiwicHJvZ3JhbW0gaW4gdW1mYXNzZW5kZXIiLCJpbiB1bWZhc3NlbmRlciB3ZWlzZSIsInVtZmFzc2VuZGVyIHdlaXNlIHp1Iiwid2Vpc2UgenUgbnV0emVuIiwienUgbnV0emVuIGVzIiwibnV0emVuIGVzIGlzdCIsImVzIGlzdCBpaG5lbiIsImlzdCBpaG5lbiBnZXN0YXR0ZXQiLCJpaG5lbiBnZXN0YXR0ZXQgZGFzIiwiZ2VzdGF0dGV0IGRhcyBwcm9ncmFtbSIsInByb2dyYW1tIG5hY2ggaWhyZW4iLCJuYWNoIGlocmVuIHZvcnN0ZWxsdW5nZW4iLCJpaHJlbiB2b3JzdGVsbHVuZ2VuIHp1Iiwidm9yc3RlbGx1bmdlbiB6dSB2ZXIiLCJ6dSB2ZXIgbmRlcm4iLCJ2ZXIgbmRlcm4gaW4iLCJuZGVybiBpbiB2ZXIiLCJpbiB2ZXIgbmRlcnRlciIsInZlciBuZGVydGVyIG9kZXIiLCJuZGVydGVyIG9kZXIgdW52ZXIiLCJvZGVyIHVudmVyIG5kZXJ0ZXIiLCJuZGVydGVyIGZvcm0genUiLCJmb3JtIHp1IHZlcnZpZWxmIiwienUgdmVydmllbGYgbHRpZ2VuIiwidmVydmllbGYgbHRpZ2VuIHp1IiwibHRpZ2VuIHp1IHZlcmJyZWl0ZW4iLCJ6dSB2ZXJicmVpdGVuIHVuZCIsInp1ZyBuZ2xpY2ggenUiLCJuZ2xpY2ggenUgbWFjaGVuIiwienUgbWFjaGVuIGRpZXNlIiwibWFjaGVuIGRpZXNlIHJlY2h0ZSIsImRpZXNlIHJlY2h0ZSB3ZXJkZW4iLCJyZWNodGUgd2VyZGVuIHVuZW50Z2VsdGxpY2giLCJ3ZXJkZW4gdW5lbnRnZWx0bGljaCBlaW5nZXIiLCJ1bmVudGdlbHRsaWNoIGVpbmdlciB1bXQiLCJlaW5nZXIgdW10IGRpZSIsInVtdCBkaWUgZGV1dHNjaGUiLCJzb2Z0d2FyZSBsaXplbnogdmVyYmluZGV0IiwibGl6ZW56IHZlcmJpbmRldCBkaWUiLCJ2ZXJiaW5kZXQgZGllIHJlY2h0c2VpbnIiLCJkaWUgcmVjaHRzZWluciB1bXVuZyIsInJlY2h0c2VpbnIgdW11bmcgYWxsZXJkaW5ncyIsInVtdW5nIGFsbGVyZGluZ3MgbWl0IiwiYWxsZXJkaW5ncyBtaXQgcGZsaWNodGVuIiwibWl0IHBmbGljaHRlbiBkaWUiLCJwZmxpY2h0ZW4gZGllIGRlbSIsImRpZSBkZW0gendlY2siLCJkZW0gendlY2sgZGllbmVuIiwiendlY2sgZGllbmVuIGRhcyIsImRpZW5lbiBkYXMgZnJlaWUiLCJkYXMgZnJlaWUgemlya3VsaWVyZW4iLCJmcmVpZSB6aXJrdWxpZXJlbiBkZXMiLCJ6aXJrdWxpZXJlbiBkZXMgcHJvZ3JhbW1zIiwicHJvZ3JhbW1zIHVuZCBhbGxlciIsInVuZCBhbGxlciB2ZXIiLCJhbGxlciB2ZXIgZmZlbnRsaWNodGVuIiwidmVyIGZmZW50bGljaHRlbiBmb3J0ZW50d2lja2x1bmdlbiIsImZmZW50bGljaHRlbiBmb3J0ZW50d2lja2x1bmdlbiB6dSIsImZvcnRlbnR3aWNrbHVuZ2VuIHp1IHNpY2hlcm4iLCJ6dSBzaWNoZXJuIHdlbm4iLCJzaWNoZXJuIHdlbm4gc2llIiwic3NlbiBzaWUgamVkZW0iLCJzaWUgamVkZW0gZGVyIiwiamVkZW0gZGVyIGRhcyIsImRlciBkYXMgcHJvZ3JhbW0iLCJkYXMgcHJvZ3JhbW0gdm9uIiwidm9uIGlobmVuIGVyaCIsImlobmVuIGVyaCBsdCIsImVyaCBsdCBlaW5lIiwibHQgZWluZSBrb3BpZSIsImVpbmUga29waWUgZGllc2VyIiwia29waWUgZGllc2VyIGxpemVueiIsImRpZXNlciBsaXplbnogbWl0bGllZmVybiIsImxpemVueiBtaXRsaWVmZXJuIHVuZCIsIm1pdGxpZWZlcm4gdW5kIGRlbiIsInVuZCBkZW4genVncmlmZiIsImRlbiB6dWdyaWZmIGF1ZiIsInp1Z3JpZmYgYXVmIGRlbiIsImF1ZiBkZW4gc291cmNlIiwiZGVuIHNvdXJjZSBjb2RlIiwic291cmNlIGNvZGUgZXJtIiwiY29kZSBlcm0gZ2xpY2hlbiIsImVybSBnbGljaGVuIGVpbmUiLCJnbGljaGVuIGVpbmUgd2VpdGVyZSIsImVpbmUgd2VpdGVyZSBwZmxpY2h0Iiwid2VpdGVyZSBwZmxpY2h0IGJldHJpZmZ0IiwicGZsaWNodCBiZXRyaWZmdCBmb3J0ZW50d2lja2x1bmdlbiIsImJldHJpZmZ0IGZvcnRlbnR3aWNrbHVuZ2VuIGRlcyIsImZvcnRlbnR3aWNrbHVuZ2VuIGRlcyBwcm9ncmFtbXMiLCJkZXMgcHJvZ3JhbW1zIG5kZXJ1bmdlbiIsInByb2dyYW1tcyBuZGVydW5nZW4gYW0iLCJuZGVydW5nZW4gYW0gcHJvZ3JhbW0iLCJhbSBwcm9ncmFtbSBkaWUiLCJwcm9ncmFtbSBkaWUgc2llIiwiZGllIHNpZSBmZmVudGxpY2giLCJzaWUgZmZlbnRsaWNoIHZlcmJyZWl0ZW4iLCJmZmVudGxpY2ggdmVyYnJlaXRlbiBvZGVyIiwidmVyYnJlaXRlbiBvZGVyIHp1ZyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgYW5kIExpY2Vuc2luZyBJbmZvcm1hdGlvbiBmb3IgQUNFKFRNKSwgVEFPKFRNKSwgQ0lBTyhUTSksIERBbkNFKFRNKSwgYW5kIENvU01JQyhUTSlcblxuQUNFKFRNKSwgVEFPKFRNKSwgQ0lBTyhUTSksIERBbkNFXHUwMDNlKFRNKSwgYW5kIENvU01JQyhUTSkgKGhlbmNlZm9ydGggcmVmZXJyZWQgdG8gYXMgXCJET0Mgc29mdHdhcmVcIikgYXJlIGNvcHlyaWdodGVkIGJ5IERvdWdsYXMgQy4gU2NobWlkdCBhbmQgaGlzIHJlc2VhcmNoIGdyb3VwIGF0IFdhc2hpbmd0b24gVW5pdmVyc2l0eSwgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBJcnZpbmUsIGFuZCBWYW5kZXJiaWx0IFVuaXZlcnNpdHksIENvcHlyaWdodCAoYykgMTk5My0yMDA5LCBhbGwgcmlnaHRzIHJlc2VydmVkLiBTaW5jZSBET0Mgc29mdHdhcmUgaXMgb3Blbi1zb3VyY2UsIGZyZWVseSBhdmFpbGFibGUgc29mdHdhcmUsIHlvdSBhcmUgZnJlZSB0byB1c2UsIG1vZGlmeSwgY29weSwgYW5kIGRpc3RyaWJ1dGUtLXBlcnBldHVhbGx5IGFuZCBpcnJldm9jYWJseS0tdGhlIERPQyBzb2Z0d2FyZSBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgcHJvZHVjZWQgZnJvbSB0aGUgc291cmNlLCBhcyB3ZWxsIGFzIGNvcHkgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb2Z0d2FyZS4gWW91IG11c3QsIGhvd2V2ZXIsIGluY2x1ZGUgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGFsb25nIHdpdGggYW55IGNvZGUgYnVpbHQgdXNpbmcgRE9DIHNvZnR3YXJlIHRoYXQgeW91IHJlbGVhc2UuIE5vIGNvcHlyaWdodCBzdGF0ZW1lbnQgbmVlZHMgdG8gYmUgcHJvdmlkZWQgaWYgeW91IGp1c3Qgc2hpcCBiaW5hcnkgZXhlY3V0YWJsZXMgb2YgeW91ciBzb2Z0d2FyZSBwcm9kdWN0cy5cblxuWW91IGNhbiB1c2UgRE9DIHNvZnR3YXJlIGluIGNvbW1lcmNpYWwgYW5kL29yIGJpbmFyeSBzb2Z0d2FyZSByZWxlYXNlcyBhbmQgYXJlIHVuZGVyIG5vIG9ibGlnYXRpb24gdG8gcmVkaXN0cmlidXRlIGFueSBvZiB5b3VyIHNvdXJjZSBjb2RlIHRoYXQgaXMgYnVpbHQgdXNpbmcgRE9DIHNvZnR3YXJlLiBOb3RlLCBob3dldmVyLCB0aGF0IHlvdSBtYXkgbm90IG1pc2FwcHJvcHJpYXRlIHRoZSBET0Mgc29mdHdhcmUgY29kZSwgc3VjaCBhcyBjb3B5cmlnaHRpbmcgaXQgeW91cnNlbGYgb3IgY2xhaW1pbmcgYXV0aG9yc2hpcCBvZiB0aGUgRE9DIHNvZnR3YXJlIGNvZGUsIGluIGEgd2F5IHRoYXQgd2lsbCBwcmV2ZW50IERPQyBzb2Z0d2FyZSBmcm9tIGJlaW5nIGRpc3RyaWJ1dGVkIGZyZWVseSB1c2luZyBhbiBvcGVuLXNvdXJjZSBkZXZlbG9wbWVudCBtb2RlbC4gWW91IG5lZWRuJ3QgaW5mb3JtIGFueW9uZSB0aGF0IHlvdSdyZSB1c2luZyBET0Mgc29mdHdhcmUgaW4geW91ciBzb2Z0d2FyZSwgdGhvdWdoIHdlIGVuY291cmFnZSB5b3UgdG8gbGV0IHVzIGtub3cgc28gd2UgY2FuIHByb21vdGUgeW91ciBwcm9qZWN0IGluIHRoZSBET0Mgc29mdHdhcmUgc3VjY2VzcyBzdG9yaWVzLlxuXG5UaGUgQUNFLCBUQU8sIENJQU8sIERBbkNFLCBhbmQgQ29TTUlDIHdlYiBzaXRlcyBhcmUgbWFpbnRhaW5lZCBieSB0aGUgRE9DIEdyb3VwIGF0IHRoZSBJbnN0aXR1dGUgZm9yIFNvZnR3YXJlIEludGVncmF0ZWQgU3lzdGVtcyAoSVNJUykgYW5kIHRoZSBDZW50ZXIgZm9yIERpc3RyaWJ1dGVkIE9iamVjdCBDb21wdXRpbmcgb2YgV2FzaGluZ3RvbiBVbml2ZXJzaXR5LCBTdC4gTG91aXMgZm9yIHRoZSBkZXZlbG9wbWVudCBvZiBvcGVuLXNvdXJjZSBzb2Z0d2FyZSBhcyBwYXJ0IG9mIHRoZSBvcGVuLXNvdXJjZSBzb2Z0d2FyZSBjb21tdW5pdHkuIFN1Ym1pc3Npb25zIGFyZSBwcm92aWRlZCBieSB0aGUgc3VibWl0dGVyIGBgYXMgaXMnJyB3aXRoIG5vIHdhcnJhbnRpZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIGFueSB3YXJyYW50eSBvZiBtZXJjaGFudGFiaWxpdHksIG5vbmluZnJpbmdlbWVudCBvZiB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHksIG9yIGZpdG5lc3MgZm9yIGFueSBwYXJ0aWN1bGFyIHB1cnBvc2UuIEluIG5vIGV2ZW50IHNoYWxsIHRoZSBzdWJtaXR0ZXIgYmUgbGlhYmxlIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgZXhlbXBsYXJ5LCBwdW5pdGl2ZSwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBsb3N0IHByb2ZpdHMsIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLiBMaWtld2lzZSwgRE9DIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzIGlzIHdpdGggbm8gd2FycmFudGllcyBvZiBhbnkga2luZCwgaW5jbHVkaW5nIHRoZSB3YXJyYW50aWVzIG9mIGRlc2lnbiwgbWVyY2hhbnRhYmlsaXR5LCBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIG5vbmluZnJpbmdlbWVudCwgb3IgYXJpc2luZyBmcm9tIGEgY291cnNlIG9mIGRlYWxpbmcsIHVzYWdlIG9yIHRyYWRlIHByYWN0aWNlLiBXYXNoaW5ndG9uIFVuaXZlcnNpdHksIFVDIElydmluZSwgVmFuZGVyYmlsdCBVbml2ZXJzaXR5LCB0aGVpciBlbXBsb3llZXMsIGFuZCBzdHVkZW50cyBzaGFsbCBoYXZlIG5vIGxpYWJpbGl0eSB3aXRoIHJlc3BlY3QgdG8gdGhlIGluZnJpbmdlbWVudCBvZiBjb3B5cmlnaHRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBwYXRlbnRzIGJ5IERPQyBzb2Z0d2FyZSBvciBhbnkgcGFydCB0aGVyZW9mLiBNb3Jlb3ZlciwgaW4gbm8gZXZlbnQgd2lsbCBXYXNoaW5ndG9uIFVuaXZlcnNpdHksIFVDIElydmluZSwgb3IgVmFuZGVyYmlsdCBVbml2ZXJzaXR5LCB0aGVpciBlbXBsb3llZXMsIG9yIHN0dWRlbnRzIGJlIGxpYWJsZSBmb3IgYW55IGxvc3QgcmV2ZW51ZSBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsIGluZGlyZWN0IGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMuXG5cbkRPQyBzb2Z0d2FyZSBpcyBwcm92aWRlZCB3aXRoIG5vIHN1cHBvcnQgYW5kIHdpdGhvdXQgYW55IG9ibGlnYXRpb24gb24gdGhlIHBhcnQgb2YgV2FzaGluZ3RvbiBVbml2ZXJzaXR5LCBVQyBJcnZpbmUsIFZhbmRlcmJpbHQgVW5pdmVyc2l0eSwgdGhlaXIgZW1wbG95ZWVzLCBvciBzdHVkZW50cyB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwgbW9kaWZpY2F0aW9uLCBvciBlbmhhbmNlbWVudC4gQSBudW1iZXIgb2YgY29tcGFuaWVzIGFyb3VuZCB0aGUgd29ybGQgcHJvdmlkZSBjb21tZXJjaWFsIHN1cHBvcnQgZm9yIERPQyBzb2Z0d2FyZSwgaG93ZXZlci4gRE9DIHNvZnR3YXJlIGlzIFkySy1jb21wbGlhbnQsIGFzIGxvbmcgYXMgdGhlIHVuZGVybHlpbmcgT1MgcGxhdGZvcm0gaXMgWTJLLWNvbXBsaWFudC4gTGlrZXdpc2UsIERPQyBzb2Z0d2FyZSBpcyBjb21wbGlhbnQgd2l0aCB0aGUgbmV3IFVTIGRheWxpZ2h0IHNhdmluZ3MgcnVsZSBwYXNzZWQgYnkgQ29uZ3Jlc3MgYXMgXCJUaGUgRW5lcmd5IFBvbGljeSBBY3Qgb2YgMjAwNSxcIiB3aGljaCBlc3RhYmxpc2hlZCBuZXcgZGF5bGlnaHQgc2F2aW5ncyB0aW1lcyAoRFNUKSBydWxlcyBmb3IgdGhlIFVuaXRlZCBTdGF0ZXMgdGhhdCBleHBhbmQgRFNUIGFzIG9mIE1hcmNoIDIwMDcuIFNpbmNlIERPQyBzb2Z0d2FyZSBvYnRhaW5zIHRpbWUvZGF0ZSBhbmQgY2FsZW5kYXJpbmcgaW5mb3JtYXRpb24gZnJvbSBvcGVyYXRpbmcgc3lzdGVtcyB1c2VycyB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieSB0aGUgbmV3IERTVCBydWxlcyBhcyBsb25nIGFzIHRoZXkgdXBncmFkZSB0aGVpciBvcGVyYXRpbmcgc3lzdGVtcyBhY2NvcmRpbmdseS5cblxuVGhlIG5hbWVzIEFDRShUTSksIFRBTyhUTSksIENJQU8oVE0pLCBEQW5DRShUTSksIENvU01JQyhUTSksIFdhc2hpbmd0b24gVW5pdmVyc2l0eSwgVUMgSXJ2aW5lLCBhbmQgVmFuZGVyYmlsdCBVbml2ZXJzaXR5LCBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIGRlcml2ZWQgZnJvbSB0aGlzIHNvdXJjZSB3aXRob3V0IGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gV2FzaGluZ3RvbiBVbml2ZXJzaXR5LCBVQyBJcnZpbmUsIG9yIFZhbmRlcmJpbHQgVW5pdmVyc2l0eS4gVGhpcyBsaWNlbnNlIGdyYW50cyBubyBwZXJtaXNzaW9uIHRvIGNhbGwgcHJvZHVjdHMgb3Igc2VydmljZXMgZGVyaXZlZCBmcm9tIHRoaXMgc291cmNlIEFDRShUTSksIFRBTyhUTSksIENJQU8oVE0pLCBEQW5DRShUTSksIG9yIENvU01JQyhUTSksIG5vciBkb2VzIGl0IGdyYW50IHBlcm1pc3Npb24gZm9yIHRoZSBuYW1lIFdhc2hpbmd0b24gVW5pdmVyc2l0eSwgVUMgSXJ2aW5lLCBvciBWYW5kZXJiaWx0IFVuaXZlcnNpdHkgdG8gYXBwZWFyIGluIHRoZWlyIG5hbWVzLlxuXG5JZiB5b3UgaGF2ZSBhbnkgc3VnZ2VzdGlvbnMsIGFkZGl0aW9ucywgY29tbWVudHMsIG9yIHF1ZXN0aW9ucywgcGxlYXNlIGxldCBtZSBrbm93LlxuXG5Eb3VnbGFzIEMuIFNjaG1pZHQiXSwibGljZW5zZUlkcyI6WyJET0MiXSwia2V5d29yZHMiOlsiY29weXJpZ2h0IGFuZCBsaWNlbnNpbmciLCJhbmQgbGljZW5zaW5nIGluZm9ybWF0aW9uIiwiaW5mb3JtYXRpb24gZm9yIGFjZSIsImZvciBhY2UgdG0iLCJjb3NtaWMgdG0gYWNlIiwidG0gYWNlIHRtIiwiY29zbWljIHRtIGhlbmNlZm9ydGgiLCJ0bSBoZW5jZWZvcnRoIHJlZmVycmVkIiwiaGVuY2Vmb3J0aCByZWZlcnJlZCB0byIsInRvIGFzIGRvYyIsImFzIGRvYyBzb2Z0d2FyZSIsImRvYyBzb2Z0d2FyZSBhcmUiLCJzb2Z0d2FyZSBhcmUgY29weXJpZ2h0ZWQiLCJjb3B5cmlnaHRlZCBieSBkb3VnbGFzIiwiYnkgZG91Z2xhcyBjIiwiYyBzY2htaWR0IGFuZCIsInNjaG1pZHQgYW5kIGhpcyIsImFuZCBoaXMgcmVzZWFyY2giLCJoaXMgcmVzZWFyY2ggZ3JvdXAiLCJyZXNlYXJjaCBncm91cCBhdCIsImdyb3VwIGF0IHdhc2hpbmd0b24iLCJhdCB3YXNoaW5ndG9uIHVuaXZlcnNpdHkiLCJ3YXNoaW5ndG9uIHVuaXZlcnNpdHkgdW5pdmVyc2l0eSIsInVuaXZlcnNpdHkgdW5pdmVyc2l0eSBvZiIsIm9mIGNhbGlmb3JuaWEgaXJ2aW5lIiwiY2FsaWZvcm5pYSBpcnZpbmUgYW5kIiwidmFuZGVyYmlsdCB1bml2ZXJzaXR5IGNvcHlyaWdodCIsInVuaXZlcnNpdHkgY29weXJpZ2h0IGMiLCJjIDE5OTMgMjAwOSIsIjE5OTMgMjAwOSBhbGwiLCIyMDA5IGFsbCByaWdodHMiLCJyaWdodHMgcmVzZXJ2ZWQgc2luY2UiLCJyZXNlcnZlZCBzaW5jZSBkb2MiLCJzb2Z0d2FyZSBpcyBvcGVuIiwiaXMgb3BlbiBzb3VyY2UiLCJvcGVuIHNvdXJjZSBmcmVlbHkiLCJzb3VyY2UgZnJlZWx5IGF2YWlsYWJsZSIsImZyZWVseSBhdmFpbGFibGUgc29mdHdhcmUiLCJhdmFpbGFibGUgc29mdHdhcmUgeW91IiwiZnJlZSB0byB1c2UiLCJ1c2UgbW9kaWZ5IGNvcHkiLCJtb2RpZnkgY29weSBhbmQiLCJhbmQgZGlzdHJpYnV0ZSBwZXJwZXR1YWxseSIsImRpc3RyaWJ1dGUgcGVycGV0dWFsbHkgYW5kIiwicGVycGV0dWFsbHkgYW5kIGlycmV2b2NhYmx5IiwiYW5kIGlycmV2b2NhYmx5IHRoZSIsImlycmV2b2NhYmx5IHRoZSBkb2MiLCJkb2Mgc29mdHdhcmUgc291cmNlIiwib2JqZWN0IGNvZGUgcHJvZHVjZWQiLCJjb2RlIHByb2R1Y2VkIGZyb20iLCJwcm9kdWNlZCBmcm9tIHRoZSIsInRoZSBzb3VyY2UgYXMiLCJzb3VyY2UgYXMgd2VsbCIsIndlbGwgYXMgY29weSIsImFzIGNvcHkgYW5kIiwieW91IG11c3QgaG93ZXZlciIsIm11c3QgaG93ZXZlciBpbmNsdWRlIiwiaG93ZXZlciBpbmNsdWRlIHRoaXMiLCJ0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQiLCJjb3B5cmlnaHQgc3RhdGVtZW50IGFsb25nIiwic3RhdGVtZW50IGFsb25nIHdpdGgiLCJhbnkgY29kZSBidWlsdCIsImNvZGUgYnVpbHQgdXNpbmciLCJkb2Mgc29mdHdhcmUgdGhhdCIsInlvdSByZWxlYXNlIG5vIiwicmVsZWFzZSBubyBjb3B5cmlnaHQiLCJubyBjb3B5cmlnaHQgc3RhdGVtZW50IiwiY29weXJpZ2h0IHN0YXRlbWVudCBuZWVkcyIsInN0YXRlbWVudCBuZWVkcyB0byIsIm5lZWRzIHRvIGJlIiwiYmUgcHJvdmlkZWQgaWYiLCJwcm92aWRlZCBpZiB5b3UiLCJpZiB5b3UganVzdCIsInlvdSBqdXN0IHNoaXAiLCJqdXN0IHNoaXAgYmluYXJ5Iiwic2hpcCBiaW5hcnkgZXhlY3V0YWJsZXMiLCJiaW5hcnkgZXhlY3V0YWJsZXMgb2YiLCJleGVjdXRhYmxlcyBvZiB5b3VyIiwieW91ciBzb2Z0d2FyZSBwcm9kdWN0cyIsInNvZnR3YXJlIHByb2R1Y3RzIHlvdSIsInByb2R1Y3RzIHlvdSBjYW4iLCJjYW4gdXNlIGRvYyIsInVzZSBkb2Mgc29mdHdhcmUiLCJjb21tZXJjaWFsIGFuZCBvciIsIm9yIGJpbmFyeSBzb2Z0d2FyZSIsImJpbmFyeSBzb2Z0d2FyZSByZWxlYXNlcyIsInNvZnR3YXJlIHJlbGVhc2VzIGFuZCIsInJlbGVhc2VzIGFuZCBhcmUiLCJhbmQgYXJlIHVuZGVyIiwib2JsaWdhdGlvbiB0byByZWRpc3RyaWJ1dGUiLCJyZWRpc3RyaWJ1dGUgYW55IG9mIiwib2YgeW91ciBzb3VyY2UiLCJ5b3VyIHNvdXJjZSBjb2RlIiwidGhhdCBpcyBidWlsdCIsImlzIGJ1aWx0IHVzaW5nIiwiZG9jIHNvZnR3YXJlIG5vdGUiLCJzb2Z0d2FyZSBub3RlIGhvd2V2ZXIiLCJob3dldmVyIHRoYXQgeW91IiwibWF5IG5vdCBtaXNhcHByb3ByaWF0ZSIsIm5vdCBtaXNhcHByb3ByaWF0ZSB0aGUiLCJtaXNhcHByb3ByaWF0ZSB0aGUgZG9jIiwic29mdHdhcmUgY29kZSBzdWNoIiwiY29kZSBzdWNoIGFzIiwic3VjaCBhcyBjb3B5cmlnaHRpbmciLCJhcyBjb3B5cmlnaHRpbmcgaXQiLCJjb3B5cmlnaHRpbmcgaXQgeW91cnNlbGYiLCJpdCB5b3Vyc2VsZiBvciIsInlvdXJzZWxmIG9yIGNsYWltaW5nIiwib3IgY2xhaW1pbmcgYXV0aG9yc2hpcCIsImNsYWltaW5nIGF1dGhvcnNoaXAgb2YiLCJvZiB0aGUgZG9jIiwid2F5IHRoYXQgd2lsbCIsInRoYXQgd2lsbCBwcmV2ZW50Iiwid2lsbCBwcmV2ZW50IGRvYyIsInByZXZlbnQgZG9jIHNvZnR3YXJlIiwiZG9jIHNvZnR3YXJlIGZyb20iLCJzb2Z0d2FyZSBmcm9tIGJlaW5nIiwiYmVpbmcgZGlzdHJpYnV0ZWQgZnJlZWx5IiwiZGlzdHJpYnV0ZWQgZnJlZWx5IHVzaW5nIiwiZnJlZWx5IHVzaW5nIGFuIiwidXNpbmcgYW4gb3BlbiIsInNvdXJjZSBkZXZlbG9wbWVudCBtb2RlbCIsImRldmVsb3BtZW50IG1vZGVsIHlvdSIsIm1vZGVsIHlvdSBuZWVkbiIsInlvdSBuZWVkbiB0IiwibmVlZG4gdCBpbmZvcm0iLCJ0IGluZm9ybSBhbnlvbmUiLCJpbmZvcm0gYW55b25lIHRoYXQiLCJhbnlvbmUgdGhhdCB5b3UiLCJ0aGF0IHlvdSByZSIsInlvdSByZSB1c2luZyIsInJlIHVzaW5nIGRvYyIsImluIHlvdXIgc29mdHdhcmUiLCJ5b3VyIHNvZnR3YXJlIHRob3VnaCIsInNvZnR3YXJlIHRob3VnaCB3ZSIsInRob3VnaCB3ZSBlbmNvdXJhZ2UiLCJ3ZSBlbmNvdXJhZ2UgeW91IiwieW91IHRvIGxldCIsInRvIGxldCB1cyIsIndlIGNhbiBwcm9tb3RlIiwiY2FuIHByb21vdGUgeW91ciIsInByb21vdGUgeW91ciBwcm9qZWN0IiwieW91ciBwcm9qZWN0IGluIiwicHJvamVjdCBpbiB0aGUiLCJpbiB0aGUgZG9jIiwiZG9jIHNvZnR3YXJlIHN1Y2Nlc3MiLCJzb2Z0d2FyZSBzdWNjZXNzIHN0b3JpZXMiLCJzdWNjZXNzIHN0b3JpZXMgdGhlIiwic3RvcmllcyB0aGUgYWNlIiwidGhlIGFjZSB0YW8iLCJhY2UgdGFvIGNpYW8iLCJ0YW8gY2lhbyBkYW5jZSIsImNpYW8gZGFuY2UgYW5kIiwiZGFuY2UgYW5kIGNvc21pYyIsImFuZCBjb3NtaWMgd2ViIiwiY29zbWljIHdlYiBzaXRlcyIsIndlYiBzaXRlcyBhcmUiLCJzaXRlcyBhcmUgbWFpbnRhaW5lZCIsImFyZSBtYWludGFpbmVkIGJ5IiwiYnkgdGhlIGRvYyIsInRoZSBkb2MgZ3JvdXAiLCJkb2MgZ3JvdXAgYXQiLCJncm91cCBhdCB0aGUiLCJhdCB0aGUgaW5zdGl0dXRlIiwidGhlIGluc3RpdHV0ZSBmb3IiLCJpbnN0aXR1dGUgZm9yIHNvZnR3YXJlIiwiZm9yIHNvZnR3YXJlIGludGVncmF0ZWQiLCJzb2Z0d2FyZSBpbnRlZ3JhdGVkIHN5c3RlbXMiLCJpbnRlZ3JhdGVkIHN5c3RlbXMgaXNpcyIsInN5c3RlbXMgaXNpcyBhbmQiLCJpc2lzIGFuZCB0aGUiLCJhbmQgdGhlIGNlbnRlciIsInRoZSBjZW50ZXIgZm9yIiwiY2VudGVyIGZvciBkaXN0cmlidXRlZCIsImZvciBkaXN0cmlidXRlZCBvYmplY3QiLCJkaXN0cmlidXRlZCBvYmplY3QgY29tcHV0aW5nIiwib2JqZWN0IGNvbXB1dGluZyBvZiIsImNvbXB1dGluZyBvZiB3YXNoaW5ndG9uIiwid2FzaGluZ3RvbiB1bml2ZXJzaXR5IHN0IiwidW5pdmVyc2l0eSBzdCBsb3VpcyIsInN0IGxvdWlzIGZvciIsImxvdWlzIGZvciB0aGUiLCJmb3IgdGhlIGRldmVsb3BtZW50IiwiZGV2ZWxvcG1lbnQgb2Ygb3BlbiIsIm9mIG9wZW4gc291cmNlIiwic291cmNlIHNvZnR3YXJlIGFzIiwic291cmNlIHNvZnR3YXJlIGNvbW11bml0eSIsInNvZnR3YXJlIGNvbW11bml0eSBzdWJtaXNzaW9ucyIsImNvbW11bml0eSBzdWJtaXNzaW9ucyBhcmUiLCJzdWJtaXNzaW9ucyBhcmUgcHJvdmlkZWQiLCJieSB0aGUgc3VibWl0dGVyIiwidGhlIHN1Ym1pdHRlciBhcyIsInN1Ym1pdHRlciBhcyBpcyIsIndhcnJhbnRpZXMgd2hhdHNvZXZlciBpbmNsdWRpbmciLCJ3aGF0c29ldmVyIGluY2x1ZGluZyBhbnkiLCJpbmNsdWRpbmcgYW55IHdhcnJhbnR5IiwibWVyY2hhbnRhYmlsaXR5IG5vbmluZnJpbmdlbWVudCBvZiIsImludGVsbGVjdHVhbCBwcm9wZXJ0eSBvciIsInByb3BlcnR5IG9yIGZpdG5lc3MiLCJzaGFsbCB0aGUgc3VibWl0dGVyIl19LHsibGljZW5zZVRleHRzIjpbIkNPUFlSSUdIVCBOT1RJRklDQVRJT04gKEMpIENPUFlSSUdIVCAyMDA0IFVOSVZFUlNJVFkgT0YgQ0hJQ0FHT1xuXG5UaGlzIHByb2dyYW0gZGlzY2xvc2VzIG1hdGVyaWFsIHByb3RlY3RhYmxlIHVuZGVyIGNvcHlyaWdodCBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzLiBQZXJtaXNzaW9uIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSBpcyByZXRhaW5lZCB0aGVyZW9uIGFuZCBvbiBhbGwgY29waWVzIG9yIG1vZGlmaWNhdGlvbnMuIFRoZSBVbml2ZXJzaXR5IG9mIENoaWNhZ28gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFzIHRvIHRoZSBzdWl0YWJpbGl0eSBhbmQgb3BlcmFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkIFwiYXMgaXNcIjsgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlLCByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgYW5kIHRvIHJlZGlzdHJpYnV0ZSB0byBvdGhlcnMsIHNvIGxvbmcgYXMgdGhpcyBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGlzIHJldGFpbmVkLiBBbnkgcHVibGljYXRpb24gcmVzdWx0aW5nIGZyb20gcmVzZWFyY2ggdGhhdCBtYWRlIHVzZSBvZiB0aGlzIHNvZnR3YXJlIHNob3VsZCBjaXRlIHRoaXMgZG9jdW1lbnQuXG5cblRoaXMgc29mdHdhcmUgd2FzIGF1dGhvcmVkIGJ5OlxuXG5TdGV2ZW4gSi4gQmVuc29uIE1hdGhlbWF0aWNzIGFuZCBDb21wdXRlciBTY2llbmNlIERpdmlzaW9uIEFyZ29ubmUgTmF0aW9uYWwgTGFib3JhdG9yeSBBcmdvbm5lIElMIDYwNDM5XG5cbllpbnl1IFllIERlcGFydG1lbnQgb2YgTWFuYWdlbWVudCBTY2llbmNlIGFuZCBFbmdpbmVlcmluZyBTdGFuZm9yZCBVbml2ZXJzaXR5IFN0YW5mb3JkLCBDQSBVLlMuQVxuXG5BbnkgcXVlc3Rpb25zIG9yIGNvbW1lbnRzIG9uIHRoZSBzb2Z0d2FyZSBtYXkgYmUgZGlyZWN0ZWQgdG8gYmVuc29uQG1jcy5hbmwuZ292IG9yIHlpbnl1LXllQHN0YW5mb3JkLmVkdVxuXG5Bcmdvbm5lIE5hdGlvbmFsIExhYm9yYXRvcnkgd2l0aCBmYWNpbGl0aWVzIGluIHRoZSBzdGF0ZXMgb2YgSWxsaW5vaXMgYW5kIElkYWhvLCBpcyBvd25lZCBieSBUaGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50LCBhbmQgb3BlcmF0ZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2hpY2FnbyB1bmRlciBwcm92aXNpb24gb2YgYSBjb250cmFjdCB3aXRoIHRoZSBEZXBhcnRtZW50IG9mIEVuZXJneS5cblxuRElTQ0xBSU1FUlxuXG5USElTIFBST0dSQU0gV0FTIFBSRVBBUkVEIEFTIEFOIEFDQ09VTlQgT0YgV09SSyBTUE9OU09SRUQgQlkgQU4gQUdFTkNZIE9GIFRIRSBVTklURUQgU1RBVEVTIEdPVkVSTk1FTlQuIE5FSVRIRVIgVEhFIFVOSVRFRCBTVEFURVMgR09WRVJOTUVOVCBOT1IgQU5ZIEFHRU5DWSBUSEVSRU9GLCBOT1IgVEhFIFVOSVZFUlNJVFkgT0YgQ0hJQ0FHTywgTk9SIEFOWSBPRiBUSEVJUiBFTVBMT1lFRVMgT1IgT0ZGSUNFUlMsIE1BS0VTIEFOWSBXQVJSQU5UWSwgRVhQUkVTUyBPUiBJTVBMSUVELCBPUiBBU1NVTUVTIEFOWSBMRUdBTCBMSUFCSUxJVFkgT1IgUkVTUE9OU0lCSUxJVFkgRk9SIFRIRSBBQ0NVUkFDWSwgQ09NUExFVEVORVNTLCBPUiBVU0VGVUxORVNTIE9GIEFOWSBJTkZPUk1BVElPTiwgQVBQQVJBVFVTLCBQUk9EVUNULCBPUiBQUk9DRVNTIERJU0NMT1NFRCwgT1IgUkVQUkVTRU5UUyBUSEFUIElUUyBVU0UgV09VTEQgTk9UIElORlJJTkdFIFBSSVZBVEVMWSBPV05FRCBSSUdIVFMuIFJFRkVSRU5DRSBIRVJFSU4gVE8gQU5ZIFNQRUNJRklDIENPTU1FUkNJQUwgUFJPRFVDVCwgUFJPQ0VTUywgT1IgU0VSVklDRSBCWSBUUkFERSBOQU1FLCBUUkFERU1BUkssIE1BTlVGQUNUVVJFUiwgT1IgT1RIRVJXSVNFLCBET0VTIE5PVCBORUNFU1NBUklMWSBDT05TVElUVVRFIE9SIElNUExZIElUUyBFTkRPUlNFTUVOVCwgUkVDT01NRU5EQVRJT04sIE9SIEZBVk9SSU5HIEJZIFRIRSBVTklURUQgU1RBVEVTIEdPVkVSTk1FTlQgT1IgQU5ZIEFHRU5DWSBUSEVSRU9GLiBUSEUgVklFVyBBTkQgT1BJTklPTlMgT0YgQVVUSE9SUyBFWFBSRVNTRUQgSEVSRUlOIERPIE5PVCBORUNFU1NBUklMWSBTVEFURSBPUiBSRUZMRUNUIFRIT1NFIE9GIFRIRSBVTklURUQgU1RBVEVTIEdPVkVSTk1FTlQgT1IgQU5ZIEFHRU5DWSBUSEVSRU9GLiJdLCJsaWNlbnNlSWRzIjpbIkRTRFAiXSwia2V5d29yZHMiOlsiY29weXJpZ2h0IG5vdGlmaWNhdGlvbiBjIiwibm90aWZpY2F0aW9uIGMgY29weXJpZ2h0IiwiYyBjb3B5cmlnaHQgMjAwNCIsImNvcHlyaWdodCAyMDA0IHVuaXZlcnNpdHkiLCIyMDA0IHVuaXZlcnNpdHkgb2YiLCJvZiBjaGljYWdvIHRoaXMiLCJjaGljYWdvIHRoaXMgcHJvZ3JhbSIsInRoaXMgcHJvZ3JhbSBkaXNjbG9zZXMiLCJwcm9ncmFtIGRpc2Nsb3NlcyBtYXRlcmlhbCIsImRpc2Nsb3NlcyBtYXRlcmlhbCBwcm90ZWN0YWJsZSIsIm1hdGVyaWFsIHByb3RlY3RhYmxlIHVuZGVyIiwidW5kZXIgY29weXJpZ2h0IGxhd3MiLCJ1bml0ZWQgc3RhdGVzIHBlcm1pc3Npb24iLCJzdGF0ZXMgcGVybWlzc2lvbiB0byIsIml0cyBkb2N1bWVudGF0aW9uIGlzIiwiZG9jdW1lbnRhdGlvbiBpcyBoZXJlYnkiLCJpcyByZXRhaW5lZCB0aGVyZW9uIiwicmV0YWluZWQgdGhlcmVvbiBhbmQiLCJ0aGVyZW9uIGFuZCBvbiIsImFuZCBvbiBhbGwiLCJjb3BpZXMgb3IgbW9kaWZpY2F0aW9ucyIsIm9yIG1vZGlmaWNhdGlvbnMgdGhlIiwibW9kaWZpY2F0aW9ucyB0aGUgdW5pdmVyc2l0eSIsIm9mIGNoaWNhZ28gbWFrZXMiLCJjaGljYWdvIG1ha2VzIG5vIiwibm8gcmVwcmVzZW50YXRpb25zIGFzIiwidGhlIHN1aXRhYmlsaXR5IGFuZCIsInN1aXRhYmlsaXR5IGFuZCBvcGVyYWJpbGl0eSIsImFuZCBvcGVyYWJpbGl0eSBvZiIsIm9wZXJhYmlsaXR5IG9mIHRoaXMiLCJpbXBsaWVkIHdhcnJhbnR5IHBlcm1pc3Npb24iLCJ3YXJyYW50eSBwZXJtaXNzaW9uIGlzIiwidG8gb3RoZXJzIHNvIiwib3RoZXJzIHNvIGxvbmciLCJhcyB0aGlzIG9yaWdpbmFsIiwidGhpcyBvcmlnaW5hbCBjb3B5cmlnaHQiLCJvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIiwiaXMgcmV0YWluZWQgYW55IiwicmV0YWluZWQgYW55IHB1YmxpY2F0aW9uIiwiYW55IHB1YmxpY2F0aW9uIHJlc3VsdGluZyIsInB1YmxpY2F0aW9uIHJlc3VsdGluZyBmcm9tIiwicmVzdWx0aW5nIGZyb20gcmVzZWFyY2giLCJmcm9tIHJlc2VhcmNoIHRoYXQiLCJyZXNlYXJjaCB0aGF0IG1hZGUiLCJ0aGF0IG1hZGUgdXNlIiwibWFkZSB1c2Ugb2YiLCJzb2Z0d2FyZSBzaG91bGQgY2l0ZSIsInNob3VsZCBjaXRlIHRoaXMiLCJjaXRlIHRoaXMgZG9jdW1lbnQiLCJkb2N1bWVudCB0aGlzIHNvZnR3YXJlIiwiYXV0aG9yZWQgYnkgc3RldmVuIiwiYnkgc3RldmVuIGoiLCJzdGV2ZW4gaiBiZW5zb24iLCJqIGJlbnNvbiBtYXRoZW1hdGljcyIsImJlbnNvbiBtYXRoZW1hdGljcyBhbmQiLCJpbCA2MDQzOSB5aW55dSIsIjYwNDM5IHlpbnl1IHllIiwieWlueXUgeWUgZGVwYXJ0bWVudCIsInllIGRlcGFydG1lbnQgb2YiLCJkZXBhcnRtZW50IG9mIG1hbmFnZW1lbnQiLCJvZiBtYW5hZ2VtZW50IHNjaWVuY2UiLCJtYW5hZ2VtZW50IHNjaWVuY2UgYW5kIiwic2NpZW5jZSBhbmQgZW5naW5lZXJpbmciLCJhbmQgZW5naW5lZXJpbmcgc3RhbmZvcmQiLCJlbmdpbmVlcmluZyBzdGFuZm9yZCB1bml2ZXJzaXR5Iiwic3RhbmZvcmQgdW5pdmVyc2l0eSBzdGFuZm9yZCIsInVuaXZlcnNpdHkgc3RhbmZvcmQgY2EiLCJzdGFuZm9yZCBjYSB1IiwiY2EgdSBzIiwicyBhIGFueSIsImEgYW55IHF1ZXN0aW9ucyIsImFueSBxdWVzdGlvbnMgb3IiLCJxdWVzdGlvbnMgb3IgY29tbWVudHMiLCJvciBjb21tZW50cyBvbiIsImNvbW1lbnRzIG9uIHRoZSIsIm1heSBiZSBkaXJlY3RlZCIsImRpcmVjdGVkIHRvIGJlbnNvbiIsInRvIGJlbnNvbiBtY3MiLCJiZW5zb24gbWNzIGFubCIsImFubCBnb3Ygb3IiLCJnb3Ygb3IgeWlueXUiLCJvciB5aW55dSB5ZSIsInlpbnl1IHllIHN0YW5mb3JkIiwieWUgc3RhbmZvcmQgZWR1Iiwic3RhbmZvcmQgZWR1IGFyZ29ubmUiLCJlZHUgYXJnb25uZSBuYXRpb25hbCIsIm5hdGlvbmFsIGxhYm9yYXRvcnkgd2l0aCIsImxhYm9yYXRvcnkgd2l0aCBmYWNpbGl0aWVzIiwid2l0aCBmYWNpbGl0aWVzIGluIiwiZmFjaWxpdGllcyBpbiB0aGUiLCJpbiB0aGUgc3RhdGVzIiwidGhlIHN0YXRlcyBvZiIsInN0YXRlcyBvZiBpbGxpbm9pcyIsIm9mIGlsbGlub2lzIGFuZCIsImlsbGlub2lzIGFuZCBpZGFobyIsImFuZCBpZGFobyBpcyIsImlkYWhvIGlzIG93bmVkIiwic3RhdGVzIGdvdmVybm1lbnQgYW5kIiwiZ292ZXJubWVudCBhbmQgb3BlcmF0ZWQiLCJhbmQgb3BlcmF0ZWQgYnkiLCJvcGVyYXRlZCBieSB0aGUiLCJvZiBjaGljYWdvIHVuZGVyIiwiY2hpY2FnbyB1bmRlciBwcm92aXNpb24iLCJ1bmRlciBwcm92aXNpb24gb2YiLCJwcm92aXNpb24gb2YgYSIsImEgY29udHJhY3Qgd2l0aCIsImNvbnRyYWN0IHdpdGggdGhlIiwid2l0aCB0aGUgZGVwYXJ0bWVudCIsImRlcGFydG1lbnQgb2YgZW5lcmd5Iiwib2YgZW5lcmd5IGRpc2NsYWltZXIiLCJlbmVyZ3kgZGlzY2xhaW1lciB0aGlzIiwiZGlzY2xhaW1lciB0aGlzIHByb2dyYW0iLCJwcm9ncmFtIHdhcyBwcmVwYXJlZCIsIndhcyBwcmVwYXJlZCBhcyIsInByZXBhcmVkIGFzIGFuIiwic3RhdGVzIGdvdmVybm1lbnQgbm9yIiwiZ292ZXJubWVudCBub3IgYW55Iiwibm9yIGFueSBhZ2VuY3kiLCJhZ2VuY3kgdGhlcmVvZiBub3IiLCJ0aGVyZW9mIG5vciB0aGUiLCJlbXBsb3llZXMgb3Igb2ZmaWNlcnMiLCJvciBvZmZpY2VycyBtYWtlcyIsIm9mZmljZXJzIG1ha2VzIGFueSIsIm93bmVkIHJpZ2h0cyByZWZlcmVuY2UiLCJyaWdodHMgcmVmZXJlbmNlIGhlcmVpbiIsInJlZmVyZW5jZSBoZXJlaW4gdG8iLCJoZXJlaW4gdG8gYW55IiwiYW55IHNwZWNpZmljIGNvbW1lcmNpYWwiLCJzcGVjaWZpYyBjb21tZXJjaWFsIHByb2R1Y3QiLCJjb21tZXJjaWFsIHByb2R1Y3QgcHJvY2VzcyIsInByb2R1Y3QgcHJvY2VzcyBvciIsInByb2Nlc3Mgb3Igc2VydmljZSIsIm9yIHNlcnZpY2UgYnkiLCJzZXJ2aWNlIGJ5IHRyYWRlIiwiYnkgdHJhZGUgbmFtZSIsIm5hbWUgdHJhZGVtYXJrIG1hbnVmYWN0dXJlciIsInRyYWRlbWFyayBtYW51ZmFjdHVyZXIgb3IiLCJtYW51ZmFjdHVyZXIgb3Igb3RoZXJ3aXNlIiwib3Igb3RoZXJ3aXNlIGRvZXMiLCJvdGhlcndpc2UgZG9lcyBub3QiLCJkb2VzIG5vdCBuZWNlc3NhcmlseSIsIm5vdCBuZWNlc3NhcmlseSBjb25zdGl0dXRlIiwibmVjZXNzYXJpbHkgY29uc3RpdHV0ZSBvciIsImNvbnN0aXR1dGUgb3IgaW1wbHkiLCJvciBpbXBseSBpdHMiLCJpbXBseSBpdHMgZW5kb3JzZW1lbnQiLCJpdHMgZW5kb3JzZW1lbnQgcmVjb21tZW5kYXRpb24iLCJlbmRvcnNlbWVudCByZWNvbW1lbmRhdGlvbiBvciIsInJlY29tbWVuZGF0aW9uIG9yIGZhdm9yaW5nIiwib3IgZmF2b3JpbmcgYnkiLCJmYXZvcmluZyBieSB0aGUiLCJhZ2VuY3kgdGhlcmVvZiB0aGUiLCJ0aGVyZW9mIHRoZSB2aWV3IiwidGhlIHZpZXcgYW5kIiwidmlldyBhbmQgb3BpbmlvbnMiLCJhbmQgb3BpbmlvbnMgb2YiLCJvcGluaW9ucyBvZiBhdXRob3JzIiwib2YgYXV0aG9ycyBleHByZXNzZWQiLCJhdXRob3JzIGV4cHJlc3NlZCBoZXJlaW4iLCJleHByZXNzZWQgaGVyZWluIGRvIiwiaGVyZWluIGRvIG5vdCIsImRvIG5vdCBuZWNlc3NhcmlseSIsIm5vdCBuZWNlc3NhcmlseSBzdGF0ZSIsIm5lY2Vzc2FyaWx5IHN0YXRlIG9yIiwic3RhdGUgb3IgcmVmbGVjdCIsIm9yIHJlZmxlY3QgdGhvc2UiLCJyZWZsZWN0IHRob3NlIG9mIiwiY29weXJpZ2h0IG5vdGlmaWNhdGlvbiBjIGNvcHlyaWdodCIsIm5vdGlmaWNhdGlvbiBjIGNvcHlyaWdodCAyMDA0IiwiYyBjb3B5cmlnaHQgMjAwNCB1bml2ZXJzaXR5IiwiY29weXJpZ2h0IDIwMDQgdW5pdmVyc2l0eSBvZiIsIjIwMDQgdW5pdmVyc2l0eSBvZiBjaGljYWdvIiwidW5pdmVyc2l0eSBvZiBjaGljYWdvIHRoaXMiLCJvZiBjaGljYWdvIHRoaXMgcHJvZ3JhbSIsImNoaWNhZ28gdGhpcyBwcm9ncmFtIGRpc2Nsb3NlcyIsInRoaXMgcHJvZ3JhbSBkaXNjbG9zZXMgbWF0ZXJpYWwiLCJwcm9ncmFtIGRpc2Nsb3NlcyBtYXRlcmlhbCBwcm90ZWN0YWJsZSIsImRpc2Nsb3NlcyBtYXRlcmlhbCBwcm90ZWN0YWJsZSB1bmRlciIsIm1hdGVyaWFsIHByb3RlY3RhYmxlIHVuZGVyIGNvcHlyaWdodCIsInByb3RlY3RhYmxlIHVuZGVyIGNvcHlyaWdodCBsYXdzIiwidW5kZXIgY29weXJpZ2h0IGxhd3Mgb2YiLCJ0aGUgdW5pdGVkIHN0YXRlcyBwZXJtaXNzaW9uIiwidW5pdGVkIHN0YXRlcyBwZXJtaXNzaW9uIHRvIiwic3RhdGVzIHBlcm1pc3Npb24gdG8gY29weSIsInRvIGNvcHkgYW5kIG1vZGlmeSIsImFuZCBpdHMgZG9jdW1lbnRhdGlvbiBpcyIsIml0cyBkb2N1bWVudGF0aW9uIGlzIGhlcmVieSIsImRvY3VtZW50YXRpb24gaXMgaGVyZWJ5IGdyYW50ZWQiLCJ0aGlzIG5vdGljZSBpcyByZXRhaW5lZCIsIm5vdGljZSBpcyByZXRhaW5lZCB0aGVyZW9uIiwiaXMgcmV0YWluZWQgdGhlcmVvbiBhbmQiLCJyZXRhaW5lZCB0aGVyZW9uIGFuZCBvbiIsInRoZXJlb24gYW5kIG9uIGFsbCIsImFuZCBvbiBhbGwgY29waWVzIiwib24gYWxsIGNvcGllcyBvciIsImFsbCBjb3BpZXMgb3IgbW9kaWZpY2F0aW9ucyIsImNvcGllcyBvciBtb2RpZmljYXRpb25zIHRoZSIsIm9yIG1vZGlmaWNhdGlvbnMgdGhlIHVuaXZlcnNpdHkiLCJtb2RpZmljYXRpb25zIHRoZSB1bml2ZXJzaXR5IG9mIiwidW5pdmVyc2l0eSBvZiBjaGljYWdvIG1ha2VzIl19LHsibGljZW5zZVRleHRzIjpbIkNvcHlyaWdodCAoQykgMTk5NSBieSBEb25hbGQgQXJzZW5lYXVcblxuVGhpcyBmaWxlIG1heSBiZSBmcmVlbHkgdHJhbnNtaXR0ZWQgYW5kIHJlcHJvZHVjZWQsIGJ1dCBpdCBtYXkgbm90IGJlIGNoYW5nZWQgdW5sZXNzIHRoZSBuYW1lIGlzIGNoYW5nZWQgYWxzbyAoZXhjZXB0IHRoYXQgeW91IG1heSBmcmVlbHkgY2hhbmdlIHRoZSBwYXBlci1zaXplIG9wdGlvbiBmb3IgXFxkb2N1bWVudGNsYXNzKS5cblxuVGhpcyBub3RpY2UgbXVzdCBiZSBsZWZ0IGludGFjdC4iXSwibGljZW5zZUlkcyI6WyJEb3RzZXFuIl0sImtleXdvcmRzIjpbImMgMTk5NSBieSIsIjE5OTUgYnkgZG9uYWxkIiwiYnkgZG9uYWxkIGFyc2VuZWF1IiwiZG9uYWxkIGFyc2VuZWF1IHRoaXMiLCJhcnNlbmVhdSB0aGlzIGZpbGUiLCJiZSBmcmVlbHkgdHJhbnNtaXR0ZWQiLCJmcmVlbHkgdHJhbnNtaXR0ZWQgYW5kIiwidHJhbnNtaXR0ZWQgYW5kIHJlcHJvZHVjZWQiLCJhbmQgcmVwcm9kdWNlZCBidXQiLCJyZXByb2R1Y2VkIGJ1dCBpdCIsIm5vdCBiZSBjaGFuZ2VkIiwiYmUgY2hhbmdlZCB1bmxlc3MiLCJjaGFuZ2VkIHVubGVzcyB0aGUiLCJ1bmxlc3MgdGhlIG5hbWUiLCJpcyBjaGFuZ2VkIGFsc28iLCJjaGFuZ2VkIGFsc28gZXhjZXB0IiwiYWxzbyBleGNlcHQgdGhhdCIsIm1heSBmcmVlbHkgY2hhbmdlIiwiZnJlZWx5IGNoYW5nZSB0aGUiLCJjaGFuZ2UgdGhlIHBhcGVyIiwidGhlIHBhcGVyIHNpemUiLCJwYXBlciBzaXplIG9wdGlvbiIsInNpemUgb3B0aW9uIGZvciIsIm9wdGlvbiBmb3IgZG9jdW1lbnRjbGFzcyIsImZvciBkb2N1bWVudGNsYXNzIHRoaXMiLCJkb2N1bWVudGNsYXNzIHRoaXMgbm90aWNlIiwidGhpcyBub3RpY2UgbXVzdCIsIm11c3QgYmUgbGVmdCIsImJlIGxlZnQgaW50YWN0IiwiY29weXJpZ2h0IGMgMTk5NSBieSIsImMgMTk5NSBieSBkb25hbGQiLCIxOTk1IGJ5IGRvbmFsZCBhcnNlbmVhdSIsImJ5IGRvbmFsZCBhcnNlbmVhdSB0aGlzIiwiZG9uYWxkIGFyc2VuZWF1IHRoaXMgZmlsZSIsImFyc2VuZWF1IHRoaXMgZmlsZSBtYXkiLCJtYXkgYmUgZnJlZWx5IHRyYW5zbWl0dGVkIiwiYmUgZnJlZWx5IHRyYW5zbWl0dGVkIGFuZCIsImZyZWVseSB0cmFuc21pdHRlZCBhbmQgcmVwcm9kdWNlZCIsInRyYW5zbWl0dGVkIGFuZCByZXByb2R1Y2VkIGJ1dCIsImFuZCByZXByb2R1Y2VkIGJ1dCBpdCIsInJlcHJvZHVjZWQgYnV0IGl0IG1heSIsImJ1dCBpdCBtYXkgbm90IiwibWF5IG5vdCBiZSBjaGFuZ2VkIiwibm90IGJlIGNoYW5nZWQgdW5sZXNzIiwiYmUgY2hhbmdlZCB1bmxlc3MgdGhlIiwiY2hhbmdlZCB1bmxlc3MgdGhlIG5hbWUiLCJ1bmxlc3MgdGhlIG5hbWUgaXMiLCJuYW1lIGlzIGNoYW5nZWQgYWxzbyIsImlzIGNoYW5nZWQgYWxzbyBleGNlcHQiLCJjaGFuZ2VkIGFsc28gZXhjZXB0IHRoYXQiLCJhbHNvIGV4Y2VwdCB0aGF0IHlvdSIsInlvdSBtYXkgZnJlZWx5IGNoYW5nZSIsIm1heSBmcmVlbHkgY2hhbmdlIHRoZSIsImZyZWVseSBjaGFuZ2UgdGhlIHBhcGVyIiwiY2hhbmdlIHRoZSBwYXBlciBzaXplIiwidGhlIHBhcGVyIHNpemUgb3B0aW9uIiwicGFwZXIgc2l6ZSBvcHRpb24gZm9yIiwic2l6ZSBvcHRpb24gZm9yIGRvY3VtZW50Y2xhc3MiLCJvcHRpb24gZm9yIGRvY3VtZW50Y2xhc3MgdGhpcyIsImZvciBkb2N1bWVudGNsYXNzIHRoaXMgbm90aWNlIiwiZG9jdW1lbnRjbGFzcyB0aGlzIG5vdGljZSBtdXN0IiwidGhpcyBub3RpY2UgbXVzdCBiZSIsIm5vdGljZSBtdXN0IGJlIGxlZnQiLCJtdXN0IGJlIGxlZnQgaW50YWN0IiwiY29weXJpZ2h0IGMgMTk5NSBieSBkb25hbGQiLCJjIDE5OTUgYnkgZG9uYWxkIGFyc2VuZWF1IiwiMTk5NSBieSBkb25hbGQgYXJzZW5lYXUgdGhpcyIsImJ5IGRvbmFsZCBhcnNlbmVhdSB0aGlzIGZpbGUiLCJkb25hbGQgYXJzZW5lYXUgdGhpcyBmaWxlIG1heSIsImFyc2VuZWF1IHRoaXMgZmlsZSBtYXkgYmUiLCJmaWxlIG1heSBiZSBmcmVlbHkgdHJhbnNtaXR0ZWQiLCJtYXkgYmUgZnJlZWx5IHRyYW5zbWl0dGVkIGFuZCIsImJlIGZyZWVseSB0cmFuc21pdHRlZCBhbmQgcmVwcm9kdWNlZCIsImZyZWVseSB0cmFuc21pdHRlZCBhbmQgcmVwcm9kdWNlZCBidXQiLCJ0cmFuc21pdHRlZCBhbmQgcmVwcm9kdWNlZCBidXQgaXQiLCJhbmQgcmVwcm9kdWNlZCBidXQgaXQgbWF5IiwicmVwcm9kdWNlZCBidXQgaXQgbWF5IG5vdCIsImJ1dCBpdCBtYXkgbm90IGJlIiwiaXQgbWF5IG5vdCBiZSBjaGFuZ2VkIiwibWF5IG5vdCBiZSBjaGFuZ2VkIHVubGVzcyIsIm5vdCBiZSBjaGFuZ2VkIHVubGVzcyB0aGUiLCJiZSBjaGFuZ2VkIHVubGVzcyB0aGUgbmFtZSIsImNoYW5nZWQgdW5sZXNzIHRoZSBuYW1lIGlzIiwidW5sZXNzIHRoZSBuYW1lIGlzIGNoYW5nZWQiLCJ0aGUgbmFtZSBpcyBjaGFuZ2VkIGFsc28iLCJuYW1lIGlzIGNoYW5nZWQgYWxzbyBleGNlcHQiLCJpcyBjaGFuZ2VkIGFsc28gZXhjZXB0IHRoYXQiLCJjaGFuZ2VkIGFsc28gZXhjZXB0IHRoYXQgeW91IiwiYWxzbyBleGNlcHQgdGhhdCB5b3UgbWF5IiwiZXhjZXB0IHRoYXQgeW91IG1heSBmcmVlbHkiLCJ0aGF0IHlvdSBtYXkgZnJlZWx5IGNoYW5nZSIsInlvdSBtYXkgZnJlZWx5IGNoYW5nZSB0aGUiLCJtYXkgZnJlZWx5IGNoYW5nZSB0aGUgcGFwZXIiLCJmcmVlbHkgY2hhbmdlIHRoZSBwYXBlciBzaXplIiwiY2hhbmdlIHRoZSBwYXBlciBzaXplIG9wdGlvbiIsInRoZSBwYXBlciBzaXplIG9wdGlvbiBmb3IiLCJwYXBlciBzaXplIG9wdGlvbiBmb3IgZG9jdW1lbnRjbGFzcyIsInNpemUgb3B0aW9uIGZvciBkb2N1bWVudGNsYXNzIHRoaXMiLCJvcHRpb24gZm9yIGRvY3VtZW50Y2xhc3MgdGhpcyBub3RpY2UiLCJmb3IgZG9jdW1lbnRjbGFzcyB0aGlzIG5vdGljZSBtdXN0IiwiZG9jdW1lbnRjbGFzcyB0aGlzIG5vdGljZSBtdXN0IGJlIiwidGhpcyBub3RpY2UgbXVzdCBiZSBsZWZ0Iiwibm90aWNlIG11c3QgYmUgbGVmdCBpbnRhY3QiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlXG5cblRoaXMgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgXCJPcmlnaW5hbCBXb3JrXCIpIHdob3NlIG93bmVyICh0aGUgXCJMaWNlbnNvclwiKSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6XG5cbkNvcHlyaWdodCAoYykgXHUwMDNjeWVhclx1MDAzZSBcdTAwM2Njb3B5cmlnaHQgaG9sZGVyc1x1MDAzZVxuXG5MaWNlbnNlZCB1bmRlciB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgdmVyc2lvbiAxLjBcblxuVGhpcyBPcmlnaW5hbCBXb3JrLCBpbmNsdWRpbmcgc29mdHdhcmUsIHNvdXJjZSBjb2RlLCBkb2N1bWVudHMsIG9yIG90aGVyIHJlbGF0ZWQgaXRlbXMsIGlzIGJlaW5nIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyKHMpIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZS4gQnkgb2J0YWluaW5nLCB1c2luZyBhbmQvb3IgY29weWluZyB0aGlzIE9yaWdpbmFsIFdvcmssIHlvdSBhZ3JlZSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3RhbmQsIGFuZCB3aWxsIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlOlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kIHN1YmxpY2Vuc2UgdGhpcyBPcmlnaW5hbCBXb3JrIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgZm9yIGFueSBwdXJwb3NlLCBhbmQgd2l0aG91dCBmZWUgb3Igcm95YWx0eSB0byB0aGUgY29weXJpZ2h0IGhvbGRlcihzKSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG9uIEFMTCBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgcG9ydGlvbnMgdGhlcmVvZiwgaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMgb3IgZGVyaXZhdGl2ZXMsIHRoYXQgeW91IG1ha2U6XG5cblRoZSBmdWxsIHRleHQgb2YgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlIGluIGEgbG9jYXRpb24gdmlld2FibGUgdG8gdXNlcnMgb2YgdGhlIHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSB3b3JrLlxuXG5BbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMgYW5kIGNvbmRpdGlvbnMuXG5cbk5vdGljZSBvZiBhbnkgY2hhbmdlcyBvciBtb2RpZmljYXRpb25zIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBpbmNsdWRpbmcgdGhlIGRhdGUgdGhlIGNoYW5nZXMgd2VyZSBtYWRlLlxuXG5BbnkgbW9kaWZpY2F0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayBtdXN0IGJlIGRpc3RyaWJ1dGVkIGluIHN1Y2ggYSBtYW5uZXIgYXMgdG8gYXZvaWQgYW55IGNvbmZ1c2lvbiB3aXRoIHRoZSBPcmlnaW5hbCBXb3JrIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycy5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cblRoZSBuYW1lIGFuZCB0cmFkZW1hcmtzIG9mIGNvcHlyaWdodCBob2xkZXIocykgbWF5IE5PVCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSBPcmlnaW5hbCBvciBEZXJpdmF0aXZlIFdvcmtzIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0IGluIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHdpbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4iXSwibGljZW5zZUlkcyI6WyJFQ0wtMS4wIl0sImtleXdvcmRzIjpbImNvbW11bml0eSBsaWNlbnNlIHRoaXMiLCJsaWNlbnNlIHRoaXMgZWR1Y2F0aW9uYWwiLCJ0aGlzIGVkdWNhdGlvbmFsIGNvbW11bml0eSIsImNvbW11bml0eSBsaWNlbnNlIHRoZSIsIm9yaWdpbmFsIHdvcmsgY29weXJpZ2h0Iiwid29yayBjb3B5cmlnaHQgYyIsImNvcHlyaWdodCBob2xkZXJzIGxpY2Vuc2VkIiwiaG9sZGVycyBsaWNlbnNlZCB1bmRlciIsIjAgdGhpcyBvcmlnaW5hbCIsImluY2x1ZGluZyBzb2Z0d2FyZSBzb3VyY2UiLCJzb3VyY2UgY29kZSBkb2N1bWVudHMiLCJjb2RlIGRvY3VtZW50cyBvciIsImhvbGRlciBzIHN1YmplY3QiLCJzIHN1YmplY3QgdG8iLCJjb21tdW5pdHkgbGljZW5zZSBieSIsImNvcHlpbmcgdGhpcyBvcmlnaW5hbCIsIndvcmsgeW91IGFncmVlIiwiaGF2ZSByZWFkIHVuZGVyc3RhbmQiLCJyZWFkIHVuZGVyc3RhbmQgYW5kIiwidW5kZXJzdGFuZCBhbmQgd2lsbCIsImNvbW11bml0eSBsaWNlbnNlIHBlcm1pc3Npb24iLCJsaWNlbnNlIHBlcm1pc3Npb24gdG8iLCJhbmQgc3VibGljZW5zZSB0aGlzIiwic3VibGljZW5zZSB0aGlzIG9yaWdpbmFsIiwid29yayBhbmQgaXRzIiwicm95YWx0eSB0byB0aGUiLCJob2xkZXIgcyBpcyIsInMgaXMgaGVyZWJ5IiwiaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMgb3IiLCJvciBkZXJpdmF0aXZlcyB0aGF0IiwiZGVyaXZhdGl2ZXMgdGhhdCB5b3UiLCJtYWtlIHRoZSBmdWxsIiwiY29tbXVuaXR5IGxpY2Vuc2UgaW4iLCJhbmQgY29uZGl0aW9ucyBub3RpY2UiLCJjb25kaXRpb25zIG5vdGljZSBvZiIsImRhdGUgdGhlIGNoYW5nZXMiLCJ0aGUgY2hhbmdlcyB3ZXJlIiwid2VyZSBtYWRlIGFueSIsIm1hZGUgYW55IG1vZGlmaWNhdGlvbnMiLCJzdWNoIGEgbWFubmVyIiwiYSBtYW5uZXIgYXMiLCJtYW5uZXIgYXMgdG8iLCJhcyB0byBhdm9pZCIsInRvIGF2b2lkIGFueSIsImF2b2lkIGFueSBjb25mdXNpb24iLCJhbnkgY29uZnVzaW9uIHdpdGgiLCJjb25mdXNpb24gd2l0aCB0aGUiLCJob2xkZXJzIHRoZSBzb2Z0d2FyZSIsImhvbGRlciBzIG1heSIsInMgbWF5IG5vdCIsIm9yaWdpbmFsIG9yIGRlcml2YXRpdmUiLCJ3b3JrcyB3aXRob3V0IHNwZWNpZmljIiwicmVtYWluIHdpdGggdGhlIiwiZWR1Y2F0aW9uYWwgY29tbXVuaXR5IGxpY2Vuc2UgdGhpcyIsImNvbW11bml0eSBsaWNlbnNlIHRoaXMgZWR1Y2F0aW9uYWwiLCJsaWNlbnNlIHRoaXMgZWR1Y2F0aW9uYWwgY29tbXVuaXR5IiwidGhpcyBlZHVjYXRpb25hbCBjb21tdW5pdHkgbGljZW5zZSIsImVkdWNhdGlvbmFsIGNvbW11bml0eSBsaWNlbnNlIHRoZSIsImNvbW11bml0eSBsaWNlbnNlIHRoZSBsaWNlbnNlIiwidGhlIG9yaWdpbmFsIHdvcmsgY29weXJpZ2h0Iiwib3JpZ2luYWwgd29yayBjb3B5cmlnaHQgYyIsIndvcmsgY29weXJpZ2h0IGMgeWVhciIsInllYXIgY29weXJpZ2h0IGhvbGRlcnMgbGljZW5zZWQiLCJjb3B5cmlnaHQgaG9sZGVycyBsaWNlbnNlZCB1bmRlciIsImhvbGRlcnMgbGljZW5zZWQgdW5kZXIgdGhlIiwiY29tbXVuaXR5IGxpY2Vuc2UgdmVyc2lvbiAxIiwiMSAwIHRoaXMgb3JpZ2luYWwiLCIwIHRoaXMgb3JpZ2luYWwgd29yayIsInRoaXMgb3JpZ2luYWwgd29yayBpbmNsdWRpbmciLCJvcmlnaW5hbCB3b3JrIGluY2x1ZGluZyBzb2Z0d2FyZSIsIndvcmsgaW5jbHVkaW5nIHNvZnR3YXJlIHNvdXJjZSIsImluY2x1ZGluZyBzb2Z0d2FyZSBzb3VyY2UgY29kZSIsInNvZnR3YXJlIHNvdXJjZSBjb2RlIGRvY3VtZW50cyIsInNvdXJjZSBjb2RlIGRvY3VtZW50cyBvciIsImNvZGUgZG9jdW1lbnRzIG9yIG90aGVyIiwiY29weXJpZ2h0IGhvbGRlciBzIHN1YmplY3QiLCJob2xkZXIgcyBzdWJqZWN0IHRvIiwicyBzdWJqZWN0IHRvIHRoZSIsInRlcm1zIG9mIHRoZSBlZHVjYXRpb25hbCIsImVkdWNhdGlvbmFsIGNvbW11bml0eSBsaWNlbnNlIGJ5IiwiY29tbXVuaXR5IGxpY2Vuc2UgYnkgb2J0YWluaW5nIiwib3IgY29weWluZyB0aGlzIG9yaWdpbmFsIiwiY29weWluZyB0aGlzIG9yaWdpbmFsIHdvcmsiLCJ0aGlzIG9yaWdpbmFsIHdvcmsgeW91Iiwib3JpZ2luYWwgd29yayB5b3UgYWdyZWUiLCJ3b3JrIHlvdSBhZ3JlZSB0aGF0IiwieW91IGhhdmUgcmVhZCB1bmRlcnN0YW5kIiwiaGF2ZSByZWFkIHVuZGVyc3RhbmQgYW5kIiwicmVhZCB1bmRlcnN0YW5kIGFuZCB3aWxsIiwidW5kZXJzdGFuZCBhbmQgd2lsbCBjb21wbHkiLCJjb25kaXRpb25zIG9mIHRoZSBlZHVjYXRpb25hbCIsImVkdWNhdGlvbmFsIGNvbW11bml0eSBsaWNlbnNlIHBlcm1pc3Npb24iLCJjb21tdW5pdHkgbGljZW5zZSBwZXJtaXNzaW9uIHRvIiwibGljZW5zZSBwZXJtaXNzaW9uIHRvIHVzZSIsInB1Ymxpc2ggZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSIsImRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhpcyIsImFuZCBzdWJsaWNlbnNlIHRoaXMgb3JpZ2luYWwiLCJzdWJsaWNlbnNlIHRoaXMgb3JpZ2luYWwgd29yayIsInRoaXMgb3JpZ2luYWwgd29yayBhbmQiLCJvcmlnaW5hbCB3b3JrIGFuZCBpdHMiLCJ3b3JrIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiIsIm9yIHJveWFsdHkgdG8gdGhlIiwicm95YWx0eSB0byB0aGUgY29weXJpZ2h0IiwiY29weXJpZ2h0IGhvbGRlciBzIGlzIiwiaG9sZGVyIHMgaXMgaGVyZWJ5IiwicyBpcyBoZXJlYnkgZ3JhbnRlZCIsIm9yaWdpbmFsIHdvcmsgb3IgcG9ydGlvbnMiLCJ0aGVyZW9mIGluY2x1ZGluZyBtb2RpZmljYXRpb25zIG9yIiwiaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMgb3IgZGVyaXZhdGl2ZXMiLCJtb2RpZmljYXRpb25zIG9yIGRlcml2YXRpdmVzIHRoYXQiLCJvciBkZXJpdmF0aXZlcyB0aGF0IHlvdSIsImRlcml2YXRpdmVzIHRoYXQgeW91IG1ha2UiLCJ5b3UgbWFrZSB0aGUgZnVsbCIsIm1ha2UgdGhlIGZ1bGwgdGV4dCIsInRleHQgb2YgdGhlIGVkdWNhdGlvbmFsIiwiZWR1Y2F0aW9uYWwgY29tbXVuaXR5IGxpY2Vuc2UgaW4iLCJjb21tdW5pdHkgbGljZW5zZSBpbiBhIiwibGljZW5zZSBpbiBhIGxvY2F0aW9uIiwidGVybXMgYW5kIGNvbmRpdGlvbnMgbm90aWNlIiwiYW5kIGNvbmRpdGlvbnMgbm90aWNlIG9mIiwiY29uZGl0aW9ucyBub3RpY2Ugb2YgYW55Iiwib3JpZ2luYWwgd29yayBpbmNsdWRpbmcgdGhlIiwid29yayBpbmNsdWRpbmcgdGhlIGRhdGUiLCJpbmNsdWRpbmcgdGhlIGRhdGUgdGhlIiwidGhlIGRhdGUgdGhlIGNoYW5nZXMiLCJkYXRlIHRoZSBjaGFuZ2VzIHdlcmUiLCJ0aGUgY2hhbmdlcyB3ZXJlIG1hZGUiLCJjaGFuZ2VzIHdlcmUgbWFkZSBhbnkiLCJ3ZXJlIG1hZGUgYW55IG1vZGlmaWNhdGlvbnMiLCJtYWRlIGFueSBtb2RpZmljYXRpb25zIG9mIiwiYW55IG1vZGlmaWNhdGlvbnMgb2YgdGhlIiwid29yayBtdXN0IGJlIGRpc3RyaWJ1dGVkIiwiYmUgZGlzdHJpYnV0ZWQgaW4gc3VjaCIsImluIHN1Y2ggYSBtYW5uZXIiLCJzdWNoIGEgbWFubmVyIGFzIiwiYSBtYW5uZXIgYXMgdG8iLCJtYW5uZXIgYXMgdG8gYXZvaWQiLCJhcyB0byBhdm9pZCBhbnkiLCJ0byBhdm9pZCBhbnkgY29uZnVzaW9uIiwiYXZvaWQgYW55IGNvbmZ1c2lvbiB3aXRoIiwiYW55IGNvbmZ1c2lvbiB3aXRoIHRoZSIsImNvbmZ1c2lvbiB3aXRoIHRoZSBvcmlnaW5hbCIsInRoZSBvcmlnaW5hbCB3b3JrIG9mIiwib3JpZ2luYWwgd29yayBvZiB0aGUiLCJ3b3JrIG9mIHRoZSBjb3B5cmlnaHQiLCJ0aGUgY29weXJpZ2h0IGhvbGRlcnMgdGhlIiwiY29weXJpZ2h0IGhvbGRlcnMgdGhlIHNvZnR3YXJlIiwiaG9sZGVycyB0aGUgc29mdHdhcmUgaXMiLCJ0aGUgc29mdHdhcmUgdGhlIG5hbWUiLCJzb2Z0d2FyZSB0aGUgbmFtZSBhbmQiLCJ0cmFkZW1hcmtzIG9mIGNvcHlyaWdodCBob2xkZXIiLCJvZiBjb3B5cmlnaHQgaG9sZGVyIHMiLCJjb3B5cmlnaHQgaG9sZGVyIHMgbWF5IiwiaG9sZGVyIHMgbWF5IG5vdCIsInMgbWF5IG5vdCBiZSIsInBlcnRhaW5pbmcgdG8gdGhlIG9yaWdpbmFsIiwidG8gdGhlIG9yaWdpbmFsIG9yIiwidGhlIG9yaWdpbmFsIG9yIGRlcml2YXRpdmUiLCJvcmlnaW5hbCBvciBkZXJpdmF0aXZlIHdvcmtzIiwiZGVyaXZhdGl2ZSB3b3JrcyB3aXRob3V0IHNwZWNpZmljIiwid29ya3Mgd2l0aG91dCBzcGVjaWZpYyB3cml0dGVuIiwidG8gY29weXJpZ2h0IGluIHRoZSIsIndvcmsgYW5kIGFueSBhc3NvY2lhdGVkIiwidGltZXMgcmVtYWluIHdpdGggdGhlIiwicmVtYWluIHdpdGggdGhlIGNvcHlyaWdodCIsInRoZSBlZHVjYXRpb25hbCBjb21tdW5pdHkgbGljZW5zZSB0aGlzIiwiZWR1Y2F0aW9uYWwgY29tbXVuaXR5IGxpY2Vuc2UgdGhpcyBlZHVjYXRpb25hbCIsImNvbW11bml0eSBsaWNlbnNlIHRoaXMgZWR1Y2F0aW9uYWwgY29tbXVuaXR5IiwibGljZW5zZSB0aGlzIGVkdWNhdGlvbmFsIGNvbW11bml0eSBsaWNlbnNlIiwidGhpcyBlZHVjYXRpb25hbCBjb21tdW5pdHkgbGljZW5zZSB0aGUiLCJlZHVjYXRpb25hbCBjb21tdW5pdHkgbGljZW5zZSB0aGUgbGljZW5zZSIsImNvbW11bml0eSBsaWNlbnNlIHRoZSBsaWNlbnNlIGFwcGxpZXMiLCJmb3IgdGhlIG9yaWdpbmFsIHdvcmsgY29weXJpZ2h0IiwidGhlIG9yaWdpbmFsIHdvcmsgY29weXJpZ2h0IGMiLCJvcmlnaW5hbCB3b3JrIGNvcHlyaWdodCBjIHllYXIiLCJ3b3JrIGNvcHlyaWdodCBjIHllYXIgY29weXJpZ2h0IiwiYyB5ZWFyIGNvcHlyaWdodCBob2xkZXJzIGxpY2Vuc2VkIiwieWVhciBjb3B5cmlnaHQgaG9sZGVycyBsaWNlbnNlZCB1bmRlciIsImNvcHlyaWdodCBob2xkZXJzIGxpY2Vuc2VkIHVuZGVyIHRoZSIsImhvbGRlcnMgbGljZW5zZWQgdW5kZXIgdGhlIGVkdWNhdGlvbmFsIiwiZWR1Y2F0aW9uYWwgY29tbXVuaXR5IGxpY2Vuc2UgdmVyc2lvbiAxIiwiY29tbXVuaXR5IGxpY2Vuc2UgdmVyc2lvbiAxIDAiLCJ2ZXJzaW9uIDEgMCB0aGlzIG9yaWdpbmFsIiwiMSAwIHRoaXMgb3JpZ2luYWwgd29yayIsIjAgdGhpcyBvcmlnaW5hbCB3b3JrIGluY2x1ZGluZyIsInRoaXMgb3JpZ2luYWwgd29yayBpbmNsdWRpbmcgc29mdHdhcmUiLCJvcmlnaW5hbCB3b3JrIGluY2x1ZGluZyBzb2Z0d2FyZSBzb3VyY2UiLCJ3b3JrIGluY2x1ZGluZyBzb2Z0d2FyZSBzb3VyY2UgY29kZSIsImluY2x1ZGluZyBzb2Z0d2FyZSBzb3VyY2UgY29kZSBkb2N1bWVudHMiLCJzb2Z0d2FyZSBzb3VyY2UgY29kZSBkb2N1bWVudHMgb3IiLCJzb3VyY2UgY29kZSBkb2N1bWVudHMgb3Igb3RoZXIiLCJjb2RlIGRvY3VtZW50cyBvciBvdGhlciByZWxhdGVkIiwidGhlIGNvcHlyaWdodCBob2xkZXIgcyBzdWJqZWN0IiwiY29weXJpZ2h0IGhvbGRlciBzIHN1YmplY3QgdG8iLCJob2xkZXIgcyBzdWJqZWN0IHRvIHRoZSIsInMgc3ViamVjdCB0byB0aGUgdGVybXMiLCJ0aGUgdGVybXMgb2YgdGhlIGVkdWNhdGlvbmFsIiwidGVybXMgb2YgdGhlIGVkdWNhdGlvbmFsIGNvbW11bml0eSIsInRoZSBlZHVjYXRpb25hbCBjb21tdW5pdHkgbGljZW5zZSBieSIsImVkdWNhdGlvbmFsIGNvbW11bml0eSBsaWNlbnNlIGJ5IG9idGFpbmluZyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZVxuXG5WZXJzaW9uIDIuMCwgQXByaWwgMjAwNyBodHRwOi8vd3d3Lm9zZWR1Lm9yZy9saWNlbnNlcy9cblxuVGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlIHZlcnNpb24gMi4wIChcIkVDTFwiKSBjb25zaXN0cyBvZiB0aGUgQXBhY2hlIDIuMCBsaWNlbnNlLCBtb2RpZmllZCB0byBjaGFuZ2UgdGhlIHNjb3BlIG9mIHRoZSBwYXRlbnQgZ3JhbnQgaW4gc2VjdGlvbiAzIHRvIGJlIHNwZWNpZmljIHRvIHRoZSBuZWVkcyBvZiB0aGUgZWR1Y2F0aW9uIGNvbW11bml0aWVzIHVzaW5nIHRoaXMgbGljZW5zZS4gVGhlIG9yaWdpbmFsIEFwYWNoZSAyLjAgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5URVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT05cblxuICAgMS4gRGVmaW5pdGlvbnMuXG5cbiAgICAgIFxuXG4gICAgICBcIkxpY2Vuc2VcIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LlxuXG4gICAgICBcblxuICAgICAgXCJMaWNlbnNvclwiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuXG5cbiAgICAgIFxuXG4gICAgICBcIkxlZ2FsIEVudGl0eVwiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcImNvbnRyb2xcIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgICAgXG5cbiAgICAgIFwiWW91XCIgKG9yIFwiWW91clwiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIFxuXG4gICAgICBcIlNvdXJjZVwiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuXG5cbiAgICAgIFxuXG4gICAgICBcIk9iamVjdFwiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLCBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuXG5cbiAgICAgIFxuXG4gICAgICBcIldvcmtcIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuXG5cbiAgICAgIFxuXG4gICAgICBcIkRlcml2YXRpdmUgV29ya3NcIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZSBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbiBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuXG5cbiAgICAgIFxuXG4gICAgICBcIkNvbnRyaWJ1dGlvblwiIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcInN1Ym1pdHRlZFwiIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0IGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzIFwiTm90IGEgQ29udHJpYnV0aW9uLlwiXG5cbiAgICAgIFxuXG4gICAgICBcIkNvbnRyaWJ1dG9yXCIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZCBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay5cblxuICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuXG5cbiAgIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZSBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLlxuXG4gICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS5cblxuICAgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yayBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEFueSBwYXRlbnQgbGljZW5zZSBncmFudGVkIGhlcmVieSB3aXRoIHJlc3BlY3QgdG8gY29udHJpYnV0aW9ucyBieSBhbiBpbmRpdmlkdWFsIGVtcGxveWVkIGJ5IGFuIGluc3RpdHV0aW9uIG9yIG9yZ2FuaXphdGlvbiBpcyBsaW1pdGVkIHRvIHBhdGVudCBjbGFpbXMgd2hlcmUgdGhlIGluZGl2aWR1YWwgdGhhdCBpcyB0aGUgYXV0aG9yIG9mIHRoZSBXb3JrIGlzIGFsc28gdGhlIGludmVudG9yIG9mIHRoZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2VkLCBhbmQgd2hlcmUgdGhlIG9yZ2FuaXphdGlvbiBvciBpbnN0aXR1dGlvbiBoYXMgdGhlIHJpZ2h0IHRvIGdyYW50IHN1Y2ggbGljZW5zZSB1bmRlciBhcHBsaWNhYmxlIGdyYW50IGFuZCByZXNlYXJjaCBmdW5kaW5nIGFncmVlbWVudHMuIE5vIG90aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCBsaWNlbnNlcyBhcmUgZ3JhbnRlZC5cblxuICAgNC4gUmVkaXN0cmlidXRpb24uXG5cbiAgIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91IG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgICBhLiBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kXG5cbiAgICAgIGIuIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmRcblxuICAgICAgYy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmRcblxuICAgICAgZC4gSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSBcIk5PVElDRVwiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cyBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0IGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24gbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZCBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuXG5cbiAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZCBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aCB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLlxuXG4gICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuXG5cbiAgIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeSB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZCB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuXG5cbiAgIDYuIFRyYWRlbWFya3MuXG5cbiAgIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLCBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuXG5cbiAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuXG5cbiAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS5cblxuICAgSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5IG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy5cblxuICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LlxuXG5XaGlsZSByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LCBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZiBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LiBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlNcblxuQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgdG8geW91ciB3b3JrXG5cblRvIGFwcGx5IHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaFxuXG50aGUgZm9sbG93aW5nIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5XG5cbmJyYWNrZXRzIFwiW11cIiByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLlxuXG4oRG9uJ3QgaW5jbHVkZSB0aGUgYnJhY2tldHMhKSBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlXG5cbmFwcHJvcHJpYXRlIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kXG5cbnRoYXQgYSBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb25cblxudGhlIHNhbWUgXCJwcmludGVkIHBhZ2VcIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyXG5cbmlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy5cblxuQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdIExpY2Vuc2VkIHVuZGVyIHRoZVxuXG5FZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXlcblxubm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heVxuXG5vYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbmh0dHA6Ly93d3cub3NlZHUub3JnL2xpY2Vuc2VzL0VDTC0yLjBcblxuVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuXG5zb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCJcblxuQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzc1xuXG5vciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmdcblxucGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiJdLCJsaWNlbnNlSWRzIjpbIkVDTC0yLjAiXSwia2V5d29yZHMiOlsiMiAwIGFwcmlsIiwiMCBhcHJpbCAyMDA3IiwiYXByaWwgMjAwNyBodHRwIiwiMjAwNyBodHRwIHd3dyIsImxpY2Vuc2VzIHRoZSBlZHVjYXRpb25hbCIsIjIgMCBlY2wiLCIwIGVjbCBjb25zaXN0cyIsImVjbCBjb25zaXN0cyBvZiIsInRoZSBhcGFjaGUgMiIsIjAgbGljZW5zZSBtb2RpZmllZCIsImxpY2Vuc2UgbW9kaWZpZWQgdG8iLCJtb2RpZmllZCB0byBjaGFuZ2UiLCJjaGFuZ2UgdGhlIHNjb3BlIiwidGhlIHBhdGVudCBncmFudCIsInBhdGVudCBncmFudCBpbiIsImdyYW50IGluIHNlY3Rpb24iLCJzZWN0aW9uIDMgdG8iLCIzIHRvIGJlIiwic3BlY2lmaWMgdG8gdGhlIiwidG8gdGhlIG5lZWRzIiwidGhlIG5lZWRzIG9mIiwibmVlZHMgb2YgdGhlIiwib2YgdGhlIGVkdWNhdGlvbiIsInRoZSBlZHVjYXRpb24gY29tbXVuaXRpZXMiLCJlZHVjYXRpb24gY29tbXVuaXRpZXMgdXNpbmciLCJjb21tdW5pdGllcyB1c2luZyB0aGlzIiwidGhlIG9yaWdpbmFsIGFwYWNoZSIsIm9yaWdpbmFsIGFwYWNoZSAyIiwiMCBsaWNlbnNlIGNhbiIsImlzIGZpbGVkIGFueSIsImZpbGVkIGFueSBwYXRlbnQiLCJsaWNlbnNlIGdyYW50ZWQgaGVyZWJ5IiwiZ3JhbnRlZCBoZXJlYnkgd2l0aCIsImhlcmVieSB3aXRoIHJlc3BlY3QiLCJyZXNwZWN0IHRvIGNvbnRyaWJ1dGlvbnMiLCJ0byBjb250cmlidXRpb25zIGJ5IiwiY29udHJpYnV0aW9ucyBieSBhbiIsImFuIGluZGl2aWR1YWwgZW1wbG95ZWQiLCJpbmRpdmlkdWFsIGVtcGxveWVkIGJ5IiwiZW1wbG95ZWQgYnkgYW4iLCJieSBhbiBpbnN0aXR1dGlvbiIsImFuIGluc3RpdHV0aW9uIG9yIiwiaW5zdGl0dXRpb24gb3Igb3JnYW5pemF0aW9uIiwib3Igb3JnYW5pemF0aW9uIGlzIiwib3JnYW5pemF0aW9uIGlzIGxpbWl0ZWQiLCJ0byBwYXRlbnQgY2xhaW1zIiwicGF0ZW50IGNsYWltcyB3aGVyZSIsImNsYWltcyB3aGVyZSB0aGUiLCJ3aGVyZSB0aGUgaW5kaXZpZHVhbCIsInRoZSBpbmRpdmlkdWFsIHRoYXQiLCJpbmRpdmlkdWFsIHRoYXQgaXMiLCJ3b3JrIGlzIGFsc28iLCJpcyBhbHNvIHRoZSIsImFsc28gdGhlIGludmVudG9yIiwidGhlIGludmVudG9yIG9mIiwiaW52ZW50b3Igb2YgdGhlIiwicGF0ZW50IGNsYWltcyBsaWNlbnNlZCIsImNsYWltcyBsaWNlbnNlZCBhbmQiLCJsaWNlbnNlZCBhbmQgd2hlcmUiLCJ3aGVyZSB0aGUgb3JnYW5pemF0aW9uIiwidGhlIG9yZ2FuaXphdGlvbiBvciIsIm9yZ2FuaXphdGlvbiBvciBpbnN0aXR1dGlvbiIsIm9yIGluc3RpdHV0aW9uIGhhcyIsImluc3RpdHV0aW9uIGhhcyB0aGUiLCJncmFudCBzdWNoIGxpY2Vuc2UiLCJzdWNoIGxpY2Vuc2UgdW5kZXIiLCJsaWNlbnNlIHVuZGVyIGFwcGxpY2FibGUiLCJ1bmRlciBhcHBsaWNhYmxlIGdyYW50IiwiYXBwbGljYWJsZSBncmFudCBhbmQiLCJncmFudCBhbmQgcmVzZWFyY2giLCJhbmQgcmVzZWFyY2ggZnVuZGluZyIsInJlc2VhcmNoIGZ1bmRpbmcgYWdyZWVtZW50cyIsImZ1bmRpbmcgYWdyZWVtZW50cyBubyIsImFncmVlbWVudHMgbm8gb3RoZXIiLCJubyBvdGhlciBleHByZXNzIiwiaW1wbGllZCBsaWNlbnNlcyBhcmUiLCJsaWNlbnNlcyBhcmUgZ3JhbnRlZCIsImFyZSBncmFudGVkIDQiLCJncmFudGVkIDQgcmVkaXN0cmlidXRpb24iLCJvcmcgbGljZW5zZXMgZWNsIiwibGljZW5zZXMgZWNsIDIiLCJlY2wgMiAwIiwidmVyc2lvbiAyIDAgYXByaWwiLCIyIDAgYXByaWwgMjAwNyIsIjAgYXByaWwgMjAwNyBodHRwIiwiYXByaWwgMjAwNyBodHRwIHd3dyIsIjIwMDcgaHR0cCB3d3cgb3NlZHUiLCJvc2VkdSBvcmcgbGljZW5zZXMgdGhlIiwib3JnIGxpY2Vuc2VzIHRoZSBlZHVjYXRpb25hbCIsImxpY2Vuc2VzIHRoZSBlZHVjYXRpb25hbCBjb21tdW5pdHkiLCJ2ZXJzaW9uIDIgMCBlY2wiLCIyIDAgZWNsIGNvbnNpc3RzIiwiMCBlY2wgY29uc2lzdHMgb2YiLCJlY2wgY29uc2lzdHMgb2YgdGhlIiwiY29uc2lzdHMgb2YgdGhlIGFwYWNoZSIsIm9mIHRoZSBhcGFjaGUgMiIsInRoZSBhcGFjaGUgMiAwIiwiMiAwIGxpY2Vuc2UgbW9kaWZpZWQiLCIwIGxpY2Vuc2UgbW9kaWZpZWQgdG8iLCJsaWNlbnNlIG1vZGlmaWVkIHRvIGNoYW5nZSIsIm1vZGlmaWVkIHRvIGNoYW5nZSB0aGUiLCJ0byBjaGFuZ2UgdGhlIHNjb3BlIiwiY2hhbmdlIHRoZSBzY29wZSBvZiIsInNjb3BlIG9mIHRoZSBwYXRlbnQiLCJvZiB0aGUgcGF0ZW50IGdyYW50IiwidGhlIHBhdGVudCBncmFudCBpbiIsInBhdGVudCBncmFudCBpbiBzZWN0aW9uIiwiZ3JhbnQgaW4gc2VjdGlvbiAzIiwiaW4gc2VjdGlvbiAzIHRvIiwic2VjdGlvbiAzIHRvIGJlIiwiMyB0byBiZSBzcGVjaWZpYyIsImJlIHNwZWNpZmljIHRvIHRoZSIsInNwZWNpZmljIHRvIHRoZSBuZWVkcyIsInRvIHRoZSBuZWVkcyBvZiIsInRoZSBuZWVkcyBvZiB0aGUiLCJuZWVkcyBvZiB0aGUgZWR1Y2F0aW9uIiwib2YgdGhlIGVkdWNhdGlvbiBjb21tdW5pdGllcyIsInRoZSBlZHVjYXRpb24gY29tbXVuaXRpZXMgdXNpbmciLCJlZHVjYXRpb24gY29tbXVuaXRpZXMgdXNpbmcgdGhpcyIsImNvbW11bml0aWVzIHVzaW5nIHRoaXMgbGljZW5zZSIsInVzaW5nIHRoaXMgbGljZW5zZSB0aGUiLCJsaWNlbnNlIHRoZSBvcmlnaW5hbCBhcGFjaGUiLCJ0aGUgb3JpZ2luYWwgYXBhY2hlIDIiLCJvcmlnaW5hbCBhcGFjaGUgMiAwIiwiMiAwIGxpY2Vuc2UgY2FuIiwiMCBsaWNlbnNlIGNhbiBiZSIsImxpY2Vuc2UgY2FuIGJlIGZvdW5kIiwiMiAwIHRlcm1zIGFuZCIsImxpdGlnYXRpb24gaXMgZmlsZWQgYW55IiwiaXMgZmlsZWQgYW55IHBhdGVudCIsImZpbGVkIGFueSBwYXRlbnQgbGljZW5zZSIsInBhdGVudCBsaWNlbnNlIGdyYW50ZWQgaGVyZWJ5IiwibGljZW5zZSBncmFudGVkIGhlcmVieSB3aXRoIiwiZ3JhbnRlZCBoZXJlYnkgd2l0aCByZXNwZWN0IiwiaGVyZWJ5IHdpdGggcmVzcGVjdCB0byIsIndpdGggcmVzcGVjdCB0byBjb250cmlidXRpb25zIiwicmVzcGVjdCB0byBjb250cmlidXRpb25zIGJ5IiwidG8gY29udHJpYnV0aW9ucyBieSBhbiIsImNvbnRyaWJ1dGlvbnMgYnkgYW4gaW5kaXZpZHVhbCIsImJ5IGFuIGluZGl2aWR1YWwgZW1wbG95ZWQiLCJhbiBpbmRpdmlkdWFsIGVtcGxveWVkIGJ5IiwiaW5kaXZpZHVhbCBlbXBsb3llZCBieSBhbiIsImVtcGxveWVkIGJ5IGFuIGluc3RpdHV0aW9uIiwiYnkgYW4gaW5zdGl0dXRpb24gb3IiLCJhbiBpbnN0aXR1dGlvbiBvciBvcmdhbml6YXRpb24iLCJpbnN0aXR1dGlvbiBvciBvcmdhbml6YXRpb24gaXMiLCJvciBvcmdhbml6YXRpb24gaXMgbGltaXRlZCIsIm9yZ2FuaXphdGlvbiBpcyBsaW1pdGVkIHRvIiwiaXMgbGltaXRlZCB0byBwYXRlbnQiLCJsaW1pdGVkIHRvIHBhdGVudCBjbGFpbXMiLCJ0byBwYXRlbnQgY2xhaW1zIHdoZXJlIiwicGF0ZW50IGNsYWltcyB3aGVyZSB0aGUiLCJjbGFpbXMgd2hlcmUgdGhlIGluZGl2aWR1YWwiLCJ3aGVyZSB0aGUgaW5kaXZpZHVhbCB0aGF0IiwidGhlIGluZGl2aWR1YWwgdGhhdCBpcyIsImluZGl2aWR1YWwgdGhhdCBpcyB0aGUiLCJ0aGF0IGlzIHRoZSBhdXRob3IiLCJ0aGUgd29yayBpcyBhbHNvIiwid29yayBpcyBhbHNvIHRoZSIsImlzIGFsc28gdGhlIGludmVudG9yIiwiYWxzbyB0aGUgaW52ZW50b3Igb2YiLCJ0aGUgaW52ZW50b3Igb2YgdGhlIiwiaW52ZW50b3Igb2YgdGhlIHBhdGVudCIsInRoZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2VkIiwicGF0ZW50IGNsYWltcyBsaWNlbnNlZCBhbmQiLCJjbGFpbXMgbGljZW5zZWQgYW5kIHdoZXJlIiwibGljZW5zZWQgYW5kIHdoZXJlIHRoZSIsImFuZCB3aGVyZSB0aGUgb3JnYW5pemF0aW9uIiwid2hlcmUgdGhlIG9yZ2FuaXphdGlvbiBvciIsInRoZSBvcmdhbml6YXRpb24gb3IgaW5zdGl0dXRpb24iLCJvcmdhbml6YXRpb24gb3IgaW5zdGl0dXRpb24gaGFzIiwib3IgaW5zdGl0dXRpb24gaGFzIHRoZSIsImluc3RpdHV0aW9uIGhhcyB0aGUgcmlnaHQiLCJyaWdodCB0byBncmFudCBzdWNoIiwidG8gZ3JhbnQgc3VjaCBsaWNlbnNlIiwiZ3JhbnQgc3VjaCBsaWNlbnNlIHVuZGVyIiwic3VjaCBsaWNlbnNlIHVuZGVyIGFwcGxpY2FibGUiLCJsaWNlbnNlIHVuZGVyIGFwcGxpY2FibGUgZ3JhbnQiLCJ1bmRlciBhcHBsaWNhYmxlIGdyYW50IGFuZCIsImFwcGxpY2FibGUgZ3JhbnQgYW5kIHJlc2VhcmNoIiwiZ3JhbnQgYW5kIHJlc2VhcmNoIGZ1bmRpbmciLCJhbmQgcmVzZWFyY2ggZnVuZGluZyBhZ3JlZW1lbnRzIiwicmVzZWFyY2ggZnVuZGluZyBhZ3JlZW1lbnRzIG5vIiwiZnVuZGluZyBhZ3JlZW1lbnRzIG5vIG90aGVyIiwiYWdyZWVtZW50cyBubyBvdGhlciBleHByZXNzIiwibm8gb3RoZXIgZXhwcmVzcyBvciIsIm90aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCIsIm9yIGltcGxpZWQgbGljZW5zZXMgYXJlIiwiaW1wbGllZCBsaWNlbnNlcyBhcmUgZ3JhbnRlZCIsImxpY2Vuc2VzIGFyZSBncmFudGVkIDQiLCJhcmUgZ3JhbnRlZCA0IHJlZGlzdHJpYnV0aW9uIiwiZ3JhbnRlZCA0IHJlZGlzdHJpYnV0aW9uIHlvdSIsImF0IGh0dHAgd3d3IG9zZWR1Iiwib3NlZHUgb3JnIGxpY2Vuc2VzIGVjbCIsIm9yZyBsaWNlbnNlcyBlY2wgMiIsImxpY2Vuc2VzIGVjbCAyIDAiLCJlY2wgMiAwIHVubGVzcyIsImxpY2Vuc2UgdmVyc2lvbiAyIDAgYXByaWwiLCJ2ZXJzaW9uIDIgMCBhcHJpbCAyMDA3IiwiMiAwIGFwcmlsIDIwMDcgaHR0cCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJFaWZmZWwgRm9ydW0gTGljZW5zZSwgdmVyc2lvbiAxXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBwYWNrYWdlLCBwcm92aWRlZCB0aGF0OlxuXG4gICAtIGNvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCB1bmNoYW5nZWRcblxuICAgLSBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgcGFja2FnZSwgd2hldGhlciBtb2RpZmllZCBvciBub3QsIGluY2x1ZGVzIHRoaXMgZmlsZVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBhbHNvIGdyYW50ZWQgdG8gZGlzdHJpYnV0ZSBiaW5hcnkgcHJvZ3JhbXMgd2hpY2ggZGVwZW5kIG9uIHRoaXMgcGFja2FnZSwgcHJvdmlkZWQgdGhhdDpcblxuICAgLSBpZiB0aGUgYmluYXJ5IHByb2dyYW0gZGVwZW5kcyBvbiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLCB5b3UgbXVzdCBwdWJsaWNseSByZWxlYXNlIHRoZSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZVxuXG5USElTIFBBQ0tBR0UgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBXSVRIT1VUIFdBUlJBTlRZLiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBQQUNLQUdFLiJdLCJsaWNlbnNlSWRzIjpbIkVGTC0xLjAiXSwia2V5d29yZHMiOlsidmVyc2lvbiAxIHBlcm1pc3Npb24iLCJpbmNsdWRlcyB0aGlzIGZpbGUiLCJ0aGlzIGZpbGUgcGVybWlzc2lvbiIsImZpbGUgcGVybWlzc2lvbiBpcyIsInBhY2thZ2UgeW91IG11c3QiLCJ5b3UgbXVzdCBwdWJsaWNseSIsIm11c3QgcHVibGljbHkgcmVsZWFzZSIsImZvcnVtIGxpY2Vuc2UgdmVyc2lvbiAxIiwibGljZW5zZSB2ZXJzaW9uIDEgcGVybWlzc2lvbiIsInZlcnNpb24gMSBwZXJtaXNzaW9uIGlzIiwibm90IGluY2x1ZGVzIHRoaXMgZmlsZSIsImluY2x1ZGVzIHRoaXMgZmlsZSBwZXJtaXNzaW9uIiwidGhpcyBmaWxlIHBlcm1pc3Npb24gaXMiLCJmaWxlIHBlcm1pc3Npb24gaXMgaGVyZWJ5Iiwib24gdGhpcyBwYWNrYWdlIHByb3ZpZGVkIiwicGFja2FnZSBwcm92aWRlZCB0aGF0IGlmIiwidGhhdCBpZiB0aGUgYmluYXJ5IiwidGhpcyBwYWNrYWdlIHlvdSBtdXN0IiwicGFja2FnZSB5b3UgbXVzdCBwdWJsaWNseSIsInlvdSBtdXN0IHB1YmxpY2x5IHJlbGVhc2UiLCJtdXN0IHB1YmxpY2x5IHJlbGVhc2UgdGhlIiwiZWlmZmVsIGZvcnVtIGxpY2Vuc2UgdmVyc2lvbiAxIiwiZm9ydW0gbGljZW5zZSB2ZXJzaW9uIDEgcGVybWlzc2lvbiIsImxpY2Vuc2UgdmVyc2lvbiAxIHBlcm1pc3Npb24gaXMiLCJ2ZXJzaW9uIDEgcGVybWlzc2lvbiBpcyBoZXJlYnkiLCJvciBub3QgaW5jbHVkZXMgdGhpcyBmaWxlIiwibm90IGluY2x1ZGVzIHRoaXMgZmlsZSBwZXJtaXNzaW9uIiwiaW5jbHVkZXMgdGhpcyBmaWxlIHBlcm1pc3Npb24gaXMiLCJ0aGlzIGZpbGUgcGVybWlzc2lvbiBpcyBoZXJlYnkiLCJmaWxlIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGFsc28iLCJkZXBlbmQgb24gdGhpcyBwYWNrYWdlIHByb3ZpZGVkIiwib24gdGhpcyBwYWNrYWdlIHByb3ZpZGVkIHRoYXQiLCJ0aGlzIHBhY2thZ2UgcHJvdmlkZWQgdGhhdCBpZiIsInBhY2thZ2UgcHJvdmlkZWQgdGhhdCBpZiB0aGUiLCJwcm92aWRlZCB0aGF0IGlmIHRoZSBiaW5hcnkiLCJ0aGF0IGlmIHRoZSBiaW5hcnkgcHJvZ3JhbSIsIm9mIHRoaXMgcGFja2FnZSB5b3UgbXVzdCIsInRoaXMgcGFja2FnZSB5b3UgbXVzdCBwdWJsaWNseSIsInBhY2thZ2UgeW91IG11c3QgcHVibGljbHkgcmVsZWFzZSIsInlvdSBtdXN0IHB1YmxpY2x5IHJlbGVhc2UgdGhlIiwibXVzdCBwdWJsaWNseSByZWxlYXNlIHRoZSBtb2RpZmllZCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJFaWZmZWwgRm9ydW0gTGljZW5zZSwgdmVyc2lvbiAyXG5cbiAgIDEuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBwYWNrYWdlLCBwcm92aWRlZCB0aGF0OlxuXG4gICAgICAtIGNvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCB1bmNoYW5nZWQsXG5cbiAgICAgIC0gYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIHBhY2thZ2UsIHdoZXRoZXIgbW9kaWZpZWQgb3Igbm90LCBpbmNsdWRlcyB0aGlzIGxpY2Vuc2UgdGV4dC5cblxuICAgMi4gUGVybWlzc2lvbiBpcyBoZXJlYnkgYWxzbyBncmFudGVkIHRvIGRpc3RyaWJ1dGUgYmluYXJ5IHByb2dyYW1zIHdoaWNoIGRlcGVuZCBvbiB0aGlzIHBhY2thZ2UuIElmIHRoZSBiaW5hcnkgcHJvZ3JhbSBkZXBlbmRzIG9uIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UsIHlvdSBhcmUgZW5jb3VyYWdlZCB0byBwdWJsaWNseSByZWxlYXNlIHRoZSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS5cblxuVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgV0lUSE9VVCBXQVJSQU5UWS4gQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgUEFDS0FHRS4iXSwibGljZW5zZUlkcyI6WyJFRkwtMi4wIl0sImtleXdvcmRzIjpbIjIgMSBwZXJtaXNzaW9uIiwiaW5jbHVkZXMgdGhpcyBsaWNlbnNlIiwibGljZW5zZSB0ZXh0IDIiLCJ0ZXh0IDIgcGVybWlzc2lvbiIsIjIgcGVybWlzc2lvbiBpcyIsInBhY2thZ2UgeW91IGFyZSIsImVuY291cmFnZWQgdG8gcHVibGljbHkiLCJ0byBwdWJsaWNseSByZWxlYXNlIiwiZm9ydW0gbGljZW5zZSB2ZXJzaW9uIDIiLCJ2ZXJzaW9uIDIgMSBwZXJtaXNzaW9uIiwiMiAxIHBlcm1pc3Npb24gaXMiLCJub3QgaW5jbHVkZXMgdGhpcyBsaWNlbnNlIiwiaW5jbHVkZXMgdGhpcyBsaWNlbnNlIHRleHQiLCJ0aGlzIGxpY2Vuc2UgdGV4dCAyIiwibGljZW5zZSB0ZXh0IDIgcGVybWlzc2lvbiIsInRleHQgMiBwZXJtaXNzaW9uIGlzIiwiMiBwZXJtaXNzaW9uIGlzIGhlcmVieSIsIm9uIHRoaXMgcGFja2FnZSBpZiIsInRoaXMgcGFja2FnZSBpZiB0aGUiLCJwYWNrYWdlIGlmIHRoZSBiaW5hcnkiLCJ0aGlzIHBhY2thZ2UgeW91IGFyZSIsInBhY2thZ2UgeW91IGFyZSBlbmNvdXJhZ2VkIiwiYXJlIGVuY291cmFnZWQgdG8gcHVibGljbHkiLCJlbmNvdXJhZ2VkIHRvIHB1YmxpY2x5IHJlbGVhc2UiLCJ0byBwdWJsaWNseSByZWxlYXNlIHRoZSIsImVpZmZlbCBmb3J1bSBsaWNlbnNlIHZlcnNpb24gMiIsImZvcnVtIGxpY2Vuc2UgdmVyc2lvbiAyIDEiLCJsaWNlbnNlIHZlcnNpb24gMiAxIHBlcm1pc3Npb24iLCJ2ZXJzaW9uIDIgMSBwZXJtaXNzaW9uIGlzIiwiMiAxIHBlcm1pc3Npb24gaXMgaGVyZWJ5Iiwib3Igbm90IGluY2x1ZGVzIHRoaXMgbGljZW5zZSIsIm5vdCBpbmNsdWRlcyB0aGlzIGxpY2Vuc2UgdGV4dCIsImluY2x1ZGVzIHRoaXMgbGljZW5zZSB0ZXh0IDIiLCJ0aGlzIGxpY2Vuc2UgdGV4dCAyIHBlcm1pc3Npb24iLCJsaWNlbnNlIHRleHQgMiBwZXJtaXNzaW9uIGlzIiwidGV4dCAyIHBlcm1pc3Npb24gaXMgaGVyZWJ5IiwiMiBwZXJtaXNzaW9uIGlzIGhlcmVieSBhbHNvIiwiZGVwZW5kIG9uIHRoaXMgcGFja2FnZSBpZiIsIm9uIHRoaXMgcGFja2FnZSBpZiB0aGUiLCJ0aGlzIHBhY2thZ2UgaWYgdGhlIGJpbmFyeSIsInBhY2thZ2UgaWYgdGhlIGJpbmFyeSBwcm9ncmFtIiwib2YgdGhpcyBwYWNrYWdlIHlvdSBhcmUiLCJ0aGlzIHBhY2thZ2UgeW91IGFyZSBlbmNvdXJhZ2VkIiwicGFja2FnZSB5b3UgYXJlIGVuY291cmFnZWQgdG8iLCJ5b3UgYXJlIGVuY291cmFnZWQgdG8gcHVibGljbHkiLCJhcmUgZW5jb3VyYWdlZCB0byBwdWJsaWNseSByZWxlYXNlIiwiZW5jb3VyYWdlZCB0byBwdWJsaWNseSByZWxlYXNlIHRoZSIsInRvIHB1YmxpY2x5IHJlbGVhc2UgdGhlIG1vZGlmaWVkIl19LHsibGljZW5zZVRleHRzIjpbIkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMFxuXG5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoXCJBR1JFRU1FTlRcIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC5cblxuICAgMS4gREVGSU5JVElPTlNcblxuICAgXCJDb250cmlidXRpb25cIiBtZWFuczpcblxuICAgICAgYSkgaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZFxuXG4gICAgICBiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6XG5cbiAgICAgICAgIGkpIGNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZFxuXG4gICAgICAgICBpaSkgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtO1xuXG4gICAgICAgICB3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uXG5cbiAgIFwiQ29udHJpYnV0b3JcIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLlxuXG4gICBcIkxpY2Vuc2VkIFBhdGVudHNcIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLlxuXG4gICBcIlByb2dyYW1cIiBtZWFucyB0aGUgQ29udHJpYnV0aW9ucyBkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuXG5cbiAgIFwiUmVjaXBpZW50XCIgbWVhbnMgYW55b25lIHdobyByZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuXG5cbiAgIDIuIEdSQU5UIE9GIFJJR0hUU1xuXG4gICAgICBhKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS5cblxuICAgICAgYikgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLlxuXG4gICAgICBjKSBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLlxuXG4gICAgICBkKSBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LlxuXG4gICAzLiBSRVFVSVJFTUVOVFNcblxuICAgQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OlxuXG4gICAgICBhKSBpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kXG5cbiAgICAgIGIpIGl0cyBsaWNlbnNlIGFncmVlbWVudDpcblxuICAgICAgICAgaSkgZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTtcblxuICAgICAgICAgaWkpIGVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzO1xuXG4gICAgICAgICBpaWkpIHN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZFxuXG4gICAgICAgICBpdikgc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZCBpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS5cblxuICAgV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOlxuXG4gICAgICBhKSBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmRcblxuICAgICAgYikgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uXG5cbiAgICAgIENvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkgY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS5cblxuICAgRWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uXG5cbiAgIDQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OXG5cbiAgIENvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heSBhY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKFwiQ29tbWVyY2lhbCBDb250cmlidXRvclwiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yIChcIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yXCIpIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSBcIkxvc3Nlc1wiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyIHRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZCBhbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuXG5cbiAgIEZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEgQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UgY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYSBjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLlxuXG4gICA1LiBOTyBXQVJSQU5UWVxuXG4gICBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuXG5cbiAgIDYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZXG5cbiAgIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDcuIEdFTkVSQUxcblxuICAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuXG5cbiAgIElmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuXG5cbiAgIEFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLCBSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLlxuXG4gICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMgY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50IFN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsIEFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuXG5cbiAgIFRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzIGl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4iXSwibGljZW5zZUlkcyI6WyJFUEwtMS4wIl0sImtleXdvcmRzIjpbInYgMSAwIHRoZSIsImxpY2Vuc2UgdiAxIDAgdGhlIiwidiAxIDAgdGhlIGFjY29tcGFueWluZyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAyLjBcblxuVEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKFwiQUdSRUVNRU5UXCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuXG5cbiAgIDEuIERFRklOSVRJT05TXG5cbiAgIFwiQ29udHJpYnV0aW9uXCIgbWVhbnM6XG5cbiAgICAgIGEpIGluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb250ZW50IERpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmRcblxuICAgICAgYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOlxuXG4gICAgICAgICBpKSBjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmRcblxuICAgICAgICAgaWkpIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTtcblxuICAgICAgd2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBEaXN0cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uIFwib3JpZ2luYXRlc1wiIGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGNoYW5nZXMgb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIHRoYXQgYXJlIG5vdCBNb2RpZmllZCBXb3Jrcy5cblxuICAgXCJDb250cmlidXRvclwiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgRGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uXG5cbiAgIFwiTGljZW5zZWQgUGF0ZW50c1wiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uXG5cbiAgIFwiUHJvZ3JhbVwiIG1lYW5zIHRoZSBDb250cmlidXRpb25zIERpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC5cblxuICAgXCJSZWNpcGllbnRcIiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50IG9yIGFueSBTZWNvbmRhcnkgTGljZW5zZSAoYXMgYXBwbGljYWJsZSksIGluY2x1ZGluZyBDb250cmlidXRvcnMuXG5cbiAgIFwiRGVyaXZhdGl2ZSBXb3Jrc1wiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIENvZGUgb3Igb3RoZXIgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgUHJvZ3JhbSBhbmQgZm9yIHdoaWNoIHRoZSBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLlxuXG4gICBcIk1vZGlmaWVkIFdvcmtzXCIgc2hhbGwgbWVhbiBhbnkgd29yayBpbiBTb3VyY2UgQ29kZSBvciBvdGhlciBmb3JtIHRoYXQgcmVzdWx0cyBmcm9tIGFuIGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBvciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBQcm9ncmFtLCBpbmNsdWRpbmcsIGZvciBwdXJwb3NlcyBvZiBjbGFyaXR5IGFueSBuZXcgZmlsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHRoYXQgY29udGFpbnMgYW55IGNvbnRlbnRzIG9mIHRoZSBQcm9ncmFtLiBNb2RpZmllZCBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IGNvbnRhaW4gb25seSBkZWNsYXJhdGlvbnMsIGludGVyZmFjZXMsIHR5cGVzLCBjbGFzc2VzLCBzdHJ1Y3R1cmVzLCBvciBmaWxlcyBvZiB0aGUgUHJvZ3JhbSBzb2xlbHkgaW4gZWFjaCBjYXNlIGluIG9yZGVyIHRvIGxpbmsgdG8sIGJpbmQgYnkgbmFtZSwgb3Igc3ViY2xhc3MgdGhlIFByb2dyYW0gb3IgTW9kaWZpZWQgV29ya3MgdGhlcmVvZi5cblxuICAgXCJEaXN0cmlidXRlXCIgbWVhbnMgdGhlIGFjdHMgb2YgYSkgZGlzdHJpYnV0aW5nIG9yIGIpIG1ha2luZyBhdmFpbGFibGUgaW4gYW55IG1hbm5lciB0aGF0IGVuYWJsZXMgdGhlIHRyYW5zZmVyIG9mIGEgY29weS5cblxuICAgXCJTb3VyY2UgQ29kZVwiIG1lYW5zIHRoZSBmb3JtIG9mIGEgUHJvZ3JhbSBwcmVmZXJyZWQgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuXG5cbiAgIFwiU2Vjb25kYXJ5IExpY2Vuc2VcIiBtZWFucyBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIuMCwgb3IgYW55IGxhdGVyIHZlcnNpb25zIG9mIHRoYXQgbGljZW5zZSwgaW5jbHVkaW5nIGFueSBleGNlcHRpb25zIG9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgYXMgaWRlbnRpZmllZCBieSB0aGUgaW5pdGlhbCBDb250cmlidXRvci5cblxuICAgMi4gR1JBTlQgT0YgUklHSFRTXG5cbiAgICAgIGEpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIERpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MuXG5cbiAgICAgIGIpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBTb3VyY2UgQ29kZSBvciBvdGhlciBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLlxuXG4gICAgICBjKSBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBEaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLlxuXG4gICAgICBkKSBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LlxuXG4gICAgICBlKSBOb3R3aXRoc3RhbmRpbmcgdGhlIHRlcm1zIG9mIGFueSBTZWNvbmRhcnkgTGljZW5zZSwgbm8gQ29udHJpYnV0b3IgbWFrZXMgYWRkaXRpb25hbCBncmFudHMgdG8gYW55IFJlY2lwaWVudCAob3RoZXIgdGhhbiB0aG9zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQpIGFzIGEgcmVzdWx0IG9mIHN1Y2ggUmVjaXBpZW50J3MgcmVjZWlwdCBvZiB0aGUgUHJvZ3JhbSB1bmRlciB0aGUgdGVybXMgb2YgYSBTZWNvbmRhcnkgTGljZW5zZSAoaWYgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDMpLlxuXG4gICAzLiBSRVFVSVJFTUVOVFNcblxuICAgICAgMy4xIElmIGEgQ29udHJpYnV0b3IgRGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0gaW4gYW55IGZvcm0sIHRoZW46XG5cbiAgICAgICAgIGEpIHRoZSBQcm9ncmFtIG11c3QgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSBhcyBTb3VyY2UgQ29kZSwgaW4gYWNjb3JkYW5jZSB3aXRoIHNlY3Rpb24gMy4yLCBhbmQgdGhlIENvbnRyaWJ1dG9yIG11c3QgYWNjb21wYW55IHRoZSBQcm9ncmFtIHdpdGggYSBzdGF0ZW1lbnQgdGhhdCB0aGUgU291cmNlIENvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kIGluZm9ybXMgUmVjaXBpZW50cyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZTsgYW5kXG5cbiAgICAgICAgIGIpIHRoZSBDb250cmlidXRvciBtYXkgRGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSB1bmRlciBhIGxpY2Vuc2UgZGlmZmVyZW50IHRoYW4gdGhpcyBBZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQgc3VjaCBsaWNlbnNlOlxuXG4gICAgICAgICAgICBpKSBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBvdGhlciBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlO1xuXG4gICAgICAgICAgICBpaSkgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBvdGhlciBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7XG5cbiAgICAgICAgICAgIGlpaSkgZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB1bmRlciBzZWN0aW9uIDMuMjsgYW5kXG5cbiAgICAgICAgICAgIGl2KSByZXF1aXJlcyBhbnkgc3Vic2VxdWVudCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYW55IHBhcnR5IHRvIGJlIHVuZGVyIGEgbGljZW5zZSB0aGF0IHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgc2VjdGlvbiAzLlxuXG4gICAgICAzLjIgV2hlbiB0aGUgUHJvZ3JhbSBpcyBEaXN0cmlidXRlZCBhcyBTb3VyY2UgQ29kZTpcblxuICAgICAgICAgYSkgaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudCwgb3IgaWYgdGhlIFByb2dyYW0gKGkpIGlzIGNvbWJpbmVkIHdpdGggb3RoZXIgbWF0ZXJpYWwgaW4gYSBzZXBhcmF0ZSBmaWxlIG9yIGZpbGVzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGEgU2Vjb25kYXJ5IExpY2Vuc2UsIGFuZCAoaWkpIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yIGF0dGFjaGVkIHRvIHRoZSBTb3VyY2UgQ29kZSB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgb2YgdGhpcyBBZ3JlZW1lbnQsIHRoZW4gdGhlIFByb2dyYW0gbWF5IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiBzdWNoIFNlY29uZGFyeSBMaWNlbnNlcywgYW5kXG5cbiAgICAgICAgIGIpIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLlxuXG4gICAgICAzLjMgQ29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhdHRyaWJ1dGlvbiBub3RpY2VzLCBkaXNjbGFpbWVycyBvZiB3YXJyYW50eSwgb3IgbGltaXRhdGlvbnMgb2YgbGlhYmlsaXR5IChcIm5vdGljZXNcIikgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbSBmcm9tIGFueSBjb3B5IG9mIHRoZSBQcm9ncmFtIHdoaWNoIHRoZXkgRGlzdHJpYnV0ZSwgcHJvdmlkZWQgdGhhdCBDb250cmlidXRvcnMgbWF5IGFkZCB0aGVpciBvd24gYXBwcm9wcmlhdGUgbm90aWNlcy5cblxuICAgNC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT05cblxuICAgQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2Ugb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoXCJDb21tZXJjaWFsIENvbnRyaWJ1dG9yXCIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIgQ29udHJpYnV0b3IgKFwiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3JcIikgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5IFwiTG9zc2VzXCIpIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIGNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcyByZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS5cblxuICAgRm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZSBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZSBvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuXG5cbiAgIDUuIE5PIFdBUlJBTlRZXG5cbiAgIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBBTkQgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLlxuXG4gICA2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWVxuXG4gICBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgQU5EIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDcuIEdFTkVSQUxcblxuICAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuXG5cbiAgIElmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuXG5cbiAgIEFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLCBSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLlxuXG4gICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMgY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50IFN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsIEFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIERpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gRGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uXG5cbiAgIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuIE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgaXMgaW50ZW5kZWQgdG8gYmUgZW5mb3JjZWFibGUgYnkgYW55IGVudGl0eSB0aGF0IGlzIG5vdCBhIENvbnRyaWJ1dG9yIG9yIFJlY2lwaWVudC4gTm8gdGhpcmQtcGFydHkgYmVuZWZpY2lhcnkgcmlnaHRzIGFyZSBjcmVhdGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LlxuXG4gICBFeGhpYml0IEEgLSBGb3JtIG9mIFNlY29uZGFyeSBMaWNlbnNlcyBOb3RpY2VcblxuICAgXCJUaGlzIFNvdXJjZSBDb2RlIG1heSBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgU2Vjb25kYXJ5IExpY2Vuc2VzIHdoZW4gdGhlIGNvbmRpdGlvbnMgZm9yIHN1Y2ggYXZhaWxhYmlsaXR5IHNldCBmb3J0aCBpbiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgdi4gMi4wIGFyZSBzYXRpc2ZpZWQ6IHtuYW1lIGxpY2Vuc2UocyksIHZlcnNpb24ocyksIGFuZCBleGNlcHRpb25zIG9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgaGVyZX0uXCJcblxuICAgU2ltcGx5IGluY2x1ZGluZyBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyB0aGlzIEV4aGliaXQgQSBpcyBub3Qgc3VmZmljaWVudCB0byBsaWNlbnNlIHRoZSBTb3VyY2UgQ29kZSB1bmRlciBTZWNvbmRhcnkgTGljZW5zZXMuXG5cbiAgIElmIGl0IGlzIG5vdCBwb3NzaWJsZSBvciBkZXNpcmFibGUgdG8gcHV0IHRoZSBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIGZpbGUsIHRoZW4gWW91IG1heSBpbmNsdWRlIHRoZSBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIExJQ0VOU0UgZmlsZSBpbiBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSByZWNpcGllbnQgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuXG5cbiAgIFlvdSBtYXkgYWRkIGFkZGl0aW9uYWwgYWNjdXJhdGUgbm90aWNlcyBvZiBjb3B5cmlnaHQgb3duZXJzaGlwLiJdLCJsaWNlbnNlSWRzIjpbIkVQTC0yLjAiXSwia2V5d29yZHMiOlsidGhlIGluaXRpYWwgY29udGVudCIsImluaXRpYWwgY29udGVudCBkaXN0cmlidXRlZCIsImNvbnRlbnQgZGlzdHJpYnV0ZWQgdW5kZXIiLCJub3QgaW5jbHVkZSBjaGFuZ2VzIiwiaW5jbHVkZSBjaGFuZ2VzIG9yIiwicHJvZ3JhbSB0aGF0IGFyZSIsImFyZSBub3QgbW9kaWZpZWQiLCJub3QgbW9kaWZpZWQgd29ya3MiLCJtb2RpZmllZCB3b3JrcyBjb250cmlidXRvciIsIndvcmtzIGNvbnRyaWJ1dG9yIG1lYW5zIiwib3IgYW55IHNlY29uZGFyeSIsInNlY29uZGFyeSBsaWNlbnNlIGFzIiwibGljZW5zZSBhcyBhcHBsaWNhYmxlIiwiYXMgYXBwbGljYWJsZSBpbmNsdWRpbmciLCJhcHBsaWNhYmxlIGluY2x1ZGluZyBjb250cmlidXRvcnMiLCJpbmNsdWRpbmcgY29udHJpYnV0b3JzIGRlcml2YXRpdmUiLCJjb250cmlidXRvcnMgZGVyaXZhdGl2ZSB3b3JrcyIsInByb2dyYW0gYW5kIGZvciIsIm9mIGF1dGhvcnNoaXAgbW9kaWZpZWQiLCJhdXRob3JzaGlwIG1vZGlmaWVkIHdvcmtzIiwiYW55IHdvcmsgaW4iLCJwcm9ncmFtIGluY2x1ZGluZyBmb3IiLCJwdXJwb3NlcyBvZiBjbGFyaXR5Iiwib2YgY2xhcml0eSBhbnkiLCJjbGFyaXR5IGFueSBuZXciLCJjb250YWlucyBhbnkgY29udGVudHMiLCJhbnkgY29udGVudHMgb2YiLCJ0aGUgcHJvZ3JhbSBtb2RpZmllZCIsInByb2dyYW0gbW9kaWZpZWQgd29ya3MiLCJ3b3JrcyB0aGF0IGNvbnRhaW4iLCJ0aGF0IGNvbnRhaW4gb25seSIsImNvbnRhaW4gb25seSBkZWNsYXJhdGlvbnMiLCJvbmx5IGRlY2xhcmF0aW9ucyBpbnRlcmZhY2VzIiwiZGVjbGFyYXRpb25zIGludGVyZmFjZXMgdHlwZXMiLCJpbnRlcmZhY2VzIHR5cGVzIGNsYXNzZXMiLCJ0eXBlcyBjbGFzc2VzIHN0cnVjdHVyZXMiLCJjbGFzc2VzIHN0cnVjdHVyZXMgb3IiLCJzdHJ1Y3R1cmVzIG9yIGZpbGVzIiwib3IgZmlsZXMgb2YiLCJ0aGUgcHJvZ3JhbSBzb2xlbHkiLCJwcm9ncmFtIHNvbGVseSBpbiIsInNvbGVseSBpbiBlYWNoIiwiZWFjaCBjYXNlIGluIiwiY2FzZSBpbiBvcmRlciIsIm9yZGVyIHRvIGxpbmsiLCJ0byBsaW5rIHRvIiwibGluayB0byBiaW5kIiwidG8gYmluZCBieSIsIm5hbWUgb3Igc3ViY2xhc3MiLCJvciBzdWJjbGFzcyB0aGUiLCJzdWJjbGFzcyB0aGUgcHJvZ3JhbSIsIm9yIG1vZGlmaWVkIHdvcmtzIiwibW9kaWZpZWQgd29ya3MgdGhlcmVvZiIsIndvcmtzIHRoZXJlb2YgZGlzdHJpYnV0ZSIsInRoZXJlb2YgZGlzdHJpYnV0ZSBtZWFucyIsImRpc3RyaWJ1dGUgbWVhbnMgdGhlIiwibWVhbnMgdGhlIGFjdHMiLCJ0aGUgYWN0cyBvZiIsImFjdHMgb2YgYSIsIm9mIGEgZGlzdHJpYnV0aW5nIiwiYSBkaXN0cmlidXRpbmcgb3IiLCJkaXN0cmlidXRpbmcgb3IgYiIsImIgbWFraW5nIGF2YWlsYWJsZSIsIm1ha2luZyBhdmFpbGFibGUgaW4iLCJtYW5uZXIgdGhhdCBlbmFibGVzIiwidGhhdCBlbmFibGVzIHRoZSIsImVuYWJsZXMgdGhlIHRyYW5zZmVyIiwidGhlIHRyYW5zZmVyIG9mIiwiYSBjb3B5IHNvdXJjZSIsImNvcHkgc291cmNlIGNvZGUiLCJhIHByb2dyYW0gcHJlZmVycmVkIiwicHJvZ3JhbSBwcmVmZXJyZWQgZm9yIiwiY29uZmlndXJhdGlvbiBmaWxlcyBzZWNvbmRhcnkiLCJmaWxlcyBzZWNvbmRhcnkgbGljZW5zZSIsInRoYXQgbGljZW5zZSBpbmNsdWRpbmciLCJpbmNsdWRpbmcgYW55IGV4Y2VwdGlvbnMiLCJhbnkgZXhjZXB0aW9ucyBvciIsImFkZGl0aW9uYWwgcGVybWlzc2lvbnMgYXMiLCJwZXJtaXNzaW9ucyBhcyBpZGVudGlmaWVkIiwiYXMgaWRlbnRpZmllZCBieSIsImlkZW50aWZpZWQgYnkgdGhlIiwiaW5pdGlhbCBjb250cmlidXRvciAyIiwiY29udHJpYnV0b3IgMiBncmFudCIsIndvcmtzIGIgc3ViamVjdCIsIm90aGVyIGZvcm0gdGhpcyIsInRoaXMgYWdyZWVtZW50IGUiLCJhZ3JlZW1lbnQgZSBub3R3aXRoc3RhbmRpbmciLCJlIG5vdHdpdGhzdGFuZGluZyB0aGUiLCJub3R3aXRoc3RhbmRpbmcgdGhlIHRlcm1zIiwib2YgYW55IHNlY29uZGFyeSIsInNlY29uZGFyeSBsaWNlbnNlIG5vIiwibGljZW5zZSBubyBjb250cmlidXRvciIsImFkZGl0aW9uYWwgZ3JhbnRzIHRvIiwiYW55IHJlY2lwaWVudCBvdGhlciIsInJlY2lwaWVudCBvdGhlciB0aGFuIiwidGhhbiB0aG9zZSBzZXQiLCJyZXN1bHQgb2Ygc3VjaCIsIm9mIHN1Y2ggcmVjaXBpZW50IiwicmVjaXBpZW50IHMgcmVjZWlwdCIsInMgcmVjZWlwdCBvZiIsIjMgMyByZXF1aXJlbWVudHMiLCIzIHJlcXVpcmVtZW50cyAzIiwiYSBjb250cmlidXRvciBkaXN0cmlidXRlcyIsImNvbnRyaWJ1dG9yIGRpc3RyaWJ1dGVzIHRoZSIsImFueSBmb3JtIHRoZW4iLCJ0aGVuIGEgdGhlIiwicHJvZ3JhbSBtdXN0IGFsc28iLCJjb2RlIGluIGFjY29yZGFuY2UiLCIyIGFuZCB0aGUiLCJjb250cmlidXRvciBtdXN0IGFjY29tcGFueSIsImFjY29tcGFueSB0aGUgcHJvZ3JhbSIsImFncmVlbWVudCBhbmQgaW5mb3JtcyIsImFuZCBpbmZvcm1zIHJlY2lwaWVudHMiLCJpbmZvcm1zIHJlY2lwaWVudHMgaG93IiwicmVjaXBpZW50cyBob3cgdG8iLCJzb2Z0d2FyZSBleGNoYW5nZSBhbmQiLCJleGNoYW5nZSBhbmQgYiIsImIgdGhlIGNvbnRyaWJ1dG9yIiwidGhlIGNvbnRyaWJ1dG9yIG1heSIsImNvbnRyaWJ1dG9yIG1heSBkaXN0cmlidXRlIiwiYSBsaWNlbnNlIGRpZmZlcmVudCIsImxpY2Vuc2UgZGlmZmVyZW50IHRoYW4iLCJkaWZmZXJlbnQgdGhhbiB0aGlzIiwidGhpcyBhZ3JlZW1lbnQgcHJvdmlkZWQiLCJzdWNoIGxpY2Vuc2UgaSIsImxpY2Vuc2UgaSBlZmZlY3RpdmVseSIsInByb2ZpdHMgaWlpIGRvZXMiLCJpaWkgZG9lcyBub3QiLCJjb2RlIHVuZGVyIHNlY3Rpb24iLCIyIGFuZCBpdiIsImFuZCBpdiByZXF1aXJlcyIsIml2IHJlcXVpcmVzIGFueSIsInJlcXVpcmVzIGFueSBzdWJzZXF1ZW50IiwiYW55IHN1YnNlcXVlbnQgZGlzdHJpYnV0aW9uIiwic3Vic2VxdWVudCBkaXN0cmlidXRpb24gb2YiLCJhbnkgcGFydHkgdG8iLCJ0byBiZSB1bmRlciIsImxpY2Vuc2UgdGhhdCBzYXRpc2ZpZXMiLCJ0aGF0IHNhdGlzZmllcyB0aGUiLCJzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50cyIsImRpc3RyaWJ1dGVkIGFzIHNvdXJjZSIsImNvZGUgYSBpdCIsImFncmVlbWVudCBvciBpZiIsInRoZSBwcm9ncmFtIGkiLCJwcm9ncmFtIGkgaXMiLCJpIGlzIGNvbWJpbmVkIiwib3IgZmlsZXMgbWFkZSIsImZpbGVzIG1hZGUgYXZhaWxhYmxlIiwidW5kZXIgYSBzZWNvbmRhcnkiLCJzZWNvbmRhcnkgbGljZW5zZSBhbmQiLCJpaSB0aGUgaW5pdGlhbCIsImluaXRpYWwgY29udHJpYnV0b3IgYXR0YWNoZWQiLCJjb250cmlidXRvciBhdHRhY2hlZCB0byIsImNvZGUgdGhlIG5vdGljZSIsImFncmVlbWVudCB0aGVuIHRoZSIsInRoZW4gdGhlIHByb2dyYW0iLCJzdWNoIHNlY29uZGFyeSBsaWNlbnNlcyIsImxpY2Vuc2VzIGFuZCBiIiwiMyAzIGNvbnRyaWJ1dG9ycyIsIjMgY29udHJpYnV0b3JzIG1heSIsInBhdGVudCB0cmFkZW1hcmsgYXR0cmlidXRpb24iLCJ0cmFkZW1hcmsgYXR0cmlidXRpb24gbm90aWNlcyIsImF0dHJpYnV0aW9uIG5vdGljZXMgZGlzY2xhaW1lcnMiLCJvZiBsaWFiaWxpdHkgbm90aWNlcyIsImxpYWJpbGl0eSBub3RpY2VzIGNvbnRhaW5lZCIsInByb2dyYW0gZnJvbSBhbnkiLCJmcm9tIGFueSBjb3B5IiwicHJvZ3JhbSB3aGljaCB0aGV5Iiwid2hpY2ggdGhleSBkaXN0cmlidXRlIiwidGhleSBkaXN0cmlidXRlIHByb3ZpZGVkIiwiZGlzdHJpYnV0ZSBwcm92aWRlZCB0aGF0IiwicHJvdmlkZWQgdGhhdCBjb250cmlidXRvcnMiLCJ0aGF0IGNvbnRyaWJ1dG9ycyBtYXkiLCJjb250cmlidXRvcnMgbWF5IGFkZCIsInRoZWlyIG93biBhcHByb3ByaWF0ZSIsIm93biBhcHByb3ByaWF0ZSBub3RpY2VzIiwiYXBwcm9wcmlhdGUgbm90aWNlcyA0Iiwibm90aWNlcyA0IGNvbW1lcmNpYWwiLCJsYXcgdGhlIHByb2dyYW0iLCJsYXcgbmVpdGhlciByZWNpcGllbnQiLCJhZ3JlZW1lbnQgaXMgaW50ZW5kZWQiLCJ0byBiZSBlbmZvcmNlYWJsZSIsImJlIGVuZm9yY2VhYmxlIGJ5IiwiZW5mb3JjZWFibGUgYnkgYW55IiwiYnkgYW55IGVudGl0eSIsIm5vdCBhIGNvbnRyaWJ1dG9yIiwiY29udHJpYnV0b3Igb3IgcmVjaXBpZW50Iiwib3IgcmVjaXBpZW50IG5vIiwicmVjaXBpZW50IG5vIHRoaXJkIiwicmlnaHRzIGFyZSBjcmVhdGVkIiwiYXJlIGNyZWF0ZWQgdW5kZXIiLCJ0aGlzIGFncmVlbWVudCBleGhpYml0IiwiYWdyZWVtZW50IGV4aGliaXQgYSIsImV4aGliaXQgYSBmb3JtIiwiZm9ybSBvZiBzZWNvbmRhcnkiLCJvZiBzZWNvbmRhcnkgbGljZW5zZXMiLCJjb2RlIG1heSBhbHNvIiwidGhlIGZvbGxvd2luZyBzZWNvbmRhcnkiLCJmb2xsb3dpbmcgc2Vjb25kYXJ5IGxpY2Vuc2VzIiwic2Vjb25kYXJ5IGxpY2Vuc2VzIHdoZW4iXX0seyJsaWNlbnNlVGV4dHMiOlsiRVUgRGF0YUdyaWQgU29mdHdhcmUgTGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDEgRVUgRGF0YUdyaWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblRoaXMgc29mdHdhcmUgaW5jbHVkZXMgdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSB0byB0aGUgRVUgRGF0YUdyaWQuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBFVSBEYXRhR3JpZCwgcGxlYXNlIHNlZSBodHRwOi8vd3d3LmV1LWRhdGFncmlkLm9yZy8uXG5cbkluc3RhbGxhdGlvbiwgdXNlLCByZXByb2R1Y3Rpb24sIGRpc3BsYXksIG1vZGlmaWNhdGlvbiBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBzb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIGFyZSBwZXJtaXR0ZWQuIEFueSBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBsaWNlbnNlIGJ5IHlvdSBvciB5b3VyIHN1Yi1saWNlbnNlZXMgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiB0aGlzIHNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFib3ZlIGxpY2Vuc2Ugc3RhdGVtZW50IGFzIHdlbGwgYXMgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGluIHRoZSBzb2Z0d2FyZSwgdGhlIHVzZXIgZG9jdW1lbnRhdGlvbiBhbmQgYW55IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBzb2Z0d2FyZS5cblxuICAgMi4gVGhlIHVzZXIgZG9jdW1lbnRhdGlvbiwgaWYgYW55LCBpbmNsdWRlZCB3aXRoIGEgcmVkaXN0cmlidXRpb24sIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG5vdGljZTpcblxuICAgXCJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBFVSBEYXRhR3JpZCAoaHR0cDovL3d3dy5ldS1kYXRhZ3JpZC5vcmcvKS5cIlxuXG4gICBBbHRlcm5hdGl2ZWx5LCBpZiB0aGF0IGlzIHdoZXJlIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIsIHRoaXMgYWNrbm93bGVkZ21lbnQgbXVzdCBiZSByZXByb2R1Y2VkIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYuXG5cbiAgIDMuIFRoZSBuYW1lcyBcIkVER1wiLCBcIkVERyBUb29sa2l0XCIsIFwiRVUgRGF0YUdyaWRcIiBhbmQgXCJFVSBEYXRhR3JpZCBQcm9qZWN0XCIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBzb2Z0d2FyZSwgb3IgcHJvZHVjdHMgZGVyaXZlZCB0aGVyZWZyb20sIGV4Y2VwdCB3aXRoIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBieSBoZXAtcHJvamVjdC1ncmlkLWVkZy1saWNlbnNlQGNlcm4uY2guXG5cbiAgIDQuIFlvdSBhcmUgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byBwcm92aWRlIGFueW9uZSB3aXRoIGFueSBidWcgZml4ZXMsIHBhdGNoZXMsIHVwZ3JhZGVzIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMsIGVuaGFuY2VtZW50cyBvciBkZXJpdmF0aXZlcyBvZiB0aGUgZmVhdHVyZXMsIGZ1bmN0aW9uYWxpdHkgb3IgcGVyZm9ybWFuY2Ugb2YgdGhpcyBzb2Z0d2FyZSB0aGF0IHlvdSBtYXkgZGV2ZWxvcC4gSG93ZXZlciwgaWYgeW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWNhdGlvbnMsIGVuaGFuY2VtZW50cyBvciBkZXJpdmF0aXZlIHdvcmtzIHdpdGhvdXQgY29udGVtcG9yYW5lb3VzbHkgcmVxdWlyaW5nIHVzZXJzIHRvIGVudGVyIGludG8gYSBzZXBhcmF0ZSB3cml0dGVuIGxpY2Vuc2UgYWdyZWVtZW50LCB0aGVuIHlvdSBhcmUgZGVlbWVkIHRvIGhhdmUgZ3JhbnRlZCBwYXJ0aWNpcGFudHMgaW4gdGhlIEVVIERhdGFHcmlkIGEgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBsaWNlbnNlIHRvIGluc3RhbGwsIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBtb2RpZnksIHJlZGlzdHJpYnV0ZSBhbmQgc3ViLWxpY2Vuc2UgeW91ciBtb2RpZmljYXRpb25zLCBlbmhhbmNlbWVudHMgb3IgZGVyaXZhdGl2ZSB3b3Jrcywgd2hldGhlciBpbiBiaW5hcnkgb3Igc291cmNlIGNvZGUgZm9ybSwgdW5kZXIgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMuXG5cbiAgIDUuIERJU0NMQUlNRVJcblxuICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgRVUgREFUQUdSSUQgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBPRiBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFVTRSBBUkUgRElTQ0xBSU1FRC4gVEhFIEVVIERBVEFHUklEIEFORCBDT05UUklCVVRPUlMgTUFLRSBOTyBSRVBSRVNFTlRBVElPTiBUSEFUIFRIRSBTT0ZUV0FSRSwgTU9ESUZJQ0FUSU9OUywgRU5IQU5DRU1FTlRTIE9SIERFUklWQVRJVkUgV09SS1MgVEhFUkVPRiwgV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFBBVEVOVCwgQ09QWVJJR0hULCBUUkFERSBTRUNSRVQgT1IgT1RIRVIgUFJPUFJJRVRBUlkgUklHSFQuXG5cbiAgIDYuIExJTUlUQVRJT04gT0YgTElBQklMSVRZXG5cblRIRSBFVSBEQVRBR1JJRCBBTkQgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIFRPIExJQ0VOU0VFIE9SIE9USEVSIFBFUlNPTlMgRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIEVYRU1QTEFSWSwgT1IgUFVOSVRJVkUgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLCBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4iXSwibGljZW5zZUlkcyI6WyJFVURhdGFncmlkIl0sImtleXdvcmRzIjpbImV1IGRhdGFncmlkIHNvZnR3YXJlIiwiZGF0YWdyaWQgc29mdHdhcmUgbGljZW5zZSIsInNvZnR3YXJlIGxpY2Vuc2UgY29weXJpZ2h0IiwiYyAyMDAxIGV1IiwiMjAwMSBldSBkYXRhZ3JpZCIsImV1IGRhdGFncmlkIGFsbCIsImRhdGFncmlkIGFsbCByaWdodHMiLCJzb2Z0d2FyZSBpbmNsdWRlcyB2b2x1bnRhcnkiLCJ0byB0aGUgZXUiLCJldSBkYXRhZ3JpZCBmb3IiLCJkYXRhZ3JpZCBmb3IgbW9yZSIsIm9uIHRoZSBldSIsImV1IGRhdGFncmlkIHBsZWFzZSIsImRhdGFncmlkIHBsZWFzZSBzZWUiLCJkYXRhZ3JpZCBvcmcgaW5zdGFsbGF0aW9uIiwibGljZW5zZSBieSB5b3UiLCJvciB5b3VyIHN1YiIsInlvdXIgc3ViIGxpY2Vuc2VlcyIsInN1YiBsaWNlbnNlZXMgaXMiLCJsaWNlbnNlZXMgaXMgc3ViamVjdCIsImFib3ZlIGxpY2Vuc2Ugc3RhdGVtZW50IiwibGljZW5zZSBzdGF0ZW1lbnQgYXMiLCJzdGF0ZW1lbnQgYXMgd2VsbCIsIndlbGwgYXMgdGhpcyIsImFzIHRoaXMgbGlzdCIsInNvZnR3YXJlIHRoZSB1c2VyIiwidXNlciBkb2N1bWVudGF0aW9uIGFuZCIsImFueSBvdGhlciBtYXRlcmlhbHMiLCIyIHRoZSB1c2VyIiwidXNlciBkb2N1bWVudGF0aW9uIGlmIiwiaWYgYW55IGluY2x1ZGVkIiwiYW55IGluY2x1ZGVkIHdpdGgiLCJldSBkYXRhZ3JpZCBodHRwIiwiZGF0YWdyaWQgaHR0cCB3d3ciLCJkYXRhZ3JpZCBvcmcgYWx0ZXJuYXRpdmVseSIsIml0c2VsZiAzIHRoZSIsInRoZSBuYW1lcyBlZGciLCJuYW1lcyBlZGcgZWRnIiwiZWRnIGVkZyB0b29sa2l0IiwiZWRnIHRvb2xraXQgZXUiLCJ0b29sa2l0IGV1IGRhdGFncmlkIiwiZGF0YWdyaWQgYW5kIGV1IiwiYW5kIGV1IGRhdGFncmlkIiwiZXUgZGF0YWdyaWQgcHJvamVjdCIsImRhdGFncmlkIHByb2plY3QgbWF5IiwicHJvamVjdCBtYXkgbm90IiwiZGVyaXZlZCB0aGVyZWZyb20gZXhjZXB0IiwidGhlcmVmcm9tIGV4Y2VwdCB3aXRoIiwiZXhjZXB0IHdpdGggcHJpb3IiLCJ3aXRoIHByaW9yIHdyaXR0ZW4iLCJ3cml0dGVuIHBlcm1pc3Npb24gYnkiLCJwZXJtaXNzaW9uIGJ5IGhlcCIsImJ5IGhlcCBwcm9qZWN0IiwiaGVwIHByb2plY3QgZ3JpZCIsInByb2plY3QgZ3JpZCBlZGciLCJncmlkIGVkZyBsaWNlbnNlIiwiZWRnIGxpY2Vuc2UgY2VybiIsImxpY2Vuc2UgY2VybiBjaCIsImNlcm4gY2ggNCIsImNoIDQgeW91IiwidG8gcHJvdmlkZSBhbnlvbmUiLCJwcm92aWRlIGFueW9uZSB3aXRoIiwiYW55b25lIHdpdGggYW55Iiwid2l0aCBhbnkgYnVnIiwiZml4ZXMgcGF0Y2hlcyB1cGdyYWRlcyIsInBhdGNoZXMgdXBncmFkZXMgb3IiLCJ1cGdyYWRlcyBvciBvdGhlciIsIm90aGVyIG1vZGlmaWNhdGlvbnMgZW5oYW5jZW1lbnRzIiwiZW5oYW5jZW1lbnRzIG9yIGRlcml2YXRpdmVzIiwib3IgZGVyaXZhdGl2ZXMgb2YiLCJkZXJpdmF0aXZlcyBvZiB0aGUiLCJvZiB0aGUgZmVhdHVyZXMiLCJtYXkgZGV2ZWxvcCBob3dldmVyIiwiZGV2ZWxvcCBob3dldmVyIGlmIiwib3IgZGlzdHJpYnV0ZSB5b3VyIiwid29ya3Mgd2l0aG91dCBjb250ZW1wb3JhbmVvdXNseSIsIndpdGhvdXQgY29udGVtcG9yYW5lb3VzbHkgcmVxdWlyaW5nIiwiY29udGVtcG9yYW5lb3VzbHkgcmVxdWlyaW5nIHVzZXJzIiwicmVxdWlyaW5nIHVzZXJzIHRvIiwidXNlcnMgdG8gZW50ZXIiLCJlbnRlciBpbnRvIGEiLCJpbnRvIGEgc2VwYXJhdGUiLCJsaWNlbnNlIGFncmVlbWVudCB0aGVuIiwiYWdyZWVtZW50IHRoZW4geW91IiwidGhlbiB5b3UgYXJlIiwidG8gaGF2ZSBncmFudGVkIiwiaGF2ZSBncmFudGVkIHBhcnRpY2lwYW50cyIsImdyYW50ZWQgcGFydGljaXBhbnRzIGluIiwicGFydGljaXBhbnRzIGluIHRoZSIsImluIHRoZSBldSIsImV1IGRhdGFncmlkIGEiLCJkYXRhZ3JpZCBhIHdvcmxkd2lkZSIsImluc3RhbGwgdXNlIHJlcHJvZHVjZSIsInJlcHJvZHVjZSBkaXNwbGF5IG1vZGlmeSIsImRpc3BsYXkgbW9kaWZ5IHJlZGlzdHJpYnV0ZSIsInJlZGlzdHJpYnV0ZSBhbmQgc3ViIiwiYW5kIHN1YiBsaWNlbnNlIiwiZGVyaXZhdGl2ZSB3b3JrcyB3aGV0aGVyIiwid29ya3Mgd2hldGhlciBpbiIsIndoZXRoZXIgaW4gYmluYXJ5IiwiaW4gYmluYXJ5IG9yIiwiYmluYXJ5IG9yIHNvdXJjZSIsImxpY2Vuc2UgY29uZGl0aW9ucyBzdGF0ZWQiLCJvZiBjb25kaXRpb25zIDUiLCJjb25kaXRpb25zIDUgZGlzY2xhaW1lciIsIjUgZGlzY2xhaW1lciB0aGlzIiwiZGlzY2xhaW1lZCB0aGUgZXUiLCJhbmQgY29udHJpYnV0b3JzIG1ha2UiLCJjb250cmlidXRvcnMgbWFrZSBubyIsInByb3ByaWV0YXJ5IHJpZ2h0IDYiLCJyaWdodCA2IGxpbWl0YXRpb24iLCI2IGxpbWl0YXRpb24gb2YiLCJsaWFiaWxpdHkgdGhlIGV1IiwiZXUgZGF0YWdyaWQgc29mdHdhcmUgbGljZW5zZSIsImRhdGFncmlkIHNvZnR3YXJlIGxpY2Vuc2UgY29weXJpZ2h0Iiwic29mdHdhcmUgbGljZW5zZSBjb3B5cmlnaHQgYyIsImxpY2Vuc2UgY29weXJpZ2h0IGMgMjAwMSIsImNvcHlyaWdodCBjIDIwMDEgZXUiLCJjIDIwMDEgZXUgZGF0YWdyaWQiLCIyMDAxIGV1IGRhdGFncmlkIGFsbCIsImV1IGRhdGFncmlkIGFsbCByaWdodHMiLCJkYXRhZ3JpZCBhbGwgcmlnaHRzIHJlc2VydmVkIiwicmVzZXJ2ZWQgdGhpcyBzb2Z0d2FyZSBpbmNsdWRlcyIsInRoaXMgc29mdHdhcmUgaW5jbHVkZXMgdm9sdW50YXJ5Iiwic29mdHdhcmUgaW5jbHVkZXMgdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMiLCJtYWRlIHRvIHRoZSBldSIsInRvIHRoZSBldSBkYXRhZ3JpZCIsInRoZSBldSBkYXRhZ3JpZCBmb3IiLCJldSBkYXRhZ3JpZCBmb3IgbW9yZSIsImRhdGFncmlkIGZvciBtb3JlIGluZm9ybWF0aW9uIiwiaW5mb3JtYXRpb24gb24gdGhlIGV1Iiwib24gdGhlIGV1IGRhdGFncmlkIiwidGhlIGV1IGRhdGFncmlkIHBsZWFzZSIsImV1IGRhdGFncmlkIHBsZWFzZSBzZWUiLCJkYXRhZ3JpZCBwbGVhc2Ugc2VlIGh0dHAiLCJzZWUgaHR0cCB3d3cgZXUiLCJldSBkYXRhZ3JpZCBvcmcgaW5zdGFsbGF0aW9uIiwiZGF0YWdyaWQgb3JnIGluc3RhbGxhdGlvbiB1c2UiLCJ0aGlzIGxpY2Vuc2UgYnkgeW91IiwibGljZW5zZSBieSB5b3Ugb3IiLCJ5b3Ugb3IgeW91ciBzdWIiLCJvciB5b3VyIHN1YiBsaWNlbnNlZXMiLCJ5b3VyIHN1YiBsaWNlbnNlZXMgaXMiLCJzdWIgbGljZW5zZWVzIGlzIHN1YmplY3QiLCJsaWNlbnNlZXMgaXMgc3ViamVjdCB0byIsIm5vdGljZSBhbmQgdGhlIGFib3ZlIiwiYW5kIHRoZSBhYm92ZSBsaWNlbnNlIiwidGhlIGFib3ZlIGxpY2Vuc2Ugc3RhdGVtZW50IiwiYWJvdmUgbGljZW5zZSBzdGF0ZW1lbnQgYXMiLCJsaWNlbnNlIHN0YXRlbWVudCBhcyB3ZWxsIiwic3RhdGVtZW50IGFzIHdlbGwgYXMiLCJhcyB3ZWxsIGFzIHRoaXMiLCJ3ZWxsIGFzIHRoaXMgbGlzdCIsImFzIHRoaXMgbGlzdCBvZiIsIm9mIGNvbmRpdGlvbnMgaW4gdGhlIiwiY29uZGl0aW9ucyBpbiB0aGUgc29mdHdhcmUiLCJ0aGUgc29mdHdhcmUgdGhlIHVzZXIiLCJzb2Z0d2FyZSB0aGUgdXNlciBkb2N1bWVudGF0aW9uIiwidGhlIHVzZXIgZG9jdW1lbnRhdGlvbiBhbmQiLCJ1c2VyIGRvY3VtZW50YXRpb24gYW5kIGFueSIsImRvY3VtZW50YXRpb24gYW5kIGFueSBvdGhlciIsImFuZCBhbnkgb3RoZXIgbWF0ZXJpYWxzIiwiYW55IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCIsInNvZnR3YXJlIDIgdGhlIHVzZXIiLCIyIHRoZSB1c2VyIGRvY3VtZW50YXRpb24iLCJ0aGUgdXNlciBkb2N1bWVudGF0aW9uIGlmIiwidXNlciBkb2N1bWVudGF0aW9uIGlmIGFueSIsImRvY3VtZW50YXRpb24gaWYgYW55IGluY2x1ZGVkIiwiaWYgYW55IGluY2x1ZGVkIHdpdGgiLCJhbnkgaW5jbHVkZWQgd2l0aCBhIiwiZGV2ZWxvcGVkIGJ5IHRoZSBldSIsInRoZSBldSBkYXRhZ3JpZCBodHRwIiwiZXUgZGF0YWdyaWQgaHR0cCB3d3ciLCJkYXRhZ3JpZCBodHRwIHd3dyBldSIsImV1IGRhdGFncmlkIG9yZyBhbHRlcm5hdGl2ZWx5IiwiZGF0YWdyaWQgb3JnIGFsdGVybmF0aXZlbHkgaWYiLCJzb2Z0d2FyZSBpdHNlbGYgMyB0aGUiLCJpdHNlbGYgMyB0aGUgbmFtZXMiLCIzIHRoZSBuYW1lcyBlZGciLCJ0aGUgbmFtZXMgZWRnIGVkZyIsIm5hbWVzIGVkZyBlZGcgdG9vbGtpdCIsImVkZyBlZGcgdG9vbGtpdCBldSIsImVkZyB0b29sa2l0IGV1IGRhdGFncmlkIiwidG9vbGtpdCBldSBkYXRhZ3JpZCBhbmQiLCJldSBkYXRhZ3JpZCBhbmQgZXUiLCJkYXRhZ3JpZCBhbmQgZXUgZGF0YWdyaWQiLCJhbmQgZXUgZGF0YWdyaWQgcHJvamVjdCIsImV1IGRhdGFncmlkIHByb2plY3QgbWF5IiwiZGF0YWdyaWQgcHJvamVjdCBtYXkgbm90IiwicHJvamVjdCBtYXkgbm90IGJlIiwicHJvZHVjdHMgZGVyaXZlZCB0aGVyZWZyb20gZXhjZXB0IiwiZGVyaXZlZCB0aGVyZWZyb20gZXhjZXB0IHdpdGgiLCJ0aGVyZWZyb20gZXhjZXB0IHdpdGggcHJpb3IiLCJleGNlcHQgd2l0aCBwcmlvciB3cml0dGVuIiwid2l0aCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24iLCJwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gYnkiLCJ3cml0dGVuIHBlcm1pc3Npb24gYnkgaGVwIiwicGVybWlzc2lvbiBieSBoZXAgcHJvamVjdCIsImJ5IGhlcCBwcm9qZWN0IGdyaWQiLCJoZXAgcHJvamVjdCBncmlkIGVkZyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5jZSBWLjEuMCBFVVBMIChjKSB0aGUgRXVyb3BlYW4gQ29tbXVuaXR5IDIwMDcgVGhpcyBFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5jZSAodGhlIFwiRVVQTFwiKSBhcHBsaWVzIHRvIHRoZSBXb3JrIG9yIFNvZnR3YXJlIChhcyBkZWZpbmVkIGJlbG93KSB3aGljaCBpcyBwcm92aWRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlLiBBbnkgdXNlIG9mIHRoZSBXb3JrLCBvdGhlciB0aGFuIGFzIGF1dGhvcmlzZWQgdW5kZXIgdGhpcyBMaWNlbmNlIGlzIHByb2hpYml0ZWQgKHRvIHRoZSBleHRlbnQgc3VjaCB1c2UgaXMgY292ZXJlZCBieSBhIHJpZ2h0IG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBXb3JrKS5cblxuVGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZSB3aGVuIHRoZSBMaWNlbnNvciAoYXMgZGVmaW5lZCBiZWxvdykgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOlxuXG5MaWNlbnNlZCB1bmRlciB0aGUgRVVQTCBWLjEuMFxuXG5vciBoYXMgZXhwcmVzc2VkIGJ5IGFueSBvdGhlciBtZWFuIGhpcyB3aWxsaW5nbmVzcyB0byBsaWNlbnNlIHVuZGVyIHRoZSBFVVBMLlxuXG4gICAxLiBEZWZpbml0aW9uc1xuXG4gICBJbiB0aGlzIExpY2VuY2UsIHRoZSBmb2xsb3dpbmcgdGVybXMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmc6XG5cbiAgICAgIOKIkiBUaGUgTGljZW5jZTogdGhpcyBMaWNlbmNlLlxuXG4gICAgICDiiJIgVGhlIE9yaWdpbmFsIFdvcmsgb3IgdGhlIFNvZnR3YXJlOiB0aGUgc29mdHdhcmUgZGlzdHJpYnV0ZWQgYW5kL29yIGNvbW11bmljYXRlZCBieSB0aGUgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbmNlLCBhdmFpbGFibGUgYXMgU291cmNlIENvZGUgYW5kIGFsc28gYXMgRXhlY3V0YWJsZSBDb2RlIGFzIHRoZSBjYXNlIG1heSBiZS5cblxuICAgICAg4oiSIERlcml2YXRpdmUgV29ya3M6IHRoZSB3b3JrcyBvciBzb2Z0d2FyZSB0aGF0IGNvdWxkIGJlIGNyZWF0ZWQgYnkgdGhlIExpY2Vuc2VlLCBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrIG9yIG1vZGlmaWNhdGlvbnMgdGhlcmVvZi4gVGhpcyBMaWNlbmNlIGRvZXMgbm90IGRlZmluZSB0aGUgZXh0ZW50IG9mIG1vZGlmaWNhdGlvbiBvciBkZXBlbmRlbmNlIG9uIHRoZSBPcmlnaW5hbCBXb3JrIHJlcXVpcmVkIGluIG9yZGVyIHRvIGNsYXNzaWZ5IGEgd29yayBhcyBhIERlcml2YXRpdmUgV29yazsgdGhpcyBleHRlbnQgaXMgZGV0ZXJtaW5lZCBieSBjb3B5cmlnaHQgbGF3IGFwcGxpY2FibGUgaW4gdGhlIGNvdW50cnkgbWVudGlvbmVkIGluIEFydGljbGUgMTUuXG5cbiAgICAgIOKIkiBUaGUgV29yazogdGhlIE9yaWdpbmFsIFdvcmsgYW5kL29yIGl0cyBEZXJpdmF0aXZlIFdvcmtzLlxuXG4gICAgICDiiJIgVGhlIFNvdXJjZSBDb2RlOiB0aGUgaHVtYW4tcmVhZGFibGUgZm9ybSBvZiB0aGUgV29yayB3aGljaCBpcyB0aGUgbW9zdCBjb252ZW5pZW50IGZvciBwZW9wbGUgdG8gc3R1ZHkgYW5kIG1vZGlmeS5cblxuICAgICAg4oiSIFRoZSBFeGVjdXRhYmxlIENvZGU6IGFueSBjb2RlIHdoaWNoIGhhcyBnZW5lcmFsbHkgYmVlbiBjb21waWxlZCBhbmQgd2hpY2ggaXMgbWVhbnQgdG8gYmUgaW50ZXJwcmV0ZWQgYnkgYSBjb21wdXRlciBhcyBhIHByb2dyYW0uXG5cbiAgICAgIOKIkiBUaGUgTGljZW5zb3I6IHRoZSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB0aGF0IGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMgdGhlIFdvcmsgdW5kZXIgdGhlIExpY2VuY2UuXG5cbiAgICAgIOKIkiBDb250cmlidXRvcihzKTogYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBtb2RpZmllcyB0aGUgV29yayB1bmRlciB0aGUgTGljZW5jZSwgb3Igb3RoZXJ3aXNlIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBhIERlcml2YXRpdmUgV29yay5cblxuICAgICAg4oiSIFRoZSBMaWNlbnNlZSBvciBcIllvdVwiOiBhbnkgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gd2hvIG1ha2VzIGFueSB1c2FnZSBvZiB0aGUgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLiDiiJIgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uOiBhbnkgYWN0IG9mIHNlbGxpbmcsIGdpdmluZywgbGVuZGluZywgcmVudGluZywgZGlzdHJpYnV0aW5nLCBjb21tdW5pY2F0aW5nLCB0cmFuc21pdHRpbmcsIG9yIG90aGVyd2lzZSBtYWtpbmcgYXZhaWxhYmxlLCBvbi1saW5lIG9yIG9mZi1saW5lLCBjb3BpZXMgb2YgdGhlIFdvcmsgYXQgdGhlIGRpc3Bvc2FsIG9mIGFueSBvdGhlciBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbi5cblxuICAgMi4gU2NvcGUgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoZSBMaWNlbmNlXG5cbiAgIFRoZSBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3ViLWxpY2Vuc2FibGUgbGljZW5jZSB0byBkbyB0aGUgZm9sbG93aW5nLCBmb3IgdGhlIGR1cmF0aW9uIG9mIGNvcHlyaWdodCB2ZXN0ZWQgaW4gdGhlIE9yaWdpbmFsIFdvcms6XG5cbiAgICAgIOKIkiB1c2UgdGhlIFdvcmsgaW4gYW55IGNpcmN1bXN0YW5jZSBhbmQgZm9yIGFsbCB1c2FnZSxcblxuICAgICAg4oiSIHJlcHJvZHVjZSB0aGUgV29yayxcblxuICAgICAg4oiSIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIG1ha2UgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBXb3JrLFxuXG4gICAgICDiiJIgY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYywgaW5jbHVkaW5nIHRoZSByaWdodCB0byBtYWtlIGF2YWlsYWJsZSBvciBkaXNwbGF5IHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mIHRvIHRoZSBwdWJsaWMgYW5kIHBlcmZvcm0gcHVibGljbHksIGFzIHRoZSBjYXNlIG1heSBiZSwgdGhlIFdvcmssXG5cbiAgICAgIOKIkiBkaXN0cmlidXRlIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLFxuXG4gICAgICDiiJIgbGVuZCBhbmQgcmVudCB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZixcblxuICAgICAg4oiSIHN1Yi1saWNlbnNlIHJpZ2h0cyBpbiB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZi5cblxuICAgVGhvc2UgcmlnaHRzIGNhbiBiZSBleGVyY2lzZWQgb24gYW55IG1lZGlhLCBzdXBwb3J0cyBhbmQgZm9ybWF0cywgd2hldGhlciBub3cga25vd24gb3IgbGF0ZXIgaW52ZW50ZWQsIGFzIGZhciBhcyB0aGUgYXBwbGljYWJsZSBsYXcgcGVybWl0cyBzby5cblxuICAgSW4gdGhlIGNvdW50cmllcyB3aGVyZSBtb3JhbCByaWdodHMgYXBwbHksIHRoZSBMaWNlbnNvciB3YWl2ZXMgaGlzIHJpZ2h0IHRvIGV4ZXJjaXNlIGhpcyBtb3JhbCByaWdodCB0byB0aGUgZXh0ZW50IGFsbG93ZWQgYnkgbGF3IGluIG9yZGVyIHRvIG1ha2UgZWZmZWN0aXZlIHRoZSBsaWNlbmNlIG9mIHRoZSBlY29ub21pYyByaWdodHMgaGVyZSBhYm92ZSBsaXN0ZWQuXG5cbiAgIFRoZSBMaWNlbnNvciBncmFudHMgdG8gdGhlIExpY2Vuc2VlIHJveWFsdHktZnJlZSwgbm9uIGV4Y2x1c2l2ZSB1c2FnZSByaWdodHMgdG8gYW55IHBhdGVudHMgaGVsZCBieSB0aGUgTGljZW5zb3IsIHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgdXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBvbiB0aGUgV29yayB1bmRlciB0aGlzIExpY2VuY2UuXG5cbiAgIDMuIENvbW11bmljYXRpb24gb2YgdGhlIFNvdXJjZSBDb2RlXG5cbiAgIFRoZSBMaWNlbnNvciBtYXkgcHJvdmlkZSB0aGUgV29yayBlaXRoZXIgaW4gaXRzIFNvdXJjZSBDb2RlIGZvcm0sIG9yIGFzIEV4ZWN1dGFibGUgQ29kZS4gSWYgdGhlIFdvcmsgaXMgcHJvdmlkZWQgYXMgRXhlY3V0YWJsZSBDb2RlLCB0aGUgTGljZW5zb3IgcHJvdmlkZXMgaW4gYWRkaXRpb24gYSBtYWNoaW5lcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFdvcmsgdGhhdCB0aGUgTGljZW5zb3IgZGlzdHJpYnV0ZXMgb3IgaW5kaWNhdGVzLCBpbiBhIG5vdGljZSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgYXR0YWNoZWQgdG8gdGhlIFdvcmssIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGUgU291cmNlIENvZGUgaXMgZWFzaWx5IGFuZCBmcmVlbHkgYWNjZXNzaWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgYW5kL29yIGNvbW11bmljYXRlIHRoZSBXb3JrLlxuXG4gICA0LiBMaW1pdGF0aW9ucyBvbiBjb3B5cmlnaHRcblxuICAgTm90aGluZyBpbiB0aGlzIExpY2VuY2UgaXMgaW50ZW5kZWQgdG8gZGVwcml2ZSB0aGUgTGljZW5zZWUgb2YgdGhlIGJlbmVmaXRzIGZyb20gYW55IGV4Y2VwdGlvbiBvciBsaW1pdGF0aW9uIHRvIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSByaWdodHMgb3duZXJzIGluIHRoZSBPcmlnaW5hbCBXb3JrIG9yIFNvZnR3YXJlLCBvZiB0aGUgZXhoYXVzdGlvbiBvZiB0aG9zZSByaWdodHMgb3Igb2Ygb3RoZXIgYXBwbGljYWJsZSBsaW1pdGF0aW9ucyB0aGVyZXRvLlxuXG4gICA1LiBPYmxpZ2F0aW9ucyBvZiB0aGUgTGljZW5zZWVcblxuICAgVGhlIGdyYW50IG9mIHRoZSByaWdodHMgbWVudGlvbmVkIGFib3ZlIGlzIHN1YmplY3QgdG8gc29tZSByZXN0cmljdGlvbnMgYW5kIG9ibGlnYXRpb25zIGltcG9zZWQgb24gdGhlIExpY2Vuc2VlLiBUaG9zZSBvYmxpZ2F0aW9ucyBhcmUgdGhlIGZvbGxvd2luZzpcblxuICAgQXR0cmlidXRpb24gcmlnaHQ6IHRoZSBMaWNlbnNlZSBzaGFsbCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrcyBub3RpY2VzIGFuZCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoZSBMaWNlbmNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBUaGUgTGljZW5zZWUgbXVzdCBpbmNsdWRlIGEgY29weSBvZiBzdWNoIG5vdGljZXMgYW5kIGEgY29weSBvZiB0aGUgTGljZW5jZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgaGUvc2hlIGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMuIFRoZSBMaWNlbnNlZSBtdXN0IGNhdXNlIGFueSBEZXJpdmF0aXZlIFdvcmsgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHRoZSBXb3JrIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCB0aGUgZGF0ZSBvZiBtb2RpZmljYXRpb24uXG5cbiAgIENvcHlsZWZ0IGNsYXVzZTogSWYgdGhlIExpY2Vuc2VlIGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrcyBvciBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssIHRoaXMgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uIHdpbGwgYmUgZG9uZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlLiBUaGUgTGljZW5zZWUgKGJlY29taW5nIExpY2Vuc29yKSBjYW5ub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb24gdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLlxuXG4gICBDb21wYXRpYmlsaXR5IGNsYXVzZTogSWYgdGhlIExpY2Vuc2VlIERpc3RyaWJ1dGVzIGFuZC9vciBDb21tdW5pY2F0ZXMgRGVyaXZhdGl2ZSBXb3JrcyBvciBjb3BpZXMgdGhlcmVvZiBiYXNlZCB1cG9uIGJvdGggdGhlIE9yaWdpbmFsIFdvcmsgYW5kIGFub3RoZXIgd29yayBsaWNlbnNlZCB1bmRlciBhIENvbXBhdGlibGUgTGljZW5jZSwgdGhpcyBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb24gY2FuIGJlIGRvbmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQ29tcGF0aWJsZSBMaWNlbmNlLiBGb3IgdGhlIHNha2Ugb2YgdGhpcyBjbGF1c2UsIFwiQ29tcGF0aWJsZSBMaWNlbmNlXCIgcmVmZXJzIHRvIHRoZSBsaWNlbmNlcyBsaXN0ZWQgaW4gdGhlIGFwcGVuZGl4IGF0dGFjaGVkIHRvIHRoaXMgTGljZW5jZS4gU2hvdWxkIHRoZSBMaWNlbnNlZSdzIG9ibGlnYXRpb25zIHVuZGVyIHRoZSBDb21wYXRpYmxlIExpY2VuY2UgY29uZmxpY3Qgd2l0aCBoaXMvaGVyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5jZSwgdGhlIG9ibGlnYXRpb25zIG9mIHRoZSBDb21wYXRpYmxlIExpY2VuY2Ugc2hhbGwgcHJldmFpbC5cblxuICAgUHJvdmlzaW9uIG9mIFNvdXJjZSBDb2RlOiBXaGVuIGRpc3RyaWJ1dGluZyBhbmQvb3IgY29tbXVuaWNhdGluZyBjb3BpZXMgb2YgdGhlIFdvcmssIHRoZSBMaWNlbnNlZSB3aWxsIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9yIGluZGljYXRlIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIFNvdXJjZSB3aWxsIGJlIGVhc2lseSBhbmQgZnJlZWx5IGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgTGljZW5zZWUgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgYW5kL29yIGNvbW11bmljYXRlIHRoZSBXb3JrLlxuXG4gICBMZWdhbCBQcm90ZWN0aW9uOiBUaGlzIExpY2VuY2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZSBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBjb3B5cmlnaHQgbm90aWNlLlxuXG4gICA2LiBDaGFpbiBvZiBBdXRob3JzaGlwXG5cbiAgIFRoZSBvcmlnaW5hbCBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgZ3JhbnRlZCBoZXJldW5kZXIgaXMgb3duZWQgYnkgaGltL2hlciBvciBsaWNlbnNlZCB0byBoaW0vaGVyIGFuZCB0aGF0IGhlL3NoZSBoYXMgdGhlIHBvd2VyIGFuZCBhdXRob3JpdHkgdG8gZ3JhbnQgdGhlIExpY2VuY2UuXG5cbiAgIEVhY2ggQ29udHJpYnV0b3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIHRoZSBtb2RpZmljYXRpb25zIGhlL3NoZSBicmluZ3MgdG8gdGhlIFdvcmsgYXJlIG93bmVkIGJ5IGhpbS9oZXIgb3IgbGljZW5zZWQgdG8gaGltL2hlciBhbmQgdGhhdCBoZS9zaGUgaGFzIHRoZSBwb3dlciBhbmQgYXV0aG9yaXR5IHRvIGdyYW50IHRoZSBMaWNlbmNlLlxuXG4gICBFYWNoIHRpbWUgWW91LCBhcyBhIExpY2Vuc2VlLCByZWNlaXZlIHRoZSBXb3JrLCB0aGUgb3JpZ2luYWwgTGljZW5zb3IgYW5kIHN1YnNlcXVlbnQgQ29udHJpYnV0b3JzIGdyYW50IFlvdSBhIGxpY2VuY2UgdG8gdGhlaXIgY29udHJpYnV0aW9ucyB0byB0aGUgV29yaywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZS5cblxuICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eVxuXG4gICBUaGUgV29yayBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIHdoaWNoIGlzIGNvbnRpbnVvdXNseSBpbXByb3ZlZCBieSBudW1lcm91cyBjb250cmlidXRvcnMuIEl0IGlzIG5vdCBhIGZpbmlzaGVkIHdvcmsgYW5kIG1heSB0aGVyZWZvcmUgY29udGFpbiBkZWZlY3RzIG9yIFwiYnVnc1wiIGluaGVyZW50IHRvIHRoaXMgdHlwZSBvZiBzb2Z0d2FyZSBkZXZlbG9wbWVudC5cblxuICAgRm9yIHRoZSBhYm92ZSByZWFzb24sIHRoZSBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSBMaWNlbmNlIG9uIGFuIFwiYXMgaXNcIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50aWVzIG9mIGFueSBraW5kIGNvbmNlcm5pbmcgdGhlIFdvcmssIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgYWJzZW5jZSBvZiBkZWZlY3RzIG9yIGVycm9ycywgYWNjdXJhY3ksIG5vbi1pbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCBhcyBzdGF0ZWQgaW4gQXJ0aWNsZSA2IG9mIHRoaXMgTGljZW5jZS5cblxuICAgVGhpcyBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGlzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoZSBMaWNlbmNlIGFuZCBhIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50IG9mIGFueSByaWdodHMgdG8gdGhlIFdvcmsuXG5cbiAgIDguIERpc2NsYWltZXIgb2YgTGlhYmlsaXR5XG5cbiAgIEV4Y2VwdCBpbiB0aGUgY2FzZXMgb2Ygd2lsZnVsIG1pc2NvbmR1Y3Qgb3IgZGFtYWdlcyBkaXJlY3RseSBjYXVzZWQgdG8gbmF0dXJhbCBwZXJzb25zLCB0aGUgTGljZW5zb3Igd2lsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueSBkaXJlY3Qgb3IgaW5kaXJlY3QsIG1hdGVyaWFsIG9yIG1vcmFsLCBkYW1hZ2VzIG9mIGFueSBraW5kLCBhcmlzaW5nIG91dCBvZiB0aGUgTGljZW5jZSBvciBvZiB0aGUgdXNlIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBsb3NzIG9mIGRhdGEgb3IgYW55IGNvbW1lcmNpYWwgZGFtYWdlLCBldmVuIGlmIHRoZSBMaWNlbnNvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4gSG93ZXZlciwgdGhlIExpY2Vuc29yIHdpbGwgYmUgbGlhYmxlIHVuZGVyIHN0YXR1dG9yeSBwcm9kdWN0IGxpYWJpbGl0eSBsYXdzIGFzIGZhciBzdWNoIGxhd3MgYXBwbHkgdG8gdGhlIFdvcmsuXG5cbiAgIDkuIEFkZGl0aW9uYWwgYWdyZWVtZW50c1xuXG4gICBXaGlsZSBkaXN0cmlidXRpbmcgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcywgWW91IG1heSBjaG9vc2UgdG8gY29uY2x1ZGUgYW4gYWRkaXRpb25hbCBhZ3JlZW1lbnQgdG8gb2ZmZXIsIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igc2VydmljZXMgY29uc2lzdGVudCB3aXRoIHRoaXMgTGljZW5jZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkgb24geW91ciBvd24gYmVoYWxmIGFuZCBvbiB5b3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYgb2YgdGhlIG9yaWdpbmFsIExpY2Vuc29yIG9yIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHRoZSBmYWN0IFlvdSBoYXZlIGFjY2VwdGVkIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LlxuXG4gICAxMC4gQWNjZXB0YW5jZSBvZiB0aGUgTGljZW5jZVxuXG4gICBUaGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2VuY2UgY2FuIGJlIGFjY2VwdGVkIGJ5IGNsaWNraW5nIG9uIGFuIGljb24gXCJJIGFncmVlXCIgcGxhY2VkIHVuZGVyIHRoZSBib3R0b20gb2YgYSB3aW5kb3cgZGlzcGxheWluZyB0aGUgdGV4dCBvZiB0aGlzIExpY2VuY2Ugb3IgYnkgYWZmaXJtaW5nIGNvbnNlbnQgaW4gYW55IG90aGVyIHNpbWlsYXIgd2F5LCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHJ1bGVzIG9mIGFwcGxpY2FibGUgbGF3LiBDbGlja2luZyBvbiB0aGF0IGljb24gaW5kaWNhdGVzIHlvdXIgY2xlYXIgYW5kIGlycmV2b2NhYmxlIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbmNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLlxuXG4gICBTaW1pbGFybHksIHlvdSBpcnJldm9jYWJseSBhY2NlcHQgdGhpcyBMaWNlbmNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGJ5IGV4ZXJjaXNpbmcgYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBBcnRpY2xlIDIgb2YgdGhpcyBMaWNlbmNlLCBzdWNoIGFzIHRoZSB1c2Ugb2YgdGhlIFdvcmssIHRoZSBjcmVhdGlvbiBieSBZb3Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgdGhlIERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBieSBZb3Ugb2YgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YuXG5cbiAgIDExLiBJbmZvcm1hdGlvbiB0byB0aGUgcHVibGljXG5cbiAgIEluIGNhc2Ugb2YgYW55IERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBvZiB0aGUgV29yayBieSBtZWFucyBvZiBlbGVjdHJvbmljIGNvbW11bmljYXRpb24gYnkgWW91IChmb3IgZXhhbXBsZSwgYnkgb2ZmZXJpbmcgdG8gZG93bmxvYWQgdGhlIFdvcmsgZnJvbSBhIHJlbW90ZSBsb2NhdGlvbikgdGhlIGRpc3RyaWJ1dGlvbiBjaGFubmVsIG9yIG1lZGlhIChmb3IgZXhhbXBsZSwgYSB3ZWJzaXRlKSBtdXN0IGF0IGxlYXN0IHByb3ZpZGUgdG8gdGhlIHB1YmxpYyB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhYmxlIGxhdyByZWdhcmRpbmcgdGhlIGlkZW50aWZpY2F0aW9uIGFuZCBhZGRyZXNzIG9mIHRoZSBMaWNlbnNvciwgdGhlIExpY2VuY2UgYW5kIHRoZSB3YXkgaXQgbWF5IGJlIGFjY2Vzc2libGUsIGNvbmNsdWRlZCwgc3RvcmVkIGFuZCByZXByb2R1Y2VkIGJ5IHRoZSBMaWNlbnNlZS5cblxuICAgMTIuIFRlcm1pbmF0aW9uIG9mIHRoZSBMaWNlbmNlXG5cbiAgIFRoZSBMaWNlbmNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IHRoZSBMaWNlbnNlZSBvZiB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuXG5cbiAgIFN1Y2ggYSB0ZXJtaW5hdGlvbiB3aWxsIG5vdCB0ZXJtaW5hdGUgdGhlIGxpY2VuY2VzIG9mIGFueSBwZXJzb24gd2hvIGhhcyByZWNlaXZlZCB0aGUgV29yayBmcm9tIHRoZSBMaWNlbnNlZSB1bmRlciB0aGUgTGljZW5jZSwgcHJvdmlkZWQgc3VjaCBwZXJzb25zIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5jZS5cblxuICAgMTMuIE1pc2NlbGxhbmVvdXNcblxuICAgV2l0aG91dCBwcmVqdWRpY2Ugb2YgQXJ0aWNsZSA5IGFib3ZlLCB0aGUgTGljZW5jZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgUGFydGllcyBhcyB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJldW5kZXIuXG5cbiAgIElmIGFueSBwcm92aXNpb24gb2YgdGhlIExpY2VuY2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCB0aGlzIHdpbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIExpY2VuY2UgYXMgYSB3aG9sZS4gU3VjaCBwcm92aXNpb24gd2lsbCBiZSBjb25zdHJ1ZWQgYW5kL29yIHJlZm9ybWVkIHNvIGFzIG5lY2Vzc2FyeSB0byBtYWtlIGl0IHZhbGlkIGFuZCBlbmZvcmNlYWJsZS5cblxuICAgVGhlIEV1cm9wZWFuIENvbW1pc3Npb24gbWF5IHB1dCBpbnRvIGZvcmNlIHRyYW5zbGF0aW9ucyBhbmQvb3IgYmluZGluZyBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbmNlLCBzbyBmYXIgdGhpcyBpcyByZXF1aXJlZCBhbmQgcmVhc29uYWJsZS4gTmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbmNlIHdpbGwgYmUgcHVibGlzaGVkIHdpdGggYSB1bmlxdWUgdmVyc2lvbiBudW1iZXIuIFRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgTGljZW5jZSBiZWNvbWVzIGJpbmRpbmcgZm9yIFlvdSBhcyBzb29uIGFzIFlvdSBiZWNvbWUgYXdhcmUgb2YgaXRzIHB1YmxpY2F0aW9uLlxuXG4gICAxNC4gSnVyaXNkaWN0aW9uXG5cbiAgIEFueSBsaXRpZ2F0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFyaXNpbmcgYmV0d2VlbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgYXMgYSBMaWNlbnNvciwgYW5kIGFueSBMaWNlbnNlZSwgd2lsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIENvdXJ0IG9mIEp1c3RpY2Ugb2YgdGhlIEV1cm9wZWFuIENvbW11bml0aWVzLCBhcyBsYWlkIGRvd24gaW4gYXJ0aWNsZSAyMzggb2YgdGhlIFRyZWF0eSBlc3RhYmxpc2hpbmcgdGhlIEV1cm9wZWFuIENvbW11bml0eS5cblxuICAgQW55IGxpdGlnYXRpb24gYXJpc2luZyBiZXR3ZWVuIFBhcnRpZXMsIG90aGVyIHRoYW4gdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGFuZCByZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvbXBldGVudCBjb3VydCB3aGVyZSB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcy5cblxuICAgMTUuIEFwcGxpY2FibGUgTGF3XG5cbiAgIFRoaXMgTGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3IG9mIHRoZSBFdXJvcGVhbiBVbmlvbiBjb3VudHJ5IHdoZXJlIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGhhcyBoaXMgcmVnaXN0ZXJlZCBvZmZpY2UuXG5cbiAgIFRoaXMgbGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgQmVsZ2lhbiBsYXcgaWY6XG5cbiAgICAgIOKIkiBhIGxpdGlnYXRpb24gYXJpc2VzIGJldHdlZW4gdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGFzIGEgTGljZW5zb3IsIGFuZCBhbnkgTGljZW5zZWU7XG5cbiAgICAgIOKIkiB0aGUgTGljZW5zb3IsIG90aGVyIHRoYW4gdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGhhcyBubyByZXNpZGVuY2Ugb3IgcmVnaXN0ZXJlZCBvZmZpY2UgaW5zaWRlIGEgRXVyb3BlYW4gVW5pb24gY291bnRyeS5cblxuQXBwZW5kaXhcblxuXCJDb21wYXRpYmxlIExpY2VuY2VzXCIgYWNjb3JkaW5nIHRvIGFydGljbGUgNSBFVVBMIGFyZTpcblxuICAg4oiSIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdi4gMlxuXG4gICDiiJIgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wpIHYuIDIuMSwgdi4gMy4wXG5cbiAgIOKIkiBDb21tb24gUHVibGljIExpY2Vuc2Ugdi4gMS4wXG5cbiAgIOKIkiBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDEuMFxuXG4gICDiiJIgQ2VjaWxsIHYuIDIuMCJdLCJsaWNlbnNlSWRzIjpbIkVVUEwtMS4wIl0sImtleXdvcmRzIjpbIjEgMCBldXBsIiwiMCBldXBsIGMiLCIwIG9yIGhhcyIsIndvcmsgYXQgdGhlIiwibm9uIGV4Y2x1c2l2ZSBzdWIiLCJleGNsdXNpdmUgc3ViIGxpY2Vuc2FibGUiLCJzdWIgbGljZW5zYWJsZSBsaWNlbmNlIiwibGljZW5zYWJsZSBsaWNlbmNlIHRvIiwiYWRkaXRpb24gYSBtYWNoaW5lcmVhZGFibGUiLCJhIG1hY2hpbmVyZWFkYWJsZSBjb3B5IiwibWFjaGluZXJlYWRhYmxlIGNvcHkgb2YiLCJ0aW1lIHlvdSBhcyIsInlvdSBhcyBhIiwiYXMgYSBsaWNlbnNlZSIsImEgbGljZW5zZWUgcmVjZWl2ZSIsImxpY2Vuc2VlIHJlY2VpdmUgdGhlIiwicmVnYXJkaW5nIHRoZSBpZGVudGlmaWNhdGlvbiIsInRoZSBpZGVudGlmaWNhdGlvbiBhbmQiLCJpZGVudGlmaWNhdGlvbiBhbmQgYWRkcmVzcyIsImFuZCBhZGRyZXNzIG9mIiwiYWRkcmVzcyBvZiB0aGUiLCJjb21taXNzaW9uIG1heSBwdXQiLCJtYXkgcHV0IGludG8iLCJwdXQgaW50byBmb3JjZSIsImludG8gZm9yY2UgdHJhbnNsYXRpb25zIiwiZm9yY2UgdHJhbnNsYXRpb25zIGFuZCIsInRyYW5zbGF0aW9ucyBhbmQgb3IiLCJhbmQgb3IgYmluZGluZyIsIm9yIGJpbmRpbmcgbmV3IiwiYmluZGluZyBuZXcgdmVyc2lvbnMiLCJudW1iZXIgdGhlIG5ldyIsInRoZSBsaWNlbmNlIGJlY29tZXMiLCJsaWNlbmNlIGJlY29tZXMgYmluZGluZyIsImJlY29tZXMgYmluZGluZyBmb3IiLCJiaW5kaW5nIGZvciB5b3UiLCJmb3IgeW91IGFzIiwieW91IGFzIHNvb24iLCJzb29uIGFzIHlvdSIsImFzIHlvdSBiZWNvbWUiLCJiZWNvbWUgYXdhcmUgb2YiLCJhd2FyZSBvZiBpdHMiLCJvZiBpdHMgcHVibGljYXRpb24iLCJpdHMgcHVibGljYXRpb24gMTQiLCJwdWJsaWNhdGlvbiAxNCBqdXJpc2RpY3Rpb24iLCJldXBsIGFyZSBnZW5lcmFsIiwiYXJlIGdlbmVyYWwgcHVibGljIiwibGljZW5jZSB2IDEgMCIsInYgMSAwIGV1cGwiLCIxIDAgZXVwbCBjIiwiMCBldXBsIGMgdGhlIiwiZXVwbCB2IDEgMCIsInYgMSAwIG9yIiwiMSAwIG9yIGhhcyIsIjAgb3IgaGFzIGV4cHJlc3NlZCIsInRoZSB3b3JrIGF0IHRoZSIsIndvcmsgYXQgdGhlIGRpc3Bvc2FsIiwiZnJlZSBub24gZXhjbHVzaXZlIHN1YiIsIm5vbiBleGNsdXNpdmUgc3ViIGxpY2Vuc2FibGUiLCJleGNsdXNpdmUgc3ViIGxpY2Vuc2FibGUgbGljZW5jZSIsInN1YiBsaWNlbnNhYmxlIGxpY2VuY2UgdG8iLCJsaWNlbnNhYmxlIGxpY2VuY2UgdG8gZG8iLCJpbiBhZGRpdGlvbiBhIG1hY2hpbmVyZWFkYWJsZSIsImFkZGl0aW9uIGEgbWFjaGluZXJlYWRhYmxlIGNvcHkiLCJhIG1hY2hpbmVyZWFkYWJsZSBjb3B5IG9mIiwibWFjaGluZXJlYWRhYmxlIGNvcHkgb2YgdGhlIiwiZWFjaCB0aW1lIHlvdSBhcyIsInRpbWUgeW91IGFzIGEiLCJ5b3UgYXMgYSBsaWNlbnNlZSIsImFzIGEgbGljZW5zZWUgcmVjZWl2ZSIsImEgbGljZW5zZWUgcmVjZWl2ZSB0aGUiLCJsaWNlbnNlZSByZWNlaXZlIHRoZSB3b3JrIiwicmVjZWl2ZSB0aGUgd29yayB0aGUiLCJ3b3JrIHRoZSBvcmlnaW5hbCBsaWNlbnNvciIsImxhdyByZWdhcmRpbmcgdGhlIGlkZW50aWZpY2F0aW9uIiwicmVnYXJkaW5nIHRoZSBpZGVudGlmaWNhdGlvbiBhbmQiLCJ0aGUgaWRlbnRpZmljYXRpb24gYW5kIGFkZHJlc3MiLCJpZGVudGlmaWNhdGlvbiBhbmQgYWRkcmVzcyBvZiIsImFuZCBhZGRyZXNzIG9mIHRoZSIsImFkZHJlc3Mgb2YgdGhlIGxpY2Vuc29yIiwiZXVyb3BlYW4gY29tbWlzc2lvbiBtYXkgcHV0IiwiY29tbWlzc2lvbiBtYXkgcHV0IGludG8iLCJtYXkgcHV0IGludG8gZm9yY2UiLCJwdXQgaW50byBmb3JjZSB0cmFuc2xhdGlvbnMiLCJpbnRvIGZvcmNlIHRyYW5zbGF0aW9ucyBhbmQiLCJmb3JjZSB0cmFuc2xhdGlvbnMgYW5kIG9yIiwidHJhbnNsYXRpb25zIGFuZCBvciBiaW5kaW5nIiwiYW5kIG9yIGJpbmRpbmcgbmV3Iiwib3IgYmluZGluZyBuZXcgdmVyc2lvbnMiLCJiaW5kaW5nIG5ldyB2ZXJzaW9ucyBvZiIsInJlYXNvbmFibGUgbmV3IHZlcnNpb25zIG9mIiwidW5pcXVlIHZlcnNpb24gbnVtYmVyIHRoZSIsInZlcnNpb24gbnVtYmVyIHRoZSBuZXciLCJudW1iZXIgdGhlIG5ldyB2ZXJzaW9uIiwib2YgdGhlIGxpY2VuY2UgYmVjb21lcyIsInRoZSBsaWNlbmNlIGJlY29tZXMgYmluZGluZyIsImxpY2VuY2UgYmVjb21lcyBiaW5kaW5nIGZvciIsImJlY29tZXMgYmluZGluZyBmb3IgeW91IiwiYmluZGluZyBmb3IgeW91IGFzIiwiZm9yIHlvdSBhcyBzb29uIiwieW91IGFzIHNvb24gYXMiLCJhcyBzb29uIGFzIHlvdSIsInNvb24gYXMgeW91IGJlY29tZSIsImFzIHlvdSBiZWNvbWUgYXdhcmUiLCJ5b3UgYmVjb21lIGF3YXJlIG9mIiwiYmVjb21lIGF3YXJlIG9mIGl0cyIsImF3YXJlIG9mIGl0cyBwdWJsaWNhdGlvbiIsIm9mIGl0cyBwdWJsaWNhdGlvbiAxNCIsIml0cyBwdWJsaWNhdGlvbiAxNCBqdXJpc2RpY3Rpb24iLCJwdWJsaWNhdGlvbiAxNCBqdXJpc2RpY3Rpb24gYW55IiwiNSBldXBsIGFyZSBnZW5lcmFsIiwiZXVwbCBhcmUgZ2VuZXJhbCBwdWJsaWMiLCJhcmUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSIsInB1YmxpYyBsaWNlbmNlIHYgMSAwIiwibGljZW5jZSB2IDEgMCBldXBsIiwidiAxIDAgZXVwbCBjIiwiMSAwIGV1cGwgYyB0aGUiLCIwIGV1cGwgYyB0aGUgZXVyb3BlYW4iLCJ0aGUgZXVwbCB2IDEgMCIsImV1cGwgdiAxIDAgb3IiLCJ2IDEgMCBvciBoYXMiLCIxIDAgb3IgaGFzIGV4cHJlc3NlZCIsIjAgb3IgaGFzIGV4cHJlc3NlZCBieSIsImNvcGllcyBvZiB0aGUgd29yayBhdCIsIm9mIHRoZSB3b3JrIGF0IHRoZSIsInRoZSB3b3JrIGF0IHRoZSBkaXNwb3NhbCIsIndvcmsgYXQgdGhlIGRpc3Bvc2FsIG9mIiwicm95YWx0eSBmcmVlIG5vbiBleGNsdXNpdmUgc3ViIiwiZnJlZSBub24gZXhjbHVzaXZlIHN1YiBsaWNlbnNhYmxlIiwibm9uIGV4Y2x1c2l2ZSBzdWIgbGljZW5zYWJsZSBsaWNlbmNlIiwiZXhjbHVzaXZlIHN1YiBsaWNlbnNhYmxlIGxpY2VuY2UgdG8iLCJzdWIgbGljZW5zYWJsZSBsaWNlbmNlIHRvIGRvIiwibGljZW5zYWJsZSBsaWNlbmNlIHRvIGRvIHRoZSIsInByb3ZpZGVzIGluIGFkZGl0aW9uIGEgbWFjaGluZXJlYWRhYmxlIiwiaW4gYWRkaXRpb24gYSBtYWNoaW5lcmVhZGFibGUgY29weSIsImFkZGl0aW9uIGEgbWFjaGluZXJlYWRhYmxlIGNvcHkgb2YiLCJhIG1hY2hpbmVyZWFkYWJsZSBjb3B5IG9mIHRoZSIsIm1hY2hpbmVyZWFkYWJsZSBjb3B5IG9mIHRoZSBzb3VyY2UiLCJ0ZXJtcyBvZiB0aGlzIGxpY2VuY2UgdGhlIiwib2YgdGhpcyBsaWNlbmNlIHRoZSBsaWNlbnNlZSIsInRoaXMgbGljZW5jZSB0aGUgbGljZW5zZWUgYmVjb21pbmciLCJsaWNlbmNlIGVhY2ggdGltZSB5b3UgYXMiLCJlYWNoIHRpbWUgeW91IGFzIGEiLCJ0aW1lIHlvdSBhcyBhIGxpY2Vuc2VlIiwieW91IGFzIGEgbGljZW5zZWUgcmVjZWl2ZSIsImFzIGEgbGljZW5zZWUgcmVjZWl2ZSB0aGUiLCJhIGxpY2Vuc2VlIHJlY2VpdmUgdGhlIHdvcmsiLCJsaWNlbnNlZSByZWNlaXZlIHRoZSB3b3JrIHRoZSIsInJlY2VpdmUgdGhlIHdvcmsgdGhlIG9yaWdpbmFsIiwidGhlIHdvcmsgdGhlIG9yaWdpbmFsIGxpY2Vuc29yIiwid29yayB0aGUgb3JpZ2luYWwgbGljZW5zb3IgYW5kIiwiYXBwbGljYWJsZSBsYXcgcmVnYXJkaW5nIHRoZSBpZGVudGlmaWNhdGlvbiIsImxhdyByZWdhcmRpbmcgdGhlIGlkZW50aWZpY2F0aW9uIGFuZCIsInJlZ2FyZGluZyB0aGUgaWRlbnRpZmljYXRpb24gYW5kIGFkZHJlc3MiLCJ0aGUgaWRlbnRpZmljYXRpb24gYW5kIGFkZHJlc3Mgb2YiLCJpZGVudGlmaWNhdGlvbiBhbmQgYWRkcmVzcyBvZiB0aGUiLCJhbmQgYWRkcmVzcyBvZiB0aGUgbGljZW5zb3IiLCJhZGRyZXNzIG9mIHRoZSBsaWNlbnNvciB0aGUiLCJvZiB0aGUgbGljZW5zb3IgdGhlIGxpY2VuY2UiLCJ0aGUgZXVyb3BlYW4gY29tbWlzc2lvbiBtYXkgcHV0IiwiZXVyb3BlYW4gY29tbWlzc2lvbiBtYXkgcHV0IGludG8iLCJjb21taXNzaW9uIG1heSBwdXQgaW50byBmb3JjZSIsIm1heSBwdXQgaW50byBmb3JjZSB0cmFuc2xhdGlvbnMiLCJwdXQgaW50byBmb3JjZSB0cmFuc2xhdGlvbnMgYW5kIiwiaW50byBmb3JjZSB0cmFuc2xhdGlvbnMgYW5kIG9yIiwiZm9yY2UgdHJhbnNsYXRpb25zIGFuZCBvciBiaW5kaW5nIiwidHJhbnNsYXRpb25zIGFuZCBvciBiaW5kaW5nIG5ldyIsImFuZCBvciBiaW5kaW5nIG5ldyB2ZXJzaW9ucyIsIm9yIGJpbmRpbmcgbmV3IHZlcnNpb25zIG9mIiwiYmluZGluZyBuZXcgdmVyc2lvbnMgb2YgdGhpcyIsImFuZCByZWFzb25hYmxlIG5ldyB2ZXJzaW9ucyBvZiIsInJlYXNvbmFibGUgbmV3IHZlcnNpb25zIG9mIHRoZSIsImEgdW5pcXVlIHZlcnNpb24gbnVtYmVyIHRoZSIsInVuaXF1ZSB2ZXJzaW9uIG51bWJlciB0aGUgbmV3IiwidmVyc2lvbiBudW1iZXIgdGhlIG5ldyB2ZXJzaW9uIiwibnVtYmVyIHRoZSBuZXcgdmVyc2lvbiBvZiIsInRoZSBuZXcgdmVyc2lvbiBvZiB0aGUiLCJ2ZXJzaW9uIG9mIHRoZSBsaWNlbmNlIGJlY29tZXMiLCJvZiB0aGUgbGljZW5jZSBiZWNvbWVzIGJpbmRpbmciLCJ0aGUgbGljZW5jZSBiZWNvbWVzIGJpbmRpbmcgZm9yIiwibGljZW5jZSBiZWNvbWVzIGJpbmRpbmcgZm9yIHlvdSIsImJlY29tZXMgYmluZGluZyBmb3IgeW91IGFzIiwiYmluZGluZyBmb3IgeW91IGFzIHNvb24iLCJmb3IgeW91IGFzIHNvb24gYXMiLCJ5b3UgYXMgc29vbiBhcyB5b3UiLCJhcyBzb29uIGFzIHlvdSBiZWNvbWUiLCJzb29uIGFzIHlvdSBiZWNvbWUgYXdhcmUiLCJhcyB5b3UgYmVjb21lIGF3YXJlIG9mIiwieW91IGJlY29tZSBhd2FyZSBvZiBpdHMiLCJiZWNvbWUgYXdhcmUgb2YgaXRzIHB1YmxpY2F0aW9uIiwiYXdhcmUgb2YgaXRzIHB1YmxpY2F0aW9uIDE0Iiwib2YgaXRzIHB1YmxpY2F0aW9uIDE0IGp1cmlzZGljdGlvbiIsIml0cyBwdWJsaWNhdGlvbiAxNCBqdXJpc2RpY3Rpb24gYW55IiwicHVibGljYXRpb24gMTQganVyaXNkaWN0aW9uIGFueSBsaXRpZ2F0aW9uIiwiYXJ0aWNsZSA1IGV1cGwgYXJlIGdlbmVyYWwiLCI1IGV1cGwgYXJlIGdlbmVyYWwgcHVibGljIiwiZXVwbCBhcmUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSIsImFyZSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGdwbCIsImxpY2Vuc2UgZ3BsIHYgMiBvcGVuIl19LHsibGljZW5zZVRleHRzIjpbIkV1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlIFYuIDEuMSBFVVBMIChjKSB0aGUgRXVyb3BlYW4gQ29tbXVuaXR5IDIwMDdcblxuVGhpcyBFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5jZSAodGhlIFwiRVVQTFwiKSBhcHBsaWVzIHRvIHRoZSBXb3JrIG9yIFNvZnR3YXJlIChhcyBkZWZpbmVkIGJlbG93KSB3aGljaCBpcyBwcm92aWRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlLiBBbnkgdXNlIG9mIHRoZSBXb3JrLCBvdGhlciB0aGFuIGFzIGF1dGhvcmlzZWQgdW5kZXIgdGhpcyBMaWNlbmNlIGlzIHByb2hpYml0ZWQgKHRvIHRoZSBleHRlbnQgc3VjaCB1c2UgaXMgY292ZXJlZCBieSBhIHJpZ2h0IG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBXb3JrKS5cblxuVGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZSB3aGVuIHRoZSBMaWNlbnNvciAoYXMgZGVmaW5lZCBiZWxvdykgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOlxuXG4gICBcblxuICAgTGljZW5zZWQgdW5kZXIgdGhlIEVVUEwgVi4xLjFcblxuICAgXG5cbiAgIG9yIGhhcyBleHByZXNzZWQgYnkgYW55IG90aGVyIG1lYW4gaGlzIHdpbGxpbmduZXNzIHRvIGxpY2Vuc2UgdW5kZXIgdGhlIEVVUEwuXG5cbiAgIDEuIERlZmluaXRpb25zXG5cbiAgIEluIHRoaXMgTGljZW5jZSwgdGhlIGZvbGxvd2luZyB0ZXJtcyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzpcblxuICAgICAgLSBUaGUgTGljZW5jZTogdGhpcyBMaWNlbmNlLlxuXG4gICAgICAtIFRoZSBPcmlnaW5hbCBXb3JrIG9yIHRoZSBTb2Z0d2FyZTogdGhlIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGFuZC9vciBjb21tdW5pY2F0ZWQgYnkgdGhlIExpY2Vuc29yIHVuZGVyIHRoaXMgTGljZW5jZSwgYXZhaWxhYmxlIGFzIFNvdXJjZSBDb2RlIGFuZCBhbHNvIGFzIEV4ZWN1dGFibGUgQ29kZSBhcyB0aGUgY2FzZSBtYXkgYmUuXG5cbiAgICAgIC0gRGVyaXZhdGl2ZSBXb3JrczogdGhlIHdvcmtzIG9yIHNvZnR3YXJlIHRoYXQgY291bGQgYmUgY3JlYXRlZCBieSB0aGUgTGljZW5zZWUsIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZW9mLiBUaGlzIExpY2VuY2UgZG9lcyBub3QgZGVmaW5lIHRoZSBleHRlbnQgb2YgbW9kaWZpY2F0aW9uIG9yIGRlcGVuZGVuY2Ugb24gdGhlIE9yaWdpbmFsIFdvcmsgcmVxdWlyZWQgaW4gb3JkZXIgdG8gY2xhc3NpZnkgYSB3b3JrIGFzIGEgRGVyaXZhdGl2ZSBXb3JrOyB0aGlzIGV4dGVudCBpcyBkZXRlcm1pbmVkIGJ5IGNvcHlyaWdodCBsYXcgYXBwbGljYWJsZSBpbiB0aGUgY291bnRyeSBtZW50aW9uZWQgaW4gQXJ0aWNsZSAxNS5cblxuICAgICAgLSBUaGUgV29yazogdGhlIE9yaWdpbmFsIFdvcmsgYW5kL29yIGl0cyBEZXJpdmF0aXZlIFdvcmtzLlxuXG4gICAgICAtIFRoZSBTb3VyY2UgQ29kZTogdGhlIGh1bWFuLXJlYWRhYmxlIGZvcm0gb2YgdGhlIFdvcmsgd2hpY2ggaXMgdGhlIG1vc3QgY29udmVuaWVudCBmb3IgcGVvcGxlIHRvIHN0dWR5IGFuZCBtb2RpZnkuXG5cbiAgICAgIC0gVGhlIEV4ZWN1dGFibGUgQ29kZTogYW55IGNvZGUgd2hpY2ggaGFzIGdlbmVyYWxseSBiZWVuIGNvbXBpbGVkIGFuZCB3aGljaCBpcyBtZWFudCB0byBiZSBpbnRlcnByZXRlZCBieSBhIGNvbXB1dGVyIGFzIGEgcHJvZ3JhbS5cblxuICAgICAgLSBUaGUgTGljZW5zb3I6IHRoZSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB0aGF0IGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMgdGhlIFdvcmsgdW5kZXIgdGhlIExpY2VuY2UuXG5cbiAgICAgIC0gQ29udHJpYnV0b3Iocyk6IGFueSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB3aG8gbW9kaWZpZXMgdGhlIFdvcmsgdW5kZXIgdGhlIExpY2VuY2UsIG9yIG90aGVyd2lzZSBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgYSBEZXJpdmF0aXZlIFdvcmsuXG5cbiAgICAgIC0gVGhlIExpY2Vuc2VlIG9yIFwiWW91XCI6IGFueSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB3aG8gbWFrZXMgYW55IHVzYWdlIG9mIHRoZSBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuXG5cbiAgICAgIC0gRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uOiBhbnkgYWN0IG9mIHNlbGxpbmcsIGdpdmluZywgbGVuZGluZywgcmVudGluZywgZGlzdHJpYnV0aW5nLCBjb21tdW5pY2F0aW5nLCB0cmFuc21pdHRpbmcsIG9yIG90aGVyd2lzZSBtYWtpbmcgYXZhaWxhYmxlLCBvbi1saW5lIG9yIG9mZi1saW5lLCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgcHJvdmlkaW5nIGFjY2VzcyB0byBpdHMgZXNzZW50aWFsIGZ1bmN0aW9uYWxpdGllcyBhdCB0aGUgZGlzcG9zYWwgb2YgYW55IG90aGVyIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uLlxuXG4gICAyLiBTY29wZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgdGhlIExpY2VuY2VcblxuICAgVGhlIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2VuY2UgdG8gZG8gdGhlIGZvbGxvd2luZywgZm9yIHRoZSBkdXJhdGlvbiBvZiBjb3B5cmlnaHQgdmVzdGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrOlxuXG4gICAgICAtIHVzZSB0aGUgV29yayBpbiBhbnkgY2lyY3Vtc3RhbmNlIGFuZCBmb3IgYWxsIHVzYWdlLFxuXG4gICAgICAtIHJlcHJvZHVjZSB0aGUgV29yayxcblxuICAgICAgLSBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBtYWtlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgV29yayxcblxuICAgICAgLSBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljLCBpbmNsdWRpbmcgdGhlIHJpZ2h0IHRvIG1ha2UgYXZhaWxhYmxlIG9yIGRpc3BsYXkgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YgdG8gdGhlIHB1YmxpYyBhbmQgcGVyZm9ybSBwdWJsaWNseSwgYXMgdGhlIGNhc2UgbWF5IGJlLCB0aGUgV29yayxcblxuICAgICAgLSBkaXN0cmlidXRlIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLFxuXG4gICAgICAtIGxlbmQgYW5kIHJlbnQgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YsXG5cbiAgICAgIC0gc3ViLWxpY2Vuc2UgcmlnaHRzIGluIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLlxuXG4gICBUaG9zZSByaWdodHMgY2FuIGJlIGV4ZXJjaXNlZCBvbiBhbnkgbWVkaWEsIHN1cHBvcnRzIGFuZCBmb3JtYXRzLCB3aGV0aGVyIG5vdyBrbm93biBvciBsYXRlciBpbnZlbnRlZCwgYXMgZmFyIGFzIHRoZSBhcHBsaWNhYmxlIGxhdyBwZXJtaXRzIHNvLlxuXG4gICBJbiB0aGUgY291bnRyaWVzIHdoZXJlIG1vcmFsIHJpZ2h0cyBhcHBseSwgdGhlIExpY2Vuc29yIHdhaXZlcyBoaXMgcmlnaHQgdG8gZXhlcmNpc2UgaGlzIG1vcmFsIHJpZ2h0IHRvIHRoZSBleHRlbnQgYWxsb3dlZCBieSBsYXcgaW4gb3JkZXIgdG8gbWFrZSBlZmZlY3RpdmUgdGhlIGxpY2VuY2Ugb2YgdGhlIGVjb25vbWljIHJpZ2h0cyBoZXJlIGFib3ZlIGxpc3RlZC5cblxuICAgVGhlIExpY2Vuc29yIGdyYW50cyB0byB0aGUgTGljZW5zZWUgcm95YWx0eS1mcmVlLCBub24gZXhjbHVzaXZlIHVzYWdlIHJpZ2h0cyB0byBhbnkgcGF0ZW50cyBoZWxkIGJ5IHRoZSBMaWNlbnNvciwgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSB1c2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIG9uIHRoZSBXb3JrIHVuZGVyIHRoaXMgTGljZW5jZS5cblxuICAgMy4gQ29tbXVuaWNhdGlvbiBvZiB0aGUgU291cmNlIENvZGVcblxuICAgVGhlIExpY2Vuc29yIG1heSBwcm92aWRlIHRoZSBXb3JrIGVpdGhlciBpbiBpdHMgU291cmNlIENvZGUgZm9ybSwgb3IgYXMgRXhlY3V0YWJsZSBDb2RlLiBJZiB0aGUgV29yayBpcyBwcm92aWRlZCBhcyBFeGVjdXRhYmxlIENvZGUsIHRoZSBMaWNlbnNvciBwcm92aWRlcyBpbiBhZGRpdGlvbiBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFdvcmsgdGhhdCB0aGUgTGljZW5zb3IgZGlzdHJpYnV0ZXMgb3IgaW5kaWNhdGVzLCBpbiBhIG5vdGljZSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgYXR0YWNoZWQgdG8gdGhlIFdvcmssIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGUgU291cmNlIENvZGUgaXMgZWFzaWx5IGFuZCBmcmVlbHkgYWNjZXNzaWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgYW5kL29yIGNvbW11bmljYXRlIHRoZSBXb3JrLlxuXG4gICA0LiBMaW1pdGF0aW9ucyBvbiBjb3B5cmlnaHRcblxuICAgTm90aGluZyBpbiB0aGlzIExpY2VuY2UgaXMgaW50ZW5kZWQgdG8gZGVwcml2ZSB0aGUgTGljZW5zZWUgb2YgdGhlIGJlbmVmaXRzIGZyb20gYW55IGV4Y2VwdGlvbiBvciBsaW1pdGF0aW9uIHRvIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSByaWdodHMgb3duZXJzIGluIHRoZSBPcmlnaW5hbCBXb3JrIG9yIFNvZnR3YXJlLCBvZiB0aGUgZXhoYXVzdGlvbiBvZiB0aG9zZSByaWdodHMgb3Igb2Ygb3RoZXIgYXBwbGljYWJsZSBsaW1pdGF0aW9ucyB0aGVyZXRvLlxuXG4gICA1LiBPYmxpZ2F0aW9ucyBvZiB0aGUgTGljZW5zZWVcblxuICAgVGhlIGdyYW50IG9mIHRoZSByaWdodHMgbWVudGlvbmVkIGFib3ZlIGlzIHN1YmplY3QgdG8gc29tZSByZXN0cmljdGlvbnMgYW5kIG9ibGlnYXRpb25zIGltcG9zZWQgb24gdGhlIExpY2Vuc2VlLiBUaG9zZSBvYmxpZ2F0aW9ucyBhcmUgdGhlIGZvbGxvd2luZzpcblxuICAgQXR0cmlidXRpb24gcmlnaHQ6IHRoZSBMaWNlbnNlZSBzaGFsbCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrcyBub3RpY2VzIGFuZCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoZSBMaWNlbmNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBUaGUgTGljZW5zZWUgbXVzdCBpbmNsdWRlIGEgY29weSBvZiBzdWNoIG5vdGljZXMgYW5kIGEgY29weSBvZiB0aGUgTGljZW5jZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgaGUvc2hlIGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMuIFRoZSBMaWNlbnNlZSBtdXN0IGNhdXNlIGFueSBEZXJpdmF0aXZlIFdvcmsgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHRoZSBXb3JrIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCB0aGUgZGF0ZSBvZiBtb2RpZmljYXRpb24uXG5cbiAgIENvcHlsZWZ0IGNsYXVzZTogSWYgdGhlIExpY2Vuc2VlIGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrcyBvciBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssIHRoaXMgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uIHdpbGwgYmUgZG9uZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlIG9yIG9mIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2VuY2UgdW5sZXNzIHRoZSBPcmlnaW5hbCBXb3JrIGlzIGV4cHJlc3NseSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoaXMgdmVyc2lvbiBvZiB0aGUgTGljZW5jZS4gVGhlIExpY2Vuc2VlIChiZWNvbWluZyBMaWNlbnNvcikgY2Fubm90IG9mZmVyIG9yIGltcG9zZSBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zIG9uIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS5cblxuICAgQ29tcGF0aWJpbGl0eSBjbGF1c2U6IElmIHRoZSBMaWNlbnNlZSBEaXN0cmlidXRlcyBhbmQvb3IgQ29tbXVuaWNhdGVzIERlcml2YXRpdmUgV29ya3Mgb3IgY29waWVzIHRoZXJlb2YgYmFzZWQgdXBvbiBib3RoIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBhbm90aGVyIHdvcmsgbGljZW5zZWQgdW5kZXIgYSBDb21wYXRpYmxlIExpY2VuY2UsIHRoaXMgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uIGNhbiBiZSBkb25lIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIENvbXBhdGlibGUgTGljZW5jZS4gRm9yIHRoZSBzYWtlIG9mIHRoaXMgY2xhdXNlLCBcIkNvbXBhdGlibGUgTGljZW5jZSxcIiByZWZlcnMgdG8gdGhlIGxpY2VuY2VzIGxpc3RlZCBpbiB0aGUgYXBwZW5kaXggYXR0YWNoZWQgdG8gdGhpcyBMaWNlbmNlLiBTaG91bGQgdGhlIExpY2Vuc2VlJ3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhlIENvbXBhdGlibGUgTGljZW5jZSBjb25mbGljdCB3aXRoIGhpcy9oZXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbmNlLCB0aGUgb2JsaWdhdGlvbnMgb2YgdGhlIENvbXBhdGlibGUgTGljZW5jZSBzaGFsbCBwcmV2YWlsLlxuXG4gICBQcm92aXNpb24gb2YgU291cmNlIENvZGU6IFdoZW4gZGlzdHJpYnV0aW5nIGFuZC9vciBjb21tdW5pY2F0aW5nIGNvcGllcyBvZiB0aGUgV29yaywgdGhlIExpY2Vuc2VlIHdpbGwgcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb3IgaW5kaWNhdGUgYSByZXBvc2l0b3J5IHdoZXJlIHRoaXMgU291cmNlIHdpbGwgYmUgZWFzaWx5IGFuZCBmcmVlbHkgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIHRoZSBMaWNlbnNlZSBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSBhbmQvb3IgY29tbXVuaWNhdGUgdGhlIFdvcmsuXG5cbiAgIExlZ2FsIFByb3RlY3Rpb246IFRoaXMgTGljZW5jZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIG5hbWVzIG9mIHRoZSBMaWNlbnNvciwgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGNvcHlyaWdodCBub3RpY2UuXG5cbiAgIDYuIENoYWluIG9mIEF1dGhvcnNoaXBcblxuICAgVGhlIG9yaWdpbmFsIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiB0aGUgT3JpZ2luYWwgV29yayBncmFudGVkIGhlcmV1bmRlciBpcyBvd25lZCBieSBoaW0vaGVyIG9yIGxpY2Vuc2VkIHRvIGhpbS9oZXIgYW5kIHRoYXQgaGUvc2hlIGhhcyB0aGUgcG93ZXIgYW5kIGF1dGhvcml0eSB0byBncmFudCB0aGUgTGljZW5jZS5cblxuICAgRWFjaCBDb250cmlidXRvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gdGhlIG1vZGlmaWNhdGlvbnMgaGUvc2hlIGJyaW5ncyB0byB0aGUgV29yayBhcmUgb3duZWQgYnkgaGltL2hlciBvciBsaWNlbnNlZCB0byBoaW0vaGVyIGFuZCB0aGF0IGhlL3NoZSBoYXMgdGhlIHBvd2VyIGFuZCBhdXRob3JpdHkgdG8gZ3JhbnQgdGhlIExpY2VuY2UuXG5cbiAgIEVhY2ggdGltZSBZb3UgYWNjZXB0IHRoZSBMaWNlbmNlLCB0aGUgb3JpZ2luYWwgTGljZW5zb3IgYW5kIHN1YnNlcXVlbnQgQ29udHJpYnV0b3JzIGdyYW50IFlvdSBhIGxpY2VuY2UgdG8gdGhlaXIgY29udHJpYnV0aW9ucyB0byB0aGUgV29yaywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZS5cblxuICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eVxuXG4gICBUaGUgV29yayBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIHdoaWNoIGlzIGNvbnRpbnVvdXNseSBpbXByb3ZlZCBieSBudW1lcm91cyBjb250cmlidXRvcnMuIEl0IGlzIG5vdCBhIGZpbmlzaGVkIHdvcmsgYW5kIG1heSB0aGVyZWZvcmUgY29udGFpbiBkZWZlY3RzIG9yIFwiYnVnc1wiIGluaGVyZW50IHRvIHRoaXMgdHlwZSBvZiBzb2Z0d2FyZSBkZXZlbG9wbWVudC5cblxuICAgRm9yIHRoZSBhYm92ZSByZWFzb24sIHRoZSBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSBMaWNlbmNlIG9uIGFuIFwiYXMgaXNcIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50aWVzIG9mIGFueSBraW5kIGNvbmNlcm5pbmcgdGhlIFdvcmssIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgYWJzZW5jZSBvZiBkZWZlY3RzIG9yIGVycm9ycywgYWNjdXJhY3ksIG5vbi1pbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCBhcyBzdGF0ZWQgaW4gQXJ0aWNsZSA2IG9mIHRoaXMgTGljZW5jZS5cblxuICAgVGhpcyBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGlzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoZSBMaWNlbmNlIGFuZCBhIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50IG9mIGFueSByaWdodHMgdG8gdGhlIFdvcmsuXG5cbiAgIDguIERpc2NsYWltZXIgb2YgTGlhYmlsaXR5XG5cbiAgIEV4Y2VwdCBpbiB0aGUgY2FzZXMgb2Ygd2lsZnVsIG1pc2NvbmR1Y3Qgb3IgZGFtYWdlcyBkaXJlY3RseSBjYXVzZWQgdG8gbmF0dXJhbCBwZXJzb25zLCB0aGUgTGljZW5zb3Igd2lsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueSBkaXJlY3Qgb3IgaW5kaXJlY3QsIG1hdGVyaWFsIG9yIG1vcmFsLCBkYW1hZ2VzIG9mIGFueSBraW5kLCBhcmlzaW5nIG91dCBvZiB0aGUgTGljZW5jZSBvciBvZiB0aGUgdXNlIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBsb3NzIG9mIGRhdGEgb3IgYW55IGNvbW1lcmNpYWwgZGFtYWdlLCBldmVuIGlmIHRoZSBMaWNlbnNvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4gSG93ZXZlciwgdGhlIExpY2Vuc29yIHdpbGwgYmUgbGlhYmxlIHVuZGVyIHN0YXR1dG9yeSBwcm9kdWN0IGxpYWJpbGl0eSBsYXdzIGFzIGZhciBzdWNoIGxhd3MgYXBwbHkgdG8gdGhlIFdvcmsuXG5cbiAgIDkuIEFkZGl0aW9uYWwgYWdyZWVtZW50c1xuXG4gICBXaGlsZSBkaXN0cmlidXRpbmcgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcywgWW91IG1heSBjaG9vc2UgdG8gY29uY2x1ZGUgYW4gYWRkaXRpb25hbCBhZ3JlZW1lbnQgdG8gb2ZmZXIsIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igc2VydmljZXMgY29uc2lzdGVudCB3aXRoIHRoaXMgTGljZW5jZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkgb24geW91ciBvd24gYmVoYWxmIGFuZCBvbiB5b3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYgb2YgdGhlIG9yaWdpbmFsIExpY2Vuc29yIG9yIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHRoZSBmYWN0IFlvdSBoYXZlIGFjY2VwdGVkIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LlxuXG4gICAxMC4gQWNjZXB0YW5jZSBvZiB0aGUgTGljZW5jZVxuXG4gICBUaGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2VuY2UgY2FuIGJlIGFjY2VwdGVkIGJ5IGNsaWNraW5nIG9uIGFuIGljb24gXCJJIGFncmVlXCIgcGxhY2VkIHVuZGVyIHRoZSBib3R0b20gb2YgYSB3aW5kb3cgZGlzcGxheWluZyB0aGUgdGV4dCBvZiB0aGlzIExpY2VuY2Ugb3IgYnkgYWZmaXJtaW5nIGNvbnNlbnQgaW4gYW55IG90aGVyIHNpbWlsYXIgd2F5LCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHJ1bGVzIG9mIGFwcGxpY2FibGUgbGF3LiBDbGlja2luZyBvbiB0aGF0IGljb24gaW5kaWNhdGVzIHlvdXIgY2xlYXIgYW5kIGlycmV2b2NhYmxlIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbmNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLlxuXG4gICBTaW1pbGFybHksIHlvdSBpcnJldm9jYWJseSBhY2NlcHQgdGhpcyBMaWNlbmNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGJ5IGV4ZXJjaXNpbmcgYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBBcnRpY2xlIDIgb2YgdGhpcyBMaWNlbmNlLCBzdWNoIGFzIHRoZSB1c2Ugb2YgdGhlIFdvcmssIHRoZSBjcmVhdGlvbiBieSBZb3Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgdGhlIERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBieSBZb3Ugb2YgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YuXG5cbiAgIDExLiBJbmZvcm1hdGlvbiB0byB0aGUgcHVibGljXG5cbiAgIEluIGNhc2Ugb2YgYW55IERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBvZiB0aGUgV29yayBieSBtZWFucyBvZiBlbGVjdHJvbmljIGNvbW11bmljYXRpb24gYnkgWW91IChmb3IgZXhhbXBsZSwgYnkgb2ZmZXJpbmcgdG8gZG93bmxvYWQgdGhlIFdvcmsgZnJvbSBhIHJlbW90ZSBsb2NhdGlvbikgdGhlIGRpc3RyaWJ1dGlvbiBjaGFubmVsIG9yIG1lZGlhIChmb3IgZXhhbXBsZSwgYSB3ZWJzaXRlKSBtdXN0IGF0IGxlYXN0IHByb3ZpZGUgdG8gdGhlIHB1YmxpYyB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhYmxlIGxhdyByZWdhcmRpbmcgdGhlIExpY2Vuc29yLCB0aGUgTGljZW5jZSBhbmQgdGhlIHdheSBpdCBtYXkgYmUgYWNjZXNzaWJsZSwgY29uY2x1ZGVkLCBzdG9yZWQgYW5kIHJlcHJvZHVjZWQgYnkgdGhlIExpY2Vuc2VlLlxuXG4gICAxMi4gVGVybWluYXRpb24gb2YgdGhlIExpY2VuY2VcblxuICAgVGhlIExpY2VuY2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgdGhlIExpY2Vuc2VlIG9mIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS4gU3VjaCBhIHRlcm1pbmF0aW9uIHdpbGwgbm90IHRlcm1pbmF0ZSB0aGUgbGljZW5jZXMgb2YgYW55IHBlcnNvbiB3aG8gaGFzIHJlY2VpdmVkIHRoZSBXb3JrIGZyb20gdGhlIExpY2Vuc2VlIHVuZGVyIHRoZSBMaWNlbmNlLCBwcm92aWRlZCBzdWNoIHBlcnNvbnMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbmNlLlxuXG4gICAxMy4gTWlzY2VsbGFuZW91c1xuXG4gICBXaXRob3V0IHByZWp1ZGljZSBvZiBBcnRpY2xlIDkgYWJvdmUsIHRoZSBMaWNlbmNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBQYXJ0aWVzIGFzIHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmV1bmRlci5cblxuICAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5jZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIHRoaXMgd2lsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgTGljZW5jZSBhcyBhIHdob2xlLiBTdWNoIHByb3Zpc2lvbiB3aWxsIGJlIGNvbnN0cnVlZCBhbmQvb3IgcmVmb3JtZWQgc28gYXMgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICBUaGUgRXVyb3BlYW4gQ29tbWlzc2lvbiBtYXkgcHVibGlzaCBvdGhlciBsaW5ndWlzdGljIHZlcnNpb25zIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbmNlLCBzbyBmYXIgdGhpcyBpcyByZXF1aXJlZCBhbmQgcmVhc29uYWJsZSwgd2l0aG91dCByZWR1Y2luZyB0aGUgc2NvcGUgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoZSBMaWNlbmNlLiBOZXcgdmVyc2lvbnMgb2YgdGhlIExpY2VuY2Ugd2lsbCBiZSBwdWJsaXNoZWQgd2l0aCBhIHVuaXF1ZSB2ZXJzaW9uIG51bWJlci5cblxuICAgQWxsIGxpbmd1aXN0aWMgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbmNlLCBhcHByb3ZlZCBieSB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgaGF2ZSBpZGVudGljYWwgdmFsdWUuIFBhcnRpZXMgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBsaW5ndWlzdGljIHZlcnNpb24gb2YgdGhlaXIgY2hvaWNlLlxuXG4gICAxNC4gSnVyaXNkaWN0aW9uXG5cbiAgIEFueSBsaXRpZ2F0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFyaXNpbmcgYmV0d2VlbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgYXMgYSBMaWNlbnNvciwgYW5kIGFueSBMaWNlbnNlZSwgd2lsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIENvdXJ0IG9mIEp1c3RpY2Ugb2YgdGhlIEV1cm9wZWFuIENvbW11bml0aWVzLCBhcyBsYWlkIGRvd24gaW4gYXJ0aWNsZSAyMzggb2YgdGhlIFRyZWF0eSBlc3RhYmxpc2hpbmcgdGhlIEV1cm9wZWFuIENvbW11bml0eS5cblxuICAgQW55IGxpdGlnYXRpb24gYXJpc2luZyBiZXR3ZWVuIFBhcnRpZXMsIG90aGVyIHRoYW4gdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGFuZCByZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvbXBldGVudCBjb3VydCB3aGVyZSB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcy5cblxuICAgMTUuIEFwcGxpY2FibGUgTGF3XG5cbiAgIFRoaXMgTGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3IG9mIHRoZSBFdXJvcGVhbiBVbmlvbiBjb3VudHJ5IHdoZXJlIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGhhcyBoaXMgcmVnaXN0ZXJlZCBvZmZpY2UuXG5cbiAgIFRoaXMgbGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgQmVsZ2lhbiBsYXcgaWY6XG5cbiAgICAgIC0gYSBsaXRpZ2F0aW9uIGFyaXNlcyBiZXR3ZWVuIHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBhcyBhIExpY2Vuc29yLCBhbmQgYW55IExpY2Vuc2VlO1xuXG4gICAgICAtIHRoZSBMaWNlbnNvciwgb3RoZXIgdGhhbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgaGFzIG5vIHJlc2lkZW5jZSBvciByZWdpc3RlcmVkIG9mZmljZSBpbnNpZGUgYSBFdXJvcGVhbiBVbmlvbiBjb3VudHJ5LlxuXG5BcHBlbmRpeFxuXG5cIkNvbXBhdGlibGUgTGljZW5jZXNcIiBhY2NvcmRpbmcgdG8gYXJ0aWNsZSA1IEVVUEwgYXJlOlxuXG4gICAtIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHTlUgR1BMKSB2LiAyXG5cbiAgIC0gT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wpIHYuIDIuMSwgdi4gMy4wXG5cbiAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYuIDEuMFxuXG4gICAtIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMS4wXG5cbiAgIC0gQ2VjaWxsIHYuIDIuMCJdLCJsaWNlbnNlSWRzIjpbIkVVUEwtMS4xIl0sImtleXdvcmRzIjpbIjEgZXVwbCBjIiwiMSBvciBoYXMiLCJsaW5ndWlzdGljIHZlcnNpb25zIGFuZCIsInZlcnNpb25zIGFuZCBvciIsInB1YmxpYyBsaWNlbnNlIGdudSIsImxpY2Vuc2UgZ251IGdwbCIsImdudSBncGwgdiIsImxpY2VuY2UgdiAxIDEiLCJ2IDEgMSBldXBsIiwiMSAxIGV1cGwgYyIsIjEgZXVwbCBjIHRoZSIsInYgMSAxIG9yIiwiMSAxIG9yIGhhcyIsIjEgb3IgaGFzIGV4cHJlc3NlZCIsIm90aGVyIGxpbmd1aXN0aWMgdmVyc2lvbnMgYW5kIiwibGluZ3Vpc3RpYyB2ZXJzaW9ucyBhbmQgb3IiLCJ2ZXJzaW9ucyBhbmQgb3IgbmV3IiwiY2hvaWNlIDE0IGp1cmlzZGljdGlvbiBhbnkiLCJnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGdudSIsInB1YmxpYyBsaWNlbnNlIGdudSBncGwiLCJsaWNlbnNlIGdudSBncGwgdiIsImdudSBncGwgdiAyIiwicHVibGljIGxpY2VuY2UgdiAxIDEiLCJsaWNlbmNlIHYgMSAxIGV1cGwiLCJ2IDEgMSBldXBsIGMiLCIxIDEgZXVwbCBjIHRoZSIsIjEgZXVwbCBjIHRoZSBldXJvcGVhbiIsInRoZSBldXBsIHYgMSAxIiwiZXVwbCB2IDEgMSBvciIsInYgMSAxIG9yIGhhcyIsIjEgMSBvciBoYXMgZXhwcmVzc2VkIiwiMSBvciBoYXMgZXhwcmVzc2VkIGJ5IiwidmVyc2lvbiBvZiB0aGUgbGljZW5jZSB0aGUiLCJ0aGUgbGljZW5jZSB0aGUgbGljZW5zZWUgYmVjb21pbmciLCJwdWJsaXNoIG90aGVyIGxpbmd1aXN0aWMgdmVyc2lvbnMgYW5kIiwib3RoZXIgbGluZ3Vpc3RpYyB2ZXJzaW9ucyBhbmQgb3IiLCJsaW5ndWlzdGljIHZlcnNpb25zIGFuZCBvciBuZXciLCJ2ZXJzaW9ucyBhbmQgb3IgbmV3IHZlcnNpb25zIiwidGhlaXIgY2hvaWNlIDE0IGp1cmlzZGljdGlvbiBhbnkiLCJjaG9pY2UgMTQganVyaXNkaWN0aW9uIGFueSBsaXRpZ2F0aW9uIiwiZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZ251IiwiZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBnbnUgZ3BsIiwicHVibGljIGxpY2Vuc2UgZ251IGdwbCB2IiwibGljZW5zZSBnbnUgZ3BsIHYgMiIsImdudSBncGwgdiAyIG9wZW4iXX0seyJsaWNlbnNlVGV4dHMiOlsiRXVyb3BlYW4gVW5pb24gUHVibGljIExpY2VuY2Ugdi4gMS4yXG5cbkVVUEwgwqkgdGhlIEV1cm9wZWFuIFVuaW9uIDIwMDcsIDIwMTZcblxuVGhpcyBFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5jZSAodGhlICdFVVBMJykgYXBwbGllcyB0byB0aGUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgd2hpY2ggaXMgcHJvdmlkZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZS4gQW55IHVzZSBvZiB0aGUgV29yaywgb3RoZXIgdGhhbiBhcyBhdXRob3Jpc2VkIHVuZGVyIHRoaXMgTGljZW5jZSBpcyBwcm9oaWJpdGVkICh0byB0aGUgZXh0ZW50IHN1Y2ggdXNlIGlzIGNvdmVyZWQgYnkgYSByaWdodCBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgV29yaykuXG5cblRoZSBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2Ugd2hlbiB0aGUgTGljZW5zb3IgKGFzIGRlZmluZWQgYmVsb3cpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgV29yazpcblxuICAgXG5cbiAgIExpY2Vuc2VkIHVuZGVyIHRoZSBFVVBMXG5cbiAgIFxuXG4gICBvciBoYXMgZXhwcmVzc2VkIGJ5IGFueSBvdGhlciBtZWFucyBoaXMgd2lsbGluZ25lc3MgdG8gbGljZW5zZSB1bmRlciB0aGUgRVVQTC5cblxuICAgMS4gRGVmaW5pdGlvbnNcblxuICAgSW4gdGhpcyBMaWNlbmNlLCB0aGUgZm9sbG93aW5nIHRlcm1zIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOlxuXG4gICAgICDigJQgJ1RoZSBMaWNlbmNlJzogdGhpcyBMaWNlbmNlLlxuXG4gICAgICDigJQgJ1RoZSBPcmlnaW5hbCBXb3JrJzogdGhlIHdvcmsgb3Igc29mdHdhcmUgZGlzdHJpYnV0ZWQgb3IgY29tbXVuaWNhdGVkIGJ5IHRoZSBMaWNlbnNvciB1bmRlciB0aGlzIExpY2VuY2UsIGF2YWlsYWJsZSBhcyBTb3VyY2UgQ29kZSBhbmQgYWxzbyBhcyBFeGVjdXRhYmxlIENvZGUgYXMgdGhlIGNhc2UgbWF5IGJlLlxuXG4gICAgICDigJQgJ0Rlcml2YXRpdmUgV29ya3MnOiB0aGUgd29ya3Mgb3Igc29mdHdhcmUgdGhhdCBjb3VsZCBiZSBjcmVhdGVkIGJ5IHRoZSBMaWNlbnNlZSwgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciBtb2RpZmljYXRpb25zIHRoZXJlb2YuIFRoaXMgTGljZW5jZSBkb2VzIG5vdCBkZWZpbmUgdGhlIGV4dGVudCBvZiBtb2RpZmljYXRpb24gb3IgZGVwZW5kZW5jZSBvbiB0aGUgT3JpZ2luYWwgV29yayByZXF1aXJlZCBpbiBvcmRlciB0byBjbGFzc2lmeSBhIHdvcmsgYXMgYSBEZXJpdmF0aXZlIFdvcms7IHRoaXMgZXh0ZW50IGlzIGRldGVybWluZWQgYnkgY29weXJpZ2h0IGxhdyBhcHBsaWNhYmxlIGluIHRoZSBjb3VudHJ5IG1lbnRpb25lZCBpbiBBcnRpY2xlIDE1LlxuXG4gICAgICDigJQgJ1RoZSBXb3JrJzogdGhlIE9yaWdpbmFsIFdvcmsgb3IgaXRzIERlcml2YXRpdmUgV29ya3MuXG5cbiAgICAgIOKAlCAnVGhlIFNvdXJjZSBDb2RlJzogdGhlIGh1bWFuLXJlYWRhYmxlIGZvcm0gb2YgdGhlIFdvcmsgd2hpY2ggaXMgdGhlIG1vc3QgY29udmVuaWVudCBmb3IgcGVvcGxlIHRvIHN0dWR5IGFuZCBtb2RpZnkuXG5cbiAgICAgIOKAlCAnVGhlIEV4ZWN1dGFibGUgQ29kZSc6IGFueSBjb2RlIHdoaWNoIGhhcyBnZW5lcmFsbHkgYmVlbiBjb21waWxlZCBhbmQgd2hpY2ggaXMgbWVhbnQgdG8gYmUgaW50ZXJwcmV0ZWQgYnkgYSBjb21wdXRlciBhcyBhIHByb2dyYW0uXG5cbiAgICAgIOKAlCAnVGhlIExpY2Vuc29yJzogdGhlIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHRoYXQgZGlzdHJpYnV0ZXMgb3IgY29tbXVuaWNhdGVzIHRoZSBXb3JrIHVuZGVyIHRoZSBMaWNlbmNlLlxuXG4gICAgICDigJQgJ0NvbnRyaWJ1dG9yKHMpJzogYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBtb2RpZmllcyB0aGUgV29yayB1bmRlciB0aGUgTGljZW5jZSwgb3Igb3RoZXJ3aXNlIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBhIERlcml2YXRpdmUgV29yay5cblxuICAgICAg4oCUICdUaGUgTGljZW5zZWUnIG9yICdZb3UnOiBhbnkgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gd2hvIG1ha2VzIGFueSB1c2FnZSBvZiB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuXG5cbiAgICAgIOKAlCAnRGlzdHJpYnV0aW9uJyBvciAnQ29tbXVuaWNhdGlvbic6IGFueSBhY3Qgb2Ygc2VsbGluZywgZ2l2aW5nLCBsZW5kaW5nLCByZW50aW5nLCBkaXN0cmlidXRpbmcsIGNvbW11bmljYXRpbmcsIHRyYW5zbWl0dGluZywgb3Igb3RoZXJ3aXNlIG1ha2luZyBhdmFpbGFibGUsIG9ubGluZSBvciBvZmZsaW5lLCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgcHJvdmlkaW5nIGFjY2VzcyB0byBpdHMgZXNzZW50aWFsIGZ1bmN0aW9uYWxpdGllcyBhdCB0aGUgZGlzcG9zYWwgb2YgYW55IG90aGVyIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uLlxuXG4gICAyLiBTY29wZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgdGhlIExpY2VuY2VcblxuICAgVGhlIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5jZSB0byBkbyB0aGUgZm9sbG93aW5nLCBmb3IgdGhlIGR1cmF0aW9uIG9mIGNvcHlyaWdodCB2ZXN0ZWQgaW4gdGhlIE9yaWdpbmFsIFdvcms6XG5cbiAgICAgIOKAlCB1c2UgdGhlIFdvcmsgaW4gYW55IGNpcmN1bXN0YW5jZSBhbmQgZm9yIGFsbCB1c2FnZSxcblxuICAgICAg4oCUIHJlcHJvZHVjZSB0aGUgV29yayxcblxuICAgICAg4oCUIG1vZGlmeSB0aGUgV29yaywgYW5kIG1ha2UgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBXb3JrLFxuXG4gICAgICDigJQgY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYywgaW5jbHVkaW5nIHRoZSByaWdodCB0byBtYWtlIGF2YWlsYWJsZSBvciBkaXNwbGF5IHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mIHRvIHRoZSBwdWJsaWMgYW5kIHBlcmZvcm0gcHVibGljbHksIGFzIHRoZSBjYXNlIG1heSBiZSwgdGhlIFdvcmssXG5cbiAgICAgIOKAlCBkaXN0cmlidXRlIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLFxuXG4gICAgICDigJQgbGVuZCBhbmQgcmVudCB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZixcblxuICAgICAg4oCUIHN1YmxpY2Vuc2UgcmlnaHRzIGluIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLlxuXG4gICBUaG9zZSByaWdodHMgY2FuIGJlIGV4ZXJjaXNlZCBvbiBhbnkgbWVkaWEsIHN1cHBvcnRzIGFuZCBmb3JtYXRzLCB3aGV0aGVyIG5vdyBrbm93biBvciBsYXRlciBpbnZlbnRlZCwgYXMgZmFyIGFzIHRoZSBhcHBsaWNhYmxlIGxhdyBwZXJtaXRzIHNvLlxuXG4gICBJbiB0aGUgY291bnRyaWVzIHdoZXJlIG1vcmFsIHJpZ2h0cyBhcHBseSwgdGhlIExpY2Vuc29yIHdhaXZlcyBoaXMgcmlnaHQgdG8gZXhlcmNpc2UgaGlzIG1vcmFsIHJpZ2h0IHRvIHRoZSBleHRlbnQgYWxsb3dlZCBieSBsYXcgaW4gb3JkZXIgdG8gbWFrZSBlZmZlY3RpdmUgdGhlIGxpY2VuY2Ugb2YgdGhlIGVjb25vbWljIHJpZ2h0cyBoZXJlIGFib3ZlIGxpc3RlZC5cblxuICAgVGhlIExpY2Vuc29yIGdyYW50cyB0byB0aGUgTGljZW5zZWUgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIHVzYWdlIHJpZ2h0cyB0byBhbnkgcGF0ZW50cyBoZWxkIGJ5IHRoZSBMaWNlbnNvciwgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSB1c2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIG9uIHRoZSBXb3JrIHVuZGVyIHRoaXMgTGljZW5jZS5cblxuICAgMy4gQ29tbXVuaWNhdGlvbiBvZiB0aGUgU291cmNlIENvZGVcblxuICAgVGhlIExpY2Vuc29yIG1heSBwcm92aWRlIHRoZSBXb3JrIGVpdGhlciBpbiBpdHMgU291cmNlIENvZGUgZm9ybSwgb3IgYXMgRXhlY3V0YWJsZSBDb2RlLiBJZiB0aGUgV29yayBpcyBwcm92aWRlZCBhcyBFeGVjdXRhYmxlIENvZGUsIHRoZSBMaWNlbnNvciBwcm92aWRlcyBpbiBhZGRpdGlvbiBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFdvcmsgdGhhdCB0aGUgTGljZW5zb3IgZGlzdHJpYnV0ZXMgb3IgaW5kaWNhdGVzLCBpbiBhIG5vdGljZSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgYXR0YWNoZWQgdG8gdGhlIFdvcmssIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGUgU291cmNlIENvZGUgaXMgZWFzaWx5IGFuZCBmcmVlbHkgYWNjZXNzaWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgdGhlIFdvcmsuXG5cbiAgIDQuIExpbWl0YXRpb25zIG9uIGNvcHlyaWdodFxuXG4gICBOb3RoaW5nIGluIHRoaXMgTGljZW5jZSBpcyBpbnRlbmRlZCB0byBkZXByaXZlIHRoZSBMaWNlbnNlZSBvZiB0aGUgYmVuZWZpdHMgZnJvbSBhbnkgZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIHJpZ2h0cyBvd25lcnMgaW4gdGhlIFdvcmssIG9mIHRoZSBleGhhdXN0aW9uIG9mIHRob3NlIHJpZ2h0cyBvciBvZiBvdGhlciBhcHBsaWNhYmxlIGxpbWl0YXRpb25zIHRoZXJldG8uXG5cbiAgIDUuIE9ibGlnYXRpb25zIG9mIHRoZSBMaWNlbnNlZVxuXG4gICBUaGUgZ3JhbnQgb2YgdGhlIHJpZ2h0cyBtZW50aW9uZWQgYWJvdmUgaXMgc3ViamVjdCB0byBzb21lIHJlc3RyaWN0aW9ucyBhbmQgb2JsaWdhdGlvbnMgaW1wb3NlZCBvbiB0aGUgTGljZW5zZWUuIFRob3NlIG9ibGlnYXRpb25zIGFyZSB0aGUgZm9sbG93aW5nOlxuXG4gICBBdHRyaWJ1dGlvbiByaWdodDogVGhlIExpY2Vuc2VlIHNoYWxsIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmtzIG5vdGljZXMgYW5kIGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhlIExpY2VuY2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFRoZSBMaWNlbnNlZSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHN1Y2ggbm90aWNlcyBhbmQgYSBjb3B5IG9mIHRoZSBMaWNlbmNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBoZS9zaGUgZGlzdHJpYnV0ZXMgb3IgY29tbXVuaWNhdGVzLiBUaGUgTGljZW5zZWUgbXVzdCBjYXVzZSBhbnkgRGVyaXZhdGl2ZSBXb3JrIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGUgV29yayBoYXMgYmVlbiBtb2RpZmllZCBhbmQgdGhlIGRhdGUgb2YgbW9kaWZpY2F0aW9uLlxuXG4gICBDb3B5bGVmdCBjbGF1c2U6IElmIHRoZSBMaWNlbnNlZSBkaXN0cmlidXRlcyBvciBjb21tdW5pY2F0ZXMgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrcyBvciBEZXJpdmF0aXZlIFdvcmtzLCB0aGlzIERpc3RyaWJ1dGlvbiBvciBDb21tdW5pY2F0aW9uIHdpbGwgYmUgZG9uZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlIG9yIG9mIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2VuY2UgdW5sZXNzIHRoZSBPcmlnaW5hbCBXb3JrIGlzIGV4cHJlc3NseSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoaXMgdmVyc2lvbiBvZiB0aGUgTGljZW5jZSDigJQgZm9yIGV4YW1wbGUgYnkgY29tbXVuaWNhdGluZyAnRVVQTCB2LiAxLjIgb25seScuIFRoZSBMaWNlbnNlZSAoYmVjb21pbmcgTGljZW5zb3IpIGNhbm5vdCBvZmZlciBvciBpbXBvc2UgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvbiB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuXG5cbiAgIENvbXBhdGliaWxpdHkgY2xhdXNlOiBJZiB0aGUgTGljZW5zZWUgRGlzdHJpYnV0ZXMgb3IgQ29tbXVuaWNhdGVzIERlcml2YXRpdmUgV29ya3Mgb3IgY29waWVzIHRoZXJlb2YgYmFzZWQgdXBvbiBib3RoIHRoZSBXb3JrIGFuZCBhbm90aGVyIHdvcmsgbGljZW5zZWQgdW5kZXIgYSBDb21wYXRpYmxlIExpY2VuY2UsIHRoaXMgRGlzdHJpYnV0aW9uIG9yIENvbW11bmljYXRpb24gY2FuIGJlIGRvbmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQ29tcGF0aWJsZSBMaWNlbmNlLiBGb3IgdGhlIHNha2Ugb2YgdGhpcyBjbGF1c2UsICdDb21wYXRpYmxlIExpY2VuY2UnIHJlZmVycyB0byB0aGUgbGljZW5jZXMgbGlzdGVkIGluIHRoZSBhcHBlbmRpeCBhdHRhY2hlZCB0byB0aGlzIExpY2VuY2UuIFNob3VsZCB0aGUgTGljZW5zZWUncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGUgQ29tcGF0aWJsZSBMaWNlbmNlIGNvbmZsaWN0IHdpdGggaGlzL2hlciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2VuY2UsIHRoZSBvYmxpZ2F0aW9ucyBvZiB0aGUgQ29tcGF0aWJsZSBMaWNlbmNlIHNoYWxsIHByZXZhaWwuXG5cbiAgIFByb3Zpc2lvbiBvZiBTb3VyY2UgQ29kZTogV2hlbiBkaXN0cmlidXRpbmcgb3IgY29tbXVuaWNhdGluZyBjb3BpZXMgb2YgdGhlIFdvcmssIHRoZSBMaWNlbnNlZSB3aWxsIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9yIGluZGljYXRlIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIFNvdXJjZSB3aWxsIGJlIGVhc2lseSBhbmQgZnJlZWx5IGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgTGljZW5zZWUgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgdGhlIFdvcmsuXG5cbiAgIExlZ2FsIFByb3RlY3Rpb246IFRoaXMgTGljZW5jZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIG5hbWVzIG9mIHRoZSBMaWNlbnNvciwgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGNvcHlyaWdodCBub3RpY2UuXG5cbiAgIDYuIENoYWluIG9mIEF1dGhvcnNoaXBcblxuICAgVGhlIG9yaWdpbmFsIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiB0aGUgT3JpZ2luYWwgV29yayBncmFudGVkIGhlcmV1bmRlciBpcyBvd25lZCBieSBoaW0vaGVyIG9yIGxpY2Vuc2VkIHRvIGhpbS9oZXIgYW5kIHRoYXQgaGUvc2hlIGhhcyB0aGUgcG93ZXIgYW5kIGF1dGhvcml0eSB0byBncmFudCB0aGUgTGljZW5jZS5cblxuICAgRWFjaCBDb250cmlidXRvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gdGhlIG1vZGlmaWNhdGlvbnMgaGUvc2hlIGJyaW5ncyB0byB0aGUgV29yayBhcmUgb3duZWQgYnkgaGltL2hlciBvciBsaWNlbnNlZCB0byBoaW0vaGVyIGFuZCB0aGF0IGhlL3NoZSBoYXMgdGhlIHBvd2VyIGFuZCBhdXRob3JpdHkgdG8gZ3JhbnQgdGhlIExpY2VuY2UuXG5cbiAgIEVhY2ggdGltZSBZb3UgYWNjZXB0IHRoZSBMaWNlbmNlLCB0aGUgb3JpZ2luYWwgTGljZW5zb3IgYW5kIHN1YnNlcXVlbnQgQ29udHJpYnV0b3JzIGdyYW50IFlvdSBhIGxpY2VuY2UgdG8gdGhlaXIgY29udHJpYnV0aW9ucyB0byB0aGUgV29yaywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZS5cblxuICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eVxuXG4gICBUaGUgV29yayBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIHdoaWNoIGlzIGNvbnRpbnVvdXNseSBpbXByb3ZlZCBieSBudW1lcm91cyBDb250cmlidXRvcnMuIEl0IGlzIG5vdCBhIGZpbmlzaGVkIHdvcmsgYW5kIG1heSB0aGVyZWZvcmUgY29udGFpbiBkZWZlY3RzIG9yICdidWdzJyBpbmhlcmVudCB0byB0aGlzIHR5cGUgb2YgZGV2ZWxvcG1lbnQuXG5cbiAgIEZvciB0aGUgYWJvdmUgcmVhc29uLCB0aGUgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGUgTGljZW5jZSBvbiBhbiAnYXMgaXMnIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnRpZXMgb2YgYW55IGtpbmQgY29uY2VybmluZyB0aGUgV29yaywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBhYnNlbmNlIG9mIGRlZmVjdHMgb3IgZXJyb3JzLCBhY2N1cmFjeSwgbm9uLWluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG90aGVyIHRoYW4gY29weXJpZ2h0IGFzIHN0YXRlZCBpbiBBcnRpY2xlIDYgb2YgdGhpcyBMaWNlbmNlLlxuXG4gICBUaGlzIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgaXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhlIExpY2VuY2UgYW5kIGEgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnQgb2YgYW55IHJpZ2h0cyB0byB0aGUgV29yay5cblxuICAgOC4gRGlzY2xhaW1lciBvZiBMaWFiaWxpdHlcblxuICAgRXhjZXB0IGluIHRoZSBjYXNlcyBvZiB3aWxmdWwgbWlzY29uZHVjdCBvciBkYW1hZ2VzIGRpcmVjdGx5IGNhdXNlZCB0byBuYXR1cmFsIHBlcnNvbnMsIHRoZSBMaWNlbnNvciB3aWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55IGRpcmVjdCBvciBpbmRpcmVjdCwgbWF0ZXJpYWwgb3IgbW9yYWwsIGRhbWFnZXMgb2YgYW55IGtpbmQsIGFyaXNpbmcgb3V0IG9mIHRoZSBMaWNlbmNlIG9yIG9mIHRoZSB1c2Ugb2YgdGhlIFdvcmssIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIGxvc3Mgb2YgZGF0YSBvciBhbnkgY29tbWVyY2lhbCBkYW1hZ2UsIGV2ZW4gaWYgdGhlIExpY2Vuc29yIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLiBIb3dldmVyLCB0aGUgTGljZW5zb3Igd2lsbCBiZSBsaWFibGUgdW5kZXIgc3RhdHV0b3J5IHByb2R1Y3QgbGlhYmlsaXR5IGxhd3MgYXMgZmFyIHN1Y2ggbGF3cyBhcHBseSB0byB0aGUgV29yay5cblxuICAgOS4gQWRkaXRpb25hbCBhZ3JlZW1lbnRzXG5cbiAgIFdoaWxlIGRpc3RyaWJ1dGluZyB0aGUgV29yaywgWW91IG1heSBjaG9vc2UgdG8gY29uY2x1ZGUgYW4gYWRkaXRpb25hbCBhZ3JlZW1lbnQsIGRlZmluaW5nIG9ibGlnYXRpb25zIG9yIHNlcnZpY2VzIGNvbnNpc3RlbnQgd2l0aCB0aGlzIExpY2VuY2UuIEhvd2V2ZXIsIGlmIGFjY2VwdGluZyBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seSBvbiB5b3VyIG93biBiZWhhbGYgYW5kIG9uIHlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZiBvZiB0aGUgb3JpZ2luYWwgTGljZW5zb3Igb3IgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0IHN1Y2ggQ29udHJpYnV0b3IgYnkgdGhlIGZhY3QgWW91IGhhdmUgYWNjZXB0ZWQgYW55IHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LlxuXG4gICAxMC4gQWNjZXB0YW5jZSBvZiB0aGUgTGljZW5jZVxuXG4gICBUaGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2VuY2UgY2FuIGJlIGFjY2VwdGVkIGJ5IGNsaWNraW5nIG9uIGFuIGljb24gJ0kgYWdyZWUnIHBsYWNlZCB1bmRlciB0aGUgYm90dG9tIG9mIGEgd2luZG93IGRpc3BsYXlpbmcgdGhlIHRleHQgb2YgdGhpcyBMaWNlbmNlIG9yIGJ5IGFmZmlybWluZyBjb25zZW50IGluIGFueSBvdGhlciBzaW1pbGFyIHdheSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBydWxlcyBvZiBhcHBsaWNhYmxlIGxhdy4gQ2xpY2tpbmcgb24gdGhhdCBpY29uIGluZGljYXRlcyB5b3VyIGNsZWFyIGFuZCBpcnJldm9jYWJsZSBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5jZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgU2ltaWxhcmx5LCB5b3UgaXJyZXZvY2FibHkgYWNjZXB0IHRoaXMgTGljZW5jZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBieSBleGVyY2lzaW5nIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgQXJ0aWNsZSAyIG9mIHRoaXMgTGljZW5jZSwgc3VjaCBhcyB0aGUgdXNlIG9mIHRoZSBXb3JrLCB0aGUgY3JlYXRpb24gYnkgWW91IG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIHRoZSBEaXN0cmlidXRpb24gb3IgQ29tbXVuaWNhdGlvbiBieSBZb3Ugb2YgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YuXG5cbiAgIDExLiBJbmZvcm1hdGlvbiB0byB0aGUgcHVibGljXG5cbiAgIEluIGNhc2Ugb2YgYW55IERpc3RyaWJ1dGlvbiBvciBDb21tdW5pY2F0aW9uIG9mIHRoZSBXb3JrIGJ5IG1lYW5zIG9mIGVsZWN0cm9uaWMgY29tbXVuaWNhdGlvbiBieSBZb3UgKGZvciBleGFtcGxlLCBieSBvZmZlcmluZyB0byBkb3dubG9hZCB0aGUgV29yayBmcm9tIGEgcmVtb3RlIGxvY2F0aW9uKSB0aGUgZGlzdHJpYnV0aW9uIGNoYW5uZWwgb3IgbWVkaWEgKGZvciBleGFtcGxlLCBhIHdlYnNpdGUpIG11c3QgYXQgbGVhc3QgcHJvdmlkZSB0byB0aGUgcHVibGljIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbGF3IHJlZ2FyZGluZyB0aGUgTGljZW5zb3IsIHRoZSBMaWNlbmNlIGFuZCB0aGUgd2F5IGl0IG1heSBiZSBhY2Nlc3NpYmxlLCBjb25jbHVkZWQsIHN0b3JlZCBhbmQgcmVwcm9kdWNlZCBieSB0aGUgTGljZW5zZWUuXG5cbiAgIDEyLiBUZXJtaW5hdGlvbiBvZiB0aGUgTGljZW5jZVxuXG4gICBUaGUgTGljZW5jZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSB0aGUgTGljZW5zZWUgb2YgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLlxuXG4gICBTdWNoIGEgdGVybWluYXRpb24gd2lsbCBub3QgdGVybWluYXRlIHRoZSBsaWNlbmNlcyBvZiBhbnkgcGVyc29uIHdobyBoYXMgcmVjZWl2ZWQgdGhlIFdvcmsgZnJvbSB0aGUgTGljZW5zZWUgdW5kZXIgdGhlIExpY2VuY2UsIHByb3ZpZGVkIHN1Y2ggcGVyc29ucyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhlIExpY2VuY2UuXG5cbiAgIDEzLiBNaXNjZWxsYW5lb3VzXG5cbiAgIFdpdGhvdXQgcHJlanVkaWNlIG9mIEFydGljbGUgOSBhYm92ZSwgdGhlIExpY2VuY2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGJldHdlZW4gdGhlIFBhcnRpZXMgYXMgdG8gdGhlIFdvcmsuXG5cbiAgIElmIGFueSBwcm92aXNpb24gb2YgdGhlIExpY2VuY2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCB0aGlzIHdpbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIExpY2VuY2UgYXMgYSB3aG9sZS4gU3VjaCBwcm92aXNpb24gd2lsbCBiZSBjb25zdHJ1ZWQgb3IgcmVmb3JtZWQgc28gYXMgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICBUaGUgRXVyb3BlYW4gQ29tbWlzc2lvbiBtYXkgcHVibGlzaCBvdGhlciBsaW5ndWlzdGljIHZlcnNpb25zIG9yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2VuY2Ugb3IgdXBkYXRlZCB2ZXJzaW9ucyBvZiB0aGUgQXBwZW5kaXgsIHNvIGZhciB0aGlzIGlzIHJlcXVpcmVkIGFuZCByZWFzb25hYmxlLCB3aXRob3V0IHJlZHVjaW5nIHRoZSBzY29wZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgdGhlIExpY2VuY2UuIE5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5jZSB3aWxsIGJlIHB1Ymxpc2hlZCB3aXRoIGEgdW5pcXVlIHZlcnNpb24gbnVtYmVyLlxuXG4gICBBbGwgbGluZ3Vpc3RpYyB2ZXJzaW9ucyBvZiB0aGlzIExpY2VuY2UsIGFwcHJvdmVkIGJ5IHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBoYXZlIGlkZW50aWNhbCB2YWx1ZS4gUGFydGllcyBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGxpbmd1aXN0aWMgdmVyc2lvbiBvZiB0aGVpciBjaG9pY2UuXG5cbiAgIDE0LiBKdXJpc2RpY3Rpb25cblxuICAgV2l0aG91dCBwcmVqdWRpY2UgdG8gc3BlY2lmaWMgYWdyZWVtZW50IGJldHdlZW4gcGFydGllcyxcblxuICAgICAg4oCUIGFueSBsaXRpZ2F0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFyaXNpbmcgYmV0d2VlbiB0aGUgRXVyb3BlYW4gVW5pb24gaW5zdGl0dXRpb25zLCBib2RpZXMsIG9mZmljZXMgb3IgYWdlbmNpZXMsIGFzIGEgTGljZW5zb3IsIGFuZCBhbnkgTGljZW5zZWUsIHdpbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBDb3VydCBvZiBKdXN0aWNlIG9mIHRoZSBFdXJvcGVhbiBVbmlvbiwgYXMgbGFpZCBkb3duIGluIGFydGljbGUgMjcyIG9mIHRoZSBUcmVhdHkgb24gdGhlIEZ1bmN0aW9uaW5nIG9mIHRoZSBFdXJvcGVhbiBVbmlvbixcblxuICAgICAg4oCUIGFueSBsaXRpZ2F0aW9uIGFyaXNpbmcgYmV0d2VlbiBvdGhlciBwYXJ0aWVzIGFuZCByZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvbXBldGVudCBjb3VydCB3aGVyZSB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcy5cblxuICAgMTUuIEFwcGxpY2FibGUgTGF3XG5cbiAgIFdpdGhvdXQgcHJlanVkaWNlIHRvIHNwZWNpZmljIGFncmVlbWVudCBiZXR3ZWVuIHBhcnRpZXMsXG5cbiAgICAgIOKAlCB0aGlzIExpY2VuY2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhdyBvZiB0aGUgRXVyb3BlYW4gVW5pb24gTWVtYmVyIFN0YXRlIHdoZXJlIHRoZSBMaWNlbnNvciBoYXMgaGlzIHNlYXQsIHJlc2lkZXMgb3IgaGFzIGhpcyByZWdpc3RlcmVkIG9mZmljZSxcblxuICAgICAg4oCUIHRoaXMgbGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBCZWxnaWFuIGxhdyBpZiB0aGUgTGljZW5zb3IgaGFzIG5vIHNlYXQsIHJlc2lkZW5jZSBvciByZWdpc3RlcmVkIG9mZmljZSBpbnNpZGUgYSBFdXJvcGVhbiBVbmlvbiBNZW1iZXIgU3RhdGUuXG5cbkFwcGVuZGl4XG5cbidDb21wYXRpYmxlIExpY2VuY2VzJyBhY2NvcmRpbmcgdG8gQXJ0aWNsZSA1IEVVUEwgYXJlOlxuXG4gICDigJQgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdi4gMiwgdi4gM1xuXG4gICDigJQgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChBR1BMKSB2LiAzXG5cbiAgIOKAlCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCkgdi4gMi4xLCB2LiAzLjBcblxuICAg4oCUIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkgdi4gMS4wXG5cbiAgIOKAlCBDZUNJTEwgdi4gMi4wLCB2LiAyLjFcblxuICAg4oCUIE1vemlsbGEgUHVibGljIExpY2VuY2UgKE1QTCkgdi4gMlxuXG4gICDigJQgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlIChMR1BMKSB2LiAyLjEsIHYuIDNcblxuICAg4oCUIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSB2LiAzLjAgVW5wb3J0ZWQgKENDIEJZLVNBIDMuMCkgZm9yIHdvcmtzIG90aGVyIHRoYW4gc29mdHdhcmVcblxuICAg4oCUIEV1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlIChFVVBMKSB2LiAxLjEsIHYuIDEuMlxuXG4gICDigJQgUXXDqWJlYyBGcmVlIGFuZCBPcGVuLVNvdXJjZSBMaWNlbmNlIOKAlCBSZWNpcHJvY2l0eSAoTGlMaVEtUikgb3IgU3Ryb25nIFJlY2lwcm9jaXR5IChMaUxpUS1SKykuXG5cblRoZSBFdXJvcGVhbiBDb21taXNzaW9uIG1heSB1cGRhdGUgdGhpcyBBcHBlbmRpeCB0byBsYXRlciB2ZXJzaW9ucyBvZiB0aGUgYWJvdmUgbGljZW5jZXMgd2l0aG91dCBwcm9kdWNpbmcgYSBuZXcgdmVyc2lvbiBvZiB0aGUgRVVQTCwgYXMgbG9uZyBhcyB0aGV5IHByb3ZpZGUgdGhlIHJpZ2h0cyBncmFudGVkIGluIEFydGljbGUgMiBvZiB0aGlzIExpY2VuY2UgYW5kIHByb3RlY3QgdGhlIGNvdmVyZWQgU291cmNlIENvZGUgZnJvbSBleGNsdXNpdmUgYXBwcm9wcmlhdGlvbi5cblxuQWxsIG90aGVyIGNoYW5nZXMgb3IgYWRkaXRpb25zIHRvIHRoaXMgQXBwZW5kaXggcmVxdWlyZSB0aGUgcHJvZHVjdGlvbiBvZiBhIG5ldyBFVVBMIHZlcnNpb24uIl0sImxpY2Vuc2VJZHMiOlsiRVVQTC0xLjIiXSwia2V5d29yZHMiOlsiMSAyIGV1cGwiLCIyIGV1cGwgdGhlIiwiZXVwbCB0aGUgZXVyb3BlYW4iLCJldXJvcGVhbiB1bmlvbiAyMDA3IiwidW5pb24gMjAwNyAyMDE2IiwiMjAwNyAyMDE2IHRoaXMiLCIyMDE2IHRoaXMgZXVyb3BlYW4iLCJ0aGUgZXVwbCBvciIsImV1cGwgb3IgaGFzIiwiYW55IG90aGVyIG1lYW5zIiwib3RoZXIgbWVhbnMgaGlzIiwibWVhbnMgaGlzIHdpbGxpbmduZXNzIiwib3JpZ2luYWwgd29yayB0aGUiLCJvciBzb2Z0d2FyZSBkaXN0cmlidXRlZCIsInNvZnR3YXJlIGRpc3RyaWJ1dGVkIG9yIiwid29yayBvciBpdHMiLCJ0aGF0IGRpc3RyaWJ1dGVzIG9yIiwibGljZW5jZSBkaXN0cmlidXRpb24gb3IiLCJtYWtpbmcgYXZhaWxhYmxlIG9ubGluZSIsIm9ubGluZSBvciBvZmZsaW5lIiwib3Igb2ZmbGluZSBjb3BpZXMiLCJvZmZsaW5lIGNvcGllcyBvZiIsImNvcGllcyB0aGVyZW9mIHN1YmxpY2Vuc2UiLCJ0aGVyZW9mIHN1YmxpY2Vuc2UgcmlnaHRzIiwic3VibGljZW5zZSByaWdodHMgaW4iLCJzaGUgZGlzdHJpYnV0ZXMgb3IiLCJ3b3JrcyB0aGlzIGRpc3RyaWJ1dGlvbiIsInRoZSBsaWNlbmNlIGZvciIsImxpY2VuY2UgZm9yIGV4YW1wbGUiLCJleGFtcGxlIGJ5IGNvbW11bmljYXRpbmciLCJieSBjb21tdW5pY2F0aW5nIGV1cGwiLCJjb21tdW5pY2F0aW5nIGV1cGwgdiIsIjEgMiBvbmx5IiwiMiBvbmx5IHRoZSIsIm9ubHkgdGhlIGxpY2Vuc2VlIiwiYm90aCB0aGUgd29yayIsIndoZW4gZGlzdHJpYnV0aW5nIG9yIiwiZGlzdHJpYnV0aW5nIG9yIGNvbW11bmljYXRpbmciLCJ0eXBlIG9mIGRldmVsb3BtZW50Iiwib2YgZGV2ZWxvcG1lbnQgZm9yIiwiYWRkaXRpb25hbCBhZ3JlZW1lbnQgZGVmaW5pbmciLCJhZ3JlZW1lbnQgZGVmaW5pbmcgb2JsaWdhdGlvbnMiLCJkZWZpbmluZyBvYmxpZ2F0aW9ucyBvciIsIm9ibGlnYXRpb25zIG9yIHNlcnZpY2VzIiwibGljZW5jZSBob3dldmVyIGlmIiwiaG93ZXZlciBpZiBhY2NlcHRpbmciLCJpZiBhY2NlcHRpbmcgb2JsaWdhdGlvbnMiLCJhY2NlcHRpbmcgb2JsaWdhdGlvbnMgeW91IiwiYWNjZXB0ZWQgYW55IHdhcnJhbnR5IiwiYW55IGRpc3RyaWJ1dGlvbiBvciIsIndvcmsgaWYgYW55IiwiY29uc3RydWVkIG9yIHJlZm9ybWVkIiwibGluZ3Vpc3RpYyB2ZXJzaW9ucyBvciIsInZlcnNpb25zIG9yIG5ldyIsImxpY2VuY2Ugb3IgdXBkYXRlZCIsIm9yIHVwZGF0ZWQgdmVyc2lvbnMiLCJvZiB0aGUgYXBwZW5kaXgiLCJ0aGUgYXBwZW5kaXggc28iLCJhcHBlbmRpeCBzbyBmYXIiLCIxNCBqdXJpc2RpY3Rpb24gd2l0aG91dCIsImp1cmlzZGljdGlvbiB3aXRob3V0IHByZWp1ZGljZSIsImJldHdlZW4gcGFydGllcyBhbnkiLCJwYXJ0aWVzIGFueSBsaXRpZ2F0aW9uIiwiZXVyb3BlYW4gdW5pb24gaW5zdGl0dXRpb25zIiwidW5pb24gaW5zdGl0dXRpb25zIGJvZGllcyIsImluc3RpdHV0aW9ucyBib2RpZXMgb2ZmaWNlcyIsImJvZGllcyBvZmZpY2VzIG9yIiwib2ZmaWNlcyBvciBhZ2VuY2llcyIsIm9yIGFnZW5jaWVzIGFzIiwiYWdlbmNpZXMgYXMgYSIsImV1cm9wZWFuIHVuaW9uIGFzIiwidW5pb24gYXMgbGFpZCIsImluIGFydGljbGUgMjcyIiwiYXJ0aWNsZSAyNzIgb2YiLCIyNzIgb2YgdGhlIiwidGhlIHRyZWF0eSBvbiIsInRyZWF0eSBvbiB0aGUiLCJvbiB0aGUgZnVuY3Rpb25pbmciLCJ0aGUgZnVuY3Rpb25pbmcgb2YiLCJldXJvcGVhbiB1bmlvbiBhbnkiLCJ1bmlvbiBhbnkgbGl0aWdhdGlvbiIsImFyaXNpbmcgYmV0d2VlbiBvdGhlciIsImJldHdlZW4gb3RoZXIgcGFydGllcyIsIm90aGVyIHBhcnRpZXMgYW5kIiwicGFydGllcyBhbmQgcmVzdWx0aW5nIiwiYXBwbGljYWJsZSBsYXcgd2l0aG91dCIsImxhdyB3aXRob3V0IHByZWp1ZGljZSIsImJldHdlZW4gcGFydGllcyB0aGlzIiwicGFydGllcyB0aGlzIGxpY2VuY2UiLCJtZW1iZXIgc3RhdGUgd2hlcmUiLCJzdGF0ZSB3aGVyZSB0aGUiLCJsaWNlbnNvciBoYXMgaGlzIiwiaGFzIGhpcyBzZWF0IiwiaGlzIHNlYXQgcmVzaWRlcyIsInNlYXQgcmVzaWRlcyBvciIsImdvdmVybmVkIGJ5IGJlbGdpYW4iLCJieSBiZWxnaWFuIGxhdyIsImhhcyBubyBzZWF0Iiwibm8gc2VhdCByZXNpZGVuY2UiLCJzZWF0IHJlc2lkZW5jZSBvciIsIm1lbWJlciBzdGF0ZSBhcHBlbmRpeCIsInN0YXRlIGFwcGVuZGl4IGNvbXBhdGlibGUiLCJ2IDIgdiIsIjIgdiAzIiwidiAzIGdudSIsIjMgZ251IGFmZmVybyIsInB1YmxpYyBsaWNlbnNlIGFncGwiLCJsaWNlbnNlIGFncGwgdiIsImFncGwgdiAzIiwidiAzIG9wZW4iLCIzIG9wZW4gc29mdHdhcmUiLCIzIDAgZWNsaXBzZSIsInB1YmxpYyBsaWNlbnNlIGVwbCIsImxpY2Vuc2UgZXBsIHYiLCJlcGwgdiAxIiwiMiAwIHYiLCIwIHYgMiIsIjIgMSBtb3ppbGxhIiwiMSBtb3ppbGxhIHB1YmxpYyIsIm1vemlsbGEgcHVibGljIGxpY2VuY2UiLCJwdWJsaWMgbGljZW5jZSBtcGwiLCJsaWNlbmNlIG1wbCB2IiwibXBsIHYgMiIsInYgMiBnbnUiLCIyIGdudSBsZXNzZXIiLCJwdWJsaWMgbGljZW5jZSBsZ3BsIiwibGljZW5jZSBsZ3BsIHYiLCJsZ3BsIHYgMiIsInYgMyBjcmVhdGl2ZSIsIjMgY3JlYXRpdmUgY29tbW9ucyIsImF0dHJpYnV0aW9uIHNoYXJlYWxpa2UgdiIsInNoYXJlYWxpa2UgdiAzIiwiMCB1bnBvcnRlZCBjYyIsInVucG9ydGVkIGNjIGJ5IiwiYnkgc2EgMyIsInNhIDMgMCIsIjMgMCBmb3IiLCIwIGZvciB3b3JrcyIsImZvciB3b3JrcyBvdGhlciIsIm90aGVyIHRoYW4gc29mdHdhcmUiLCJ0aGFuIHNvZnR3YXJlIGV1cm9wZWFuIiwic29mdHdhcmUgZXVyb3BlYW4gdW5pb24iLCJwdWJsaWMgbGljZW5jZSBldXBsIiwibGljZW5jZSBldXBsIHYiLCIxIDEgdiIsIjEgdiAxIiwiMSAyIHF1IiwiMiBxdSBiZWMiLCJxdSBiZWMgZnJlZSIsImJlYyBmcmVlIGFuZCIsIm9wZW4gc291cmNlIGxpY2VuY2UiLCJzb3VyY2UgbGljZW5jZSByZWNpcHJvY2l0eSIsImxpY2VuY2UgcmVjaXByb2NpdHkgbGlsaXEiLCJsaWxpcSByIG9yIiwiciBvciBzdHJvbmciLCJvciBzdHJvbmcgcmVjaXByb2NpdHkiLCJzdHJvbmcgcmVjaXByb2NpdHkgbGlsaXEiLCJsaWxpcSByIHRoZSIsInIgdGhlIGV1cm9wZWFuIiwiY29tbWlzc2lvbiBtYXkgdXBkYXRlIiwibWF5IHVwZGF0ZSB0aGlzIiwidXBkYXRlIHRoaXMgYXBwZW5kaXgiLCJ0aGlzIGFwcGVuZGl4IHRvIiwiYXBwZW5kaXggdG8gbGF0ZXIiLCJ0byBsYXRlciB2ZXJzaW9ucyIsInRoZSBhYm92ZSBsaWNlbmNlcyIsImFib3ZlIGxpY2VuY2VzIHdpdGhvdXQiLCJsaWNlbmNlcyB3aXRob3V0IHByb2R1Y2luZyIsIndpdGhvdXQgcHJvZHVjaW5nIGEiLCJwcm9kdWNpbmcgYSBuZXciLCJvZiB0aGUgZXVwbCIsInRoZSBldXBsIGFzIiwiZXVwbCBhcyBsb25nIiwiYXMgdGhleSBwcm92aWRlIiwidGhleSBwcm92aWRlIHRoZSIsInByb3ZpZGUgdGhlIHJpZ2h0cyIsImxpY2VuY2UgYW5kIHByb3RlY3QiLCJhbmQgcHJvdGVjdCB0aGUiLCJwcm90ZWN0IHRoZSBjb3ZlcmVkIiwiY292ZXJlZCBzb3VyY2UgY29kZSIsImNvZGUgZnJvbSBleGNsdXNpdmUiLCJmcm9tIGV4Y2x1c2l2ZSBhcHByb3ByaWF0aW9uIiwiZXhjbHVzaXZlIGFwcHJvcHJpYXRpb24gYWxsIiwiYXBwcm9wcmlhdGlvbiBhbGwgb3RoZXIiLCJhbGwgb3RoZXIgY2hhbmdlcyIsIm90aGVyIGNoYW5nZXMgb3IiLCJ0byB0aGlzIGFwcGVuZGl4IiwidGhpcyBhcHBlbmRpeCByZXF1aXJlIiwiYXBwZW5kaXggcmVxdWlyZSB0aGUiLCJyZXF1aXJlIHRoZSBwcm9kdWN0aW9uIiwib2YgYSBuZXciLCJhIG5ldyBldXBsIiwibmV3IGV1cGwgdmVyc2lvbiIsImxpY2VuY2UgdiAxIDIiLCJ2IDEgMiBldXBsIiwiMSAyIGV1cGwgdGhlIiwiMiBldXBsIHRoZSBldXJvcGVhbiIsImV1cGwgdGhlIGV1cm9wZWFuIHVuaW9uIiwidGhlIGV1cm9wZWFuIHVuaW9uIDIwMDciLCJldXJvcGVhbiB1bmlvbiAyMDA3IDIwMTYiXX0seyJsaWNlbnNlVGV4dHMiOlsiRW50ZXNzYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uLiAxLjAgQ29weXJpZ2h0IChjKSAyMDAzIEVudGVzc2EsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6XG5cbiAgIFwiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIG9wZW4gc291cmNlIHNvZnR3YXJlIGRldmVsb3BlZCBieSBvcGVuU0VBTCAoaHR0cDovL3d3dy5vcGVuc2VhbC5vcmcvKS5cIlxuXG4gICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuXG5cbiAgIDQuIFRoZSBuYW1lcyBcIm9wZW5TRUFMXCIgYW5kIFwiRW50ZXNzYVwiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBlcGxAZW50ZXNzYS5jb20uXG5cbiAgIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkIFwib3BlblNFQUxcIiwgbm9yIG1heSBcIm9wZW5TRUFMXCIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIEVudGVzc2EuXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRU5URVNTQSwgTExDLCBPUEVOU0VBTCBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5UaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2Ygb3BlblNFQUwgYW5kIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIGJ5IEVudGVzc2EsIExMQywgaHR0cDovL3d3dy5lbnRlc3NhLmNvbS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIG9wZW5TRUFMLCBwbGVhc2Ugc2VlIFx1MDAzY2h0dHA6Ly93d3cub3BlbnNlYWwub3JnL1x1MDAzZS4iXSwibGljZW5zZUlkcyI6WyJFbnRlc3NhIl0sImtleXdvcmRzIjpbImVudGVzc2EgcHVibGljIGxpY2Vuc2UiLCJjIDIwMDMgZW50ZXNzYSIsIjIwMDMgZW50ZXNzYSBsbGMiLCJlbnRlc3NhIGxsYyBhbGwiLCJwcm9kdWN0IGluY2x1ZGVzIG9wZW4iLCJpbmNsdWRlcyBvcGVuIHNvdXJjZSIsInNvdXJjZSBzb2Z0d2FyZSBkZXZlbG9wZWQiLCJkZXZlbG9wZWQgYnkgb3BlbnNlYWwiLCJieSBvcGVuc2VhbCBodHRwIiwib3BlbnNlYWwgaHR0cCB3d3ciLCJvcGVuc2VhbCBvcmcgYWx0ZXJuYXRlbHkiLCJ0aGUgbmFtZXMgb3BlbnNlYWwiLCJuYW1lcyBvcGVuc2VhbCBhbmQiLCJvcGVuc2VhbCBhbmQgZW50ZXNzYSIsImFuZCBlbnRlc3NhIG11c3QiLCJlbnRlc3NhIG11c3Qgbm90IiwicGxlYXNlIGNvbnRhY3QgZXBsIiwiY29udGFjdCBlcGwgZW50ZXNzYSIsImVwbCBlbnRlc3NhIGNvbSIsImVudGVzc2EgY29tIDUiLCJjb20gNSBwcm9kdWN0cyIsImJlIGNhbGxlZCBvcGVuc2VhbCIsImNhbGxlZCBvcGVuc2VhbCBub3IiLCJvcGVuc2VhbCBub3IgbWF5Iiwibm9yIG1heSBvcGVuc2VhbCIsIm1heSBvcGVuc2VhbCBhcHBlYXIiLCJvcGVuc2VhbCBhcHBlYXIgaW4iLCJwZXJtaXNzaW9uIG9mIGVudGVzc2EiLCJvZiBlbnRlc3NhIHRoaXMiLCJlbnRlc3NhIHRoaXMgc29mdHdhcmUiLCJldmVudCBzaGFsbCBlbnRlc3NhIiwic2hhbGwgZW50ZXNzYSBsbGMiLCJlbnRlc3NhIGxsYyBvcGVuc2VhbCIsImxsYyBvcGVuc2VhbCBvciIsIm9wZW5zZWFsIG9yIGl0cyIsImJlaGFsZiBvZiBvcGVuc2VhbCIsIm9mIG9wZW5zZWFsIGFuZCIsIm9wZW5zZWFsIGFuZCB3YXMiLCJiYXNlZCBvbiBzb2Z0d2FyZSIsIm9uIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIiwic29mdHdhcmUgY29udHJpYnV0ZWQgYnkiLCJjb250cmlidXRlZCBieSBlbnRlc3NhIiwiYnkgZW50ZXNzYSBsbGMiLCJlbnRlc3NhIGxsYyBodHRwIiwibGxjIGh0dHAgd3d3IiwiaHR0cCB3d3cgZW50ZXNzYSIsInd3dyBlbnRlc3NhIGNvbSIsImVudGVzc2EgY29tIGZvciIsImNvbSBmb3IgbW9yZSIsIm9uIHRoZSBvcGVuc2VhbCIsInRoZSBvcGVuc2VhbCBwbGVhc2UiLCJvcGVuc2VhbCBwbGVhc2Ugc2VlIiwiZW50ZXNzYSBwdWJsaWMgbGljZW5zZSB2ZXJzaW9uIiwiMCBjb3B5cmlnaHQgYyAyMDAzIiwiY29weXJpZ2h0IGMgMjAwMyBlbnRlc3NhIiwiYyAyMDAzIGVudGVzc2EgbGxjIiwiMjAwMyBlbnRlc3NhIGxsYyBhbGwiLCJlbnRlc3NhIGxsYyBhbGwgcmlnaHRzIiwidGhpcyBwcm9kdWN0IGluY2x1ZGVzIG9wZW4iLCJwcm9kdWN0IGluY2x1ZGVzIG9wZW4gc291cmNlIiwiaW5jbHVkZXMgb3BlbiBzb3VyY2Ugc29mdHdhcmUiLCJvcGVuIHNvdXJjZSBzb2Z0d2FyZSBkZXZlbG9wZWQiLCJzb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcGVkIGJ5Iiwic29mdHdhcmUgZGV2ZWxvcGVkIGJ5IG9wZW5zZWFsIiwiZGV2ZWxvcGVkIGJ5IG9wZW5zZWFsIGh0dHAiLCJieSBvcGVuc2VhbCBodHRwIHd3dyIsIm9wZW5zZWFsIGh0dHAgd3d3IG9wZW5zZWFsIiwid3d3IG9wZW5zZWFsIG9yZyBhbHRlcm5hdGVseSIsIm9wZW5zZWFsIG9yZyBhbHRlcm5hdGVseSB0aGlzIiwiYXBwZWFyIDQgdGhlIG5hbWVzIiwiNCB0aGUgbmFtZXMgb3BlbnNlYWwiLCJ0aGUgbmFtZXMgb3BlbnNlYWwgYW5kIiwibmFtZXMgb3BlbnNlYWwgYW5kIGVudGVzc2EiLCJvcGVuc2VhbCBhbmQgZW50ZXNzYSBtdXN0IiwiYW5kIGVudGVzc2EgbXVzdCBub3QiLCJlbnRlc3NhIG11c3Qgbm90IGJlIiwicGVybWlzc2lvbiBwbGVhc2UgY29udGFjdCBlcGwiLCJwbGVhc2UgY29udGFjdCBlcGwgZW50ZXNzYSIsImNvbnRhY3QgZXBsIGVudGVzc2EgY29tIiwiZXBsIGVudGVzc2EgY29tIDUiLCJlbnRlc3NhIGNvbSA1IHByb2R1Y3RzIiwiY29tIDUgcHJvZHVjdHMgZGVyaXZlZCIsIm5vdCBiZSBjYWxsZWQgb3BlbnNlYWwiLCJiZSBjYWxsZWQgb3BlbnNlYWwgbm9yIiwiY2FsbGVkIG9wZW5zZWFsIG5vciBtYXkiLCJvcGVuc2VhbCBub3IgbWF5IG9wZW5zZWFsIiwibm9yIG1heSBvcGVuc2VhbCBhcHBlYXIiLCJtYXkgb3BlbnNlYWwgYXBwZWFyIGluIiwib3BlbnNlYWwgYXBwZWFyIGluIHRoZWlyIiwid3JpdHRlbiBwZXJtaXNzaW9uIG9mIGVudGVzc2EiLCJwZXJtaXNzaW9uIG9mIGVudGVzc2EgdGhpcyIsIm9mIGVudGVzc2EgdGhpcyBzb2Z0d2FyZSIsImVudGVzc2EgdGhpcyBzb2Z0d2FyZSBpcyIsIm5vIGV2ZW50IHNoYWxsIGVudGVzc2EiLCJldmVudCBzaGFsbCBlbnRlc3NhIGxsYyIsInNoYWxsIGVudGVzc2EgbGxjIG9wZW5zZWFsIiwiZW50ZXNzYSBsbGMgb3BlbnNlYWwgb3IiLCJsbGMgb3BlbnNlYWwgb3IgaXRzIiwib3BlbnNlYWwgb3IgaXRzIGNvbnRyaWJ1dG9ycyIsIm9uIGJlaGFsZiBvZiBvcGVuc2VhbCIsImJlaGFsZiBvZiBvcGVuc2VhbCBhbmQiLCJvZiBvcGVuc2VhbCBhbmQgd2FzIiwib3BlbnNlYWwgYW5kIHdhcyBvcmlnaW5hbGx5Iiwib3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSIsImJhc2VkIG9uIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIiwib24gc29mdHdhcmUgY29udHJpYnV0ZWQgYnkiLCJzb2Z0d2FyZSBjb250cmlidXRlZCBieSBlbnRlc3NhIiwiY29udHJpYnV0ZWQgYnkgZW50ZXNzYSBsbGMiLCJieSBlbnRlc3NhIGxsYyBodHRwIiwiZW50ZXNzYSBsbGMgaHR0cCB3d3ciLCJsbGMgaHR0cCB3d3cgZW50ZXNzYSIsImh0dHAgd3d3IGVudGVzc2EgY29tIiwid3d3IGVudGVzc2EgY29tIGZvciIsImVudGVzc2EgY29tIGZvciBtb3JlIiwiY29tIGZvciBtb3JlIGluZm9ybWF0aW9uIiwiaW5mb3JtYXRpb24gb24gdGhlIG9wZW5zZWFsIiwib24gdGhlIG9wZW5zZWFsIHBsZWFzZSIsInRoZSBvcGVuc2VhbCBwbGVhc2Ugc2VlIiwib3BlbnNlYWwgcGxlYXNlIHNlZSBodHRwIiwic2VlIGh0dHAgd3d3IG9wZW5zZWFsIiwiZW50ZXNzYSBwdWJsaWMgbGljZW5zZSB2ZXJzaW9uIDEiLCIxIDAgY29weXJpZ2h0IGMgMjAwMyIsIjAgY29weXJpZ2h0IGMgMjAwMyBlbnRlc3NhIiwiY29weXJpZ2h0IGMgMjAwMyBlbnRlc3NhIGxsYyIsImMgMjAwMyBlbnRlc3NhIGxsYyBhbGwiLCIyMDAzIGVudGVzc2EgbGxjIGFsbCByaWdodHMiLCJlbnRlc3NhIGxsYyBhbGwgcmlnaHRzIHJlc2VydmVkIiwiYWNrbm93bGVkZ21lbnQgdGhpcyBwcm9kdWN0IGluY2x1ZGVzIG9wZW4iLCJ0aGlzIHByb2R1Y3QgaW5jbHVkZXMgb3BlbiBzb3VyY2UiLCJwcm9kdWN0IGluY2x1ZGVzIG9wZW4gc291cmNlIHNvZnR3YXJlIiwiaW5jbHVkZXMgb3BlbiBzb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcGVkIiwib3BlbiBzb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcGVkIGJ5Iiwic291cmNlIHNvZnR3YXJlIGRldmVsb3BlZCBieSBvcGVuc2VhbCIsInNvZnR3YXJlIGRldmVsb3BlZCBieSBvcGVuc2VhbCBodHRwIiwiZGV2ZWxvcGVkIGJ5IG9wZW5zZWFsIGh0dHAgd3d3IiwiYnkgb3BlbnNlYWwgaHR0cCB3d3cgb3BlbnNlYWwiLCJvcGVuc2VhbCBodHRwIHd3dyBvcGVuc2VhbCBvcmciLCJodHRwIHd3dyBvcGVuc2VhbCBvcmcgYWx0ZXJuYXRlbHkiLCJ3d3cgb3BlbnNlYWwgb3JnIGFsdGVybmF0ZWx5IHRoaXMiLCJvcGVuc2VhbCBvcmcgYWx0ZXJuYXRlbHkgdGhpcyBhY2tub3dsZWRnbWVudCIsIm5vcm1hbGx5IGFwcGVhciA0IHRoZSBuYW1lcyIsImFwcGVhciA0IHRoZSBuYW1lcyBvcGVuc2VhbCIsIjQgdGhlIG5hbWVzIG9wZW5zZWFsIGFuZCIsInRoZSBuYW1lcyBvcGVuc2VhbCBhbmQgZW50ZXNzYSIsIm5hbWVzIG9wZW5zZWFsIGFuZCBlbnRlc3NhIG11c3QiLCJvcGVuc2VhbCBhbmQgZW50ZXNzYSBtdXN0IG5vdCIsImFuZCBlbnRlc3NhIG11c3Qgbm90IGJlIiwiZW50ZXNzYSBtdXN0IG5vdCBiZSB1c2VkIiwid3JpdHRlbiBwZXJtaXNzaW9uIHBsZWFzZSBjb250YWN0IGVwbCIsInBlcm1pc3Npb24gcGxlYXNlIGNvbnRhY3QgZXBsIGVudGVzc2EiLCJwbGVhc2UgY29udGFjdCBlcGwgZW50ZXNzYSBjb20iLCJjb250YWN0IGVwbCBlbnRlc3NhIGNvbSA1IiwiZXBsIGVudGVzc2EgY29tIDUgcHJvZHVjdHMiLCJlbnRlc3NhIGNvbSA1IHByb2R1Y3RzIGRlcml2ZWQiLCJjb20gNSBwcm9kdWN0cyBkZXJpdmVkIGZyb20iLCJtYXkgbm90IGJlIGNhbGxlZCBvcGVuc2VhbCIsIm5vdCBiZSBjYWxsZWQgb3BlbnNlYWwgbm9yIiwiYmUgY2FsbGVkIG9wZW5zZWFsIG5vciBtYXkiLCJjYWxsZWQgb3BlbnNlYWwgbm9yIG1heSBvcGVuc2VhbCIsIm9wZW5zZWFsIG5vciBtYXkgb3BlbnNlYWwgYXBwZWFyIiwibm9yIG1heSBvcGVuc2VhbCBhcHBlYXIgaW4iLCJtYXkgb3BlbnNlYWwgYXBwZWFyIGluIHRoZWlyIiwib3BlbnNlYWwgYXBwZWFyIGluIHRoZWlyIG5hbWUiLCJwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgZW50ZXNzYSIsIndyaXR0ZW4gcGVybWlzc2lvbiBvZiBlbnRlc3NhIHRoaXMiLCJwZXJtaXNzaW9uIG9mIGVudGVzc2EgdGhpcyBzb2Z0d2FyZSIsIm9mIGVudGVzc2EgdGhpcyBzb2Z0d2FyZSBpcyIsImVudGVzc2EgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCIsImluIG5vIGV2ZW50IHNoYWxsIGVudGVzc2EiLCJubyBldmVudCBzaGFsbCBlbnRlc3NhIGxsYyIsImV2ZW50IHNoYWxsIGVudGVzc2EgbGxjIG9wZW5zZWFsIiwic2hhbGwgZW50ZXNzYSBsbGMgb3BlbnNlYWwgb3IiLCJlbnRlc3NhIGxsYyBvcGVuc2VhbCBvciBpdHMiLCJsbGMgb3BlbnNlYWwgb3IgaXRzIGNvbnRyaWJ1dG9ycyIsIm9wZW5zZWFsIG9yIGl0cyBjb250cmlidXRvcnMgYmUiLCJpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2Ygb3BlbnNlYWwiLCJvbiBiZWhhbGYgb2Ygb3BlbnNlYWwgYW5kIiwiYmVoYWxmIG9mIG9wZW5zZWFsIGFuZCB3YXMiLCJvZiBvcGVuc2VhbCBhbmQgd2FzIG9yaWdpbmFsbHkiLCJvcGVuc2VhbCBhbmQgd2FzIG9yaWdpbmFsbHkgYmFzZWQiLCJ3YXMgb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSIsIm9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29udHJpYnV0ZWQiLCJiYXNlZCBvbiBzb2Z0d2FyZSBjb250cmlidXRlZCBieSIsIm9uIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIGJ5IGVudGVzc2EiLCJzb2Z0d2FyZSBjb250cmlidXRlZCBieSBlbnRlc3NhIGxsYyIsImNvbnRyaWJ1dGVkIGJ5IGVudGVzc2EgbGxjIGh0dHAiLCJieSBlbnRlc3NhIGxsYyBodHRwIHd3dyIsImVudGVzc2EgbGxjIGh0dHAgd3d3IGVudGVzc2EiLCJsbGMgaHR0cCB3d3cgZW50ZXNzYSBjb20iLCJodHRwIHd3dyBlbnRlc3NhIGNvbSBmb3IiLCJ3d3cgZW50ZXNzYSBjb20gZm9yIG1vcmUiLCJlbnRlc3NhIGNvbSBmb3IgbW9yZSBpbmZvcm1hdGlvbiIsImNvbSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiIsIm1vcmUgaW5mb3JtYXRpb24gb24gdGhlIG9wZW5zZWFsIiwiaW5mb3JtYXRpb24gb24gdGhlIG9wZW5zZWFsIHBsZWFzZSIsIm9uIHRoZSBvcGVuc2VhbCBwbGVhc2Ugc2VlIiwidGhlIG9wZW5zZWFsIHBsZWFzZSBzZWUgaHR0cCIsIm9wZW5zZWFsIHBsZWFzZSBzZWUgaHR0cCB3d3ciLCJwbGVhc2Ugc2VlIGh0dHAgd3d3IG9wZW5zZWFsIiwic2VlIGh0dHAgd3d3IG9wZW5zZWFsIG9yZyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJFUkxBTkcgUFVCTElDIExJQ0VOU0UgVmVyc2lvbiAxLjFcblxuICAgMS4gRGVmaW5pdGlvbnMuXG5cbiAgICAgIDEuMS4gYGBDb250cmlidXRvcicnIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4yLiBgYENvbnRyaWJ1dG9yIFZlcnNpb24nJyBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuXG5cbiAgICAgIDEuMy4gYGBDb3ZlcmVkIENvZGUnJyBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLlxuXG4gICAgICAxLjQuIGBgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtJycgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuXG5cbiAgICAgIDEuNS4gYGBFeGVjdXRhYmxlJycgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuXG5cbiAgICAgIDEuNi4gYGBJbml0aWFsIERldmVsb3BlcicnIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS5cblxuICAgICAgMS43LiBgYExhcmdlciBXb3JrJycgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS44LiBgYExpY2Vuc2UnJyBtZWFucyB0aGlzIGRvY3VtZW50LlxuXG4gICAgICAxLjkuIGBgTW9kaWZpY2F0aW9ucycnIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOlxuXG4gICAgICAgICBBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICAgICAgICBCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICAgICAxLjEwLiBgYE9yaWdpbmFsIENvZGUnJyBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjExLiBgYFNvdXJjZSBDb2RlJycgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3IgYSBsaXN0IG9mIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yJ3MgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLlxuXG4gICAgICAxLjEyLiBgYFlvdScnIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgYGBZb3UnJyBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgYGBjb250cm9sJycgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLlxuXG4gICAgICAyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgICAgKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZFxuXG4gICAgICAgICAoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsIChgYFV0aWxpemUnJykgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLlxuXG4gICAgICAyLjIuIENvbnRyaWJ1dG9yIEdyYW50LiBFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgICAgKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuXG5cbiAgIDMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy5cblxuICAgICAgMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLiBUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuXG5cbiAgICAgIDMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLiBBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuXG5cbiAgICAgIDMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCB5b3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICAgICAzLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzXG5cbiAgICAgICAgIChhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuIElmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgcGFydHkgY2xhaW1zIGFuIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBpbiBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgb3IgY29kZSAob3IgaXRzIHV0aWxpemF0aW9uIHVuZGVyIHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCBgYExFR0FMJycgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluIHN1Y2gga25vd2xlZGdlIGFmdGVyIFlvdSBtYWtlIFlvdXIgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIFlvdSBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBZb3UgbWFrZSBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC5cblxuICAgICAgICAgKGIpIENvbnRyaWJ1dG9yIEFQSXMuIElmIFlvdXIgTW9kaWZpY2F0aW9uIGlzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgWW91IG93biBvciBjb250cm9sIHBhdGVudHMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuXG5cbiAgICAgIDMuNS4gUmVxdWlyZWQgTm90aWNlcy4gWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUsIGFuZCB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSwgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci5cblxuICAgICAgMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4gWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCdzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuXG5cbiAgICAgIDMuNy4gTGFyZ2VyIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgIDQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4gSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuXG5cbiAgIDUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBLCBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuXG5cbiAgIDYuIENPTk5FQ1RJT04gVE8gTU9aSUxMQSBQVUJMSUMgTElDRU5TRVxuXG4gICBUaGlzIEVybGFuZyBMaWNlbnNlIGlzIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gSXQgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMS4wLlxuXG4gICA3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLlxuXG4gICBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIGBgQVMgSVMnJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLlxuXG4gICA4LiBURVJNSU5BVElPTi5cblxuICAgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLlxuXG4gICA5LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWVxuXG4gICBBbnkgdXRpbGl6YXRpb24gb2YgQ292ZXJlZCBDb2RlIHNoYWxsIG5vdCBjYXVzZSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yIHRvIGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgKG5laXRoZXIgZGlyZWN0IG5vciBpbmRpcmVjdCkuXG5cbiAgIDEwLiBNSVNDRUxMQU5FT1VTXG5cbiAgIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGJ5IGFuZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHN1YnN0YW50aXZlIGxhd3Mgb2YgU3dlZGVuLiBBbnkgZGlzcHV0ZSwgY29udHJvdmVyc3kgb3IgY2xhaW0gYXJpc2luZyBvdXQgb2Ygb3IgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlLCBvciB0aGUgYnJlYWNoLCB0ZXJtaW5hdGlvbiBvciBpbnZhbGlkaXR5IHRoZXJlb2YsIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YgU3dlZGlzaCBjb3VydHMsIHdpdGggdGhlIFN0b2NraG9sbSBDaXR5IENvdXJ0IGFzIHRoZSBmaXJzdCBpbnN0YW5jZS5cblxuRVhISUJJVCBBLlxuXG5gYFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIEVybGFuZyBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjEsICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEVybGFuZyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmUuIElmIG5vdCwgaXQgY2FuIGJlIHJldHJpZXZlZCB2aWEgdGhlIHdvcmxkIHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZXJsYW5nLm9yZy8uXG5cblNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cblRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBFcmljc3NvbiBVdHZlY2tsaW5ncyBBQi4gUG9ydGlvbnMgY3JlYXRlZCBieSBFcmljc3NvbiBhcmUgQ29weXJpZ2h0IDE5OTksIEVyaWNzc29uIFV0dmVja2xpbmdzIEFCLiBBbGwgUmlnaHRzIFJlc2VydmVkLicnIl0sImxpY2Vuc2VJZHMiOlsiRXJsUEwtMS4xIl0sImtleXdvcmRzIjpbImNvZGUgNiBjb25uZWN0aW9uIiwiNiBjb25uZWN0aW9uIHRvIiwiY29ubmVjdGlvbiB0byBtb3ppbGxhIiwidG8gbW96aWxsYSBwdWJsaWMiLCJsaWNlbnNlIHRoaXMgZXJsYW5nIiwidGhpcyBlcmxhbmcgbGljZW5zZSIsImVybGFuZyBsaWNlbnNlIGlzIiwiMSAwIGl0IiwiMCBpdCBjb250YWlucyIsIml0IGNvbnRhaW5zIHRlcm1zIiwiMCA3IGRpc2NsYWltZXIiLCJzdXJ2aXZlIDkgZGlzY2xhaW1lciIsIm9mIGxpYWJpbGl0eSBhbnkiLCJsaWFiaWxpdHkgYW55IHV0aWxpemF0aW9uIiwiYW55IHV0aWxpemF0aW9uIG9mIiwidXRpbGl6YXRpb24gb2YgY292ZXJlZCIsImNvdmVyZWQgY29kZSBzaGFsbCIsImNhdXNlIHRoZSBpbml0aWFsIiwiY29udHJpYnV0b3IgdG8gYmUiLCJ0byBiZSBsaWFibGUiLCJhbnkgZGFtYWdlcyBuZWl0aGVyIiwiZGFtYWdlcyBuZWl0aGVyIGRpcmVjdCIsIm5laXRoZXIgZGlyZWN0IG5vciIsImRpcmVjdCBub3IgaW5kaXJlY3QiLCJub3IgaW5kaXJlY3QgMTAiLCJpbmRpcmVjdCAxMCBtaXNjZWxsYW5lb3VzIiwiYW55IHByb3Zpc2lvbiBpcyIsInByb3Zpc2lvbiBpcyBoZWxkIiwiYmUgY29uc3RydWVkIGJ5IiwiY29uc3RydWVkIGJ5IGFuZCIsImFuZCBpbiBhY2NvcmRhbmNlIiwid2l0aCB0aGUgc3Vic3RhbnRpdmUiLCJ0aGUgc3Vic3RhbnRpdmUgbGF3cyIsInN1YnN0YW50aXZlIGxhd3Mgb2YiLCJsYXdzIG9mIHN3ZWRlbiIsIm9mIHN3ZWRlbiBhbnkiLCJzd2VkZW4gYW55IGRpc3B1dGUiLCJvciB0aGUgYnJlYWNoIiwidGhlIGJyZWFjaCB0ZXJtaW5hdGlvbiIsImJyZWFjaCB0ZXJtaW5hdGlvbiBvciIsInRlcm1pbmF0aW9uIG9yIGludmFsaWRpdHkiLCJvciBpbnZhbGlkaXR5IHRoZXJlb2YiLCJpbnZhbGlkaXR5IHRoZXJlb2Ygc2hhbGwiLCJqdXJpc2RpY3Rpb24gb2Ygc3dlZGlzaCIsIm9mIHN3ZWRpc2ggY291cnRzIiwic3dlZGlzaCBjb3VydHMgd2l0aCIsImNvdXJ0cyB3aXRoIHRoZSIsIndpdGggdGhlIHN0b2NraG9sbSIsInRoZSBzdG9ja2hvbG0gY2l0eSIsInN0b2NraG9sbSBjaXR5IGNvdXJ0IiwiY2l0eSBjb3VydCBhcyIsImNvdXJ0IGFzIHRoZSIsImFzIHRoZSBmaXJzdCIsInRoZSBmaXJzdCBpbnN0YW5jZSIsImZpcnN0IGluc3RhbmNlIGV4aGliaXQiLCJpbnN0YW5jZSBleGhpYml0IGEiLCJ0byB0aGUgZXJsYW5nIiwibGljZW5zZSB5b3Ugc2hvdWxkIiwib2YgdGhlIGVybGFuZyIsInNvZnR3YXJlIGlmIG5vdCIsImlmIG5vdCBpdCIsIm5vdCBpdCBjYW4iLCJjYW4gYmUgcmV0cmlldmVkIiwiYmUgcmV0cmlldmVkIHZpYSIsInJldHJpZXZlZCB2aWEgdGhlIiwidmlhIHRoZSB3b3JsZCIsIndpZGUgd2ViIGF0Iiwid2ViIGF0IGh0dHAiLCJodHRwIHd3dyBlcmxhbmciLCJ3d3cgZXJsYW5nIG9yZyIsImVybGFuZyBvcmcgc29mdHdhcmUiLCJvcmcgc29mdHdhcmUgZGlzdHJpYnV0ZWQiLCJjb2RlIGlzIGVyaWNzc29uIiwiaXMgZXJpY3Nzb24gdXR2ZWNrbGluZ3MiLCJ1dHZlY2tsaW5ncyBhYiBwb3J0aW9ucyIsImFiIHBvcnRpb25zIGNyZWF0ZWQiLCJjcmVhdGVkIGJ5IGVyaWNzc29uIiwiYnkgZXJpY3Nzb24gYXJlIiwiZXJpY3Nzb24gYXJlIGNvcHlyaWdodCIsImFyZSBjb3B5cmlnaHQgMTk5OSIsImNvcHlyaWdodCAxOTk5IGVyaWNzc29uIiwiMTk5OSBlcmljc3NvbiB1dHZlY2tsaW5ncyIsInV0dmVja2xpbmdzIGFiIGFsbCIsImFiIGFsbCByaWdodHMiLCJtb2RpZmljYXRpb25zIHdoaWNoIHlvdSBjb250cmlidXRlIiwibW9kaWZpY2F0aW9uIHdoaWNoIHlvdSBjb250cmlidXRlIiwiY292ZXJlZCBjb2RlIDYgY29ubmVjdGlvbiIsImNvZGUgNiBjb25uZWN0aW9uIHRvIiwiNiBjb25uZWN0aW9uIHRvIG1vemlsbGEiLCJjb25uZWN0aW9uIHRvIG1vemlsbGEgcHVibGljIiwidG8gbW96aWxsYSBwdWJsaWMgbGljZW5zZSIsIm1vemlsbGEgcHVibGljIGxpY2Vuc2UgdGhpcyIsInB1YmxpYyBsaWNlbnNlIHRoaXMgZXJsYW5nIiwibGljZW5zZSB0aGlzIGVybGFuZyBsaWNlbnNlIiwidGhpcyBlcmxhbmcgbGljZW5zZSBpcyIsImVybGFuZyBsaWNlbnNlIGlzIGEiLCJsaWNlbnNlIGlzIGEgZGVyaXZhdGl2ZSIsIndvcmsgb2YgdGhlIG1vemlsbGEiLCJ2ZXJzaW9uIDEgMCBpdCIsIjEgMCBpdCBjb250YWlucyIsIjAgaXQgY29udGFpbnMgdGVybXMiLCJpdCBjb250YWlucyB0ZXJtcyB3aGljaCIsInZlcnNpb24gMSAwIDciLCIxIDAgNyBkaXNjbGFpbWVyIiwiMCA3IGRpc2NsYWltZXIgb2YiLCJzaGFsbCBzdXJ2aXZlIDkgZGlzY2xhaW1lciIsInN1cnZpdmUgOSBkaXNjbGFpbWVyIG9mIiwiOSBkaXNjbGFpbWVyIG9mIGxpYWJpbGl0eSIsImRpc2NsYWltZXIgb2YgbGlhYmlsaXR5IGFueSIsIm9mIGxpYWJpbGl0eSBhbnkgdXRpbGl6YXRpb24iLCJsaWFiaWxpdHkgYW55IHV0aWxpemF0aW9uIG9mIiwiYW55IHV0aWxpemF0aW9uIG9mIGNvdmVyZWQiLCJ1dGlsaXphdGlvbiBvZiBjb3ZlcmVkIGNvZGUiLCJvZiBjb3ZlcmVkIGNvZGUgc2hhbGwiLCJjb3ZlcmVkIGNvZGUgc2hhbGwgbm90IiwiY29kZSBzaGFsbCBub3QgY2F1c2UiLCJub3QgY2F1c2UgdGhlIGluaXRpYWwiLCJjYXVzZSB0aGUgaW5pdGlhbCBkZXZlbG9wZXIiLCJhbnkgY29udHJpYnV0b3IgdG8gYmUiLCJjb250cmlidXRvciB0byBiZSBsaWFibGUiLCJ0byBiZSBsaWFibGUgZm9yIiwiZm9yIGFueSBkYW1hZ2VzIG5laXRoZXIiLCJhbnkgZGFtYWdlcyBuZWl0aGVyIGRpcmVjdCIsImRhbWFnZXMgbmVpdGhlciBkaXJlY3Qgbm9yIiwibmVpdGhlciBkaXJlY3Qgbm9yIGluZGlyZWN0IiwiZGlyZWN0IG5vciBpbmRpcmVjdCAxMCIsIm5vciBpbmRpcmVjdCAxMCBtaXNjZWxsYW5lb3VzIiwiaW5kaXJlY3QgMTAgbWlzY2VsbGFuZW91cyB0aGlzIiwiaWYgYW55IHByb3Zpc2lvbiBpcyIsImFueSBwcm92aXNpb24gaXMgaGVsZCIsInByb3Zpc2lvbiBpcyBoZWxkIHRvIiwic2hhbGwgYmUgY29uc3RydWVkIGJ5IiwiYmUgY29uc3RydWVkIGJ5IGFuZCIsImNvbnN0cnVlZCBieSBhbmQgaW4iLCJieSBhbmQgaW4gYWNjb3JkYW5jZSIsImFuZCBpbiBhY2NvcmRhbmNlIHdpdGgiLCJhY2NvcmRhbmNlIHdpdGggdGhlIHN1YnN0YW50aXZlIiwid2l0aCB0aGUgc3Vic3RhbnRpdmUgbGF3cyIsInRoZSBzdWJzdGFudGl2ZSBsYXdzIG9mIiwic3Vic3RhbnRpdmUgbGF3cyBvZiBzd2VkZW4iLCJsYXdzIG9mIHN3ZWRlbiBhbnkiLCJvZiBzd2VkZW4gYW55IGRpc3B1dGUiLCJzd2VkZW4gYW55IGRpc3B1dGUgY29udHJvdmVyc3kiLCJsaWNlbnNlIG9yIHRoZSBicmVhY2giLCJvciB0aGUgYnJlYWNoIHRlcm1pbmF0aW9uIiwidGhlIGJyZWFjaCB0ZXJtaW5hdGlvbiBvciIsImJyZWFjaCB0ZXJtaW5hdGlvbiBvciBpbnZhbGlkaXR5IiwidGVybWluYXRpb24gb3IgaW52YWxpZGl0eSB0aGVyZW9mIiwib3IgaW52YWxpZGl0eSB0aGVyZW9mIHNoYWxsIiwiaW52YWxpZGl0eSB0aGVyZW9mIHNoYWxsIGJlIiwidGhlcmVvZiBzaGFsbCBiZSBzdWJqZWN0IiwiZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiBzd2VkaXNoIiwianVyaXNkaWN0aW9uIG9mIHN3ZWRpc2ggY291cnRzIiwib2Ygc3dlZGlzaCBjb3VydHMgd2l0aCIsInN3ZWRpc2ggY291cnRzIHdpdGggdGhlIiwiY291cnRzIHdpdGggdGhlIHN0b2NraG9sbSIsIndpdGggdGhlIHN0b2NraG9sbSBjaXR5IiwidGhlIHN0b2NraG9sbSBjaXR5IGNvdXJ0Iiwic3RvY2tob2xtIGNpdHkgY291cnQgYXMiLCJjaXR5IGNvdXJ0IGFzIHRoZSIsImNvdXJ0IGFzIHRoZSBmaXJzdCIsImFzIHRoZSBmaXJzdCBpbnN0YW5jZSIsInRoZSBmaXJzdCBpbnN0YW5jZSBleGhpYml0IiwiZmlyc3QgaW5zdGFuY2UgZXhoaWJpdCBhIiwiaW5zdGFuY2UgZXhoaWJpdCBhIHRoZSIsInN1YmplY3QgdG8gdGhlIGVybGFuZyIsInRvIHRoZSBlcmxhbmcgcHVibGljIiwidGhlIGxpY2Vuc2UgeW91IHNob3VsZCIsImxpY2Vuc2UgeW91IHNob3VsZCBoYXZlIiwiY29weSBvZiB0aGUgZXJsYW5nIiwib2YgdGhlIGVybGFuZyBwdWJsaWMiLCJlcmxhbmcgcHVibGljIGxpY2Vuc2UgYWxvbmciLCJhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmUiLCJ3aXRoIHRoaXMgc29mdHdhcmUgaWYiLCJ0aGlzIHNvZnR3YXJlIGlmIG5vdCIsInNvZnR3YXJlIGlmIG5vdCBpdCIsImlmIG5vdCBpdCBjYW4iLCJub3QgaXQgY2FuIGJlIiwiaXQgY2FuIGJlIHJldHJpZXZlZCIsImNhbiBiZSByZXRyaWV2ZWQgdmlhIiwiYmUgcmV0cmlldmVkIHZpYSB0aGUiLCJyZXRyaWV2ZWQgdmlhIHRoZSB3b3JsZCIsInZpYSB0aGUgd29ybGQgd2lkZSIsInRoZSB3b3JsZCB3aWRlIHdlYiIsIndvcmxkIHdpZGUgd2ViIGF0Iiwid2lkZSB3ZWIgYXQgaHR0cCIsIndlYiBhdCBodHRwIHd3dyIsImF0IGh0dHAgd3d3IGVybGFuZyIsImh0dHAgd3d3IGVybGFuZyBvcmciLCJ3d3cgZXJsYW5nIG9yZyBzb2Z0d2FyZSIsImVybGFuZyBvcmcgc29mdHdhcmUgZGlzdHJpYnV0ZWQiLCJvcmcgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIiLCJvcmlnaW5hbCBjb2RlIGlzIGVyaWNzc29uIiwiY29kZSBpcyBlcmljc3NvbiB1dHZlY2tsaW5ncyIsImlzIGVyaWNzc29uIHV0dmVja2xpbmdzIGFiIiwiZXJpY3Nzb24gdXR2ZWNrbGluZ3MgYWIgcG9ydGlvbnMiLCJ1dHZlY2tsaW5ncyBhYiBwb3J0aW9ucyBjcmVhdGVkIiwiYWIgcG9ydGlvbnMgY3JlYXRlZCBieSIsInBvcnRpb25zIGNyZWF0ZWQgYnkgZXJpY3Nzb24iLCJjcmVhdGVkIGJ5IGVyaWNzc29uIGFyZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgKGMpIDE5OTktMjAwMiBIZW5yaWsgVGhlaWxpbmcgXG5cbkxpY2VuY2UgVmVyc2lvbiAyXG5cblxuXG5UaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBvciBjb3B5cmlnaHQgaG9sZGVycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cblxuUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdCBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUgYXBwcmVjaWF0ZWQuXG5cbiAgIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cblxuICAgMy4gWW91IG11c3Qgbm90IHVzZSBhbnkgb2YgdGhlIG5hbWVzIG9mIHRoZSBhdXRob3JzIG9yIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSBmb3IgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi5cblxuICAgNC4gSWYgeW91IGNoYW5nZSB0aGlzIHNvZnR3YXJlIGFuZCByZWRpc3RyaWJ1dGUgcGFydHMgb3IgYWxsIG9mIGl0IGluIGFueSBmb3JtLCB5b3UgbXVzdCBtYWtlIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgYWx0ZXJlZCB2ZXJzaW9uIG9mIHRoaXMgc29mdHdhcmUgYXZhaWxhYmxlLlxuXG4gICA1LiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuXG5UaGlzIGxpY2VuY2UgaXMgZ292ZXJuZWQgYnkgdGhlIExhd3Mgb2YgR2VybWFueS4gRGlzcHV0ZXMgc2hhbGwgYmUgc2V0dGxlZCBieSBTYWFyYnJ1ZWNrZW4gQ2l0eSBDb3VydC4iXSwibGljZW5zZUlkcyI6WyJFdXJvc3ltIl0sImtleXdvcmRzIjpbIjE5OTkgMjAwMiBoZW5yaWsiLCIyMDAyIGhlbnJpayB0aGVpbGluZyIsImhlbnJpayB0aGVpbGluZyBsaWNlbmNlIiwidGhlaWxpbmcgbGljZW5jZSB2ZXJzaW9uIiwidmVyc2lvbiAyIHRoaXMiLCIyIHRoaXMgc29mdHdhcmUiLCJob2xkZXJzIGJlIGhlbGQiLCJiZSBhcHByZWNpYXRlZCAyIiwiYXBwcmVjaWF0ZWQgMiBhbHRlcmVkIiwic29mdHdhcmUgMyB5b3UiLCJtdXN0IG5vdCB1c2UiLCJvcmlnaW5hbCBzb2Z0d2FyZSBmb3IiLCJzb2Z0d2FyZSBmb3IgYWR2ZXJ0aXNpbmciLCJmb3IgYWR2ZXJ0aXNpbmcgb3IiLCJ0byBkaXN0cmlidXRpb24gd2l0aG91dCIsImRpc3RyaWJ1dGlvbiB3aXRob3V0IHNwZWNpZmljIiwicHJpb3IgcGVybWlzc2lvbiA0IiwicGVybWlzc2lvbiA0IGlmIiwic29mdHdhcmUgYW5kIHJlZGlzdHJpYnV0ZSIsImFuZCByZWRpc3RyaWJ1dGUgcGFydHMiLCJyZWRpc3RyaWJ1dGUgcGFydHMgb3IiLCJwYXJ0cyBvciBhbGwiLCJhbGwgb2YgaXQiLCJ0aGUgYWx0ZXJlZCB2ZXJzaW9uIiwiYWx0ZXJlZCB2ZXJzaW9uIG9mIiwidGhpcyBzb2Z0d2FyZSBhdmFpbGFibGUiLCJzb2Z0d2FyZSBhdmFpbGFibGUgNSIsImF2YWlsYWJsZSA1IHRoaXMiLCI1IHRoaXMgbm90aWNlIiwic291cmNlIGRpc3RyaWJ1dGlvbiB0aGlzIiwiZGlzdHJpYnV0aW9uIHRoaXMgbGljZW5jZSIsImxhd3Mgb2YgZ2VybWFueSIsIm9mIGdlcm1hbnkgZGlzcHV0ZXMiLCJnZXJtYW55IGRpc3B1dGVzIHNoYWxsIiwic2V0dGxlZCBieSBzYWFyYnJ1ZWNrZW4iLCJieSBzYWFyYnJ1ZWNrZW4gY2l0eSIsInNhYXJicnVlY2tlbiBjaXR5IGNvdXJ0IiwiYyAxOTk5IDIwMDIgaGVucmlrIiwiMTk5OSAyMDAyIGhlbnJpayB0aGVpbGluZyIsIjIwMDIgaGVucmlrIHRoZWlsaW5nIGxpY2VuY2UiLCJoZW5yaWsgdGhlaWxpbmcgbGljZW5jZSB2ZXJzaW9uIiwidGhlaWxpbmcgbGljZW5jZSB2ZXJzaW9uIDIiLCJsaWNlbmNlIHZlcnNpb24gMiB0aGlzIiwidmVyc2lvbiAyIHRoaXMgc29mdHdhcmUiLCIyIHRoaXMgc29mdHdhcmUgaXMiLCJ3aWxsIHRoZSBhdXRob3JzIG9yIiwiY29weXJpZ2h0IGhvbGRlcnMgYmUgaGVsZCIsImhvbGRlcnMgYmUgaGVsZCBsaWFibGUiLCJ3b3VsZCBiZSBhcHByZWNpYXRlZCAyIiwiYmUgYXBwcmVjaWF0ZWQgMiBhbHRlcmVkIiwiYXBwcmVjaWF0ZWQgMiBhbHRlcmVkIHNvdXJjZSIsIm9yaWdpbmFsIHNvZnR3YXJlIDMgeW91Iiwic29mdHdhcmUgMyB5b3UgbXVzdCIsInlvdSBtdXN0IG5vdCB1c2UiLCJtdXN0IG5vdCB1c2UgYW55Iiwib2YgdGhlIG5hbWVzIG9mIiwib3IgY29weXJpZ2h0IGhvbGRlcnMgb2YiLCJjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGUiLCJob2xkZXJzIG9mIHRoZSBvcmlnaW5hbCIsInRoZSBvcmlnaW5hbCBzb2Z0d2FyZSBmb3IiLCJvcmlnaW5hbCBzb2Z0d2FyZSBmb3IgYWR2ZXJ0aXNpbmciLCJzb2Z0d2FyZSBmb3IgYWR2ZXJ0aXNpbmcgb3IiLCJmb3IgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IiwicGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gd2l0aG91dCIsInRvIGRpc3RyaWJ1dGlvbiB3aXRob3V0IHNwZWNpZmljIiwiZGlzdHJpYnV0aW9uIHdpdGhvdXQgc3BlY2lmaWMgd3JpdHRlbiIsIndyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbiA0IiwicHJpb3IgcGVybWlzc2lvbiA0IGlmIiwicGVybWlzc2lvbiA0IGlmIHlvdSIsIjQgaWYgeW91IGNoYW5nZSIsImNoYW5nZSB0aGlzIHNvZnR3YXJlIGFuZCIsInRoaXMgc29mdHdhcmUgYW5kIHJlZGlzdHJpYnV0ZSIsInNvZnR3YXJlIGFuZCByZWRpc3RyaWJ1dGUgcGFydHMiLCJhbmQgcmVkaXN0cmlidXRlIHBhcnRzIG9yIiwicmVkaXN0cmlidXRlIHBhcnRzIG9yIGFsbCIsInBhcnRzIG9yIGFsbCBvZiIsIm9yIGFsbCBvZiBpdCIsImFsbCBvZiBpdCBpbiIsIm9mIGl0IGluIGFueSIsIml0IGluIGFueSBmb3JtIiwiZm9ybSB5b3UgbXVzdCBtYWtlIiwiY29kZSBvZiB0aGUgYWx0ZXJlZCIsIm9mIHRoZSBhbHRlcmVkIHZlcnNpb24iLCJ0aGUgYWx0ZXJlZCB2ZXJzaW9uIG9mIiwiYWx0ZXJlZCB2ZXJzaW9uIG9mIHRoaXMiLCJ2ZXJzaW9uIG9mIHRoaXMgc29mdHdhcmUiLCJvZiB0aGlzIHNvZnR3YXJlIGF2YWlsYWJsZSIsInRoaXMgc29mdHdhcmUgYXZhaWxhYmxlIDUiLCJzb2Z0d2FyZSBhdmFpbGFibGUgNSB0aGlzIiwiYXZhaWxhYmxlIDUgdGhpcyBub3RpY2UiLCI1IHRoaXMgbm90aWNlIG1heSIsImFueSBzb3VyY2UgZGlzdHJpYnV0aW9uIHRoaXMiLCJzb3VyY2UgZGlzdHJpYnV0aW9uIHRoaXMgbGljZW5jZSIsImRpc3RyaWJ1dGlvbiB0aGlzIGxpY2VuY2UgaXMiLCJ0aGUgbGF3cyBvZiBnZXJtYW55IiwibGF3cyBvZiBnZXJtYW55IGRpc3B1dGVzIiwib2YgZ2VybWFueSBkaXNwdXRlcyBzaGFsbCIsImdlcm1hbnkgZGlzcHV0ZXMgc2hhbGwgYmUiLCJiZSBzZXR0bGVkIGJ5IHNhYXJicnVlY2tlbiIsInNldHRsZWQgYnkgc2FhcmJydWVja2VuIGNpdHkiLCJieSBzYWFyYnJ1ZWNrZW4gY2l0eSBjb3VydCIsImNvcHlyaWdodCBjIDE5OTkgMjAwMiBoZW5yaWsiLCJjIDE5OTkgMjAwMiBoZW5yaWsgdGhlaWxpbmciLCIxOTk5IDIwMDIgaGVucmlrIHRoZWlsaW5nIGxpY2VuY2UiLCIyMDAyIGhlbnJpayB0aGVpbGluZyBsaWNlbmNlIHZlcnNpb24iLCJoZW5yaWsgdGhlaWxpbmcgbGljZW5jZSB2ZXJzaW9uIDIiLCJ0aGVpbGluZyBsaWNlbmNlIHZlcnNpb24gMiB0aGlzIiwibGljZW5jZSB2ZXJzaW9uIDIgdGhpcyBzb2Z0d2FyZSIsInZlcnNpb24gMiB0aGlzIHNvZnR3YXJlIGlzIiwiMiB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIiwiaW1wbGllZCBpbiBubyBldmVudCB3aWxsIiwiZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBvciIsIndpbGwgdGhlIGF1dGhvcnMgb3IgY29weXJpZ2h0Iiwib3IgY29weXJpZ2h0IGhvbGRlcnMgYmUgaGVsZCIsImNvcHlyaWdodCBob2xkZXJzIGJlIGhlbGQgbGlhYmxlIiwiaG9sZGVycyBiZSBoZWxkIGxpYWJsZSBmb3IiLCJkb2N1bWVudGF0aW9uIHdvdWxkIGJlIGFwcHJlY2lhdGVkIDIiLCJ3b3VsZCBiZSBhcHByZWNpYXRlZCAyIGFsdGVyZWQiLCJiZSBhcHByZWNpYXRlZCAyIGFsdGVyZWQgc291cmNlIiwiYXBwcmVjaWF0ZWQgMiBhbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyIsInRoZSBvcmlnaW5hbCBzb2Z0d2FyZSAzIHlvdSIsIm9yaWdpbmFsIHNvZnR3YXJlIDMgeW91IG11c3QiLCJzb2Z0d2FyZSAzIHlvdSBtdXN0IG5vdCIsIjMgeW91IG11c3Qgbm90IHVzZSIsInlvdSBtdXN0IG5vdCB1c2UgYW55IiwibXVzdCBub3QgdXNlIGFueSBvZiIsInVzZSBhbnkgb2YgdGhlIG5hbWVzIiwiYW55IG9mIHRoZSBuYW1lcyBvZiIsIm9mIHRoZSBuYW1lcyBvZiB0aGUiLCJuYW1lcyBvZiB0aGUgYXV0aG9ycyBvciIsImF1dGhvcnMgb3IgY29weXJpZ2h0IGhvbGRlcnMgb2YiLCJvciBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGUiLCJjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGUgb3JpZ2luYWwiLCJob2xkZXJzIG9mIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSIsIm9mIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSBmb3IiLCJ0aGUgb3JpZ2luYWwgc29mdHdhcmUgZm9yIGFkdmVydGlzaW5nIiwib3JpZ2luYWwgc29mdHdhcmUgZm9yIGFkdmVydGlzaW5nIG9yIiwic29mdHdhcmUgZm9yIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSIsImZvciBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyIsInB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiB3aXRob3V0IiwicGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gd2l0aG91dCBzcGVjaWZpYyIsInRvIGRpc3RyaWJ1dGlvbiB3aXRob3V0IHNwZWNpZmljIHdyaXR0ZW4iLCJkaXN0cmlidXRpb24gd2l0aG91dCBzcGVjaWZpYyB3cml0dGVuIHByaW9yIiwic3BlY2lmaWMgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uIDQiLCJ3cml0dGVuIHByaW9yIHBlcm1pc3Npb24gNCBpZiIsInByaW9yIHBlcm1pc3Npb24gNCBpZiB5b3UiLCJwZXJtaXNzaW9uIDQgaWYgeW91IGNoYW5nZSIsIjQgaWYgeW91IGNoYW5nZSB0aGlzIiwieW91IGNoYW5nZSB0aGlzIHNvZnR3YXJlIGFuZCIsImNoYW5nZSB0aGlzIHNvZnR3YXJlIGFuZCByZWRpc3RyaWJ1dGUiLCJ0aGlzIHNvZnR3YXJlIGFuZCByZWRpc3RyaWJ1dGUgcGFydHMiLCJzb2Z0d2FyZSBhbmQgcmVkaXN0cmlidXRlIHBhcnRzIG9yIiwiYW5kIHJlZGlzdHJpYnV0ZSBwYXJ0cyBvciBhbGwiLCJyZWRpc3RyaWJ1dGUgcGFydHMgb3IgYWxsIG9mIiwicGFydHMgb3IgYWxsIG9mIGl0Iiwib3IgYWxsIG9mIGl0IGluIiwiYWxsIG9mIGl0IGluIGFueSIsIm9mIGl0IGluIGFueSBmb3JtIiwiaXQgaW4gYW55IGZvcm0geW91IiwiYW55IGZvcm0geW91IG11c3QgbWFrZSIsImZvcm0geW91IG11c3QgbWFrZSB0aGUiLCJzb3VyY2UgY29kZSBvZiB0aGUgYWx0ZXJlZCIsImNvZGUgb2YgdGhlIGFsdGVyZWQgdmVyc2lvbiIsIm9mIHRoZSBhbHRlcmVkIHZlcnNpb24gb2YiLCJ0aGUgYWx0ZXJlZCB2ZXJzaW9uIG9mIHRoaXMiLCJhbHRlcmVkIHZlcnNpb24gb2YgdGhpcyBzb2Z0d2FyZSIsInZlcnNpb24gb2YgdGhpcyBzb2Z0d2FyZSBhdmFpbGFibGUiLCJvZiB0aGlzIHNvZnR3YXJlIGF2YWlsYWJsZSA1IiwidGhpcyBzb2Z0d2FyZSBhdmFpbGFibGUgNSB0aGlzIiwic29mdHdhcmUgYXZhaWxhYmxlIDUgdGhpcyBub3RpY2UiLCJhdmFpbGFibGUgNSB0aGlzIG5vdGljZSBtYXkiLCI1IHRoaXMgbm90aWNlIG1heSBub3QiLCJmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uIHRoaXMiLCJhbnkgc291cmNlIGRpc3RyaWJ1dGlvbiB0aGlzIGxpY2VuY2UiLCJzb3VyY2UgZGlzdHJpYnV0aW9uIHRoaXMgbGljZW5jZSBpcyIsImRpc3RyaWJ1dGlvbiB0aGlzIGxpY2VuY2UgaXMgZ292ZXJuZWQiLCJieSB0aGUgbGF3cyBvZiBnZXJtYW55IiwidGhlIGxhd3Mgb2YgZ2VybWFueSBkaXNwdXRlcyIsImxhd3Mgb2YgZ2VybWFueSBkaXNwdXRlcyBzaGFsbCIsIm9mIGdlcm1hbnkgZGlzcHV0ZXMgc2hhbGwgYmUiLCJnZXJtYW55IGRpc3B1dGVzIHNoYWxsIGJlIHNldHRsZWQiLCJzaGFsbCBiZSBzZXR0bGVkIGJ5IHNhYXJicnVlY2tlbiIsImJlIHNldHRsZWQgYnkgc2FhcmJydWVja2VuIGNpdHkiLCJzZXR0bGVkIGJ5IHNhYXJicnVlY2tlbiBjaXR5IGNvdXJ0Il19LHsibGljZW5zZVRleHRzIjpbIkNvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLCB3aXRob3V0IGFueSB3YXJyYW50eS4iXSwibGljZW5zZUlkcyI6WyJGU0ZBUCJdLCJrZXl3b3JkcyI6WyJjb3B5aW5nIGFuZCBkaXN0cmlidXRpb24iLCJ0aGlzIGZpbGUgd2l0aCIsImFyZSBwZXJtaXR0ZWQgaW4iLCJwZXJtaXR0ZWQgaW4gYW55IiwibWVkaXVtIHdpdGhvdXQgcm95YWx0eSIsIndpdGhvdXQgcm95YWx0eSBwcm92aWRlZCIsInJveWFsdHkgcHJvdmlkZWQgdGhlIiwiYW5kIHRoaXMgbm90aWNlIiwidGhpcyBub3RpY2UgYXJlIiwiYXJlIHByZXNlcnZlZCB0aGlzIiwicHJlc2VydmVkIHRoaXMgZmlsZSIsImZpbGUgaXMgb2ZmZXJlZCIsImlzIG9mZmVyZWQgYXMiLCJvZmZlcmVkIGFzIGlzIiwiY29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIiwiYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIiwiZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSIsIm9mIHRoaXMgZmlsZSB3aXRoIiwidGhpcyBmaWxlIHdpdGggb3IiLCJtb2RpZmljYXRpb24gYXJlIHBlcm1pdHRlZCBpbiIsImFyZSBwZXJtaXR0ZWQgaW4gYW55IiwicGVybWl0dGVkIGluIGFueSBtZWRpdW0iLCJhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSIsIm1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQiLCJ3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIiwicm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0Iiwibm90aWNlIGFuZCB0aGlzIG5vdGljZSIsImFuZCB0aGlzIG5vdGljZSBhcmUiLCJ0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkIiwibm90aWNlIGFyZSBwcmVzZXJ2ZWQgdGhpcyIsImFyZSBwcmVzZXJ2ZWQgdGhpcyBmaWxlIiwicHJlc2VydmVkIHRoaXMgZmlsZSBpcyIsInRoaXMgZmlsZSBpcyBvZmZlcmVkIiwiZmlsZSBpcyBvZmZlcmVkIGFzIiwiaXMgb2ZmZXJlZCBhcyBpcyIsIm9mZmVyZWQgYXMgaXMgd2l0aG91dCIsImNvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIiwiYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUiLCJkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlIHdpdGgiLCJvZiB0aGlzIGZpbGUgd2l0aCBvciIsInRoaXMgZmlsZSB3aXRoIG9yIHdpdGhvdXQiLCJ3aXRob3V0IG1vZGlmaWNhdGlvbiBhcmUgcGVybWl0dGVkIGluIiwibW9kaWZpY2F0aW9uIGFyZSBwZXJtaXR0ZWQgaW4gYW55IiwiYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIiwicGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCIsImluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IiwiYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQiLCJtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSIsIndpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0Iiwicm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZSIsImNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgbm90aWNlIiwibm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUiLCJhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZCIsInRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQgdGhpcyIsIm5vdGljZSBhcmUgcHJlc2VydmVkIHRoaXMgZmlsZSIsImFyZSBwcmVzZXJ2ZWQgdGhpcyBmaWxlIGlzIiwicHJlc2VydmVkIHRoaXMgZmlsZSBpcyBvZmZlcmVkIiwidGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMiLCJmaWxlIGlzIG9mZmVyZWQgYXMgaXMiLCJpcyBvZmZlcmVkIGFzIGlzIHdpdGhvdXQiLCJvZmZlcmVkIGFzIGlzIHdpdGhvdXQgYW55Il19LHsibGljZW5zZVRleHRzIjpbIkNvcHlyaWdodCAoQykgMTk5Mi0xOTk2LCAxOTk4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG5cblRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iXSwibGljZW5zZUlkcyI6WyJGU0ZVTCJdLCJrZXl3b3JkcyI6WyJjb3B5cmlnaHQgYyAxOTkyIiwiYyAxOTkyIDE5OTYiLCIxOTkyIDE5OTYgMTk5OCIsIjE5OTYgMTk5OCAyMDEyIiwiMTk5OCAyMDEyIGZyZWUiLCIyMDEyIGZyZWUgc29mdHdhcmUiLCJpbmMgdGhpcyBjb25maWd1cmUiLCJ0aGlzIGNvbmZpZ3VyZSBzY3JpcHQiLCJjb25maWd1cmUgc2NyaXB0IGlzIiwic2NyaXB0IGlzIGZyZWUiLCJjb3B5cmlnaHQgYyAxOTkyIDE5OTYiLCJjIDE5OTIgMTk5NiAxOTk4IiwiMTk5MiAxOTk2IDE5OTggMjAxMiIsIjE5OTYgMTk5OCAyMDEyIGZyZWUiLCIxOTk4IDIwMTIgZnJlZSBzb2Z0d2FyZSIsIjIwMTIgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uIiwiZm91bmRhdGlvbiBpbmMgdGhpcyBjb25maWd1cmUiLCJpbmMgdGhpcyBjb25maWd1cmUgc2NyaXB0IiwidGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIiwiY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIiwic2NyaXB0IGlzIGZyZWUgc29mdHdhcmUiLCJjb3B5cmlnaHQgYyAxOTkyIDE5OTYgMTk5OCIsImMgMTk5MiAxOTk2IDE5OTggMjAxMiIsIjE5OTIgMTk5NiAxOTk4IDIwMTIgZnJlZSIsIjE5OTYgMTk5OCAyMDEyIGZyZWUgc29mdHdhcmUiLCIxOTk4IDIwMTIgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uIiwiMjAxMiBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24gaW5jIiwic29mdHdhcmUgZm91bmRhdGlvbiBpbmMgdGhpcyBjb25maWd1cmUiLCJmb3VuZGF0aW9uIGluYyB0aGlzIGNvbmZpZ3VyZSBzY3JpcHQiLCJpbmMgdGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIiwidGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUiLCJjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmUiLCJzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZSB0aGUiLCJjb3B5IGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgMTk5Ni0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuXG5UaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuIl0sImxpY2Vuc2VJZHMiOlsiRlNGVUxMUiJdLCJrZXl3b3JkcyI6WyJjb3B5cmlnaHQgMTk5NiAyMDA2IiwiMTk5NiAyMDA2IGZyZWUiLCIyMDA2IGZyZWUgc29mdHdhcmUiLCJpbmMgdGhpcyBmaWxlIiwiZmlsZSBpcyBmcmVlIiwiY29weSBhbmQgb3IiLCJkaXN0cmlidXRlIGl0IHdpdGgiLCJ3aXRob3V0IG1vZGlmaWNhdGlvbnMgYXMiLCJtb2RpZmljYXRpb25zIGFzIGxvbmciLCJhcyB0aGlzIG5vdGljZSIsImNvcHlyaWdodCAxOTk2IDIwMDYgZnJlZSIsIjE5OTYgMjAwNiBmcmVlIHNvZnR3YXJlIiwiMjAwNiBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24iLCJmb3VuZGF0aW9uIGluYyB0aGlzIGZpbGUiLCJpbmMgdGhpcyBmaWxlIGlzIiwidGhpcyBmaWxlIGlzIGZyZWUiLCJmaWxlIGlzIGZyZWUgc29mdHdhcmUiLCJ0byBjb3B5IGFuZCBvciIsImNvcHkgYW5kIG9yIGRpc3RyaWJ1dGUiLCJhbmQgb3IgZGlzdHJpYnV0ZSBpdCIsIm9yIGRpc3RyaWJ1dGUgaXQgd2l0aCIsImRpc3RyaWJ1dGUgaXQgd2l0aCBvciIsIm9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucyBhcyIsIndpdGhvdXQgbW9kaWZpY2F0aW9ucyBhcyBsb25nIiwibW9kaWZpY2F0aW9ucyBhcyBsb25nIGFzIiwiYXMgbG9uZyBhcyB0aGlzIiwibG9uZyBhcyB0aGlzIG5vdGljZSIsImFzIHRoaXMgbm90aWNlIGlzIiwidGhpcyBub3RpY2UgaXMgcHJlc2VydmVkIiwiY29weXJpZ2h0IDE5OTYgMjAwNiBmcmVlIHNvZnR3YXJlIiwiMTk5NiAyMDA2IGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiIsIjIwMDYgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uIGluYyIsInNvZnR3YXJlIGZvdW5kYXRpb24gaW5jIHRoaXMgZmlsZSIsImZvdW5kYXRpb24gaW5jIHRoaXMgZmlsZSBpcyIsImluYyB0aGlzIGZpbGUgaXMgZnJlZSIsInRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlIiwiZmlsZSBpcyBmcmVlIHNvZnR3YXJlIHRoZSIsInVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kIiwicGVybWlzc2lvbiB0byBjb3B5IGFuZCBvciIsInRvIGNvcHkgYW5kIG9yIGRpc3RyaWJ1dGUiLCJjb3B5IGFuZCBvciBkaXN0cmlidXRlIGl0IiwiYW5kIG9yIGRpc3RyaWJ1dGUgaXQgd2l0aCIsIm9yIGRpc3RyaWJ1dGUgaXQgd2l0aCBvciIsImRpc3RyaWJ1dGUgaXQgd2l0aCBvciB3aXRob3V0IiwiaXQgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMiLCJ3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucyBhcyIsIm9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucyBhcyBsb25nIiwid2l0aG91dCBtb2RpZmljYXRpb25zIGFzIGxvbmcgYXMiLCJtb2RpZmljYXRpb25zIGFzIGxvbmcgYXMgdGhpcyIsImFzIGxvbmcgYXMgdGhpcyBub3RpY2UiLCJsb25nIGFzIHRoaXMgbm90aWNlIGlzIiwiYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkIl19LHsibGljZW5zZVRleHRzIjpbIlRoZSBGcmVlVHlwZSBQcm9qZWN0IExJQ0VOU0VcblxuMjAwNi1KYW4tMjcgQ29weXJpZ2h0IDE5OTYtMjAwMiwgMjAwNiBieSBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmdcblxuSW50cm9kdWN0aW9uXG5cblRoZSBGcmVlVHlwZSBQcm9qZWN0IGlzIGRpc3RyaWJ1dGVkIGluIHNldmVyYWwgYXJjaGl2ZSBwYWNrYWdlczsgc29tZSBvZiB0aGVtIG1heSBjb250YWluLCBpbiBhZGRpdGlvbiB0byB0aGUgRnJlZVR5cGUgZm9udCBlbmdpbmUsIHZhcmlvdXMgdG9vbHMgYW5kIGNvbnRyaWJ1dGlvbnMgd2hpY2ggcmVseSBvbiwgb3IgcmVsYXRlIHRvLCB0aGUgRnJlZVR5cGUgUHJvamVjdC5cblxuVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gYWxsIGZpbGVzIGZvdW5kIGluIHN1Y2ggcGFja2FnZXMsIGFuZCB3aGljaCBkbyBub3QgZmFsbCB1bmRlciB0aGVpciBvd24gZXhwbGljaXQgbGljZW5zZS4gVGhlIGxpY2Vuc2UgYWZmZWN0cyB0aHVzIHRoZSBGcmVlVHlwZSBmb250IGVuZ2luZSwgdGhlIHRlc3QgcHJvZ3JhbXMsIGRvY3VtZW50YXRpb24gYW5kIG1ha2VmaWxlcywgYXQgdGhlIHZlcnkgbGVhc3QuXG5cblRoaXMgbGljZW5zZSB3YXMgaW5zcGlyZWQgYnkgdGhlIEJTRCwgQXJ0aXN0aWMsIGFuZCBJSkcgKEluZGVwZW5kZW50IEpQRUcgR3JvdXApIGxpY2Vuc2VzLCB3aGljaCBhbGwgZW5jb3VyYWdlIGluY2x1c2lvbiBhbmQgdXNlIG9mIGZyZWUgc29mdHdhcmUgaW4gY29tbWVyY2lhbCBhbmQgZnJlZXdhcmUgcHJvZHVjdHMgYWxpa2UuIEFzIGEgY29uc2VxdWVuY2UsIGl0cyBtYWluIHBvaW50cyBhcmUgdGhhdDpcblxuICAgbyBXZSBkb24ndCBwcm9taXNlIHRoYXQgdGhpcyBzb2Z0d2FyZSB3b3Jrcy4gSG93ZXZlciwgd2Ugd2lsbCBiZSBpbnRlcmVzdGVkIGluIGFueSBraW5kIG9mIGJ1ZyByZXBvcnRzLiAoYGFzIGlzJyBkaXN0cmlidXRpb24pXG5cbiAgIG8gWW91IGNhbiB1c2UgdGhpcyBzb2Z0d2FyZSBmb3Igd2hhdGV2ZXIgeW91IHdhbnQsIGluIHBhcnRzIG9yIGZ1bGwgZm9ybSwgd2l0aG91dCBoYXZpbmcgdG8gcGF5IHVzLiAoYHJveWFsdHktZnJlZScgdXNhZ2UpXG5cbiAgIG8gWW91IG1heSBub3QgcHJldGVuZCB0aGF0IHlvdSB3cm90ZSB0aGlzIHNvZnR3YXJlLiBJZiB5b3UgdXNlIGl0LCBvciBvbmx5IHBhcnRzIG9mIGl0LCBpbiBhIHByb2dyYW0sIHlvdSBtdXN0IGFja25vd2xlZGdlIHNvbWV3aGVyZSBpbiB5b3VyIGRvY3VtZW50YXRpb24gdGhhdCB5b3UgaGF2ZSB1c2VkIHRoZSBGcmVlVHlwZSBjb2RlLiAoYGNyZWRpdHMnKVxuXG5XZSBzcGVjaWZpY2FsbHkgcGVybWl0IGFuZCBlbmNvdXJhZ2UgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4gV2UgZGlzY2xhaW0gYWxsIHdhcnJhbnRpZXMgY292ZXJpbmcgVGhlIEZyZWVUeXBlIFByb2plY3QgYW5kIGFzc3VtZSBubyBsaWFiaWxpdHkgcmVsYXRlZCB0byBUaGUgRnJlZVR5cGUgUHJvamVjdC5cblxuRmluYWxseSwgbWFueSBwZW9wbGUgYXNrZWQgdXMgZm9yIGEgcHJlZmVycmVkIGZvcm0gZm9yIGEgY3JlZGl0L2Rpc2NsYWltZXIgdG8gdXNlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIGxpY2Vuc2UuIFdlIHRodXMgZW5jb3VyYWdlIHlvdSB0byB1c2UgdGhlIGZvbGxvd2luZyB0ZXh0OlxuXG5cIlwiXCIgUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSBhcmUgY29weXJpZ2h0IMKpIFx1MDAzY3llYXJcdTAwM2UgVGhlIEZyZWVUeXBlIFByb2plY3QgKHd3dy5mcmVldHlwZS5vcmcpLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBcIlwiXCJcblxuUGxlYXNlIHJlcGxhY2UgXHUwMDNjeWVhclx1MDAzZSB3aXRoIHRoZSB2YWx1ZSBmcm9tIHRoZSBGcmVlVHlwZSB2ZXJzaW9uIHlvdSBhY3R1YWxseSB1c2UuXG5cbkxlZ2FsIFRlcm1zXG5cbiAgIDAuIERlZmluaXRpb25zXG5cbiAgIFRocm91Z2hvdXQgdGhpcyBsaWNlbnNlLCB0aGUgdGVybXMgYHBhY2thZ2UnLCBgRnJlZVR5cGUgUHJvamVjdCcsIGFuZCBgRnJlZVR5cGUgYXJjaGl2ZScgcmVmZXIgdG8gdGhlIHNldCBvZiBmaWxlcyBvcmlnaW5hbGx5IGRpc3RyaWJ1dGVkIGJ5IHRoZSBhdXRob3JzIChEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcpIGFzIHRoZSBgRnJlZVR5cGUgUHJvamVjdCcsIGJlIHRoZXkgbmFtZWQgYXMgYWxwaGEsIGJldGEgb3IgZmluYWwgcmVsZWFzZS5cblxuICAgYFlvdScgcmVmZXJzIHRvIHRoZSBsaWNlbnNlZSwgb3IgcGVyc29uIHVzaW5nIHRoZSBwcm9qZWN0LCB3aGVyZSBgdXNpbmcnIGlzIGEgZ2VuZXJpYyB0ZXJtIGluY2x1ZGluZyBjb21waWxpbmcgdGhlIHByb2plY3QncyBzb3VyY2UgY29kZSBhcyB3ZWxsIGFzIGxpbmtpbmcgaXQgdG8gZm9ybSBhIGBwcm9ncmFtJyBvciBgZXhlY3V0YWJsZScuIFRoaXMgcHJvZ3JhbSBpcyByZWZlcnJlZCB0byBhcyBgYSBwcm9ncmFtIHVzaW5nIHRoZSBGcmVlVHlwZSBlbmdpbmUnLlxuXG4gICBUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byBhbGwgZmlsZXMgZGlzdHJpYnV0ZWQgaW4gdGhlIG9yaWdpbmFsIEZyZWVUeXBlIFByb2plY3QsIGluY2x1ZGluZyBhbGwgc291cmNlIGNvZGUsIGJpbmFyaWVzIGFuZCBkb2N1bWVudGF0aW9uLCB1bmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZCBpbiB0aGUgZmlsZSBpbiBpdHMgb3JpZ2luYWwsIHVubW9kaWZpZWQgZm9ybSBhcyBkaXN0cmlidXRlZCBpbiB0aGUgb3JpZ2luYWwgYXJjaGl2ZS4gSWYgeW91IGFyZSB1bnN1cmUgd2hldGhlciBvciBub3QgYSBwYXJ0aWN1bGFyIGZpbGUgaXMgY292ZXJlZCBieSB0aGlzIGxpY2Vuc2UsIHlvdSBtdXN0IGNvbnRhY3QgdXMgdG8gdmVyaWZ5IHRoaXMuXG5cbiAgIFRoZSBGcmVlVHlwZSBQcm9qZWN0IGlzIGNvcHlyaWdodCAoQykgMTk5Ni0yMDAwIGJ5IERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gQWxsIHJpZ2h0cyByZXNlcnZlZCBleGNlcHQgYXMgc3BlY2lmaWVkIGJlbG93LlxuXG4gICAxLiBObyBXYXJyYW50eVxuXG4gICBUSEUgRlJFRVRZUEUgUFJPSkVDVCBJUyBQUk9WSURFRCBgQVMgSVMnIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFdJTEwgQU5ZIE9GIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgQ0FVU0VEIEJZIFRIRSBVU0UgT1IgVEhFIElOQUJJTElUWSBUTyBVU0UsIE9GIFRIRSBGUkVFVFlQRSBQUk9KRUNULlxuXG4gICAyLiBSZWRpc3RyaWJ1dGlvblxuXG4gICBUaGlzIGxpY2Vuc2UgZ3JhbnRzIGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBhbmQgaXJyZXZvY2FibGUgcmlnaHQgYW5kIGxpY2Vuc2UgdG8gdXNlLCBleGVjdXRlLCBwZXJmb3JtLCBjb21waWxlLCBkaXNwbGF5LCBjb3B5LCBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgRnJlZVR5cGUgUHJvamVjdCAoaW4gYm90aCBzb3VyY2UgYW5kIG9iamVjdCBjb2RlIGZvcm1zKSBhbmQgZGVyaXZhdGl2ZSB3b3JrcyB0aGVyZW9mIGZvciBhbnkgcHVycG9zZTsgYW5kIHRvIGF1dGhvcml6ZSBvdGhlcnMgdG8gZXhlcmNpc2Ugc29tZSBvciBhbGwgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbiwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICAgIG8gUmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhpcyBsaWNlbnNlIGZpbGUgKGBGVEwuVFhUJykgdW5hbHRlcmVkOyBhbnkgYWRkaXRpb25zLCBkZWxldGlvbnMgb3IgY2hhbmdlcyB0byB0aGUgb3JpZ2luYWwgZmlsZXMgbXVzdCBiZSBjbGVhcmx5IGluZGljYXRlZCBpbiBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbi4gVGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSB1bmFsdGVyZWQsIG9yaWdpbmFsIGZpbGVzIG11c3QgYmUgcHJlc2VydmVkIGluIGFsbCBjb3BpZXMgb2Ygc291cmNlIGZpbGVzLlxuXG4gICAgICBvIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcHJvdmlkZSBhIGRpc2NsYWltZXIgdGhhdCBzdGF0ZXMgdGhhdCB0aGUgc29mdHdhcmUgaXMgYmFzZWQgaW4gcGFydCBvZiB0aGUgd29yayBvZiB0aGUgRnJlZVR5cGUgVGVhbSwgaW4gdGhlIGRpc3RyaWJ1dGlvbiBkb2N1bWVudGF0aW9uLiBXZSBhbHNvIGVuY291cmFnZSB5b3UgdG8gcHV0IGFuIFVSTCB0byB0aGUgRnJlZVR5cGUgd2ViIHBhZ2UgaW4geW91ciBkb2N1bWVudGF0aW9uLCB0aG91Z2ggdGhpcyBpc24ndCBtYW5kYXRvcnkuXG5cbiAgIFRoZXNlIGNvbmRpdGlvbnMgYXBwbHkgdG8gYW55IHNvZnR3YXJlIGRlcml2ZWQgZnJvbSBvciBiYXNlZCBvbiB0aGUgRnJlZVR5cGUgUHJvamVjdCwgbm90IGp1c3QgdGhlIHVubW9kaWZpZWQgZmlsZXMuIElmIHlvdSB1c2Ugb3VyIHdvcmssIHlvdSBtdXN0IGFja25vd2xlZGdlIHVzLiBIb3dldmVyLCBubyBmZWUgbmVlZCBiZSBwYWlkIHRvIHVzLlxuXG4gICAzLiBBZHZlcnRpc2luZ1xuXG4gICBOZWl0aGVyIHRoZSBGcmVlVHlwZSBhdXRob3JzIGFuZCBjb250cmlidXRvcnMgbm9yIHlvdSBzaGFsbCB1c2UgdGhlIG5hbWUgb2YgdGhlIG90aGVyIGZvciBjb21tZXJjaWFsLCBhZHZlcnRpc2luZywgb3IgcHJvbW90aW9uYWwgcHVycG9zZXMgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cbiAgIFdlIHN1Z2dlc3QsIGJ1dCBkbyBub3QgcmVxdWlyZSwgdGhhdCB5b3UgdXNlIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgcGhyYXNlcyB0byByZWZlciB0byB0aGlzIHNvZnR3YXJlIGluIHlvdXIgZG9jdW1lbnRhdGlvbiBvciBhZHZlcnRpc2luZyBtYXRlcmlhbHM6IGBGcmVlVHlwZSBQcm9qZWN0JywgYEZyZWVUeXBlIEVuZ2luZScsIGBGcmVlVHlwZSBsaWJyYXJ5Jywgb3IgYEZyZWVUeXBlIERpc3RyaWJ1dGlvbicuXG5cbiAgIEFzIHlvdSBoYXZlIG5vdCBzaWduZWQgdGhpcyBsaWNlbnNlLCB5b3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgaXQuIEhvd2V2ZXIsIGFzIHRoZSBGcmVlVHlwZSBQcm9qZWN0IGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsLCBvbmx5IHRoaXMgbGljZW5zZSwgb3IgYW5vdGhlciBvbmUgY29udHJhY3RlZCB3aXRoIHRoZSBhdXRob3JzLCBncmFudHMgeW91IHRoZSByaWdodCB0byB1c2UsIGRpc3RyaWJ1dGUsIGFuZCBtb2RpZnkgaXQuIFRoZXJlZm9yZSwgYnkgdXNpbmcsIGRpc3RyaWJ1dGluZywgb3IgbW9kaWZ5aW5nIHRoZSBGcmVlVHlwZSBQcm9qZWN0LCB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGFsbCB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLlxuXG4gICA0LiBDb250YWN0c1xuXG4gICBUaGVyZSBhcmUgdHdvIG1haWxpbmcgbGlzdHMgcmVsYXRlZCB0byBGcmVlVHlwZTpcblxuICAgICAgbyBmcmVldHlwZUBub25nbnUub3JnXG5cbiAgICAgIERpc2N1c3NlcyBnZW5lcmFsIHVzZSBhbmQgYXBwbGljYXRpb25zIG9mIEZyZWVUeXBlLCBhcyB3ZWxsIGFzIGZ1dHVyZSBhbmQgd2FudGVkIGFkZGl0aW9ucyB0byB0aGUgbGlicmFyeSBhbmQgZGlzdHJpYnV0aW9uLiBJZiB5b3UgYXJlIGxvb2tpbmcgZm9yIHN1cHBvcnQsIHN0YXJ0IGluIHRoaXMgbGlzdCBpZiB5b3UgaGF2ZW4ndCBmb3VuZCBhbnl0aGluZyB0byBoZWxwIHlvdSBpbiB0aGUgZG9jdW1lbnRhdGlvbi5cblxuICAgICAgbyBmcmVldHlwZS1kZXZlbEBub25nbnUub3JnXG5cbiAgICAgIERpc2N1c3NlcyBidWdzLCBhcyB3ZWxsIGFzIGVuZ2luZSBpbnRlcm5hbHMsIGRlc2lnbiBpc3N1ZXMsIHNwZWNpZmljIGxpY2Vuc2VzLCBwb3J0aW5nLCBldGMuXG5cbiAgIE91ciBob21lIHBhZ2UgY2FuIGJlIGZvdW5kIGF0XG5cbiAgIGh0dHA6Ly93d3cuZnJlZXR5cGUub3JnIC0tLSBlbmQgb2YgRlRMLlRYVCAtLS0iXSwibGljZW5zZUlkcyI6WyJGVEwiXSwia2V5d29yZHMiOlsiZnJlZXR5cGUgcHJvamVjdCBsaWNlbnNlIiwicHJvamVjdCBsaWNlbnNlIDIwMDYiLCJsaWNlbnNlIDIwMDYgamFuIiwiMjAwNiBqYW4gMjciLCJqYW4gMjcgY29weXJpZ2h0IiwiMjcgY29weXJpZ2h0IDE5OTYiLCJjb3B5cmlnaHQgMTk5NiAyMDAyIiwiMTk5NiAyMDAyIDIwMDYiLCIyMDAyIDIwMDYgYnkiLCIyMDA2IGJ5IGRhdmlkIiwid2VybmVyIGxlbWJlcmcgaW50cm9kdWN0aW9uIiwibGVtYmVyZyBpbnRyb2R1Y3Rpb24gdGhlIiwiaW50cm9kdWN0aW9uIHRoZSBmcmVldHlwZSIsInByb2plY3QgaXMgZGlzdHJpYnV0ZWQiLCJkaXN0cmlidXRlZCBpbiBzZXZlcmFsIiwiaW4gc2V2ZXJhbCBhcmNoaXZlIiwic2V2ZXJhbCBhcmNoaXZlIHBhY2thZ2VzIiwiYXJjaGl2ZSBwYWNrYWdlcyBzb21lIiwicGFja2FnZXMgc29tZSBvZiIsInNvbWUgb2YgdGhlbSIsIm9mIHRoZW0gbWF5IiwidGhlbSBtYXkgY29udGFpbiIsImNvbnRhaW4gaW4gYWRkaXRpb24iLCJmb250IGVuZ2luZSB2YXJpb3VzIiwiZW5naW5lIHZhcmlvdXMgdG9vbHMiLCJ2YXJpb3VzIHRvb2xzIGFuZCIsInRvb2xzIGFuZCBjb250cmlidXRpb25zIiwiYW5kIGNvbnRyaWJ1dGlvbnMgd2hpY2giLCJjb250cmlidXRpb25zIHdoaWNoIHJlbHkiLCJ3aGljaCByZWx5IG9uIiwicmVseSBvbiBvciIsIm9uIG9yIHJlbGF0ZSIsIm9yIHJlbGF0ZSB0byIsInJlbGF0ZSB0byB0aGUiLCJmcmVldHlwZSBwcm9qZWN0IHRoaXMiLCJwcm9qZWN0IHRoaXMgbGljZW5zZSIsImFsbCBmaWxlcyBmb3VuZCIsImZpbGVzIGZvdW5kIGluIiwiZm91bmQgaW4gc3VjaCIsImluIHN1Y2ggcGFja2FnZXMiLCJzdWNoIHBhY2thZ2VzIGFuZCIsInBhY2thZ2VzIGFuZCB3aGljaCIsImRvIG5vdCBmYWxsIiwiZmFsbCB1bmRlciB0aGVpciIsInRoZWlyIG93biBleHBsaWNpdCIsIm93biBleHBsaWNpdCBsaWNlbnNlIiwiZXhwbGljaXQgbGljZW5zZSB0aGUiLCJ0aGUgbGljZW5zZSBhZmZlY3RzIiwibGljZW5zZSBhZmZlY3RzIHRodXMiLCJhZmZlY3RzIHRodXMgdGhlIiwidGh1cyB0aGUgZnJlZXR5cGUiLCJmb250IGVuZ2luZSB0aGUiLCJlbmdpbmUgdGhlIHRlc3QiLCJ0aGUgdGVzdCBwcm9ncmFtcyIsInRlc3QgcHJvZ3JhbXMgZG9jdW1lbnRhdGlvbiIsInByb2dyYW1zIGRvY3VtZW50YXRpb24gYW5kIiwiZG9jdW1lbnRhdGlvbiBhbmQgbWFrZWZpbGVzIiwiYW5kIG1ha2VmaWxlcyBhdCIsIm1ha2VmaWxlcyBhdCB0aGUiLCJ0aGUgdmVyeSBsZWFzdCIsInZlcnkgbGVhc3QgdGhpcyIsImxlYXN0IHRoaXMgbGljZW5zZSIsImxpY2Vuc2Ugd2FzIGluc3BpcmVkIiwid2FzIGluc3BpcmVkIGJ5IiwiaW5zcGlyZWQgYnkgdGhlIiwidGhlIGJzZCBhcnRpc3RpYyIsImJzZCBhcnRpc3RpYyBhbmQiLCJhcnRpc3RpYyBhbmQgaWpnIiwiYW5kIGlqZyBpbmRlcGVuZGVudCIsImlqZyBpbmRlcGVuZGVudCBqcGVnIiwianBlZyBncm91cCBsaWNlbnNlcyIsImdyb3VwIGxpY2Vuc2VzIHdoaWNoIiwibGljZW5zZXMgd2hpY2ggYWxsIiwid2hpY2ggYWxsIGVuY291cmFnZSIsImFsbCBlbmNvdXJhZ2UgaW5jbHVzaW9uIiwiZW5jb3VyYWdlIGluY2x1c2lvbiBhbmQiLCJpbmNsdXNpb24gYW5kIHVzZSIsInVzZSBvZiBmcmVlIiwiY29tbWVyY2lhbCBhbmQgZnJlZXdhcmUiLCJhbmQgZnJlZXdhcmUgcHJvZHVjdHMiLCJmcmVld2FyZSBwcm9kdWN0cyBhbGlrZSIsInByb2R1Y3RzIGFsaWtlIGFzIiwiYWxpa2UgYXMgYSIsImEgY29uc2VxdWVuY2UgaXRzIiwiY29uc2VxdWVuY2UgaXRzIG1haW4iLCJpdHMgbWFpbiBwb2ludHMiLCJtYWluIHBvaW50cyBhcmUiLCJwb2ludHMgYXJlIHRoYXQiLCJhcmUgdGhhdCBvIiwidGhhdCBvIHdlIiwibyB3ZSBkb24iLCJzb2Z0d2FyZSB3b3JrcyBob3dldmVyIiwid29ya3MgaG93ZXZlciB3ZSIsImhvd2V2ZXIgd2Ugd2lsbCIsIndlIHdpbGwgYmUiLCJ3aWxsIGJlIGludGVyZXN0ZWQiLCJiZSBpbnRlcmVzdGVkIGluIiwiaW50ZXJlc3RlZCBpbiBhbnkiLCJpbiBhbnkga2luZCIsImtpbmQgb2YgYnVnIiwib2YgYnVnIHJlcG9ydHMiLCJidWcgcmVwb3J0cyBhcyIsInJlcG9ydHMgYXMgaXMiLCJhcyBpcyBkaXN0cmlidXRpb24iLCJpcyBkaXN0cmlidXRpb24gbyIsImRpc3RyaWJ1dGlvbiBvIHlvdSIsIm8geW91IGNhbiIsInlvdSB3YW50IGluIiwid2FudCBpbiBwYXJ0cyIsImluIHBhcnRzIG9yIiwicGFydHMgb3IgZnVsbCIsIm9yIGZ1bGwgZm9ybSIsImZ1bGwgZm9ybSB3aXRob3V0IiwiZm9ybSB3aXRob3V0IGhhdmluZyIsImhhdmluZyB0byBwYXkiLCJwYXkgdXMgcm95YWx0eSIsInVzIHJveWFsdHkgZnJlZSIsInJveWFsdHkgZnJlZSB1c2FnZSIsImZyZWUgdXNhZ2UgbyIsInVzYWdlIG8geW91IiwibyB5b3UgbWF5IiwidXNlIGl0IG9yIiwiaXQgb3Igb25seSIsIm9yIG9ubHkgcGFydHMiLCJvbmx5IHBhcnRzIG9mIiwieW91IGhhdmUgdXNlZCIsImhhdmUgdXNlZCB0aGUiLCJ1c2VkIHRoZSBmcmVldHlwZSIsInRoZSBmcmVldHlwZSBjb2RlIiwiZnJlZXR5cGUgY29kZSBjcmVkaXRzIiwiY29kZSBjcmVkaXRzIHdlIiwiY3JlZGl0cyB3ZSBzcGVjaWZpY2FsbHkiLCJlbmNvdXJhZ2UgdGhlIGluY2x1c2lvbiIsIm1vZGlmaWNhdGlvbnMgaW4gY29tbWVyY2lhbCIsImNvbW1lcmNpYWwgcHJvZHVjdHMgd2UiLCJwcm9kdWN0cyB3ZSBkaXNjbGFpbSIsIndlIGRpc2NsYWltIGFsbCIsImFsbCB3YXJyYW50aWVzIGNvdmVyaW5nIiwid2FycmFudGllcyBjb3ZlcmluZyB0aGUiLCJjb3ZlcmluZyB0aGUgZnJlZXR5cGUiLCJwcm9qZWN0IGFuZCBhc3N1bWUiLCJhbmQgYXNzdW1lIG5vIiwibm8gbGlhYmlsaXR5IHJlbGF0ZWQiLCJsaWFiaWxpdHkgcmVsYXRlZCB0byIsImZyZWV0eXBlIHByb2plY3QgZmluYWxseSIsInByb2plY3QgZmluYWxseSBtYW55IiwiZmluYWxseSBtYW55IHBlb3BsZSIsIm1hbnkgcGVvcGxlIGFza2VkIiwicGVvcGxlIGFza2VkIHVzIiwiYXNrZWQgdXMgZm9yIiwidXMgZm9yIGEiLCJmb3IgYSBwcmVmZXJyZWQiLCJhIHByZWZlcnJlZCBmb3JtIiwiZm9yIGEgY3JlZGl0IiwiYSBjcmVkaXQgZGlzY2xhaW1lciIsImNyZWRpdCBkaXNjbGFpbWVyIHRvIiwiZGlzY2xhaW1lciB0byB1c2UiLCJ1c2UgaW4gY29tcGxpYW5jZSIsInRoaXMgbGljZW5zZSB3ZSIsImxpY2Vuc2Ugd2UgdGh1cyIsIndlIHRodXMgZW5jb3VyYWdlIiwidGh1cyBlbmNvdXJhZ2UgeW91IiwiZm9sbG93aW5nIHRleHQgcG9ydGlvbnMiLCJ0ZXh0IHBvcnRpb25zIG9mIiwic29mdHdhcmUgYXJlIGNvcHlyaWdodCIsImNvcHlyaWdodCB5ZWFyIHRoZSIsInllYXIgdGhlIGZyZWV0eXBlIiwiZnJlZXR5cGUgcHJvamVjdCB3d3ciLCJwcm9qZWN0IHd3dyBmcmVldHlwZSIsImZyZWV0eXBlIG9yZyBhbGwiLCJvcmcgYWxsIHJpZ2h0cyIsInJlc2VydmVkIHBsZWFzZSByZXBsYWNlIiwicGxlYXNlIHJlcGxhY2UgeWVhciIsInJlcGxhY2UgeWVhciB3aXRoIiwieWVhciB3aXRoIHRoZSIsIndpdGggdGhlIHZhbHVlIiwidGhlIHZhbHVlIGZyb20iLCJ2YWx1ZSBmcm9tIHRoZSIsImZyb20gdGhlIGZyZWV0eXBlIiwidGhlIGZyZWV0eXBlIHZlcnNpb24iLCJmcmVldHlwZSB2ZXJzaW9uIHlvdSIsInZlcnNpb24geW91IGFjdHVhbGx5IiwieW91IGFjdHVhbGx5IHVzZSIsImFjdHVhbGx5IHVzZSBsZWdhbCIsInVzZSBsZWdhbCB0ZXJtcyIsImxlZ2FsIHRlcm1zIDAiLCJ0ZXJtcyAwIGRlZmluaXRpb25zIiwiMCBkZWZpbml0aW9ucyB0aHJvdWdob3V0IiwiZGVmaW5pdGlvbnMgdGhyb3VnaG91dCB0aGlzIiwidGhlIHRlcm1zIHBhY2thZ2UiLCJ0ZXJtcyBwYWNrYWdlIGZyZWV0eXBlIiwicGFja2FnZSBmcmVldHlwZSBwcm9qZWN0IiwicHJvamVjdCBhbmQgZnJlZXR5cGUiLCJhbmQgZnJlZXR5cGUgYXJjaGl2ZSIsImZyZWV0eXBlIGFyY2hpdmUgcmVmZXIiLCJhcmNoaXZlIHJlZmVyIHRvIiwib2YgZmlsZXMgb3JpZ2luYWxseSIsImZpbGVzIG9yaWdpbmFsbHkgZGlzdHJpYnV0ZWQiLCJvcmlnaW5hbGx5IGRpc3RyaWJ1dGVkIGJ5IiwidGhlIGF1dGhvcnMgZGF2aWQiXX0seyJsaWNlbnNlVGV4dHMiOlsiRmFpciBTb3VyY2UgTGljZW5zZSwgdmVyc2lvbiAwLjkgQ29weXJpZ2h0IChDKSBbeWVhcl0gW2NvcHlyaWdodCBvd25lcl0gTGljZW5zb3I6IFtsZWdhbCBuYW1lIG9mIGxpY2Vuc29yXSBTb2Z0d2FyZTogW25hbWUgc29mdHdhcmUgYW5kIHZlcnNpb24gaWYgYXBwbGljYWJsZV0gVXNlIExpbWl0YXRpb246IFtudW1iZXJdIHVzZXJzIExpY2Vuc2UgR3JhbnQuIExpY2Vuc29yIGhlcmVieSBncmFudHMgdG8gZWFjaCByZWNpcGllbnQgb2YgdGhlIFNvZnR3YXJlIChcInlvdVwiKSBhIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIHJveWFsdHktZnJlZSBhbmQgZnVsbHktcGFpZC11cCBsaWNlbnNlLCB1bmRlciBhbGwgb2YgdGhlIExpY2Vuc29ycyBjb3B5cmlnaHQgYW5kIHBhdGVudCByaWdodHMsIHRvIHVzZSwgY29weSwgZGlzdHJpYnV0ZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBwZXJmb3JtIGFuZCBkaXNwbGF5IHRoZSBTb2Z0d2FyZSwgc3ViamVjdCB0byB0aGUgVXNlIExpbWl0YXRpb24gYW5kIHRoZSBjb25kaXRpb25zIHNldCBmb3J0aCBiZWxvdy4gVXNlIExpbWl0YXRpb24uIFRoZSBsaWNlbnNlIGdyYW50ZWQgYWJvdmUgYWxsb3dzIHVzZSBieSB1cCB0byB0aGUgbnVtYmVyIG9mIHVzZXJzIHBlciBlbnRpdHkgc2V0IGZvcnRoIGFib3ZlICh0aGUgXCJVc2UgTGltaXRhdGlvblwiKS4gRm9yIGRldGVybWluaW5nIHRoZSBudW1iZXIgb2YgdXNlcnMsIFwieW91XCIgaW5jbHVkZXMgYWxsIGFmZmlsaWF0ZXMsIG1lYW5pbmcgbGVnYWwgZW50aXRpZXMgY29udHJvbGxpbmcsIGNvbnRyb2xsZWQgYnksIG9yIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiBJZiB5b3UgZXhjZWVkIHRoZSBVc2UgTGltaXRhdGlvbiwgeW91ciB1c2UgaXMgc3ViamVjdCB0byBwYXltZW50IG9mIExpY2Vuc29ycyB0aGVuLWN1cnJlbnQgbGlzdCBwcmljZSBmb3IgbGljZW5zZXMuIENvbmRpdGlvbnMuIFJlZGlzdHJpYnV0aW9uIGluIHNvdXJjZSBjb2RlIG9yIG90aGVyIGZvcm1zIG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50IHRvIGJlIHByb3ZpZGVkIGluIGEgcmVhc29uYWJsZSBtYW5uZXIuIEFueSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgaXMgb25seSBhbGxvd2VkIHN1YmplY3QgdG8gdGhpcyBsaWNlbnNlLiBUcmFkZW1hcmtzLiBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgeW91IGFueSByaWdodCBpbiB0aGUgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgYnJhbmQgbmFtZXMgb3IgbG9nb3Mgb2YgTGljZW5zb3IuIERJU0NMQUlNRVIuIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT1IgQ09ORElUSU9OLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIExJQ0VOU09SUyBIRVJFQlkgRElTQ0xBSU0gQUxMIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFLiBUZXJtaW5hdGlvbi4gSWYgeW91IHZpb2xhdGUgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSwgeW91ciByaWdodHMgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgd2lsbCBub3QgYmUgcmVpbnN0YXRlZCB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgTGljZW5zb3IuIEFueSBzdWNoIHRlcm1pbmF0aW9uIHdpbGwgbm90IGFmZmVjdCB0aGUgcmlnaHQgb2Ygb3RoZXJzIHdobyBtYXkgaGF2ZSByZWNlaXZlZCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGZyb20geW91LiJdLCJsaWNlbnNlSWRzIjpbIkZhaXItU291cmNlLTAuOSJdLCJrZXl3b3JkcyI6WyJmYWlyIHNvdXJjZSBsaWNlbnNlIiwiMCA5IGNvcHlyaWdodCIsIjkgY29weXJpZ2h0IGMiLCJ5ZWFyIGNvcHlyaWdodCBvd25lciIsImNvcHlyaWdodCBvd25lciBsaWNlbnNvciIsIm93bmVyIGxpY2Vuc29yIGxlZ2FsIiwibGljZW5zb3IgbGVnYWwgbmFtZSIsImxlZ2FsIG5hbWUgb2YiLCJvZiBsaWNlbnNvciBzb2Z0d2FyZSIsImxpY2Vuc29yIHNvZnR3YXJlIG5hbWUiLCJzb2Z0d2FyZSBuYW1lIHNvZnR3YXJlIiwibmFtZSBzb2Z0d2FyZSBhbmQiLCJzb2Z0d2FyZSBhbmQgdmVyc2lvbiIsImFuZCB2ZXJzaW9uIGlmIiwidmVyc2lvbiBpZiBhcHBsaWNhYmxlIiwiaWYgYXBwbGljYWJsZSB1c2UiLCJhcHBsaWNhYmxlIHVzZSBsaW1pdGF0aW9uIiwidXNlIGxpbWl0YXRpb24gbnVtYmVyIiwibGltaXRhdGlvbiBudW1iZXIgdXNlcnMiLCJudW1iZXIgdXNlcnMgbGljZW5zZSIsInVzZXJzIGxpY2Vuc2UgZ3JhbnQiLCJzb2Z0d2FyZSB5b3UgYSIsImZyZWUgYW5kIGZ1bGx5IiwiYW5kIGZ1bGx5IHBhaWQiLCJmdWxseSBwYWlkIHVwIiwicGFpZCB1cCBsaWNlbnNlIiwidXAgbGljZW5zZSB1bmRlciIsImxpY2Vuc2UgdW5kZXIgYWxsIiwidW5kZXIgYWxsIG9mIiwib2YgdGhlIGxpY2Vuc29ycyIsInRoZSBsaWNlbnNvcnMgY29weXJpZ2h0IiwibGljZW5zb3JzIGNvcHlyaWdodCBhbmQiLCJjb3B5IGRpc3RyaWJ1dGUgcHJlcGFyZSIsInBlcmZvcm0gYW5kIGRpc3BsYXkiLCJhbmQgZGlzcGxheSB0aGUiLCJ0aGUgc29mdHdhcmUgc3ViamVjdCIsInVzZSBsaW1pdGF0aW9uIGFuZCIsImxpbWl0YXRpb24gYW5kIHRoZSIsImFuZCB0aGUgY29uZGl0aW9ucyIsImZvcnRoIGJlbG93IHVzZSIsImJlbG93IHVzZSBsaW1pdGF0aW9uIiwidXNlIGxpbWl0YXRpb24gdGhlIiwibGltaXRhdGlvbiB0aGUgbGljZW5zZSIsImxpY2Vuc2UgZ3JhbnRlZCBhYm92ZSIsImdyYW50ZWQgYWJvdmUgYWxsb3dzIiwiYWJvdmUgYWxsb3dzIHVzZSIsImFsbG93cyB1c2UgYnkiLCJ1c2UgYnkgdXAiLCJieSB1cCB0byIsInRvIHRoZSBudW1iZXIiLCJvZiB1c2VycyBwZXIiLCJ1c2VycyBwZXIgZW50aXR5IiwicGVyIGVudGl0eSBzZXQiLCJlbnRpdHkgc2V0IGZvcnRoIiwic2V0IGZvcnRoIGFib3ZlIiwiZm9ydGggYWJvdmUgdGhlIiwiYWJvdmUgdGhlIHVzZSIsInVzZSBsaW1pdGF0aW9uIGZvciIsImxpbWl0YXRpb24gZm9yIGRldGVybWluaW5nIiwiZGV0ZXJtaW5pbmcgdGhlIG51bWJlciIsIm9mIHVzZXJzIHlvdSIsInVzZXJzIHlvdSBpbmNsdWRlcyIsInlvdSBpbmNsdWRlcyBhbGwiLCJpbmNsdWRlcyBhbGwgYWZmaWxpYXRlcyIsImFsbCBhZmZpbGlhdGVzIG1lYW5pbmciLCJhZmZpbGlhdGVzIG1lYW5pbmcgbGVnYWwiLCJtZWFuaW5nIGxlZ2FsIGVudGl0aWVzIiwibGVnYWwgZW50aXRpZXMgY29udHJvbGxpbmciLCJlbnRpdGllcyBjb250cm9sbGluZyBjb250cm9sbGVkIiwid2l0aCB5b3UgaWYiLCJpZiB5b3UgZXhjZWVkIiwieW91IGV4Y2VlZCB0aGUiLCJleGNlZWQgdGhlIHVzZSIsInVzZSBsaW1pdGF0aW9uIHlvdXIiLCJsaW1pdGF0aW9uIHlvdXIgdXNlIiwieW91ciB1c2UgaXMiLCJzdWJqZWN0IHRvIHBheW1lbnQiLCJ0byBwYXltZW50IG9mIiwicGF5bWVudCBvZiBsaWNlbnNvcnMiLCJvZiBsaWNlbnNvcnMgdGhlbiIsImxpY2Vuc29ycyB0aGVuIGN1cnJlbnQiLCJ0aGVuIGN1cnJlbnQgbGlzdCIsImN1cnJlbnQgbGlzdCBwcmljZSIsImxpc3QgcHJpY2UgZm9yIiwicHJpY2UgZm9yIGxpY2Vuc2VzIiwiZm9yIGxpY2Vuc2VzIGNvbmRpdGlvbnMiLCJsaWNlbnNlcyBjb25kaXRpb25zIHJlZGlzdHJpYnV0aW9uIiwiY29uZGl0aW9ucyByZWRpc3RyaWJ1dGlvbiBpbiIsIm90aGVyIGZvcm1zIG11c3QiLCJmb3JtcyBtdXN0IGluY2x1ZGUiLCJsaWNlbnNlIGRvY3VtZW50IHRvIiwiYmUgcHJvdmlkZWQgaW4iLCJyZWFzb25hYmxlIG1hbm5lciBhbnkiLCJtYW5uZXIgYW55IHJlZGlzdHJpYnV0aW9uIiwic29mdHdhcmUgaXMgb25seSIsImlzIG9ubHkgYWxsb3dlZCIsIm9ubHkgYWxsb3dlZCBzdWJqZWN0IiwiYWxsb3dlZCBzdWJqZWN0IHRvIiwidGhpcyBsaWNlbnNlIHRyYWRlbWFya3MiLCJsaWNlbnNlIHRyYWRlbWFya3MgdGhpcyIsImFueSByaWdodCBpbiIsInJpZ2h0IGluIHRoZSIsInNlcnZpY2UgbWFya3MgYnJhbmQiLCJtYXJrcyBicmFuZCBuYW1lcyIsImJyYW5kIG5hbWVzIG9yIiwibmFtZXMgb3IgbG9nb3MiLCJvZiBsaWNlbnNvciBkaXNjbGFpbWVyIiwibGljZW5zb3IgZGlzY2xhaW1lciB0aGUiLCJvciBjb25kaXRpb24gZXhwcmVzcyIsImNvbmRpdGlvbiBleHByZXNzIG9yIiwiYW5kIG5vbmluZnJpbmdlbWVudCBsaWNlbnNvcnMiLCJub25pbmZyaW5nZW1lbnQgbGljZW5zb3JzIGhlcmVieSIsImxpY2Vuc29ycyBoZXJlYnkgZGlzY2xhaW0iLCJkaXNjbGFpbSBhbGwgbGlhYmlsaXR5IiwiYWxsIGxpYWJpbGl0eSB3aGV0aGVyIiwidGhlIHNvZnR3YXJlIHRlcm1pbmF0aW9uIiwic29mdHdhcmUgdGVybWluYXRpb24gaWYiLCJpZiB5b3UgdmlvbGF0ZSIsInlvdXIgcmlnaHRzIHdpbGwiLCJyaWdodHMgd2lsbCB0ZXJtaW5hdGUiLCJhdXRvbWF0aWNhbGx5IGFuZCB3aWxsIiwibm90IGJlIHJlaW5zdGF0ZWQiLCJiZSByZWluc3RhdGVkIHdpdGhvdXQiLCJyZWluc3RhdGVkIHdpdGhvdXQgdGhlIiwib2YgbGljZW5zb3IgYW55IiwibGljZW5zb3IgYW55IHN1Y2giLCJhZmZlY3QgdGhlIHJpZ2h0IiwicmlnaHQgb2Ygb3RoZXJzIiwib3RoZXJzIHdobyBtYXkiLCJyZWNlaXZlZCBjb3BpZXMgb2YiLCJmYWlyIHNvdXJjZSBsaWNlbnNlIHZlcnNpb24iLCJ2ZXJzaW9uIDAgOSBjb3B5cmlnaHQiLCIwIDkgY29weXJpZ2h0IGMiLCI5IGNvcHlyaWdodCBjIHllYXIiLCJjIHllYXIgY29weXJpZ2h0IG93bmVyIiwieWVhciBjb3B5cmlnaHQgb3duZXIgbGljZW5zb3IiLCJjb3B5cmlnaHQgb3duZXIgbGljZW5zb3IgbGVnYWwiLCJvd25lciBsaWNlbnNvciBsZWdhbCBuYW1lIiwibGljZW5zb3IgbGVnYWwgbmFtZSBvZiIsImxlZ2FsIG5hbWUgb2YgbGljZW5zb3IiLCJuYW1lIG9mIGxpY2Vuc29yIHNvZnR3YXJlIiwib2YgbGljZW5zb3Igc29mdHdhcmUgbmFtZSIsImxpY2Vuc29yIHNvZnR3YXJlIG5hbWUgc29mdHdhcmUiLCJzb2Z0d2FyZSBuYW1lIHNvZnR3YXJlIGFuZCIsIm5hbWUgc29mdHdhcmUgYW5kIHZlcnNpb24iLCJzb2Z0d2FyZSBhbmQgdmVyc2lvbiBpZiIsImFuZCB2ZXJzaW9uIGlmIGFwcGxpY2FibGUiLCJ2ZXJzaW9uIGlmIGFwcGxpY2FibGUgdXNlIiwiaWYgYXBwbGljYWJsZSB1c2UgbGltaXRhdGlvbiIsImFwcGxpY2FibGUgdXNlIGxpbWl0YXRpb24gbnVtYmVyIiwidXNlIGxpbWl0YXRpb24gbnVtYmVyIHVzZXJzIiwibGltaXRhdGlvbiBudW1iZXIgdXNlcnMgbGljZW5zZSIsIm51bWJlciB1c2VycyBsaWNlbnNlIGdyYW50IiwidXNlcnMgbGljZW5zZSBncmFudCBsaWNlbnNvciIsInJlY2lwaWVudCBvZiB0aGUgc29mdHdhcmUiLCJ0aGUgc29mdHdhcmUgeW91IGEiLCJzb2Z0d2FyZSB5b3UgYSBub24iLCJ0cmFuc2ZlcmFibGUgcm95YWx0eSBmcmVlIGFuZCIsInJveWFsdHkgZnJlZSBhbmQgZnVsbHkiLCJmcmVlIGFuZCBmdWxseSBwYWlkIiwiYW5kIGZ1bGx5IHBhaWQgdXAiLCJmdWxseSBwYWlkIHVwIGxpY2Vuc2UiLCJwYWlkIHVwIGxpY2Vuc2UgdW5kZXIiLCJ1cCBsaWNlbnNlIHVuZGVyIGFsbCIsImxpY2Vuc2UgdW5kZXIgYWxsIG9mIiwidW5kZXIgYWxsIG9mIHRoZSIsImFsbCBvZiB0aGUgbGljZW5zb3JzIiwib2YgdGhlIGxpY2Vuc29ycyBjb3B5cmlnaHQiLCJ0aGUgbGljZW5zb3JzIGNvcHlyaWdodCBhbmQiLCJsaWNlbnNvcnMgY29weXJpZ2h0IGFuZCBwYXRlbnQiLCJhbmQgcGF0ZW50IHJpZ2h0cyB0byIsInBhdGVudCByaWdodHMgdG8gdXNlIiwidXNlIGNvcHkgZGlzdHJpYnV0ZSBwcmVwYXJlIiwiY29weSBkaXN0cmlidXRlIHByZXBhcmUgZGVyaXZhdGl2ZSIsInB1YmxpY2x5IHBlcmZvcm0gYW5kIGRpc3BsYXkiLCJwZXJmb3JtIGFuZCBkaXNwbGF5IHRoZSIsImFuZCBkaXNwbGF5IHRoZSBzb2Z0d2FyZSIsImRpc3BsYXkgdGhlIHNvZnR3YXJlIHN1YmplY3QiLCJ0aGUgc29mdHdhcmUgc3ViamVjdCB0byIsInN1YmplY3QgdG8gdGhlIHVzZSIsInRvIHRoZSB1c2UgbGltaXRhdGlvbiIsInRoZSB1c2UgbGltaXRhdGlvbiBhbmQiLCJ1c2UgbGltaXRhdGlvbiBhbmQgdGhlIiwibGltaXRhdGlvbiBhbmQgdGhlIGNvbmRpdGlvbnMiLCJhbmQgdGhlIGNvbmRpdGlvbnMgc2V0Iiwic2V0IGZvcnRoIGJlbG93IHVzZSIsImZvcnRoIGJlbG93IHVzZSBsaW1pdGF0aW9uIiwiYmVsb3cgdXNlIGxpbWl0YXRpb24gdGhlIiwidXNlIGxpbWl0YXRpb24gdGhlIGxpY2Vuc2UiLCJsaW1pdGF0aW9uIHRoZSBsaWNlbnNlIGdyYW50ZWQiLCJ0aGUgbGljZW5zZSBncmFudGVkIGFib3ZlIiwibGljZW5zZSBncmFudGVkIGFib3ZlIGFsbG93cyIsImdyYW50ZWQgYWJvdmUgYWxsb3dzIHVzZSIsImFib3ZlIGFsbG93cyB1c2UgYnkiLCJhbGxvd3MgdXNlIGJ5IHVwIiwidXNlIGJ5IHVwIHRvIiwiYnkgdXAgdG8gdGhlIiwidXAgdG8gdGhlIG51bWJlciIsInRvIHRoZSBudW1iZXIgb2YiLCJudW1iZXIgb2YgdXNlcnMgcGVyIl19LHsibGljZW5zZVRleHRzIjpbIkZhaXIgTGljZW5zZSBcdTAwM2NDb3B5cmlnaHQgSW5mb3JtYXRpb25cdTAwM2VcblxuVXNhZ2Ugb2YgdGhlIHdvcmtzIGlzIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoaXMgaW5zdHJ1bWVudCBpcyByZXRhaW5lZCB3aXRoIHRoZSB3b3Jrcywgc28gdGhhdCBhbnkgZW50aXR5IHRoYXQgdXNlcyB0aGUgd29ya3MgaXMgbm90aWZpZWQgb2YgdGhpcyBpbnN0cnVtZW50LlxuXG5ESVNDTEFJTUVSOiBUSEUgV09SS1MgQVJFIFdJVEhPVVQgV0FSUkFOVFkuIl0sImxpY2Vuc2VJZHMiOlsiRmFpciJdLCJrZXl3b3JkcyI6WyJmYWlyIGxpY2Vuc2UgY29weXJpZ2h0IiwibGljZW5zZSBjb3B5cmlnaHQgaW5mb3JtYXRpb24iLCJjb3B5cmlnaHQgaW5mb3JtYXRpb24gdXNhZ2UiLCJpbmZvcm1hdGlvbiB1c2FnZSBvZiIsIndvcmtzIGlzIHBlcm1pdHRlZCIsInRoYXQgdGhpcyBpbnN0cnVtZW50IiwidGhpcyBpbnN0cnVtZW50IGlzIiwiaW5zdHJ1bWVudCBpcyByZXRhaW5lZCIsImlzIHJldGFpbmVkIHdpdGgiLCJyZXRhaW5lZCB3aXRoIHRoZSIsIndpdGggdGhlIHdvcmtzIiwidGhlIHdvcmtzIHNvIiwid29ya3Mgc28gdGhhdCIsInRoYXQgYW55IGVudGl0eSIsImVudGl0eSB0aGF0IHVzZXMiLCJ1c2VzIHRoZSB3b3JrcyIsIndvcmtzIGlzIG5vdGlmaWVkIiwibm90aWZpZWQgb2YgdGhpcyIsIm9mIHRoaXMgaW5zdHJ1bWVudCIsInRoaXMgaW5zdHJ1bWVudCBkaXNjbGFpbWVyIiwiaW5zdHJ1bWVudCBkaXNjbGFpbWVyIHRoZSIsImRpc2NsYWltZXIgdGhlIHdvcmtzIiwidGhlIHdvcmtzIGFyZSIsIndvcmtzIGFyZSB3aXRob3V0IiwiYXJlIHdpdGhvdXQgd2FycmFudHkiLCJmYWlyIGxpY2Vuc2UgY29weXJpZ2h0IGluZm9ybWF0aW9uIiwibGljZW5zZSBjb3B5cmlnaHQgaW5mb3JtYXRpb24gdXNhZ2UiLCJjb3B5cmlnaHQgaW5mb3JtYXRpb24gdXNhZ2Ugb2YiLCJpbmZvcm1hdGlvbiB1c2FnZSBvZiB0aGUiLCJ1c2FnZSBvZiB0aGUgd29ya3MiLCJvZiB0aGUgd29ya3MgaXMiLCJ0aGUgd29ya3MgaXMgcGVybWl0dGVkIiwid29ya3MgaXMgcGVybWl0dGVkIHByb3ZpZGVkIiwicHJvdmlkZWQgdGhhdCB0aGlzIGluc3RydW1lbnQiLCJ0aGF0IHRoaXMgaW5zdHJ1bWVudCBpcyIsInRoaXMgaW5zdHJ1bWVudCBpcyByZXRhaW5lZCIsImluc3RydW1lbnQgaXMgcmV0YWluZWQgd2l0aCIsImlzIHJldGFpbmVkIHdpdGggdGhlIiwicmV0YWluZWQgd2l0aCB0aGUgd29ya3MiLCJ3aXRoIHRoZSB3b3JrcyBzbyIsInRoZSB3b3JrcyBzbyB0aGF0Iiwid29ya3Mgc28gdGhhdCBhbnkiLCJzbyB0aGF0IGFueSBlbnRpdHkiLCJ0aGF0IGFueSBlbnRpdHkgdGhhdCIsImFueSBlbnRpdHkgdGhhdCB1c2VzIiwiZW50aXR5IHRoYXQgdXNlcyB0aGUiLCJ0aGF0IHVzZXMgdGhlIHdvcmtzIiwidXNlcyB0aGUgd29ya3MgaXMiLCJ0aGUgd29ya3MgaXMgbm90aWZpZWQiLCJ3b3JrcyBpcyBub3RpZmllZCBvZiIsImlzIG5vdGlmaWVkIG9mIHRoaXMiLCJub3RpZmllZCBvZiB0aGlzIGluc3RydW1lbnQiLCJvZiB0aGlzIGluc3RydW1lbnQgZGlzY2xhaW1lciIsInRoaXMgaW5zdHJ1bWVudCBkaXNjbGFpbWVyIHRoZSIsImluc3RydW1lbnQgZGlzY2xhaW1lciB0aGUgd29ya3MiLCJkaXNjbGFpbWVyIHRoZSB3b3JrcyBhcmUiLCJ0aGUgd29ya3MgYXJlIHdpdGhvdXQiLCJ3b3JrcyBhcmUgd2l0aG91dCB3YXJyYW50eSIsImZhaXIgbGljZW5zZSBjb3B5cmlnaHQgaW5mb3JtYXRpb24gdXNhZ2UiLCJsaWNlbnNlIGNvcHlyaWdodCBpbmZvcm1hdGlvbiB1c2FnZSBvZiIsImNvcHlyaWdodCBpbmZvcm1hdGlvbiB1c2FnZSBvZiB0aGUiLCJpbmZvcm1hdGlvbiB1c2FnZSBvZiB0aGUgd29ya3MiLCJ1c2FnZSBvZiB0aGUgd29ya3MgaXMiLCJvZiB0aGUgd29ya3MgaXMgcGVybWl0dGVkIiwidGhlIHdvcmtzIGlzIHBlcm1pdHRlZCBwcm92aWRlZCIsIndvcmtzIGlzIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IiwicGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhpcyBpbnN0cnVtZW50IiwicHJvdmlkZWQgdGhhdCB0aGlzIGluc3RydW1lbnQgaXMiLCJ0aGF0IHRoaXMgaW5zdHJ1bWVudCBpcyByZXRhaW5lZCIsInRoaXMgaW5zdHJ1bWVudCBpcyByZXRhaW5lZCB3aXRoIiwiaW5zdHJ1bWVudCBpcyByZXRhaW5lZCB3aXRoIHRoZSIsImlzIHJldGFpbmVkIHdpdGggdGhlIHdvcmtzIiwicmV0YWluZWQgd2l0aCB0aGUgd29ya3Mgc28iLCJ3aXRoIHRoZSB3b3JrcyBzbyB0aGF0IiwidGhlIHdvcmtzIHNvIHRoYXQgYW55Iiwid29ya3Mgc28gdGhhdCBhbnkgZW50aXR5Iiwic28gdGhhdCBhbnkgZW50aXR5IHRoYXQiLCJ0aGF0IGFueSBlbnRpdHkgdGhhdCB1c2VzIiwiYW55IGVudGl0eSB0aGF0IHVzZXMgdGhlIiwiZW50aXR5IHRoYXQgdXNlcyB0aGUgd29ya3MiLCJ0aGF0IHVzZXMgdGhlIHdvcmtzIGlzIiwidXNlcyB0aGUgd29ya3MgaXMgbm90aWZpZWQiLCJ0aGUgd29ya3MgaXMgbm90aWZpZWQgb2YiLCJ3b3JrcyBpcyBub3RpZmllZCBvZiB0aGlzIiwiaXMgbm90aWZpZWQgb2YgdGhpcyBpbnN0cnVtZW50Iiwibm90aWZpZWQgb2YgdGhpcyBpbnN0cnVtZW50IGRpc2NsYWltZXIiLCJvZiB0aGlzIGluc3RydW1lbnQgZGlzY2xhaW1lciB0aGUiLCJ0aGlzIGluc3RydW1lbnQgZGlzY2xhaW1lciB0aGUgd29ya3MiLCJpbnN0cnVtZW50IGRpc2NsYWltZXIgdGhlIHdvcmtzIGFyZSIsImRpc2NsYWltZXIgdGhlIHdvcmtzIGFyZSB3aXRob3V0IiwidGhlIHdvcmtzIGFyZSB3aXRob3V0IHdhcnJhbnR5Il19LHsibGljZW5zZVRleHRzIjpbIlRIRSBGUkFNRVdPUlggT1BFTiBMSUNFTlNFIDEuMFxuXG5UaGlzIExpY2Vuc2UgQWdyZWVtZW50LCBUaGUgRnJhbWV3b3J4IE9wZW4gTGljZW5zZSAxLjAsIGhhcyBiZWVuIGVudGVyZWQgaW50byBiZXR3ZWVuIFRoZSBGcmFtZXdvcnggQ29tcGFueSBhbmQgeW91LCB0aGUgbGljZW5zZWUgaGVyZXVuZGVyLCBlZmZlY3RpdmUgYXMgb2YgWW91ciBhY2NlcHRhbmNlIG9mIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIG9yIGFuIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIChlYWNoIGFzIGRlZmluZWQgYmVsb3cpLlxuXG5BR1JFRU1FTlQgQkFDS0dST1VORFxuXG5UaGUgRnJhbWV3b3J4IENvbXBhbnkgaXMgY29tbWl0dGVkIHRvIHRoZSBiZWxpZWYgdGhhdCBvcGVuIHNvdXJjZSBzb2Z0d2FyZSByZXN1bHRzIGluIGJldHRlciBxdWFsaXR5LCBncmVhdGVyIHRlY2huaWNhbCBhbmQgcHJvZHVjdCBpbm5vdmF0aW9uIGluIHRoZSBtYXJrZXQgcGxhY2UgYW5kIGEgbW9yZSBlbXBvd2VyZWQgYW5kIHByb2R1Y3RpdmUgZGV2ZWxvcGVyIGFuZCBlbmQtdXNlciBjb21tdW5pdHkuIE91ciBvYmplY3RpdmUgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UsIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIGltcHJvdmVtZW50cyBhbmQgaW5ub3ZhdGlvbnMgdG8gaXQsIHJlbWFpbiBmcmVlIGFuZCBvcGVuIHRvIHRoZSBjb21tdW5pdHkuVG8gZnVydGhlciB0aGVzZSBiZWxpZWZzIGFuZCBvYmplY3RpdmVzLCB3ZSBhcmUgZGlzdHJpYnV0aW5nIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLCB3aXRob3V0IHJveWFsdGllcyBhbmQgaW4gc291cmNlIGNvZGUgZm9ybSwgdG8gdGhlIGNvbW11bml0eSBwdXJzdWFudCB0byB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LlxuXG5BR1JFRU1FTlQgVEVSTVNcblxuVGhlIEZyYW1ld29yeCBDb21wYW55IGFuZCBZb3UgaGF2ZSBhZ3JlZWQgYXMgZm9sbG93czpcblxuICAgMS4gRGVmaW5pdGlvbnMuVGhlIGZvbGxvd2luZyB0ZXJtcyBoYXZlIHRoZSBmb2xsb3dpbmcgcmVzcGVjdGl2ZSBtZWFuaW5nczpcblxuICAgICAgKGEpIEZyYW1ld29yeCBDb2RlIEJhc2UgbWVhbnMgdGhlIHNvZnR3YXJlIGRldmVsb3BlZCBieSBUaGUgRnJhbWV3b3J4IENvbXBhbnkgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnRcblxuICAgICAgKGIpIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIG1lYW5zIGFueSBkaXJlY3Qgb3IgaW5kaXJlY3QgcmVsZWFzZSwgZGlzdHJpYnV0aW9uIG9yIHJlbW90ZSBhdmFpbGFiaWxpdHkgb2Ygc29mdHdhcmUgKGkpIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjb250YWlucywgb3IgZGVwZW5kcyBmb3IgaXRzIGludGVuZGVkIGZ1bmN0aW9uaW5nIG9uLCB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSBvciBhbnkgcG9ydGlvbiBvciBlbGVtZW50IHRoZXJlb2YgYW5kIChpaSkgaW4gd2hpY2ggcmlnaHRzIHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSBzdWNoIEZyYW1ld29yeCBDb2RlIEJhc2Ugc29mdHdhcmUgZGVwZW5kLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvbiB0aGUgTGljZW5zZSBwcm92aWRlZCBpbiBTZWN0aW9uIDIgYmVsb3cuXG5cbiAgICAgIChjKSBcIlNvdXJjZSBDb2RlXCIgdG8gYW55IHNvZnR3YXJlIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhhdCBzb2Z0d2FyZSwgaW5jbHVkaW5nIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFuZCBjb21waWxhdGlvbiBvciBpbnN0YWxsYXRpb24gc2NyaXB0cywgb3IgYW55IHZlcnNpb24gdGhlcmVvZiB0aGF0IGhhcyBiZWVuIGNvbXByZXNzZWQgb3IgYXJjaGl2ZWQsIGFuZCBjYW4gYmUgcmVjb25zdGl0dXRlZCwgdXNpbmcgYW4gYXBwcm9wcmlhdGUgYW5kIGdlbmVyYWxseSBhdmFpbGFibGUgYXJjaGl2YWwgb3IgY29tcHJlc3Npb24gdGVjaG5vbG9neS5cblxuICAgICAgKGQpIFZhbHVlLUFkZGVkIFNlcnZpY2VzIG1lYW5zIGFueSBjb21tZXJjaWFsIG9yIGZlZS1iYXNlZCBzb2Z0d2FyZS1yZWxhdGVkIHNlcnZpY2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb246IHN5c3RlbSBvciBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBvciBjb25zdWx0aW5nOyB0ZWNobmljYWwgb3IgZW5kLXVzZXIgc3VwcG9ydCBvciB0cmFpbmluZzsgZGlzdHJpYnV0aW9uIG1haW50ZW5hbmNlLCBjb25maWd1cmF0aW9uIG9yIHZlcnNpb25pbmc7IG9yIG91dHNvdXJjZWQsIGhvc3RlZCBvciBuZXR3b3JrLWJhc2VkIGFwcGxpY2F0aW9uIHNlcnZpY2VzLlxuXG4gICAyLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlb2YsIFRoZSBGcmFtZXdvcnggQ29tcGFueSBoZXJlYnkgZ3JhbnRzIFlvdSBhIG5vbi1leGNsdXNpdmUgbGljZW5zZSAodGhlIExpY2Vuc2UpLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGFuZCBmb3Igbm8gZmVlIG90aGVyIHRoYW4gYSBub21pbmFsIGNoYXJnZSByZWZsZWN0aW5nIHRoZSBjb3N0cyBvZiBwaHlzaWNhbCBkaXN0cmlidXRpb24sIHRvOlxuXG4gICAgICAoYSkgdXNlIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLCBpbiBlaXRoZXIgU291cmNlIENvZGUgb3IgbWFjaGluZS1yZWFkYWJsZSBmb3JtO1xuXG4gICAgICAoYikgbWFrZSBtb2RpZmljYXRpb25zLCBhZGRpdGlvbnMgYW5kIGRlbGV0aW9ucyB0byB0aGUgY29udGVudCBvciBzdHJ1Y3R1cmUgb2YgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2U7IG9yXG5cbiAgICAgIChjKSBjcmVhdGUgbGFyZ2VyIHdvcmtzIG9yIGRlcml2YXRpdmUgd29ya3MgaW5jbHVkaW5nIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIG9yIGFueSBwb3J0aW9uIG9yIGVsZW1lbnQgdGhlcmVvZjsgYW5kXG5cbiAgICAgIChkKSByZWxlYXNlLCBkaXN0cmlidXRlIG9yIG1ha2UgYXZhaWxhYmxlLCBlaXRoZXIgZ2VuZXJhbGx5IG9yIHRvIGFueSBzcGVjaWZpYyB0aGlyZC1wYXJ0eSwgYW55IG9mIHRoZSBmb3JlZ29pbmcgaW4gU291cmNlIENvZGUgb3IgYmluYXJ5IGZvcm0uXG5cbiAgIDMuIExpY2Vuc2UgQ29uZGl0aW9ucy4gVGhlIGdyYW50IG9mIHRoZSBMaWNlbnNlIHVuZGVyIFNlY3Rpb24gMSBoZXJlb2YsIGFuZCB5b3VyIGV4ZXJjaXNlIG9mIGFsbCByaWdodHMgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIHdpbGwgcmVtYWluIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywgYXMgd2VsbCBhcyB0byB0aGUgb3RoZXIgcHJvdmlzaW9ucyBoZXJlb2Y6XG5cbiAgICAgIChhKSBDb21wbGV0ZSBTb3VyY2UgQ29kZSBmb3IgYW55IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgbWFkZSBieSBZb3UgdGhhdCBjb250YWlucywgb3IgZGVwZW5kcyBmb3IgaXRzIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkgb24sIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLCBvciBhbnkgcG9ydGlvbiBvciBlbGVtZW50IHRoZXJlb2YsIHNoYWxsIGJlIG1hZGUgZnJlZWx5IGF2YWlsYWJsZSB0byBhbGwgdXNlcnMgdGhlcmVvZiBvbiB0ZXJtcyBhbmQgY29uZGl0aW9ucyBubyBtb3JlIHJlc3RyaWN0aXZlLCBhbmQgbm8gbGVzcyBmYXZvcmFibGUgZm9yIGFueSB1c2VyIChpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgd2l0aCByZWdhcmQgdG8gU291cmNlIENvZGUgYXZhaWxhYmlsaXR5IGFuZCByb3lhbHR5LWZyZWUgdXNlKSB0aGFuIHRob3NlIHRlcm1zIGFuZCBjb25kaXRpb25zIHByb3ZpZGVkIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuXG5cbiAgICAgIChiKSBBbnkgVmFsdWUtQWRkZWQgU2VydmljZXMgdGhhdCB5b3Ugb2ZmZXIgb3IgcHJvdmlkZSwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgaW4gcmVsYXRpb24gdG8gYW55IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIHNoYWxsIGJlIG9mZmVyZWQgYW5kIHByb3ZpZGVkIG9uIGNvbW1lcmNpYWwgdGVybXMgdGhhdCBhcmUgcmVhc29uYWJseSBjb21tZW5zdXJhdGUgdG8gdGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIHN1Y2ggVmFsdWUtQWRkZWQgU2VydmljZXMuIEluIGFkZGl0aW9uLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb24gd2hpY2ggYW55IHN1Y2ggVmFsdWUgQWRkZWQgU2VydmljZXMgYXJlIHNvIG9mZmVyZWQgb3IgcHJvdmlkZWQgc2hhbGwgYmUgY29uc2lzdGVudCB3aXRoLCBhbmQgc2hhbGwgZnVsbHkgc3VwcG9ydCwgdGhlIGludGVudCBhbmQgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LlxuXG4gICAgICAoYykgQWxsIERvd25zdHJlYW0gRGlzdHJpYnV0aW9ucyBzaGFsbDpcblxuICAgICAgICAgKGkpIGluY2x1ZGUgYWxsIHBvcnRpb25zIGFuZCBlbGVtZW50cyBvZiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSByZXF1aXJlZCB0byBidWlsZCB0aGUgU291cmNlIENvZGUgb2Ygc3VjaCBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBpbnRvIGEgZnVsbHkgZnVuY3Rpb25hbCBtYWNoaW5lLWV4ZWN1dGFibGUgc3lzdGVtLCBvciBhZGRpdGlvbmFsIGJ1aWxkIHNjcmlwdHMgb3IgY29tcGFyYWJsZSBzb2Z0d2FyZSBuZWNlc3NhcnkgYW5kIHN1ZmZpY2llbnQgZm9yIHN1Y2ggcHVycG9zZXM7XG5cbiAgICAgICAgIChpaSkgaW5jbHVkZSwgaW4gZWFjaCBmaWxlIGNvbnRhaW5pbmcgYW55IHBvcnRpb24gb3IgZWxlbWVudCBvZiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSwgdGhlIGZvbGxvd2luZyBpZGVudGlmeWluZyBsZWdlbmQ6IFRoaXMgZmlsZSBjb250YWlucyBzb2Z0d2FyZSB0aGF0IGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHVuZGVyIFRoZSBGcmFtZXdvcnggT3BlbiBMaWNlbnNlIDEuMC4gVXNlIGFuZCBkaXN0cmlidXRpb24gaGVyZW9mIGFyZSBzdWJqZWN0IHRvIHRoZSByZXN0cmljdGlvbnMgc2V0IGZvcnRoIHRoZXJlaW4uXG5cbiAgICAgICAgIChpaWkpIGluY2x1ZGUgYWxsIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLCBhdXRob3JzaGlwIGNyZWRpdHMsIHdhcnJhbnR5IGRpc2NsYWltZXJzIChpbmNsdWRpbmcgdGhhdCBwcm92aWRlZCBpbiBTZWN0aW9uIDYgYmVsb3cpLCBsZWdlbmRzLCBkb2N1bWVudGF0aW9uLCBhbm5vdGF0aW9ucyBhbmQgY29tbWVudHMgY29udGFpbmVkIGluIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIGFzIHByb3ZpZGVkIHRvIFlvdSBoZXJldW5kZXI7XG5cbiAgICAgICAgIChpdikgY29udGFpbiBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGUgaHRtbCBmaWxlIG5hbWVkIGZyYW1ld29yeF9jb21tdW5pdHlfaW52aXRhdGlvbi5odG1sIGluY2x1ZGVkIHdpdGhpbiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSB0aGF0IGFja25vd2xlZGdlcyBuZXcgdXNlcnMgYW5kIHByb3ZpZGVzIHRoZW0gd2l0aCBpbmZvcm1hdGlvbiBvbiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSBjb21tdW5pdHk7XG5cbiAgICAgICAgICh2KSBjb250YWluIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoZSB0ZXh0IGZpbGUgbmFtZWQgdGhlX2ZyYW1ld29yeF9saWNlbnNlLnR4dCBpbmNsdWRlZCB3aXRoaW4gdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UgdGhhdCBpbmNsdWRlcyBhIHRleHQgY29weSBvZiB0aGUgZm9ybSBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50OyBhbmRcblxuICAgICAgICAgKHZpKSBwcm9taW5lbnRseSBkaXNwbGF5IHRvIGFueSB2aWV3ZXIgb3IgdXNlciBvZiB0aGUgU291cmNlIENvZGUgb2Ygc3VjaCBPcGVuIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uLCBpbiB0aGUgcGxhY2UgYW5kIG1hbm5lciBub3JtYWxseSB1c2VkIGZvciBzdWNoIGRpc3BsYXlzLCB0aGUgZm9sbG93aW5nIGxlZ2VuZDpcblxuICAgU291cmNlIGNvZGUgbGljZW5zZWQgdW5kZXIgZnJvbSBUaGUgRnJhbWV3b3J4IENvbXBhbnkgaXMgY29udGFpbmVkIGhlcmVpbiwgYW5kIHN1Y2ggc291cmNlIGNvZGUgaGFzIGJlZW4gb2J0YWluZWQgZWl0aGVyIHVuZGVyIFRoZSBGcmFtZXdvcnggT3BlbiBMaWNlbnNlLCBvciBhbm90aGVyIGxpY2Vuc2UgZ3JhbnRlZCBieSBUaGUgRnJhbWV3b3J4IENvbXBhbnkuIFVzZSBhbmQgZGlzdHJpYnV0aW9uIGhlcmVvZiBpcyBzdWJqZWN0IHRvIHRoZSByZXN0cmljdGlvbnMgcHJvdmlkZWQgaW4gdGhlIHJlbGV2YW50IHN1Y2ggbGljZW5zZSBhbmQgdG8gdGhlIGNvcHlyaWdodHMgb2YgdGhlIGxpY2Vuc29yIHRoZXJldW5kZXIuIEEgY29weSBvZiBUaGUgRnJhbWV3b3J4IE9wZW4gTGljZW5zZSBpcyBwcm92aWRlZCBpbiBhIGZpbGUgbmFtZWQgdGhlX2ZyYW1ld29yeF9saWNlbnNlLnR4dCBhbmQgaW5jbHVkZWQgaGVyZWluLCBhbmQgbWF5IGFsc28gYmUgYXZhaWxhYmxlIGZvciBpbnNwZWN0aW9uIGF0IGh0dHA6Ly93d3cuZnJhbWV3b3J4LmNvbS5cblxuICAgNC4gUmVzdHJpY3Rpb25zIG9uIE9wZW4gRG93bnN0cmVhbSBEaXN0cmlidXRpb25zLiBFYWNoIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIG1hZGUgYnkgWW91LCBhbmQgYnkgYW55IHBhcnR5IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgb2J0YWluaW5nIHJpZ2h0cyB0byB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSB0aHJvdWdoIFlvdSwgc2hhbGwgYmUgbWFkZSBzdWJqZWN0IHRvIGEgbGljZW5zZSBncmFudCBvciBhZ3JlZW1lbnQgdG8gdGhlIGV4dGVudCBuZWNlc3Nhcnkgc28gdGhhdCBlYWNoIGRpc3RyaWJ1dGVlIHVuZGVyIHRoYXQgRG93bnN0cmVhbSBEaXN0cmlidXRpb24gd2lsbCBiZSBzdWJqZWN0IHRvIHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBvbiByZS1kaXN0cmlidXRpb24gYW5kIHVzZSBhcyBhcmUgYmluZGluZyBvbiBZb3UgaGVyZXVuZGVyLiBZb3UgbWF5IHNhdGlzZnkgdGhpcyBsaWNlbnNpbmcgcmVxdWlyZW1lbnQgZWl0aGVyIGJ5OlxuXG4gICAgICAoYSkgcmVxdWlyaW5nIGFzIGEgY29uZGl0aW9uIHRvIGFueSBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBtYWRlIGJ5IHlvdSwgb3IgYnkgYW55IGRpcmVjdCBvciBpbmRpcmVjdCBkaXN0cmlidXRlZSBvZiBZb3VyIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIChvciBhbnkgcG9ydGlvbiBvciBlbGVtZW50IHRoZXJlb2YpLCB0aGF0IGVhY2ggZGlzdHJpYnV0ZWUgdW5kZXIgdGhlIHJlbGV2YW50IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIG9idGFpbiBhIGRpcmVjdCBsaWNlbnNlIChvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aG9zZSBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50KSBmcm9tIFRoZSBGcmFtZXdvcnggQ29tcGFueTsgb3JcblxuICAgICAgKGIpIHN1Yi1saWNlbnNpbmcgYWxsIChhbmQgbm90IGxlc3MgdGhhbiBhbGwpIG9mIFlvdXIgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBoZXJldW5kZXIgdG8gdGhhdCBkaXN0cmlidXRlZSwgaW5jbHVkaW5nICh3aXRob3V0IGxpbWl0YXRpb24pIFlvdXIgb2JsaWdhdGlvbiB0byByZXF1aXJlIGRpc3RyaWJ1dGVlcyB0byBiZSBib3VuZCBieSBsaWNlbnNlIHJlc3RyaWN0aW9ucyBhcyBjb250ZW1wbGF0ZWQgYnkgdGhpcyBTZWN0aW9uIDQgYWJvdmUuXG5cbiAgIFRoZSBGcmFtZXdvcnggQ29tcGFueSBoZXJlYnkgZ3JhbnRzIHRvIHlvdSBhbGwgcmlnaHRzIHRvIHN1Yi1saWNlbnNlIHlvdXIgcmlnaHRzIGhlcmV1bmRlciBhcyBuZWNlc3NhcnkgdG8gZnVsbHkgZWZmZWN0IHRoZSBpbnRlbnQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBTZWN0aW9uIDQgYWJvdmUsIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IHlvdXIgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBoZXJldW5kZXIgc2hhbGwgYmUgdW5hZmZlY3RlZCBieSBhbnkgc3VjaCBzdWJsaWNlbnNpbmcuIEluIGFkZGl0aW9uLCBUaGUgRnJhbWV3b3J4IENvbXBhbnkgZXhwcmVzc2x5IHJldGFpbnMgYWxsIHJpZ2h0cyB0byB0YWtlIGFsbCBhcHByb3ByaWF0ZSBhY3Rpb24gKGluY2x1ZGluZyBsZWdhbCBhY3Rpb24pIGFnYWluc3QgYW55IHN1Y2ggZGlyZWN0IG9yIGluZGlyZWN0IHN1Yi1saWNlbnNlZSB0byBlbnN1cmUgaXRzIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRoZSBpbnRlbnQgYW5kIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuXG5cbiAgIDUuIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4gRXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCBoZXJlaW4sIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgcHJlc2VydmVzIGFuZCByZXNwZWN0cyBZb3VyIGFuZCBUaGUgRnJhbWV3b3J4IENvbXBhbnlzIHJlc3BlY3RpdmUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgaW5jbHVkaW5nLCBpbiB0aGUgY2FzZSBvZiBUaGUgRnJhbWV3b3J4IENvbXBhbnksIGl0cyBjb3B5cmlnaHRzIGFuZCBwYXRlbnQgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLlxuXG4gICA2LiBXYXJyYW50eSBEaXNjbGFpbWVyLiBUSEUgU09GVFdBUkUgTElDRU5TRUQgSEVSRVVOREVSIElTIFBST1ZJREVEIGBgQVMgSVMuJycgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVCwgQVJFIEhFUkVCWSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgTElDRU5TT1IgT0YgVEhJUyBTT0ZUV0FSRSwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgSU5DTFVESU5HIChCVVQgTk9UIExJTUlURUQgVE8pIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG4gICA3LiBMaWNlbnNlIFZpb2xhdGlvbi4gVGhlIExpY2Vuc2UsIGFuZCBhbGwgb2YgeW91ciByaWdodHMgdGhlcmV1bmRlciwgc2hhbGwgYmUgZGVlbWVkIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlZCBhbmQgdm9pZCBhcyBvZiBhbnkgRG93bnN0cmVhbSBEaXN0cmlidXRpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBtYWRlIG9yIGZhY2lsaXRhdGVkIGJ5IFlvdSB0aGF0IHZpb2xhdGVzIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgc3Vydml2ZSBhbnkgc3VjaCB0ZXJtaW5hdGlvbiBpbiBvcmRlciB0byByZW1lZHkgdGhlIGVmZmVjdHMgb2Ygc3VjaCB2aW9sYXRpb24uIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYmluZGluZyBvbiB0aGUgbGVnYWwgc3VjY2Vzc29ycyBhbmQgYXNzaWducyBvZiB0aGUgcGFydGllcyBoZXJldG8uXG5cbiAgIFlvdXIgYWdyZWVtZW50IHRvIHRoZSBmb3JlZ29pbmcgYXMgb2YgdGhlIGRhdGUgaGVyZW9mIGhhcyBiZWVuIGV2aWRlbmNlZCBieSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlIHJlbGV2YW50IHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBoZXJldW5kZXIuIChDKSBUSEUgRlJBTUVXT1JYIENPTVBBTlkgMjAwMyJdLCJsaWNlbnNlSWRzIjpbIkZyYW1ld29yeC0xLjAiXSwia2V5d29yZHMiOlsiYWdyZWVtZW50IHRoZSBmcmFtZXdvcngiLCIxIDAgaGFzIiwiaGFzIGJlZW4gZW50ZXJlZCIsImJlZW4gZW50ZXJlZCBpbnRvIiwiZW50ZXJlZCBpbnRvIGJldHdlZW4iLCJpbnRvIGJldHdlZW4gdGhlIiwiYmV0d2VlbiB0aGUgZnJhbWV3b3J4IiwidGhlIGxpY2Vuc2VlIGhlcmV1bmRlciIsImxpY2Vuc2VlIGhlcmV1bmRlciBlZmZlY3RpdmUiLCJoZXJldW5kZXIgZWZmZWN0aXZlIGFzIiwiYXMgb2YgeW91ciIsImJhc2Ugb3IgYW4iLCJvciBhbiBkb3duc3RyZWFtIiwiYW4gZG93bnN0cmVhbSBkaXN0cmlidXRpb24iLCJkb3duc3RyZWFtIGRpc3RyaWJ1dGlvbiBlYWNoIiwiZGlzdHJpYnV0aW9uIGVhY2ggYXMiLCJlYWNoIGFzIGRlZmluZWQiLCJkZWZpbmVkIGJlbG93IGFncmVlbWVudCIsImJlbG93IGFncmVlbWVudCBiYWNrZ3JvdW5kIiwiYWdyZWVtZW50IGJhY2tncm91bmQgdGhlIiwiYmFja2dyb3VuZCB0aGUgZnJhbWV3b3J4IiwiY29tcGFueSBpcyBjb21taXR0ZWQiLCJpcyBjb21taXR0ZWQgdG8iLCJjb21taXR0ZWQgdG8gdGhlIiwidG8gdGhlIGJlbGllZiIsInRoZSBiZWxpZWYgdGhhdCIsImJlbGllZiB0aGF0IG9wZW4iLCJzb3VyY2Ugc29mdHdhcmUgcmVzdWx0cyIsInJlc3VsdHMgaW4gYmV0dGVyIiwiaW4gYmV0dGVyIHF1YWxpdHkiLCJiZXR0ZXIgcXVhbGl0eSBncmVhdGVyIiwicXVhbGl0eSBncmVhdGVyIHRlY2huaWNhbCIsImdyZWF0ZXIgdGVjaG5pY2FsIGFuZCIsInRlY2huaWNhbCBhbmQgcHJvZHVjdCIsImFuZCBwcm9kdWN0IGlubm92YXRpb24iLCJwcm9kdWN0IGlubm92YXRpb24gaW4iLCJpbm5vdmF0aW9uIGluIHRoZSIsImluIHRoZSBtYXJrZXQiLCJ0aGUgbWFya2V0IHBsYWNlIiwibWFya2V0IHBsYWNlIGFuZCIsInBsYWNlIGFuZCBhIiwiYW5kIGEgbW9yZSIsImEgbW9yZSBlbXBvd2VyZWQiLCJtb3JlIGVtcG93ZXJlZCBhbmQiLCJlbXBvd2VyZWQgYW5kIHByb2R1Y3RpdmUiLCJhbmQgcHJvZHVjdGl2ZSBkZXZlbG9wZXIiLCJwcm9kdWN0aXZlIGRldmVsb3BlciBhbmQiLCJkZXZlbG9wZXIgYW5kIGVuZCIsImFuZCBlbmQgdXNlciIsImVuZCB1c2VyIGNvbW11bml0eSIsInVzZXIgY29tbXVuaXR5IG91ciIsImNvbW11bml0eSBvdXIgb2JqZWN0aXZlIiwib3VyIG9iamVjdGl2ZSBpcyIsIm9iamVjdGl2ZSBpcyB0byIsInRoYXQgdGhlIGZyYW1ld29yeCIsImJhc2UgYW5kIHRoZSIsImNvZGUgZm9yIGltcHJvdmVtZW50cyIsImZvciBpbXByb3ZlbWVudHMgYW5kIiwiaW1wcm92ZW1lbnRzIGFuZCBpbm5vdmF0aW9ucyIsImFuZCBpbm5vdmF0aW9ucyB0byIsImlubm92YXRpb25zIHRvIGl0IiwidG8gaXQgcmVtYWluIiwiaXQgcmVtYWluIGZyZWUiLCJyZW1haW4gZnJlZSBhbmQiLCJhbmQgb3BlbiB0byIsIm9wZW4gdG8gdGhlIiwidGhlIGNvbW11bml0eSB0byIsImNvbW11bml0eSB0byBmdXJ0aGVyIiwidG8gZnVydGhlciB0aGVzZSIsImZ1cnRoZXIgdGhlc2UgYmVsaWVmcyIsInRoZXNlIGJlbGllZnMgYW5kIiwiYmVsaWVmcyBhbmQgb2JqZWN0aXZlcyIsImFuZCBvYmplY3RpdmVzIHdlIiwib2JqZWN0aXZlcyB3ZSBhcmUiLCJ3ZSBhcmUgZGlzdHJpYnV0aW5nIiwiYXJlIGRpc3RyaWJ1dGluZyB0aGUiLCJkaXN0cmlidXRpbmcgdGhlIGZyYW1ld29yeCIsImNvZGUgYmFzZSB3aXRob3V0IiwiYmFzZSB3aXRob3V0IHJveWFsdGllcyIsIndpdGhvdXQgcm95YWx0aWVzIGFuZCIsInJveWFsdGllcyBhbmQgaW4iLCJmb3JtIHRvIHRoZSIsInRoZSBjb21tdW5pdHkgcHVyc3VhbnQiLCJjb21tdW5pdHkgcHVyc3VhbnQgdG8iLCJhZ3JlZW1lbnQgYWdyZWVtZW50IHRlcm1zIiwiYWdyZWVtZW50IHRlcm1zIHRoZSIsInRlcm1zIHRoZSBmcmFtZXdvcngiLCJ5b3UgaGF2ZSBhZ3JlZWQiLCJoYXZlIGFncmVlZCBhcyIsImFncmVlZCBhcyBmb2xsb3dzIiwiZm9sbG93cyAxIGRlZmluaXRpb25zIiwiZGVmaW5pdGlvbnMgdGhlIGZvbGxvd2luZyIsInRoZSBmb2xsb3dpbmcgcmVzcGVjdGl2ZSIsImZvbGxvd2luZyByZXNwZWN0aXZlIG1lYW5pbmdzIiwicmVzcGVjdGl2ZSBtZWFuaW5ncyBhIiwibWVhbmluZ3MgYSBmcmFtZXdvcngiLCJhIGZyYW1ld29yeCBjb2RlIiwiY29kZSBiYXNlIG1lYW5zIiwiYmFzZSBtZWFucyB0aGUiLCJjb21wYW55IGFuZCBtYWRlIiwiYWdyZWVtZW50IGIgZG93bnN0cmVhbSIsImIgZG93bnN0cmVhbSBkaXN0cmlidXRpb24iLCJkb3duc3RyZWFtIGRpc3RyaWJ1dGlvbiBtZWFucyIsImRpc3RyaWJ1dGlvbiBtZWFucyBhbnkiLCJtZWFucyBhbnkgZGlyZWN0Iiwib3IgaW5kaXJlY3QgcmVsZWFzZSIsImluZGlyZWN0IHJlbGVhc2UgZGlzdHJpYnV0aW9uIiwicmVsZWFzZSBkaXN0cmlidXRpb24gb3IiLCJkaXN0cmlidXRpb24gb3IgcmVtb3RlIiwib3IgcmVtb3RlIGF2YWlsYWJpbGl0eSIsInJlbW90ZSBhdmFpbGFiaWxpdHkgb2YiLCJhdmFpbGFiaWxpdHkgb2Ygc29mdHdhcmUiLCJvZiBzb2Z0d2FyZSBpIiwic29mdHdhcmUgaSB0aGF0IiwiaSB0aGF0IGRpcmVjdGx5Iiwib3IgaW5kaXJlY3RseSBjb250YWlucyIsImluZGlyZWN0bHkgY29udGFpbnMgb3IiLCJpdHMgaW50ZW5kZWQgZnVuY3Rpb25pbmciLCJpbnRlbmRlZCBmdW5jdGlvbmluZyBvbiIsImZ1bmN0aW9uaW5nIG9uIHRoZSIsImlpIGluIHdoaWNoIiwiaW4gd2hpY2ggcmlnaHRzIiwid2hpY2ggcmlnaHRzIHRvIiwiZGlzdHJpYnV0ZSBzdWNoIGZyYW1ld29yeCIsInN1Y2ggZnJhbWV3b3J4IGNvZGUiLCJjb2RlIGJhc2Ugc29mdHdhcmUiLCJiYXNlIHNvZnR3YXJlIGRlcGVuZCIsInNvZnR3YXJlIGRlcGVuZCBkaXJlY3RseSIsImRlcGVuZCBkaXJlY3RseSBvciIsIm9yIGluZGlyZWN0bHkgb24iLCJpbmRpcmVjdGx5IG9uIHRoZSIsIm9uIHRoZSBsaWNlbnNlIiwiMiBiZWxvdyBjIiwiYmVsb3cgYyBzb3VyY2UiLCJhbnkgc29mdHdhcmUgbWVhbnMiLCJtb2RpZmljYXRpb25zIHRvIHRoYXQiLCJ0byB0aGF0IHNvZnR3YXJlIiwidGhhdCBzb2Z0d2FyZSBpbmNsdWRpbmciLCJzb2Z0d2FyZSBpbmNsdWRpbmcgYW55IiwiaW5jbHVkaW5nIGFueSBhc3NvY2lhdGVkIiwiZmlsZXMgYW5kIGNvbXBpbGF0aW9uIiwiYW5kIGNvbXBpbGF0aW9uIG9yIiwiY29tcGlsYXRpb24gb3IgaW5zdGFsbGF0aW9uIiwib3IgaW5zdGFsbGF0aW9uIHNjcmlwdHMiLCJpbnN0YWxsYXRpb24gc2NyaXB0cyBvciIsInNjcmlwdHMgb3IgYW55Iiwib3IgYW55IHZlcnNpb24iLCJhbnkgdmVyc2lvbiB0aGVyZW9mIiwidmVyc2lvbiB0aGVyZW9mIHRoYXQiLCJ0aGVyZW9mIHRoYXQgaGFzIiwiaGFzIGJlZW4gY29tcHJlc3NlZCIsImJlZW4gY29tcHJlc3NlZCBvciIsImNvbXByZXNzZWQgb3IgYXJjaGl2ZWQiLCJvciBhcmNoaXZlZCBhbmQiLCJhcmNoaXZlZCBhbmQgY2FuIiwiY2FuIGJlIHJlY29uc3RpdHV0ZWQiLCJiZSByZWNvbnN0aXR1dGVkIHVzaW5nIiwicmVjb25zdGl0dXRlZCB1c2luZyBhbiIsInVzaW5nIGFuIGFwcHJvcHJpYXRlIiwiYW4gYXBwcm9wcmlhdGUgYW5kIiwiYXBwcm9wcmlhdGUgYW5kIGdlbmVyYWxseSIsImFuZCBnZW5lcmFsbHkgYXZhaWxhYmxlIiwiZ2VuZXJhbGx5IGF2YWlsYWJsZSBhcmNoaXZhbCIsImF2YWlsYWJsZSBhcmNoaXZhbCBvciIsImFyY2hpdmFsIG9yIGNvbXByZXNzaW9uIiwib3IgY29tcHJlc3Npb24gdGVjaG5vbG9neSIsImNvbXByZXNzaW9uIHRlY2hub2xvZ3kgZCIsInRlY2hub2xvZ3kgZCB2YWx1ZSIsImQgdmFsdWUgYWRkZWQiLCJhZGRlZCBzZXJ2aWNlcyBtZWFucyIsInNlcnZpY2VzIG1lYW5zIGFueSIsIm1lYW5zIGFueSBjb21tZXJjaWFsIiwiYW55IGNvbW1lcmNpYWwgb3IiLCJjb21tZXJjaWFsIG9yIGZlZSIsIm9yIGZlZSBiYXNlZCIsImZlZSBiYXNlZCBzb2Z0d2FyZSIsImJhc2VkIHNvZnR3YXJlIHJlbGF0ZWQiLCJzb2Z0d2FyZSByZWxhdGVkIHNlcnZpY2UiLCJyZWxhdGVkIHNlcnZpY2UgaW5jbHVkaW5nIiwid2l0aG91dCBsaW1pdGF0aW9uIHN5c3RlbSIsImxpbWl0YXRpb24gc3lzdGVtIG9yIiwic3lzdGVtIG9yIGFwcGxpY2F0aW9uIiwib3IgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQiLCJhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBvciIsImRldmVsb3BtZW50IG9yIGNvbnN1bHRpbmciLCJvciBjb25zdWx0aW5nIHRlY2huaWNhbCIsImNvbnN1bHRpbmcgdGVjaG5pY2FsIG9yIiwidGVjaG5pY2FsIG9yIGVuZCIsIm9yIGVuZCB1c2VyIiwiZW5kIHVzZXIgc3VwcG9ydCIsInVzZXIgc3VwcG9ydCBvciIsInN1cHBvcnQgb3IgdHJhaW5pbmciLCJvciB0cmFpbmluZyBkaXN0cmlidXRpb24iLCJ0cmFpbmluZyBkaXN0cmlidXRpb24gbWFpbnRlbmFuY2UiLCJkaXN0cmlidXRpb24gbWFpbnRlbmFuY2UgY29uZmlndXJhdGlvbiIsIm1haW50ZW5hbmNlIGNvbmZpZ3VyYXRpb24gb3IiLCJjb25maWd1cmF0aW9uIG9yIHZlcnNpb25pbmciLCJvciB2ZXJzaW9uaW5nIG9yIiwidmVyc2lvbmluZyBvciBvdXRzb3VyY2VkIiwib3Igb3V0c291cmNlZCBob3N0ZWQiXX0seyJsaWNlbnNlVGV4dHMiOlsiRnJlZUltYWdlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjBcblxuICAgMS4gRGVmaW5pdGlvbnMuXG5cbiAgICAgIDEuMS4gXCJDb250cmlidXRvclwiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4yLiBcIkNvbnRyaWJ1dG9yIFZlcnNpb25cIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuXG5cbiAgICAgIDEuMy4gXCJDb3ZlcmVkIENvZGVcIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLlxuXG4gICAgICAxLjQuIFwiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtXCIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuXG5cbiAgICAgIDEuNS4gXCJFeGVjdXRhYmxlXCIgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuXG5cbiAgICAgIDEuNi4gXCJJbml0aWFsIERldmVsb3BlclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS5cblxuICAgICAgMS43LiBcIkxhcmdlciBXb3JrXCIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS44LiBcIkxpY2Vuc2VcIiBtZWFucyB0aGlzIGRvY3VtZW50LlxuXG4gICAgICAxLjkuIFwiTW9kaWZpY2F0aW9uc1wiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGFcblxuICAgICAgTW9kaWZpY2F0aW9uIGlzOlxuXG4gICAgICAgICBBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICAgICAgICBCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICAgICAxLjEwLiBcIk9yaWdpbmFsIENvZGVcIiBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjExLiBcIlNvdXJjZSBDb2RlXCIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3IgYSBsaXN0IG9mIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yJ3MgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLlxuXG4gICAgICAxLjEyLiBcIllvdVwiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbFwiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgMi4gU291cmNlIENvZGUgTGljZW5zZS5cblxuICAgICAgMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuXG5cbiAgICAgIFRoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6XG5cbiAgICAgICAgIChhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoXCJVdGlsaXplXCIpIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy5cblxuICAgICAgMi4yLiBDb250cmlidXRvciBHcmFudC5cblxuICAgICAgRWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6XG5cbiAgICAgICAgIChhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kXG5cbiAgICAgICAgIChiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLlxuXG4gICAzLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuXG5cbiAgICAgIDMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS5cblxuICAgICAgVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuXG5cbiAgICAgIDMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLlxuXG4gICAgICBBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS5cblxuICAgICAgMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLlxuXG4gICAgICBZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgICAgIDMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnNcblxuICAgICAgICAgKGEpIFRoaXJkIFBhcnR5IENsYWltcy5cblxuICAgICAgICAgSWYgWW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBwYXJ0eSBjbGFpbXMgYW4gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGluIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBjb2RlIChvciBpdHMgdXRpbGl6YXRpb24gdW5kZXIgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkIFwiTEVHQUxcIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgWW91IG1ha2UgWW91ciBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgWW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLlxuXG4gICAgICAgICAoYikgQ29udHJpYnV0b3IgQVBJcy5cblxuICAgICAgICAgSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBZb3Ugb3duIG9yIGNvbnRyb2wgcGF0ZW50cyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS5cblxuICAgICAgMy41LiBSZXF1aXJlZCBOb3RpY2VzLlxuXG4gICAgICBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLlxuXG4gICAgICBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjciBpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCdzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuXG5cbiAgICAgIDMuNy4gTGFyZ2VyIFdvcmtzLlxuXG4gICAgICBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgIDQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi5cblxuICAgSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuXG5cbiAgIDUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBLCBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuXG5cbiAgIDYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLlxuXG4gICAgICA2LjEuIE5ldyBWZXJzaW9ucy5cblxuICAgICAgRmxvcmlzIHZhbiBkZW4gQmVyZyBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuXG5cbiAgICAgIDYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy5cblxuICAgICAgT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IEZsb3JpcyB2YW4gZGVuIEJlcmdcblxuICAgICAgTm8gb25lIG90aGVyIHRoYW4gRmxvcmlzIHZhbiBkZW4gQmVyZyBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy5cblxuICAgICAgSWYgeW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgXCJGcmVlSW1hZ2VcIiwgYEZyZWVJbWFnZSBQdWJsaWMgTGljZW5zZVwiLCBcIkZJUExcIiwgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgYW55d2hlcmUgaW4geW91ciBsaWNlbnNlIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCB5b3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIEZyZWVJbWFnZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKVxuXG4gICA3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLlxuXG4gICBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLlxuXG4gICA4LiBURVJNSU5BVElPTi5cblxuICAgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLlxuXG4gICA5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS5cblxuICAgVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWSBPVEhFUiBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVCBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLlxuXG4gICBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgXCJjb21tZXJjaWFsIGl0ZW0sXCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mIFwiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZVwiIGFuZCBcImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbixcIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uXG5cbiAgIDExLiBNSVNDRUxMQU5FT1VTLlxuXG4gICBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IER1dGNoIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluLCB0aGUgVGhlIE5ldGhlcmxhbmRzOiAoYSkgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZywgYWxsIGRpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSAoZXhjZXB0aW5nIGFueSBkaXNwdXRlIHJlbGF0aW5nIHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMpIHNoYWxsIGJlIHN1YmplY3QgdG8gZmluYWwgYW5kIGJpbmRpbmcgYXJiaXRyYXRpb24sIHdpdGggdGhlIGxvc2luZyBwYXJ0eSBwYXlpbmcgYWxsIGNvc3RzIG9mIGFyYml0cmF0aW9uOyAoYikgYW55IGFyYml0cmF0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGhlbGQgaW4gQWxtZWxvLCBUaGUgTmV0aGVybGFuZHM7IGFuZCAoYykgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBjb3VydCBvZiBBbG1lbG8sIFRoZSBOZXRoZXJsYW5kcyB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcyBhbmQgZXhwZW5zZXMuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuXG5cbiAgIDEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLlxuXG4gICBFeGNlcHQgaW4gY2FzZXMgd2hlcmUgYW5vdGhlciBDb250cmlidXRvciBoYXMgZmFpbGVkIHRvIGNvbXBseSB3aXRoIFNlY3Rpb24gMy40LCBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBZb3VyIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY29waWVzIG9mIENvdmVyZWQgQ29kZSB5b3UgbWFkZSBhdmFpbGFibGUsIHRoZSByZXZlbnVlcyB5b3UgcmVjZWl2ZWQgZnJvbSB1dGlsaXppbmcgc3VjaCByaWdodHMsIGFuZCBvdGhlciByZWxldmFudCBmYWN0b3JzLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIGFmZmVjdGVkIHBhcnRpZXMgdG8gZGlzdHJpYnV0ZSByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIEVYSElCSVQgQS5cblxuXCJUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBGcmVlSW1hZ2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly9ob21lLnd4cy5ubC9+Zmx2ZGJlcmcvZnJlZWltYWdlLWxpY2Vuc2UudHh0XG5cblNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIl0sImxpY2Vuc2VJZHMiOlsiRnJlZUltYWdlIl0sImtleXdvcmRzIjpbIndoaWNoIHlvdSBkZXNjciIsInlvdSBkZXNjciBpYmUiLCJkZXNjciBpYmUgcmVjaXBpZW50cyIsImliZSByZWNpcGllbnRzIHJpZ2h0cyIsIm5ldyB2ZXJzaW9ucyBmbG9yaXMiLCJ2ZXJzaW9ucyBmbG9yaXMgdmFuIiwiZGVuIGJlcmcgbWF5IiwiYmVyZyBtYXkgcHVibGlzaCIsInB1Ymxpc2hlZCBieSBmbG9yaXMiLCJieSBmbG9yaXMgdmFuIiwiZGVuIGJlcmcgbm8iLCJiZXJnIG5vIG9uZSIsIm90aGVyIHRoYW4gZmxvcmlzIiwidGhhbiBmbG9yaXMgdmFuIiwiZGVuIGJlcmcgaGFzIiwiYmVyZyBoYXMgdGhlIiwidGhlIHBocmFzZXMgZnJlZWltYWdlIiwicGhyYXNlcyBmcmVlaW1hZ2UgZnJlZWltYWdlIiwiZnJlZWltYWdlIGZyZWVpbWFnZSBwdWJsaWMiLCJwdWJsaWMgbGljZW5zZSBmaXBsIiwibGljZW5zZSBmaXBsIG9yIiwiZmlwbCBvciBhbnkiLCJmcm9tIHRoZSBmcmVlaW1hZ2UiLCJnb3Zlcm5lZCBieSBkdXRjaCIsImJ5IGR1dGNoIGxhdyIsImR1dGNoIGxhdyBwcm92aXNpb25zIiwidGhlIHRoZSBuZXRoZXJsYW5kcyIsInRoZSBuZXRoZXJsYW5kcyBhIiwibmV0aGVybGFuZHMgYSB1bmxlc3MiLCJoZWxkIGluIGFsbWVsbyIsImluIGFsbWVsbyB0aGUiLCJ0aGUgbmV0aGVybGFuZHMgYW5kIiwibmV0aGVybGFuZHMgYW5kIGMiLCJjb3VydCBvZiBhbG1lbG8iLCJvZiBhbG1lbG8gdGhlIiwidGhlIG5ldGhlcmxhbmRzIHdpdGgiLCJuZXRoZXJsYW5kcyB3aXRoIHRoZSIsImFuZCBleHBlbnNlcyBhbnkiLCJleHBlbnNlcyBhbnkgbGF3IiwidG8gdGhlIGZyZWVpbWFnZSIsImF0IGh0dHAgaG9tZSIsImh0dHAgaG9tZSB3eHMiLCJob21lIHd4cyBubCIsInd4cyBubCBmbHZkYmVyZyIsIm5sIGZsdmRiZXJnIGZyZWVpbWFnZSIsImZsdmRiZXJnIGZyZWVpbWFnZSBsaWNlbnNlIiwiZnJlZWltYWdlIGxpY2Vuc2UgdHh0IiwibGljZW5zZSB0eHQgc29mdHdhcmUiLCJ0eHQgc29mdHdhcmUgZGlzdHJpYnV0ZWQiLCJpbiB3aGljaCB5b3UgZGVzY3IiLCJ3aGljaCB5b3UgZGVzY3IgaWJlIiwieW91IGRlc2NyIGliZSByZWNpcGllbnRzIiwiZGVzY3IgaWJlIHJlY2lwaWVudHMgcmlnaHRzIiwiaWJlIHJlY2lwaWVudHMgcmlnaHRzIHJlbGF0aW5nIiwiMSBuZXcgdmVyc2lvbnMgZmxvcmlzIiwibmV3IHZlcnNpb25zIGZsb3JpcyB2YW4iLCJ2ZXJzaW9ucyBmbG9yaXMgdmFuIGRlbiIsInZhbiBkZW4gYmVyZyBtYXkiLCJkZW4gYmVyZyBtYXkgcHVibGlzaCIsImJlcmcgbWF5IHB1Ymxpc2ggcmV2aXNlZCIsImxpY2Vuc2UgcHVibGlzaGVkIGJ5IGZsb3JpcyIsInB1Ymxpc2hlZCBieSBmbG9yaXMgdmFuIiwiYnkgZmxvcmlzIHZhbiBkZW4iLCJ2YW4gZGVuIGJlcmcgbm8iLCJkZW4gYmVyZyBubyBvbmUiLCJiZXJnIG5vIG9uZSBvdGhlciIsIm9uZSBvdGhlciB0aGFuIGZsb3JpcyIsIm90aGVyIHRoYW4gZmxvcmlzIHZhbiIsInRoYW4gZmxvcmlzIHZhbiBkZW4iLCJ2YW4gZGVuIGJlcmcgaGFzIiwiZGVuIGJlcmcgaGFzIHRoZSIsImJlcmcgaGFzIHRoZSByaWdodCIsInRoYXQgdGhlIHBocmFzZXMgZnJlZWltYWdlIiwidGhlIHBocmFzZXMgZnJlZWltYWdlIGZyZWVpbWFnZSIsInBocmFzZXMgZnJlZWltYWdlIGZyZWVpbWFnZSBwdWJsaWMiLCJmcmVlaW1hZ2UgZnJlZWltYWdlIHB1YmxpYyBsaWNlbnNlIiwiZnJlZWltYWdlIHB1YmxpYyBsaWNlbnNlIGZpcGwiLCJwdWJsaWMgbGljZW5zZSBmaXBsIG9yIiwibGljZW5zZSBmaXBsIG9yIGFueSIsImZpcGwgb3IgYW55IGNvbmZ1c2luZ2x5IiwiZGlmZmVyIGZyb20gdGhlIGZyZWVpbWFnZSIsImZyb20gdGhlIGZyZWVpbWFnZSBwdWJsaWMiLCJmcmVlaW1hZ2UgcHVibGljIGxpY2Vuc2UgZmlsbGluZyIsImJlIGdvdmVybmVkIGJ5IGR1dGNoIiwiZ292ZXJuZWQgYnkgZHV0Y2ggbGF3IiwiYnkgZHV0Y2ggbGF3IHByb3Zpc2lvbnMiLCJkdXRjaCBsYXcgcHJvdmlzaW9ucyBleGNlcHQiLCJidXNpbmVzcyBpbiB0aGUgdGhlIiwiaW4gdGhlIHRoZSBuZXRoZXJsYW5kcyIsInRoZSB0aGUgbmV0aGVybGFuZHMgYSIsInRoZSBuZXRoZXJsYW5kcyBhIHVubGVzcyIsIm5ldGhlcmxhbmRzIGEgdW5sZXNzIG90aGVyd2lzZSIsImJlIGhlbGQgaW4gYWxtZWxvIiwiaGVsZCBpbiBhbG1lbG8gdGhlIiwiaW4gYWxtZWxvIHRoZSBuZXRoZXJsYW5kcyIsImFsbWVsbyB0aGUgbmV0aGVybGFuZHMgYW5kIiwidGhlIG5ldGhlcmxhbmRzIGFuZCBjIiwibmV0aGVybGFuZHMgYW5kIGMgYW55IiwidGhlIGNvdXJ0IG9mIGFsbWVsbyIsImNvdXJ0IG9mIGFsbWVsbyB0aGUiLCJvZiBhbG1lbG8gdGhlIG5ldGhlcmxhbmRzIiwiYWxtZWxvIHRoZSBuZXRoZXJsYW5kcyB3aXRoIiwidGhlIG5ldGhlcmxhbmRzIHdpdGggdGhlIiwibmV0aGVybGFuZHMgd2l0aCB0aGUgbG9zaW5nIiwiZmVlcyBhbmQgZXhwZW5zZXMgYW55IiwiYW5kIGV4cGVuc2VzIGFueSBsYXciLCJleHBlbnNlcyBhbnkgbGF3IG9yIiwic3ViamVjdCB0byB0aGUgZnJlZWltYWdlIiwidG8gdGhlIGZyZWVpbWFnZSBwdWJsaWMiLCJsaWNlbnNlIGF0IGh0dHAgaG9tZSIsImF0IGh0dHAgaG9tZSB3eHMiLCJodHRwIGhvbWUgd3hzIG5sIiwiaG9tZSB3eHMgbmwgZmx2ZGJlcmciLCJ3eHMgbmwgZmx2ZGJlcmcgZnJlZWltYWdlIiwibmwgZmx2ZGJlcmcgZnJlZWltYWdlIGxpY2Vuc2UiLCJmbHZkYmVyZyBmcmVlaW1hZ2UgbGljZW5zZSB0eHQiLCJmcmVlaW1hZ2UgbGljZW5zZSB0eHQgc29mdHdhcmUiLCJsaWNlbnNlIHR4dCBzb2Z0d2FyZSBkaXN0cmlidXRlZCIsInR4dCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciIsImNvbGxhdGVyYWwgaW4gd2hpY2ggeW91IGRlc2NyIiwiaW4gd2hpY2ggeW91IGRlc2NyIGliZSIsIndoaWNoIHlvdSBkZXNjciBpYmUgcmVjaXBpZW50cyIsInlvdSBkZXNjciBpYmUgcmVjaXBpZW50cyByaWdodHMiLCJkZXNjciBpYmUgcmVjaXBpZW50cyByaWdodHMgcmVsYXRpbmciLCJpYmUgcmVjaXBpZW50cyByaWdodHMgcmVsYXRpbmcgdG8iLCI2IDEgbmV3IHZlcnNpb25zIGZsb3JpcyIsIjEgbmV3IHZlcnNpb25zIGZsb3JpcyB2YW4iLCJuZXcgdmVyc2lvbnMgZmxvcmlzIHZhbiBkZW4iLCJ2ZXJzaW9ucyBmbG9yaXMgdmFuIGRlbiBiZXJnIiwiZmxvcmlzIHZhbiBkZW4gYmVyZyBtYXkiLCJ2YW4gZGVuIGJlcmcgbWF5IHB1Ymxpc2giLCJkZW4gYmVyZyBtYXkgcHVibGlzaCByZXZpc2VkIiwiYmVyZyBtYXkgcHVibGlzaCByZXZpc2VkIGFuZCIsInRoZSBsaWNlbnNlIHB1Ymxpc2hlZCBieSBmbG9yaXMiLCJsaWNlbnNlIHB1Ymxpc2hlZCBieSBmbG9yaXMgdmFuIiwicHVibGlzaGVkIGJ5IGZsb3JpcyB2YW4gZGVuIiwiYnkgZmxvcmlzIHZhbiBkZW4gYmVyZyIsImZsb3JpcyB2YW4gZGVuIGJlcmcgbm8iLCJ2YW4gZGVuIGJlcmcgbm8gb25lIiwiZGVuIGJlcmcgbm8gb25lIG90aGVyIiwiYmVyZyBubyBvbmUgb3RoZXIgdGhhbiIsIm5vIG9uZSBvdGhlciB0aGFuIGZsb3JpcyIsIm9uZSBvdGhlciB0aGFuIGZsb3JpcyB2YW4iLCJvdGhlciB0aGFuIGZsb3JpcyB2YW4gZGVuIiwidGhhbiBmbG9yaXMgdmFuIGRlbiBiZXJnIiwiZmxvcmlzIHZhbiBkZW4gYmVyZyBoYXMiLCJ2YW4gZGVuIGJlcmcgaGFzIHRoZSIsImRlbiBiZXJnIGhhcyB0aGUgcmlnaHQiLCJiZXJnIGhhcyB0aGUgcmlnaHQgdG8iLCJzbyB0aGF0IHRoZSBwaHJhc2VzIGZyZWVpbWFnZSIsInRoYXQgdGhlIHBocmFzZXMgZnJlZWltYWdlIGZyZWVpbWFnZSIsInRoZSBwaHJhc2VzIGZyZWVpbWFnZSBmcmVlaW1hZ2UgcHVibGljIiwicGhyYXNlcyBmcmVlaW1hZ2UgZnJlZWltYWdlIHB1YmxpYyBsaWNlbnNlIiwiZnJlZWltYWdlIGZyZWVpbWFnZSBwdWJsaWMgbGljZW5zZSBmaXBsIiwiZnJlZWltYWdlIHB1YmxpYyBsaWNlbnNlIGZpcGwgb3IiLCJwdWJsaWMgbGljZW5zZSBmaXBsIG9yIGFueSIsImxpY2Vuc2UgZmlwbCBvciBhbnkgY29uZnVzaW5nbHkiLCJmaXBsIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIiwid2hpY2ggZGlmZmVyIGZyb20gdGhlIGZyZWVpbWFnZSIsImRpZmZlciBmcm9tIHRoZSBmcmVlaW1hZ2UgcHVibGljIiwiZnJvbSB0aGUgZnJlZWltYWdlIHB1YmxpYyBsaWNlbnNlIiwidGhlIGZyZWVpbWFnZSBwdWJsaWMgbGljZW5zZSBmaWxsaW5nIiwiZnJlZWltYWdlIHB1YmxpYyBsaWNlbnNlIGZpbGxpbmcgaW4iLCJzaGFsbCBiZSBnb3Zlcm5lZCBieSBkdXRjaCIsImJlIGdvdmVybmVkIGJ5IGR1dGNoIGxhdyIsImdvdmVybmVkIGJ5IGR1dGNoIGxhdyBwcm92aXNpb25zIiwiYnkgZHV0Y2ggbGF3IHByb3Zpc2lvbnMgZXhjZXB0IiwiZHV0Y2ggbGF3IHByb3Zpc2lvbnMgZXhjZXB0IHRvIiwiZG8gYnVzaW5lc3MgaW4gdGhlIHRoZSIsImJ1c2luZXNzIGluIHRoZSB0aGUgbmV0aGVybGFuZHMiLCJpbiB0aGUgdGhlIG5ldGhlcmxhbmRzIGEiLCJ0aGUgdGhlIG5ldGhlcmxhbmRzIGEgdW5sZXNzIiwidGhlIG5ldGhlcmxhbmRzIGEgdW5sZXNzIG90aGVyd2lzZSIsIm5ldGhlcmxhbmRzIGEgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQiLCJzaGFsbCBiZSBoZWxkIGluIGFsbWVsbyIsImJlIGhlbGQgaW4gYWxtZWxvIHRoZSIsImhlbGQgaW4gYWxtZWxvIHRoZSBuZXRoZXJsYW5kcyIsImluIGFsbWVsbyB0aGUgbmV0aGVybGFuZHMgYW5kIiwiYWxtZWxvIHRoZSBuZXRoZXJsYW5kcyBhbmQgYyIsInRoZSBuZXRoZXJsYW5kcyBhbmQgYyBhbnkiLCJuZXRoZXJsYW5kcyBhbmQgYyBhbnkgbGl0aWdhdGlvbiIsIm9mIHRoZSBjb3VydCBvZiBhbG1lbG8iLCJ0aGUgY291cnQgb2YgYWxtZWxvIHRoZSIsImNvdXJ0IG9mIGFsbWVsbyB0aGUgbmV0aGVybGFuZHMiLCJvZiBhbG1lbG8gdGhlIG5ldGhlcmxhbmRzIHdpdGgiLCJhbG1lbG8gdGhlIG5ldGhlcmxhbmRzIHdpdGggdGhlIiwidGhlIG5ldGhlcmxhbmRzIHdpdGggdGhlIGxvc2luZyIsIm5ldGhlcmxhbmRzIHdpdGggdGhlIGxvc2luZyBwYXJ0eSIsImF0dG9ybmV5cyBmZWVzIGFuZCBleHBlbnNlcyBhbnkiLCJmZWVzIGFuZCBleHBlbnNlcyBhbnkgbGF3IiwiYW5kIGV4cGVuc2VzIGFueSBsYXcgb3IiLCJleHBlbnNlcyBhbnkgbGF3IG9yIHJlZ3VsYXRpb24iLCJhcmUgc3ViamVjdCB0byB0aGUgZnJlZWltYWdlIiwic3ViamVjdCB0byB0aGUgZnJlZWltYWdlIHB1YmxpYyIsInRvIHRoZSBmcmVlaW1hZ2UgcHVibGljIGxpY2Vuc2UiLCJ0aGUgZnJlZWltYWdlIHB1YmxpYyBsaWNlbnNlIHZlcnNpb24iLCJ0aGUgbGljZW5zZSBhdCBodHRwIGhvbWUiLCJsaWNlbnNlIGF0IGh0dHAgaG9tZSB3eHMiLCJhdCBodHRwIGhvbWUgd3hzIG5sIiwiaHR0cCBob21lIHd4cyBubCBmbHZkYmVyZyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2VcblxuVmVyc2lvbiAxLjEsIE1hcmNoIDIwMDBcblxuQ29weXJpZ2h0IChDKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0FcblxuRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLlxuXG4gICAwLiBQUkVBTUJMRVxuXG4gICBUaGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgaXMgdG8gbWFrZSBhIG1hbnVhbCwgdGV4dGJvb2ssIG9yIG90aGVyIHdyaXR0ZW4gZG9jdW1lbnQgXCJmcmVlXCIgaW4gdGhlIHNlbnNlIG9mIGZyZWVkb206IHRvIGFzc3VyZSBldmVyeW9uZSB0aGUgZWZmZWN0aXZlIGZyZWVkb20gdG8gY29weSBhbmQgcmVkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZ5aW5nIGl0LCBlaXRoZXIgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseS4gU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZSBwcmVzZXJ2ZXMgZm9yIHRoZSBhdXRob3IgYW5kIHB1Ymxpc2hlciBhIHdheSB0byBnZXQgY3JlZGl0IGZvciB0aGVpciB3b3JrLCB3aGlsZSBub3QgYmVpbmcgY29uc2lkZXJlZCByZXNwb25zaWJsZSBmb3IgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVycy5cblxuICAgVGhpcyBMaWNlbnNlIGlzIGEga2luZCBvZiBcImNvcHlsZWZ0XCIsIHdoaWNoIG1lYW5zIHRoYXQgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgZG9jdW1lbnQgbXVzdCB0aGVtc2VsdmVzIGJlIGZyZWUgaW4gdGhlIHNhbWUgc2Vuc2UuIEl0IGNvbXBsZW1lbnRzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggaXMgYSBjb3B5bGVmdCBsaWNlbnNlIGRlc2lnbmVkIGZvciBmcmVlIHNvZnR3YXJlLlxuXG4gICBXZSBoYXZlIGRlc2lnbmVkIHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byB1c2UgaXQgZm9yIG1hbnVhbHMgZm9yIGZyZWUgc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZSBwcm9ncmFtIHNob3VsZCBjb21lIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUgZnJlZWRvbXMgdGhhdCB0aGUgc29mdHdhcmUgZG9lcy4gQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOyBpdCBjYW4gYmUgdXNlZCBmb3IgYW55IHRleHR1YWwgd29yaywgcmVnYXJkbGVzcyBvZiBzdWJqZWN0IG1hdHRlciBvciB3aGV0aGVyIGl0IGlzIHB1Ymxpc2hlZCBhcyBhIHByaW50ZWQgYm9vay4gV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZSBwcmluY2lwYWxseSBmb3Igd29ya3Mgd2hvc2UgcHVycG9zZSBpcyBpbnN0cnVjdGlvbiBvciByZWZlcmVuY2UuXG5cbiAgIDEuIEFQUExJQ0FCSUxJVFkgQU5EIERFRklOSVRJT05TXG5cbiAgIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yayB0aGF0IGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgY2FuIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFRoZSBcIkRvY3VtZW50XCIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggbWFudWFsIG9yIHdvcmsuIEFueSBtZW1iZXIgb2YgdGhlIHB1YmxpYyBpcyBhIGxpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzIFwieW91XCIuXG5cbiAgIEEgXCJNb2RpZmllZCBWZXJzaW9uXCIgb2YgdGhlIERvY3VtZW50IG1lYW5zIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlIERvY3VtZW50IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIGNvcGllZCB2ZXJiYXRpbSwgb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS5cblxuICAgQSBcIlNlY29uZGFyeSBTZWN0aW9uXCIgaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhIGZyb250LW1hdHRlciBzZWN0aW9uIG9mIHRoZSBEb2N1bWVudCB0aGF0IGRlYWxzIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUgcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgRG9jdW1lbnQncyBvdmVyYWxsIHN1YmplY3QgKG9yIHRvIHJlbGF0ZWQgbWF0dGVycykgYW5kIGNvbnRhaW5zIG5vdGhpbmcgdGhhdCBjb3VsZCBmYWxsIGRpcmVjdGx5IHdpdGhpbiB0aGF0IG92ZXJhbGwgc3ViamVjdC4gKEZvciBleGFtcGxlLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gcGFydCBhIHRleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeSBTZWN0aW9uIG1heSBub3QgZXhwbGFpbiBhbnkgbWF0aGVtYXRpY3MuKSBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwgY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9yIHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvciBvZiBsZWdhbCwgY29tbWVyY2lhbCwgcGhpbG9zb3BoaWNhbCwgZXRoaWNhbCBvciBwb2xpdGljYWwgcG9zaXRpb24gcmVnYXJkaW5nIHRoZW0uXG5cbiAgIFRoZSBcIkludmFyaWFudCBTZWN0aW9uc1wiIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMgYXJlIGRlc2lnbmF0ZWQsIGFzIGJlaW5nIHRob3NlIG9mIEludmFyaWFudCBTZWN0aW9ucywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICBUaGUgXCJDb3ZlciBUZXh0c1wiIGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUgbGlzdGVkLCBhcyBGcm9udC1Db3ZlciBUZXh0cyBvciBCYWNrLUNvdmVyIFRleHRzLCBpbiB0aGUgbm90aWNlIHRoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgIEEgXCJUcmFuc3BhcmVudFwiIGNvcHkgb2YgdGhlIERvY3VtZW50IG1lYW5zIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5LCByZXByZXNlbnRlZCBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgZ2VuZXJhbCBwdWJsaWMsIHdob3NlIGNvbnRlbnRzIGNhbiBiZSB2aWV3ZWQgYW5kIGVkaXRlZCBkaXJlY3RseSBhbmQgc3RyYWlnaHRmb3J3YXJkbHkgd2l0aCBnZW5lcmljIHRleHQgZWRpdG9ycyBvciAoZm9yIGltYWdlcyBjb21wb3NlZCBvZiBwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvciBkcmF3aW5ncykgc29tZSB3aWRlbHkgYXZhaWxhYmxlIGRyYXdpbmcgZWRpdG9yLCBhbmQgdGhhdCBpcyBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gdGV4dCBmb3JtYXR0ZXJzIG9yIGZvciBhdXRvbWF0aWMgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQgZm9ybWF0dGVycy4gQSBjb3B5IG1hZGUgaW4gYW4gb3RoZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUgZm9ybWF0IHdob3NlIG1hcmt1cCBoYXMgYmVlbiBkZXNpZ25lZCB0byB0aHdhcnQgb3IgZGlzY291cmFnZSBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBieSByZWFkZXJzIGlzIG5vdCBUcmFuc3BhcmVudC4gQSBjb3B5IHRoYXQgaXMgbm90IFwiVHJhbnNwYXJlbnRcIiBpcyBjYWxsZWQgXCJPcGFxdWVcIi5cblxuICAgRXhhbXBsZXMgb2Ygc3VpdGFibGUgZm9ybWF0cyBmb3IgVHJhbnNwYXJlbnQgY29waWVzIGluY2x1ZGUgcGxhaW4gQVNDSUkgd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYVRlWCBpbnB1dCBmb3JtYXQsIFNHTUwgb3IgWE1MIHVzaW5nIGEgcHVibGljbHkgYXZhaWxhYmxlIERURCwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlIEhUTUwgZGVzaWduZWQgZm9yIGh1bWFuIG1vZGlmaWNhdGlvbi4gT3BhcXVlIGZvcm1hdHMgaW5jbHVkZSBQb3N0U2NyaXB0LCBQREYsIHByb3ByaWV0YXJ5IGZvcm1hdHMgdGhhdCBjYW4gYmUgcmVhZCBhbmQgZWRpdGVkIG9ubHkgYnkgcHJvcHJpZXRhcnkgd29yZCBwcm9jZXNzb3JzLCBTR01MIG9yIFhNTCBmb3Igd2hpY2ggdGhlIERURCBhbmQvb3IgcHJvY2Vzc2luZyB0b29scyBhcmUgbm90IGdlbmVyYWxseSBhdmFpbGFibGUsIGFuZCB0aGUgbWFjaGluZS1nZW5lcmF0ZWQgSFRNTCBwcm9kdWNlZCBieSBzb21lIHdvcmQgcHJvY2Vzc29ycyBmb3Igb3V0cHV0IHB1cnBvc2VzIG9ubHkuXG5cbiAgIFRoZSBcIlRpdGxlIFBhZ2VcIiBtZWFucywgZm9yIGEgcHJpbnRlZCBib29rLCB0aGUgdGl0bGUgcGFnZSBpdHNlbGYsIHBsdXMgc3VjaCBmb2xsb3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwgdGhpcyBMaWNlbnNlIHJlcXVpcmVzIHRvIGFwcGVhciBpbiB0aGUgdGl0bGUgcGFnZS4gRm9yIHdvcmtzIGluIGZvcm1hdHMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHRpdGxlIHBhZ2UgYXMgc3VjaCwgXCJUaXRsZSBQYWdlXCIgbWVhbnMgdGhlIHRleHQgbmVhciB0aGUgbW9zdCBwcm9taW5lbnQgYXBwZWFyYW5jZSBvZiB0aGUgd29yaydzIHRpdGxlLCBwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC5cblxuICAgMi4gVkVSQkFUSU0gQ09QWUlOR1xuXG4gICBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGluIGFueSBtZWRpdW0sIGVpdGhlciBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlIGNvcHlyaWdodCBub3RpY2VzLCBhbmQgdGhlIGxpY2Vuc2Ugbm90aWNlIHNheWluZyB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQgYXJlIHJlcHJvZHVjZWQgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgeW91IGFkZCBubyBvdGhlciBjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UgdGVjaG5pY2FsIG1lYXN1cmVzIHRvIG9ic3RydWN0IG9yIGNvbnRyb2wgdGhlIHJlYWRpbmcgb3IgZnVydGhlciBjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IgZGlzdHJpYnV0ZS4gSG93ZXZlciwgeW91IG1heSBhY2NlcHQgY29tcGVuc2F0aW9uIGluIGV4Y2hhbmdlIGZvciBjb3BpZXMuIElmIHlvdSBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBjb3BpZXMgeW91IG11c3QgYWxzbyBmb2xsb3cgdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAzLlxuXG4gICBZb3UgbWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLCBhbmQgeW91IG1heSBwdWJsaWNseSBkaXNwbGF5IGNvcGllcy5cblxuICAgMy4gQ09QWUlORyBJTiBRVUFOVElUWVxuXG4gICBJZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUgRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZSByZXF1aXJlcyBDb3ZlciBUZXh0cywgeW91IG11c3QgZW5jbG9zZSB0aGUgY29waWVzIGluIGNvdmVycyB0aGF0IGNhcnJ5LCBjbGVhcmx5IGFuZCBsZWdpYmx5LCBhbGwgdGhlc2UgQ292ZXIgVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24gdGhlIGJhY2sgY292ZXIuIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5IGFuZCBsZWdpYmx5IGlkZW50aWZ5IHlvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gVGhlIGZyb250IGNvdmVyIG11c3QgcHJlc2VudCB0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbCB3b3JkcyBvZiB0aGUgdGl0bGUgZXF1YWxseSBwcm9taW5lbnQgYW5kIHZpc2libGUuIFlvdSBtYXkgYWRkIG90aGVyIG1hdGVyaWFsIG9uIHRoZSBjb3ZlcnMgaW4gYWRkaXRpb24uIENvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlIHRoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQgYXMgdmVyYmF0aW0gY29weWluZyBpbiBvdGhlciByZXNwZWN0cy5cblxuICAgSWYgdGhlIHJlcXVpcmVkIHRleHRzIGZvciBlaXRoZXIgY292ZXIgYXJlIHRvbyB2b2x1bWlub3VzIHRvIGZpdCBsZWdpYmx5LCB5b3Ugc2hvdWxkIHB1dCB0aGUgZmlyc3Qgb25lcyBsaXN0ZWQgKGFzIG1hbnkgYXMgZml0IHJlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50IHBhZ2VzLlxuXG4gICBJZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50IG51bWJlcmluZyBtb3JlIHRoYW4gMTAwLCB5b3UgbXVzdCBlaXRoZXIgaW5jbHVkZSBhIG1hY2hpbmUtcmVhZGFibGUgVHJhbnNwYXJlbnQgY29weSBhbG9uZyB3aXRoIGVhY2ggT3BhcXVlIGNvcHksIG9yIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weSBhIHB1YmxpY2x5LWFjY2Vzc2libGUgY29tcHV0ZXItbmV0d29yayBsb2NhdGlvbiBjb250YWluaW5nIGEgY29tcGxldGUgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGZyZWUgb2YgYWRkZWQgbWF0ZXJpYWwsIHdoaWNoIHRoZSBnZW5lcmFsIG5ldHdvcmstdXNpbmcgcHVibGljIGhhcyBhY2Nlc3MgdG8gZG93bmxvYWQgYW5vbnltb3VzbHkgYXQgbm8gY2hhcmdlIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scy4gSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZSByZWFzb25hYmx5IHBydWRlbnQgc3RlcHMsIHdoZW4geW91IGJlZ2luIGRpc3RyaWJ1dGlvbiBvZiBPcGFxdWUgY29waWVzIGluIHF1YW50aXR5LCB0byBlbnN1cmUgdGhhdCB0aGlzIFRyYW5zcGFyZW50IGNvcHkgd2lsbCByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQgbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lIHllYXIgYWZ0ZXIgdGhlIGxhc3QgdGltZSB5b3UgZGlzdHJpYnV0ZSBhbiBPcGFxdWUgY29weSAoZGlyZWN0bHkgb3IgdGhyb3VnaCB5b3VyIGFnZW50cyBvciByZXRhaWxlcnMpIG9mIHRoYXQgZWRpdGlvbiB0byB0aGUgcHVibGljLlxuXG4gICBJdCBpcyByZXF1ZXN0ZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IHdlbGwgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YgY29waWVzLCB0byBnaXZlIHRoZW0gYSBjaGFuY2UgdG8gcHJvdmlkZSB5b3Ugd2l0aCBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIERvY3VtZW50LlxuXG4gICA0LiBNT0RJRklDQVRJT05TXG5cbiAgIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDIgYW5kIDMgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgcHJlY2lzZWx5IHRoaXMgTGljZW5zZSwgd2l0aCB0aGUgTW9kaWZpZWQgVmVyc2lvbiBmaWxsaW5nIHRoZSByb2xlIG9mIHRoZSBEb2N1bWVudCwgdGh1cyBsaWNlbnNpbmcgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8gd2hvZXZlciBwb3NzZXNzZXMgYSBjb3B5IG9mIGl0LiBJbiBhZGRpdGlvbiwgeW91IG11c3QgZG8gdGhlc2UgdGhpbmdzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uOlxuXG4gICAgICBBLiBVc2UgaW4gdGhlIFRpdGxlIFBhZ2UgKGFuZCBvbiB0aGUgY292ZXJzLCBpZiBhbnkpIGEgdGl0bGUgZGlzdGluY3QgZnJvbSB0aGF0IG9mIHRoZSBEb2N1bWVudCwgYW5kIGZyb20gdGhvc2Ugb2YgcHJldmlvdXMgdmVyc2lvbnMgKHdoaWNoIHNob3VsZCwgaWYgdGhlcmUgd2VyZSBhbnksIGJlIGxpc3RlZCBpbiB0aGUgSGlzdG9yeSBzZWN0aW9uIG9mIHRoZSBEb2N1bWVudCkuIFlvdSBtYXkgdXNlIHRoZSBzYW1lIHRpdGxlIGFzIGEgcHJldmlvdXMgdmVyc2lvbiBpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mIHRoYXQgdmVyc2lvbiBnaXZlcyBwZXJtaXNzaW9uLlxuXG4gICAgICBCLiBMaXN0IG9uIHRoZSBUaXRsZSBQYWdlLCBhcyBhdXRob3JzLCBvbmUgb3IgbW9yZSBwZXJzb25zIG9yIGVudGl0aWVzIHJlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLCB0b2dldGhlciB3aXRoIGF0IGxlYXN0IGZpdmUgb2YgdGhlIHByaW5jaXBhbCBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCAoYWxsIG9mIGl0cyBwcmluY2lwYWwgYXV0aG9ycywgaWYgaXQgaGFzIGxlc3MgdGhhbiBmaXZlKS5cblxuICAgICAgQy4gU3RhdGUgb24gdGhlIFRpdGxlIHBhZ2UgdGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2hlciBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiwgYXMgdGhlIHB1Ymxpc2hlci5cblxuICAgICAgRC4gUHJlc2VydmUgYWxsIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBvZiB0aGUgRG9jdW1lbnQuXG5cbiAgICAgIEUuIEFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMgYWRqYWNlbnQgdG8gdGhlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLlxuXG4gICAgICBGLiBJbmNsdWRlLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMsIGEgbGljZW5zZSBub3RpY2UgZ2l2aW5nIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlIEFkZGVuZHVtIGJlbG93LlxuXG4gICAgICBHLiBQcmVzZXJ2ZSBpbiB0aGF0IGxpY2Vuc2Ugbm90aWNlIHRoZSBmdWxsIGxpc3RzIG9mIEludmFyaWFudCBTZWN0aW9ucyBhbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50J3MgbGljZW5zZSBub3RpY2UuXG5cbiAgICAgIEguIEluY2x1ZGUgYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBJLiBQcmVzZXJ2ZSB0aGUgc2VjdGlvbiBlbnRpdGxlZCBcIkhpc3RvcnlcIiwgYW5kIGl0cyB0aXRsZSwgYW5kIGFkZCB0byBpdCBhbiBpdGVtIHN0YXRpbmcgYXQgbGVhc3QgdGhlIHRpdGxlLCB5ZWFyLCBuZXcgYXV0aG9ycywgYW5kIHB1Ymxpc2hlciBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhcyBnaXZlbiBvbiB0aGUgVGl0bGUgUGFnZS4gSWYgdGhlcmUgaXMgbm8gc2VjdGlvbiBlbnRpdGxlZCBcIkhpc3RvcnlcIiBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0ZSBvbmUgc3RhdGluZyB0aGUgdGl0bGUsIHllYXIsIGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIERvY3VtZW50IGFzIGdpdmVuIG9uIGl0cyBUaXRsZSBQYWdlLCB0aGVuIGFkZCBhbiBpdGVtIGRlc2NyaWJpbmcgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZS5cblxuICAgICAgSi4gUHJlc2VydmUgdGhlIG5ldHdvcmsgbG9jYXRpb24sIGlmIGFueSwgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwdWJsaWMgYWNjZXNzIHRvIGEgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGFuZCBsaWtld2lzZSB0aGUgbmV0d29yayBsb2NhdGlvbnMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJzaW9ucyBpdCB3YXMgYmFzZWQgb24uIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlIFwiSGlzdG9yeVwiIHNlY3Rpb24uIFlvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQgbGVhc3QgZm91ciB5ZWFycyBiZWZvcmUgdGhlIERvY3VtZW50IGl0c2VsZiwgb3IgaWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGUgdmVyc2lvbiBpdCByZWZlcnMgdG8gZ2l2ZXMgcGVybWlzc2lvbi5cblxuICAgICAgSy4gSW4gYW55IHNlY3Rpb24gZW50aXRsZWQgXCJBY2tub3dsZWRnZW1lbnRzXCIgb3IgXCJEZWRpY2F0aW9uc1wiLCBwcmVzZXJ2ZSB0aGUgc2VjdGlvbidzIHRpdGxlLCBhbmQgcHJlc2VydmUgaW4gdGhlIHNlY3Rpb24gYWxsIHRoZSBzdWJzdGFuY2UgYW5kIHRvbmUgb2YgZWFjaCBvZiB0aGUgY29udHJpYnV0b3IgYWNrbm93bGVkZ2VtZW50cyBhbmQvb3IgZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi5cblxuICAgICAgTC4gUHJlc2VydmUgYWxsIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgdGhlIERvY3VtZW50LCB1bmFsdGVyZWQgaW4gdGhlaXIgdGV4dCBhbmQgaW4gdGhlaXIgdGl0bGVzLiBTZWN0aW9uIG51bWJlcnMgb3IgdGhlIGVxdWl2YWxlbnQgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlY3Rpb24gdGl0bGVzLlxuXG4gICAgICBNLiBEZWxldGUgYW55IHNlY3Rpb24gZW50aXRsZWQgXCJFbmRvcnNlbWVudHNcIi4gU3VjaCBhIHNlY3Rpb24gbWF5IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi5cblxuICAgICAgTi4gRG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gYXMgXCJFbmRvcnNlbWVudHNcIiBvciB0byBjb25mbGljdCBpbiB0aXRsZSB3aXRoIGFueSBJbnZhcmlhbnQgU2VjdGlvbi5cblxuICAgSWYgdGhlIE1vZGlmaWVkIFZlcnNpb24gaW5jbHVkZXMgbmV3IGZyb250LW1hdHRlciBzZWN0aW9ucyBvciBhcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8gbWF0ZXJpYWwgY29waWVkIGZyb20gdGhlIERvY3VtZW50LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbCBvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuIFRvIGRvIHRoaXMsIGFkZCB0aGVpciB0aXRsZXMgdG8gdGhlIGxpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uJ3MgbGljZW5zZSBub3RpY2UuIFRoZXNlIHRpdGxlcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHNlY3Rpb24gdGl0bGVzLlxuXG4gICBZb3UgbWF5IGFkZCBhIHNlY3Rpb24gZW50aXRsZWQgXCJFbmRvcnNlbWVudHNcIiwgcHJvdmlkZWQgaXQgY29udGFpbnMgbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzIHBhcnRpZXMtLWZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzIGJlZW4gYXBwcm92ZWQgYnkgYW4gb3JnYW5pemF0aW9uIGFzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gb2YgYSBzdGFuZGFyZC5cblxuICAgWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LCBhbmQgYSBwYXNzYWdlIG9mIHVwIHRvIDI1IHdvcmRzIGFzIGEgQmFjay1Db3ZlciBUZXh0LCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IG9mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiBPbmx5IG9uZSBwYXNzYWdlIG9mIEZyb250LUNvdmVyIFRleHQgYW5kIG9uZSBvZiBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGFkZGVkIGJ5IChvciB0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gSWYgdGhlIERvY3VtZW50IGFscmVhZHkgaW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseSBhZGRlZCBieSB5b3Ugb3IgYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLCB5b3UgbWF5IG5vdCBhZGQgYW5vdGhlcjsgYnV0IHlvdSBtYXkgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQgcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cyBwdWJsaXNoZXIgdGhhdCBhZGRlZCB0aGUgb2xkIG9uZS5cblxuICAgVGhlIGF1dGhvcihzKSBhbmQgcHVibGlzaGVyKHMpIG9mIHRoZSBEb2N1bWVudCBkbyBub3QgYnkgdGhpcyBMaWNlbnNlIGdpdmUgcGVybWlzc2lvbiB0byB1c2UgdGhlaXIgbmFtZXMgZm9yIHB1YmxpY2l0eSBmb3Igb3IgdG8gYXNzZXJ0IG9yIGltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLlxuXG4gICA1LiBDT01CSU5JTkcgRE9DVU1FTlRTXG5cbiAgIFlvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkIHZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb21iaW5hdGlvbiBhbGwgb2YgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwgYW5kIGxpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMgbGljZW5zZSBub3RpY2UuXG5cbiAgIFRoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kIG11bHRpcGxlIGlkZW50aWNhbCBJbnZhcmlhbnQgU2VjdGlvbnMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgY29weS4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0IGRpZmZlcmVudCBjb250ZW50cywgbWFrZSB0aGUgdGl0bGUgb2YgZWFjaCBzdWNoIHNlY3Rpb24gdW5pcXVlIGJ5IGFkZGluZyBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGF1dGhvciBvciBwdWJsaXNoZXIgb2YgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4gTWFrZSB0aGUgc2FtZSBhZGp1c3RtZW50IHRvIHRoZSBzZWN0aW9uIHRpdGxlcyBpbiB0aGUgbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLlxuXG4gICBJbiB0aGUgY29tYmluYXRpb24sIHlvdSBtdXN0IGNvbWJpbmUgYW55IHNlY3Rpb25zIGVudGl0bGVkIFwiSGlzdG9yeVwiIGluIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbiBlbnRpdGxlZCBcIkhpc3RvcnlcIjsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgZW50aXRsZWQgXCJBY2tub3dsZWRnZW1lbnRzXCIsIGFuZCBhbnkgc2VjdGlvbnMgZW50aXRsZWQgXCJEZWRpY2F0aW9uc1wiLiBZb3UgbXVzdCBkZWxldGUgYWxsIHNlY3Rpb25zIGVudGl0bGVkIFwiRW5kb3JzZW1lbnRzLlwiXG5cbiAgIDYuIENPTExFQ1RJT05TIE9GIERPQ1VNRU5UU1xuXG4gICBZb3UgbWF5IG1ha2UgYSBjb2xsZWN0aW9uIGNvbnNpc3Rpbmcgb2YgdGhlIERvY3VtZW50IGFuZCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcyBMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkgdGhhdCBpcyBpbmNsdWRlZCBpbiB0aGUgY29sbGVjdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZm9sbG93IHRoZSBydWxlcyBvZiB0aGlzIExpY2Vuc2UgZm9yIHZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy5cblxuICAgWW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZCBkaXN0cmlidXRlIGl0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBpbnRvIHRoZSBleHRyYWN0ZWQgZG9jdW1lbnQsIGFuZCBmb2xsb3cgdGhpcyBMaWNlbnNlIGluIGFsbCBvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZiB0aGF0IGRvY3VtZW50LlxuXG4gICA3LiBBR0dSRUdBVElPTiBXSVRIIElOREVQRU5ERU5UIFdPUktTXG5cbiAgIEEgY29tcGlsYXRpb24gb2YgdGhlIERvY3VtZW50IG9yIGl0cyBkZXJpdmF0aXZlcyB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBkb2VzIG5vdCBhcyBhIHdob2xlIGNvdW50IGFzIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQsIHByb3ZpZGVkIG5vIGNvbXBpbGF0aW9uIGNvcHlyaWdodCBpcyBjbGFpbWVkIGZvciB0aGUgY29tcGlsYXRpb24uIFN1Y2ggYSBjb21waWxhdGlvbiBpcyBjYWxsZWQgYW4gXCJhZ2dyZWdhdGVcIiwgYW5kIHRoaXMgTGljZW5zZSBkb2VzIG5vdCBhcHBseSB0byB0aGUgb3RoZXIgc2VsZi1jb250YWluZWQgd29ya3MgdGh1cyBjb21waWxlZCB3aXRoIHRoZSBEb2N1bWVudCwgb24gYWNjb3VudCBvZiB0aGVpciBiZWluZyB0aHVzIGNvbXBpbGVkLCBpZiB0aGV5IGFyZSBub3QgdGhlbXNlbHZlcyBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC5cblxuICAgSWYgdGhlIENvdmVyIFRleHQgcmVxdWlyZW1lbnQgb2Ygc2VjdGlvbiAzIGlzIGFwcGxpY2FibGUgdG8gdGhlc2UgY29waWVzIG9mIHRoZSBEb2N1bWVudCwgdGhlbiBpZiB0aGUgRG9jdW1lbnQgaXMgbGVzcyB0aGFuIG9uZSBxdWFydGVyIG9mIHRoZSBlbnRpcmUgYWdncmVnYXRlLCB0aGUgRG9jdW1lbnQncyBDb3ZlciBUZXh0cyBtYXkgYmUgcGxhY2VkIG9uIGNvdmVycyB0aGF0IHN1cnJvdW5kIG9ubHkgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUgYWdncmVnYXRlLiBPdGhlcndpc2UgdGhleSBtdXN0IGFwcGVhciBvbiBjb3ZlcnMgYXJvdW5kIHRoZSB3aG9sZSBhZ2dyZWdhdGUuXG5cbiAgIDguIFRSQU5TTEFUSU9OXG5cbiAgIFRyYW5zbGF0aW9uIGlzIGNvbnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heSBkaXN0cmlidXRlIHRyYW5zbGF0aW9ucyBvZiB0aGUgRG9jdW1lbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHNlY3Rpb24gNC4gUmVwbGFjaW5nIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRyYW5zbGF0aW9ucyByZXF1aXJlcyBzcGVjaWFsIHBlcm1pc3Npb24gZnJvbSB0aGVpciBjb3B5cmlnaHQgaG9sZGVycywgYnV0IHlvdSBtYXkgaW5jbHVkZSB0cmFuc2xhdGlvbnMgb2Ygc29tZSBvciBhbGwgSW52YXJpYW50IFNlY3Rpb25zIGluIGFkZGl0aW9uIHRvIHRoZSBvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZSBJbnZhcmlhbnQgU2VjdGlvbnMuIFlvdSBtYXkgaW5jbHVkZSBhIHRyYW5zbGF0aW9uIG9mIHRoaXMgTGljZW5zZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGluY2x1ZGUgdGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UuIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgdHJhbnNsYXRpb24gYW5kIHRoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIHdpbGwgcHJldmFpbC5cblxuICAgOS4gVEVSTUlOQVRJT05cblxuICAgWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGZvciB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBvdGhlciBhdHRlbXB0IHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS5cblxuICAgMTAuIEZVVFVSRSBSRVZJU0lPTlMgT0YgVEhJUyBMSUNFTlNFXG5cbiAgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0Ly5cblxuICAgRWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBEb2N1bWVudCBzcGVjaWZpZXMgdGhhdCBhIHBhcnRpY3VsYXIgbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgXCJvciBhbnkgbGF0ZXIgdmVyc2lvblwiIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBzcGVjaWZpZWQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIEFEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHNcblxuVG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZTpcblxuQ29weXJpZ2h0IChjKSBZRUFSIFlPVVIgTkFNRS4gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMSBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIExJU1QgVEhFSVIgVElUTEVTLCB3aXRoIHRoZSBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBMSVNULCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyBMSVNULiBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgXCJHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2VcIi5cblxuSWYgeW91IGhhdmUgbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3cml0ZSBcIndpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zXCIgaW5zdGVhZCBvZiBzYXlpbmcgd2hpY2ggb25lcyBhcmUgaW52YXJpYW50LiBJZiB5b3UgaGF2ZSBubyBGcm9udC1Db3ZlciBUZXh0cywgd3JpdGUgXCJubyBGcm9udC1Db3ZlciBUZXh0c1wiIGluc3RlYWQgb2YgXCJGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBMSVNUXCI7IGxpa2V3aXNlIGZvciBCYWNrLUNvdmVyIFRleHRzLlxuXG5JZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLCB3ZSByZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mIGZyZWUgc29mdHdhcmUgbGljZW5zZSwgc3VjaCBhcyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHRvIHBlcm1pdCB0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4iXSwibGljZW5zZUlkcyI6WyJHRkRMLTEuMS1vci1sYXRlciIsIkdGREwtMS4xLW9ubHkiLCJHRkRMLTEuMSJdLCJrZXl3b3JkcyI6WyJtYXJjaCAyMDAwIGNvcHlyaWdodCIsIjIwMDAgY29weXJpZ2h0IGMiLCJjIDIwMDAgZnJlZSIsIjIwMDAgZnJlZSBzb2Z0d2FyZSIsIm9yIG90aGVyIHdyaXR0ZW4iLCJvdGhlciB3cml0dGVuIGRvY3VtZW50Iiwid3JpdHRlbiBkb2N1bWVudCBmcmVlIiwibGljZW5zZSB0aGUgZG9jdW1lbnQiLCJ5b3UgYSBtb2RpZmllZCIsIm92ZXJhbGwgc3ViamVjdCBmb3IiLCJzdWJqZWN0IGZvciBleGFtcGxlIiwiZXhhbXBsZSBpZiB0aGUiLCJsaWNlbnNlIHRoZSBjb3ZlciIsImxpY2Vuc2UgYSB0cmFuc3BhcmVudCIsImdlbmVyYWwgcHVibGljIHdob3NlIiwicHVibGljIHdob3NlIGNvbnRlbnRzIiwid2hvc2UgY29udGVudHMgY2FuIiwiY29udGVudHMgY2FuIGJlIiwiY2FuIGJlIHZpZXdlZCIsImJlIHZpZXdlZCBhbmQiLCJ2aWV3ZWQgYW5kIGVkaXRlZCIsImFuZCBlZGl0ZWQgZGlyZWN0bHkiLCJlZGl0ZWQgZGlyZWN0bHkgYW5kIiwiZGlyZWN0bHkgYW5kIHN0cmFpZ2h0Zm9yd2FyZGx5IiwiYW5kIHN0cmFpZ2h0Zm9yd2FyZGx5IHdpdGgiLCJ3aG9zZSBtYXJrdXAgaGFzIiwiaGFzIGJlZW4gZGVzaWduZWQiLCJiZWVuIGRlc2lnbmVkIHRvIiwiZGVzaWduZWQgdG8gdGh3YXJ0Iiwibm90IHRyYW5zcGFyZW50IGEiLCJ0cmFuc3BhcmVudCBhIGNvcHkiLCJzaW1wbGUgaHRtbCBkZXNpZ25lZCIsImh0bWwgZGVzaWduZWQgZm9yIiwiaHVtYW4gbW9kaWZpY2F0aW9uIG9wYXF1ZSIsIm1vZGlmaWNhdGlvbiBvcGFxdWUgZm9ybWF0cyIsImZvcm1hdHMgaW5jbHVkZSBwb3N0c2NyaXB0IiwiaW5jbHVkZSBwb3N0c2NyaXB0IHBkZiIsInBvc3RzY3JpcHQgcGRmIHByb3ByaWV0YXJ5IiwicGRmIHByb3ByaWV0YXJ5IGZvcm1hdHMiLCJnZW5lcmF0ZWQgaHRtbCBwcm9kdWNlZCIsImh0bWwgcHJvZHVjZWQgYnkiLCJ0aGUgdGV4dCAyIiwidGV4dCAyIHZlcmJhdGltIiwicHJpbnRlZCBjb3BpZXMgb2YiLCJjb3B5IGEgcHVibGljbHkiLCJwdWJsaWNseSBhY2Nlc3NpYmxlIGNvbXB1dGVyIiwiYWNjZXNzaWJsZSBjb21wdXRlciBuZXR3b3JrIiwibmV0d29yayBsb2NhdGlvbiBjb250YWluaW5nIiwibG9jYXRpb24gY29udGFpbmluZyBhIiwiY29udGFpbmluZyBhIGNvbXBsZXRlIiwiYWRkZWQgbWF0ZXJpYWwgd2hpY2giLCJtYXRlcmlhbCB3aGljaCB0aGUiLCJ0byBkb3dubG9hZCBhbm9ueW1vdXNseSIsImRvd25sb2FkIGFub255bW91c2x5IGF0IiwiYW5vbnltb3VzbHkgYXQgbm8iLCJubyBjaGFyZ2UgdXNpbmciLCJjaGFyZ2UgdXNpbmcgcHVibGljIiwibmV0d29yayBwcm90b2NvbHMgaWYiLCJwcm90b2NvbHMgaWYgeW91IiwiaXQgaGFzIGxlc3MiLCJoYXMgbGVzcyB0aGFuIiwibGVzcyB0aGFuIGZpdmUiLCJ0aGFuIGZpdmUgYyIsImZpdmUgYyBzdGF0ZSIsImVudGl0bGVkIGhpc3RvcnkgYW5kIiwiaGlzdG9yeSBhbmQgaXRzIiwiYW5kIGl0cyB0aXRsZSIsInBlcm1pc3Npb24gayBpbiIsImsgaW4gYW55IiwiaW4gYW55IHNlY3Rpb24iLCJ0aGUgc2VjdGlvbiBzIiwic2VjdGlvbiBzIHRpdGxlIiwicyB0aXRsZSBhbmQiLCJ0aXRsZSBhbmQgcHJlc2VydmUiLCJleGlzdGluZyBzZWN0aW9uIGFzIiwic2VjdGlvbiBhcyBlbmRvcnNlbWVudHMiLCJhcyBlbmRvcnNlbWVudHMgb3IiLCJpbnZhcmlhbnQgc2VjdGlvbiBpZiIsInNlY3Rpb24gaWYgdGhlIiwibm90aWNlIHRoZSBjb21iaW5lZCIsImRvZXMgbm90IGFzIiwiYSB3aG9sZSBjb3VudCIsIndob2xlIGNvdW50IGFzIiwiY291bnQgYXMgYSIsInRoZSBkb2N1bWVudCBwcm92aWRlZCIsImRvY3VtZW50IHByb3ZpZGVkIG5vIiwicHJvdmlkZWQgbm8gY29tcGlsYXRpb24iLCJubyBjb21waWxhdGlvbiBjb3B5cmlnaHQiLCJjb21waWxhdGlvbiBjb3B5cmlnaHQgaXMiLCJpcyBjbGFpbWVkIGZvciIsImNsYWltZWQgZm9yIHRoZSIsImZvciB0aGUgY29tcGlsYXRpb24iLCJ0aGUgY29tcGlsYXRpb24gc3VjaCIsImNvbXBpbGF0aW9uIHN1Y2ggYSIsInN1Y2ggYSBjb21waWxhdGlvbiIsImEgY29tcGlsYXRpb24gaXMiLCJjb21waWxhdGlvbiBpcyBjYWxsZWQiLCJhbiBhZ2dyZWdhdGUgYW5kIiwiYWdncmVnYXRlIGFuZCB0aGlzIiwidGhlIG90aGVyIHNlbGYiLCJvdGhlciBzZWxmIGNvbnRhaW5lZCIsInNlbGYgY29udGFpbmVkIHdvcmtzIiwiY29udGFpbmVkIHdvcmtzIHRodXMiLCJ3b3JrcyB0aHVzIGNvbXBpbGVkIiwidGh1cyBjb21waWxlZCB3aXRoIiwiY29tcGlsZWQgd2l0aCB0aGUiLCJ3aXRoIHRoZSBkb2N1bWVudCIsInRoZSBkb2N1bWVudCBvbiIsImRvY3VtZW50IG9uIGFjY291bnQiLCJvbiBhY2NvdW50IG9mIiwiYWNjb3VudCBvZiB0aGVpciIsIm9mIHRoZWlyIGJlaW5nIiwidGhlaXIgYmVpbmcgdGh1cyIsImJlaW5nIHRodXMgY29tcGlsZWQiLCJ0aHVzIGNvbXBpbGVkIGlmIiwiY29tcGlsZWQgaWYgdGhleSIsInRoYW4gb25lIHF1YXJ0ZXIiLCJvbmUgcXVhcnRlciBvZiIsInF1YXJ0ZXIgb2YgdGhlIiwiY292ZXJzIHRoYXQgc3Vycm91bmQiLCJ0aGF0IHN1cnJvdW5kIG9ubHkiLCJzdXJyb3VuZCBvbmx5IHRoZSIsIm9ubHkgdGhlIGRvY3VtZW50IiwidGhlIGFnZ3JlZ2F0ZSBvdGhlcndpc2UiLCJhZ2dyZWdhdGUgb3RoZXJ3aXNlIHRoZXkiLCJhcHBlYXIgb24gY292ZXJzIiwib24gY292ZXJzIGFyb3VuZCIsImNvdmVycyBhcm91bmQgdGhlIiwiYXJvdW5kIHRoZSB3aG9sZSIsImxpY2Vuc2UgaW4gY2FzZSIsImVuZ2xpc2ggdmVyc2lvbiB3aWxsIiwid2lsbCBwcmV2YWlsIDkiLCJwcmV2YWlsIDkgdGVybWluYXRpb24iLCJmb3VuZGF0aW9uIHdpdGggdGhlIiwiYmVpbmcgbGlzdCBhIiwibGlzdCBhIGNvcHkiLCJoYXZlIG5vIGludmFyaWFudCIsImludmFyaWFudCBzZWN0aW9ucyB3cml0ZSIsInNlY3Rpb25zIHdyaXRlIHdpdGgiLCJ3cml0ZSB3aXRoIG5vIiwiaW52YXJpYW50IHNlY3Rpb25zIGluc3RlYWQiLCJzZWN0aW9ucyBpbnN0ZWFkIG9mIiwiaW5zdGVhZCBvZiBzYXlpbmciLCJvZiBzYXlpbmcgd2hpY2giLCJzYXlpbmcgd2hpY2ggb25lcyIsIndoaWNoIG9uZXMgYXJlIiwib25lcyBhcmUgaW52YXJpYW50IiwiYXJlIGludmFyaWFudCBpZiIsImludmFyaWFudCBpZiB5b3UiLCJoYXZlIG5vIGZyb250IiwiY292ZXIgdGV4dHMgd3JpdGUiLCJ0ZXh0cyB3cml0ZSBubyIsIndyaXRlIG5vIGZyb250IiwiY292ZXIgdGV4dHMgaW5zdGVhZCIsInRleHRzIGluc3RlYWQgb2YiLCJpbnN0ZWFkIG9mIGZyb250IiwiYmVpbmcgbGlzdCBsaWtld2lzZSIsImxpc3QgbGlrZXdpc2UgZm9yIiwibGlrZXdpc2UgZm9yIGJhY2siLCJmb3IgYmFjayBjb3ZlciIsImNvdmVyIHRleHRzIGlmIiwidGV4dHMgaWYgeW91ciIsInZlcnNpb24gMSAxIG1hcmNoIiwiMSBtYXJjaCAyMDAwIGNvcHlyaWdodCIsIm1hcmNoIDIwMDAgY29weXJpZ2h0IGMiLCIyMDAwIGNvcHlyaWdodCBjIDIwMDAiLCJjb3B5cmlnaHQgYyAyMDAwIGZyZWUiLCJjIDIwMDAgZnJlZSBzb2Z0d2FyZSIsIjIwMDAgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uIiwidGV4dGJvb2sgb3Igb3RoZXIgd3JpdHRlbiIsIm9yIG90aGVyIHdyaXR0ZW4gZG9jdW1lbnQiLCJvdGhlciB3cml0dGVuIGRvY3VtZW50IGZyZWUiLCJ3cml0dGVuIGRvY3VtZW50IGZyZWUgaW4iLCJvdGhlciB3b3JrIHRoYXQgY29udGFpbnMiLCJ3b3JrIHRoYXQgY29udGFpbnMgYSIsInRoaXMgbGljZW5zZSB0aGUgZG9jdW1lbnQiLCJsaWNlbnNlIHRoZSBkb2N1bWVudCBiZWxvdyIsImFzIHlvdSBhIG1vZGlmaWVkIiwieW91IGEgbW9kaWZpZWQgdmVyc2lvbiIsInRoYXQgb3ZlcmFsbCBzdWJqZWN0IGZvciIsIm92ZXJhbGwgc3ViamVjdCBmb3IgZXhhbXBsZSIsInN1YmplY3QgZm9yIGV4YW1wbGUgaWYiLCJmb3IgZXhhbXBsZSBpZiB0aGUiLCJleGFtcGxlIGlmIHRoZSBkb2N1bWVudCIsInRoaXMgbGljZW5zZSB0aGUgY292ZXIiLCJsaWNlbnNlIHRoZSBjb3ZlciB0ZXh0cyIsInRoaXMgbGljZW5zZSBhIHRyYW5zcGFyZW50IiwibGljZW5zZSBhIHRyYW5zcGFyZW50IGNvcHkiLCJ0aGUgZ2VuZXJhbCBwdWJsaWMgd2hvc2UiLCJnZW5lcmFsIHB1YmxpYyB3aG9zZSBjb250ZW50cyIsInB1YmxpYyB3aG9zZSBjb250ZW50cyBjYW4iLCJ3aG9zZSBjb250ZW50cyBjYW4gYmUiLCJjb250ZW50cyBjYW4gYmUgdmlld2VkIiwiY2FuIGJlIHZpZXdlZCBhbmQiLCJiZSB2aWV3ZWQgYW5kIGVkaXRlZCIsInZpZXdlZCBhbmQgZWRpdGVkIGRpcmVjdGx5IiwiYW5kIGVkaXRlZCBkaXJlY3RseSBhbmQiLCJlZGl0ZWQgZGlyZWN0bHkgYW5kIHN0cmFpZ2h0Zm9yd2FyZGx5IiwiZGlyZWN0bHkgYW5kIHN0cmFpZ2h0Zm9yd2FyZGx5IHdpdGgiLCJhbmQgc3RyYWlnaHRmb3J3YXJkbHkgd2l0aCBnZW5lcmljIl19LHsibGljZW5zZVRleHRzIjpbIkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZVxuXG5WZXJzaW9uIDEuMiwgTm92ZW1iZXIgMjAwMlxuXG5Db3B5cmlnaHQgKEMpIDIwMDAsMjAwMSwyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0FcblxuRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLlxuXG4gICAwLiBQUkVBTUJMRVxuXG4gICBUaGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgaXMgdG8gbWFrZSBhIG1hbnVhbCwgdGV4dGJvb2ssIG9yIG90aGVyIGZ1bmN0aW9uYWwgYW5kIHVzZWZ1bCBkb2N1bWVudCBcImZyZWVcIiBpbiB0aGUgc2Vuc2Ugb2YgZnJlZWRvbTogdG8gYXNzdXJlIGV2ZXJ5b25lIHRoZSBlZmZlY3RpdmUgZnJlZWRvbSB0byBjb3B5IGFuZCByZWRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dCBtb2RpZnlpbmcgaXQsIGVpdGhlciBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LiBTZWNvbmRhcmlseSwgdGhpcyBMaWNlbnNlIHByZXNlcnZlcyBmb3IgdGhlIGF1dGhvciBhbmQgcHVibGlzaGVyIGEgd2F5IHRvIGdldCBjcmVkaXQgZm9yIHRoZWlyIHdvcmssIHdoaWxlIG5vdCBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlIGZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLlxuXG4gICBUaGlzIExpY2Vuc2UgaXMgYSBraW5kIG9mIFwiY29weWxlZnRcIiwgd2hpY2ggbWVhbnMgdGhhdCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBkb2N1bWVudCBtdXN0IHRoZW1zZWx2ZXMgYmUgZnJlZSBpbiB0aGUgc2FtZSBzZW5zZS4gSXQgY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCBpcyBhIGNvcHlsZWZ0IGxpY2Vuc2UgZGVzaWduZWQgZm9yIGZyZWUgc29mdHdhcmUuXG5cbiAgIFdlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZSBzb2Z0d2FyZSwgYmVjYXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYSBmcmVlIHByb2dyYW0gc2hvdWxkIGNvbWUgd2l0aCBtYW51YWxzIHByb3ZpZGluZyB0aGUgc2FtZSBmcmVlZG9tcyB0aGF0IHRoZSBzb2Z0d2FyZSBkb2VzLiBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIG1hbnVhbHM7IGl0IGNhbiBiZSB1c2VkIGZvciBhbnkgdGV4dHVhbCB3b3JrLCByZWdhcmRsZXNzIG9mIHN1YmplY3QgbWF0dGVyIG9yIHdoZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiBXZSByZWNvbW1lbmQgdGhpcyBMaWNlbnNlIHByaW5jaXBhbGx5IGZvciB3b3JrcyB3aG9zZSBwdXJwb3NlIGlzIGluc3RydWN0aW9uIG9yIHJlZmVyZW5jZS5cblxuICAgMS4gQVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlNcblxuICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrLCBpbiBhbnkgbWVkaXVtLCB0aGF0IGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgY2FuIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFN1Y2ggYSBub3RpY2UgZ3JhbnRzIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVubGltaXRlZCBpbiBkdXJhdGlvbiwgdG8gdXNlIHRoYXQgd29yayB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaGVyZWluLiBUaGUgXCJEb2N1bWVudFwiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvciB3b3JrLiBBbnkgbWVtYmVyIG9mIHRoZSBwdWJsaWMgaXMgYSBsaWNlbnNlZSwgYW5kIGlzIGFkZHJlc3NlZCBhcyBcInlvdVwiLiBZb3UgYWNjZXB0IHRoZSBsaWNlbnNlIGlmIHlvdSBjb3B5LCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgd29yayBpbiBhIHdheSByZXF1aXJpbmcgcGVybWlzc2lvbiB1bmRlciBjb3B5cmlnaHQgbGF3LlxuXG4gICBBIFwiTW9kaWZpZWQgVmVyc2lvblwiIG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZSBEb2N1bWVudCBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciBjb3BpZWQgdmVyYmF0aW0sIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuXG5cbiAgIEEgXCJTZWNvbmRhcnkgU2VjdGlvblwiIGlzIGEgbmFtZWQgYXBwZW5kaXggb3IgYSBmcm9udC1tYXR0ZXIgc2VjdGlvbiBvZiB0aGUgRG9jdW1lbnQgdGhhdCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlIHB1Ymxpc2hlcnMgb3IgYXV0aG9ycyBvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIERvY3VtZW50J3Mgb3ZlcmFsbCBzdWJqZWN0IChvciB0byByZWxhdGVkIG1hdHRlcnMpIGFuZCBjb250YWlucyBub3RoaW5nIHRoYXQgY291bGQgZmFsbCBkaXJlY3RseSB3aXRoaW4gdGhhdCBvdmVyYWxsIHN1YmplY3QuIChUaHVzLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gcGFydCBhIHRleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeSBTZWN0aW9uIG1heSBub3QgZXhwbGFpbiBhbnkgbWF0aGVtYXRpY3MuKSBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwgY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9yIHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvciBvZiBsZWdhbCwgY29tbWVyY2lhbCwgcGhpbG9zb3BoaWNhbCwgZXRoaWNhbCBvciBwb2xpdGljYWwgcG9zaXRpb24gcmVnYXJkaW5nIHRoZW0uXG5cbiAgIFRoZSBcIkludmFyaWFudCBTZWN0aW9uc1wiIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMgYXJlIGRlc2lnbmF0ZWQsIGFzIGJlaW5nIHRob3NlIG9mIEludmFyaWFudCBTZWN0aW9ucywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBJZiBhIHNlY3Rpb24gZG9lcyBub3QgZml0IHRoZSBhYm92ZSBkZWZpbml0aW9uIG9mIFNlY29uZGFyeSB0aGVuIGl0IGlzIG5vdCBhbGxvd2VkIHRvIGJlIGRlc2lnbmF0ZWQgYXMgSW52YXJpYW50LiBUaGUgRG9jdW1lbnQgbWF5IGNvbnRhaW4gemVybyBJbnZhcmlhbnQgU2VjdGlvbnMuIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBpZGVudGlmeSBhbnkgSW52YXJpYW50IFNlY3Rpb25zIHRoZW4gdGhlcmUgYXJlIG5vbmUuXG5cbiAgIFRoZSBcIkNvdmVyIFRleHRzXCIgYXJlIGNlcnRhaW4gc2hvcnQgcGFzc2FnZXMgb2YgdGV4dCB0aGF0IGFyZSBsaXN0ZWQsIGFzIEZyb250LUNvdmVyIFRleHRzIG9yIEJhY2stQ292ZXIgVGV4dHMsIGluIHRoZSBub3RpY2UgdGhhdCBzYXlzIHRoYXQgdGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gQSBGcm9udC1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDUgd29yZHMsIGFuZCBhIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYXQgbW9zdCAyNSB3b3Jkcy5cblxuICAgQSBcIlRyYW5zcGFyZW50XCIgY29weSBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHksIHJlcHJlc2VudGVkIGluIGEgZm9ybWF0IHdob3NlIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSBnZW5lcmFsIHB1YmxpYywgdGhhdCBpcyBzdWl0YWJsZSBmb3IgcmV2aXNpbmcgdGhlIGRvY3VtZW50IHN0cmFpZ2h0Zm9yd2FyZGx5IHdpdGggZ2VuZXJpYyB0ZXh0IGVkaXRvcnMgb3IgKGZvciBpbWFnZXMgY29tcG9zZWQgb2YgcGl4ZWxzKSBnZW5lcmljIHBhaW50IHByb2dyYW1zIG9yIChmb3IgZHJhd2luZ3MpIHNvbWUgd2lkZWx5IGF2YWlsYWJsZSBkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQgZm9ybWF0dGVycyBvciBmb3IgYXV0b21hdGljIHRyYW5zbGF0aW9uIHRvIGEgdmFyaWV0eSBvZiBmb3JtYXRzIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMuIEEgY29weSBtYWRlIGluIGFuIG90aGVyd2lzZSBUcmFuc3BhcmVudCBmaWxlIGZvcm1hdCB3aG9zZSBtYXJrdXAsIG9yIGFic2VuY2Ugb2YgbWFya3VwLCBoYXMgYmVlbiBhcnJhbmdlZCB0byB0aHdhcnQgb3IgZGlzY291cmFnZSBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBieSByZWFkZXJzIGlzIG5vdCBUcmFuc3BhcmVudC4gQW4gaW1hZ2UgZm9ybWF0IGlzIG5vdCBUcmFuc3BhcmVudCBpZiB1c2VkIGZvciBhbnkgc3Vic3RhbnRpYWwgYW1vdW50IG9mIHRleHQuIEEgY29weSB0aGF0IGlzIG5vdCBcIlRyYW5zcGFyZW50XCIgaXMgY2FsbGVkIFwiT3BhcXVlXCIuXG5cbiAgIEV4YW1wbGVzIG9mIHN1aXRhYmxlIGZvcm1hdHMgZm9yIFRyYW5zcGFyZW50IGNvcGllcyBpbmNsdWRlIHBsYWluIEFTQ0lJIHdpdGhvdXQgbWFya3VwLCBUZXhpbmZvIGlucHV0IGZvcm1hdCwgTGFUZVggaW5wdXQgZm9ybWF0LCBTR01MIG9yIFhNTCB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBEVEQsIGFuZCBzdGFuZGFyZC1jb25mb3JtaW5nIHNpbXBsZSBIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBkZXNpZ25lZCBmb3IgaHVtYW4gbW9kaWZpY2F0aW9uLiBFeGFtcGxlcyBvZiB0cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzIGluY2x1ZGUgUE5HLCBYQ0YgYW5kIEpQRy4gT3BhcXVlIGZvcm1hdHMgaW5jbHVkZSBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlIHJlYWQgYW5kIGVkaXRlZCBvbmx5IGJ5IHByb3ByaWV0YXJ5IHdvcmQgcHJvY2Vzc29ycywgU0dNTCBvciBYTUwgZm9yIHdoaWNoIHRoZSBEVEQgYW5kL29yIHByb2Nlc3NpbmcgdG9vbHMgYXJlIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlIG1hY2hpbmUtZ2VuZXJhdGVkIEhUTUwsIFBvc3RTY3JpcHQgb3IgUERGIHByb2R1Y2VkIGJ5IHNvbWUgd29yZCBwcm9jZXNzb3JzIGZvciBvdXRwdXQgcHVycG9zZXMgb25seS5cblxuICAgVGhlIFwiVGl0bGUgUGFnZVwiIG1lYW5zLCBmb3IgYSBwcmludGVkIGJvb2ssIHRoZSB0aXRsZSBwYWdlIGl0c2VsZiwgcGx1cyBzdWNoIGZvbGxvd2luZyBwYWdlcyBhcyBhcmUgbmVlZGVkIHRvIGhvbGQsIGxlZ2libHksIHRoZSBtYXRlcmlhbCB0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiBGb3Igd29ya3MgaW4gZm9ybWF0cyB3aGljaCBkbyBub3QgaGF2ZSBhbnkgdGl0bGUgcGFnZSBhcyBzdWNoLCBcIlRpdGxlIFBhZ2VcIiBtZWFucyB0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrJ3MgdGl0bGUsIHByZWNlZGluZyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBib2R5IG9mIHRoZSB0ZXh0LlxuXG4gICBBIHNlY3Rpb24gXCJFbnRpdGxlZCBYWVpcIiBtZWFucyBhIG5hbWVkIHN1YnVuaXQgb2YgdGhlIERvY3VtZW50IHdob3NlIHRpdGxlIGVpdGhlciBpcyBwcmVjaXNlbHkgWFlaIG9yIGNvbnRhaW5zIFhZWiBpbiBwYXJlbnRoZXNlcyBmb2xsb3dpbmcgdGV4dCB0aGF0IHRyYW5zbGF0ZXMgWFlaIGluIGFub3RoZXIgbGFuZ3VhZ2UuIChIZXJlIFhZWiBzdGFuZHMgZm9yIGEgc3BlY2lmaWMgc2VjdGlvbiBuYW1lIG1lbnRpb25lZCBiZWxvdywgc3VjaCBhcyBcIkFja25vd2xlZGdlbWVudHNcIiwgXCJEZWRpY2F0aW9uc1wiLCBcIkVuZG9yc2VtZW50c1wiLCBvciBcIkhpc3RvcnlcIi4pIFRvIFwiUHJlc2VydmUgdGhlIFRpdGxlXCIgb2Ygc3VjaCBhIHNlY3Rpb24gd2hlbiB5b3UgbW9kaWZ5IHRoZSBEb2N1bWVudCBtZWFucyB0aGF0IGl0IHJlbWFpbnMgYSBzZWN0aW9uIFwiRW50aXRsZWQgWFlaXCIgYWNjb3JkaW5nIHRvIHRoaXMgZGVmaW5pdGlvbi5cblxuICAgVGhlIERvY3VtZW50IG1heSBpbmNsdWRlIFdhcnJhbnR5IERpc2NsYWltZXJzIG5leHQgdG8gdGhlIG5vdGljZSB3aGljaCBzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuIFRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluY2x1ZGVkIGJ5IHJlZmVyZW5jZSBpbiB0aGlzIExpY2Vuc2UsIGJ1dCBvbmx5IGFzIHJlZ2FyZHMgZGlzY2xhaW1pbmcgd2FycmFudGllczogYW55IG90aGVyIGltcGxpY2F0aW9uIHRoYXQgdGhlc2UgV2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQgaGFzIG5vIGVmZmVjdCBvbiB0aGUgbWVhbmluZyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDIuIFZFUkJBVElNIENPUFlJTkdcblxuICAgWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVtLCBlaXRoZXIgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseSwgcHJvdmlkZWQgdGhhdCB0aGlzIExpY2Vuc2UsIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIERvY3VtZW50IGFyZSByZXByb2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdSBhZGQgbm8gb3RoZXIgY29uZGl0aW9ucyB3aGF0c29ldmVyIHRvIHRob3NlIG9mIHRoaXMgTGljZW5zZS4gWW91IG1heSBub3QgdXNlIHRlY2huaWNhbCBtZWFzdXJlcyB0byBvYnN0cnVjdCBvciBjb250cm9sIHRoZSByZWFkaW5nIG9yIGZ1cnRoZXIgY29weWluZyBvZiB0aGUgY29waWVzIHlvdSBtYWtlIG9yIGRpc3RyaWJ1dGUuIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0IGNvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IgY29waWVzLiBJZiB5b3UgZGlzdHJpYnV0ZSBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy5cblxuICAgWW91IG1heSBhbHNvIGxlbmQgY29waWVzLCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHN0YXRlZCBhYm92ZSwgYW5kIHlvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuXG5cbiAgIDMuIENPUFlJTkcgSU4gUVVBTlRJVFlcblxuICAgSWYgeW91IHB1Ymxpc2ggcHJpbnRlZCBjb3BpZXMgKG9yIGNvcGllcyBpbiBtZWRpYSB0aGF0IGNvbW1vbmx5IGhhdmUgcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUgRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZSByZXF1aXJlcyBDb3ZlciBUZXh0cywgeW91IG11c3QgZW5jbG9zZSB0aGUgY29waWVzIGluIGNvdmVycyB0aGF0IGNhcnJ5LCBjbGVhcmx5IGFuZCBsZWdpYmx5LCBhbGwgdGhlc2UgQ292ZXIgVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24gdGhlIGJhY2sgY292ZXIuIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5IGFuZCBsZWdpYmx5IGlkZW50aWZ5IHlvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gVGhlIGZyb250IGNvdmVyIG11c3QgcHJlc2VudCB0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbCB3b3JkcyBvZiB0aGUgdGl0bGUgZXF1YWxseSBwcm9taW5lbnQgYW5kIHZpc2libGUuIFlvdSBtYXkgYWRkIG90aGVyIG1hdGVyaWFsIG9uIHRoZSBjb3ZlcnMgaW4gYWRkaXRpb24uIENvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlIHRoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQgYXMgdmVyYmF0aW0gY29weWluZyBpbiBvdGhlciByZXNwZWN0cy5cblxuICAgSWYgdGhlIHJlcXVpcmVkIHRleHRzIGZvciBlaXRoZXIgY292ZXIgYXJlIHRvbyB2b2x1bWlub3VzIHRvIGZpdCBsZWdpYmx5LCB5b3Ugc2hvdWxkIHB1dCB0aGUgZmlyc3Qgb25lcyBsaXN0ZWQgKGFzIG1hbnkgYXMgZml0IHJlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50IHBhZ2VzLlxuXG4gICBJZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50IG51bWJlcmluZyBtb3JlIHRoYW4gMTAwLCB5b3UgbXVzdCBlaXRoZXIgaW5jbHVkZSBhIG1hY2hpbmUtcmVhZGFibGUgVHJhbnNwYXJlbnQgY29weSBhbG9uZyB3aXRoIGVhY2ggT3BhcXVlIGNvcHksIG9yIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weSBhIGNvbXB1dGVyLW5ldHdvcmsgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgZ2VuZXJhbCBuZXR3b3JrLXVzaW5nIHB1YmxpYyBoYXMgYWNjZXNzIHRvIGRvd25sb2FkIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scyBhIGNvbXBsZXRlIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBmcmVlIG9mIGFkZGVkIG1hdGVyaWFsLiBJZiB5b3UgdXNlIHRoZSBsYXR0ZXIgb3B0aW9uLCB5b3UgbXVzdCB0YWtlIHJlYXNvbmFibHkgcHJ1ZGVudCBzdGVwcywgd2hlbiB5b3UgYmVnaW4gZGlzdHJpYnV0aW9uIG9mIE9wYXF1ZSBjb3BpZXMgaW4gcXVhbnRpdHksIHRvIGVuc3VyZSB0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZCBsb2NhdGlvbiB1bnRpbCBhdCBsZWFzdCBvbmUgeWVhciBhZnRlciB0aGUgbGFzdCB0aW1lIHlvdSBkaXN0cmlidXRlIGFuIE9wYXF1ZSBjb3B5IChkaXJlY3RseSBvciB0aHJvdWdoIHlvdXIgYWdlbnRzIG9yIHJldGFpbGVycykgb2YgdGhhdCBlZGl0aW9uIHRvIHRoZSBwdWJsaWMuXG5cbiAgIEl0IGlzIHJlcXVlc3RlZCwgYnV0IG5vdCByZXF1aXJlZCwgdGhhdCB5b3UgY29udGFjdCB0aGUgYXV0aG9ycyBvZiB0aGUgRG9jdW1lbnQgd2VsbCBiZWZvcmUgcmVkaXN0cmlidXRpbmcgYW55IGxhcmdlIG51bWJlciBvZiBjb3BpZXMsIHRvIGdpdmUgdGhlbSBhIGNoYW5jZSB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQuXG5cbiAgIDQuIE1PRElGSUNBVElPTlNcblxuICAgWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQgdW5kZXIgdGhlIGNvbmRpdGlvbnMgb2Ygc2VjdGlvbnMgMiBhbmQgMyBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgcmVsZWFzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciBwcmVjaXNlbHkgdGhpcyBMaWNlbnNlLCB3aXRoIHRoZSBNb2RpZmllZCBWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzIGxpY2Vuc2luZyBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiB0byB3aG9ldmVyIHBvc3Nlc3NlcyBhIGNvcHkgb2YgaXQuIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246XG5cbiAgICAgIEEuIFVzZSBpbiB0aGUgVGl0bGUgUGFnZSAoYW5kIG9uIHRoZSBjb3ZlcnMsIGlmIGFueSkgYSB0aXRsZSBkaXN0aW5jdCBmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZiBwcmV2aW91cyB2ZXJzaW9ucyAod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUgbGlzdGVkIGluIHRoZSBIaXN0b3J5IHNlY3Rpb24gb2YgdGhlIERvY3VtZW50KS4gWW91IG1heSB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uIGlmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uXG5cbiAgICAgIEIuIExpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMgcmVzcG9uc2libGUgZm9yIGF1dGhvcnNoaXAgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24sIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3QgZml2ZSBvZiB0aGUgcHJpbmNpcGFsIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiBmaXZlKSwgdW5sZXNzIHRoZXkgcmVsZWFzZSB5b3UgZnJvbSB0aGlzIHJlcXVpcmVtZW50LlxuXG4gICAgICBDLiBTdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uLCBhcyB0aGUgcHVibGlzaGVyLlxuXG4gICAgICBELiBQcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC5cblxuICAgICAgRS4gQWRkIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgZm9yIHlvdXIgbW9kaWZpY2F0aW9ucyBhZGphY2VudCB0byB0aGUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMuXG5cbiAgICAgIEYuIEluY2x1ZGUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYSBsaWNlbnNlIG5vdGljZSBnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiB0aGUgZm9ybSBzaG93biBpbiB0aGUgQWRkZW5kdW0gYmVsb3cuXG5cbiAgICAgIEcuIFByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zIGFuZCByZXF1aXJlZCBDb3ZlciBUZXh0cyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZS5cblxuICAgICAgSC4gSW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIEkuIFByZXNlcnZlIHRoZSBzZWN0aW9uIEVudGl0bGVkIFwiSGlzdG9yeVwiLCBQcmVzZXJ2ZSBpdHMgVGl0bGUsIGFuZCBhZGQgdG8gaXQgYW4gaXRlbSBzdGF0aW5nIGF0IGxlYXN0IHRoZSB0aXRsZSwgeWVhciwgbmV3IGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgZ2l2ZW4gb24gdGhlIFRpdGxlIFBhZ2UuIElmIHRoZXJlIGlzIG5vIHNlY3Rpb24gRW50aXRsZWQgXCJIaXN0b3J5XCIgaW4gdGhlIERvY3VtZW50LCBjcmVhdGUgb25lIHN0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcyBnaXZlbiBvbiBpdHMgVGl0bGUgUGFnZSwgdGhlbiBhZGQgYW4gaXRlbSBkZXNjcmliaW5nIHRoZSBNb2RpZmllZCBWZXJzaW9uIGFzIHN0YXRlZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2UuXG5cbiAgICAgIEouIFByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9uLCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHVibGljIGFjY2VzcyB0byBhIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBhbmQgbGlrZXdpc2UgdGhlIG5ldHdvcmsgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHJldmlvdXMgdmVyc2lvbnMgaXQgd2FzIGJhc2VkIG9uLiBUaGVzZSBtYXkgYmUgcGxhY2VkIGluIHRoZSBcIkhpc3RvcnlcIiBzZWN0aW9uLiBZb3UgbWF5IG9taXQgYSBuZXR3b3JrIGxvY2F0aW9uIGZvciBhIHdvcmsgdGhhdCB3YXMgcHVibGlzaGVkIGF0IGxlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YgdGhlIHZlcnNpb24gaXQgcmVmZXJzIHRvIGdpdmVzIHBlcm1pc3Npb24uXG5cbiAgICAgIEsuIEZvciBhbnkgc2VjdGlvbiBFbnRpdGxlZCBcIkFja25vd2xlZGdlbWVudHNcIiBvciBcIkRlZGljYXRpb25zXCIsIFByZXNlcnZlIHRoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbCB0aGUgc3Vic3RhbmNlIGFuZCB0b25lIG9mIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yIGFja25vd2xlZGdlbWVudHMgYW5kL29yIGRlZGljYXRpb25zIGdpdmVuIHRoZXJlaW4uXG5cbiAgICAgIEwuIFByZXNlcnZlIGFsbCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIHRoZSBEb2N1bWVudCwgdW5hbHRlcmVkIGluIHRoZWlyIHRleHQgYW5kIGluIHRoZWlyIHRpdGxlcy4gU2VjdGlvbiBudW1iZXJzIG9yIHRoZSBlcXVpdmFsZW50IGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzZWN0aW9uIHRpdGxlcy5cblxuICAgICAgTS4gRGVsZXRlIGFueSBzZWN0aW9uIEVudGl0bGVkIFwiRW5kb3JzZW1lbnRzXCIuIFN1Y2ggYSBzZWN0aW9uIG1heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uXG5cbiAgICAgIE4uIERvIG5vdCByZXRpdGxlIGFueSBleGlzdGluZyBzZWN0aW9uIHRvIGJlIEVudGl0bGVkIFwiRW5kb3JzZW1lbnRzXCIgb3IgdG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aCBhbnkgSW52YXJpYW50IFNlY3Rpb24uXG5cbiAgICAgIE8uIFByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy5cblxuICAgSWYgdGhlIE1vZGlmaWVkIFZlcnNpb24gaW5jbHVkZXMgbmV3IGZyb250LW1hdHRlciBzZWN0aW9ucyBvciBhcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8gbWF0ZXJpYWwgY29waWVkIGZyb20gdGhlIERvY3VtZW50LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbCBvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuIFRvIGRvIHRoaXMsIGFkZCB0aGVpciB0aXRsZXMgdG8gdGhlIGxpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uJ3MgbGljZW5zZSBub3RpY2UuIFRoZXNlIHRpdGxlcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHNlY3Rpb24gdGl0bGVzLlxuXG4gICBZb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgXCJFbmRvcnNlbWVudHNcIiwgcHJvdmlkZWQgaXQgY29udGFpbnMgbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzIHBhcnRpZXMtLWZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzIGJlZW4gYXBwcm92ZWQgYnkgYW4gb3JnYW5pemF0aW9uIGFzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gb2YgYSBzdGFuZGFyZC5cblxuICAgWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LCBhbmQgYSBwYXNzYWdlIG9mIHVwIHRvIDI1IHdvcmRzIGFzIGEgQmFjay1Db3ZlciBUZXh0LCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IG9mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiBPbmx5IG9uZSBwYXNzYWdlIG9mIEZyb250LUNvdmVyIFRleHQgYW5kIG9uZSBvZiBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGFkZGVkIGJ5IChvciB0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gSWYgdGhlIERvY3VtZW50IGFscmVhZHkgaW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseSBhZGRlZCBieSB5b3Ugb3IgYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLCB5b3UgbWF5IG5vdCBhZGQgYW5vdGhlcjsgYnV0IHlvdSBtYXkgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQgcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cyBwdWJsaXNoZXIgdGhhdCBhZGRlZCB0aGUgb2xkIG9uZS5cblxuICAgVGhlIGF1dGhvcihzKSBhbmQgcHVibGlzaGVyKHMpIG9mIHRoZSBEb2N1bWVudCBkbyBub3QgYnkgdGhpcyBMaWNlbnNlIGdpdmUgcGVybWlzc2lvbiB0byB1c2UgdGhlaXIgbmFtZXMgZm9yIHB1YmxpY2l0eSBmb3Igb3IgdG8gYXNzZXJ0IG9yIGltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLlxuXG4gICA1LiBDT01CSU5JTkcgRE9DVU1FTlRTXG5cbiAgIFlvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkIHZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb21iaW5hdGlvbiBhbGwgb2YgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwgYW5kIGxpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMgbGljZW5zZSBub3RpY2UsIGFuZCB0aGF0IHlvdSBwcmVzZXJ2ZSBhbGwgdGhlaXIgV2FycmFudHkgRGlzY2xhaW1lcnMuXG5cbiAgIFRoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kIG11bHRpcGxlIGlkZW50aWNhbCBJbnZhcmlhbnQgU2VjdGlvbnMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgY29weS4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0IGRpZmZlcmVudCBjb250ZW50cywgbWFrZSB0aGUgdGl0bGUgb2YgZWFjaCBzdWNoIHNlY3Rpb24gdW5pcXVlIGJ5IGFkZGluZyBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGF1dGhvciBvciBwdWJsaXNoZXIgb2YgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4gTWFrZSB0aGUgc2FtZSBhZGp1c3RtZW50IHRvIHRoZSBzZWN0aW9uIHRpdGxlcyBpbiB0aGUgbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLlxuXG4gICBJbiB0aGUgY29tYmluYXRpb24sIHlvdSBtdXN0IGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkIFwiSGlzdG9yeVwiIGluIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbiBFbnRpdGxlZCBcIkhpc3RvcnlcIjsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgXCJBY2tub3dsZWRnZW1lbnRzXCIsIGFuZCBhbnkgc2VjdGlvbnMgRW50aXRsZWQgXCJEZWRpY2F0aW9uc1wiLiBZb3UgbXVzdCBkZWxldGUgYWxsIHNlY3Rpb25zIEVudGl0bGVkIFwiRW5kb3JzZW1lbnRzXCIuXG5cbiAgIDYuIENPTExFQ1RJT05TIE9GIERPQ1VNRU5UU1xuXG4gICBZb3UgbWF5IG1ha2UgYSBjb2xsZWN0aW9uIGNvbnNpc3Rpbmcgb2YgdGhlIERvY3VtZW50IGFuZCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcyBMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkgdGhhdCBpcyBpbmNsdWRlZCBpbiB0aGUgY29sbGVjdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZm9sbG93IHRoZSBydWxlcyBvZiB0aGlzIExpY2Vuc2UgZm9yIHZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy5cblxuICAgWW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZCBkaXN0cmlidXRlIGl0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBpbnRvIHRoZSBleHRyYWN0ZWQgZG9jdW1lbnQsIGFuZCBmb2xsb3cgdGhpcyBMaWNlbnNlIGluIGFsbCBvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZiB0aGF0IGRvY3VtZW50LlxuXG4gICA3LiBBR0dSRUdBVElPTiBXSVRIIElOREVQRU5ERU5UIFdPUktTXG5cbiAgIEEgY29tcGlsYXRpb24gb2YgdGhlIERvY3VtZW50IG9yIGl0cyBkZXJpdmF0aXZlcyB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gXCJhZ2dyZWdhdGVcIiBpZiB0aGUgY29weXJpZ2h0IHJlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBpcyBub3QgdXNlZCB0byBsaW1pdCB0aGUgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gV2hlbiB0aGUgRG9jdW1lbnQgaXMgaW5jbHVkZWQgaW4gYW4gYWdncmVnYXRlLCB0aGlzIExpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gdGhlIG90aGVyIHdvcmtzIGluIHRoZSBhZ2dyZWdhdGUgd2hpY2ggYXJlIG5vdCB0aGVtc2VsdmVzIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERvY3VtZW50LlxuXG4gICBJZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50LCB0aGVuIGlmIHRoZSBEb2N1bWVudCBpcyBsZXNzIHRoYW4gb25lIGhhbGYgb2YgdGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudCdzIENvdmVyIFRleHRzIG1heSBiZSBwbGFjZWQgb24gY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZSBlbGVjdHJvbmljIGVxdWl2YWxlbnQgb2YgY292ZXJzIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBlbGVjdHJvbmljIGZvcm0uIE90aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIHByaW50ZWQgY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgd2hvbGUgYWdncmVnYXRlLlxuXG4gICA4LiBUUkFOU0xBVElPTlxuXG4gICBUcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkgZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQuIFJlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbCBwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0IGhvbGRlcnMsIGJ1dCB5b3UgbWF5IGluY2x1ZGUgdHJhbnNsYXRpb25zIG9mIHNvbWUgb3IgYWxsIEludmFyaWFudCBTZWN0aW9ucyBpbiBhZGRpdGlvbiB0byB0aGUgb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlc2UgSW52YXJpYW50IFNlY3Rpb25zLiBZb3UgbWF5IGluY2x1ZGUgYSB0cmFuc2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFuZCBhbGwgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUgRG9jdW1lbnQsIGFuZCBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gaW5jbHVkZSB0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb25zIG9mIHRob3NlIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLiBJbiBjYXNlIG9mIGEgZGlzYWdyZWVtZW50IGJldHdlZW4gdGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBub3RpY2Ugb3IgZGlzY2xhaW1lciwgdGhlIG9yaWdpbmFsIHZlcnNpb24gd2lsbCBwcmV2YWlsLlxuXG4gICBJZiBhIHNlY3Rpb24gaW4gdGhlIERvY3VtZW50IGlzIEVudGl0bGVkIFwiQWNrbm93bGVkZ2VtZW50c1wiLCBcIkRlZGljYXRpb25zXCIsIG9yIFwiSGlzdG9yeVwiLCB0aGUgcmVxdWlyZW1lbnQgKHNlY3Rpb24gNCkgdG8gUHJlc2VydmUgaXRzIFRpdGxlIChzZWN0aW9uIDEpIHdpbGwgdHlwaWNhbGx5IHJlcXVpcmUgY2hhbmdpbmcgdGhlIGFjdHVhbCB0aXRsZS5cblxuICAgOS4gVEVSTUlOQVRJT05cblxuICAgWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGZvciB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBvdGhlciBhdHRlbXB0IHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS5cblxuICAgMTAuIEZVVFVSRSBSRVZJU0lPTlMgT0YgVEhJUyBMSUNFTlNFXG5cbiAgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0Ly5cblxuICAgRWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBEb2N1bWVudCBzcGVjaWZpZXMgdGhhdCBhIHBhcnRpY3VsYXIgbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgXCJvciBhbnkgbGF0ZXIgdmVyc2lvblwiIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBzcGVjaWZpZWQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIEFEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHNcblxuVG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZTpcblxuQ29weXJpZ2h0IChjKSBZRUFSIFlPVVIgTkFNRS4gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMiBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgbm8gQmFjay1Db3ZlciBUZXh0cy4gQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkIFwiR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlXCIuXG5cbklmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIgVGV4dHMsIHJlcGxhY2UgdGhlIFwid2l0aC4uLlRleHRzLlwiIGxpbmUgd2l0aCB0aGlzOlxuXG53aXRoIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgTElTVCBUSEVJUiBUSVRMRVMsIHdpdGggdGhlIEZyb250LUNvdmVyIFRleHRzIGJlaW5nIExJU1QsIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIExJU1QuXG5cbklmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucyB3aXRob3V0IENvdmVyIFRleHRzLCBvciBzb21lIG90aGVyIGNvbWJpbmF0aW9uIG9mIHRoZSB0aHJlZSwgbWVyZ2UgdGhvc2UgdHdvIGFsdGVybmF0aXZlcyB0byBzdWl0IHRoZSBzaXR1YXRpb24uXG5cbklmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlIHJlY29tbWVuZCByZWxlYXNpbmcgdGhlc2UgZXhhbXBsZXMgaW4gcGFyYWxsZWwgdW5kZXIgeW91ciBjaG9pY2Ugb2YgZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzdWNoIGFzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLiJdLCJsaWNlbnNlSWRzIjpbIkdGREwtMS4yLW9yLWxhdGVyIiwiR0ZETC0xLjItb25seSIsIkdGREwtMS4yIl0sImtleXdvcmRzIjpbIjEgMiBub3ZlbWJlciIsIjIgbm92ZW1iZXIgMjAwMiIsIm5vdmVtYmVyIDIwMDIgY29weXJpZ2h0IiwiMjAwMiBjb3B5cmlnaHQgYyIsIjIwMDEgMjAwMiBmcmVlIiwiMjAwMiBmcmVlIHNvZnR3YXJlIiwidGhlIHRleHQgYSIsInRleHQgYSBzZWN0aW9uIiwidmVyc2lvbiAxIDIgbm92ZW1iZXIiLCIxIDIgbm92ZW1iZXIgMjAwMiIsIjIgbm92ZW1iZXIgMjAwMiBjb3B5cmlnaHQiLCJub3ZlbWJlciAyMDAyIGNvcHlyaWdodCBjIiwiMjAwMiBjb3B5cmlnaHQgYyAyMDAwIiwiMjAwMCAyMDAxIDIwMDIgZnJlZSIsIjIwMDEgMjAwMiBmcmVlIHNvZnR3YXJlIiwiMjAwMiBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24iLCJvZiB0aGUgdGV4dCBhIiwidGhlIHRleHQgYSBzZWN0aW9uIiwidGV4dCBhIHNlY3Rpb24gZW50aXRsZWQiLCIxIDIgb3IgYW55IiwibGljZW5zZSB2ZXJzaW9uIDEgMiBub3ZlbWJlciIsInZlcnNpb24gMSAyIG5vdmVtYmVyIDIwMDIiLCIxIDIgbm92ZW1iZXIgMjAwMiBjb3B5cmlnaHQiLCIyIG5vdmVtYmVyIDIwMDIgY29weXJpZ2h0IGMiLCJub3ZlbWJlciAyMDAyIGNvcHlyaWdodCBjIDIwMDAiLCIyMDAyIGNvcHlyaWdodCBjIDIwMDAgMjAwMSIsImMgMjAwMCAyMDAxIDIwMDIgZnJlZSIsIjIwMDAgMjAwMSAyMDAyIGZyZWUgc29mdHdhcmUiLCIyMDAxIDIwMDIgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uIiwiMjAwMiBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24gaW5jIiwiYm9keSBvZiB0aGUgdGV4dCBhIiwib2YgdGhlIHRleHQgYSBzZWN0aW9uIiwidGhlIHRleHQgYSBzZWN0aW9uIGVudGl0bGVkIiwidGV4dCBhIHNlY3Rpb24gZW50aXRsZWQgeHl6IiwidmVyc2lvbiAxIDIgb3IgYW55IiwiMSAyIG9yIGFueSBsYXRlciJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2VcblxuVmVyc2lvbiAxLjMsIDMgTm92ZW1iZXIgMjAwOCBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIFx1MDAzY2h0dHA6Ly9mc2Yub3JnL1x1MDAzZVxuXG5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuXG5cbiAgIDAuIFBSRUFNQkxFXG5cbiAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBpcyB0byBtYWtlIGEgbWFudWFsLCB0ZXh0Ym9vaywgb3Igb3RoZXIgZnVuY3Rpb25hbCBhbmQgdXNlZnVsIGRvY3VtZW50IFwiZnJlZVwiIGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0byBhc3N1cmUgZXZlcnlvbmUgdGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIHJlZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0IG1vZGlmeWluZyBpdCwgZWl0aGVyIGNvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHkuIFNlY29uZGFyaWx5LCB0aGlzIExpY2Vuc2UgcHJlc2VydmVzIGZvciB0aGUgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkgdG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hpbGUgbm90IGJlaW5nIGNvbnNpZGVyZWQgcmVzcG9uc2libGUgZm9yIG1vZGlmaWNhdGlvbnMgbWFkZSBieSBvdGhlcnMuXG5cbiAgIFRoaXMgTGljZW5zZSBpcyBhIGtpbmQgb2YgXCJjb3B5bGVmdFwiLCB3aGljaCBtZWFucyB0aGF0IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIGRvY3VtZW50IG11c3QgdGhlbXNlbHZlcyBiZSBmcmVlIGluIHRoZSBzYW1lIHNlbnNlLiBJdCBjb21wbGVtZW50cyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGEgY29weWxlZnQgbGljZW5zZSBkZXNpZ25lZCBmb3IgZnJlZSBzb2Z0d2FyZS5cblxuICAgV2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvciBmcmVlIHNvZnR3YXJlLCBiZWNhdXNlIGZyZWUgc29mdHdhcmUgbmVlZHMgZnJlZSBkb2N1bWVudGF0aW9uOiBhIGZyZWUgcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlIHNvZnR3YXJlIGRvZXMuIEJ1dCB0aGlzIExpY2Vuc2UgaXMgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgbWFudWFsczsgaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3Igd2hldGhlciBpdCBpcyBwdWJsaXNoZWQgYXMgYSBwcmludGVkIGJvb2suIFdlIHJlY29tbWVuZCB0aGlzIExpY2Vuc2UgcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLlxuXG4gICAxLiBBUFBMSUNBQklMSVRZIEFORCBERUZJTklUSU9OU1xuXG4gICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgbWFudWFsIG9yIG90aGVyIHdvcmssIGluIGFueSBtZWRpdW0sIHRoYXQgY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBjYW4gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gU3VjaCBhIG5vdGljZSBncmFudHMgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5saW1pdGVkIGluIGR1cmF0aW9uLCB0byB1c2UgdGhhdCB3b3JrIHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBoZXJlaW4uIFRoZSBcIkRvY3VtZW50XCIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggbWFudWFsIG9yIHdvcmsuIEFueSBtZW1iZXIgb2YgdGhlIHB1YmxpYyBpcyBhIGxpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzIFwieW91XCIuIFlvdSBhY2NlcHQgdGhlIGxpY2Vuc2UgaWYgeW91IGNvcHksIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSB3b3JrIGluIGEgd2F5IHJlcXVpcmluZyBwZXJtaXNzaW9uIHVuZGVyIGNvcHlyaWdodCBsYXcuXG5cbiAgIEEgXCJNb2RpZmllZCBWZXJzaW9uXCIgb2YgdGhlIERvY3VtZW50IG1lYW5zIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlIERvY3VtZW50IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIGNvcGllZCB2ZXJiYXRpbSwgb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS5cblxuICAgQSBcIlNlY29uZGFyeSBTZWN0aW9uXCIgaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhIGZyb250LW1hdHRlciBzZWN0aW9uIG9mIHRoZSBEb2N1bWVudCB0aGF0IGRlYWxzIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUgcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgRG9jdW1lbnQncyBvdmVyYWxsIHN1YmplY3QgKG9yIHRvIHJlbGF0ZWQgbWF0dGVycykgYW5kIGNvbnRhaW5zIG5vdGhpbmcgdGhhdCBjb3VsZCBmYWxsIGRpcmVjdGx5IHdpdGhpbiB0aGF0IG92ZXJhbGwgc3ViamVjdC4gKFRodXMsIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBwYXJ0IGEgdGV4dGJvb2sgb2YgbWF0aGVtYXRpY3MsIGEgU2Vjb25kYXJ5IFNlY3Rpb24gbWF5IG5vdCBleHBsYWluIGFueSBtYXRoZW1hdGljcy4pIFRoZSByZWxhdGlvbnNoaXAgY291bGQgYmUgYSBtYXR0ZXIgb2YgaGlzdG9yaWNhbCBjb25uZWN0aW9uIHdpdGggdGhlIHN1YmplY3Qgb3Igd2l0aCByZWxhdGVkIG1hdHRlcnMsIG9yIG9mIGxlZ2FsLCBjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbiByZWdhcmRpbmcgdGhlbS5cblxuICAgVGhlIFwiSW52YXJpYW50IFNlY3Rpb25zXCIgYXJlIGNlcnRhaW4gU2Vjb25kYXJ5IFNlY3Rpb25zIHdob3NlIHRpdGxlcyBhcmUgZGVzaWduYXRlZCwgYXMgYmVpbmcgdGhvc2Ugb2YgSW52YXJpYW50IFNlY3Rpb25zLCBpbiB0aGUgbm90aWNlIHRoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuIElmIGEgc2VjdGlvbiBkb2VzIG5vdCBmaXQgdGhlIGFib3ZlIGRlZmluaXRpb24gb2YgU2Vjb25kYXJ5IHRoZW4gaXQgaXMgbm90IGFsbG93ZWQgdG8gYmUgZGVzaWduYXRlZCBhcyBJbnZhcmlhbnQuIFRoZSBEb2N1bWVudCBtYXkgY29udGFpbiB6ZXJvIEludmFyaWFudCBTZWN0aW9ucy4gSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IGlkZW50aWZ5IGFueSBJbnZhcmlhbnQgU2VjdGlvbnMgdGhlbiB0aGVyZSBhcmUgbm9uZS5cblxuICAgVGhlIFwiQ292ZXIgVGV4dHNcIiBhcmUgY2VydGFpbiBzaG9ydCBwYXNzYWdlcyBvZiB0ZXh0IHRoYXQgYXJlIGxpc3RlZCwgYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBIEZyb250LUNvdmVyIFRleHQgbWF5IGJlIGF0IG1vc3QgNSB3b3JkcywgYW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDI1IHdvcmRzLlxuXG4gICBBIFwiVHJhbnNwYXJlbnRcIiBjb3B5IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSwgcmVwcmVzZW50ZWQgaW4gYSBmb3JtYXQgd2hvc2Ugc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIGdlbmVyYWwgcHVibGljLCB0aGF0IGlzIHN1aXRhYmxlIGZvciByZXZpc2luZyB0aGUgZG9jdW1lbnQgc3RyYWlnaHRmb3J3YXJkbHkgd2l0aCBnZW5lcmljIHRleHQgZWRpdG9ycyBvciAoZm9yIGltYWdlcyBjb21wb3NlZCBvZiBwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvciBkcmF3aW5ncykgc29tZSB3aWRlbHkgYXZhaWxhYmxlIGRyYXdpbmcgZWRpdG9yLCBhbmQgdGhhdCBpcyBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gdGV4dCBmb3JtYXR0ZXJzIG9yIGZvciBhdXRvbWF0aWMgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQgZm9ybWF0dGVycy4gQSBjb3B5IG1hZGUgaW4gYW4gb3RoZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUgZm9ybWF0IHdob3NlIG1hcmt1cCwgb3IgYWJzZW5jZSBvZiBtYXJrdXAsIGhhcyBiZWVuIGFycmFuZ2VkIHRvIHRod2FydCBvciBkaXNjb3VyYWdlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIGJ5IHJlYWRlcnMgaXMgbm90IFRyYW5zcGFyZW50LiBBbiBpbWFnZSBmb3JtYXQgaXMgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQgb2YgdGV4dC4gQSBjb3B5IHRoYXQgaXMgbm90IFwiVHJhbnNwYXJlbnRcIiBpcyBjYWxsZWQgXCJPcGFxdWVcIi5cblxuICAgRXhhbXBsZXMgb2Ygc3VpdGFibGUgZm9ybWF0cyBmb3IgVHJhbnNwYXJlbnQgY29waWVzIGluY2x1ZGUgcGxhaW4gQVNDSUkgd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYVRlWCBpbnB1dCBmb3JtYXQsIFNHTUwgb3IgWE1MIHVzaW5nIGEgcHVibGljbHkgYXZhaWxhYmxlIERURCwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlIEhUTUwsIFBvc3RTY3JpcHQgb3IgUERGIGRlc2lnbmVkIGZvciBodW1hbiBtb2RpZmljYXRpb24uIEV4YW1wbGVzIG9mIHRyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMgaW5jbHVkZSBQTkcsIFhDRiBhbmQgSlBHLiBPcGFxdWUgZm9ybWF0cyBpbmNsdWRlIHByb3ByaWV0YXJ5IGZvcm1hdHMgdGhhdCBjYW4gYmUgcmVhZCBhbmQgZWRpdGVkIG9ubHkgYnkgcHJvcHJpZXRhcnkgd29yZCBwcm9jZXNzb3JzLCBTR01MIG9yIFhNTCBmb3Igd2hpY2ggdGhlIERURCBhbmQvb3IgcHJvY2Vzc2luZyB0b29scyBhcmUgbm90IGdlbmVyYWxseSBhdmFpbGFibGUsIGFuZCB0aGUgbWFjaGluZS1nZW5lcmF0ZWQgSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgcHJvZHVjZWQgYnkgc29tZSB3b3JkIHByb2Nlc3NvcnMgZm9yIG91dHB1dCBwdXJwb3NlcyBvbmx5LlxuXG4gICBUaGUgXCJUaXRsZSBQYWdlXCIgbWVhbnMsIGZvciBhIHByaW50ZWQgYm9vaywgdGhlIHRpdGxlIHBhZ2UgaXRzZWxmLCBwbHVzIHN1Y2ggZm9sbG93aW5nIHBhZ2VzIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCwgbGVnaWJseSwgdGhlIG1hdGVyaWFsIHRoaXMgTGljZW5zZSByZXF1aXJlcyB0byBhcHBlYXIgaW4gdGhlIHRpdGxlIHBhZ2UuIEZvciB3b3JrcyBpbiBmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsIFwiVGl0bGUgUGFnZVwiIG1lYW5zIHRoZSB0ZXh0IG5lYXIgdGhlIG1vc3QgcHJvbWluZW50IGFwcGVhcmFuY2Ugb2YgdGhlIHdvcmsncyB0aXRsZSwgcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuXG5cbiAgIFRoZSBcInB1Ymxpc2hlclwiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgY29waWVzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgcHVibGljLlxuXG4gICBBIHNlY3Rpb24gXCJFbnRpdGxlZCBYWVpcIiBtZWFucyBhIG5hbWVkIHN1YnVuaXQgb2YgdGhlIERvY3VtZW50IHdob3NlIHRpdGxlIGVpdGhlciBpcyBwcmVjaXNlbHkgWFlaIG9yIGNvbnRhaW5zIFhZWiBpbiBwYXJlbnRoZXNlcyBmb2xsb3dpbmcgdGV4dCB0aGF0IHRyYW5zbGF0ZXMgWFlaIGluIGFub3RoZXIgbGFuZ3VhZ2UuIChIZXJlIFhZWiBzdGFuZHMgZm9yIGEgc3BlY2lmaWMgc2VjdGlvbiBuYW1lIG1lbnRpb25lZCBiZWxvdywgc3VjaCBhcyBcIkFja25vd2xlZGdlbWVudHNcIiwgXCJEZWRpY2F0aW9uc1wiLCBcIkVuZG9yc2VtZW50c1wiLCBvciBcIkhpc3RvcnlcIi4pIFRvIFwiUHJlc2VydmUgdGhlIFRpdGxlXCIgb2Ygc3VjaCBhIHNlY3Rpb24gd2hlbiB5b3UgbW9kaWZ5IHRoZSBEb2N1bWVudCBtZWFucyB0aGF0IGl0IHJlbWFpbnMgYSBzZWN0aW9uIFwiRW50aXRsZWQgWFlaXCIgYWNjb3JkaW5nIHRvIHRoaXMgZGVmaW5pdGlvbi5cblxuICAgVGhlIERvY3VtZW50IG1heSBpbmNsdWRlIFdhcnJhbnR5IERpc2NsYWltZXJzIG5leHQgdG8gdGhlIG5vdGljZSB3aGljaCBzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuIFRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluY2x1ZGVkIGJ5IHJlZmVyZW5jZSBpbiB0aGlzIExpY2Vuc2UsIGJ1dCBvbmx5IGFzIHJlZ2FyZHMgZGlzY2xhaW1pbmcgd2FycmFudGllczogYW55IG90aGVyIGltcGxpY2F0aW9uIHRoYXQgdGhlc2UgV2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQgaGFzIG5vIGVmZmVjdCBvbiB0aGUgbWVhbmluZyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDIuIFZFUkJBVElNIENPUFlJTkdcblxuICAgWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVtLCBlaXRoZXIgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseSwgcHJvdmlkZWQgdGhhdCB0aGlzIExpY2Vuc2UsIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIERvY3VtZW50IGFyZSByZXByb2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdSBhZGQgbm8gb3RoZXIgY29uZGl0aW9ucyB3aGF0c29ldmVyIHRvIHRob3NlIG9mIHRoaXMgTGljZW5zZS4gWW91IG1heSBub3QgdXNlIHRlY2huaWNhbCBtZWFzdXJlcyB0byBvYnN0cnVjdCBvciBjb250cm9sIHRoZSByZWFkaW5nIG9yIGZ1cnRoZXIgY29weWluZyBvZiB0aGUgY29waWVzIHlvdSBtYWtlIG9yIGRpc3RyaWJ1dGUuIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0IGNvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IgY29waWVzLiBJZiB5b3UgZGlzdHJpYnV0ZSBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy5cblxuICAgWW91IG1heSBhbHNvIGxlbmQgY29waWVzLCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHN0YXRlZCBhYm92ZSwgYW5kIHlvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuXG5cbiAgIDMuIENPUFlJTkcgSU4gUVVBTlRJVFlcblxuICAgSWYgeW91IHB1Ymxpc2ggcHJpbnRlZCBjb3BpZXMgKG9yIGNvcGllcyBpbiBtZWRpYSB0aGF0IGNvbW1vbmx5IGhhdmUgcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUgRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZSByZXF1aXJlcyBDb3ZlciBUZXh0cywgeW91IG11c3QgZW5jbG9zZSB0aGUgY29waWVzIGluIGNvdmVycyB0aGF0IGNhcnJ5LCBjbGVhcmx5IGFuZCBsZWdpYmx5LCBhbGwgdGhlc2UgQ292ZXIgVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24gdGhlIGJhY2sgY292ZXIuIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5IGFuZCBsZWdpYmx5IGlkZW50aWZ5IHlvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gVGhlIGZyb250IGNvdmVyIG11c3QgcHJlc2VudCB0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbCB3b3JkcyBvZiB0aGUgdGl0bGUgZXF1YWxseSBwcm9taW5lbnQgYW5kIHZpc2libGUuIFlvdSBtYXkgYWRkIG90aGVyIG1hdGVyaWFsIG9uIHRoZSBjb3ZlcnMgaW4gYWRkaXRpb24uIENvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlIHRoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQgYXMgdmVyYmF0aW0gY29weWluZyBpbiBvdGhlciByZXNwZWN0cy5cblxuICAgSWYgdGhlIHJlcXVpcmVkIHRleHRzIGZvciBlaXRoZXIgY292ZXIgYXJlIHRvbyB2b2x1bWlub3VzIHRvIGZpdCBsZWdpYmx5LCB5b3Ugc2hvdWxkIHB1dCB0aGUgZmlyc3Qgb25lcyBsaXN0ZWQgKGFzIG1hbnkgYXMgZml0IHJlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50IHBhZ2VzLlxuXG4gICBJZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50IG51bWJlcmluZyBtb3JlIHRoYW4gMTAwLCB5b3UgbXVzdCBlaXRoZXIgaW5jbHVkZSBhIG1hY2hpbmUtcmVhZGFibGUgVHJhbnNwYXJlbnQgY29weSBhbG9uZyB3aXRoIGVhY2ggT3BhcXVlIGNvcHksIG9yIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weSBhIGNvbXB1dGVyLW5ldHdvcmsgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgZ2VuZXJhbCBuZXR3b3JrLXVzaW5nIHB1YmxpYyBoYXMgYWNjZXNzIHRvIGRvd25sb2FkIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scyBhIGNvbXBsZXRlIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBmcmVlIG9mIGFkZGVkIG1hdGVyaWFsLiBJZiB5b3UgdXNlIHRoZSBsYXR0ZXIgb3B0aW9uLCB5b3UgbXVzdCB0YWtlIHJlYXNvbmFibHkgcHJ1ZGVudCBzdGVwcywgd2hlbiB5b3UgYmVnaW4gZGlzdHJpYnV0aW9uIG9mIE9wYXF1ZSBjb3BpZXMgaW4gcXVhbnRpdHksIHRvIGVuc3VyZSB0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZCBsb2NhdGlvbiB1bnRpbCBhdCBsZWFzdCBvbmUgeWVhciBhZnRlciB0aGUgbGFzdCB0aW1lIHlvdSBkaXN0cmlidXRlIGFuIE9wYXF1ZSBjb3B5IChkaXJlY3RseSBvciB0aHJvdWdoIHlvdXIgYWdlbnRzIG9yIHJldGFpbGVycykgb2YgdGhhdCBlZGl0aW9uIHRvIHRoZSBwdWJsaWMuXG5cbiAgIEl0IGlzIHJlcXVlc3RlZCwgYnV0IG5vdCByZXF1aXJlZCwgdGhhdCB5b3UgY29udGFjdCB0aGUgYXV0aG9ycyBvZiB0aGUgRG9jdW1lbnQgd2VsbCBiZWZvcmUgcmVkaXN0cmlidXRpbmcgYW55IGxhcmdlIG51bWJlciBvZiBjb3BpZXMsIHRvIGdpdmUgdGhlbSBhIGNoYW5jZSB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQuXG5cbiAgIDQuIE1PRElGSUNBVElPTlNcblxuICAgWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQgdW5kZXIgdGhlIGNvbmRpdGlvbnMgb2Ygc2VjdGlvbnMgMiBhbmQgMyBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgcmVsZWFzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciBwcmVjaXNlbHkgdGhpcyBMaWNlbnNlLCB3aXRoIHRoZSBNb2RpZmllZCBWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzIGxpY2Vuc2luZyBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiB0byB3aG9ldmVyIHBvc3Nlc3NlcyBhIGNvcHkgb2YgaXQuIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246XG5cbiAgICAgIEEuIFVzZSBpbiB0aGUgVGl0bGUgUGFnZSAoYW5kIG9uIHRoZSBjb3ZlcnMsIGlmIGFueSkgYSB0aXRsZSBkaXN0aW5jdCBmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZiBwcmV2aW91cyB2ZXJzaW9ucyAod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUgbGlzdGVkIGluIHRoZSBIaXN0b3J5IHNlY3Rpb24gb2YgdGhlIERvY3VtZW50KS4gWW91IG1heSB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uIGlmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uXG5cbiAgICAgIEIuIExpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMgcmVzcG9uc2libGUgZm9yIGF1dGhvcnNoaXAgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24sIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3QgZml2ZSBvZiB0aGUgcHJpbmNpcGFsIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiBmaXZlKSwgdW5sZXNzIHRoZXkgcmVsZWFzZSB5b3UgZnJvbSB0aGlzIHJlcXVpcmVtZW50LlxuXG4gICAgICBDLiBTdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uLCBhcyB0aGUgcHVibGlzaGVyLlxuXG4gICAgICBELiBQcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC5cblxuICAgICAgRS4gQWRkIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgZm9yIHlvdXIgbW9kaWZpY2F0aW9ucyBhZGphY2VudCB0byB0aGUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMuXG5cbiAgICAgIEYuIEluY2x1ZGUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYSBsaWNlbnNlIG5vdGljZSBnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiB0aGUgZm9ybSBzaG93biBpbiB0aGUgQWRkZW5kdW0gYmVsb3cuXG5cbiAgICAgIEcuIFByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zIGFuZCByZXF1aXJlZCBDb3ZlciBUZXh0cyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZS4gSC4gSW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIEkuIFByZXNlcnZlIHRoZSBzZWN0aW9uIEVudGl0bGVkIFwiSGlzdG9yeVwiLCBQcmVzZXJ2ZSBpdHMgVGl0bGUsIGFuZCBhZGQgdG8gaXQgYW4gaXRlbSBzdGF0aW5nIGF0IGxlYXN0IHRoZSB0aXRsZSwgeWVhciwgbmV3IGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgZ2l2ZW4gb24gdGhlIFRpdGxlIFBhZ2UuIElmIHRoZXJlIGlzIG5vIHNlY3Rpb24gRW50aXRsZWQgXCJIaXN0b3J5XCIgaW4gdGhlIERvY3VtZW50LCBjcmVhdGUgb25lIHN0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcyBnaXZlbiBvbiBpdHMgVGl0bGUgUGFnZSwgdGhlbiBhZGQgYW4gaXRlbSBkZXNjcmliaW5nIHRoZSBNb2RpZmllZCBWZXJzaW9uIGFzIHN0YXRlZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2UuXG5cbiAgICAgIEouIFByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9uLCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHVibGljIGFjY2VzcyB0byBhIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBhbmQgbGlrZXdpc2UgdGhlIG5ldHdvcmsgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHJldmlvdXMgdmVyc2lvbnMgaXQgd2FzIGJhc2VkIG9uLiBUaGVzZSBtYXkgYmUgcGxhY2VkIGluIHRoZSBcIkhpc3RvcnlcIiBzZWN0aW9uLiBZb3UgbWF5IG9taXQgYSBuZXR3b3JrIGxvY2F0aW9uIGZvciBhIHdvcmsgdGhhdCB3YXMgcHVibGlzaGVkIGF0IGxlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YgdGhlIHZlcnNpb24gaXQgcmVmZXJzIHRvIGdpdmVzIHBlcm1pc3Npb24uXG5cbiAgICAgIEsuIEZvciBhbnkgc2VjdGlvbiBFbnRpdGxlZCBcIkFja25vd2xlZGdlbWVudHNcIiBvciBcIkRlZGljYXRpb25zXCIsIFByZXNlcnZlIHRoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbCB0aGUgc3Vic3RhbmNlIGFuZCB0b25lIG9mIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yIGFja25vd2xlZGdlbWVudHMgYW5kL29yIGRlZGljYXRpb25zIGdpdmVuIHRoZXJlaW4uXG5cbiAgICAgIEwuIFByZXNlcnZlIGFsbCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIHRoZSBEb2N1bWVudCwgdW5hbHRlcmVkIGluIHRoZWlyIHRleHQgYW5kIGluIHRoZWlyIHRpdGxlcy4gU2VjdGlvbiBudW1iZXJzIG9yIHRoZSBlcXVpdmFsZW50IGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzZWN0aW9uIHRpdGxlcy5cblxuICAgICAgTS4gRGVsZXRlIGFueSBzZWN0aW9uIEVudGl0bGVkIFwiRW5kb3JzZW1lbnRzXCIuIFN1Y2ggYSBzZWN0aW9uIG1heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uXG5cbiAgICAgIE4uIERvIG5vdCByZXRpdGxlIGFueSBleGlzdGluZyBzZWN0aW9uIHRvIGJlIEVudGl0bGVkIFwiRW5kb3JzZW1lbnRzXCIgb3IgdG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aCBhbnkgSW52YXJpYW50IFNlY3Rpb24uXG5cbiAgICAgIE8uIFByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy5cblxuICAgSWYgdGhlIE1vZGlmaWVkIFZlcnNpb24gaW5jbHVkZXMgbmV3IGZyb250LW1hdHRlciBzZWN0aW9ucyBvciBhcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8gbWF0ZXJpYWwgY29waWVkIGZyb20gdGhlIERvY3VtZW50LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbCBvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuIFRvIGRvIHRoaXMsIGFkZCB0aGVpciB0aXRsZXMgdG8gdGhlIGxpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uJ3MgbGljZW5zZSBub3RpY2UuIFRoZXNlIHRpdGxlcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHNlY3Rpb24gdGl0bGVzLlxuXG4gICBZb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgXCJFbmRvcnNlbWVudHNcIiwgcHJvdmlkZWQgaXQgY29udGFpbnMgbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzIHBhcnRpZXMtLWZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzIGJlZW4gYXBwcm92ZWQgYnkgYW4gb3JnYW5pemF0aW9uIGFzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gb2YgYSBzdGFuZGFyZC5cblxuICAgWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LCBhbmQgYSBwYXNzYWdlIG9mIHVwIHRvIDI1IHdvcmRzIGFzIGEgQmFjay1Db3ZlciBUZXh0LCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IG9mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiBPbmx5IG9uZSBwYXNzYWdlIG9mIEZyb250LUNvdmVyIFRleHQgYW5kIG9uZSBvZiBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGFkZGVkIGJ5IChvciB0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gSWYgdGhlIERvY3VtZW50IGFscmVhZHkgaW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseSBhZGRlZCBieSB5b3Ugb3IgYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLCB5b3UgbWF5IG5vdCBhZGQgYW5vdGhlcjsgYnV0IHlvdSBtYXkgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQgcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cyBwdWJsaXNoZXIgdGhhdCBhZGRlZCB0aGUgb2xkIG9uZS5cblxuICAgVGhlIGF1dGhvcihzKSBhbmQgcHVibGlzaGVyKHMpIG9mIHRoZSBEb2N1bWVudCBkbyBub3QgYnkgdGhpcyBMaWNlbnNlIGdpdmUgcGVybWlzc2lvbiB0byB1c2UgdGhlaXIgbmFtZXMgZm9yIHB1YmxpY2l0eSBmb3Igb3IgdG8gYXNzZXJ0IG9yIGltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLlxuXG4gICA1LiBDT01CSU5JTkcgRE9DVU1FTlRTXG5cbiAgIFlvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkIHZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb21iaW5hdGlvbiBhbGwgb2YgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwgYW5kIGxpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMgbGljZW5zZSBub3RpY2UsIGFuZCB0aGF0IHlvdSBwcmVzZXJ2ZSBhbGwgdGhlaXIgV2FycmFudHkgRGlzY2xhaW1lcnMuXG5cbiAgIFRoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kIG11bHRpcGxlIGlkZW50aWNhbCBJbnZhcmlhbnQgU2VjdGlvbnMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgY29weS4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0IGRpZmZlcmVudCBjb250ZW50cywgbWFrZSB0aGUgdGl0bGUgb2YgZWFjaCBzdWNoIHNlY3Rpb24gdW5pcXVlIGJ5IGFkZGluZyBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGF1dGhvciBvciBwdWJsaXNoZXIgb2YgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4gTWFrZSB0aGUgc2FtZSBhZGp1c3RtZW50IHRvIHRoZSBzZWN0aW9uIHRpdGxlcyBpbiB0aGUgbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLlxuXG4gICBJbiB0aGUgY29tYmluYXRpb24sIHlvdSBtdXN0IGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkIFwiSGlzdG9yeVwiIGluIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbiBFbnRpdGxlZCBcIkhpc3RvcnlcIjsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgXCJBY2tub3dsZWRnZW1lbnRzXCIsIGFuZCBhbnkgc2VjdGlvbnMgRW50aXRsZWQgXCJEZWRpY2F0aW9uc1wiLiBZb3UgbXVzdCBkZWxldGUgYWxsIHNlY3Rpb25zIEVudGl0bGVkIFwiRW5kb3JzZW1lbnRzXCIuXG5cbiAgIDYuIENPTExFQ1RJT05TIE9GIERPQ1VNRU5UU1xuXG4gICBZb3UgbWF5IG1ha2UgYSBjb2xsZWN0aW9uIGNvbnNpc3Rpbmcgb2YgdGhlIERvY3VtZW50IGFuZCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcyBMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkgdGhhdCBpcyBpbmNsdWRlZCBpbiB0aGUgY29sbGVjdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZm9sbG93IHRoZSBydWxlcyBvZiB0aGlzIExpY2Vuc2UgZm9yIHZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy5cblxuICAgWW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZCBkaXN0cmlidXRlIGl0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBpbnRvIHRoZSBleHRyYWN0ZWQgZG9jdW1lbnQsIGFuZCBmb2xsb3cgdGhpcyBMaWNlbnNlIGluIGFsbCBvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZiB0aGF0IGRvY3VtZW50LlxuXG4gICA3LiBBR0dSRUdBVElPTiBXSVRIIElOREVQRU5ERU5UIFdPUktTXG5cbiAgIEEgY29tcGlsYXRpb24gb2YgdGhlIERvY3VtZW50IG9yIGl0cyBkZXJpdmF0aXZlcyB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gXCJhZ2dyZWdhdGVcIiBpZiB0aGUgY29weXJpZ2h0IHJlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBpcyBub3QgdXNlZCB0byBsaW1pdCB0aGUgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gV2hlbiB0aGUgRG9jdW1lbnQgaXMgaW5jbHVkZWQgaW4gYW4gYWdncmVnYXRlLCB0aGlzIExpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gdGhlIG90aGVyIHdvcmtzIGluIHRoZSBhZ2dyZWdhdGUgd2hpY2ggYXJlIG5vdCB0aGVtc2VsdmVzIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERvY3VtZW50LlxuXG4gICBJZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50LCB0aGVuIGlmIHRoZSBEb2N1bWVudCBpcyBsZXNzIHRoYW4gb25lIGhhbGYgb2YgdGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudCdzIENvdmVyIFRleHRzIG1heSBiZSBwbGFjZWQgb24gY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZSBlbGVjdHJvbmljIGVxdWl2YWxlbnQgb2YgY292ZXJzIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBlbGVjdHJvbmljIGZvcm0uIE90aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIHByaW50ZWQgY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgd2hvbGUgYWdncmVnYXRlLlxuXG4gICA4LiBUUkFOU0xBVElPTlxuXG4gICBUcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkgZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQuIFJlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbCBwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0IGhvbGRlcnMsIGJ1dCB5b3UgbWF5IGluY2x1ZGUgdHJhbnNsYXRpb25zIG9mIHNvbWUgb3IgYWxsIEludmFyaWFudCBTZWN0aW9ucyBpbiBhZGRpdGlvbiB0byB0aGUgb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlc2UgSW52YXJpYW50IFNlY3Rpb25zLiBZb3UgbWF5IGluY2x1ZGUgYSB0cmFuc2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFuZCBhbGwgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUgRG9jdW1lbnQsIGFuZCBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gaW5jbHVkZSB0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb25zIG9mIHRob3NlIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLiBJbiBjYXNlIG9mIGEgZGlzYWdyZWVtZW50IGJldHdlZW4gdGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBub3RpY2Ugb3IgZGlzY2xhaW1lciwgdGhlIG9yaWdpbmFsIHZlcnNpb24gd2lsbCBwcmV2YWlsLlxuXG4gICBJZiBhIHNlY3Rpb24gaW4gdGhlIERvY3VtZW50IGlzIEVudGl0bGVkIFwiQWNrbm93bGVkZ2VtZW50c1wiLCBcIkRlZGljYXRpb25zXCIsIG9yIFwiSGlzdG9yeVwiLCB0aGUgcmVxdWlyZW1lbnQgKHNlY3Rpb24gNCkgdG8gUHJlc2VydmUgaXRzIFRpdGxlIChzZWN0aW9uIDEpIHdpbGwgdHlwaWNhbGx5IHJlcXVpcmUgY2hhbmdpbmcgdGhlIGFjdHVhbCB0aXRsZS5cblxuICAgOS4gVEVSTUlOQVRJT05cblxuICAgWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSBpdCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKSBwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kIGZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLlxuXG4gICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUgcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0IGNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIgeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuXG5cbiAgIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlIGxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2UuIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkgcmVpbnN0YXRlZCwgcmVjZWlwdCBvZiBhIGNvcHkgb2Ygc29tZSBvciBhbGwgb2YgdGhlIHNhbWUgbWF0ZXJpYWwgZG9lcyBub3QgZ2l2ZSB5b3UgYW55IHJpZ2h0cyB0byB1c2UgaXQuXG5cbiAgIDEwLiBGVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRVxuXG4gICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIG5ldywgcmV2aXNlZCB2ZXJzaW9ucyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC8uXG5cbiAgIEVhY2ggdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIFwib3IgYW55IGxhdGVyIHZlcnNpb25cIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgc3BlY2lmaWVkIHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gdGhhdCBoYXMgYmVlbiBwdWJsaXNoZWQgKG5vdCBhcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgKG5vdCBhcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91IHRvIGNob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZSBEb2N1bWVudC5cblxuICAgMTEuIFJFTElDRU5TSU5HXG5cbiAgIFwiTWFzc2l2ZSBNdWx0aWF1dGhvciBDb2xsYWJvcmF0aW9uIFNpdGVcIiAob3IgXCJNTUMgU2l0ZVwiKSBtZWFucyBhbnkgV29ybGQgV2lkZSBXZWIgc2VydmVyIHRoYXQgcHVibGlzaGVzIGNvcHlyaWdodGFibGUgd29ya3MgYW5kIGFsc28gcHJvdmlkZXMgcHJvbWluZW50IGZhY2lsaXRpZXMgZm9yIGFueWJvZHkgdG8gZWRpdCB0aG9zZSB3b3Jrcy4gQSBwdWJsaWMgd2lraSB0aGF0IGFueWJvZHkgY2FuIGVkaXQgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgc2VydmVyLiBBIFwiTWFzc2l2ZSBNdWx0aWF1dGhvciBDb2xsYWJvcmF0aW9uXCIgKG9yIFwiTU1DXCIpIGNvbnRhaW5lZCBpbiB0aGUgc2l0ZSBtZWFucyBhbnkgc2V0IG9mIGNvcHlyaWdodGFibGUgd29ya3MgdGh1cyBwdWJsaXNoZWQgb24gdGhlIE1NQyBzaXRlLlxuXG4gICBcIkNDLUJZLVNBXCIgbWVhbnMgdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMy4wIGxpY2Vuc2UgcHVibGlzaGVkIGJ5IENyZWF0aXZlIENvbW1vbnMgQ29ycG9yYXRpb24sIGEgbm90LWZvci1wcm9maXQgY29ycG9yYXRpb24gd2l0aCBhIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBpbiBTYW4gRnJhbmNpc2NvLCBDYWxpZm9ybmlhLCBhcyB3ZWxsIGFzIGZ1dHVyZSBjb3B5bGVmdCB2ZXJzaW9ucyBvZiB0aGF0IGxpY2Vuc2UgcHVibGlzaGVkIGJ5IHRoYXQgc2FtZSBvcmdhbml6YXRpb24uXG5cbiAgIFwiSW5jb3Jwb3JhdGVcIiBtZWFucyB0byBwdWJsaXNoIG9yIHJlcHVibGlzaCBhIERvY3VtZW50LCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhcyBwYXJ0IG9mIGFub3RoZXIgRG9jdW1lbnQuXG5cbiAgIEFuIE1NQyBpcyBcImVsaWdpYmxlIGZvciByZWxpY2Vuc2luZ1wiIGlmIGl0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGlmIGFsbCB3b3JrcyB0aGF0IHdlcmUgZmlyc3QgcHVibGlzaGVkIHVuZGVyIHRoaXMgTGljZW5zZSBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGlzIE1NQywgYW5kIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgaW4gd2hvbGUgb3IgaW4gcGFydCBpbnRvIHRoZSBNTUMsICgxKSBoYWQgbm8gY292ZXIgdGV4dHMgb3IgaW52YXJpYW50IHNlY3Rpb25zLCBhbmQgKDIpIHdlcmUgdGh1cyBpbmNvcnBvcmF0ZWQgcHJpb3IgdG8gTm92ZW1iZXIgMSwgMjAwOC5cblxuICAgVGhlIG9wZXJhdG9yIG9mIGFuIE1NQyBTaXRlIG1heSByZXB1Ymxpc2ggYW4gTU1DIGNvbnRhaW5lZCBpbiB0aGUgc2l0ZSB1bmRlciBDQy1CWS1TQSBvbiB0aGUgc2FtZSBzaXRlIGF0IGFueSB0aW1lIGJlZm9yZSBBdWd1c3QgMSwgMjAwOSwgcHJvdmlkZWQgdGhlIE1NQyBpcyBlbGlnaWJsZSBmb3IgcmVsaWNlbnNpbmcuIEFEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHNcblxuVG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZTpcblxuQ29weXJpZ2h0IChjKSBZRUFSIFlPVVIgTkFNRS4gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgbm8gQmFjay1Db3ZlciBUZXh0cy4gQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkIFwiR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlXCIuXG5cbklmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIgVGV4dHMsIHJlcGxhY2UgdGhlIFwid2l0aC4uLlRleHRzLlwiIGxpbmUgd2l0aCB0aGlzOlxuXG53aXRoIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgTElTVCBUSEVJUiBUSVRMRVMsIHdpdGggdGhlIEZyb250LUNvdmVyIFRleHRzIGJlaW5nIExJU1QsIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIExJU1QuXG5cbklmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucyB3aXRob3V0IENvdmVyIFRleHRzLCBvciBzb21lIG90aGVyIGNvbWJpbmF0aW9uIG9mIHRoZSB0aHJlZSwgbWVyZ2UgdGhvc2UgdHdvIGFsdGVybmF0aXZlcyB0byBzdWl0IHRoZSBzaXR1YXRpb24uXG5cbklmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlIHJlY29tbWVuZCByZWxlYXNpbmcgdGhlc2UgZXhhbXBsZXMgaW4gcGFyYWxsZWwgdW5kZXIgeW91ciBjaG9pY2Ugb2YgZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzdWNoIGFzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLiJdLCJsaWNlbnNlSWRzIjpbIkdGREwtMS4zLW9yLWxhdGVyIiwiR0ZETC0xLjMtb25seSIsIkdGREwtMS4zIl0sImtleXdvcmRzIjpbIjMgMyBub3ZlbWJlciIsIjMgbm92ZW1iZXIgMjAwOCIsIm5vdmVtYmVyIDIwMDggY29weXJpZ2h0IiwiMjAwMSAyMDAyIDIwMDciLCIyMDAyIDIwMDcgMjAwOCIsIjIwMDcgMjAwOCBmcmVlIiwiMjAwOCBmcmVlIHNvZnR3YXJlIiwidGhlIHRleHQgdGhlIiwidGV4dCB0aGUgcHVibGlzaGVyIiwidGhlIHB1Ymxpc2hlciBtZWFucyIsInB1Ymxpc2hlciBtZWFucyBhbnkiLCJ0aGF0IGRpc3RyaWJ1dGVzIGNvcGllcyIsImRpc3RyaWJ1dGVzIGNvcGllcyBvZiIsInRoZSBwdWJsaWMgYSIsInB1YmxpYyBhIHNlY3Rpb24iLCJkaXN0cmlidXRlIGl0IGlzIiwibGljZW5zZSBob3dldmVyIGlmIiwicGVybWFuZW50bHkgcmVpbnN0YXRlZCByZWNlaXB0IiwicmVpbnN0YXRlZCByZWNlaXB0IG9mIiwiY29weSBvZiBzb21lIiwic2FtZSBtYXRlcmlhbCBkb2VzIiwibWF0ZXJpYWwgZG9lcyBub3QiLCJnaXZlIHlvdSBhbnkiLCJ1c2UgaXQgMTAiLCJpdCAxMCBmdXR1cmUiLCJmb3IgdGhlIGRvY3VtZW50IiwidGhlIGRvY3VtZW50IDExIiwiZG9jdW1lbnQgMTEgcmVsaWNlbnNpbmciLCIxMSByZWxpY2Vuc2luZyBtYXNzaXZlIiwicmVsaWNlbnNpbmcgbWFzc2l2ZSBtdWx0aWF1dGhvciIsIm11bHRpYXV0aG9yIGNvbGxhYm9yYXRpb24gc2l0ZSIsImNvbGxhYm9yYXRpb24gc2l0ZSBvciIsInNpdGUgb3IgbW1jIiwib3IgbW1jIHNpdGUiLCJtbWMgc2l0ZSBtZWFucyIsIm1lYW5zIGFueSB3b3JsZCIsImFueSB3b3JsZCB3aWRlIiwid2lkZSB3ZWIgc2VydmVyIiwid2ViIHNlcnZlciB0aGF0Iiwic2VydmVyIHRoYXQgcHVibGlzaGVzIiwidGhhdCBwdWJsaXNoZXMgY29weXJpZ2h0YWJsZSIsInB1Ymxpc2hlcyBjb3B5cmlnaHRhYmxlIHdvcmtzIiwiY29weXJpZ2h0YWJsZSB3b3JrcyBhbmQiLCJ3b3JrcyBhbmQgYWxzbyIsImFuZCBhbHNvIHByb3ZpZGVzIiwiYWxzbyBwcm92aWRlcyBwcm9taW5lbnQiLCJwcm92aWRlcyBwcm9taW5lbnQgZmFjaWxpdGllcyIsInByb21pbmVudCBmYWNpbGl0aWVzIGZvciIsImZhY2lsaXRpZXMgZm9yIGFueWJvZHkiLCJmb3IgYW55Ym9keSB0byIsImFueWJvZHkgdG8gZWRpdCIsInRvIGVkaXQgdGhvc2UiLCJlZGl0IHRob3NlIHdvcmtzIiwidGhvc2Ugd29ya3MgYSIsIndvcmtzIGEgcHVibGljIiwiYSBwdWJsaWMgd2lraSIsInB1YmxpYyB3aWtpIHRoYXQiLCJ3aWtpIHRoYXQgYW55Ym9keSIsInRoYXQgYW55Ym9keSBjYW4iLCJhbnlib2R5IGNhbiBlZGl0IiwiY2FuIGVkaXQgaXMiLCJlZGl0IGlzIGFuIiwic3VjaCBhIHNlcnZlciIsImEgc2VydmVyIGEiLCJzZXJ2ZXIgYSBtYXNzaXZlIiwiYSBtYXNzaXZlIG11bHRpYXV0aG9yIiwibXVsdGlhdXRob3IgY29sbGFib3JhdGlvbiBvciIsImNvbGxhYm9yYXRpb24gb3IgbW1jIiwib3IgbW1jIGNvbnRhaW5lZCIsInRoZSBzaXRlIG1lYW5zIiwibWVhbnMgYW55IHNldCIsImFueSBzZXQgb2YiLCJzZXQgb2YgY29weXJpZ2h0YWJsZSIsIm9mIGNvcHlyaWdodGFibGUgd29ya3MiLCJjb3B5cmlnaHRhYmxlIHdvcmtzIHRodXMiLCJ3b3JrcyB0aHVzIHB1Ymxpc2hlZCIsInRodXMgcHVibGlzaGVkIG9uIiwicHVibGlzaGVkIG9uIHRoZSIsIm9uIHRoZSBtbWMiLCJ0aGUgbW1jIHNpdGUiLCJtbWMgc2l0ZSBjYyIsInNpdGUgY2MgYnkiLCJieSBzYSBtZWFucyIsInNhIG1lYW5zIHRoZSIsIm1lYW5zIHRoZSBjcmVhdGl2ZSIsImNvbW1vbnMgYXR0cmlidXRpb24gc2hhcmUiLCJhdHRyaWJ1dGlvbiBzaGFyZSBhbGlrZSIsInNoYXJlIGFsaWtlIDMiLCJhbGlrZSAzIDAiLCIwIGxpY2Vuc2UgcHVibGlzaGVkIiwicHVibGlzaGVkIGJ5IGNyZWF0aXZlIiwiY29tbW9ucyBjb3Jwb3JhdGlvbiBhIiwiY29ycG9yYXRpb24gYSBub3QiLCJmb3IgcHJvZml0IGNvcnBvcmF0aW9uIiwicHJvZml0IGNvcnBvcmF0aW9uIHdpdGgiLCJjb3Jwb3JhdGlvbiB3aXRoIGEiLCJ3aXRoIGEgcHJpbmNpcGFsIiwiYSBwcmluY2lwYWwgcGxhY2UiLCJvZiBidXNpbmVzcyBpbiIsImJ1c2luZXNzIGluIHNhbiIsImluIHNhbiBmcmFuY2lzY28iLCJzYW4gZnJhbmNpc2NvIGNhbGlmb3JuaWEiLCJmcmFuY2lzY28gY2FsaWZvcm5pYSBhcyIsImNhbGlmb3JuaWEgYXMgd2VsbCIsImFzIGZ1dHVyZSBjb3B5bGVmdCIsImZ1dHVyZSBjb3B5bGVmdCB2ZXJzaW9ucyIsImNvcHlsZWZ0IHZlcnNpb25zIG9mIiwidGhhdCBsaWNlbnNlIHB1Ymxpc2hlZCIsInB1Ymxpc2hlZCBieSB0aGF0IiwiYnkgdGhhdCBzYW1lIiwidGhhdCBzYW1lIG9yZ2FuaXphdGlvbiIsInNhbWUgb3JnYW5pemF0aW9uIGluY29ycG9yYXRlIiwib3JnYW5pemF0aW9uIGluY29ycG9yYXRlIG1lYW5zIiwiaW5jb3Jwb3JhdGUgbWVhbnMgdG8iLCJtZWFucyB0byBwdWJsaXNoIiwidG8gcHVibGlzaCBvciIsInB1Ymxpc2ggb3IgcmVwdWJsaXNoIiwib3IgcmVwdWJsaXNoIGEiLCJyZXB1Ymxpc2ggYSBkb2N1bWVudCIsImEgZG9jdW1lbnQgaW4iLCJkb2N1bWVudCBpbiB3aG9sZSIsInBhcnQgYXMgcGFydCIsInBhcnQgb2YgYW5vdGhlciIsIm9mIGFub3RoZXIgZG9jdW1lbnQiLCJhbm90aGVyIGRvY3VtZW50IGFuIiwiZG9jdW1lbnQgYW4gbW1jIiwiYW4gbW1jIGlzIiwiZm9yIHJlbGljZW5zaW5nIGlmIiwicmVsaWNlbnNpbmcgaWYgaXQiLCJpdCBpcyBsaWNlbnNlZCIsImFuZCBpZiBhbGwiLCJpZiBhbGwgd29ya3MiLCJhbGwgd29ya3MgdGhhdCIsIndvcmtzIHRoYXQgd2VyZSIsInRoYXQgd2VyZSBmaXJzdCIsIndlcmUgZmlyc3QgcHVibGlzaGVkIiwiZmlyc3QgcHVibGlzaGVkIHVuZGVyIiwidGhpcyBsaWNlbnNlIHNvbWV3aGVyZSIsImxpY2Vuc2Ugc29tZXdoZXJlIG90aGVyIiwic29tZXdoZXJlIG90aGVyIHRoYW4iLCJ0aGFuIHRoaXMgbW1jIiwidGhpcyBtbWMgYW5kIiwibW1jIGFuZCBzdWJzZXF1ZW50bHkiLCJzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIGluIiwiaW5jb3Jwb3JhdGVkIGluIHdob2xlIiwiaW4gcGFydCBpbnRvIiwicGFydCBpbnRvIHRoZSIsImludG8gdGhlIG1tYyIsInRoZSBtbWMgMSIsIm1tYyAxIGhhZCIsIjEgaGFkIG5vIiwiaGFkIG5vIGNvdmVyIiwibm8gY292ZXIgdGV4dHMiLCJ0ZXh0cyBvciBpbnZhcmlhbnQiLCJvciBpbnZhcmlhbnQgc2VjdGlvbnMiLCJzZWN0aW9ucyBhbmQgMiIsImFuZCAyIHdlcmUiLCIyIHdlcmUgdGh1cyIsIndlcmUgdGh1cyBpbmNvcnBvcmF0ZWQiLCJ0aHVzIGluY29ycG9yYXRlZCBwcmlvciIsImluY29ycG9yYXRlZCBwcmlvciB0byIsInByaW9yIHRvIG5vdmVtYmVyIiwidG8gbm92ZW1iZXIgMSIsIm5vdmVtYmVyIDEgMjAwOCIsIjEgMjAwOCB0aGUiLCIyMDA4IHRoZSBvcGVyYXRvciIsIm9wZXJhdG9yIG9mIGFuIiwib2YgYW4gbW1jIiwiYW4gbW1jIHNpdGUiLCJtbWMgc2l0ZSBtYXkiLCJzaXRlIG1heSByZXB1Ymxpc2giLCJtYXkgcmVwdWJsaXNoIGFuIiwicmVwdWJsaXNoIGFuIG1tYyIsImFuIG1tYyBjb250YWluZWQiLCJ0aGUgc2l0ZSB1bmRlciIsInNpdGUgdW5kZXIgY2MiLCJ1bmRlciBjYyBieSIsImJ5IHNhIG9uIiwic2Egb24gdGhlIiwidGhlIHNhbWUgc2l0ZSIsInNhbWUgc2l0ZSBhdCIsInNpdGUgYXQgYW55IiwiYW55IHRpbWUgYmVmb3JlIiwidGltZSBiZWZvcmUgYXVndXN0IiwiYmVmb3JlIGF1Z3VzdCAxIiwiYXVndXN0IDEgMjAwOSIsIjEgMjAwOSBwcm92aWRlZCIsIjIwMDkgcHJvdmlkZWQgdGhlIiwicHJvdmlkZWQgdGhlIG1tYyIsInRoZSBtbWMgaXMiLCJmb3IgcmVsaWNlbnNpbmcgYWRkZW5kdW0iLCJyZWxpY2Vuc2luZyBhZGRlbmR1bSBob3ciLCJ2ZXJzaW9uIDEgMyAzIiwiMSAzIDMgbm92ZW1iZXIiLCIzIDMgbm92ZW1iZXIgMjAwOCIsIjMgbm92ZW1iZXIgMjAwOCBjb3B5cmlnaHQiLCJub3ZlbWJlciAyMDA4IGNvcHlyaWdodCBjIiwiMjAwOCBjb3B5cmlnaHQgYyAyMDAwIiwiMjAwMCAyMDAxIDIwMDIgMjAwNyIsIjIwMDEgMjAwMiAyMDA3IDIwMDgiXX0seyJsaWNlbnNlVGV4dHMiOlsiR0wyUFMgTElDRU5TRSBWZXJzaW9uIDIsIE5vdmVtYmVyIDIwMDMgQ29weXJpZ2h0IChDKSAyMDAzLCBDaHJpc3RvcGhlIEdldXphaW5lXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvZnR3YXJlIGlzIGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQ6XG5cbiAgIDEpIHRoZSBtb2RpZmljYXRpb25zIGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyB0aGlzIHNvZnR3YXJlO1xuXG4gICAyKSB5b3UgbWFrZSBhdmFpbGFibGUgdGhlIHNvdXJjZSBjb2RlIG9mIGFueSBtb2RpZmljYXRpb25zIHRoYXQgeW91IGRpc3RyaWJ1dGUsIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyB5b3UgZGlzdHJpYnV0ZSBhbnkgZXhlY3V0YWJsZSBvciBvdGhlciBmb3JtIG9mIHRoaXMgc29mdHdhcmUsIG9yIHZpYSBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS5cblxuVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBcImFzIGlzXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuIl0sImxpY2Vuc2VJZHMiOlsiR0wyUFMiXSwia2V5d29yZHMiOlsiZ2wycHMgbGljZW5zZSB2ZXJzaW9uIiwidmVyc2lvbiAyIG5vdmVtYmVyIiwiMiBub3ZlbWJlciAyMDAzIiwibm92ZW1iZXIgMjAwMyBjb3B5cmlnaHQiLCIyMDAzIGNvcHlyaWdodCBjIiwiYyAyMDAzIGNocmlzdG9waGUiLCIyMDAzIGNocmlzdG9waGUgZ2V1emFpbmUiLCJjaHJpc3RvcGhlIGdldXphaW5lIHBlcm1pc3Npb24iLCJnZXV6YWluZSBwZXJtaXNzaW9uIHRvIiwiMSB0aGUgbW9kaWZpY2F0aW9ucyIsInNvZnR3YXJlIDIgeW91IiwiMiB5b3UgbWFrZSIsIm9mIGRhdGEgdGhpcyIsImRhdGEgdGhpcyBzb2Z0d2FyZSIsImdsMnBzIGxpY2Vuc2UgdmVyc2lvbiAyIiwibGljZW5zZSB2ZXJzaW9uIDIgbm92ZW1iZXIiLCJ2ZXJzaW9uIDIgbm92ZW1iZXIgMjAwMyIsIjIgbm92ZW1iZXIgMjAwMyBjb3B5cmlnaHQiLCJub3ZlbWJlciAyMDAzIGNvcHlyaWdodCBjIiwiMjAwMyBjb3B5cmlnaHQgYyAyMDAzIiwiY29weXJpZ2h0IGMgMjAwMyBjaHJpc3RvcGhlIiwiYyAyMDAzIGNocmlzdG9waGUgZ2V1emFpbmUiLCIyMDAzIGNocmlzdG9waGUgZ2V1emFpbmUgcGVybWlzc2lvbiIsImNocmlzdG9waGUgZ2V1emFpbmUgcGVybWlzc2lvbiB0byIsImdldXphaW5lIHBlcm1pc3Npb24gdG8gdXNlIiwidGhlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIiwicGVybWlzc2lvbiB0byBtb2RpZnkgYW5kIiwidG8gbW9kaWZ5IGFuZCBkaXN0cmlidXRlIiwibW9kaWZ5IGFuZCBkaXN0cmlidXRlIG1vZGlmaWVkIiwiZ3JhbnRlZCBwcm92aWRlZCB0aGF0IDEiLCJ0aGF0IDEgdGhlIG1vZGlmaWNhdGlvbnMiLCIxIHRoZSBtb2RpZmljYXRpb25zIGFyZSIsImxpY2Vuc2VkIHVuZGVyIHRoZSBzYW1lIiwidGVybXMgYXMgdGhpcyBzb2Z0d2FyZSIsImFzIHRoaXMgc29mdHdhcmUgMiIsInRoaXMgc29mdHdhcmUgMiB5b3UiLCJzb2Z0d2FyZSAyIHlvdSBtYWtlIiwiMiB5b3UgbWFrZSBhdmFpbGFibGUiLCJ5b3UgbWFrZSBhdmFpbGFibGUgdGhlIiwib2YgYW55IG1vZGlmaWNhdGlvbnMgdGhhdCIsIm90aGVyIGZvcm0gb2YgdGhpcyIsImZvcm0gb2YgdGhpcyBzb2Z0d2FyZSIsInRoaXMgc29mdHdhcmUgb3IgdmlhIiwic29mdHdhcmUgb3IgdmlhIGEiLCJ0cmFuc2ZlciBvZiBkYXRhIHRoaXMiLCJvZiBkYXRhIHRoaXMgc29mdHdhcmUiLCJkYXRhIHRoaXMgc29mdHdhcmUgaXMiLCJnbDJwcyBsaWNlbnNlIHZlcnNpb24gMiBub3ZlbWJlciIsImxpY2Vuc2UgdmVyc2lvbiAyIG5vdmVtYmVyIDIwMDMiLCJ2ZXJzaW9uIDIgbm92ZW1iZXIgMjAwMyBjb3B5cmlnaHQiLCIyIG5vdmVtYmVyIDIwMDMgY29weXJpZ2h0IGMiLCJub3ZlbWJlciAyMDAzIGNvcHlyaWdodCBjIDIwMDMiLCIyMDAzIGNvcHlyaWdodCBjIDIwMDMgY2hyaXN0b3BoZSIsImNvcHlyaWdodCBjIDIwMDMgY2hyaXN0b3BoZSBnZXV6YWluZSIsImMgMjAwMyBjaHJpc3RvcGhlIGdldXphaW5lIHBlcm1pc3Npb24iLCIyMDAzIGNocmlzdG9waGUgZ2V1emFpbmUgcGVybWlzc2lvbiB0byIsImNocmlzdG9waGUgZ2V1emFpbmUgcGVybWlzc2lvbiB0byB1c2UiLCJnZXV6YWluZSBwZXJtaXNzaW9uIHRvIHVzZSBjb3B5IiwiZ3JhbnRlZCBwcm92aWRlZCB0aGF0IHRoZSBjb3B5cmlnaHQiLCJ0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciIsInRoZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiIsImRvY3VtZW50YXRpb24gcGVybWlzc2lvbiB0byBtb2RpZnkgYW5kIiwicGVybWlzc2lvbiB0byBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUiLCJ0byBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQiLCJtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMiLCJ2ZXJzaW9ucyBvZiB0aGlzIHNvZnR3YXJlIGlzIiwiaXMgZ3JhbnRlZCBwcm92aWRlZCB0aGF0IDEiLCJncmFudGVkIHByb3ZpZGVkIHRoYXQgMSB0aGUiLCJwcm92aWRlZCB0aGF0IDEgdGhlIG1vZGlmaWNhdGlvbnMiLCJ0aGF0IDEgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIiwiMSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgbGljZW5zZWQiLCJhcmUgbGljZW5zZWQgdW5kZXIgdGhlIHNhbWUiLCJsaWNlbnNlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyIsInNhbWUgdGVybXMgYXMgdGhpcyBzb2Z0d2FyZSIsInRlcm1zIGFzIHRoaXMgc29mdHdhcmUgMiIsImFzIHRoaXMgc29mdHdhcmUgMiB5b3UiLCJ0aGlzIHNvZnR3YXJlIDIgeW91IG1ha2UiLCJzb2Z0d2FyZSAyIHlvdSBtYWtlIGF2YWlsYWJsZSIsIjIgeW91IG1ha2UgYXZhaWxhYmxlIHRoZSIsInlvdSBtYWtlIGF2YWlsYWJsZSB0aGUgc291cmNlIiwiY29kZSBvZiBhbnkgbW9kaWZpY2F0aW9ucyB0aGF0Iiwib2YgYW55IG1vZGlmaWNhdGlvbnMgdGhhdCB5b3UiLCJvciBvdGhlciBmb3JtIG9mIHRoaXMiLCJvdGhlciBmb3JtIG9mIHRoaXMgc29mdHdhcmUiLCJmb3JtIG9mIHRoaXMgc29mdHdhcmUgb3IiLCJvZiB0aGlzIHNvZnR3YXJlIG9yIHZpYSIsInRoaXMgc29mdHdhcmUgb3IgdmlhIGEiLCJzb2Z0d2FyZSBvciB2aWEgYSBtZWNoYW5pc20iLCJlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEgdGhpcyIsInRyYW5zZmVyIG9mIGRhdGEgdGhpcyBzb2Z0d2FyZSIsIm9mIGRhdGEgdGhpcyBzb2Z0d2FyZSBpcyIsImRhdGEgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRVxuXG5WZXJzaW9uIDEsIEZlYnJ1YXJ5IDE5ODlcblxuQ29weXJpZ2h0IChDKSAxOTg5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0FcblxuRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLlxuXG5QcmVhbWJsZVxuXG5UaGUgbGljZW5zZSBhZ3JlZW1lbnRzIG9mIG1vc3Qgc29mdHdhcmUgY29tcGFuaWVzIHRyeSB0byBrZWVwIHVzZXJzIGF0IHRoZSBtZXJjeSBvZiB0aG9zZSBjb21wYW5pZXMuIEJ5IGNvbnRyYXN0LCBvdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiBUaGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8gdXNpbmcgaXQuIFlvdSBjYW4gdXNlIGl0IGZvciB5b3VyIHByb2dyYW1zLCB0b28uXG5cbldoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgcHJpY2UuIFNwZWNpZmljYWxseSwgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZ2l2ZSBhd2F5IG9yIHNlbGwgY29waWVzIG9mIGZyZWUgc29mdHdhcmUsIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuXG5cblRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuXG5cbkZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgYSBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgeW91IGhhdmUuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gQW5kIHlvdSBtdXN0IHRlbGwgdGhlbSB0aGVpciByaWdodHMuXG5cbldlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS5cblxuQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgc29mdHdhcmUuIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2Ugd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwgYXV0aG9ycycgcmVwdXRhdGlvbnMuXG5cblRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBmb2xsb3cuXG5cbkdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTlxuXG4gICAwLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGUgXCJQcm9ncmFtXCIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSBcIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW1cIiBtZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMuIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzIFwieW91XCIuXG5cbiAgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncyBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLiBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LlxuXG4gICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgdW5kZXIgdGhlIHRlcm1zIG9mIFBhcmFncmFwaCAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEpIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOyBhbmRcblxuICAgICAgYikgY2F1c2UgdGhlIHdob2xlIG9mIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIHRoZSBQcm9ncmFtIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGVpdGhlciB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGV4Y2VwdCB0aGF0IHlvdSBtYXkgY2hvb3NlIHRvIGdyYW50IHdhcnJhbnR5IHByb3RlY3Rpb24gdG8gc29tZSBvciBhbGwgdGhpcmQgcGFydGllcywgYXQgeW91ciBvcHRpb24pLlxuXG4gICAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5IHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2ggaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBzaW1wbGVzdCBhbmQgbW9zdCB1c3VhbCB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuXG5cbiAgICAgIGQpIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLlxuXG4gICBNZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgaW5kZXBlbmRlbnQgd29yayB3aXRoIHRoZSBQcm9ncmFtIChvciBpdHMgZGVyaXZhdGl2ZSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoZXNlIHRlcm1zLlxuXG4gICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBQYXJhZ3JhcGggMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzpcblxuICAgICAgYSkgYWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvcixcblxuICAgICAgYikgYWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5IGZyZWUgKGV4Y2VwdCBmb3IgYSBub21pbmFsIGNoYXJnZSBmb3IgdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uKSBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsXG5cbiAgICAgIGMpIGFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gd2hlcmUgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkLiAoVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gYWxvbmUuKVxuXG4gICBTb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhbiBleGVjdXRhYmxlIGZpbGUsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zOyBidXQsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGl0IG5lZWQgbm90IGluY2x1ZGUgc291cmNlIGNvZGUgZm9yIG1vZHVsZXMgd2hpY2ggYXJlIHN0YW5kYXJkIGxpYnJhcmllcyB0aGF0IGFjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBmaWxlIHJ1bnMsIG9yIGZvciBzdGFuZGFyZCBoZWFkZXIgZmlsZXMgb3IgZGVmaW5pdGlvbnMgZmlsZXMgdGhhdCBhY2NvbXBhbnkgdGhhdCBvcGVyYXRpbmcgc3lzdGVtLlxuXG4gICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgdGhlIFByb2dyYW0gZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgdGhlIFByb2dyYW0gaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdG8gdXNlIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cyB0byB1c2UgY29waWVzLCBmcm9tIHlvdSB1bmRlciB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuXG5cbiAgIDUuIEJ5IGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgbGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuXG5cbiAgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi5cblxuICAgNy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLlxuXG4gICBFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgXCJhbnkgbGF0ZXIgdmVyc2lvblwiLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBsaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLlxuXG4gICA4LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUgcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LlxuXG4gICBcblxuICAgTk8gV0FSUkFOVFkgOS5cblxuICAgQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNIFwiQVMgSVNcIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLlxuXG4gICAxMC4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OU1xuXG5BcHBlbmRpeDogSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zXG5cbklmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIGh1bWFuaXR5LCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQgZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuXG5cblRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiBJdCBpcyBzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUgXCJjb3B5cmlnaHRcIiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLlxuXG5cdTAwM2NvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy5cdTAwM2VcblxuQ29weXJpZ2h0IChDKSAxOXl5IFx1MDAzY25hbWUgb2YgYXV0aG9yXHUwMDNlXG5cblRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDEsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cblRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuXG5cbkFsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLlxuXG5JZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6XG5cbkdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgMTl4eCBuYW1lIG9mIGF1dGhvciBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLlxuXG5UaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUgcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5IGJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZSBtb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLlxuXG5Zb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91ciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhIFwiY29weXJpZ2h0IGRpc2NsYWltZXJcIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4gSGVyZSBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOlxuXG5Zb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtIGBHbm9tb3Zpc2lvbicgKGEgcHJvZ3JhbSB0byBkaXJlY3QgY29tcGlsZXJzIHRvIG1ha2UgcGFzc2VzIGF0IGFzc2VtYmxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLlxuXG5cdTAwM2NzaWduYXR1cmUgb2YgVHkgQ29vblx1MDAzZSwgMSBBcHJpbCAxOTg5IFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlXG5cblRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhIl0sImxpY2Vuc2VJZHMiOlsiR1BMLTEuMC1vci1sYXRlciIsIkdQTC0xLjAtb25seSIsIkdQTC0xLjArIiwiR1BMLTEuMCJdLCJrZXl3b3JkcyI6WyJ2ZXJzaW9uIDEgZmVicnVhcnkiLCIxIGZlYnJ1YXJ5IDE5ODkiLCJmZWJydWFyeSAxOTg5IGNvcHlyaWdodCIsImMgMTk4OSBmcmVlIiwiMTk4OSBmcmVlIHNvZnR3YXJlIiwicHJlYW1ibGUgdGhlIGxpY2Vuc2UiLCJzb2Z0d2FyZSBjb21wYW5pZXMgdHJ5IiwiY29tcGFuaWVzIHRyeSB0byIsInRyeSB0byBrZWVwIiwidG8ga2VlcCB1c2VycyIsImtlZXAgdXNlcnMgYXQiLCJ1c2VycyBhdCB0aGUiLCJpdHMgdXNlcnMgdGhlIiwidXNlcnMgdGhlIGdlbmVyYWwiLCJ1c2luZyBpdCB5b3UiLCJmb3IgeW91ciBwcm9ncmFtcyIsIm5vdCBwcmljZSBzcGVjaWZpY2FsbHkiLCJwcmljZSBzcGVjaWZpY2FsbHkgdGhlIiwic3BlY2lmaWNhbGx5IHRoZSBnZW5lcmFsIiwiZnJlZWRvbSB0byBnaXZlIiwiYXdheSBvciBzZWxsIiwib2YgYSBzdWNoIiwiYSBzdWNoIGEiLCJhdXRob3JzIHJlcHV0YXRpb25zIHRoZSIsInJlcHV0YXRpb25zIHRoZSBwcmVjaXNlIiwibW9kaWZpY2F0aW9uIGZvbGxvdyBnbnUiLCJmb2xsb3cgZ251IGdlbmVyYWwiLCJ3aXRoIG1vZGlmaWNhdGlvbnMgZWFjaCIsIm1vZGlmaWNhdGlvbnMgZWFjaCBsaWNlbnNlZSIsImFzIHlvdSAxIiwieW91IDEgeW91IiwidG8gdGhpcyBnZW5lcmFsIiwiYSBjb3B5IDIiLCJjb3B5IDIgeW91IiwicGFydCBjb250YWlucyB0aGUiLCJwYXJ0IHRoZXJlb2YgZWl0aGVyIiwidGhlcmVvZiBlaXRoZXIgd2l0aCIsIndpdGhvdXQgbW9kaWZpY2F0aW9ucyB0byIsIm1vZGlmaWNhdGlvbnMgdG8gYmUiLCJwdWJsaWMgbGljZW5zZSBleGNlcHQiLCJsaWNlbnNlIGV4Y2VwdCB0aGF0IiwidG8gZ3JhbnQgd2FycmFudHkiLCJncmFudCB3YXJyYW50eSBwcm90ZWN0aW9uIiwib3B0aW9uIGMgaWYiLCJpbiB0aGUgc2ltcGxlc3QiLCJ0aGUgc2ltcGxlc3QgYW5kIiwic2ltcGxlc3QgYW5kIG1vc3QiLCJhbmQgbW9zdCB1c3VhbCIsIm1vc3QgdXN1YWwgd2F5IiwidXN1YWwgd2F5IHRvIiwiYSBmZWUgbWVyZSIsImZlZSBtZXJlIGFnZ3JlZ2F0aW9uIiwib2YgYW5vdGhlciBpbmRlcGVuZGVudCIsImFub3RoZXIgaW5kZXBlbmRlbnQgd29yayIsImluZGVwZW5kZW50IHdvcmsgd2l0aCIsIml0cyBkZXJpdmF0aXZlIG9uIiwiZGVyaXZhdGl2ZSBvbiBhIiwic2NvcGUgb2YgdGhlc2UiLCJ0aGVzZSB0ZXJtcyAzIiwidGVybXMgMyB5b3UiLCJ0aGlyZCBwYXJ0eSBmcmVlIiwicGFydHkgZnJlZSBleGNlcHQiLCJmcmVlIGV4Y2VwdCBmb3IiLCJleGNlcHQgZm9yIGEiLCJmb3IgYSBub21pbmFsIiwibm9taW5hbCBjaGFyZ2UgZm9yIiwiZm9yIHRoZSBjb3N0Iiwib2YgZGlzdHJpYnV0aW9uIGEiLCJhYm92ZSBvciBjIiwiYXMgdG8gd2hlcmUiLCJ3aGVyZSB0aGUgY29ycmVzcG9uZGluZyIsImJlIG9idGFpbmVkIHRoaXMiLCJvYnRhaW5lZCB0aGlzIGFsdGVybmF0aXZlIiwiZXhlY3V0YWJsZSBmb3JtIGFsb25lIiwiZm9ybSBhbG9uZSBzb3VyY2UiLCJhbG9uZSBzb3VyY2UgY29kZSIsIml0IGNvbnRhaW5zIGJ1dCIsImNvbnRhaW5zIGJ1dCBhcyIsImJ1dCBhcyBhIiwic3BlY2lhbCBleGNlcHRpb24gaXQiLCJleGNlcHRpb24gaXQgbmVlZCIsIml0IG5lZWQgbm90IiwiZm9yIG1vZHVsZXMgd2hpY2giLCJtb2R1bGVzIHdoaWNoIGFyZSIsIndoaWNoIGFyZSBzdGFuZGFyZCIsImFyZSBzdGFuZGFyZCBsaWJyYXJpZXMiLCJzdGFuZGFyZCBsaWJyYXJpZXMgdGhhdCIsImxpYnJhcmllcyB0aGF0IGFjY29tcGFueSIsInRoYXQgYWNjb21wYW55IHRoZSIsImZpbGUgcnVucyBvciIsInJ1bnMgb3IgZm9yIiwib3IgZm9yIHN0YW5kYXJkIiwiZm9yIHN0YW5kYXJkIGhlYWRlciIsInN0YW5kYXJkIGhlYWRlciBmaWxlcyIsImhlYWRlciBmaWxlcyBvciIsImZpbGVzIG9yIGRlZmluaXRpb25zIiwib3IgZGVmaW5pdGlvbnMgZmlsZXMiLCJkZWZpbml0aW9ucyBmaWxlcyB0aGF0IiwiZmlsZXMgdGhhdCBhY2NvbXBhbnkiLCJ0aGF0IGFjY29tcGFueSB0aGF0IiwiYWNjb21wYW55IHRoYXQgb3BlcmF0aW5nIiwidGhhdCBvcGVyYXRpbmcgc3lzdGVtIiwib3BlcmF0aW5nIHN5c3RlbSA0Iiwic3lzdGVtIDQgeW91IiwicHVibGljIGxpY2Vuc2UgYW55Iiwib3IgcmlnaHRzIHRvIiwidG8gdXNlIGNvcGllcyIsInVzZSBjb3BpZXMgZnJvbSIsImNvcGllcyBmcm9tIHlvdSIsImNvbXBsaWFuY2UgNSBieSIsIjUgYnkgY29weWluZyIsImNvbmRpdGlvbnMgNiBlYWNoIiwiaGVyZWluIDcgdGhlIiwiNyB0aGUgZnJlZSIsInNvZnR3YXJlIGZvdW5kYXRpb24gOCIsImZvdW5kYXRpb24gOCBpZiIsIjggaWYgeW91Iiwibm8gd2FycmFudHkgOSIsIndhcnJhbnR5IDkgYmVjYXVzZSIsIjkgYmVjYXVzZSB0aGUiLCJvciBjb3JyZWN0aW9uIDEwIiwiY29ycmVjdGlvbiAxMCBpbiIsIjEwIGluIG5vIiwidXNlIHRvIGh1bWFuaXR5IiwidG8gaHVtYW5pdHkgdGhlIiwiaHVtYW5pdHkgdGhlIGJlc3QiLCJjb3B5cmlnaHQgYyAxOXl5IiwiYyAxOXl5IG5hbWUiLCIxOXl5IG5hbWUgb2YiLCJ2ZXJzaW9uIDEgb3IiLCIxIG9yIGF0IiwiZm91bmRhdGlvbiBpbmMgNjc1IiwiaW5jIDY3NSBtYXNzIiwiNjc1IG1hc3MgYXZlIiwibWFzcyBhdmUgY2FtYnJpZGdlIiwiYXZlIGNhbWJyaWRnZSBtYSIsImNhbWJyaWRnZSBtYSAwMjEzOSIsIm1hIDAyMTM5IHVzYSIsIjAyMTM5IHVzYSBhbHNvIiwiY29weXJpZ2h0IGMgMTl4eCIsImMgMTl4eCBuYW1lIiwiMTl4eCBuYW1lIG9mIiwibmVjZXNzYXJ5IGhlcmUgYSIsImhlcmUgYSBzYW1wbGUiLCJwcm9ncmFtIGdub21vdmlzaW9uIGEiLCJnbm9tb3Zpc2lvbiBhIHByb2dyYW0iLCJwcm9ncmFtIHRvIGRpcmVjdCIsInRvIGRpcmVjdCBjb21waWxlcnMiLCJkaXJlY3QgY29tcGlsZXJzIHRvIiwiY29tcGlsZXJzIHRvIG1ha2UiLCJ0byBtYWtlIHBhc3NlcyIsIm1ha2UgcGFzc2VzIGF0IiwicGFzc2VzIGF0IGFzc2VtYmxlcnMiLCJhdCBhc3NlbWJsZXJzIHdyaXR0ZW4iLCJhc3NlbWJsZXJzIHdyaXR0ZW4gYnkiLCJsaWNlbnNlIHZlcnNpb24gMSBmZWJydWFyeSIsInZlcnNpb24gMSBmZWJydWFyeSAxOTg5IiwiMSBmZWJydWFyeSAxOTg5IGNvcHlyaWdodCIsImZlYnJ1YXJ5IDE5ODkgY29weXJpZ2h0IGMiLCJjb3B5cmlnaHQgYyAxOTg5IGZyZWUiLCJjIDE5ODkgZnJlZSBzb2Z0d2FyZSIsIjE5ODkgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uIiwiYWxsb3dlZCBwcmVhbWJsZSB0aGUgbGljZW5zZSIsInByZWFtYmxlIHRoZSBsaWNlbnNlIGFncmVlbWVudHMiLCJtb3N0IHNvZnR3YXJlIGNvbXBhbmllcyB0cnkiLCJzb2Z0d2FyZSBjb21wYW5pZXMgdHJ5IHRvIiwiY29tcGFuaWVzIHRyeSB0byBrZWVwIiwidHJ5IHRvIGtlZXAgdXNlcnMiLCJ0byBrZWVwIHVzZXJzIGF0Iiwia2VlcCB1c2VycyBhdCB0aGUiLCJ1c2VycyBhdCB0aGUgbWVyY3kiLCJhbGwgaXRzIHVzZXJzIHRoZSIsIml0cyB1c2VycyB0aGUgZ2VuZXJhbCIsInVzZXJzIHRoZSBnZW5lcmFsIHB1YmxpYyIsImFwcGxpZXMgdG8gdGhlIGZyZWUiLCJ0byB1c2luZyBpdCB5b3UiLCJ1c2luZyBpdCB5b3UgY2FuIiwiaXQgZm9yIHlvdXIgcHJvZ3JhbXMiLCJmb3IgeW91ciBwcm9ncmFtcyB0b28iLCJmcmVlZG9tIG5vdCBwcmljZSBzcGVjaWZpY2FsbHkiLCJub3QgcHJpY2Ugc3BlY2lmaWNhbGx5IHRoZSIsInByaWNlIHNwZWNpZmljYWxseSB0aGUgZ2VuZXJhbCIsInNwZWNpZmljYWxseSB0aGUgZ2VuZXJhbCBwdWJsaWMiLCJ0aGUgZnJlZWRvbSB0byBnaXZlIiwiZnJlZWRvbSB0byBnaXZlIGF3YXkiLCJ0byBnaXZlIGF3YXkgb3IiLCJnaXZlIGF3YXkgb3Igc2VsbCIsImF3YXkgb3Igc2VsbCBjb3BpZXMiLCJzZWxsIGNvcGllcyBvZiBmcmVlIiwiZnJlZSBzb2Z0d2FyZSB0aGF0IHlvdSIsInNvZnR3YXJlIHRoYXQgeW91IHJlY2VpdmUiLCJkaXN0cmlidXRlIGNvcGllcyBvZiBhIiwiY29waWVzIG9mIGEgc3VjaCIsIm9mIGEgc3VjaCBhIiwiYSBzdWNoIGEgcHJvZ3JhbSIsInRoZW0gdGhlaXIgcmlnaHRzIHdlIiwib3JpZ2luYWwgYXV0aG9ycyByZXB1dGF0aW9ucyB0aGUiLCJhdXRob3JzIHJlcHV0YXRpb25zIHRoZSBwcmVjaXNlIiwicmVwdXRhdGlvbnMgdGhlIHByZWNpc2UgdGVybXMiLCJhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdyBnbnUiXX0seyJsaWNlbnNlVGV4dHMiOlsiR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0VcblxuVmVyc2lvbiAyLCBKdW5lIDE5OTFcblxuQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLlxuXG41MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQVxuXG5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuXG5cblByZWFtYmxlXG5cblRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuIFRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0byB1c2luZyBpdC4gKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgWW91IGNhbiBhcHBseSBpdCB0byB5b3VyIHByb2dyYW1zLCB0b28uXG5cbldoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy5cblxuVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBhbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC5cblxuRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgeW91IGhhdmUuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLlxuXG5XZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuXG5cbkFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlIHdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsIGF1dGhvcnMnIHJlcHV0YXRpb25zLlxuXG5GaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLiBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUgcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZSBwcm9ncmFtIHByb3ByaWV0YXJ5LiBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLlxuXG5UaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gZm9sbG93LlxuXG5URVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT05cblxuICAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGUgXCJQcm9ncmFtXCIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSBcIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW1cIiBtZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4gKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gXCJtb2RpZmljYXRpb25cIi4pIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzIFwieW91XCIuXG5cbiAgIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gVGhlIGFjdCBvZiBydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLlxuXG4gICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS5cblxuICAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuXG5cbiAgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczpcblxuICAgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuXG5cbiAgICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5IHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2ggaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbiBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dCBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKVxuXG4gICBUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gSWYgaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwgYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluIHRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2Ugc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiBCdXQgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZSBlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuXG5cbiAgIFRodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdCB5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yIGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uXG5cbiAgIEluIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0gd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvcixcblxuICAgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvcixcblxuICAgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAoVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKVxuXG4gICBUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLlxuXG4gICBJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLlxuXG4gICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS5cblxuICAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90IHNpZ25lZCBpdC4gSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LlxuXG4gICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvIHRoaXMgTGljZW5zZS5cblxuICAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS5cblxuICAgSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy5cblxuICAgSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueSBwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcyBpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuIE1hbnkgcGVvcGxlIGhhdmUgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0IHN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0IGNob2ljZS5cblxuICAgVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbiBjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS5cblxuICAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLlxuXG4gICBFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kIFwiYW55IGxhdGVyIHZlcnNpb25cIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uXG5cbiAgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUgcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LlxuXG4gICBOTyBXQVJSQU5UWVxuXG4gICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNIFwiQVMgSVNcIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLlxuXG4gICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OU1xuXG5Ib3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXNcblxuSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdCBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0IGZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLlxuXG5UbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlIFwiY29weXJpZ2h0XCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC5cblxuXHUwMDNjb25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGFuIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLlx1MDAzZVxuXG5Db3B5cmlnaHQgKEMpIFx1MDAzY3l5eXlcdTAwM2UgXHUwMDNjbmFtZSBvZiBhdXRob3JcdTAwM2VcblxuVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG5Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS5cblxuQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuXG5cbklmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZTpcblxuR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4gVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuXG5cblRoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkgYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlIG1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uXG5cbllvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgXCJjb3B5cmlnaHQgZGlzY2xhaW1lclwiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LiBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6XG5cbllveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0gYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuXG5cblx1MDAzYyBzaWduYXR1cmUgb2YgVHkgQ29vbiBcdTAwM2UgLCAxIEFwcmlsIDE5ODkgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UiXSwibGljZW5zZUlkcyI6WyJHUEwtMi4wKyJdLCJrZXl3b3JkcyI6bnVsbH0seyJsaWNlbnNlVGV4dHMiOlsiR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0VcblxuVmVyc2lvbiAyLCBKdW5lIDE5OTFcblxuQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiBcblxuNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0FcblxuRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLlxuXG5QcmVhbWJsZVxuXG5UaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiBUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8gdXNpbmcgaXQuIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pIFlvdSBjYW4gYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLlxuXG5XaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuXG5cblRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuXG5cbkZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy5cblxuV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLlxuXG5BbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy5cblxuRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlIHByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUgcHJvZ3JhbSBwcm9wcmlldGFyeS4gVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC5cblxuVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy5cblxuVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OXG5cbiAgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhlIFwiUHJvZ3JhbVwiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgXCJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtXCIgbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtIFwibW9kaWZpY2F0aW9uXCIuKSBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyBcInlvdVwiLlxuXG4gICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLiBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy5cblxuICAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uXG5cbiAgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLlxuXG4gICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG5cbiAgICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLlxuXG4gICAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55IHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LilcblxuICAgVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuIElmIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sIGFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUgZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LlxuXG4gICBUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLlxuXG4gICBJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtIHdpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzpcblxuICAgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsXG5cbiAgICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsXG5cbiAgICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gKFRoaXMgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLilcblxuICAgVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS5cblxuICAgSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcyBkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS5cblxuICAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuXG5cbiAgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdCBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC5cblxuICAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0byB0aGlzIExpY2Vuc2UuXG5cbiAgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvciBvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudCBsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbiB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uXG5cbiAgIElmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuXG5cbiAgIEl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdCBzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nIHRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdCBpbXBvc2UgdGhhdCBjaG9pY2UuXG5cbiAgIFRoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0byBiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS5cblxuICAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy5cblxuICAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCBcImFueSBsYXRlciB2ZXJzaW9uXCIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLlxuXG4gICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlIHByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS5cblxuICAgTk8gV0FSUkFOVFlcblxuICAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSBcIkFTIElTXCIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi5cblxuICAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlNcblxuSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zXG5cbklmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdCBmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy5cblxuVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uIEl0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZSBcImNvcHlyaWdodFwiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuXG5cblx1MDAzY29uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhbiBpZGVhIG9mIHdoYXQgaXQgZG9lcy5cdTAwM2VcblxuQ29weXJpZ2h0IChDKVx1MDAzYyB5eXl5XHUwMDNlIFx1MDAzY25hbWUgb2YgYXV0aG9yXHUwMDNlXG5cblRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cblRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuXG5cbkFsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLlxuXG5JZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6XG5cbkdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvciBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLlxuXG5UaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUgcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5IGJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZSBtb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLlxuXG5Zb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91ciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhIFwiY29weXJpZ2h0IGRpc2NsYWltZXJcIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4gSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOlxuXG5Zb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLlxuXG5cdTAwM2NzaWduYXR1cmUgb2YgVHkgQ29vbiBcdTAwM2UsIDEgQXByaWwgMTk4OSBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZSBUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgbGlicmFyeS4gSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4iXSwibGljZW5zZUlkcyI6WyJHUEwtMi4wLW9yLWxhdGVyIiwiR1BMLTIuMC1vbmx5IiwiR1BMLTIuMCJdLCJrZXl3b3JkcyI6WyJvZiB2aWNlIHRoaXMiLCJ2aWNlIHRoaXMgZ2VuZXJhbCIsInByZXNpZGVudCBvZiB2aWNlIHRoaXMiLCJvZiB2aWNlIHRoaXMgZ2VuZXJhbCIsInZpY2UgdGhpcyBnZW5lcmFsIHB1YmxpYyIsImNvb24gcHJlc2lkZW50IG9mIHZpY2UgdGhpcyIsInByZXNpZGVudCBvZiB2aWNlIHRoaXMgZ2VuZXJhbCIsIm9mIHZpY2UgdGhpcyBnZW5lcmFsIHB1YmxpYyIsInZpY2UgdGhpcyBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIiwidGhpcyBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGRvZXMiXX0seyJsaWNlbnNlVGV4dHMiOlsiaW5zZXJ0IEdQTCB2MiBsaWNlbnNlIHRleHQgaGVyZVxuXG5HQ0MgTGlua2luZyBFeGNlcHRpb25cblxuSW4gYWRkaXRpb24gdG8gdGhlIHBlcm1pc3Npb25zIGluIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcyB5b3UgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gbGluayB0aGUgY29tcGlsZWQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaW50byBjb21iaW5hdGlvbnMgd2l0aCBvdGhlciBwcm9ncmFtcywgYW5kIHRvIGRpc3RyaWJ1dGUgdGhvc2UgY29tYmluYXRpb25zIHdpdGhvdXQgYW55IHJlc3RyaWN0aW9uIGNvbWluZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBmaWxlLiAoVGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgcmVzdHJpY3Rpb25zIGRvIGFwcGx5IGluIG90aGVyIHJlc3BlY3RzOyBmb3IgZXhhbXBsZSwgdGhleSBjb3ZlciBtb2RpZmljYXRpb24gb2YgdGhlIGZpbGUsIGFuZCBkaXN0cmlidXRpb24gd2hlbiBub3QgbGlua2VkIGludG8gYSBjb21iaW5lIGV4ZWN1dGFibGUuIl0sImxpY2Vuc2VJZHMiOlsiR1BMLTIuMC13aXRoLUdDQy1leGNlcHRpb24iXSwia2V5d29yZHMiOlsiaGVyZSBnY2MgbGlua2luZyIsImdjYyBsaW5raW5nIGV4Y2VwdGlvbiIsImxpbmtpbmcgZXhjZXB0aW9uIGluIiwiZXhjZXB0aW9uIGluIGFkZGl0aW9uIiwidGhlIHBlcm1pc3Npb25zIGluIiwicGVybWlzc2lvbnMgaW4gdGhlIiwiaW4gdGhlIGdudSIsImZvdW5kYXRpb24gZ2l2ZXMgeW91IiwidG8gbGluayB0aGUiLCJsaW5rIHRoZSBjb21waWxlZCIsInRoZSBjb21waWxlZCB2ZXJzaW9uIiwiY29tcGlsZWQgdmVyc2lvbiBvZiIsInRoaXMgZmlsZSBpbnRvIiwiZmlsZSBpbnRvIGNvbWJpbmF0aW9ucyIsImludG8gY29tYmluYXRpb25zIHdpdGgiLCJvdGhlciBwcm9ncmFtcyBhbmQiLCJwcm9ncmFtcyBhbmQgdG8iLCJ0byBkaXN0cmlidXRlIHRob3NlIiwiZGlzdHJpYnV0ZSB0aG9zZSBjb21iaW5hdGlvbnMiLCJ0aG9zZSBjb21iaW5hdGlvbnMgd2l0aG91dCIsImNvbWJpbmF0aW9ucyB3aXRob3V0IGFueSIsIndpdGhvdXQgYW55IHJlc3RyaWN0aW9uIiwiYW55IHJlc3RyaWN0aW9uIGNvbWluZyIsInJlc3RyaWN0aW9uIGNvbWluZyBmcm9tIiwiY29taW5nIGZyb20gdGhlIiwiZmlsZSB0aGUgZ2VuZXJhbCIsInB1YmxpYyBsaWNlbnNlIHJlc3RyaWN0aW9ucyIsImxpY2Vuc2UgcmVzdHJpY3Rpb25zIGRvIiwicmVzdHJpY3Rpb25zIGRvIGFwcGx5IiwiZG8gYXBwbHkgaW4iLCJvdGhlciByZXNwZWN0cyBmb3IiLCJyZXNwZWN0cyBmb3IgZXhhbXBsZSIsImZvciBleGFtcGxlIHRoZXkiLCJleGFtcGxlIHRoZXkgY292ZXIiLCJ0aGV5IGNvdmVyIG1vZGlmaWNhdGlvbiIsImNvdmVyIG1vZGlmaWNhdGlvbiBvZiIsInRoZSBmaWxlIGFuZCIsImZpbGUgYW5kIGRpc3RyaWJ1dGlvbiIsImFuZCBkaXN0cmlidXRpb24gd2hlbiIsImRpc3RyaWJ1dGlvbiB3aGVuIG5vdCIsIndoZW4gbm90IGxpbmtlZCIsIm5vdCBsaW5rZWQgaW50byIsImxpbmtlZCBpbnRvIGEiLCJpbnRvIGEgY29tYmluZSIsImEgY29tYmluZSBleGVjdXRhYmxlIiwibGljZW5zZSB0ZXh0IGhlcmUgZ2NjIiwidGV4dCBoZXJlIGdjYyBsaW5raW5nIiwiaGVyZSBnY2MgbGlua2luZyBleGNlcHRpb24iLCJnY2MgbGlua2luZyBleGNlcHRpb24gaW4iLCJsaW5raW5nIGV4Y2VwdGlvbiBpbiBhZGRpdGlvbiIsImV4Y2VwdGlvbiBpbiBhZGRpdGlvbiB0byIsImFkZGl0aW9uIHRvIHRoZSBwZXJtaXNzaW9ucyIsInRvIHRoZSBwZXJtaXNzaW9ucyBpbiIsInRoZSBwZXJtaXNzaW9ucyBpbiB0aGUiLCJwZXJtaXNzaW9ucyBpbiB0aGUgZ251IiwiaW4gdGhlIGdudSBnZW5lcmFsIiwic29mdHdhcmUgZm91bmRhdGlvbiBnaXZlcyB5b3UiLCJmb3VuZGF0aW9uIGdpdmVzIHlvdSB1bmxpbWl0ZWQiLCJ1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBsaW5rIiwicGVybWlzc2lvbiB0byBsaW5rIHRoZSIsInRvIGxpbmsgdGhlIGNvbXBpbGVkIiwibGluayB0aGUgY29tcGlsZWQgdmVyc2lvbiIsInRoZSBjb21waWxlZCB2ZXJzaW9uIG9mIiwiY29tcGlsZWQgdmVyc2lvbiBvZiB0aGlzIiwib2YgdGhpcyBmaWxlIGludG8iLCJ0aGlzIGZpbGUgaW50byBjb21iaW5hdGlvbnMiLCJmaWxlIGludG8gY29tYmluYXRpb25zIHdpdGgiLCJpbnRvIGNvbWJpbmF0aW9ucyB3aXRoIG90aGVyIiwiY29tYmluYXRpb25zIHdpdGggb3RoZXIgcHJvZ3JhbXMiLCJ3aXRoIG90aGVyIHByb2dyYW1zIGFuZCIsIm90aGVyIHByb2dyYW1zIGFuZCB0byIsInByb2dyYW1zIGFuZCB0byBkaXN0cmlidXRlIiwiYW5kIHRvIGRpc3RyaWJ1dGUgdGhvc2UiLCJ0byBkaXN0cmlidXRlIHRob3NlIGNvbWJpbmF0aW9ucyIsImRpc3RyaWJ1dGUgdGhvc2UgY29tYmluYXRpb25zIHdpdGhvdXQiLCJ0aG9zZSBjb21iaW5hdGlvbnMgd2l0aG91dCBhbnkiLCJjb21iaW5hdGlvbnMgd2l0aG91dCBhbnkgcmVzdHJpY3Rpb24iLCJ3aXRob3V0IGFueSByZXN0cmljdGlvbiBjb21pbmciLCJhbnkgcmVzdHJpY3Rpb24gY29taW5nIGZyb20iLCJyZXN0cmljdGlvbiBjb21pbmcgZnJvbSB0aGUiLCJjb21pbmcgZnJvbSB0aGUgdXNlIiwidXNlIG9mIHRoaXMgZmlsZSIsIm9mIHRoaXMgZmlsZSB0aGUiLCJ0aGlzIGZpbGUgdGhlIGdlbmVyYWwiLCJmaWxlIHRoZSBnZW5lcmFsIHB1YmxpYyIsImdlbmVyYWwgcHVibGljIGxpY2Vuc2UgcmVzdHJpY3Rpb25zIiwicHVibGljIGxpY2Vuc2UgcmVzdHJpY3Rpb25zIGRvIiwibGljZW5zZSByZXN0cmljdGlvbnMgZG8gYXBwbHkiLCJyZXN0cmljdGlvbnMgZG8gYXBwbHkgaW4iLCJkbyBhcHBseSBpbiBvdGhlciIsImFwcGx5IGluIG90aGVyIHJlc3BlY3RzIiwiaW4gb3RoZXIgcmVzcGVjdHMgZm9yIiwib3RoZXIgcmVzcGVjdHMgZm9yIGV4YW1wbGUiLCJyZXNwZWN0cyBmb3IgZXhhbXBsZSB0aGV5IiwiZm9yIGV4YW1wbGUgdGhleSBjb3ZlciIsImV4YW1wbGUgdGhleSBjb3ZlciBtb2RpZmljYXRpb24iLCJ0aGV5IGNvdmVyIG1vZGlmaWNhdGlvbiBvZiIsImNvdmVyIG1vZGlmaWNhdGlvbiBvZiB0aGUiLCJvZiB0aGUgZmlsZSBhbmQiLCJ0aGUgZmlsZSBhbmQgZGlzdHJpYnV0aW9uIiwiZmlsZSBhbmQgZGlzdHJpYnV0aW9uIHdoZW4iLCJhbmQgZGlzdHJpYnV0aW9uIHdoZW4gbm90IiwiZGlzdHJpYnV0aW9uIHdoZW4gbm90IGxpbmtlZCIsIndoZW4gbm90IGxpbmtlZCBpbnRvIiwibm90IGxpbmtlZCBpbnRvIGEiLCJsaW5rZWQgaW50byBhIGNvbWJpbmUiLCJpbnRvIGEgY29tYmluZSBleGVjdXRhYmxlIiwidjIgbGljZW5zZSB0ZXh0IGhlcmUgZ2NjIiwibGljZW5zZSB0ZXh0IGhlcmUgZ2NjIGxpbmtpbmciLCJ0ZXh0IGhlcmUgZ2NjIGxpbmtpbmcgZXhjZXB0aW9uIiwiaGVyZSBnY2MgbGlua2luZyBleGNlcHRpb24gaW4iLCJnY2MgbGlua2luZyBleGNlcHRpb24gaW4gYWRkaXRpb24iLCJsaW5raW5nIGV4Y2VwdGlvbiBpbiBhZGRpdGlvbiB0byIsImV4Y2VwdGlvbiBpbiBhZGRpdGlvbiB0byB0aGUiLCJpbiBhZGRpdGlvbiB0byB0aGUgcGVybWlzc2lvbnMiLCJhZGRpdGlvbiB0byB0aGUgcGVybWlzc2lvbnMgaW4iLCJ0byB0aGUgcGVybWlzc2lvbnMgaW4gdGhlIiwidGhlIHBlcm1pc3Npb25zIGluIHRoZSBnbnUiLCJwZXJtaXNzaW9ucyBpbiB0aGUgZ251IGdlbmVyYWwiLCJpbiB0aGUgZ251IGdlbmVyYWwgcHVibGljIiwiZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uIGdpdmVzIHlvdSIsInNvZnR3YXJlIGZvdW5kYXRpb24gZ2l2ZXMgeW91IHVubGltaXRlZCIsImZvdW5kYXRpb24gZ2l2ZXMgeW91IHVubGltaXRlZCBwZXJtaXNzaW9uIiwieW91IHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGxpbmsiLCJ1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBsaW5rIHRoZSIsInBlcm1pc3Npb24gdG8gbGluayB0aGUgY29tcGlsZWQiLCJ0byBsaW5rIHRoZSBjb21waWxlZCB2ZXJzaW9uIiwibGluayB0aGUgY29tcGlsZWQgdmVyc2lvbiBvZiIsInRoZSBjb21waWxlZCB2ZXJzaW9uIG9mIHRoaXMiLCJjb21waWxlZCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSIsInZlcnNpb24gb2YgdGhpcyBmaWxlIGludG8iLCJvZiB0aGlzIGZpbGUgaW50byBjb21iaW5hdGlvbnMiLCJ0aGlzIGZpbGUgaW50byBjb21iaW5hdGlvbnMgd2l0aCIsImZpbGUgaW50byBjb21iaW5hdGlvbnMgd2l0aCBvdGhlciIsImludG8gY29tYmluYXRpb25zIHdpdGggb3RoZXIgcHJvZ3JhbXMiLCJjb21iaW5hdGlvbnMgd2l0aCBvdGhlciBwcm9ncmFtcyBhbmQiLCJ3aXRoIG90aGVyIHByb2dyYW1zIGFuZCB0byIsIm90aGVyIHByb2dyYW1zIGFuZCB0byBkaXN0cmlidXRlIiwicHJvZ3JhbXMgYW5kIHRvIGRpc3RyaWJ1dGUgdGhvc2UiLCJhbmQgdG8gZGlzdHJpYnV0ZSB0aG9zZSBjb21iaW5hdGlvbnMiLCJ0byBkaXN0cmlidXRlIHRob3NlIGNvbWJpbmF0aW9ucyB3aXRob3V0IiwiZGlzdHJpYnV0ZSB0aG9zZSBjb21iaW5hdGlvbnMgd2l0aG91dCBhbnkiLCJ0aG9zZSBjb21iaW5hdGlvbnMgd2l0aG91dCBhbnkgcmVzdHJpY3Rpb24iLCJjb21iaW5hdGlvbnMgd2l0aG91dCBhbnkgcmVzdHJpY3Rpb24gY29taW5nIiwid2l0aG91dCBhbnkgcmVzdHJpY3Rpb24gY29taW5nIGZyb20iLCJhbnkgcmVzdHJpY3Rpb24gY29taW5nIGZyb20gdGhlIiwicmVzdHJpY3Rpb24gY29taW5nIGZyb20gdGhlIHVzZSIsImNvbWluZyBmcm9tIHRoZSB1c2Ugb2YiLCJ0aGUgdXNlIG9mIHRoaXMgZmlsZSIsInVzZSBvZiB0aGlzIGZpbGUgdGhlIiwib2YgdGhpcyBmaWxlIHRoZSBnZW5lcmFsIiwidGhpcyBmaWxlIHRoZSBnZW5lcmFsIHB1YmxpYyIsImZpbGUgdGhlIGdlbmVyYWwgcHVibGljIGxpY2Vuc2UiLCJ0aGUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSByZXN0cmljdGlvbnMiLCJnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIHJlc3RyaWN0aW9ucyBkbyIsInB1YmxpYyBsaWNlbnNlIHJlc3RyaWN0aW9ucyBkbyBhcHBseSIsImxpY2Vuc2UgcmVzdHJpY3Rpb25zIGRvIGFwcGx5IGluIiwicmVzdHJpY3Rpb25zIGRvIGFwcGx5IGluIG90aGVyIiwiZG8gYXBwbHkgaW4gb3RoZXIgcmVzcGVjdHMiLCJhcHBseSBpbiBvdGhlciByZXNwZWN0cyBmb3IiLCJpbiBvdGhlciByZXNwZWN0cyBmb3IgZXhhbXBsZSIsIm90aGVyIHJlc3BlY3RzIGZvciBleGFtcGxlIHRoZXkiLCJyZXNwZWN0cyBmb3IgZXhhbXBsZSB0aGV5IGNvdmVyIiwiZm9yIGV4YW1wbGUgdGhleSBjb3ZlciBtb2RpZmljYXRpb24iLCJleGFtcGxlIHRoZXkgY292ZXIgbW9kaWZpY2F0aW9uIG9mIiwidGhleSBjb3ZlciBtb2RpZmljYXRpb24gb2YgdGhlIiwiY292ZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBmaWxlIiwibW9kaWZpY2F0aW9uIG9mIHRoZSBmaWxlIGFuZCIsIm9mIHRoZSBmaWxlIGFuZCBkaXN0cmlidXRpb24iLCJ0aGUgZmlsZSBhbmQgZGlzdHJpYnV0aW9uIHdoZW4iLCJmaWxlIGFuZCBkaXN0cmlidXRpb24gd2hlbiBub3QiLCJhbmQgZGlzdHJpYnV0aW9uIHdoZW4gbm90IGxpbmtlZCIsImRpc3RyaWJ1dGlvbiB3aGVuIG5vdCBsaW5rZWQgaW50byIsIndoZW4gbm90IGxpbmtlZCBpbnRvIGEiLCJub3QgbGlua2VkIGludG8gYSBjb21iaW5lIiwibGlua2VkIGludG8gYSBjb21iaW5lIGV4ZWN1dGFibGUiXX0seyJsaWNlbnNlVGV4dHMiOlsiaW5zZXJ0IEdQTCB2MiBsaWNlbnNlIHRleHQgaGVyZVxuXG5BdXRvY29uZiBFeGNlcHRpb25cblxuQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHRzIHRoYXQgYXJlIHRoZSBvdXRwdXQgb2YgQXV0b2NvbmYuIFlvdSBuZWVkIG5vdCBmb2xsb3cgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB3aGVuIHVzaW5nIG9yIGRpc3RyaWJ1dGluZyBzdWNoIHNjcmlwdHMsIGV2ZW4gdGhvdWdoIHBvcnRpb25zIG9mIHRoZSB0ZXh0IG9mIEF1dG9jb25mIGFwcGVhciBpbiB0aGVtLiBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgZG9lcyBnb3Zlcm4gYWxsIG90aGVyIHVzZSBvZiB0aGUgbWF0ZXJpYWwgdGhhdCBjb25zdGl0dXRlcyB0aGUgQXV0b2NvbmYgcHJvZ3JhbS5cblxuQ2VydGFpbiBwb3J0aW9ucyBvZiB0aGUgQXV0b2NvbmYgc291cmNlIHRleHQgYXJlIGRlc2lnbmVkIHRvIGJlIGNvcGllZCAoaW4gY2VydGFpbiBjYXNlcywgZGVwZW5kaW5nIG9uIHRoZSBpbnB1dCkgaW50byB0aGUgb3V0cHV0IG9mIEF1dG9jb25mLiBXZSBjYWxsIHRoZXNlIHRoZSBcImRhdGFcIiBwb3J0aW9ucy4gVGhlIHJlc3Qgb2YgdGhlIEF1dG9jb25mIHNvdXJjZSB0ZXh0IGNvbnNpc3RzIG9mIGNvbW1lbnRzIHBsdXMgZXhlY3V0YWJsZSBjb2RlIHRoYXQgZGVjaWRlcyB3aGljaCBvZiB0aGUgZGF0YSBwb3J0aW9ucyB0byBvdXRwdXQgaW4gYW55IGdpdmVuIGNhc2UuIFdlIGNhbGwgdGhlc2UgY29tbWVudHMgYW5kIGV4ZWN1dGFibGUgY29kZSB0aGUgXCJub24tZGF0YVwiIHBvcnRpb25zLiBBdXRvY29uZiBuZXZlciBjb3BpZXMgYW55IG9mIHRoZSBub24tZGF0YSBwb3J0aW9ucyBpbnRvIGl0cyBvdXRwdXQuXG5cblRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBhcHBsaWVzIHRvIHZlcnNpb25zIG9mIEF1dG9jb25mIHJlbGVhc2VkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIFdoZW4geW91IG1ha2UgYW5kIGRpc3RyaWJ1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIEF1dG9jb25mLCB5b3UgbWF5IGV4dGVuZCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgdG8gYXBwbHkgdG8geW91ciBtb2RpZmllZCB2ZXJzaW9uIGFzIHdlbGwsICp1bmxlc3MqIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiBoYXMgdGhlIHBvdGVudGlhbCB0byBjb3B5IGludG8gaXRzIG91dHB1dCBzb21lIG9mIHRoZSB0ZXh0IHRoYXQgd2FzIHRoZSBub24tZGF0YSBwb3J0aW9uIG9mIHRoZSB2ZXJzaW9uIHRoYXQgeW91IHN0YXJ0ZWQgd2l0aC4gKEluIG90aGVyIHdvcmRzLCB1bmxlc3MgeW91ciBjaGFuZ2UgbW92ZXMgb3IgY29waWVzIHRleHQgZnJvbSB0aGUgbm9uLWRhdGEgcG9ydGlvbnMgdG8gdGhlIGRhdGEgcG9ydGlvbnMuKSBJZiB5b3VyIG1vZGlmaWNhdGlvbiBoYXMgc3VjaCBwb3RlbnRpYWwsIHlvdSBtdXN0IGRlbGV0ZSBhbnkgbm90aWNlIG9mIHRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBmcm9tIHlvdXIgbW9kaWZpZWQgdmVyc2lvbi4iXSwibGljZW5zZUlkcyI6WyJHUEwtMi4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uIl0sImtleXdvcmRzIjpbImhlcmUgYXV0b2NvbmYgZXhjZXB0aW9uIiwiYXV0b2NvbmYgZXhjZXB0aW9uIGFzIiwiZXhjZXB0aW9uIHRoZSBmcmVlIiwibW9kaWZ5IHRoZSBjb25maWd1cmUiLCJ0aGUgY29uZmlndXJlIHNjcmlwdHMiLCJjb25maWd1cmUgc2NyaXB0cyB0aGF0Iiwic2NyaXB0cyB0aGF0IGFyZSIsInRoYXQgYXJlIHRoZSIsImFyZSB0aGUgb3V0cHV0IiwiYXV0b2NvbmYgeW91IG5lZWQiLCJmb2xsb3cgdGhlIHRlcm1zIiwicHVibGljIGxpY2Vuc2Ugd2hlbiIsImxpY2Vuc2Ugd2hlbiB1c2luZyIsIndoZW4gdXNpbmcgb3IiLCJ1c2luZyBvciBkaXN0cmlidXRpbmciLCJvciBkaXN0cmlidXRpbmcgc3VjaCIsImRpc3RyaWJ1dGluZyBzdWNoIHNjcmlwdHMiLCJzdWNoIHNjcmlwdHMgZXZlbiIsInNjcmlwdHMgZXZlbiB0aG91Z2giLCJldmVuIHRob3VnaCBwb3J0aW9ucyIsInRob3VnaCBwb3J0aW9ucyBvZiIsInRleHQgb2YgYXV0b2NvbmYiLCJvZiBhdXRvY29uZiBhcHBlYXIiLCJhdXRvY29uZiBhcHBlYXIgaW4iLCJhcHBlYXIgaW4gdGhlbSIsImluIHRoZW0gdGhlIiwidGhlbSB0aGUgZ251IiwibGljZW5zZSBncGwgZG9lcyIsImdwbCBkb2VzIGdvdmVybiIsImRvZXMgZ292ZXJuIGFsbCIsImdvdmVybiBhbGwgb3RoZXIiLCJhbGwgb3RoZXIgdXNlIiwib3RoZXIgdXNlIG9mIiwidGhlIG1hdGVyaWFsIHRoYXQiLCJtYXRlcmlhbCB0aGF0IGNvbnN0aXR1dGVzIiwidGhhdCBjb25zdGl0dXRlcyB0aGUiLCJjb25zdGl0dXRlcyB0aGUgYXV0b2NvbmYiLCJ0aGUgYXV0b2NvbmYgcHJvZ3JhbSIsImF1dG9jb25mIHByb2dyYW0gY2VydGFpbiIsInByb2dyYW0gY2VydGFpbiBwb3J0aW9ucyIsImNlcnRhaW4gcG9ydGlvbnMgb2YiLCJzb3VyY2UgdGV4dCBhcmUiLCJ0ZXh0IGFyZSBkZXNpZ25lZCIsImRlc2lnbmVkIHRvIGJlIiwidG8gYmUgY29waWVkIiwiYmUgY29waWVkIGluIiwiY29waWVkIGluIGNlcnRhaW4iLCJjZXJ0YWluIGNhc2VzIGRlcGVuZGluZyIsImNhc2VzIGRlcGVuZGluZyBvbiIsIm9uIHRoZSBpbnB1dCIsInRoZSBpbnB1dCBpbnRvIiwiaW5wdXQgaW50byB0aGUiLCJpbnRvIHRoZSBvdXRwdXQiLCJvZiBhdXRvY29uZiB3ZSIsImF1dG9jb25mIHdlIGNhbGwiLCJjYWxsIHRoZXNlIHRoZSIsInRoZXNlIHRoZSBkYXRhIiwiZGF0YSBwb3J0aW9ucyB0aGUiLCJwb3J0aW9ucyB0aGUgcmVzdCIsInNvdXJjZSB0ZXh0IGNvbnNpc3RzIiwidGV4dCBjb25zaXN0cyBvZiIsImNvbnNpc3RzIG9mIGNvbW1lbnRzIiwib2YgY29tbWVudHMgcGx1cyIsImNvbW1lbnRzIHBsdXMgZXhlY3V0YWJsZSIsInBsdXMgZXhlY3V0YWJsZSBjb2RlIiwiZXhlY3V0YWJsZSBjb2RlIHRoYXQiLCJjb2RlIHRoYXQgZGVjaWRlcyIsInRoYXQgZGVjaWRlcyB3aGljaCIsImRlY2lkZXMgd2hpY2ggb2YiLCJ3aGljaCBvZiB0aGUiLCJwb3J0aW9ucyB0byBvdXRwdXQiLCJ0byBvdXRwdXQgaW4iLCJvdXRwdXQgaW4gYW55IiwiaW4gYW55IGdpdmVuIiwiYW55IGdpdmVuIGNhc2UiLCJnaXZlbiBjYXNlIHdlIiwiY2FzZSB3ZSBjYWxsIiwiY2FsbCB0aGVzZSBjb21tZW50cyIsInRoZXNlIGNvbW1lbnRzIGFuZCIsImNvbW1lbnRzIGFuZCBleGVjdXRhYmxlIiwiYW5kIGV4ZWN1dGFibGUgY29kZSIsImNvZGUgdGhlIG5vbiIsImRhdGEgcG9ydGlvbnMgYXV0b2NvbmYiLCJwb3J0aW9ucyBhdXRvY29uZiBuZXZlciIsImF1dG9jb25mIG5ldmVyIGNvcGllcyIsIm5ldmVyIGNvcGllcyBhbnkiLCJjb3BpZXMgYW55IG9mIiwiZGF0YSBwb3J0aW9ucyBpbnRvIiwicG9ydGlvbnMgaW50byBpdHMiLCJpdHMgb3V0cHV0IHRoaXMiLCJvdXRwdXQgdGhpcyBzcGVjaWFsIiwidGhlIGdwbCBhcHBsaWVzIiwiYXBwbGllcyB0byB2ZXJzaW9ucyIsInRvIHZlcnNpb25zIG9mIiwidmVyc2lvbnMgb2YgYXV0b2NvbmYiLCJvZiBhdXRvY29uZiByZWxlYXNlZCIsImF1dG9jb25mIHJlbGVhc2VkIGJ5Iiwic29mdHdhcmUgZm91bmRhdGlvbiB3aGVuIiwiZm91bmRhdGlvbiB3aGVuIHlvdSIsIndoZW4geW91IG1ha2UiLCJhdXRvY29uZiB5b3UgbWF5IiwiZXh0ZW5kIHRoaXMgc3BlY2lhbCIsImdwbCB0byBhcHBseSIsInRvIHlvdXIgbW9kaWZpZWQiLCJ2ZXJzaW9uIGFzIHdlbGwiLCJhcyB3ZWxsIHVubGVzcyIsIndlbGwgdW5sZXNzIHlvdXIiLCJ2ZXJzaW9uIGhhcyB0aGUiLCJoYXMgdGhlIHBvdGVudGlhbCIsInRoZSBwb3RlbnRpYWwgdG8iLCJwb3RlbnRpYWwgdG8gY29weSIsInRvIGNvcHkgaW50byIsImNvcHkgaW50byBpdHMiLCJpdHMgb3V0cHV0IHNvbWUiLCJvdXRwdXQgc29tZSBvZiIsInRoZSB0ZXh0IHRoYXQiLCJ0ZXh0IHRoYXQgd2FzIiwidGhhdCB3YXMgdGhlIiwid2FzIHRoZSBub24iLCJub24gZGF0YSBwb3J0aW9uIiwiZGF0YSBwb3J0aW9uIG9mIiwidGhhdCB5b3Ugc3RhcnRlZCIsInlvdSBzdGFydGVkIHdpdGgiLCJzdGFydGVkIHdpdGggaW4iLCJ3aXRoIGluIG90aGVyIiwib3RoZXIgd29yZHMgdW5sZXNzIiwid29yZHMgdW5sZXNzIHlvdXIiLCJ1bmxlc3MgeW91ciBjaGFuZ2UiLCJ5b3VyIGNoYW5nZSBtb3ZlcyIsImNoYW5nZSBtb3ZlcyBvciIsIm1vdmVzIG9yIGNvcGllcyIsIm9yIGNvcGllcyB0ZXh0IiwiY29waWVzIHRleHQgZnJvbSIsImZyb20gdGhlIG5vbiIsInBvcnRpb25zIHRvIHRoZSIsImRhdGEgcG9ydGlvbnMgaWYiLCJwb3J0aW9ucyBpZiB5b3VyIiwieW91ciBtb2RpZmljYXRpb24gaGFzIiwibW9kaWZpY2F0aW9uIGhhcyBzdWNoIiwiaGFzIHN1Y2ggcG90ZW50aWFsIiwic3VjaCBwb3RlbnRpYWwgeW91IiwicG90ZW50aWFsIHlvdSBtdXN0IiwibXVzdCBkZWxldGUgYW55IiwiZGVsZXRlIGFueSBub3RpY2UiLCJhbnkgbm90aWNlIG9mIiwibm90aWNlIG9mIHRoaXMiLCJvZiB0aGlzIHNwZWNpYWwiLCJ0aGUgZ3BsIGZyb20iLCJncGwgZnJvbSB5b3VyIiwibGljZW5zZSB0ZXh0IGhlcmUgYXV0b2NvbmYiLCJ0ZXh0IGhlcmUgYXV0b2NvbmYgZXhjZXB0aW9uIiwiaGVyZSBhdXRvY29uZiBleGNlcHRpb24gYXMiLCJhdXRvY29uZiBleGNlcHRpb24gYXMgYSIsInNwZWNpYWwgZXhjZXB0aW9uIHRoZSBmcmVlIiwiZXhjZXB0aW9uIHRoZSBmcmVlIHNvZnR3YXJlIiwiZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IHRoZSIsImFuZCBtb2RpZnkgdGhlIGNvbmZpZ3VyZSIsIm1vZGlmeSB0aGUgY29uZmlndXJlIHNjcmlwdHMiLCJ0aGUgY29uZmlndXJlIHNjcmlwdHMgdGhhdCIsImNvbmZpZ3VyZSBzY3JpcHRzIHRoYXQgYXJlIiwic2NyaXB0cyB0aGF0IGFyZSB0aGUiLCJ0aGF0IGFyZSB0aGUgb3V0cHV0IiwiYXJlIHRoZSBvdXRwdXQgb2YiLCJvdXRwdXQgb2YgYXV0b2NvbmYgeW91Iiwib2YgYXV0b2NvbmYgeW91IG5lZWQiLCJhdXRvY29uZiB5b3UgbmVlZCBub3QiLCJ5b3UgbmVlZCBub3QgZm9sbG93Iiwibm90IGZvbGxvdyB0aGUgdGVybXMiLCJmb2xsb3cgdGhlIHRlcm1zIG9mIiwiZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSB3aGVuIiwicHVibGljIGxpY2Vuc2Ugd2hlbiB1c2luZyIsImxpY2Vuc2Ugd2hlbiB1c2luZyBvciIsIndoZW4gdXNpbmcgb3IgZGlzdHJpYnV0aW5nIiwidXNpbmcgb3IgZGlzdHJpYnV0aW5nIHN1Y2giLCJvciBkaXN0cmlidXRpbmcgc3VjaCBzY3JpcHRzIiwiZGlzdHJpYnV0aW5nIHN1Y2ggc2NyaXB0cyBldmVuIiwic3VjaCBzY3JpcHRzIGV2ZW4gdGhvdWdoIiwic2NyaXB0cyBldmVuIHRob3VnaCBwb3J0aW9ucyIsImV2ZW4gdGhvdWdoIHBvcnRpb25zIG9mIiwidGhvdWdoIHBvcnRpb25zIG9mIHRoZSIsInBvcnRpb25zIG9mIHRoZSB0ZXh0IiwidGhlIHRleHQgb2YgYXV0b2NvbmYiLCJ0ZXh0IG9mIGF1dG9jb25mIGFwcGVhciIsIm9mIGF1dG9jb25mIGFwcGVhciBpbiIsImF1dG9jb25mIGFwcGVhciBpbiB0aGVtIiwiYXBwZWFyIGluIHRoZW0gdGhlIiwiaW4gdGhlbSB0aGUgZ251IiwidGhlbSB0aGUgZ251IGdlbmVyYWwiLCJwdWJsaWMgbGljZW5zZSBncGwgZG9lcyIsImxpY2Vuc2UgZ3BsIGRvZXMgZ292ZXJuIiwiZ3BsIGRvZXMgZ292ZXJuIGFsbCIsImRvZXMgZ292ZXJuIGFsbCBvdGhlciIsImdvdmVybiBhbGwgb3RoZXIgdXNlIiwiYWxsIG90aGVyIHVzZSBvZiIsIm90aGVyIHVzZSBvZiB0aGUiLCJ1c2Ugb2YgdGhlIG1hdGVyaWFsIiwib2YgdGhlIG1hdGVyaWFsIHRoYXQiLCJ0aGUgbWF0ZXJpYWwgdGhhdCBjb25zdGl0dXRlcyIsIm1hdGVyaWFsIHRoYXQgY29uc3RpdHV0ZXMgdGhlIiwidGhhdCBjb25zdGl0dXRlcyB0aGUgYXV0b2NvbmYiXX0seyJsaWNlbnNlVGV4dHMiOlsiQmlzb24gRXhjZXB0aW9uXG5cbkFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucyBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yayB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YgYXMgYSBwYXJzZXIgc2tlbGV0b24uIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLlxuXG5UaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluIHZlcnNpb24gMi4yIG9mIEJpc29uLiJdLCJsaWNlbnNlSWRzIjpbIkdQTC0yLjAtd2l0aC1iaXNvbi1leGNlcHRpb24iXSwia2V5d29yZHMiOlsiYmlzb24gZXhjZXB0aW9uIGFzIiwic3BlY2lhbCBleGNlcHRpb24geW91IiwiZXhjZXB0aW9uIHlvdSBtYXkiLCJsYXJnZXIgd29yayB0aGF0IiwidGhhdCBjb250YWlucyBwYXJ0IiwiY29udGFpbnMgcGFydCBvciIsIm9mIHRoZSBiaXNvbiIsInRoZSBiaXNvbiBwYXJzZXIiLCJiaXNvbiBwYXJzZXIgc2tlbGV0b24iLCJwYXJzZXIgc2tlbGV0b24gYW5kIiwic2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUiLCJhcyB0aGF0IHdvcmsiLCJ0aGF0IHdvcmsgaXNuIiwid29yayBpc24gdCIsImlzbiB0IGl0c2VsZiIsInQgaXRzZWxmIGEiLCJpdHNlbGYgYSBwYXJzZXIiLCJhIHBhcnNlciBnZW5lcmF0b3IiLCJwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIiwiZ2VuZXJhdG9yIHVzaW5nIHRoZSIsInVzaW5nIHRoZSBza2VsZXRvbiIsInRoZSBza2VsZXRvbiBvciIsInNrZWxldG9uIG9yIGEiLCJtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YiLCJ0aGVyZW9mIGFzIGEiLCJhcyBhIHBhcnNlciIsImEgcGFyc2VyIHNrZWxldG9uIiwicGFyc2VyIHNrZWxldG9uIGFsdGVybmF0aXZlbHkiLCJza2VsZXRvbiBhbHRlcm5hdGl2ZWx5IGlmIiwiYWx0ZXJuYXRpdmVseSBpZiB5b3UiLCJ5b3UgbW9kaWZ5IG9yIiwicmVkaXN0cmlidXRlIHRoZSBwYXJzZXIiLCJ0aGUgcGFyc2VyIHNrZWxldG9uIiwicGFyc2VyIHNrZWxldG9uIGl0c2VsZiIsInNrZWxldG9uIGl0c2VsZiB5b3UiLCJvcHRpb24gcmVtb3ZlIHRoaXMiLCJyZW1vdmUgdGhpcyBzcGVjaWFsIiwic3BlY2lhbCBleGNlcHRpb24gd2hpY2giLCJleGNlcHRpb24gd2hpY2ggd2lsbCIsIndoaWNoIHdpbGwgY2F1c2UiLCJ3aWxsIGNhdXNlIHRoZSIsImNhdXNlIHRoZSBza2VsZXRvbiIsInRoZSBza2VsZXRvbiBhbmQiLCJza2VsZXRvbiBhbmQgdGhlIiwidGhlIHJlc3VsdGluZyBiaXNvbiIsInJlc3VsdGluZyBiaXNvbiBvdXRwdXQiLCJiaXNvbiBvdXRwdXQgZmlsZXMiLCJvdXRwdXQgZmlsZXMgdG8iLCJmaWxlcyB0byBiZSIsImxpY2Vuc2Ugd2l0aG91dCB0aGlzIiwid2l0aG91dCB0aGlzIHNwZWNpYWwiLCJzcGVjaWFsIGV4Y2VwdGlvbiB0aGlzIiwiZXhjZXB0aW9uIHRoaXMgc3BlY2lhbCIsInNwZWNpYWwgZXhjZXB0aW9uIHdhcyIsImV4Y2VwdGlvbiB3YXMgYWRkZWQiLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIGluIiwiZm91bmRhdGlvbiBpbiB2ZXJzaW9uIiwiaW4gdmVyc2lvbiAyIiwiMiBvZiBiaXNvbiIsImJpc29uIGV4Y2VwdGlvbiBhcyBhIiwiYSBzcGVjaWFsIGV4Y2VwdGlvbiB5b3UiLCJzcGVjaWFsIGV4Y2VwdGlvbiB5b3UgbWF5IiwiZXhjZXB0aW9uIHlvdSBtYXkgY3JlYXRlIiwiYSBsYXJnZXIgd29yayB0aGF0IiwibGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucyIsIndvcmsgdGhhdCBjb250YWlucyBwYXJ0IiwidGhhdCBjb250YWlucyBwYXJ0IG9yIiwiY29udGFpbnMgcGFydCBvciBhbGwiLCJhbGwgb2YgdGhlIGJpc29uIiwib2YgdGhlIGJpc29uIHBhcnNlciIsInRoZSBiaXNvbiBwYXJzZXIgc2tlbGV0b24iLCJiaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIiwicGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIiwic2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCIsImxvbmcgYXMgdGhhdCB3b3JrIiwiYXMgdGhhdCB3b3JrIGlzbiIsInRoYXQgd29yayBpc24gdCIsIndvcmsgaXNuIHQgaXRzZWxmIiwiaXNuIHQgaXRzZWxmIGEiLCJ0IGl0c2VsZiBhIHBhcnNlciIsIml0c2VsZiBhIHBhcnNlciBnZW5lcmF0b3IiLCJhIHBhcnNlciBnZW5lcmF0b3IgdXNpbmciLCJwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSIsImdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24iLCJ1c2luZyB0aGUgc2tlbGV0b24gb3IiLCJ0aGUgc2tlbGV0b24gb3IgYSIsInNrZWxldG9uIG9yIGEgbW9kaWZpZWQiLCJhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZiIsIm1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZiBhcyIsInZlcnNpb24gdGhlcmVvZiBhcyBhIiwidGhlcmVvZiBhcyBhIHBhcnNlciIsImFzIGEgcGFyc2VyIHNrZWxldG9uIiwiYSBwYXJzZXIgc2tlbGV0b24gYWx0ZXJuYXRpdmVseSIsInBhcnNlciBza2VsZXRvbiBhbHRlcm5hdGl2ZWx5IGlmIiwic2tlbGV0b24gYWx0ZXJuYXRpdmVseSBpZiB5b3UiLCJhbHRlcm5hdGl2ZWx5IGlmIHlvdSBtb2RpZnkiLCJpZiB5b3UgbW9kaWZ5IG9yIiwieW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUiLCJtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoZSIsIm9yIHJlZGlzdHJpYnV0ZSB0aGUgcGFyc2VyIiwicmVkaXN0cmlidXRlIHRoZSBwYXJzZXIgc2tlbGV0b24iLCJ0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiIsInBhcnNlciBza2VsZXRvbiBpdHNlbGYgeW91Iiwic2tlbGV0b24gaXRzZWxmIHlvdSBtYXkiLCJpdHNlbGYgeW91IG1heSBhdCIsInlvdXIgb3B0aW9uIHJlbW92ZSB0aGlzIiwib3B0aW9uIHJlbW92ZSB0aGlzIHNwZWNpYWwiLCJyZW1vdmUgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiIsInRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2hpY2giLCJzcGVjaWFsIGV4Y2VwdGlvbiB3aGljaCB3aWxsIiwiZXhjZXB0aW9uIHdoaWNoIHdpbGwgY2F1c2UiLCJ3aGljaCB3aWxsIGNhdXNlIHRoZSIsIndpbGwgY2F1c2UgdGhlIHNrZWxldG9uIiwiY2F1c2UgdGhlIHNrZWxldG9uIGFuZCIsInRoZSBza2VsZXRvbiBhbmQgdGhlIiwic2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmciLCJhbmQgdGhlIHJlc3VsdGluZyBiaXNvbiIsInRoZSByZXN1bHRpbmcgYmlzb24gb3V0cHV0IiwicmVzdWx0aW5nIGJpc29uIG91dHB1dCBmaWxlcyIsImJpc29uIG91dHB1dCBmaWxlcyB0byIsIm91dHB1dCBmaWxlcyB0byBiZSIsImZpbGVzIHRvIGJlIGxpY2Vuc2VkIiwidG8gYmUgbGljZW5zZWQgdW5kZXIiLCJnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIHdpdGhvdXQiLCJwdWJsaWMgbGljZW5zZSB3aXRob3V0IHRoaXMiLCJsaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIiwid2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uIiwidGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB0aGlzIiwic3BlY2lhbCBleGNlcHRpb24gdGhpcyBzcGVjaWFsIiwiZXhjZXB0aW9uIHRoaXMgc3BlY2lhbCBleGNlcHRpb24iLCJ0aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyIsInNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCIsImV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkiLCJ3YXMgYWRkZWQgYnkgdGhlIiwiYWRkZWQgYnkgdGhlIGZyZWUiLCJmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24gaW4iLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIGluIHZlcnNpb24iLCJmb3VuZGF0aW9uIGluIHZlcnNpb24gMiIsImluIHZlcnNpb24gMiAyIiwidmVyc2lvbiAyIDIgb2YiLCIyIDIgb2YgYmlzb24iLCJiaXNvbiBleGNlcHRpb24gYXMgYSBzcGVjaWFsIiwiYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB5b3UiLCJhIHNwZWNpYWwgZXhjZXB0aW9uIHlvdSBtYXkiLCJzcGVjaWFsIGV4Y2VwdGlvbiB5b3UgbWF5IGNyZWF0ZSIsImV4Y2VwdGlvbiB5b3UgbWF5IGNyZWF0ZSBhIiwiY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCIsImEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucyIsImxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMgcGFydCIsIndvcmsgdGhhdCBjb250YWlucyBwYXJ0IG9yIiwidGhhdCBjb250YWlucyBwYXJ0IG9yIGFsbCIsImNvbnRhaW5zIHBhcnQgb3IgYWxsIG9mIiwib3IgYWxsIG9mIHRoZSBiaXNvbiIsImFsbCBvZiB0aGUgYmlzb24gcGFyc2VyIiwib2YgdGhlIGJpc29uIHBhcnNlciBza2VsZXRvbiIsInRoZSBiaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIiwiYmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIiwicGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQiLCJza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsiLCJjaG9pY2Ugc28gbG9uZyBhcyB0aGF0Iiwic28gbG9uZyBhcyB0aGF0IHdvcmsiLCJsb25nIGFzIHRoYXQgd29yayBpc24iLCJhcyB0aGF0IHdvcmsgaXNuIHQiLCJ0aGF0IHdvcmsgaXNuIHQgaXRzZWxmIiwid29yayBpc24gdCBpdHNlbGYgYSIsImlzbiB0IGl0c2VsZiBhIHBhcnNlciIsInQgaXRzZWxmIGEgcGFyc2VyIGdlbmVyYXRvciIsIml0c2VsZiBhIHBhcnNlciBnZW5lcmF0b3IgdXNpbmciLCJhIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIiwicGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24iLCJnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIiwidXNpbmcgdGhlIHNrZWxldG9uIG9yIGEiLCJ0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCIsInNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiIsIm9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mIiwiYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YgYXMiLCJtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YgYXMgYSIsInZlcnNpb24gdGhlcmVvZiBhcyBhIHBhcnNlciIsInRoZXJlb2YgYXMgYSBwYXJzZXIgc2tlbGV0b24iLCJhcyBhIHBhcnNlciBza2VsZXRvbiBhbHRlcm5hdGl2ZWx5IiwiYSBwYXJzZXIgc2tlbGV0b24gYWx0ZXJuYXRpdmVseSBpZiIsInBhcnNlciBza2VsZXRvbiBhbHRlcm5hdGl2ZWx5IGlmIHlvdSIsInNrZWxldG9uIGFsdGVybmF0aXZlbHkgaWYgeW91IG1vZGlmeSIsImFsdGVybmF0aXZlbHkgaWYgeW91IG1vZGlmeSBvciIsImlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIiwieW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhlIiwibW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGUgcGFyc2VyIiwib3IgcmVkaXN0cmlidXRlIHRoZSBwYXJzZXIgc2tlbGV0b24iLCJyZWRpc3RyaWJ1dGUgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYiLCJ0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiB5b3UiLCJwYXJzZXIgc2tlbGV0b24gaXRzZWxmIHlvdSBtYXkiLCJza2VsZXRvbiBpdHNlbGYgeW91IG1heSBhdCIsIml0c2VsZiB5b3UgbWF5IGF0IHlvdXIiLCJhdCB5b3VyIG9wdGlvbiByZW1vdmUgdGhpcyIsInlvdXIgb3B0aW9uIHJlbW92ZSB0aGlzIHNwZWNpYWwiLCJvcHRpb24gcmVtb3ZlIHRoaXMgc3BlY2lhbCBleGNlcHRpb24iLCJyZW1vdmUgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3aGljaCIsInRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2hpY2ggd2lsbCIsInNwZWNpYWwgZXhjZXB0aW9uIHdoaWNoIHdpbGwgY2F1c2UiLCJleGNlcHRpb24gd2hpY2ggd2lsbCBjYXVzZSB0aGUiXX0seyJsaWNlbnNlVGV4dHMiOlsiaW5zZXJ0IEdQTCB2MiBsaWNlbnNlIHRleHQgaGVyZVxuXG5DbGFzcyBQYXRoIEV4Y2VwdGlvblxuXG5MaW5raW5nIHRoaXMgbGlicmFyeSBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IHdpdGggb3RoZXIgbW9kdWxlcyBpcyBtYWtpbmcgYSBjb21iaW5lZCB3b3JrIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gVGh1cywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjb3ZlciB0aGUgd2hvbGUgY29tYmluYXRpb24uXG5cbkFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGlzIGxpYnJhcnkgZ2l2ZSB5b3UgcGVybWlzc2lvbiB0byBsaW5rIHRoaXMgbGlicmFyeSB3aXRoIGluZGVwZW5kZW50IG1vZHVsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCByZWdhcmRsZXNzIG9mIHRoZSBsaWNlbnNlIHRlcm1zIG9mIHRoZXNlIGluZGVwZW5kZW50IG1vZHVsZXMsIGFuZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0LCBmb3IgZWFjaCBsaW5rZWQgaW5kZXBlbmRlbnQgbW9kdWxlLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2Ugb2YgdGhhdCBtb2R1bGUuIEFuIGluZGVwZW5kZW50IG1vZHVsZSBpcyBhIG1vZHVsZSB3aGljaCBpcyBub3QgZGVyaXZlZCBmcm9tIG9yIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gSWYgeW91IG1vZGlmeSB0aGlzIGxpYnJhcnksIHlvdSBtYXkgZXh0ZW5kIHRoaXMgZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgYnV0IHlvdSBhcmUgbm90IG9ibGlnYXRlZCB0byBkbyBzby4gSWYgeW91IGRvIG5vdCB3aXNoIHRvIGRvIHNvLCBkZWxldGUgdGhpcyBleGNlcHRpb24gc3RhdGVtZW50IGZyb20geW91ciB2ZXJzaW9uLiJdLCJsaWNlbnNlSWRzIjpbIkdQTC0yLjAtd2l0aC1jbGFzc3BhdGgtZXhjZXB0aW9uIl0sImtleXdvcmRzIjpbInRleHQgaGVyZSBjbGFzcyIsImhlcmUgY2xhc3MgcGF0aCIsImNsYXNzIHBhdGggZXhjZXB0aW9uIiwicGF0aCBleGNlcHRpb24gbGlua2luZyIsImV4Y2VwdGlvbiBsaW5raW5nIHRoaXMiLCJsaW5raW5nIHRoaXMgbGlicmFyeSIsInRoaXMgbGlicmFyeSBzdGF0aWNhbGx5IiwibGlicmFyeSBzdGF0aWNhbGx5IG9yIiwib3IgZHluYW1pY2FsbHkgd2l0aCIsImR5bmFtaWNhbGx5IHdpdGggb3RoZXIiLCJ3aXRoIG90aGVyIG1vZHVsZXMiLCJvdGhlciBtb2R1bGVzIGlzIiwibW9kdWxlcyBpcyBtYWtpbmciLCJpcyBtYWtpbmcgYSIsIm1ha2luZyBhIGNvbWJpbmVkIiwidGhpcyBsaWJyYXJ5IHRodXMiLCJsaWJyYXJ5IHRodXMgdGhlIiwidGh1cyB0aGUgdGVybXMiLCJwdWJsaWMgbGljZW5zZSBjb3ZlciIsImxpY2Vuc2UgY292ZXIgdGhlIiwiY292ZXIgdGhlIHdob2xlIiwidGhlIHdob2xlIGNvbWJpbmF0aW9uIiwid2hvbGUgY29tYmluYXRpb24gYXMiLCJjb21iaW5hdGlvbiBhcyBhIiwibGlicmFyeSBnaXZlIHlvdSIsImdpdmUgeW91IHBlcm1pc3Npb24iLCJ0byBsaW5rIHRoaXMiLCJsaW5rIHRoaXMgbGlicmFyeSIsInRoaXMgbGlicmFyeSB3aXRoIiwiaW5kZXBlbmRlbnQgbW9kdWxlcyB0byIsIm1vZHVsZXMgdG8gcHJvZHVjZSIsInRvIHByb2R1Y2UgYW4iLCJwcm9kdWNlIGFuIGV4ZWN1dGFibGUiLCJhbiBleGVjdXRhYmxlIHJlZ2FyZGxlc3MiLCJleGVjdXRhYmxlIHJlZ2FyZGxlc3Mgb2YiLCJsaWNlbnNlIHRlcm1zIG9mIiwidGVybXMgb2YgdGhlc2UiLCJvZiB0aGVzZSBpbmRlcGVuZGVudCIsInRoZXNlIGluZGVwZW5kZW50IG1vZHVsZXMiLCJpbmRlcGVuZGVudCBtb2R1bGVzIGFuZCIsIm1vZHVsZXMgYW5kIHRvIiwiYW5kIHRvIGNvcHkiLCJyZXN1bHRpbmcgZXhlY3V0YWJsZSB1bmRlciIsImV4ZWN1dGFibGUgdW5kZXIgdGVybXMiLCJhbHNvIG1lZXQgZm9yIiwibWVldCBmb3IgZWFjaCIsImZvciBlYWNoIGxpbmtlZCIsImVhY2ggbGlua2VkIGluZGVwZW5kZW50IiwibGlua2VkIGluZGVwZW5kZW50IG1vZHVsZSIsImluZGVwZW5kZW50IG1vZHVsZSB0aGUiLCJsaWNlbnNlIG9mIHRoYXQiLCJvZiB0aGF0IG1vZHVsZSIsInRoYXQgbW9kdWxlIGFuIiwibW9kdWxlIGFuIGluZGVwZW5kZW50IiwiaW5kZXBlbmRlbnQgbW9kdWxlIGlzIiwibW9kdWxlIGlzIGEiLCJpcyBhIG1vZHVsZSIsImEgbW9kdWxlIHdoaWNoIiwibW9kdWxlIHdoaWNoIGlzIiwiaXMgbm90IGRlcml2ZWQiLCJtb2RpZnkgdGhpcyBsaWJyYXJ5IiwidGhpcyBsaWJyYXJ5IHlvdSIsImxpYnJhcnkgYnV0IHlvdSIsImxpY2Vuc2UgdGV4dCBoZXJlIGNsYXNzIiwidGV4dCBoZXJlIGNsYXNzIHBhdGgiLCJoZXJlIGNsYXNzIHBhdGggZXhjZXB0aW9uIiwiY2xhc3MgcGF0aCBleGNlcHRpb24gbGlua2luZyIsInBhdGggZXhjZXB0aW9uIGxpbmtpbmcgdGhpcyIsImV4Y2VwdGlvbiBsaW5raW5nIHRoaXMgbGlicmFyeSIsImxpbmtpbmcgdGhpcyBsaWJyYXJ5IHN0YXRpY2FsbHkiLCJ0aGlzIGxpYnJhcnkgc3RhdGljYWxseSBvciIsImxpYnJhcnkgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSIsInN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCIsIm9yIGR5bmFtaWNhbGx5IHdpdGggb3RoZXIiLCJkeW5hbWljYWxseSB3aXRoIG90aGVyIG1vZHVsZXMiLCJ3aXRoIG90aGVyIG1vZHVsZXMgaXMiLCJvdGhlciBtb2R1bGVzIGlzIG1ha2luZyIsIm1vZHVsZXMgaXMgbWFraW5nIGEiLCJpcyBtYWtpbmcgYSBjb21iaW5lZCIsIm1ha2luZyBhIGNvbWJpbmVkIHdvcmsiLCJhIGNvbWJpbmVkIHdvcmsgYmFzZWQiLCJvbiB0aGlzIGxpYnJhcnkgdGh1cyIsInRoaXMgbGlicmFyeSB0aHVzIHRoZSIsImxpYnJhcnkgdGh1cyB0aGUgdGVybXMiLCJ0aHVzIHRoZSB0ZXJtcyBhbmQiLCJjb25kaXRpb25zIG9mIHRoZSBnbnUiLCJnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGNvdmVyIiwicHVibGljIGxpY2Vuc2UgY292ZXIgdGhlIiwibGljZW5zZSBjb3ZlciB0aGUgd2hvbGUiLCJjb3ZlciB0aGUgd2hvbGUgY29tYmluYXRpb24iLCJ0aGUgd2hvbGUgY29tYmluYXRpb24gYXMiLCJ3aG9sZSBjb21iaW5hdGlvbiBhcyBhIiwiY29tYmluYXRpb24gYXMgYSBzcGVjaWFsIiwidGhpcyBsaWJyYXJ5IGdpdmUgeW91IiwibGlicmFyeSBnaXZlIHlvdSBwZXJtaXNzaW9uIiwiZ2l2ZSB5b3UgcGVybWlzc2lvbiB0byIsInlvdSBwZXJtaXNzaW9uIHRvIGxpbmsiLCJwZXJtaXNzaW9uIHRvIGxpbmsgdGhpcyIsInRvIGxpbmsgdGhpcyBsaWJyYXJ5IiwibGluayB0aGlzIGxpYnJhcnkgd2l0aCIsInRoaXMgbGlicmFyeSB3aXRoIGluZGVwZW5kZW50Iiwid2l0aCBpbmRlcGVuZGVudCBtb2R1bGVzIHRvIiwiaW5kZXBlbmRlbnQgbW9kdWxlcyB0byBwcm9kdWNlIiwibW9kdWxlcyB0byBwcm9kdWNlIGFuIiwidG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlIiwicHJvZHVjZSBhbiBleGVjdXRhYmxlIHJlZ2FyZGxlc3MiLCJhbiBleGVjdXRhYmxlIHJlZ2FyZGxlc3Mgb2YiLCJleGVjdXRhYmxlIHJlZ2FyZGxlc3Mgb2YgdGhlIiwib2YgdGhlIGxpY2Vuc2UgdGVybXMiLCJ0aGUgbGljZW5zZSB0ZXJtcyBvZiIsImxpY2Vuc2UgdGVybXMgb2YgdGhlc2UiLCJ0ZXJtcyBvZiB0aGVzZSBpbmRlcGVuZGVudCIsIm9mIHRoZXNlIGluZGVwZW5kZW50IG1vZHVsZXMiLCJ0aGVzZSBpbmRlcGVuZGVudCBtb2R1bGVzIGFuZCIsImluZGVwZW5kZW50IG1vZHVsZXMgYW5kIHRvIiwibW9kdWxlcyBhbmQgdG8gY29weSIsImFuZCB0byBjb3B5IGFuZCIsImRpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIiwidGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHVuZGVyIiwicmVzdWx0aW5nIGV4ZWN1dGFibGUgdW5kZXIgdGVybXMiLCJleGVjdXRhYmxlIHVuZGVyIHRlcm1zIG9mIiwieW91IGFsc28gbWVldCBmb3IiLCJhbHNvIG1lZXQgZm9yIGVhY2giLCJtZWV0IGZvciBlYWNoIGxpbmtlZCIsImZvciBlYWNoIGxpbmtlZCBpbmRlcGVuZGVudCIsImVhY2ggbGlua2VkIGluZGVwZW5kZW50IG1vZHVsZSIsImxpbmtlZCBpbmRlcGVuZGVudCBtb2R1bGUgdGhlIiwiaW5kZXBlbmRlbnQgbW9kdWxlIHRoZSB0ZXJtcyIsInRoZSBsaWNlbnNlIG9mIHRoYXQiLCJsaWNlbnNlIG9mIHRoYXQgbW9kdWxlIiwib2YgdGhhdCBtb2R1bGUgYW4iLCJ0aGF0IG1vZHVsZSBhbiBpbmRlcGVuZGVudCIsIm1vZHVsZSBhbiBpbmRlcGVuZGVudCBtb2R1bGUiLCJhbiBpbmRlcGVuZGVudCBtb2R1bGUgaXMiLCJpbmRlcGVuZGVudCBtb2R1bGUgaXMgYSIsIm1vZHVsZSBpcyBhIG1vZHVsZSIsImlzIGEgbW9kdWxlIHdoaWNoIiwiYSBtb2R1bGUgd2hpY2ggaXMiLCJtb2R1bGUgd2hpY2ggaXMgbm90Iiwid2hpY2ggaXMgbm90IGRlcml2ZWQiLCJpcyBub3QgZGVyaXZlZCBmcm9tIiwibm90IGRlcml2ZWQgZnJvbSBvciIsIm9yIGJhc2VkIG9uIHRoaXMiLCJvbiB0aGlzIGxpYnJhcnkgaWYiLCJ0aGlzIGxpYnJhcnkgaWYgeW91IiwibGlicmFyeSBpZiB5b3UgbW9kaWZ5IiwieW91IG1vZGlmeSB0aGlzIGxpYnJhcnkiLCJtb2RpZnkgdGhpcyBsaWJyYXJ5IHlvdSIsInRoaXMgbGlicmFyeSB5b3UgbWF5IiwibGlicmFyeSB5b3UgbWF5IGV4dGVuZCIsInRoZSBsaWJyYXJ5IGJ1dCB5b3UiLCJsaWJyYXJ5IGJ1dCB5b3UgYXJlIiwidjIgbGljZW5zZSB0ZXh0IGhlcmUgY2xhc3MiLCJsaWNlbnNlIHRleHQgaGVyZSBjbGFzcyBwYXRoIiwidGV4dCBoZXJlIGNsYXNzIHBhdGggZXhjZXB0aW9uIiwiaGVyZSBjbGFzcyBwYXRoIGV4Y2VwdGlvbiBsaW5raW5nIiwiY2xhc3MgcGF0aCBleGNlcHRpb24gbGlua2luZyB0aGlzIiwicGF0aCBleGNlcHRpb24gbGlua2luZyB0aGlzIGxpYnJhcnkiLCJleGNlcHRpb24gbGlua2luZyB0aGlzIGxpYnJhcnkgc3RhdGljYWxseSIsImxpbmtpbmcgdGhpcyBsaWJyYXJ5IHN0YXRpY2FsbHkgb3IiLCJ0aGlzIGxpYnJhcnkgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSIsImxpYnJhcnkgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIiwic3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIG90aGVyIiwib3IgZHluYW1pY2FsbHkgd2l0aCBvdGhlciBtb2R1bGVzIiwiZHluYW1pY2FsbHkgd2l0aCBvdGhlciBtb2R1bGVzIGlzIiwid2l0aCBvdGhlciBtb2R1bGVzIGlzIG1ha2luZyIsIm90aGVyIG1vZHVsZXMgaXMgbWFraW5nIGEiLCJtb2R1bGVzIGlzIG1ha2luZyBhIGNvbWJpbmVkIiwiaXMgbWFraW5nIGEgY29tYmluZWQgd29yayIsIm1ha2luZyBhIGNvbWJpbmVkIHdvcmsgYmFzZWQiLCJhIGNvbWJpbmVkIHdvcmsgYmFzZWQgb24iLCJjb21iaW5lZCB3b3JrIGJhc2VkIG9uIHRoaXMiLCJ3b3JrIGJhc2VkIG9uIHRoaXMgbGlicmFyeSIsImJhc2VkIG9uIHRoaXMgbGlicmFyeSB0aHVzIiwib24gdGhpcyBsaWJyYXJ5IHRodXMgdGhlIiwidGhpcyBsaWJyYXJ5IHRodXMgdGhlIHRlcm1zIiwibGlicmFyeSB0aHVzIHRoZSB0ZXJtcyBhbmQiLCJ0aHVzIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyIsImFuZCBjb25kaXRpb25zIG9mIHRoZSBnbnUiLCJjb25kaXRpb25zIG9mIHRoZSBnbnUgZ2VuZXJhbCIsImdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGNvdmVyIiwiZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBjb3ZlciB0aGUiLCJwdWJsaWMgbGljZW5zZSBjb3ZlciB0aGUgd2hvbGUiLCJsaWNlbnNlIGNvdmVyIHRoZSB3aG9sZSBjb21iaW5hdGlvbiIsImNvdmVyIHRoZSB3aG9sZSBjb21iaW5hdGlvbiBhcyIsInRoZSB3aG9sZSBjb21iaW5hdGlvbiBhcyBhIiwid2hvbGUgY29tYmluYXRpb24gYXMgYSBzcGVjaWFsIiwiY29tYmluYXRpb24gYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiIsIm9mIHRoaXMgbGlicmFyeSBnaXZlIHlvdSIsInRoaXMgbGlicmFyeSBnaXZlIHlvdSBwZXJtaXNzaW9uIiwibGlicmFyeSBnaXZlIHlvdSBwZXJtaXNzaW9uIHRvIiwiZ2l2ZSB5b3UgcGVybWlzc2lvbiB0byBsaW5rIiwieW91IHBlcm1pc3Npb24gdG8gbGluayB0aGlzIiwicGVybWlzc2lvbiB0byBsaW5rIHRoaXMgbGlicmFyeSIsInRvIGxpbmsgdGhpcyBsaWJyYXJ5IHdpdGgiLCJsaW5rIHRoaXMgbGlicmFyeSB3aXRoIGluZGVwZW5kZW50IiwidGhpcyBsaWJyYXJ5IHdpdGggaW5kZXBlbmRlbnQgbW9kdWxlcyIsImxpYnJhcnkgd2l0aCBpbmRlcGVuZGVudCBtb2R1bGVzIHRvIiwid2l0aCBpbmRlcGVuZGVudCBtb2R1bGVzIHRvIHByb2R1Y2UiLCJpbmRlcGVuZGVudCBtb2R1bGVzIHRvIHByb2R1Y2UgYW4iXX0seyJsaWNlbnNlVGV4dHMiOlsiaW5zZXJ0IEdQTCB2MiBsaWNlbnNlIHRleHQgaGVyZVxuXG5Gb250IEV4Y2VwdGlvblxuXG5BcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiB5b3UgY3JlYXRlIGEgZG9jdW1lbnQgd2hpY2ggdXNlcyB0aGlzIGZvbnQsIGFuZCBlbWJlZCB0aGlzIGZvbnQgb3IgdW5hbHRlcmVkIHBvcnRpb25zIG9mIHRoaXMgZm9udCBpbnRvIHRoZSBkb2N1bWVudCwgdGhpcyBmb250IGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBkb2N1bWVudCBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gSWYgeW91IG1vZGlmeSB0aGlzIGZvbnQsIHlvdSBtYXkgZXh0ZW5kIHRoaXMgZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbiBvZiB0aGUgZm9udCwgYnV0IHlvdSBhcmUgbm90IG9ibGlnYXRlZCB0byBkbyBzby4gSWYgeW91IGRvIG5vdCB3aXNoIHRvIGRvIHNvLCBkZWxldGUgdGhpcyBleGNlcHRpb24gc3RhdGVtZW50IGZyb20geW91ciB2ZXJzaW9uLiJdLCJsaWNlbnNlSWRzIjpbIkdQTC0yLjAtd2l0aC1mb250LWV4Y2VwdGlvbiJdLCJrZXl3b3JkcyI6WyJ0ZXh0IGhlcmUgZm9udCIsImhlcmUgZm9udCBleGNlcHRpb24iLCJmb250IGV4Y2VwdGlvbiBhcyIsImV4Y2VwdGlvbiBpZiB5b3UiLCJjcmVhdGUgYSBkb2N1bWVudCIsImEgZG9jdW1lbnQgd2hpY2giLCJkb2N1bWVudCB3aGljaCB1c2VzIiwid2hpY2ggdXNlcyB0aGlzIiwidXNlcyB0aGlzIGZvbnQiLCJ0aGlzIGZvbnQgYW5kIiwiZm9udCBhbmQgZW1iZWQiLCJhbmQgZW1iZWQgdGhpcyIsImVtYmVkIHRoaXMgZm9udCIsInRoaXMgZm9udCBvciIsImZvbnQgb3IgdW5hbHRlcmVkIiwib3IgdW5hbHRlcmVkIHBvcnRpb25zIiwidW5hbHRlcmVkIHBvcnRpb25zIG9mIiwib2YgdGhpcyBmb250IiwidGhpcyBmb250IGludG8iLCJmb250IGludG8gdGhlIiwiaW50byB0aGUgZG9jdW1lbnQiLCJ0aGUgZG9jdW1lbnQgdGhpcyIsImRvY3VtZW50IHRoaXMgZm9udCIsInRoaXMgZm9udCBkb2VzIiwiZm9udCBkb2VzIG5vdCIsInRoZSByZXN1bHRpbmcgZG9jdW1lbnQiLCJyZXN1bHRpbmcgZG9jdW1lbnQgdG8iLCJkb2VzIG5vdCBob3dldmVyIiwibm90IGhvd2V2ZXIgaW52YWxpZGF0ZSIsImhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkiLCJyZWFzb25zIHdoeSB0aGUiLCJ3aHkgdGhlIGRvY3VtZW50IiwidGhlIGRvY3VtZW50IG1pZ2h0IiwiZG9jdW1lbnQgbWlnaHQgYmUiLCJtb2RpZnkgdGhpcyBmb250IiwidGhpcyBmb250IHlvdSIsImZvbnQgeW91IG1heSIsInRoZSBmb250IGJ1dCIsImZvbnQgYnV0IHlvdSIsImxpY2Vuc2UgdGV4dCBoZXJlIGZvbnQiLCJ0ZXh0IGhlcmUgZm9udCBleGNlcHRpb24iLCJoZXJlIGZvbnQgZXhjZXB0aW9uIGFzIiwiZm9udCBleGNlcHRpb24gYXMgYSIsInNwZWNpYWwgZXhjZXB0aW9uIGlmIHlvdSIsImV4Y2VwdGlvbiBpZiB5b3UgY3JlYXRlIiwieW91IGNyZWF0ZSBhIGRvY3VtZW50IiwiY3JlYXRlIGEgZG9jdW1lbnQgd2hpY2giLCJhIGRvY3VtZW50IHdoaWNoIHVzZXMiLCJkb2N1bWVudCB3aGljaCB1c2VzIHRoaXMiLCJ3aGljaCB1c2VzIHRoaXMgZm9udCIsInVzZXMgdGhpcyBmb250IGFuZCIsInRoaXMgZm9udCBhbmQgZW1iZWQiLCJmb250IGFuZCBlbWJlZCB0aGlzIiwiYW5kIGVtYmVkIHRoaXMgZm9udCIsImVtYmVkIHRoaXMgZm9udCBvciIsInRoaXMgZm9udCBvciB1bmFsdGVyZWQiLCJmb250IG9yIHVuYWx0ZXJlZCBwb3J0aW9ucyIsIm9yIHVuYWx0ZXJlZCBwb3J0aW9ucyBvZiIsInVuYWx0ZXJlZCBwb3J0aW9ucyBvZiB0aGlzIiwicG9ydGlvbnMgb2YgdGhpcyBmb250Iiwib2YgdGhpcyBmb250IGludG8iLCJ0aGlzIGZvbnQgaW50byB0aGUiLCJmb250IGludG8gdGhlIGRvY3VtZW50IiwiaW50byB0aGUgZG9jdW1lbnQgdGhpcyIsInRoZSBkb2N1bWVudCB0aGlzIGZvbnQiLCJkb2N1bWVudCB0aGlzIGZvbnQgZG9lcyIsInRoaXMgZm9udCBkb2VzIG5vdCIsImZvbnQgZG9lcyBub3QgYnkiLCJjYXVzZSB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IiwidGhlIHJlc3VsdGluZyBkb2N1bWVudCB0byIsInJlc3VsdGluZyBkb2N1bWVudCB0byBiZSIsImRvY3VtZW50IHRvIGJlIGNvdmVyZWQiLCJleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciIsImRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0ZSIsIm5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IiwiaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlciIsIm90aGVyIHJlYXNvbnMgd2h5IHRoZSIsInJlYXNvbnMgd2h5IHRoZSBkb2N1bWVudCIsIndoeSB0aGUgZG9jdW1lbnQgbWlnaHQiLCJ0aGUgZG9jdW1lbnQgbWlnaHQgYmUiLCJkb2N1bWVudCBtaWdodCBiZSBjb3ZlcmVkIiwiZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBpZiIsInB1YmxpYyBsaWNlbnNlIGlmIHlvdSIsInlvdSBtb2RpZnkgdGhpcyBmb250IiwibW9kaWZ5IHRoaXMgZm9udCB5b3UiLCJ0aGlzIGZvbnQgeW91IG1heSIsImZvbnQgeW91IG1heSBleHRlbmQiLCJvZiB0aGUgZm9udCBidXQiLCJ0aGUgZm9udCBidXQgeW91IiwiZm9udCBidXQgeW91IGFyZSIsInYyIGxpY2Vuc2UgdGV4dCBoZXJlIGZvbnQiLCJsaWNlbnNlIHRleHQgaGVyZSBmb250IGV4Y2VwdGlvbiIsInRleHQgaGVyZSBmb250IGV4Y2VwdGlvbiBhcyIsImhlcmUgZm9udCBleGNlcHRpb24gYXMgYSIsImZvbnQgZXhjZXB0aW9uIGFzIGEgc3BlY2lhbCIsImEgc3BlY2lhbCBleGNlcHRpb24gaWYgeW91Iiwic3BlY2lhbCBleGNlcHRpb24gaWYgeW91IGNyZWF0ZSIsImV4Y2VwdGlvbiBpZiB5b3UgY3JlYXRlIGEiLCJpZiB5b3UgY3JlYXRlIGEgZG9jdW1lbnQiLCJ5b3UgY3JlYXRlIGEgZG9jdW1lbnQgd2hpY2giLCJjcmVhdGUgYSBkb2N1bWVudCB3aGljaCB1c2VzIiwiYSBkb2N1bWVudCB3aGljaCB1c2VzIHRoaXMiLCJkb2N1bWVudCB3aGljaCB1c2VzIHRoaXMgZm9udCIsIndoaWNoIHVzZXMgdGhpcyBmb250IGFuZCIsInVzZXMgdGhpcyBmb250IGFuZCBlbWJlZCIsInRoaXMgZm9udCBhbmQgZW1iZWQgdGhpcyIsImZvbnQgYW5kIGVtYmVkIHRoaXMgZm9udCIsImFuZCBlbWJlZCB0aGlzIGZvbnQgb3IiLCJlbWJlZCB0aGlzIGZvbnQgb3IgdW5hbHRlcmVkIiwidGhpcyBmb250IG9yIHVuYWx0ZXJlZCBwb3J0aW9ucyIsImZvbnQgb3IgdW5hbHRlcmVkIHBvcnRpb25zIG9mIiwib3IgdW5hbHRlcmVkIHBvcnRpb25zIG9mIHRoaXMiLCJ1bmFsdGVyZWQgcG9ydGlvbnMgb2YgdGhpcyBmb250IiwicG9ydGlvbnMgb2YgdGhpcyBmb250IGludG8iLCJvZiB0aGlzIGZvbnQgaW50byB0aGUiLCJ0aGlzIGZvbnQgaW50byB0aGUgZG9jdW1lbnQiLCJmb250IGludG8gdGhlIGRvY3VtZW50IHRoaXMiLCJpbnRvIHRoZSBkb2N1bWVudCB0aGlzIGZvbnQiLCJ0aGUgZG9jdW1lbnQgdGhpcyBmb250IGRvZXMiLCJkb2N1bWVudCB0aGlzIGZvbnQgZG9lcyBub3QiLCJ0aGlzIGZvbnQgZG9lcyBub3QgYnkiLCJmb250IGRvZXMgbm90IGJ5IGl0c2VsZiIsIml0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IiwiY2F1c2UgdGhlIHJlc3VsdGluZyBkb2N1bWVudCB0byIsInRoZSByZXN1bHRpbmcgZG9jdW1lbnQgdG8gYmUiLCJyZXN1bHRpbmcgZG9jdW1lbnQgdG8gYmUgY292ZXJlZCIsImRvY3VtZW50IHRvIGJlIGNvdmVyZWQgYnkiLCJ0aGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIiwiZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0ZSIsImRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkiLCJub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlciIsImhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyIsImFueSBvdGhlciByZWFzb25zIHdoeSB0aGUiLCJvdGhlciByZWFzb25zIHdoeSB0aGUgZG9jdW1lbnQiLCJyZWFzb25zIHdoeSB0aGUgZG9jdW1lbnQgbWlnaHQiLCJ3aHkgdGhlIGRvY3VtZW50IG1pZ2h0IGJlIiwidGhlIGRvY3VtZW50IG1pZ2h0IGJlIGNvdmVyZWQiLCJkb2N1bWVudCBtaWdodCBiZSBjb3ZlcmVkIGJ5IiwiZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgaWYiLCJnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGlmIHlvdSIsInB1YmxpYyBsaWNlbnNlIGlmIHlvdSBtb2RpZnkiLCJsaWNlbnNlIGlmIHlvdSBtb2RpZnkgdGhpcyIsImlmIHlvdSBtb2RpZnkgdGhpcyBmb250IiwieW91IG1vZGlmeSB0aGlzIGZvbnQgeW91IiwibW9kaWZ5IHRoaXMgZm9udCB5b3UgbWF5IiwidGhpcyBmb250IHlvdSBtYXkgZXh0ZW5kIiwiZm9udCB5b3UgbWF5IGV4dGVuZCB0aGlzIiwieW91ciB2ZXJzaW9uIG9mIHRoZSBmb250IiwidmVyc2lvbiBvZiB0aGUgZm9udCBidXQiLCJvZiB0aGUgZm9udCBidXQgeW91IiwidGhlIGZvbnQgYnV0IHlvdSBhcmUiLCJmb250IGJ1dCB5b3UgYXJlIG5vdCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRVxuXG5WZXJzaW9uIDMsIDI5IEp1bmUgMjAwN1xuXG5Db3B5cmlnaHQgwqkgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gXHUwMDNjaHR0cHM6Ly9mc2Yub3JnL1x1MDAzZVxuXG5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuXG5cblByZWFtYmxlXG5cblRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWUsIGNvcHlsZWZ0IGxpY2Vuc2UgZm9yIHNvZnR3YXJlIGFuZCBvdGhlciBraW5kcyBvZiB3b3Jrcy5cblxuVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3MuIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGFsbCB2ZXJzaW9ucyBvZiBhIHByb2dyYW0tLXRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIGZyZWUgc29mdHdhcmUgZm9yIGFsbCBpdHMgdXNlcnMuIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvIGFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiBZb3UgY2FuIGFwcGx5IGl0IHRvIHlvdXIgcHJvZ3JhbXMsIHRvby5cblxuV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdCBwcmljZS4gT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvciB0aGVtIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy5cblxuVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBwcmV2ZW50IG90aGVycyBmcm9tIGRlbnlpbmcgeW91IHRoZXNlIHJpZ2h0cyBvciBhc2tpbmcgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVyZWZvcmUsIHlvdSBoYXZlIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLlxuXG5Gb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyIGdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUgZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLlxuXG5EZXZlbG9wZXJzIHRoYXQgdXNlIHRoZSBHTlUgR1BMIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBhc3NlcnQgY29weXJpZ2h0IG9uIHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBMaWNlbnNlIGdpdmluZyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgaXQuXG5cbkZvciB0aGUgZGV2ZWxvcGVycycgYW5kIGF1dGhvcnMnIHByb3RlY3Rpb24sIHRoZSBHUEwgY2xlYXJseSBleHBsYWlucyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgc29mdHdhcmUuIEZvciBib3RoIHVzZXJzJyBhbmQgYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcyBjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8gYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy5cblxuU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1biBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIgY2FuIGRvIHNvLiBUaGlzIGlzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIGFpbSBvZiBwcm90ZWN0aW5nIHVzZXJzJyBmcmVlZG9tIHRvIGNoYW5nZSB0aGUgc29mdHdhcmUuIFRoZSBzeXN0ZW1hdGljIHBhdHRlcm4gb2Ygc3VjaCBhYnVzZSBvY2N1cnMgaW4gdGhlIGFyZWEgb2YgcHJvZHVjdHMgZm9yIGluZGl2aWR1YWxzIHRvIHVzZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIGl0IGlzIG1vc3QgdW5hY2NlcHRhYmxlLiBUaGVyZWZvcmUsIHdlIGhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZSBwcm9kdWN0cy4gSWYgc3VjaCBwcm9ibGVtcyBhcmlzZSBzdWJzdGFudGlhbGx5IGluIG90aGVyIGRvbWFpbnMsIHdlIHN0YW5kIHJlYWR5IHRvIGV4dGVuZCB0aGlzIHByb3Zpc2lvbiB0byB0aG9zZSBkb21haW5zIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgR1BMLCBhcyBuZWVkZWQgdG8gcHJvdGVjdCB0aGUgZnJlZWRvbSBvZiB1c2Vycy5cblxuRmluYWxseSwgZXZlcnkgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gU3RhdGVzIHNob3VsZCBub3QgYWxsb3cgcGF0ZW50cyB0byByZXN0cmljdCBkZXZlbG9wbWVudCBhbmQgdXNlIG9mIHNvZnR3YXJlIG9uIGdlbmVyYWwtcHVycG9zZSBjb21wdXRlcnMsIGJ1dCBpbiB0aG9zZSB0aGF0IGRvLCB3ZSB3aXNoIHRvIGF2b2lkIHRoZSBzcGVjaWFsIGRhbmdlciB0aGF0IHBhdGVudHMgYXBwbGllZCB0byBhIGZyZWUgcHJvZ3JhbSBjb3VsZCBtYWtlIGl0IGVmZmVjdGl2ZWx5IHByb3ByaWV0YXJ5LiBUbyBwcmV2ZW50IHRoaXMsIHRoZSBHUEwgYXNzdXJlcyB0aGF0IHBhdGVudHMgY2Fubm90IGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBwcm9ncmFtIG5vbi1mcmVlLlxuXG5UaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gZm9sbG93LlxuXG5URVJNUyBBTkQgQ09ORElUSU9OU1xuXG4gICAwLiBEZWZpbml0aW9ucy5cblxuICAgXCJUaGlzIExpY2Vuc2VcIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cblxuICAgXCJDb3B5cmlnaHRcIiBhbHNvIG1lYW5zIGNvcHlyaWdodC1saWtlIGxhd3MgdGhhdCBhcHBseSB0byBvdGhlciBraW5kcyBvZiB3b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9yIG1hc2tzLlxuXG4gICBcIlRoZSBQcm9ncmFtXCIgcmVmZXJzIHRvIGFueSBjb3B5cmlnaHRhYmxlIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyBcInlvdVwiLiBcIkxpY2Vuc2Vlc1wiIGFuZCBcInJlY2lwaWVudHNcIiBtYXkgYmUgaW5kaXZpZHVhbHMgb3Igb3JnYW5pemF0aW9ucy5cblxuICAgVG8gXCJtb2RpZnlcIiBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrIGluIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24sIG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZiBhbiBleGFjdCBjb3B5LiBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgXCJtb2RpZmllZCB2ZXJzaW9uXCIgb2YgdGhlIGVhcmxpZXIgd29yayBvciBhIHdvcmsgXCJiYXNlZCBvblwiIHRoZSBlYXJsaWVyIHdvcmsuXG5cbiAgIEEgXCJjb3ZlcmVkIHdvcmtcIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0uXG5cbiAgIFRvIFwicHJvcGFnYXRlXCIgYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dCBwZXJtaXNzaW9uLCB3b3VsZCBtYWtlIHlvdSBkaXJlY3RseSBvciBzZWNvbmRhcmlseSBsaWFibGUgZm9yIGluZnJpbmdlbWVudCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcsIGV4Y2VwdCBleGVjdXRpbmcgaXQgb24gYSBjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuIFByb3BhZ2F0aW9uIGluY2x1ZGVzIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC5cblxuICAgVG8gXCJjb252ZXlcIiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyIHBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoIGEgY29tcHV0ZXIgbmV0d29yaywgd2l0aCBubyB0cmFuc2ZlciBvZiBhIGNvcHksIGlzIG5vdCBjb252ZXlpbmcuXG5cbiAgIEFuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzIFwiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlc1wiIHRvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUgZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpIHRlbGxzIHRoZSB1c2VyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSB3b3JrIChleGNlcHQgdG8gdGhlIGV4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUgd29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBJZiB0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYSBtZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLlxuXG4gICAxLiBTb3VyY2UgQ29kZS5cblxuICAgVGhlIFwic291cmNlIGNvZGVcIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIFwiT2JqZWN0IGNvZGVcIiBtZWFucyBhbnkgbm9uLXNvdXJjZSBmb3JtIG9mIGEgd29yay5cblxuICAgQSBcIlN0YW5kYXJkIEludGVyZmFjZVwiIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbCBzdGFuZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRoZSBjYXNlIG9mIGludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIG9uZSB0aGF0IGlzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLlxuXG4gICBUaGUgXCJTeXN0ZW0gTGlicmFyaWVzXCIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyIHRoYW4gdGhlIHdvcmsgYXMgYSB3aG9sZSwgdGhhdCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBmb3JtIG9mIHBhY2thZ2luZyBhIE1ham9yIENvbXBvbmVudCwgYnV0IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoYXQgTWFqb3IgQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0IE1ham9yIENvbXBvbmVudCwgb3IgdG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3aGljaCBhbiBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtLiBBIFwiTWFqb3IgQ29tcG9uZW50XCIsIGluIHRoaXMgY29udGV4dCwgbWVhbnMgYSBtYWpvciBlc3NlbnRpYWwgY29tcG9uZW50IChrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0gKGlmIGFueSkgb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgd29yayBydW5zLCBvciBhIGNvbXBpbGVyIHVzZWQgdG8gcHJvZHVjZSB0aGUgd29yaywgb3IgYW4gb2JqZWN0IGNvZGUgaW50ZXJwcmV0ZXIgdXNlZCB0byBydW4gaXQuXG5cbiAgIFRoZSBcIkNvcnJlc3BvbmRpbmcgU291cmNlXCIgZm9yIGEgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlIHdvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8gY29udHJvbCB0aG9zZSBhY3Rpdml0aWVzLiBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MgU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZSBwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQgd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW5jbHVkZXMgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHNvdXJjZSBmaWxlcyBmb3IgdGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5IGxpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byByZXF1aXJlLCBzdWNoIGFzIGJ5IGludGltYXRlIGRhdGEgY29tbXVuaWNhdGlvbiBvciBjb250cm9sIGZsb3cgYmV0d2VlbiB0aG9zZSBzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuXG5cbiAgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgdXNlcnMgY2FuIHJlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS5cblxuICAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0IHNhbWUgd29yay5cblxuICAgMi4gQmFzaWMgUGVybWlzc2lvbnMuXG5cbiAgIEFsbCByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYXJlIGdyYW50ZWQgZm9yIHRoZSB0ZXJtIG9mIGNvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkIGNvbmRpdGlvbnMgYXJlIG1ldC4gVGhpcyBMaWNlbnNlIGV4cGxpY2l0bHkgYWZmaXJtcyB5b3VyIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhIGNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cyBjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gVGhpcyBMaWNlbnNlIGFja25vd2xlZGdlcyB5b3VyIHJpZ2h0cyBvZiBmYWlyIHVzZSBvciBvdGhlciBlcXVpdmFsZW50LCBhcyBwcm92aWRlZCBieSBjb3B5cmlnaHQgbGF3LlxuXG4gICBZb3UgbWF5IG1ha2UsIHJ1biBhbmQgcHJvcGFnYXRlIGNvdmVyZWQgd29ya3MgdGhhdCB5b3UgZG8gbm90IGNvbnZleSwgd2l0aG91dCBjb25kaXRpb25zIHNvIGxvbmcgYXMgeW91ciBsaWNlbnNlIG90aGVyd2lzZSByZW1haW5zIGluIGZvcmNlLiBZb3UgbWF5IGNvbnZleSBjb3ZlcmVkIHdvcmtzIHRvIG90aGVycyBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBoYXZpbmcgdGhlbSBtYWtlIG1vZGlmaWNhdGlvbnMgZXhjbHVzaXZlbHkgZm9yIHlvdSwgb3IgcHJvdmlkZSB5b3Ugd2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluIGNvbnZleWluZyBhbGwgbWF0ZXJpYWwgZm9yIHdoaWNoIHlvdSBkbyBub3QgY29udHJvbCBjb3B5cmlnaHQuIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MgZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbiBhbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YgeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS5cblxuICAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiBTdWJsaWNlbnNpbmcgaXMgbm90IGFsbG93ZWQ7IHNlY3Rpb24gMTAgbWFrZXMgaXQgdW5uZWNlc3NhcnkuXG5cbiAgIDMuIFByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuXG5cbiAgIE5vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIGFydGljbGUgMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9wdGVkIG9uIDIwIERlY2VtYmVyIDE5OTYsIG9yIHNpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2ggbWVhc3VyZXMuXG5cbiAgIFdoZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaCBjaXJjdW12ZW50aW9uIGlzIGVmZmVjdGVkIGJ5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QgdGhlIHdvcmsncyB1c2VycywgeW91ciBvciB0aGlyZCBwYXJ0aWVzJyBsZWdhbCByaWdodHMgdG8gZm9yYmlkIGNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcy5cblxuICAgNC4gQ29udmV5aW5nIFZlcmJhdGltIENvcGllcy5cblxuICAgWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55IG5vbi1wZXJtaXNzaXZlIHRlcm1zIGFkZGVkIGluIGFjY29yZCB3aXRoIHNlY3Rpb24gNyBhcHBseSB0byB0aGUgY29kZTsga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwgcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uXG5cbiAgIFlvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwgYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS5cblxuICAgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy5cblxuICAgWW91IG1heSBjb252ZXkgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBvciB0aGUgbW9kaWZpY2F0aW9ucyB0byBwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczpcblxuICAgICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkIGl0LCBhbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS5cblxuICAgICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRlciBzZWN0aW9uIDcuIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0byBcImtlZXAgaW50YWN0IGFsbCBub3RpY2VzXCIuXG5cbiAgICAgIGMpIFlvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSB3b3JrLCBhcyBhIHdob2xlLCB1bmRlciB0aGlzIExpY2Vuc2UgdG8gYW55b25lIHdobyBjb21lcyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiBUaGlzIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3IGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8gcGVybWlzc2lvbiB0byBsaWNlbnNlIHRoZSB3b3JrIGluIGFueSBvdGhlciB3YXksIGJ1dCBpdCBkb2VzIG5vdCBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LlxuXG4gICAgICBkKSBJZiB0aGUgd29yayBoYXMgaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2VzLCBlYWNoIG11c3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIgd29yayBuZWVkIG5vdCBtYWtlIHRoZW0gZG8gc28uXG5cbiAgIEEgY29tcGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MsIHdoaWNoIGFyZSBub3QgYnkgdGhlaXIgbmF0dXJlIGV4dGVuc2lvbnMgb2YgdGhlIGNvdmVyZWQgd29yaywgYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbiBcImFnZ3JlZ2F0ZVwiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrIGluIGFuIGFnZ3JlZ2F0ZSBkb2VzIG5vdCBjYXVzZSB0aGlzIExpY2Vuc2UgdG8gYXBwbHkgdG8gdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBhZ2dyZWdhdGUuXG5cbiAgIDYuIENvbnZleWluZyBOb24tU291cmNlIEZvcm1zLlxuXG4gICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9ucyA0IGFuZCA1LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0aGUgbWFjaGluZS1yZWFkYWJsZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiBvbmUgb2YgdGhlc2Ugd2F5czpcblxuICAgICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdCAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmaXhlZCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLlxuXG4gICAgICBiKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0IChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYW5kIHZhbGlkIGZvciBhcyBsb25nIGFzIHlvdSBvZmZlciBzcGFyZSBwYXJ0cyBvciBjdXN0b21lciBzdXBwb3J0IGZvciB0aGF0IHByb2R1Y3QgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYSBjb3B5IG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYWxsIHRoZSBzb2Z0d2FyZSBpbiB0aGUgcHJvZHVjdCB0aGF0IGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubyBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHRoaXMgY29udmV5aW5nIG9mIHNvdXJjZSwgb3IgKDIpIGFjY2VzcyB0byBjb3B5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLlxuXG4gICAgICBjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZSB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiBUaGlzIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseSwgYW5kIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIHN1YnNlY3Rpb24gNmIuXG5cbiAgICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlIChncmF0aXMgb3IgZm9yIGEgY2hhcmdlKSwgYW5kIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkgdGhyb3VnaCB0aGUgc2FtZSBwbGFjZSBhdCBubyBmdXJ0aGVyIGNoYXJnZS4gWW91IG5lZWQgbm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gSWYgdGhlIHBsYWNlIHRvIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBtYXkgYmUgb24gYSBkaWZmZXJlbnQgc2VydmVyIChvcGVyYXRlZCBieSB5b3Ugb3IgYSB0aGlyZCBwYXJ0eSkgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSwgeW91IHJlbWFpbiBvYmxpZ2F0ZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0byBzYXRpc2Z5IHRoZXNlIHJlcXVpcmVtZW50cy5cblxuICAgICAgZSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uLCBwcm92aWRlZCB5b3UgaW5mb3JtIG90aGVyIHBlZXJzIHdoZXJlIHRoZSBvYmplY3QgY29kZSBhbmQgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vIGNoYXJnZSB1bmRlciBzdWJzZWN0aW9uIDZkLlxuXG4gICBBIHNlcGFyYWJsZSBwb3J0aW9uIG9mIHRoZSBvYmplY3QgY29kZSwgd2hvc2Ugc291cmNlIGNvZGUgaXMgZXhjbHVkZWQgZnJvbSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYXMgYSBTeXN0ZW0gTGlicmFyeSwgbmVlZCBub3QgYmUgaW5jbHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLlxuXG4gICBBIFwiVXNlciBQcm9kdWN0XCIgaXMgZWl0aGVyICgxKSBhIFwiY29uc3VtZXIgcHJvZHVjdFwiLCB3aGljaCBtZWFucyBhbnkgdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwgb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbiBpbnRvIGEgZHdlbGxpbmcuIEluIGRldGVybWluaW5nIHdoZXRoZXIgYSBwcm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCwgZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuIEZvciBhIHBhcnRpY3VsYXIgcHJvZHVjdCByZWNlaXZlZCBieSBhIHBhcnRpY3VsYXIgdXNlciwgXCJub3JtYWxseSB1c2VkXCIgcmVmZXJzIHRvIGEgdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzIG9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyIGFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gQSBwcm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHByb2R1Y3QgaGFzIHN1YnN0YW50aWFsIGNvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50IHRoZSBvbmx5IHNpZ25pZmljYW50IG1vZGUgb2YgdXNlIG9mIHRoZSBwcm9kdWN0LlxuXG4gICBcIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvblwiIGZvciBhIFVzZXIgUHJvZHVjdCBtZWFucyBhbnkgbWV0aG9kcywgcHJvY2VkdXJlcywgYXV0aG9yaXphdGlvbiBrZXlzLCBvciBvdGhlciBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBpbnN0YWxsIGFuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZyb20gYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGl0cyBDb3JyZXNwb25kaW5nIFNvdXJjZS4gVGhlIGluZm9ybWF0aW9uIG11c3Qgc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QgY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UgbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuXG5cbiAgIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yIHNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzIHBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZSBVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhIGZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uIEJ1dCB0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5IGlmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsIG1vZGlmaWVkIG9iamVjdCBjb2RlIG9uIHRoZSBVc2VyIFByb2R1Y3QgKGZvciBleGFtcGxlLCB0aGUgd29yayBoYXMgYmVlbiBpbnN0YWxsZWQgaW4gUk9NKS5cblxuICAgVGhlIHJlcXVpcmVtZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYSByZXF1aXJlbWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwgd2FycmFudHksIG9yIHVwZGF0ZXMgZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IgdGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQuIEFjY2VzcyB0byBhIG5ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kIGFkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsgb3IgdmlvbGF0ZXMgdGhlIHJ1bGVzIGFuZCBwcm90b2NvbHMgZm9yIGNvbW11bmljYXRpb24gYWNyb3NzIHRoZSBuZXR3b3JrLlxuXG4gICBDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCwgYW5kIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBwcm92aWRlZCwgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBpcyBwdWJsaWNseSBkb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtKSwgYW5kIG11c3QgcmVxdWlyZSBubyBzcGVjaWFsIHBhc3N3b3JkIG9yIGtleSBmb3IgdW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuXG5cbiAgIDcuIEFkZGl0aW9uYWwgVGVybXMuXG5cbiAgIFwiQWRkaXRpb25hbCBwZXJtaXNzaW9uc1wiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLiBBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsIGJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQgdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBhcHBseSBvbmx5IHRvIHBhcnQgb2YgdGhlIFByb2dyYW0sIHRoYXQgcGFydCBtYXkgYmUgdXNlZCBzZXBhcmF0ZWx5IHVuZGVyIHRob3NlIHBlcm1pc3Npb25zLCBidXQgdGhlIGVudGlyZSBQcm9ncmFtIHJlbWFpbnMgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLlxuXG4gICBXaGVuIHlvdSBjb252ZXkgYSBjb3B5IG9mIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIHJlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZiBpdC4gKEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5IGJlIHdyaXR0ZW4gdG8gcmVxdWlyZSB0aGVpciBvd24gcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pIFlvdSBtYXkgcGxhY2UgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLCBmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uXG5cbiAgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOlxuXG4gICAgICBhKSBEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3JcblxuICAgICAgYikgUmVxdWlyaW5nIHByZXNlcnZhdGlvbiBvZiBzcGVjaWZpZWQgcmVhc29uYWJsZSBsZWdhbCBub3RpY2VzIG9yIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyBkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3JcblxuICAgICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvciByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbiByZWFzb25hYmxlIHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9yXG5cbiAgICAgIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IgYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yXG5cbiAgICAgIGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIG9yIHNlcnZpY2UgbWFya3M7IG9yXG5cbiAgICAgIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQgbWF0ZXJpYWwgYnkgYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvciBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uIHRob3NlIGxpY2Vuc29ycyBhbmQgYXV0aG9ycy5cblxuICAgQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQgXCJmdXJ0aGVyIHJlc3RyaWN0aW9uc1wiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiBJZiB0aGUgUHJvZ3JhbSBhcyB5b3UgcmVjZWl2ZWQgaXQsIG9yIGFueSBwYXJ0IG9mIGl0LCBjb250YWlucyBhIG5vdGljZSBzdGF0aW5nIHRoYXQgaXQgaXMgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJtIHRoYXQgaXMgYSBmdXJ0aGVyIHJlc3RyaWN0aW9uLCB5b3UgbWF5IHJlbW92ZSB0aGF0IHRlcm0uIElmIGEgbGljZW5zZSBkb2N1bWVudCBjb250YWlucyBhIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMgTGljZW5zZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoYXQgbGljZW5zZSBkb2N1bWVudCwgcHJvdmlkZWQgdGhhdCB0aGUgZnVydGhlciByZXN0cmljdGlvbiBkb2VzIG5vdCBzdXJ2aXZlIHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLlxuXG4gICBJZiB5b3UgYWRkIHRlcm1zIHRvIGEgY292ZXJlZCB3b3JrIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiwgeW91IG11c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZSBhZGRpdGlvbmFsIHRlcm1zIHRoYXQgYXBwbHkgdG8gdGhvc2UgZmlsZXMsIG9yIGEgbm90aWNlIGluZGljYXRpbmcgd2hlcmUgdG8gZmluZCB0aGUgYXBwbGljYWJsZSB0ZXJtcy5cblxuICAgQWRkaXRpb25hbCB0ZXJtcywgcGVybWlzc2l2ZSBvciBub24tcGVybWlzc2l2ZSwgbWF5IGJlIHN0YXRlZCBpbiB0aGUgZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0ZWQgYXMgZXhjZXB0aW9uczsgdGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LlxuXG4gICA4LiBUZXJtaW5hdGlvbi5cblxuICAgWW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvciBtb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZCBwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuXG5cbiAgIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKSBwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kIGZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLlxuXG4gICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUgcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0IGNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIgeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuXG5cbiAgIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlIGxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2UuIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkgcmVpbnN0YXRlZCwgeW91IGRvIG5vdCBxdWFsaWZ5IHRvIHJlY2VpdmUgbmV3IGxpY2Vuc2VzIGZvciB0aGUgc2FtZSBtYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLlxuXG4gICA5LiBBY2NlcHRhbmNlIE5vdCBSZXF1aXJlZCBmb3IgSGF2aW5nIENvcGllcy5cblxuICAgWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yIHJ1biBhIGNvcHkgb2YgdGhlIFByb2dyYW0uIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yayBvY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiB0byByZWNlaXZlIGEgY29weSBsaWtld2lzZSBkb2VzIG5vdCByZXF1aXJlIGFjY2VwdGFuY2UuIEhvd2V2ZXIsIG5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvciBtb2RpZnkgYW55IGNvdmVyZWQgd29yay4gVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBwcm9wYWdhdGluZyBhIGNvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uXG5cbiAgIDEwLiBBdXRvbWF0aWMgTGljZW5zaW5nIG9mIERvd25zdHJlYW0gUmVjaXBpZW50cy5cblxuICAgRWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3JzLCB0byBydW4sIG1vZGlmeSBhbmQgcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLlxuXG4gICBBbiBcImVudGl0eSB0cmFuc2FjdGlvblwiIGlzIGEgdHJhbnNhY3Rpb24gdHJhbnNmZXJyaW5nIGNvbnRyb2wgb2YgYW4gb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbiBvcmdhbml6YXRpb24sIG9yIG1lcmdpbmcgb3JnYW5pemF0aW9ucy4gSWYgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0IHRyYW5zYWN0aW9uIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIHdvcmsgYWxzbyByZWNlaXZlcyB3aGF0ZXZlciBsaWNlbnNlcyB0byB0aGUgd29yayB0aGUgcGFydHkncyBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCBoYWQgb3IgY291bGQgZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgZnJvbSB0aGUgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QsIGlmIHRoZSBwcmVkZWNlc3NvciBoYXMgaXQgb3IgY2FuIGdldCBpdCB3aXRoIHJlYXNvbmFibGUgZWZmb3J0cy5cblxuICAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkIHVuZGVyIHRoaXMgTGljZW5zZS4gRm9yIGV4YW1wbGUsIHlvdSBtYXkgbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24gKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yIHNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC5cblxuICAgMTEuIFBhdGVudHMuXG5cbiAgIEEgXCJjb250cmlidXRvclwiIGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcyBMaWNlbnNlIG9mIHRoZSBQcm9ncmFtIG9yIGEgd29yayBvbiB3aGljaCB0aGUgUHJvZ3JhbSBpcyBiYXNlZC4gVGhlIHdvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNvbnRyaWJ1dG9yJ3MgXCJjb250cmlidXRvciB2ZXJzaW9uXCIuXG5cbiAgIEEgY29udHJpYnV0b3IncyBcImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zXCIgYXJlIGFsbCBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwgcGVybWl0dGVkIGJ5IHRoaXMgTGljZW5zZSwgb2YgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBpdHMgY29udHJpYnV0b3IgdmVyc2lvbiwgYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZlcnNpb24uIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbFwiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudCBwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kIHByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uXG5cbiAgIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSBcInBhdGVudCBsaWNlbnNlXCIgaXMgYW55IGV4cHJlc3MgYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50IChzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBub3QgdG8gc3VlIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50KS4gVG8gXCJncmFudFwiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhIHBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS5cblxuICAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwgYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUgdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYSBwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLCB0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvIGF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUgcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudCBsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gXCJLbm93aW5nbHkgcmVseWluZ1wiIG1lYW5zIHlvdSBoYXZlIGFjdHVhbCBrbm93bGVkZ2UgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5aW5nIHRoZSBjb3ZlcmVkIHdvcmsgaW4gYSBjb3VudHJ5LCBvciB5b3VyIHJlY2lwaWVudCdzIHVzZSBvZiB0aGUgY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdCBjb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJlIHZhbGlkLlxuXG4gICBJZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yIGFycmFuZ2VtZW50LCB5b3UgY29udmV5LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGEgY292ZXJlZCB3b3JrLCBhbmQgZ3JhbnQgYSBwYXRlbnQgbGljZW5zZSB0byBzb21lIG9mIHRoZSBwYXJ0aWVzIHJlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsIG1vZGlmeSBvciBjb252ZXkgYSBzcGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVudCBsaWNlbnNlIHlvdSBncmFudCBpcyBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBjb3ZlcmVkIHdvcmsgYW5kIHdvcmtzIGJhc2VkIG9uIGl0LlxuXG4gICBBIHBhdGVudCBsaWNlbnNlIGlzIFwiZGlzY3JpbWluYXRvcnlcIiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbiB0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcyBjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUgc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaWYgeW91IGFyZSBhIHBhcnR5IHRvIGFuIGFycmFuZ2VtZW50IHdpdGggYSB0aGlyZCBwYXJ0eSB0aGF0IGlzIGluIHRoZSBidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoIHlvdSBtYWtlIHBheW1lbnQgdG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcgdGhlIHdvcmssIGFuZCB1bmRlciB3aGljaCB0aGUgdGhpcmQgcGFydHkgZ3JhbnRzLCB0byBhbnkgb2YgdGhlIHBhcnRpZXMgd2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeSBwYXRlbnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrIGNvbnZleWVkIGJ5IHlvdSAob3IgY29waWVzIG1hZGUgZnJvbSB0aG9zZSBjb3BpZXMpLCBvciAoYikgcHJpbWFyaWx5IGZvciBhbmQgaW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0IGNvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwgb3IgdGhhdCBwYXRlbnQgbGljZW5zZSB3YXMgZ3JhbnRlZCwgcHJpb3IgdG8gMjggTWFyY2ggMjAwNy5cblxuICAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZyBhbnkgaW1wbGllZCBsaWNlbnNlIG9yIG90aGVyIGRlZmVuc2VzIHRvIGluZnJpbmdlbWVudCB0aGF0IG1heSBvdGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcuXG5cbiAgIDEyLiBObyBTdXJyZW5kZXIgb2YgT3RoZXJzJyBGcmVlZG9tLlxuXG4gICBJZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGNvbnZleSBpdCBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UgdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5IHRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uXG5cbiAgIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuXG4gICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlIHBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQgdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZSBjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gVGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssIGJ1dCB0aGUgc3BlY2lhbCByZXF1aXJlbWVudHMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgc2VjdGlvbiAxMywgY29uY2VybmluZyBpbnRlcmFjdGlvbiB0aHJvdWdoIGEgbmV0d29yayB3aWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBhcyBzdWNoLlxuXG4gICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuXG5cbiAgIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgXCJvciBhbnkgbGF0ZXIgdmVyc2lvblwiIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBudW1iZXJlZCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLlxuXG4gICBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzIHB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhIHZlcnNpb24gcGVybWFuZW50bHkgYXV0aG9yaXplcyB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uXG5cbiAgIExhdGVyIGxpY2Vuc2UgdmVyc2lvbnMgbWF5IGdpdmUgeW91IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IHBlcm1pc3Npb25zLiBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueSBhdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhIGxhdGVyIHZlcnNpb24uXG5cbiAgIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LlxuXG4gICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gXCJBUyBJU1wiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uXG5cbiAgIDE2LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS5cblxuICAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTU9ESUZJRVMgQU5EL09SIENPTlZFWVMgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuICAgMTcuIEludGVycHJldGF0aW9uIG9mIFNlY3Rpb25zIDE1IGFuZCAxNi5cblxuSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkIGFib3ZlIGNhbm5vdCBiZSBnaXZlbiBsb2NhbCBsZWdhbCBlZmZlY3QgYWNjb3JkaW5nIHRvIHRoZWlyIHRlcm1zLCByZXZpZXdpbmcgY291cnRzIHNoYWxsIGFwcGx5IGxvY2FsIGxhdyB0aGF0IG1vc3QgY2xvc2VseSBhcHByb3hpbWF0ZXMgYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBQcm9ncmFtLCB1bmxlc3MgYSB3YXJyYW50eSBvciBhc3N1bXB0aW9uIG9mIGxpYWJpbGl0eSBhY2NvbXBhbmllcyBhIGNvcHkgb2YgdGhlIFByb2dyYW0gaW4gcmV0dXJuIGZvciBhIGZlZS4gRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TXG5cbkhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtc1xuXG5JZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0IHBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQgZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuXG5cblRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiBJdCBpcyBzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBzdGF0ZSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZSBcImNvcHlyaWdodFwiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuXG5cblx1MDAzY29uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLlx1MDAzZVxuXG5Db3B5cmlnaHQgKEMpIFx1MDAzY3llYXJcdTAwM2UgXHUwMDNjbmFtZSBvZiBhdXRob3JcdTAwM2VcblxuVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG5Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgXHUwMDNjaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9cdTAwM2UuXG5cbkFsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLlxuXG5JZiB0aGUgcHJvZ3JhbSBkb2VzIHRlcm1pbmFsIGludGVyYWN0aW9uLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZTpcblxuXHUwMDNjcHJvZ3JhbVx1MDAzZSBDb3B5cmlnaHQgKEMpIFx1MDAzY3llYXJcdTAwM2UgXHUwMDNjbmFtZSBvZiBhdXRob3JcdTAwM2VcblxuVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy5cblxuVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuXG5cblRoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gT2YgY291cnNlLCB5b3VyIHByb2dyYW0ncyBjb21tYW5kcyBtaWdodCBiZSBkaWZmZXJlbnQ7IGZvciBhIEdVSSBpbnRlcmZhY2UsIHlvdSB3b3VsZCB1c2UgYW4gXCJhYm91dCBib3hcIi5cblxuWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgXCJjb3B5cmlnaHQgZGlzY2xhaW1lclwiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLCBhbmQgaG93IHRvIGFwcGx5IGFuZCBmb2xsb3cgdGhlIEdOVSBHUEwsIHNlZSBcdTAwM2NodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL1x1MDAzZS5cblxuVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlIGxpYnJhcnkuIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuIEJ1dCBmaXJzdCwgcGxlYXNlIHJlYWQgXHUwMDNjaHR0cHM6Ly93d3cuZ251Lm9yZy8gbGljZW5zZXMgL3doeS1ub3QtbGdwbC5odG1sXHUwMDNlLiJdLCJsaWNlbnNlSWRzIjpbIkdQTC0zLjAtb3ItbGF0ZXIiLCJHUEwtMy4wLW9ubHkiLCJHUEwtMy4wKyIsIkdQTC0zLjAiXSwia2V5d29yZHMiOlsiY29weXJpZ2h0IDIwMDcgZnJlZSIsIm9mIHdvcmtzIHRoZSIsIndvcmtzIHRoZSBsaWNlbnNlcyIsIml0cyB1c2VycyB3ZSIsInVzZXJzIHdlIHRoZSIsIndlIHRoZSBmcmVlIiwic29mdHdhcmUgZm91bmRhdGlvbiB1c2UiLCJmb3VuZGF0aW9uIHVzZSB0aGUiLCJsaWNlbnNlIGZvciBtb3N0IiwiZm9yIG1vc3Qgb2YiLCJtb3N0IG9mIG91ciIsIm9mIG91ciBzb2Z0d2FyZSIsIm91ciBzb2Z0d2FyZSBpdCIsInNvZnR3YXJlIGl0IGFwcGxpZXMiLCJpdCBhcHBsaWVzIGFsc28iLCJhcHBsaWVzIGFsc28gdG8iLCJhbHNvIHRvIGFueSIsImFueSBvdGhlciB3b3JrIiwib3RoZXIgd29yayByZWxlYXNlZCIsIndvcmsgcmVsZWFzZWQgdGhpcyIsInJlbGVhc2VkIHRoaXMgd2F5IiwidGhpcyB3YXkgYnkiLCJ3YXkgYnkgaXRzIiwiYnkgaXRzIGF1dGhvcnMiLCJpdHMgYXV0aG9ycyB5b3UiLCJhdXRob3JzIHlvdSBjYW4iLCJuZWVkIHRvIHByZXZlbnQiLCJ0byBwcmV2ZW50IG90aGVycyIsInByZXZlbnQgb3RoZXJzIGZyb20iLCJvdGhlcnMgZnJvbSBkZW55aW5nIiwiZnJvbSBkZW55aW5nIHlvdSIsImRlbnlpbmcgeW91IHRoZXNlIiwicmlnaHRzIG9yIGFza2luZyIsIm9yIGFza2luZyB5b3UiLCJhc2tpbmcgeW91IHRvIiwidGhlIHJpZ2h0cyB0aGVyZWZvcmUiLCJyaWdodHMgdGhlcmVmb3JlIHlvdSIsInRoZXJlZm9yZSB5b3UgaGF2ZSIsInlvdSBoYXZlIGNlcnRhaW4iLCJoYXZlIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyIsImNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiIsInJlc3BvbnNpYmlsaXRpZXMgaWYgeW91IiwibW9kaWZ5IGl0IHJlc3BvbnNpYmlsaXRpZXMiLCJpdCByZXNwb25zaWJpbGl0aWVzIHRvIiwicmVzcG9uc2liaWxpdGllcyB0byByZXNwZWN0IiwidG8gcmVzcGVjdCB0aGUiLCJyZXNwZWN0IHRoZSBmcmVlZG9tIiwiZnJlZWRvbSBvZiBvdGhlcnMiLCJvdGhlcnMgZm9yIGV4YW1wbGUiLCJtdXN0IHBhc3Mgb24iLCJwYXNzIG9uIHRvIiwib24gdG8gdGhlIiwidGhlIHJlY2lwaWVudHMgdGhlIiwicmVjaXBpZW50cyB0aGUgc2FtZSIsImZyZWVkb21zIHRoYXQgeW91IiwieW91IHJlY2VpdmVkIHlvdSIsInJlY2VpdmVkIHlvdSBtdXN0IiwidGhlaXIgcmlnaHRzIGRldmVsb3BlcnMiLCJyaWdodHMgZGV2ZWxvcGVycyB0aGF0IiwidGhhdCB1c2UgdGhlIiwiZ251IGdwbCBwcm90ZWN0IiwiZ3BsIHByb3RlY3QgeW91ciIsInRoaXMgbGljZW5zZSBnaXZpbmciLCJsaWNlbnNlIGdpdmluZyB5b3UiLCJnaXZpbmcgeW91IGxlZ2FsIiwiaXQgZm9yIHRoZSIsImZvciB0aGUgZGV2ZWxvcGVycyIsInRoZSBkZXZlbG9wZXJzIGFuZCIsImRldmVsb3BlcnMgYW5kIGF1dGhvcnMiLCJhbmQgYXV0aG9ycyBwcm90ZWN0aW9uIiwiYXV0aG9ycyBwcm90ZWN0aW9uIHRoZSIsInByb3RlY3Rpb24gdGhlIGdwbCIsInRoZSBncGwgY2xlYXJseSIsImdwbCBjbGVhcmx5IGV4cGxhaW5zIiwiY2xlYXJseSBleHBsYWlucyB0aGF0IiwiZXhwbGFpbnMgdGhhdCB0aGVyZSIsInNvZnR3YXJlIGZvciBib3RoIiwiZm9yIGJvdGggdXNlcnMiLCJib3RoIHVzZXJzIGFuZCIsInVzZXJzIGFuZCBhdXRob3JzIiwiYW5kIGF1dGhvcnMgc2FrZSIsImF1dGhvcnMgc2FrZSB0aGUiLCJzYWtlIHRoZSBncGwiLCJ0aGUgZ3BsIHJlcXVpcmVzIiwiZ3BsIHJlcXVpcmVzIHRoYXQiLCJyZXF1aXJlcyB0aGF0IG1vZGlmaWVkIiwibW9kaWZpZWQgdmVyc2lvbnMgYmUiLCJ2ZXJzaW9ucyBiZSBtYXJrZWQiLCJtYXJrZWQgYXMgY2hhbmdlZCIsImFzIGNoYW5nZWQgc28iLCJjaGFuZ2VkIHNvIHRoYXQiLCJzbyB0aGF0IHRoZWlyIiwidGhhdCB0aGVpciBwcm9ibGVtcyIsInRoZWlyIHByb2JsZW1zIHdpbGwiLCJwcm9ibGVtcyB3aWxsIG5vdCIsIm5vdCBiZSBhdHRyaWJ1dGVkIiwiYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSIsImF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8iLCJlcnJvbmVvdXNseSB0byBhdXRob3JzIiwidG8gYXV0aG9ycyBvZiIsImF1dGhvcnMgb2YgcHJldmlvdXMiLCJwcmV2aW91cyB2ZXJzaW9ucyBzb21lIiwidmVyc2lvbnMgc29tZSBkZXZpY2VzIiwic29tZSBkZXZpY2VzIGFyZSIsImRldmljZXMgYXJlIGRlc2lnbmVkIiwiZGVzaWduZWQgdG8gZGVueSIsInRvIGRlbnkgdXNlcnMiLCJkZW55IHVzZXJzIGFjY2VzcyIsInVzZXJzIGFjY2VzcyB0byIsImFjY2VzcyB0byBpbnN0YWxsIiwidG8gaW5zdGFsbCBvciIsImluc3RhbGwgb3IgcnVuIiwib3IgcnVuIG1vZGlmaWVkIiwicnVuIG1vZGlmaWVkIHZlcnNpb25zIiwidGhlIHNvZnR3YXJlIGluc2lkZSIsInNvZnR3YXJlIGluc2lkZSB0aGVtIiwiaW5zaWRlIHRoZW0gYWx0aG91Z2giLCJ0aGVtIGFsdGhvdWdoIHRoZSIsImFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIiLCJ0aGUgbWFudWZhY3R1cmVyIGNhbiIsIm1hbnVmYWN0dXJlciBjYW4gZG8iLCJkbyBzbyB0aGlzIiwic28gdGhpcyBpcyIsInRoaXMgaXMgZnVuZGFtZW50YWxseSIsImlzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIiwiZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCIsIndpdGggdGhlIGFpbSIsInRoZSBhaW0gb2YiLCJhaW0gb2YgcHJvdGVjdGluZyIsIm9mIHByb3RlY3RpbmcgdXNlcnMiLCJwcm90ZWN0aW5nIHVzZXJzIGZyZWVkb20iLCJ1c2VycyBmcmVlZG9tIHRvIiwiZnJlZWRvbSB0byBjaGFuZ2UiLCJzb2Z0d2FyZSB0aGUgc3lzdGVtYXRpYyIsInRoZSBzeXN0ZW1hdGljIHBhdHRlcm4iLCJzeXN0ZW1hdGljIHBhdHRlcm4gb2YiLCJwYXR0ZXJuIG9mIHN1Y2giLCJvZiBzdWNoIGFidXNlIiwic3VjaCBhYnVzZSBvY2N1cnMiLCJhYnVzZSBvY2N1cnMgaW4iLCJvY2N1cnMgaW4gdGhlIiwiaW4gdGhlIGFyZWEiLCJ0aGUgYXJlYSBvZiIsImFyZWEgb2YgcHJvZHVjdHMiLCJvZiBwcm9kdWN0cyBmb3IiLCJwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMiLCJmb3IgaW5kaXZpZHVhbHMgdG8iLCJpbmRpdmlkdWFscyB0byB1c2UiLCJ0byB1c2Ugd2hpY2giLCJ3aGljaCBpcyBwcmVjaXNlbHkiLCJpcyBwcmVjaXNlbHkgd2hlcmUiLCJwcmVjaXNlbHkgd2hlcmUgaXQiLCJpdCBpcyBtb3N0IiwiaXMgbW9zdCB1bmFjY2VwdGFibGUiLCJtb3N0IHVuYWNjZXB0YWJsZSB0aGVyZWZvcmUiLCJ1bmFjY2VwdGFibGUgdGhlcmVmb3JlIHdlIiwidGhlcmVmb3JlIHdlIGhhdmUiLCJkZXNpZ25lZCB0aGlzIHZlcnNpb24iLCJncGwgdG8gcHJvaGliaXQiLCJ0byBwcm9oaWJpdCB0aGUiLCJwcm9oaWJpdCB0aGUgcHJhY3RpY2UiLCJ0aGUgcHJhY3RpY2UgZm9yIiwicHJhY3RpY2UgZm9yIHRob3NlIiwiZm9yIHRob3NlIHByb2R1Y3RzIiwidGhvc2UgcHJvZHVjdHMgaWYiLCJwcm9kdWN0cyBpZiBzdWNoIiwiaWYgc3VjaCBwcm9ibGVtcyIsInN1Y2ggcHJvYmxlbXMgYXJpc2UiLCJwcm9ibGVtcyBhcmlzZSBzdWJzdGFudGlhbGx5IiwiYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiIsInN1YnN0YW50aWFsbHkgaW4gb3RoZXIiLCJpbiBvdGhlciBkb21haW5zIiwib3RoZXIgZG9tYWlucyB3ZSIsImRvbWFpbnMgd2Ugc3RhbmQiLCJ3ZSBzdGFuZCByZWFkeSIsInN0YW5kIHJlYWR5IHRvIiwicmVhZHkgdG8gZXh0ZW5kIiwidG8gZXh0ZW5kIHRoaXMiLCJleHRlbmQgdGhpcyBwcm92aXNpb24iLCJ0aGlzIHByb3Zpc2lvbiB0byIsInByb3Zpc2lvbiB0byB0aG9zZSIsInRvIHRob3NlIGRvbWFpbnMiLCJ0aG9zZSBkb21haW5zIGluIiwiZG9tYWlucyBpbiBmdXR1cmUiLCJ0aGUgZ3BsIGFzIiwiZ3BsIGFzIG5lZWRlZCIsIm5lZWRlZCB0byBwcm90ZWN0IiwiZnJlZWRvbSBvZiB1c2VycyIsIm9mIHVzZXJzIGZpbmFsbHkiLCJ1c2VycyBmaW5hbGx5IGV2ZXJ5IiwiZmluYWxseSBldmVyeSBwcm9ncmFtIiwiZXZlcnkgcHJvZ3JhbSBpcyIsInNvZnR3YXJlIHBhdGVudHMgc3RhdGVzIiwicGF0ZW50cyBzdGF0ZXMgc2hvdWxkIiwic3RhdGVzIHNob3VsZCBub3QiLCJzaG91bGQgbm90IGFsbG93Iiwibm90IGFsbG93IHBhdGVudHMiLCJhbGxvdyBwYXRlbnRzIHRvIiwicGF0ZW50cyB0byByZXN0cmljdCIsInRvIHJlc3RyaWN0IGRldmVsb3BtZW50Il19LHsibGljZW5zZVRleHRzIjpbIu+7v2luc2VydCBHUEwgdjMgdGV4dCBoZXJlIEdDQyBSVU5USU1FIExJQlJBUlkgRVhDRVBUSU9OXG5cblZlcnNpb24gMy4xLCAzMSBNYXJjaCAyMDA5XG5cbkdlbmVyYWwgaW5mb3JtYXRpb246IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9nY2MtZXhjZXB0aW9uLmh0bWxcblxuQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiBcdTAwM2NodHRwOi8vZnNmLm9yZy9cdTAwM2VcblxuRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLlxuXG5UaGlzIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIChcIkV4Y2VwdGlvblwiKSBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzIChcIkdQTHYzXCIpLiBJdCBhcHBsaWVzIHRvIGEgZ2l2ZW4gZmlsZSAodGhlIFwiUnVudGltZSBMaWJyYXJ5XCIpIHRoYXQgYmVhcnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBmaWxlIHN0YXRpbmcgdGhhdCB0aGUgZmlsZSBpcyBnb3Zlcm5lZCBieSBHUEx2MyBhbG9uZyB3aXRoIHRoaXMgRXhjZXB0aW9uLlxuXG5XaGVuIHlvdSB1c2UgR0NDIHRvIGNvbXBpbGUgYSBwcm9ncmFtLCBHQ0MgbWF5IGNvbWJpbmUgcG9ydGlvbnMgb2YgY2VydGFpbiBHQ0MgaGVhZGVyIGZpbGVzIGFuZCBydW50aW1lIGxpYnJhcmllcyB3aXRoIHRoZSBjb21waWxlZCBwcm9ncmFtLiBUaGUgcHVycG9zZSBvZiB0aGlzIEV4Y2VwdGlvbiBpcyB0byBhbGxvdyBjb21waWxhdGlvbiBvZiBub24tR1BMIChpbmNsdWRpbmcgcHJvcHJpZXRhcnkpIHByb2dyYW1zIHRvIHVzZSwgaW4gdGhpcyB3YXksIHRoZSBoZWFkZXIgZmlsZXMgYW5kIHJ1bnRpbWUgbGlicmFyaWVzIGNvdmVyZWQgYnkgdGhpcyBFeGNlcHRpb24uXG5cbiAgIDAuIERlZmluaXRpb25zLlxuXG4gICBBIGZpbGUgaXMgYW4gXCJJbmRlcGVuZGVudCBNb2R1bGVcIiBpZiBpdCBlaXRoZXIgcmVxdWlyZXMgdGhlIFJ1bnRpbWUgTGlicmFyeSBmb3IgZXhlY3V0aW9uIGFmdGVyIGEgQ29tcGlsYXRpb24gUHJvY2Vzcywgb3IgbWFrZXMgdXNlIG9mIGFuIGludGVyZmFjZSBwcm92aWRlZCBieSB0aGUgUnVudGltZSBMaWJyYXJ5LCBidXQgaXMgbm90IG90aGVyd2lzZSBiYXNlZCBvbiB0aGUgUnVudGltZSBMaWJyYXJ5LlxuXG4gICBcIkdDQ1wiIG1lYW5zIGEgdmVyc2lvbiBvZiB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBnb3Zlcm5lZCBieSB2ZXJzaW9uIDMgKG9yIGEgc3BlY2lmaWVkIGxhdGVyIHZlcnNpb24pIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB3aXRoIHRoZSBvcHRpb24gb2YgdXNpbmcgYW55IHN1YnNlcXVlbnQgdmVyc2lvbnMgcHVibGlzaGVkIGJ5IHRoZSBGU0YuXG5cbiAgIFwiR1BMLWNvbXBhdGlibGUgU29mdHdhcmVcIiBpcyBzb2Z0d2FyZSB3aG9zZSBjb25kaXRpb25zIG9mIHByb3BhZ2F0aW9uLCBtb2RpZmljYXRpb24gYW5kIHVzZSB3b3VsZCBwZXJtaXQgY29tYmluYXRpb24gd2l0aCBHQ0MgaW4gYWNjb3JkIHdpdGggdGhlIGxpY2Vuc2Ugb2YgR0NDLlxuXG4gICBcIlRhcmdldCBDb2RlXCIgcmVmZXJzIHRvIG91dHB1dCBmcm9tIGFueSBjb21waWxlciBmb3IgYSByZWFsIG9yIHZpcnR1YWwgdGFyZ2V0IHByb2Nlc3NvciBhcmNoaXRlY3R1cmUsIGluIGV4ZWN1dGFibGUgZm9ybSBvciBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gYW4gYXNzZW1ibGVyLCBsb2FkZXIsIGxpbmtlciBhbmQvb3IgZXhlY3V0aW9uIHBoYXNlLiBOb3R3aXRoc3RhbmRpbmcgdGhhdCwgVGFyZ2V0IENvZGUgZG9lcyBub3QgaW5jbHVkZSBkYXRhIGluIGFueSBmb3JtYXQgdGhhdCBpcyB1c2VkIGFzIGEgY29tcGlsZXIgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLCBvciB1c2VkIGZvciBwcm9kdWNpbmcgYSBjb21waWxlciBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24uXG5cbiAgIFRoZSBcIkNvbXBpbGF0aW9uIFByb2Nlc3NcIiB0cmFuc2Zvcm1zIGNvZGUgZW50aXJlbHkgcmVwcmVzZW50ZWQgaW4gbm9uLWludGVybWVkaWF0ZSBsYW5ndWFnZXMgZGVzaWduZWQgZm9yIGh1bWFuLXdyaXR0ZW4gY29kZSwgYW5kL29yIGluIEphdmEgVmlydHVhbCBNYWNoaW5lIGJ5dGUgY29kZSwgaW50byBUYXJnZXQgQ29kZS4gVGh1cywgZm9yIGV4YW1wbGUsIHVzZSBvZiBzb3VyY2UgY29kZSBnZW5lcmF0b3JzIGFuZCBwcmVwcm9jZXNzb3JzIG5lZWQgbm90IGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgQ29tcGlsYXRpb24gUHJvY2Vzcywgc2luY2UgdGhlIENvbXBpbGF0aW9uIFByb2Nlc3MgY2FuIGJlIHVuZGVyc3Rvb2QgYXMgc3RhcnRpbmcgd2l0aCB0aGUgb3V0cHV0IG9mIHRoZSBnZW5lcmF0b3JzIG9yIHByZXByb2Nlc3NvcnMuXG5cbiAgIEEgQ29tcGlsYXRpb24gUHJvY2VzcyBpcyBcIkVsaWdpYmxlXCIgaWYgaXQgaXMgZG9uZSB1c2luZyBHQ0MsIGFsb25lIG9yIHdpdGggb3RoZXIgR1BMLWNvbXBhdGlibGUgc29mdHdhcmUsIG9yIGlmIGl0IGlzIGRvbmUgd2l0aG91dCB1c2luZyBhbnkgd29yayBiYXNlZCBvbiBHQ0MuIEZvciBleGFtcGxlLCB1c2luZyBub24tR1BMLWNvbXBhdGlibGUgU29mdHdhcmUgdG8gb3B0aW1pemUgYW55IEdDQyBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb25zIHdvdWxkIG5vdCBxdWFsaWZ5IGFzIGFuIEVsaWdpYmxlIENvbXBpbGF0aW9uIFByb2Nlc3MuXG5cbiAgIDEuIEdyYW50IG9mIEFkZGl0aW9uYWwgUGVybWlzc2lvbi5cblxuICAgWW91IGhhdmUgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgYSB3b3JrIG9mIFRhcmdldCBDb2RlIGZvcm1lZCBieSBjb21iaW5pbmcgdGhlIFJ1bnRpbWUgTGlicmFyeSB3aXRoIEluZGVwZW5kZW50IE1vZHVsZXMsIGV2ZW4gaWYgc3VjaCBwcm9wYWdhdGlvbiB3b3VsZCBvdGhlcndpc2UgdmlvbGF0ZSB0aGUgdGVybXMgb2YgR1BMdjMsIHByb3ZpZGVkIHRoYXQgYWxsIFRhcmdldCBDb2RlIHdhcyBnZW5lcmF0ZWQgYnkgRWxpZ2libGUgQ29tcGlsYXRpb24gUHJvY2Vzc2VzLiBZb3UgbWF5IHRoZW4gY29udmV5IHN1Y2ggYSBjb21iaW5hdGlvbiB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgY29uc2lzdGVudCB3aXRoIHRoZSBsaWNlbnNpbmcgb2YgdGhlIEluZGVwZW5kZW50IE1vZHVsZXMuXG5cbiAgIDIuIE5vIFdlYWtlbmluZyBvZiBHQ0MgQ29weWxlZnQuXG5cblRoZSBhdmFpbGFiaWxpdHkgb2YgdGhpcyBFeGNlcHRpb24gZG9lcyBub3QgaW1wbHkgYW55IGdlbmVyYWwgcHJlc3VtcHRpb24gdGhhdCB0aGlyZC1wYXJ0eSBzb2Z0d2FyZSBpcyB1bmFmZmVjdGVkIGJ5IHRoZSBjb3B5bGVmdCByZXF1aXJlbWVudHMgb2YgdGhlIGxpY2Vuc2Ugb2YgR0NDLiJdLCJsaWNlbnNlSWRzIjpbIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIl0sImtleXdvcmRzIjpbImhlcmUgZ2NjIHJ1bnRpbWUiLCJsaWJyYXJ5IGV4Y2VwdGlvbiB2ZXJzaW9uIiwiMyAxIDMxIiwiMSAzMSBtYXJjaCIsIjMxIG1hcmNoIDIwMDkiLCJtYXJjaCAyMDA5IGdlbmVyYWwiLCIyMDA5IGdlbmVyYWwgaW5mb3JtYXRpb24iLCJnZW5lcmFsIGluZm9ybWF0aW9uIGh0dHAiLCJpbmZvcm1hdGlvbiBodHRwIHd3dyIsIm9yZyBsaWNlbnNlcyBnY2MiLCJsaWNlbnNlcyBnY2MgZXhjZXB0aW9uIiwiZ2NjIGV4Y2VwdGlvbiBodG1sIiwiZXhjZXB0aW9uIGh0bWwgY29weXJpZ2h0IiwiaHRtbCBjb3B5cmlnaHQgYyIsImMgMjAwOSBmcmVlIiwiYWxsb3dlZCB0aGlzIGdjYyIsInRoaXMgZ2NjIHJ1bnRpbWUiLCJsaWJyYXJ5IGV4Y2VwdGlvbiBleGNlcHRpb24iLCJleGNlcHRpb24gZXhjZXB0aW9uIGlzIiwiZ2l2ZW4gZmlsZSB0aGUiLCJmaWxlIHRoZSBydW50aW1lIiwicnVudGltZSBsaWJyYXJ5IHRoYXQiLCJsaWJyYXJ5IHRoYXQgYmVhcnMiLCJ0aGlzIGV4Y2VwdGlvbiB3aGVuIiwiZXhjZXB0aW9uIHdoZW4geW91IiwieW91IHVzZSBnY2MiLCJ1c2UgZ2NjIHRvIiwiZ2NjIHRvIGNvbXBpbGUiLCJ0byBjb21waWxlIGEiLCJjb21waWxlIGEgcHJvZ3JhbSIsImEgcHJvZ3JhbSBnY2MiLCJwcm9ncmFtIGdjYyBtYXkiLCJnY2MgbWF5IGNvbWJpbmUiLCJtYXkgY29tYmluZSBwb3J0aW9ucyIsImNvbWJpbmUgcG9ydGlvbnMgb2YiLCJwb3J0aW9ucyBvZiBjZXJ0YWluIiwib2YgY2VydGFpbiBnY2MiLCJjZXJ0YWluIGdjYyBoZWFkZXIiLCJnY2MgaGVhZGVyIGZpbGVzIiwicnVudGltZSBsaWJyYXJpZXMgd2l0aCIsImxpYnJhcmllcyB3aXRoIHRoZSIsIndpdGggdGhlIGNvbXBpbGVkIiwidGhlIGNvbXBpbGVkIHByb2dyYW0iLCJjb21waWxlZCBwcm9ncmFtIHRoZSIsInByb2dyYW0gdGhlIHB1cnBvc2UiLCJ0byBhbGxvdyBjb21waWxhdGlvbiIsImFsbG93IGNvbXBpbGF0aW9uIG9mIiwiY29tcGlsYXRpb24gb2Ygbm9uIiwib2Ygbm9uIGdwbCIsIm5vbiBncGwgaW5jbHVkaW5nIiwiZ3BsIGluY2x1ZGluZyBwcm9wcmlldGFyeSIsImluY2x1ZGluZyBwcm9wcmlldGFyeSBwcm9ncmFtcyIsInByb3ByaWV0YXJ5IHByb2dyYW1zIHRvIiwidXNlIGluIHRoaXMiLCJ0aGlzIHdheSB0aGUiLCJ3YXkgdGhlIGhlYWRlciIsInRoZSBoZWFkZXIgZmlsZXMiLCJydW50aW1lIGxpYnJhcmllcyBjb3ZlcmVkIiwibGlicmFyaWVzIGNvdmVyZWQgYnkiLCJieSB0aGlzIGV4Y2VwdGlvbiIsInRoaXMgZXhjZXB0aW9uIDAiLCJleGNlcHRpb24gMCBkZWZpbml0aW9ucyIsImRlZmluaXRpb25zIGEgZmlsZSIsImZpbGUgaXMgYW4iLCJpcyBhbiBpbmRlcGVuZGVudCIsImluZGVwZW5kZW50IG1vZHVsZSBpZiIsIm1vZHVsZSBpZiBpdCIsImlmIGl0IGVpdGhlciIsIml0IGVpdGhlciByZXF1aXJlcyIsImVpdGhlciByZXF1aXJlcyB0aGUiLCJyZXF1aXJlcyB0aGUgcnVudGltZSIsInJ1bnRpbWUgbGlicmFyeSBmb3IiLCJsaWJyYXJ5IGZvciBleGVjdXRpb24iLCJmb3IgZXhlY3V0aW9uIGFmdGVyIiwiZXhlY3V0aW9uIGFmdGVyIGEiLCJhZnRlciBhIGNvbXBpbGF0aW9uIiwiY29tcGlsYXRpb24gcHJvY2VzcyBvciIsInByb2Nlc3Mgb3IgbWFrZXMiLCJvciBtYWtlcyB1c2UiLCJieSB0aGUgcnVudGltZSIsInJ1bnRpbWUgbGlicmFyeSBidXQiLCJvbiB0aGUgcnVudGltZSIsInJ1bnRpbWUgbGlicmFyeSBnY2MiLCJsaWJyYXJ5IGdjYyBtZWFucyIsImdjYyBtZWFucyBhIiwidGhlIGdudSBjb21waWxlciIsImdudSBjb21waWxlciBjb2xsZWN0aW9uIiwiY29tcGlsZXIgY29sbGVjdGlvbiB3aXRoIiwiY29sbGVjdGlvbiB3aXRoIG9yIiwid2l0aG91dCBtb2RpZmljYXRpb25zIGdvdmVybmVkIiwibW9kaWZpY2F0aW9ucyBnb3Zlcm5lZCBieSIsIjMgb3IgYSIsIm9yIGEgc3BlY2lmaWVkIiwiYSBzcGVjaWZpZWQgbGF0ZXIiLCJzcGVjaWZpZWQgbGF0ZXIgdmVyc2lvbiIsImxpY2Vuc2UgZ3BsIHdpdGgiLCJncGwgd2l0aCB0aGUiLCJ3aXRoIHRoZSBvcHRpb24iLCJvcHRpb24gb2YgdXNpbmciLCJvZiB1c2luZyBhbnkiLCJ1c2luZyBhbnkgc3Vic2VxdWVudCIsImFueSBzdWJzZXF1ZW50IHZlcnNpb25zIiwic3Vic2VxdWVudCB2ZXJzaW9ucyBwdWJsaXNoZWQiLCJ2ZXJzaW9ucyBwdWJsaXNoZWQgYnkiLCJieSB0aGUgZnNmIiwidGhlIGZzZiBncGwiLCJmc2YgZ3BsIGNvbXBhdGlibGUiLCJjb21wYXRpYmxlIHNvZnR3YXJlIGlzIiwic29mdHdhcmUgaXMgc29mdHdhcmUiLCJpcyBzb2Z0d2FyZSB3aG9zZSIsInNvZnR3YXJlIHdob3NlIGNvbmRpdGlvbnMiLCJ3aG9zZSBjb25kaXRpb25zIG9mIiwiY29uZGl0aW9ucyBvZiBwcm9wYWdhdGlvbiIsIm9mIHByb3BhZ2F0aW9uIG1vZGlmaWNhdGlvbiIsInByb3BhZ2F0aW9uIG1vZGlmaWNhdGlvbiBhbmQiLCJtb2RpZmljYXRpb24gYW5kIHVzZSIsImFuZCB1c2Ugd291bGQiLCJ1c2Ugd291bGQgcGVybWl0Iiwid291bGQgcGVybWl0IGNvbWJpbmF0aW9uIiwicGVybWl0IGNvbWJpbmF0aW9uIHdpdGgiLCJjb21iaW5hdGlvbiB3aXRoIGdjYyIsIndpdGggZ2NjIGluIiwiZ2NjIGluIGFjY29yZCIsImFjY29yZCB3aXRoIHRoZSIsIm9mIGdjYyB0YXJnZXQiLCJnY2MgdGFyZ2V0IGNvZGUiLCJ0YXJnZXQgY29kZSByZWZlcnMiLCJyZWZlcnMgdG8gb3V0cHV0IiwidG8gb3V0cHV0IGZyb20iLCJvdXRwdXQgZnJvbSBhbnkiLCJmcm9tIGFueSBjb21waWxlciIsImFueSBjb21waWxlciBmb3IiLCJjb21waWxlciBmb3IgYSIsImZvciBhIHJlYWwiLCJhIHJlYWwgb3IiLCJyZWFsIG9yIHZpcnR1YWwiLCJvciB2aXJ0dWFsIHRhcmdldCIsInZpcnR1YWwgdGFyZ2V0IHByb2Nlc3NvciIsInRhcmdldCBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlIiwicHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBpbiIsImFyY2hpdGVjdHVyZSBpbiBleGVjdXRhYmxlIiwiZXhlY3V0YWJsZSBmb3JtIG9yIiwiZm9ybSBvciBzdWl0YWJsZSIsIm9yIHN1aXRhYmxlIGZvciIsImlucHV0IHRvIGFuIiwidG8gYW4gYXNzZW1ibGVyIiwiYW4gYXNzZW1ibGVyIGxvYWRlciIsImFzc2VtYmxlciBsb2FkZXIgbGlua2VyIiwibG9hZGVyIGxpbmtlciBhbmQiLCJsaW5rZXIgYW5kIG9yIiwiYW5kIG9yIGV4ZWN1dGlvbiIsIm9yIGV4ZWN1dGlvbiBwaGFzZSIsImV4ZWN1dGlvbiBwaGFzZSBub3R3aXRoc3RhbmRpbmciLCJwaGFzZSBub3R3aXRoc3RhbmRpbmcgdGhhdCIsIm5vdHdpdGhzdGFuZGluZyB0aGF0IHRhcmdldCIsInRoYXQgdGFyZ2V0IGNvZGUiLCJ0YXJnZXQgY29kZSBkb2VzIiwibm90IGluY2x1ZGUgZGF0YSIsImluY2x1ZGUgZGF0YSBpbiIsImRhdGEgaW4gYW55IiwiaW4gYW55IGZvcm1hdCIsImFueSBmb3JtYXQgdGhhdCIsImlzIHVzZWQgYXMiLCJhcyBhIGNvbXBpbGVyIiwiaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uIG9yIiwicmVwcmVzZW50YXRpb24gb3IgdXNlZCIsIm9yIHVzZWQgZm9yIiwidXNlZCBmb3IgcHJvZHVjaW5nIiwiZm9yIHByb2R1Y2luZyBhIiwicHJvZHVjaW5nIGEgY29tcGlsZXIiLCJpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gdGhlIiwicmVwcmVzZW50YXRpb24gdGhlIGNvbXBpbGF0aW9uIiwiY29tcGlsYXRpb24gcHJvY2VzcyB0cmFuc2Zvcm1zIiwicHJvY2VzcyB0cmFuc2Zvcm1zIGNvZGUiLCJ0cmFuc2Zvcm1zIGNvZGUgZW50aXJlbHkiLCJjb2RlIGVudGlyZWx5IHJlcHJlc2VudGVkIiwiZW50aXJlbHkgcmVwcmVzZW50ZWQgaW4iLCJyZXByZXNlbnRlZCBpbiBub24iLCJpbiBub24gaW50ZXJtZWRpYXRlIiwibm9uIGludGVybWVkaWF0ZSBsYW5ndWFnZXMiLCJpbnRlcm1lZGlhdGUgbGFuZ3VhZ2VzIGRlc2lnbmVkIiwibGFuZ3VhZ2VzIGRlc2lnbmVkIGZvciIsImZvciBodW1hbiB3cml0dGVuIiwiaHVtYW4gd3JpdHRlbiBjb2RlIiwid3JpdHRlbiBjb2RlIGFuZCIsIm9yIGluIGphdmEiLCJpbiBqYXZhIHZpcnR1YWwiLCJqYXZhIHZpcnR1YWwgbWFjaGluZSIsInZpcnR1YWwgbWFjaGluZSBieXRlIiwibWFjaGluZSBieXRlIGNvZGUiLCJieXRlIGNvZGUgaW50byIsImNvZGUgaW50byB0YXJnZXQiLCJpbnRvIHRhcmdldCBjb2RlIiwidGFyZ2V0IGNvZGUgdGh1cyIsImNvZGUgdGh1cyBmb3IiLCJ0aHVzIGZvciBleGFtcGxlIiwiZm9yIGV4YW1wbGUgdXNlIiwiZXhhbXBsZSB1c2Ugb2YiLCJ1c2Ugb2Ygc291cmNlIiwic291cmNlIGNvZGUgZ2VuZXJhdG9ycyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJpbnNlcnQgR1BMIHYzIHRleHQgaGVyZVxuXG5BVVRPQ09ORiBDT05GSUdVUkUgU0NSSVBUIEVYQ0VQVElPTlxuXG5WZXJzaW9uIDMuMCwgMTggQXVndXN0IDIwMDlcblxuQ29weXJpZ2h0IMKpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIFx1MDAzZWh0dHA6Ly9mc2Yub3JnL1x1MDAzY1xuXG5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuXG5cblRoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDMgKFwiR1BMdjNcIikuIEl0IGFwcGxpZXMgdG8gYSBnaXZlbiBmaWxlIHRoYXQgYmVhcnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBmaWxlIHN0YXRpbmcgdGhhdCB0aGUgZmlsZSBpcyBnb3Zlcm5lZCBieSBHUEx2MyBhbG9uZyB3aXRoIHRoaXMgRXhjZXB0aW9uLlxuXG5UaGUgcHVycG9zZSBvZiB0aGlzIEV4Y2VwdGlvbiBpcyB0byBhbGxvdyBkaXN0cmlidXRpb24gb2YgQXV0b2NvbmYncyB0eXBpY2FsIG91dHB1dCB1bmRlciB0ZXJtcyBvZiB0aGUgcmVjaXBpZW50J3MgY2hvaWNlIChpbmNsdWRpbmcgcHJvcHJpZXRhcnkpLlxuXG4gICAwLiBEZWZpbml0aW9ucy5cblxuICAgXCJDb3ZlcmVkIENvZGVcIiBpcyB0aGUgc291cmNlIG9yIG9iamVjdCBjb2RlIG9mIGEgdmVyc2lvbiBvZiBBdXRvY29uZiB0aGF0IGlzIGEgY292ZXJlZCB3b3JrIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgXCJOb3JtYWxseSBDb3BpZWQgQ29kZVwiIGZvciBhIHZlcnNpb24gb2YgQXV0b2NvbmYgbWVhbnMgYWxsIHBhcnRzIG9mIGl0cyBDb3ZlcmVkIENvZGUgd2hpY2ggdGhhdCB2ZXJzaW9uIGNhbiBjb3B5IGZyb20gaXRzIGNvZGUgKGkuZS4sIG5vdCBmcm9tIGl0cyBpbnB1dCBmaWxlKSBpbnRvIGl0cyBtaW5pbWFsbHkgdmVyYm9zZSwgbm9uLWRlYnVnZ2luZyBhbmQgbm9uLXRyYWNpbmcgb3V0cHV0LlxuXG4gICBcIkluZWxpZ2libGUgQ29kZVwiIGlzIENvdmVyZWQgQ29kZSB0aGF0IGlzIG5vdCBOb3JtYWxseSBDb3BpZWQgQ29kZS5cblxuICAgMS4gR3JhbnQgb2YgQWRkaXRpb25hbCBQZXJtaXNzaW9uLlxuXG4gICBZb3UgaGF2ZSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvdXRwdXQgb2YgQXV0b2NvbmYsIGV2ZW4gaWYgc3VjaCBwcm9wYWdhdGlvbiB3b3VsZCBvdGhlcndpc2UgdmlvbGF0ZSB0aGUgdGVybXMgb2YgR1BMdjMuIEhvd2V2ZXIsIGlmIGJ5IG1vZGlmeWluZyBBdXRvY29uZiB5b3UgY2F1c2UgYW55IEluZWxpZ2libGUgQ29kZSBvZiB0aGUgdmVyc2lvbiB5b3UgcmVjZWl2ZWQgdG8gYmVjb21lIE5vcm1hbGx5IENvcGllZCBDb2RlIG9mIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiwgdGhlbiB5b3Ugdm9pZCB0aGlzIEV4Y2VwdGlvbiBmb3IgdGhlIHJlc3VsdGluZyBjb3ZlcmVkIHdvcmsuIElmIHlvdSBjb252ZXkgdGhhdCByZXN1bHRpbmcgY292ZXJlZCB3b3JrLCB5b3UgbXVzdCByZW1vdmUgdGhpcyBFeGNlcHRpb24gaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBzZWNvbmQgcGFyYWdyYXBoIG9mIFNlY3Rpb24gNyBvZiBHUEx2My5cblxuICAgMi4gTm8gV2Vha2VuaW5nIG9mIEF1dG9jb25mIENvcHlsZWZ0LlxuXG4gICBUaGUgYXZhaWxhYmlsaXR5IG9mIHRoaXMgRXhjZXB0aW9uIGRvZXMgbm90IGltcGx5IGFueSBnZW5lcmFsIHByZXN1bXB0aW9uIHRoYXQgdGhpcmQtcGFydHkgc29mdHdhcmUgaXMgdW5hZmZlY3RlZCBieSB0aGUgY29weWxlZnQgcmVxdWlyZW1lbnRzIG9mIHRoZSBsaWNlbnNlIG9mIEF1dG9jb25mLiJdLCJsaWNlbnNlSWRzIjpbIkdQTC0zLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24iXSwia2V5d29yZHMiOlsiaGVyZSBhdXRvY29uZiBjb25maWd1cmUiLCJhdXRvY29uZiBjb25maWd1cmUgc2NyaXB0IiwiY29uZmlndXJlIHNjcmlwdCBleGNlcHRpb24iLCJzY3JpcHQgZXhjZXB0aW9uIHZlcnNpb24iLCIzIDAgMTgiLCIwIDE4IGF1Z3VzdCIsIjE4IGF1Z3VzdCAyMDA5IiwiYXVndXN0IDIwMDkgY29weXJpZ2h0IiwiMjAwOSBjb3B5cmlnaHQgMjAwOSIsImNvcHlyaWdodCAyMDA5IGZyZWUiLCJhbGxvd2VkIHRoaXMgZXhjZXB0aW9uIiwiZ2l2ZW4gZmlsZSB0aGF0IiwiZmlsZSB0aGF0IGJlYXJzIiwidGhpcyBleGNlcHRpb24gdGhlIiwiZXhjZXB0aW9uIHRoZSBwdXJwb3NlIiwidG8gYWxsb3cgZGlzdHJpYnV0aW9uIiwiYWxsb3cgZGlzdHJpYnV0aW9uIG9mIiwiZGlzdHJpYnV0aW9uIG9mIGF1dG9jb25mIiwib2YgYXV0b2NvbmYgcyIsImF1dG9jb25mIHMgdHlwaWNhbCIsInMgdHlwaWNhbCBvdXRwdXQiLCJ0eXBpY2FsIG91dHB1dCB1bmRlciIsIm91dHB1dCB1bmRlciB0ZXJtcyIsInJlY2lwaWVudCBzIGNob2ljZSIsInMgY2hvaWNlIGluY2x1ZGluZyIsImNob2ljZSBpbmNsdWRpbmcgcHJvcHJpZXRhcnkiLCJpbmNsdWRpbmcgcHJvcHJpZXRhcnkgMCIsInByb3ByaWV0YXJ5IDAgZGVmaW5pdGlvbnMiLCIwIGRlZmluaXRpb25zIGNvdmVyZWQiLCJkZWZpbml0aW9ucyBjb3ZlcmVkIGNvZGUiLCJpcyB0aGUgc291cmNlIiwib2YgYXV0b2NvbmYgdGhhdCIsImF1dG9jb25mIHRoYXQgaXMiLCJpcyBhIGNvdmVyZWQiLCJ0aGlzIGxpY2Vuc2Ugbm9ybWFsbHkiLCJsaWNlbnNlIG5vcm1hbGx5IGNvcGllZCIsImNvcGllZCBjb2RlIGZvciIsIm9mIGF1dG9jb25mIG1lYW5zIiwiYXV0b2NvbmYgbWVhbnMgYWxsIiwibWVhbnMgYWxsIHBhcnRzIiwicGFydHMgb2YgaXRzIiwib2YgaXRzIGNvdmVyZWQiLCJpdHMgY292ZXJlZCBjb2RlIiwiY29kZSB3aGljaCB0aGF0Iiwid2hpY2ggdGhhdCB2ZXJzaW9uIiwidGhhdCB2ZXJzaW9uIGNhbiIsInZlcnNpb24gY2FuIGNvcHkiLCJjYW4gY29weSBmcm9tIiwiY29weSBmcm9tIGl0cyIsImZyb20gaXRzIGNvZGUiLCJpdHMgY29kZSBpIiwiY29kZSBpIGUiLCJlIG5vdCBmcm9tIiwibm90IGZyb20gaXRzIiwiZnJvbSBpdHMgaW5wdXQiLCJpdHMgaW5wdXQgZmlsZSIsImlucHV0IGZpbGUgaW50byIsImZpbGUgaW50byBpdHMiLCJpbnRvIGl0cyBtaW5pbWFsbHkiLCJpdHMgbWluaW1hbGx5IHZlcmJvc2UiLCJtaW5pbWFsbHkgdmVyYm9zZSBub24iLCJ2ZXJib3NlIG5vbiBkZWJ1Z2dpbmciLCJub24gZGVidWdnaW5nIGFuZCIsImRlYnVnZ2luZyBhbmQgbm9uIiwiYW5kIG5vbiB0cmFjaW5nIiwibm9uIHRyYWNpbmcgb3V0cHV0IiwidHJhY2luZyBvdXRwdXQgaW5lbGlnaWJsZSIsIm91dHB1dCBpbmVsaWdpYmxlIGNvZGUiLCJpbmVsaWdpYmxlIGNvZGUgaXMiLCJjb2RlIGlzIGNvdmVyZWQiLCJpcyBjb3ZlcmVkIGNvZGUiLCJpcyBub3Qgbm9ybWFsbHkiLCJub3Qgbm9ybWFsbHkgY29waWVkIiwiY29waWVkIGNvZGUgMSIsImNvZGUgMSBncmFudCIsInRvIHByb3BhZ2F0ZSBvdXRwdXQiLCJwcm9wYWdhdGUgb3V0cHV0IG9mIiwib2YgYXV0b2NvbmYgZXZlbiIsImF1dG9jb25mIGV2ZW4gaWYiLCJvZiBncGx2MyBob3dldmVyIiwiZ3BsdjMgaG93ZXZlciBpZiIsImhvd2V2ZXIgaWYgYnkiLCJpZiBieSBtb2RpZnlpbmciLCJieSBtb2RpZnlpbmcgYXV0b2NvbmYiLCJtb2RpZnlpbmcgYXV0b2NvbmYgeW91IiwiYXV0b2NvbmYgeW91IGNhdXNlIiwieW91IGNhdXNlIGFueSIsImNhdXNlIGFueSBpbmVsaWdpYmxlIiwiYW55IGluZWxpZ2libGUgY29kZSIsImluZWxpZ2libGUgY29kZSBvZiIsInlvdSByZWNlaXZlZCB0byIsInJlY2VpdmVkIHRvIGJlY29tZSIsInRvIGJlY29tZSBub3JtYWxseSIsImJlY29tZSBub3JtYWxseSBjb3BpZWQiLCJjb3BpZWQgY29kZSBvZiIsIm1vZGlmaWVkIHZlcnNpb24gdGhlbiIsInZlcnNpb24gdGhlbiB5b3UiLCJ0aGVuIHlvdSB2b2lkIiwieW91IHZvaWQgdGhpcyIsInZvaWQgdGhpcyBleGNlcHRpb24iLCJ0aGlzIGV4Y2VwdGlvbiBmb3IiLCJleGNlcHRpb24gZm9yIHRoZSIsImZvciB0aGUgcmVzdWx0aW5nIiwieW91IGNvbnZleSB0aGF0IiwiY29udmV5IHRoYXQgcmVzdWx0aW5nIiwidGhhdCByZXN1bHRpbmcgY292ZXJlZCIsIm11c3QgcmVtb3ZlIHRoaXMiLCJyZW1vdmUgdGhpcyBleGNlcHRpb24iLCJ0aGlzIGV4Y2VwdGlvbiBpbiIsImV4Y2VwdGlvbiBpbiBhY2NvcmRhbmNlIiwid2l0aCB0aGUgc2Vjb25kIiwidGhlIHNlY29uZCBwYXJhZ3JhcGgiLCJzZWNvbmQgcGFyYWdyYXBoIG9mIiwiNyBvZiBncGx2MyIsIm9mIGdwbHYzIDIiLCJncGx2MyAyIG5vIiwid2Vha2VuaW5nIG9mIGF1dG9jb25mIiwib2YgYXV0b2NvbmYgY29weWxlZnQiLCJhdXRvY29uZiBjb3B5bGVmdCB0aGUiLCJsaWNlbnNlIG9mIGF1dG9jb25mIiwidjMgdGV4dCBoZXJlIGF1dG9jb25mIiwidGV4dCBoZXJlIGF1dG9jb25mIGNvbmZpZ3VyZSIsImhlcmUgYXV0b2NvbmYgY29uZmlndXJlIHNjcmlwdCIsImF1dG9jb25mIGNvbmZpZ3VyZSBzY3JpcHQgZXhjZXB0aW9uIiwiY29uZmlndXJlIHNjcmlwdCBleGNlcHRpb24gdmVyc2lvbiIsInNjcmlwdCBleGNlcHRpb24gdmVyc2lvbiAzIiwiZXhjZXB0aW9uIHZlcnNpb24gMyAwIiwidmVyc2lvbiAzIDAgMTgiLCIzIDAgMTggYXVndXN0IiwiMCAxOCBhdWd1c3QgMjAwOSIsIjE4IGF1Z3VzdCAyMDA5IGNvcHlyaWdodCIsImF1Z3VzdCAyMDA5IGNvcHlyaWdodCAyMDA5IiwiMjAwOSBjb3B5cmlnaHQgMjAwOSBmcmVlIiwiY29weXJpZ2h0IDIwMDkgZnJlZSBzb2Z0d2FyZSIsIm5vdCBhbGxvd2VkIHRoaXMgZXhjZXB0aW9uIiwiYWxsb3dlZCB0aGlzIGV4Y2VwdGlvbiBpcyIsInRoaXMgZXhjZXB0aW9uIGlzIGFuIiwiYSBnaXZlbiBmaWxlIHRoYXQiLCJnaXZlbiBmaWxlIHRoYXQgYmVhcnMiLCJmaWxlIHRoYXQgYmVhcnMgYSIsIndpdGggdGhpcyBleGNlcHRpb24gdGhlIiwidGhpcyBleGNlcHRpb24gdGhlIHB1cnBvc2UiLCJleGNlcHRpb24gdGhlIHB1cnBvc2Ugb2YiLCJpcyB0byBhbGxvdyBkaXN0cmlidXRpb24iLCJ0byBhbGxvdyBkaXN0cmlidXRpb24gb2YiLCJhbGxvdyBkaXN0cmlidXRpb24gb2YgYXV0b2NvbmYiLCJkaXN0cmlidXRpb24gb2YgYXV0b2NvbmYgcyIsIm9mIGF1dG9jb25mIHMgdHlwaWNhbCIsImF1dG9jb25mIHMgdHlwaWNhbCBvdXRwdXQiLCJzIHR5cGljYWwgb3V0cHV0IHVuZGVyIiwidHlwaWNhbCBvdXRwdXQgdW5kZXIgdGVybXMiLCJvdXRwdXQgdW5kZXIgdGVybXMgb2YiLCJ1bmRlciB0ZXJtcyBvZiB0aGUiLCJ0ZXJtcyBvZiB0aGUgcmVjaXBpZW50IiwidGhlIHJlY2lwaWVudCBzIGNob2ljZSIsInJlY2lwaWVudCBzIGNob2ljZSBpbmNsdWRpbmciLCJzIGNob2ljZSBpbmNsdWRpbmcgcHJvcHJpZXRhcnkiLCJjaG9pY2UgaW5jbHVkaW5nIHByb3ByaWV0YXJ5IDAiLCJpbmNsdWRpbmcgcHJvcHJpZXRhcnkgMCBkZWZpbml0aW9ucyIsInByb3ByaWV0YXJ5IDAgZGVmaW5pdGlvbnMgY292ZXJlZCIsIjAgZGVmaW5pdGlvbnMgY292ZXJlZCBjb2RlIiwiZGVmaW5pdGlvbnMgY292ZXJlZCBjb2RlIGlzIiwiY292ZXJlZCBjb2RlIGlzIHRoZSIsImNvZGUgaXMgdGhlIHNvdXJjZSIsImlzIHRoZSBzb3VyY2Ugb3IiLCJ0aGUgc291cmNlIG9yIG9iamVjdCIsIm9yIG9iamVjdCBjb2RlIG9mIiwib2JqZWN0IGNvZGUgb2YgYSIsImNvZGUgb2YgYSB2ZXJzaW9uIiwib2YgYSB2ZXJzaW9uIG9mIiwidmVyc2lvbiBvZiBhdXRvY29uZiB0aGF0Iiwib2YgYXV0b2NvbmYgdGhhdCBpcyIsImF1dG9jb25mIHRoYXQgaXMgYSIsInRoYXQgaXMgYSBjb3ZlcmVkIiwiaXMgYSBjb3ZlcmVkIHdvcmsiLCJjb3ZlcmVkIHdvcmsgdW5kZXIgdGhpcyIsInVuZGVyIHRoaXMgbGljZW5zZSBub3JtYWxseSIsInRoaXMgbGljZW5zZSBub3JtYWxseSBjb3BpZWQiLCJsaWNlbnNlIG5vcm1hbGx5IGNvcGllZCBjb2RlIiwibm9ybWFsbHkgY29waWVkIGNvZGUgZm9yIiwiY29waWVkIGNvZGUgZm9yIGEiLCJjb2RlIGZvciBhIHZlcnNpb24iLCJ2ZXJzaW9uIG9mIGF1dG9jb25mIG1lYW5zIiwib2YgYXV0b2NvbmYgbWVhbnMgYWxsIiwiYXV0b2NvbmYgbWVhbnMgYWxsIHBhcnRzIiwibWVhbnMgYWxsIHBhcnRzIG9mIiwiYWxsIHBhcnRzIG9mIGl0cyIsInBhcnRzIG9mIGl0cyBjb3ZlcmVkIiwib2YgaXRzIGNvdmVyZWQgY29kZSIsIml0cyBjb3ZlcmVkIGNvZGUgd2hpY2giLCJjb3ZlcmVkIGNvZGUgd2hpY2ggdGhhdCIsImNvZGUgd2hpY2ggdGhhdCB2ZXJzaW9uIiwid2hpY2ggdGhhdCB2ZXJzaW9uIGNhbiIsInRoYXQgdmVyc2lvbiBjYW4gY29weSIsInZlcnNpb24gY2FuIGNvcHkgZnJvbSIsImNhbiBjb3B5IGZyb20gaXRzIiwiY29weSBmcm9tIGl0cyBjb2RlIiwiZnJvbSBpdHMgY29kZSBpIiwiaXRzIGNvZGUgaSBlIiwiY29kZSBpIGUgbm90Il19LHsibGljZW5zZVRleHRzIjpbIkFsbGVncm8gNCAodGhlIGdpZnR3YXJlIGxpY2Vuc2UpXG5cbkFsbGVncm8gaXMgZ2lmdC13YXJlLiBJdCB3YXMgY3JlYXRlZCBieSBhIG51bWJlciBvZiBwZW9wbGUgd29ya2luZyBpbiBjb29wZXJhdGlvbiwgYW5kIGlzIGdpdmVuIHRvIHlvdSBmcmVlbHkgYXMgYSBnaWZ0LiBZb3UgbWF5IHVzZSwgbW9kaWZ5LCByZWRpc3RyaWJ1dGUsIGFuZCBnZW5lcmFsbHkgaGFjayBpdCBhYm91dCBpbiBhbnkgd2F5IHlvdSBsaWtlLCBhbmQgeW91IGRvIG5vdCBoYXZlIHRvIGdpdmUgdXMgYW55dGhpbmcgaW4gcmV0dXJuLlxuXG5Ib3dldmVyLCBpZiB5b3UgbGlrZSB0aGlzIHByb2R1Y3QgeW91IGFyZSBlbmNvdXJhZ2VkIHRvIHRoYW5rIHVzIGJ5IG1ha2luZyBhIHJldHVybiBnaWZ0IHRvIHRoZSBBbGxlZ3JvIGNvbW11bml0eS4gVGhpcyBjb3VsZCBiZSBieSB3cml0aW5nIGFuIGFkZC1vbiBwYWNrYWdlLCBwcm92aWRpbmcgYSB1c2VmdWwgYnVnIHJlcG9ydCwgbWFraW5nIGFuIGltcHJvdmVtZW50IHRvIHRoZSBsaWJyYXJ5LCBvciBwZXJoYXBzIGp1c3QgcmVsZWFzaW5nIHRoZSBzb3VyY2VzIG9mIHlvdXIgcHJvZ3JhbSBzbyB0aGF0IG90aGVyIHBlb3BsZSBjYW4gbGVhcm4gZnJvbSB0aGVtLiBJZiB5b3UgcmVkaXN0cmlidXRlIHBhcnRzIG9mIHRoaXMgY29kZSBvciBtYWtlIGEgZ2FtZSB1c2luZyBpdCwgaXQgd291bGQgYmUgbmljZSBpZiB5b3UgbWVudGlvbmVkIEFsbGVncm8gc29tZXdoZXJlIGluIHRoZSBjcmVkaXRzLCBidXQgeW91IGFyZSBub3QgcmVxdWlyZWQgdG8gZG8gdGhpcy4gV2UgdHJ1c3QgeW91IG5vdCB0byBhYnVzZSBvdXIgZ2VuZXJvc2l0eS5cblxuQnkgU2hhd24gSGFyZ3JlYXZlcywgMTggT2N0b2JlciAxOTk4LlxuXG5ESVNDTEFJTUVSOiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIl0sImxpY2Vuc2VJZHMiOlsiR2lmdHdhcmUiXSwia2V5d29yZHMiOlsiYWxsZWdybyA0IHRoZSIsIjQgdGhlIGdpZnR3YXJlIiwidGhlIGdpZnR3YXJlIGxpY2Vuc2UiLCJnaWZ0d2FyZSBsaWNlbnNlIGFsbGVncm8iLCJsaWNlbnNlIGFsbGVncm8gaXMiLCJhbGxlZ3JvIGlzIGdpZnQiLCJpcyBnaWZ0IHdhcmUiLCJnaWZ0IHdhcmUgaXQiLCJ3YXJlIGl0IHdhcyIsIml0IHdhcyBjcmVhdGVkIiwiYnkgYSBudW1iZXIiLCJvZiBwZW9wbGUgd29ya2luZyIsInBlb3BsZSB3b3JraW5nIGluIiwid29ya2luZyBpbiBjb29wZXJhdGlvbiIsImluIGNvb3BlcmF0aW9uIGFuZCIsImNvb3BlcmF0aW9uIGFuZCBpcyIsImFuZCBpcyBnaXZlbiIsImdpdmVuIHRvIHlvdSIsInRvIHlvdSBmcmVlbHkiLCJ5b3UgZnJlZWx5IGFzIiwiZnJlZWx5IGFzIGEiLCJhcyBhIGdpZnQiLCJhIGdpZnQgeW91IiwiZ2lmdCB5b3UgbWF5IiwidXNlIG1vZGlmeSByZWRpc3RyaWJ1dGUiLCJyZWRpc3RyaWJ1dGUgYW5kIGdlbmVyYWxseSIsImFuZCBnZW5lcmFsbHkgaGFjayIsImdlbmVyYWxseSBoYWNrIGl0IiwiaGFjayBpdCBhYm91dCIsIml0IGFib3V0IGluIiwiYWJvdXQgaW4gYW55Iiwid2F5IHlvdSBsaWtlIiwieW91IGxpa2UgYW5kIiwibGlrZSBhbmQgeW91IiwiaGF2ZSB0byBnaXZlIiwidG8gZ2l2ZSB1cyIsImdpdmUgdXMgYW55dGhpbmciLCJ1cyBhbnl0aGluZyBpbiIsImFueXRoaW5nIGluIHJldHVybiIsImluIHJldHVybiBob3dldmVyIiwicmV0dXJuIGhvd2V2ZXIgaWYiLCJ5b3UgbGlrZSB0aGlzIiwibGlrZSB0aGlzIHByb2R1Y3QiLCJ0aGlzIHByb2R1Y3QgeW91IiwiZW5jb3VyYWdlZCB0byB0aGFuayIsInRvIHRoYW5rIHVzIiwidGhhbmsgdXMgYnkiLCJ1cyBieSBtYWtpbmciLCJieSBtYWtpbmcgYSIsIm1ha2luZyBhIHJldHVybiIsImEgcmV0dXJuIGdpZnQiLCJyZXR1cm4gZ2lmdCB0byIsImdpZnQgdG8gdGhlIiwidG8gdGhlIGFsbGVncm8iLCJ0aGUgYWxsZWdybyBjb21tdW5pdHkiLCJhbGxlZ3JvIGNvbW11bml0eSB0aGlzIiwiY29tbXVuaXR5IHRoaXMgY291bGQiLCJjb3VsZCBiZSBieSIsImJlIGJ5IHdyaXRpbmciLCJieSB3cml0aW5nIGFuIiwid3JpdGluZyBhbiBhZGQiLCJhbiBhZGQgb24iLCJhZGQgb24gcGFja2FnZSIsIm9uIHBhY2thZ2UgcHJvdmlkaW5nIiwicGFja2FnZSBwcm92aWRpbmcgYSIsInByb3ZpZGluZyBhIHVzZWZ1bCIsImEgdXNlZnVsIGJ1ZyIsInVzZWZ1bCBidWcgcmVwb3J0IiwiYnVnIHJlcG9ydCBtYWtpbmciLCJyZXBvcnQgbWFraW5nIGFuIiwibWFraW5nIGFuIGltcHJvdmVtZW50IiwiYW4gaW1wcm92ZW1lbnQgdG8iLCJsaWJyYXJ5IG9yIHBlcmhhcHMiLCJvciBwZXJoYXBzIGp1c3QiLCJwZXJoYXBzIGp1c3QgcmVsZWFzaW5nIiwianVzdCByZWxlYXNpbmcgdGhlIiwicmVsZWFzaW5nIHRoZSBzb3VyY2VzIiwidGhlIHNvdXJjZXMgb2YiLCJzb3VyY2VzIG9mIHlvdXIiLCJ5b3VyIHByb2dyYW0gc28iLCJzbyB0aGF0IG90aGVyIiwidGhhdCBvdGhlciBwZW9wbGUiLCJvdGhlciBwZW9wbGUgY2FuIiwicGVvcGxlIGNhbiBsZWFybiIsImNhbiBsZWFybiBmcm9tIiwibGVhcm4gZnJvbSB0aGVtIiwiZnJvbSB0aGVtIGlmIiwieW91IHJlZGlzdHJpYnV0ZSBwYXJ0cyIsInJlZGlzdHJpYnV0ZSBwYXJ0cyBvZiIsInRoaXMgY29kZSBvciIsImNvZGUgb3IgbWFrZSIsIm1ha2UgYSBnYW1lIiwiYSBnYW1lIHVzaW5nIiwiZ2FtZSB1c2luZyBpdCIsInVzaW5nIGl0IGl0IiwiaXQgaXQgd291bGQiLCJpdCB3b3VsZCBiZSIsIndvdWxkIGJlIG5pY2UiLCJiZSBuaWNlIGlmIiwibmljZSBpZiB5b3UiLCJpZiB5b3UgbWVudGlvbmVkIiwieW91IG1lbnRpb25lZCBhbGxlZ3JvIiwibWVudGlvbmVkIGFsbGVncm8gc29tZXdoZXJlIiwiYWxsZWdybyBzb21ld2hlcmUgaW4iLCJpbiB0aGUgY3JlZGl0cyIsInRoZSBjcmVkaXRzIGJ1dCIsImNyZWRpdHMgYnV0IHlvdSIsInJlcXVpcmVkIHRvIGRvIiwiZG8gdGhpcyB3ZSIsInRoaXMgd2UgdHJ1c3QiLCJ3ZSB0cnVzdCB5b3UiLCJ0cnVzdCB5b3Ugbm90IiwieW91IG5vdCB0byIsIm5vdCB0byBhYnVzZSIsInRvIGFidXNlIG91ciIsImFidXNlIG91ciBnZW5lcm9zaXR5Iiwib3VyIGdlbmVyb3NpdHkgYnkiLCJnZW5lcm9zaXR5IGJ5IHNoYXduIiwiYnkgc2hhd24gaGFyZ3JlYXZlcyIsInNoYXduIGhhcmdyZWF2ZXMgMTgiLCJoYXJncmVhdmVzIDE4IG9jdG9iZXIiLCIxOCBvY3RvYmVyIDE5OTgiLCJvY3RvYmVyIDE5OTggZGlzY2xhaW1lciIsIjE5OTggZGlzY2xhaW1lciB0aGUiLCJhbGxlZ3JvIDQgdGhlIGdpZnR3YXJlIiwiNCB0aGUgZ2lmdHdhcmUgbGljZW5zZSIsInRoZSBnaWZ0d2FyZSBsaWNlbnNlIGFsbGVncm8iLCJnaWZ0d2FyZSBsaWNlbnNlIGFsbGVncm8gaXMiLCJsaWNlbnNlIGFsbGVncm8gaXMgZ2lmdCIsImFsbGVncm8gaXMgZ2lmdCB3YXJlIiwiaXMgZ2lmdCB3YXJlIGl0IiwiZ2lmdCB3YXJlIGl0IHdhcyIsIndhcmUgaXQgd2FzIGNyZWF0ZWQiLCJpdCB3YXMgY3JlYXRlZCBieSIsIndhcyBjcmVhdGVkIGJ5IGEiLCJjcmVhdGVkIGJ5IGEgbnVtYmVyIiwiYnkgYSBudW1iZXIgb2YiLCJhIG51bWJlciBvZiBwZW9wbGUiLCJudW1iZXIgb2YgcGVvcGxlIHdvcmtpbmciLCJvZiBwZW9wbGUgd29ya2luZyBpbiIsInBlb3BsZSB3b3JraW5nIGluIGNvb3BlcmF0aW9uIiwid29ya2luZyBpbiBjb29wZXJhdGlvbiBhbmQiLCJpbiBjb29wZXJhdGlvbiBhbmQgaXMiLCJjb29wZXJhdGlvbiBhbmQgaXMgZ2l2ZW4iLCJhbmQgaXMgZ2l2ZW4gdG8iLCJpcyBnaXZlbiB0byB5b3UiLCJnaXZlbiB0byB5b3UgZnJlZWx5IiwidG8geW91IGZyZWVseSBhcyIsInlvdSBmcmVlbHkgYXMgYSIsImZyZWVseSBhcyBhIGdpZnQiLCJhcyBhIGdpZnQgeW91IiwiYSBnaWZ0IHlvdSBtYXkiLCJnaWZ0IHlvdSBtYXkgdXNlIiwibWF5IHVzZSBtb2RpZnkgcmVkaXN0cmlidXRlIiwidXNlIG1vZGlmeSByZWRpc3RyaWJ1dGUgYW5kIiwibW9kaWZ5IHJlZGlzdHJpYnV0ZSBhbmQgZ2VuZXJhbGx5IiwicmVkaXN0cmlidXRlIGFuZCBnZW5lcmFsbHkgaGFjayIsImFuZCBnZW5lcmFsbHkgaGFjayBpdCIsImdlbmVyYWxseSBoYWNrIGl0IGFib3V0IiwiaGFjayBpdCBhYm91dCBpbiIsIml0IGFib3V0IGluIGFueSIsImFib3V0IGluIGFueSB3YXkiLCJhbnkgd2F5IHlvdSBsaWtlIiwid2F5IHlvdSBsaWtlIGFuZCIsInlvdSBsaWtlIGFuZCB5b3UiLCJsaWtlIGFuZCB5b3UgZG8iLCJub3QgaGF2ZSB0byBnaXZlIiwiaGF2ZSB0byBnaXZlIHVzIiwidG8gZ2l2ZSB1cyBhbnl0aGluZyIsImdpdmUgdXMgYW55dGhpbmcgaW4iLCJ1cyBhbnl0aGluZyBpbiByZXR1cm4iLCJhbnl0aGluZyBpbiByZXR1cm4gaG93ZXZlciIsImluIHJldHVybiBob3dldmVyIGlmIiwicmV0dXJuIGhvd2V2ZXIgaWYgeW91IiwiaG93ZXZlciBpZiB5b3UgbGlrZSIsImlmIHlvdSBsaWtlIHRoaXMiLCJ5b3UgbGlrZSB0aGlzIHByb2R1Y3QiLCJsaWtlIHRoaXMgcHJvZHVjdCB5b3UiLCJ0aGlzIHByb2R1Y3QgeW91IGFyZSIsInByb2R1Y3QgeW91IGFyZSBlbmNvdXJhZ2VkIiwiYXJlIGVuY291cmFnZWQgdG8gdGhhbmsiLCJlbmNvdXJhZ2VkIHRvIHRoYW5rIHVzIiwidG8gdGhhbmsgdXMgYnkiLCJ0aGFuayB1cyBieSBtYWtpbmciLCJ1cyBieSBtYWtpbmcgYSIsImJ5IG1ha2luZyBhIHJldHVybiIsIm1ha2luZyBhIHJldHVybiBnaWZ0IiwiYSByZXR1cm4gZ2lmdCB0byIsInJldHVybiBnaWZ0IHRvIHRoZSIsImdpZnQgdG8gdGhlIGFsbGVncm8iLCJ0byB0aGUgYWxsZWdybyBjb21tdW5pdHkiLCJ0aGUgYWxsZWdybyBjb21tdW5pdHkgdGhpcyIsImFsbGVncm8gY29tbXVuaXR5IHRoaXMgY291bGQiLCJjb21tdW5pdHkgdGhpcyBjb3VsZCBiZSIsInRoaXMgY291bGQgYmUgYnkiLCJjb3VsZCBiZSBieSB3cml0aW5nIiwiYmUgYnkgd3JpdGluZyBhbiIsImJ5IHdyaXRpbmcgYW4gYWRkIiwid3JpdGluZyBhbiBhZGQgb24iLCJhbiBhZGQgb24gcGFja2FnZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyIzREZYIEdMSURFIFNvdXJjZSBDb2RlIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcblxuICAgMS4gUFJFQU1CTEVcblxuICAgVGhpcyBsaWNlbnNlIGlzIGZvciBzb2Z0d2FyZSB0aGF0IHByb3ZpZGVzIGEgM0QgZ3JhcGhpY3MgYXBwbGljYXRpb24gcHJvZ3JhbSBpbnRlcmZhY2UgKEFQSSkuVGhlIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gb2ZmZXIgdGVybXMgc2ltaWxhciB0byBzb21lIHN0YW5kYXJkIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGRlc2lnbmVkIHRvIGZvc3RlciBvcGVuIHN0YW5kYXJkcyBhbmQgdW5yZXN0cmljdGVkIGFjY2Vzc2liaWxpdHkgdG8gc291cmNlIGNvZGUuIFNvbWUgb2YgdGhlc2UgbGljZW5zZXMgcmVxdWlyZSB0aGF0LCBhcyBhIGNvbmRpdGlvbiBvZiB0aGUgbGljZW5zZSBvZiB0aGUgc29mdHdhcmUsIGFueSBkZXJpdmF0aXZlIHdvcmtzICh0aGF0IGlzLCBuZXcgc29mdHdhcmUgd2hpY2ggaXMgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0KSBtdXN0IGJlIGF2YWlsYWJsZSBmb3IgZ2VuZXJhbCB1c2UsIHdpdGhvdXQgcmVzdHJpY3Rpb24gb3RoZXIgdGhhbiBmb3IgYSBtaW5vciB0cmFuc2ZlciBmZWUsIGFuZCB0aGF0IHRoZSBzb3VyY2UgY29kZSBmb3Igc3VjaCBkZXJpdmF0aXZlIHdvcmtzIG11c3QgbGlrZXdpc2UgYmUgbWFkZSBhdmFpbGFibGUuIFRoZSBvbmx5IHJlc3RyaWN0aW9uIGlzIHRoYXQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzIG11c3QgYmUgc3ViamVjdCB0byB0aGUgc2FtZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRlcm1zIGFzIHRoZSBvcmlnaW5hbCB3b3JrLlxuXG4gICBUaGlzIDNkZnggR0xJREUgU291cmNlIENvZGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkaWZmZXJzIGZyb20gdGhlIHN0YW5kYXJkIGxpY2Vuc2VzIG9mIHRoaXMgdHlwZSBpbiB0aGF0IGl0IGRvZXMgbm90IHJlcXVpcmUgdGhlIGVudGlyZSBkZXJpdmF0aXZlIHdvcmsgdG8gYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBub3IgaXMgdGhlIHJlY2lwaWVudCByZXF1aXJlZCB0byBtYWtlIGF2YWlsYWJsZSB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBlbnRpcmUgZGVyaXZhdGl2ZSB3b3JrLiBSYXRoZXIsIHRoZSBsaWNlbnNlIGlzIGxpbWl0ZWQgdG8gb25seSB0aGUgaWRlbnRpZmlhYmxlIHBvcnRpb24gb2YgdGhlIGRlcml2YXRpdmUgd29yayB0aGF0IGlzIGRlcml2ZWQgZnJvbSB0aGUgbGljZW5zZWQgc29mdHdhcmUuIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBmb2xsb3cuXG5cbiAgIDIuIERFRklOSVRJT05TXG5cbiAgICAgIDIuMSBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSAob3Igb3RoZXIgXCJ3b3JrXCIpIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIDNkZnggR0xJREUgU291cmNlIENvZGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgMi4yIFRoZSB0ZXJtIFwiUHJvZ3JhbVwiIGFzIHVzZWQgaW4gdGhpcyBBZ3JlZW1lbnQgcmVmZXJzIHRvIDNERlgncyBHTElERSBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgYW5kIGFueSBEZXJpdmF0aXZlIFdvcmsuXG5cbiAgICAgIDIuMyBcIkRlcml2YXRpdmUgV29ya1wiIG1lYW5zLCBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhlIExpY2Vuc2UsIHRoYXQgcG9ydGlvbiBvZiBhbnkgd29yayB0aGF0IGNvbnRhaW5zIHRoZSBQcm9ncmFtIG9yIHRoZSBpZGVudGlmaWFibGUgcG9ydGlvbiBvZiBhIHdvcmsgdGhhdCBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLCBhbmQgdGhhdCBwZXJmb3JtcyAzRCBncmFwaGljcyBBUEkgb3BlcmF0aW9ucy4gSXQgZG9lcyBub3QgaW5jbHVkZSBhbnkgb3RoZXIgcG9ydGlvbnMgb2YgYSB3b3JrLlxuXG4gICAgICAyLjQgXCJNb2RpZmljYXRpb25zIG9mIHRoZSBQcm9ncmFtXCIgbWVhbnMgYW55IHdvcmssIHdoaWNoIGluY2x1ZGVzIGEgRGVyaXZhdGl2ZSBXb3JrLCBhbmQgaW5jbHVkZXMgdGhlIHdob2xlIG9mIHN1Y2ggd29yay5cblxuICAgICAgMi41IFwiTGljZW5zZVwiIG1lYW5zIHRoaXMgM2RmeCBHTElERSBTb3VyY2UgQ29kZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuXG4gICAgICAyLjYgVGhlIFwiU291cmNlIENvZGVcIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgYW5kIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlIHdvcmsuXG5cbiAgICAgIDIuNyBcIjNkZnhcIiBtZWFucyAzZGZ4IEludGVyYWN0aXZlLCBJbmMuXG5cbiAgIDMuIExJQ0VOU0VEIEFDVElWSVRJRVNcblxuICAgICAgMy4xIENPUFlJTkcgLSBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MgU291cmNlIENvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHN1YmplY3QgdG8gdGhlIHByb3Zpc2lvbiBvZiBzZWN0aW9uIDMuMyBhbmQgcHJvdmlkZWQgYWxzbyB0aGF0OlxuXG4gICAgICAgICAoYSkgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSAoM2RmeCBJbnRlcmFjdGl2ZSwgSW5jLiAxOTk5KSwgYSBub3RpY2UgdGhhdCByZWNpcGllbnRzIHdobyB3aXNoIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIGNhbiBvbmx5IGRvIHNvIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLCBhbmQgYSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFzIHNldCBmb3J0aCBpbiBzZWN0aW9uIDU7XG5cbiAgICAgICAgIChiKSBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kXG5cbiAgICAgICAgIChjKSBkbyBub3QgbWFrZSBhbnkgdXNlIG9mIHRoZSBHTElERSB0cmFkZW1hcmsgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIDNkZngsIGFuZFxuXG4gICAgICAgICAoZCkgZ2l2ZSBhbGwgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0gb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBlYXNpbHkgcmVjZWl2ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAzLjIgTU9ESUZJQ0FUSU9OIE9GIFRIRSBQUk9HUkFNL0RFUklWQVRJVkUgV09SS1MgLSBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgc3ViamVjdCB0byB0aGUgcHJvdmlzaW9ucyBvZiBzZWN0aW9uIDMuMyBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICAgICAgIChhKSB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBvZiBhIERlcml2YXRpdmUgV29yayBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhIG5vdGljZSB0aGF0IHJlY2lwaWVudHMgd2hvIHdpc2ggdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIERlcml2YXRpdmUgV29yayBjYW4gb25seSBkbyBzbyBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZSwgYW5kIGEgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBhcyBzZXQgZm9ydGggaW4gc2VjdGlvbiA1O1xuXG4gICAgICAgICAoYikga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCAoYykgZ2l2ZSBhbGwgcmVjaXBpZW50cyBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3JrIG9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gZWFzaWx5IHJlY2VpdmUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgICAgKGQpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuXG5cbiAgICAgICAgIChlKSBZb3UgbXVzdCBjYXVzZSBhbnkgRGVyaXZhdGl2ZSBXb3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgICAgKGYpIFlvdSBkbyBub3QgbWFrZSBhbnkgdXNlIG9mIHRoZSBHTElERSB0cmFkZW1hcmsgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIDNkZnguXG5cbiAgICAgICAgIChnKSBJZiB0aGUgRGVyaXZhdGl2ZSBXb3JrIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaCBpbnRlcmFjdGl2ZSB1c2UsIHRvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGFzIGZvbGxvd3M6XG5cbiAgICAgICAgIFwiQ09QWVJJR0hUIDNERlggSU5URVJBQ1RJVkUsIElOQy4gMTk5OSwgQUxMIFJJR0hUUyBSRVNFUlZFRCBUSElTIFNPRlRXQVJFIElTIEZSRUUgQU5EIFBST1ZJREVEIFwiQVMgSVMsXCIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBUSEVSRSBJUyBOTyBSSUdIVCBUTyBVU0UgVEhFIEdMSURFIFRSQURFTUFSSyBXSVRIT1VUIFBSSU9SIFdSSVRURU4gUEVSTUlTU0lPTiBPRiAzREZYIElOVEVSQUNUSVZFLCBJTkMuIFNFRSBUSEUgM0RGWCBHTElERSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIEZPUiBBIEZVTEwgVEVYVCBPRiBUSEUgRElTVFJJQlVUSU9OIEFORCBOT04tV0FSUkFOVFkgUFJPVklTSU9OUyAoUkVRVUVTVCBDT1BZIEZST00gSU5GT0AzREZYLkNPTSkuXCJcblxuICAgICAgICAgKGgpIFRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBzZWN0aW9uIDMuMiBkbyBub3QgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZSBidXQgb25seSB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrLiBJdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIExpY2Vuc2UgdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgRGVyaXZhdGl2ZSBXb3Jrcy5cblxuICAgICAgMy4zIERJU1RSSUJVVElPTlxuXG4gICAgICAgICAoYSkgQWxsIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBEZXJpdmF0aXZlIFdvcmtzIHdoaWNoIGFyZSBkaXN0cmlidXRlZCBtdXN0IGluY2x1ZGUgaW4gdGhlIGZpbGUgaGVhZGVycyB0aGUgZm9sbG93aW5nIGxhbmd1YWdlIHZlcmJhdGltOlxuXG4gICAgICAgICBcIlRISVMgU09GVFdBUkUgSVMgU1VCSkVDVCBUTyBDT1BZUklHSFQgUFJPVEVDVElPTiBBTkQgSVMgT0ZGRVJFRCBPTkxZIFBVUlNVQU5UIFRPIFRIRSAzREZYIEdMSURFIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UuIFRIRVJFIElTIE5PIFJJR0hUIFRPIFVTRSBUSEUgR0xJREUgVFJBREVNQVJLIFdJVEhPVVQgUFJJT1IgV1JJVFRFTiBQRVJNSVNTSU9OIE9GIDNERlggSU5URVJBQ1RJVkUsIElOQy4gQSBDT1BZIE9GIFRISVMgTElDRU5TRSBNQVkgQkUgT0JUQUlORUQgRlJPTSBUSEUgRElTVFJJQlVUT1IgT1IgQlkgQ09OVEFDVElORyAzREZYIElOVEVSQUNUSVZFIElOQyAoaW5mb0AzZGZ4LmNvbSkuIFRISVMgUFJPR1JBTS4gSVMgUFJPVklERUQgXCJBUyBJU1wiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRC4gU0VFIFRIRSAzREZYIEdMSURFIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UgRk9SIEEgRlVMTCBURVhUIE9GIFRIRSBOT04tV0FSUkFOVFkgUFJPVklTSU9OUy5cblxuICAgICAgICAgVVNFLCBEVVBMSUNBVElPTiBPUiBESVNDTE9TVVJFIEJZIFRIRSBHT1ZFUk5NRU5UIElTIFNVQkpFQ1QgVE8gUkVTVFJJQ1RJT05TIEFTIFNFVCBGT1JUSCBJTiBTVUJESVZJU0lPTiAoQykoMSkoSUkpIE9GIFRIRSBSSUdIVFMgSU4gVEVDSE5JQ0FMIERBVEEgQU5EIENPTVBVVEVSIFNPRlRXQVJFIENMQVVTRSBBVCBERkFSUyAyNTIuMjI3LTcwMTMsIEFORC9PUiBJTiBTSU1JTEFSIE9SIFNVQ0NFU1NPUiBDTEFVU0VTIElOIFRIRSBGQVIsIERPRCBPUiBOQVNBIEZBUiBTVVBQTEVNRU5ULiBVTlBVQkxJU0hFRCBSSUdIVFMgUkVTRVJWRUQgVU5ERVIgVEhFIENPUFlSSUdIVCBMQVdTIE9GIFRIRSBVTklURUQgU1RBVEVTLlxuXG4gICAgICAgICBDT1BZUklHSFQgM0RGWCBJTlRFUkFDVElWRSwgSU5DLiAxOTk5LCBBTEwgUklHSFRTIFJFU0VSVkVEXCJcblxuICAgICAgICAgKGIpIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBhIERlcml2YXRpdmUgV29yayBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDMuMSBhbmQgMy4yIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgICAgICAgICgxKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAzLjEgYW5kIDMuMjsgb3IsXG5cbiAgICAgICAgICAgICgyKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91ciBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDMuMSBhbmQgMy4yIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvcixcblxuICAgICAgICAgICAgKDMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gKFRoaXMgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiAzLjMoYikoMikgYWJvdmUuKVxuXG4gICAgICAgICAoYykgVGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlIGNvZGUuXG5cbiAgICAgICAgIChkKSBJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBjb2RlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMgZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuXG5cbiAgICAgICAgIChlKSBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gM2RmeCBhbmQgc3VjY2Vzc29yIGxpY2Vuc29ycyB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBhbmQgRGVyaXZhdGl2ZSBXb3JrcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8gdGhpcyBMaWNlbnNlLlxuXG4gICAgICAgICAoZikgWW91IG1heSBub3QgbWFrZSBhbnkgdXNlIG9mIHRoZSBHTElERSB0cmFkZW1hcmsgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIDNkZnguXG5cbiAgICAgICAgIChnKSBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgYW55IERlcml2YXRpdmUgV29ya3MgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS5cblxuICAgNC4gTUlTQ0VMTEFORU9VU1xuXG4gICAgICA0LjEgQWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgaXMgdm9sdW50YXJ5LiBCeSB1c2luZywgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuIE5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgRGVyaXZhdGl2ZSBXb3JrcyBhbmQgZG9pbmcgc28gd2l0aG91dCBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBpcyBpbiB2aW9sYXRpb24gb2YgdGhlIFUuUy4gYW5kIGludGVybmF0aW9uYWwgY29weXJpZ2h0IGxhd3MuXG5cbiAgICAgIDQuMiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gb3IgRGVyaXZhdGl2ZSBXb3JrcyBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICA0LjMgVGhpcyBMaWNlbnNlIGlzIHRvIGJlIGNvbnN0cnVlZCBhY2NvcmRpbmcgdG8gdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEgYW5kIHlvdSBjb25zZW50IHRvIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBpbiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSBpbiB0aGUgZXZlbnQgaXQgaXMgbmVjZXNzYXJ5IHRvIGVuZm9yY2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICA1LiBOTyBXQVJSQU5USUVTXG5cbiAgICAgIDUuMSBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVywgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLiBPUiBERVJJVkFUSVZFIFdPUktTIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNIEFORCBBTlkgREVSSVZBVElWRSBXT1JLU1wiQVMgSVNcIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gQU5EIEFOWSBERVJJVkFUSVZFIFdPUksgSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgUFJPR1JBTSBPUiBBTlkgREVSSVZBVElWRSBXT1JLIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uXG5cbiAgICAgIDUuMiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgV0lMTCAzREZYIElOVEVSQUNUSVZFLCBJTkMuLCBPUiBBTlkgT1RIRVIgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUiBSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gT1IgREVSSVZBVElWRSBXT1JLUyBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIE9SIERFUklWQVRJVkUgV09SS1MgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBPUiBERVJJVkFUSVZFIFdPUktTIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4iXSwibGljZW5zZUlkcyI6WyJHbGlkZSJdLCJrZXl3b3JkcyI6WyJsaWNlbnNlIDEgcHJlYW1ibGUiLCIxIHByZWFtYmxlIHRoaXMiLCJpcyBmb3Igc29mdHdhcmUiLCJzb2Z0d2FyZSB0aGF0IHByb3ZpZGVzIiwidGhhdCBwcm92aWRlcyBhIiwicHJvdmlkZXMgYSAzZCIsImEgM2QgZ3JhcGhpY3MiLCIzZCBncmFwaGljcyBhcHBsaWNhdGlvbiIsImdyYXBoaWNzIGFwcGxpY2F0aW9uIHByb2dyYW0iLCJhcHBsaWNhdGlvbiBwcm9ncmFtIGludGVyZmFjZSIsInByb2dyYW0gaW50ZXJmYWNlIGFwaSIsImludGVyZmFjZSBhcGkgdGhlIiwiYXBpIHRoZSBsaWNlbnNlIiwiaW50ZW5kZWQgdG8gb2ZmZXIiLCJ0byBvZmZlciB0ZXJtcyIsIm9mZmVyIHRlcm1zIHNpbWlsYXIiLCJ0ZXJtcyBzaW1pbGFyIHRvIiwic2ltaWxhciB0byBzb21lIiwidG8gc29tZSBzdGFuZGFyZCIsInNvbWUgc3RhbmRhcmQgZ2VuZXJhbCIsInN0YW5kYXJkIGdlbmVyYWwgcHVibGljIiwicHVibGljIGxpY2Vuc2VzIGRlc2lnbmVkIiwibGljZW5zZXMgZGVzaWduZWQgdG8iLCJkZXNpZ25lZCB0byBmb3N0ZXIiLCJ0byBmb3N0ZXIgb3BlbiIsImZvc3RlciBvcGVuIHN0YW5kYXJkcyIsIm9wZW4gc3RhbmRhcmRzIGFuZCIsInN0YW5kYXJkcyBhbmQgdW5yZXN0cmljdGVkIiwiYW5kIHVucmVzdHJpY3RlZCBhY2Nlc3NpYmlsaXR5IiwidW5yZXN0cmljdGVkIGFjY2Vzc2liaWxpdHkgdG8iLCJhY2Nlc3NpYmlsaXR5IHRvIHNvdXJjZSIsInNvdXJjZSBjb2RlIHNvbWUiLCJjb2RlIHNvbWUgb2YiLCJvZiB0aGVzZSBsaWNlbnNlcyIsInRoZXNlIGxpY2Vuc2VzIHJlcXVpcmUiLCJsaWNlbnNlcyByZXF1aXJlIHRoYXQiLCJyZXF1aXJlIHRoYXQgYXMiLCJ0aGF0IGFzIGEiLCJhIGNvbmRpdGlvbiBvZiIsImNvbmRpdGlvbiBvZiB0aGUiLCJzb2Z0d2FyZSBhbnkgZGVyaXZhdGl2ZSIsIndvcmtzIHRoYXQgaXMiLCJ0aGF0IGlzIG5ldyIsImlzIG5ldyBzb2Z0d2FyZSIsIm5ldyBzb2Z0d2FyZSB3aGljaCIsIm9mIGl0IG11c3QiLCJhdmFpbGFibGUgZm9yIGdlbmVyYWwiLCJmb3IgZ2VuZXJhbCB1c2UiLCJnZW5lcmFsIHVzZSB3aXRob3V0IiwidXNlIHdpdGhvdXQgcmVzdHJpY3Rpb24iLCJ3aXRob3V0IHJlc3RyaWN0aW9uIG90aGVyIiwicmVzdHJpY3Rpb24gb3RoZXIgdGhhbiIsInRoYW4gZm9yIGEiLCJmb3IgYSBtaW5vciIsImEgbWlub3IgdHJhbnNmZXIiLCJtaW5vciB0cmFuc2ZlciBmZWUiLCJ0cmFuc2ZlciBmZWUgYW5kIiwiZmVlIGFuZCB0aGF0IiwiY29kZSBmb3Igc3VjaCIsImZvciBzdWNoIGRlcml2YXRpdmUiLCJ3b3JrcyBtdXN0IGxpa2V3aXNlIiwibXVzdCBsaWtld2lzZSBiZSIsImxpa2V3aXNlIGJlIG1hZGUiLCJhdmFpbGFibGUgdGhlIG9ubHkiLCJ0aGUgb25seSByZXN0cmljdGlvbiIsIm9ubHkgcmVzdHJpY3Rpb24gaXMiLCJyZXN0cmljdGlvbiBpcyB0aGF0IiwiaXMgdGhhdCBzdWNoIiwidGhhdCBzdWNoIGRlcml2YXRpdmUiLCJ3b3JrcyBtdXN0IGJlIiwic2FtZSBnZW5lcmFsIHB1YmxpYyIsInRlcm1zIGFzIHRoZSIsIndvcmsgdGhpcyAzZGZ4IiwicHVibGljIGxpY2Vuc2UgZGlmZmVycyIsInRoZSBzdGFuZGFyZCBsaWNlbnNlcyIsInN0YW5kYXJkIGxpY2Vuc2VzIG9mIiwibGljZW5zZXMgb2YgdGhpcyIsIm9mIHRoaXMgdHlwZSIsInRoaXMgdHlwZSBpbiIsInR5cGUgaW4gdGhhdCIsInJlcXVpcmUgdGhlIGVudGlyZSIsInRoaXMgbGljZW5zZSBub3IiLCJsaWNlbnNlIG5vciBpcyIsImlzIHRoZSByZWNpcGllbnQiLCJ0aGUgcmVjaXBpZW50IHJlcXVpcmVkIiwicmVjaXBpZW50IHJlcXVpcmVkIHRvIiwicmVxdWlyZWQgdG8gbWFrZSIsImRlcml2YXRpdmUgd29yayByYXRoZXIiLCJ3b3JrIHJhdGhlciB0aGUiLCJyYXRoZXIgdGhlIGxpY2Vuc2UiLCJsaWNlbnNlIGlzIGxpbWl0ZWQiLCJsaW1pdGVkIHRvIG9ubHkiLCJvbmx5IHRoZSBpZGVudGlmaWFibGUiLCJsaWNlbnNlZCBzb2Z0d2FyZSB0aGUiLCJzb2Z0d2FyZSB0aGUgcHJlY2lzZSIsIm1vZGlmaWNhdGlvbiBmb2xsb3cgMiIsImZvbGxvdyAyIGRlZmluaXRpb25zIiwiMiBkZWZpbml0aW9ucyAyIiwiZGVmaW5pdGlvbnMgMiAxIiwib2YgdGhpcyAzZGZ4IiwiMiB0aGUgdGVybSIsInRoZSB0ZXJtIHByb2dyYW0iLCJ0ZXJtIHByb2dyYW0gYXMiLCJwcm9ncmFtIGFzIHVzZWQiLCJ0aGlzIGFncmVlbWVudCByZWZlcnMiLCJhZ3JlZW1lbnQgcmVmZXJzIHRvIiwicmVmZXJzIHRvIDNkZngiLCJ0byAzZGZ4IHMiLCIzZGZ4IHMgZ2xpZGUiLCJzIGdsaWRlIHNvdXJjZSIsIndvcmsgMiAzIiwiMiAzIGRlcml2YXRpdmUiLCIzIGRlcml2YXRpdmUgd29yayIsIndvcmsgbWVhbnMgZm9yIiwibWVhbnMgZm9yIHRoZSIsImxpY2Vuc2UgdGhhdCBwb3J0aW9uIiwidGhhdCBwb3J0aW9uIG9mIiwicG9ydGlvbiBvZiBhbnkiLCJvciB0aGUgaWRlbnRpZmlhYmxlIiwicG9ydGlvbiBvZiBhIiwicHJvZ3JhbSBlaXRoZXIgdmVyYmF0aW0iLCJhbm90aGVyIGxhbmd1YWdlIGFuZCIsImxhbmd1YWdlIGFuZCB0aGF0IiwiYW5kIHRoYXQgcGVyZm9ybXMiLCJ0aGF0IHBlcmZvcm1zIDNkIiwicGVyZm9ybXMgM2QgZ3JhcGhpY3MiLCIzZCBncmFwaGljcyBhcGkiLCJncmFwaGljcyBhcGkgb3BlcmF0aW9ucyIsImFwaSBvcGVyYXRpb25zIGl0Iiwib3BlcmF0aW9ucyBpdCBkb2VzIiwiaW5jbHVkZSBhbnkgb3RoZXIiLCJhbnkgb3RoZXIgcG9ydGlvbnMiLCJvdGhlciBwb3J0aW9ucyBvZiIsInBvcnRpb25zIG9mIGEiLCJhIHdvcmsgMiIsIjQgbW9kaWZpY2F0aW9ucyBvZiIsInByb2dyYW0gbWVhbnMgYW55Iiwid29yayB3aGljaCBpbmNsdWRlcyIsImluY2x1ZGVzIGEgZGVyaXZhdGl2ZSIsImRlcml2YXRpdmUgd29yayBhbmQiLCJ3b3JrIGFuZCBpbmNsdWRlcyIsImFuZCBpbmNsdWRlcyB0aGUiLCJpbmNsdWRlcyB0aGUgd2hvbGUiLCJ3aG9sZSBvZiBzdWNoIiwic3VjaCB3b3JrIDIiLCJ3b3JrIDIgNSIsIjIgNSBsaWNlbnNlIiwiNSBsaWNlbnNlIG1lYW5zIiwibWVhbnMgdGhpcyAzZGZ4IiwiMiA2IHRoZSIsIjYgdGhlIHNvdXJjZSIsIml0IGNvbnRhaW5zIGFueSIsImNvbnRhaW5zIGFueSBhc3NvY2lhdGVkIiwiYW5kIHRoZSBzY3JpcHRzIiwiZXhlY3V0YWJsZSB3b3JrIDIiLCJ3b3JrIDIgNyIsIjIgNyAzZGZ4IiwiNyAzZGZ4IG1lYW5zIiwiM2RmeCBtZWFucyAzZGZ4IiwibWVhbnMgM2RmeCBpbnRlcmFjdGl2ZSIsImludGVyYWN0aXZlIGluYyAzIiwiaW5jIDMgbGljZW5zZWQiLCIzIGxpY2Vuc2VkIGFjdGl2aXRpZXMiLCJsaWNlbnNlZCBhY3Rpdml0aWVzIDMiLCJhY3Rpdml0aWVzIDMgMSIsIjMgMSBjb3B5aW5nIiwiMSBjb3B5aW5nIHlvdSIsInRvIHRoZSBwcm92aXNpb24iLCJwcm92aXNpb24gb2Ygc2VjdGlvbiIsImFuZCBwcm92aWRlZCBhbHNvIiwicHJvdmlkZWQgYWxzbyB0aGF0IiwiYWxzbyB0aGF0IGEiLCJjb3B5cmlnaHQgbm90aWNlIDNkZngiLCJub3RpY2UgM2RmeCBpbnRlcmFjdGl2ZSIsImluYyAxOTk5IGEiLCIxOTk5IGEgbm90aWNlIiwidGhlIHByb2dyYW0gY2FuIiwicHJvZ3JhbSBjYW4gb25seSIsImFuZCBjIGRvIiwib2YgM2RmeCBhbmQiLCIzZGZ4IGFuZCBkIiwiYW5kIGQgZ2l2ZSIsImQgZ2l2ZSBhbGwiLCJsaWNlbnNlIDMgMiIsIjMgMiBtb2RpZmljYXRpb24iLCIyIG1vZGlmaWNhdGlvbiBvZiIsInRoZSBwcm9ncmFtIGRlcml2YXRpdmUiLCJwcm9ncmFtIGRlcml2YXRpdmUgd29ya3MiLCJzdWNoIG1vZGlmaWNhdGlvbnMgc3ViamVjdCIsIm1vZGlmaWNhdGlvbnMgc3ViamVjdCB0byIsImRlcml2YXRpdmUgd29yayBhbiIsIndvcmsgYW4gYXBwcm9wcmlhdGUiLCJub3RpY2UgYSBub3RpY2UiLCJtb2RpZnkgdGhlIGRlcml2YXRpdmUiLCJkZXJpdmF0aXZlIHdvcmsgY2FuIiwiYW5kIGMgZ2l2ZSIsImMgZ2l2ZSBhbGwiLCJ3b3JrIG9yIGluc3RydWN0aW9ucyIsIm1vZGlmaWVkIGZpbGVzIG9mIiwiYW55IGNoYW5nZSBlIl19LHsibGljZW5zZVRleHRzIjpbIlRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIHBhY2thZ2UgaXMgY29weXJpZ2h0IDE5OTktMjAxMCBieSBBbmRyZXcgUGxvdGtpbi5cblxuWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGl0IGZyZWVseSwgYnkgYW55IG1lYW5zIGFuZCB1bmRlciBhbnkgY29uZGl0aW9ucywgYXMgbG9uZyBhcyB0aGUgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBpcyBub3QgY2hhbmdlZC4gWW91IG1heSBhbHNvIGluY29ycG9yYXRlIHRoaXMgY29kZSBpbnRvIHlvdXIgb3duIHByb2dyYW0gYW5kIGRpc3RyaWJ1dGUgdGhhdCwgb3IgbW9kaWZ5IHRoaXMgY29kZSBhbmQgdXNlIGFuZCBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCB2ZXJzaW9uLCBhcyBsb25nIGFzIHlvdSByZXRhaW4gYSBub3RpY2UgaW4geW91ciBwcm9ncmFtIG9yIGRvY3VtZW50YXRpb24gd2hpY2ggbWVudGlvbnMgbXkgbmFtZSBhbmQgdGhlIFVSTCBzaG93biBhYm92ZS4iXSwibGljZW5zZUlkcyI6WyJHbHVseGUiXSwia2V5d29yZHMiOlsiY29kZSBpbiB0aGlzIiwicGFja2FnZSBpcyBjb3B5cmlnaHQiLCJpcyBjb3B5cmlnaHQgMTk5OSIsImNvcHlyaWdodCAxOTk5IDIwMTAiLCIxOTk5IDIwMTAgYnkiLCIyMDEwIGJ5IGFuZHJldyIsImJ5IGFuZHJldyBwbG90a2luIiwiYW5kcmV3IHBsb3RraW4geW91IiwicGxvdGtpbiB5b3UgbWF5IiwiZGlzdHJpYnV0ZSBpdCBmcmVlbHkiLCJpdCBmcmVlbHkgYnkiLCJmcmVlbHkgYnkgYW55IiwibWVhbnMgYW5kIHVuZGVyIiwidW5kZXIgYW55IGNvbmRpdGlvbnMiLCJhbnkgY29uZGl0aW9ucyBhcyIsImNvbmRpdGlvbnMgYXMgbG9uZyIsImFzIHRoZSBjb2RlIiwiaXMgbm90IGNoYW5nZWQiLCJub3QgY2hhbmdlZCB5b3UiLCJjaGFuZ2VkIHlvdSBtYXkiLCJtYXkgYWxzbyBpbmNvcnBvcmF0ZSIsImFsc28gaW5jb3Jwb3JhdGUgdGhpcyIsImluY29ycG9yYXRlIHRoaXMgY29kZSIsInRoaXMgY29kZSBpbnRvIiwiY29kZSBpbnRvIHlvdXIiLCJpbnRvIHlvdXIgb3duIiwieW91ciBvd24gcHJvZ3JhbSIsIm93biBwcm9ncmFtIGFuZCIsImRpc3RyaWJ1dGUgdGhhdCBvciIsInRoYXQgb3IgbW9kaWZ5IiwibW9kaWZ5IHRoaXMgY29kZSIsInRoaXMgY29kZSBhbmQiLCJhbmQgdXNlIGFuZCIsInZlcnNpb24gYXMgbG9uZyIsInlvdSByZXRhaW4gYSIsInJldGFpbiBhIG5vdGljZSIsIm5vdGljZSBpbiB5b3VyIiwieW91ciBwcm9ncmFtIG9yIiwicHJvZ3JhbSBvciBkb2N1bWVudGF0aW9uIiwib3IgZG9jdW1lbnRhdGlvbiB3aGljaCIsImRvY3VtZW50YXRpb24gd2hpY2ggbWVudGlvbnMiLCJ3aGljaCBtZW50aW9ucyBteSIsIm1lbnRpb25zIG15IG5hbWUiLCJteSBuYW1lIGFuZCIsImFuZCB0aGUgdXJsIiwidGhlIHVybCBzaG93biIsInVybCBzaG93biBhYm92ZSIsInNvdXJjZSBjb2RlIGluIHRoaXMiLCJjb2RlIGluIHRoaXMgcGFja2FnZSIsImluIHRoaXMgcGFja2FnZSBpcyIsInRoaXMgcGFja2FnZSBpcyBjb3B5cmlnaHQiLCJwYWNrYWdlIGlzIGNvcHlyaWdodCAxOTk5IiwiaXMgY29weXJpZ2h0IDE5OTkgMjAxMCIsImNvcHlyaWdodCAxOTk5IDIwMTAgYnkiLCIxOTk5IDIwMTAgYnkgYW5kcmV3IiwiMjAxMCBieSBhbmRyZXcgcGxvdGtpbiIsImJ5IGFuZHJldyBwbG90a2luIHlvdSIsImFuZHJldyBwbG90a2luIHlvdSBtYXkiLCJwbG90a2luIHlvdSBtYXkgY29weSIsImFuZCBkaXN0cmlidXRlIGl0IGZyZWVseSIsImRpc3RyaWJ1dGUgaXQgZnJlZWx5IGJ5IiwiaXQgZnJlZWx5IGJ5IGFueSIsImZyZWVseSBieSBhbnkgbWVhbnMiLCJhbnkgbWVhbnMgYW5kIHVuZGVyIiwibWVhbnMgYW5kIHVuZGVyIGFueSIsImFuZCB1bmRlciBhbnkgY29uZGl0aW9ucyIsInVuZGVyIGFueSBjb25kaXRpb25zIGFzIiwiYW55IGNvbmRpdGlvbnMgYXMgbG9uZyIsImNvbmRpdGlvbnMgYXMgbG9uZyBhcyIsImxvbmcgYXMgdGhlIGNvZGUiLCJhcyB0aGUgY29kZSBhbmQiLCJ0aGUgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiIsImFuZCBkb2N1bWVudGF0aW9uIGlzIG5vdCIsImRvY3VtZW50YXRpb24gaXMgbm90IGNoYW5nZWQiLCJpcyBub3QgY2hhbmdlZCB5b3UiLCJub3QgY2hhbmdlZCB5b3UgbWF5IiwiY2hhbmdlZCB5b3UgbWF5IGFsc28iLCJ5b3UgbWF5IGFsc28gaW5jb3Jwb3JhdGUiLCJtYXkgYWxzbyBpbmNvcnBvcmF0ZSB0aGlzIiwiYWxzbyBpbmNvcnBvcmF0ZSB0aGlzIGNvZGUiLCJpbmNvcnBvcmF0ZSB0aGlzIGNvZGUgaW50byIsInRoaXMgY29kZSBpbnRvIHlvdXIiLCJjb2RlIGludG8geW91ciBvd24iLCJpbnRvIHlvdXIgb3duIHByb2dyYW0iLCJ5b3VyIG93biBwcm9ncmFtIGFuZCIsIm93biBwcm9ncmFtIGFuZCBkaXN0cmlidXRlIiwicHJvZ3JhbSBhbmQgZGlzdHJpYnV0ZSB0aGF0IiwiYW5kIGRpc3RyaWJ1dGUgdGhhdCBvciIsImRpc3RyaWJ1dGUgdGhhdCBvciBtb2RpZnkiLCJ0aGF0IG9yIG1vZGlmeSB0aGlzIiwib3IgbW9kaWZ5IHRoaXMgY29kZSIsIm1vZGlmeSB0aGlzIGNvZGUgYW5kIiwidGhpcyBjb2RlIGFuZCB1c2UiLCJjb2RlIGFuZCB1c2UgYW5kIiwiYW5kIHVzZSBhbmQgZGlzdHJpYnV0ZSIsIm1vZGlmaWVkIHZlcnNpb24gYXMgbG9uZyIsInZlcnNpb24gYXMgbG9uZyBhcyIsImFzIHlvdSByZXRhaW4gYSIsInlvdSByZXRhaW4gYSBub3RpY2UiLCJyZXRhaW4gYSBub3RpY2UgaW4iLCJhIG5vdGljZSBpbiB5b3VyIiwibm90aWNlIGluIHlvdXIgcHJvZ3JhbSIsImluIHlvdXIgcHJvZ3JhbSBvciIsInlvdXIgcHJvZ3JhbSBvciBkb2N1bWVudGF0aW9uIiwicHJvZ3JhbSBvciBkb2N1bWVudGF0aW9uIHdoaWNoIiwib3IgZG9jdW1lbnRhdGlvbiB3aGljaCBtZW50aW9ucyIsImRvY3VtZW50YXRpb24gd2hpY2ggbWVudGlvbnMgbXkiLCJ3aGljaCBtZW50aW9ucyBteSBuYW1lIiwibWVudGlvbnMgbXkgbmFtZSBhbmQiLCJteSBuYW1lIGFuZCB0aGUiLCJuYW1lIGFuZCB0aGUgdXJsIiwiYW5kIHRoZSB1cmwgc2hvd24iLCJ0aGUgdXJsIHNob3duIGFib3ZlIiwidGhlIHNvdXJjZSBjb2RlIGluIHRoaXMiLCJzb3VyY2UgY29kZSBpbiB0aGlzIHBhY2thZ2UiLCJjb2RlIGluIHRoaXMgcGFja2FnZSBpcyIsImluIHRoaXMgcGFja2FnZSBpcyBjb3B5cmlnaHQiLCJ0aGlzIHBhY2thZ2UgaXMgY29weXJpZ2h0IDE5OTkiLCJwYWNrYWdlIGlzIGNvcHlyaWdodCAxOTk5IDIwMTAiLCJpcyBjb3B5cmlnaHQgMTk5OSAyMDEwIGJ5IiwiY29weXJpZ2h0IDE5OTkgMjAxMCBieSBhbmRyZXciLCIxOTk5IDIwMTAgYnkgYW5kcmV3IHBsb3RraW4iLCIyMDEwIGJ5IGFuZHJldyBwbG90a2luIHlvdSIsImJ5IGFuZHJldyBwbG90a2luIHlvdSBtYXkiLCJhbmRyZXcgcGxvdGtpbiB5b3UgbWF5IGNvcHkiLCJwbG90a2luIHlvdSBtYXkgY29weSBhbmQiLCJtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBpdCIsImNvcHkgYW5kIGRpc3RyaWJ1dGUgaXQgZnJlZWx5IiwiYW5kIGRpc3RyaWJ1dGUgaXQgZnJlZWx5IGJ5IiwiZGlzdHJpYnV0ZSBpdCBmcmVlbHkgYnkgYW55IiwiaXQgZnJlZWx5IGJ5IGFueSBtZWFucyIsImZyZWVseSBieSBhbnkgbWVhbnMgYW5kIiwiYnkgYW55IG1lYW5zIGFuZCB1bmRlciIsImFueSBtZWFucyBhbmQgdW5kZXIgYW55IiwibWVhbnMgYW5kIHVuZGVyIGFueSBjb25kaXRpb25zIiwiYW5kIHVuZGVyIGFueSBjb25kaXRpb25zIGFzIiwidW5kZXIgYW55IGNvbmRpdGlvbnMgYXMgbG9uZyIsImFueSBjb25kaXRpb25zIGFzIGxvbmcgYXMiLCJjb25kaXRpb25zIGFzIGxvbmcgYXMgdGhlIiwiYXMgbG9uZyBhcyB0aGUgY29kZSIsImxvbmcgYXMgdGhlIGNvZGUgYW5kIiwiYXMgdGhlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24iLCJ0aGUgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBpcyIsImNvZGUgYW5kIGRvY3VtZW50YXRpb24gaXMgbm90IiwiYW5kIGRvY3VtZW50YXRpb24gaXMgbm90IGNoYW5nZWQiLCJkb2N1bWVudGF0aW9uIGlzIG5vdCBjaGFuZ2VkIHlvdSIsImlzIG5vdCBjaGFuZ2VkIHlvdSBtYXkiLCJub3QgY2hhbmdlZCB5b3UgbWF5IGFsc28iLCJjaGFuZ2VkIHlvdSBtYXkgYWxzbyBpbmNvcnBvcmF0ZSIsInlvdSBtYXkgYWxzbyBpbmNvcnBvcmF0ZSB0aGlzIiwibWF5IGFsc28gaW5jb3Jwb3JhdGUgdGhpcyBjb2RlIiwiYWxzbyBpbmNvcnBvcmF0ZSB0aGlzIGNvZGUgaW50byIsImluY29ycG9yYXRlIHRoaXMgY29kZSBpbnRvIHlvdXIiLCJ0aGlzIGNvZGUgaW50byB5b3VyIG93biIsImNvZGUgaW50byB5b3VyIG93biBwcm9ncmFtIiwiaW50byB5b3VyIG93biBwcm9ncmFtIGFuZCIsInlvdXIgb3duIHByb2dyYW0gYW5kIGRpc3RyaWJ1dGUiLCJvd24gcHJvZ3JhbSBhbmQgZGlzdHJpYnV0ZSB0aGF0IiwicHJvZ3JhbSBhbmQgZGlzdHJpYnV0ZSB0aGF0IG9yIiwiYW5kIGRpc3RyaWJ1dGUgdGhhdCBvciBtb2RpZnkiLCJkaXN0cmlidXRlIHRoYXQgb3IgbW9kaWZ5IHRoaXMiLCJ0aGF0IG9yIG1vZGlmeSB0aGlzIGNvZGUiLCJvciBtb2RpZnkgdGhpcyBjb2RlIGFuZCIsIm1vZGlmeSB0aGlzIGNvZGUgYW5kIHVzZSIsInRoaXMgY29kZSBhbmQgdXNlIGFuZCIsImNvZGUgYW5kIHVzZSBhbmQgZGlzdHJpYnV0ZSIsImFuZCB1c2UgYW5kIGRpc3RyaWJ1dGUgdGhlIiwidXNlIGFuZCBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCIsImFuZCBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCB2ZXJzaW9uIiwiZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgdmVyc2lvbiBhcyIsInRoZSBtb2RpZmllZCB2ZXJzaW9uIGFzIGxvbmciLCJtb2RpZmllZCB2ZXJzaW9uIGFzIGxvbmcgYXMiLCJ2ZXJzaW9uIGFzIGxvbmcgYXMgeW91IiwibG9uZyBhcyB5b3UgcmV0YWluIGEiLCJhcyB5b3UgcmV0YWluIGEgbm90aWNlIiwieW91IHJldGFpbiBhIG5vdGljZSBpbiIsInJldGFpbiBhIG5vdGljZSBpbiB5b3VyIiwiYSBub3RpY2UgaW4geW91ciBwcm9ncmFtIiwibm90aWNlIGluIHlvdXIgcHJvZ3JhbSBvciIsImluIHlvdXIgcHJvZ3JhbSBvciBkb2N1bWVudGF0aW9uIiwieW91ciBwcm9ncmFtIG9yIGRvY3VtZW50YXRpb24gd2hpY2giLCJwcm9ncmFtIG9yIGRvY3VtZW50YXRpb24gd2hpY2ggbWVudGlvbnMiLCJvciBkb2N1bWVudGF0aW9uIHdoaWNoIG1lbnRpb25zIG15IiwiZG9jdW1lbnRhdGlvbiB3aGljaCBtZW50aW9ucyBteSBuYW1lIiwid2hpY2ggbWVudGlvbnMgbXkgbmFtZSBhbmQiLCJtZW50aW9ucyBteSBuYW1lIGFuZCB0aGUiLCJteSBuYW1lIGFuZCB0aGUgdXJsIiwibmFtZSBhbmQgdGhlIHVybCBzaG93biIsImFuZCB0aGUgdXJsIHNob3duIGFib3ZlIl19LHsibGljZW5zZVRleHRzIjpbIlx1MDAzY2NvcHlyaWdodCBub3RpY2VcdTAwM2VcblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIFx1MDAzY2NvcHlyaWdodCBob2xkZXJcdTAwM2UgXHUwMDNjb3IgcmVsYXRlZCBlbnRpdGllc1x1MDAzZSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbiAuIFx1MDAzY2NvcHlyaWdodCBob2xkZXJcdTAwM2UgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgXCJhcyBpc1wiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LiBcdTAwM2Njb3B5cmlnaHQgaG9sZGVyXHUwMDNlIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgLiBJTiBOTyBFVkVOVCBTSEFMTCBcdTAwM2Njb3B5cmlnaHQgaG9sZGVyXHUwMDNlIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4iXSwibGljZW5zZUlkcyI6WyJIUE5ELXNlbGwtdmFyaWFudCJdLCJrZXl3b3JkcyI6bnVsbH0seyJsaWNlbnNlVGV4dHMiOlsiSGlzdG9yaWNhbCBQZXJtaXNzaW9uIE5vdGljZSBhbmQgRGlzY2xhaW1lciBcdTAwM2Njb3B5cmlnaHQgbm90aWNlXHUwMDNlXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24gLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBcdTAwM2Njb3B5cmlnaHQgaG9sZGVyXHUwMDNlIFx1MDAzY29yIHJlbGF0ZWQgZW50aXRpZXNcdTAwM2Ugbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24gLiBcdTAwM2Njb3B5cmlnaHQgaG9sZGVyXHUwMDNlIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkIFwiYXMgaXNcIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4gXHUwMDNjY29weXJpZ2h0IGhvbGRlclx1MDAzZSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIC4gSU4gTk8gRVZFTlQgU0hBTEwgXHUwMDNjY29weXJpZ2h0IGhvbGRlclx1MDAzZSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuIl0sImxpY2Vuc2VJZHMiOlsiSFBORCJdLCJrZXl3b3JkcyI6WyJoaXN0b3JpY2FsIHBlcm1pc3Npb24gbm90aWNlIiwiZGlzY2xhaW1lciBjb3B5cmlnaHQgbm90aWNlIiwiaGlzdG9yaWNhbCBwZXJtaXNzaW9uIG5vdGljZSBhbmQiLCJwZXJtaXNzaW9uIG5vdGljZSBhbmQgZGlzY2xhaW1lciIsIm5vdGljZSBhbmQgZGlzY2xhaW1lciBjb3B5cmlnaHQiLCJhbmQgZGlzY2xhaW1lciBjb3B5cmlnaHQgbm90aWNlIiwiZGlzY2xhaW1lciBjb3B5cmlnaHQgbm90aWNlIHBlcm1pc3Npb24iLCJoaXN0b3JpY2FsIHBlcm1pc3Npb24gbm90aWNlIGFuZCBkaXNjbGFpbWVyIiwicGVybWlzc2lvbiBub3RpY2UgYW5kIGRpc2NsYWltZXIgY29weXJpZ2h0Iiwibm90aWNlIGFuZCBkaXNjbGFpbWVyIGNvcHlyaWdodCBub3RpY2UiLCJhbmQgZGlzY2xhaW1lciBjb3B5cmlnaHQgbm90aWNlIHBlcm1pc3Npb24iLCJkaXNjbGFpbWVyIGNvcHlyaWdodCBub3RpY2UgcGVybWlzc2lvbiB0byJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb2RlIGRlcml2ZWQgZnJvbSB0aGUgZG9jdW1lbnQgXCJSZXBvcnQgb24gdGhlIFByb2dyYW1taW5nIExhbmd1YWdlXG5cbkhhc2tlbGwgMjAxMFwiLCBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6XG5cbkNvcHlyaWdodCAoYykgMjAxMCBTaW1vbiBNYXJsb3dcblxuVGhlIGF1dGhvcnMgaW50ZW5kIHRoaXMgUmVwb3J0IHRvIGJlbG9uZyB0byB0aGUgZW50aXJlIEhhc2tlbGwgY29tbXVuaXR5LCBhbmQgc28gd2UgZ3JhbnQgcGVybWlzc2lvbiB0byBjb3B5IGFuZCBkaXN0cmlidXRlIGl0IGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhhdCBpdCBpcyByZXByb2R1Y2VkIGluIGl0cyBlbnRpcmV0eSwgaW5jbHVkaW5nIHRoaXMgTm90aWNlLiBNb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIFJlcG9ydCBtYXkgYWxzbyBiZSBjb3BpZWQgYW5kIGRpc3RyaWJ1dGVkIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhhdCB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcyBjbGVhcmx5IHByZXNlbnRlZCBhcyBzdWNoLCBhbmQgdGhhdCBpdCBkb2VzIG5vdCBjbGFpbSB0byBiZSBhIGRlZmluaXRpb24gb2YgdGhlIEhhc2tlbGwgMjAxMCBMYW5ndWFnZS4iXSwibGljZW5zZUlkcyI6WyJIYXNrZWxsUmVwb3J0Il0sImtleXdvcmRzIjpbInRoZSBkb2N1bWVudCByZXBvcnQiLCJkb2N1bWVudCByZXBvcnQgb24iLCJyZXBvcnQgb24gdGhlIiwib24gdGhlIHByb2dyYW1taW5nIiwidGhlIHByb2dyYW1taW5nIGxhbmd1YWdlIiwicHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgaGFza2VsbCIsImxhbmd1YWdlIGhhc2tlbGwgMjAxMCIsImhhc2tlbGwgMjAxMCBpcyIsIjIwMTAgaXMgZGlzdHJpYnV0ZWQiLCJmb2xsb3dpbmcgbGljZW5zZSBjb3B5cmlnaHQiLCJjIDIwMTAgc2ltb24iLCIyMDEwIHNpbW9uIG1hcmxvdyIsInNpbW9uIG1hcmxvdyB0aGUiLCJtYXJsb3cgdGhlIGF1dGhvcnMiLCJ0aGUgYXV0aG9ycyBpbnRlbmQiLCJhdXRob3JzIGludGVuZCB0aGlzIiwiaW50ZW5kIHRoaXMgcmVwb3J0IiwidGhpcyByZXBvcnQgdG8iLCJyZXBvcnQgdG8gYmVsb25nIiwidG8gYmVsb25nIHRvIiwidGhlIGVudGlyZSBoYXNrZWxsIiwiZW50aXJlIGhhc2tlbGwgY29tbXVuaXR5IiwiaGFza2VsbCBjb21tdW5pdHkgYW5kIiwiY29tbXVuaXR5IGFuZCBzbyIsImFuZCBzbyB3ZSIsInNvIHdlIGdyYW50Iiwid2UgZ3JhbnQgcGVybWlzc2lvbiIsImRpc3RyaWJ1dGUgaXQgZm9yIiwiaXQgaXMgcmVwcm9kdWNlZCIsImlzIHJlcHJvZHVjZWQgaW4iLCJyZXByb2R1Y2VkIGluIGl0cyIsIml0cyBlbnRpcmV0eSBpbmNsdWRpbmciLCJlbnRpcmV0eSBpbmNsdWRpbmcgdGhpcyIsImluY2x1ZGluZyB0aGlzIG5vdGljZSIsInRoaXMgbm90aWNlIG1vZGlmaWVkIiwibm90aWNlIG1vZGlmaWVkIHZlcnNpb25zIiwib2YgdGhpcyByZXBvcnQiLCJ0aGlzIHJlcG9ydCBtYXkiLCJyZXBvcnQgbWF5IGFsc28iLCJhbHNvIGJlIGNvcGllZCIsInZlcnNpb24gaXMgY2xlYXJseSIsImlzIGNsZWFybHkgcHJlc2VudGVkIiwiY2xlYXJseSBwcmVzZW50ZWQgYXMiLCJwcmVzZW50ZWQgYXMgc3VjaCIsInN1Y2ggYW5kIHRoYXQiLCJkb2VzIG5vdCBjbGFpbSIsIm5vdCBjbGFpbSB0byIsImNsYWltIHRvIGJlIiwiYmUgYSBkZWZpbml0aW9uIiwiZGVmaW5pdGlvbiBvZiB0aGUiLCJvZiB0aGUgaGFza2VsbCIsInRoZSBoYXNrZWxsIDIwMTAiLCJoYXNrZWxsIDIwMTAgbGFuZ3VhZ2UiLCJkZXJpdmVkIGZyb20gdGhlIGRvY3VtZW50IiwiZnJvbSB0aGUgZG9jdW1lbnQgcmVwb3J0IiwidGhlIGRvY3VtZW50IHJlcG9ydCBvbiIsImRvY3VtZW50IHJlcG9ydCBvbiB0aGUiLCJyZXBvcnQgb24gdGhlIHByb2dyYW1taW5nIiwib24gdGhlIHByb2dyYW1taW5nIGxhbmd1YWdlIiwidGhlIHByb2dyYW1taW5nIGxhbmd1YWdlIGhhc2tlbGwiLCJwcm9ncmFtbWluZyBsYW5ndWFnZSBoYXNrZWxsIDIwMTAiLCJsYW5ndWFnZSBoYXNrZWxsIDIwMTAgaXMiLCJoYXNrZWxsIDIwMTAgaXMgZGlzdHJpYnV0ZWQiLCIyMDEwIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIiwiZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIGZvbGxvd2luZyIsInRoZSBmb2xsb3dpbmcgbGljZW5zZSBjb3B5cmlnaHQiLCJmb2xsb3dpbmcgbGljZW5zZSBjb3B5cmlnaHQgYyIsImxpY2Vuc2UgY29weXJpZ2h0IGMgMjAxMCIsImNvcHlyaWdodCBjIDIwMTAgc2ltb24iLCJjIDIwMTAgc2ltb24gbWFybG93IiwiMjAxMCBzaW1vbiBtYXJsb3cgdGhlIiwic2ltb24gbWFybG93IHRoZSBhdXRob3JzIiwibWFybG93IHRoZSBhdXRob3JzIGludGVuZCIsInRoZSBhdXRob3JzIGludGVuZCB0aGlzIiwiYXV0aG9ycyBpbnRlbmQgdGhpcyByZXBvcnQiLCJpbnRlbmQgdGhpcyByZXBvcnQgdG8iLCJ0aGlzIHJlcG9ydCB0byBiZWxvbmciLCJyZXBvcnQgdG8gYmVsb25nIHRvIiwidG8gYmVsb25nIHRvIHRoZSIsImJlbG9uZyB0byB0aGUgZW50aXJlIiwidG8gdGhlIGVudGlyZSBoYXNrZWxsIiwidGhlIGVudGlyZSBoYXNrZWxsIGNvbW11bml0eSIsImVudGlyZSBoYXNrZWxsIGNvbW11bml0eSBhbmQiLCJoYXNrZWxsIGNvbW11bml0eSBhbmQgc28iLCJjb21tdW5pdHkgYW5kIHNvIHdlIiwiYW5kIHNvIHdlIGdyYW50Iiwic28gd2UgZ3JhbnQgcGVybWlzc2lvbiIsIndlIGdyYW50IHBlcm1pc3Npb24gdG8iLCJncmFudCBwZXJtaXNzaW9uIHRvIGNvcHkiLCJhbmQgZGlzdHJpYnV0ZSBpdCBmb3IiLCJkaXN0cmlidXRlIGl0IGZvciBhbnkiLCJwdXJwb3NlIHByb3ZpZGVkIHRoYXQgaXQiLCJ0aGF0IGl0IGlzIHJlcHJvZHVjZWQiLCJpdCBpcyByZXByb2R1Y2VkIGluIiwiaXMgcmVwcm9kdWNlZCBpbiBpdHMiLCJyZXByb2R1Y2VkIGluIGl0cyBlbnRpcmV0eSIsImluIGl0cyBlbnRpcmV0eSBpbmNsdWRpbmciLCJpdHMgZW50aXJldHkgaW5jbHVkaW5nIHRoaXMiLCJlbnRpcmV0eSBpbmNsdWRpbmcgdGhpcyBub3RpY2UiLCJpbmNsdWRpbmcgdGhpcyBub3RpY2UgbW9kaWZpZWQiLCJ0aGlzIG5vdGljZSBtb2RpZmllZCB2ZXJzaW9ucyIsIm5vdGljZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiIsInZlcnNpb25zIG9mIHRoaXMgcmVwb3J0Iiwib2YgdGhpcyByZXBvcnQgbWF5IiwidGhpcyByZXBvcnQgbWF5IGFsc28iLCJyZXBvcnQgbWF5IGFsc28gYmUiLCJtYXkgYWxzbyBiZSBjb3BpZWQiLCJhbHNvIGJlIGNvcGllZCBhbmQiLCJiZSBjb3BpZWQgYW5kIGRpc3RyaWJ1dGVkIiwicHVycG9zZSBwcm92aWRlZCB0aGF0IHRoZSIsInByb3ZpZGVkIHRoYXQgdGhlIG1vZGlmaWVkIiwidGhhdCB0aGUgbW9kaWZpZWQgdmVyc2lvbiIsIm1vZGlmaWVkIHZlcnNpb24gaXMgY2xlYXJseSIsInZlcnNpb24gaXMgY2xlYXJseSBwcmVzZW50ZWQiLCJpcyBjbGVhcmx5IHByZXNlbnRlZCBhcyIsImNsZWFybHkgcHJlc2VudGVkIGFzIHN1Y2giLCJwcmVzZW50ZWQgYXMgc3VjaCBhbmQiLCJhcyBzdWNoIGFuZCB0aGF0Iiwic3VjaCBhbmQgdGhhdCBpdCIsImFuZCB0aGF0IGl0IGRvZXMiLCJpdCBkb2VzIG5vdCBjbGFpbSIsImRvZXMgbm90IGNsYWltIHRvIiwibm90IGNsYWltIHRvIGJlIiwiY2xhaW0gdG8gYmUgYSIsInRvIGJlIGEgZGVmaW5pdGlvbiIsImJlIGEgZGVmaW5pdGlvbiBvZiIsImEgZGVmaW5pdGlvbiBvZiB0aGUiLCJkZWZpbml0aW9uIG9mIHRoZSBoYXNrZWxsIiwib2YgdGhlIGhhc2tlbGwgMjAxMCIsInRoZSBoYXNrZWxsIDIwMTAgbGFuZ3VhZ2UiLCJjb2RlIGRlcml2ZWQgZnJvbSB0aGUgZG9jdW1lbnQiLCJkZXJpdmVkIGZyb20gdGhlIGRvY3VtZW50IHJlcG9ydCIsImZyb20gdGhlIGRvY3VtZW50IHJlcG9ydCBvbiIsInRoZSBkb2N1bWVudCByZXBvcnQgb24gdGhlIiwiZG9jdW1lbnQgcmVwb3J0IG9uIHRoZSBwcm9ncmFtbWluZyIsInJlcG9ydCBvbiB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UiLCJvbiB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgaGFza2VsbCIsInRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBoYXNrZWxsIDIwMTAiLCJwcm9ncmFtbWluZyBsYW5ndWFnZSBoYXNrZWxsIDIwMTAgaXMiLCJsYW5ndWFnZSBoYXNrZWxsIDIwMTAgaXMgZGlzdHJpYnV0ZWQiLCJoYXNrZWxsIDIwMTAgaXMgZGlzdHJpYnV0ZWQgdW5kZXIiLCIyMDEwIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSIsImlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBmb2xsb3dpbmciLCJkaXN0cmlidXRlZCB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2UiLCJ1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgY29weXJpZ2h0IiwidGhlIGZvbGxvd2luZyBsaWNlbnNlIGNvcHlyaWdodCBjIiwiZm9sbG93aW5nIGxpY2Vuc2UgY29weXJpZ2h0IGMgMjAxMCIsImxpY2Vuc2UgY29weXJpZ2h0IGMgMjAxMCBzaW1vbiIsImNvcHlyaWdodCBjIDIwMTAgc2ltb24gbWFybG93IiwiYyAyMDEwIHNpbW9uIG1hcmxvdyB0aGUiLCIyMDEwIHNpbW9uIG1hcmxvdyB0aGUgYXV0aG9ycyIsInNpbW9uIG1hcmxvdyB0aGUgYXV0aG9ycyBpbnRlbmQiLCJtYXJsb3cgdGhlIGF1dGhvcnMgaW50ZW5kIHRoaXMiLCJ0aGUgYXV0aG9ycyBpbnRlbmQgdGhpcyByZXBvcnQiLCJhdXRob3JzIGludGVuZCB0aGlzIHJlcG9ydCB0byIsImludGVuZCB0aGlzIHJlcG9ydCB0byBiZWxvbmciLCJ0aGlzIHJlcG9ydCB0byBiZWxvbmcgdG8iLCJyZXBvcnQgdG8gYmVsb25nIHRvIHRoZSIsInRvIGJlbG9uZyB0byB0aGUgZW50aXJlIiwiYmVsb25nIHRvIHRoZSBlbnRpcmUgaGFza2VsbCIsInRvIHRoZSBlbnRpcmUgaGFza2VsbCBjb21tdW5pdHkiLCJ0aGUgZW50aXJlIGhhc2tlbGwgY29tbXVuaXR5IGFuZCIsImVudGlyZSBoYXNrZWxsIGNvbW11bml0eSBhbmQgc28iLCJoYXNrZWxsIGNvbW11bml0eSBhbmQgc28gd2UiLCJjb21tdW5pdHkgYW5kIHNvIHdlIGdyYW50IiwiYW5kIHNvIHdlIGdyYW50IHBlcm1pc3Npb24iLCJzbyB3ZSBncmFudCBwZXJtaXNzaW9uIHRvIiwid2UgZ3JhbnQgcGVybWlzc2lvbiB0byBjb3B5IiwiZ3JhbnQgcGVybWlzc2lvbiB0byBjb3B5IGFuZCIsInRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgaXQiLCJjb3B5IGFuZCBkaXN0cmlidXRlIGl0IGZvciIsImFuZCBkaXN0cmlidXRlIGl0IGZvciBhbnkiLCJkaXN0cmlidXRlIGl0IGZvciBhbnkgcHVycG9zZSIsIml0IGZvciBhbnkgcHVycG9zZSBwcm92aWRlZCIsImFueSBwdXJwb3NlIHByb3ZpZGVkIHRoYXQgaXQiLCJwdXJwb3NlIHByb3ZpZGVkIHRoYXQgaXQgaXMiLCJwcm92aWRlZCB0aGF0IGl0IGlzIHJlcHJvZHVjZWQiLCJ0aGF0IGl0IGlzIHJlcHJvZHVjZWQgaW4iLCJpdCBpcyByZXByb2R1Y2VkIGluIGl0cyIsImlzIHJlcHJvZHVjZWQgaW4gaXRzIGVudGlyZXR5IiwicmVwcm9kdWNlZCBpbiBpdHMgZW50aXJldHkgaW5jbHVkaW5nIiwiaW4gaXRzIGVudGlyZXR5IGluY2x1ZGluZyB0aGlzIiwiaXRzIGVudGlyZXR5IGluY2x1ZGluZyB0aGlzIG5vdGljZSIsImVudGlyZXR5IGluY2x1ZGluZyB0aGlzIG5vdGljZSBtb2RpZmllZCIsImluY2x1ZGluZyB0aGlzIG5vdGljZSBtb2RpZmllZCB2ZXJzaW9ucyIsInRoaXMgbm90aWNlIG1vZGlmaWVkIHZlcnNpb25zIG9mIiwibm90aWNlIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMiLCJtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHJlcG9ydCIsInZlcnNpb25zIG9mIHRoaXMgcmVwb3J0IG1heSIsIm9mIHRoaXMgcmVwb3J0IG1heSBhbHNvIiwidGhpcyByZXBvcnQgbWF5IGFsc28gYmUiLCJyZXBvcnQgbWF5IGFsc28gYmUgY29waWVkIiwibWF5IGFsc28gYmUgY29waWVkIGFuZCIsImFsc28gYmUgY29waWVkIGFuZCBkaXN0cmlidXRlZCIsImJlIGNvcGllZCBhbmQgZGlzdHJpYnV0ZWQgZm9yIiwiZGlzdHJpYnV0ZWQgZm9yIGFueSBwdXJwb3NlIHByb3ZpZGVkIiwiYW55IHB1cnBvc2UgcHJvdmlkZWQgdGhhdCB0aGUiLCJwdXJwb3NlIHByb3ZpZGVkIHRoYXQgdGhlIG1vZGlmaWVkIiwicHJvdmlkZWQgdGhhdCB0aGUgbW9kaWZpZWQgdmVyc2lvbiIsInRoYXQgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMiXX0seyJsaWNlbnNlVGV4dHMiOlsiW1NPRlRXQVJFIE5BTUVdIENvcHlyaWdodCAoQykgKFlFQVIpIChDT1BZUklHSFQgSE9MREVSKFMpL0FVVEhPUihTKSAoXCJMaWNlbnNvclwiKSBIaXBwb2NyYXRpYyBMaWNlbnNlIFZlcnNpb24gTnVtYmVyOiAyLjEuXG5cblB1cnBvc2UuIFRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBpcyBmb3IgdGhlIExpY2Vuc29yIG5hbWVkIGFib3ZlIHRvIHBlcm1pdCB0aGUgTGljZW5zZWUgKGFzIGRlZmluZWQgYmVsb3cpIGJyb2FkIHBlcm1pc3Npb24sIGlmIGNvbnNpc3RlbnQgd2l0aCBIdW1hbiBSaWdodHMgTGF3cyBhbmQgSHVtYW4gUmlnaHRzIFByaW5jaXBsZXMgKGFzIGVhY2ggaXMgZGVmaW5lZCBiZWxvdyksIHRvIHVzZSBhbmQgd29yayB3aXRoIHRoZSBTb2Z0d2FyZSAoYXMgZGVmaW5lZCBiZWxvdykgd2l0aGluIHRoZSBmdWxsIHNjb3BlIG9mIExpY2Vuc29yJ3MgY29weXJpZ2h0IGFuZCBwYXRlbnQgcmlnaHRzLCBpZiBhbnksIGluIHRoZSBTb2Z0d2FyZSwgd2hpbGUgZW5zdXJpbmcgYXR0cmlidXRpb24gYW5kIHByb3RlY3RpbmcgdGhlIExpY2Vuc29yIGZyb20gbGlhYmlsaXR5LlxuXG5QZXJtaXNzaW9uIGFuZCBDb25kaXRpb25zLiBUaGUgTGljZW5zb3IgZ3JhbnRzIHBlcm1pc3Npb24gYnkgdGhpcyBsaWNlbnNlIChcIkxpY2Vuc2VcIiksIGZyZWUgb2YgY2hhcmdlLCB0byB0aGUgZXh0ZW50IG9mIExpY2Vuc29yJ3MgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGFuZCBwYXRlbnQgbGF3LCB0byBhbnkgcGVyc29uIG9yIGVudGl0eSAodGhlIFwiTGljZW5zZWVcIikgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkbyBldmVyeXRoaW5nIHdpdGggdGhlIFNvZnR3YXJlIHRoYXQgd291bGQgb3RoZXJ3aXNlIGluZnJpbmdlIChpKSB0aGUgTGljZW5zb3IncyBjb3B5cmlnaHQgaW4gdGhlIFNvZnR3YXJlIG9yIChpaSkgYW55IHBhdGVudCBjbGFpbXMgdG8gdGhlIFNvZnR3YXJlIHRoYXQgdGhlIExpY2Vuc29yIGNhbiBsaWNlbnNlIG9yIGJlY29tZXMgYWJsZSB0byBsaWNlbnNlLCBzdWJqZWN0IHRvIGFsbCBvZiB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zOlxuXG4gICAqIEFjY2VwdGFuY2UuIFRoaXMgTGljZW5zZSBpcyBhdXRvbWF0aWNhbGx5IG9mZmVyZWQgdG8gZXZlcnkgcGVyc29uIGFuZCBlbnRpdHkgc3ViamVjdCB0byBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIExpY2Vuc2VlIGFjY2VwdHMgdGhpcyBMaWNlbnNlIGFuZCBhZ3JlZXMgdG8gaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGJ5IHRha2luZyBhbnkgYWN0aW9uIHdpdGggdGhlIFNvZnR3YXJlIHRoYXQsIGFic2VudCB0aGlzIExpY2Vuc2UsIHdvdWxkIGluZnJpbmdlIGFueSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaGVsZCBieSBMaWNlbnNvci5cblxuICAgKiBOb3RpY2UuIExpY2Vuc2VlIG11c3QgZW5zdXJlIHRoYXQgZXZlcnlvbmUgd2hvIGdldHMgYSBjb3B5IG9mIGFueSBwYXJ0IG9mIHRoaXMgU29mdHdhcmUgZnJvbSBMaWNlbnNlZSwgd2l0aCBvciB3aXRob3V0IGNoYW5nZXMsIGFsc28gcmVjZWl2ZXMgdGhlIExpY2Vuc2UgYW5kIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIChhbmQgaWYgaW5jbHVkZWQgYnkgdGhlIExpY2Vuc29yLCBwYXRlbnQsIHRyYWRlbWFyayBhbmQgYXR0cmlidXRpb24gbm90aWNlKS4gTGljZW5zZWUgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBMaWNlbnNlZSBjaGFuZ2VkIHRoZSBTb2Z0d2FyZS4gRm9yIGNsYXJpdHksIGFsdGhvdWdoIExpY2Vuc2VlIGlzIGZyZWUgdG8gY3JlYXRlIG1vZGlmaWNhdGlvbnMgb2YgdGhlIFNvZnR3YXJlIGFuZCBkaXN0cmlidXRlIG9ubHkgdGhlIG1vZGlmaWVkIHBvcnRpb24gY3JlYXRlZCBieSBMaWNlbnNlZSB3aXRoIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IHRlcm1zLCB0aGUgcG9ydGlvbiBvZiB0aGUgU29mdHdhcmUgbm90IG1vZGlmaWVkIG11c3QgYmUgZGlzdHJpYnV0ZWQgcHVyc3VhbnQgdG8gdGhpcyBMaWNlbnNlLiBJZiBhbnlvbmUgbm90aWZpZXMgTGljZW5zZWUgaW4gd3JpdGluZyB0aGF0IExpY2Vuc2VlIGhhcyBub3QgY29tcGxpZWQgd2l0aCB0aGlzIE5vdGljZSBzZWN0aW9uLCBMaWNlbnNlZSBjYW4ga2VlcCB0aGlzIExpY2Vuc2UgYnkgdGFraW5nIGFsbCBwcmFjdGljYWwgc3RlcHMgdG8gY29tcGx5IHdpdGhpbiAzMCBkYXlzIGFmdGVyIHRoZSBub3RpY2UuIElmIExpY2Vuc2VlIGRvZXMgbm90IGRvIHNvLCBMaWNlbnNlZSdzIExpY2Vuc2UgKGFuZCBhbGwgcmlnaHRzIGxpY2Vuc2VkIGhlcmV1bmRlcikgc2hhbGwgZW5kIGltbWVkaWF0ZWx5LlxuXG4gICAqIENvbXBsaWFuY2Ugd2l0aCBIdW1hbiBSaWdodHMgUHJpbmNpcGxlcyBhbmQgSHVtYW4gUmlnaHRzIExhd3MuXG5cbiAgICAgIDEuIEh1bWFuIFJpZ2h0cyBQcmluY2lwbGVzLlxuXG4gICAgICAgICAoYSkgTGljZW5zZWUgaXMgYWR2aXNlZCB0byBjb25zdWx0IHRoZSBhcnRpY2xlcyBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgVW5pdmVyc2FsIERlY2xhcmF0aW9uIG9mIEh1bWFuIFJpZ2h0cyBhbmQgdGhlIFVuaXRlZCBOYXRpb25zIEdsb2JhbCBDb21wYWN0IHRoYXQgZGVmaW5lIHJlY29nbml6ZWQgcHJpbmNpcGxlcyBvZiBpbnRlcm5hdGlvbmFsIGh1bWFuIHJpZ2h0cyAodGhlIFwiSHVtYW4gUmlnaHRzIFByaW5jaXBsZXNcIikuIExpY2Vuc2VlIHNoYWxsIHVzZSB0aGUgU29mdHdhcmUgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIEh1bWFuIFJpZ2h0cyBQcmluY2lwbGVzLlxuXG4gICAgICAgICAoYikgVW5sZXNzIHRoZSBMaWNlbnNvciBhbmQgTGljZW5zZWUgYWdyZWUgb3RoZXJ3aXNlLCBhbnkgZGlzcHV0ZSwgY29udHJvdmVyc3ksIG9yIGNsYWltIGFyaXNpbmcgb3V0IG9mIG9yIHJlbGF0aW5nIHRvIChpKSBTZWN0aW9uIDEoYSkgcmVnYXJkaW5nIEh1bWFuIFJpZ2h0cyBQcmluY2lwbGVzLCBpbmNsdWRpbmcgdGhlIGJyZWFjaCBvZiBTZWN0aW9uIDEoYSksIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBmb3IgYnJlYWNoIG9mIHRoZSBIdW1hbiBSaWdodHMgUHJpbmNpcGxlcywgb3IgaW52YWxpZGl0eSBvZiBTZWN0aW9uIDEoYSkgb3IgKGlpKSBhIGRldGVybWluYXRpb24gb2Ygd2hldGhlciBhbnkgTGF3IGlzIGNvbnNpc3RlbnQgb3IgaW4gY29uZmxpY3Qgd2l0aCBIdW1hbiBSaWdodHMgUHJpbmNpcGxlcyBwdXJzdWFudCB0byBTZWN0aW9uIDIsIGJlbG93LCBzaGFsbCBiZSBzZXR0bGVkIGJ5IGFyYml0cmF0aW9uIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgSGFndWUgUnVsZXMgb24gQnVzaW5lc3MgYW5kIEh1bWFuIFJpZ2h0cyBBcmJpdHJhdGlvbiAodGhlIFwiUnVsZXNcIik7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IExpY2Vuc2VlIG1heSBlbGVjdCBub3QgdG8gcGFydGljaXBhdGUgaW4gc3VjaCBhcmJpdHJhdGlvbiwgaW4gd2hpY2ggZXZlbnQgdGhpcyBMaWNlbnNlIChhbmQgYWxsIHJpZ2h0cyBsaWNlbnNlZCBoZXJldW5kZXIpIHNoYWxsIGVuZCBpbW1lZGlhdGVseS4gVGhlIG51bWJlciBvZiBhcmJpdHJhdG9ycyBzaGFsbCBiZSBvbmUgdW5sZXNzIHRoZSBSdWxlcyByZXF1aXJlIG90aGVyd2lzZS5cblxuICAgICAgICAgVW5sZXNzIGJvdGggdGhlIExpY2Vuc29yIGFuZCBMaWNlbnNlZSBhZ3JlZSB0byB0aGUgY29udHJhcnk6ICgxKSBBbGwgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBjb25jZXJuaW5nIHRoZSBhcmJpdHJhdGlvbiBzaGFsbCBiZSBwdWJsaWMgYW5kIG1heSBiZSBkaXNjbG9zZWQgYnkgYW55IHBhcnR5OyAoMikgVGhlIHJlcG9zaXRvcnkgcmVmZXJyZWQgdG8gdW5kZXIgQXJ0aWNsZSA0MyBvZiB0aGUgUnVsZXMgc2hhbGwgbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBhIHRpbWVseSBtYW5uZXIgYWxsIGRvY3VtZW50cyBjb25jZXJuaW5nIHRoZSBhcmJpdHJhdGlvbiB3aGljaCBhcmUgY29tbXVuaWNhdGVkIHRvIGl0LCBpbmNsdWRpbmcgYWxsIHN1Ym1pc3Npb25zIG9mIHRoZSBwYXJ0aWVzLCBhbGwgZXZpZGVuY2UgYWRtaXR0ZWQgaW50byB0aGUgcmVjb3JkIG9mIHRoZSBwcm9jZWVkaW5ncywgYWxsIHRyYW5zY3JpcHRzIG9yIG90aGVyIHJlY29yZGluZ3Mgb2YgaGVhcmluZ3MgYW5kIGFsbCBvcmRlcnMsIGRlY2lzaW9ucyBhbmQgYXdhcmRzIG9mIHRoZSBhcmJpdHJhbCB0cmlidW5hbCwgc3ViamVjdCBvbmx5IHRvIHRoZSBhcmJpdHJhbCB0cmlidW5hbCdzIHBvd2VycyB0byB0YWtlIHN1Y2ggbWVhc3VyZXMgYXMgbWF5IGJlIG5lY2Vzc2FyeSB0byBzYWZlZ3VhcmQgdGhlIGludGVncml0eSBvZiB0aGUgYXJiaXRyYWwgcHJvY2VzcyBwdXJzdWFudCB0byBBcnRpY2xlcyAxOCwgMzMsIDQxIGFuZCA0MiBvZiB0aGUgUnVsZXM7IGFuZCAoMykgQXJ0aWNsZSAyNig2KSBvZiB0aGUgUnVsZXMgc2hhbGwgbm90IGFwcGx5LlxuXG4gICAgICAyLiBIdW1hbiBSaWdodHMgTGF3cy4gVGhlIFNvZnR3YXJlIHNoYWxsIG5vdCBiZSB1c2VkIGJ5IGFueSBwZXJzb24gb3IgZW50aXR5IGZvciBhbnkgc3lzdGVtcywgYWN0aXZpdGllcywgb3Igb3RoZXIgdXNlcyB0aGF0IHZpb2xhdGUgYW55IEh1bWFuIFJpZ2h0cyBMYXdzLiBcIkh1bWFuIFJpZ2h0cyBMYXdzXCIgbWVhbnMgYW55IGFwcGxpY2FibGUgbGF3cywgcmVndWxhdGlvbnMsIG9yIHJ1bGVzIChjb2xsZWN0aXZlbHksIFwiTGF3c1wiKSB0aGF0IHByb3RlY3QgaHVtYW4sIGNpdmlsLCBsYWJvciwgcHJpdmFjeSwgcG9saXRpY2FsLCBlbnZpcm9ubWVudGFsLCBzZWN1cml0eSwgZWNvbm9taWMsIGR1ZSBwcm9jZXNzLCBvciBzaW1pbGFyIHJpZ2h0czsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgc3VjaCBMYXdzIGFyZSBjb25zaXN0ZW50IGFuZCBub3QgaW4gY29uZmxpY3Qgd2l0aCBIdW1hbiBSaWdodHMgUHJpbmNpcGxlcyAoYSBkaXNwdXRlIG92ZXIgdGhlIGNvbnNpc3RlbmN5IG9yIGEgY29uZmxpY3QgYmV0d2VlbiBMYXdzIGFuZCBIdW1hbiBSaWdodHMgUHJpbmNpcGxlcyBzaGFsbCBiZSBkZXRlcm1pbmVkIGJ5IGFyYml0cmF0aW9uIGFzIHN0YXRlZCBhYm92ZSkuIFdoZXJlIHRoZSBIdW1hbiBSaWdodHMgTGF3cyBvZiBtb3JlIHRoYW4gb25lIGp1cmlzZGljdGlvbiBhcmUgYXBwbGljYWJsZSBvciBpbiBjb25mbGljdCB3aXRoIHJlc3BlY3QgdG8gdGhlIHVzZSBvZiB0aGUgU29mdHdhcmUsIHRoZSBIdW1hbiBSaWdodHMgTGF3cyB0aGF0IGFyZSBtb3N0IHByb3RlY3RpdmUgb2YgdGhlIGluZGl2aWR1YWxzIG9yIGdyb3VwcyBoYXJtZWQgc2hhbGwgYXBwbHkuXG5cbiAgICAgIDMuIEluZGVtbml0eS4gTGljZW5zZWUgc2hhbGwgaG9sZCBoYXJtbGVzcyBhbmQgaW5kZW1uaWZ5IExpY2Vuc29yIChhbmQgYW55IG90aGVyIGNvbnRyaWJ1dG9yKSBhZ2FpbnN0IGFsbCBsb3NzZXMsIGRhbWFnZXMsIGxpYWJpbGl0aWVzLCBkZWZpY2llbmNpZXMsIGNsYWltcywgYWN0aW9ucywganVkZ21lbnRzLCBzZXR0bGVtZW50cywgaW50ZXJlc3QsIGF3YXJkcywgcGVuYWx0aWVzLCBmaW5lcywgY29zdHMsIG9yIGV4cGVuc2VzIG9mIHdoYXRldmVyIGtpbmQsIGluY2x1ZGluZyBMaWNlbnNvcidzIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzLCBhcmlzaW5nIG91dCBvZiBvciByZWxhdGluZyB0byBMaWNlbnNlZSdzIHVzZSBvZiB0aGUgU29mdHdhcmUgaW4gdmlvbGF0aW9uIG9mIEh1bWFuIFJpZ2h0cyBMYXdzIG9yIEh1bWFuIFJpZ2h0cyBQcmluY2lwbGVzLlxuXG4gICAqIEZhaWx1cmUgdG8gQ29tcGx5LiBBbnkgZmFpbHVyZSBvZiBMaWNlbnNlZSB0byBhY3QgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgaXMgYm90aCBhIGJyZWFjaCBvZiB0aGUgTGljZW5zZSBhbmQgYW4gaW5mcmluZ2VtZW50IG9mIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIHRoZSBMaWNlbnNvciAoc3ViamVjdCB0byBleGNlcHRpb25zIHVuZGVyIExhd3MsIGUuZy4sIGZhaXIgdXNlKS4gSW4gdGhlIGV2ZW50IG9mIGEgYnJlYWNoIG9yIGluZnJpbmdlbWVudCwgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBtYXkgYmUgZW5mb3JjZWQgYnkgTGljZW5zb3IgdW5kZXIgdGhlIExhd3Mgb2YgYW55IGp1cmlzZGljdGlvbiB0byB3aGljaCBMaWNlbnNlZSBpcyBzdWJqZWN0LiBMaWNlbnNlZSBhbHNvIGFncmVlcyB0aGF0IHRoZSBMaWNlbnNvciBtYXkgZW5mb3JjZSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIGFnYWluc3QgTGljZW5zZWUgdGhyb3VnaCBzcGVjaWZpYyBwZXJmb3JtYW5jZSAob3Igc2ltaWxhciByZW1lZHkgdW5kZXIgTGF3cykgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgTGF3cy4gRm9yIGNsYXJpdHksIGV4Y2VwdCBpbiB0aGUgZXZlbnQgb2YgYSBicmVhY2ggb2YgdGhpcyBMaWNlbnNlLCBpbmZyaW5nZW1lbnQsIG9yIGFzIG90aGVyd2lzZSBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBtYXkgbm90IHRlcm1pbmF0ZSB0aGlzIExpY2Vuc2Ugd2l0aCBMaWNlbnNlZS5cblxuICAgKiBFbmZvcmNlYWJpbGl0eSBhbmQgSW50ZXJwcmV0YXRpb24uIElmIGFueSB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgZGV0ZXJtaW5lZCB0byBiZSBpbnZhbGlkLCBpbGxlZ2FsLCBvciB1bmVuZm9yY2VhYmxlIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiwgdGhlbiBzdWNoIGludmFsaWRpdHksIGlsbGVnYWxpdHksIG9yIHVuZW5mb3JjZWFiaWxpdHkgc2hhbGwgbm90IGFmZmVjdCBhbnkgb3RoZXIgdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIGludmFsaWRhdGUgb3IgcmVuZGVyIHVuZW5mb3JjZWFibGUgc3VjaCB0ZXJtIG9yIHByb3Zpc2lvbiBpbiBhbnkgb3RoZXIganVyaXNkaWN0aW9uOyBwcm92aWRlZCwgaG93ZXZlciwgc3ViamVjdCB0byBhIGNvdXJ0IG1vZGlmaWNhdGlvbiBwdXJzdWFudCB0byB0aGUgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHNlbnRlbmNlLCBpZiBhbnkgdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHBlcnRhaW5pbmcgdG8gSHVtYW4gUmlnaHRzIExhd3Mgb3IgSHVtYW4gUmlnaHRzIFByaW5jaXBsZXMgaXMgZGVlbWVkIGludmFsaWQsIGlsbGVnYWwsIG9yIHVuZW5mb3JjZWFibGUgYWdhaW5zdCBMaWNlbnNlZSBieSBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24sIGFsbCByaWdodHMgaW4gdGhlIFNvZnR3YXJlIGdyYW50ZWQgdG8gTGljZW5zZWUgc2hhbGwgYmUgZGVlbWVkIG51bGwgYW5kIHZvaWQgYXMgYmV0d2VlbiBMaWNlbnNvciBhbmQgTGljZW5zZWUuIFVwb24gYSBkZXRlcm1pbmF0aW9uIHRoYXQgYW55IHRlcm0gb3IgcHJvdmlzaW9uIGlzIGludmFsaWQsIGlsbGVnYWwsIG9yIHVuZW5mb3JjZWFibGUsIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IExhd3MsIHRoZSBjb3VydCBtYXkgbW9kaWZ5IHRoaXMgTGljZW5zZSB0byBhZmZlY3QgdGhlIG9yaWdpbmFsIHB1cnBvc2UgdGhhdCB0aGUgU29mdHdhcmUgYmUgdXNlZCBpbiBjb21wbGlhbmNlIHdpdGggSHVtYW4gUmlnaHRzIFByaW5jaXBsZXMgYW5kIEh1bWFuIFJpZ2h0cyBMYXdzIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuIFRoZSBsYW5ndWFnZSBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgYXMgdG8gaXRzIGZhaXIgbWVhbmluZyBhbmQgbm90IHN0cmljdGx5IGZvciBvciBhZ2FpbnN0IGFueSBwYXJ0eS5cblxuICAgKiBEaXNjbGFpbWVyLiBUTyBUSEUgRlVMTCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIFRISVMgU09GVFdBUkUgQ09NRVMgXCJBUyBJUyxcIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgTElDRU5TT1IgQU5EIEFOWSBPVEhFUiBDT05UUklCVVRPUiBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIEFOWU9ORSBGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZIEFSSVNJTkcgRlJPTSwgT1VUIE9GLCBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRISVMgTElDRU5TRSwgVU5ERVIgQU5ZIEtJTkQgT0YgTEVHQUwgQ0xBSU0uXG5cblRoaXMgSGlwcG9jcmF0aWMgTGljZW5zZSBpcyBhbiBFdGhpY2FsIFNvdXJjZSBsaWNlbnNlIChodHRwczovL2V0aGljYWxzb3VyY2UuZGV2KSBhbmQgaXMgb2ZmZXJlZCBmb3IgdXNlIGJ5IGxpY2Vuc29ycyBhbmQgbGljZW5zZWVzIGF0IHRoZWlyIG93biByaXNrLCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsIGFuZCB3aXRoIG5vIHdhcnJhbnRpZXMgZXhwcmVzcyBvciBpbXBsaWVkLCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IExhd3MuIl0sImxpY2Vuc2VJZHMiOlsiSGlwcG9jcmF0aWMtMi4xIl0sImtleXdvcmRzIjpbInNvZnR3YXJlIG5hbWUgY29weXJpZ2h0IiwibmFtZSBjb3B5cmlnaHQgYyIsInllYXIgY29weXJpZ2h0IGhvbGRlciIsImhvbGRlciBzIGF1dGhvciIsInMgYXV0aG9yIHMiLCJhdXRob3IgcyBsaWNlbnNvciIsInMgbGljZW5zb3IgaGlwcG9jcmF0aWMiLCJsaWNlbnNvciBoaXBwb2NyYXRpYyBsaWNlbnNlIiwiaGlwcG9jcmF0aWMgbGljZW5zZSB2ZXJzaW9uIiwiMiAxIHB1cnBvc2UiLCIxIHB1cnBvc2UgdGhlIiwiaXMgZm9yIHRoZSIsImZvciB0aGUgbGljZW5zb3IiLCJ0aGUgbGljZW5zb3IgbmFtZWQiLCJsaWNlbnNvciBuYW1lZCBhYm92ZSIsIm5hbWVkIGFib3ZlIHRvIiwiYWJvdmUgdG8gcGVybWl0IiwicGVybWl0IHRoZSBsaWNlbnNlZSIsImxpY2Vuc2VlIGFzIGRlZmluZWQiLCJkZWZpbmVkIGJlbG93IGJyb2FkIiwiYmVsb3cgYnJvYWQgcGVybWlzc2lvbiIsImJyb2FkIHBlcm1pc3Npb24gaWYiLCJwZXJtaXNzaW9uIGlmIGNvbnNpc3RlbnQiLCJpZiBjb25zaXN0ZW50IHdpdGgiLCJyaWdodHMgbGF3cyBhbmQiLCJyaWdodHMgcHJpbmNpcGxlcyBhcyIsInByaW5jaXBsZXMgYXMgZWFjaCIsImFzIGVhY2ggaXMiLCJlYWNoIGlzIGRlZmluZWQiLCJpcyBkZWZpbmVkIGJlbG93IiwiYmVsb3cgdG8gdXNlIiwidXNlIGFuZCB3b3JrIiwiYW5kIHdvcmsgd2l0aCIsImRlZmluZWQgYmVsb3cgd2l0aGluIiwiYmVsb3cgd2l0aGluIHRoZSIsIndpdGhpbiB0aGUgZnVsbCIsInRoZSBmdWxsIHNjb3BlIiwiZnVsbCBzY29wZSBvZiIsInNjb3BlIG9mIGxpY2Vuc29yIiwicGF0ZW50IHJpZ2h0cyBpZiIsImFueSBpbiB0aGUiLCJ0aGUgc29mdHdhcmUgd2hpbGUiLCJzb2Z0d2FyZSB3aGlsZSBlbnN1cmluZyIsIndoaWxlIGVuc3VyaW5nIGF0dHJpYnV0aW9uIiwiZW5zdXJpbmcgYXR0cmlidXRpb24gYW5kIiwiYXR0cmlidXRpb24gYW5kIHByb3RlY3RpbmciLCJhbmQgcHJvdGVjdGluZyB0aGUiLCJwcm90ZWN0aW5nIHRoZSBsaWNlbnNvciIsImxpY2Vuc29yIGZyb20gbGlhYmlsaXR5IiwiZnJvbSBsaWFiaWxpdHkgcGVybWlzc2lvbiIsImxpYWJpbGl0eSBwZXJtaXNzaW9uIGFuZCIsInBlcm1pc3Npb24gYW5kIGNvbmRpdGlvbnMiLCJjb25kaXRpb25zIHRoZSBsaWNlbnNvciIsImxpY2Vuc29yIGdyYW50cyBwZXJtaXNzaW9uIiwiZ3JhbnRzIHBlcm1pc3Npb24gYnkiLCJwZXJtaXNzaW9uIGJ5IHRoaXMiLCJsaWNlbnNlIGxpY2Vuc2UgZnJlZSIsImxpY2Vuc2UgZnJlZSBvZiIsImxpY2Vuc29yIHMgcmlnaHRzIiwiYW5kIHBhdGVudCBsYXciLCJwYXRlbnQgbGF3IHRvIiwibGF3IHRvIGFueSIsIm9yIGVudGl0eSB0aGUiLCJlbnRpdHkgdGhlIGxpY2Vuc2VlIiwidGhlIGxpY2Vuc2VlIG9idGFpbmluZyIsImV2ZXJ5dGhpbmcgd2l0aCB0aGUiLCJvdGhlcndpc2UgaW5mcmluZ2UgaSIsImluZnJpbmdlIGkgdGhlIiwiaSB0aGUgbGljZW5zb3IiLCJpaSBhbnkgcGF0ZW50IiwiY2xhaW1zIHRvIHRoZSIsInRvIGxpY2Vuc2Ugc3ViamVjdCIsImFuZCBjb25kaXRpb25zIGFjY2VwdGFuY2UiLCJjb25kaXRpb25zIGFjY2VwdGFuY2UgdGhpcyIsInBlcnNvbiBhbmQgZW50aXR5IiwiYW5kIGVudGl0eSBzdWJqZWN0IiwiZW50aXR5IHN1YmplY3QgdG8iLCJzdWJqZWN0IHRvIGl0cyIsImFuZCBjb25kaXRpb25zIGxpY2Vuc2VlIiwiY29uZGl0aW9ucyBsaWNlbnNlZSBhY2NlcHRzIiwibGljZW5zZWUgYWNjZXB0cyB0aGlzIiwiYWNjZXB0cyB0aGlzIGxpY2Vuc2UiLCJsaWNlbnNlIGFuZCBhZ3JlZXMiLCJhZ3JlZXMgdG8gaXRzIiwic29mdHdhcmUgdGhhdCBhYnNlbnQiLCJieSBsaWNlbnNvciBub3RpY2UiLCJsaWNlbnNvciBub3RpY2UgbGljZW5zZWUiLCJsaWNlbnNlZSBtdXN0IGVuc3VyZSIsInNvZnR3YXJlIGZyb20gbGljZW5zZWUiLCJmcm9tIGxpY2Vuc2VlIHdpdGgiLCJsaWNlbnNlZSB3aXRoIG9yIiwiY2hhbmdlcyBhbHNvIHJlY2VpdmVzIiwiYWxzbyByZWNlaXZlcyB0aGUiLCJyZWNlaXZlcyB0aGUgbGljZW5zZSIsIm5vdGljZSBhbmQgaWYiLCJhbmQgaWYgaW5jbHVkZWQiLCJpZiBpbmNsdWRlZCBieSIsInRoZSBsaWNlbnNvciBwYXRlbnQiLCJsaWNlbnNvciBwYXRlbnQgdHJhZGVtYXJrIiwiYW5kIGF0dHJpYnV0aW9uIG5vdGljZSIsImF0dHJpYnV0aW9uIG5vdGljZSBsaWNlbnNlZSIsInNvZnR3YXJlIHRvIGNhcnJ5Iiwic3RhdGluZyB0aGF0IGxpY2Vuc2VlIiwidGhhdCBsaWNlbnNlZSBjaGFuZ2VkIiwibGljZW5zZWUgY2hhbmdlZCB0aGUiLCJjaGFuZ2VkIHRoZSBzb2Z0d2FyZSIsInNvZnR3YXJlIGZvciBjbGFyaXR5IiwiZm9yIGNsYXJpdHkgYWx0aG91Z2giLCJjbGFyaXR5IGFsdGhvdWdoIGxpY2Vuc2VlIiwiYWx0aG91Z2ggbGljZW5zZWUgaXMiLCJsaWNlbnNlZSBpcyBmcmVlIiwiZnJlZSB0byBjcmVhdGUiLCJ0byBjcmVhdGUgbW9kaWZpY2F0aW9ucyIsImNyZWF0ZSBtb2RpZmljYXRpb25zIG9mIiwiYW5kIGRpc3RyaWJ1dGUgb25seSIsImRpc3RyaWJ1dGUgb25seSB0aGUiLCJ0aGUgbW9kaWZpZWQgcG9ydGlvbiIsIm1vZGlmaWVkIHBvcnRpb24gY3JlYXRlZCIsInBvcnRpb24gY3JlYXRlZCBieSIsImNyZWF0ZWQgYnkgbGljZW5zZWUiLCJieSBsaWNlbnNlZSB3aXRoIiwibGljZW5zZWUgd2l0aCBhZGRpdGlvbmFsIiwid2l0aCBhZGRpdGlvbmFsIG9yIiwiZGlmZmVyZW50IHRlcm1zIHRoZSIsInRlcm1zIHRoZSBwb3J0aW9uIiwidGhlIHBvcnRpb24gb2YiLCJzb2Z0d2FyZSBub3QgbW9kaWZpZWQiLCJub3QgbW9kaWZpZWQgbXVzdCIsIm1vZGlmaWVkIG11c3QgYmUiLCJsaWNlbnNlIGlmIGFueW9uZSIsImFueW9uZSBub3RpZmllcyBsaWNlbnNlZSIsIm5vdGlmaWVzIGxpY2Vuc2VlIGluIiwibGljZW5zZWUgaW4gd3JpdGluZyIsIndyaXRpbmcgdGhhdCBsaWNlbnNlZSIsInRoYXQgbGljZW5zZWUgaGFzIiwiaGFzIG5vdCBjb21wbGllZCIsImNvbXBsaWVkIHdpdGggdGhpcyIsIndpdGggdGhpcyBub3RpY2UiLCJ0aGlzIG5vdGljZSBzZWN0aW9uIiwibm90aWNlIHNlY3Rpb24gbGljZW5zZWUiLCJzZWN0aW9uIGxpY2Vuc2VlIGNhbiIsImxpY2Vuc2VlIGNhbiBrZWVwIiwiY2FuIGtlZXAgdGhpcyIsImtlZXAgdGhpcyBsaWNlbnNlIiwibm90aWNlIGlmIGxpY2Vuc2VlIiwiaWYgbGljZW5zZWUgZG9lcyIsImxpY2Vuc2VlIGRvZXMgbm90IiwiZG9lcyBub3QgZG8iLCJkbyBzbyBsaWNlbnNlZSIsInNvIGxpY2Vuc2VlIHMiLCJsaWNlbnNlZSBzIGxpY2Vuc2UiLCJlbmQgaW1tZWRpYXRlbHkgY29tcGxpYW5jZSIsImltbWVkaWF0ZWx5IGNvbXBsaWFuY2Ugd2l0aCIsInJpZ2h0cyBsYXdzIDEiLCJsYXdzIDEgaHVtYW4iLCIxIGh1bWFuIHJpZ2h0cyIsInByaW5jaXBsZXMgYSBsaWNlbnNlZSIsImEgbGljZW5zZWUgaXMiLCJsaWNlbnNlZSBpcyBhZHZpc2VkIiwiaXMgYWR2aXNlZCB0byIsImFkdmlzZWQgdG8gY29uc3VsdCIsInRvIGNvbnN1bHQgdGhlIiwiY29uc3VsdCB0aGUgYXJ0aWNsZXMiLCJ0aGUgYXJ0aWNsZXMgb2YiLCJhcnRpY2xlcyBvZiB0aGUiLCJ1bml0ZWQgbmF0aW9ucyB1bml2ZXJzYWwiLCJuYXRpb25zIHVuaXZlcnNhbCBkZWNsYXJhdGlvbiIsInVuaXZlcnNhbCBkZWNsYXJhdGlvbiBvZiIsImRlY2xhcmF0aW9uIG9mIGh1bWFuIiwiaHVtYW4gcmlnaHRzIGFuZCIsInVuaXRlZCBuYXRpb25zIGdsb2JhbCIsIm5hdGlvbnMgZ2xvYmFsIGNvbXBhY3QiLCJnbG9iYWwgY29tcGFjdCB0aGF0IiwiY29tcGFjdCB0aGF0IGRlZmluZSIsInRoYXQgZGVmaW5lIHJlY29nbml6ZWQiLCJkZWZpbmUgcmVjb2duaXplZCBwcmluY2lwbGVzIiwicmVjb2duaXplZCBwcmluY2lwbGVzIG9mIiwicHJpbmNpcGxlcyBvZiBpbnRlcm5hdGlvbmFsIiwib2YgaW50ZXJuYXRpb25hbCBodW1hbiIsImludGVybmF0aW9uYWwgaHVtYW4gcmlnaHRzIiwiaHVtYW4gcmlnaHRzIHRoZSIsInJpZ2h0cyB0aGUgaHVtYW4iLCJyaWdodHMgcHJpbmNpcGxlcyBsaWNlbnNlZSIsInByaW5jaXBsZXMgbGljZW5zZWUgc2hhbGwiLCJsaWNlbnNlZSBzaGFsbCB1c2UiLCJyaWdodHMgcHJpbmNpcGxlcyBiIiwicHJpbmNpcGxlcyBiIHVubGVzcyIsImIgdW5sZXNzIHRoZSIsImxpY2Vuc2VlIGFncmVlIG90aGVyd2lzZSIsImFncmVlIG90aGVyd2lzZSBhbnkiLCJvdGhlcndpc2UgYW55IGRpc3B1dGUiLCJyZWxhdGluZyB0byBpIiwidG8gaSBzZWN0aW9uIiwiaSBzZWN0aW9uIDEiLCIxIGEgcmVnYXJkaW5nIiwiYSByZWdhcmRpbmcgaHVtYW4iLCJyZWdhcmRpbmcgaHVtYW4gcmlnaHRzIiwicmlnaHRzIHByaW5jaXBsZXMgaW5jbHVkaW5nIiwicHJpbmNpcGxlcyBpbmNsdWRpbmcgdGhlIiwiaW5jbHVkaW5nIHRoZSBicmVhY2giXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhpcyBzb3VyY2UgY29kZSBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byB5b3UgYnkgSUJNIG9uIGFuIEFTLUlTIGJhc2lzLiBBbnlvbmUgcmVjZWl2aW5nIHRoaXMgc291cmNlIGlzIGxpY2Vuc2VkIHVuZGVyIElCTSBjb3B5cmlnaHRzIHRvIHVzZSBpdCBpbiBhbnkgd2F5IGhlIG9yIHNoZSBkZWVtcyBmaXQsIGluY2x1ZGluZyBjb3B5aW5nIGl0LCBtb2RpZnlpbmcgaXQsIGNvbXBpbGluZyBpdCwgYW5kIHJlZGlzdHJpYnV0aW5nIGl0IGVpdGhlciB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucy4gTm8gbGljZW5zZSB1bmRlciBJQk0gcGF0ZW50cyBvciBwYXRlbnQgYXBwbGljYXRpb25zIGlzIHRvIGJlIGltcGxpZWQgYnkgdGhlIGNvcHlyaWdodCBsaWNlbnNlLlxuXG5BbnkgdXNlciBvZiB0aGlzIHNvZnR3YXJlIHNob3VsZCB1bmRlcnN0YW5kIHRoYXQgSUJNIGNhbm5vdCBwcm92aWRlIHRlY2huaWNhbCBzdXBwb3J0IGZvciB0aGlzIHNvZnR3YXJlIGFuZCB3aWxsIG5vdCBiZSByZXNwb25zaWJsZSBmb3IgYW55IGNvbnNlcXVlbmNlcyByZXN1bHRpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuXG5cbkFueSBwZXJzb24gd2hvIHRyYW5zZmVycyB0aGlzIHNvdXJjZSBjb2RlIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgbXVzdCBpbmNsdWRlIHRoZSBJQk0gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBwYXJhZ3JhcGgsIGFuZCB0aGUgcHJlY2VkaW5nIHR3byBwYXJhZ3JhcGhzIGluIHRoZSB0cmFuc2ZlcnJlZCBzb2Z0d2FyZS5cblxuQ09QWVJJR0hUIEkgQiBNIENPUlBPUkFUSU9OIDIwMDJcblxuTElDRU5TRUQgTUFURVJJQUwgLSBQUk9HUkFNIFBST1BFUlRZIE9GIEkgQiBNIl0sImxpY2Vuc2VJZHMiOlsiSUJNLXBpYnMiXSwia2V5d29yZHMiOlsieW91IGJ5IGlibSIsImJ5IGlibSBvbiIsImlibSBvbiBhbiIsImlzIGJhc2lzIGFueW9uZSIsImJhc2lzIGFueW9uZSByZWNlaXZpbmciLCJhbnlvbmUgcmVjZWl2aW5nIHRoaXMiLCJyZWNlaXZpbmcgdGhpcyBzb3VyY2UiLCJ0aGlzIHNvdXJjZSBpcyIsInNvdXJjZSBpcyBsaWNlbnNlZCIsImxpY2Vuc2VkIHVuZGVyIGlibSIsInVuZGVyIGlibSBjb3B5cmlnaHRzIiwiaWJtIGNvcHlyaWdodHMgdG8iLCJjb3B5cmlnaHRzIHRvIHVzZSIsImFueSB3YXkgaGUiLCJ3YXkgaGUgb3IiLCJvciBzaGUgZGVlbXMiLCJzaGUgZGVlbXMgZml0IiwiZGVlbXMgZml0IGluY2x1ZGluZyIsImZpdCBpbmNsdWRpbmcgY29weWluZyIsImluY2x1ZGluZyBjb3B5aW5nIGl0IiwiY29weWluZyBpdCBtb2RpZnlpbmciLCJpdCBtb2RpZnlpbmcgaXQiLCJtb2RpZnlpbmcgaXQgY29tcGlsaW5nIiwiaXQgY29tcGlsaW5nIGl0IiwiY29tcGlsaW5nIGl0IGFuZCIsIml0IGFuZCByZWRpc3RyaWJ1dGluZyIsImFuZCByZWRpc3RyaWJ1dGluZyBpdCIsInJlZGlzdHJpYnV0aW5nIGl0IGVpdGhlciIsIml0IGVpdGhlciB3aXRoIiwid2l0aG91dCBtb2RpZmljYXRpb25zIG5vIiwibW9kaWZpY2F0aW9ucyBubyBsaWNlbnNlIiwibm8gbGljZW5zZSB1bmRlciIsImxpY2Vuc2UgdW5kZXIgaWJtIiwidW5kZXIgaWJtIHBhdGVudHMiLCJpYm0gcGF0ZW50cyBvciIsInBhdGVudCBhcHBsaWNhdGlvbnMgaXMiLCJhcHBsaWNhdGlvbnMgaXMgdG8iLCJ0byBiZSBpbXBsaWVkIiwiYmUgaW1wbGllZCBieSIsImltcGxpZWQgYnkgdGhlIiwiY29weXJpZ2h0IGxpY2Vuc2UgYW55IiwibGljZW5zZSBhbnkgdXNlciIsImFueSB1c2VyIG9mIiwidXNlciBvZiB0aGlzIiwic29mdHdhcmUgc2hvdWxkIHVuZGVyc3RhbmQiLCJzaG91bGQgdW5kZXJzdGFuZCB0aGF0IiwidW5kZXJzdGFuZCB0aGF0IGlibSIsInRoYXQgaWJtIGNhbm5vdCIsImlibSBjYW5ub3QgcHJvdmlkZSIsImNhbm5vdCBwcm92aWRlIHRlY2huaWNhbCIsInRlY2huaWNhbCBzdXBwb3J0IGZvciIsIm5vdCBiZSByZXNwb25zaWJsZSIsImZvciBhbnkgY29uc2VxdWVuY2VzIiwiYW55IGNvbnNlcXVlbmNlcyByZXN1bHRpbmciLCJjb25zZXF1ZW5jZXMgcmVzdWx0aW5nIGZyb20iLCJ0aGlzIHNvZnR3YXJlIGFueSIsInNvZnR3YXJlIGFueSBwZXJzb24iLCJwZXJzb24gd2hvIHRyYW5zZmVycyIsIndobyB0cmFuc2ZlcnMgdGhpcyIsInRyYW5zZmVycyB0aGlzIHNvdXJjZSIsImluY2x1ZGUgdGhlIGlibSIsInRoZSBpYm0gY29weXJpZ2h0IiwiaWJtIGNvcHlyaWdodCBub3RpY2UiLCJub3RpY2UgdGhpcyBwYXJhZ3JhcGgiLCJhbmQgdGhlIHByZWNlZGluZyIsInRoZSBwcmVjZWRpbmcgdHdvIiwicHJlY2VkaW5nIHR3byBwYXJhZ3JhcGhzIiwidHdvIHBhcmFncmFwaHMgaW4iLCJwYXJhZ3JhcGhzIGluIHRoZSIsImluIHRoZSB0cmFuc2ZlcnJlZCIsInRoZSB0cmFuc2ZlcnJlZCBzb2Z0d2FyZSIsInRyYW5zZmVycmVkIHNvZnR3YXJlIGNvcHlyaWdodCIsInNvZnR3YXJlIGNvcHlyaWdodCBpIiwiY29weXJpZ2h0IGkgYiIsImIgbSBjb3Jwb3JhdGlvbiIsIm0gY29ycG9yYXRpb24gMjAwMiIsImNvcnBvcmF0aW9uIDIwMDIgbGljZW5zZWQiLCIyMDAyIGxpY2Vuc2VkIG1hdGVyaWFsIiwibGljZW5zZWQgbWF0ZXJpYWwgcHJvZ3JhbSIsIm1hdGVyaWFsIHByb2dyYW0gcHJvcGVydHkiLCJwcm9ncmFtIHByb3BlcnR5IG9mIiwicHJvcGVydHkgb2YgaSIsIm9mIGkgYiIsInRoaXMgc291cmNlIGNvZGUgaGFzIiwiY29kZSBoYXMgYmVlbiBtYWRlIiwidG8geW91IGJ5IGlibSIsInlvdSBieSBpYm0gb24iLCJieSBpYm0gb24gYW4iLCJpYm0gb24gYW4gYXMiLCJhcyBpcyBiYXNpcyBhbnlvbmUiLCJpcyBiYXNpcyBhbnlvbmUgcmVjZWl2aW5nIiwiYmFzaXMgYW55b25lIHJlY2VpdmluZyB0aGlzIiwiYW55b25lIHJlY2VpdmluZyB0aGlzIHNvdXJjZSIsInJlY2VpdmluZyB0aGlzIHNvdXJjZSBpcyIsInRoaXMgc291cmNlIGlzIGxpY2Vuc2VkIiwic291cmNlIGlzIGxpY2Vuc2VkIHVuZGVyIiwiaXMgbGljZW5zZWQgdW5kZXIgaWJtIiwibGljZW5zZWQgdW5kZXIgaWJtIGNvcHlyaWdodHMiLCJ1bmRlciBpYm0gY29weXJpZ2h0cyB0byIsImlibSBjb3B5cmlnaHRzIHRvIHVzZSIsImNvcHlyaWdodHMgdG8gdXNlIGl0IiwiaXQgaW4gYW55IHdheSIsImluIGFueSB3YXkgaGUiLCJhbnkgd2F5IGhlIG9yIiwid2F5IGhlIG9yIHNoZSIsImhlIG9yIHNoZSBkZWVtcyIsIm9yIHNoZSBkZWVtcyBmaXQiLCJzaGUgZGVlbXMgZml0IGluY2x1ZGluZyIsImRlZW1zIGZpdCBpbmNsdWRpbmcgY29weWluZyIsImZpdCBpbmNsdWRpbmcgY29weWluZyBpdCIsImluY2x1ZGluZyBjb3B5aW5nIGl0IG1vZGlmeWluZyIsImNvcHlpbmcgaXQgbW9kaWZ5aW5nIGl0IiwiaXQgbW9kaWZ5aW5nIGl0IGNvbXBpbGluZyIsIm1vZGlmeWluZyBpdCBjb21waWxpbmcgaXQiLCJpdCBjb21waWxpbmcgaXQgYW5kIiwiY29tcGlsaW5nIGl0IGFuZCByZWRpc3RyaWJ1dGluZyIsIml0IGFuZCByZWRpc3RyaWJ1dGluZyBpdCIsImFuZCByZWRpc3RyaWJ1dGluZyBpdCBlaXRoZXIiLCJyZWRpc3RyaWJ1dGluZyBpdCBlaXRoZXIgd2l0aCIsIml0IGVpdGhlciB3aXRoIG9yIiwib3Igd2l0aG91dCBtb2RpZmljYXRpb25zIG5vIiwid2l0aG91dCBtb2RpZmljYXRpb25zIG5vIGxpY2Vuc2UiLCJtb2RpZmljYXRpb25zIG5vIGxpY2Vuc2UgdW5kZXIiLCJubyBsaWNlbnNlIHVuZGVyIGlibSIsImxpY2Vuc2UgdW5kZXIgaWJtIHBhdGVudHMiLCJ1bmRlciBpYm0gcGF0ZW50cyBvciIsImlibSBwYXRlbnRzIG9yIHBhdGVudCIsIm9yIHBhdGVudCBhcHBsaWNhdGlvbnMgaXMiLCJwYXRlbnQgYXBwbGljYXRpb25zIGlzIHRvIiwiYXBwbGljYXRpb25zIGlzIHRvIGJlIiwiaXMgdG8gYmUgaW1wbGllZCIsInRvIGJlIGltcGxpZWQgYnkiLCJiZSBpbXBsaWVkIGJ5IHRoZSIsImltcGxpZWQgYnkgdGhlIGNvcHlyaWdodCIsImJ5IHRoZSBjb3B5cmlnaHQgbGljZW5zZSIsInRoZSBjb3B5cmlnaHQgbGljZW5zZSBhbnkiLCJjb3B5cmlnaHQgbGljZW5zZSBhbnkgdXNlciIsImxpY2Vuc2UgYW55IHVzZXIgb2YiLCJhbnkgdXNlciBvZiB0aGlzIiwidXNlciBvZiB0aGlzIHNvZnR3YXJlIiwidGhpcyBzb2Z0d2FyZSBzaG91bGQgdW5kZXJzdGFuZCIsInNvZnR3YXJlIHNob3VsZCB1bmRlcnN0YW5kIHRoYXQiLCJzaG91bGQgdW5kZXJzdGFuZCB0aGF0IGlibSIsInVuZGVyc3RhbmQgdGhhdCBpYm0gY2Fubm90IiwidGhhdCBpYm0gY2Fubm90IHByb3ZpZGUiLCJpYm0gY2Fubm90IHByb3ZpZGUgdGVjaG5pY2FsIiwiY2Fubm90IHByb3ZpZGUgdGVjaG5pY2FsIHN1cHBvcnQiLCJwcm92aWRlIHRlY2huaWNhbCBzdXBwb3J0IGZvciIsInRlY2huaWNhbCBzdXBwb3J0IGZvciB0aGlzIiwic3VwcG9ydCBmb3IgdGhpcyBzb2Z0d2FyZSIsInRoaXMgc29mdHdhcmUgYW5kIHdpbGwiLCJzb2Z0d2FyZSBhbmQgd2lsbCBub3QiLCJ3aWxsIG5vdCBiZSByZXNwb25zaWJsZSIsIm5vdCBiZSByZXNwb25zaWJsZSBmb3IiLCJyZXNwb25zaWJsZSBmb3IgYW55IGNvbnNlcXVlbmNlcyIsImZvciBhbnkgY29uc2VxdWVuY2VzIHJlc3VsdGluZyIsImFueSBjb25zZXF1ZW5jZXMgcmVzdWx0aW5nIGZyb20iLCJjb25zZXF1ZW5jZXMgcmVzdWx0aW5nIGZyb20gdGhlIiwib2YgdGhpcyBzb2Z0d2FyZSBhbnkiLCJ0aGlzIHNvZnR3YXJlIGFueSBwZXJzb24iLCJzb2Z0d2FyZSBhbnkgcGVyc29uIHdobyIsImFueSBwZXJzb24gd2hvIHRyYW5zZmVycyIsInBlcnNvbiB3aG8gdHJhbnNmZXJzIHRoaXMiLCJ3aG8gdHJhbnNmZXJzIHRoaXMgc291cmNlIiwidHJhbnNmZXJzIHRoaXMgc291cmNlIGNvZGUiLCJtdXN0IGluY2x1ZGUgdGhlIGlibSIsImluY2x1ZGUgdGhlIGlibSBjb3B5cmlnaHQiLCJ0aGUgaWJtIGNvcHlyaWdodCBub3RpY2UiLCJpYm0gY29weXJpZ2h0IG5vdGljZSB0aGlzIiwiY29weXJpZ2h0IG5vdGljZSB0aGlzIHBhcmFncmFwaCIsIm5vdGljZSB0aGlzIHBhcmFncmFwaCBhbmQiLCJwYXJhZ3JhcGggYW5kIHRoZSBwcmVjZWRpbmciLCJhbmQgdGhlIHByZWNlZGluZyB0d28iLCJ0aGUgcHJlY2VkaW5nIHR3byBwYXJhZ3JhcGhzIiwicHJlY2VkaW5nIHR3byBwYXJhZ3JhcGhzIGluIiwidHdvIHBhcmFncmFwaHMgaW4gdGhlIiwicGFyYWdyYXBocyBpbiB0aGUgdHJhbnNmZXJyZWQiLCJpbiB0aGUgdHJhbnNmZXJyZWQgc29mdHdhcmUiLCJ0aGUgdHJhbnNmZXJyZWQgc29mdHdhcmUgY29weXJpZ2h0IiwidHJhbnNmZXJyZWQgc29mdHdhcmUgY29weXJpZ2h0IGkiLCJzb2Z0d2FyZSBjb3B5cmlnaHQgaSBiIiwiY29weXJpZ2h0IGkgYiBtIiwiaSBiIG0gY29ycG9yYXRpb24iLCJiIG0gY29ycG9yYXRpb24gMjAwMiIsIm0gY29ycG9yYXRpb24gMjAwMiBsaWNlbnNlZCIsImNvcnBvcmF0aW9uIDIwMDIgbGljZW5zZWQgbWF0ZXJpYWwiLCIyMDAyIGxpY2Vuc2VkIG1hdGVyaWFsIHByb2dyYW0iLCJsaWNlbnNlZCBtYXRlcmlhbCBwcm9ncmFtIHByb3BlcnR5IiwibWF0ZXJpYWwgcHJvZ3JhbSBwcm9wZXJ0eSBvZiIsInByb2dyYW0gcHJvcGVydHkgb2YgaSIsInByb3BlcnR5IG9mIGkgYiIsIm9mIGkgYiBtIiwidGhpcyBzb3VyY2UgY29kZSBoYXMgYmVlbiIsInNvdXJjZSBjb2RlIGhhcyBiZWVuIG1hZGUiLCJjb2RlIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIiwiYmVlbiBtYWRlIGF2YWlsYWJsZSB0byB5b3UiLCJhdmFpbGFibGUgdG8geW91IGJ5IGlibSIsInRvIHlvdSBieSBpYm0gb24iLCJ5b3UgYnkgaWJtIG9uIGFuIiwiYnkgaWJtIG9uIGFuIGFzIl19LHsibGljZW5zZVRleHRzIjpbIklDVSBMaWNlbnNlIC0gSUNVIDEuOC4xIGFuZCBsYXRlclxuXG5DT1BZUklHSFQgQU5EIFBFUk1JU1NJT04gTk9USUNFIENvcHlyaWdodCAoYykgMTk5NS0yMDE0IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVyc1xuXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGFuZCB0aGF0IGJvdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIEhPTERFUlMgSU5DTFVERUQgSU4gVEhJUyBOT1RJQ0UgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG5cbkV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlciBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuIl0sImxpY2Vuc2VJZHMiOlsiSUNVIl0sImtleXdvcmRzIjpbImljdSBsaWNlbnNlIGljdSIsImxpY2Vuc2UgaWN1IDEiLCJpY3UgMSA4IiwiMSBhbmQgbGF0ZXIiLCJhbmQgbGF0ZXIgY29weXJpZ2h0IiwibGF0ZXIgY29weXJpZ2h0IGFuZCIsImMgMTk5NSAyMDE0IiwiMTk5NSAyMDE0IGludGVybmF0aW9uYWwiLCIyMDE0IGludGVybmF0aW9uYWwgYnVzaW5lc3MiLCJzb2Z0d2FyZSBhbmQgdGhhdCIsImJvdGggdGhlIGFib3ZlIiwic3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIHRoZSIsInRoaXMgc29mdHdhcmUgZXhjZXB0IiwiaWN1IGxpY2Vuc2UgaWN1IDEiLCJsaWNlbnNlIGljdSAxIDgiLCJpY3UgMSA4IDEiLCIxIDggMSBhbmQiLCI4IDEgYW5kIGxhdGVyIiwiMSBhbmQgbGF0ZXIgY29weXJpZ2h0IiwiYW5kIGxhdGVyIGNvcHlyaWdodCBhbmQiLCJsYXRlciBjb3B5cmlnaHQgYW5kIHBlcm1pc3Npb24iLCJub3RpY2UgY29weXJpZ2h0IGMgMTk5NSIsImNvcHlyaWdodCBjIDE5OTUgMjAxNCIsImMgMTk5NSAyMDE0IGludGVybmF0aW9uYWwiLCIxOTk1IDIwMTQgaW50ZXJuYXRpb25hbCBidXNpbmVzcyIsIjIwMTQgaW50ZXJuYXRpb25hbCBidXNpbmVzcyBtYWNoaW5lcyIsInNvIHByb3ZpZGVkIHRoYXQgdGhlIiwidGhlIHNvZnR3YXJlIGFuZCB0aGF0Iiwic29mdHdhcmUgYW5kIHRoYXQgYm90aCIsInRoYXQgYm90aCB0aGUgYWJvdmUiLCJib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQiLCJpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24gdGhlIiwic3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIHRoZSBzb2Z0d2FyZSIsImRvY3VtZW50YXRpb24gdGhlIHNvZnR3YXJlIGlzIiwib2YgdGhpcyBzb2Z0d2FyZSBleGNlcHQiLCJ0aGlzIHNvZnR3YXJlIGV4Y2VwdCBhcyIsImljdSBsaWNlbnNlIGljdSAxIDgiLCJsaWNlbnNlIGljdSAxIDggMSIsImljdSAxIDggMSBhbmQiLCIxIDggMSBhbmQgbGF0ZXIiLCI4IDEgYW5kIGxhdGVyIGNvcHlyaWdodCIsIjEgYW5kIGxhdGVyIGNvcHlyaWdodCBhbmQiLCJhbmQgbGF0ZXIgY29weXJpZ2h0IGFuZCBwZXJtaXNzaW9uIiwibGF0ZXIgY29weXJpZ2h0IGFuZCBwZXJtaXNzaW9uIG5vdGljZSIsInBlcm1pc3Npb24gbm90aWNlIGNvcHlyaWdodCBjIDE5OTUiLCJub3RpY2UgY29weXJpZ2h0IGMgMTk5NSAyMDE0IiwiY29weXJpZ2h0IGMgMTk5NSAyMDE0IGludGVybmF0aW9uYWwiLCJjIDE5OTUgMjAxNCBpbnRlcm5hdGlvbmFsIGJ1c2luZXNzIiwiMTk5NSAyMDE0IGludGVybmF0aW9uYWwgYnVzaW5lc3MgbWFjaGluZXMiLCIyMDE0IGludGVybmF0aW9uYWwgYnVzaW5lc3MgbWFjaGluZXMgY29ycG9yYXRpb24iLCJvdGhlcnMgYWxsIHJpZ2h0cyByZXNlcnZlZCBwZXJtaXNzaW9uIiwiZG8gc28gcHJvdmlkZWQgdGhhdCB0aGUiLCJzbyBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSIsIm9mIHRoZSBzb2Z0d2FyZSBhbmQgdGhhdCIsInRoZSBzb2Z0d2FyZSBhbmQgdGhhdCBib3RoIiwic29mdHdhcmUgYW5kIHRoYXQgYm90aCB0aGUiLCJhbmQgdGhhdCBib3RoIHRoZSBhYm92ZSIsInRoYXQgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0IiwiYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSIsImFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24gdGhlIiwiaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIHRoZSBzb2Z0d2FyZSIsInN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiB0aGUgc29mdHdhcmUgaXMiLCJkb2N1bWVudGF0aW9uIHRoZSBzb2Z0d2FyZSBpcyBwcm92aWRlZCIsInBlcmZvcm1hbmNlIG9mIHRoaXMgc29mdHdhcmUgZXhjZXB0Iiwib2YgdGhpcyBzb2Z0d2FyZSBleGNlcHQgYXMiLCJ0aGlzIHNvZnR3YXJlIGV4Y2VwdCBhcyBjb250YWluZWQiXX0seyJsaWNlbnNlVGV4dHMiOlsiSW5kZXBlbmRlbnQgSlBFRyBHcm91cCBMaWNlbnNlIExFR0FMIElTU1VFU1xuXG5JbiBwbGFpbiBFbmdsaXNoOlxuXG4gICAxLiBXZSBkb24ndCBwcm9taXNlIHRoYXQgdGhpcyBzb2Z0d2FyZSB3b3Jrcy4gKEJ1dCBpZiB5b3UgZmluZCBhbnkgYnVncywgcGxlYXNlIGxldCB1cyBrbm93ISlcblxuICAgMi4gWW91IGNhbiB1c2UgdGhpcyBzb2Z0d2FyZSBmb3Igd2hhdGV2ZXIgeW91IHdhbnQuIFlvdSBkb24ndCBoYXZlIHRvIHBheSB1cy5cblxuICAgMy4gWW91IG1heSBub3QgcHJldGVuZCB0aGF0IHlvdSB3cm90ZSB0aGlzIHNvZnR3YXJlLiBJZiB5b3UgdXNlIGl0IGluIGEgcHJvZ3JhbSwgeW91IG11c3QgYWNrbm93bGVkZ2Ugc29tZXdoZXJlIGluIHlvdXIgZG9jdW1lbnRhdGlvbiB0aGF0IHlvdSd2ZSB1c2VkIHRoZSBJSkcgY29kZS5cblxuSW4gbGVnYWxlc2U6XG5cblRoZSBhdXRob3JzIG1ha2UgTk8gV0FSUkFOVFkgb3IgcmVwcmVzZW50YXRpb24sIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIHdpdGggcmVzcGVjdCB0byB0aGlzIHNvZnR3YXJlLCBpdHMgcXVhbGl0eSwgYWNjdXJhY3ksIG1lcmNoYW50YWJpbGl0eSwgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgXCJBUyBJU1wiLCBhbmQgeW91LCBpdHMgdXNlciwgYXNzdW1lIHRoZSBlbnRpcmUgcmlzayBhcyB0byBpdHMgcXVhbGl0eSBhbmQgYWNjdXJhY3kuXG5cblRoaXMgc29mdHdhcmUgaXMgY29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLiBBbGwgUmlnaHRzIFJlc2VydmVkIGV4Y2VwdCBhcyBzcGVjaWZpZWQgYmVsb3cuXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGZvciBhbnkgcHVycG9zZSwgd2l0aG91dCBmZWUsIHN1YmplY3QgdG8gdGhlc2UgY29uZGl0aW9uczpcblxuICAgKDEpIElmIGFueSBwYXJ0IG9mIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCwgdGhlbiB0aGlzIFJFQURNRSBmaWxlIG11c3QgYmUgaW5jbHVkZWQsIHdpdGggdGhpcyBjb3B5cmlnaHQgYW5kIG5vLXdhcnJhbnR5IG5vdGljZSB1bmFsdGVyZWQ7IGFuZCBhbnkgYWRkaXRpb25zLCBkZWxldGlvbnMsIG9yIGNoYW5nZXMgdG8gdGhlIG9yaWdpbmFsIGZpbGVzIG11c3QgYmUgY2xlYXJseSBpbmRpY2F0ZWQgaW4gYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24uXG5cbiAgICgyKSBJZiBvbmx5IGV4ZWN1dGFibGUgY29kZSBpcyBkaXN0cmlidXRlZCwgdGhlbiB0aGUgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gbXVzdCBzdGF0ZSB0aGF0IFwidGhpcyBzb2Z0d2FyZSBpcyBiYXNlZCBpbiBwYXJ0IG9uIHRoZSB3b3JrIG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwXCIuXG5cbiAgICgzKSBQZXJtaXNzaW9uIGZvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcyBncmFudGVkIG9ubHkgaWYgdGhlIHVzZXIgYWNjZXB0cyBmdWxsIHJlc3BvbnNpYmlsaXR5IGZvciBhbnkgdW5kZXNpcmFibGUgY29uc2VxdWVuY2VzOyB0aGUgYXV0aG9ycyBhY2NlcHQgTk8gTElBQklMSVRZIGZvciBkYW1hZ2VzIG9mIGFueSBraW5kLlxuXG5UaGVzZSBjb25kaXRpb25zIGFwcGx5IHRvIGFueSBzb2Z0d2FyZSBkZXJpdmVkIGZyb20gb3IgYmFzZWQgb24gdGhlIElKRyBjb2RlLCBub3QganVzdCB0byB0aGUgdW5tb2RpZmllZCBsaWJyYXJ5LiBJZiB5b3UgdXNlIG91ciB3b3JrLCB5b3Ugb3VnaHQgdG8gYWNrbm93bGVkZ2UgdXMuXG5cblBlcm1pc3Npb24gaXMgTk9UIGdyYW50ZWQgZm9yIHRoZSB1c2Ugb2YgYW55IElKRyBhdXRob3IncyBuYW1lIG9yIGNvbXBhbnkgbmFtZSBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcmVsYXRpbmcgdG8gdGhpcyBzb2Z0d2FyZSBvciBwcm9kdWN0cyBkZXJpdmVkIGZyb20gaXQuIFRoaXMgc29mdHdhcmUgbWF5IGJlIHJlZmVycmVkIHRvIG9ubHkgYXMgXCJ0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlXCIuXG5cbldlIHNwZWNpZmljYWxseSBwZXJtaXQgYW5kIGVuY291cmFnZSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdGhlIGJhc2lzIG9mIGNvbW1lcmNpYWwgcHJvZHVjdHMsIHByb3ZpZGVkIHRoYXQgYWxsIHdhcnJhbnR5IG9yIGxpYWJpbGl0eSBjbGFpbXMgYXJlIGFzc3VtZWQgYnkgdGhlIHByb2R1Y3QgdmVuZG9yLlxuXG5hbnNpMmtuci5jIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGJ5IHBlcm1pc3Npb24gb2YgTC4gUGV0ZXIgRGV1dHNjaCwgc29sZSBwcm9wcmlldG9yIG9mIGl0cyBjb3B5cmlnaHQgaG9sZGVyLCBBbGFkZGluIEVudGVycHJpc2VzIG9mIE1lbmxvIFBhcmssIENBLiBhbnNpMmtuci5jIGlzIE5PVCBjb3ZlcmVkIGJ5IHRoZSBhYm92ZSBjb3B5cmlnaHQgYW5kIGNvbmRpdGlvbnMsIGJ1dCBpbnN0ZWFkIGJ5IHRoZSB1c3VhbCBkaXN0cmlidXRpb24gdGVybXMgb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgcHJpbmNpcGFsbHksIHRoYXQgeW91IG11c3QgaW5jbHVkZSBzb3VyY2UgY29kZSBpZiB5b3UgcmVkaXN0cmlidXRlIGl0LiAoU2VlIHRoZSBmaWxlIGFuc2kya25yLmMgZm9yIGZ1bGwgZGV0YWlscy4pIEhvd2V2ZXIsIHNpbmNlIGFuc2kya25yLmMgaXMgbm90IG5lZWRlZCBhcyBwYXJ0IG9mIGFueSBwcm9ncmFtIGdlbmVyYXRlZCBmcm9tIHRoZSBJSkcgY29kZSwgdGhpcyBkb2VzIG5vdCBsaW1pdCB5b3UgbW9yZSB0aGFuIHRoZSBmb3JlZ29pbmcgcGFyYWdyYXBocyBkby5cblxuVGhlIFVuaXggY29uZmlndXJhdGlvbiBzY3JpcHQgXCJjb25maWd1cmVcIiB3YXMgcHJvZHVjZWQgd2l0aCBHTlUgQXV0b2NvbmYuIEl0IGlzIGNvcHlyaWdodCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGJ1dCBpcyBmcmVlbHkgZGlzdHJpYnV0YWJsZS4gVGhlIHNhbWUgaG9sZHMgZm9yIGl0cyBzdXBwb3J0aW5nIHNjcmlwdHMgKGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgbHRjb25maWcsIGx0bWFpbi5zaCkuIEFub3RoZXIgc3VwcG9ydCBzY3JpcHQsIGluc3RhbGwtc2gsIGlzIGNvcHlyaWdodCBieSBNLkkuVC4gYnV0IGlzIGFsc28gZnJlZWx5IGRpc3RyaWJ1dGFibGUuXG5cbkl0IGFwcGVhcnMgdGhhdCB0aGUgYXJpdGhtZXRpYyBjb2Rpbmcgb3B0aW9uIG9mIHRoZSBKUEVHIHNwZWMgaXMgY292ZXJlZCBieSBwYXRlbnRzIG93bmVkIGJ5IElCTSwgQVRcdTAwMjZULCBhbmQgTWl0c3ViaXNoaS4gSGVuY2UgYXJpdGhtZXRpYyBjb2RpbmcgY2Fubm90IGxlZ2FsbHkgYmUgdXNlZCB3aXRob3V0IG9idGFpbmluZyBvbmUgb3IgbW9yZSBsaWNlbnNlcy4gRm9yIHRoaXMgcmVhc29uLCBzdXBwb3J0IGZvciBhcml0aG1ldGljIGNvZGluZyBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGZyZWUgSlBFRyBzb2Z0d2FyZS4gKFNpbmNlIGFyaXRobWV0aWMgY29kaW5nIHByb3ZpZGVzIG9ubHkgYSBtYXJnaW5hbCBnYWluIG92ZXIgdGhlIHVucGF0ZW50ZWQgSHVmZm1hbiBtb2RlLCBpdCBpcyB1bmxpa2VseSB0aGF0IHZlcnkgbWFueSBpbXBsZW1lbnRhdGlvbnMgd2lsbCBzdXBwb3J0IGl0LikgU28gZmFyIGFzIHdlIGFyZSBhd2FyZSwgdGhlcmUgYXJlIG5vIHBhdGVudCByZXN0cmljdGlvbnMgb24gdGhlIHJlbWFpbmluZyBjb2RlLlxuXG5UaGUgSUpHIGRpc3RyaWJ1dGlvbiBmb3JtZXJseSBpbmNsdWRlZCBjb2RlIHRvIHJlYWQgYW5kIHdyaXRlIEdJRiBmaWxlcy4gVG8gYXZvaWQgZW50YW5nbGVtZW50IHdpdGggdGhlIFVuaXN5cyBMWlcgcGF0ZW50LCBHSUYgcmVhZGluZyBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQgYWx0b2dldGhlciwgYW5kIHRoZSBHSUYgd3JpdGVyIGhhcyBiZWVuIHNpbXBsaWZpZWQgdG8gcHJvZHVjZSBcInVuY29tcHJlc3NlZCBHSUZzXCIuIFRoaXMgdGVjaG5pcXVlIGRvZXMgbm90IHVzZSB0aGUgTFpXIGFsZ29yaXRobTsgdGhlIHJlc3VsdGluZyBHSUYgZmlsZXMgYXJlIGxhcmdlciB0aGFuIHVzdWFsLCBidXQgYXJlIHJlYWRhYmxlIGJ5IGFsbCBzdGFuZGFyZCBHSUYgZGVjb2RlcnMuXG5cbldlIGFyZSByZXF1aXJlZCB0byBzdGF0ZSB0aGF0XG5cblwiVGhlIEdyYXBoaWNzIEludGVyY2hhbmdlIEZvcm1hdChjKSBpcyB0aGUgQ29weXJpZ2h0IHByb3BlcnR5IG9mIENvbXB1U2VydmUgSW5jb3Jwb3JhdGVkLiBHSUYoc20pIGlzIGEgU2VydmljZSBNYXJrIHByb3BlcnR5IG9mIENvbXB1U2VydmUgSW5jb3Jwb3JhdGVkLlwiIl0sImxpY2Vuc2VJZHMiOlsiSUpHIl0sImtleXdvcmRzIjpbImpwZWcgZ3JvdXAgbGljZW5zZSIsImdyb3VwIGxpY2Vuc2UgbGVnYWwiLCJsaWNlbnNlIGxlZ2FsIGlzc3VlcyIsImxlZ2FsIGlzc3VlcyBpbiIsImlzc3VlcyBpbiBwbGFpbiIsInBsYWluIGVuZ2xpc2ggMSIsImVuZ2xpc2ggMSB3ZSIsIjEgd2UgZG9uIiwic29mdHdhcmUgd29ya3MgYnV0Iiwid29ya3MgYnV0IGlmIiwiYnV0IGlmIHlvdSIsInlvdSBmaW5kIGFueSIsImZpbmQgYW55IGJ1Z3MiLCJhbnkgYnVncyBwbGVhc2UiLCJidWdzIHBsZWFzZSBsZXQiLCJ1cyBrbm93IDIiLCJrbm93IDIgeW91IiwiMiB5b3UgY2FuIiwid2FudCB5b3UgZG9uIiwiaGF2ZSB0byBwYXkiLCJwYXkgdXMgMyIsInVzIDMgeW91IiwidGhhdCB5b3UgdmUiLCJ5b3UgdmUgdXNlZCIsInZlIHVzZWQgdGhlIiwidXNlZCB0aGUgaWpnIiwiaWpnIGNvZGUgaW4iLCJjb2RlIGluIGxlZ2FsZXNlIiwiaW4gbGVnYWxlc2UgdGhlIiwibGVnYWxlc2UgdGhlIGF1dGhvcnMiLCJ0aGUgYXV0aG9ycyBtYWtlIiwiYXV0aG9ycyBtYWtlIG5vIiwibWFrZSBubyB3YXJyYW50eSIsIndhcnJhbnR5IG9yIHJlcHJlc2VudGF0aW9uIiwib3IgcmVwcmVzZW50YXRpb24gZWl0aGVyIiwicmVwcmVzZW50YXRpb24gZWl0aGVyIGV4cHJlc3MiLCJpbXBsaWVkIHdpdGggcmVzcGVjdCIsInNvZnR3YXJlIGl0cyBxdWFsaXR5IiwiaXRzIHF1YWxpdHkgYWNjdXJhY3kiLCJxdWFsaXR5IGFjY3VyYWN5IG1lcmNoYW50YWJpbGl0eSIsImFjY3VyYWN5IG1lcmNoYW50YWJpbGl0eSBvciIsInBhcnRpY3VsYXIgcHVycG9zZSB0aGlzIiwicHVycG9zZSB0aGlzIHNvZnR3YXJlIiwiYW5kIHlvdSBpdHMiLCJ5b3UgaXRzIHVzZXIiLCJpdHMgdXNlciBhc3N1bWUiLCJ1c2VyIGFzc3VtZSB0aGUiLCJhc3N1bWUgdGhlIGVudGlyZSIsInRvIGl0cyBxdWFsaXR5IiwiaXRzIHF1YWxpdHkgYW5kIiwicXVhbGl0eSBhbmQgYWNjdXJhY3kiLCJhbmQgYWNjdXJhY3kgdGhpcyIsImFjY3VyYWN5IHRoaXMgc29mdHdhcmUiLCJjIDE5OTEgMTk5OCIsIjE5OTEgMTk5OCB0aG9tYXMiLCIxOTk4IHRob21hcyBnIiwidGhvbWFzIGcgbGFuZSIsImcgbGFuZSBhbGwiLCJsYW5lIGFsbCByaWdodHMiLCJzcGVjaWZpZWQgYmVsb3cgcGVybWlzc2lvbiIsInBvcnRpb25zIHRoZXJlb2YgZm9yIiwidG8gdGhlc2UgY29uZGl0aW9ucyIsInRoZXNlIGNvbmRpdGlvbnMgMSIsImNvbmRpdGlvbnMgMSBpZiIsImRpc3RyaWJ1dGVkIHRoZW4gdGhpcyIsInRoZW4gdGhpcyByZWFkbWUiLCJ0aGlzIHJlYWRtZSBmaWxlIiwicmVhZG1lIGZpbGUgbXVzdCIsIndpdGggdGhpcyBjb3B5cmlnaHQiLCJjb3B5cmlnaHQgYW5kIG5vIiwiYW5kIG5vIHdhcnJhbnR5Iiwibm8gd2FycmFudHkgbm90aWNlIiwid2FycmFudHkgbm90aWNlIHVuYWx0ZXJlZCIsIm5vdGljZSB1bmFsdGVyZWQgYW5kIiwidW5hbHRlcmVkIGFuZCBhbnkiLCJhbmQgYW55IGFkZGl0aW9ucyIsImFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIDIiLCJkb2N1bWVudGF0aW9uIDIgaWYiLCIyIGlmIG9ubHkiLCJpZiBvbmx5IGV4ZWN1dGFibGUiLCJvbmx5IGV4ZWN1dGFibGUgY29kZSIsImV4ZWN1dGFibGUgY29kZSBpcyIsImRpc3RyaWJ1dGVkIHRoZW4gdGhlIiwidGhlbiB0aGUgYWNjb21wYW55aW5nIiwidGhlIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIiwiYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gbXVzdCIsImRvY3VtZW50YXRpb24gbXVzdCBzdGF0ZSIsIm11c3Qgc3RhdGUgdGhhdCIsInN0YXRlIHRoYXQgdGhpcyIsImpwZWcgZ3JvdXAgMyIsImdyb3VwIDMgcGVybWlzc2lvbiIsIjMgcGVybWlzc2lvbiBmb3IiLCJ0aGUgdXNlciBhY2NlcHRzIiwidXNlciBhY2NlcHRzIGZ1bGwiLCJhY2NlcHRzIGZ1bGwgcmVzcG9uc2liaWxpdHkiLCJmdWxsIHJlc3BvbnNpYmlsaXR5IGZvciIsInJlc3BvbnNpYmlsaXR5IGZvciBhbnkiLCJmb3IgYW55IHVuZGVzaXJhYmxlIiwiYW55IHVuZGVzaXJhYmxlIGNvbnNlcXVlbmNlcyIsInVuZGVzaXJhYmxlIGNvbnNlcXVlbmNlcyB0aGUiLCJjb25zZXF1ZW5jZXMgdGhlIGF1dGhvcnMiLCJ0aGUgYXV0aG9ycyBhY2NlcHQiLCJhdXRob3JzIGFjY2VwdCBubyIsImFjY2VwdCBubyBsaWFiaWxpdHkiLCJraW5kIHRoZXNlIGNvbmRpdGlvbnMiLCJvbiB0aGUgaWpnIiwiaWpnIGNvZGUgbm90Iiwibm90IGp1c3QgdG8iLCJqdXN0IHRvIHRoZSIsInRvIHRoZSB1bm1vZGlmaWVkIiwidGhlIHVubW9kaWZpZWQgbGlicmFyeSIsInVubW9kaWZpZWQgbGlicmFyeSBpZiIsIndvcmsgeW91IG91Z2h0IiwieW91IG91Z2h0IHRvIiwib3VnaHQgdG8gYWNrbm93bGVkZ2UiLCJ0byBhY2tub3dsZWRnZSB1cyIsImFja25vd2xlZGdlIHVzIHBlcm1pc3Npb24iLCJ1cyBwZXJtaXNzaW9uIGlzIiwiaXMgbm90IGdyYW50ZWQiLCJub3QgZ3JhbnRlZCBmb3IiLCJmb3IgdGhlIHVzZSIsIm9mIGFueSBpamciLCJhbnkgaWpnIGF1dGhvciIsImlqZyBhdXRob3IgcyIsImF1dGhvciBzIG5hbWUiLCJzIG5hbWUgb3IiLCJuYW1lIG9yIGNvbXBhbnkiLCJvciBjb21wYW55IG5hbWUiLCJjb21wYW55IG5hbWUgaW4iLCJuYW1lIGluIGFkdmVydGlzaW5nIiwiZnJvbSBpdCB0aGlzIiwiaXQgdGhpcyBzb2Z0d2FyZSIsIm1heSBiZSByZWZlcnJlZCIsInJlZmVycmVkIHRvIG9ubHkiLCJ0byBvbmx5IGFzIiwib25seSBhcyB0aGUiLCJhcyB0aGUgaW5kZXBlbmRlbnQiLCJqcGVnIGdyb3VwIHMiLCJncm91cCBzIHNvZnR3YXJlIiwicyBzb2Z0d2FyZSB3ZSIsInNvZnR3YXJlIHdlIHNwZWNpZmljYWxseSIsInNvZnR3YXJlIGFzIHRoZSIsImJhc2lzIG9mIGNvbW1lcmNpYWwiLCJvZiBjb21tZXJjaWFsIHByb2R1Y3RzIiwiY29tbWVyY2lhbCBwcm9kdWN0cyBwcm92aWRlZCIsInByb2R1Y3RzIHByb3ZpZGVkIHRoYXQiLCJ0aGF0IGFsbCB3YXJyYW50eSIsImFsbCB3YXJyYW50eSBvciIsIndhcnJhbnR5IG9yIGxpYWJpbGl0eSIsIm9yIGxpYWJpbGl0eSBjbGFpbXMiLCJsaWFiaWxpdHkgY2xhaW1zIGFyZSIsImNsYWltcyBhcmUgYXNzdW1lZCIsImFyZSBhc3N1bWVkIGJ5IiwiYXNzdW1lZCBieSB0aGUiLCJieSB0aGUgcHJvZHVjdCIsInRoZSBwcm9kdWN0IHZlbmRvciIsInByb2R1Y3QgdmVuZG9yIGFuc2kya25yIiwidmVuZG9yIGFuc2kya25yIGMiLCJjIGlzIGluY2x1ZGVkIiwidGhpcyBkaXN0cmlidXRpb24gYnkiLCJkaXN0cmlidXRpb24gYnkgcGVybWlzc2lvbiIsImJ5IHBlcm1pc3Npb24gb2YiLCJwZXJtaXNzaW9uIG9mIGwiLCJvZiBsIHBldGVyIiwibCBwZXRlciBkZXV0c2NoIiwicGV0ZXIgZGV1dHNjaCBzb2xlIiwiZGV1dHNjaCBzb2xlIHByb3ByaWV0b3IiLCJzb2xlIHByb3ByaWV0b3Igb2YiLCJwcm9wcmlldG9yIG9mIGl0cyIsImNvcHlyaWdodCBob2xkZXIgYWxhZGRpbiIsImhvbGRlciBhbGFkZGluIGVudGVycHJpc2VzIiwiYWxhZGRpbiBlbnRlcnByaXNlcyBvZiIsImVudGVycHJpc2VzIG9mIG1lbmxvIiwib2YgbWVubG8gcGFyayIsInBhcmsgY2EgYW5zaTJrbnIiLCJjYSBhbnNpMmtuciBjIiwiYnkgdGhlIGFib3ZlIiwiY29weXJpZ2h0IGFuZCBjb25kaXRpb25zIiwiYW5kIGNvbmRpdGlvbnMgYnV0IiwiY29uZGl0aW9ucyBidXQgaW5zdGVhZCIsImJ1dCBpbnN0ZWFkIGJ5IiwiaW5zdGVhZCBieSB0aGUiLCJieSB0aGUgdXN1YWwiLCJ0aGUgdXN1YWwgZGlzdHJpYnV0aW9uIiwidXN1YWwgZGlzdHJpYnV0aW9uIHRlcm1zIiwic29mdHdhcmUgZm91bmRhdGlvbiBwcmluY2lwYWxseSIsImZvdW5kYXRpb24gcHJpbmNpcGFsbHkgdGhhdCIsInByaW5jaXBhbGx5IHRoYXQgeW91IiwibXVzdCBpbmNsdWRlIHNvdXJjZSIsInlvdSByZWRpc3RyaWJ1dGUgaXQiLCJyZWRpc3RyaWJ1dGUgaXQgc2VlIiwiaXQgc2VlIHRoZSIsInRoZSBmaWxlIGFuc2kya25yIiwiZmlsZSBhbnNpMmtuciBjIiwiYW5zaTJrbnIgYyBmb3IiLCJjIGZvciBmdWxsIiwiZm9yIGZ1bGwgZGV0YWlscyIsImZ1bGwgZGV0YWlscyBob3dldmVyIiwiZGV0YWlscyBob3dldmVyIHNpbmNlIiwiaG93ZXZlciBzaW5jZSBhbnNpMmtuciJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJJUEEgRm9udCBMaWNlbnNlIEFncmVlbWVudCB2MS4wXG5cblRoZSBMaWNlbnNvciBwcm92aWRlcyB0aGUgTGljZW5zZWQgUHJvZ3JhbSAoYXMgZGVmaW5lZCBpbiBBcnRpY2xlIDEgYmVsb3cpIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50IChcIkFncmVlbWVudFwiKS4gQW55IHVzZSwgcmVwcm9kdWN0aW9uIG9yIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSwgb3IgYW55IGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBieSBhIFJlY2lwaWVudCAoYXMgZGVmaW5lZCBpbiBBcnRpY2xlIDEgYmVsb3cpIGNvbnN0aXR1dGVzIHRoZSBSZWNpcGllbnQncyBhY2NlcHRhbmNlIG9mIHRoaXMgQWdyZWVtZW50LlxuXG5BcnRpY2xlIDEgKERlZmluaXRpb25zKVxuXG4gICAxLiBcIkRpZ2l0YWwgRm9udCBQcm9ncmFtXCIgc2hhbGwgbWVhbiBhIGNvbXB1dGVyIHByb2dyYW0gY29udGFpbmluZywgb3IgdXNlZCB0byByZW5kZXIgb3IgZGlzcGxheSBmb250cy5cblxuICAgMi4gXCJMaWNlbnNlZCBQcm9ncmFtXCIgc2hhbGwgbWVhbiBhIERpZ2l0YWwgRm9udCBQcm9ncmFtIGxpY2Vuc2VkIGJ5IHRoZSBMaWNlbnNvciB1bmRlciB0aGlzIEFncmVlbWVudC5cblxuICAgMy4gXCJEZXJpdmVkIFByb2dyYW1cIiBzaGFsbCBtZWFuIGEgRGlnaXRhbCBGb250IFByb2dyYW0gY3JlYXRlZCBhcyBhIHJlc3VsdCBvZiBhIG1vZGlmaWNhdGlvbiwgYWRkaXRpb24sIGRlbGV0aW9uLCByZXBsYWNlbWVudCBvciBhbnkgb3RoZXIgYWRhcHRhdGlvbiB0byBvciBvZiBhIHBhcnQgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtLCBhbmQgaW5jbHVkZXMgYSBjYXNlIHdoZXJlIGEgRGlnaXRhbCBGb250IFByb2dyYW0gbmV3bHkgY3JlYXRlZCBieSByZXRyaWV2aW5nIGZvbnQgaW5mb3JtYXRpb24gZnJvbSBhIHBhcnQgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9yIEVtYmVkZGVkIEZvbnRzIGZyb20gYSBEaWdpdGFsIERvY3VtZW50IEZpbGUgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiBvZiB0aGUgcmV0cmlldmVkIGZvbnQgaW5mb3JtYXRpb24uXG5cbiAgIDQuIFwiRGlnaXRhbCBDb250ZW50XCIgc2hhbGwgbWVhbiBwcm9kdWN0cyBwcm92aWRlZCB0byBlbmQgdXNlcnMgaW4gdGhlIGZvcm0gb2YgZGlnaXRhbCBkYXRhLCBpbmNsdWRpbmcgdmlkZW8gY29udGVudCwgbW90aW9uIGFuZC9vciBzdGlsbCBwaWN0dXJlcywgVFYgcHJvZ3JhbXMgb3Igb3RoZXIgYnJvYWRjYXN0aW5nIGNvbnRlbnQgYW5kIHByb2R1Y3RzIGNvbnNpc3Rpbmcgb2YgY2hhcmFjdGVyIHRleHQsIHBpY3R1cmVzLCBwaG90b2dyYXBoaWMgaW1hZ2VzLCBncmFwaGljIHN5bWJvbHMgYW5kL29yIHRoZSBsaWtlLlxuXG4gICA1LiBcIkRpZ2l0YWwgRG9jdW1lbnQgRmlsZVwiIHNoYWxsIG1lYW4gYSBQREYgZmlsZSBvciBvdGhlciBEaWdpdGFsIENvbnRlbnQgY3JlYXRlZCBieSB2YXJpb3VzIHNvZnR3YXJlIHByb2dyYW1zIGluIHdoaWNoIGEgcGFydCBvciBhbGwgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYmVjb21lcyBlbWJlZGRlZCBvciBjb250YWluZWQgaW4gdGhlIGZpbGUgZm9yIHRoZSBkaXNwbGF5IG9mIHRoZSBmb250IChcIkVtYmVkZGVkIEZvbnRzXCIpLiBFbWJlZGRlZCBGb250cyBhcmUgdXNlZCBvbmx5IGluIHRoZSBkaXNwbGF5IG9mIGNoYXJhY3RlcnMgaW4gdGhlIHBhcnRpY3VsYXIgRGlnaXRhbCBEb2N1bWVudCBGaWxlIHdpdGhpbiB3aGljaCB0aGV5IGFyZSBlbWJlZGRlZCwgYW5kIHNoYWxsIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSB0aG9zZSBpbiBhbnkgRGlnaXRhbCBGb250IFByb2dyYW0sIHdoaWNoIG1heSBiZSB1c2VkIGZvciBkaXNwbGF5IG9mIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGF0IHBhcnRpY3VsYXIgRGlnaXRhbCBEb2N1bWVudCBGaWxlLlxuXG4gICA2LiBcIkNvbXB1dGVyXCIgc2hhbGwgaW5jbHVkZSBhIHNlcnZlciBpbiB0aGlzIEFncmVlbWVudC5cblxuICAgNy4gXCJSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvblwiIHNoYWxsIG1lYW4gcmVwcm9kdWN0aW9uLCB0cmFuc2ZlciwgZGlzdHJpYnV0aW9uLCBsZWFzZSwgcHVibGljIHRyYW5zbWlzc2lvbiwgcHJlc2VudGF0aW9uLCBleGhpYml0aW9uLCBhZGFwdGF0aW9uIGFuZCBhbnkgb3RoZXIgZXhwbG9pdGF0aW9uLlxuXG4gICA4LiBcIlJlY2lwaWVudFwiIHNoYWxsIG1lYW4gYW55b25lIHdobyByZWNlaXZlcyB0aGUgTGljZW5zZWQgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIG9uZSB0aGF0IHJlY2VpdmVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGZyb20gYSBSZWNpcGllbnQuXG5cbkFydGljbGUgMiAoR3JhbnQgb2YgTGljZW5zZSlcblxuVGhlIExpY2Vuc29yIGdyYW50cyB0byB0aGUgUmVjaXBpZW50IGEgbGljZW5zZSB0byB1c2UgdGhlIExpY2Vuc2VkIFByb2dyYW0gaW4gYW55IGFuZCBhbGwgY291bnRyaWVzIGluIGFjY29yZGFuY2Ugd2l0aCBlYWNoIG9mIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4gSG93ZXZlciwgYW55IGFuZCBhbGwgcmlnaHRzIHVuZGVybHlpbmcgaW4gdGhlIExpY2Vuc2VkIFByb2dyYW0gc2hhbGwgYmUgaGVsZCBieSB0aGUgTGljZW5zb3IuIEluIG5vIHNlbnNlIGlzIHRoaXMgQWdyZWVtZW50IGludGVuZGVkIHRvIHRyYW5zZmVyIGFueSByaWdodCByZWxhdGluZyB0byB0aGUgTGljZW5zZWQgUHJvZ3JhbSBoZWxkIGJ5IHRoZSBMaWNlbnNvciBleGNlcHQgYXMgc3BlY2lmaWNhbGx5IHNldCBmb3J0aCBoZXJlaW4gb3IgYW55IHJpZ2h0IHJlbGF0aW5nIHRvIGFueSB0cmFkZW1hcmssIHRyYWRlIG5hbWUsIG9yIHNlcnZpY2UgbWFyayB0byB0aGUgUmVjaXBpZW50LlxuXG4gICAxLiBUaGUgUmVjaXBpZW50IG1heSBpbnN0YWxsIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9uIGFueSBudW1iZXIgb2YgQ29tcHV0ZXJzIGFuZCB1c2UgdGhlIHNhbWUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC5cblxuICAgMi4gVGhlIFJlY2lwaWVudCBtYXkgdXNlIHRoZSBMaWNlbnNlZCBQcm9ncmFtLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uIGluIHByaW50ZWQgbWF0ZXJpYWxzIG9yIGluIERpZ2l0YWwgQ29udGVudCBhcyBhbiBleHByZXNzaW9uIG9mIGNoYXJhY3RlciB0ZXh0cyBvciB0aGUgbGlrZS5cblxuICAgMy4gVGhlIFJlY2lwaWVudCBtYXkgY29uZHVjdCBSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiBvZiB0aGUgcHJpbnRlZCBtYXRlcmlhbHMgYW5kIERpZ2l0YWwgQ29udGVudCBjcmVhdGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcHJlY2VkaW5nIFBhcmFncmFwaCwgZm9yIGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYW5kIGluIGFueSBmb3JtIG9mIG1lZGlhIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYnJvYWRjYXN0aW5nLCBjb21tdW5pY2F0aW9uIGFuZCB2YXJpb3VzIHJlY29yZGluZyBtZWRpYS5cblxuICAgNC4gSWYgYW55IFJlY2lwaWVudCBleHRyYWN0cyBFbWJlZGRlZCBGb250cyBmcm9tIGEgRGlnaXRhbCBEb2N1bWVudCBGaWxlIHRvIGNyZWF0ZSBhIERlcml2ZWQgUHJvZ3JhbSwgc3VjaCBEZXJpdmVkIFByb2dyYW0gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQuXG5cbiAgIDUuIElmIGFueSBSZWNpcGllbnQgcGVyZm9ybXMgUmVwcm9kdWN0aW9uIG9yIE90aGVyIEV4cGxvaXRhdGlvbiBvZiBhIERpZ2l0YWwgRG9jdW1lbnQgRmlsZSBpbiB3aGljaCBFbWJlZGRlZCBGb250cyBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBhcmUgdXNlZCBvbmx5IGZvciByZW5kZXJpbmcgdGhlIERpZ2l0YWwgQ29udGVudCB3aXRoaW4gc3VjaCBEaWdpdGFsIERvY3VtZW50IEZpbGUgdGhlbiBzdWNoIFJlY2lwaWVudCBzaGFsbCBoYXZlIG5vIGZ1cnRoZXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgaW4gcmVsYXRpb24gdG8gc3VjaCBhY3Rpb25zLlxuXG4gICA2LiBUaGUgUmVjaXBpZW50IG1heSByZXByb2R1Y2UgdGhlIExpY2Vuc2VkIFByb2dyYW0gYXMgaXMgd2l0aG91dCBtb2RpZmljYXRpb24gYW5kIHRyYW5zZmVyIHN1Y2ggY29waWVzLCBwdWJsaWNseSB0cmFuc21pdCBvciBvdGhlcndpc2UgcmVkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBQcm9ncmFtIHRvIGEgdGhpcmQgcGFydHkgZm9yIGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgKFwiUmVkaXN0cmlidXRlXCIpLCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHByb3Zpc2lvbnMgc2V0IGZvcnRoIGluIEFydGljbGUgMyBQYXJhZ3JhcGggMi5cblxuICAgNy4gVGhlIFJlY2lwaWVudCBtYXkgY3JlYXRlLCB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgUmVkaXN0cmlidXRlIGEgRGVyaXZlZCBQcm9ncmFtIHVuZGVyIHRoZSB0ZXJtcyBzdGF0ZWQgYWJvdmUgZm9yIHRoZSBMaWNlbnNlZCBQcm9ncmFtOiBwcm92aWRlZCwgdGhhdCB0aGUgUmVjaXBpZW50IHNoYWxsIGZvbGxvdyB0aGUgcHJvdmlzaW9ucyBzZXQgZm9ydGggaW4gQXJ0aWNsZSAzIFBhcmFncmFwaCAxIHdoZW4gUmVkaXN0cmlidXRpbmcgdGhlIERlcml2ZWQgUHJvZ3JhbS5cblxuQXJ0aWNsZSAzIChSZXN0cmljdGlvbilcblxuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiB0aGUgcHJlY2VkaW5nIEFydGljbGUgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcblxuICAgMS4gSWYgYSBEZXJpdmVkIFByb2dyYW0gaXMgUmVkaXN0cmlidXRlZCBwdXJzdWFudCB0byBQYXJhZ3JhcGggNCBhbmQgNyBvZiB0aGUgcHJlY2VkaW5nIEFydGljbGUsIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IGJlIG1ldCA6XG5cbiAgICAgICgxKSBUaGUgZm9sbG93aW5nIG11c3QgYmUgYWxzbyBSZWRpc3RyaWJ1dGVkIHRvZ2V0aGVyIHdpdGggdGhlIERlcml2ZWQgUHJvZ3JhbSwgb3IgYmUgbWFkZSBhdmFpbGFibGUgb25saW5lIG9yIGJ5IG1lYW5zIG9mIG1haWxpbmcgbWVjaGFuaXNtcyBpbiBleGNoYW5nZSBmb3IgYSBjb3N0IHdoaWNoIGRvZXMgbm90IGV4Y2VlZCB0aGUgdG90YWwgY29zdHMgb2YgcG9zdGFnZSwgc3RvcmFnZSBtZWRpdW0gYW5kIGhhbmRsaW5nIGZlZXM6XG5cbiAgICAgICAgIChhKSBhIGNvcHkgb2YgdGhlIERlcml2ZWQgUHJvZ3JhbTsgYW5kXG5cbiAgICAgICAgIChiKSBhbnkgYWRkaXRpb25hbCBmaWxlIGNyZWF0ZWQgYnkgdGhlIGZvbnQgZGV2ZWxvcGluZyBwcm9ncmFtIGluIHRoZSBjb3Vyc2Ugb2YgY3JlYXRpbmcgdGhlIERlcml2ZWQgUHJvZ3JhbSB0aGF0IGNhbiBiZSB1c2VkIGZvciBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgRGVyaXZlZCBQcm9ncmFtLCBpZiBhbnkuXG5cbiAgICAgICgyKSBJdCBpcyByZXF1aXJlZCB0byBhbHNvIFJlZGlzdHJpYnV0ZSBtZWFucyB0byBlbmFibGUgcmVjaXBpZW50cyBvZiB0aGUgRGVyaXZlZCBQcm9ncmFtIHRvIHJlcGxhY2UgdGhlIERlcml2ZWQgUHJvZ3JhbSB3aXRoIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGZpcnN0IHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSAodGhlIFwiT3JpZ2luYWwgUHJvZ3JhbVwiKS4gU3VjaCBtZWFucyBtYXkgYmUgdG8gcHJvdmlkZSBhIGRpZmZlcmVuY2UgZmlsZSBmcm9tIHRoZSBPcmlnaW5hbCBQcm9ncmFtLCBvciBpbnN0cnVjdGlvbnMgc2V0dGluZyBvdXQgYSBtZXRob2QgdG8gcmVwbGFjZSB0aGUgRGVyaXZlZCBQcm9ncmFtIHdpdGggdGhlIE9yaWdpbmFsIFByb2dyYW0uXG5cbiAgICAgICgzKSBUaGUgUmVjaXBpZW50IG11c3QgbGljZW5zZSB0aGUgRGVyaXZlZCBQcm9ncmFtIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC5cblxuICAgICAgKDQpIE5vIG9uZSBtYXkgdXNlIG9yIGluY2x1ZGUgdGhlIG5hbWUgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYXMgYSBwcm9ncmFtIG5hbWUsIGZvbnQgbmFtZSBvciBmaWxlIG5hbWUgb2YgdGhlIERlcml2ZWQgUHJvZ3JhbS5cblxuICAgICAgKDUpIEFueSBtYXRlcmlhbCB0byBiZSBtYWRlIGF2YWlsYWJsZSBvbmxpbmUgb3IgYnkgbWVhbnMgb2YgbWFpbGluZyBhIG1lZGl1bSB0byBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBwYXJhZ3JhcGggbWF5IGJlIHByb3ZpZGVkLCB2ZXJiYXRpbSwgYnkgYW55IHBhcnR5IHdpc2hpbmcgdG8gZG8gc28uXG5cbiAgIDIuIElmIHRoZSBSZWNpcGllbnQgUmVkaXN0cmlidXRlcyB0aGUgTGljZW5zZWQgUHJvZ3JhbSBwdXJzdWFudCB0byBQYXJhZ3JhcGggNiBvZiB0aGUgcHJlY2VkaW5nIEFydGljbGUsIHRoZSBSZWNpcGllbnQgc2hhbGwgbWVldCBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgICAoMSkgVGhlIFJlY2lwaWVudCBtYXkgbm90IGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbS5cblxuICAgICAgKDIpIFRoZSBSZWNpcGllbnQgbWF5IG5vdCBhbHRlciBvciBvdGhlcndpc2UgbW9kaWZ5IHRoZSBMaWNlbnNlZCBQcm9ncmFtLlxuXG4gICAgICAoMykgVGhlIFJlY2lwaWVudCBtdXN0IGF0dGFjaCBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgdG8gdGhlIExpY2Vuc2VkIFByb2dyYW0uXG5cbiAgIDMuIFRISVMgTElDRU5TRUQgUFJPR1JBTSBJUyBQUk9WSURFRCBCWSBUSEUgTElDRU5TT1IgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVFkgQVMgVE8gVEhFIExJQ0VOU0VEIFBST0dSQU0gT1IgQU5ZIERFUklWRUQgUFJPR1JBTSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgTElDRU5TT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhURU5ERUQsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURUQgR09PRFMgT1IgU0VSVklDRTsgREFNQUdFUyBBUklTSU5HIEZST00gU1lTVEVNIEZBSUxVUkU7IExPU1MgT1IgQ09SUlVQVElPTiBPRiBFWElTVElORyBEQVRBIE9SIFBST0dSQU07IExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIElOU1RBTExBVElPTiwgVVNFLCBUSEUgUkVQUk9EVUNUSU9OIE9SIE9USEVSIEVYUExPSVRBVElPTiBPRiBUSEUgTElDRU5TRUQgUFJPR1JBTSBPUiBBTlkgREVSSVZFRCBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuICAgNC4gVGhlIExpY2Vuc29yIGlzIHVuZGVyIG5vIG9ibGlnYXRpb24gdG8gcmVzcG9uZCB0byBhbnkgdGVjaG5pY2FsIHF1ZXN0aW9ucyBvciBpbnF1aXJpZXMsIG9yIHByb3ZpZGUgYW55IG90aGVyIHVzZXIgc3VwcG9ydCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGluc3RhbGxhdGlvbiwgdXNlIG9yIHRoZSBSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciBEZXJpdmVkIFByb2dyYW1zIHRoZXJlb2YuXG5cbkFydGljbGUgNCAoVGVybWluYXRpb24gb2YgQWdyZWVtZW50KVxuXG4gICAxLiBUaGUgdGVybSBvZiB0aGlzIEFncmVlbWVudCBzaGFsbCBiZWdpbiBmcm9tIHRoZSB0aW1lIG9mIHJlY2VpcHQgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYnkgdGhlIFJlY2lwaWVudCBhbmQgc2hhbGwgY29udGludWUgYXMgbG9uZyBhcyB0aGUgUmVjaXBpZW50IHJldGFpbnMgYW55IHN1Y2ggTGljZW5zZWQgUHJvZ3JhbSBpbiBhbnkgd2F5LlxuXG4gICAyLiBOb3R3aXRoc3RhbmRpbmcgdGhlIHByb3Zpc2lvbiBzZXQgZm9ydGggaW4gdGhlIHByZWNlZGluZyBQYXJhZ3JhcGgsIGluIHRoZSBldmVudCBvZiB0aGUgYnJlYWNoIG9mIGFueSBvZiB0aGUgcHJvdmlzaW9ucyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQgYnkgdGhlIFJlY2lwaWVudCwgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgd2l0aG91dCBhbnkgbm90aWNlLiBJbiB0aGUgY2FzZSBvZiBzdWNoIHRlcm1pbmF0aW9uLCB0aGUgUmVjaXBpZW50IG1heSBub3QgdXNlIG9yIGNvbmR1Y3QgUmVwcm9kdWN0aW9uIGFuZCBPdGhlciBFeHBsb2l0YXRpb24gb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gb3IgYSBEZXJpdmVkIFByb2dyYW06IHByb3ZpZGVkIHRoYXQgc3VjaCB0ZXJtaW5hdGlvbiBzaGFsbCBub3QgYWZmZWN0IGFueSByaWdodHMgb2YgYW55IG90aGVyIFJlY2lwaWVudCByZWNlaXZpbmcgdGhlIExpY2Vuc2VkIFByb2dyYW0gb3IgdGhlIERlcml2ZWQgUHJvZ3JhbSBmcm9tIHN1Y2ggUmVjaXBpZW50IHdobyBicmVhY2hlZCB0aGlzIEFncmVlbWVudC5cblxuQXJ0aWNsZSA1IChHb3Zlcm5pbmcgTGF3KVxuXG4gICAxLiBJUEEgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4gSW4gc3VjaCBhbiBldmVudCwgdGhlIFJlY2lwaWVudCBtYXkgc2VsZWN0IGVpdGhlciB0aGlzIEFncmVlbWVudCBvciBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaW4gdXNpbmcsIGNvbmR1Y3RpbmcgdGhlIFJlcHJvZHVjdGlvbiBhbmQgT3RoZXIgRXhwbG9pdGF0aW9uIG9mLCBvciBSZWRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciBhIERlcml2ZWQgUHJvZ3JhbS4gT3RoZXIgbWF0dGVycyBub3Qgc3BlY2lmaWVkIGFib3ZlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIENvcHlyaWdodCBMYXcgb2YgSmFwYW4gYW5kIG90aGVyIHJlbGF0ZWQgbGF3cyBhbmQgcmVndWxhdGlvbnMgb2YgSmFwYW4uXG5cbiAgIDIuIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCB1bmRlciB0aGUgbGF3cyBvZiBKYXBhbi4iXSwibGljZW5zZUlkcyI6WyJJUEEiXSwia2V5d29yZHMiOlsiaXBhIGZvbnQgbGljZW5zZSIsImZvbnQgbGljZW5zZSBhZ3JlZW1lbnQiLCJsaWNlbnNlIGFncmVlbWVudCB2MSIsInYxIDAgdGhlIiwiMCB0aGUgbGljZW5zb3IiLCJwcm92aWRlcyB0aGUgbGljZW5zZWQiLCIxIGJlbG93IHVuZGVyIiwiYmVsb3cgdW5kZXIgdGhlIiwiYWdyZWVtZW50IGFncmVlbWVudCBhbnkiLCJvciBhbnkgZXhlcmNpc2UiLCJhZ3JlZW1lbnQgYnkgYSIsInJlY2lwaWVudCBhcyBkZWZpbmVkIiwiMSBiZWxvdyBjb25zdGl0dXRlcyIsImJlbG93IGNvbnN0aXR1dGVzIHRoZSIsImFncmVlbWVudCBhcnRpY2xlIDEiLCJkZWZpbml0aW9ucyAxIGRpZ2l0YWwiLCIxIGRpZ2l0YWwgZm9udCIsImZvbnQgcHJvZ3JhbSBzaGFsbCIsIm1lYW4gYSBjb21wdXRlciIsImNvbXB1dGVyIHByb2dyYW0gY29udGFpbmluZyIsInByb2dyYW0gY29udGFpbmluZyBvciIsImNvbnRhaW5pbmcgb3IgdXNlZCIsInRvIHJlbmRlciBvciIsInJlbmRlciBvciBkaXNwbGF5Iiwib3IgZGlzcGxheSBmb250cyIsImRpc3BsYXkgZm9udHMgMiIsImZvbnRzIDIgbGljZW5zZWQiLCIyIGxpY2Vuc2VkIHByb2dyYW0iLCJmb250IHByb2dyYW0gbGljZW5zZWQiLCJwcm9ncmFtIGxpY2Vuc2VkIGJ5IiwiYWdyZWVtZW50IDMgZGVyaXZlZCIsIjMgZGVyaXZlZCBwcm9ncmFtIiwiZm9udCBwcm9ncmFtIGNyZWF0ZWQiLCJwcm9ncmFtIGNyZWF0ZWQgYXMiLCJjcmVhdGVkIGFzIGEiLCJvZiBhIG1vZGlmaWNhdGlvbiIsImEgbW9kaWZpY2F0aW9uIGFkZGl0aW9uIiwibW9kaWZpY2F0aW9uIGFkZGl0aW9uIGRlbGV0aW9uIiwiYWRkaXRpb24gZGVsZXRpb24gcmVwbGFjZW1lbnQiLCJkZWxldGlvbiByZXBsYWNlbWVudCBvciIsInJlcGxhY2VtZW50IG9yIGFueSIsImFueSBvdGhlciBhZGFwdGF0aW9uIiwib3RoZXIgYWRhcHRhdGlvbiB0byIsImFkYXB0YXRpb24gdG8gb3IiLCJ0byBvciBvZiIsIm9mIGEgcGFydCIsImxpY2Vuc2VkIHByb2dyYW0gYW5kIiwicHJvZ3JhbSBhbmQgaW5jbHVkZXMiLCJhbmQgaW5jbHVkZXMgYSIsImluY2x1ZGVzIGEgY2FzZSIsImEgY2FzZSB3aGVyZSIsImNhc2Ugd2hlcmUgYSIsIndoZXJlIGEgZGlnaXRhbCIsImZvbnQgcHJvZ3JhbSBuZXdseSIsInByb2dyYW0gbmV3bHkgY3JlYXRlZCIsIm5ld2x5IGNyZWF0ZWQgYnkiLCJjcmVhdGVkIGJ5IHJldHJpZXZpbmciLCJieSByZXRyaWV2aW5nIGZvbnQiLCJyZXRyaWV2aW5nIGZvbnQgaW5mb3JtYXRpb24iLCJmb250IGluZm9ybWF0aW9uIGZyb20iLCJpbmZvcm1hdGlvbiBmcm9tIGEiLCJmcm9tIGEgcGFydCIsInByb2dyYW0gb3IgZW1iZWRkZWQiLCJvciBlbWJlZGRlZCBmb250cyIsImRvY3VtZW50IGZpbGUgd2l0aCIsIm9mIHRoZSByZXRyaWV2ZWQiLCJ0aGUgcmV0cmlldmVkIGZvbnQiLCJyZXRyaWV2ZWQgZm9udCBpbmZvcm1hdGlvbiIsImZvbnQgaW5mb3JtYXRpb24gNCIsImluZm9ybWF0aW9uIDQgZGlnaXRhbCIsIjQgZGlnaXRhbCBjb250ZW50IiwiZGlnaXRhbCBjb250ZW50IHNoYWxsIiwiY29udGVudCBzaGFsbCBtZWFuIiwic2hhbGwgbWVhbiBwcm9kdWN0cyIsIm1lYW4gcHJvZHVjdHMgcHJvdmlkZWQiLCJwcm9kdWN0cyBwcm92aWRlZCB0byIsInByb3ZpZGVkIHRvIGVuZCIsImVuZCB1c2VycyBpbiIsInVzZXJzIGluIHRoZSIsImZvcm0gb2YgZGlnaXRhbCIsIm9mIGRpZ2l0YWwgZGF0YSIsImRpZ2l0YWwgZGF0YSBpbmNsdWRpbmciLCJkYXRhIGluY2x1ZGluZyB2aWRlbyIsImluY2x1ZGluZyB2aWRlbyBjb250ZW50IiwidmlkZW8gY29udGVudCBtb3Rpb24iLCJjb250ZW50IG1vdGlvbiBhbmQiLCJtb3Rpb24gYW5kIG9yIiwiYW5kIG9yIHN0aWxsIiwib3Igc3RpbGwgcGljdHVyZXMiLCJzdGlsbCBwaWN0dXJlcyB0diIsInBpY3R1cmVzIHR2IHByb2dyYW1zIiwidHYgcHJvZ3JhbXMgb3IiLCJvciBvdGhlciBicm9hZGNhc3RpbmciLCJvdGhlciBicm9hZGNhc3RpbmcgY29udGVudCIsImJyb2FkY2FzdGluZyBjb250ZW50IGFuZCIsImNvbnRlbnQgYW5kIHByb2R1Y3RzIiwiYW5kIHByb2R1Y3RzIGNvbnNpc3RpbmciLCJwcm9kdWN0cyBjb25zaXN0aW5nIG9mIiwiY29uc2lzdGluZyBvZiBjaGFyYWN0ZXIiLCJvZiBjaGFyYWN0ZXIgdGV4dCIsImNoYXJhY3RlciB0ZXh0IHBpY3R1cmVzIiwidGV4dCBwaWN0dXJlcyBwaG90b2dyYXBoaWMiLCJwaWN0dXJlcyBwaG90b2dyYXBoaWMgaW1hZ2VzIiwicGhvdG9ncmFwaGljIGltYWdlcyBncmFwaGljIiwiaW1hZ2VzIGdyYXBoaWMgc3ltYm9scyIsImdyYXBoaWMgc3ltYm9scyBhbmQiLCJzeW1ib2xzIGFuZCBvciIsInRoZSBsaWtlIDUiLCJsaWtlIDUgZGlnaXRhbCIsIjUgZGlnaXRhbCBkb2N1bWVudCIsImRvY3VtZW50IGZpbGUgc2hhbGwiLCJmaWxlIHNoYWxsIG1lYW4iLCJtZWFuIGEgcGRmIiwiYSBwZGYgZmlsZSIsInBkZiBmaWxlIG9yIiwib3Igb3RoZXIgZGlnaXRhbCIsIm90aGVyIGRpZ2l0YWwgY29udGVudCIsImNvbnRlbnQgY3JlYXRlZCBieSIsImNyZWF0ZWQgYnkgdmFyaW91cyIsImJ5IHZhcmlvdXMgc29mdHdhcmUiLCJ2YXJpb3VzIHNvZnR3YXJlIHByb2dyYW1zIiwic29mdHdhcmUgcHJvZ3JhbXMgaW4iLCJwcm9ncmFtcyBpbiB3aGljaCIsImluIHdoaWNoIGEiLCJ3aGljaCBhIHBhcnQiLCJsaWNlbnNlZCBwcm9ncmFtIGJlY29tZXMiLCJwcm9ncmFtIGJlY29tZXMgZW1iZWRkZWQiLCJiZWNvbWVzIGVtYmVkZGVkIG9yIiwiZW1iZWRkZWQgb3IgY29udGFpbmVkIiwidGhlIGZpbGUgZm9yIiwiZm9yIHRoZSBkaXNwbGF5IiwidGhlIGZvbnQgZW1iZWRkZWQiLCJmb250IGVtYmVkZGVkIGZvbnRzIiwiZW1iZWRkZWQgZm9udHMgZW1iZWRkZWQiLCJmb250cyBlbWJlZGRlZCBmb250cyIsImVtYmVkZGVkIGZvbnRzIGFyZSIsImZvbnRzIGFyZSB1c2VkIiwidXNlZCBvbmx5IGluIiwiaW4gdGhlIGRpc3BsYXkiLCJvZiBjaGFyYWN0ZXJzIGluIiwiY2hhcmFjdGVycyBpbiB0aGUiLCJpbiB0aGUgcGFydGljdWxhciIsInRoZSBwYXJ0aWN1bGFyIGRpZ2l0YWwiLCJkb2N1bWVudCBmaWxlIHdpdGhpbiIsImZpbGUgd2l0aGluIHdoaWNoIiwid2l0aGluIHdoaWNoIHRoZXkiLCJ3aGljaCB0aGV5IGFyZSIsInRoZXkgYXJlIGVtYmVkZGVkIiwiYXJlIGVtYmVkZGVkIGFuZCIsImVtYmVkZGVkIGFuZCBzaGFsbCIsInNoYWxsIGJlIGRpc3Rpbmd1aXNoZWQiLCJiZSBkaXN0aW5ndWlzaGVkIGZyb20iLCJkaXN0aW5ndWlzaGVkIGZyb20gdGhvc2UiLCJ0aG9zZSBpbiBhbnkiLCJpbiBhbnkgZGlnaXRhbCIsImFueSBkaWdpdGFsIGZvbnQiLCJmb250IHByb2dyYW0gd2hpY2giLCJwcm9ncmFtIHdoaWNoIG1heSIsInVzZWQgZm9yIGRpc3BsYXkiLCJmb3IgZGlzcGxheSBvZiIsIm9mIGNoYXJhY3RlcnMgb3V0c2lkZSIsImNoYXJhY3RlcnMgb3V0c2lkZSB0aGF0Iiwib3V0c2lkZSB0aGF0IHBhcnRpY3VsYXIiLCJ0aGF0IHBhcnRpY3VsYXIgZGlnaXRhbCIsImRvY3VtZW50IGZpbGUgNiIsImZpbGUgNiBjb21wdXRlciIsIjYgY29tcHV0ZXIgc2hhbGwiLCJjb21wdXRlciBzaGFsbCBpbmNsdWRlIiwiaW5jbHVkZSBhIHNlcnZlciIsImEgc2VydmVyIGluIiwic2VydmVyIGluIHRoaXMiLCJhZ3JlZW1lbnQgNyByZXByb2R1Y3Rpb24iLCI3IHJlcHJvZHVjdGlvbiBhbmQiLCJvdGhlciBleHBsb2l0YXRpb24gc2hhbGwiLCJleHBsb2l0YXRpb24gc2hhbGwgbWVhbiIsIm1lYW4gcmVwcm9kdWN0aW9uIHRyYW5zZmVyIiwicmVwcm9kdWN0aW9uIHRyYW5zZmVyIGRpc3RyaWJ1dGlvbiIsInRyYW5zZmVyIGRpc3RyaWJ1dGlvbiBsZWFzZSIsImRpc3RyaWJ1dGlvbiBsZWFzZSBwdWJsaWMiLCJsZWFzZSBwdWJsaWMgdHJhbnNtaXNzaW9uIiwicHVibGljIHRyYW5zbWlzc2lvbiBwcmVzZW50YXRpb24iLCJ0cmFuc21pc3Npb24gcHJlc2VudGF0aW9uIGV4aGliaXRpb24iLCJwcmVzZW50YXRpb24gZXhoaWJpdGlvbiBhZGFwdGF0aW9uIiwiZXhoaWJpdGlvbiBhZGFwdGF0aW9uIGFuZCIsImFkYXB0YXRpb24gYW5kIGFueSIsImFueSBvdGhlciBleHBsb2l0YXRpb24iLCJvdGhlciBleHBsb2l0YXRpb24gOCIsImV4cGxvaXRhdGlvbiA4IHJlY2lwaWVudCIsIjggcmVjaXBpZW50IHNoYWxsIiwicmVjaXBpZW50IHNoYWxsIG1lYW4iLCJzaGFsbCBtZWFuIGFueW9uZSIsIm1lYW4gYW55b25lIHdobyIsImxpY2Vuc2VkIHByb2dyYW0gdW5kZXIiLCJhZ3JlZW1lbnQgaW5jbHVkaW5nIG9uZSIsImluY2x1ZGluZyBvbmUgdGhhdCIsIm9uZSB0aGF0IHJlY2VpdmVzIiwidGhhdCByZWNlaXZlcyB0aGUiLCJsaWNlbnNlZCBwcm9ncmFtIGZyb20iLCJwcm9ncmFtIGZyb20gYSIsImZyb20gYSByZWNpcGllbnQiXX0seyJsaWNlbnNlVGV4dHMiOlsiSUJNIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wXG5cblRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBJQk1cblxuUFVCTElDIExJQ0VOU0UgKFwiQUdSRUVNRU5UXCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OXG5cbk9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuXG5cbiAgIDEuIERFRklOSVRJT05TXG5cbiAgIFwiQ29udHJpYnV0aW9uXCIgbWVhbnM6XG5cbiAgICAgIGEuIGluIHRoZSBjYXNlIG9mIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gKFwiSUJNXCIpLCB0aGUgT3JpZ2luYWwgUHJvZ3JhbSwgYW5kXG5cbiAgICAgIGIuIGluIHRoZSBjYXNlIG9mIGVhY2ggQ29udHJpYnV0b3IsXG5cbiAgICAgICAgIGkuIGNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZFxuXG4gICAgICAgICBpaS4gYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOyB3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSB3aGljaDpcblxuICAgICAgICAgICAgKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGhcblxuICAgICAgICAgICAgdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90XG5cbiAgICAgICAgICAgIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uXG5cbiAgIFwiQ29udHJpYnV0b3JcIiBtZWFucyBJQk0gYW5kIGFueSBvdGhlciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS5cblxuICAgXCJMaWNlbnNlZCBQYXRlbnRzIFwiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uXG5cbiAgIFwiT3JpZ2luYWwgUHJvZ3JhbVwiIG1lYW5zIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZSBhY2NvbXBhbnlpbmcgdGhpcyBBZ3JlZW1lbnQgYXMgcmVsZWFzZWQgYnkgSUJNLCBpbmNsdWRpbmcgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCBpZiBhbnkuXG5cbiAgIFwiUHJvZ3JhbVwiIG1lYW5zIHRoZSBPcmlnaW5hbCBQcm9ncmFtIGFuZCBDb250cmlidXRpb25zLlxuXG4gICBcIlJlY2lwaWVudFwiIG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLlxuXG4gICAyLiBHUkFOVCBPRiBSSUdIVFNcblxuICAgICAgYS4gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uXG5cbiAgICAgIGIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0byBhbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci5cblxuICAgICAgYy4gUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlXG5cbiAgICAgIGxpY2Vuc2VzIHRvIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlXG5cbiAgICAgIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZVxuXG4gICAgICBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LlxuXG4gICAgICBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zXG5cbiAgICAgIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsXG5cbiAgICAgIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlXG5cbiAgICAgIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzXG5cbiAgICAgIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzXG5cbiAgICAgIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpc1xuXG4gICAgICByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSwgaXQgaXNcblxuICAgICAgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlXG5cbiAgICAgIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS5cblxuICAgICAgZC4gRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXNcblxuICAgICAgc3VmZmljaWVudCBjb3B5cmlnaHQgcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlXG5cbiAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC5cblxuICAgMy4gUkVRVUlSRU1FTlRTXG5cbiAgIEEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDpcblxuICAgICAgYS4gaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZFxuXG4gICAgICBiLiBpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6XG5cbiAgICAgICAgIGkuIGVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQgY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZSBhbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7XG5cbiAgICAgICAgIGlpLiBlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0cztcblxuICAgICAgICAgaWlpLiBzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmRcblxuICAgICAgICAgaXYuIHN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQgaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuXG5cbiAgIFdoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlIGNvZGUgZm9ybTpcblxuICAgICAgYS4gaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kXG5cbiAgICAgIGIuIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLlxuXG4gICBFYWNoIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluIGEgY29uc3BpY3VvdXMgbG9jYXRpb24gaW4gdGhlIFByb2dyYW06XG5cbiAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5OSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbiAgIEluIGFkZGl0aW9uLCBlYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi5cblxuICAgNC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT05cblxuICAgQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2Ugb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoXCJDb21tZXJjaWFsIENvbnRyaWJ1dG9yXCIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIgQ29udHJpYnV0b3IgKFwiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3JcIikgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5IFwiTG9zc2VzXCIpIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIGNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcyByZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS5cblxuICAgRm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZSBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZSBvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuXG5cbiAgIDUuIE5PIFdBUlJBTlRZXG5cbiAgIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy5cblxuICAgNi4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFlcblxuICAgRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuICAgNy4gR0VORVJBTFxuXG4gICBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS5cblxuICAgSWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhIENvbnRyaWJ1dG9yIHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgYnkgdGhhdCBDb250cmlidXRvciB0byBzdWNoIFJlY2lwaWVudCB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiBJbiBhZGRpdGlvbiwgaWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC5cblxuICAgQWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuXG5cbiAgIElCTSBtYXkgcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mIHRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gTm8gb25lIG90aGVyIHRoYW4gSUJNIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLlxuXG4gICBUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uIl0sImxpY2Vuc2VJZHMiOlsiSVBMLTEuMCJdLCJrZXl3b3JkcyI6WyJvZiB0aGlzIGlibSIsInRoaXMgaWJtIHB1YmxpYyIsImNhc2Ugb2YgaW50ZXJuYXRpb25hbCIsIm9mIGludGVybmF0aW9uYWwgYnVzaW5lc3MiLCJtYWNoaW5lcyBjb3Jwb3JhdGlvbiBpYm0iLCJjb3Jwb3JhdGlvbiBpYm0gdGhlIiwiaWJtIHRoZSBvcmlnaW5hbCIsImNvbnRyaWJ1dG9yIG1lYW5zIGlibSIsIm1lYW5zIGlibSBhbmQiLCJpYm0gYW5kIGFueSIsInJlbGVhc2VkIGJ5IGlibSIsImJ5IGlibSBpbmNsdWRpbmciLCJpYm0gaW5jbHVkaW5nIHNvdXJjZSIsImFuZCBjb250cmlidXRpb25zIHJlY2lwaWVudCIsImNvbnRyaWJ1dGlvbnMgcmVjaXBpZW50IG1lYW5zIiwiMTk5NiAxOTk5IGludGVybmF0aW9uYWwiLCIxOTk5IGludGVybmF0aW9uYWwgYnVzaW5lc3MiLCJhbmQgc3Vydml2ZSBpYm0iLCJzdXJ2aXZlIGlibSBtYXkiLCJpYm0gbWF5IHB1Ymxpc2giLCJvdGhlciB0aGFuIGlibSIsInRoYW4gaWJtIGhhcyIsImlibSBoYXMgdGhlIiwiaWJtIHB1YmxpYyBsaWNlbnNlIHZlcnNpb24iLCJ0ZXJtcyBvZiB0aGlzIGlibSIsIm9mIHRoaXMgaWJtIHB1YmxpYyIsInRoaXMgaWJtIHB1YmxpYyBsaWNlbnNlIiwiaWJtIHB1YmxpYyBsaWNlbnNlIGFncmVlbWVudCIsInRoZSBjYXNlIG9mIGludGVybmF0aW9uYWwiLCJjYXNlIG9mIGludGVybmF0aW9uYWwgYnVzaW5lc3MiLCJvZiBpbnRlcm5hdGlvbmFsIGJ1c2luZXNzIG1hY2hpbmVzIiwiYnVzaW5lc3MgbWFjaGluZXMgY29ycG9yYXRpb24gaWJtIiwibWFjaGluZXMgY29ycG9yYXRpb24gaWJtIHRoZSIsImNvcnBvcmF0aW9uIGlibSB0aGUgb3JpZ2luYWwiLCJpYm0gdGhlIG9yaWdpbmFsIHByb2dyYW0iLCJwcm9ncmFtIGNvbnRyaWJ1dG9yIG1lYW5zIGlibSIsImNvbnRyaWJ1dG9yIG1lYW5zIGlibSBhbmQiLCJtZWFucyBpYm0gYW5kIGFueSIsImlibSBhbmQgYW55IG90aGVyIiwib3RoZXIgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMiLCJhcyByZWxlYXNlZCBieSBpYm0iLCJyZWxlYXNlZCBieSBpYm0gaW5jbHVkaW5nIiwiYnkgaWJtIGluY2x1ZGluZyBzb3VyY2UiLCJpYm0gaW5jbHVkaW5nIHNvdXJjZSBjb2RlIiwicHJvZ3JhbSBhbmQgY29udHJpYnV0aW9ucyByZWNpcGllbnQiLCJhbmQgY29udHJpYnV0aW9ucyByZWNpcGllbnQgbWVhbnMiLCJjb250cmlidXRpb25zIHJlY2lwaWVudCBtZWFucyBhbnlvbmUiLCJvZiB0aGUgcHJvZ3JhbSBlYWNoIiwiZWFjaCBjb250cmlidXRvciBtdXN0IGluY2x1ZGUiLCJjb250cmlidXRvciBtdXN0IGluY2x1ZGUgdGhlIiwicHJvZ3JhbSBjb3B5cmlnaHQgYyAxOTk2IiwiYyAxOTk2IDE5OTkgaW50ZXJuYXRpb25hbCIsIjE5OTYgMTk5OSBpbnRlcm5hdGlvbmFsIGJ1c2luZXNzIiwiMTk5OSBpbnRlcm5hdGlvbmFsIGJ1c2luZXNzIG1hY2hpbmVzIiwicmVzZXJ2ZWQgaW4gYWRkaXRpb24gZWFjaCIsImNvbnRpbnVlIGFuZCBzdXJ2aXZlIGlibSIsImFuZCBzdXJ2aXZlIGlibSBtYXkiLCJzdXJ2aXZlIGlibSBtYXkgcHVibGlzaCIsImlibSBtYXkgcHVibGlzaCBuZXciLCJvbmUgb3RoZXIgdGhhbiBpYm0iLCJvdGhlciB0aGFuIGlibSBoYXMiLCJ0aGFuIGlibSBoYXMgdGhlIiwiaWJtIGhhcyB0aGUgcmlnaHQiLCJpYm0gcHVibGljIGxpY2Vuc2UgdmVyc2lvbiAxIiwidGhlIHRlcm1zIG9mIHRoaXMgaWJtIiwidGVybXMgb2YgdGhpcyBpYm0gcHVibGljIiwib2YgdGhpcyBpYm0gcHVibGljIGxpY2Vuc2UiLCJ0aGlzIGlibSBwdWJsaWMgbGljZW5zZSBhZ3JlZW1lbnQiLCJpYm0gcHVibGljIGxpY2Vuc2UgYWdyZWVtZW50IGFueSIsImluIHRoZSBjYXNlIG9mIGludGVybmF0aW9uYWwiLCJ0aGUgY2FzZSBvZiBpbnRlcm5hdGlvbmFsIGJ1c2luZXNzIiwiY2FzZSBvZiBpbnRlcm5hdGlvbmFsIGJ1c2luZXNzIG1hY2hpbmVzIiwib2YgaW50ZXJuYXRpb25hbCBidXNpbmVzcyBtYWNoaW5lcyBjb3Jwb3JhdGlvbiIsImludGVybmF0aW9uYWwgYnVzaW5lc3MgbWFjaGluZXMgY29ycG9yYXRpb24gaWJtIiwiYnVzaW5lc3MgbWFjaGluZXMgY29ycG9yYXRpb24gaWJtIHRoZSIsIm1hY2hpbmVzIGNvcnBvcmF0aW9uIGlibSB0aGUgb3JpZ2luYWwiLCJjb3Jwb3JhdGlvbiBpYm0gdGhlIG9yaWdpbmFsIHByb2dyYW0iLCJpYm0gdGhlIG9yaWdpbmFsIHByb2dyYW0gYW5kIiwidGhlIHByb2dyYW0gY29udHJpYnV0b3IgbWVhbnMgaWJtIiwicHJvZ3JhbSBjb250cmlidXRvciBtZWFucyBpYm0gYW5kIiwiY29udHJpYnV0b3IgbWVhbnMgaWJtIGFuZCBhbnkiLCJtZWFucyBpYm0gYW5kIGFueSBvdGhlciIsImlibSBhbmQgYW55IG90aGVyIGVudGl0eSIsImFueSBvdGhlciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyIsIm90aGVyIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSIsImFncmVlbWVudCBhcyByZWxlYXNlZCBieSBpYm0iLCJhcyByZWxlYXNlZCBieSBpYm0gaW5jbHVkaW5nIiwicmVsZWFzZWQgYnkgaWJtIGluY2x1ZGluZyBzb3VyY2UiLCJieSBpYm0gaW5jbHVkaW5nIHNvdXJjZSBjb2RlIiwiaWJtIGluY2x1ZGluZyBzb3VyY2UgY29kZSBvYmplY3QiLCJvcmlnaW5hbCBwcm9ncmFtIGFuZCBjb250cmlidXRpb25zIHJlY2lwaWVudCIsInByb2dyYW0gYW5kIGNvbnRyaWJ1dGlvbnMgcmVjaXBpZW50IG1lYW5zIiwiYW5kIGNvbnRyaWJ1dGlvbnMgcmVjaXBpZW50IG1lYW5zIGFueW9uZSIsImNvbnRyaWJ1dGlvbnMgcmVjaXBpZW50IG1lYW5zIGFueW9uZSB3aG8iLCJjb3B5IG9mIHRoZSBwcm9ncmFtIGVhY2giLCJvZiB0aGUgcHJvZ3JhbSBlYWNoIGNvbnRyaWJ1dG9yIiwicHJvZ3JhbSBlYWNoIGNvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSIsImVhY2ggY29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIHRoZSIsImNvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIiwidGhlIHByb2dyYW0gY29weXJpZ2h0IGMgMTk5NiIsInByb2dyYW0gY29weXJpZ2h0IGMgMTk5NiAxOTk5IiwiY29weXJpZ2h0IGMgMTk5NiAxOTk5IGludGVybmF0aW9uYWwiLCJjIDE5OTYgMTk5OSBpbnRlcm5hdGlvbmFsIGJ1c2luZXNzIiwiMTk5NiAxOTk5IGludGVybmF0aW9uYWwgYnVzaW5lc3MgbWFjaGluZXMiLCIxOTk5IGludGVybmF0aW9uYWwgYnVzaW5lc3MgbWFjaGluZXMgY29ycG9yYXRpb24iLCJvdGhlcnMgYWxsIHJpZ2h0cyByZXNlcnZlZCBpbiIsInJpZ2h0cyByZXNlcnZlZCBpbiBhZGRpdGlvbiBlYWNoIiwicmVzZXJ2ZWQgaW4gYWRkaXRpb24gZWFjaCBjb250cmlidXRvciIsInNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlIGlibSIsImNvbnRpbnVlIGFuZCBzdXJ2aXZlIGlibSBtYXkiLCJhbmQgc3Vydml2ZSBpYm0gbWF5IHB1Ymxpc2giLCJzdXJ2aXZlIGlibSBtYXkgcHVibGlzaCBuZXciLCJpYm0gbWF5IHB1Ymxpc2ggbmV3IHZlcnNpb25zIiwibm8gb25lIG90aGVyIHRoYW4gaWJtIiwib25lIG90aGVyIHRoYW4gaWJtIGhhcyIsIm90aGVyIHRoYW4gaWJtIGhhcyB0aGUiLCJ0aGFuIGlibSBoYXMgdGhlIHJpZ2h0IiwiaWJtIGhhcyB0aGUgcmlnaHQgdG8iXX0seyJsaWNlbnNlVGV4dHMiOlsiSVNDIExpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuIChcIklTQ1wiKVxuXG5Db3B5cmlnaHQgKGMpIDE5OTUtMjAwMyBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCAvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLiJdLCJsaWNlbnNlSWRzIjpbIklTQyJdLCJrZXl3b3JkcyI6WyJpc2MgbGljZW5zZSBjb3B5cmlnaHQiLCJjIDIwMDQgMjAxMCIsIjIwMDQgMjAxMCBieSIsIjIwMTAgYnkgaW50ZXJuZXQiLCJieSBpbnRlcm5ldCBzeXN0ZW1zIiwiaW50ZXJuZXQgc3lzdGVtcyBjb25zb3J0aXVtIiwic3lzdGVtcyBjb25zb3J0aXVtIGluYyIsImNvbnNvcnRpdW0gaW5jIGlzYyIsImluYyBpc2MgY29weXJpZ2h0IiwiaXNjIGNvcHlyaWdodCBjIiwiYyAxOTk1IDIwMDMiLCIxOTk1IDIwMDMgYnkiLCIyMDAzIGJ5IGludGVybmV0IiwiYnkgaW50ZXJuZXQgc29mdHdhcmUiLCJpbnRlcm5ldCBzb2Z0d2FyZSBjb25zb3J0aXVtIiwic29mdHdhcmUgY29uc29ydGl1bSBwZXJtaXNzaW9uIiwiY29uc29ydGl1bSBwZXJtaXNzaW9uIHRvIiwiaXMgYW5kIGlzYyIsImFuZCBpc2MgZGlzY2xhaW1zIiwiaXNjIGRpc2NsYWltcyBhbGwiLCJldmVudCBzaGFsbCBpc2MiLCJzaGFsbCBpc2MgYmUiLCJpc2MgYmUgbGlhYmxlIiwiaXNjIGxpY2Vuc2UgY29weXJpZ2h0IGMiLCJsaWNlbnNlIGNvcHlyaWdodCBjIDIwMDQiLCJjb3B5cmlnaHQgYyAyMDA0IDIwMTAiLCJjIDIwMDQgMjAxMCBieSIsIjIwMDQgMjAxMCBieSBpbnRlcm5ldCIsIjIwMTAgYnkgaW50ZXJuZXQgc3lzdGVtcyIsImJ5IGludGVybmV0IHN5c3RlbXMgY29uc29ydGl1bSIsImludGVybmV0IHN5c3RlbXMgY29uc29ydGl1bSBpbmMiLCJzeXN0ZW1zIGNvbnNvcnRpdW0gaW5jIGlzYyIsImNvbnNvcnRpdW0gaW5jIGlzYyBjb3B5cmlnaHQiLCJpbmMgaXNjIGNvcHlyaWdodCBjIiwiaXNjIGNvcHlyaWdodCBjIDE5OTUiLCJjb3B5cmlnaHQgYyAxOTk1IDIwMDMiLCJjIDE5OTUgMjAwMyBieSIsIjE5OTUgMjAwMyBieSBpbnRlcm5ldCIsIjIwMDMgYnkgaW50ZXJuZXQgc29mdHdhcmUiLCJieSBpbnRlcm5ldCBzb2Z0d2FyZSBjb25zb3J0aXVtIiwiaW50ZXJuZXQgc29mdHdhcmUgY29uc29ydGl1bSBwZXJtaXNzaW9uIiwic29mdHdhcmUgY29uc29ydGl1bSBwZXJtaXNzaW9uIHRvIiwiY29uc29ydGl1bSBwZXJtaXNzaW9uIHRvIHVzZSIsImFzIGlzIGFuZCBpc2MiLCJpcyBhbmQgaXNjIGRpc2NsYWltcyIsImFuZCBpc2MgZGlzY2xhaW1zIGFsbCIsImlzYyBkaXNjbGFpbXMgYWxsIHdhcnJhbnRpZXMiLCJubyBldmVudCBzaGFsbCBpc2MiLCJldmVudCBzaGFsbCBpc2MgYmUiLCJzaGFsbCBpc2MgYmUgbGlhYmxlIiwiaXNjIGJlIGxpYWJsZSBmb3IiLCJpc2MgbGljZW5zZSBjb3B5cmlnaHQgYyAyMDA0IiwibGljZW5zZSBjb3B5cmlnaHQgYyAyMDA0IDIwMTAiLCJjb3B5cmlnaHQgYyAyMDA0IDIwMTAgYnkiLCJjIDIwMDQgMjAxMCBieSBpbnRlcm5ldCIsIjIwMDQgMjAxMCBieSBpbnRlcm5ldCBzeXN0ZW1zIiwiMjAxMCBieSBpbnRlcm5ldCBzeXN0ZW1zIGNvbnNvcnRpdW0iLCJieSBpbnRlcm5ldCBzeXN0ZW1zIGNvbnNvcnRpdW0gaW5jIiwiaW50ZXJuZXQgc3lzdGVtcyBjb25zb3J0aXVtIGluYyBpc2MiLCJzeXN0ZW1zIGNvbnNvcnRpdW0gaW5jIGlzYyBjb3B5cmlnaHQiLCJjb25zb3J0aXVtIGluYyBpc2MgY29weXJpZ2h0IGMiLCJpbmMgaXNjIGNvcHlyaWdodCBjIDE5OTUiLCJpc2MgY29weXJpZ2h0IGMgMTk5NSAyMDAzIiwiY29weXJpZ2h0IGMgMTk5NSAyMDAzIGJ5IiwiYyAxOTk1IDIwMDMgYnkgaW50ZXJuZXQiLCIxOTk1IDIwMDMgYnkgaW50ZXJuZXQgc29mdHdhcmUiLCIyMDAzIGJ5IGludGVybmV0IHNvZnR3YXJlIGNvbnNvcnRpdW0iLCJieSBpbnRlcm5ldCBzb2Z0d2FyZSBjb25zb3J0aXVtIHBlcm1pc3Npb24iLCJpbnRlcm5ldCBzb2Z0d2FyZSBjb25zb3J0aXVtIHBlcm1pc3Npb24gdG8iLCJzb2Z0d2FyZSBjb25zb3J0aXVtIHBlcm1pc3Npb24gdG8gdXNlIiwiY29uc29ydGl1bSBwZXJtaXNzaW9uIHRvIHVzZSBjb3B5IiwicHJvdmlkZWQgYXMgaXMgYW5kIGlzYyIsImFzIGlzIGFuZCBpc2MgZGlzY2xhaW1zIiwiaXMgYW5kIGlzYyBkaXNjbGFpbXMgYWxsIiwiYW5kIGlzYyBkaXNjbGFpbXMgYWxsIHdhcnJhbnRpZXMiLCJpc2MgZGlzY2xhaW1zIGFsbCB3YXJyYW50aWVzIHdpdGgiLCJpbiBubyBldmVudCBzaGFsbCBpc2MiLCJubyBldmVudCBzaGFsbCBpc2MgYmUiLCJldmVudCBzaGFsbCBpc2MgYmUgbGlhYmxlIiwic2hhbGwgaXNjIGJlIGxpYWJsZSBmb3IiLCJpc2MgYmUgbGlhYmxlIGZvciBhbnkiXX0seyJsaWNlbnNlVGV4dHMiOlsiQmVmb3JlIHdlIGdldCB0byB0aGUgdGV4dCBvZiB0aGUgbGljZW5zZSwgbGV0cyBqdXN0IHJldmlldyB3aGF0IHRoZSBsaWNlbnNlIHNheXMgaW4gc2ltcGxlIHRlcm1zOlxuXG5JdCBhbGxvd3MgeW91IHRvOlxuXG4gICAqIGZyZWVseSBkb3dubG9hZCBhbmQgdXNlIEltYWdlTWFnaWNrIHNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBmb3IgcGVyc29uYWwsIGNvbXBhbnkgaW50ZXJuYWwsIG9yIGNvbW1lcmNpYWwgcHVycG9zZXM7XG5cbiAgICogdXNlIEltYWdlTWFnaWNrIHNvZnR3YXJlIGluIHBhY2thZ2VzIG9yIGRpc3RyaWJ1dGlvbnMgdGhhdCB5b3UgY3JlYXRlO1xuXG4gICAqIGxpbmsgYWdhaW5zdCBhIGxpYnJhcnkgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZTtcblxuICAgKiBsaW5rIGNvZGUgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBhZ2FpbnN0IGEgbGlicmFyeSB1bmRlciB0aGlzIGxpY2Vuc2U7XG5cbiAgICogbWVyZ2UgY29kZSBpbnRvIGEgd29yayB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlO1xuXG4gICAqIGV4dGVuZCBwYXRlbnQgZ3JhbnRzIHRvIGFueSBjb2RlIHVzaW5nIGNvZGUgdW5kZXIgdGhpcyBsaWNlbnNlO1xuXG4gICAqIGFuZCBleHRlbmQgcGF0ZW50IHByb3RlY3Rpb24uXG5cbkl0IGZvcmJpZHMgeW91IHRvOlxuXG4gICAqIHJlZGlzdHJpYnV0ZSBhbnkgcGllY2Ugb2YgSW1hZ2VNYWdpY2stb3JpZ2luYXRlZCBzb2Z0d2FyZSB3aXRob3V0IHByb3BlciBhdHRyaWJ1dGlvbjtcblxuICAgKiB1c2UgYW55IG1hcmtzIG93bmVkIGJ5IEltYWdlTWFnaWNrIFN0dWRpbyBMTEMgaW4gYW55IHdheSB0aGF0IG1pZ2h0IHN0YXRlIG9yIGltcGx5IHRoYXQgSW1hZ2VNYWdpY2sgU3R1ZGlvIExMQyBlbmRvcnNlcyB5b3VyIGRpc3RyaWJ1dGlvbjtcblxuICAgKiB1c2UgYW55IG1hcmtzIG93bmVkIGJ5IEltYWdlTWFnaWNrIFN0dWRpbyBMTEMgaW4gYW55IHdheSB0aGF0IG1pZ2h0IHN0YXRlIG9yIGltcGx5IHRoYXQgeW91IGNyZWF0ZWQgdGhlIEltYWdlTWFnaWNrIHNvZnR3YXJlIGluIHF1ZXN0aW9uLlxuXG5JdCByZXF1aXJlcyB5b3UgdG86XG5cbiAgICogaW5jbHVkZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaW4gYW55IHJlZGlzdHJpYnV0aW9uIHlvdSBtYXkgbWFrZSB0aGF0IGluY2x1ZGVzIEltYWdlTWFnaWNrIHNvZnR3YXJlO1xuXG4gICAqIHByb3ZpZGUgY2xlYXIgYXR0cmlidXRpb24gdG8gSW1hZ2VNYWdpY2sgU3R1ZGlvIExMQyBmb3IgYW55IGRpc3RyaWJ1dGlvbnMgdGhhdCBpbmNsdWRlIEltYWdlTWFnaWNrIHNvZnR3YXJlLlxuXG5JdCBkb2VzIG5vdCByZXF1aXJlIHlvdSB0bzpcblxuICAgKiBpbmNsdWRlIHRoZSBzb3VyY2Ugb2YgdGhlIEltYWdlTWFnaWNrIHNvZnR3YXJlIGl0c2VsZiwgb3Igb2YgYW55IG1vZGlmaWNhdGlvbnMgeW91IG1heSBoYXZlIG1hZGUgdG8gaXQsIGluIGFueSByZWRpc3RyaWJ1dGlvbiB5b3UgbWF5IGFzc2VtYmxlIHRoYXQgaW5jbHVkZXMgaXQ7XG5cbiAgICogc3VibWl0IGNoYW5nZXMgdGhhdCB5b3UgbWFrZSB0byB0aGUgc29mdHdhcmUgYmFjayB0byB0aGUgSW1hZ2VNYWdpY2sgU3R1ZGlvIExMQyAodGhvdWdoIHN1Y2ggZmVlZGJhY2sgaXMgZW5jb3VyYWdlZCkuXG5cbkEgZmV3IG90aGVyIGNsYXJpZmljYXRpb25zIGluY2x1ZGU6XG5cbiAgICogSW1hZ2VNYWdpY2sgaXMgZnJlZWx5IGF2YWlsYWJsZSB3aXRob3V0IGNoYXJnZTtcblxuICAgKiB5b3UgbWF5IGluY2x1ZGUgSW1hZ2VNYWdpY2sgb24gYSBEVkQgYXMgbG9uZyBhcyB5b3UgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoZSBsaWNlbnNlO1xuXG4gICAqIHlvdSBjYW4gZ2l2ZSBtb2RpZmllZCBjb2RlIGF3YXkgZm9yIGZyZWUgb3Igc2VsbCBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEltYWdlTWFnaWNrIGxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgcmVzdWx0IHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UsIGJ1dCB5b3UgbmVlZCB0byBhY2tub3dsZWRnZSB0aGUgdXNlIG9mIHRoZSBJbWFnZU1hZ2ljayBzb2Z0d2FyZTtcblxuICAgKiB0aGUgbGljZW5zZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEdQTCBWMy5cblxuICAgKiB3aGVuIGV4cG9ydGluZyB0aGUgSW1hZ2VNYWdpY2sgc29mdHdhcmUsIHJldmlldyBpdHMgZXhwb3J0IGNsYXNzaWZpY2F0aW9uLlxuXG5UZXJtcyBhbmQgQ29uZGl0aW9ucyBmb3IgVXNlLCBSZXByb2R1Y3Rpb24sIGFuZCBEaXN0cmlidXRpb25cblxuVGhlIGxlZ2FsbHkgYmluZGluZyBhbmQgYXV0aG9yaXRhdGl2ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgSW1hZ2VNYWdpY2sgZm9sbG93OiBDb3B5cmlnaHQgMTk5OS0yMDEzIEltYWdlTWFnaWNrIFN0dWRpbyBMTEMsIGEgbm9uLXByb2ZpdCBvcmdhbml6YXRpb24gZGVkaWNhdGVkIHRvIG1ha2luZyBzb2Z0d2FyZSBpbWFnaW5nIHNvbHV0aW9ucyBmcmVlbHkgYXZhaWxhYmxlLlxuXG4gICAxLiBEZWZpbml0aW9ucy5cblxuICAgTGljZW5zZSBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LlxuXG4gICBMaWNlbnNvciBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLlxuXG4gICBMZWdhbCBFbnRpdHkgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbCBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIGNvbnRyb2wgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgIFlvdSAob3IgWW91cikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLlxuXG4gICBTb3VyY2UgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24gc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy5cblxuICAgT2JqZWN0IGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLCBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuXG5cbiAgIFdvcmsgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yayAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLlxuXG4gICBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi5cblxuICAgQ29udHJpYnV0aW9uIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcInN1Ym1pdHRlZFwiIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0IGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzIE5vdCBhIENvbnRyaWJ1dGlvbi5cblxuICAgQ29udHJpYnV0b3Igc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZCBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay5cblxuICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZSBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLlxuXG4gICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpciBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLlxuXG4gICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICAgIGEuIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmRcblxuICAgICAgYi4gWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZFxuXG4gICAgICBjLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZFxuXG4gICAgICBkLiBJZiB0aGUgV29yayBpbmNsdWRlcyBhIFwiTk9USUNFXCIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvciBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZCBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbiBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZSBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS5cblxuICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvciBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuXG5cbiAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5IHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy5cblxuICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZSBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS5cblxuICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2ggQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuIEFTIElTIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseSBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZSBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuXG5cbiAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbiBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4gSG93IHRvIEFwcGx5IHRoZSBMaWNlbnNlIHRvIHlvdXIgV29ya1xuXG5UbyBhcHBseSB0aGUgSW1hZ2VNYWdpY2sgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzIFwiW11cIiByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uIChkb24ndCBpbmNsdWRlIHRoZSBicmFja2V0cykuIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUgc2FtZSBcInByaW50ZWQgcGFnZVwiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLlxuXG5Db3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl1cblxuTGljZW5zZWQgdW5kZXIgdGhlIEltYWdlTWFnaWNrIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbmh0dHA6Ly93d3cuaW1hZ2VtYWdpY2sub3JnL3NjcmlwdC9saWNlbnNlLnBocFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIl0sImxpY2Vuc2VJZHMiOlsiSW1hZ2VNYWdpY2siXSwia2V5d29yZHMiOlsiYmVmb3JlIHdlIGdldCIsIndlIGdldCB0byIsImdldCB0byB0aGUiLCJ0aGUgbGljZW5zZSBsZXRzIiwibGljZW5zZSBsZXRzIGp1c3QiLCJsZXRzIGp1c3QgcmV2aWV3IiwianVzdCByZXZpZXcgd2hhdCIsInJldmlldyB3aGF0IHRoZSIsIndoYXQgdGhlIGxpY2Vuc2UiLCJ0aGUgbGljZW5zZSBzYXlzIiwibGljZW5zZSBzYXlzIGluIiwic2F5cyBpbiBzaW1wbGUiLCJpbiBzaW1wbGUgdGVybXMiLCJzaW1wbGUgdGVybXMgaXQiLCJ0ZXJtcyBpdCBhbGxvd3MiLCJpdCBhbGxvd3MgeW91IiwidG8gZnJlZWx5IGRvd25sb2FkIiwiZnJlZWx5IGRvd25sb2FkIGFuZCIsImRvd25sb2FkIGFuZCB1c2UiLCJhbmQgdXNlIGltYWdlbWFnaWNrIiwicGFydCBmb3IgcGVyc29uYWwiLCJmb3IgcGVyc29uYWwgY29tcGFueSIsInBlcnNvbmFsIGNvbXBhbnkgaW50ZXJuYWwiLCJjb21wYW55IGludGVybmFsIG9yIiwiaW50ZXJuYWwgb3IgY29tbWVyY2lhbCIsIm9yIGNvbW1lcmNpYWwgcHVycG9zZXMiLCJjb21tZXJjaWFsIHB1cnBvc2VzIHVzZSIsInB1cnBvc2VzIHVzZSBpbWFnZW1hZ2ljayIsInNvZnR3YXJlIGluIHBhY2thZ2VzIiwiaW4gcGFja2FnZXMgb3IiLCJwYWNrYWdlcyBvciBkaXN0cmlidXRpb25zIiwib3IgZGlzdHJpYnV0aW9ucyB0aGF0IiwiZGlzdHJpYnV0aW9ucyB0aGF0IHlvdSIsInlvdSBjcmVhdGUgbGluayIsImNyZWF0ZSBsaW5rIGFnYWluc3QiLCJsaW5rIGFnYWluc3QgYSIsImxpYnJhcnkgdW5kZXIgYSIsImRpZmZlcmVudCBsaWNlbnNlIGxpbmsiLCJsaWNlbnNlIGxpbmsgY29kZSIsImxpbmsgY29kZSB1bmRlciIsImRpZmZlcmVudCBsaWNlbnNlIGFnYWluc3QiLCJ0aGlzIGxpY2Vuc2UgbWVyZ2UiLCJsaWNlbnNlIG1lcmdlIGNvZGUiLCJtZXJnZSBjb2RlIGludG8iLCJjb2RlIGludG8gYSIsImludG8gYSB3b3JrIiwiYSB3b3JrIHVuZGVyIiwiZGlmZmVyZW50IGxpY2Vuc2UgZXh0ZW5kIiwibGljZW5zZSBleHRlbmQgcGF0ZW50IiwiZXh0ZW5kIHBhdGVudCBncmFudHMiLCJwYXRlbnQgZ3JhbnRzIHRvIiwidG8gYW55IGNvZGUiLCJhbnkgY29kZSB1c2luZyIsImNvZGUgdXNpbmcgY29kZSIsInVzaW5nIGNvZGUgdW5kZXIiLCJsaWNlbnNlIGFuZCBleHRlbmQiLCJhbmQgZXh0ZW5kIHBhdGVudCIsImV4dGVuZCBwYXRlbnQgcHJvdGVjdGlvbiIsInBhdGVudCBwcm90ZWN0aW9uIGl0IiwicHJvdGVjdGlvbiBpdCBmb3JiaWRzIiwiaXQgZm9yYmlkcyB5b3UiLCJmb3JiaWRzIHlvdSB0byIsInlvdSB0byByZWRpc3RyaWJ1dGUiLCJyZWRpc3RyaWJ1dGUgYW55IHBpZWNlIiwicGllY2Ugb2YgaW1hZ2VtYWdpY2siLCJvZiBpbWFnZW1hZ2ljayBvcmlnaW5hdGVkIiwiaW1hZ2VtYWdpY2sgb3JpZ2luYXRlZCBzb2Z0d2FyZSIsIm9yaWdpbmF0ZWQgc29mdHdhcmUgd2l0aG91dCIsInNvZnR3YXJlIHdpdGhvdXQgcHJvcGVyIiwid2l0aG91dCBwcm9wZXIgYXR0cmlidXRpb24iLCJwcm9wZXIgYXR0cmlidXRpb24gdXNlIiwiYXR0cmlidXRpb24gdXNlIGFueSIsImltcGx5IHRoYXQgaW1hZ2VtYWdpY2siLCJ0aGF0IGltYWdlbWFnaWNrIHN0dWRpbyIsInN0dWRpbyBsbGMgZW5kb3JzZXMiLCJsbGMgZW5kb3JzZXMgeW91ciIsImVuZG9yc2VzIHlvdXIgZGlzdHJpYnV0aW9uIiwieW91ciBkaXN0cmlidXRpb24gdXNlIiwiZGlzdHJpYnV0aW9uIHVzZSBhbnkiLCJ0aGF0IHlvdSBjcmVhdGVkIiwieW91IGNyZWF0ZWQgdGhlIiwiY3JlYXRlZCB0aGUgaW1hZ2VtYWdpY2siLCJzb2Z0d2FyZSBpbiBxdWVzdGlvbiIsImluIHF1ZXN0aW9uIGl0IiwicXVlc3Rpb24gaXQgcmVxdWlyZXMiLCJpdCByZXF1aXJlcyB5b3UiLCJtYXkgbWFrZSB0aGF0IiwibWFrZSB0aGF0IGluY2x1ZGVzIiwidGhhdCBpbmNsdWRlcyBpbWFnZW1hZ2ljayIsImluY2x1ZGVzIGltYWdlbWFnaWNrIHNvZnR3YXJlIiwiaW1hZ2VtYWdpY2sgc29mdHdhcmUgcHJvdmlkZSIsInNvZnR3YXJlIHByb3ZpZGUgY2xlYXIiLCJwcm92aWRlIGNsZWFyIGF0dHJpYnV0aW9uIiwiY2xlYXIgYXR0cmlidXRpb24gdG8iLCJhdHRyaWJ1dGlvbiB0byBpbWFnZW1hZ2ljayIsInRvIGltYWdlbWFnaWNrIHN0dWRpbyIsInN0dWRpbyBsbGMgZm9yIiwibGxjIGZvciBhbnkiLCJmb3IgYW55IGRpc3RyaWJ1dGlvbnMiLCJhbnkgZGlzdHJpYnV0aW9ucyB0aGF0IiwiZGlzdHJpYnV0aW9ucyB0aGF0IGluY2x1ZGUiLCJ0aGF0IGluY2x1ZGUgaW1hZ2VtYWdpY2siLCJpbmNsdWRlIGltYWdlbWFnaWNrIHNvZnR3YXJlIiwiaW1hZ2VtYWdpY2sgc29mdHdhcmUgaXQiLCJzb2Z0d2FyZSBpdCBkb2VzIiwibm90IHJlcXVpcmUgeW91IiwicmVxdWlyZSB5b3UgdG8iLCJpbWFnZW1hZ2ljayBzb2Z0d2FyZSBpdHNlbGYiLCJzb2Z0d2FyZSBpdHNlbGYgb3IiLCJpdHNlbGYgb3Igb2YiLCJtYXkgaGF2ZSBtYWRlIiwiaGF2ZSBtYWRlIHRvIiwibWFkZSB0byBpdCIsInRvIGl0IGluIiwieW91IG1heSBhc3NlbWJsZSIsIm1heSBhc3NlbWJsZSB0aGF0IiwiYXNzZW1ibGUgdGhhdCBpbmNsdWRlcyIsInRoYXQgaW5jbHVkZXMgaXQiLCJpbmNsdWRlcyBpdCBzdWJtaXQiLCJpdCBzdWJtaXQgY2hhbmdlcyIsInN1Ym1pdCBjaGFuZ2VzIHRoYXQiLCJjaGFuZ2VzIHRoYXQgeW91IiwidGhlIHNvZnR3YXJlIGJhY2siLCJzb2Z0d2FyZSBiYWNrIHRvIiwidG8gdGhlIGltYWdlbWFnaWNrIiwidGhlIGltYWdlbWFnaWNrIHN0dWRpbyIsInN0dWRpbyBsbGMgdGhvdWdoIiwibGxjIHRob3VnaCBzdWNoIiwidGhvdWdoIHN1Y2ggZmVlZGJhY2siLCJzdWNoIGZlZWRiYWNrIGlzIiwiZmVlZGJhY2sgaXMgZW5jb3VyYWdlZCIsImlzIGVuY291cmFnZWQgYSIsImVuY291cmFnZWQgYSBmZXciLCJhIGZldyBvdGhlciIsImZldyBvdGhlciBjbGFyaWZpY2F0aW9ucyIsIm90aGVyIGNsYXJpZmljYXRpb25zIGluY2x1ZGUiLCJjbGFyaWZpY2F0aW9ucyBpbmNsdWRlIGltYWdlbWFnaWNrIiwiaW5jbHVkZSBpbWFnZW1hZ2ljayBpcyIsImltYWdlbWFnaWNrIGlzIGZyZWVseSIsImZyZWVseSBhdmFpbGFibGUgd2l0aG91dCIsIndpdGhvdXQgY2hhcmdlIHlvdSIsImNoYXJnZSB5b3UgbWF5IiwibWF5IGluY2x1ZGUgaW1hZ2VtYWdpY2siLCJpbmNsdWRlIGltYWdlbWFnaWNrIG9uIiwiaW1hZ2VtYWdpY2sgb24gYSIsIm9uIGEgZHZkIiwiYSBkdmQgYXMiLCJkdmQgYXMgbG9uZyIsImxpY2Vuc2UgeW91IGNhbiIsInlvdSBjYW4gZ2l2ZSIsImNhbiBnaXZlIG1vZGlmaWVkIiwiZ2l2ZSBtb2RpZmllZCBjb2RlIiwibW9kaWZpZWQgY29kZSBhd2F5IiwiY29kZSBhd2F5IGZvciIsImF3YXkgZm9yIGZyZWUiLCJmb3IgZnJlZSBvciIsImZyZWUgb3Igc2VsbCIsIm9yIHNlbGwgaXQiLCJzZWxsIGl0IHVuZGVyIiwiaW1hZ2VtYWdpY2sgbGljZW5zZSBvciIsImxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSIsInRoZSByZXN1bHQgdW5kZXIiLCJyZXN1bHQgdW5kZXIgYSIsImRpZmZlcmVudCBsaWNlbnNlIGJ1dCIsImJ1dCB5b3UgbmVlZCIsIm5lZWQgdG8gYWNrbm93bGVkZ2UiLCJhY2tub3dsZWRnZSB0aGUgdXNlIiwiaW1hZ2VtYWdpY2sgc29mdHdhcmUgdGhlIiwic29mdHdhcmUgdGhlIGxpY2Vuc2UiLCJsaWNlbnNlIGlzIGNvbXBhdGlibGUiLCJpcyBjb21wYXRpYmxlIHdpdGgiLCJ0aGUgZ3BsIHYzIiwiZ3BsIHYzIHdoZW4iLCJ2MyB3aGVuIGV4cG9ydGluZyIsIndoZW4gZXhwb3J0aW5nIHRoZSIsImV4cG9ydGluZyB0aGUgaW1hZ2VtYWdpY2siLCJpbWFnZW1hZ2ljayBzb2Z0d2FyZSByZXZpZXciLCJzb2Z0d2FyZSByZXZpZXcgaXRzIiwicmV2aWV3IGl0cyBleHBvcnQiLCJpdHMgZXhwb3J0IGNsYXNzaWZpY2F0aW9uIiwiZXhwb3J0IGNsYXNzaWZpY2F0aW9uIHRlcm1zIiwiY2xhc3NpZmljYXRpb24gdGVybXMgYW5kIiwiYW5kIGRpc3RyaWJ1dGlvbiB0aGUiLCJkaXN0cmlidXRpb24gdGhlIGxlZ2FsbHkiLCJ0aGUgbGVnYWxseSBiaW5kaW5nIiwibGVnYWxseSBiaW5kaW5nIGFuZCIsImJpbmRpbmcgYW5kIGF1dGhvcml0YXRpdmUiLCJhbmQgYXV0aG9yaXRhdGl2ZSB0ZXJtcyIsImF1dGhvcml0YXRpdmUgdGVybXMgYW5kIiwiZGlzdHJpYnV0aW9uIG9mIGltYWdlbWFnaWNrIiwib2YgaW1hZ2VtYWdpY2sgZm9sbG93IiwiaW1hZ2VtYWdpY2sgZm9sbG93IGNvcHlyaWdodCIsImZvbGxvdyBjb3B5cmlnaHQgMTk5OSIsImNvcHlyaWdodCAxOTk5IDIwMTMiLCIxOTk5IDIwMTMgaW1hZ2VtYWdpY2siLCIyMDEzIGltYWdlbWFnaWNrIHN0dWRpbyIsInN0dWRpbyBsbGMgYSIsImxsYyBhIG5vbiIsImEgbm9uIHByb2ZpdCIsIm5vbiBwcm9maXQgb3JnYW5pemF0aW9uIl19LHsibGljZW5zZVRleHRzIjpbIkltbGliMiBMaWNlbnNlXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGFuZCBpdHMgQ29weXJpZ2h0IG5vdGljZXMuIEluIGFkZGl0aW9uIHB1YmxpY2x5IGRvY3VtZW50ZWQgYWNrbm93bGVkZ21lbnQgbXVzdCBiZSBnaXZlbiB0aGF0IHRoaXMgc29mdHdhcmUgaGFzIGJlZW4gdXNlZCBpZiBubyBzb3VyY2UgY29kZSBvZiB0aGlzIHNvZnR3YXJlIGlzIG1hZGUgYXZhaWxhYmxlIHB1YmxpY2x5LiBNYWtpbmcgdGhlIHNvdXJjZSBhdmFpbGFibGUgcHVibGljbHkgbWVhbnMgaW5jbHVkaW5nIHRoZSBzb3VyY2UgZm9yIHRoaXMgc29mdHdhcmUgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLCBvciBhIG1ldGhvZCB0byBnZXQgdGhpcyBzb2Z0d2FyZSB2aWEgc29tZSByZWFzb25hYmxlIG1lY2hhbmlzbSAoZWxlY3Ryb25pYyB0cmFuc2ZlciB2aWEgYSBuZXR3b3JrIG9yIG1lZGlhKSBhcyB3ZWxsIGFzIG1ha2luZyBhbiBvZmZlciB0byBzdXBwbHkgdGhlIHNvdXJjZSBvbiByZXF1ZXN0LiBUaGlzIENvcHlyaWdodCBub3RpY2Ugc2VydmVzIGFzIGFuIG9mZmVyIHRvIHN1cHBseSB0aGUgc291cmNlIG9uIG9uIHJlcXVlc3QgYXMgd2VsbC4gSW5zdGVhZCBvZiB0aGlzLCBzdXBwbHlpbmcgYWNrbm93bGVkZ21lbnRzIG9mIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGluIGVpdGhlciBDb3B5cmlnaHQgbm90aWNlcywgTWFudWFscywgUHVibGljaXR5IGFuZCBNYXJrZXRpbmcgZG9jdW1lbnRzIG9yIGFueSBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIHdpdGggYW55IHByb2R1Y3QgY29udGFpbmluZyB0aGlzIHNvZnR3YXJlLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gYW55IHNvZnR3YXJlIHRoYXQgbGlua3MgdG8gdGhlIGxpYnJhcmllcyBwcm92aWRlZCBieSB0aGlzIHNvZnR3YXJlIChzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5KSwgYnV0IG9ubHkgdG8gdGhlIHNvZnR3YXJlIHByb3ZpZGVkLlxuXG5QbGVhc2Ugc2VlIHRoZSBDT1BZSU5HLVBMQUlOIGZvciBhIHBsYWluLWVuZ2xpc2ggZXhwbGFuYXRpb24gb2YgdGhpcyBub3RpY2UgYW5kIGl0cyBpbnRlbnQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiJdLCJsaWNlbnNlSWRzIjpbIkltbGliMiJdLCJrZXl3b3JkcyI6WyJpbWxpYjIgbGljZW5zZSBwZXJtaXNzaW9uIiwibGljZW5zZSBwZXJtaXNzaW9uIGlzIiwiYXZhaWxhYmxlIHB1YmxpY2x5IG1ha2luZyIsInB1YmxpY2x5IG1ha2luZyB0aGUiLCJtYWtpbmcgdGhlIHNvdXJjZSIsInRoZSBzb3VyY2UgYXZhaWxhYmxlIiwic291cmNlIGF2YWlsYWJsZSBwdWJsaWNseSIsImF2YWlsYWJsZSBwdWJsaWNseSBtZWFucyIsInB1YmxpY2x5IG1lYW5zIGluY2x1ZGluZyIsIm1lYW5zIGluY2x1ZGluZyB0aGUiLCJzb3VyY2UgZm9yIHRoaXMiLCJkaXN0cmlidXRpb24gb3IgYSIsIm9yIGEgbWV0aG9kIiwibWV0aG9kIHRvIGdldCIsInRvIGdldCB0aGlzIiwiZ2V0IHRoaXMgc29mdHdhcmUiLCJ0aGlzIHNvZnR3YXJlIHZpYSIsInNvZnR3YXJlIHZpYSBzb21lIiwidmlhIHNvbWUgcmVhc29uYWJsZSIsInNvbWUgcmVhc29uYWJsZSBtZWNoYW5pc20iLCJyZWFzb25hYmxlIG1lY2hhbmlzbSBlbGVjdHJvbmljIiwibWVjaGFuaXNtIGVsZWN0cm9uaWMgdHJhbnNmZXIiLCJlbGVjdHJvbmljIHRyYW5zZmVyIHZpYSIsInRyYW5zZmVyIHZpYSBhIiwiYSBuZXR3b3JrIG9yIiwibmV0d29yayBvciBtZWRpYSIsIm9yIG1lZGlhIGFzIiwibWVkaWEgYXMgd2VsbCIsIndlbGwgYXMgbWFraW5nIiwiYXMgbWFraW5nIGFuIiwibWFraW5nIGFuIG9mZmVyIiwic291cmNlIG9uIHJlcXVlc3QiLCJvbiByZXF1ZXN0IHRoaXMiLCJyZXF1ZXN0IHRoaXMgY29weXJpZ2h0IiwiY29weXJpZ2h0IG5vdGljZSBzZXJ2ZXMiLCJub3RpY2Ugc2VydmVzIGFzIiwic2VydmVzIGFzIGFuIiwiYXMgYW4gb2ZmZXIiLCJzb3VyY2Ugb24gb24iLCJvbiBvbiByZXF1ZXN0Iiwib24gcmVxdWVzdCBhcyIsInJlcXVlc3QgYXMgd2VsbCIsImFzIHdlbGwgaW5zdGVhZCIsIndlbGwgaW5zdGVhZCBvZiIsIm9mIHRoaXMgc3VwcGx5aW5nIiwidGhpcyBzdXBwbHlpbmcgYWNrbm93bGVkZ21lbnRzIiwic3VwcGx5aW5nIGFja25vd2xlZGdtZW50cyBvZiIsImFja25vd2xlZGdtZW50cyBvZiB1c2UiLCJzb2Z0d2FyZSBpbiBlaXRoZXIiLCJub3RpY2UgYW5kIGl0cyIsImFuZCBpdHMgaW50ZW50IiwiaXRzIGludGVudCB0aGUiLCJpbWxpYjIgbGljZW5zZSBwZXJtaXNzaW9uIGlzIiwibGljZW5zZSBwZXJtaXNzaW9uIGlzIGhlcmVieSIsIm1hZGUgYXZhaWxhYmxlIHB1YmxpY2x5IG1ha2luZyIsImF2YWlsYWJsZSBwdWJsaWNseSBtYWtpbmcgdGhlIiwicHVibGljbHkgbWFraW5nIHRoZSBzb3VyY2UiLCJtYWtpbmcgdGhlIHNvdXJjZSBhdmFpbGFibGUiLCJ0aGUgc291cmNlIGF2YWlsYWJsZSBwdWJsaWNseSIsInNvdXJjZSBhdmFpbGFibGUgcHVibGljbHkgbWVhbnMiLCJhdmFpbGFibGUgcHVibGljbHkgbWVhbnMgaW5jbHVkaW5nIiwicHVibGljbHkgbWVhbnMgaW5jbHVkaW5nIHRoZSIsIm1lYW5zIGluY2x1ZGluZyB0aGUgc291cmNlIiwiaW5jbHVkaW5nIHRoZSBzb3VyY2UgZm9yIiwidGhlIHNvdXJjZSBmb3IgdGhpcyIsInNvdXJjZSBmb3IgdGhpcyBzb2Z0d2FyZSIsImZvciB0aGlzIHNvZnR3YXJlIHdpdGgiLCJ0aGlzIHNvZnR3YXJlIHdpdGggdGhlIiwic29mdHdhcmUgd2l0aCB0aGUgZGlzdHJpYnV0aW9uIiwid2l0aCB0aGUgZGlzdHJpYnV0aW9uIG9yIiwidGhlIGRpc3RyaWJ1dGlvbiBvciBhIiwiZGlzdHJpYnV0aW9uIG9yIGEgbWV0aG9kIiwib3IgYSBtZXRob2QgdG8iLCJhIG1ldGhvZCB0byBnZXQiLCJtZXRob2QgdG8gZ2V0IHRoaXMiLCJ0byBnZXQgdGhpcyBzb2Z0d2FyZSIsImdldCB0aGlzIHNvZnR3YXJlIHZpYSIsInRoaXMgc29mdHdhcmUgdmlhIHNvbWUiLCJzb2Z0d2FyZSB2aWEgc29tZSByZWFzb25hYmxlIiwidmlhIHNvbWUgcmVhc29uYWJsZSBtZWNoYW5pc20iLCJzb21lIHJlYXNvbmFibGUgbWVjaGFuaXNtIGVsZWN0cm9uaWMiLCJyZWFzb25hYmxlIG1lY2hhbmlzbSBlbGVjdHJvbmljIHRyYW5zZmVyIiwibWVjaGFuaXNtIGVsZWN0cm9uaWMgdHJhbnNmZXIgdmlhIiwiZWxlY3Ryb25pYyB0cmFuc2ZlciB2aWEgYSIsInRyYW5zZmVyIHZpYSBhIG5ldHdvcmsiLCJ2aWEgYSBuZXR3b3JrIG9yIiwiYSBuZXR3b3JrIG9yIG1lZGlhIiwibmV0d29yayBvciBtZWRpYSBhcyIsIm9yIG1lZGlhIGFzIHdlbGwiLCJtZWRpYSBhcyB3ZWxsIGFzIiwiYXMgd2VsbCBhcyBtYWtpbmciLCJ3ZWxsIGFzIG1ha2luZyBhbiIsImFzIG1ha2luZyBhbiBvZmZlciIsIm1ha2luZyBhbiBvZmZlciB0byIsInRoZSBzb3VyY2Ugb24gcmVxdWVzdCIsInNvdXJjZSBvbiByZXF1ZXN0IHRoaXMiLCJvbiByZXF1ZXN0IHRoaXMgY29weXJpZ2h0IiwicmVxdWVzdCB0aGlzIGNvcHlyaWdodCBub3RpY2UiLCJ0aGlzIGNvcHlyaWdodCBub3RpY2Ugc2VydmVzIiwiY29weXJpZ2h0IG5vdGljZSBzZXJ2ZXMgYXMiLCJub3RpY2Ugc2VydmVzIGFzIGFuIiwic2VydmVzIGFzIGFuIG9mZmVyIiwiYXMgYW4gb2ZmZXIgdG8iLCJ0aGUgc291cmNlIG9uIG9uIiwic291cmNlIG9uIG9uIHJlcXVlc3QiLCJvbiBvbiByZXF1ZXN0IGFzIiwib24gcmVxdWVzdCBhcyB3ZWxsIiwicmVxdWVzdCBhcyB3ZWxsIGluc3RlYWQiLCJhcyB3ZWxsIGluc3RlYWQgb2YiLCJ3ZWxsIGluc3RlYWQgb2YgdGhpcyIsImluc3RlYWQgb2YgdGhpcyBzdXBwbHlpbmciLCJvZiB0aGlzIHN1cHBseWluZyBhY2tub3dsZWRnbWVudHMiLCJ0aGlzIHN1cHBseWluZyBhY2tub3dsZWRnbWVudHMgb2YiLCJzdXBwbHlpbmcgYWNrbm93bGVkZ21lbnRzIG9mIHVzZSIsImFja25vd2xlZGdtZW50cyBvZiB1c2Ugb2YiLCJ0aGlzIHNvZnR3YXJlIGluIGVpdGhlciIsInNvZnR3YXJlIGluIGVpdGhlciBjb3B5cmlnaHQiLCJ0aGlzIG5vdGljZSBhbmQgaXRzIiwibm90aWNlIGFuZCBpdHMgaW50ZW50IiwiYW5kIGl0cyBpbnRlbnQgdGhlIiwiaXRzIGludGVudCB0aGUgc29mdHdhcmUiLCJpbWxpYjIgbGljZW5zZSBwZXJtaXNzaW9uIGlzIGhlcmVieSIsImxpY2Vuc2UgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCIsImlzIG1hZGUgYXZhaWxhYmxlIHB1YmxpY2x5IG1ha2luZyIsIm1hZGUgYXZhaWxhYmxlIHB1YmxpY2x5IG1ha2luZyB0aGUiLCJhdmFpbGFibGUgcHVibGljbHkgbWFraW5nIHRoZSBzb3VyY2UiLCJwdWJsaWNseSBtYWtpbmcgdGhlIHNvdXJjZSBhdmFpbGFibGUiLCJtYWtpbmcgdGhlIHNvdXJjZSBhdmFpbGFibGUgcHVibGljbHkiLCJ0aGUgc291cmNlIGF2YWlsYWJsZSBwdWJsaWNseSBtZWFucyIsInNvdXJjZSBhdmFpbGFibGUgcHVibGljbHkgbWVhbnMgaW5jbHVkaW5nIiwiYXZhaWxhYmxlIHB1YmxpY2x5IG1lYW5zIGluY2x1ZGluZyB0aGUiLCJwdWJsaWNseSBtZWFucyBpbmNsdWRpbmcgdGhlIHNvdXJjZSIsIm1lYW5zIGluY2x1ZGluZyB0aGUgc291cmNlIGZvciIsImluY2x1ZGluZyB0aGUgc291cmNlIGZvciB0aGlzIiwidGhlIHNvdXJjZSBmb3IgdGhpcyBzb2Z0d2FyZSIsInNvdXJjZSBmb3IgdGhpcyBzb2Z0d2FyZSB3aXRoIiwiZm9yIHRoaXMgc29mdHdhcmUgd2l0aCB0aGUiLCJ0aGlzIHNvZnR3YXJlIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiIsInNvZnR3YXJlIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiBvciIsIndpdGggdGhlIGRpc3RyaWJ1dGlvbiBvciBhIiwidGhlIGRpc3RyaWJ1dGlvbiBvciBhIG1ldGhvZCIsImRpc3RyaWJ1dGlvbiBvciBhIG1ldGhvZCB0byIsIm9yIGEgbWV0aG9kIHRvIGdldCIsImEgbWV0aG9kIHRvIGdldCB0aGlzIiwibWV0aG9kIHRvIGdldCB0aGlzIHNvZnR3YXJlIiwidG8gZ2V0IHRoaXMgc29mdHdhcmUgdmlhIiwiZ2V0IHRoaXMgc29mdHdhcmUgdmlhIHNvbWUiLCJ0aGlzIHNvZnR3YXJlIHZpYSBzb21lIHJlYXNvbmFibGUiLCJzb2Z0d2FyZSB2aWEgc29tZSByZWFzb25hYmxlIG1lY2hhbmlzbSIsInZpYSBzb21lIHJlYXNvbmFibGUgbWVjaGFuaXNtIGVsZWN0cm9uaWMiLCJzb21lIHJlYXNvbmFibGUgbWVjaGFuaXNtIGVsZWN0cm9uaWMgdHJhbnNmZXIiLCJyZWFzb25hYmxlIG1lY2hhbmlzbSBlbGVjdHJvbmljIHRyYW5zZmVyIHZpYSIsIm1lY2hhbmlzbSBlbGVjdHJvbmljIHRyYW5zZmVyIHZpYSBhIiwiZWxlY3Ryb25pYyB0cmFuc2ZlciB2aWEgYSBuZXR3b3JrIiwidHJhbnNmZXIgdmlhIGEgbmV0d29yayBvciIsInZpYSBhIG5ldHdvcmsgb3IgbWVkaWEiLCJhIG5ldHdvcmsgb3IgbWVkaWEgYXMiLCJuZXR3b3JrIG9yIG1lZGlhIGFzIHdlbGwiLCJvciBtZWRpYSBhcyB3ZWxsIGFzIiwibWVkaWEgYXMgd2VsbCBhcyBtYWtpbmciLCJhcyB3ZWxsIGFzIG1ha2luZyBhbiIsIndlbGwgYXMgbWFraW5nIGFuIG9mZmVyIiwiYXMgbWFraW5nIGFuIG9mZmVyIHRvIiwibWFraW5nIGFuIG9mZmVyIHRvIHN1cHBseSIsInN1cHBseSB0aGUgc291cmNlIG9uIHJlcXVlc3QiLCJ0aGUgc291cmNlIG9uIHJlcXVlc3QgdGhpcyIsInNvdXJjZSBvbiByZXF1ZXN0IHRoaXMgY29weXJpZ2h0Iiwib24gcmVxdWVzdCB0aGlzIGNvcHlyaWdodCBub3RpY2UiLCJyZXF1ZXN0IHRoaXMgY29weXJpZ2h0IG5vdGljZSBzZXJ2ZXMiLCJ0aGlzIGNvcHlyaWdodCBub3RpY2Ugc2VydmVzIGFzIiwiY29weXJpZ2h0IG5vdGljZSBzZXJ2ZXMgYXMgYW4iLCJub3RpY2Ugc2VydmVzIGFzIGFuIG9mZmVyIiwic2VydmVzIGFzIGFuIG9mZmVyIHRvIiwiYXMgYW4gb2ZmZXIgdG8gc3VwcGx5Iiwic3VwcGx5IHRoZSBzb3VyY2Ugb24gb24iLCJ0aGUgc291cmNlIG9uIG9uIHJlcXVlc3QiLCJzb3VyY2Ugb24gb24gcmVxdWVzdCBhcyIsIm9uIG9uIHJlcXVlc3QgYXMgd2VsbCIsIm9uIHJlcXVlc3QgYXMgd2VsbCBpbnN0ZWFkIiwicmVxdWVzdCBhcyB3ZWxsIGluc3RlYWQgb2YiLCJhcyB3ZWxsIGluc3RlYWQgb2YgdGhpcyIsIndlbGwgaW5zdGVhZCBvZiB0aGlzIHN1cHBseWluZyIsImluc3RlYWQgb2YgdGhpcyBzdXBwbHlpbmcgYWNrbm93bGVkZ21lbnRzIiwib2YgdGhpcyBzdXBwbHlpbmcgYWNrbm93bGVkZ21lbnRzIG9mIiwidGhpcyBzdXBwbHlpbmcgYWNrbm93bGVkZ21lbnRzIG9mIHVzZSIsInN1cHBseWluZyBhY2tub3dsZWRnbWVudHMgb2YgdXNlIG9mIiwiYWNrbm93bGVkZ21lbnRzIG9mIHVzZSBvZiB0aGlzIiwib2YgdGhpcyBzb2Z0d2FyZSBpbiBlaXRoZXIiLCJ0aGlzIHNvZnR3YXJlIGluIGVpdGhlciBjb3B5cmlnaHQiLCJzb2Z0d2FyZSBpbiBlaXRoZXIgY29weXJpZ2h0IG5vdGljZXMiLCJvZiB0aGlzIG5vdGljZSBhbmQgaXRzIiwidGhpcyBub3RpY2UgYW5kIGl0cyBpbnRlbnQiLCJub3RpY2UgYW5kIGl0cyBpbnRlbnQgdGhlIiwiYW5kIGl0cyBpbnRlbnQgdGhlIHNvZnR3YXJlIiwiaXRzIGludGVudCB0aGUgc29mdHdhcmUgaXMiXX0seyJsaWNlbnNlVGV4dHMiOlsiSW5mby1aSVAgTGljZW5zZSBDb3B5cmlnaHQgKGMpIDE5OTAtMjAwOSBJbmZvLVpJUC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGNvcHlyaWdodCBhbmQgbGljZW5zZSwgXCJJbmZvLVpJUFwiIGlzIGRlZmluZWQgYXMgdGhlIGZvbGxvd2luZyBzZXQgb2YgaW5kaXZpZHVhbHM6XG5cbk1hcmsgQWRsZXIsIEpvaG4gQnVzaCwgS2FybCBEYXZpcywgSGFyYWxkIERlbmtlciwgSmVhbi1NaWNoZWwgRHVib2lzLCBKZWFuLWxvdXAgR2FpbGx5LCBIdW50ZXIgR29hdGxleSwgRWQgR29yZG9uLCBJYW4gR29ybWFuLCBDaHJpcyBIZXJib3J0aCwgRGlyayBIYWFzZSwgR3JlZyBIYXJ0d2lnLCBSb2JlcnQgSGVhdGgsIEpvbmF0aGFuIEh1ZHNvbiwgUGF1bCBLaWVuaXR6LCBEYXZpZCBLaXJzY2hiYXVtLCBKb2hubnkgTGVlLCBPbm5vIHZhbiBkZXIgTGluZGVuLCBJZ29yIE1hbmRyaWNoZW5rbywgU3RldmUgUC4gTWlsbGVyLCBTZXJnaW8gTW9uZXNpLCBLZWl0aCBPd2VucywgR2VvcmdlIFBldHJvdiwgR3JlZyBSb2Vsb2ZzLCBLYWkgVXdlIFJvbW1lbCwgU3RldmUgU2FsaXNidXJ5LCBEYXZlIFNtaXRoLCBTdGV2ZW4gTS4gU2Nod2VkYSwgQ2hyaXN0aWFuIFNwaWVsZXIsIENvc21pbiBUcnV0YSwgQW50b2luZSBWZXJoZWlqZW4sIFBhdWwgdm9uIEJlaHJlbiwgUmljaCBXYWxlcywgTWlrZSBXaGl0ZS5cblxuVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBcImFzIGlzLFwiIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gSW4gbm8gZXZlbnQgc2hhbGwgSW5mby1aSVAgb3IgaXRzIGNvbnRyaWJ1dG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIGluY2lkZW50YWwsIHNwZWNpYWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIHRoZSB1c2Ugb2Ygb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGlzIHNvZnR3YXJlLlxuXG5QZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdCBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGFib3ZlIGRpc2NsYWltZXIgYW5kIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSAoaW4gd2hvbGUgb3IgaW4gcGFydCkgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIGRlZmluaXRpb24sIGRpc2NsYWltZXIsIGFuZCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucy5cblxuICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gKGNvbXBpbGVkIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMpIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCBkZWZpbml0aW9uLCBkaXNjbGFpbWVyLCBhbmQgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgaW4gZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gQWRkaXRpb25hbCBkb2N1bWVudGF0aW9uIGlzIG5vdCBuZWVkZWQgZm9yIGV4ZWN1dGFibGVzIHdoZXJlIGEgY29tbWFuZCBsaW5lIGxpY2Vuc2Ugb3B0aW9uIHByb3ZpZGVzIHRoZXNlIGFuZCBhIG5vdGUgcmVnYXJkaW5nIHRoaXMgb3B0aW9uIGlzIGluIHRoZSBleGVjdXRhYmxlJ3Mgc3RhcnR1cCBiYW5uZXIuIFRoZSBzb2xlIGV4Y2VwdGlvbiB0byB0aGlzIGNvbmRpdGlvbiBpcyByZWRpc3RyaWJ1dGlvbiBvZiBhIHN0YW5kYXJkIFVuWmlwU0ZYIGJpbmFyeSAoaW5jbHVkaW5nIFNGWFdpeikgYXMgcGFydCBvZiBhIHNlbGYtZXh0cmFjdGluZyBhcmNoaXZlOyB0aGF0IGlzIHBlcm1pdHRlZCB3aXRob3V0IGluY2x1c2lvbiBvZiB0aGlzIGxpY2Vuc2UsIGFzIGxvbmcgYXMgdGhlIG5vcm1hbCBTRlggYmFubmVyIGhhcyBub3QgYmVlbiByZW1vdmVkIGZyb20gdGhlIGJpbmFyeSBvciBkaXNhYmxlZC5cblxuICAgKiBBbHRlcmVkIHZlcnNpb25zLS1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgcG9ydHMgdG8gbmV3IG9wZXJhdGluZyBzeXN0ZW1zLCBleGlzdGluZyBwb3J0cyB3aXRoIG5ldyBncmFwaGljYWwgaW50ZXJmYWNlcywgdmVyc2lvbnMgd2l0aCBtb2RpZmllZCBvciBhZGRlZCBmdW5jdGlvbmFsaXR5LCBhbmQgZHluYW1pYywgc2hhcmVkLCBvciBzdGF0aWMgbGlicmFyeSB2ZXJzaW9ucyBub3QgZnJvbSBJbmZvLVpJUC0tbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoIGFuZCBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc291cmNlIG9yLCBpZiBiaW5hcmllcywgY29tcGlsZWQgZnJvbSB0aGUgb3JpZ2luYWwgc291cmNlLiBTdWNoIGFsdGVyZWQgdmVyc2lvbnMgYWxzbyBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyBJbmZvLVpJUCByZWxlYXNlcy0taW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGxhYmVsaW5nIG9mIHRoZSBhbHRlcmVkIHZlcnNpb25zIHdpdGggdGhlIG5hbWVzIFwiSW5mby1aSVBcIiAob3IgYW55IHZhcmlhdGlvbiB0aGVyZW9mLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgZGlmZmVyZW50IGNhcGl0YWxpemF0aW9ucyksIFwiUG9ja2V0IFVuWmlwLFwiIFwiV2laXCIgb3IgXCJNYWNaaXBcIiB3aXRob3V0IHRoZSBleHBsaWNpdCBwZXJtaXNzaW9uIG9mIEluZm8tWklQLiBTdWNoIGFsdGVyZWQgdmVyc2lvbnMgYXJlIGZ1cnRoZXIgcHJvaGliaXRlZCBmcm9tIG1pc3JlcHJlc2VudGF0aXZlIHVzZSBvZiB0aGUgWmlwLUJ1Z3Mgb3IgSW5mby1aSVAgZS1tYWlsIGFkZHJlc3NlcyBvciB0aGUgSW5mby1aSVAgVVJMKHMpLCBzdWNoIGFzIHRvIGltcGx5IEluZm8tWklQIHdpbGwgcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgYWx0ZXJlZCB2ZXJzaW9ucy5cblxuICAgKiBJbmZvLVpJUCByZXRhaW5zIHRoZSByaWdodCB0byB1c2UgdGhlIG5hbWVzIFwiSW5mby1aSVAsXCIgXCJaaXAsXCIgXCJVblppcCxcIiBcIlVuWmlwU0ZYLFwiIFwiV2laLFwiIFwiUG9ja2V0IFVuWmlwLFwiIFwiUG9ja2V0IFppcCxcIiBhbmQgXCJNYWNaaXBcIiBmb3IgaXRzIG93biBzb3VyY2UgYW5kIGJpbmFyeSByZWxlYXNlcy4iXSwibGljZW5zZUlkcyI6WyJJbmZvLVpJUCJdLCJrZXl3b3JkcyI6WyJpbmZvIHppcCBsaWNlbnNlIiwiemlwIGxpY2Vuc2UgY29weXJpZ2h0IiwiYyAxOTkwIDIwMDkiLCIxOTkwIDIwMDkgaW5mbyIsIjIwMDkgaW5mbyB6aXAiLCJpbmZvIHppcCBhbGwiLCJ6aXAgYWxsIHJpZ2h0cyIsInJlc2VydmVkIGZvciB0aGUiLCJhbmQgbGljZW5zZSBpbmZvIiwibGljZW5zZSBpbmZvIHppcCIsImluZm8gemlwIGlzIiwiemlwIGlzIGRlZmluZWQiLCJvZiBpbmRpdmlkdWFscyBtYXJrIiwiaW5kaXZpZHVhbHMgbWFyayBhZGxlciIsIm1hcmsgYWRsZXIgam9obiIsImFkbGVyIGpvaG4gYnVzaCIsImpvaG4gYnVzaCBrYXJsIiwiYnVzaCBrYXJsIGRhdmlzIiwia2FybCBkYXZpcyBoYXJhbGQiLCJkYXZpcyBoYXJhbGQgZGVua2VyIiwiaGFyYWxkIGRlbmtlciBqZWFuIiwiZGVua2VyIGplYW4gbWljaGVsIiwiamVhbiBtaWNoZWwgZHVib2lzIiwibWljaGVsIGR1Ym9pcyBqZWFuIiwiZHVib2lzIGplYW4gbG91cCIsImplYW4gbG91cCBnYWlsbHkiLCJsb3VwIGdhaWxseSBodW50ZXIiLCJnYWlsbHkgaHVudGVyIGdvYXRsZXkiLCJodW50ZXIgZ29hdGxleSBlZCIsImdvYXRsZXkgZWQgZ29yZG9uIiwiZWQgZ29yZG9uIGlhbiIsImdvcmRvbiBpYW4gZ29ybWFuIiwiaWFuIGdvcm1hbiBjaHJpcyIsImdvcm1hbiBjaHJpcyBoZXJib3J0aCIsImNocmlzIGhlcmJvcnRoIGRpcmsiLCJoZXJib3J0aCBkaXJrIGhhYXNlIiwiZGlyayBoYWFzZSBncmVnIiwiaGFhc2UgZ3JlZyBoYXJ0d2lnIiwiZ3JlZyBoYXJ0d2lnIHJvYmVydCIsImhhcnR3aWcgcm9iZXJ0IGhlYXRoIiwicm9iZXJ0IGhlYXRoIGpvbmF0aGFuIiwiaGVhdGggam9uYXRoYW4gaHVkc29uIiwiam9uYXRoYW4gaHVkc29uIHBhdWwiLCJodWRzb24gcGF1bCBraWVuaXR6IiwicGF1bCBraWVuaXR6IGRhdmlkIiwia2llbml0eiBkYXZpZCBraXJzY2hiYXVtIiwiZGF2aWQga2lyc2NoYmF1bSBqb2hubnkiLCJraXJzY2hiYXVtIGpvaG5ueSBsZWUiLCJqb2hubnkgbGVlIG9ubm8iLCJsZWUgb25ubyB2YW4iLCJvbm5vIHZhbiBkZXIiLCJ2YW4gZGVyIGxpbmRlbiIsImRlciBsaW5kZW4gaWdvciIsImxpbmRlbiBpZ29yIG1hbmRyaWNoZW5rbyIsImlnb3IgbWFuZHJpY2hlbmtvIHN0ZXZlIiwibWFuZHJpY2hlbmtvIHN0ZXZlIHAiLCJzdGV2ZSBwIG1pbGxlciIsInAgbWlsbGVyIHNlcmdpbyIsIm1pbGxlciBzZXJnaW8gbW9uZXNpIiwic2VyZ2lvIG1vbmVzaSBrZWl0aCIsIm1vbmVzaSBrZWl0aCBvd2VucyIsImtlaXRoIG93ZW5zIGdlb3JnZSIsIm93ZW5zIGdlb3JnZSBwZXRyb3YiLCJnZW9yZ2UgcGV0cm92IGdyZWciLCJwZXRyb3YgZ3JlZyByb2Vsb2ZzIiwiZ3JlZyByb2Vsb2ZzIGthaSIsInJvZWxvZnMga2FpIHV3ZSIsImthaSB1d2Ugcm9tbWVsIiwidXdlIHJvbW1lbCBzdGV2ZSIsInJvbW1lbCBzdGV2ZSBzYWxpc2J1cnkiLCJzdGV2ZSBzYWxpc2J1cnkgZGF2ZSIsInNhbGlzYnVyeSBkYXZlIHNtaXRoIiwiZGF2ZSBzbWl0aCBzdGV2ZW4iLCJzbWl0aCBzdGV2ZW4gbSIsInN0ZXZlbiBtIHNjaHdlZGEiLCJtIHNjaHdlZGEgY2hyaXN0aWFuIiwic2Nod2VkYSBjaHJpc3RpYW4gc3BpZWxlciIsImNocmlzdGlhbiBzcGllbGVyIGNvc21pbiIsInNwaWVsZXIgY29zbWluIHRydXRhIiwiY29zbWluIHRydXRhIGFudG9pbmUiLCJ0cnV0YSBhbnRvaW5lIHZlcmhlaWplbiIsImFudG9pbmUgdmVyaGVpamVuIHBhdWwiLCJ2ZXJoZWlqZW4gcGF1bCB2b24iLCJwYXVsIHZvbiBiZWhyZW4iLCJ2b24gYmVocmVuIHJpY2giLCJiZWhyZW4gcmljaCB3YWxlcyIsInJpY2ggd2FsZXMgbWlrZSIsIndhbGVzIG1pa2Ugd2hpdGUiLCJtaWtlIHdoaXRlIHRoaXMiLCJ3aGl0ZSB0aGlzIHNvZnR3YXJlIiwiZXZlbnQgc2hhbGwgaW5mbyIsInNoYWxsIGluZm8gemlwIiwiemlwIG9yIGl0cyIsImNvbnRyaWJ1dG9ycyBiZSBoZWxkIiwiYWJvdmUgZGlzY2xhaW1lciBhbmQiLCJkaXNjbGFpbWVyIGFuZCB0aGUiLCJmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIHJlZGlzdHJpYnV0aW9ucyIsInJlc3RyaWN0aW9ucyByZWRpc3RyaWJ1dGlvbnMgb2YiLCJpbiBwYXJ0IG11c3QiLCJwYXJ0IG11c3QgcmV0YWluIiwib2YgY29uZGl0aW9ucyByZWRpc3RyaWJ1dGlvbnMiLCJjb25kaXRpb25zIHJlZGlzdHJpYnV0aW9ucyBpbiIsImJpbmFyeSBmb3JtIGNvbXBpbGVkIiwiZm9ybSBjb21waWxlZCBleGVjdXRhYmxlcyIsImNvbXBpbGVkIGV4ZWN1dGFibGVzIGFuZCIsImV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMiLCJhbmQgbGlicmFyaWVzIG11c3QiLCJsaWJyYXJpZXMgbXVzdCByZXByb2R1Y2UiLCJjb25kaXRpb25zIGluIGRvY3VtZW50YXRpb24iLCJpbiBkb2N1bWVudGF0aW9uIGFuZCIsInRoZSBkaXN0cmlidXRpb24gYWRkaXRpb25hbCIsImRpc3RyaWJ1dGlvbiBhZGRpdGlvbmFsIGRvY3VtZW50YXRpb24iLCJhZGRpdGlvbmFsIGRvY3VtZW50YXRpb24gaXMiLCJub3QgbmVlZGVkIGZvciIsIm5lZWRlZCBmb3IgZXhlY3V0YWJsZXMiLCJmb3IgZXhlY3V0YWJsZXMgd2hlcmUiLCJleGVjdXRhYmxlcyB3aGVyZSBhIiwid2hlcmUgYSBjb21tYW5kIiwiYSBjb21tYW5kIGxpbmUiLCJjb21tYW5kIGxpbmUgbGljZW5zZSIsImxpbmUgbGljZW5zZSBvcHRpb24iLCJsaWNlbnNlIG9wdGlvbiBwcm92aWRlcyIsIm9wdGlvbiBwcm92aWRlcyB0aGVzZSIsInByb3ZpZGVzIHRoZXNlIGFuZCIsInRoZXNlIGFuZCBhIiwiYW5kIGEgbm90ZSIsImEgbm90ZSByZWdhcmRpbmciLCJub3RlIHJlZ2FyZGluZyB0aGlzIiwicmVnYXJkaW5nIHRoaXMgb3B0aW9uIiwib3B0aW9uIGlzIGluIiwidGhlIGV4ZWN1dGFibGUgcyIsImV4ZWN1dGFibGUgcyBzdGFydHVwIiwicyBzdGFydHVwIGJhbm5lciIsInN0YXJ0dXAgYmFubmVyIHRoZSIsImJhbm5lciB0aGUgc29sZSIsInRoZSBzb2xlIGV4Y2VwdGlvbiIsInNvbGUgZXhjZXB0aW9uIHRvIiwiZXhjZXB0aW9uIHRvIHRoaXMiLCJ0byB0aGlzIGNvbmRpdGlvbiIsImNvbmRpdGlvbiBpcyByZWRpc3RyaWJ1dGlvbiIsImlzIHJlZGlzdHJpYnV0aW9uIG9mIiwicmVkaXN0cmlidXRpb24gb2YgYSIsImEgc3RhbmRhcmQgdW56aXBzZngiLCJzdGFuZGFyZCB1bnppcHNmeCBiaW5hcnkiLCJ1bnppcHNmeCBiaW5hcnkgaW5jbHVkaW5nIiwiYmluYXJ5IGluY2x1ZGluZyBzZnh3aXoiLCJpbmNsdWRpbmcgc2Z4d2l6IGFzIiwic2Z4d2l6IGFzIHBhcnQiLCJvZiBhIHNlbGYiLCJhIHNlbGYgZXh0cmFjdGluZyIsInNlbGYgZXh0cmFjdGluZyBhcmNoaXZlIiwiZXh0cmFjdGluZyBhcmNoaXZlIHRoYXQiLCJhcmNoaXZlIHRoYXQgaXMiLCJ0aGF0IGlzIHBlcm1pdHRlZCIsImlzIHBlcm1pdHRlZCB3aXRob3V0IiwicGVybWl0dGVkIHdpdGhvdXQgaW5jbHVzaW9uIiwid2l0aG91dCBpbmNsdXNpb24gb2YiLCJsaWNlbnNlIGFzIGxvbmciLCJhcyB0aGUgbm9ybWFsIiwidGhlIG5vcm1hbCBzZngiLCJub3JtYWwgc2Z4IGJhbm5lciIsInNmeCBiYW5uZXIgaGFzIiwiYmFubmVyIGhhcyBub3QiLCJub3QgYmVlbiByZW1vdmVkIiwiZnJvbSB0aGUgYmluYXJ5IiwidGhlIGJpbmFyeSBvciIsImJpbmFyeSBvciBkaXNhYmxlZCIsIm9yIGRpc2FibGVkIGFsdGVyZWQiLCJkaXNhYmxlZCBhbHRlcmVkIHZlcnNpb25zIiwiYWx0ZXJlZCB2ZXJzaW9ucyBpbmNsdWRpbmciLCJ2ZXJzaW9ucyBpbmNsdWRpbmcgYnV0IiwibGltaXRlZCB0byBwb3J0cyIsInRvIHBvcnRzIHRvIiwicG9ydHMgdG8gbmV3IiwidG8gbmV3IG9wZXJhdGluZyIsIm5ldyBvcGVyYXRpbmcgc3lzdGVtcyIsIm9wZXJhdGluZyBzeXN0ZW1zIGV4aXN0aW5nIiwic3lzdGVtcyBleGlzdGluZyBwb3J0cyIsImV4aXN0aW5nIHBvcnRzIHdpdGgiLCJwb3J0cyB3aXRoIG5ldyIsIndpdGggbmV3IGdyYXBoaWNhbCIsIm5ldyBncmFwaGljYWwgaW50ZXJmYWNlcyIsImdyYXBoaWNhbCBpbnRlcmZhY2VzIHZlcnNpb25zIiwiaW50ZXJmYWNlcyB2ZXJzaW9ucyB3aXRoIiwidmVyc2lvbnMgd2l0aCBtb2RpZmllZCIsIndpdGggbW9kaWZpZWQgb3IiLCJtb2RpZmllZCBvciBhZGRlZCIsIm9yIGFkZGVkIGZ1bmN0aW9uYWxpdHkiLCJhZGRlZCBmdW5jdGlvbmFsaXR5IGFuZCIsImZ1bmN0aW9uYWxpdHkgYW5kIGR5bmFtaWMiLCJhbmQgZHluYW1pYyBzaGFyZWQiLCJkeW5hbWljIHNoYXJlZCBvciIsInNoYXJlZCBvciBzdGF0aWMiLCJvciBzdGF0aWMgbGlicmFyeSIsInN0YXRpYyBsaWJyYXJ5IHZlcnNpb25zIiwibGlicmFyeSB2ZXJzaW9ucyBub3QiLCJ2ZXJzaW9ucyBub3QgZnJvbSIsIm5vdCBmcm9tIGluZm8iLCJmcm9tIGluZm8gemlwIiwiaW5mbyB6aXAgbXVzdCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJBQ1BJIC0gU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnRcblxuU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQgSU1QT1JUQU5UIC0gUkVBRCBCRUZPUkUgQ09QWUlORywgSU5TVEFMTElORyBPUiBVU0lORy5cblxuRG8gbm90IHVzZSBvciBsb2FkIHRoaXMgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5LCB0aGUgXCJTb2Z0d2FyZVwiKSB1bnRpbCB5b3UgaGF2ZSBjYXJlZnVsbHkgcmVhZCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLiBCeSBsb2FkaW5nIG9yIHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gSWYgeW91IGRvIG5vdCB3aXNoIHRvIHNvIGFncmVlLCBkbyBub3QgaW5zdGFsbCBvciB1c2UgdGhlIFNvZnR3YXJlLlxuXG4gICAxLiBDT1BZUklHSFQgTk9USUNFIFNvbWUgb3IgYWxsIG9mIHRoaXMgd29yayAtIENvcHlyaWdodCDCqSAxOTk5LTIwMDUsIEludGVsIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbiAgIDIuIExJQ0VOU0VcblxuICAgICAgMi4xLiBUaGlzIGlzIHlvdXIgbGljZW5zZSBmcm9tIEludGVsIENvcnAuIHVuZGVyIGl0cyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLiBZb3UgbWF5IGhhdmUgYWRkaXRpb25hbCBsaWNlbnNlIHRlcm1zIGZyb20gdGhlIHBhcnR5IHRoYXQgcHJvdmlkZWQgeW91IHRoaXMgc29mdHdhcmUsIGNvdmVyaW5nIHlvdXIgcmlnaHQgdG8gdXNlIHRoYXQgcGFydHkncyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLlxuXG4gICAgICAyLjIuIEludGVsIGdyYW50cywgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gKFwiTGljZW5zZWVcIikgb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc291cmNlIGNvZGUgYXBwZWFyaW5nIGluIHRoaXMgZmlsZSAoXCJDb3ZlcmVkIENvZGVcIikgYW4gaXJyZXZvY2FibGUsIHBlcnBldHVhbCwgd29ybGR3aWRlIGxpY2Vuc2UgdW5kZXIgSW50ZWwncyBjb3B5cmlnaHRzIGluIHRoZSBiYXNlIGNvZGUgZGlzdHJpYnV0ZWQgb3JpZ2luYWxseSBieSBJbnRlbCAoXCJPcmlnaW5hbCBJbnRlbCBDb2RlXCIpIHRvIGNvcHksIG1ha2UgZGVyaXZhdGl2ZXMsIGRpc3RyaWJ1dGUsIHVzZSBhbmQgZGlzcGxheSBhbnkgcG9ydGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtLCB3aXRoIHRoZSByaWdodCB0byBzdWJsaWNlbnNlIHN1Y2ggcmlnaHRzOyBhbmRcblxuICAgICAgMi4zLiBJbnRlbCBncmFudHMgTGljZW5zZWUgYSBub24tZXhjbHVzaXZlIGFuZCBub24tdHJhbnNmZXJhYmxlIHBhdGVudCBsaWNlbnNlICh3aXRoIHRoZSByaWdodCB0byBzdWJsaWNlbnNlKSwgdW5kZXIgb25seSB0aG9zZSBjbGFpbXMgb2YgSW50ZWwgcGF0ZW50cyB0aGF0IGFyZSBpbmZyaW5nZWQgYnkgdGhlIE9yaWdpbmFsIEludGVsIENvZGUsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgYW5kIGltcG9ydCB0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXJpdmF0aXZlIHdvcmtzIHRoZXJlb2Ygc29sZWx5IHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIGFib3ZlIGNvcHlyaWdodCBsaWNlbnNlLCBhbmQgaW4gbm8gZXZlbnQgc2hhbGwgdGhlIHBhdGVudCBsaWNlbnNlIGV4dGVuZCB0byBhbnkgYWRkaXRpb25zIHRvIG9yIG1vZGlmaWNhdGlvbnMgb2YgdGhlIE9yaWdpbmFsIEludGVsIENvZGUuIE5vIG90aGVyIGxpY2Vuc2Ugb3IgcmlnaHQgaXMgZ3JhbnRlZCBkaXJlY3RseSBvciBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlOyBUaGUgYWJvdmUgY29weXJpZ2h0IGFuZCBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIG9ubHkgaWYgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDMuIENPTkRJVElPTlNcblxuICAgICAgMy4xLiBSZWRpc3RyaWJ1dGlvbiBvZiBTb3VyY2Ugd2l0aCBSaWdodHMgdG8gRnVydGhlciBEaXN0cmlidXRlIFNvdXJjZS4gUmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUgb2YgYW55IHN1YnN0YW50aWFsIHBvcnRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBvciBtb2RpZmljYXRpb24gd2l0aCByaWdodHMgdG8gZnVydGhlciBkaXN0cmlidXRlIHNvdXJjZSBtdXN0IGluY2x1ZGUgdGhlIGFib3ZlIENvcHlyaWdodCBOb3RpY2UsIHRoZSBhYm92ZSBMaWNlbnNlLCB0aGlzIGxpc3Qgb2YgQ29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhbmQgRXhwb3J0IENvbXBsaWFuY2UgcHJvdmlzaW9uLiBJbiBhZGRpdGlvbiwgTGljZW5zZWUgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIExpY2Vuc2VlIGNvbnRyaWJ1dGVzIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIExpY2Vuc2VlIG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBMaWNlbnNlZSBtdXN0IGluY2x1ZGUgaW4gdGhhdCBmaWxlIHRoZSBkb2N1bWVudGF0aW9uIG9mIGFueSBjaGFuZ2VzIG1hZGUgYnkgYW55IHByZWRlY2Vzc29yIExpY2Vuc2VlLiBMaWNlbnNlZSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIG1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIEludGVsIENvZGUuXG5cbiAgICAgIDMuMi4gUmVkaXN0cmlidXRpb24gb2YgU291cmNlIHdpdGggbm8gUmlnaHRzIHRvIEZ1cnRoZXIgRGlzdHJpYnV0ZSBTb3VyY2UuIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG9mIGFueSBzdWJzdGFudGlhbCBwb3J0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgb3IgbW9kaWZpY2F0aW9uIHdpdGhvdXQgcmlnaHRzIHRvIGZ1cnRoZXIgZGlzdHJpYnV0ZSBzb3VyY2UgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhbmQgRXhwb3J0IENvbXBsaWFuY2UgcHJvdmlzaW9uIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCBkaXN0cmlidXRpb24uIEluIGFkZGl0aW9uLCBMaWNlbnNlZSBtYXkgbm90IGF1dGhvcml6ZSBmdXJ0aGVyIHN1YmxpY2Vuc2Ugb2Ygc291cmNlIG9mIGFueSBwb3J0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUsIGFuZCBtdXN0IGluY2x1ZGUgdGVybXMgdG8gdGhlIGVmZmVjdCB0aGF0IHRoZSBsaWNlbnNlIGZyb20gTGljZW5zZWUgdG8gaXRzIGxpY2Vuc2VlIGlzIGxpbWl0ZWQgdG8gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBlbWJvZGllZCBpbiB0aGUgc29mdHdhcmUgTGljZW5zZWUgcHJvdmlkZXMgdG8gaXRzIGxpY2Vuc2VlLCBhbmQgbm90IHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBlbWJvZGllZCBpbiBtb2RpZmljYXRpb25zIGl0cyBsaWNlbnNlZSBtYXkgbWFrZS5cblxuICAgICAgMy4zLiBSZWRpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlLiBSZWRpc3RyaWJ1dGlvbiBpbiBleGVjdXRhYmxlIGZvcm0gb2YgYW55IHN1YnN0YW50aWFsIHBvcnRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBvciBtb2RpZmljYXRpb24gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIENvcHlyaWdodCBOb3RpY2UsIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYW5kIEV4cG9ydCBDb21wbGlhbmNlIHByb3Zpc2lvbiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgICAgMy40LiBJbnRlbCByZXRhaW5zIGFsbCByaWdodCwgdGl0bGUsIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIEludGVsIENvZGUuXG5cbiAgICAgIDMuNS4gTmVpdGhlciB0aGUgbmFtZSBJbnRlbCBub3IgYW55IG90aGVyIHRyYWRlbWFyayBvd25lZCBvciBjb250cm9sbGVkIGJ5IEludGVsIHNoYWxsIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiBwcm9kdWN0cyBkZXJpdmVkIGZyb20gb3IgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIEludGVsLlxuXG4gICA0LiBESVNDTEFJTUVSIEFORCBFWFBPUlQgQ09NUExJQU5DRVxuXG4gICAgICA0LjEuIElOVEVMIE1BS0VTIE5PIFdBUlJBTlRZIE9GIEFOWSBLSU5EIFJFR0FSRElORyBBTlkgU09GVFdBUkUgUFJPVklERUQgSEVSRS4gQU5ZIFNPRlRXQVJFIE9SSUdJTkFUSU5HIEZST00gSU5URUwgT1IgREVSSVZFRCBGUk9NIElOVEVMIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVMsXCIgQU5EIElOVEVMIFdJTEwgTk9UIFBST1ZJREUgQU5ZIFNVUFBPUlQsIEFTU0lTVEFOQ0UsIElOU1RBTExBVElPTiwgVFJBSU5JTkcgT1IgT1RIRVIgU0VSVklDRVMuIElOVEVMIFdJTEwgTk9UIFBST1ZJREUgQU5ZIFVQREFURVMsIEVOSEFOQ0VNRU5UUyBPUiBFWFRFTlNJT05TLiBJTlRFTCBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBOT05JTkZSSU5HRU1FTlQgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuXG4gICAgICA0LjIuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVMIEhBVkUgQU5ZIExJQUJJTElUWSBUTyBMSUNFTlNFRSwgSVRTIExJQ0VOU0VFUyBPUiBBTlkgT1RIRVIgVEhJUkQgUEFSVFksIEZPUiBBTlkgTE9TVCBQUk9GSVRTLCBMT1NUIERBVEEsIExPU1MgT0YgVVNFIE9SIENPU1RTIE9GIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsIE9SIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgQUdSRUVNRU5ULCBVTkRFUiBBTlkgQ0FVU0UgT0YgQUNUSU9OIE9SIFRIRU9SWSBPRiBMSUFCSUxJVFksIEFORCBJUlJFU1BFQ1RJVkUgT0YgV0hFVEhFUiBJTlRFTCBIQVMgQURWQU5DRSBOT1RJQ0UgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhFU0UgTElNSVRBVElPTlMgU0hBTEwgQVBQTFkgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GIFRIRSBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgTElNSVRFRCBSRU1FRFkuXG5cbiAgICAgIDQuMy4gTGljZW5zZWUgc2hhbGwgbm90IGV4cG9ydCwgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGFueSBvZiB0aGlzIHNvZnR3YXJlIG9yIHN5c3RlbSBpbmNvcnBvcmF0aW5nIHN1Y2ggc29mdHdhcmUgd2l0aG91dCBmaXJzdCBvYnRhaW5pbmcgYW55IHJlcXVpcmVkIGxpY2Vuc2Ugb3Igb3RoZXIgYXBwcm92YWwgZnJvbSB0aGUgVS4gUy4gRGVwYXJ0bWVudCBvZiBDb21tZXJjZSBvciBhbnkgb3RoZXIgYWdlbmN5IG9yIGRlcGFydG1lbnQgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudC4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIGV4cG9ydHMgYW55IHN1Y2ggc29mdHdhcmUgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBvciByZS1leHBvcnRzIGFueSBzdWNoIHNvZnR3YXJlIGZyb20gYSBmb3JlaWduIGRlc3RpbmF0aW9uLCBMaWNlbnNlZSBzaGFsbCBlbnN1cmUgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGFuZCBleHBvcnQvcmUtZXhwb3J0IG9mIHRoZSBzb2Z0d2FyZSBpcyBpbiBjb21wbGlhbmNlIHdpdGggYWxsIGxhd3MsIHJlZ3VsYXRpb25zLCBvcmRlcnMsIG9yIG90aGVyIHJlc3RyaWN0aW9ucyBvZiB0aGUgVS5TLiBFeHBvcnQgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlvbnMuIExpY2Vuc2VlIGFncmVlcyB0aGF0IG5laXRoZXIgaXQgbm9yIGFueSBvZiBpdHMgc3Vic2lkaWFyaWVzIHdpbGwgZXhwb3J0L3JlLWV4cG9ydCBhbnkgdGVjaG5pY2FsIGRhdGEsIHByb2Nlc3MsIHNvZnR3YXJlLCBvciBzZXJ2aWNlLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0byBhbnkgY291bnRyeSBmb3Igd2hpY2ggdGhlIFVuaXRlZCBTdGF0ZXMgZ292ZXJubWVudCBvciBhbnkgYWdlbmN5IHRoZXJlb2YgcmVxdWlyZXMgYW4gZXhwb3J0IGxpY2Vuc2UsIG90aGVyIGdvdmVybm1lbnRhbCBhcHByb3ZhbCwgb3IgbGV0dGVyIG9mIGFzc3VyYW5jZSwgd2l0aG91dCBmaXJzdCBvYnRhaW5pbmcgc3VjaCBsaWNlbnNlLCBhcHByb3ZhbCBvciBsZXR0ZXIuIl0sImxpY2Vuc2VJZHMiOlsiSW50ZWwtQUNQSSJdLCJrZXl3b3JkcyI6WyJhY3BpIHNvZnR3YXJlIGxpY2Vuc2UiLCJsaWNlbnNlIGFncmVlbWVudCBzb2Z0d2FyZSIsImFncmVlbWVudCBzb2Z0d2FyZSBsaWNlbnNlIiwiYWdyZWVtZW50IGltcG9ydGFudCByZWFkIiwiaW1wb3J0YW50IHJlYWQgYmVmb3JlIiwicmVhZCBiZWZvcmUgY29weWluZyIsImJlZm9yZSBjb3B5aW5nIGluc3RhbGxpbmciLCJpbnN0YWxsaW5nIG9yIHVzaW5nIiwib3IgdXNpbmcgZG8iLCJ1c2luZyBkbyBub3QiLCJ1c2Ugb3IgbG9hZCIsIm9yIGxvYWQgdGhpcyIsImxvYWQgdGhpcyBzb2Z0d2FyZSIsImFueSBhc3NvY2lhdGVkIG1hdGVyaWFscyIsImFzc29jaWF0ZWQgbWF0ZXJpYWxzIGNvbGxlY3RpdmVseSIsIm1hdGVyaWFscyBjb2xsZWN0aXZlbHkgdGhlIiwidGhlIHNvZnR3YXJlIHVudGlsIiwic29mdHdhcmUgdW50aWwgeW91IiwidW50aWwgeW91IGhhdmUiLCJ5b3UgaGF2ZSBjYXJlZnVsbHkiLCJoYXZlIGNhcmVmdWxseSByZWFkIiwiY29uZGl0aW9ucyBieSBsb2FkaW5nIiwiYnkgbG9hZGluZyBvciIsImxvYWRpbmcgb3IgdXNpbmciLCJzb2Z0d2FyZSB5b3UgYWdyZWUiLCJ3aXNoIHRvIHNvIiwidG8gc28gYWdyZWUiLCJzbyBhZ3JlZSBkbyIsImRvIG5vdCBpbnN0YWxsIiwibm90IGluc3RhbGwgb3IiLCJpbnN0YWxsIG9yIHVzZSIsInNvZnR3YXJlIDEgY29weXJpZ2h0IiwiMSBjb3B5cmlnaHQgbm90aWNlIiwiY29weXJpZ2h0IG5vdGljZSBzb21lIiwibm90aWNlIHNvbWUgb3IiLCJhbGwgb2YgdGhpcyIsInRoaXMgd29yayBjb3B5cmlnaHQiLCJ3b3JrIGNvcHlyaWdodCAxOTk5IiwiY29weXJpZ2h0IDE5OTkgMjAwNSIsIjE5OTkgMjAwNSBpbnRlbCIsIjIwMDUgaW50ZWwgY29ycCIsImludGVsIGNvcnAgYWxsIiwiY29ycCBhbGwgcmlnaHRzIiwicmVzZXJ2ZWQgMiBsaWNlbnNlIiwiMSB0aGlzIGlzIiwidGhpcyBpcyB5b3VyIiwiaXMgeW91ciBsaWNlbnNlIiwibGljZW5zZSBmcm9tIGludGVsIiwiZnJvbSBpbnRlbCBjb3JwIiwiaW50ZWwgY29ycCB1bmRlciIsImNvcnAgdW5kZXIgaXRzIiwidW5kZXIgaXRzIGludGVsbGVjdHVhbCIsInJpZ2h0cyB5b3UgbWF5IiwiaGF2ZSBhZGRpdGlvbmFsIGxpY2Vuc2UiLCJhZGRpdGlvbmFsIGxpY2Vuc2UgdGVybXMiLCJsaWNlbnNlIHRlcm1zIGZyb20iLCJ0ZXJtcyBmcm9tIHRoZSIsImZyb20gdGhlIHBhcnR5IiwicGFydHkgdGhhdCBwcm92aWRlZCIsInRoYXQgcHJvdmlkZWQgeW91IiwicHJvdmlkZWQgeW91IHRoaXMiLCJ5b3UgdGhpcyBzb2Z0d2FyZSIsInRoaXMgc29mdHdhcmUgY292ZXJpbmciLCJzb2Z0d2FyZSBjb3ZlcmluZyB5b3VyIiwiY292ZXJpbmcgeW91ciByaWdodCIsInVzZSB0aGF0IHBhcnR5IiwidGhhdCBwYXJ0eSBzIiwicHJvcGVydHkgcmlnaHRzIDIiLCJyaWdodHMgMiAyIiwiMiAyIGludGVsIiwiMiBpbnRlbCBncmFudHMiLCJpbnRlbCBncmFudHMgZnJlZSIsImdyYW50cyBmcmVlIG9mIiwiYW55IHBlcnNvbiBsaWNlbnNlZSIsInBlcnNvbiBsaWNlbnNlZSBvYnRhaW5pbmciLCJzb3VyY2UgY29kZSBhcHBlYXJpbmciLCJjb2RlIGFwcGVhcmluZyBpbiIsImFwcGVhcmluZyBpbiB0aGlzIiwidGhpcyBmaWxlIGNvdmVyZWQiLCJmaWxlIGNvdmVyZWQgY29kZSIsImNvdmVyZWQgY29kZSBhbiIsImNvZGUgYW4gaXJyZXZvY2FibGUiLCJhbiBpcnJldm9jYWJsZSBwZXJwZXR1YWwiLCJpcnJldm9jYWJsZSBwZXJwZXR1YWwgd29ybGR3aWRlIiwicGVycGV0dWFsIHdvcmxkd2lkZSBsaWNlbnNlIiwid29ybGR3aWRlIGxpY2Vuc2UgdW5kZXIiLCJsaWNlbnNlIHVuZGVyIGludGVsIiwidW5kZXIgaW50ZWwgcyIsImludGVsIHMgY29weXJpZ2h0cyIsInRoZSBiYXNlIGNvZGUiLCJiYXNlIGNvZGUgZGlzdHJpYnV0ZWQiLCJjb2RlIGRpc3RyaWJ1dGVkIG9yaWdpbmFsbHkiLCJkaXN0cmlidXRlZCBvcmlnaW5hbGx5IGJ5Iiwib3JpZ2luYWxseSBieSBpbnRlbCIsImJ5IGludGVsIG9yaWdpbmFsIiwiaW50ZWwgb3JpZ2luYWwgaW50ZWwiLCJjb2RlIHRvIGNvcHkiLCJ0byBjb3B5IG1ha2UiLCJjb3B5IG1ha2UgZGVyaXZhdGl2ZXMiLCJtYWtlIGRlcml2YXRpdmVzIGRpc3RyaWJ1dGUiLCJkZXJpdmF0aXZlcyBkaXN0cmlidXRlIHVzZSIsImRpc3RyaWJ1dGUgdXNlIGFuZCIsInVzZSBhbmQgZGlzcGxheSIsImFuZCBkaXNwbGF5IGFueSIsImRpc3BsYXkgYW55IHBvcnRpb24iLCJhbnkgZm9ybSB3aXRoIiwidG8gc3VibGljZW5zZSBzdWNoIiwic3VibGljZW5zZSBzdWNoIHJpZ2h0cyIsInJpZ2h0cyBhbmQgMiIsImFuZCAyIDMiLCIyIDMgaW50ZWwiLCIzIGludGVsIGdyYW50cyIsImludGVsIGdyYW50cyBsaWNlbnNlZSIsIm5vbiBleGNsdXNpdmUgYW5kIiwiZXhjbHVzaXZlIGFuZCBub24iLCJhbmQgbm9uIHRyYW5zZmVyYWJsZSIsIm5vbiB0cmFuc2ZlcmFibGUgcGF0ZW50IiwidHJhbnNmZXJhYmxlIHBhdGVudCBsaWNlbnNlIiwidG8gc3VibGljZW5zZSB1bmRlciIsInN1YmxpY2Vuc2UgdW5kZXIgb25seSIsInVuZGVyIG9ubHkgdGhvc2UiLCJvbmx5IHRob3NlIGNsYWltcyIsInRob3NlIGNsYWltcyBvZiIsImNsYWltcyBvZiBpbnRlbCIsIm9mIGludGVsIHBhdGVudHMiLCJpbnRlbCBwYXRlbnRzIHRoYXQiLCJjb2RlIGFuZCBkZXJpdmF0aXZlIiwid29ya3MgdGhlcmVvZiBzb2xlbHkiLCJ0aGVyZW9mIHNvbGVseSB0byIsImV4ZXJjaXNlIHRoZSBhYm92ZSIsImFib3ZlIGNvcHlyaWdodCBsaWNlbnNlIiwic2hhbGwgdGhlIHBhdGVudCIsInBhdGVudCBsaWNlbnNlIGV4dGVuZCIsImxpY2Vuc2UgZXh0ZW5kIHRvIiwiZXh0ZW5kIHRvIGFueSIsInRvIGFueSBhZGRpdGlvbnMiLCJ0byBvciBtb2RpZmljYXRpb25zIiwiaW50ZWwgY29kZSBubyIsImNvZGUgbm8gb3RoZXIiLCJvdGhlciBsaWNlbnNlIG9yIiwibGljZW5zZSBvciByaWdodCIsIm9yIHJpZ2h0IGlzIiwiaXMgZ3JhbnRlZCBkaXJlY3RseSIsIm90aGVyd2lzZSB0aGUgYWJvdmUiLCJhbmQgcGF0ZW50IGxpY2Vuc2UiLCJhcmUgbWV0IDMiLCJtZXQgMyBjb25kaXRpb25zIiwiMyBjb25kaXRpb25zIDMiLCJjb25kaXRpb25zIDMgMSIsInNvdXJjZSB3aXRoIHJpZ2h0cyIsIm9yIG1vZGlmaWNhdGlvbiB3aXRoIiwibW9kaWZpY2F0aW9uIHdpdGggcmlnaHRzIiwibm90aWNlIHRoZSBhYm92ZSIsImFib3ZlIGxpY2Vuc2UgdGhpcyIsImxpY2Vuc2UgdGhpcyBsaXN0IiwicHJvdmlzaW9uIGluIGFkZGl0aW9uIiwiYWRkaXRpb24gbGljZW5zZWUgbXVzdCIsIndoaWNoIGxpY2Vuc2VlIGNvbnRyaWJ1dGVzIiwibGljZW5zZWUgY29udHJpYnV0ZXMgdG8iLCJjb250cmlidXRlcyB0byBjb250YWluIiwidGhlIGNoYW5nZXMgbGljZW5zZWUiLCJjaGFuZ2VzIGxpY2Vuc2VlIG1hZGUiLCJsaWNlbnNlZSBtYWRlIHRvIiwiYW55IGNoYW5nZSBsaWNlbnNlZSIsImNoYW5nZSBsaWNlbnNlZSBtdXN0IiwiaW5jbHVkZSBpbiB0aGF0IiwiaW4gdGhhdCBmaWxlIiwidGhhdCBmaWxlIHRoZSIsImZpbGUgdGhlIGRvY3VtZW50YXRpb24iLCJkb2N1bWVudGF0aW9uIG9mIGFueSIsImNoYW5nZXMgbWFkZSBieSIsImJ5IGFueSBwcmVkZWNlc3NvciIsImFueSBwcmVkZWNlc3NvciBsaWNlbnNlZSIsInByZWRlY2Vzc29yIGxpY2Vuc2VlIGxpY2Vuc2VlIiwibGljZW5zZWUgbGljZW5zZWUgbXVzdCIsImZyb20gb3JpZ2luYWwgaW50ZWwiLCJzb3VyY2Ugd2l0aCBubyIsIndpdGggbm8gcmlnaHRzIiwib3IgbW9kaWZpY2F0aW9uIHdpdGhvdXQiLCJtb2RpZmljYXRpb24gd2l0aG91dCByaWdodHMiLCJ3aXRob3V0IHJpZ2h0cyB0byIsInByb3ZpZGVkIHdpdGggZGlzdHJpYnV0aW9uIiwid2l0aCBkaXN0cmlidXRpb24gaW4iLCJkaXN0cmlidXRpb24gaW4gYWRkaXRpb24iLCJhZGRpdGlvbiBsaWNlbnNlZSBtYXkiLCJtYXkgbm90IGF1dGhvcml6ZSIsIm5vdCBhdXRob3JpemUgZnVydGhlciIsImF1dGhvcml6ZSBmdXJ0aGVyIHN1YmxpY2Vuc2UiLCJmdXJ0aGVyIHN1YmxpY2Vuc2Ugb2YiLCJzdWJsaWNlbnNlIG9mIHNvdXJjZSIsIm9mIHNvdXJjZSBvZiIsImNvZGUgYW5kIG11c3QiLCJtdXN0IGluY2x1ZGUgdGVybXMiLCJpbmNsdWRlIHRlcm1zIHRvIiwiZWZmZWN0IHRoYXQgdGhlIiwibGljZW5zZSBmcm9tIGxpY2Vuc2VlIiwiZnJvbSBsaWNlbnNlZSB0byIsImxpY2Vuc2VlIHRvIGl0cyIsIml0cyBsaWNlbnNlZSBpcyIsImxpY2Vuc2VlIGlzIGxpbWl0ZWQiXX0seyJsaWNlbnNlVGV4dHMiOlsiSW50ZWwgT3BlbiBTb3VyY2UgTGljZW5zZSBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwMCBJbnRlbCBDb3Jwb3JhdGlvblxuXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIOKAoiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgIOKAoiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgIOKAoiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgSU5URUwgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5FWFBPUlQgTEFXUzogVEhJUyBMSUNFTlNFIEFERFMgTk8gUkVTVFJJQ1RJT05TIFRPIFRIRSBFWFBPUlQgTEFXUyBPRiBZT1VSIEpVUklTRElDVElPTi4gSXQgaXMgbGljZW5zZWUncyByZXNwb25zaWJpbGl0eSB0byBjb21wbHkgd2l0aCBhbnkgZXhwb3J0IHJlZ3VsYXRpb25zIGFwcGxpY2FibGUgaW4gbGljZW5zZWUncyBqdXJpc2RpY3Rpb24uIFVuZGVyIENVUlJFTlQgKE1heSAyMDAwKSBVLlMuIGV4cG9ydCByZWd1bGF0aW9ucyB0aGlzIHNvZnR3YXJlIGlzIGVsaWdpYmxlIGZvciBleHBvcnQgZnJvbSB0aGUgVS5TLiBhbmQgY2FuIGJlIGRvd25sb2FkZWQgYnkgb3Igb3RoZXJ3aXNlIGV4cG9ydGVkIG9yIHJlZXhwb3J0ZWQgd29ybGR3aWRlIEVYQ0VQVCB0byBVLlMuIGVtYmFyZ29lZCBkZXN0aW5hdGlvbnMgd2hpY2ggaW5jbHVkZSBDdWJhLCBJcmFxLCBMaWJ5YSwgTm9ydGggS29yZWEsIElyYW4sIFN5cmlhLCBTdWRhbiwgQWZnaGFuaXN0YW4gYW5kIGFueSBvdGhlciBjb3VudHJ5IHRvIHdoaWNoIHRoZSBVLlMuIGhhcyBlbWJhcmdvZWQgZ29vZHMgYW5kIHNlcnZpY2VzLiJdLCJsaWNlbnNlSWRzIjpbIkludGVsIl0sImtleXdvcmRzIjpbIjE5OTYgMjAwMCBpbnRlbCIsIjIwMDAgaW50ZWwgY29ycG9yYXRpb24iLCJpbnRlbCBjb3Jwb3JhdGlvbiBhbGwiLCJvZiB0aGUgaW50ZWwiLCJ0aGUgaW50ZWwgY29ycG9yYXRpb24iLCJpbnRlbCBjb3Jwb3JhdGlvbiBub3IiLCJzaGFsbCB0aGUgaW50ZWwiLCJ0aGUgaW50ZWwgb3IiLCJpbnRlbCBvciBjb250cmlidXRvcnMiLCJzdWNoIGRhbWFnZSBleHBvcnQiLCJkYW1hZ2UgZXhwb3J0IGxhd3MiLCJleHBvcnQgbGF3cyB0aGlzIiwibGF3cyB0aGlzIGxpY2Vuc2UiLCJ0aGlzIGxpY2Vuc2UgYWRkcyIsImxpY2Vuc2UgYWRkcyBubyIsImFkZHMgbm8gcmVzdHJpY3Rpb25zIiwibm8gcmVzdHJpY3Rpb25zIHRvIiwidG8gdGhlIGV4cG9ydCIsInRoZSBleHBvcnQgbGF3cyIsImV4cG9ydCBsYXdzIG9mIiwibGF3cyBvZiB5b3VyIiwib2YgeW91ciBqdXJpc2RpY3Rpb24iLCJ5b3VyIGp1cmlzZGljdGlvbiBpdCIsImp1cmlzZGljdGlvbiBpdCBpcyIsIml0IGlzIGxpY2Vuc2VlIiwiaXMgbGljZW5zZWUgcyIsImxpY2Vuc2VlIHMgcmVzcG9uc2liaWxpdHkiLCJ3aXRoIGFueSBleHBvcnQiLCJhbnkgZXhwb3J0IHJlZ3VsYXRpb25zIiwiZXhwb3J0IHJlZ3VsYXRpb25zIGFwcGxpY2FibGUiLCJyZWd1bGF0aW9ucyBhcHBsaWNhYmxlIGluIiwiYXBwbGljYWJsZSBpbiBsaWNlbnNlZSIsImluIGxpY2Vuc2VlIHMiLCJsaWNlbnNlZSBzIGp1cmlzZGljdGlvbiIsInMganVyaXNkaWN0aW9uIHVuZGVyIiwianVyaXNkaWN0aW9uIHVuZGVyIGN1cnJlbnQiLCJ1bmRlciBjdXJyZW50IG1heSIsImN1cnJlbnQgbWF5IDIwMDAiLCJtYXkgMjAwMCB1IiwiMjAwMCB1IHMiLCJzIGV4cG9ydCByZWd1bGF0aW9ucyIsImV4cG9ydCByZWd1bGF0aW9ucyB0aGlzIiwicmVndWxhdGlvbnMgdGhpcyBzb2Z0d2FyZSIsInNvZnR3YXJlIGlzIGVsaWdpYmxlIiwiZWxpZ2libGUgZm9yIGV4cG9ydCIsImZvciBleHBvcnQgZnJvbSIsImV4cG9ydCBmcm9tIHRoZSIsInMgYW5kIGNhbiIsImNhbiBiZSBkb3dubG9hZGVkIiwiYmUgZG93bmxvYWRlZCBieSIsImRvd25sb2FkZWQgYnkgb3IiLCJieSBvciBvdGhlcndpc2UiLCJvciBvdGhlcndpc2UgZXhwb3J0ZWQiLCJvdGhlcndpc2UgZXhwb3J0ZWQgb3IiLCJleHBvcnRlZCBvciByZWV4cG9ydGVkIiwib3IgcmVleHBvcnRlZCB3b3JsZHdpZGUiLCJyZWV4cG9ydGVkIHdvcmxkd2lkZSBleGNlcHQiLCJ3b3JsZHdpZGUgZXhjZXB0IHRvIiwiZXhjZXB0IHRvIHUiLCJzIGVtYmFyZ29lZCBkZXN0aW5hdGlvbnMiLCJlbWJhcmdvZWQgZGVzdGluYXRpb25zIHdoaWNoIiwiZGVzdGluYXRpb25zIHdoaWNoIGluY2x1ZGUiLCJ3aGljaCBpbmNsdWRlIGN1YmEiLCJpbmNsdWRlIGN1YmEgaXJhcSIsImN1YmEgaXJhcSBsaWJ5YSIsImlyYXEgbGlieWEgbm9ydGgiLCJsaWJ5YSBub3J0aCBrb3JlYSIsIm5vcnRoIGtvcmVhIGlyYW4iLCJrb3JlYSBpcmFuIHN5cmlhIiwiaXJhbiBzeXJpYSBzdWRhbiIsInN5cmlhIHN1ZGFuIGFmZ2hhbmlzdGFuIiwic3VkYW4gYWZnaGFuaXN0YW4gYW5kIiwiYWZnaGFuaXN0YW4gYW5kIGFueSIsImFueSBvdGhlciBjb3VudHJ5Iiwib3RoZXIgY291bnRyeSB0byIsImNvdW50cnkgdG8gd2hpY2giLCJ3aGljaCB0aGUgdSIsInUgcyBoYXMiLCJzIGhhcyBlbWJhcmdvZWQiLCJoYXMgZW1iYXJnb2VkIGdvb2RzIiwiZW1iYXJnb2VkIGdvb2RzIGFuZCIsImdvb2RzIGFuZCBzZXJ2aWNlcyIsImMgMTk5NiAyMDAwIGludGVsIiwiMTk5NiAyMDAwIGludGVsIGNvcnBvcmF0aW9uIiwiMjAwMCBpbnRlbCBjb3Jwb3JhdGlvbiBhbGwiLCJpbnRlbCBjb3Jwb3JhdGlvbiBhbGwgcmlnaHRzIiwibmFtZSBvZiB0aGUgaW50ZWwiLCJvZiB0aGUgaW50ZWwgY29ycG9yYXRpb24iLCJ0aGUgaW50ZWwgY29ycG9yYXRpb24gbm9yIiwiaW50ZWwgY29ycG9yYXRpb24gbm9yIHRoZSIsImV2ZW50IHNoYWxsIHRoZSBpbnRlbCIsInNoYWxsIHRoZSBpbnRlbCBvciIsInRoZSBpbnRlbCBvciBjb250cmlidXRvcnMiLCJpbnRlbCBvciBjb250cmlidXRvcnMgYmUiLCJvZiBzdWNoIGRhbWFnZSBleHBvcnQiLCJzdWNoIGRhbWFnZSBleHBvcnQgbGF3cyIsImRhbWFnZSBleHBvcnQgbGF3cyB0aGlzIiwiZXhwb3J0IGxhd3MgdGhpcyBsaWNlbnNlIiwibGF3cyB0aGlzIGxpY2Vuc2UgYWRkcyIsInRoaXMgbGljZW5zZSBhZGRzIG5vIiwibGljZW5zZSBhZGRzIG5vIHJlc3RyaWN0aW9ucyIsImFkZHMgbm8gcmVzdHJpY3Rpb25zIHRvIiwibm8gcmVzdHJpY3Rpb25zIHRvIHRoZSIsInJlc3RyaWN0aW9ucyB0byB0aGUgZXhwb3J0IiwidG8gdGhlIGV4cG9ydCBsYXdzIiwidGhlIGV4cG9ydCBsYXdzIG9mIiwiZXhwb3J0IGxhd3Mgb2YgeW91ciIsImxhd3Mgb2YgeW91ciBqdXJpc2RpY3Rpb24iLCJvZiB5b3VyIGp1cmlzZGljdGlvbiBpdCIsInlvdXIganVyaXNkaWN0aW9uIGl0IGlzIiwianVyaXNkaWN0aW9uIGl0IGlzIGxpY2Vuc2VlIiwiaXQgaXMgbGljZW5zZWUgcyIsImlzIGxpY2Vuc2VlIHMgcmVzcG9uc2liaWxpdHkiLCJsaWNlbnNlZSBzIHJlc3BvbnNpYmlsaXR5IHRvIiwicyByZXNwb25zaWJpbGl0eSB0byBjb21wbHkiLCJjb21wbHkgd2l0aCBhbnkgZXhwb3J0Iiwid2l0aCBhbnkgZXhwb3J0IHJlZ3VsYXRpb25zIiwiYW55IGV4cG9ydCByZWd1bGF0aW9ucyBhcHBsaWNhYmxlIiwiZXhwb3J0IHJlZ3VsYXRpb25zIGFwcGxpY2FibGUgaW4iLCJyZWd1bGF0aW9ucyBhcHBsaWNhYmxlIGluIGxpY2Vuc2VlIiwiYXBwbGljYWJsZSBpbiBsaWNlbnNlZSBzIiwiaW4gbGljZW5zZWUgcyBqdXJpc2RpY3Rpb24iLCJsaWNlbnNlZSBzIGp1cmlzZGljdGlvbiB1bmRlciIsInMganVyaXNkaWN0aW9uIHVuZGVyIGN1cnJlbnQiLCJqdXJpc2RpY3Rpb24gdW5kZXIgY3VycmVudCBtYXkiLCJ1bmRlciBjdXJyZW50IG1heSAyMDAwIiwiY3VycmVudCBtYXkgMjAwMCB1IiwibWF5IDIwMDAgdSBzIiwiMjAwMCB1IHMgZXhwb3J0IiwidSBzIGV4cG9ydCByZWd1bGF0aW9ucyIsInMgZXhwb3J0IHJlZ3VsYXRpb25zIHRoaXMiLCJleHBvcnQgcmVndWxhdGlvbnMgdGhpcyBzb2Z0d2FyZSIsInJlZ3VsYXRpb25zIHRoaXMgc29mdHdhcmUgaXMiLCJ0aGlzIHNvZnR3YXJlIGlzIGVsaWdpYmxlIiwic29mdHdhcmUgaXMgZWxpZ2libGUgZm9yIiwiaXMgZWxpZ2libGUgZm9yIGV4cG9ydCIsImVsaWdpYmxlIGZvciBleHBvcnQgZnJvbSIsImZvciBleHBvcnQgZnJvbSB0aGUiLCJleHBvcnQgZnJvbSB0aGUgdSIsInUgcyBhbmQgY2FuIiwicyBhbmQgY2FuIGJlIiwiYW5kIGNhbiBiZSBkb3dubG9hZGVkIiwiY2FuIGJlIGRvd25sb2FkZWQgYnkiLCJiZSBkb3dubG9hZGVkIGJ5IG9yIiwiZG93bmxvYWRlZCBieSBvciBvdGhlcndpc2UiLCJieSBvciBvdGhlcndpc2UgZXhwb3J0ZWQiLCJvciBvdGhlcndpc2UgZXhwb3J0ZWQgb3IiLCJvdGhlcndpc2UgZXhwb3J0ZWQgb3IgcmVleHBvcnRlZCIsImV4cG9ydGVkIG9yIHJlZXhwb3J0ZWQgd29ybGR3aWRlIiwib3IgcmVleHBvcnRlZCB3b3JsZHdpZGUgZXhjZXB0IiwicmVleHBvcnRlZCB3b3JsZHdpZGUgZXhjZXB0IHRvIiwid29ybGR3aWRlIGV4Y2VwdCB0byB1IiwiZXhjZXB0IHRvIHUgcyIsInRvIHUgcyBlbWJhcmdvZWQiLCJ1IHMgZW1iYXJnb2VkIGRlc3RpbmF0aW9ucyIsInMgZW1iYXJnb2VkIGRlc3RpbmF0aW9ucyB3aGljaCIsImVtYmFyZ29lZCBkZXN0aW5hdGlvbnMgd2hpY2ggaW5jbHVkZSIsImRlc3RpbmF0aW9ucyB3aGljaCBpbmNsdWRlIGN1YmEiLCJ3aGljaCBpbmNsdWRlIGN1YmEgaXJhcSIsImluY2x1ZGUgY3ViYSBpcmFxIGxpYnlhIiwiY3ViYSBpcmFxIGxpYnlhIG5vcnRoIiwiaXJhcSBsaWJ5YSBub3J0aCBrb3JlYSIsImxpYnlhIG5vcnRoIGtvcmVhIGlyYW4iLCJub3J0aCBrb3JlYSBpcmFuIHN5cmlhIiwia29yZWEgaXJhbiBzeXJpYSBzdWRhbiIsImlyYW4gc3lyaWEgc3VkYW4gYWZnaGFuaXN0YW4iLCJzeXJpYSBzdWRhbiBhZmdoYW5pc3RhbiBhbmQiLCJzdWRhbiBhZmdoYW5pc3RhbiBhbmQgYW55IiwiYWZnaGFuaXN0YW4gYW5kIGFueSBvdGhlciIsImFuZCBhbnkgb3RoZXIgY291bnRyeSIsImFueSBvdGhlciBjb3VudHJ5IHRvIiwib3RoZXIgY291bnRyeSB0byB3aGljaCIsImNvdW50cnkgdG8gd2hpY2ggdGhlIiwidG8gd2hpY2ggdGhlIHUiLCJ3aGljaCB0aGUgdSBzIiwidGhlIHUgcyBoYXMiLCJ1IHMgaGFzIGVtYmFyZ29lZCIsInMgaGFzIGVtYmFyZ29lZCBnb29kcyIsImhhcyBlbWJhcmdvZWQgZ29vZHMgYW5kIiwiZW1iYXJnb2VkIGdvb2RzIGFuZCBzZXJ2aWNlcyIsImludGVsIG9wZW4gc291cmNlIGxpY2Vuc2UgY29weXJpZ2h0Iiwic291cmNlIGxpY2Vuc2UgY29weXJpZ2h0IGMgMTk5NiIsImxpY2Vuc2UgY29weXJpZ2h0IGMgMTk5NiAyMDAwIiwiY29weXJpZ2h0IGMgMTk5NiAyMDAwIGludGVsIiwiYyAxOTk2IDIwMDAgaW50ZWwgY29ycG9yYXRpb24iLCIxOTk2IDIwMDAgaW50ZWwgY29ycG9yYXRpb24gYWxsIiwiMjAwMCBpbnRlbCBjb3Jwb3JhdGlvbiBhbGwgcmlnaHRzIiwiaW50ZWwgY29ycG9yYXRpb24gYWxsIHJpZ2h0cyByZXNlcnZlZCIsImNvcnBvcmF0aW9uIGFsbCByaWdodHMgcmVzZXJ2ZWQgcmVkaXN0cmlidXRpb24iLCJ0aGUgbmFtZSBvZiB0aGUgaW50ZWwiLCJuYW1lIG9mIHRoZSBpbnRlbCBjb3Jwb3JhdGlvbiIsIm9mIHRoZSBpbnRlbCBjb3Jwb3JhdGlvbiBub3IiLCJ0aGUgaW50ZWwgY29ycG9yYXRpb24gbm9yIHRoZSIsImludGVsIGNvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMiLCJubyBldmVudCBzaGFsbCB0aGUgaW50ZWwiLCJldmVudCBzaGFsbCB0aGUgaW50ZWwgb3IiLCJzaGFsbCB0aGUgaW50ZWwgb3IgY29udHJpYnV0b3JzIiwidGhlIGludGVsIG9yIGNvbnRyaWJ1dG9ycyBiZSIsImludGVsIG9yIGNvbnRyaWJ1dG9ycyBiZSBsaWFibGUiLCJwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZSBleHBvcnQiXX0seyJsaWNlbnNlVGV4dHMiOlsiSU5URVJCQVNFIFBVQkxJQyBMSUNFTlNFXG5cblZlcnNpb24gMS4wXG5cbiAgIDEuIERlZmluaXRpb25zLlxuXG4gICAgICAxLjAuMS4gXCJDb21tZXJjaWFsIFVzZVwiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuXG5cbiAgICAgIDEuMS4gJydDb250cmlidXRvcicnIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4yLiAnJ0NvbnRyaWJ1dG9yIFZlcnNpb24nJyBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuXG5cbiAgICAgIDEuMy4gJydDb3ZlcmVkIENvZGUnJyBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLlxuXG4gICAgICAxLjQuICcnRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtJycgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuXG5cbiAgICAgIDEuNS4gJydFeGVjdXRhYmxlJycgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuXG5cbiAgICAgIDEuNi4gJydJbml0aWFsIERldmVsb3BlcicnIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS5cblxuICAgICAgMS43LiAnJ0xhcmdlciBXb3JrJycgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS44LiAnJ0xpY2Vuc2UnJyBtZWFucyB0aGlzIGRvY3VtZW50LlxuXG4gICAgICAxLjguMS4gXCJMaWNlbnNhYmxlXCIgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uXG5cbiAgICAgIDEuOS4gJydNb2RpZmljYXRpb25zJycgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6XG5cbiAgICAgICAgIEEuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgICAgIEIuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIDEuMTAuICcnT3JpZ2luYWwgQ29kZScnIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuMTAuMS4gXCJQYXRlbnQgQ2xhaW1zXCIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuXG5cbiAgICAgIDEuMTEuICcnU291cmNlIENvZGUnJyBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS5cblxuICAgICAgMS4xMi4gXCJZb3UnJyAob3IgXCJZb3VyXCIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91JycgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbCcnIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLlxuXG4gICAgICAyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC5cblxuICAgICAgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kXG5cbiAgICAgICAgIChiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS5cblxuICAgICAgICAgKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgICAgKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy5cblxuICAgICAgMi4yLiBDb250cmlidXRvciBHcmFudC5cblxuICAgICAgU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2VcblxuICAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuXG5cbiAgICAgICAgIChjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgICAgICAgIChkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci5cblxuICAgMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLlxuXG4gICAgICAzLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuXG5cbiAgICAgIFRoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LlxuXG4gICAgICAzLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS5cblxuICAgICAgQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuXG5cbiAgICAgIDMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICAgICAzLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzXG5cbiAgICAgICAgIChhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuXG5cbiAgICAgICAgIElmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSdzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgXCJMRUdBTCcnIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuXG5cbiAgICAgICAgIChiKSBDb250cmlidXRvciBBUElzLlxuXG4gICAgICAgICBJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuXG5cbiAgICAgICAgIChjKSBSZXByZXNlbnRhdGlvbnMuXG5cbiAgICAgICAgIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3Mgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgMy41LiBSZXF1aXJlZCBOb3RpY2VzLlxuXG4gICAgICBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLlxuXG4gICAgICBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjcuIExhcmdlciBXb3Jrcy5cblxuICAgICAgWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICA0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uXG5cbiAgIElmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuXG5cbiAgIDUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS5cblxuICAgNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuXG5cbiAgICAgIDYuMS4gTmV3IFZlcnNpb25zLlxuXG4gICAgICBCb3JsYW5kIFNvZnR3YXJlIENvcnBvcmF0aW9uICgnJ0ludGVyYmFzZScnKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuXG5cbiAgICAgIDYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy5cblxuICAgICAgT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IEludGVyYmFzZS4gTm8gb25lIG90aGVyIHRoYW4gSW50ZXJiYXNlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgNi4zLiBEZXJpdmF0aXZlIFdvcmtzLlxuXG4gICAgICBJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyAnJ01vemlsbGEnJywgJydNT1pJTExBUEwnJywgJydNT1pQTCcnLCAnJ05ldHNjYXBlJycsIFwiTVBMXCIsICcnTlBMXCIsIFwiSW50ZXJiYXNlXCIsIFwiSVNDXCIsIFwiSUInJyBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgYW5kIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pXG5cbiAgICAgIDYuNCBPcmlnaW4gb2YgdGhlIEludGVyYmFzZSBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgVGhlIEludGVyYmFzZSBwdWJsaWMgbGljZW5zZSBpcyBiYXNlZCBvbiB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWIDEuMSB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhbmdlczpcblxuICAgICAgVGhlIGxpY2Vuc2UgaXMgcHVibGlzaGVkIGJ5IEJvcmxhbmQgU29mdHdhcmUgQ29ycG9yYXRpb24uIE9ubHkgQm9ybGFuZCBTb2Z0d2FyZSBDb3Jwb3JhdGlvbiBjYW4gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZS5cblxuICAgICAgVGhlIGxpY2Vuc2UgY2FuIGJlIG1vZGlmaWVkIHVzZWQgZm9yIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgZ292ZXJuZWQgYnkgdGhpcyBsaWNlbnNlLiBNb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgbGljZW5zZSBtdXN0IGJlIHJlbmFtZWQgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggTmV0c2NhcGU/cyBvciBJbnRlcmJhc2UgU29mdHdhcmU/cyBsaWNlbnNlIGFuZCBtdXN0IGluY2x1ZGUgYSBkZXNjcmlwdGlvbiBvZiBjaGFuZ2VzIGZyb20gdGhlIEludGVyYmFzZSBQdWJsaWMgTGljZW5zZS5cblxuICAgICAgVGhlIG5hbWUgb2YgdGhlIGxpY2Vuc2UgaW4gRXhoaWJpdCBBIGlzIHRoZSBcIkludGVyYmFzZSBQdWJsaWMgTGljZW5zZVwiLlxuXG4gICAgICBUaGUgcmVmZXJlbmNlIHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgaW4gRXhoaWJpdCBBIGhhcyBiZWVuIHJlbW92ZWQuXG5cbiAgICAgIEFtZW5kbWVudHMgSSwgSUksIElJSSwgViwgYW5kIFZJIGhhdmUgYmVlbiBkZWxldGVkLlxuXG4gICAgICBFeGhpYml0IEEsIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlIGhhcyBiZWVuIGRlbGV0ZWRcblxuICAgICAgQSBuZXcgYW1lbmRtZW50IChJSSkgaGFzIGJlZW4gYWRkZWQsIGRlc2NyaWJpbmcgdGhlIHJlcXVpcmVkIGFuZCByZXN0cmljdGVkIHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb2YgQm9ybGFuZCBTb2Z0d2FyZSBDb3Jwb3JhdGlvblxuXG4gICA3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLlxuXG4gICBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIFwiQVMgSVMnJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLlxuXG4gICA4LiBURVJNSU5BVElPTi5cblxuICAgICAgOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuXG5cbiAgICAgIDguMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyIG9yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgXCJQYXJ0aWNpcGFudFwiKSBhbGxlZ2luZyB0aGF0OlxuXG4gICAgICAgICAoYSkgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLlxuXG4gICAgICAgICAoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuXG5cbiAgICAgIDguMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS5cblxuICAgICAgOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uXG5cbiAgIDkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLlxuXG4gICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLlxuXG4gICBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgJydjb21tZXJjaWFsIGl0ZW0sJycgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICcnY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZScnIGFuZCAnJ2NvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwnJyBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uXG5cbiAgIDExLiBNSVNDRUxMQU5FT1VTLlxuXG4gICBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS5cblxuICAgMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuXG5cbiAgIEFzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS5cblxuICAgMTMuIE1VTFRJUExFLUxJQ0VOU0VEIENPREUuXG5cbiAgIEluaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcyBcIk11bHRpcGxlLUxpY2Vuc2VkXCIuIFwiTXVsdGlwbGUtTGljZW5zZWRcIiBtZWFucyB0aGF0IHRoZSBJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgWW91ciBjaG9pY2Ugb2YgdGhlIE5QTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLlxuXG4gICBFWEhJQklUIEEgLSBJbnRlckJhc2UgUHVibGljIExpY2Vuc2UuXG5cbiAgIFwiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgSW50ZXJiYXNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LkludGVyYmFzZS5jb20vSVBMLmh0bWxcblxuICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuICAgVGhlIE9yaWdpbmFsIENvZGUgd2FzIGNyZWF0ZWQgYnkgSW50ZXJCYXNlIFNvZnR3YXJlIENvcnAgYW5kIGl0cyBzdWNjZXNzb3JzLlxuXG4gICBQb3J0aW9ucyBjcmVhdGVkIGJ5IEJvcmxhbmQvSW5wcmlzZSBhcmUgQ29weXJpZ2h0IChDKSBCb3JsYW5kL0lucHJpc2UuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbiAgIENvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAuXG5cbkFNRU5ETUVOVFNcblxuICAgSS4gSW50ZXJCYXNlIGFuZCBsb2dvLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3MgXCJJbnRlcmJhc2UnJywgXCJKYXZhXCIgb3IgXCJKYXZhU2NyaXB0XCIgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zLlxuXG4gICBJSS4gVHJhZGVtYXJrIFVzYWdlLlxuXG4gICAgICBJSS4xLiBBZHZlcnRpc2luZyBNYXRlcmlhbHMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhlIGNvdmVyZWQgQ29kZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6IFwiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBCb3JsYW5kIFNvZnR3YXJlIENvcnAuIFwiXG5cbiAgICAgIElJLjIuIEVuZG9yc2VtZW50cy4gVGhlIG5hbWVzIFwiSW50ZXJCYXNlLFwiIFwiSVNDLFwiIGFuZCBcIklCXCIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgQ29udHJpYnV0b3IgVmVyc2lvbnMgb3IgTGFyZ2VyIFdvcmtzIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBJbnRlcmJhc2UuXG5cbiAgICAgIElJLjMuIFByb2R1Y3QgTmFtZXMuIENvbnRyaWJ1dG9yIFZlcnNpb25zIGFuZCBMYXJnZXIgV29ya3MgbWF5IG5vdCBiZSBjYWxsZWQgXCJJbnRlckJhc2VcIiBvciBcIkludGVyYmFzZVwiIG5vciBtYXkgdGhlIHdvcmQgXCJJbnRlckJhc2VcIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIEludGVyYmFzZS4iXSwibGljZW5zZUlkcyI6WyJJbnRlcmJhc2UtMS4wIl0sImtleXdvcmRzIjpbIm5ldyB2ZXJzaW9ucyBib3JsYW5kIiwidmVyc2lvbnMgYm9ybGFuZCBzb2Z0d2FyZSIsInNvZnR3YXJlIGNvcnBvcmF0aW9uIGludGVyYmFzZSIsImNvcnBvcmF0aW9uIGludGVyYmFzZSBtYXkiLCJpbnRlcmJhc2UgbWF5IHB1Ymxpc2giLCJwdWJsaXNoZWQgYnkgaW50ZXJiYXNlIiwiYnkgaW50ZXJiYXNlIG5vIiwiaW50ZXJiYXNlIG5vIG9uZSIsIm90aGVyIHRoYW4gaW50ZXJiYXNlIiwidGhhbiBpbnRlcmJhc2UgaGFzIiwiaW50ZXJiYXNlIGhhcyB0aGUiLCJtcGwgbnBsIGludGVyYmFzZSIsIm5wbCBpbnRlcmJhc2UgaXNjIiwiaW50ZXJiYXNlIGlzYyBpYiIsImlzYyBpYiBvciIsImliIG9yIGFueSIsIjYgNCBvcmlnaW4iLCI0IG9yaWdpbiBvZiIsIm9mIHRoZSBpbnRlcmJhc2UiLCJsaWNlbnNlIHRoZSBpbnRlcmJhc2UiLCJ0aGUgZm9sbG93aW5nIGNoYW5nZXMiLCJmb2xsb3dpbmcgY2hhbmdlcyB0aGUiLCJjaGFuZ2VzIHRoZSBsaWNlbnNlIiwiaXMgcHVibGlzaGVkIGJ5IiwicHVibGlzaGVkIGJ5IGJvcmxhbmQiLCJzb2Z0d2FyZSBjb3Jwb3JhdGlvbiBvbmx5IiwiY29ycG9yYXRpb24gb25seSBib3JsYW5kIiwib25seSBib3JsYW5kIHNvZnR3YXJlIiwic29mdHdhcmUgY29ycG9yYXRpb24gY2FuIiwiY29ycG9yYXRpb24gY2FuIG1vZGlmeSIsImNvZGUgdGhlIGxpY2Vuc2UiLCJ0aGUgbGljZW5zZSBjYW4iLCJiZSBtb2RpZmllZCB1c2VkIiwibW9kaWZpZWQgdXNlZCBmb3IiLCJ1c2VkIGZvciBjb2RlIiwiZm9yIGNvZGUgd2hpY2giLCJub3QgYWxyZWFkeSBnb3Zlcm5lZCIsImFscmVhZHkgZ292ZXJuZWQgYnkiLCJ0aGlzIGxpY2Vuc2UgbW9kaWZpZWQiLCJsaWNlbnNlIG1vZGlmaWVkIHZlcnNpb25zIiwidGhlIGxpY2Vuc2UgbXVzdCIsImJlIHJlbmFtZWQgdG8iLCJyZW5hbWVkIHRvIGF2b2lkIiwiYXZvaWQgY29uZnVzaW9uIHdpdGgiLCJjb25mdXNpb24gd2l0aCBuZXRzY2FwZSIsIndpdGggbmV0c2NhcGUgcyIsIm5ldHNjYXBlIHMgb3IiLCJzIG9yIGludGVyYmFzZSIsIm9yIGludGVyYmFzZSBzb2Z0d2FyZSIsImludGVyYmFzZSBzb2Z0d2FyZSBzIiwic29mdHdhcmUgcyBsaWNlbnNlIiwiaW5jbHVkZSBhIGRlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24gb2YgY2hhbmdlcyIsIm9mIGNoYW5nZXMgZnJvbSIsImZyb20gdGhlIGludGVyYmFzZSIsImxpY2Vuc2UgdGhlIG5hbWUiLCJhIGlzIHRoZSIsImlzIHRoZSBpbnRlcmJhc2UiLCJsaWNlbnNlIHRoZSByZWZlcmVuY2UiLCJ0aGUgcmVmZXJlbmNlIHRvIiwicmVmZXJlbmNlIHRvIGFuIiwiYWx0ZXJuYXRpdmUgbGljZW5zZSBpbiIsImJlZW4gcmVtb3ZlZCBhbWVuZG1lbnRzIiwicmVtb3ZlZCBhbWVuZG1lbnRzIGkiLCJhbWVuZG1lbnRzIGkgaWkiLCJpIGlpIGlpaSIsImlpIGlpaSB2IiwiaWlpIHYgYW5kIiwidiBhbmQgdmkiLCJhbmQgdmkgaGF2ZSIsInZpIGhhdmUgYmVlbiIsImJlZW4gZGVsZXRlZCBleGhpYml0IiwiZGVsZXRlZCBleGhpYml0IGEiLCJoYXMgYmVlbiBkZWxldGVkIiwiYmVlbiBkZWxldGVkIGEiLCJkZWxldGVkIGEgbmV3IiwiYSBuZXcgYW1lbmRtZW50IiwibmV3IGFtZW5kbWVudCBpaSIsImFtZW5kbWVudCBpaSBoYXMiLCJpaSBoYXMgYmVlbiIsImJlZW4gYWRkZWQgZGVzY3JpYmluZyIsImFkZGVkIGRlc2NyaWJpbmcgdGhlIiwiZGVzY3JpYmluZyB0aGUgcmVxdWlyZWQiLCJ0aGUgcmVxdWlyZWQgYW5kIiwicmVxdWlyZWQgYW5kIHJlc3RyaWN0ZWQiLCJhbmQgcmVzdHJpY3RlZCByaWdodHMiLCJyZXN0cmljdGVkIHJpZ2h0cyB0byIsInRyYWRlbWFya3Mgb2YgYm9ybGFuZCIsIm9mIGJvcmxhbmQgc29mdHdhcmUiLCJzb2Z0d2FyZSBjb3Jwb3JhdGlvbiA3IiwiY29ycG9yYXRpb24gNyBkaXNjbGFpbWVyIiwiZXhoaWJpdCBhIGludGVyYmFzZSIsImEgaW50ZXJiYXNlIHB1YmxpYyIsInRvIHRoZSBpbnRlcmJhc2UiLCJodHRwIHd3dyBpbnRlcmJhc2UiLCJ3d3cgaW50ZXJiYXNlIGNvbSIsImludGVyYmFzZSBjb20gaXBsIiwiY29tIGlwbCBodG1sIiwiaXBsIGh0bWwgc29mdHdhcmUiLCJjb2RlIHdhcyBjcmVhdGVkIiwiY3JlYXRlZCBieSBpbnRlcmJhc2UiLCJieSBpbnRlcmJhc2Ugc29mdHdhcmUiLCJpbnRlcmJhc2Ugc29mdHdhcmUgY29ycCIsInNvZnR3YXJlIGNvcnAgYW5kIiwiY29ycCBhbmQgaXRzIiwiYW5kIGl0cyBzdWNjZXNzb3JzIiwiaXRzIHN1Y2Nlc3NvcnMgcG9ydGlvbnMiLCJzdWNjZXNzb3JzIHBvcnRpb25zIGNyZWF0ZWQiLCJjcmVhdGVkIGJ5IGJvcmxhbmQiLCJieSBib3JsYW5kIGlucHJpc2UiLCJib3JsYW5kIGlucHJpc2UgYXJlIiwiaW5wcmlzZSBhcmUgY29weXJpZ2h0IiwiY29weXJpZ2h0IGMgYm9ybGFuZCIsImMgYm9ybGFuZCBpbnByaXNlIiwiYm9ybGFuZCBpbnByaXNlIGFsbCIsImlucHJpc2UgYWxsIHJpZ2h0cyIsImNvbnRyaWJ1dG9yIHMgYW1lbmRtZW50cyIsInMgYW1lbmRtZW50cyBpIiwiYW1lbmRtZW50cyBpIGludGVyYmFzZSIsImkgaW50ZXJiYXNlIGFuZCIsImludGVyYmFzZSBhbmQgbG9nbyIsInRoZSB0cmFkZW1hcmtzIGludGVyYmFzZSIsInRyYWRlbWFya3MgaW50ZXJiYXNlIGphdmEiLCJpbnRlcmJhc2UgamF2YSBvciIsIm9yIGphdmFzY3JpcHQgZXZlbiIsImphdmFzY3JpcHQgZXZlbiBpZiIsIm9yIG1vZGlmaWNhdGlvbnMgaWkiLCJtb2RpZmljYXRpb25zIGlpIHRyYWRlbWFyayIsImlpIHRyYWRlbWFyayB1c2FnZSIsInRyYWRlbWFyayB1c2FnZSBpaSIsInVzYWdlIGlpIDEiLCJpaSAxIGFkdmVydGlzaW5nIiwiZGV2ZWxvcGVkIGJ5IGJvcmxhbmQiLCJib3JsYW5kIHNvZnR3YXJlIGNvcnAiLCJzb2Z0d2FyZSBjb3JwIGlpIiwiY29ycCBpaSAyIiwiaWkgMiBlbmRvcnNlbWVudHMiLCJ0aGUgbmFtZXMgaW50ZXJiYXNlIiwibmFtZXMgaW50ZXJiYXNlIGlzYyIsImludGVyYmFzZSBpc2MgYW5kIiwiaXNjIGFuZCBpYiIsImFuZCBpYiBtdXN0IiwiaWIgbXVzdCBub3QiLCJvZiBpbnRlcmJhc2UgaWkiLCJpbnRlcmJhc2UgaWkgMyIsImlpIDMgcHJvZHVjdCIsImJlIGNhbGxlZCBpbnRlcmJhc2UiLCJjYWxsZWQgaW50ZXJiYXNlIG9yIiwiaW50ZXJiYXNlIG9yIGludGVyYmFzZSIsIm9yIGludGVyYmFzZSBub3IiLCJpbnRlcmJhc2Ugbm9yIG1heSIsInRoZSB3b3JkIGludGVyYmFzZSIsIndvcmQgaW50ZXJiYXNlIGFwcGVhciIsImludGVyYmFzZSBhcHBlYXIgaW4iLCIxIG5ldyB2ZXJzaW9ucyBib3JsYW5kIiwibmV3IHZlcnNpb25zIGJvcmxhbmQgc29mdHdhcmUiLCJ2ZXJzaW9ucyBib3JsYW5kIHNvZnR3YXJlIGNvcnBvcmF0aW9uIiwiYm9ybGFuZCBzb2Z0d2FyZSBjb3Jwb3JhdGlvbiBpbnRlcmJhc2UiLCJzb2Z0d2FyZSBjb3Jwb3JhdGlvbiBpbnRlcmJhc2UgbWF5IiwiY29ycG9yYXRpb24gaW50ZXJiYXNlIG1heSBwdWJsaXNoIiwiaW50ZXJiYXNlIG1heSBwdWJsaXNoIHJldmlzZWQiLCJsaWNlbnNlIHB1Ymxpc2hlZCBieSBpbnRlcmJhc2UiLCJwdWJsaXNoZWQgYnkgaW50ZXJiYXNlIG5vIiwiYnkgaW50ZXJiYXNlIG5vIG9uZSIsImludGVyYmFzZSBubyBvbmUgb3RoZXIiLCJvbmUgb3RoZXIgdGhhbiBpbnRlcmJhc2UiLCJvdGhlciB0aGFuIGludGVyYmFzZSBoYXMiLCJ0aGFuIGludGVyYmFzZSBoYXMgdGhlIiwiaW50ZXJiYXNlIGhhcyB0aGUgcmlnaHQiLCJuZXRzY2FwZSBtcGwgbnBsIGludGVyYmFzZSIsIm1wbCBucGwgaW50ZXJiYXNlIGlzYyIsIm5wbCBpbnRlcmJhc2UgaXNjIGliIiwiaW50ZXJiYXNlIGlzYyBpYiBvciIsImlzYyBpYiBvciBhbnkiLCJpYiBvciBhbnkgY29uZnVzaW5nbHkiLCJsaWNlbnNlIDYgNCBvcmlnaW4iLCI2IDQgb3JpZ2luIG9mIiwiNCBvcmlnaW4gb2YgdGhlIiwib3JpZ2luIG9mIHRoZSBpbnRlcmJhc2UiLCJvZiB0aGUgaW50ZXJiYXNlIHB1YmxpYyIsInB1YmxpYyBsaWNlbnNlIHRoZSBpbnRlcmJhc2UiLCJsaWNlbnNlIHRoZSBpbnRlcmJhc2UgcHVibGljIiwiaW50ZXJiYXNlIHB1YmxpYyBsaWNlbnNlIGlzIiwicHVibGljIGxpY2Vuc2UgaXMgYmFzZWQiLCJ2IDEgMSB3aXRoIiwid2l0aCB0aGUgZm9sbG93aW5nIGNoYW5nZXMiLCJ0aGUgZm9sbG93aW5nIGNoYW5nZXMgdGhlIiwiZm9sbG93aW5nIGNoYW5nZXMgdGhlIGxpY2Vuc2UiLCJjaGFuZ2VzIHRoZSBsaWNlbnNlIGlzIiwibGljZW5zZSBpcyBwdWJsaXNoZWQgYnkiLCJpcyBwdWJsaXNoZWQgYnkgYm9ybGFuZCIsInB1Ymxpc2hlZCBieSBib3JsYW5kIHNvZnR3YXJlIiwiYnkgYm9ybGFuZCBzb2Z0d2FyZSBjb3Jwb3JhdGlvbiIsImJvcmxhbmQgc29mdHdhcmUgY29ycG9yYXRpb24gb25seSIsInNvZnR3YXJlIGNvcnBvcmF0aW9uIG9ubHkgYm9ybGFuZCIsImNvcnBvcmF0aW9uIG9ubHkgYm9ybGFuZCBzb2Z0d2FyZSIsIm9ubHkgYm9ybGFuZCBzb2Z0d2FyZSBjb3Jwb3JhdGlvbiIsImJvcmxhbmQgc29mdHdhcmUgY29ycG9yYXRpb24gY2FuIiwic29mdHdhcmUgY29ycG9yYXRpb24gY2FuIG1vZGlmeSIsImNvcnBvcmF0aW9uIGNhbiBtb2RpZnkgdGhlIl19LHsibGljZW5zZVRleHRzIjpbIkphcGFuIE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIExpY2Vuc2UgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmFwYW4gTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbkJ5IHVzaW5nIHRoaXMgZmlsZSwgeW91IGFncmVlIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggYmVsbG93IC5cblxuTElDRU5TRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXG5UaGUgZm9sbG93aW5nIExpY2Vuc2UgVGVybXMgYW5kIENvbmRpdGlvbnMgYXBwbHksIHVubGVzcyBhIGRpZmZlcmVudCBsaWNlbnNlIGlzIG9idGFpbmVkIGZyb20gSmFwYW4gTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIgKFwiIEpQTklDIFwiKSwgYSBKYXBhbmVzZSBhc3NvY2lhdGlvbiwgS29rdXNhaS1Lb3VneW91LUthbmRhIEJsZGcgNkYsIDItMy00IFVjaGktS2FuZGEsIENoaXlvZGEta3UsIFRva3lvIDEwMS0wMDQ3LCBKYXBhbiAuXG5cbiAgIDEuIFVzZSwgTW9kaWZpY2F0aW9uIGFuZCBSZWRpc3RyaWJ1dGlvbiAoaW5jbHVkaW5nIGRpc3RyaWJ1dGlvbiBvZiBhbnkgbW9kaWZpZWQgb3IgZGVyaXZlZCB3b3JrKSBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeSBmb3JtcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIFRlcm1zIGFuZCBDb25kaXRpb25zLlxuXG4gICAyLiBSZWRpc3RyaWJ1dGlvbiBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZXMgYXMgdGhleSBhcHBlYXIgaW4gZWFjaCBzb3VyY2UgY29kZSBmaWxlLCB0aGlzIExpY2Vuc2UgVGVybXMgYW5kIENvbmRpdGlvbnMuXG5cbiAgIDMuIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBDb3B5cmlnaHQgTm90aWNlLCB0aGlzIExpY2Vuc2UgVGVybXMgYW5kIENvbmRpdGlvbnMsIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiBGb3IgdGhlIHB1cnBvc2VzIG9mIGJpbmFyeSBkaXN0cmlidXRpb24gdGhlIFwiQ29weXJpZ2h0IE5vdGljZVwiIHJlZmVycyB0byB0aGUgZm9sbG93aW5nIGxhbmd1YWdlOiBcIkNvcHlyaWdodCAoYykgMjAwMC0yMDAyIEphcGFuIE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cIlxuXG4gICA0LiBUaGUgbmFtZSBvZiBKUE5JQyBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBhcHByb3ZhbCBvZiBKUE5JQyAuXG5cbiAgIDUuIERpc2NsYWltZXIvTGltaXRhdGlvbiBvZiBMaWFiaWxpdHk6IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSlBOSUMgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEpQTklDIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4iXSwibGljZW5zZUlkcyI6WyJKUE5JQyJdLCJrZXl3b3JkcyI6WyJpbmZvcm1hdGlvbiBjZW50ZXIgbGljZW5zZSIsImNlbnRlciBsaWNlbnNlIGNvcHlyaWdodCIsInJpZ2h0cyByZXNlcnZlZCBieSIsInJlc2VydmVkIGJ5IHVzaW5nIiwic2V0IGZvcnRoIGJlbGxvdyIsImZvcnRoIGJlbGxvdyBsaWNlbnNlIiwiYmVsbG93IGxpY2Vuc2UgdGVybXMiLCJjb25kaXRpb25zIHRoZSBmb2xsb3dpbmciLCJ1bmxlc3MgYSBkaWZmZXJlbnQiLCJkaWZmZXJlbnQgbGljZW5zZSBpcyIsIm9idGFpbmVkIGZyb20gamFwYW4iLCJmcm9tIGphcGFuIG5ldHdvcmsiLCJpbmZvcm1hdGlvbiBjZW50ZXIganBuaWMiLCJjZW50ZXIganBuaWMgYSIsImpwbmljIGEgamFwYW5lc2UiLCJhIGphcGFuZXNlIGFzc29jaWF0aW9uIiwiamFwYW5lc2UgYXNzb2NpYXRpb24ga29rdXNhaSIsImFzc29jaWF0aW9uIGtva3VzYWkga291Z3lvdSIsImtva3VzYWkga291Z3lvdSBrYW5kYSIsImtvdWd5b3Uga2FuZGEgYmxkZyIsImthbmRhIGJsZGcgNmYiLCJibGRnIDZmIDIiLCI2ZiAyIDMiLCIzIDQgdWNoaSIsIjQgdWNoaSBrYW5kYSIsInVjaGkga2FuZGEgY2hpeW9kYSIsImthbmRhIGNoaXlvZGEga3UiLCJjaGl5b2RhIGt1IHRva3lvIiwia3UgdG9reW8gMTAxIiwidG9reW8gMTAxIDAwNDciLCIxMDEgMDA0NyBqYXBhbiIsIjAwNDcgamFwYW4gMSIsImphcGFuIDEgdXNlIiwiMSB1c2UgbW9kaWZpY2F0aW9uIiwiaXMgcGVybWl0dGVkIHVuZGVyIiwicGVybWl0dGVkIHVuZGVyIHRoaXMiLCJjb25kaXRpb25zIDIgcmVkaXN0cmlidXRpb24iLCJjb2RlIGZpbGUgdGhpcyIsImZpbGUgdGhpcyBsaWNlbnNlIiwiY29uZGl0aW9ucyAzIHJlZGlzdHJpYnV0aW9uIiwiMyByZWRpc3RyaWJ1dGlvbiBpbiIsIm5vdGljZSB0aGlzIGxpY2Vuc2UiLCJyZXNlcnZlZCA0IHRoZSIsIm5hbWUgb2YganBuaWMiLCJvZiBqcG5pYyBtYXkiLCJqcG5pYyBtYXkgbm90Iiwid3JpdHRlbiBhcHByb3ZhbCBvZiIsImFwcHJvdmFsIG9mIGpwbmljIiwib2YganBuaWMgNSIsImpwbmljIDUgZGlzY2xhaW1lciIsIjUgZGlzY2xhaW1lciBsaW1pdGF0aW9uIiwicHJvdmlkZWQgYnkganBuaWMiLCJieSBqcG5pYyBhcyIsImpwbmljIGFzIGlzIiwiZXZlbnQgc2hhbGwganBuaWMiLCJzaGFsbCBqcG5pYyBiZSIsImpwbmljIGJlIGxpYWJsZSIsIm5ldHdvcmsgaW5mb3JtYXRpb24gY2VudGVyIGxpY2Vuc2UiLCJpbmZvcm1hdGlvbiBjZW50ZXIgbGljZW5zZSBjb3B5cmlnaHQiLCJjZW50ZXIgbGljZW5zZSBjb3B5cmlnaHQgYyIsImFsbCByaWdodHMgcmVzZXJ2ZWQgYnkiLCJyaWdodHMgcmVzZXJ2ZWQgYnkgdXNpbmciLCJyZXNlcnZlZCBieSB1c2luZyB0aGlzIiwiY29uZGl0aW9ucyBzZXQgZm9ydGggYmVsbG93Iiwic2V0IGZvcnRoIGJlbGxvdyBsaWNlbnNlIiwiZm9ydGggYmVsbG93IGxpY2Vuc2UgdGVybXMiLCJiZWxsb3cgbGljZW5zZSB0ZXJtcyBhbmQiLCJhbmQgY29uZGl0aW9ucyB0aGUgZm9sbG93aW5nIiwiY29uZGl0aW9ucyB0aGUgZm9sbG93aW5nIGxpY2Vuc2UiLCJhcHBseSB1bmxlc3MgYSBkaWZmZXJlbnQiLCJ1bmxlc3MgYSBkaWZmZXJlbnQgbGljZW5zZSIsImEgZGlmZmVyZW50IGxpY2Vuc2UgaXMiLCJkaWZmZXJlbnQgbGljZW5zZSBpcyBvYnRhaW5lZCIsImlzIG9idGFpbmVkIGZyb20gamFwYW4iLCJvYnRhaW5lZCBmcm9tIGphcGFuIG5ldHdvcmsiLCJmcm9tIGphcGFuIG5ldHdvcmsgaW5mb3JtYXRpb24iLCJuZXR3b3JrIGluZm9ybWF0aW9uIGNlbnRlciBqcG5pYyIsImluZm9ybWF0aW9uIGNlbnRlciBqcG5pYyBhIiwiY2VudGVyIGpwbmljIGEgamFwYW5lc2UiLCJqcG5pYyBhIGphcGFuZXNlIGFzc29jaWF0aW9uIiwiYSBqYXBhbmVzZSBhc3NvY2lhdGlvbiBrb2t1c2FpIiwiamFwYW5lc2UgYXNzb2NpYXRpb24ga29rdXNhaSBrb3VneW91IiwiYXNzb2NpYXRpb24ga29rdXNhaSBrb3VneW91IGthbmRhIiwia29rdXNhaSBrb3VneW91IGthbmRhIGJsZGciLCJrb3VneW91IGthbmRhIGJsZGcgNmYiLCJrYW5kYSBibGRnIDZmIDIiLCJibGRnIDZmIDIgMyIsIjZmIDIgMyA0IiwiMiAzIDQgdWNoaSIsIjMgNCB1Y2hpIGthbmRhIiwiNCB1Y2hpIGthbmRhIGNoaXlvZGEiLCJ1Y2hpIGthbmRhIGNoaXlvZGEga3UiLCJrYW5kYSBjaGl5b2RhIGt1IHRva3lvIiwiY2hpeW9kYSBrdSB0b2t5byAxMDEiLCJrdSB0b2t5byAxMDEgMDA0NyIsInRva3lvIDEwMSAwMDQ3IGphcGFuIiwiMTAxIDAwNDcgamFwYW4gMSIsIjAwNDcgamFwYW4gMSB1c2UiLCJqYXBhbiAxIHVzZSBtb2RpZmljYXRpb24iLCIxIHVzZSBtb2RpZmljYXRpb24gYW5kIiwib3IgYmluYXJ5IGZvcm1zIGlzIiwiZm9ybXMgaXMgcGVybWl0dGVkIHVuZGVyIiwiaXMgcGVybWl0dGVkIHVuZGVyIHRoaXMiLCJwZXJtaXR0ZWQgdW5kZXIgdGhpcyBsaWNlbnNlIiwidW5kZXIgdGhpcyBsaWNlbnNlIHRlcm1zIiwiYW5kIGNvbmRpdGlvbnMgMiByZWRpc3RyaWJ1dGlvbiIsImNvbmRpdGlvbnMgMiByZWRpc3RyaWJ1dGlvbiBvZiIsInNvdXJjZSBjb2RlIGZpbGUgdGhpcyIsImNvZGUgZmlsZSB0aGlzIGxpY2Vuc2UiLCJmaWxlIHRoaXMgbGljZW5zZSB0ZXJtcyIsImFuZCBjb25kaXRpb25zIDMgcmVkaXN0cmlidXRpb24iLCJjb25kaXRpb25zIDMgcmVkaXN0cmlidXRpb24gaW4iLCIzIHJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSIsImNvcHlyaWdodCBub3RpY2UgdGhpcyBsaWNlbnNlIiwibm90aWNlIHRoaXMgbGljZW5zZSB0ZXJtcyIsImFuZCBjb25kaXRpb25zIGluIHRoZSIsImxhbmd1YWdlIGNvcHlyaWdodCBjIDIwMDAiLCJyaWdodHMgcmVzZXJ2ZWQgNCB0aGUiLCJyZXNlcnZlZCA0IHRoZSBuYW1lIiwidGhlIG5hbWUgb2YganBuaWMiLCJuYW1lIG9mIGpwbmljIG1heSIsIm9mIGpwbmljIG1heSBub3QiLCJqcG5pYyBtYXkgbm90IGJlIiwic3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBhcHByb3ZhbCIsInByaW9yIHdyaXR0ZW4gYXBwcm92YWwgb2YiLCJ3cml0dGVuIGFwcHJvdmFsIG9mIGpwbmljIiwiYXBwcm92YWwgb2YganBuaWMgNSIsIm9mIGpwbmljIDUgZGlzY2xhaW1lciIsImpwbmljIDUgZGlzY2xhaW1lciBsaW1pdGF0aW9uIiwiNSBkaXNjbGFpbWVyIGxpbWl0YXRpb24gb2YiLCJpcyBwcm92aWRlZCBieSBqcG5pYyIsInByb3ZpZGVkIGJ5IGpwbmljIGFzIiwiYnkganBuaWMgYXMgaXMiLCJqcG5pYyBhcyBpcyBhbmQiLCJubyBldmVudCBzaGFsbCBqcG5pYyIsImV2ZW50IHNoYWxsIGpwbmljIGJlIiwic2hhbGwganBuaWMgYmUgbGlhYmxlIiwianBuaWMgYmUgbGlhYmxlIGZvciIsImphcGFuIG5ldHdvcmsgaW5mb3JtYXRpb24gY2VudGVyIGxpY2Vuc2UiLCJuZXR3b3JrIGluZm9ybWF0aW9uIGNlbnRlciBsaWNlbnNlIGNvcHlyaWdodCIsImluZm9ybWF0aW9uIGNlbnRlciBsaWNlbnNlIGNvcHlyaWdodCBjIiwiY2VudGVyIGxpY2Vuc2UgY29weXJpZ2h0IGMgMjAwMCIsImxpY2Vuc2UgY29weXJpZ2h0IGMgMjAwMCAyMDAyIiwiY2VudGVyIGFsbCByaWdodHMgcmVzZXJ2ZWQgYnkiLCJhbGwgcmlnaHRzIHJlc2VydmVkIGJ5IHVzaW5nIiwicmlnaHRzIHJlc2VydmVkIGJ5IHVzaW5nIHRoaXMiLCJyZXNlcnZlZCBieSB1c2luZyB0aGlzIGZpbGUiLCJmaWxlIHlvdSBhZ3JlZSB0byB0aGUiLCJhZ3JlZSB0byB0aGUgdGVybXMgYW5kIiwiYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGJlbGxvdyIsImNvbmRpdGlvbnMgc2V0IGZvcnRoIGJlbGxvdyBsaWNlbnNlIiwic2V0IGZvcnRoIGJlbGxvdyBsaWNlbnNlIHRlcm1zIiwiZm9ydGggYmVsbG93IGxpY2Vuc2UgdGVybXMgYW5kIiwiYmVsbG93IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMiLCJsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoZSIsInRlcm1zIGFuZCBjb25kaXRpb25zIHRoZSBmb2xsb3dpbmciLCJhbmQgY29uZGl0aW9ucyB0aGUgZm9sbG93aW5nIGxpY2Vuc2UiLCJjb25kaXRpb25zIHRoZSBmb2xsb3dpbmcgbGljZW5zZSB0ZXJtcyIsImNvbmRpdGlvbnMgYXBwbHkgdW5sZXNzIGEgZGlmZmVyZW50IiwiYXBwbHkgdW5sZXNzIGEgZGlmZmVyZW50IGxpY2Vuc2UiLCJ1bmxlc3MgYSBkaWZmZXJlbnQgbGljZW5zZSBpcyIsImEgZGlmZmVyZW50IGxpY2Vuc2UgaXMgb2J0YWluZWQiLCJkaWZmZXJlbnQgbGljZW5zZSBpcyBvYnRhaW5lZCBmcm9tIiwibGljZW5zZSBpcyBvYnRhaW5lZCBmcm9tIGphcGFuIiwiaXMgb2J0YWluZWQgZnJvbSBqYXBhbiBuZXR3b3JrIiwib2J0YWluZWQgZnJvbSBqYXBhbiBuZXR3b3JrIGluZm9ybWF0aW9uIiwiZnJvbSBqYXBhbiBuZXR3b3JrIGluZm9ybWF0aW9uIGNlbnRlciIsImphcGFuIG5ldHdvcmsgaW5mb3JtYXRpb24gY2VudGVyIGpwbmljIiwibmV0d29yayBpbmZvcm1hdGlvbiBjZW50ZXIganBuaWMgYSIsImluZm9ybWF0aW9uIGNlbnRlciBqcG5pYyBhIGphcGFuZXNlIiwiY2VudGVyIGpwbmljIGEgamFwYW5lc2UgYXNzb2NpYXRpb24iLCJqcG5pYyBhIGphcGFuZXNlIGFzc29jaWF0aW9uIGtva3VzYWkiLCJhIGphcGFuZXNlIGFzc29jaWF0aW9uIGtva3VzYWkga291Z3lvdSIsImphcGFuZXNlIGFzc29jaWF0aW9uIGtva3VzYWkga291Z3lvdSBrYW5kYSIsImFzc29jaWF0aW9uIGtva3VzYWkga291Z3lvdSBrYW5kYSBibGRnIiwia29rdXNhaSBrb3VneW91IGthbmRhIGJsZGcgNmYiLCJrb3VneW91IGthbmRhIGJsZGcgNmYgMiIsImthbmRhIGJsZGcgNmYgMiAzIiwiYmxkZyA2ZiAyIDMgNCIsIjZmIDIgMyA0IHVjaGkiLCIyIDMgNCB1Y2hpIGthbmRhIiwiMyA0IHVjaGkga2FuZGEgY2hpeW9kYSIsIjQgdWNoaSBrYW5kYSBjaGl5b2RhIGt1IiwidWNoaSBrYW5kYSBjaGl5b2RhIGt1IHRva3lvIiwia2FuZGEgY2hpeW9kYSBrdSB0b2t5byAxMDEiLCJjaGl5b2RhIGt1IHRva3lvIDEwMSAwMDQ3Iiwia3UgdG9reW8gMTAxIDAwNDcgamFwYW4iLCJ0b2t5byAxMDEgMDA0NyBqYXBhbiAxIiwiMTAxIDAwNDcgamFwYW4gMSB1c2UiLCIwMDQ3IGphcGFuIDEgdXNlIG1vZGlmaWNhdGlvbiIsImphcGFuIDEgdXNlIG1vZGlmaWNhdGlvbiBhbmQiLCIxIHVzZSBtb2RpZmljYXRpb24gYW5kIHJlZGlzdHJpYnV0aW9uIiwid29yayBpbiBzb3VyY2UgYW5kIG9yIiwiYW5kIG9yIGJpbmFyeSBmb3JtcyBpcyIsIm9yIGJpbmFyeSBmb3JtcyBpcyBwZXJtaXR0ZWQiLCJiaW5hcnkgZm9ybXMgaXMgcGVybWl0dGVkIHVuZGVyIiwiZm9ybXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoaXMiLCJpcyBwZXJtaXR0ZWQgdW5kZXIgdGhpcyBsaWNlbnNlIiwicGVybWl0dGVkIHVuZGVyIHRoaXMgbGljZW5zZSB0ZXJtcyIsInVuZGVyIHRoaXMgbGljZW5zZSB0ZXJtcyBhbmQiXX0seyJsaWNlbnNlVGV4dHMiOlsiSlNPTiBMaWNlbnNlIENvcHlyaWdodCAoYykgMjAwMiBKU09OLm9yZ1xuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVGhlIFNvZnR3YXJlIHNoYWxsIGJlIHVzZWQgZm9yIEdvb2QsIG5vdCBFdmlsLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4iXSwibGljZW5zZUlkcyI6WyJKU09OIl0sImtleXdvcmRzIjpbImpzb24gbGljZW5zZSBjb3B5cmlnaHQiLCJjIDIwMDIganNvbiIsIjIwMDIganNvbiBvcmciLCJqc29uIG9yZyBwZXJtaXNzaW9uIiwib3JnIHBlcm1pc3Npb24gaXMiLCJ1c2VkIGZvciBnb29kIiwiZm9yIGdvb2Qgbm90IiwiZ29vZCBub3QgZXZpbCIsIm5vdCBldmlsIHRoZSIsImV2aWwgdGhlIHNvZnR3YXJlIiwianNvbiBsaWNlbnNlIGNvcHlyaWdodCBjIiwiY29weXJpZ2h0IGMgMjAwMiBqc29uIiwiYyAyMDAyIGpzb24gb3JnIiwiMjAwMiBqc29uIG9yZyBwZXJtaXNzaW9uIiwianNvbiBvcmcgcGVybWlzc2lvbiBpcyIsIm9yZyBwZXJtaXNzaW9uIGlzIGhlcmVieSIsInNvZnR3YXJlIHRoZSBzb2Z0d2FyZSBzaGFsbCIsInNvZnR3YXJlIHNoYWxsIGJlIHVzZWQiLCJiZSB1c2VkIGZvciBnb29kIiwidXNlZCBmb3IgZ29vZCBub3QiLCJmb3IgZ29vZCBub3QgZXZpbCIsImdvb2Qgbm90IGV2aWwgdGhlIiwibm90IGV2aWwgdGhlIHNvZnR3YXJlIiwiZXZpbCB0aGUgc29mdHdhcmUgaXMiLCJqc29uIGxpY2Vuc2UgY29weXJpZ2h0IGMgMjAwMiIsImxpY2Vuc2UgY29weXJpZ2h0IGMgMjAwMiBqc29uIiwiY29weXJpZ2h0IGMgMjAwMiBqc29uIG9yZyIsImMgMjAwMiBqc29uIG9yZyBwZXJtaXNzaW9uIiwiMjAwMiBqc29uIG9yZyBwZXJtaXNzaW9uIGlzIiwianNvbiBvcmcgcGVybWlzc2lvbiBpcyBoZXJlYnkiLCJvcmcgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCIsInRoZSBzb2Z0d2FyZSB0aGUgc29mdHdhcmUgc2hhbGwiLCJzb2Z0d2FyZSB0aGUgc29mdHdhcmUgc2hhbGwgYmUiLCJ0aGUgc29mdHdhcmUgc2hhbGwgYmUgdXNlZCIsInNvZnR3YXJlIHNoYWxsIGJlIHVzZWQgZm9yIiwic2hhbGwgYmUgdXNlZCBmb3IgZ29vZCIsImJlIHVzZWQgZm9yIGdvb2Qgbm90IiwidXNlZCBmb3IgZ29vZCBub3QgZXZpbCIsImZvciBnb29kIG5vdCBldmlsIHRoZSIsImdvb2Qgbm90IGV2aWwgdGhlIHNvZnR3YXJlIiwibm90IGV2aWwgdGhlIHNvZnR3YXJlIGlzIiwiZXZpbCB0aGUgc29mdHdhcmUgaXMgcHJvdmlkZWQiXX0seyJsaWNlbnNlVGV4dHMiOlsiSmFzUGVyIExpY2Vuc2UgVmVyc2lvbiAyLjAgQ29weXJpZ2h0IChjKSAyMDAxLTIwMDYgTWljaGFlbCBEYXZpZCBBZGFtc1xuXG5Db3B5cmlnaHQgKGMpIDE5OTktMjAwMCBJbWFnZSBQb3dlciwgSW5jLlxuXG5Db3B5cmlnaHQgKGMpIDE5OTktMjAwMCBUaGUgVW5pdmVyc2l0eSBvZiBCcml0aXNoIENvbHVtYmlhXG5cbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uICh0aGUgXCJVc2VyXCIpIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgIDEuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlcyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAod2hpY2ggaW5jbHVkZXMgdGhlIGRpc2NsYWltZXIgYmVsb3cpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAyLiBUaGUgbmFtZSBvZiBhIGNvcHlyaWdodCBob2xkZXIgc2hhbGwgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBUSEUgU09GVFdBUkUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuIE5PIEFTU1VSQU5DRVMgQVJFIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBUSEFUIFRIRSBTT0ZUV0FSRSBET0VTIE5PVCBJTkZSSU5HRSBUSEUgUEFURU5UIE9SIE9USEVSIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMgT0YgQU5ZIE9USEVSIEVOVElUWS4gRUFDSCBDT1BZUklHSFQgSE9MREVSIERJU0NMQUlNUyBBTlkgTElBQklMSVRZIFRPIFRIRSBVU0VSIEZPUiBDTEFJTVMgQlJPVUdIVCBCWSBBTlkgT1RIRVIgRU5USVRZIEJBU0VEIE9OIElORlJJTkdFTUVOVCBPRiBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTIE9SIE9USEVSV0lTRS4gQVMgQSBDT05ESVRJT04gVE8gRVhFUkNJU0lORyBUSEUgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFQUNIIFVTRVIgSEVSRUJZIEFTU1VNRVMgU09MRSBSRVNQT05TSUJJTElUWSBUTyBTRUNVUkUgQU5ZIE9USEVSIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMgTkVFREVELCBJRiBBTlkuIFRIRSBTT0ZUV0FSRSBJUyBOT1QgRkFVTFQtVE9MRVJBTlQgQU5EIElTIE5PVCBJTlRFTkRFRCBGT1IgVVNFIElOIE1JU1NJT04tQ1JJVElDQUwgU1lTVEVNUywgU1VDSCBBUyBUSE9TRSBVU0VEIElOIFRIRSBPUEVSQVRJT04gT0YgTlVDTEVBUiBGQUNJTElUSUVTLCBBSVJDUkFGVCBOQVZJR0FUSU9OIE9SIENPTU1VTklDQVRJT04gU1lTVEVNUywgQUlSIFRSQUZGSUMgQ09OVFJPTCBTWVNURU1TLCBESVJFQ1QgTElGRSBTVVBQT1JUIE1BQ0hJTkVTLCBPUiBXRUFQT05TIFNZU1RFTVMsIElOIFdISUNIIFRIRSBGQUlMVVJFIE9GIFRIRSBTT0ZUV0FSRSBPUiBTWVNURU0gQ09VTEQgTEVBRCBESVJFQ1RMWSBUTyBERUFUSCwgUEVSU09OQUwgSU5KVVJZLCBPUiBTRVZFUkUgUEhZU0lDQUwgT1IgRU5WSVJPTk1FTlRBTCBEQU1BR0UgKFwiSElHSCBSSVNLIEFDVElWSVRJRVNcIikuIFRIRSBDT1BZUklHSFQgSE9MREVSUyBTUEVDSUZJQ0FMTFkgRElTQ0xBSU0gQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWSBPRiBGSVRORVNTIEZPUiBISUdIIFJJU0sgQUNUSVZJVElFUy4iXSwibGljZW5zZUlkcyI6WyJKYXNQZXItMi4wIl0sImtleXdvcmRzIjpbImphc3BlciBsaWNlbnNlIHZlcnNpb24iLCJjIDIwMDEgMjAwNiIsIjIwMDEgMjAwNiBtaWNoYWVsIiwiMjAwNiBtaWNoYWVsIGRhdmlkIiwibWljaGFlbCBkYXZpZCBhZGFtcyIsImRhdmlkIGFkYW1zIGNvcHlyaWdodCIsImFkYW1zIGNvcHlyaWdodCBjIiwiMTk5OSAyMDAwIGltYWdlIiwiMjAwMCBpbWFnZSBwb3dlciIsImltYWdlIHBvd2VyIGluYyIsInBvd2VyIGluYyBjb3B5cmlnaHQiLCIyMDAwIHRoZSB1bml2ZXJzaXR5IiwidW5pdmVyc2l0eSBvZiBicml0aXNoIiwib2YgYnJpdGlzaCBjb2x1bWJpYSIsImJyaXRpc2ggY29sdW1iaWEgYWxsIiwiY29sdW1iaWEgYWxsIHJpZ2h0cyIsImFueSBwZXJzb24gdGhlIiwicGVyc29uIHRoZSB1c2VyIiwidGhlIHVzZXIgb2J0YWluaW5nIiwidXNlciBvYnRhaW5pbmcgYSIsIjEgdGhlIGFib3ZlIiwicGVybWlzc2lvbiBub3RpY2Ugd2hpY2giLCJub3RpY2Ugd2hpY2ggaW5jbHVkZXMiLCJpbmNsdWRlcyB0aGUgZGlzY2xhaW1lciIsImRpc2NsYWltZXIgYmVsb3cgc2hhbGwiLCIyIHRoZSBuYW1lIiwicGVybWlzc2lvbiB0aGlzIGRpc2NsYWltZXIiLCJ0aGlzIGRpc2NsYWltZXIgdGhlIiwic29mdHdhcmUgbm8gYXNzdXJhbmNlcyIsImNvcHlyaWdodCBob2xkZXJzIHRoYXQiLCJob2xkZXJzIHRoYXQgdGhlIiwiZW50aXR5IGVhY2ggY29weXJpZ2h0IiwiaG9sZGVyIGRpc2NsYWltcyBhbnkiLCJ0aGUgdXNlciBmb3IiLCJ1c2VyIGZvciBjbGFpbXMiLCJoZXJldW5kZXIgZWFjaCB1c2VyIiwiZWFjaCB1c2VyIGhlcmVieSIsInVzZXIgaGVyZWJ5IGFzc3VtZXMiLCJhbnkgdGhlIHNvZnR3YXJlIiwidXNlIGluIG1pc3Npb24iLCJpbiBtaXNzaW9uIGNyaXRpY2FsIiwibWlzc2lvbiBjcml0aWNhbCBzeXN0ZW1zIiwiY3JpdGljYWwgc3lzdGVtcyBzdWNoIiwiYXMgdGhvc2UgdXNlZCIsInRob3NlIHVzZWQgaW4iLCJuYXZpZ2F0aW9uIG9yIGNvbW11bmljYXRpb24iLCJvciBjb21tdW5pY2F0aW9uIHN5c3RlbXMiLCJjb21tdW5pY2F0aW9uIHN5c3RlbXMgYWlyIiwidHJhZmZpYyBjb250cm9sIHN5c3RlbXMiLCJjb250cm9sIHN5c3RlbXMgZGlyZWN0Iiwic3lzdGVtcyBkaXJlY3QgbGlmZSIsIm9yIHN5c3RlbSBjb3VsZCIsInN5c3RlbSBjb3VsZCBsZWFkIiwiYWN0aXZpdGllcyB0aGUgY29weXJpZ2h0IiwiY29weXJpZ2h0IGhvbGRlcnMgc3BlY2lmaWNhbGx5IiwiaG9sZGVycyBzcGVjaWZpY2FsbHkgZGlzY2xhaW0iLCJqYXNwZXIgbGljZW5zZSB2ZXJzaW9uIDIiLCJ2ZXJzaW9uIDIgMCBjb3B5cmlnaHQiLCIwIGNvcHlyaWdodCBjIDIwMDEiLCJjb3B5cmlnaHQgYyAyMDAxIDIwMDYiLCJjIDIwMDEgMjAwNiBtaWNoYWVsIiwiMjAwMSAyMDA2IG1pY2hhZWwgZGF2aWQiLCIyMDA2IG1pY2hhZWwgZGF2aWQgYWRhbXMiLCJtaWNoYWVsIGRhdmlkIGFkYW1zIGNvcHlyaWdodCIsImRhdmlkIGFkYW1zIGNvcHlyaWdodCBjIiwiYWRhbXMgY29weXJpZ2h0IGMgMTk5OSIsImMgMTk5OSAyMDAwIGltYWdlIiwiMTk5OSAyMDAwIGltYWdlIHBvd2VyIiwiMjAwMCBpbWFnZSBwb3dlciBpbmMiLCJpbWFnZSBwb3dlciBpbmMgY29weXJpZ2h0IiwicG93ZXIgaW5jIGNvcHlyaWdodCBjIiwiaW5jIGNvcHlyaWdodCBjIDE5OTkiLCJjIDE5OTkgMjAwMCB0aGUiLCIxOTk5IDIwMDAgdGhlIHVuaXZlcnNpdHkiLCIyMDAwIHRoZSB1bml2ZXJzaXR5IG9mIiwidGhlIHVuaXZlcnNpdHkgb2YgYnJpdGlzaCIsInVuaXZlcnNpdHkgb2YgYnJpdGlzaCBjb2x1bWJpYSIsIm9mIGJyaXRpc2ggY29sdW1iaWEgYWxsIiwiYnJpdGlzaCBjb2x1bWJpYSBhbGwgcmlnaHRzIiwiY29sdW1iaWEgYWxsIHJpZ2h0cyByZXNlcnZlZCIsInRvIGFueSBwZXJzb24gdGhlIiwiYW55IHBlcnNvbiB0aGUgdXNlciIsInBlcnNvbiB0aGUgdXNlciBvYnRhaW5pbmciLCJ0aGUgdXNlciBvYnRhaW5pbmcgYSIsInVzZXIgb2J0YWluaW5nIGEgY29weSIsImNvbmRpdGlvbnMgMSB0aGUgYWJvdmUiLCIxIHRoZSBhYm92ZSBjb3B5cmlnaHQiLCJ0aGlzIHBlcm1pc3Npb24gbm90aWNlIHdoaWNoIiwicGVybWlzc2lvbiBub3RpY2Ugd2hpY2ggaW5jbHVkZXMiLCJub3RpY2Ugd2hpY2ggaW5jbHVkZXMgdGhlIiwid2hpY2ggaW5jbHVkZXMgdGhlIGRpc2NsYWltZXIiLCJpbmNsdWRlcyB0aGUgZGlzY2xhaW1lciBiZWxvdyIsInRoZSBkaXNjbGFpbWVyIGJlbG93IHNoYWxsIiwiZGlzY2xhaW1lciBiZWxvdyBzaGFsbCBiZSIsImJlbG93IHNoYWxsIGJlIGluY2x1ZGVkIiwib2YgdGhlIHNvZnR3YXJlIDIiLCJzb2Z0d2FyZSAyIHRoZSBuYW1lIiwiMiB0aGUgbmFtZSBvZiIsImZyb20gdGhlIHNvZnR3YXJlIHdpdGhvdXQiLCJ3cml0dGVuIHBlcm1pc3Npb24gdGhpcyBkaXNjbGFpbWVyIiwicGVybWlzc2lvbiB0aGlzIGRpc2NsYWltZXIgb2YiLCJubyB1c2Ugb2YgdGhlIiwidGhlIHNvZnR3YXJlIGlzIGF1dGhvcml6ZWQiLCJ1bmRlciB0aGlzIGRpc2NsYWltZXIgdGhlIiwidGhpcyBkaXNjbGFpbWVyIHRoZSBzb2Z0d2FyZSIsImhvbGRlcnMgYXMgaXMgd2l0aG91dCIsInRoaXMgc29mdHdhcmUgbm8gYXNzdXJhbmNlcyIsInNvZnR3YXJlIG5vIGFzc3VyYW5jZXMgYXJlIiwidGhlIGNvcHlyaWdodCBob2xkZXJzIHRoYXQiLCJjb3B5cmlnaHQgaG9sZGVycyB0aGF0IHRoZSIsImhvbGRlcnMgdGhhdCB0aGUgc29mdHdhcmUiLCJvdGhlciBlbnRpdHkgZWFjaCBjb3B5cmlnaHQiLCJlbnRpdHkgZWFjaCBjb3B5cmlnaHQgaG9sZGVyIiwiZWFjaCBjb3B5cmlnaHQgaG9sZGVyIGRpc2NsYWltcyIsImNvcHlyaWdodCBob2xkZXIgZGlzY2xhaW1zIGFueSIsImhvbGRlciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSIsImFueSBsaWFiaWxpdHkgdG8gdGhlIiwibGlhYmlsaXR5IHRvIHRoZSB1c2VyIiwidG8gdGhlIHVzZXIgZm9yIiwidGhlIHVzZXIgZm9yIGNsYWltcyIsInVzZXIgZm9yIGNsYWltcyBicm91Z2h0IiwiZXhlcmNpc2luZyB0aGUgcmlnaHRzIGdyYW50ZWQiLCJyaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgZWFjaCIsImdyYW50ZWQgaGVyZXVuZGVyIGVhY2ggdXNlciIsImhlcmV1bmRlciBlYWNoIHVzZXIgaGVyZWJ5IiwiZWFjaCB1c2VyIGhlcmVieSBhc3N1bWVzIiwidXNlciBoZXJlYnkgYXNzdW1lcyBzb2xlIiwibmVlZGVkIGlmIGFueSB0aGUiLCJpZiBhbnkgdGhlIHNvZnR3YXJlIiwiYW55IHRoZSBzb2Z0d2FyZSBpcyIsImFuZCBpcyBub3QgaW50ZW5kZWQiLCJmb3IgdXNlIGluIG1pc3Npb24iLCJ1c2UgaW4gbWlzc2lvbiBjcml0aWNhbCIsImluIG1pc3Npb24gY3JpdGljYWwgc3lzdGVtcyIsIm1pc3Npb24gY3JpdGljYWwgc3lzdGVtcyBzdWNoIiwiY3JpdGljYWwgc3lzdGVtcyBzdWNoIGFzIiwic3lzdGVtcyBzdWNoIGFzIHRob3NlIiwic3VjaCBhcyB0aG9zZSB1c2VkIiwiYXMgdGhvc2UgdXNlZCBpbiIsInRob3NlIHVzZWQgaW4gdGhlIiwidXNlZCBpbiB0aGUgb3BlcmF0aW9uIiwiYWlyY3JhZnQgbmF2aWdhdGlvbiBvciBjb21tdW5pY2F0aW9uIiwibmF2aWdhdGlvbiBvciBjb21tdW5pY2F0aW9uIHN5c3RlbXMiLCJvciBjb21tdW5pY2F0aW9uIHN5c3RlbXMgYWlyIiwiY29tbXVuaWNhdGlvbiBzeXN0ZW1zIGFpciB0cmFmZmljIiwiYWlyIHRyYWZmaWMgY29udHJvbCBzeXN0ZW1zIiwidHJhZmZpYyBjb250cm9sIHN5c3RlbXMgZGlyZWN0IiwiY29udHJvbCBzeXN0ZW1zIGRpcmVjdCBsaWZlIiwic3lzdGVtcyBkaXJlY3QgbGlmZSBzdXBwb3J0IiwiZmFpbHVyZSBvZiB0aGUgc29mdHdhcmUiLCJ0aGUgc29mdHdhcmUgb3Igc3lzdGVtIiwic29mdHdhcmUgb3Igc3lzdGVtIGNvdWxkIiwib3Igc3lzdGVtIGNvdWxkIGxlYWQiLCJzeXN0ZW0gY291bGQgbGVhZCBkaXJlY3RseSIsInJpc2sgYWN0aXZpdGllcyB0aGUgY29weXJpZ2h0IiwiYWN0aXZpdGllcyB0aGUgY29weXJpZ2h0IGhvbGRlcnMiLCJ0aGUgY29weXJpZ2h0IGhvbGRlcnMgc3BlY2lmaWNhbGx5IiwiY29weXJpZ2h0IGhvbGRlcnMgc3BlY2lmaWNhbGx5IGRpc2NsYWltIiwiaG9sZGVycyBzcGVjaWZpY2FsbHkgZGlzY2xhaW0gYW55IiwiamFzcGVyIGxpY2Vuc2UgdmVyc2lvbiAyIDAiLCJsaWNlbnNlIHZlcnNpb24gMiAwIGNvcHlyaWdodCIsInZlcnNpb24gMiAwIGNvcHlyaWdodCBjIiwiMiAwIGNvcHlyaWdodCBjIDIwMDEiLCIwIGNvcHlyaWdodCBjIDIwMDEgMjAwNiIsImNvcHlyaWdodCBjIDIwMDEgMjAwNiBtaWNoYWVsIiwiYyAyMDAxIDIwMDYgbWljaGFlbCBkYXZpZCIsIjIwMDEgMjAwNiBtaWNoYWVsIGRhdmlkIGFkYW1zIiwiMjAwNiBtaWNoYWVsIGRhdmlkIGFkYW1zIGNvcHlyaWdodCIsIm1pY2hhZWwgZGF2aWQgYWRhbXMgY29weXJpZ2h0IGMiLCJkYXZpZCBhZGFtcyBjb3B5cmlnaHQgYyAxOTk5IiwiYWRhbXMgY29weXJpZ2h0IGMgMTk5OSAyMDAwIiwiY29weXJpZ2h0IGMgMTk5OSAyMDAwIGltYWdlIiwiYyAxOTk5IDIwMDAgaW1hZ2UgcG93ZXIiLCIxOTk5IDIwMDAgaW1hZ2UgcG93ZXIgaW5jIiwiMjAwMCBpbWFnZSBwb3dlciBpbmMgY29weXJpZ2h0IiwiaW1hZ2UgcG93ZXIgaW5jIGNvcHlyaWdodCBjIiwicG93ZXIgaW5jIGNvcHlyaWdodCBjIDE5OTkiLCJpbmMgY29weXJpZ2h0IGMgMTk5OSAyMDAwIiwiY29weXJpZ2h0IGMgMTk5OSAyMDAwIHRoZSIsImMgMTk5OSAyMDAwIHRoZSB1bml2ZXJzaXR5IiwiMTk5OSAyMDAwIHRoZSB1bml2ZXJzaXR5IG9mIiwiMjAwMCB0aGUgdW5pdmVyc2l0eSBvZiBicml0aXNoIiwidGhlIHVuaXZlcnNpdHkgb2YgYnJpdGlzaCBjb2x1bWJpYSIsInVuaXZlcnNpdHkgb2YgYnJpdGlzaCBjb2x1bWJpYSBhbGwiLCJvZiBicml0aXNoIGNvbHVtYmlhIGFsbCByaWdodHMiLCJicml0aXNoIGNvbHVtYmlhIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJjb2x1bWJpYSBhbGwgcmlnaHRzIHJlc2VydmVkIHBlcm1pc3Npb24iLCJjaGFyZ2UgdG8gYW55IHBlcnNvbiB0aGUiLCJ0byBhbnkgcGVyc29uIHRoZSB1c2VyIiwiYW55IHBlcnNvbiB0aGUgdXNlciBvYnRhaW5pbmciLCJwZXJzb24gdGhlIHVzZXIgb2J0YWluaW5nIGEiLCJ0aGUgdXNlciBvYnRhaW5pbmcgYSBjb3B5IiwidXNlciBvYnRhaW5pbmcgYSBjb3B5IG9mIiwiZm9sbG93aW5nIGNvbmRpdGlvbnMgMSB0aGUgYWJvdmUiLCJjb25kaXRpb25zIDEgdGhlIGFib3ZlIGNvcHlyaWdodCIsIjEgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2VzIiwiYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugd2hpY2giLCJ0aGlzIHBlcm1pc3Npb24gbm90aWNlIHdoaWNoIGluY2x1ZGVzIiwicGVybWlzc2lvbiBub3RpY2Ugd2hpY2ggaW5jbHVkZXMgdGhlIiwibm90aWNlIHdoaWNoIGluY2x1ZGVzIHRoZSBkaXNjbGFpbWVyIl19LHsibGljZW5zZVRleHRzIjpbIkxpY2VuY2UgQXJ0IExpYnJlXG5cblsgQ29weWxlZnQgQXR0aXR1ZGUgXVxuXG5WZXJzaW9uIDEuMlxuXG5QcsOpYW1idWxlIDpcblxuQXZlYyBjZXR0ZSBMaWNlbmNlIEFydCBMaWJyZSwgbCdhdXRvcmlzYXRpb24gZXN0IGRvbm7DqWUgZGUgY29waWVyLCBkZSBkaWZmdXNlciBldCBkZSB0cmFuc2Zvcm1lciBsaWJyZW1lbnQgbGVzIG9ldXZyZXMgZGFucyBsZSByZXNwZWN0IGRlcyBkcm9pdHMgZGUgbCdhdXRldXIuXG5cbkxvaW4gZCdpZ25vcmVyIGxlcyBkcm9pdHMgZGUgbCdhdXRldXIsIGNldHRlIGxpY2VuY2UgbGVzIHJlY29ubmHDrnQgZXQgbGVzIHByb3TDqGdlLiBFbGxlIGVuIHJlZm9ybXVsZSBsZSBwcmluY2lwZSBlbiBwZXJtZXR0YW50IGF1IHB1YmxpYyBkZSBmYWlyZSB1biB1c2FnZSBjcsOpYXRpZiBkZXMgb2V1dnJlcyBkJ2FydC5cblxuQWxvcnMgcXVlIGwndXNhZ2UgZmFpdCBkdSBkcm9pdCBkZSBsYSBwcm9wcmnDqXTDqSBsaXR0w6lyYWlyZSBldCBhcnRpc3RpcXVlIGNvbmR1aXQgw6AgcmVzdHJlaW5kcmUgbCdhY2PDqHMgZHUgcHVibGljIMOgIGwnb2V1dnJlLCBsYSBMaWNlbmNlIEFydCBMaWJyZSBhIHBvdXIgYnV0IGRlIGxlIGZhdm9yaXNlci5cblxuTCdpbnRlbnRpb24gZXN0IGQnb3V2cmlyIGwnYWNjw6hzIGV0IGQnYXV0b3Jpc2VyIGwndXRpbGlzYXRpb24gZGVzIHJlc3NvdXJjZXMgZCd1bmUgb2V1dnJlIHBhciBsZSBwbHVzIGdyYW5kIG5vbWJyZS4gRW4gYXZvaXIgam91aXNzYW5jZSBwb3VyIGVuIG11bHRpcGxpZXIgbGVzIHLDqWpvdWlzc2FuY2VzLCBjcsOpZXIgZGUgbm91dmVsbGVzIGNvbmRpdGlvbnMgZGUgY3LDqWF0aW9uIHBvdXIgYW1wbGlmaWVyIGxlcyBwb3NzaWJpbGl0w6lzIGRlIGNyw6lhdGlvbi4gRGFucyBsZSByZXNwZWN0IGRlcyBhdXRldXJzIGF2ZWMgbGEgcmVjb25uYWlzc2FuY2UgZXQgbGEgZMOpZmVuc2UgZGUgbGV1ciBkcm9pdCBtb3JhbC5cblxuRW4gZWZmZXQsIGF2ZWMgbGEgdmVudWUgZHUgbnVtw6lyaXF1ZSwgbCdpbnZlbnRpb24gZGUgbCdpbnRlcm5ldCBldCBkZXMgbG9naWNpZWxzIGxpYnJlcywgdW4gbm91dmVhdSBtb2RlIGRlIGNyw6lhdGlvbiBldCBkZSBwcm9kdWN0aW9uIGVzdCBhcHBhcnUuIElsIGVzdCBhdXNzaSBsJ2FtcGxpZmljYXRpb24gZGUgY2UgcXVpIGEgw6l0w6kgZXhww6lyaW1lbnTDqSBwYXIgbm9tYnJlIGQnYXJ0aXN0ZXMgY29udGVtcG9yYWlucy5cblxuTGUgc2F2b2lyIGV0IGxhIGNyw6lhdGlvbiBzb250IGRlcyByZXNzb3VyY2VzIHF1aSBkb2l2ZW50IGRlbWV1cmVyIGxpYnJlcyBwb3VyIMOqdHJlIGVuY29yZSB2w6lyaXRhYmxlbWVudCBkdSBzYXZvaXIgZXQgZGUgbGEgY3LDqWF0aW9uLiBDJ2VzdCDDoCBkaXJlIHJlc3RlciB1bmUgcmVjaGVyY2hlIGZvbmRhbWVudGFsZSBxdWkgbmUgc29pdCBwYXMgZGlyZWN0ZW1lbnQgbGnDqWUgw6AgdW5lIGFwcGxpY2F0aW9uIGNvbmNyw6h0ZS4gQ3LDqWVyIGMnZXN0IGTDqWNvdXZyaXIgbCdpbmNvbm51LCBjJ2VzdCBpbnZlbnRlciBsZSByw6llbCBhdmFudCB0b3V0IHNvdWNpIGRlIHLDqWFsaXNtZS5cblxuQWluc2ksIGwnb2JqZXQgZGUgbCdhcnQgbidlc3QgcGFzIGNvbmZvbmR1IGF2ZWMgbCdvYmpldCBkJ2FydCBmaW5pIGV0IGTDqWZpbmkgY29tbWUgdGVsLlxuXG5DJ2VzdCBsYSByYWlzb24gZXNzZW50aWVsbGUgZGUgY2V0dGUgTGljZW5jZSBBcnQgTGlicmUgOiBwcm9tb3V2b2lyIGV0IHByb3TDqWdlciBkZXMgcHJhdGlxdWVzIGFydGlzdGlxdWVzIGxpYsOpcsOpZXMgZGVzIHNldWxlcyByw6hnbGVzIGRlIGwnw6ljb25vbWllIGRlIG1hcmNow6kuXG5cbkTDiUZJTklUSU9OU1xuXG7igJMgTCdvZXV2cmUgOlxuXG5pbCBzJ2FnaXQgZCd1bmUgb2V1dnJlIGNvbW11bmUgcXVpIGNvbXByZW5kIGwnb2V1dnJlIG9yaWdpbmVsbGUgYWluc2kgcXVlIHRvdXRlcyBsZXMgY29udHJpYnV0aW9ucyBwb3N0w6lyaWV1cmVzIChsZXMgb3JpZ2luYXV4IGNvbnPDqXF1ZW50cyBldCBsZXMgY29waWVzKS4gRWxsZSBlc3QgY3LDqcOpZSDDoCBsJ2luaXRpYXRpdmUgZGUgbCdhdXRldXIgb3JpZ2luZWwgcXVpIHBhciBjZXR0ZSBsaWNlbmNlIGTDqWZpbml0IGxlcyBjb25kaXRpb25zIHNlbG9uIGxlc3F1ZWxsZXMgbGVzIGNvbnRyaWJ1dGlvbnMgc29udCBmYWl0ZXMuXG5cbuKAkyBMJ29ldXZyZSBvcmlnaW5lbGxlIDpcblxuYydlc3Qtw6AtZGlyZSBsJ29ldXZyZSBjcsOpw6llIHBhciBsJ2luaXRpYXRldXIgZGUgbCdvZXV2cmUgY29tbXVuZSBkb250IGxlcyBjb3BpZXMgdm9udCDDqnRyZSBtb2RpZmnDqWVzIHBhciBxdWkgbGUgc291aGFpdGUuXG5cbuKAkyBMZXMgb2V1dnJlcyBjb25zw6lxdWVudGVzIDpcblxuYydlc3Qtw6AtZGlyZSBsZXMgcHJvcG9zaXRpb25zIGRlcyBhdXRldXJzIHF1aSBjb250cmlidWVudCDDoCBsYSBmb3JtYXRpb24gZGUgbCdvZXV2cmUgZW4gZmFpc2FudCB1c2FnZSBkZXMgZHJvaXRzIGRlIHJlcHJvZHVjdGlvbiwgZGUgZGlmZnVzaW9uIGV0IGRlIG1vZGlmaWNhdGlvbiBxdWUgbGV1ciBjb25mw6hyZSBsYSBsaWNlbmNlLlxuXG7igJMgT3JpZ2luYWwgKHNvdXJjZSBvdSByZXNzb3VyY2UgZGUgbCdvZXV2cmUpIDpcblxuZXhlbXBsYWlyZSBkYXTDqSBkZSBsJ29ldXZyZSwgZGUgc2EgZMOpZmluaXRpb24sIGRlIHNhIHBhcnRpdGlvbiBvdSBkZSBzb24gcHJvZ3JhbW1lIHF1ZSBsJ2F1dGV1ciBwcsOpc2VudGUgY29tbWUgcsOpZsOpcmVuY2UgcG91ciB0b3V0ZXMgYWN0dWFsaXNhdGlvbnMsIGludGVycHLDqXRhdGlvbnMsIGNvcGllcyBvdSByZXByb2R1Y3Rpb25zIHVsdMOpcmlldXJlcy5cblxu4oCTIENvcGllIDpcblxudG91dGUgcmVwcm9kdWN0aW9uIGQndW4gb3JpZ2luYWwgYXUgc2VucyBkZSBjZXR0ZSBsaWNlbmNlLlxuXG7igJMgQXV0ZXVyIGRlIGwnb2V1dnJlIG9yaWdpbmVsbGUgOlxuXG5jJ2VzdCBsYSBwZXJzb25uZSBxdWkgYSBjcsOpw6kgbCdvZXV2cmUgw6AgbCdvcmlnaW5lIGQndW5lIGFyYm9yZXNjZW5jZSBkZSBjZXR0ZSBvZXV2cmUgbW9kaWZpw6llLiBQYXIgY2V0dGUgbGljZW5jZSwgbCdhdXRldXIgZMOpdGVybWluZSBsZXMgY29uZGl0aW9ucyBkYW5zIGxlc3F1ZWxsZXMgY2UgdHJhdmFpbCBzZSBmYWl0LlxuXG7igJMgQ29udHJpYnV0ZXVyIDpcblxudG91dGUgcGVyc29ubmUgcXVpIGNvbnRyaWJ1ZSDDoCBsYSBjcsOpYXRpb24gZGUgbCdvZXV2cmUuIElsIGVzdCBsJ2F1dGV1ciBkJ3VuZSBvZXV2cmUgb3JpZ2luYWxlIHLDqXN1bHRhbnQgZGUgbGEgbW9kaWZpY2F0aW9uIGQndW5lIGNvcGllIGRlIGwnb2V1dnJlIG9yaWdpbmVsbGUgb3UgZGUgbGEgbW9kaWZpY2F0aW9uIGQndW5lIGNvcGllIGQndW5lIG9ldXZyZSBjb25zw6lxdWVudGUuXG5cbiAgIDEuIE9CSkVUXG5cbiAgIENldHRlIGxpY2VuY2UgYSBwb3VyIG9iamV0IGRlIGTDqWZpbmlyIGxlcyBjb25kaXRpb25zIHNlbG9uIGxlc3F1ZWxsZXMgdm91cyBwb3V2ZXogam91aXIgbGlicmVtZW50IGRlIGNldHRlIG9ldXZyZS5cblxuICAgMi4gTCfDiVRFTkRVRSBERSBMQSBKT1VJU1NBTkNFXG5cbiAgIENldHRlIG9ldXZyZSBlc3Qgc291bWlzZSBhdSBkcm9pdCBkJ2F1dGV1ciwgZXQgbCdhdXRldXIgcGFyIGNldHRlIGxpY2VuY2Ugdm91cyBpbmRpcXVlIHF1ZWxsZXMgc29udCB2b3MgbGliZXJ0w6lzIHBvdXIgbGEgY29waWVyLCBsYSBkaWZmdXNlciBldCBsYSBtb2RpZmllcjpcblxuICAgMi4xIExBIExJQkVSVMOJIERFIENPUElFUiAoT1UgREUgUkVQUk9EVUNUSU9OKVxuXG4gICBWb3VzIGF2ZXogbGEgbGliZXJ0w6kgZGUgY29waWVyIGNldHRlIG9ldXZyZSBwb3VyIHVuIHVzYWdlIHBlcnNvbm5lbCwgcG91ciB2b3MgYW1pcywgb3UgdG91dGUgYXV0cmUgcGVyc29ubmUgZXQgcXVlbHF1ZSBzb2l0IGxhIHRlY2huaXF1ZSBlbXBsb3nDqWUuXG5cbiAgIDIuMiBMQSBMSUJFUlTDiSBERSBESUZGVVNFUiwgRCdJTlRFUlBSw4lURVIgKE9VIERFIFJFUFLDiVNFTlRBVElPTilcblxuICAgVm91cyBwb3V2ZXogZGlmZnVzZXIgbGlicmVtZW50IGxlcyBjb3BpZXMgZGUgY2VzIG9ldXZyZXMsIG1vZGlmacOpZXMgb3Ugbm9uLCBxdWVsIHF1ZSBzb2l0IGxlIHN1cHBvcnQsIHF1ZWwgcXVlIHNvaXQgbGUgbGlldSwgw6AgdGl0cmUgb27DqXJldXggb3UgZ3JhdHVpdCBzaSB2b3VzIHJlc3BlY3RleiB0b3V0ZXMgbGVzIGNvbmRpdGlvbnMgc3VpdmFudGVzOlxuXG4gICDigJMgam9pbmRyZSBhdXggY29waWVzLCBjZXR0ZSBsaWNlbmNlIMOgIGwnaWRlbnRpcXVlLCBvdSBpbmRpcXVlciBwcsOpY2lzw6ltZW50IG/DuSBzZSB0cm91dmUgbGEgbGljZW5jZSxcblxuICAg4oCTIGluZGlxdWVyIGF1IGRlc3RpbmF0YWlyZSBsZSBub20gZGUgbCdhdXRldXIgZGVzIG9yaWdpbmF1eCxcblxuICAg4oCTIGluZGlxdWVyIGF1IGRlc3RpbmF0YWlyZSBvw7kgaWwgcG91cnJhIGF2b2lyIGFjY8OocyBhdXggb3JpZ2luYXV4XG5cbiAgIChvcmlnaW5lbHMgZXQvb3UgY29uc8OpcXVlbnRzKS4gTCdhdXRldXIgZGUgbCdvcmlnaW5hbCBwb3VycmEsIHMnaWwgbGUgc291aGFpdGUsIHZvdXMgYXV0b3Jpc2VyIMOgIGRpZmZ1c2VyIGwnb3JpZ2luYWwgZGFucyBsZXMgbcOqbWVzIGNvbmRpdGlvbnMgcXVlIGxlcyBjb3BpZXMuXG5cbiAgIDIuMyBMQSBMSUJFUlTDiSBERSBNT0RJRklFUlxuXG4gICBWb3VzIGF2ZXogbGEgbGliZXJ0w6kgZGUgbW9kaWZpZXIgbGVzIGNvcGllcyBkZXMgb3JpZ2luYXV4IChvcmlnaW5lbHMgZXQgY29uc8OpcXVlbnRzKSwgcXVpIHBldXZlbnQgw6p0cmUgcGFydGllbGxlcyBvdSBub24sIGRhbnMgbGUgcmVzcGVjdCBkZXMgY29uZGl0aW9ucyBwcsOpdnVlcyDDoCBsJ2FydGljbGUgMi4yIGVuIGNhcyBkZSBkaWZmdXNpb24gKG91IHJlcHLDqXNlbnRhdGlvbikgZGUgbGEgY29waWUgbW9kaWZpw6llLiBMJ2F1dGV1ciBkZSBsJ29yaWdpbmFsIHBvdXJyYSwgcydpbCBsZSBzb3VoYWl0ZSwgdm91cyBhdXRvcmlzZXIgw6AgbW9kaWZpZXIgbCdvcmlnaW5hbCBkYW5zIGxlcyBtw6ptZXMgY29uZGl0aW9ucyBxdWUgbGVzIGNvcGllcy5cblxuICAgMy4gTCdJTkNPUlBPUkFUSU9OIERFIEwnT0VVVlJFXG5cbiAgIFRvdXMgbGVzIMOpbMOpbWVudHMgZGUgY2V0dGUgb2V1dnJlIGRvaXZlbnQgZGVtZXVyZXIgbGlicmVzLCBjJ2VzdCBwb3VycXVvaSBpbCBuZSB2b3VzIGVzdCBwYXMgcGVybWlzIGQnaW50w6lncmVyIGxlcyBvcmlnaW5hdXggKG9yaWdpbmVscyBldCBjb25zw6lxdWVudHMpIGRhbnMgdW5lIGF1dHJlIG9ldXZyZSBxdWkgbmUgc2VyYWl0IHBhcyBzb3VtaXNlIMOgIGNldHRlIGxpY2VuY2UuXG5cbiAgIDQuIFZPUyBEUk9JVFMgRCdBVVRFVVJcblxuICAgQ2V0dGUgbGljZW5jZSBuJ2EgcGFzIHBvdXIgb2JqZXQgZGUgbmllciB2b3MgZHJvaXRzIGQnYXV0ZXVyIHN1ciB2b3RyZSBjb250cmlidXRpb24uIEVuIGNob2lzaXNzYW50IGRlIGNvbnRyaWJ1ZXIgw6AgbCfDqXZvbHV0aW9uIGRlIGNldHRlIG9ldXZyZSwgdm91cyBhY2NlcHRleiBzZXVsZW1lbnQgZCdvZmZyaXIgYXV4IGF1dHJlcyBsZXMgbcOqbWVzIGRyb2l0cyBzdXIgdm90cmUgY29udHJpYnV0aW9uIHF1ZSBjZXV4IHF1aSB2b3VzIG9udCDDqXTDqSBhY2NvcmTDqXMgcGFyIGNldHRlIGxpY2VuY2UuXG5cbiAgIDUuIExBIERVUsOJRSBERSBMQSBMSUNFTkNFXG5cbiAgIENldHRlIGxpY2VuY2UgcHJlbmQgZWZmZXQgZMOocyB2b3RyZSBhY2NlcHRhdGlvbiBkZSBzZXMgZGlzcG9zaXRpb25zLiBMZSBmYWl0IGRlIGNvcGllciwgZGUgZGlmZnVzZXIsIG91IGRlIG1vZGlmaWVyIGwnb2V1dnJlIGNvbnN0aXR1ZSB1bmUgYWNjZXB0aW9uIHRhY2l0ZS5cblxuICAgQ2V0dGUgbGljZW5jZSBhIHBvdXIgZHVyw6llIGxhIGR1csOpZSBkZXMgZHJvaXRzIGQnYXV0ZXVyIGF0dGFjaMOpcyDDoCBsJ29ldXZyZS5cblxuICAgU2kgdm91cyBuZSByZXNwZWN0ZXogcGFzIGxlcyB0ZXJtZXMgZGUgY2V0dGUgbGljZW5jZSwgdm91cyBwZXJkZXogYXV0b21hdGlxdWVtZW50IGxlcyBkcm9pdHMgcXUnZWxsZSB2b3VzIGNvbmbDqHJlLlxuXG4gICBTaSBsZSByw6lnaW1lIGp1cmlkaXF1ZSBhdXF1ZWwgdm91cyDDqnRlcyBzb3VtaXMgbmUgdm91cyBwZXJtZXQgcGFzIGRlIHJlc3BlY3RlciBsZXMgdGVybWVzIGRlIGNldHRlIGxpY2VuY2UsIHZvdXMgbmUgcG91dmV6IHBhcyB2b3VzIHByw6l2YWxvaXIgZGVzIGxpYmVydMOpcyBxdSdlbGxlIGNvbmbDqHJlLlxuXG4gICA2LiBMRVMgRElGRsOJUkVOVEVTIFZFUlNJT05TIERFIExBIExJQ0VOQ0VcblxuICAgQ2V0dGUgbGljZW5jZSBwb3VycmEgw6p0cmUgbW9kaWZpw6llIHLDqWd1bGnDqHJlbWVudCwgZW4gdnVlIGRlIHNvbiBhbcOpbGlvcmF0aW9uLCBwYXIgc2VzIGF1dGV1cnMgKGxlcyBhY3RldXJzIGR1IG1vdXZlbWVudCDCq8KgY29weWxlZnQgYXR0aXR1ZGXCoMK7KSBzb3VzIGxhIGZvcm1lIGRlIG5vdXZlbGxlcyB2ZXJzaW9ucyBudW3DqXJvdMOpZXMuXG5cbiAgIFZvdXMgYXZleiB0b3Vqb3VycyBsZSBjaG9peCBlbnRyZSB2b3VzIGNvbnRlbnRlciBkZXMgZGlzcG9zaXRpb25zIGNvbnRlbnVlcyBkYW5zIGxhIHZlcnNpb24gc291cyBsYXF1ZWxsZSBsYSBjb3BpZSB2b3VzIGEgw6l0w6kgY29tbXVuaXF1w6llIG91IGFsb3JzLCB2b3VzIHByw6l2YWxvaXIgZGVzIGRpc3Bvc2l0aW9ucyBkJ3VuZSBkZXMgdmVyc2lvbnMgdWx0w6lyaWV1cmVzLlxuXG4gICA3LiBMRVMgU09VUy1MSUNFTkNFU1xuXG4gICBMZXMgc291cyBsaWNlbmNlcyBuZSBzb250IHBhcyBhdXRvcmlzw6llcyBwYXIgbGEgcHLDqXNlbnRlLiBUb3V0ZSBwZXJzb25uZSBxdWkgc291aGFpdGUgYsOpbsOpZmljaWVyIGRlcyBsaWJlcnTDqXMgcXUnZWxsZSBjb25mw6hyZSBzZXJhIGxpw6llIGRpcmVjdGVtZW50IMOgIGwnYXV0ZXVyIGRlIGwnb2V1dnJlIG9yaWdpbmVsbGUuXG5cbiAgIDguIExBIExPSSBBUFBMSUNBQkxFIEFVIENPTlRSQVRcblxuQ2V0dGUgbGljZW5jZSBlc3Qgc291bWlzZSBhdSBkcm9pdCBmcmFuw6dhaXMuIl0sImxpY2Vuc2VJZHMiOlsiTEFMLTEuMiJdLCJrZXl3b3JkcyI6WyJhcnQgbGlicmUgY29weWxlZnQiLCJsaWJyZSBjb3B5bGVmdCBhdHRpdHVkZSIsImNvcHlsZWZ0IGF0dGl0dWRlIHZlcnNpb24iLCJhdHRpdHVkZSB2ZXJzaW9uIDEiLCIxIDIgcHIiLCIyIHByIGFtYnVsZSIsImFtYnVsZSBhdmVjIGNldHRlIiwiYXZlYyBjZXR0ZSBsaWNlbmNlIiwibGlicmVtZW50IGxlcyBvZXV2cmVzIiwibGVzIG9ldXZyZXMgZGFucyIsIm9ldXZyZXMgZGFucyBsZSIsImQgaWdub3JlciBsZXMiLCJpZ25vcmVyIGxlcyBkcm9pdHMiLCJsIGF1dGV1ciBjZXR0ZSIsImxpY2VuY2UgbGVzIHJlY29ubmEiLCJlbiByZWZvcm11bGUgbGUiLCJyZWZvcm11bGUgbGUgcHJpbmNpcGUiLCJsZSBwcmluY2lwZSBlbiIsInByaW5jaXBlIGVuIHBlcm1ldHRhbnQiLCJlbiBwZXJtZXR0YW50IGF1IiwicGVybWV0dGFudCBhdSBwdWJsaWMiLCJhdSBwdWJsaWMgZGUiLCJwdWJsaWMgZGUgZmFpcmUiLCJhdGlmIGRlcyBvZXV2cmVzIiwiZGVzIG9ldXZyZXMgZCIsIm9ldXZyZXMgZCBhcnQiLCJkIGFydCBhbG9ycyIsImFydCBhbG9ycyBxdWUiLCJhbG9ycyBxdWUgbCIsInF1ZSBsIHVzYWdlIiwibCB1c2FnZSBmYWl0IiwidXNhZ2UgZmFpdCBkdSIsImZhaXQgZHUgZHJvaXQiLCJwcm9wcmkgdCBsaXR0IiwidCBsaXR0IHJhaXJlIiwibGl0dCByYWlyZSBldCIsInJhaXJlIGV0IGFydGlzdGlxdWUiLCJldCBhcnRpc3RpcXVlIGNvbmR1aXQiLCJhcnRpc3RpcXVlIGNvbmR1aXQgcmVzdHJlaW5kcmUiLCJhY2MgcyBkdSIsInMgZHUgcHVibGljIiwiZHUgcHVibGljIGwiLCJwdWJsaWMgbCBvZXV2cmUiLCJsIG9ldXZyZSBsYSIsIm9ldXZyZSBsYSBsaWNlbmNlIiwiYXJ0IGxpYnJlIGEiLCJsaWJyZSBhIHBvdXIiLCJhIHBvdXIgYnV0IiwicG91ciBidXQgZGUiLCJidXQgZGUgbGUiLCJkZSBsZSBmYXZvcmlzZXIiLCJsZSBmYXZvcmlzZXIgbCIsImZhdm9yaXNlciBsIGludGVudGlvbiIsImVzdCBkIG91dnJpciIsImQgb3V2cmlyIGwiLCJvdXZyaXIgbCBhY2MiLCJhY2MgcyBldCIsInMgZXQgZCIsImV0IGQgYXV0b3Jpc2VyIiwidW5lIG9ldXZyZSBwYXIiLCJvZXV2cmUgcGFyIGxlIiwicGFyIGxlIHBsdXMiLCJncmFuZCBub21icmUgZW4iLCJub21icmUgZW4gYXZvaXIiLCJlbiBhdm9pciBqb3Vpc3NhbmNlIiwiYXZvaXIgam91aXNzYW5jZSBwb3VyIiwiam91aXNzYW5jZSBwb3VyIGVuIiwicG91ciBlbiBtdWx0aXBsaWVyIiwiZW4gbXVsdGlwbGllciBsZXMiLCJtdWx0aXBsaWVyIGxlcyByIiwibGVzIHIgam91aXNzYW5jZXMiLCJyIGpvdWlzc2FuY2VzIGNyIiwiam91aXNzYW5jZXMgY3IgZXIiLCJjciBhdGlvbiBkYW5zIiwiYXRpb24gZGFucyBsZSIsInJlc3BlY3QgZGVzIGF1dGV1cnMiLCJkZXMgYXV0ZXVycyBhdmVjIiwiYXV0ZXVycyBhdmVjIGxhIiwiYXZlYyBsYSByZWNvbm5haXNzYW5jZSIsImxhIHJlY29ubmFpc3NhbmNlIGV0IiwicmVjb25uYWlzc2FuY2UgZXQgbGEiLCJldCBsYSBkIiwibGEgZCBmZW5zZSIsImQgZmVuc2UgZGUiLCJmZW5zZSBkZSBsZXVyIiwiZGUgbGV1ciBkcm9pdCIsImxldXIgZHJvaXQgbW9yYWwiLCJkcm9pdCBtb3JhbCBlbiIsIm1vcmFsIGVuIGVmZmV0IiwiZW4gZWZmZXQgYXZlYyIsImVmZmV0IGF2ZWMgbGEiLCJhdmVjIGxhIHZlbnVlIiwibGEgdmVudWUgZHUiLCJ2ZW51ZSBkdSBudW0iLCJsIGludmVudGlvbiBkZSIsImludmVudGlvbiBkZSBsIiwiZGUgbCBpbnRlcm5ldCIsImwgaW50ZXJuZXQgZXQiLCJsb2dpY2llbHMgbGlicmVzIHVuIiwibGlicmVzIHVuIG5vdXZlYXUiLCJ1biBub3V2ZWF1IG1vZGUiLCJub3V2ZWF1IG1vZGUgZGUiLCJtb2RlIGRlIGNyIiwiY3IgYXRpb24gZXQiLCJhdGlvbiBldCBkZSIsImV0IGRlIHByb2R1Y3Rpb24iLCJkZSBwcm9kdWN0aW9uIGVzdCIsInByb2R1Y3Rpb24gZXN0IGFwcGFydSIsImVzdCBhcHBhcnUgaWwiLCJhcHBhcnUgaWwgZXN0IiwiaWwgZXN0IGF1c3NpIiwiZXN0IGF1c3NpIGwiLCJhdXNzaSBsIGFtcGxpZmljYXRpb24iLCJsIGFtcGxpZmljYXRpb24gZGUiLCJhbXBsaWZpY2F0aW9uIGRlIGNlIiwiZGUgY2UgcXVpIiwiY2UgcXVpIGEiLCJxdWkgYSB0IiwiYSB0IGV4cCIsInQgZXhwIHJpbWVudCIsImV4cCByaW1lbnQgcGFyIiwicmltZW50IHBhciBub21icmUiLCJwYXIgbm9tYnJlIGQiLCJub21icmUgZCBhcnRpc3RlcyIsImQgYXJ0aXN0ZXMgY29udGVtcG9yYWlucyIsImFydGlzdGVzIGNvbnRlbXBvcmFpbnMgbGUiLCJjb250ZW1wb3JhaW5zIGxlIHNhdm9pciIsImxlIHNhdm9pciBldCIsInNhdm9pciBldCBsYSIsImV0IGxhIGNyIiwiY3IgYXRpb24gc29udCIsImF0aW9uIHNvbnQgZGVzIiwic29udCBkZXMgcmVzc291cmNlcyIsImRlcyByZXNzb3VyY2VzIHF1aSIsInJlc3NvdXJjZXMgcXVpIGRvaXZlbnQiLCJxdWkgZG9pdmVudCBkZW1ldXJlciIsImRlbWV1cmVyIGxpYnJlcyBwb3VyIiwibGlicmVzIHBvdXIgdHJlIiwicG91ciB0cmUgZW5jb3JlIiwidHJlIGVuY29yZSB2IiwiZW5jb3JlIHYgcml0YWJsZW1lbnQiLCJ2IHJpdGFibGVtZW50IGR1Iiwicml0YWJsZW1lbnQgZHUgc2F2b2lyIiwiZHUgc2F2b2lyIGV0Iiwic2F2b2lyIGV0IGRlIiwiZGUgbGEgY3IiLCJjciBhdGlvbiBjIiwiYXRpb24gYyBlc3QiLCJlc3QgZGlyZSByZXN0ZXIiLCJkaXJlIHJlc3RlciB1bmUiLCJyZXN0ZXIgdW5lIHJlY2hlcmNoZSIsInVuZSByZWNoZXJjaGUgZm9uZGFtZW50YWxlIiwicmVjaGVyY2hlIGZvbmRhbWVudGFsZSBxdWkiLCJmb25kYW1lbnRhbGUgcXVpIG5lIiwicXVpIG5lIHNvaXQiLCJuZSBzb2l0IHBhcyIsInNvaXQgcGFzIGRpcmVjdGVtZW50IiwicGFzIGRpcmVjdGVtZW50IGxpIiwiZGlyZWN0ZW1lbnQgbGkgZSIsImUgdW5lIGFwcGxpY2F0aW9uIiwidW5lIGFwcGxpY2F0aW9uIGNvbmNyIiwiYXBwbGljYXRpb24gY29uY3IgdGUiLCJjb25jciB0ZSBjciIsInRlIGNyIGVyIiwiY3IgZXIgYyIsImVyIGMgZXN0IiwiYyBlc3QgZCIsImVzdCBkIGNvdXZyaXIiLCJkIGNvdXZyaXIgbCIsImNvdXZyaXIgbCBpbmNvbm51IiwibCBpbmNvbm51IGMiLCJpbmNvbm51IGMgZXN0IiwiYyBlc3QgaW52ZW50ZXIiLCJlc3QgaW52ZW50ZXIgbGUiLCJpbnZlbnRlciBsZSByIiwibGUgciBlbCIsInIgZWwgYXZhbnQiLCJlbCBhdmFudCB0b3V0IiwiYXZhbnQgdG91dCBzb3VjaSIsInRvdXQgc291Y2kgZGUiLCJzb3VjaSBkZSByIiwiZGUgciBhbGlzbWUiLCJyIGFsaXNtZSBhaW5zaSIsImFsaXNtZSBhaW5zaSBsIiwiYWluc2kgbCBvYmpldCIsImwgb2JqZXQgZGUiLCJvYmpldCBkZSBsIiwiZGUgbCBhcnQiLCJsIGFydCBuIiwiYXJ0IG4gZXN0IiwiZXN0IHBhcyBjb25mb25kdSIsInBhcyBjb25mb25kdSBhdmVjIiwiY29uZm9uZHUgYXZlYyBsIiwiYXZlYyBsIG9iamV0Iiwib2JqZXQgZCBhcnQiLCJkIGFydCBmaW5pIiwiYXJ0IGZpbmkgZXQiLCJmaW5pIGV0IGQiLCJldCBkIGZpbmkiLCJkIGZpbmkgY29tbWUiXX0seyJsaWNlbnNlVGV4dHMiOlsiTGljZW5jZSBBcnQgTGlicmUgMS4zIChMQUwgMS4zKVxuXG5QcsOpYW1idWxlwqA6XG5cbkF2ZWMgbGEgTGljZW5jZSBBcnQgTGlicmUsIGwnYXV0b3Jpc2F0aW9uIGVzdCBkb25uw6llIGRlIGNvcGllciwgZGUgZGlmZnVzZXIgZXQgZGUgdHJhbnNmb3JtZXIgbGlicmVtZW50IGxlcyDFk3V2cmVzIGRhbnMgbGUgcmVzcGVjdCBkZXMgZHJvaXRzIGRlIGwnYXV0ZXVyLlxuXG5Mb2luIGQnaWdub3JlciBjZXMgZHJvaXRzLCBsYSBMaWNlbmNlIEFydCBMaWJyZSBsZXMgcmVjb25uYcOudCBldCBsZXMgcHJvdMOoZ2UuIEVsbGUgZW4gcmVmb3JtdWxlIGwnZXhlcmNpY2UgZW4gcGVybWV0dGFudCDDoCB0b3V0IHVuIGNoYWN1biBkZSBmYWlyZSB1biB1c2FnZSBjcsOpYXRpZiBkZXMgcHJvZHVjdGlvbnMgZGUgbCdlc3ByaXQgcXVlbHMgcXVlIHNvaWVudCBsZXVyIGdlbnJlIGV0IGxldXIgZm9ybWUgZCdleHByZXNzaW9uLlxuXG5TaSwgZW4gcsOoZ2xlIGfDqW7DqXJhbGUsIGwnYXBwbGljYXRpb24gZHUgZHJvaXQgZCdhdXRldXIgY29uZHVpdCDDoCByZXN0cmVpbmRyZSBsJ2FjY8OocyBhdXggxZN1dnJlcyBkZSBsJ2VzcHJpdCwgbGEgTGljZW5jZSBBcnQgTGlicmUsIGF1IGNvbnRyYWlyZSwgbGUgZmF2b3Jpc2UuIEwnaW50ZW50aW9uIGVzdCBkJ2F1dG9yaXNlciBsJ3V0aWxpc2F0aW9uIGRlcyByZXNzb3VyY2VzIGQndW5lIMWTdXZyZcKgOyBjcsOpZXIgZGUgbm91dmVsbGVzIGNvbmRpdGlvbnMgZGUgY3LDqWF0aW9uIHBvdXIgYW1wbGlmaWVyIGxlcyBwb3NzaWJpbGl0w6lzIGRlIGNyw6lhdGlvbi4gTGEgTGljZW5jZSBBcnQgTGlicmUgcGVybWV0IGQnYXZvaXIgam91aXNzYW5jZSBkZXMgxZN1dnJlcyB0b3V0IGVuIHJlY29ubmFpc3NhbnQgbGVzIGRyb2l0cyBldCBsZXMgcmVzcG9uc2FiaWxpdMOpcyBkZSBjaGFjdW4uXG5cbkF2ZWMgbGUgZMOpdmVsb3BwZW1lbnQgZHUgbnVtw6lyaXF1ZSwgbCdpbnZlbnRpb24gZCdpbnRlcm5ldCBldCBkZXMgbG9naWNpZWxzIGxpYnJlcywgbGVzIG1vZGFsaXTDqXMgZGUgY3LDqWF0aW9uIG9udCDDqXZvbHXDqcKgOiBsZXMgcHJvZHVjdGlvbnMgZGUgbCdlc3ByaXQgcydvZmZyZW50IG5hdHVyZWxsZW1lbnQgw6AgbGEgY2lyY3VsYXRpb24sIMOgIGwnw6ljaGFuZ2UgZXQgYXV4IHRyYW5zZm9ybWF0aW9ucy4gRWxsZXMgc2UgcHLDqnRlbnQgZmF2b3JhYmxlbWVudCDDoCBsYSByw6lhbGlzYXRpb24gZCfFk3V2cmVzIGNvbW11bmVzIHF1ZSBjaGFjdW4gcGV1dCBhdWdtZW50ZXIgcG91ciBsJ2F2YW50YWdlIGRlIHRvdXMuXG5cbkMnZXN0IGxhIHJhaXNvbiBlc3NlbnRpZWxsZSBkZSBsYSBMaWNlbmNlIEFydCBMaWJyZcKgOiBwcm9tb3V2b2lyIGV0IHByb3TDqWdlciBjZXMgcHJvZHVjdGlvbnMgZGUgbCdlc3ByaXQgc2Vsb24gbGVzIHByaW5jaXBlcyBkdSBjb3B5bGVmdMKgOiBsaWJlcnTDqSBkJ3VzYWdlLCBkZSBjb3BpZSwgZGUgZGlmZnVzaW9uLCBkZSB0cmFuc2Zvcm1hdGlvbiBldCBpbnRlcmRpY3Rpb24gZCdhcHByb3ByaWF0aW9uIGV4Y2x1c2l2ZS5cblxuRMOpZmluaXRpb25zwqA6XG5cbk5vdXMgZMOpc2lnbm9ucyBwYXIgwqvCoMWTdXZyZcKgwrssIGF1dGFudCBsJ8WTdXZyZSBpbml0aWFsZSwgbGVzIMWTdXZyZXMgY29uc8OpcXVlbnRlcywgcXVlIGwnxZN1dnJlIGNvbW11bmUgdGVsbGVzIHF1ZSBkw6lmaW5pZXMgY2ktYXByw6hzwqA6XG5cbkwnxZN1dnJlIGNvbW11bmXCoDogSWwgcydhZ2l0IGQndW5lIMWTdXZyZSBxdWkgY29tcHJlbmQgbCfFk3V2cmUgaW5pdGlhbGUgYWluc2kgcXVlIHRvdXRlcyBsZXMgY29udHJpYnV0aW9ucyBwb3N0w6lyaWV1cmVzIChsZXMgb3JpZ2luYXV4IGNvbnPDqXF1ZW50cyBldCBsZXMgY29waWVzKS4gRWxsZSBlc3QgY3LDqcOpZSDDoCBsJ2luaXRpYXRpdmUgZGUgbCdhdXRldXIgaW5pdGlhbCBxdWkgcGFyIGNldHRlIGxpY2VuY2UgZMOpZmluaXQgbGVzIGNvbmRpdGlvbnMgc2Vsb24gbGVzcXVlbGxlcyBsZXMgY29udHJpYnV0aW9ucyBzb250IGZhaXRlcy5cblxuTCfFk3V2cmUgaW5pdGlhbGXCoDogQydlc3Qtw6AtZGlyZSBsJ8WTdXZyZSBjcsOpw6llIHBhciBsJ2luaXRpYXRldXIgZGUgbCfFk3V2cmUgY29tbXVuZSBkb250IGxlcyBjb3BpZXMgdm9udCDDqnRyZSBtb2RpZmnDqWVzIHBhciBxdWkgbGUgc291aGFpdGUuXG5cbkxlcyDFk3V2cmVzIGNvbnPDqXF1ZW50ZXPCoDogQydlc3Qtw6AtZGlyZSBsZXMgY29udHJpYnV0aW9ucyBkZXMgYXV0ZXVycyBxdWkgcGFydGljaXBlbnQgw6AgbGEgZm9ybWF0aW9uIGRlIGwnxZN1dnJlIGNvbW11bmUgZW4gZmFpc2FudCB1c2FnZSBkZXMgZHJvaXRzIGRlIHJlcHJvZHVjdGlvbiwgZGUgZGlmZnVzaW9uIGV0IGRlIG1vZGlmaWNhdGlvbiBxdWUgbGV1ciBjb25mw6hyZSBsYSBsaWNlbmNlLlxuXG5PcmlnaW5hdXggKHNvdXJjZXMgb3UgcmVzc291cmNlcyBkZSBsJ8WTdXZyZSnCoDogQ2hhcXVlIGV4ZW1wbGFpcmUgZGF0w6kgZGUgbCfFk3V2cmUgaW5pdGlhbGUgb3UgY29uc8OpcXVlbnRlIHF1ZSBsZXVycyBhdXRldXJzIHByw6lzZW50ZW50IGNvbW1lIHLDqWbDqXJlbmNlIHBvdXIgdG91dGVzIGFjdHVhbGlzYXRpb25zLCBpbnRlcnByw6l0YXRpb25zLCBjb3BpZXMgb3UgcmVwcm9kdWN0aW9ucyB1bHTDqXJpZXVyZXMuXG5cbkNvcGllwqA6IFRvdXRlIHJlcHJvZHVjdGlvbiBkJ3VuIG9yaWdpbmFsIGF1IHNlbnMgZGUgY2V0dGUgbGljZW5jZS5cblxuICAgMS0gT0JKRVQuXG5cbiAgIENldHRlIGxpY2VuY2UgYSBwb3VyIG9iamV0IGRlIGTDqWZpbmlyIGxlcyBjb25kaXRpb25zIHNlbG9uIGxlc3F1ZWxsZXMgdm91cyBwb3V2ZXogam91aXIgbGlicmVtZW50IGRlIGwnxZN1dnJlLlxuXG4gICAyLiBMJ8OJVEVORFVFIERFIExBIEpPVUlTU0FOQ0UuXG5cbiAgIENldHRlIMWTdXZyZSBlc3Qgc291bWlzZSBhdSBkcm9pdCBkJ2F1dGV1ciwgZXQgbCdhdXRldXIgcGFyIGNldHRlIGxpY2VuY2Ugdm91cyBpbmRpcXVlIHF1ZWxsZXMgc29udCB2b3MgbGliZXJ0w6lzIHBvdXIgbGEgY29waWVyLCBsYSBkaWZmdXNlciBldCBsYSBtb2RpZmllci5cblxuICAgICAgMi4xIExBIExJQkVSVMOJIERFIENPUElFUiAoT1UgREUgUkVQUk9EVUNUSU9OKS5cblxuICAgICAgVm91cyBhdmV6IGxhIGxpYmVydMOpIGRlIGNvcGllciBjZXR0ZSDFk3V2cmUgcG91ciB2b3VzLCB2b3MgYW1pcyBvdSB0b3V0ZSBhdXRyZSBwZXJzb25uZSwgcXVlbGxlIHF1ZSBzb2l0IGxhIHRlY2huaXF1ZSBlbXBsb3nDqWUuXG5cbiAgICAgIDIuMiBMQSBMSUJFUlTDiSBERSBESUZGVVNFUiAoSU5URVJQUsOJVEVSLCBSRVBSw4lTRU5URVIsIERJU1RSSUJVRVIpLlxuXG4gICAgICBWb3VzIHBvdXZleiBkaWZmdXNlciBsaWJyZW1lbnQgbGVzIGNvcGllcyBkZSBjZXMgxZN1dnJlcywgbW9kaWZpw6llcyBvdSBub24sIHF1ZWwgcXVlIHNvaXQgbGUgc3VwcG9ydCwgcXVlbCBxdWUgc29pdCBsZSBsaWV1LCDDoCB0aXRyZSBvbsOpcmV1eCBvdSBncmF0dWl0LCBzaSB2b3VzIHJlc3BlY3RleiB0b3V0ZXMgbGVzIGNvbmRpdGlvbnMgc3VpdmFudGVzwqA6XG5cbiAgICAgICAgIDEuIGpvaW5kcmUgYXV4IGNvcGllcyBjZXR0ZSBsaWNlbmNlIMOgIGwnaWRlbnRpcXVlIG91IGluZGlxdWVyIHByw6ljaXPDqW1lbnQgb8O5IHNlIHRyb3V2ZSBsYSBsaWNlbmNlwqA7XG5cbiAgICAgICAgIDIuIGluZGlxdWVyIGF1IGRlc3RpbmF0YWlyZSBsZSBub20gZGUgY2hhcXVlIGF1dGV1ciBkZXMgb3JpZ2luYXV4LCB5IGNvbXByaXMgbGUgdsO0dHJlIHNpIHZvdXMgYXZleiBtb2RpZmnDqSBsJ8WTdXZyZcKgO1xuXG4gICAgICAgICAzLiBpbmRpcXVlciBhdSBkZXN0aW5hdGFpcmUgb8O5IGlsIHBvdXJyYWl0IGF2b2lyIGFjY8OocyBhdXggb3JpZ2luYXV4IChpbml0aWF1eCBldC9vdSBjb25zw6lxdWVudHMpLiBMZXMgYXV0ZXVycyBkZXMgb3JpZ2luYXV4IHBvdXJyb250LCBzJ2lscyBsZSBzb3VoYWl0ZW50LCB2b3VzIGF1dG9yaXNlciDDoCBkaWZmdXNlciBsJ29yaWdpbmFsIGRhbnMgbGVzIG3Dqm1lcyBjb25kaXRpb25zIHF1ZSBsZXMgY29waWVzLlxuXG4gICAgICAyLjMgTEEgTElCRVJUw4kgREUgTU9ESUZJRVIuXG5cbiAgICAgIFZvdXMgYXZleiBsYSBsaWJlcnTDqSBkZSBtb2RpZmllciBsZXMgY29waWVzIGRlcyBvcmlnaW5hdXggKGluaXRpYXV4IGV0IGNvbnPDqXF1ZW50cykgZGFucyBsZSByZXNwZWN0IGRlcyBjb25kaXRpb25zIHN1aXZhbnRlc8KgOlxuXG4gICAgICAgICAxLiBjZWxsZXMgcHLDqXZ1ZXMgw6AgbCdhcnRpY2xlIDIuMiBlbiBjYXMgZGUgZGlmZnVzaW9uIGRlIGxhIGNvcGllIG1vZGlmacOpZcKgO1xuXG4gICAgICAgICAyLiBpbmRpcXVlciBxdSdpbCBzJ2FnaXQgZCd1bmUgxZN1dnJlIG1vZGlmacOpZSBldCwgc2kgcG9zc2libGUsIGxhIG5hdHVyZSBkZSBsYSBtb2RpZmljYXRpb27CoDtcblxuICAgICAgICAgMy4gZGlmZnVzZXIgY2V0dGUgxZN1dnJlIGNvbnPDqXF1ZW50ZSBhdmVjIGxhIG3Dqm1lIGxpY2VuY2Ugb3UgYXZlYyB0b3V0ZSBsaWNlbmNlIGNvbXBhdGlibGXCoDtcblxuICAgICAgICAgNC4gTGVzIGF1dGV1cnMgZGVzIG9yaWdpbmF1eCBwb3Vycm9udCwgcydpbHMgbGUgc291aGFpdGVudCwgdm91cyBhdXRvcmlzZXIgw6AgbW9kaWZpZXIgbCdvcmlnaW5hbCBkYW5zIGxlcyBtw6ptZXMgY29uZGl0aW9ucyBxdWUgbGVzIGNvcGllcy5cblxuICAgMy4gRFJPSVRTIENPTk5FWEVTLlxuXG4gICBMZXMgYWN0ZXMgZG9ubmFudCBsaWV1IMOgIGRlcyBkcm9pdHMgZCdhdXRldXIgb3UgZGVzIGRyb2l0cyB2b2lzaW5zIG5lIGRvaXZlbnQgcGFzIGNvbnN0aXR1ZXIgdW4gb2JzdGFjbGUgYXV4IGxpYmVydMOpcyBjb25mw6lyw6llcyBwYXIgY2V0dGUgbGljZW5jZS5cblxuICAgQydlc3QgcG91cnF1b2ksIHBhciBleGVtcGxlLCBsZXMgaW50ZXJwcsOpdGF0aW9ucyBkb2l2ZW50IMOqdHJlIHNvdW1pc2VzIMOgIGxhIG3Dqm1lIGxpY2VuY2Ugb3UgdW5lIGxpY2VuY2UgY29tcGF0aWJsZS4gRGUgbcOqbWUsIGwnaW50w6lncmF0aW9uIGRlIGwnxZN1dnJlIMOgIHVuZSBiYXNlIGRlIGRvbm7DqWVzLCB1bmUgY29tcGlsYXRpb24gb3UgdW5lIGFudGhvbG9naWUgbmUgZG9pdCBwYXMgZmFpcmUgb2JzdGFjbGUgw6AgbGEgam91aXNzYW5jZSBkZSBsJ8WTdXZyZSB0ZWxsZSBxdWUgZMOpZmluaWUgcGFyIGNldHRlIGxpY2VuY2UuXG5cbiAgIDQuIEwnIElOVMOJR1JBVElPTiBERSBMJ8WSVVZSRS5cblxuICAgVG91dGUgaW50w6lncmF0aW9uIGRlIGNldHRlIMWTdXZyZSDDoCB1biBlbnNlbWJsZSBub24gc291bWlzIMOgIGxhIExBTCBkb2l0IGFzc3VyZXIgbCdleGVyY2ljZSBkZXMgbGliZXJ0w6lzIGNvbmbDqXLDqWVzIHBhciBjZXR0ZSBsaWNlbmNlLlxuXG4gICBTaSBsJ8WTdXZyZSBuJ2VzdCBwbHVzIGFjY2Vzc2libGUgaW5kw6lwZW5kYW1tZW50IGRlIGwnZW5zZW1ibGUsIGFsb3JzIGwnaW50w6lncmF0aW9uIG4nZXN0IHBvc3NpYmxlIHF1J8OgIGNvbmRpdGlvbiBxdWUgbCdlbnNlbWJsZSBzb2l0IHNvdW1pcyDDoCBsYSBMQUwgb3UgdW5lIGxpY2VuY2UgY29tcGF0aWJsZS5cblxuICAgNS4gQ1JJVMOIUkVTIERFIENPTVBBVElCSUxJVMOJLlxuXG4gICBVbmUgbGljZW5jZSBlc3QgY29tcGF0aWJsZSBhdmVjIGxhIExBTCBzaSBldCBzZXVsZW1lbnQgc2nCoDpcblxuICAgICAgMS4gZWxsZSBhY2NvcmRlIGwnYXV0b3Jpc2F0aW9uIGRlIGNvcGllciwgZGlmZnVzZXIgZXQgbW9kaWZpZXIgZGVzIGNvcGllcyBkZSBsJ8WTdXZyZSwgeSBjb21wcmlzIMOgIGRlcyBmaW5zIGx1Y3JhdGl2ZXMsIGV0IHNhbnMgYXV0cmVzIHJlc3RyaWN0aW9ucyBxdWUgY2VsbGVzIHF1J2ltcG9zZSBsZSByZXNwZWN0IGRlcyBhdXRyZXMgY3JpdMOocmVzIGRlIGNvbXBhdGliaWxpdMOpwqA7XG5cbiAgICAgIDIuIGVsbGUgZ2FyYW50aXQgbGEgcGF0ZXJuaXTDqSBkZSBsJ8WTdXZyZSBldCBsJ2FjY8OocyBhdXggdmVyc2lvbnMgYW50w6lyaWV1cmVzIGRlIGwnxZN1dnJlIHF1YW5kIGNldCBhY2PDqHMgZXN0IHBvc3NpYmxlwqA7XG5cbiAgICAgIDMuIGVsbGUgcmVjb25uYcOudCBsYSBMQUwgw6lnYWxlbWVudCBjb21wYXRpYmxlIChyw6ljaXByb2NpdMOpKcKgO1xuXG4gICAgICA0LiBlbGxlIGltcG9zZSBxdWUgbGVzIG1vZGlmaWNhdGlvbnMgZmFpdGVzIHN1ciBsJ8WTdXZyZSBzb2llbnQgc291bWlzZXMgw6AgbGEgbcOqbWUgbGljZW5jZSBvdSBlbmNvcmUgw6AgdW5lIGxpY2VuY2UgcsOpcG9uZGFudCBhdXggY3JpdMOocmVzIGRlIGNvbXBhdGliaWxpdMOpIHBvc8OpcyBwYXIgbGEgTEFMLlxuXG4gICA2LiBWT1MgRFJPSVRTIElOVEVMTEVDVFVFTFMuXG5cbiAgIExhIExBTCBuJ2EgcGFzIHBvdXIgb2JqZXQgZGUgbmllciB2b3MgZHJvaXRzIGQnYXV0ZXVyIHN1ciB2b3RyZSBjb250cmlidXRpb24gbmkgdm9zIGRyb2l0cyBjb25uZXhlcy4gRW4gY2hvaXNpc3NhbnQgZGUgY29udHJpYnVlciDDoCBsJ8Opdm9sdXRpb24gZGUgY2V0dGUgxZN1dnJlIGNvbW11bmUsIHZvdXMgYWNjZXB0ZXogc2V1bGVtZW50IGQnb2ZmcmlyIGF1eCBhdXRyZXMgbGVzIG3Dqm1lcyBhdXRvcmlzYXRpb25zIHN1ciB2b3RyZSBjb250cmlidXRpb24gcXVlIGNlbGxlcyBxdWkgdm91cyBvbnQgw6l0w6kgYWNjb3Jkw6llcyBwYXIgY2V0dGUgbGljZW5jZS4gQ2VzIGF1dG9yaXNhdGlvbnMgbidlbnRyYcOubmVudCBwYXMgdW4gZGVzc2Fpc2lzc2VtZW50IGRlIHZvcyBkcm9pdHMgaW50ZWxsZWN0dWVscy5cblxuICAgNy4gVk9TIFJFU1BPTlNBQklMSVTDiVMuXG5cbiAgIExhIGxpYmVydMOpIGRlIGpvdWlyIGRlIGwnxZN1dnJlIHRlbCBxdWUgcGVybWlzIHBhciBsYSBMQUwgKGxpYmVydMOpIGRlIGNvcGllciwgZGlmZnVzZXIsIG1vZGlmaWVyKSBpbXBsaXF1ZSBwb3VyIGNoYWN1biBsYSByZXNwb25zYWJpbGl0w6kgZGUgc2VzIHByb3ByZXMgZmFpdHMuXG5cbiAgIDguIExBIERVUsOJRSBERSBMQSBMSUNFTkNFLlxuXG4gICBDZXR0ZSBsaWNlbmNlIHByZW5kIGVmZmV0IGTDqHMgdm90cmUgYWNjZXB0YXRpb24gZGUgc2VzIGRpc3Bvc2l0aW9ucy4gTGUgZmFpdCBkZSBjb3BpZXIsIGRlIGRpZmZ1c2VyLCBvdSBkZSBtb2RpZmllciBsJ8WTdXZyZSBjb25zdGl0dWUgdW5lIGFjY2VwdGF0aW9uIHRhY2l0ZS5cblxuICAgQ2V0dGUgbGljZW5jZSBhIHBvdXIgZHVyw6llIGxhIGR1csOpZSBkZXMgZHJvaXRzIGQnYXV0ZXVyIGF0dGFjaMOpcyDDoCBsJ8WTdXZyZS4gU2kgdm91cyBuZSByZXNwZWN0ZXogcGFzIGxlcyB0ZXJtZXMgZGUgY2V0dGUgbGljZW5jZSwgdm91cyBwZXJkZXogYXV0b21hdGlxdWVtZW50IGxlcyBkcm9pdHMgcXUnZWxsZSB2b3VzIGNvbmbDqHJlLlxuXG4gICBTaSBsZSByw6lnaW1lIGp1cmlkaXF1ZSBhdXF1ZWwgdm91cyDDqnRlcyBzb3VtaXMgbmUgdm91cyBwZXJtZXQgcGFzIGRlIHJlc3BlY3RlciBsZXMgdGVybWVzIGRlIGNldHRlIGxpY2VuY2UsIHZvdXMgbmUgcG91dmV6IHBhcyB2b3VzIHByw6l2YWxvaXIgZGVzIGxpYmVydMOpcyBxdSdlbGxlIGNvbmbDqHJlLlxuXG4gICA5LiBMRVMgRElGRsOJUkVOVEVTIFZFUlNJT05TIERFIExBIExJQ0VOQ0UuXG5cbiAgIENldHRlIGxpY2VuY2UgcG91cnJhIMOqdHJlIG1vZGlmacOpZSByw6lndWxpw6hyZW1lbnQsIGVuIHZ1ZSBkZSBzb24gYW3DqWxpb3JhdGlvbiwgcGFyIHNlcyBhdXRldXJzIChsZXMgYWN0ZXVycyBkdSBtb3V2ZW1lbnQgQ29weWxlZnQgQXR0aXR1ZGUpIHNvdXMgbGEgZm9ybWUgZGUgbm91dmVsbGVzIHZlcnNpb25zIG51bcOpcm90w6llcy5cblxuICAgVm91cyBhdmV6IHRvdWpvdXJzIGxlIGNob2l4IGVudHJlIHZvdXMgY29udGVudGVyIGRlcyBkaXNwb3NpdGlvbnMgY29udGVudWVzIGRhbnMgbGEgdmVyc2lvbiBkZSBsYSBMQUwgc291cyBsYXF1ZWxsZSBsYSBjb3BpZSB2b3VzIGEgw6l0w6kgY29tbXVuaXF1w6llIG91IGFsb3JzLCB2b3VzIHByw6l2YWxvaXIgZGVzIGRpc3Bvc2l0aW9ucyBkJ3VuZSBkZXMgdmVyc2lvbnMgdWx0w6lyaWV1cmVzLlxuXG4gICAxMC4gTEVTIFNPVVMtTElDRU5DRVMuXG5cbiAgIExlcyBzb3VzLWxpY2VuY2VzIG5lIHNvbnQgcGFzIGF1dG9yaXPDqWVzIHBhciBsYSBwcsOpc2VudGUuIFRvdXRlIHBlcnNvbm5lIHF1aSBzb3VoYWl0ZSBiw6luw6lmaWNpZXIgZGVzIGxpYmVydMOpcyBxdSdlbGxlIGNvbmbDqHJlIHNlcmEgbGnDqWUgZGlyZWN0ZW1lbnQgYXV4IGF1dGV1cnMgZGUgbCfFk3V2cmUgY29tbXVuZS5cblxuICAgMTEuIExFIENPTlRFWFRFIEpVUklESVFVRS5cblxuICAgQ2V0dGUgbGljZW5jZSBlc3QgcsOpZGlnw6llIGVuIHLDqWbDqXJlbmNlIGF1IGRyb2l0IGZyYW7Dp2FpcyBldCDDoCBsYSBDb252ZW50aW9uIGRlIEJlcm5lIHJlbGF0aXZlIGF1IGRyb2l0IGQnYXV0ZXVyLiJdLCJsaWNlbnNlSWRzIjpbIkxBTC0xLjMiXSwia2V5d29yZHMiOlsiYXJ0IGxpYnJlIDEiLCJsaWJyZSAxIDMiLCIxIDMgbGFsIiwiMyBsYWwgMSIsImxhbCAxIDMiLCIxIDMgcHIiLCIzIHByIGFtYnVsZSIsImFtYnVsZSBhdmVjIGxhIiwibGlicmVtZW50IGxlcyB1dnJlcyIsImxlcyB1dnJlcyBkYW5zIiwidXZyZXMgZGFucyBsZSIsImQgaWdub3JlciBjZXMiLCJpZ25vcmVyIGNlcyBkcm9pdHMiLCJjZXMgZHJvaXRzIGxhIiwiZHJvaXRzIGxhIGxpY2VuY2UiLCJhcnQgbGlicmUgbGVzIiwibGlicmUgbGVzIHJlY29ubmEiLCJlbiByZWZvcm11bGUgbCIsInJlZm9ybXVsZSBsIGV4ZXJjaWNlIiwibCBleGVyY2ljZSBlbiIsImV4ZXJjaWNlIGVuIHBlcm1ldHRhbnQiLCJlbiBwZXJtZXR0YW50IHRvdXQiLCJwZXJtZXR0YW50IHRvdXQgdW4iLCJ0b3V0IHVuIGNoYWN1biIsInVuIGNoYWN1biBkZSIsImNoYWN1biBkZSBmYWlyZSIsImF0aWYgZGVzIHByb2R1Y3Rpb25zIiwiZGVzIHByb2R1Y3Rpb25zIGRlIiwibCBlc3ByaXQgcXVlbHMiLCJlc3ByaXQgcXVlbHMgcXVlIiwicXVlbHMgcXVlIHNvaWVudCIsInF1ZSBzb2llbnQgbGV1ciIsInNvaWVudCBsZXVyIGdlbnJlIiwibGV1ciBnZW5yZSBldCIsImdlbnJlIGV0IGxldXIiLCJldCBsZXVyIGZvcm1lIiwibGV1ciBmb3JtZSBkIiwiZm9ybWUgZCBleHByZXNzaW9uIiwiZCBleHByZXNzaW9uIHNpIiwiZXhwcmVzc2lvbiBzaSBlbiIsInNpIGVuIHIiLCJlbiByIGdsZSIsInIgZ2xlIGciLCJnbGUgZyBuIiwiZyBuIHJhbGUiLCJuIHJhbGUgbCIsInJhbGUgbCBhcHBsaWNhdGlvbiIsImwgYXBwbGljYXRpb24gZHUiLCJhcHBsaWNhdGlvbiBkdSBkcm9pdCIsImQgYXV0ZXVyIGNvbmR1aXQiLCJhdXRldXIgY29uZHVpdCByZXN0cmVpbmRyZSIsInMgYXV4IHV2cmVzIiwiYXV4IHV2cmVzIGRlIiwidXZyZXMgZGUgbCIsImwgZXNwcml0IGxhIiwiZXNwcml0IGxhIGxpY2VuY2UiLCJhcnQgbGlicmUgYXUiLCJsaWJyZSBhdSBjb250cmFpcmUiLCJhdSBjb250cmFpcmUgbGUiLCJjb250cmFpcmUgbGUgZmF2b3Jpc2UiLCJsZSBmYXZvcmlzZSBsIiwiZmF2b3Jpc2UgbCBpbnRlbnRpb24iLCJlc3QgZCBhdXRvcmlzZXIiLCJ1bmUgdXZyZSBjciIsInV2cmUgY3IgZXIiLCJjciBhdGlvbiBsYSIsImF0aW9uIGxhIGxpY2VuY2UiLCJhcnQgbGlicmUgcGVybWV0IiwibGlicmUgcGVybWV0IGQiLCJwZXJtZXQgZCBhdm9pciIsImQgYXZvaXIgam91aXNzYW5jZSIsImF2b2lyIGpvdWlzc2FuY2UgZGVzIiwiam91aXNzYW5jZSBkZXMgdXZyZXMiLCJkZXMgdXZyZXMgdG91dCIsInV2cmVzIHRvdXQgZW4iLCJ0b3V0IGVuIHJlY29ubmFpc3NhbnQiLCJlbiByZWNvbm5haXNzYW50IGxlcyIsInJlY29ubmFpc3NhbnQgbGVzIGRyb2l0cyIsImxlcyBkcm9pdHMgZXQiLCJkcm9pdHMgZXQgbGVzIiwiZXQgbGVzIHJlc3BvbnNhYmlsaXQiLCJsZXMgcmVzcG9uc2FiaWxpdCBzIiwicmVzcG9uc2FiaWxpdCBzIGRlIiwicyBkZSBjaGFjdW4iLCJkZSBjaGFjdW4gYXZlYyIsImNoYWN1biBhdmVjIGxlIiwiYXZlYyBsZSBkIiwibGUgZCB2ZWxvcHBlbWVudCIsImQgdmVsb3BwZW1lbnQgZHUiLCJ2ZWxvcHBlbWVudCBkdSBudW0iLCJsIGludmVudGlvbiBkIiwiaW52ZW50aW9uIGQgaW50ZXJuZXQiLCJkIGludGVybmV0IGV0IiwibG9naWNpZWxzIGxpYnJlcyBsZXMiLCJsaWJyZXMgbGVzIG1vZGFsaXQiLCJtb2RhbGl0IHMgZGUiLCJjciBhdGlvbiBvbnQiLCJhdGlvbiBvbnQgdm9sdSIsIm9udCB2b2x1IGxlcyIsInZvbHUgbGVzIHByb2R1Y3Rpb25zIiwibGVzIHByb2R1Y3Rpb25zIGRlIiwibCBlc3ByaXQgcyIsImVzcHJpdCBzIG9mZnJlbnQiLCJzIG9mZnJlbnQgbmF0dXJlbGxlbWVudCIsIm9mZnJlbnQgbmF0dXJlbGxlbWVudCBsYSIsIm5hdHVyZWxsZW1lbnQgbGEgY2lyY3VsYXRpb24iLCJsYSBjaXJjdWxhdGlvbiBsIiwiY2lyY3VsYXRpb24gbCBjaGFuZ2UiLCJsIGNoYW5nZSBldCIsImNoYW5nZSBldCBhdXgiLCJldCBhdXggdHJhbnNmb3JtYXRpb25zIiwiYXV4IHRyYW5zZm9ybWF0aW9ucyBlbGxlcyIsInRyYW5zZm9ybWF0aW9ucyBlbGxlcyBzZSIsImVsbGVzIHNlIHByIiwic2UgcHIgdGVudCIsInByIHRlbnQgZmF2b3JhYmxlbWVudCIsInRlbnQgZmF2b3JhYmxlbWVudCBsYSIsImZhdm9yYWJsZW1lbnQgbGEgciIsInIgYWxpc2F0aW9uIGQiLCJhbGlzYXRpb24gZCB1dnJlcyIsImQgdXZyZXMgY29tbXVuZXMiLCJ1dnJlcyBjb21tdW5lcyBxdWUiLCJjb21tdW5lcyBxdWUgY2hhY3VuIiwicXVlIGNoYWN1biBwZXV0IiwiY2hhY3VuIHBldXQgYXVnbWVudGVyIiwicGV1dCBhdWdtZW50ZXIgcG91ciIsImF1Z21lbnRlciBwb3VyIGwiLCJwb3VyIGwgYXZhbnRhZ2UiLCJsIGF2YW50YWdlIGRlIiwiYXZhbnRhZ2UgZGUgdG91cyIsImRlIHRvdXMgYyIsInRvdXMgYyBlc3QiLCJlc3NlbnRpZWxsZSBkZSBsYSIsInByb3QgZ2VyIGNlcyIsImdlciBjZXMgcHJvZHVjdGlvbnMiLCJjZXMgcHJvZHVjdGlvbnMgZGUiLCJsIGVzcHJpdCBzZWxvbiIsImVzcHJpdCBzZWxvbiBsZXMiLCJzZWxvbiBsZXMgcHJpbmNpcGVzIiwibGVzIHByaW5jaXBlcyBkdSIsInByaW5jaXBlcyBkdSBjb3B5bGVmdCIsImR1IGNvcHlsZWZ0IGxpYmVydCIsImNvcHlsZWZ0IGxpYmVydCBkIiwibGliZXJ0IGQgdXNhZ2UiLCJkIHVzYWdlIGRlIiwidXNhZ2UgZGUgY29waWUiLCJjb3BpZSBkZSBkaWZmdXNpb24iLCJkaWZmdXNpb24gZGUgdHJhbnNmb3JtYXRpb24iLCJkZSB0cmFuc2Zvcm1hdGlvbiBldCIsInRyYW5zZm9ybWF0aW9uIGV0IGludGVyZGljdGlvbiIsImV0IGludGVyZGljdGlvbiBkIiwiaW50ZXJkaWN0aW9uIGQgYXBwcm9wcmlhdGlvbiIsImQgYXBwcm9wcmlhdGlvbiBleGNsdXNpdmUiLCJhcHByb3ByaWF0aW9uIGV4Y2x1c2l2ZSBkIiwiZXhjbHVzaXZlIGQgZmluaXRpb25zIiwiZCBmaW5pdGlvbnMgbm91cyIsImZpbml0aW9ucyBub3VzIGQiLCJub3VzIGQgc2lnbm9ucyIsImQgc2lnbm9ucyBwYXIiLCJzaWdub25zIHBhciB1dnJlIiwicGFyIHV2cmUgYXV0YW50IiwidXZyZSBhdXRhbnQgbCIsImF1dGFudCBsIHV2cmUiLCJ1dnJlIGluaXRpYWxlIGxlcyIsImluaXRpYWxlIGxlcyB1dnJlcyIsImNvbnMgcXVlbnRlcyBxdWUiLCJxdWVudGVzIHF1ZSBsIiwicXVlIGwgdXZyZSIsInV2cmUgY29tbXVuZSB0ZWxsZXMiLCJjb21tdW5lIHRlbGxlcyBxdWUiLCJkIGZpbmllcyBjaSIsImZpbmllcyBjaSBhcHIiLCJ1dnJlIGNvbW11bmUgaWwiLCJjb21tdW5lIGlsIHMiLCJ1bmUgdXZyZSBxdWkiLCJ1dnJlIHF1aSBjb21wcmVuZCIsImNvbXByZW5kIGwgdXZyZSIsInV2cmUgaW5pdGlhbGUgYWluc2kiLCJpbml0aWFsZSBhaW5zaSBxdWUiLCJsIGF1dGV1ciBpbml0aWFsIiwiYXV0ZXVyIGluaXRpYWwgcXVpIiwiaW5pdGlhbCBxdWkgcGFyIiwiZmFpdGVzIGwgdXZyZSIsInV2cmUgaW5pdGlhbGUgYyIsImluaXRpYWxlIGMgZXN0IiwiZGlyZSBsIHV2cmUiLCJsIHV2cmUgY3IiLCJ1dnJlIGNyIGUiLCJ1dnJlIGNvbW11bmUgZG9udCIsInNvdWhhaXRlIGxlcyB1dnJlcyIsImRpcmUgbGVzIGNvbnRyaWJ1dGlvbnMiLCJsZXMgY29udHJpYnV0aW9ucyBkZXMiLCJjb250cmlidXRpb25zIGRlcyBhdXRldXJzIiwiYXV0ZXVycyBxdWkgcGFydGljaXBlbnQiLCJxdWkgcGFydGljaXBlbnQgbGEiLCJwYXJ0aWNpcGVudCBsYSBmb3JtYXRpb24iLCJ1dnJlIGNvbW11bmUgZW4iLCJjb21tdW5lIGVuIGZhaXNhbnQiLCJsYSBsaWNlbmNlIG9yaWdpbmF1eCIsImxpY2VuY2Ugb3JpZ2luYXV4IHNvdXJjZXMiXX0seyJsaWNlbnNlVGV4dHMiOlsiR05VIExJQlJBUlkgR0VORVJBTCBQVUJMSUMgTElDRU5TRVxuXG5WZXJzaW9uIDIsIEp1bmUgMTk5MSBDb3B5cmlnaHQgKEMpIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG5cbjUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0FcblxuRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLlxuXG5bVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBHUEwuIEl0IGlzIG51bWJlcmVkIDIgYmVjYXVzZSBpdCBnb2VzIHdpdGggdmVyc2lvbiAyIG9mIHRoZSBvcmRpbmFyeSBHUEwuXVxuXG5QcmVhbWJsZVxuXG5UaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuXG5cblRoaXMgbGljZW5zZSwgdGhlIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lIHNwZWNpYWxseSBkZXNpZ25hdGVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSwgYW5kIHRvIGFueSBvdGhlciBsaWJyYXJpZXMgd2hvc2UgYXV0aG9ycyBkZWNpZGUgdG8gdXNlIGl0LiBZb3UgY2FuIHVzZSBpdCBmb3IgeW91ciBsaWJyYXJpZXMsIHRvby5cblxuV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdCBwcmljZS4gT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLlxuXG5UbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkIGFueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIG9yIGlmIHlvdSBtb2RpZnkgaXQuXG5cbkZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUgeW91LiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIElmIHlvdSBsaW5rIGEgcHJvZ3JhbSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlIGNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cyBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtIHdpdGggdGhlIGxpYnJhcnksIGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZyBpdC4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLlxuXG5PdXIgbWV0aG9kIG9mIHByb3RlY3RpbmcgeW91ciByaWdodHMgaGFzIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgbGlicmFyeSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS5cblxuQWxzbywgZm9yIGVhY2ggZGlzdHJpYnV0b3IncyBwcm90ZWN0aW9uLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBsaWJyYXJ5LiBJZiB0aGUgbGlicmFyeSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2Ugd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy5cblxuRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgY29tcGFuaWVzIGRpc3RyaWJ1dGluZyBmcmVlIHNvZnR3YXJlIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIHRodXMgaW4gZWZmZWN0IHRyYW5zZm9ybWluZyB0aGUgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHNvZnR3YXJlLiBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLlxuXG5Nb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggd2FzIGRlc2lnbmVkIGZvciB1dGlsaXR5IHByb2dyYW1zLiBUaGlzIGxpY2Vuc2UsIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMuIFRoaXMgbGljZW5zZSBpcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgb25lOyBiZSBzdXJlIHRvIHJlYWQgaXQgaW4gZnVsbCwgYW5kIGRvbid0IGFzc3VtZSB0aGF0IGFueXRoaW5nIGluIGl0IGlzIHRoZSBzYW1lIGFzIGluIHRoZSBvcmRpbmFyeSBsaWNlbnNlLlxuXG5UaGUgcmVhc29uIHdlIGhhdmUgYSBzZXBhcmF0ZSBwdWJsaWMgbGljZW5zZSBmb3Igc29tZSBsaWJyYXJpZXMgaXMgdGhhdCB0aGV5IGJsdXIgdGhlIGRpc3RpbmN0aW9uIHdlIHVzdWFsbHkgbWFrZSBiZXR3ZWVuIG1vZGlmeWluZyBvciBhZGRpbmcgdG8gYSBwcm9ncmFtIGFuZCBzaW1wbHkgdXNpbmcgaXQuIExpbmtpbmcgYSBwcm9ncmFtIHdpdGggYSBsaWJyYXJ5LCB3aXRob3V0IGNoYW5naW5nIHRoZSBsaWJyYXJ5LCBpcyBpbiBzb21lIHNlbnNlIHNpbXBseSB1c2luZyB0aGUgbGlicmFyeSwgYW5kIGlzIGFuYWxvZ291cyB0byBydW5uaW5nIGEgdXRpbGl0eSBwcm9ncmFtIG9yIGFwcGxpY2F0aW9uIHByb2dyYW0uIEhvd2V2ZXIsIGluIGEgdGV4dHVhbCBhbmQgbGVnYWwgc2Vuc2UsIHRoZSBsaW5rZWQgZXhlY3V0YWJsZSBpcyBhIGNvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeSwgYW5kIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRyZWF0cyBpdCBhcyBzdWNoLlxuXG5CZWNhdXNlIG9mIHRoaXMgYmx1cnJlZCBkaXN0aW5jdGlvbiwgdXNpbmcgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIGxpYnJhcmllcyBkaWQgbm90IGVmZmVjdGl2ZWx5IHByb21vdGUgc29mdHdhcmUgc2hhcmluZywgYmVjYXVzZSBtb3N0IGRldmVsb3BlcnMgZGlkIG5vdCB1c2UgdGhlIGxpYnJhcmllcy4gV2UgY29uY2x1ZGVkIHRoYXQgd2Vha2VyIGNvbmRpdGlvbnMgbWlnaHQgcHJvbW90ZSBzaGFyaW5nIGJldHRlci5cblxuSG93ZXZlciwgdW5yZXN0cmljdGVkIGxpbmtpbmcgb2Ygbm9uLWZyZWUgcHJvZ3JhbXMgd291bGQgZGVwcml2ZSB0aGUgdXNlcnMgb2YgdGhvc2UgcHJvZ3JhbXMgb2YgYWxsIGJlbmVmaXQgZnJvbSB0aGUgZnJlZSBzdGF0dXMgb2YgdGhlIGxpYnJhcmllcyB0aGVtc2VsdmVzLiBUaGlzIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBwZXJtaXQgZGV2ZWxvcGVycyBvZiBub24tZnJlZSBwcm9ncmFtcyB0byB1c2UgZnJlZSBsaWJyYXJpZXMsIHdoaWxlIHByZXNlcnZpbmcgeW91ciBmcmVlZG9tIGFzIGEgdXNlciBvZiBzdWNoIHByb2dyYW1zIHRvIGNoYW5nZSB0aGUgZnJlZSBsaWJyYXJpZXMgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZW0uIChXZSBoYXZlIG5vdCBzZWVuIGhvdyB0byBhY2hpZXZlIHRoaXMgYXMgcmVnYXJkcyBjaGFuZ2VzIGluIGhlYWRlciBmaWxlcywgYnV0IHdlIGhhdmUgYWNoaWV2ZWQgaXQgYXMgcmVnYXJkcyBjaGFuZ2VzIGluIHRoZSBhY3R1YWwgZnVuY3Rpb25zIG9mIHRoZSBMaWJyYXJ5LikgVGhlIGhvcGUgaXMgdGhhdCB0aGlzIHdpbGwgbGVhZCB0byBmYXN0ZXIgZGV2ZWxvcG1lbnQgb2YgZnJlZSBsaWJyYXJpZXMuXG5cblRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBmb2xsb3cuIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIFwid29yayBiYXNlZCBvbiB0aGUgbGlicmFyeVwiIGFuZCBhIFwid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnlcIi4gVGhlIGZvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hpbGUgdGhlIGxhdHRlciBvbmx5IHdvcmtzIHRvZ2V0aGVyIHdpdGggdGhlIGxpYnJhcnkuXG5cbk5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBsaWJyYXJ5IHRvIGJlIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgcmF0aGVyIHRoYW4gYnkgdGhpcyBzcGVjaWFsIG9uZS5cblxuVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OXG5cbiAgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3Igb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgXCJ0aGlzIExpY2Vuc2VcIikuIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzIFwieW91XCIuXG5cbiAgIEEgXCJsaWJyYXJ5XCIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YSBwcmVwYXJlZCBzbyBhcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMgKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy5cblxuICAgVGhlIFwiTGlicmFyeVwiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yayB3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gQSBcIndvcmsgYmFzZWQgb24gdGhlIExpYnJhcnlcIiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIHN0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gXCJtb2RpZmljYXRpb25cIi4pXG5cbiAgIFwiU291cmNlIGNvZGVcIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LlxuXG4gICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbSBzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3Igd3JpdGluZyBpdCkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzIGFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLlxuXG4gICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5J3MgY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgTGlicmFyeS5cblxuICAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuXG5cbiAgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczpcblxuICAgICAgYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LlxuXG4gICAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS5cblxuICAgICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5IGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LCBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLlxuXG4gICAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcyBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlIGFwcGxpY2F0aW9uLiBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLilcblxuICAgVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuIElmIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksIGFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUgZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LlxuXG4gICBUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LlxuXG4gICBJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5IHdpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlIHRvIGEgZ2l2ZW4gY29weSBvZiB0aGUgTGlicmFyeS4gVG8gZG8gdGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbyB0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGluc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5IHRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbiB0aGVzZSBub3RpY2VzLlxuXG4gICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yIHRoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsIHN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuXG5cbiAgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZiB0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuXG5cbiAgIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yIGRlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuXG5cbiAgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0byBkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuXG5cbiAgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlIExpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IgbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhIFwid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnlcIi4gU3VjaCBhIHdvcmssIGluIGlzb2xhdGlvbiwgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5LCBhbmQgdGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS5cblxuICAgSG93ZXZlciwgbGlua2luZyBhIFwid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnlcIiB3aXRoIHRoZSBMaWJyYXJ5IGNyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdCBjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgXCJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeVwiLiBUaGUgZXhlY3V0YWJsZSBpcyB0aGVyZWZvcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuIFNlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLlxuXG4gICBXaGVuIGEgXCJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeVwiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlIHRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4gV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUgbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuIFRoZSB0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LlxuXG4gICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YSBzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUgZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdCBmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlIHdvcmsuIChFeGVjdXRhYmxlcyBjb250YWluaW5nIHRoaXMgb2JqZWN0IGNvZGUgcGx1cyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSB3aWxsIHN0aWxsIGZhbGwgdW5kZXIgU2VjdGlvbiA2LilcblxuICAgT3RoZXJ3aXNlLCBpZiB0aGUgd29yayBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnksIHlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuIEFueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LCB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBsaW5rZWQgZGlyZWN0bHkgd2l0aCB0aGUgTGlicmFyeSBpdHNlbGYuXG5cbiAgIDYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21waWxlIG9yIGxpbmsgYSBcIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5XCIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEgd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdCBtb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UgZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuXG5cbiAgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZSBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gSWYgdGhlIHdvcmsgZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZSBkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBBbHNvLCB5b3UgbXVzdCBkbyBvbmUgb2YgdGhlc2UgdGhpbmdzOlxuXG4gICAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBcIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5XCIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQgZXhlY3V0YWJsZSBjb250YWluaW5nIHRoZSBtb2RpZmllZCBMaWJyYXJ5LiAoSXQgaXMgdW5kZXJzdG9vZCB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24gdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pXG5cbiAgICAgIGIpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscyBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi5cblxuICAgICAgYykgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS5cblxuICAgICAgZCkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LlxuXG4gICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlIFwid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnlcIiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvciByZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuXG5cbiAgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlIHJlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkgYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90IHVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UgZGlzdHJpYnV0ZS5cblxuICAgNy4gWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgc3VjaCBhIGNvbWJpbmVkIGxpYnJhcnksIHByb3ZpZGVkIHRoYXQgdGhlIHNlcGFyYXRlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UgcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIHRoaW5nczpcblxuICAgICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzLiBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBTZWN0aW9ucyBhYm92ZS5cblxuICAgICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLlxuXG4gICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLlxuXG4gICA5LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuXG5cbiAgIDEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkgc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8gdGhpcyBMaWNlbnNlLlxuXG4gICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS5cblxuICAgSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksIGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuXG5cbiAgIEl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcyBpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuIE1hbnkgcGVvcGxlIGhhdmUgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0IHN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0IGNob2ljZS5cblxuICAgVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy5cblxuICAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBMaWJyYXJ5IHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCBcImFueSBsYXRlciB2ZXJzaW9uXCIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEgbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi5cblxuICAgMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsIHdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS5cblxuICAgTk8gV0FSUkFOVFlcblxuICAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSBcIkFTIElTXCIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBMSUJSQVJZIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi5cblxuICAgMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlNcblxuSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllc1xuXG5JZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0IHBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UuIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZyByZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuXG5cblRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiBJdCBpcyBzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUgXCJjb3B5cmlnaHRcIiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLlxuXG5vbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5J3MgbmFtZSBhbmQgYW4gaWRlYSBvZiB3aGF0IGl0IGRvZXMuXG5cbkNvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvclxuXG5UaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cblRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG5Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuXG5cbkFsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLlxuXG5Zb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91ciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhIFwiY29weXJpZ2h0IGRpc2NsYWltZXJcIiBmb3IgdGhlIGxpYnJhcnksIGlmIG5lY2Vzc2FyeS4gSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOlxuXG5Zb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluXG5cbnRoZSBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlblxuXG5ieSBKYW1lcyBSYW5kb20gSGFja2VyLlxuXG5zaWduYXR1cmUgb2YgVHkgQ29vbiwgMSBBcHJpbCAxOTkwXG5cblR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlXG5cblRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhIl0sImxpY2Vuc2VJZHMiOlsiTEdQTC0yLjAtb3ItbGF0ZXIiLCJMR1BMLTIuMC1vbmx5IiwiTEdQTC0yLjArIiwiTEdQTC0yLjAiXSwia2V5d29yZHMiOlsiYyAxOTkxIGZyZWUiLCJ0aGUgbGlicmFyeSBncGwiLCJsaWJyYXJ5IGdwbCBpdCIsImdwbCBpdCBpcyIsIml0IGlzIG51bWJlcmVkIiwiaXMgbnVtYmVyZWQgMiIsIm51bWJlcmVkIDIgYmVjYXVzZSIsIjIgYmVjYXVzZSBpdCIsImJlY2F1c2UgaXQgZ29lcyIsIml0IGdvZXMgd2l0aCIsImdvZXMgd2l0aCB2ZXJzaW9uIiwid2l0aCB2ZXJzaW9uIDIiLCJ0aGUgb3JkaW5hcnkgZ3BsIiwib3JkaW5hcnkgZ3BsIHByZWFtYmxlIiwiZ3BsIHByZWFtYmxlIHRoZSIsInNwZWNpYWxseSBkZXNpZ25hdGVkIGZyZWUiLCJkZXNpZ25hdGVkIGZyZWUgc29mdHdhcmUiLCJmb3VuZGF0aW9uIHNvZnR3YXJlIGFuZCIsImFueSBvdGhlciBsaWJyYXJpZXMiLCJvdGhlciBsaWJyYXJpZXMgd2hvc2UiLCJsaWJyYXJpZXMgd2hvc2UgYXV0aG9ycyIsIndob3NlIGF1dGhvcnMgZGVjaWRlIiwiYXV0aG9ycyBkZWNpZGUgdG8iLCJmb3IgeW91ciBsaWJyYXJpZXMiLCJ5b3VyIGxpYnJhcmllcyB0b28iLCJsaWJyYXJpZXMgdG9vIHdoZW4iLCJ5b3UgbGluayBhIiwibGluayBhIHByb2dyYW0iLCJ0aGVpciByaWdodHMgb3VyIiwicmlnaHRzIG91ciBtZXRob2QiLCJvdXIgbWV0aG9kIG9mIiwibWV0aG9kIG9mIHByb3RlY3RpbmciLCJvZiBwcm90ZWN0aW5nIHlvdXIiLCJwcm90ZWN0aW5nIHlvdXIgcmlnaHRzIiwieW91ciByaWdodHMgaGFzIiwicmlnaHRzIGhhcyB0d28iLCJoYXMgdHdvIHN0ZXBzIiwidGhlIGxpYnJhcnkgYWxzbyIsImxpYnJhcnkgYWxzbyBmb3IiLCJmb3IgZWFjaCBkaXN0cmlidXRvciIsImVhY2ggZGlzdHJpYnV0b3IgcyIsImRpc3RyaWJ1dG9yIHMgcHJvdGVjdGlvbiIsInMgcHJvdGVjdGlvbiB3ZSIsInByb3RlY3Rpb24gd2Ugd2FudCIsInRoaXMgZnJlZSBsaWJyYXJ5IiwiZnJlZSBsaWJyYXJ5IGlmIiwiZGFuZ2VyIHRoYXQgY29tcGFuaWVzIiwidGhhdCBjb21wYW5pZXMgZGlzdHJpYnV0aW5nIiwiY29tcGFuaWVzIGRpc3RyaWJ1dGluZyBmcmVlIiwiZGlzdHJpYnV0aW5nIGZyZWUgc29mdHdhcmUiLCJmcmVlIHNvZnR3YXJlIHdpbGwiLCJzb2Z0d2FyZSB3aWxsIGluZGl2aWR1YWxseSIsInBhdGVudCBsaWNlbnNlcyB0aHVzIiwibGljZW5zZXMgdGh1cyBpbiIsInRodXMgaW4gZWZmZWN0IiwiaW4gZWZmZWN0IHRyYW5zZm9ybWluZyIsImVmZmVjdCB0cmFuc2Zvcm1pbmcgdGhlIiwidHJhbnNmb3JtaW5nIHRoZSBwcm9ncmFtIiwiaW50byBwcm9wcmlldGFyeSBzb2Z0d2FyZSIsInByb3ByaWV0YXJ5IHNvZnR3YXJlIHRvIiwic29mdHdhcmUgdG8gcHJldmVudCIsImF0IGFsbCBtb3N0IiwiYWxsIG1vc3QgZ251IiwibGljZW5zZSB3aGljaCB3YXMiLCJ3aGljaCB3YXMgZGVzaWduZWQiLCJ3YXMgZGVzaWduZWQgZm9yIiwiZGVzaWduZWQgZm9yIHV0aWxpdHkiLCJmb3IgdXRpbGl0eSBwcm9ncmFtcyIsInV0aWxpdHkgcHJvZ3JhbXMgdGhpcyIsInByb2dyYW1zIHRoaXMgbGljZW5zZSIsImRlc2lnbmF0ZWQgbGlicmFyaWVzIHRoaXMiLCJsaWJyYXJpZXMgdGhpcyBsaWNlbnNlIiwibGljZW5zZSBpcyBxdWl0ZSIsInRoZSBvcmRpbmFyeSBvbmUiLCJvcmRpbmFyeSBvbmUgYmUiLCJvbmUgYmUgc3VyZSIsImJlIHN1cmUgdG8iLCJzdXJlIHRvIHJlYWQiLCJyZWFkIGl0IGluIiwiaXQgaW4gZnVsbCIsImluIGZ1bGwgYW5kIiwiZnVsbCBhbmQgZG9uIiwiYW5kIGRvbiB0IiwiZG9uIHQgYXNzdW1lIiwidCBhc3N1bWUgdGhhdCIsImFzc3VtZSB0aGF0IGFueXRoaW5nIiwidGhhdCBhbnl0aGluZyBpbiIsImFueXRoaW5nIGluIGl0IiwiaW4gaXQgaXMiLCJzYW1lIGFzIGluIiwiaW4gdGhlIG9yZGluYXJ5IiwidGhlIG9yZGluYXJ5IGxpY2Vuc2UiLCJvcmRpbmFyeSBsaWNlbnNlIHRoZSIsImxpY2Vuc2UgdGhlIHJlYXNvbiIsInJlYXNvbiB3ZSBoYXZlIiwid2UgaGF2ZSBhIiwiaGF2ZSBhIHNlcGFyYXRlIiwiYSBzZXBhcmF0ZSBwdWJsaWMiLCJzZXBhcmF0ZSBwdWJsaWMgbGljZW5zZSIsImxpY2Vuc2UgZm9yIHNvbWUiLCJmb3Igc29tZSBsaWJyYXJpZXMiLCJsaWJyYXJpZXMgaXMgdGhhdCIsImlzIHRoYXQgdGhleSIsInRoYXQgdGhleSBibHVyIiwidGhleSBibHVyIHRoZSIsImJsdXIgdGhlIGRpc3RpbmN0aW9uIiwidGhlIGRpc3RpbmN0aW9uIHdlIiwiZGlzdGluY3Rpb24gd2UgdXN1YWxseSIsIndlIHVzdWFsbHkgbWFrZSIsInVzdWFsbHkgbWFrZSBiZXR3ZWVuIiwibWFrZSBiZXR3ZWVuIG1vZGlmeWluZyIsImJldHdlZW4gbW9kaWZ5aW5nIG9yIiwibW9kaWZ5aW5nIG9yIGFkZGluZyIsIm9yIGFkZGluZyB0byIsImFkZGluZyB0byBhIiwiYSBwcm9ncmFtIGFuZCIsInByb2dyYW0gYW5kIHNpbXBseSIsImFuZCBzaW1wbHkgdXNpbmciLCJzaW1wbHkgdXNpbmcgaXQiLCJ1c2luZyBpdCBsaW5raW5nIiwiaXQgbGlua2luZyBhIiwibGlua2luZyBhIHByb2dyYW0iLCJhIGxpYnJhcnkgd2l0aG91dCIsImxpYnJhcnkgd2l0aG91dCBjaGFuZ2luZyIsImNoYW5naW5nIHRoZSBsaWJyYXJ5IiwibGlicmFyeSBpcyBpbiIsImlzIGluIHNvbWUiLCJpbiBzb21lIHNlbnNlIiwic29tZSBzZW5zZSBzaW1wbHkiLCJzZW5zZSBzaW1wbHkgdXNpbmciLCJzaW1wbHkgdXNpbmcgdGhlIiwibGlicmFyeSBhbmQgaXMiLCJhbmQgaXMgYW5hbG9nb3VzIiwiaXMgYW5hbG9nb3VzIHRvIiwiYW5hbG9nb3VzIHRvIHJ1bm5pbmciLCJ0byBydW5uaW5nIGEiLCJydW5uaW5nIGEgdXRpbGl0eSIsImEgdXRpbGl0eSBwcm9ncmFtIiwidXRpbGl0eSBwcm9ncmFtIG9yIiwicHJvZ3JhbSBvciBhcHBsaWNhdGlvbiIsIm9yIGFwcGxpY2F0aW9uIHByb2dyYW0iLCJhcHBsaWNhdGlvbiBwcm9ncmFtIGhvd2V2ZXIiLCJwcm9ncmFtIGhvd2V2ZXIgaW4iLCJob3dldmVyIGluIGEiLCJpbiBhIHRleHR1YWwiLCJhIHRleHR1YWwgYW5kIiwidGV4dHVhbCBhbmQgbGVnYWwiLCJhbmQgbGVnYWwgc2Vuc2UiLCJsZWdhbCBzZW5zZSB0aGUiLCJzZW5zZSB0aGUgbGlua2VkIiwidGhlIGxpbmtlZCBleGVjdXRhYmxlIiwibGlua2VkIGV4ZWN1dGFibGUgaXMiLCJleGVjdXRhYmxlIGlzIGEiLCJpcyBhIGNvbWJpbmVkIiwib3JpZ2luYWwgbGlicmFyeSBhbmQiLCJsaWJyYXJ5IGFuZCB0aGUiLCJhbmQgdGhlIG9yZGluYXJ5IiwicHVibGljIGxpY2Vuc2UgdHJlYXRzIiwibGljZW5zZSB0cmVhdHMgaXQiLCJ0cmVhdHMgaXQgYXMiLCJpdCBhcyBzdWNoIiwiYXMgc3VjaCBiZWNhdXNlIiwic3VjaCBiZWNhdXNlIG9mIiwib2YgdGhpcyBibHVycmVkIiwidGhpcyBibHVycmVkIGRpc3RpbmN0aW9uIiwiYmx1cnJlZCBkaXN0aW5jdGlvbiB1c2luZyIsImRpc3RpbmN0aW9uIHVzaW5nIHRoZSIsInVzaW5nIHRoZSBvcmRpbmFyeSIsImxpY2Vuc2UgZm9yIGxpYnJhcmllcyIsImZvciBsaWJyYXJpZXMgZGlkIiwibGlicmFyaWVzIGRpZCBub3QiLCJkaWQgbm90IGVmZmVjdGl2ZWx5Iiwibm90IGVmZmVjdGl2ZWx5IHByb21vdGUiLCJlZmZlY3RpdmVseSBwcm9tb3RlIHNvZnR3YXJlIiwicHJvbW90ZSBzb2Z0d2FyZSBzaGFyaW5nIiwic29mdHdhcmUgc2hhcmluZyBiZWNhdXNlIiwic2hhcmluZyBiZWNhdXNlIG1vc3QiLCJiZWNhdXNlIG1vc3QgZGV2ZWxvcGVycyIsIm1vc3QgZGV2ZWxvcGVycyBkaWQiLCJkZXZlbG9wZXJzIGRpZCBub3QiLCJkaWQgbm90IHVzZSIsInVzZSB0aGUgbGlicmFyaWVzIiwidGhlIGxpYnJhcmllcyB3ZSIsImxpYnJhcmllcyB3ZSBjb25jbHVkZWQiLCJ3ZSBjb25jbHVkZWQgdGhhdCIsImNvbmNsdWRlZCB0aGF0IHdlYWtlciIsInRoYXQgd2Vha2VyIGNvbmRpdGlvbnMiLCJ3ZWFrZXIgY29uZGl0aW9ucyBtaWdodCIsImNvbmRpdGlvbnMgbWlnaHQgcHJvbW90ZSIsIm1pZ2h0IHByb21vdGUgc2hhcmluZyIsInByb21vdGUgc2hhcmluZyBiZXR0ZXIiLCJzaGFyaW5nIGJldHRlciBob3dldmVyIiwiYmV0dGVyIGhvd2V2ZXIgdW5yZXN0cmljdGVkIiwiaG93ZXZlciB1bnJlc3RyaWN0ZWQgbGlua2luZyIsInVucmVzdHJpY3RlZCBsaW5raW5nIG9mIiwibGlua2luZyBvZiBub24iLCJmcmVlIHByb2dyYW1zIHdvdWxkIiwicHJvZ3JhbXMgd291bGQgZGVwcml2ZSIsIndvdWxkIGRlcHJpdmUgdGhlIiwiZGVwcml2ZSB0aGUgdXNlcnMiXX0seyJsaWNlbnNlVGV4dHMiOlsiR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFXG5cblZlcnNpb24gMi4xLCBGZWJydWFyeSAxOTk5XG5cbkNvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cblxuNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQVxuXG5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuXG5cbltUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBMZXNzZXIgR1BMLiBJdCBhbHNvIGNvdW50cyBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZSB0aGUgdmVyc2lvbiBudW1iZXIgMi4xLl1cblxuUHJlYW1ibGVcblxuVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLlxuXG5UaGlzIGxpY2Vuc2UsIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lIHNwZWNpYWxseSBkZXNpZ25hdGVkIHNvZnR3YXJlIHBhY2thZ2VzLS10eXBpY2FsbHkgbGlicmFyaWVzLS1vZiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCBvdGhlciBhdXRob3JzIHdobyBkZWNpZGUgdG8gdXNlIGl0LiBZb3UgY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlciB0aGlzIGxpY2Vuc2Ugb3IgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgdGhlIGJldHRlciBzdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucyBiZWxvdy5cblxuV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLCBub3QgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLlxuXG5UbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkIGRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSBvciBpZiB5b3UgbW9kaWZ5IGl0LlxuXG5Gb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCB3aGV0aGVyIGdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlIHlvdS4gWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUgY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtIHdpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nIGl0LiBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuXG5cbldlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCBhIHR3by1zdGVwIG1ldGhvZDogKDEpIHdlIGNvcHlyaWdodCB0aGUgbGlicmFyeSwgYW5kICgyKSB3ZSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlLCB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuXG5cblRvIHByb3RlY3QgZWFjaCBkaXN0cmlidXRvciwgd2Ugd2FudCB0byBtYWtlIGl0IHZlcnkgY2xlYXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIGZyZWUgbGlicmFyeS4gQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IHRoZSBvcmlnaW5hbCBhdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZCBieSBvdGhlcnMuXG5cbkZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mIGFueSBmcmVlIHByb2dyYW0uIFdlIHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgYSBjb21wYW55IGNhbm5vdCBlZmZlY3RpdmVseSByZXN0cmljdCB0aGUgdXNlcnMgb2YgYSBmcmVlIHByb2dyYW0gYnkgb2J0YWluaW5nIGEgcmVzdHJpY3RpdmUgbGljZW5zZSBmcm9tIGEgcGF0ZW50IGhvbGRlci4gVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdCBhbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCBmcmVlZG9tIG9mIHVzZSBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLlxuXG5Nb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZCBpcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gV2UgdXNlIHRoaXMgbGljZW5zZSBmb3IgY2VydGFpbiBsaWJyYXJpZXMgaW4gb3JkZXIgdG8gcGVybWl0IGxpbmtpbmcgdGhvc2UgbGlicmFyaWVzIGludG8gbm9uLWZyZWUgcHJvZ3JhbXMuXG5cbldoZW4gYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIGEgbGlicmFyeSwgd2hldGhlciBzdGF0aWNhbGx5IG9yIHVzaW5nIGEgc2hhcmVkIGxpYnJhcnksIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIGlzIGxlZ2FsbHkgc3BlYWtpbmcgYSBjb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnkuIFRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIHN1Y2ggbGlua2luZyBvbmx5IGlmIHRoZSBlbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gVGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LlxuXG5XZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgXCJMZXNzZXJcIiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJlY2F1c2UgaXQgZG9lcyBMZXNzIHRvIHByb3RlY3QgdGhlIHVzZXIncyBmcmVlZG9tIHRoYW4gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3Mgb2YgYW4gYWR2YW50YWdlIG92ZXIgY29tcGV0aW5nIG5vbi1mcmVlIHByb2dyYW1zLiBUaGVzZSBkaXNhZHZhbnRhZ2VzIGFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueSBsaWJyYXJpZXMuIEhvd2V2ZXIsIHRoZSBMZXNzZXIgbGljZW5zZSBwcm92aWRlcyBhZHZhbnRhZ2VzIGluIGNlcnRhaW4gc3BlY2lhbCBjaXJjdW1zdGFuY2VzLlxuXG5Gb3IgZXhhbXBsZSwgb24gcmFyZSBvY2Nhc2lvbnMsIHRoZXJlIG1heSBiZSBhIHNwZWNpYWwgbmVlZCB0byBlbmNvdXJhZ2UgdGhlIHdpZGVzdCBwb3NzaWJsZSB1c2Ugb2YgYSBjZXJ0YWluIGxpYnJhcnksIHNvIHRoYXQgaXQgYmVjb21lcyBhIGRlLWZhY3RvIHN0YW5kYXJkLiBUbyBhY2hpZXZlIHRoaXMsIG5vbi1mcmVlIHByb2dyYW1zIG11c3QgYmUgYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlIGxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiBJbiB0aGlzIGNhc2UsIHRoZXJlIGlzIGxpdHRsZSB0byBnYWluIGJ5IGxpbWl0aW5nIHRoZSBmcmVlIGxpYnJhcnkgdG8gZnJlZSBzb2Z0d2FyZSBvbmx5LCBzbyB3ZSB1c2UgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuXG5JbiBvdGhlciBjYXNlcywgcGVybWlzc2lvbiB0byB1c2UgYSBwYXJ0aWN1bGFyIGxpYnJhcnkgaW4gbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBhIGdyZWF0ZXIgbnVtYmVyIG9mIHBlb3BsZSB0byB1c2UgYSBsYXJnZSBib2R5IG9mIGZyZWUgc29mdHdhcmUuIEZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbiBub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIG1hbnkgbW9yZSBwZW9wbGUgdG8gdXNlIHRoZSB3aG9sZSBHTlUgb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcgc3lzdGVtLlxuXG5BbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZSB1c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcyBsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSBoYXMgdGhlIGZyZWVkb20gYW5kIHRoZSB3aGVyZXdpdGhhbCB0byBydW4gdGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS5cblxuVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4gUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgXCJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5XCIgYW5kIGEgXCJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeVwiLiBUaGUgZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdCBiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi5cblxuVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OXG5cbiAgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlciBwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvciBvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkIFwidGhpcyBMaWNlbnNlXCIpLiBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyBcInlvdVwiLlxuXG4gICBBIFwibGlicmFyeVwiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEgcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zICh3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuXG5cbiAgIFRoZSBcIkxpYnJhcnlcIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsgd2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuIEEgXCJ3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5XCIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtIFwibW9kaWZpY2F0aW9uXCIuKVxuXG4gICBcIlNvdXJjZSBjb2RlXCIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS5cblxuICAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiBUaGUgYWN0IG9mIHJ1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20gc3VjaCBhIHByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yIHdyaXRpbmcgaXQpLiBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcyBhbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy5cblxuICAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzIGNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIExpYnJhcnkuXG5cbiAgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLlxuXG4gICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBMaWJyYXJ5IG9yIGFueSBwb3J0aW9uIG9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG5cbiAgICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS5cblxuICAgICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuXG5cbiAgICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eSBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC5cblxuICAgKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZSBhcHBsaWNhdGlvbi4gVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55IGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pXG5cbiAgIFRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuIEJ1dCB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC5cblxuICAgVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS5cblxuICAgSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeSB3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS5cblxuICAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuIFRvIGRvIHRoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28gdGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeSB0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4gdGhlc2Ugbm90aWNlcy5cblxuICAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvciB0aGF0IGNvcHksIHNvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIGFsbCBzdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LlxuXG4gICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YgdGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LlxuXG4gICA0LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLlxuXG4gICBJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQgdG8gZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLlxuXG4gICA1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZSBMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yIGxpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSBcIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5XCIuIFN1Y2ggYSB3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kIHRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIEhvd2V2ZXIsIGxpbmtpbmcgYSBcIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5XCIgd2l0aCB0aGUgTGlicmFyeSBjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQgY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkpLCByYXRoZXIgdGhhbiBhIFwid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnlcIi4gVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiBTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy5cblxuICAgV2hlbiBhIFwid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnlcIiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuIFdoZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlIGxpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiBUaGUgdGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy5cblxuICAgSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEgc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lIGZ1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QgZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZSB3b3JrLiAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pXG5cbiAgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5IGRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LiBBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwgd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLlxuXG4gICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tYmluZSBvciBsaW5rIGEgXCJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeVwiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhIHdvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQgbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlIGVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLlxuXG4gICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4gWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIElmIHRoZSB3b3JrIGR1cmluZyBleGVjdXRpb24gZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMsIHlvdSBtdXN0IGluY2x1ZGUgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UgZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gQWxzbywgeW91IG11c3QgZG8gb25lIG9mIHRoZXNlIHRoaW5nczpcblxuICAgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgXCJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeVwiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gKEl0IGlzIHVuZGVyc3Rvb2QgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKVxuXG4gICAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUgTGlicmFyeS4gQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYSBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwgcmF0aGVyIHRoYW4gY29weWluZyBsaWJyYXJ5IGZ1bmN0aW9ucyBpbnRvIHRoZSBleGVjdXRhYmxlLCBhbmQgKDIpIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzIGludGVyZmFjZS1jb21wYXRpYmxlIHdpdGggdGhlIHZlcnNpb24gdGhhdCB0aGUgd29yayB3YXMgbWFkZSB3aXRoLlxuXG4gICAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSB0aGUgc2FtZSB1c2VyIHRoZSBtYXRlcmlhbHMgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uXG5cbiAgICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZSBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuXG5cbiAgICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZSBtYXRlcmlhbHMgb3IgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyB1c2VyIGEgY29weS5cblxuICAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSBcIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5XCIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IgcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS5cblxuICAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UgcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseSBhY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QgdXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdSBkaXN0cmlidXRlLlxuXG4gICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQgbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZSBwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOlxuXG4gICAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMuIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFNlY3Rpb25zIGFib3ZlLlxuXG4gICAgICBiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdCB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZyB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuXG5cbiAgIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuXG5cbiAgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdCBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC5cblxuICAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeSBzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS5cblxuICAgMTEuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvciBvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudCBsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbiB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuXG5cbiAgIElmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LCBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLlxuXG4gICBJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55IHN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdCBzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nIHRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdCBpbXBvc2UgdGhhdCBjaG9pY2UuXG5cbiAgIFRoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0byBiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS5cblxuICAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIExpYnJhcnkgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy5cblxuICAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBMaWJyYXJ5IHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCBcImFueSBsYXRlciB2ZXJzaW9uXCIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEgbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi5cblxuICAgMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsIHdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS5cblxuICAgTk8gV0FSUkFOVFlcblxuICAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSBcIkFTIElTXCIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBMSUJSQVJZIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi5cblxuICAgMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlNcblxuSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllc1xuXG5JZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0IHBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UuIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZyByZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuXG5cblRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiBJdCBpcyBzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUgXCJjb3B5cmlnaHRcIiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLlxuXG5cdTAwM2NvbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5J3MgbmFtZSBhbmQgYW4gaWRlYSBvZiB3aGF0IGl0IGRvZXMuXHUwMDNlXG5cbkNvcHlyaWdodCAoQykgXHUwMDNjeWVhclx1MDAzZSBcdTAwM2NuYW1lIG9mIGF1dGhvclx1MDAzZVxuXG5UaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG5UaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG5Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQVxuXG5BbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC5cblxuWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIgc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSBcImNvcHlyaWdodCBkaXNjbGFpbWVyXCIgZm9yIHRoZSBsaWJyYXJ5LCBpZiBuZWNlc3NhcnkuIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczpcblxuWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpblxuXG50aGUgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW5cblxuYnkgSmFtZXMgUmFuZG9tIEhhY2tlci5cblxuXHUwMDNjIHNpZ25hdHVyZSBvZiBUeSBDb29uIFx1MDAzZSAsIDEgQXByaWwgMTk5MFxuXG5UeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZVxuXG5UaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0ISJdLCJsaWNlbnNlSWRzIjpbIkxHUEwtMi4xLW9yLWxhdGVyIiwiTEdQTC0yLjEtb25seSIsIkxHUEwtMi4xKyIsIkxHUEwtMi4xIl0sImtleXdvcmRzIjpbIjIgMSBmZWJydWFyeSIsIjEgZmVicnVhcnkgMTk5OSIsImZlYnJ1YXJ5IDE5OTkgY29weXJpZ2h0IiwiYyAxOTkxIDE5OTkiLCIxOTkxIDE5OTkgZnJlZSIsIjE5OTkgZnJlZSBzb2Z0d2FyZSIsInRoZSBsZXNzZXIgZ3BsIiwibGVzc2VyIGdwbCBpdCIsImdwbCBpdCBhbHNvIiwiaXQgYWxzbyBjb3VudHMiLCJhbHNvIGNvdW50cyBhcyIsImNvdW50cyBhcyB0aGUiLCJhcyB0aGUgc3VjY2Vzc29yIiwidGhlIHN1Y2Nlc3NvciBvZiIsInN1Y2Nlc3NvciBvZiB0aGUiLCJnbnUgbGlicmFyeSBwdWJsaWMiLCJsaWJyYXJ5IHB1YmxpYyBsaWNlbnNlIiwidmVyc2lvbiAyIGhlbmNlIiwiMiBoZW5jZSB0aGUiLCJoZW5jZSB0aGUgdmVyc2lvbiIsIjIgMSBwcmVhbWJsZSIsIjEgcHJlYW1ibGUgdGhlIiwic3BlY2lhbGx5IGRlc2lnbmF0ZWQgc29mdHdhcmUiLCJkZXNpZ25hdGVkIHNvZnR3YXJlIHBhY2thZ2VzIiwic29mdHdhcmUgcGFja2FnZXMgdHlwaWNhbGx5IiwicGFja2FnZXMgdHlwaWNhbGx5IGxpYnJhcmllcyIsInR5cGljYWxseSBsaWJyYXJpZXMgb2YiLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIGFuZCIsImZvdW5kYXRpb24gYW5kIG90aGVyIiwiYW5kIG90aGVyIGF1dGhvcnMiLCJvdGhlciBhdXRob3JzIHdobyIsImF1dGhvcnMgd2hvIGRlY2lkZSIsIndobyBkZWNpZGUgdG8iLCJ1c2UgaXQgdG9vIiwiaXQgdG9vIGJ1dCIsInRvbyBidXQgd2UiLCJidXQgd2Ugc3VnZ2VzdCIsIndlIHN1Z2dlc3QgeW91Iiwic3VnZ2VzdCB5b3UgZmlyc3QiLCJ5b3UgZmlyc3QgdGhpbmsiLCJmaXJzdCB0aGluayBjYXJlZnVsbHkiLCJ0aGluayBjYXJlZnVsbHkgYWJvdXQiLCJjYXJlZnVsbHkgYWJvdXQgd2hldGhlciIsImFib3V0IHdoZXRoZXIgdGhpcyIsIndoZXRoZXIgdGhpcyBsaWNlbnNlIiwib3IgdGhlIG9yZGluYXJ5IiwiaXMgdGhlIGJldHRlciIsInRoZSBiZXR0ZXIgc3RyYXRlZ3kiLCJiZXR0ZXIgc3RyYXRlZ3kgdG8iLCJzdHJhdGVneSB0byB1c2UiLCJpbiBhbnkgcGFydGljdWxhciIsImFueSBwYXJ0aWN1bGFyIGNhc2UiLCJwYXJ0aWN1bGFyIGNhc2UgYmFzZWQiLCJjYXNlIGJhc2VkIG9uIiwib24gdGhlIGV4cGxhbmF0aW9ucyIsInRoZSBleHBsYW5hdGlvbnMgYmVsb3ciLCJleHBsYW5hdGlvbnMgYmVsb3cgd2hlbiIsImJlbG93IHdoZW4gd2UiLCJ0byBmcmVlZG9tIG9mIiwib2YgdXNlIG5vdCIsInVzZSBub3QgcHJpY2UiLCJzb2Z0d2FyZSBhbmQgdXNlIiwiYW5kIHVzZSBwaWVjZXMiLCJ5b3UgYXJlIGluZm9ybWVkIiwiYXJlIGluZm9ybWVkIHRoYXQiLCJpbmZvcm1lZCB0aGF0IHlvdSIsInRoYXQgZm9yYmlkIGRpc3RyaWJ1dG9ycyIsImZvcmJpZCBkaXN0cmlidXRvcnMgdG8iLCJkaXN0cmlidXRvcnMgdG8gZGVueSIsInRvIHN1cnJlbmRlciB0aGVzZSIsInN1cnJlbmRlciB0aGVzZSByaWdodHMiLCJ0aGVzZSByaWdodHMgdGhlc2UiLCJ5b3UgbGluayBvdGhlciIsImxpbmsgb3RoZXIgY29kZSIsInJpZ2h0cyB3aXRoIGEiLCJ3aXRoIGEgdHdvIiwiYSB0d28gc3RlcCIsInR3byBzdGVwIG1ldGhvZCIsInN0ZXAgbWV0aG9kIDEiLCJtZXRob2QgMSB3ZSIsIjEgd2UgY29weXJpZ2h0Iiwid2UgY29weXJpZ2h0IHRoZSIsImFuZCAyIHdlIiwiMiB3ZSBvZmZlciIsIndlIG9mZmVyIHlvdSIsImxpYnJhcnkgdG8gcHJvdGVjdCIsInRvIHByb3RlY3QgZWFjaCIsInByb3RlY3QgZWFjaCBkaXN0cmlidXRvciIsImVhY2ggZGlzdHJpYnV0b3Igd2UiLCJkaXN0cmlidXRvciB3ZSB3YW50IiwibWFrZSBpdCB2ZXJ5IiwiaXQgdmVyeSBjbGVhciIsInZlcnkgY2xlYXIgdGhhdCIsImNsZWFyIHRoYXQgdGhlcmUiLCJmcmVlIGxpYnJhcnkgYWxzbyIsImxpYnJhcnkgYWxzbyBpZiIsImFsc28gaWYgdGhlIiwicGFzc2VkIG9uIHRoZSIsInRoZSByZWNpcGllbnRzIHNob3VsZCIsInJlY2lwaWVudHMgc2hvdWxkIGtub3ciLCJzaG91bGQga25vdyB0aGF0IiwiYXV0aG9yIHMgcmVwdXRhdGlvbiIsInMgcmVwdXRhdGlvbiB3aWxsIiwicmVwdXRhdGlvbiB3aWxsIG5vdCIsImFmZmVjdGVkIGJ5IHByb2JsZW1zIiwiYnkgcHJvYmxlbXMgdGhhdCIsInByb2JsZW1zIHRoYXQgbWlnaHQiLCJ0aGF0IG1pZ2h0IGJlIiwibWlnaHQgYmUgaW50cm9kdWNlZCIsImJlIGludHJvZHVjZWQgYnkiLCJieSBvdGhlcnMgZmluYWxseSIsIm90aGVycyBmaW5hbGx5IHNvZnR3YXJlIiwiZmluYWxseSBzb2Z0d2FyZSBwYXRlbnRzIiwic29mdHdhcmUgcGF0ZW50cyBwb3NlIiwicGF0ZW50cyBwb3NlIGEiLCJwb3NlIGEgY29uc3RhbnQiLCJhIGNvbnN0YW50IHRocmVhdCIsImNvbnN0YW50IHRocmVhdCB0byIsInRocmVhdCB0byB0aGUiLCJ0byB0aGUgZXhpc3RlbmNlIiwiZXhpc3RlbmNlIG9mIGFueSIsIm9mIGFueSBmcmVlIiwiZnJlZSBwcm9ncmFtIHdlIiwicHJvZ3JhbSB3ZSB3aXNoIiwid2lzaCB0byBtYWtlIiwic3VyZSB0aGF0IGEiLCJ0aGF0IGEgY29tcGFueSIsImEgY29tcGFueSBjYW5ub3QiLCJjb21wYW55IGNhbm5vdCBlZmZlY3RpdmVseSIsImNhbm5vdCBlZmZlY3RpdmVseSByZXN0cmljdCIsImVmZmVjdGl2ZWx5IHJlc3RyaWN0IHRoZSIsInJlc3RyaWN0IHRoZSB1c2VycyIsInVzZXJzIG9mIGEiLCJmcmVlIHByb2dyYW0gYnkiLCJwcm9ncmFtIGJ5IG9idGFpbmluZyIsImJ5IG9idGFpbmluZyBhIiwib2J0YWluaW5nIGEgcmVzdHJpY3RpdmUiLCJhIHJlc3RyaWN0aXZlIGxpY2Vuc2UiLCJyZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20iLCJmcm9tIGEgcGF0ZW50IiwiYSBwYXRlbnQgaG9sZGVyIiwicGF0ZW50IGhvbGRlciB0aGVyZWZvcmUiLCJob2xkZXIgdGhlcmVmb3JlIHdlIiwidGhlcmVmb3JlIHdlIGluc2lzdCIsIndlIGluc2lzdCB0aGF0IiwiaW5zaXN0IHRoYXQgYW55IiwicGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQiLCJsaWNlbnNlIG9idGFpbmVkIGZvciIsIm9idGFpbmVkIGZvciBhIiwibGlicmFyeSBtdXN0IGJlIiwibXVzdCBiZSBjb25zaXN0ZW50Iiwid2l0aCB0aGUgZnVsbCIsInRoZSBmdWxsIGZyZWVkb20iLCJmdWxsIGZyZWVkb20gb2YiLCJvZiB1c2Ugc3BlY2lmaWVkIiwidXNlIHNwZWNpZmllZCBpbiIsInRoaXMgbGljZW5zZSBtb3N0IiwibGljZW5zZSBtb3N0IGdudSIsImRlc2lnbmF0ZWQgbGlicmFyaWVzIGFuZCIsImxpYnJhcmllcyBhbmQgaXMiLCJhbmQgaXMgcXVpdGUiLCJwdWJsaWMgbGljZW5zZSB3ZSIsImxpY2Vuc2Ugd2UgdXNlIiwid2UgdXNlIHRoaXMiLCJsaWNlbnNlIGZvciBjZXJ0YWluIiwiZm9yIGNlcnRhaW4gbGlicmFyaWVzIiwiY2VydGFpbiBsaWJyYXJpZXMgaW4iLCJsaWJyYXJpZXMgaW4gb3JkZXIiLCJvcmRlciB0byBwZXJtaXQiLCJwZXJtaXQgbGlua2luZyB0aG9zZSIsImxpbmtpbmcgdGhvc2UgbGlicmFyaWVzIiwidGhvc2UgbGlicmFyaWVzIGludG8iLCJsaWJyYXJpZXMgaW50byBub24iLCJpbnRvIG5vbiBmcmVlIiwiZnJlZSBwcm9ncmFtcyB3aGVuIiwicHJvZ3JhbXMgd2hlbiBhIiwid2hlbiBhIHByb2dyYW0iLCJwcm9ncmFtIGlzIGxpbmtlZCIsImxpbmtlZCB3aXRoIGEiLCJhIGxpYnJhcnkgd2hldGhlciIsImxpYnJhcnkgd2hldGhlciBzdGF0aWNhbGx5Iiwid2hldGhlciBzdGF0aWNhbGx5IG9yIiwic3RhdGljYWxseSBvciB1c2luZyIsIm9yIHVzaW5nIGEiLCJ1c2luZyBhIHNoYXJlZCIsImEgc2hhcmVkIGxpYnJhcnkiLCJzaGFyZWQgbGlicmFyeSB0aGUiLCJsaWJyYXJ5IHRoZSBjb21iaW5hdGlvbiIsIm9mIHRoZSB0d28iLCJ0aGUgdHdvIGlzIiwidHdvIGlzIGxlZ2FsbHkiLCJpcyBsZWdhbGx5IHNwZWFraW5nIiwibGVnYWxseSBzcGVha2luZyBhIiwic3BlYWtpbmcgYSBjb21iaW5lZCIsIm9yaWdpbmFsIGxpYnJhcnkgdGhlIiwibGlicmFyeSB0aGUgb3JkaW5hcnkiLCJwdWJsaWMgbGljZW5zZSB0aGVyZWZvcmUiLCJsaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIiwidGhlcmVmb3JlIHBlcm1pdHMgc3VjaCIsInBlcm1pdHMgc3VjaCBsaW5raW5nIl19LHsibGljZW5zZVRleHRzIjpbIkdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRVxuXG5WZXJzaW9uIDMsIDI5IEp1bmUgMjAwN1xuXG5Db3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIFx1MDAzY2h0dHBzOi8vZnNmLm9yZy9cdTAwM2VcblxuRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLlxuXG5UaGlzIHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHN1cHBsZW1lbnRlZCBieSB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBsaXN0ZWQgYmVsb3cuXG5cbiAgIDAuIEFkZGl0aW9uYWwgRGVmaW5pdGlvbnMuXG5cbiAgICAgIFxuXG4gICAgICBBcyB1c2VkIGhlcmVpbiwgXCJ0aGlzIExpY2Vuc2VcIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgXCJHTlUgR1BMXCIgcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuXG5cbiAgICAgIFxuXG4gICAgICBcIlRoZSBMaWJyYXJ5XCIgcmVmZXJzIHRvIGEgY292ZXJlZCB3b3JrIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSwgb3RoZXIgdGhhbiBhbiBBcHBsaWNhdGlvbiBvciBhIENvbWJpbmVkIFdvcmsgYXMgZGVmaW5lZCBiZWxvdy5cblxuICAgICAgXG5cbiAgICAgIEFuIFwiQXBwbGljYXRpb25cIiBpcyBhbnkgd29yayB0aGF0IG1ha2VzIHVzZSBvZiBhbiBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIExpYnJhcnksIGJ1dCB3aGljaCBpcyBub3Qgb3RoZXJ3aXNlIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LiBEZWZpbmluZyBhIHN1YmNsYXNzIG9mIGEgY2xhc3MgZGVmaW5lZCBieSB0aGUgTGlicmFyeSBpcyBkZWVtZWQgYSBtb2RlIG9mIHVzaW5nIGFuIGludGVyZmFjZSBwcm92aWRlZCBieSB0aGUgTGlicmFyeS5cblxuICAgICAgXG5cbiAgICAgIEEgXCJDb21iaW5lZCBXb3JrXCIgaXMgYSB3b3JrIHByb2R1Y2VkIGJ5IGNvbWJpbmluZyBvciBsaW5raW5nIGFuIEFwcGxpY2F0aW9uIHdpdGggdGhlIExpYnJhcnkuIFRoZSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpYnJhcnkgd2l0aCB3aGljaCB0aGUgQ29tYmluZWQgV29yayB3YXMgbWFkZSBpcyBhbHNvIGNhbGxlZCB0aGUgXCJMaW5rZWQgVmVyc2lvblwiLlxuXG4gICAgICBcblxuICAgICAgVGhlIFwiTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZVwiIGZvciBhIENvbWJpbmVkIFdvcmsgbWVhbnMgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciB0aGUgQ29tYmluZWQgV29yaywgZXhjbHVkaW5nIGFueSBzb3VyY2UgY29kZSBmb3IgcG9ydGlvbnMgb2YgdGhlIENvbWJpbmVkIFdvcmsgdGhhdCwgY29uc2lkZXJlZCBpbiBpc29sYXRpb24sIGFyZSBiYXNlZCBvbiB0aGUgQXBwbGljYXRpb24sIGFuZCBub3Qgb24gdGhlIExpbmtlZCBWZXJzaW9uLlxuXG4gICAgICBcblxuICAgICAgVGhlIFwiQ29ycmVzcG9uZGluZyBBcHBsaWNhdGlvbiBDb2RlXCIgZm9yIGEgQ29tYmluZWQgV29yayBtZWFucyB0aGUgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlIGZvciB0aGUgQXBwbGljYXRpb24sIGluY2x1ZGluZyBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yIHJlcHJvZHVjaW5nIHRoZSBDb21iaW5lZCBXb3JrIGZyb20gdGhlIEFwcGxpY2F0aW9uLCBidXQgZXhjbHVkaW5nIHRoZSBTeXN0ZW0gTGlicmFyaWVzIG9mIHRoZSBDb21iaW5lZCBXb3JrLlxuXG4gICAxLiBFeGNlcHRpb24gdG8gU2VjdGlvbiAzIG9mIHRoZSBHTlUgR1BMLlxuXG4gICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayB1bmRlciBzZWN0aW9ucyAzIGFuZCA0IG9mIHRoaXMgTGljZW5zZSB3aXRob3V0IGJlaW5nIGJvdW5kIGJ5IHNlY3Rpb24gMyBvZiB0aGUgR05VIEdQTC5cblxuICAgMi4gQ29udmV5aW5nIE1vZGlmaWVkIFZlcnNpb25zLlxuXG4gICBJZiB5b3UgbW9kaWZ5IGEgY29weSBvZiB0aGUgTGlicmFyeSwgYW5kLCBpbiB5b3VyIG1vZGlmaWNhdGlvbnMsIGEgZmFjaWxpdHkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBBcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlIGZhY2lsaXR5IChvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eSBpcyBpbnZva2VkKSwgdGhlbiB5b3UgbWF5IGNvbnZleSBhIGNvcHkgb2YgdGhlIG1vZGlmaWVkIHZlcnNpb246XG5cbiAgICAgIGEpIHVuZGVyIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCB5b3UgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LCBpbiB0aGUgZXZlbnQgYW4gQXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHRoZSBmdW5jdGlvbiBvciBkYXRhLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bCwgb3JcblxuICAgICAgYikgdW5kZXIgdGhlIEdOVSBHUEwsIHdpdGggbm9uZSBvZiB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvZiB0aGlzIExpY2Vuc2UgYXBwbGljYWJsZSB0byB0aGF0IGNvcHkuXG5cbiAgIDMuIE9iamVjdCBDb2RlIEluY29ycG9yYXRpbmcgTWF0ZXJpYWwgZnJvbSBMaWJyYXJ5IEhlYWRlciBGaWxlcy5cblxuICAgVGhlIG9iamVjdCBjb2RlIGZvcm0gb2YgYW4gQXBwbGljYXRpb24gbWF5IGluY29ycG9yYXRlIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnkuIFlvdSBtYXkgY29udmV5IHN1Y2ggb2JqZWN0IGNvZGUgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQsIGlmIHRoZSBpbmNvcnBvcmF0ZWQgbWF0ZXJpYWwgaXMgbm90IGxpbWl0ZWQgdG8gbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEgc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgb3Igc21hbGwgbWFjcm9zLCBpbmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZXMgKHRlbiBvciBmZXdlciBsaW5lcyBpbiBsZW5ndGgpLCB5b3UgZG8gYm90aCBvZiB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIG9iamVjdCBjb2RlIHRoYXQgdGhlIExpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIpIEFjY29tcGFueSB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudC5cblxuICAgNC4gQ29tYmluZWQgV29ya3MuXG5cbiAgIFlvdSBtYXkgY29udmV5IGEgQ29tYmluZWQgV29yayB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSB0aGF0LCB0YWtlbiB0b2dldGhlciwgZWZmZWN0aXZlbHkgZG8gbm90IHJlc3RyaWN0IG1vZGlmaWNhdGlvbiBvZiB0aGUgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkgY29udGFpbmVkIGluIHRoZSBDb21iaW5lZCBXb3JrIGFuZCByZXZlcnNlIGVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLCBpZiB5b3UgYWxzbyBkbyBlYWNoIG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgQ29tYmluZWQgV29yayB0aGF0IHRoZSBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBiKSBBY2NvbXBhbnkgdGhlIENvbWJpbmVkIFdvcmsgd2l0aCBhIGNvcHkgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudC5cblxuICAgICAgYykgRm9yIGEgQ29tYmluZWQgV29yayB0aGF0IGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzIGR1cmluZyBleGVjdXRpb24sIGluY2x1ZGUgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZXNlIG5vdGljZXMsIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UgZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3BpZXMgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudC5cblxuICAgICAgZCkgRG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgICAgIDApIENvbnZleSB0aGUgTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgdGhlIENvcnJlc3BvbmRpbmcgQXBwbGljYXRpb24gQ29kZSBpbiBhIGZvcm0gc3VpdGFibGUgZm9yLCBhbmQgdW5kZXIgdGVybXMgdGhhdCBwZXJtaXQsIHRoZSB1c2VyIHRvIHJlY29tYmluZSBvciByZWxpbmsgdGhlIEFwcGxpY2F0aW9uIHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaW5rZWQgVmVyc2lvbiB0byBwcm9kdWNlIGEgbW9kaWZpZWQgQ29tYmluZWQgV29yaywgaW4gdGhlIG1hbm5lciBzcGVjaWZpZWQgYnkgc2VjdGlvbiA2IG9mIHRoZSBHTlUgR1BMIGZvciBjb252ZXlpbmcgQ29ycmVzcG9uZGluZyBTb3VyY2UuXG5cbiAgICAgICAgIDEpIFVzZSBhIHN1aXRhYmxlIHNoYXJlZCBsaWJyYXJ5IG1lY2hhbmlzbSBmb3IgbGlua2luZyB3aXRoIHRoZSBMaWJyYXJ5LiBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoYSkgdXNlcyBhdCBydW4gdGltZSBhIGNvcHkgb2YgdGhlIExpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLCBhbmQgKGIpIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeSB0aGF0IGlzIGludGVyZmFjZS1jb21wYXRpYmxlIHdpdGggdGhlIExpbmtlZCBWZXJzaW9uLlxuXG4gICAgICBlKSBQcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiwgYnV0IG9ubHkgaWYgeW91IHdvdWxkIG90aGVyd2lzZSBiZSByZXF1aXJlZCB0byBwcm92aWRlIHN1Y2ggaW5mb3JtYXRpb24gdW5kZXIgc2VjdGlvbiA2IG9mIHRoZSBHTlUgR1BMLCBhbmQgb25seSB0byB0aGUgZXh0ZW50IHRoYXQgc3VjaCBpbmZvcm1hdGlvbiBpcyBuZWNlc3NhcnkgdG8gaW5zdGFsbCBhbmQgZXhlY3V0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIENvbWJpbmVkIFdvcmsgcHJvZHVjZWQgYnkgcmVjb21iaW5pbmcgb3IgcmVsaW5raW5nIHRoZSBBcHBsaWNhdGlvbiB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlua2VkIFZlcnNpb24uIChJZiB5b3UgdXNlIG9wdGlvbiA0ZDAsIHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gbXVzdCBhY2NvbXBhbnkgdGhlIE1pbmltYWwgQ29ycmVzcG9uZGluZyBTb3VyY2UgYW5kIENvcnJlc3BvbmRpbmcgQXBwbGljYXRpb24gQ29kZS4gSWYgeW91IHVzZSBvcHRpb24gNGQxLCB5b3UgbXVzdCBwcm92aWRlIHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gaW4gdGhlIG1hbm5lciBzcGVjaWZpZWQgYnkgc2VjdGlvbiA2IG9mIHRoZSBHTlUgR1BMIGZvciBjb252ZXlpbmcgQ29ycmVzcG9uZGluZyBTb3VyY2UuKVxuXG4gICA1LiBDb21iaW5lZCBMaWJyYXJpZXMuXG5cbiAgIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSBzaWRlIGJ5IHNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBub3QgQXBwbGljYXRpb25zIGFuZCBhcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgY29udmV5IHN1Y2ggYSBjb21iaW5lZCBsaWJyYXJ5IHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBpZiB5b3UgZG8gYm90aCBvZiB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMsIGNvbnZleWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay5cblxuICAgNi4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLlxuXG4gICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy5cblxuICAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBMaWJyYXJ5IGFzIHlvdSByZWNlaXZlZCBpdCBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFwib3IgYW55IGxhdGVyIHZlcnNpb25cIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgcHVibGlzaGVkIHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBMaWJyYXJ5IGFzIHlvdSByZWNlaXZlZCBpdCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLlxuXG4gICBJZiB0aGUgTGlicmFyeSBhcyB5b3UgcmVjZWl2ZWQgaXQgc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoZXRoZXIgZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugc2hhbGwgYXBwbHksIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYW55IHZlcnNpb24gaXMgcGVybWFuZW50IGF1dGhvcml6YXRpb24gZm9yIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgTGlicmFyeS4iXSwibGljZW5zZUlkcyI6WyJMR1BMLTMuMC1vci1sYXRlciIsIkxHUEwtMy4wLW9ubHkiLCJMR1BMLTMuMCsiLCJMR1BMLTMuMCJdLCJrZXl3b3JkcyI6WyJhbGxvd2VkIHRoaXMgdmVyc2lvbiIsInB1YmxpYyBsaWNlbnNlIGluY29ycG9yYXRlcyIsImluY29ycG9yYXRlcyB0aGUgdGVybXMiLCJjb25kaXRpb25zIG9mIHZlcnNpb24iLCJwdWJsaWMgbGljZW5zZSBzdXBwbGVtZW50ZWQiLCJsaWNlbnNlIHN1cHBsZW1lbnRlZCBieSIsInN1cHBsZW1lbnRlZCBieSB0aGUiLCJieSB0aGUgYWRkaXRpb25hbCIsImFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbGlzdGVkIiwicGVybWlzc2lvbnMgbGlzdGVkIGJlbG93IiwibGlzdGVkIGJlbG93IDAiLCJiZWxvdyAwIGFkZGl0aW9uYWwiLCIwIGFkZGl0aW9uYWwgZGVmaW5pdGlvbnMiLCJhZGRpdGlvbmFsIGRlZmluaXRpb25zIGFzIiwiZGVmaW5pdGlvbnMgYXMgdXNlZCIsImFzIHVzZWQgaGVyZWluIiwidXNlZCBoZXJlaW4gdGhpcyIsImFuZCB0aGUgZ251IiwiZ251IGdwbCByZWZlcnMiLCJncGwgcmVmZXJzIHRvIiwidGhlIGxpYnJhcnkgcmVmZXJzIiwiY292ZXJlZCB3b3JrIGdvdmVybmVkIiwidGhpcyBsaWNlbnNlIG90aGVyIiwib3RoZXIgdGhhbiBhbiIsInRoYW4gYW4gYXBwbGljYXRpb24iLCJhbiBhcHBsaWNhdGlvbiBvciIsImFwcGxpY2F0aW9uIG9yIGEiLCJvciBhIGNvbWJpbmVkIiwiY29tYmluZWQgd29yayBhcyIsImRlZmluZWQgYmVsb3cgYW4iLCJiZWxvdyBhbiBhcHBsaWNhdGlvbiIsImFuIGFwcGxpY2F0aW9uIGlzIiwiYXBwbGljYXRpb24gaXMgYW55IiwiaXMgYW55IHdvcmsiLCJ3b3JrIHRoYXQgbWFrZXMiLCJ0aGF0IG1ha2VzIHVzZSIsImxpYnJhcnkgYnV0IHdoaWNoIiwidGhlIGxpYnJhcnkgZGVmaW5pbmciLCJsaWJyYXJ5IGRlZmluaW5nIGEiLCJkZWZpbmluZyBhIHN1YmNsYXNzIiwiYSBzdWJjbGFzcyBvZiIsInN1YmNsYXNzIG9mIGEiLCJvZiBhIGNsYXNzIiwiYSBjbGFzcyBkZWZpbmVkIiwiY2xhc3MgZGVmaW5lZCBieSIsImxpYnJhcnkgaXMgZGVlbWVkIiwiaXMgZGVlbWVkIGEiLCJkZWVtZWQgYSBtb2RlIiwiYSBtb2RlIG9mIiwibW9kZSBvZiB1c2luZyIsIm9mIHVzaW5nIGFuIiwidXNpbmcgYW4gaW50ZXJmYWNlIiwibGlicmFyeSBhIGNvbWJpbmVkIiwiY29tYmluZWQgd29yayBpcyIsImEgd29yayBwcm9kdWNlZCIsInByb2R1Y2VkIGJ5IGNvbWJpbmluZyIsImJ5IGNvbWJpbmluZyBvciIsImNvbWJpbmluZyBvciBsaW5raW5nIiwib3IgbGlua2luZyBhbiIsImxpbmtpbmcgYW4gYXBwbGljYXRpb24iLCJhbiBhcHBsaWNhdGlvbiB3aXRoIiwiYXBwbGljYXRpb24gd2l0aCB0aGUiLCJsaWJyYXJ5IHRoZSBwYXJ0aWN1bGFyIiwidGhlIHBhcnRpY3VsYXIgdmVyc2lvbiIsImxpYnJhcnkgd2l0aCB3aGljaCIsIndpdGggd2hpY2ggdGhlIiwid2hpY2ggdGhlIGNvbWJpbmVkIiwiY29tYmluZWQgd29yayB3YXMiLCJ3YXMgbWFkZSBpcyIsIm1hZGUgaXMgYWxzbyIsImlzIGFsc28gY2FsbGVkIiwiYWxzbyBjYWxsZWQgdGhlIiwiY2FsbGVkIHRoZSBsaW5rZWQiLCJ2ZXJzaW9uIHRoZSBtaW5pbWFsIiwiZm9yIHRoZSBjb21iaW5lZCIsImNvbWJpbmVkIHdvcmsgZXhjbHVkaW5nIiwid29yayBleGNsdWRpbmcgYW55IiwiZXhjbHVkaW5nIGFueSBzb3VyY2UiLCJjb2RlIGZvciBwb3J0aW9ucyIsImZvciBwb3J0aW9ucyBvZiIsIndvcmsgdGhhdCBjb25zaWRlcmVkIiwidGhhdCBjb25zaWRlcmVkIGluIiwiY29uc2lkZXJlZCBpbiBpc29sYXRpb24iLCJpbiBpc29sYXRpb24gYXJlIiwiaXNvbGF0aW9uIGFyZSBiYXNlZCIsIm9uIHRoZSBhcHBsaWNhdGlvbiIsInRoZSBhcHBsaWNhdGlvbiBhbmQiLCJhcHBsaWNhdGlvbiBhbmQgbm90Iiwibm90IG9uIHRoZSIsIm9uIHRoZSBsaW5rZWQiLCJ2ZXJzaW9uIHRoZSBjb3JyZXNwb25kaW5nIiwiYXBwbGljYXRpb24gY29kZSBmb3IiLCJtZWFucyB0aGUgb2JqZWN0IiwiZm9yIHRoZSBhcHBsaWNhdGlvbiIsInRoZSBhcHBsaWNhdGlvbiBpbmNsdWRpbmciLCJhcHBsaWNhdGlvbiBpbmNsdWRpbmcgYW55IiwiaW5jbHVkaW5nIGFueSBkYXRhIiwicmVwcm9kdWNpbmcgdGhlIGNvbWJpbmVkIiwiY29tYmluZWQgd29yayBmcm9tIiwiZnJvbSB0aGUgYXBwbGljYXRpb24iLCJ0aGUgYXBwbGljYXRpb24gYnV0IiwiYXBwbGljYXRpb24gYnV0IGV4Y2x1ZGluZyIsImJ1dCBleGNsdWRpbmcgdGhlIiwiZXhjbHVkaW5nIHRoZSBzeXN0ZW0iLCJjb21iaW5lZCB3b3JrIDEiLCJ3b3JrIDEgZXhjZXB0aW9uIiwiMSBleGNlcHRpb24gdG8iLCJleGNlcHRpb24gdG8gc2VjdGlvbiIsImdudSBncGwgeW91Iiwid29yayB1bmRlciBzZWN0aW9ucyIsImxpY2Vuc2Ugd2l0aG91dCBiZWluZyIsIndpdGhvdXQgYmVpbmcgYm91bmQiLCJiZWluZyBib3VuZCBieSIsImJvdW5kIGJ5IHNlY3Rpb24iLCJnbnUgZ3BsIDIiLCJncGwgMiBjb252ZXlpbmciLCIyIGNvbnZleWluZyBtb2RpZmllZCIsImNvbnZleWluZyBtb2RpZmllZCB2ZXJzaW9ucyIsInlvdSBtb2RpZnkgYSIsIm1vZGlmeSBhIGNvcHkiLCJsaWJyYXJ5IGFuZCBpbiIsImFuZCBpbiB5b3VyIiwieW91ciBtb2RpZmljYXRpb25zIGEiLCJtb2RpZmljYXRpb25zIGEgZmFjaWxpdHkiLCJhIGZhY2lsaXR5IHJlZmVycyIsImZhY2lsaXR5IHJlZmVycyB0byIsImFuIGFwcGxpY2F0aW9uIHRoYXQiLCJ2ZXJzaW9uIGEgdW5kZXIiLCJub3Qgc3VwcGx5IHRoZSIsInN1cHBseSB0aGUgZnVuY3Rpb24iLCJ0aGUgZnVuY3Rpb24gb3IiLCJkYXRhIHRoZSBmYWNpbGl0eSIsInJlbWFpbnMgbWVhbmluZ2Z1bCBvciIsIm1lYW5pbmdmdWwgb3IgYiIsImIgdW5kZXIgdGhlIiwiZ251IGdwbCB3aXRoIiwiZ3BsIHdpdGggbm9uZSIsIndpdGggbm9uZSBvZiIsImFkZGl0aW9uYWwgcGVybWlzc2lvbnMgb2YiLCJwZXJtaXNzaW9ucyBvZiB0aGlzIiwiYXBwbGljYWJsZSB0byB0aGF0IiwidG8gdGhhdCBjb3B5IiwidGhhdCBjb3B5IDMiLCJjb3B5IDMgb2JqZWN0IiwiMyBvYmplY3QgY29kZSIsIm9iamVjdCBjb2RlIGluY29ycG9yYXRpbmciLCJjb2RlIGluY29ycG9yYXRpbmcgbWF0ZXJpYWwiLCJpbmNvcnBvcmF0aW5nIG1hdGVyaWFsIGZyb20iLCJtYXRlcmlhbCBmcm9tIGxpYnJhcnkiLCJmcm9tIGxpYnJhcnkgaGVhZGVyIiwibGlicmFyeSBoZWFkZXIgZmlsZXMiLCJoZWFkZXIgZmlsZXMgdGhlIiwiZmlsZXMgdGhlIG9iamVjdCIsImZvcm0gb2YgYW4iLCJvZiBhbiBhcHBsaWNhdGlvbiIsImFuIGFwcGxpY2F0aW9uIG1heSIsImFwcGxpY2F0aW9uIG1heSBpbmNvcnBvcmF0ZSIsIm1heSBpbmNvcnBvcmF0ZSBtYXRlcmlhbCIsImluY29ycG9yYXRlIG1hdGVyaWFsIGZyb20iLCJtYXkgY29udmV5IHN1Y2giLCJjb252ZXkgc3VjaCBvYmplY3QiLCJvYmplY3QgY29kZSB1bmRlciIsImNvZGUgdW5kZXIgdGVybXMiLCJpZiB0aGUgaW5jb3Jwb3JhdGVkIiwidGhlIGluY29ycG9yYXRlZCBtYXRlcmlhbCIsImluY29ycG9yYXRlZCBtYXRlcmlhbCBpcyIsIm1hdGVyaWFsIGlzIG5vdCIsImxpbWl0ZWQgdG8gbnVtZXJpY2FsIiwidG8gbnVtZXJpY2FsIHBhcmFtZXRlcnMiLCJhbmQgYWNjZXNzb3JzIG9yIiwiYWNjZXNzb3JzIG9yIHNtYWxsIiwib3Igc21hbGwgbWFjcm9zIiwic21hbGwgbWFjcm9zIGlubGluZSIsIm1hY3JvcyBpbmxpbmUgZnVuY3Rpb25zIiwiaW5saW5lIGZ1bmN0aW9ucyBhbmQiLCJmdW5jdGlvbnMgYW5kIHRlbXBsYXRlcyIsImFuZCB0ZW1wbGF0ZXMgdGVuIiwidGVtcGxhdGVzIHRlbiBvciIsInRlbiBvciBmZXdlciIsIm9yIGZld2VyIGxpbmVzIiwiZmV3ZXIgbGluZXMgaW4iLCJsaW5lcyBpbiBsZW5ndGgiLCJpbiBsZW5ndGggeW91IiwibGVuZ3RoIHlvdSBkbyIsIm9iamVjdCBjb2RlIHRoYXQiLCJsaWNlbnNlIGRvY3VtZW50IDQiLCJkb2N1bWVudCA0IGNvbWJpbmVkIiwiNCBjb21iaW5lZCB3b3JrcyIsImNvbWJpbmVkIHdvcmtzIHlvdSIsImNvbnZleSBhIGNvbWJpbmVkIiwiY29tYmluZWQgd29yayB1bmRlciIsImNob2ljZSB0aGF0IHRha2VuIiwidGhhdCB0YWtlbiB0b2dldGhlciIsInRha2VuIHRvZ2V0aGVyIGVmZmVjdGl2ZWx5IiwidG9nZXRoZXIgZWZmZWN0aXZlbHkgZG8iLCJlZmZlY3RpdmVseSBkbyBub3QiLCJub3QgcmVzdHJpY3QgbW9kaWZpY2F0aW9uIiwicmVzdHJpY3QgbW9kaWZpY2F0aW9uIG9mIiwib2YgdGhlIHBvcnRpb25zIiwidGhlIHBvcnRpb25zIG9mIl19LHsibGljZW5zZVRleHRzIjpbIkxlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIEZvciBMaW5ndWlzdGljIFJlc291cmNlc1xuXG5QcmVhbWJsZVxuXG5UaGUgbGljZW5zZXMgZm9yIG1vc3QgZGF0YSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlIGRhdGEtLXRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBhcmUgZnJlZSBmb3IgYWxsIHRoZWlyIHVzZXJzLlxuXG5UaGlzIExpY2Vuc2UsIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgTGluZ3Vpc3RpYyBSZXNvdXJjZXMsIGFwcGxpZXMgdG8gc29tZSBzcGVjaWFsbHkgZGVzaWduYXRlZCBsaW5ndWlzdGljIHJlc291cmNlcyAtLSB0eXBpY2FsbHkgbGV4aWNvbnMgYW5kIGdyYW1tYXJzLlxuXG5URVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT05cblxuICAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBMaW5ndWlzdGljIFJlc291cmNlIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvciBvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIExpbmd1aXN0aWMgUmVzb3VyY2VzIChhbHNvIGNhbGxlZCBcInRoaXMgTGljZW5zZVwiKS4gRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgXCJ5b3VcIi5cblxuICAgQSBcImxpbmd1aXN0aWMgcmVzb3VyY2VcIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgZGF0YSBhYm91dCBsYW5ndWFnZSBwcmVwYXJlZCBzbyBhcyB0byBiZSB1c2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMuXG5cbiAgIFRoZSBcIkxpbmd1aXN0aWMgUmVzb3VyY2VcIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCB3b3JrIHdoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiBBIFwid29yayBiYXNlZCBvbiB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZVwiIG1lYW5zIGVpdGhlciB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgc3RyYWlnaHRmb3J3YXJkbHkgaW50byBhbm90aGVyIGxhbmd1YWdlLiAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSBcIm1vZGlmaWNhdGlvblwiLilcblxuICAgXCJMZWdpYmxlIGZvcm1cIiBmb3IgYSBsaW5ndWlzdGljIHJlc291cmNlIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgcmVzb3VyY2UgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LlxuXG4gICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpbmd1aXN0aWMgUmVzb3VyY2UgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbSBzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaW5ndWlzdGljIFJlc291cmNlIChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaW5ndWlzdGljIFJlc291cmNlIGluIGEgdG9vbCBmb3Igd3JpdGluZyBpdCkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpbmd1aXN0aWMgUmVzb3VyY2UgZG9lcy5cblxuICAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBMaW5ndWlzdGljIFJlc291cmNlLlxuXG4gICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS5cblxuICAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOlxuXG4gICAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIGxpbmd1aXN0aWMgcmVzb3VyY2UuXG5cbiAgICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLlxuXG4gICAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIFRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaW5ndWlzdGljIFJlc291cmNlLCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuIEJ1dCB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpbmd1aXN0aWMgUmVzb3VyY2UsIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC5cblxuICAgVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZS5cblxuICAgSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSB3aXRoIHRoZSBMaW5ndWlzdGljIFJlc291cmNlIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS5cblxuICAgMy4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSAob3IgYW4gZW5jcnlwdGVkIGZvcm0gb2YgdGhlIExpbmd1aXN0aWMgUmVzb3VyY2UpIGJ5IHJlYWRpbmcgaXQgb3IgYmVpbmcgY29tcGlsZWQgb3IgbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhIFwid29yayB0aGF0IHVzZXMgdGhlIExpbmd1aXN0aWMgUmVzb3VyY2VcIi4gU3VjaCBhIHdvcmssIGluIGlzb2xhdGlvbiwgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaW5ndWlzdGljIFJlc291cmNlLCBhbmQgdGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS5cblxuICAgSG93ZXZlciwgY29tYmluaW5nIGEgXCJ3b3JrIHRoYXQgdXNlcyB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZVwiIHdpdGggdGhlIExpbmd1aXN0aWMgUmVzb3VyY2UgKG9yIGFuIGVuY3J5cHRlZCBmb3JtIG9mIHRoZSBMaW5ndWlzdGljIFJlc291cmNlKSBjcmVhdGVzIGEgcGFja2FnZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSAoYmVjYXVzZSBpdCBjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSksIHJhdGhlciB0aGFuIGEgXCJ3b3JrIHRoYXQgdXNlcyB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZVwiLiBJZiB0aGUgcGFja2FnZSBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpbmd1aXN0aWMgUmVzb3VyY2UsIHlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgcGFja2FnZSB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA0LiBBbnkgd29ya3MgY29udGFpbmluZyB0aGF0IHBhY2thZ2UgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNC5cblxuICAgNC4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgYSBcIndvcmsgdGhhdCB1c2VzIHRoZSBMaW5ndWlzdGljIFJlc291cmNlXCIgd2l0aCB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSAob3IgYW4gZW5jcnlwdGVkIGZvcm0gb2YgdGhlIExpbmd1aXN0aWMgUmVzb3VyY2UpIHRvIHByb2R1Y2UgYSBwYWNrYWdlIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpbmd1aXN0aWMgUmVzb3VyY2UsIGFuZCBkaXN0cmlidXRlIHRoYXQgcGFja2FnZSB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0IG1vZGlmaWNhdGlvbiBvZiB0aGUgcGFja2FnZSBmb3IgdGhlIGN1c3RvbWVyJ3Mgb3duIHVzZSBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy5cblxuICAgWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBwYWNrYWdlIHRoYXQgdGhlIExpbmd1aXN0aWMgUmVzb3VyY2UgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBJZiB0aGUgcGFja2FnZSBkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlIGRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuIEFsc28sIHlvdSBtdXN0IGRvIG9uZSBvZiB0aGVzZSB0aGluZ3M6XG5cbiAgICAgIGEpIEFjY29tcGFueSB0aGUgcGFja2FnZSB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgbGVnaWJsZSBmb3JtIG9mIHRoZSBMaW5ndWlzdGljIFJlc291cmNlIGluY2x1ZGluZyB3aGF0ZXZlciBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgcGFja2FnZSAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgcGFja2FnZSBjb250YWlucyBhbiBlbmNyeXB0ZWQgZm9ybSBvZiB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBcIndvcmsgdGhhdCB1c2VzIHRoZSBMaW5ndWlzdGljIFJlc291cmNlXCIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaW5ndWlzdGljIFJlc291cmNlIGFuZCB0aGVuIGVuY3J5cHQgaXQgdG8gcHJvZHVjZSBhIG1vZGlmaWVkIHBhY2thZ2UgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGluZ3Vpc3RpYyBSZXNvdXJjZS5cblxuICAgICAgYikgVXNlIGEgc3VpdGFibGUgbWVjaGFuaXNtIGZvciBjb21iaW5pbmcgd2l0aCB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZS4gQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaW5ndWlzdGljIFJlc291cmNlLCBpZiB0aGUgdXNlciBpbnN0YWxscyBvbmUsIGFzIGxvbmcgYXMgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiB0aGF0IHRoZSBwYWNrYWdlIHdhcyBtYWRlIHdpdGguXG5cbiAgICAgIGMpIEFjY29tcGFueSB0aGUgcGFja2FnZSB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscyBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA0YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi5cblxuICAgICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSBwYWNrYWdlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS5cblxuICAgICAgZSkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LlxuXG4gICBJZiB0aGUgcGFja2FnZSBpbmNsdWRlcyBhbiBlbmNyeXB0ZWQgZm9ybSBvZiB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlIFwid29yayB0aGF0IHVzZXMgdGhlIExpbmd1aXN0aWMgUmVzb3VyY2VcIiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvciByZXByb2R1Y2luZyB0aGUgcGFja2FnZSBmcm9tIGl0LiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgbWF0ZXJpYWxzIHRvIGJlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLlxuXG4gICBJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZSByZXN0cmljdGlvbnMgb2YgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5IGFjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdCB1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSB0b2dldGhlciBpbiBhIHBhY2thZ2UgdGhhdCB5b3UgZGlzdHJpYnV0ZS5cblxuICAgNS4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUgdGhlIExpbmd1aXN0aWMgUmVzb3VyY2UgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZSB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS5cblxuICAgNi4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90IHNpZ25lZCBpdC4gSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpbmd1aXN0aWMgUmVzb3VyY2UgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaW5ndWlzdGljIFJlc291cmNlKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBMaW5ndWlzdGljIFJlc291cmNlIG9yIHdvcmtzIGJhc2VkIG9uIGl0LlxuXG4gICA3LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIExpbmd1aXN0aWMgUmVzb3VyY2UpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpbmd1aXN0aWMgUmVzb3VyY2Ugc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuXG5cbiAgIDguIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvciBvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudCBsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaW5ndWlzdGljIFJlc291cmNlIGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbiB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpbmd1aXN0aWMgUmVzb3VyY2UuXG5cbiAgIElmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LCBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLlxuXG4gICBJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55IHN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHJlc291cmNlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBkYXRhIGRpc3RyaWJ1dGVkIHRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0IHN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8gZGlzdHJpYnV0ZSByZXNvdXJjZXMgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdCBpbXBvc2UgdGhhdCBjaG9pY2UuXG5cbiAgIFRoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0byBiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS5cblxuICAgOS4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaW5ndWlzdGljIFJlc291cmNlIGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDEwLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIExpbmd1aXN0aWMgUmVzb3VyY2VzIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy5cblxuICAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBMaW5ndWlzdGljIFJlc291cmNlIHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCBcImFueSBsYXRlciB2ZXJzaW9uXCIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGluZ3Vpc3RpYyBSZXNvdXJjZSBkb2VzIG5vdCBzcGVjaWZ5IGEgbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi5cblxuICAgMTEuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaW5ndWlzdGljIFJlc291cmNlIGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsIHdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLlxuXG4gICBOTyBXQVJSQU5UWVxuXG4gICAxMi4gQkVDQVVTRSBUSEUgTElOR1VJU1RJQyBSRVNPVVJDRSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBMSU5HVUlTVElDIFJFU09VUkNFLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSU5HVUlTVElDIFJFU09VUkNFIFwiQVMgSVNcIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIExJTkdVSVNUSUMgUkVTT1VSQ0UgSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgTElOR1VJU1RJQyBSRVNPVVJDRSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLlxuXG4gICAxMy4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSU5HVUlTVElDIFJFU09VUkNFIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIExJTkdVSVNUSUMgUkVTT1VSQ0UgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgTElOR1VJU1RJQyBSRVNPVVJDRSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbkVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUyJdLCJsaWNlbnNlSWRzIjpbIkxHUExMUiJdLCJrZXl3b3JkcyI6WyJsaW5ndWlzdGljIHJlc291cmNlcyBwcmVhbWJsZSIsInJlc291cmNlcyBwcmVhbWJsZSB0aGUiLCJmb3IgbW9zdCBkYXRhIiwibW9zdCBkYXRhIGFyZSIsImRhdGEgYXJlIGRlc2lnbmVkIiwiYnkgY29udHJhc3QgdGhpcyIsImNvbnRyYXN0IHRoaXMgbGljZW5zZSIsImNoYW5nZSBmcmVlIGRhdGEiLCJmcmVlIGRhdGEgdG8iLCJkYXRhIHRvIG1ha2UiLCJzdXJlIHRoZSBkYXRhIiwidGhlIGRhdGEgYXJlIiwiZGF0YSBhcmUgZnJlZSIsImFyZSBmcmVlIGZvciIsImZvciBhbGwgdGhlaXIiLCJhbGwgdGhlaXIgdXNlcnMiLCJ0aGVpciB1c2VycyB0aGlzIiwibGluZ3Vpc3RpYyByZXNvdXJjZXMgYXBwbGllcyIsInJlc291cmNlcyBhcHBsaWVzIHRvIiwic3BlY2lhbGx5IGRlc2lnbmF0ZWQgbGluZ3Vpc3RpYyIsImRlc2lnbmF0ZWQgbGluZ3Vpc3RpYyByZXNvdXJjZXMiLCJsaW5ndWlzdGljIHJlc291cmNlcyB0eXBpY2FsbHkiLCJyZXNvdXJjZXMgdHlwaWNhbGx5IGxleGljb25zIiwidHlwaWNhbGx5IGxleGljb25zIGFuZCIsImxleGljb25zIGFuZCBncmFtbWFycyIsImFuZCBncmFtbWFycyB0ZXJtcyIsImdyYW1tYXJzIHRlcm1zIGFuZCIsInRvIGFueSBsaW5ndWlzdGljIiwiYW55IGxpbmd1aXN0aWMgcmVzb3VyY2UiLCJsaW5ndWlzdGljIHJlc291cmNlIHdoaWNoIiwicmVzb3VyY2Ugd2hpY2ggY29udGFpbnMiLCJsaW5ndWlzdGljIHJlc291cmNlcyBhbHNvIiwicmVzb3VyY2VzIGFsc28gY2FsbGVkIiwieW91IGEgbGluZ3Vpc3RpYyIsInJlc291cmNlIG1lYW5zIGEiLCJvZiBkYXRhIGFib3V0IiwiZGF0YSBhYm91dCBsYW5ndWFnZSIsImFib3V0IGxhbmd1YWdlIHByZXBhcmVkIiwibGFuZ3VhZ2UgcHJlcGFyZWQgc28iLCJ1c2VkIHdpdGggYXBwbGljYXRpb24iLCJhcHBsaWNhdGlvbiBwcm9ncmFtcyB0aGUiLCJwcm9ncmFtcyB0aGUgbGluZ3Vpc3RpYyIsImxpbmd1aXN0aWMgcmVzb3VyY2UgYmVsb3ciLCJyZXNvdXJjZSBiZWxvdyByZWZlcnMiLCJzdWNoIHdvcmsgd2hpY2giLCJyZXNvdXJjZSBtZWFucyBlaXRoZXIiLCJlaXRoZXIgdGhlIGxpbmd1aXN0aWMiLCJjb250YWluaW5nIHRoZSBsaW5ndWlzdGljIiwicmVzb3VyY2Ugb3IgYSIsInRlcm0gbW9kaWZpY2F0aW9uIGxlZ2libGUiLCJtb2RpZmljYXRpb24gbGVnaWJsZSBmb3JtIiwibGVnaWJsZSBmb3JtIGZvciIsImZvciBhIGxpbmd1aXN0aWMiLCJyZXNvdXJjZSBtZWFucyB0aGUiLCJvZiB0aGUgcmVzb3VyY2UiLCJ0aGUgcmVzb3VyY2UgZm9yIiwicmVzb3VyY2UgZm9yIG1ha2luZyIsInRvIGl0IGFjdGl2aXRpZXMiLCJpdCBhY3Rpdml0aWVzIG90aGVyIiwidXNpbmcgdGhlIGxpbmd1aXN0aWMiLCJyZXNvdXJjZSBpcyBub3QiLCJsaW5ndWlzdGljIHJlc291cmNlIGluZGVwZW5kZW50IiwicmVzb3VyY2UgaW5kZXBlbmRlbnQgb2YiLCJyZXNvdXJjZSBpbiBhIiwicmVzb3VyY2UgZG9lcyAxIiwicmVzb3VyY2UgYXMgeW91IiwicmVzb3VyY2UgYW5kIGNvcHkiLCJiZSBhIGxpbmd1aXN0aWMiLCJyZXNvdXJjZSBiIHlvdSIsImxpY2Vuc2UgdGhlc2UgcmVxdWlyZW1lbnRzIiwiZnJvbSB0aGUgbGluZ3Vpc3RpYyIsInJlc291cmNlIGFuZCBjYW4iLCJyZXNvdXJjZSB0aGUgZGlzdHJpYnV0aW9uIiwicmVzb3VyY2UgaW4gYWRkaXRpb24iLCJyZXNvdXJjZSBvciB3aXRoIiwibGluZ3Vpc3RpYyByZXNvdXJjZSBvbiIsInJlc291cmNlIG9uIGEiLCJsaWNlbnNlIDMgYSIsIjMgYSBwcm9ncmFtIiwibGluZ3Vpc3RpYyByZXNvdXJjZSBidXQiLCJyZXNvdXJjZSBidXQgaXMiLCJyZXNvdXJjZSBieSByZWFkaW5nIiwiYnkgcmVhZGluZyBpdCIsInJlYWRpbmcgaXQgb3IiLCJpdCBvciBiZWluZyIsIm9yIGJlaW5nIGNvbXBpbGVkIiwibGluZ3Vpc3RpYyByZXNvdXJjZSBzdWNoIiwicmVzb3VyY2Ugc3VjaCBhIiwicmVzb3VyY2UgYW5kIHRoZXJlZm9yZSIsImxpY2Vuc2UgaG93ZXZlciBjb21iaW5pbmciLCJob3dldmVyIGNvbWJpbmluZyBhIiwiY29tYmluaW5nIGEgd29yayIsImxpbmd1aXN0aWMgcmVzb3VyY2UgY3JlYXRlcyIsInJlc291cmNlIGNyZWF0ZXMgYSIsImNyZWF0ZXMgYSBwYWNrYWdlIiwicGFja2FnZSB0aGF0IGlzIiwibGluZ3Vpc3RpYyByZXNvdXJjZSBiZWNhdXNlIiwicmVzb3VyY2UgYmVjYXVzZSBpdCIsImxpbmd1aXN0aWMgcmVzb3VyY2UgcmF0aGVyIiwicmVzb3VyY2UgcmF0aGVyIHRoYW4iLCJwYWNrYWdlIGlzIGEiLCJ0aGUgcGFja2FnZSB1bmRlciIsInBhY2thZ2UgdW5kZXIgdGhlIiwiNCBhbnkgd29ya3MiLCJhbnkgd29ya3MgY29udGFpbmluZyIsIndvcmtzIGNvbnRhaW5pbmcgdGhhdCIsImNvbnRhaW5pbmcgdGhhdCBwYWNrYWdlIiwidGhhdCBwYWNrYWdlIGFsc28iLCJwYWNrYWdlIGFsc28gZmFsbCIsIjQgNCBhcyIsIjQgYXMgYW4iLCJhbHNvIGNvbWJpbmUgYSIsImNvbWJpbmUgYSB3b3JrIiwicmVzb3VyY2UgdG8gcHJvZHVjZSIsInByb2R1Y2UgYSBwYWNrYWdlIiwiYSBwYWNrYWdlIGNvbnRhaW5pbmciLCJwYWNrYWdlIGNvbnRhaW5pbmcgcG9ydGlvbnMiLCJyZXNvdXJjZSBhbmQgZGlzdHJpYnV0ZSIsImRpc3RyaWJ1dGUgdGhhdCBwYWNrYWdlIiwidGhhdCBwYWNrYWdlIHVuZGVyIiwicGFja2FnZSB1bmRlciB0ZXJtcyIsInRoZSBwYWNrYWdlIGZvciIsInBhY2thZ2UgZm9yIHRoZSIsInRoZSBwYWNrYWdlIHRoYXQiLCJwYWNrYWdlIHRoYXQgdGhlIiwicmVzb3VyY2UgaXMgdXNlZCIsInJlc291cmNlIGFuZCBpdHMiLCJ0aGUgcGFja2FnZSBkdXJpbmciLCJwYWNrYWdlIGR1cmluZyBleGVjdXRpb24iLCJsaW5ndWlzdGljIHJlc291cmNlIGFtb25nIiwicmVzb3VyY2UgYW1vbmcgdGhlbSIsIm1hY2hpbmUgcmVhZGFibGUgbGVnaWJsZSIsInJlYWRhYmxlIGxlZ2libGUgZm9ybSIsImxlZ2libGUgZm9ybSBvZiIsInJlc291cmNlIGluY2x1ZGluZyB3aGF0ZXZlciIsImluIHRoZSBwYWNrYWdlIiwidGhlIHBhY2thZ2Ugd2hpY2giLCJwYWNrYWdlIHdoaWNoIG11c3QiLCJ0aGUgcGFja2FnZSBjb250YWlucyIsInBhY2thZ2UgY29udGFpbnMgYW4iLCJjb250YWlucyBhbiBlbmNyeXB0ZWQiLCJyZXNvdXJjZSBhcyBvYmplY3QiLCJyZXNvdXJjZSBhbmQgdGhlbiIsImFuZCB0aGVuIGVuY3J5cHQiLCJ0aGVuIGVuY3J5cHQgaXQiLCJlbmNyeXB0IGl0IHRvIiwiaXQgdG8gcHJvZHVjZSIsImEgbW9kaWZpZWQgcGFja2FnZSIsIm1vZGlmaWVkIHBhY2thZ2UgY29udGFpbmluZyIsInBhY2thZ2UgY29udGFpbmluZyB0aGUiLCJ0aGUgbW9kaWZpZWQgbGluZ3Vpc3RpYyIsIm1vZGlmaWVkIGxpbmd1aXN0aWMgcmVzb3VyY2UiLCJyZXNvdXJjZSBiIHVzZSIsInN1aXRhYmxlIG1lY2hhbmlzbSBmb3IiLCJtZWNoYW5pc20gZm9yIGNvbWJpbmluZyIsImZvciBjb21iaW5pbmcgd2l0aCIsImNvbWJpbmluZyB3aXRoIHRoZSIsImxpbmd1aXN0aWMgcmVzb3VyY2UgYSIsInJlc291cmNlIGEgc3VpdGFibGUiLCJvbmUgdGhhdCB3aWxsIiwidGhhdCB3aWxsIG9wZXJhdGUiLCJ0aGUgcGFja2FnZSB3YXMiLCJwYWNrYWdlIHdhcyBtYWRlIiwiaW4gc3Vic2VjdGlvbiA0YSIsInN1YnNlY3Rpb24gNGEgYWJvdmUiLCI0YSBhYm92ZSBmb3IiLCJwYWNrYWdlIGlzIG1hZGUiLCJhIGNvcHkgaWYiLCJjb3B5IGlmIHRoZSIsImluY2x1ZGVzIGFuIGVuY3J5cHRlZCIsInJlc291cmNlIHRoZSByZXF1aXJlZCIsImxpbmd1aXN0aWMgcmVzb3VyY2UgbXVzdCIsInJlc291cmNlIG11c3QgaW5jbHVkZSIsInJlcHJvZHVjaW5nIHRoZSBwYWNrYWdlIiwidGhlIHBhY2thZ2UgZnJvbSIsInBhY2thZ2UgZnJvbSBpdCIsInJlc3RyaWN0aW9ucyBvZiBwcm9wcmlldGFyeSIsIm9mIHByb3ByaWV0YXJ5IGxpYnJhcmllcyIsImFuZCB0aGUgbGluZ3Vpc3RpYyIsImxpbmd1aXN0aWMgcmVzb3VyY2UgdG9nZXRoZXIiLCJyZXNvdXJjZSB0b2dldGhlciBpbiIsInRvZ2V0aGVyIGluIGEiLCJpbiBhIHBhY2thZ2UiLCJwYWNrYWdlIHRoYXQgeW91IiwieW91IGRpc3RyaWJ1dGUgNSIsImRpc3RyaWJ1dGUgNSB5b3UiLCJsaW5ndWlzdGljIHJlc291cmNlIGV4Y2VwdCIsInJlc291cmNlIGV4Y2VwdCBhcyIsInJlc291cmNlIGlzIHZvaWQiLCJmdWxsIGNvbXBsaWFuY2UgNiIsImNvbXBsaWFuY2UgNiB5b3UiLCI2IHlvdSBhcmUiLCJyZXNvdXJjZSBvciBpdHMiLCJkaXN0cmlidXRpbmcgdGhlIGxpbmd1aXN0aWMiLCJyZXNvdXJjZSB5b3UgaW5kaWNhdGUiLCJtb2RpZnlpbmcgdGhlIGxpbmd1aXN0aWMiLCJyZXNvdXJjZSBvciB3b3JrcyIsIm9uIGl0IDciLCJpdCA3IGVhY2giLCI3IGVhY2ggdGltZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJMdWNlbnQgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjBcblxuVEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIFBVQkxJQyBMSUNFTlNFIChcIkFHUkVFTUVOVFwiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULlxuXG4gICAxLiBERUZJTklUSU9OU1xuXG4gICBcIkNvbnRyaWJ1dGlvblwiIG1lYW5zOlxuXG4gICAgICBhLiBpbiB0aGUgY2FzZSBvZiBcdTAwM2NPUkdBTklaQVRJT05cdTAwM2UgKFwiIFx1MDAzY09XTkVSXHUwMDNlIFwiKSwgdGhlIE9yaWdpbmFsIFByb2dyYW0sIGFuZFxuXG4gICAgICBiLiBpbiB0aGUgY2FzZSBvZiBlYWNoIENvbnRyaWJ1dG9yLFxuXG4gICAgICAgICBpLiBjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmRcblxuICAgICAgICAgaWkuIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsgd2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBcIkNvbnRyaWJ1dGVkXCIgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLlxuXG4gICAgICAgICBBIENvbnRyaWJ1dGlvbiBpcyBcIkNvbnRyaWJ1dGVkXCIgYnkgYSBDb250cmlidXRvciBvbmx5IChpKSBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLCBhbmQgKGlpKSB0aGUgQ29udHJpYnV0b3IgZXhwbGljaXRseSBjb25zZW50cywgaW4gYWNjb3JkYW5jZSB3aXRoIFNlY3Rpb24gM0MsIHRvIGNoYXJhY3Rlcml6YXRpb24gb2YgdGhlIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyBhcyBDb250cmlidXRpb25zLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uXG5cbiAgICAgICAgIFwiQ29udHJpYnV0b3JcIiBtZWFucyBcdTAwM2NPV05FUlx1MDAzZSBhbmQgYW55IG90aGVyIGVudGl0eSB0aGF0IGhhcyBDb250cmlidXRlZCBhIENvbnRyaWJ1dGlvbiB0byB0aGUgUHJvZ3JhbS5cblxuICAgICAgICAgXCJEaXN0cmlidXRvclwiIG1lYW5zIGEgUmVjaXBpZW50IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0sIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFByb2dyYW0sIG9yIGFueSBwYXJ0IHRoZXJlb2YuXG5cbiAgICAgICAgIFwiTGljZW5zZWQgUGF0ZW50c1wiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uXG5cbiAgICAgICAgIFwiT3JpZ2luYWwgUHJvZ3JhbVwiIG1lYW5zIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZSBhY2NvbXBhbnlpbmcgdGhpcyBBZ3JlZW1lbnQgYXMgcmVsZWFzZWQgYnkgXHUwMDNjT1dORVJcdTAwM2UgLCBpbmNsdWRpbmcgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCBpZiBhbnkuXG5cbiAgICAgICAgIFwiUHJvZ3JhbVwiIG1lYW5zIHRoZSBPcmlnaW5hbCBQcm9ncmFtIGFuZCBDb250cmlidXRpb25zIG9yIGFueSBwYXJ0IHRoZXJlb2ZcblxuICAgICAgICAgXCJSZWNpcGllbnRcIiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy5cblxuICAgMi4gR1JBTlQgT0YgUklHSFRTXG5cbiAgICAgIGEuIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLlxuXG4gICAgICBiLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoZSBwYXRlbnQgbGljZW5zZSBncmFudGVkIGJ5IGEgQ29udHJpYnV0b3Igc2hhbGwgYWxzbyBhcHBseSB0byB0aGUgY29tYmluYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBvZiB0aGF0IENvbnRyaWJ1dG9yIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2UgZ3JhbnRlZCBieSBhIENvbnRyaWJ1dG9yIHNoYWxsIG5vdCBhcHBseSB0byAoaSkgYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24sIG5vciB0byAoaWkpIENvbnRyaWJ1dGlvbnMgb2Ygb3RoZXIgQ29udHJpYnV0b3JzLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLlxuXG4gICAgICBjLiBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLlxuXG4gICAgICBkLiBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LlxuXG4gICAzLiBSRVFVSVJFTUVOVFNcblxuICAgICAgQS4gRGlzdHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIGFueSBmb3JtIHVuZGVyIHRoaXMgQWdyZWVtZW50IG9yIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6XG5cbiAgICAgICAgIDEuIGl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50O1xuXG4gICAgICAgICAyLiBpZiB0aGUgUHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiBzb3VyY2UgY29kZSBvciBvdGhlciB0YW5naWJsZSBmb3JtLCBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgRGlzdHJpYnV0b3IncyBvd24gbGljZW5zZSBhZ3JlZW1lbnQgaXMgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW07IGFuZFxuXG4gICAgICAgICAzLiBpZiBkaXN0cmlidXRlZCB1bmRlciBEaXN0cmlidXRvcidzIG93biBsaWNlbnNlIGFncmVlbWVudCwgc3VjaCBsaWNlbnNlIGFncmVlbWVudDpcblxuICAgICAgICAgICAgYS4gZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTtcblxuICAgICAgICAgICAgYi4gZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7IGFuZFxuXG4gICAgICAgICAgICBjLiBzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5LlxuXG4gICAgICBCLiBFYWNoIERpc3RyaWJ1dG9yIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluIGEgY29uc3BpY3VvdXMgbG9jYXRpb24gaW4gdGhlIFByb2dyYW06XG5cbiAgICAgIENvcHlyaWdodCAoQykgXHUwMDNjWUVBUlx1MDAzZSwgXHUwMDNjT1JHQU5JWkFUSU9OXHUwMDNlIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbiAgICAgIEMuIEluIGFkZGl0aW9uLCBlYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgYW5kIGluZGljYXRlIGl0cyBjb25zZW50IHRvIGNoYXJhY3Rlcml6YXRpb24gb2YgaXRzIGFkZGl0aW9ucyBhbmQvb3IgY2hhbmdlcyBhcyBhIENvbnRyaWJ1dGlvbiwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gT25jZSBjb25zZW50IGlzIGdyYW50ZWQsIGl0IG1heSBub3QgdGhlcmVhZnRlciBiZSByZXZva2VkLlxuXG4gICA0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTlxuXG4gICBDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZSBvZiB0aGUgUHJvZ3JhbSwgdGhlIERpc3RyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbCBsaWFiaWxpdHkgZm9yIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIERpc3RyaWJ1dG9yIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIERpc3RyaWJ1dG9yIChcIkNvbW1lcmNpYWwgRGlzdHJpYnV0b3JcIikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBDb250cmlidXRvciAoXCJJbmRlbW5pZmllZCBDb250cmlidXRvclwiKSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgXCJMb3NzZXNcIikgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlciB0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUgaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLlxuXG4gICBGb3IgZXhhbXBsZSwgYSBEaXN0cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgRGlzdHJpYnV0b3IgaXMgdGhlbiBhIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBEaXN0cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlIGNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIERpc3RyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMgc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQgcmVxdWlyZXMgYW55IENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy5cblxuICAgNS4gTk8gV0FSUkFOVFlcblxuICAgRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLlxuXG4gICA2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWVxuXG4gICBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG4gICA3LiBHRU5FUkFMXG5cbiAgIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICBJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGEgQ29udHJpYnV0b3Igd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpLCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCBieSB0aGF0IENvbnRyaWJ1dG9yIHRvIHN1Y2ggUmVjaXBpZW50IHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEluIGFkZGl0aW9uLCBpZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLlxuXG4gICBBbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS5cblxuICAgXHUwMDNjT1dORVJcdTAwM2UgbWF5IHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIE5vIG9uZSBvdGhlciB0aGFuIFx1MDAzY09XTkVSXHUwMDNlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLlxuXG4gICBUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgXHUwMDNjU1RBVEVcdTAwM2UgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uIl0sImxpY2Vuc2VJZHMiOlsiTFBMLTEuMCJdLCJrZXl3b3JkcyI6WyJjYXNlIG9mIG9yZ2FuaXphdGlvbiIsIm9mIG9yZ2FuaXphdGlvbiBvd25lciIsIm9yZ2FuaXphdGlvbiBvd25lciB0aGUiLCJvd25lciB0aGUgb3JpZ2luYWwiLCJhbmQgYXJlIGNvbnRyaWJ1dGVkIiwiYXJlIGNvbnRyaWJ1dGVkIGJ5IiwiY29udHJpYnV0ZWQgYnkgdGhhdCIsImNvbnRyaWJ1dGVkIGJ5IGEiLCJhIGNvbnRyaWJ1dG9yIG9ubHkiLCJjb250cmlidXRvciBvbmx5IGkiLCJvbmx5IGkgaWYiLCJpIGlmIGl0IiwiYmVoYWxmIGFuZCBpaSIsImlpIHRoZSBjb250cmlidXRvciIsImFzIGNvbnRyaWJ1dGlvbnMgY29udHJpYnV0aW9ucyIsImNvbnRyaWJ1dGlvbnMgY29udHJpYnV0aW9ucyBkbyIsImNvbnRyaWJ1dG9yIG1lYW5zIG93bmVyIiwibWVhbnMgb3duZXIgYW5kIiwib3duZXIgYW5kIGFueSIsInJlbGVhc2VkIGJ5IG93bmVyIiwiYnkgb3duZXIgaW5jbHVkaW5nIiwib3duZXIgaW5jbHVkaW5nIHNvdXJjZSIsImMgeWVhciBvcmdhbml6YXRpb24iLCJ5ZWFyIG9yZ2FuaXphdGlvbiBhbmQiLCJvcmdhbml6YXRpb24gYW5kIG90aGVycyIsImFueSBhbmQgaW5kaWNhdGUiLCJhbmQgaW5kaWNhdGUgaXRzIiwiaW5kaWNhdGUgaXRzIGNvbnNlbnQiLCJpdHMgY29uc2VudCB0byIsImNvbnNlbnQgdG8gY2hhcmFjdGVyaXphdGlvbiIsImNoYXJhY3Rlcml6YXRpb24gb2YgaXRzIiwib2YgaXRzIGFkZGl0aW9ucyIsIml0cyBhZGRpdGlvbnMgYW5kIiwib3IgY2hhbmdlcyBhcyIsImNoYW5nZXMgYXMgYSIsImEgY29udHJpYnV0aW9uIGluIiwidGhlIGNvbnRyaWJ1dGlvbiBvbmNlIiwiY29udHJpYnV0aW9uIG9uY2UgY29uc2VudCIsImFuZCBzdXJ2aXZlIG93bmVyIiwic3Vydml2ZSBvd25lciBtYXkiLCJvd25lciBtYXkgcHVibGlzaCIsIm90aGVyIHRoYW4gb3duZXIiLCJ0aGFuIG93bmVyIGhhcyIsIm93bmVyIGhhcyB0aGUiLCJzdGF0ZSBvZiBzdGF0ZSIsIm9mIHN0YXRlIGFuZCIsInN0YXRlIGFuZCB0aGUiLCJ0aGUgY2FzZSBvZiBvcmdhbml6YXRpb24iLCJjYXNlIG9mIG9yZ2FuaXphdGlvbiBvd25lciIsIm9mIG9yZ2FuaXphdGlvbiBvd25lciB0aGUiLCJvcmdhbml6YXRpb24gb3duZXIgdGhlIG9yaWdpbmFsIiwib3duZXIgdGhlIG9yaWdpbmFsIHByb2dyYW0iLCJmcm9tIGFuZCBhcmUgY29udHJpYnV0ZWQiLCJhbmQgYXJlIGNvbnRyaWJ1dGVkIGJ5IiwiYXJlIGNvbnRyaWJ1dGVkIGJ5IHRoYXQiLCJjb250cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIiLCJjb250cmlidXRvciBhIGNvbnRyaWJ1dGlvbiBpcyIsImNvbnRyaWJ1dGlvbiBpcyBjb250cmlidXRlZCBieSIsImlzIGNvbnRyaWJ1dGVkIGJ5IGEiLCJjb250cmlidXRlZCBieSBhIGNvbnRyaWJ1dG9yIiwiYnkgYSBjb250cmlidXRvciBvbmx5IiwiYSBjb250cmlidXRvciBvbmx5IGkiLCJjb250cmlidXRvciBvbmx5IGkgaWYiLCJvbmx5IGkgaWYgaXQiLCJpIGlmIGl0IHdhcyIsInMgYmVoYWxmIGFuZCBpaSIsImJlaGFsZiBhbmQgaWkgdGhlIiwiYW5kIGlpIHRoZSBjb250cmlidXRvciIsImlpIHRoZSBjb250cmlidXRvciBleHBsaWNpdGx5IiwiYWRkaXRpb25zIGFzIGNvbnRyaWJ1dGlvbnMgY29udHJpYnV0aW9ucyIsImFzIGNvbnRyaWJ1dGlvbnMgY29udHJpYnV0aW9ucyBkbyIsImNvbnRyaWJ1dGlvbnMgY29udHJpYnV0aW9ucyBkbyBub3QiLCJwcm9ncmFtIGNvbnRyaWJ1dG9yIG1lYW5zIG93bmVyIiwiY29udHJpYnV0b3IgbWVhbnMgb3duZXIgYW5kIiwibWVhbnMgb3duZXIgYW5kIGFueSIsIm93bmVyIGFuZCBhbnkgb3RoZXIiLCJhcyByZWxlYXNlZCBieSBvd25lciIsInJlbGVhc2VkIGJ5IG93bmVyIGluY2x1ZGluZyIsImJ5IG93bmVyIGluY2x1ZGluZyBzb3VyY2UiLCJvd25lciBpbmNsdWRpbmcgc291cmNlIGNvZGUiLCJjb3B5cmlnaHQgYyB5ZWFyIG9yZ2FuaXphdGlvbiIsImMgeWVhciBvcmdhbml6YXRpb24gYW5kIiwieWVhciBvcmdhbml6YXRpb24gYW5kIG90aGVycyIsIm9yZ2FuaXphdGlvbiBhbmQgb3RoZXJzIGFsbCIsImNvbnRyaWJ1dGlvbiBpZiBhbnkgYW5kIiwiaWYgYW55IGFuZCBpbmRpY2F0ZSIsImFueSBhbmQgaW5kaWNhdGUgaXRzIiwiYW5kIGluZGljYXRlIGl0cyBjb25zZW50IiwiaW5kaWNhdGUgaXRzIGNvbnNlbnQgdG8iLCJpdHMgY29uc2VudCB0byBjaGFyYWN0ZXJpemF0aW9uIiwiY29uc2VudCB0byBjaGFyYWN0ZXJpemF0aW9uIG9mIiwidG8gY2hhcmFjdGVyaXphdGlvbiBvZiBpdHMiLCJjaGFyYWN0ZXJpemF0aW9uIG9mIGl0cyBhZGRpdGlvbnMiLCJvZiBpdHMgYWRkaXRpb25zIGFuZCIsIml0cyBhZGRpdGlvbnMgYW5kIG9yIiwiYW5kIG9yIGNoYW5nZXMgYXMiLCJvciBjaGFuZ2VzIGFzIGEiLCJjaGFuZ2VzIGFzIGEgY29udHJpYnV0aW9uIiwiYXMgYSBjb250cmlidXRpb24gaW4iLCJhIGNvbnRyaWJ1dGlvbiBpbiBhIiwib2YgdGhlIGNvbnRyaWJ1dGlvbiBvbmNlIiwidGhlIGNvbnRyaWJ1dGlvbiBvbmNlIGNvbnNlbnQiLCJjb250cmlidXRpb24gb25jZSBjb25zZW50IGlzIiwiY29udGludWUgYW5kIHN1cnZpdmUgb3duZXIiLCJhbmQgc3Vydml2ZSBvd25lciBtYXkiLCJzdXJ2aXZlIG93bmVyIG1heSBwdWJsaXNoIiwib3duZXIgbWF5IHB1Ymxpc2ggbmV3Iiwib25lIG90aGVyIHRoYW4gb3duZXIiLCJvdGhlciB0aGFuIG93bmVyIGhhcyIsInRoYW4gb3duZXIgaGFzIHRoZSIsIm93bmVyIGhhcyB0aGUgcmlnaHQiLCJ0aGUgc3RhdGUgb2Ygc3RhdGUiLCJzdGF0ZSBvZiBzdGF0ZSBhbmQiLCJvZiBzdGF0ZSBhbmQgdGhlIiwic3RhdGUgYW5kIHRoZSBpbnRlbGxlY3R1YWwiLCJpbiB0aGUgY2FzZSBvZiBvcmdhbml6YXRpb24iLCJ0aGUgY2FzZSBvZiBvcmdhbml6YXRpb24gb3duZXIiLCJjYXNlIG9mIG9yZ2FuaXphdGlvbiBvd25lciB0aGUiLCJvZiBvcmdhbml6YXRpb24gb3duZXIgdGhlIG9yaWdpbmFsIiwib3JnYW5pemF0aW9uIG93bmVyIHRoZSBvcmlnaW5hbCBwcm9ncmFtIiwib3duZXIgdGhlIG9yaWdpbmFsIHByb2dyYW0gYW5kIiwib3JpZ2luYXRlIGZyb20gYW5kIGFyZSBjb250cmlidXRlZCIsImZyb20gYW5kIGFyZSBjb250cmlidXRlZCBieSIsImFuZCBhcmUgY29udHJpYnV0ZWQgYnkgdGhhdCIsImFyZSBjb250cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIiLCJjb250cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgY29udHJpYnV0b3IiLCJwYXJ0aWN1bGFyIGNvbnRyaWJ1dG9yIGEgY29udHJpYnV0aW9uIGlzIiwiY29udHJpYnV0b3IgYSBjb250cmlidXRpb24gaXMgY29udHJpYnV0ZWQiLCJhIGNvbnRyaWJ1dGlvbiBpcyBjb250cmlidXRlZCBieSIsImNvbnRyaWJ1dGlvbiBpcyBjb250cmlidXRlZCBieSBhIiwiaXMgY29udHJpYnV0ZWQgYnkgYSBjb250cmlidXRvciIsImNvbnRyaWJ1dGVkIGJ5IGEgY29udHJpYnV0b3Igb25seSIsImJ5IGEgY29udHJpYnV0b3Igb25seSBpIiwiYSBjb250cmlidXRvciBvbmx5IGkgaWYiLCJjb250cmlidXRvciBvbmx5IGkgaWYgaXQiLCJvbmx5IGkgaWYgaXQgd2FzIiwiaSBpZiBpdCB3YXMgYWRkZWQiLCJjb250cmlidXRvciBzIGJlaGFsZiBhbmQgaWkiLCJzIGJlaGFsZiBhbmQgaWkgdGhlIiwiYmVoYWxmIGFuZCBpaSB0aGUgY29udHJpYnV0b3IiLCJhbmQgaWkgdGhlIGNvbnRyaWJ1dG9yIGV4cGxpY2l0bHkiLCJpaSB0aGUgY29udHJpYnV0b3IgZXhwbGljaXRseSBjb25zZW50cyIsIm9yIGFkZGl0aW9ucyBhcyBjb250cmlidXRpb25zIGNvbnRyaWJ1dGlvbnMiLCJhZGRpdGlvbnMgYXMgY29udHJpYnV0aW9ucyBjb250cmlidXRpb25zIGRvIiwiYXMgY29udHJpYnV0aW9ucyBjb250cmlidXRpb25zIGRvIG5vdCIsImNvbnRyaWJ1dGlvbnMgY29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSIsInRoZSBwcm9ncmFtIGNvbnRyaWJ1dG9yIG1lYW5zIG93bmVyIiwicHJvZ3JhbSBjb250cmlidXRvciBtZWFucyBvd25lciBhbmQiLCJjb250cmlidXRvciBtZWFucyBvd25lciBhbmQgYW55IiwibWVhbnMgb3duZXIgYW5kIGFueSBvdGhlciIsIm93bmVyIGFuZCBhbnkgb3RoZXIgZW50aXR5IiwiYWdyZWVtZW50IGFzIHJlbGVhc2VkIGJ5IG93bmVyIiwiYXMgcmVsZWFzZWQgYnkgb3duZXIgaW5jbHVkaW5nIiwicmVsZWFzZWQgYnkgb3duZXIgaW5jbHVkaW5nIHNvdXJjZSIsImJ5IG93bmVyIGluY2x1ZGluZyBzb3VyY2UgY29kZSIsIm93bmVyIGluY2x1ZGluZyBzb3VyY2UgY29kZSBvYmplY3QiLCJ0aGUgcHJvZ3JhbSBjb3B5cmlnaHQgYyB5ZWFyIiwicHJvZ3JhbSBjb3B5cmlnaHQgYyB5ZWFyIG9yZ2FuaXphdGlvbiIsImNvcHlyaWdodCBjIHllYXIgb3JnYW5pemF0aW9uIGFuZCIsImMgeWVhciBvcmdhbml6YXRpb24gYW5kIG90aGVycyIsInllYXIgb3JnYW5pemF0aW9uIGFuZCBvdGhlcnMgYWxsIiwib3JnYW5pemF0aW9uIGFuZCBvdGhlcnMgYWxsIHJpZ2h0cyIsIml0cyBjb250cmlidXRpb24gaWYgYW55IGFuZCIsImNvbnRyaWJ1dGlvbiBpZiBhbnkgYW5kIGluZGljYXRlIiwiaWYgYW55IGFuZCBpbmRpY2F0ZSBpdHMiLCJhbnkgYW5kIGluZGljYXRlIGl0cyBjb25zZW50IiwiYW5kIGluZGljYXRlIGl0cyBjb25zZW50IHRvIiwiaW5kaWNhdGUgaXRzIGNvbnNlbnQgdG8gY2hhcmFjdGVyaXphdGlvbiIsIml0cyBjb25zZW50IHRvIGNoYXJhY3Rlcml6YXRpb24gb2YiLCJjb25zZW50IHRvIGNoYXJhY3Rlcml6YXRpb24gb2YgaXRzIiwidG8gY2hhcmFjdGVyaXphdGlvbiBvZiBpdHMgYWRkaXRpb25zIiwiY2hhcmFjdGVyaXphdGlvbiBvZiBpdHMgYWRkaXRpb25zIGFuZCIsIm9mIGl0cyBhZGRpdGlvbnMgYW5kIG9yIiwiaXRzIGFkZGl0aW9ucyBhbmQgb3IgY2hhbmdlcyIsImFkZGl0aW9ucyBhbmQgb3IgY2hhbmdlcyBhcyIsImFuZCBvciBjaGFuZ2VzIGFzIGEiLCJvciBjaGFuZ2VzIGFzIGEgY29udHJpYnV0aW9uIiwiY2hhbmdlcyBhcyBhIGNvbnRyaWJ1dGlvbiBpbiIsImFzIGEgY29udHJpYnV0aW9uIGluIGEiLCJhIGNvbnRyaWJ1dGlvbiBpbiBhIG1hbm5lciIsIm9yaWdpbmF0b3Igb2YgdGhlIGNvbnRyaWJ1dGlvbiBvbmNlIiwib2YgdGhlIGNvbnRyaWJ1dGlvbiBvbmNlIGNvbnNlbnQiLCJ0aGUgY29udHJpYnV0aW9uIG9uY2UgY29uc2VudCBpcyIsImNvbnRyaWJ1dGlvbiBvbmNlIGNvbnNlbnQgaXMgZ3JhbnRlZCIsInNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlIG93bmVyIiwiY29udGludWUgYW5kIHN1cnZpdmUgb3duZXIgbWF5IiwiYW5kIHN1cnZpdmUgb3duZXIgbWF5IHB1Ymxpc2giLCJzdXJ2aXZlIG93bmVyIG1heSBwdWJsaXNoIG5ldyIsIm93bmVyIG1heSBwdWJsaXNoIG5ldyB2ZXJzaW9ucyIsIm5vIG9uZSBvdGhlciB0aGFuIG93bmVyIiwib25lIG90aGVyIHRoYW4gb3duZXIgaGFzIiwib3RoZXIgdGhhbiBvd25lciBoYXMgdGhlIiwidGhhbiBvd25lciBoYXMgdGhlIHJpZ2h0Iiwib3duZXIgaGFzIHRoZSByaWdodCB0byIsIm9mIHRoZSBzdGF0ZSBvZiBzdGF0ZSIsInRoZSBzdGF0ZSBvZiBzdGF0ZSBhbmQiLCJzdGF0ZSBvZiBzdGF0ZSBhbmQgdGhlIiwib2Ygc3RhdGUgYW5kIHRoZSBpbnRlbGxlY3R1YWwiLCJzdGF0ZSBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJMdWNlbnQgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAyXG5cblRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBQVUJMSUMgTElDRU5TRSAoXCJBR1JFRU1FTlRcIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC5cblxuICAgMS4gREVGSU5JVElPTlNcblxuICAgXCJDb250cmlidXRpb25cIiBtZWFuczpcblxuICAgICAgYS4gaW4gdGhlIGNhc2Ugb2YgTHVjZW50IFRlY2hub2xvZ2llcyBJbmMuIChcIkxVQ0VOVFwiKSwgdGhlIE9yaWdpbmFsIFByb2dyYW0sIGFuZFxuXG4gICAgICBiLiBpbiB0aGUgY2FzZSBvZiBlYWNoIENvbnRyaWJ1dG9yLFxuXG4gICAgICAgICBpLiBjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmRcblxuICAgICAgICAgaWkuIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTtcblxuICAgICAgICAgd2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gd2VyZSBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYsIGFuZCB0aGUgQ29udHJpYnV0b3IgZXhwbGljaXRseSBjb25zZW50cywgaW4gYWNjb3JkYW5jZSB3aXRoIFNlY3Rpb24gM0MsIHRvIGNoYXJhY3Rlcml6YXRpb24gb2YgdGhlIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyBhcyBDb250cmlidXRpb25zLlxuXG4gICAgICBcIkNvbnRyaWJ1dG9yXCIgbWVhbnMgTFVDRU5UIGFuZCBhbnkgb3RoZXIgZW50aXR5IHRoYXQgaGFzIENvbnRyaWJ1dGVkIGEgQ29udHJpYnV0aW9uIHRvIHRoZSBQcm9ncmFtLlxuXG4gICAgICBcIkRpc3RyaWJ1dG9yXCIgbWVhbnMgYSBSZWNpcGllbnQgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbSwgbW9kaWZpY2F0aW9ucyB0byB0aGUgUHJvZ3JhbSwgb3IgYW55IHBhcnQgdGhlcmVvZi5cblxuICAgICAgXCJMaWNlbnNlZCBQYXRlbnRzXCIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2Ugb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS5cblxuICAgICAgXCJPcmlnaW5hbCBQcm9ncmFtXCIgbWVhbnMgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlIGFjY29tcGFueWluZyB0aGlzIEFncmVlbWVudCBhcyByZWxlYXNlZCBieSBMVUNFTlQsIGluY2x1ZGluZyBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUgYW5kIGRvY3VtZW50YXRpb24sIGlmIGFueS5cblxuICAgICAgXCJQcm9ncmFtXCIgbWVhbnMgdGhlIE9yaWdpbmFsIFByb2dyYW0gYW5kIENvbnRyaWJ1dGlvbnMgb3IgYW55IHBhcnQgdGhlcmVvZlxuXG4gICAgICBcIlJlY2lwaWVudFwiIG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLlxuXG4gICAyLiBHUkFOVCBPRiBSSUdIVFNcblxuICAgICAgYS4gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uXG5cbiAgICAgIGIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhlIHBhdGVudCBsaWNlbnNlIGdyYW50ZWQgYnkgYSBDb250cmlidXRvciBzaGFsbCBhbHNvIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIG9mIHRoYXQgQ29udHJpYnV0b3IgYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBncmFudGVkIGJ5IGEgQ29udHJpYnV0b3Igc2hhbGwgbm90IGFwcGx5IHRvIChpKSBhbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbiwgbm9yIHRvIChpaSkgQ29udHJpYnV0aW9ucyBvZiBvdGhlciBDb250cmlidXRvcnMuIE5vIGhhcmR3YXJlIHBlciBzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuXG5cbiAgICAgIGMuIFJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uXG5cbiAgICAgIGQuIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuXG5cbiAgIDMuIFJFUVVJUkVNRU5UU1xuXG4gICAgICBBLiBEaXN0cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gYW55IGZvcm0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgb3IgdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDpcblxuICAgICAgICAgMS4gaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7XG5cbiAgICAgICAgIDIuIGlmIHRoZSBQcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlIG9yIG90aGVyIHRhbmdpYmxlIGZvcm0sIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBvciBEaXN0cmlidXRvcidzIG93biBsaWNlbnNlIGFncmVlbWVudCBpcyBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbTsgYW5kXG5cbiAgICAgICAgIDMuIGlmIGRpc3RyaWJ1dGVkIHVuZGVyIERpc3RyaWJ1dG9yJ3Mgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBzdWNoIGxpY2Vuc2UgYWdyZWVtZW50OlxuXG4gICAgICAgICAgICBhLiBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlO1xuXG4gICAgICAgICAgICBiLiBlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsgYW5kXG5cbiAgICAgICAgICAgIGMuIHN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHkuXG5cbiAgICAgIEIuIEVhY2ggRGlzdHJpYnV0b3IgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW4gYSBjb25zcGljdW91cyBsb2NhdGlvbiBpbiB0aGUgUHJvZ3JhbTpcblxuICAgICAgQ29weXJpZ2h0IChDKSAyMDAzLCBMdWNlbnQgVGVjaG5vbG9naWVzIEluYy4gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuICAgICAgQy4gSW4gYWRkaXRpb24sIGVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiBBbHNvLCBlYWNoIENvbnRyaWJ1dG9yIG11c3QgYWdyZWUgdGhhdCB0aGUgYWRkaXRpb25zIGFuZC9vciBjaGFuZ2VzIGFyZSBpbnRlbmRlZCB0byBiZSBhIENvbnRyaWJ1dGlvbi4gT25jZSBhIENvbnRyaWJ1dGlvbiBpcyBjb250cmlidXRlZCwgaXQgbWF5IG5vdCB0aGVyZWFmdGVyIGJlIHJldm9rZWQuXG5cbiAgIDQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OXG5cbiAgIENvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heSBhY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgRGlzdHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3IgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgRGlzdHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggRGlzdHJpYnV0b3IgKFwiQ29tbWVyY2lhbCBEaXN0cmlidXRvclwiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IENvbnRyaWJ1dG9yIChcIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yXCIpIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSBcIkxvc3Nlc1wiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyIHRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciB0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZCBhbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuXG5cbiAgIEZvciBleGFtcGxlLCBhIERpc3RyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBEaXN0cmlidXRvciBpcyB0aGVuIGEgQ29tbWVyY2lhbCBEaXN0cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UgY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYSBjb3VydCByZXF1aXJlcyBhbnkgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLlxuXG4gICA1LiBOTyBXQVJSQU5UWVxuXG4gICBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuXG5cbiAgIDYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZXG5cbiAgIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDcuIEVYUE9SVCBDT05UUk9MXG5cbiAgIFJlY2lwaWVudCBhZ3JlZXMgdGhhdCBSZWNpcGllbnQgYWxvbmUgaXMgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2Ugd2l0aCB0aGUgVW5pdGVkIFN0YXRlcyBleHBvcnQgYWRtaW5pc3RyYXRpb24gcmVndWxhdGlvbnMgKGFuZCB0aGUgZXhwb3J0IGNvbnRyb2wgbGF3cyBhbmQgcmVndWxhdGlvbiBvZiBhbnkgb3RoZXIgY291bnRyaWVzKS5cblxuICAgOC4gR0VORVJBTFxuXG4gICBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS5cblxuICAgSWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhIENvbnRyaWJ1dG9yIHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgYnkgdGhhdCBDb250cmlidXRvciB0byBzdWNoIFJlY2lwaWVudCB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiBJbiBhZGRpdGlvbiwgaWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC5cblxuICAgQWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuXG5cbiAgIExVQ0VOVCBtYXkgcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mIHRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gTm8gb25lIG90aGVyIHRoYW4gTFVDRU5UIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLlxuXG4gICBUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uIl0sImxpY2Vuc2VJZHMiOlsiTFBMLTEuMDIiXSwia2V5d29yZHMiOlsidmVyc2lvbiAxIDAyIiwiMSAwMiB0aGUiLCIwMiB0aGUgYWNjb21wYW55aW5nIiwiY2FzZSBvZiBsdWNlbnQiLCJ0ZWNobm9sb2dpZXMgaW5jIGx1Y2VudCIsImluYyBsdWNlbnQgdGhlIiwibHVjZW50IHRoZSBvcmlnaW5hbCIsInRoZSBwcm9ncmFtIHdlcmUiLCJwcm9ncmFtIHdlcmUgYWRkZWQiLCJiZWhhbGYgYW5kIHRoZSIsImFzIGNvbnRyaWJ1dGlvbnMgY29udHJpYnV0b3IiLCJjb250cmlidXRpb25zIGNvbnRyaWJ1dG9yIG1lYW5zIiwiY29udHJpYnV0b3IgbWVhbnMgbHVjZW50IiwibWVhbnMgbHVjZW50IGFuZCIsImx1Y2VudCBhbmQgYW55IiwicmVsZWFzZWQgYnkgbHVjZW50IiwiYnkgbHVjZW50IGluY2x1ZGluZyIsImx1Y2VudCBpbmNsdWRpbmcgc291cmNlIiwiYyAyMDAzIGx1Y2VudCIsIjIwMDMgbHVjZW50IHRlY2hub2xvZ2llcyIsInRlY2hub2xvZ2llcyBpbmMgYW5kIiwiaW5jIGFuZCBvdGhlcnMiLCJ0aGUgY29udHJpYnV0aW9uIGFsc28iLCJjb250cmlidXRpb24gYWxzbyBlYWNoIiwiYWxzbyBlYWNoIGNvbnRyaWJ1dG9yIiwiY29udHJpYnV0b3IgbXVzdCBhZ3JlZSIsIm11c3QgYWdyZWUgdGhhdCIsInRoYXQgdGhlIGFkZGl0aW9ucyIsInRoZSBhZGRpdGlvbnMgYW5kIiwib3IgY2hhbmdlcyBhcmUiLCJjaGFuZ2VzIGFyZSBpbnRlbmRlZCIsImJlIGEgY29udHJpYnV0aW9uIiwiYSBjb250cmlidXRpb24gb25jZSIsImNvbnRyaWJ1dGlvbiBvbmNlIGEiLCJvbmNlIGEgY29udHJpYnV0aW9uIiwiaXMgY29udHJpYnV0ZWQgaXQiLCJjb250cmlidXRlZCBpdCBtYXkiLCJkYW1hZ2VzIDcgZXhwb3J0IiwiNyBleHBvcnQgY29udHJvbCIsImV4cG9ydCBjb250cm9sIHJlY2lwaWVudCIsImNvbnRyb2wgcmVjaXBpZW50IGFncmVlcyIsInJlY2lwaWVudCBhZ3JlZXMgdGhhdCIsImFncmVlcyB0aGF0IHJlY2lwaWVudCIsInJlY2lwaWVudCBhbG9uZSBpcyIsImFsb25lIGlzIHJlc3BvbnNpYmxlIiwib3RoZXIgY291bnRyaWVzIDgiLCJjb3VudHJpZXMgOCBnZW5lcmFsIiwiOCBnZW5lcmFsIGlmIiwiYW5kIHN1cnZpdmUgbHVjZW50Iiwic3Vydml2ZSBsdWNlbnQgbWF5IiwibHVjZW50IG1heSBwdWJsaXNoIiwib3RoZXIgdGhhbiBsdWNlbnQiLCJ0aGFuIGx1Y2VudCBoYXMiLCJsdWNlbnQgaGFzIHRoZSIsImxpY2Vuc2UgdmVyc2lvbiAxIDAyIiwidmVyc2lvbiAxIDAyIHRoZSIsIjEgMDIgdGhlIGFjY29tcGFueWluZyIsIjAyIHRoZSBhY2NvbXBhbnlpbmcgcHJvZ3JhbSIsInRoZSBjYXNlIG9mIGx1Y2VudCIsImNhc2Ugb2YgbHVjZW50IHRlY2hub2xvZ2llcyIsIm9mIGx1Y2VudCB0ZWNobm9sb2dpZXMgaW5jIiwibHVjZW50IHRlY2hub2xvZ2llcyBpbmMgbHVjZW50IiwidGVjaG5vbG9naWVzIGluYyBsdWNlbnQgdGhlIiwiaW5jIGx1Y2VudCB0aGUgb3JpZ2luYWwiLCJsdWNlbnQgdGhlIG9yaWdpbmFsIHByb2dyYW0iLCJ0byB0aGUgcHJvZ3JhbSB3ZXJlIiwidGhlIHByb2dyYW0gd2VyZSBhZGRlZCIsInByb2dyYW0gd2VyZSBhZGRlZCB0byIsIndlcmUgYWRkZWQgdG8gdGhlIiwicyBiZWhhbGYgYW5kIHRoZSIsImJlaGFsZiBhbmQgdGhlIGNvbnRyaWJ1dG9yIiwiYW5kIHRoZSBjb250cmlidXRvciBleHBsaWNpdGx5IiwiYWRkaXRpb25zIGFzIGNvbnRyaWJ1dGlvbnMgY29udHJpYnV0b3IiLCJhcyBjb250cmlidXRpb25zIGNvbnRyaWJ1dG9yIG1lYW5zIiwiY29udHJpYnV0aW9ucyBjb250cmlidXRvciBtZWFucyBsdWNlbnQiLCJjb250cmlidXRvciBtZWFucyBsdWNlbnQgYW5kIiwibWVhbnMgbHVjZW50IGFuZCBhbnkiLCJsdWNlbnQgYW5kIGFueSBvdGhlciIsImFzIHJlbGVhc2VkIGJ5IGx1Y2VudCIsInJlbGVhc2VkIGJ5IGx1Y2VudCBpbmNsdWRpbmciLCJieSBsdWNlbnQgaW5jbHVkaW5nIHNvdXJjZSIsImx1Y2VudCBpbmNsdWRpbmcgc291cmNlIGNvZGUiLCJwcm9ncmFtIGNvcHlyaWdodCBjIDIwMDMiLCJjb3B5cmlnaHQgYyAyMDAzIGx1Y2VudCIsImMgMjAwMyBsdWNlbnQgdGVjaG5vbG9naWVzIiwiMjAwMyBsdWNlbnQgdGVjaG5vbG9naWVzIGluYyIsImx1Y2VudCB0ZWNobm9sb2dpZXMgaW5jIGFuZCIsInRlY2hub2xvZ2llcyBpbmMgYW5kIG90aGVycyIsImluYyBhbmQgb3RoZXJzIGFsbCIsIml0cyBjb250cmlidXRpb24gaW4gYSIsIm9mIHRoZSBjb250cmlidXRpb24gYWxzbyIsInRoZSBjb250cmlidXRpb24gYWxzbyBlYWNoIiwiY29udHJpYnV0aW9uIGFsc28gZWFjaCBjb250cmlidXRvciIsImFsc28gZWFjaCBjb250cmlidXRvciBtdXN0IiwiZWFjaCBjb250cmlidXRvciBtdXN0IGFncmVlIiwiY29udHJpYnV0b3IgbXVzdCBhZ3JlZSB0aGF0IiwibXVzdCBhZ3JlZSB0aGF0IHRoZSIsImFncmVlIHRoYXQgdGhlIGFkZGl0aW9ucyIsInRoYXQgdGhlIGFkZGl0aW9ucyBhbmQiLCJ0aGUgYWRkaXRpb25zIGFuZCBvciIsImFuZCBvciBjaGFuZ2VzIGFyZSIsIm9yIGNoYW5nZXMgYXJlIGludGVuZGVkIiwiY2hhbmdlcyBhcmUgaW50ZW5kZWQgdG8iLCJhcmUgaW50ZW5kZWQgdG8gYmUiLCJpbnRlbmRlZCB0byBiZSBhIiwidG8gYmUgYSBjb250cmlidXRpb24iLCJiZSBhIGNvbnRyaWJ1dGlvbiBvbmNlIiwiYSBjb250cmlidXRpb24gb25jZSBhIiwiY29udHJpYnV0aW9uIG9uY2UgYSBjb250cmlidXRpb24iLCJvbmNlIGEgY29udHJpYnV0aW9uIGlzIiwiY29udHJpYnV0aW9uIGlzIGNvbnRyaWJ1dGVkIGl0IiwiaXMgY29udHJpYnV0ZWQgaXQgbWF5IiwiY29udHJpYnV0ZWQgaXQgbWF5IG5vdCIsInN1Y2ggZGFtYWdlcyA3IGV4cG9ydCIsImRhbWFnZXMgNyBleHBvcnQgY29udHJvbCIsIjcgZXhwb3J0IGNvbnRyb2wgcmVjaXBpZW50IiwiZXhwb3J0IGNvbnRyb2wgcmVjaXBpZW50IGFncmVlcyIsImNvbnRyb2wgcmVjaXBpZW50IGFncmVlcyB0aGF0IiwicmVjaXBpZW50IGFncmVlcyB0aGF0IHJlY2lwaWVudCIsImFncmVlcyB0aGF0IHJlY2lwaWVudCBhbG9uZSIsInRoYXQgcmVjaXBpZW50IGFsb25lIGlzIiwicmVjaXBpZW50IGFsb25lIGlzIHJlc3BvbnNpYmxlIiwiYWxvbmUgaXMgcmVzcG9uc2libGUgZm9yIiwiaXMgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2UiLCJhbnkgb3RoZXIgY291bnRyaWVzIDgiLCJvdGhlciBjb3VudHJpZXMgOCBnZW5lcmFsIiwiY291bnRyaWVzIDggZ2VuZXJhbCBpZiIsIjggZ2VuZXJhbCBpZiBhbnkiLCJjb250aW51ZSBhbmQgc3Vydml2ZSBsdWNlbnQiLCJhbmQgc3Vydml2ZSBsdWNlbnQgbWF5Iiwic3Vydml2ZSBsdWNlbnQgbWF5IHB1Ymxpc2giLCJsdWNlbnQgbWF5IHB1Ymxpc2ggbmV3Iiwib25lIG90aGVyIHRoYW4gbHVjZW50Iiwib3RoZXIgdGhhbiBsdWNlbnQgaGFzIiwidGhhbiBsdWNlbnQgaGFzIHRoZSIsImx1Y2VudCBoYXMgdGhlIHJpZ2h0IiwicHVibGljIGxpY2Vuc2UgdmVyc2lvbiAxIDAyIiwibGljZW5zZSB2ZXJzaW9uIDEgMDIgdGhlIiwidmVyc2lvbiAxIDAyIHRoZSBhY2NvbXBhbnlpbmciLCIxIDAyIHRoZSBhY2NvbXBhbnlpbmcgcHJvZ3JhbSIsIjAyIHRoZSBhY2NvbXBhbnlpbmcgcHJvZ3JhbSBpcyIsImluIHRoZSBjYXNlIG9mIGx1Y2VudCIsInRoZSBjYXNlIG9mIGx1Y2VudCB0ZWNobm9sb2dpZXMiLCJjYXNlIG9mIGx1Y2VudCB0ZWNobm9sb2dpZXMgaW5jIiwib2YgbHVjZW50IHRlY2hub2xvZ2llcyBpbmMgbHVjZW50IiwibHVjZW50IHRlY2hub2xvZ2llcyBpbmMgbHVjZW50IHRoZSIsInRlY2hub2xvZ2llcyBpbmMgbHVjZW50IHRoZSBvcmlnaW5hbCIsImluYyBsdWNlbnQgdGhlIG9yaWdpbmFsIHByb2dyYW0iLCJsdWNlbnQgdGhlIG9yaWdpbmFsIHByb2dyYW0gYW5kIiwiYWRkaXRpb25zIHRvIHRoZSBwcm9ncmFtIHdlcmUiLCJ0byB0aGUgcHJvZ3JhbSB3ZXJlIGFkZGVkIiwidGhlIHByb2dyYW0gd2VyZSBhZGRlZCB0byIsInByb2dyYW0gd2VyZSBhZGRlZCB0byB0aGUiLCJ3ZXJlIGFkZGVkIHRvIHRoZSBwcm9ncmFtIiwiY29udHJpYnV0b3IgcyBiZWhhbGYgYW5kIHRoZSIsInMgYmVoYWxmIGFuZCB0aGUgY29udHJpYnV0b3IiLCJiZWhhbGYgYW5kIHRoZSBjb250cmlidXRvciBleHBsaWNpdGx5IiwiYW5kIHRoZSBjb250cmlidXRvciBleHBsaWNpdGx5IGNvbnNlbnRzIiwib3IgYWRkaXRpb25zIGFzIGNvbnRyaWJ1dGlvbnMgY29udHJpYnV0b3IiLCJhZGRpdGlvbnMgYXMgY29udHJpYnV0aW9ucyBjb250cmlidXRvciBtZWFucyIsImFzIGNvbnRyaWJ1dGlvbnMgY29udHJpYnV0b3IgbWVhbnMgbHVjZW50IiwiY29udHJpYnV0aW9ucyBjb250cmlidXRvciBtZWFucyBsdWNlbnQgYW5kIiwiY29udHJpYnV0b3IgbWVhbnMgbHVjZW50IGFuZCBhbnkiLCJtZWFucyBsdWNlbnQgYW5kIGFueSBvdGhlciIsImx1Y2VudCBhbmQgYW55IG90aGVyIGVudGl0eSIsImFncmVlbWVudCBhcyByZWxlYXNlZCBieSBsdWNlbnQiLCJhcyByZWxlYXNlZCBieSBsdWNlbnQgaW5jbHVkaW5nIiwicmVsZWFzZWQgYnkgbHVjZW50IGluY2x1ZGluZyBzb3VyY2UiLCJieSBsdWNlbnQgaW5jbHVkaW5nIHNvdXJjZSBjb2RlIiwibHVjZW50IGluY2x1ZGluZyBzb3VyY2UgY29kZSBvYmplY3QiLCJ0aGUgcHJvZ3JhbSBjb3B5cmlnaHQgYyAyMDAzIiwicHJvZ3JhbSBjb3B5cmlnaHQgYyAyMDAzIGx1Y2VudCIsImNvcHlyaWdodCBjIDIwMDMgbHVjZW50IHRlY2hub2xvZ2llcyIsImMgMjAwMyBsdWNlbnQgdGVjaG5vbG9naWVzIGluYyIsIjIwMDMgbHVjZW50IHRlY2hub2xvZ2llcyBpbmMgYW5kIiwibHVjZW50IHRlY2hub2xvZ2llcyBpbmMgYW5kIG90aGVycyIsInRlY2hub2xvZ2llcyBpbmMgYW5kIG90aGVycyBhbGwiLCJpbmMgYW5kIG90aGVycyBhbGwgcmlnaHRzIiwib3JpZ2luYXRvciBvZiBpdHMgY29udHJpYnV0aW9uIGluIiwib2YgaXRzIGNvbnRyaWJ1dGlvbiBpbiBhIiwiaXRzIGNvbnRyaWJ1dGlvbiBpbiBhIG1hbm5lciIsIm9yaWdpbmF0b3Igb2YgdGhlIGNvbnRyaWJ1dGlvbiBhbHNvIiwib2YgdGhlIGNvbnRyaWJ1dGlvbiBhbHNvIGVhY2giLCJ0aGUgY29udHJpYnV0aW9uIGFsc28gZWFjaCBjb250cmlidXRvciIsImNvbnRyaWJ1dGlvbiBhbHNvIGVhY2ggY29udHJpYnV0b3IgbXVzdCIsImFsc28gZWFjaCBjb250cmlidXRvciBtdXN0IGFncmVlIiwiZWFjaCBjb250cmlidXRvciBtdXN0IGFncmVlIHRoYXQiLCJjb250cmlidXRvciBtdXN0IGFncmVlIHRoYXQgdGhlIiwibXVzdCBhZ3JlZSB0aGF0IHRoZSBhZGRpdGlvbnMiLCJhZ3JlZSB0aGF0IHRoZSBhZGRpdGlvbnMgYW5kIiwidGhhdCB0aGUgYWRkaXRpb25zIGFuZCBvciIsInRoZSBhZGRpdGlvbnMgYW5kIG9yIGNoYW5nZXMiLCJhZGRpdGlvbnMgYW5kIG9yIGNoYW5nZXMgYXJlIiwiYW5kIG9yIGNoYW5nZXMgYXJlIGludGVuZGVkIiwib3IgY2hhbmdlcyBhcmUgaW50ZW5kZWQgdG8iLCJjaGFuZ2VzIGFyZSBpbnRlbmRlZCB0byBiZSIsImFyZSBpbnRlbmRlZCB0byBiZSBhIiwiaW50ZW5kZWQgdG8gYmUgYSBjb250cmlidXRpb24iLCJ0byBiZSBhIGNvbnRyaWJ1dGlvbiBvbmNlIiwiYmUgYSBjb250cmlidXRpb24gb25jZSBhIl19LHsibGljZW5zZVRleHRzIjpbIkxhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2VcblxuTFBQTCBWZXJzaW9uIDEuMCAxOTk5LTAzLTAxIENvcHlyaWdodCAxOTk5IExhVGVYMyBQcm9qZWN0XG5cbkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBtb2RpZmljYXRpb24gaXMgbm90IGFsbG93ZWQuXG5cblByZWFtYmxlXG5cblRoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlIChMUFBMKSBpcyB0aGUgbGljZW5zZSB1bmRlciB3aGljaCB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gaXMgZGlzdHJpYnV0ZWQuIEFzIGRlc2NyaWJlZCBiZWxvdyB5b3UgbWF5IHVzZSB0aGlzIGxpY2VuY2UgZm9yIGFueSBzb2Z0d2FyZSB0aGF0IHlvdSB3aXNoIHRvIGRpc3RyaWJ1dGUuXG5cbkl0IG1heSBiZSBwYXJ0aWN1bGFybHkgc3VpdGFibGUgaWYgeW91ciBzb2Z0d2FyZSBpcyBUZVggcmVsYXRlZCAoc3VjaCBhcyBhIExhVGVYIHBhY2thZ2UgZmlsZSkgYnV0IGl0IG1heSBiZSB1c2VkIGZvciBhbnkgc29mdHdhcmUsIGV2ZW4gaWYgaXQgaXMgdW5yZWxhdGVkIHRvIFRlWC5cblxuVG8gdXNlIHRoaXMgbGljZW5zZSwgdGhlIGZpbGVzIG9mIHlvdXIgZGlzdHJpYnV0aW9uIHNob3VsZCBoYXZlIGFuIGV4cGxpY2l0IGNvcHlyaWdodCBub3RpY2UgZ2l2aW5nIHlvdXIgbmFtZSBhbmQgdGhlIHllYXIsIHRvZ2V0aGVyIHdpdGggYSByZWZlcmVuY2UgdG8gdGhpcyBsaWNlbnNlLlxuXG5BIHR5cGljYWwgZXhhbXBsZSB3b3VsZCBiZVxuXG4lJSBwaWcuc3R5XG5cbiUlIENvcHlyaWdodCAyMDAxIE0uIFkuIE5hbWVcblxuJSBUaGlzIHByb2dyYW0gY2FuIHJlZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtc1xuXG4lIG9mIHRoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlIERpc3RyaWJ1dGVkIGZyb20gQ1RBTlxuXG4lIGFyY2hpdmVzIGluIGRpcmVjdG9yeSBtYWNyb3MvbGF0ZXgvYmFzZS9scHBsLnR4dDsgZWl0aGVyXG5cbiUgdmVyc2lvbiAxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG5HaXZlbiBzdWNoIGEgbm90aWNlIGluIHRoZSBmaWxlLCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGRvY3VtZW50IHdvdWxkIGFwcGx5LCB3aXRoOlxuXG5gVGhlIFByb2dyYW0nIHJlZmVycmluZyB0byB0aGUgc29mdHdhcmUgYHBpZy5zdHknIGFuZCBgVGhlIENvcHlyaWdodCBIb2xkZXInIHJlZmVycmluZyB0byB0aGUgcGVyc29uIGBNLiBZLiBOYW1lJy5cblxuVG8gc2VlIGEgcmVhbCBleGFtcGxlLCBzZWUgdGhlIGZpbGUgbGVnYWwudHh0IHdoaWNoIGNhcnJpZXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBiYXNlIGxhdGV4IGRpc3RyaWJ1dGlvbi5cblxuVGhpcyBsaWNlbnNlIGdpdmVzIHRlcm1zIHVuZGVyIHdoaWNoIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZCBhbmQgbW9kaWZpZWQuIEluZGl2aWR1YWwgZmlsZXMgbWF5IGhhdmUgc3BlY2lmaWMgZnVydGhlciBjb25zdHJhaW50cyBvbiBtb2RpZmljYXRpb24sIGJ1dCBubyBmaWxlIHNob3VsZCBoYXZlIHJlc3RyaWN0aW9ucyBvbiBkaXN0cmlidXRpb24gb3RoZXIgdGhhbiB0aG9zZSBzcGVjaWZpZWQgYmVsb3cuXG5cblRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgYSBkaXN0cmlidXRvciB3aXNoaW5nIHRvIGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSB1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0gbmVlZCBvbmx5IGNoZWNrIHRoZSBjb25kaXRpb25zIGluIHRoaXMgZmlsZSwgYW5kIGRvZXMgbm90IG5lZWQgdG8gY2hlY2sgZXZlcnkgZmlsZSBpbiBUaGUgUHJvZ3JhbSBmb3IgZXh0cmEgcmVzdHJpY3Rpb25zLiBJZiB5b3UgZG8gbmVlZCB0byBtb2RpZnkgdGhlIGRpc3RyaWJ1dGlvbiB0ZXJtcyBvZiBzb21lIGZpbGVzLCBkbyBub3QgcmVmZXIgdG8gdGhpcyBsaWNlbnNlLCBpbnN0ZWFkIGRpc3RyaWJ1dGUgVGhlIFByb2dyYW0gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gWW91IG1heSB1c2UgdGhlIHBhcnRzIG9mIHRoZSB0ZXh0IG9mIExQUEwgYXMgYSBtb2RlbCBmb3IgeW91ciBvd24gbGljZW5zZSwgYnV0IHlvdXIgbGljZW5zZSBzaG91bGQgbm90IGRpcmVjdGx5IHJlZmVyIHRvIHRoZSBMUFBMIG9yIG90aGVyd2lzZSBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgVGhlIFByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwuXG5cblRoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRlcm1zIEFuZCBDb25kaXRpb25zIEZvciBDb3B5aW5nLCBEaXN0cmlidXRpb24gQW5kIE1vZGlmaWNhdGlvblxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuV0FSUkFOVFlcblxuPT09PT09PT1cblxuVGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIFRoZSBQcm9ncmFtLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdy4gRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCBpbiB3cml0aW5nLCBUaGUgQ29weXJpZ2h0IEhvbGRlciBwcm92aWRlcyBUaGUgUHJvZ3JhbSBgYXMgaXMnIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgcHJvZ3JhbSBpcyB3aXRoIHlvdS4gU2hvdWxkIFRoZSBQcm9ncmFtIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZSB0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyIG9yIGNvcnJlY3Rpb24uXG5cbkluIG5vIGV2ZW50IHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyB3aWxsIFRoZSBDb3B5cmlnaHQgSG9sZGVyLCBvciBhbnkgb2YgdGhlIGluZGl2aWR1YWwgYXV0aG9ycyBuYW1lZCBpbiB0aGUgc291cmNlIGZvciBUaGUgUHJvZ3JhbSwgYmUgbGlhYmxlIHRvIHlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiBhbnkgdXNlIG9mIFRoZSBQcm9ncmFtIG9yIG91dCBvZiBpbmFiaWxpdHkgdG8gdXNlIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGxvc3Mgb2YgZGF0YSBvciBkYXRhIGJlaW5nIHJlbmRlcmVkIGluYWNjdXJhdGUgb3IgbG9zc2VzIHN1c3RhaW5lZCBieSB5b3Ugb3IgYnkgdGhpcmQgcGFydGllcyBhcyBhIHJlc3VsdCBvZiBhIGZhaWx1cmUgb2YgVGhlIFByb2dyYW0gdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlciBwcm9ncmFtcyksIGV2ZW4gaWYgc3VjaCBob2xkZXIgb3Igb3RoZXIgcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLlxuXG5ESVNUUklCVVRJT05cblxuPT09PT09PT09PT09XG5cblJlZGlzdHJpYnV0aW9uIG9mIHVuY2hhbmdlZCBmaWxlcyBpcyBhbGxvd2VkIHByb3ZpZGVkIHRoYXQgYWxsIGZpbGVzIHRoYXQgbWFrZSB1cCB0aGUgZGlzdHJpYnV0aW9uIG9mIFRoZSBQcm9ncmFtIGFyZSBkaXN0cmlidXRlZC4gSW4gcGFydGljdWxhciB0aGlzIG1lYW5zIHRoYXQgVGhlIFByb2dyYW0gaGFzIHRvIGJlIGRpc3RyaWJ1dGVkIGluY2x1ZGluZyBpdHMgZG9jdW1lbnRhdGlvbiBpZiBkb2N1bWVudGF0aW9uIHdhcyBwYXJ0IG9mIHRoZSBvcmlnaW5hbCBkaXN0cmlidXRpb24uXG5cblRoZSBkaXN0cmlidXRpb24gb2YgVGhlIFByb2dyYW0gd2lsbCBjb250YWluIGEgcHJvbWluZW50IGZpbGUgbGlzdGluZyBhbGwgdGhlIGZpbGVzIGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlLlxuXG5JZiB5b3UgcmVjZWl2ZSBvbmx5IHNvbWUgb2YgdGhlc2UgZmlsZXMgZnJvbSBzb21lb25lLCBjb21wbGFpbiFcblxuVGhlIGRpc3RyaWJ1dGlvbiBvZiBjaGFuZ2VkIHZlcnNpb25zIG9mIGNlcnRhaW4gZmlsZXMgaW5jbHVkZWQgaW4gdGhlIFRoZSBQcm9ncmFtLCBhbmQgdGhlIHJldXNlIG9mIGNvZGUgZnJvbSBUaGUgUHJvZ3JhbSwgYXJlIGFsbG93ZWQgdW5kZXIgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG5cbiAgICogSXQgaXMgYWxsb3dlZCBvbmx5IGlmIHRoZSBsZWdhbCBub3RpY2UgaW4gdGhlIGZpbGUgZG9lcyBub3QgZXhwcmVzc2x5IGZvcmJpZCBpdC4gU2VlIG5vdGUgYmVsb3csIHVuZGVyIFwiQ29uZGl0aW9ucyBvbiBpbmRpdmlkdWFsIGZpbGVzXCIuXG5cbiAgICogWW91IHJlbmFtZSB0aGUgZmlsZSBiZWZvcmUgeW91IG1ha2UgYW55IGNoYW5nZXMgdG8gaXQsIHVubGVzcyB0aGUgZmlsZSBleHBsaWNpdGx5IHNheXMgdGhhdCByZW5hbWluZyBpcyBub3QgcmVxdWlyZWQuIEFueSBzdWNoIGNoYW5nZWQgZmlsZXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciBhIGxpY2Vuc2UgdGhhdCBmb3JiaWRzIGRpc3RyaWJ1dGlvbiBvZiB0aG9zZSBmaWxlcywgYW5kIGFueSBmaWxlcyBkZXJpdmVkIGZyb20gdGhlbSwgdW5kZXIgdGhlIG5hbWVzIHVzZWQgYnkgdGhlIG9yaWdpbmFsIGZpbGVzIGluIHRoZSBkaXN0cmlidXRpb24gb2YgVGhlIFByb2dyYW0uXG5cbiAgICogWW91IGNoYW5nZSBhbnkgYGlkZW50aWZpY2F0aW9uIHN0cmluZycgaW4gVGhlIFByb2dyYW0gdG8gY2xlYXJseSBpbmRpY2F0ZSB0aGF0IHRoZSBmaWxlIGlzIG5vdCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBzeXN0ZW0uXG5cbiAgICogSWYgVGhlIFByb2dyYW0gaW5jbHVkZXMgYW4gYGVycm9yIHJlcG9ydCBhZGRyZXNzJyBzbyB0aGF0IGVycm9ycyBtYXkgYmUgcmVwb3J0ZWQgdG8gVGhlIENvcHlyaWdodCBIb2xkZXIsIG9yIG90aGVyIHNwZWNpZmllZCBhZGRyZXNzZXMsIHRoaXMgYWRkcmVzcyBtdXN0IGJlIGNoYW5nZWQgaW4gYW55IG1vZGlmaWVkIHZlcnNpb25zIG9mIFRoZSBQcm9ncmFtLCBzbyB0aGF0IHJlcG9ydHMgZm9yIGZpbGVzIG5vdCBtYWludGFpbmVkIGJ5IHRoZSBvcmlnaW5hbCBwcm9ncmFtIG1haW50YWluZXJzIGFyZSBkaXJlY3RlZCB0byB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlIGNoYW5nZWQgZmlsZXMuXG5cbiAgICogWW91IGFja25vd2xlZGdlIHRoZSBzb3VyY2UgYW5kIGF1dGhvcnNoaXAgb2YgdGhlIG9yaWdpbmFsIHZlcnNpb24gaW4gdGhlIG1vZGlmaWVkIGZpbGUuXG5cbiAgICogWW91IGFsc28gZGlzdHJpYnV0ZSB0aGUgdW5tb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIG9yIGFsdGVybmF0aXZlbHkgcHJvdmlkZSBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHNvIHRoYXQgdGhlIHVzZXIgb2YgeW91ciBtb2RpZmllZCBmaWxlIGNhbiBiZSByZWFzb25hYmx5IGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gb2J0YWluIGFuIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0uIEZvciBleGFtcGxlLCB5b3UgbWF5IHNwZWNpZnkgYSBVUkwgdG8gYSBzaXRlIHRoYXQgeW91IGV4cGVjdCB3aWxsIGZyZWVseSBwcm92aWRlIHRoZSB1c2VyIHdpdGggYSBjb3B5IG9mIFRoZSBQcm9ncmFtIChlaXRoZXIgdGhlIHZlcnNpb24gb24gd2hpY2ggeW91ciBtb2RpZmljYXRpb24gaXMgYmFzZWQsIG9yIHBlcmhhcHMgYSBsYXRlciB2ZXJzaW9uKS5cblxuICAgKiBJZiBUaGUgUHJvZ3JhbSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGgsIG9yIGlzIGJhc2VkIG9uLCBMYVRlWCwgdGhlbiBmaWxlcyB3aXRoIHRoZSBmb2xsb3dpbmcgZmlsZSBleHRlbnNpb25zIHdoaWNoIGhhdmUgc3BlY2lhbCBtZWFuaW5nIGluIExhVGVYIFNvZnR3YXJlLCBoYXZlIHNwZWNpYWwgbW9kaWZpY2F0aW9uIHJ1bGVzIHVuZGVyIHRoZSBsaWNlbnNlOlxuXG4gICAgICAtIEZpbGVzIHdpdGggZXh0ZW5zaW9uIGAuaW5zJyAoaW5zdGFsbGF0aW9uIGZpbGVzKTogdGhlc2UgZmlsZXMgbWF5IG5vdCBiZSBtb2RpZmllZCBhdCBhbGwgYmVjYXVzZSB0aGV5IGNvbnRhaW4gdGhlIGxlZ2FsIG5vdGljZXMgdGhhdCBhcmUgcGxhY2VkIGluIHRoZSBnZW5lcmF0ZWQgZmlsZXMuXG5cbiAgICAgIC0gRmlsZXMgd2l0aCBleHRlbnNpb24gYC5mZCcgKExhVGVYIGZvbnQgZGVmaW5pdGlvbnMgZmlsZXMpOiB0aGVzZSBmaWxlcyBhcmUgYWxsb3dlZCB0byBiZSBtb2RpZmllZCB3aXRob3V0IGNoYW5naW5nIHRoZSBuYW1lLCBidXQgb25seSB0byBlbmFibGUgdXNlIG9mIGFsbCBhdmFpbGFibGUgZm9udHMgYW5kIHRvIHByZXZlbnQgYXR0ZW1wdHMgdG8gYWNjZXNzIHVuYXZhaWxhYmxlIGZvbnRzLiBIb3dldmVyLCBtb2RpZmllZCBmaWxlcyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgZGlzdHJpYnV0ZWQgaW4gcGxhY2Ugb2Ygb3JpZ2luYWwgZmlsZXMuXG5cbiAgICAgIC0gRmlsZXMgd2l0aCBleHRlbnNpb24gYC5jZmcnIChjb25maWd1cmF0aW9uIGZpbGVzKTogdGhlc2UgZmlsZXMgY2FuIGJlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdG8gZW5hYmxlIGVhc3kgY29uZmlndXJhdGlvbiBvZiB0aGUgc3lzdGVtLiBUaGUgZG9jdW1lbnRhdGlvbiBpbiBjZmdndWlkZS50ZXggaW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGRlc2NyaWJlcyB3aGVuIGl0IG1ha2VzIHNlbnNlIHRvIG1vZGlmeSBvciBnZW5lcmF0ZSBzdWNoIGZpbGVzLlxuXG5UaGUgYWJvdmUgcmVzdHJpY3Rpb25zIGFyZSBub3QgaW50ZW5kZWQgdG8gcHJvaGliaXQsIGFuZCBoZW5jZSBkbyBub3QgYXBwbHkgdG8sIHRoZSB1cGRhdGluZywgYnkgYW55IG1ldGhvZCwgb2YgYSBmaWxlIHNvIHRoYXQgaXQgYmVjb21lcyBpZGVudGljYWwgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoYXQgZmlsZSBpbiBUaGUgUHJvZ3JhbS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbk5PVEVTXG5cbj09PT09XG5cbldlIGJlbGlldmUgdGhhdCB0aGVzZSByZXF1aXJlbWVudHMgZ2l2ZSB5b3UgdGhlIGZyZWVkb20geW91IHRvIG1ha2UgbW9kaWZpY2F0aW9ucyB0aGF0IGNvbmZvcm0gd2l0aCB3aGF0ZXZlciB0ZWNobmljYWwgc3BlY2lmaWNhdGlvbnMgeW91IHdpc2gsIHdoaWxzdCBtYWludGFpbmluZyB0aGUgYXZhaWxhYmlsaXR5LCBpbnRlZ3JpdHkgYW5kIHJlbGlhYmlsaXR5IG9mIFRoZSBQcm9ncmFtLiBJZiB5b3UgZG8gbm90IHNlZSBob3cgdG8gYWNoaWV2ZSB5b3VyIGdvYWwgd2hpbHN0IGFkaGVyaW5nIHRvIHRoZXNlIHJlcXVpcmVtZW50cyB0aGVuIHJlYWQgdGhlIGRvY3VtZW50IGNmZ2d1aWRlLnRleCBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZm9yIHN1Z2dlc3Rpb25zLlxuXG5CZWNhdXNlIG9mIHRoZSBwb3J0YWJpbGl0eSBhbmQgZXhjaGFuZ2VhYmlsaXR5IGFzcGVjdHMgb2Ygc3lzdGVtcyBsaWtlIExhVGVYLCBUaGUgTGFUZVgzIFByb2plY3QgZGVwcmVjYXRlcyB0aGUgZGlzdHJpYnV0aW9uIG9mIG5vbi1zdGFuZGFyZCB2ZXJzaW9ucyBvZiBjb21wb25lbnRzIG9mIExhVGVYIG9yIG9mIGdlbmVyYWxseSBhdmFpbGFibGUgY29udHJpYnV0ZWQgY29kZSBmb3IgdGhlbSBidXQgc3VjaCBkaXN0cmlidXRpb25zIGFyZSBwZXJtaXR0ZWQgdW5kZXIgdGhlIGFib3ZlIHJlc3RyaWN0aW9ucy5cblxuVGhlIGRvY3VtZW50IG1vZGd1aWRlLnRleCBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZGV0YWlscyB0aGUgcmVhc29ucyBmb3IgdGhlIGxlZ2FsIHJlcXVpcmVtZW50cyBkZXRhaWxlZCBhYm92ZS4gRXZlbiBpZiBUaGUgUHJvZ3JhbSBpcyB1bnJlbGF0ZWQgdG8gTGFUZVgsIHRoZSBhcmd1bWVudCBpbiBtb2RndWlkZS50ZXggbWF5IHN0aWxsIGFwcGx5LCBhbmQgc2hvdWxkIGJlIHJlYWQgYmVmb3JlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBUaGUgUHJvZ3JhbSBpcyBkaXN0cmlidXRlZC5cblxuQ29uZGl0aW9ucyBvbiBpbmRpdmlkdWFsIGZpbGVzXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgaW5kaXZpZHVhbCBmaWxlcyBtYXkgYmVhciBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgd2hpY2ggc3VwZXJzZWRlIHRoZSBnZW5lcmFsIGNvbmRpdGlvbnMgb24gZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gY29udGFpbmVkIGluIHRoaXMgZmlsZS4gSWYgdGhlcmUgYXJlIGFueSBzdWNoIGZpbGVzLCB0aGUgZGlzdHJpYnV0aW9uIG9mIFRoZSBQcm9ncmFtIHdpbGwgY29udGFpbiBhIHByb21pbmVudCBmaWxlIHRoYXQgbGlzdHMgYWxsIHRoZSBleGNlcHRpb25hbCBmaWxlcy5cblxuVHlwaWNhbCBleGFtcGxlcyBvZiBmaWxlcyB3aXRoIG1vcmUgcmVzdHJpY3RpdmUgbW9kaWZpY2F0aW9uIGNvbmRpdGlvbnMgd291bGQgYmUgZmlsZXMgdGhhdCBjb250YWluIHRoZSB0ZXh0IG9mIGNvcHlyaWdodCBub3RpY2VzLlxuXG4gICAqIFRoZSBjb25kaXRpb25zIG9uIGluZGl2aWR1YWwgZmlsZXMgZGlmZmVyIG9ubHkgaW4gdGhlIGV4dGVudCBvZiAqbW9kaWZpY2F0aW9uKiB0aGF0IGlzIGFsbG93ZWQuXG5cbiAgICogVGhlIGNvbmRpdGlvbnMgb24gKmRpc3RyaWJ1dGlvbiogYXJlIHRoZSBzYW1lIGZvciBhbGwgdGhlIGZpbGVzLiBUaHVzIGEgKHJlKWRpc3RyaWJ1dG9yIG9mIGEgY29tcGxldGUsIHVuY2hhbmdlZCBjb3B5IG9mIFRoZSBQcm9ncmFtIG5lZWQgbWVldCBvbmx5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgZmlsZTsgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGVjayB0aGUgaGVhZGVyIG9mIGV2ZXJ5IGZpbGUgaW4gdGhlIGRpc3RyaWJ1dGlvbiB0byBjaGVjayB0aGF0IGEgZGlzdHJpYnV0aW9uIG1lZXRzIHRoZXNlIHJlcXVpcmVtZW50cy4iXSwibGljZW5zZUlkcyI6WyJMUFBMLTEuMCJdLCJrZXl3b3JkcyI6WyIxIDAgMTk5OSIsIjAgMTk5OSAwMyIsIjE5OTkgMDMgMDEiLCIwMyAwMSBjb3B5cmlnaHQiLCJidXQgbW9kaWZpY2F0aW9uIGlzIiwiZGlzdHJpYnV0ZWQgYXMgZGVzY3JpYmVkIiwiZGVzY3JpYmVkIGJlbG93IHlvdSIsInRoaXMgbGljZW5jZSBmb3IiLCJ0aGF0IHlvdSB3aXNoIiwidG8gZGlzdHJpYnV0ZSBpdCIsImRpc3RyaWJ1dGUgaXQgbWF5Iiwic29mdHdhcmUgaXMgdGV4IiwibGF0ZXggcGFja2FnZSBmaWxlIiwicGFja2FnZSBmaWxlIGJ1dCIsImZpbGUgYnV0IGl0IiwiYW55IHNvZnR3YXJlIGV2ZW4iLCJpdCBpcyB1bnJlbGF0ZWQiLCJ0byB0ZXggdG8iLCJ0ZXggdG8gdXNlIiwibGljZW5zZSB0aGUgZmlsZXMiLCJ5b3VyIGRpc3RyaWJ1dGlvbiBzaG91bGQiLCJkaXN0cmlidXRpb24gc2hvdWxkIGhhdmUiLCJzaG91bGQgaGF2ZSBhbiIsImhhdmUgYW4gZXhwbGljaXQiLCJjb3B5cmlnaHQgbm90aWNlIGdpdmluZyIsIm5vdGljZSBnaXZpbmcgeW91ciIsImdpdmluZyB5b3VyIG5hbWUiLCJ0aGUgeWVhciB0b2dldGhlciIsInllYXIgdG9nZXRoZXIgd2l0aCIsIndpdGggYSByZWZlcmVuY2UiLCJsaWNlbnNlIGEgdHlwaWNhbCIsImEgdHlwaWNhbCBleGFtcGxlIiwidHlwaWNhbCBleGFtcGxlIHdvdWxkIiwiZXhhbXBsZSB3b3VsZCBiZSIsIndvdWxkIGJlIHBpZyIsImJlIHBpZyBzdHkiLCJwaWcgc3R5IGNvcHlyaWdodCIsInN0eSBjb3B5cmlnaHQgMjAwMSIsInRoaXMgcHJvZ3JhbSBjYW4iLCJwcm9ncmFtIGNhbiByZWRpc3RyaWJ1dGVkIiwiY2FuIHJlZGlzdHJpYnV0ZWQgYW5kIiwicHVibGljIGxpY2Vuc2UgZGlzdHJpYnV0ZWQiLCJsaWNlbnNlIGRpc3RyaWJ1dGVkIGZyb20iLCJkaXN0cmlidXRlZCBmcm9tIGN0YW4iLCJmcm9tIGN0YW4gYXJjaGl2ZXMiLCJjdGFuIGFyY2hpdmVzIGluIiwiYXJjaGl2ZXMgaW4gZGlyZWN0b3J5IiwiaW4gZGlyZWN0b3J5IG1hY3JvcyIsImRpcmVjdG9yeSBtYWNyb3MgbGF0ZXgiLCJtYWNyb3MgbGF0ZXggYmFzZSIsImxhdGV4IGJhc2UgbHBwbCIsImJhc2UgbHBwbCB0eHQiLCJscHBsIHR4dCBlaXRoZXIiLCJ0eHQgZWl0aGVyIHZlcnNpb24iLCJ2ZXJzaW9uIDEgb2YiLCJsYXRlciB2ZXJzaW9uIGdpdmVuIiwidmVyc2lvbiBnaXZlbiBzdWNoIiwidGhpcyBkb2N1bWVudCB3b3VsZCIsInRoZSBzb2Z0d2FyZSBwaWciLCJzb2Z0d2FyZSBwaWcgc3R5IiwicGlnIHN0eSBhbmQiLCJzdHkgYW5kIHRoZSIsInkgbmFtZSB0byIsIm5hbWUgdG8gc2VlIiwidG8gc2VlIGEiLCJzZWUgYSByZWFsIiwiYSByZWFsIGV4YW1wbGUiLCJyZWFsIGV4YW1wbGUgc2VlIiwiZXhhbXBsZSBzZWUgdGhlIiwiZmlsZSBsZWdhbCB0eHQiLCJsZWdhbCB0eHQgd2hpY2giLCJ0eHQgd2hpY2ggY2FycmllcyIsIndoaWNoIGNhcnJpZXMgdGhlIiwiY2FycmllcyB0aGUgY29weXJpZ2h0IiwiZm9yIHRoZSBiYXNlIiwibGF0ZXggZGlzdHJpYnV0aW9uIHRoaXMiLCJkaXN0cmlidXRpb24gdGhpcyBsaWNlbnNlIiwibGljZW5zZSBnaXZlcyB0ZXJtcyIsImdpdmVzIHRlcm1zIHVuZGVyIiwidW5kZXIgd2hpY2ggZmlsZXMiLCJ3aGljaCBmaWxlcyBvZiIsImFuZCBtb2RpZmllZCBpbmRpdmlkdWFsIiwibW9kaWZpZWQgaW5kaXZpZHVhbCBmaWxlcyIsImZpbGVzIG1heSBoYXZlIiwibWF5IGhhdmUgc3BlY2lmaWMiLCJoYXZlIHNwZWNpZmljIGZ1cnRoZXIiLCJzcGVjaWZpYyBmdXJ0aGVyIGNvbnN0cmFpbnRzIiwiZnVydGhlciBjb25zdHJhaW50cyBvbiIsImNvbnN0cmFpbnRzIG9uIG1vZGlmaWNhdGlvbiIsIm9uIG1vZGlmaWNhdGlvbiBidXQiLCJtb2RpZmljYXRpb24gYnV0IG5vIiwibm8gZmlsZSBzaG91bGQiLCJzaG91bGQgaGF2ZSByZXN0cmljdGlvbnMiLCJoYXZlIHJlc3RyaWN0aW9ucyBvbiIsInJlc3RyaWN0aW9ucyBvbiBkaXN0cmlidXRpb24iLCJvbiBkaXN0cmlidXRpb24gb3RoZXIiLCJkaXN0cmlidXRpb24gb3RoZXIgdGhhbiIsInRoYW4gdGhvc2Ugc3BlY2lmaWVkIiwidGhvc2Ugc3BlY2lmaWVkIGJlbG93Iiwic3BlY2lmaWVkIGJlbG93IHRoaXMiLCJiZWxvdyB0aGlzIGlzIiwiZW5zdXJlIHRoYXQgYSIsInRoYXQgYSBkaXN0cmlidXRvciIsInByb2dyYW0gbmVlZCBvbmx5IiwibmVlZCBvbmx5IGNoZWNrIiwib25seSBjaGVjayB0aGUiLCJmaWxlIGFuZCBkb2VzIiwiZG9lcyBub3QgbmVlZCIsIm5lZWQgdG8gY2hlY2siLCJ0byBjaGVjayBldmVyeSIsImNoZWNrIGV2ZXJ5IGZpbGUiLCJwcm9ncmFtIGZvciBleHRyYSIsImZvciBleHRyYSByZXN0cmljdGlvbnMiLCJleHRyYSByZXN0cmljdGlvbnMgaWYiLCJyZXN0cmljdGlvbnMgaWYgeW91IiwieW91IGRvIG5lZWQiLCJkbyBuZWVkIHRvIiwibmVlZCB0byBtb2RpZnkiLCJtb2RpZnkgdGhlIGRpc3RyaWJ1dGlvbiIsInRoZSBkaXN0cmlidXRpb24gdGVybXMiLCJ0ZXJtcyBvZiBzb21lIiwib2Ygc29tZSBmaWxlcyIsInNvbWUgZmlsZXMgZG8iLCJ0aGlzIGxpY2Vuc2UgaW5zdGVhZCIsImxpY2Vuc2UgaW5zdGVhZCBkaXN0cmlidXRlIiwiaW5zdGVhZCBkaXN0cmlidXRlIHRoZSIsInVzZSB0aGUgcGFydHMiLCJ0ZXh0IG9mIGxwcGwiLCJvZiBscHBsIGFzIiwibHBwbCBhcyBhIiwic2hvdWxkIG5vdCBkaXJlY3RseSIsIm5vdCBkaXJlY3RseSByZWZlciIsImRpcmVjdGx5IHJlZmVyIHRvIiwiaW1wcmVzc2lvbiB0aGF0IHRoZSIsImxwcGwgdGhlIGxhdGV4IiwiYW5kIG1vZGlmaWNhdGlvbiB3YXJyYW50eSIsIm1vZGlmaWNhdGlvbiB3YXJyYW50eSB0aGVyZSIsIm9mIHRoZSBpbmRpdmlkdWFsIiwidGhlIGluZGl2aWR1YWwgYXV0aG9ycyIsImluZGl2aWR1YWwgYXV0aG9ycyBuYW1lZCIsImF1dGhvcnMgbmFtZWQgaW4iLCJwcm9ncmFtIGJlIGxpYWJsZSIsIm9yIGJ5IHRoaXJkIiwib2YgYSBmYWlsdXJlIiwic3VjaCBkYW1hZ2VzIGRpc3RyaWJ1dGlvbiIsImRhbWFnZXMgZGlzdHJpYnV0aW9uIHJlZGlzdHJpYnV0aW9uIiwiZGlzdHJpYnV0aW9uIHJlZGlzdHJpYnV0aW9uIG9mIiwicmVkaXN0cmlidXRpb24gb2YgdW5jaGFuZ2VkIiwib2YgdW5jaGFuZ2VkIGZpbGVzIiwidW5jaGFuZ2VkIGZpbGVzIGlzIiwiZmlsZXMgaXMgYWxsb3dlZCIsImlzIGFsbG93ZWQgcHJvdmlkZWQiLCJhbGxvd2VkIHByb3ZpZGVkIHRoYXQiLCJ0aGF0IGFsbCBmaWxlcyIsImZpbGVzIHRoYXQgbWFrZSIsIm1ha2UgdXAgdGhlIiwidXAgdGhlIGRpc3RyaWJ1dGlvbiIsInByb2dyYW0gYXJlIGRpc3RyaWJ1dGVkIiwiYXJlIGRpc3RyaWJ1dGVkIGluIiwicGFydGljdWxhciB0aGlzIG1lYW5zIiwicHJvZ3JhbSBoYXMgdG8iLCJoYXMgdG8gYmUiLCJiZSBkaXN0cmlidXRlZCBpbmNsdWRpbmciLCJkaXN0cmlidXRlZCBpbmNsdWRpbmcgaXRzIiwiaW5jbHVkaW5nIGl0cyBkb2N1bWVudGF0aW9uIiwiaXRzIGRvY3VtZW50YXRpb24gaWYiLCJpZiBkb2N1bWVudGF0aW9uIHdhcyIsImRvY3VtZW50YXRpb24gd2FzIHBhcnQiLCJ3YXMgcGFydCBvZiIsIm9yaWdpbmFsIGRpc3RyaWJ1dGlvbiB0aGUiLCJkaXN0cmlidXRpb24gdGhlIGRpc3RyaWJ1dGlvbiIsInByb21pbmVudCBmaWxlIGxpc3RpbmciLCJmaWxlIGxpc3RpbmcgYWxsIiwidGhlIGZpbGVzIGNvdmVyZWQiLCJmaWxlcyBjb3ZlcmVkIGJ5IiwiaWYgeW91IHJlY2VpdmUiLCJ5b3UgcmVjZWl2ZSBvbmx5IiwicmVjZWl2ZSBvbmx5IHNvbWUiLCJvbmx5IHNvbWUgb2YiLCJ0aGVzZSBmaWxlcyBmcm9tIiwiZmlsZXMgZnJvbSBzb21lb25lIiwiZnJvbSBzb21lb25lIGNvbXBsYWluIiwic29tZW9uZSBjb21wbGFpbiB0aGUiLCJjb21wbGFpbiB0aGUgZGlzdHJpYnV0aW9uIiwiZGlzdHJpYnV0aW9uIG9mIGNoYW5nZWQiLCJvZiBjaGFuZ2VkIHZlcnNpb25zIiwiY2hhbmdlZCB2ZXJzaW9ucyBvZiIsInZlcnNpb25zIG9mIGNlcnRhaW4iLCJvZiBjZXJ0YWluIGZpbGVzIiwiY2VydGFpbiBmaWxlcyBpbmNsdWRlZCIsInRoZSB0aGUgcHJvZ3JhbSIsImFuZCB0aGUgcmV1c2UiLCJ0aGUgcmV1c2Ugb2YiLCJyZXVzZSBvZiBjb2RlIiwib2YgY29kZSBmcm9tIiwicHJvZ3JhbSBhcmUgYWxsb3dlZCIsImFyZSBhbGxvd2VkIHVuZGVyIiwiZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBpdCIsInJlc3RyaWN0aW9ucyBpdCBpcyIsImFsbG93ZWQgb25seSBpZiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZVxuXG49LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LVxuXG5MUFBMIFZlcnNpb24gMS4xIDE5OTktMDctMTAgQ29weXJpZ2h0IDE5OTkgTGFUZVgzIFByb2plY3RcblxuRXZlcnlvbmUgaXMgYWxsb3dlZCB0byBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBtb2RpZmljYXRpb24gb2YgaXQgaXMgbm90IGFsbG93ZWQuXG5cblBSRUFNQkxFXG5cbj09PT09PT09XG5cblRoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlIChMUFBMKSBpcyB0aGUgbGljZW5zZSB1bmRlciB3aGljaCB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gaXMgZGlzdHJpYnV0ZWQuXG5cbllvdSBtYXkgdXNlIHRoaXMgbGljZW5zZSBmb3IgYW55IHByb2dyYW0gdGhhdCB5b3UgaGF2ZSB3cml0dGVuIGFuZCB3aXNoIHRvIGRpc3RyaWJ1dGUuIFRoaXMgbGljZW5zZSBtYXkgYmUgcGFydGljdWxhcmx5IHN1aXRhYmxlIGlmIHlvdXIgcHJvZ3JhbSBpcyBUZVgtcmVsYXRlZCAoc3VjaCBhcyBhIExhVGVYIHBhY2thZ2UpLCBidXQgeW91IG1heSB1c2UgaXQgZXZlbiBpZiB5b3VyIHByb2dyYW0gaXMgdW5yZWxhdGVkIHRvIFRlWC4gVGhlIHNlY3Rpb24gYFdIRVRIRVIgQU5EIEhPVyBUTyBESVNUUklCVVRFIFBST0dSQU1TIFVOREVSIFRISVMgTElDRU5TRScsIGJlbG93LCBnaXZlcyBpbnN0cnVjdGlvbnMsIGV4YW1wbGVzLCBhbmQgcmVjb21tZW5kYXRpb25zIGZvciBhdXRob3JzIHdobyBhcmUgY29uc2lkZXJpbmcgZGlzdHJpYnV0aW5nIHRoZWlyIHByb2dyYW1zIHVuZGVyIHRoaXMgbGljZW5zZS5cblxuSW4gdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBgVGhlIFByb2dyYW0nIHJlZmVycyB0byBhbnkgcHJvZ3JhbSBkaXN0cmlidXRlZCB1bmRlciB0aGlzIGxpY2Vuc2UuXG5cblRoaXMgbGljZW5zZSBnaXZlcyBjb25kaXRpb25zIHVuZGVyIHdoaWNoIFRoZSBQcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZCBhbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBUaGUgUHJvZ3JhbSBtYXkgYmUgZGlzdHJpYnV0ZWQuIEluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gbWF5IGJlYXIgc3VwcGxlbWVudGFyeSBhbmQvb3Igc3VwZXJzZWRpbmcgY29uZGl0aW9ucyBvbiBtb2RpZmljYXRpb24gb2YgdGhlbXNlbHZlcyBhbmQgb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGVtc2VsdmVzLCBidXQgKm5vKiBmaWxlIG9mIFRoZSBQcm9ncmFtIG1heSBiZWFyIHN1cHBsZW1lbnRhcnkgb3Igc3VwZXJzZWRpbmcgY29uZGl0aW9ucyBvbiB0aGUgZGlzdHJpYnV0aW9uIG9mIGFuIHVubW9kaWZpZWQgY29weSBvZiB0aGUgZmlsZS4gQSBkaXN0cmlidXRvciB3aXNoaW5nIHRvIGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtIHRoZXJlZm9yZSBuZWVkcyB0byBjaGVjayB0aGUgY29uZGl0aW9ucyBvbmx5IGluIHRoaXMgbGljZW5zZSBhbmQgbm93aGVyZSBlbHNlLlxuXG5BY3Rpdml0aWVzIG90aGVyIHRoYW4gZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgVGhlIFByb2dyYW0gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgbGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIEluIHBhcnRpY3VsYXIsIHRoZSBhY3Qgb2YgcnVubmluZyBUaGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZC5cblxuV2UsIHRoZSBMYVRlWDMgUHJvamVjdCwgYmVsaWV2ZSB0aGF0IHRoZSBjb25kaXRpb25zIGJlbG93IGdpdmUgeW91IHRoZSBmcmVlZG9tIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgVGhlIFByb2dyYW0gdGhhdCBjb25mb3JtIHdpdGggd2hhdGV2ZXIgdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zIHlvdSB3aXNoIHdoaWxlIG1haW50YWluaW5nIHRoZSBhdmFpbGFiaWxpdHksIGludGVncml0eSwgYW5kIHJlbGlhYmlsaXR5IG9mIFRoZSBQcm9ncmFtLiBJZiB5b3UgZG8gbm90IHNlZSBob3cgdG8gYWNoaWV2ZSB5b3VyIGdvYWwgd2hpbGUgbWVldGluZyB0aGVzZSBjb25kaXRpb25zLCB0aGVuIHJlYWQgdGhlIGRvY3VtZW50IGBjZmdndWlkZS50ZXgnIGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBmb3Igc3VnZ2VzdGlvbnMuXG5cbkNPTkRJVElPTlMgT04gRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT05cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5Zb3UgbWF5IGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtLiBEaXN0cmlidXRpb24gb2Ygb25seSBwYXJ0IG9mIFRoZSBQcm9ncmFtIGlzIG5vdCBhbGxvd2VkLlxuXG5Zb3UgbWF5IG5vdCBtb2RpZnkgaW4gYW55IHdheSBhIGZpbGUgb2YgVGhlIFByb2dyYW0gdGhhdCBiZWFycyBhIGxlZ2FsIG5vdGljZSBmb3JiaWRkaW5nIG1vZGlmaWNhdGlvbiBvZiB0aGF0IGZpbGUuXG5cbllvdSBtYXkgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIGZpbGUgb2YgVGhlIFByb2dyYW0gaWYsIGFuZCBvbmx5IGlmLCB0aGUgZm9sbG93aW5nIGVpZ2h0IGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgMS4gWW91IG11c3QgbWVldCBhbnkgYWRkaXRpb25hbCBjb25kaXRpb25zIGJvcm5lIGJ5IHRoZSBmaWxlIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGFzIGRlc2NyaWJlZCBiZWxvdyBpbiB0aGUgc3Vic2VjdGlvbiBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIEluZGl2aWR1YWwgRmlsZXMgb2YgVGhlIFByb2dyYW0nLlxuXG4gICAyLiBJZiB0aGUgZmlsZSBpcyBhIExhVGVYIHNvZnR3YXJlIGZpbGUsIHRoZW4geW91IG11c3QgbWVldCBhbnkgYXBwbGljYWJsZSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUgdGhhdCBhcmUgZGVzY3JpYmVkIGJlbG93IGluIHRoZSBzdWJzZWN0aW9uIGBBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gTGFUZVggU29mdHdhcmUgRmlsZXMnLlxuXG4gICAzLiBZb3UgbXVzdCBub3QgZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgZmlsZSB3aXRoIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZS5cblxuICAgNC4gSW4gdGhlIG1vZGlmaWVkIGZpbGUsIHlvdSBtdXN0IGFja25vd2xlZGdlIHRoZSBhdXRob3JzaGlwIGFuZCBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdGhlIG5hbWUgKGlmIGFueSkgb2YgdGhlIHByb2dyYW0gd2hpY2ggY29udGFpbnMgaXQuXG5cbiAgIDUuIFlvdSBtdXN0IGNoYW5nZSBhbnkgaWRlbnRpZmljYXRpb24gc3RyaW5nIGluIHRoZSBmaWxlIHRvIGluZGljYXRlIGNsZWFybHkgdGhhdCB0aGUgbW9kaWZpZWQgZmlsZSBpcyBub3QgcGFydCBvZiBUaGUgUHJvZ3JhbS5cblxuICAgNi4gWW91IG11c3QgY2hhbmdlIGFueSBhZGRyZXNzZXMgaW4gdGhlIG1vZGlmaWVkIGZpbGUgZm9yIHRoZSByZXBvcnRpbmcgb2YgZXJyb3JzIGluIHRoZSBmaWxlIG9yIGluIFRoZSBQcm9ncmFtIGdlbmVyYWxseSB0byBlbnN1cmUgdGhhdCByZXBvcnRzIGZvciBmaWxlcyBubyBsb25nZXIgbWFpbnRhaW5lZCBieSB0aGUgb3JpZ2luYWwgbWFpbnRhaW5lcnMgd2lsbCBiZSBkaXJlY3RlZCB0byB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlIG1vZGlmaWVkIGZpbGVzLlxuXG4gICA3LiBZb3UgbXVzdCBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCBmaWxlIHVuZGVyIGEgbGljZW5zZSB0aGF0IGZvcmJpZHMgZGlzdHJpYnV0aW9uIGJvdGggb2YgdGhlIG1vZGlmaWVkIGZpbGUgYW5kIG9mIGFueSBmaWxlcyBkZXJpdmVkIGZyb20gdGhlIG1vZGlmaWVkIGZpbGUgd2l0aCB0aGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUuXG5cbiAgIDguIFlvdSBtdXN0IGRvIGVpdGhlciAoQSkgb3IgKEIpOlxuXG4gICAgICAoQSkgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgVGhlIFByb2dyYW0gKHRoYXQgaXMsIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbSkgdG9nZXRoZXIgd2l0aCB0aGUgbW9kaWZpZWQgZmlsZTsgaWYgeW91ciBkaXN0cmlidXRpb24gb2YgdGhlIG1vZGlmaWVkIGZpbGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSB0aGUgbW9kaWZpZWQgZmlsZSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IFRoZSBQcm9ncmFtIGZyb20gdGhlIHNhbWUgcGxhY2UgbWVldHMgdGhpcyBjb25kaXRpb24sIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSBUaGUgUHJvZ3JhbSBhbG9uZyB3aXRoIHRoZSBtb2RpZmllZCBmaWxlO1xuXG4gICAgICAoQikgcHJvdmlkZSB0byB0aG9zZSB3aG8gcmVjZWl2ZSB0aGUgbW9kaWZpZWQgZmlsZSBpbmZvcm1hdGlvbiB0aGF0IGlzIHN1ZmZpY2llbnQgZm9yIHRoZW0gdG8gb2J0YWluIGEgY29weSBvZiBUaGUgUHJvZ3JhbTsgZm9yIGV4YW1wbGUsIHlvdSBtYXkgcHJvdmlkZSBhIFVuaWZvcm0gUmVzb3VyY2UgTG9jYXRvciAoVVJMKSBmb3IgYSBzaXRlIHRoYXQgeW91IGV4cGVjdCB3aWxsIHByb3ZpZGUgdGhlbSB3aXRoIGEgY29weSBvZiBUaGUgUHJvZ3JhbSBmcmVlIG9mIGNoYXJnZSAoZWl0aGVyIHRoZSB2ZXJzaW9uIGZyb20gd2hpY2ggeW91ciBtb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgb3IgcGVyaGFwcyBhIGxhdGVyIHZlcnNpb24pLlxuXG5Ob3RlIHRoYXQgaW4gdGhlIGFib3ZlLCBgZGlzdHJpYnV0aW9uJyBvZiBhIGZpbGUgbWVhbnMgbWFraW5nIHRoZSBmaWxlIGF2YWlsYWJsZSB0byBvdGhlcnMgYnkgYW55IG1lYW5zLiBUaGlzIGluY2x1ZGVzLCBmb3IgaW5zdGFuY2UsIGluc3RhbGxpbmcgdGhlIGZpbGUgb24gYW55IG1hY2hpbmUgaW4gc3VjaCBhIHdheSB0aGF0IHRoZSBmaWxlIGlzIGFjY2Vzc2libGUgYnkgdXNlcnMgb3RoZXIgdGhhbiB5b3Vyc2VsZi4gYE1vZGlmaWNhdGlvbicgb2YgYSBmaWxlIG1lYW5zIGFueSBwcm9jZWR1cmUgdGhhdCBwcm9kdWNlcyBhIGRlcml2YXRpdmUgZmlsZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgLS0gdGhhdCBpcywgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgb3IgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS5cblxuQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSBmaWxlIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBtb2RpZmljYXRpb24gb2YgdGhlIGZpbGUuXG5cblRoZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UgZG8gbm90IGhhdmUgdG8gYmUgYXBwbGllZCB0byBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGFib3ZlIGNvbmRpdGlvbnMuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgQ29uZGl0aW9uIDcuIGRvZXMgYXBwbHkgdG8gYW55IHN1Y2ggbW9kaWZpZWQgZmlsZS5cblxuVGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG5vdCBpbnRlbmRlZCB0byBwcm9oaWJpdCwgYW5kIGhlbmNlIGRvIG5vdCBhcHBseSB0bywgdGhlIHVwZGF0aW5nLCBieSBhbnkgbWV0aG9kLCBvZiBhIGZpbGUgc28gdGhhdCBpdCBiZWNvbWVzIGlkZW50aWNhbCB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhhdCBmaWxlIG9mIFRoZSBQcm9ncmFtLlxuXG5BIFJlY29tbWVuZGF0aW9uIG9uIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvblxuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JdCBpcyB3aXNlIG5ldmVyIHRvIG1vZGlmeSBhIGZpbGUgb2YgVGhlIFByb2dyYW0sIGV2ZW4gZm9yIHlvdXIgb3duIHBlcnNvbmFsIHVzZSwgd2l0aG91dCBhbHNvIG1lZXRpbmcgdGhlIGFib3ZlIGVpZ2h0IGNvbmRpdGlvbnMgZm9yIGRpc3RyaWJ1dGluZyB0aGUgbW9kaWZpZWQgZmlsZS4gV2hpbGUgeW91IG1pZ2h0IGludGVuZCB0aGF0IHN1Y2ggbW9kaWZpZWQgZmlsZXMgd2lsbCBuZXZlciBiZSBkaXN0cmlidXRlZCwgb2Z0ZW4gdGhpcyB3aWxsIGhhcHBlbiBieSBhY2NpZGVudCAtLSB5b3UgbWF5IGZvcmdldCB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIHRoZSBmaWxlOyBvciBpdCBtYXkgbm90IG9jY3VyIHRvIHlvdSB3aGVuIGFsbG93aW5nIG90aGVycyB0byBhY2Nlc3MgdGhlIG1vZGlmaWVkIGZpbGUgdGhhdCB5b3UgYXJlIHRodXMgZGlzdHJpYnV0aW5nIGl0IGFuZCB2aW9sYXRpbmcgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLiBJdCBpcyB1c3VhbGx5IGluIHlvdXIgYmVzdCBpbnRlcmVzdCB0byBrZWVwIHlvdXIgY29weSBvZiBUaGUgUHJvZ3JhbSBpZGVudGljYWwgd2l0aCB0aGUgcHVibGljIG9uZS4gTWFueSBwcm9ncmFtcyBwcm92aWRlIHdheXMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgdGhhdCBwcm9ncmFtIHdpdGhvdXQgYWx0ZXJpbmcgaXRzIGxpY2Vuc2VkIGZpbGVzLlxuXG5BZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gSW5kaXZpZHVhbCBGaWxlcyBvZiBUaGUgUHJvZ3JhbVxuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5BbiBpbmRpdmlkdWFsIGZpbGUgb2YgVGhlIFByb2dyYW0gbWF5IGJlYXIgYWRkaXRpb25hbCBjb25kaXRpb25zIHRoYXQgc3VwcGxlbWVudCBhbmQvb3Igc3VwZXJzZWRlIHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZSBpZiwgYW5kIG9ubHkgaWYsIHN1Y2ggYWRkaXRpb25hbCBjb25kaXRpb25zIGV4Y2x1c2l2ZWx5IGNvbmNlcm4gbW9kaWZpY2F0aW9uIG9mIHRoZSBmaWxlIG9yIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUuIFRoZSBjb25kaXRpb25zIG9uIGluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gdGhlcmVmb3JlIG1heSBkaWZmZXIgb25seSB3aXRoIHJlc3BlY3QgdG8gdGhlIGtpbmQgYW5kIGV4dGVudCBvZiBtb2RpZmljYXRpb24gb2YgdGhvc2UgZmlsZXMgdGhhdCBpcyBhbGxvd2VkLCBhbmQgd2l0aCByZXNwZWN0IHRvIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhvc2UgZmlsZXMuXG5cbkFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWCBTb2Z0d2FyZSBGaWxlc1xuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuSWYgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBMYVRlWCAodGhhdCBpcywgaWYgaXQgaXMgYSBMYVRlWCBzb2Z0d2FyZSBmaWxlKSwgdGhlbiB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgY29uZGl0aW9ucywgd2hpY2ggc3VwcGxlbWVudCBhbmQvb3Igc3VwZXJzZWRlIHRoZSBjb25kaXRpb25zIGFib3ZlLCBhcHBseSB0byB0aGUgZmlsZSBhY2NvcmRpbmcgdG8gaXRzIGZpbGVuYW1lIGV4dGVuc2lvbjpcblxuICAgLSBZb3UgbWF5IG5vdCBtb2RpZnkgYW55IGZpbGUgd2l0aCBmaWxlbmFtZSBleHRlbnNpb24gYC5pbnMnIHNpbmNlIHRoZXNlIGFyZSBpbnN0YWxsYXRpb24gZmlsZXMgY29udGFpbmluZyB0aGUgbGVnYWwgbm90aWNlcyB0aGF0IGFyZSBwbGFjZWQgaW4gdGhlIGZpbGVzIHRoZXkgZ2VuZXJhdGUuXG5cbiAgIC0gWW91IG1heSBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGZpbGVzIHdpdGggZmlsZW5hbWUgZXh0ZW5zaW9uIGAuZmQnIChMYVRlWCBmb250IGRlZmluaXRpb24gZmlsZXMpIHVuZGVyIHRoZSBzdGFuZGFyZCBjb25kaXRpb25zIG9mIHRoZSBMUFBMIGFzIGRlc2NyaWJlZCBhYm92ZS4gWW91IG1heSBhbHNvIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmllZCBMYVRlWCBmb250IGRlZmluaXRpb24gZmlsZXMgd2l0aCB0aGVpciBvcmlnaW5hbCBuYW1lcyBwcm92aWRlZCB0aGF0OlxuXG4gICAgICAoMSkgdGhlIG9ubHkgY2hhbmdlcyB0byB0aGUgb3JpZ2luYWwgZmlsZXMgZWl0aGVyIGVuYWJsZSB1c2Ugb2YgYXZhaWxhYmxlIGZvbnRzIG9yIHByZXZlbnQgYXR0ZW1wdHMgdG8gYWNjZXNzIHVuYXZhaWxhYmxlIGZvbnRzO1xuXG4gICAgICAoMikgeW91IGFsc28gZGlzdHJpYnV0ZSB0aGUgb3JpZ2luYWwsIHVubW9kaWZpZWQgZmlsZXMgKFRlWCBpbnB1dCBwYXRocyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHdoaWNoIHNldCBvZiBMYVRlWCBmb250IGRlZmluaXRpb24gZmlsZXMgaXMgYWN0dWFsbHkgdXNlZCBieSBUZVgpLlxuXG4gICAtIFlvdSBtYXkgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBmaWxlcyB3aXRoIGZpbGVuYW1lIGV4dGVuc2lvbiBgLmNmZycgKGNvbmZpZ3VyYXRpb24gZmlsZXMpIHdpdGggdGhlaXIgb3JpZ2luYWwgbmFtZXMuIFRoZSBQcm9ncmFtIG1heSAoYW5kIHVzdWFsbHkgd2lsbCkgc3BlY2lmeSB0aGUgcmFuZ2Ugb2YgY29tbWFuZHMgdGhhdCBhcmUgYWxsb3dlZCBpbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmaWxlLlxuXG5CZWNhdXNlIG9mIHBvcnRhYmlsaXR5IGFuZCBleGNoYW5nZWFiaWxpdHkgaXNzdWVzIGluIExhVGVYIHNvZnR3YXJlLCBUaGUgTGFUZVgzIFByb2plY3QgZGVwcmVjYXRlcyB0aGUgZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mIGNvbXBvbmVudHMgb2YgTGFUZVggb3Igb2YgZ2VuZXJhbGx5IGF2YWlsYWJsZSBjb250cmlidXRlZCBjb2RlIGZvciB0aGVtLCBidXQgc3VjaCBkaXN0cmlidXRpb24gY2FuIG1lZXQgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLlxuXG5OTyBXQVJSQU5UWVxuXG49PT09PT09PT09PVxuXG5UaGVyZSBpcyBubyB3YXJyYW50eSBmb3IgVGhlIFByb2dyYW0uIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4gd3JpdGluZywgVGhlIENvcHlyaWdodCBIb2xkZXIgcHJvdmlkZXMgVGhlIFByb2dyYW0gYGFzIGlzJywgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIFRoZSBQcm9ncmFtIGlzIHdpdGggeW91LiBTaG91bGQgVGhlIFByb2dyYW0gcHJvdmUgZGVmZWN0aXZlLCB5b3UgYXNzdW1lIHRoZSBjb3N0IG9mIGFsbCBuZWNlc3Nhcnkgc2VydmljaW5nLCByZXBhaXIsIG9yIGNvcnJlY3Rpb24uXG5cbkluIG5vIGV2ZW50IHVubGVzcyBhZ3JlZWQgdG8gaW4gd3JpdGluZyB3aWxsIFRoZSBDb3B5cmlnaHQgSG9sZGVyLCBvciBhbnkgYXV0aG9yIG5hbWVkIGluIHRoZSBmaWxlcyBvZiBUaGUgUHJvZ3JhbSwgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IFRoZSBQcm9ncmFtIGFzIHBlcm1pdHRlZCBiZWxvdywgYmUgbGlhYmxlIHRvIHlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiBhbnkgdXNlIG9mIFRoZSBQcm9ncmFtIG9yIG91dCBvZiBpbmFiaWxpdHkgdG8gdXNlIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgbG9zcyBvZiBkYXRhLCBkYXRhIGJlaW5nIHJlbmRlcmVkIGluYWNjdXJhdGUsIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkgYW55b25lIGFzIGEgcmVzdWx0IG9mIGFueSBmYWlsdXJlIG9mIFRoZSBQcm9ncmFtIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIgcHJvZ3JhbXMpLCBldmVuIGlmIFRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIgcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLlxuXG5XSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBQUk9HUkFNUyBVTkRFUiBUSElTIExJQ0VOU0VcblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoaXMgc2VjdGlvbiBjb250YWlucyBpbXBvcnRhbnQgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kIHJlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGluZyB0aGVpciBwcm9ncmFtcyB1bmRlciB0aGlzIGxpY2Vuc2UuIFRoZXNlIGF1dGhvcnMgYXJlIGFkZHJlc3NlZCBhcyBgeW91JyBpbiB0aGlzIHNlY3Rpb24uXG5cbkNob29zaW5nIFRoaXMgTGljZW5zZSBvciBBbm90aGVyIExpY2Vuc2VcblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JZiBmb3IgYW55IHBhcnQgb2YgeW91ciBwcm9ncmFtIHlvdSB3YW50IG9yIG5lZWQgdG8gdXNlICpkaXN0cmlidXRpb24qIGNvbmRpdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aG9zZSBpbiB0aGlzIGxpY2Vuc2UsIHRoZW4gZG8gbm90IHJlZmVyIHRvIHRoaXMgbGljZW5zZSBhbnl3aGVyZSBpbiB5b3VyIHByb2dyYW0gYnV0IGluc3RlYWQgZGlzdHJpYnV0ZSB5b3VyIHByb2dyYW0gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gWW91IG1heSB1c2UgdGhlIHRleHQgb2YgdGhpcyBsaWNlbnNlIGFzIGEgbW9kZWwgZm9yIHlvdXIgb3duIGxpY2Vuc2UsIGJ1dCB5b3VyIGxpY2Vuc2Ugc2hvdWxkIG5vdCByZWZlciB0byB0aGUgTFBQTCBvciBvdGhlcndpc2UgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGF0IHlvdXIgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTC5cblxuVGhlIGRvY3VtZW50IGBtb2RndWlkZS50ZXgnIGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBleHBsYWlucyB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLiBJdCBleHBsYWlucywgZm9yIGV4YW1wbGUsIHdoeSBkaXN0cmlidXRpbmcgTGFUZVggdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHdhcyBjb25zaWRlcmVkIGluYXBwcm9wcmlhdGUuIEV2ZW4gaWYgeW91ciBwcm9ncmFtIGlzIHVucmVsYXRlZCB0byBMYVRlWCwgdGhlIGRpc2N1c3Npb24gaW4gYG1vZGd1aWRlLnRleCcgbWF5IHN0aWxsIGJlIHJlbGV2YW50LCBhbmQgYXV0aG9ycyBpbnRlbmRpbmcgdG8gZGlzdHJpYnV0ZSB0aGVpciBwcm9ncmFtcyB1bmRlciBhbnkgbGljZW5zZSBhcmUgZW5jb3VyYWdlZCB0byByZWFkIGl0LlxuXG5Ib3cgdG8gVXNlIFRoaXMgTGljZW5zZVxuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UbyB1c2UgdGhpcyBsaWNlbnNlLCBwbGFjZSBpbiBlYWNoIG9mIHRoZSBmaWxlcyBvZiB5b3VyIHByb2dyYW0gYm90aCBhbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIGFuZCBhbHNvIGEgc3RhdGVtZW50IHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBmaWxlIGlzIGNvbnN0cmFpbmVkIGJ5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS5cblxuSGVyZSBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudDpcblxuJSUgcGlnLmR0eFxuXG4lJSBDb3B5cmlnaHQgMjAwMSBNLiBZLiBOYW1lXG5cbiVcblxuJSBUaGlzIHByb2dyYW0gbWF5IGJlIGRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmllZCB1bmRlciB0aGVcblxuJSBjb25kaXRpb25zIG9mIHRoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlLCBlaXRoZXIgdmVyc2lvbiAxLjFcblxuJSBvZiB0aGlzIGxpY2Vuc2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuJSBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBsaWNlbnNlIGlzIGluXG5cbiUgaHR0cDovL3d3dy5sYXRleC1wcm9qZWN0Lm9yZy9scHBsLnR4dFxuXG4lIGFuZCB2ZXJzaW9uIDEuMSBvciBsYXRlciBpcyBwYXJ0IG9mIGFsbCBkaXN0cmlidXRpb25zIG9mIExhVGVYXG5cbiUgdmVyc2lvbiAxOTk5LzA2LzAxIG9yIGxhdGVyLlxuXG4lXG5cbiUgVGhpcyBwcm9ncmFtIGNvbnNpc3RzIG9mIHRoZSBmaWxlcyBwaWcuZHR4IGFuZCBwaWcuaW5zXG5cbkdpdmVuIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudCBpbiBhIGZpbGUsIHRoZSBjb25kaXRpb25zIGdpdmVuIGluIHRoaXMgbGljZW5zZSBkb2N1bWVudCB3b3VsZCBhcHBseSwgd2l0aCBgVGhlIFByb2dyYW0nIHJlZmVycmluZyB0byB0aGUgdHdvIGZpbGVzIGBwaWcuZHR4JyBhbmQgYHBpZy5pbnMnLCBhbmQgYFRoZSBDb3B5cmlnaHQgSG9sZGVyJyByZWZlcnJpbmcgdG8gdGhlIHBlcnNvbiBgTS4gWS4gTmFtZScuXG5cbkltcG9ydGFudCBSZWNvbW1lbmRhdGlvbnNcblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5EZWZpbmluZyBXaGF0IENvbnN0aXR1dGVzIFRoZSBQcm9ncmFtXG5cblRoZSBMUFBMIHJlcXVpcmVzIHRoYXQgZGlzdHJpYnV0aW9ucyBvZiBUaGUgUHJvZ3JhbSBjb250YWluIGFsbCB0aGUgZmlsZXMgb2YgVGhlIFByb2dyYW0uIEl0IGlzIHRoZXJlZm9yZSBpbXBvcnRhbnQgdGhhdCB5b3UgcHJvdmlkZSBhIHdheSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGljaCBmaWxlcyBjb25zdGl0dXRlIFRoZSBQcm9ncmFtLiBUaGlzIGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYWNoaWV2ZWQgYnkgZXhwbGljaXRseSBsaXN0aW5nIGFsbCB0aGUgZmlsZXMgb2YgVGhlIFByb2dyYW0gbmVhciB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBlYWNoIGZpbGUgb3IgYnkgdXNpbmcgYSBsaW5lIGxpa2VcblxuJSBUaGlzIHByb2dyYW0gY29uc2lzdHMgb2YgYWxsIGZpbGVzIGxpc3RlZCBpbiBtYW5pZmVzdC50eHQuXG5cbmluIHRoYXQgcGxhY2UuIEluIHRoZSBhYnNlbmNlIG9mIGFuIHVuZXF1aXZvY2FsIGxpc3QgaXQgbWlnaHQgYmUgaW1wb3NzaWJsZSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGF0IGlzIGNvbnNpZGVyZWQgYnkgeW91IHRvIGNvbXByaXNlIFRoZSBQcm9ncmFtLlxuXG5Ob3RpbmcgRXhjZXB0aW9uYWwgRmlsZXNcblxuSWYgVGhlIFByb2dyYW0gY29udGFpbnMgYW55IGZpbGVzIGJlYXJpbmcgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uIG1vZGlmaWNhdGlvbiwgb3Igb24gZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zLCBvZiB0aG9zZSBmaWxlcyAob3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQgaW4gYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWCBTb2Z0d2FyZSBGaWxlcycpLCB0aGVuIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgVGhlIFByb2dyYW0gY29udGFpbiBhIHByb21pbmVudCBmaWxlIHRoYXQgZGVmaW5lcyB0aGUgZXhjZXB0aW9uYWwgY29uZGl0aW9ucywgYW5kIGVpdGhlciBsaXN0cyB0aGUgZXhjZXB0aW9uYWwgZmlsZXMgb3IgZGVmaW5lcyBvbmUgb3IgbW9yZSBjYXRlZ29yaWVzIG9mIGV4Y2VwdGlvbmFsIGZpbGVzLlxuXG5GaWxlcyBjb250YWluaW5nIHRoZSB0ZXh0IG9mIGEgbGljZW5zZSAoc3VjaCBhcyB0aGlzIGZpbGUpIGFyZSBvZnRlbiBleGFtcGxlcyBvZiBmaWxlcyBiZWFyaW5nIG1vcmUgcmVzdHJpY3RpdmUgY29uZGl0aW9ucyBvbiBtb2RpZmljYXRpb24uIExhVGVYIGNvbmZpZ3VyYXRpb24gZmlsZXMgKHdpdGggZmlsZW5hbWUgZXh0ZW5zaW9uIGAuY2ZnJykgYXJlIGV4YW1wbGVzIG9mIGZpbGVzIGJlYXJpbmcgbGVzcyByZXN0cmljdGl2ZSBjb25kaXRpb25zIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlLiBUaGUgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uIExhVGVYIHNvZnR3YXJlIGdpdmVuIGFib3ZlIGFyZSBleGFtcGxlcyBvZiBkZWNsYXJpbmcgYSBjYXRlZ29yeSBvZiBmaWxlcyBiZWFyaW5nIGV4Y2VwdGlvbmFsIGFkZGl0aW9uYWwgY29uZGl0aW9ucy4iXSwibGljZW5zZUlkcyI6WyJMUFBMLTEuMSJdLCJrZXl3b3JkcyI6WyIxIDEgMTk5OSIsIjEgMTk5OSAwNyIsIjE5OTkgMDcgMTAiLCIwNyAxMCBjb3B5cmlnaHQiLCIxMCBjb3B5cmlnaHQgMTk5OSIsImZpbGUgaXMgY29uc2lkZXJlZCIsImFzIHBlcm1pdHRlZCBiZWxvdyIsInBlcm1pdHRlZCBiZWxvdyBiZSIsImJlbG93IGJlIGxpYWJsZSIsIjEgb3IgbGF0ZXIiLCJ2ZXJzaW9uIDE5OTkgMDYiLCIxOTk5IDA2IDAxIiwiMDYgMDEgb3IiLCJscHBsIHZlcnNpb24gMSAxIiwidmVyc2lvbiAxIDEgMTk5OSIsIjEgMSAxOTk5IDA3IiwiMSAxOTk5IDA3IDEwIiwiMTk5OSAwNyAxMCBjb3B5cmlnaHQiLCIwNyAxMCBjb3B5cmlnaHQgMTk5OSIsIjEwIGNvcHlyaWdodCAxOTk5IGxhdGV4MyIsIm9mIGEgZmlsZSBpcyIsImEgZmlsZSBpcyBjb25zaWRlcmVkIiwiZmlsZSBpcyBjb25zaWRlcmVkIHRvIiwicHJvZ3JhbSBhcyBwZXJtaXR0ZWQgYmVsb3ciLCJhcyBwZXJtaXR0ZWQgYmVsb3cgYmUiLCJwZXJtaXR0ZWQgYmVsb3cgYmUgbGlhYmxlIiwiYmVsb3cgYmUgbGlhYmxlIHRvIiwiZWl0aGVyIHZlcnNpb24gMSAxIiwiMSAxIG9mIHRoaXMiLCJhbmQgdmVyc2lvbiAxIDEiLCIxIDEgb3IgbGF0ZXIiLCIxIG9yIGxhdGVyIGlzIiwibGF0ZXggdmVyc2lvbiAxOTk5IDA2IiwidmVyc2lvbiAxOTk5IDA2IDAxIiwiMTk5OSAwNiAwMSBvciIsIjA2IDAxIG9yIGxhdGVyIiwibGljZW5zZSBscHBsIHZlcnNpb24gMSAxIiwibHBwbCB2ZXJzaW9uIDEgMSAxOTk5IiwidmVyc2lvbiAxIDEgMTk5OSAwNyIsIjEgMSAxOTk5IDA3IDEwIiwiMSAxOTk5IDA3IDEwIGNvcHlyaWdodCIsIjE5OTkgMDcgMTAgY29weXJpZ2h0IDE5OTkiLCIwNyAxMCBjb3B5cmlnaHQgMTk5OSBsYXRleDMiLCIxMCBjb3B5cmlnaHQgMTk5OSBsYXRleDMgcHJvamVjdCIsIm5hbWUgb2YgYSBmaWxlIGlzIiwib2YgYSBmaWxlIGlzIGNvbnNpZGVyZWQiLCJhIGZpbGUgaXMgY29uc2lkZXJlZCB0byIsImZpbGUgaXMgY29uc2lkZXJlZCB0byBiZSIsInRoZSBwcm9ncmFtIGFzIHBlcm1pdHRlZCBiZWxvdyIsInByb2dyYW0gYXMgcGVybWl0dGVkIGJlbG93IGJlIiwiYXMgcGVybWl0dGVkIGJlbG93IGJlIGxpYWJsZSIsInBlcm1pdHRlZCBiZWxvdyBiZSBsaWFibGUgdG8iLCJiZWxvdyBiZSBsaWFibGUgdG8geW91IiwibGljZW5zZSBlaXRoZXIgdmVyc2lvbiAxIDEiLCJlaXRoZXIgdmVyc2lvbiAxIDEgb2YiLCJ2ZXJzaW9uIDEgMSBvZiB0aGlzIiwiMSAxIG9mIHRoaXMgbGljZW5zZSIsIjEgb2YgdGhpcyBsaWNlbnNlIG9yIiwidHh0IGFuZCB2ZXJzaW9uIDEgMSIsImFuZCB2ZXJzaW9uIDEgMSBvciIsInZlcnNpb24gMSAxIG9yIGxhdGVyIiwiMSAxIG9yIGxhdGVyIGlzIiwiMSBvciBsYXRlciBpcyBwYXJ0Iiwib2YgbGF0ZXggdmVyc2lvbiAxOTk5IDA2IiwibGF0ZXggdmVyc2lvbiAxOTk5IDA2IDAxIiwidmVyc2lvbiAxOTk5IDA2IDAxIG9yIiwiMTk5OSAwNiAwMSBvciBsYXRlciIsIjA2IDAxIG9yIGxhdGVyIHRoaXMiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2VcblxuPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS1cblxuTFBQTCBWZXJzaW9uIDEuMiAxOTk5LTA5LTAzIENvcHlyaWdodCAxOTk5IExhVGVYMyBQcm9qZWN0XG5cbkV2ZXJ5b25lIGlzIGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgbW9kaWZpY2F0aW9uIG9mIGl0IGlzIG5vdCBhbGxvd2VkLlxuXG5QUkVBTUJMRVxuXG49PT09PT09PVxuXG5UaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSAoTFBQTCkgaXMgdGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGlzIGRpc3RyaWJ1dGVkLlxuXG5Zb3UgbWF5IHVzZSB0aGlzIGxpY2Vuc2UgZm9yIGFueSBwcm9ncmFtIHRoYXQgeW91IGhhdmUgd3JpdHRlbiBhbmQgd2lzaCB0byBkaXN0cmlidXRlLiBUaGlzIGxpY2Vuc2UgbWF5IGJlIHBhcnRpY3VsYXJseSBzdWl0YWJsZSBpZiB5b3VyIHByb2dyYW0gaXMgVGVYLXJlbGF0ZWQgKHN1Y2ggYXMgYSBMYVRlWCBwYWNrYWdlKSwgYnV0IHlvdSBtYXkgdXNlIGl0IGV2ZW4gaWYgeW91ciBwcm9ncmFtIGlzIHVucmVsYXRlZCB0byBUZVguIFRoZSBzZWN0aW9uIGBXSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBQUk9HUkFNUyBVTkRFUiBUSElTIExJQ0VOU0UnLCBiZWxvdywgZ2l2ZXMgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kIHJlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGluZyB0aGVpciBwcm9ncmFtcyB1bmRlciB0aGlzIGxpY2Vuc2UuXG5cbkluIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYFRoZSBQcm9ncmFtJyByZWZlcnMgdG8gYW55IHByb2dyYW0gZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBsaWNlbnNlLlxuXG5UaGlzIGxpY2Vuc2UgZ2l2ZXMgY29uZGl0aW9ucyB1bmRlciB3aGljaCBUaGUgUHJvZ3JhbSBtYXkgYmUgZGlzdHJpYnV0ZWQgYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbW9kaWZpZWQgdmVyc2lvbnMgb2YgVGhlIFByb2dyYW0gbWF5IGJlIGRpc3RyaWJ1dGVkLiBJbmRpdmlkdWFsIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG1heSBiZWFyIHN1cHBsZW1lbnRhcnkgYW5kL29yIHN1cGVyc2VkaW5nIGNvbmRpdGlvbnMgb24gbW9kaWZpY2F0aW9uIG9mIHRoZW1zZWx2ZXMgYW5kIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlbXNlbHZlcywgYnV0ICpubyogZmlsZSBvZiBUaGUgUHJvZ3JhbSBtYXkgYmVhciBzdXBwbGVtZW50YXJ5IG9yIHN1cGVyc2VkaW5nIGNvbmRpdGlvbnMgb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBhbiB1bm1vZGlmaWVkIGNvcHkgb2YgdGhlIGZpbGUuIEEgZGlzdHJpYnV0b3Igd2lzaGluZyB0byBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbSB0aGVyZWZvcmUgbmVlZHMgdG8gY2hlY2sgdGhlIGNvbmRpdGlvbnMgb25seSBpbiB0aGlzIGxpY2Vuc2UgYW5kIG5vd2hlcmUgZWxzZS5cblxuQWN0aXZpdGllcyBvdGhlciB0aGFuIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIFRoZSBQcm9ncmFtIGFyZSBub3QgY292ZXJlZCBieSB0aGlzIGxpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiBJbiBwYXJ0aWN1bGFyLCB0aGUgYWN0IG9mIHJ1bm5pbmcgVGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQuXG5cbldlLCB0aGUgTGFUZVgzIFByb2plY3QsIGJlbGlldmUgdGhhdCB0aGUgY29uZGl0aW9ucyBiZWxvdyBnaXZlIHlvdSB0aGUgZnJlZWRvbSB0byBtYWtlIGFuZCBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIFRoZSBQcm9ncmFtIHRoYXQgY29uZm9ybSB3aXRoIHdoYXRldmVyIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9ucyB5b3Ugd2lzaCB3aGlsZSBtYWludGFpbmluZyB0aGUgYXZhaWxhYmlsaXR5LCBpbnRlZ3JpdHksIGFuZCByZWxpYWJpbGl0eSBvZiBUaGUgUHJvZ3JhbS4gSWYgeW91IGRvIG5vdCBzZWUgaG93IHRvIGFjaGlldmUgeW91ciBnb2FsIHdoaWxlIG1lZXRpbmcgdGhlc2UgY29uZGl0aW9ucywgdGhlbiByZWFkIHRoZSBkb2N1bWVudCBgY2ZnZ3VpZGUudGV4JyBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZm9yIHN1Z2dlc3Rpb25zLlxuXG5DT05ESVRJT05TIE9OIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuWW91IG1heSBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbS4gRGlzdHJpYnV0aW9uIG9mIG9ubHkgcGFydCBvZiBUaGUgUHJvZ3JhbSBpcyBub3QgYWxsb3dlZC5cblxuWW91IG1heSBub3QgbW9kaWZ5IGluIGFueSB3YXkgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIHRoYXQgYmVhcnMgYSBsZWdhbCBub3RpY2UgZm9yYmlkZGluZyBtb2RpZmljYXRpb24gb2YgdGhhdCBmaWxlLlxuXG5Zb3UgbWF5IGRpc3RyaWJ1dGUgYSBtb2RpZmllZCBmaWxlIG9mIFRoZSBQcm9ncmFtIGlmLCBhbmQgb25seSBpZiwgdGhlIGZvbGxvd2luZyBlaWdodCBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFlvdSBtdXN0IG1lZXQgYW55IGFkZGl0aW9uYWwgY29uZGl0aW9ucyBib3JuZSBieSB0aGUgZmlsZSBvbiB0aGUgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZmlsZSBhcyBkZXNjcmliZWQgYmVsb3cgaW4gdGhlIHN1YnNlY3Rpb24gYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBJbmRpdmlkdWFsIEZpbGVzIG9mIFRoZSBQcm9ncmFtJy5cblxuICAgMi4gSWYgdGhlIGZpbGUgaXMgYSBMYVRlWCBzb2Z0d2FyZSBmaWxlLCB0aGVuIHlvdSBtdXN0IG1lZXQgYW55IGFwcGxpY2FibGUgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIHRoYXQgYXJlIGRlc2NyaWJlZCBiZWxvdyBpbiB0aGUgc3Vic2VjdGlvbiBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYIFNvZnR3YXJlIEZpbGVzJy5cblxuICAgMy4gWW91IG11c3Qgbm90IGRpc3RyaWJ1dGUgdGhlIG1vZGlmaWVkIGZpbGUgd2l0aCB0aGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUuXG5cbiAgIDQuIEluIHRoZSBtb2RpZmllZCBmaWxlLCB5b3UgbXVzdCBhY2tub3dsZWRnZSB0aGUgYXV0aG9yc2hpcCBhbmQgbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZSwgYW5kIHRoZSBuYW1lIChpZiBhbnkpIG9mIHRoZSBwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGl0LlxuXG4gICA1LiBZb3UgbXVzdCBjaGFuZ2UgYW55IGlkZW50aWZpY2F0aW9uIHN0cmluZyBpbiB0aGUgZmlsZSB0byBpbmRpY2F0ZSBjbGVhcmx5IHRoYXQgdGhlIG1vZGlmaWVkIGZpbGUgaXMgbm90IHBhcnQgb2YgVGhlIFByb2dyYW0uXG5cbiAgIDYuIFlvdSBtdXN0IGNoYW5nZSBhbnkgYWRkcmVzc2VzIGluIHRoZSBtb2RpZmllZCBmaWxlIGZvciB0aGUgcmVwb3J0aW5nIG9mIGVycm9ycyBpbiB0aGUgZmlsZSBvciBpbiBUaGUgUHJvZ3JhbSBnZW5lcmFsbHkgdG8gZW5zdXJlIHRoYXQgcmVwb3J0cyBmb3IgZmlsZXMgbm8gbG9uZ2VyIG1haW50YWluZWQgYnkgdGhlIG9yaWdpbmFsIG1haW50YWluZXJzIHdpbGwgYmUgZGlyZWN0ZWQgdG8gdGhlIG1haW50YWluZXJzIG9mIHRoZSBtb2RpZmllZCBmaWxlcy5cblxuICAgNy4gWW91IG11c3QgZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgZmlsZSB1bmRlciBhIGxpY2Vuc2UgdGhhdCBmb3JiaWRzIGRpc3RyaWJ1dGlvbiBib3RoIG9mIHRoZSBtb2RpZmllZCBmaWxlIGFuZCBvZiBhbnkgZmlsZXMgZGVyaXZlZCBmcm9tIHRoZSBtb2RpZmllZCBmaWxlIHdpdGggdGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLlxuXG4gICA4LiBZb3UgbXVzdCBkbyBlaXRoZXIgKEEpIG9yIChCKTpcblxuICAgICAgKEEpIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIFRoZSBQcm9ncmFtICh0aGF0IGlzLCBhIGNvbXBsZXRlLCB1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0pIHRvZ2V0aGVyIHdpdGggdGhlIG1vZGlmaWVkIGZpbGU7IGlmIHlvdXIgZGlzdHJpYnV0aW9uIG9mIHRoZSBtb2RpZmllZCBmaWxlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgdGhlIG1vZGlmaWVkIGZpbGUgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSBUaGUgUHJvZ3JhbSBmcm9tIHRoZSBzYW1lIHBsYWNlIG1lZXRzIHRoaXMgY29uZGl0aW9uLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgVGhlIFByb2dyYW0gYWxvbmcgd2l0aCB0aGUgbW9kaWZpZWQgZmlsZTtcblxuICAgICAgKEIpIHByb3ZpZGUgdG8gdGhvc2Ugd2hvIHJlY2VpdmUgdGhlIG1vZGlmaWVkIGZpbGUgaW5mb3JtYXRpb24gdGhhdCBpcyBzdWZmaWNpZW50IGZvciB0aGVtIHRvIG9idGFpbiBhIGNvcHkgb2YgVGhlIFByb2dyYW07IGZvciBleGFtcGxlLCB5b3UgbWF5IHByb3ZpZGUgYSBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgKFVSTCkgZm9yIGEgc2l0ZSB0aGF0IHlvdSBleHBlY3Qgd2lsbCBwcm92aWRlIHRoZW0gd2l0aCBhIGNvcHkgb2YgVGhlIFByb2dyYW0gZnJlZSBvZiBjaGFyZ2UgKGVpdGhlciB0aGUgdmVyc2lvbiBmcm9tIHdoaWNoIHlvdXIgbW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIG9yIHBlcmhhcHMgYSBsYXRlciB2ZXJzaW9uKS5cblxuTm90ZSB0aGF0IGluIHRoZSBhYm92ZSwgYGRpc3RyaWJ1dGlvbicgb2YgYSBmaWxlIG1lYW5zIG1ha2luZyB0aGUgZmlsZSBhdmFpbGFibGUgdG8gb3RoZXJzIGJ5IGFueSBtZWFucy4gVGhpcyBpbmNsdWRlcywgZm9yIGluc3RhbmNlLCBpbnN0YWxsaW5nIHRoZSBmaWxlIG9uIGFueSBtYWNoaW5lIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgZmlsZSBpcyBhY2Nlc3NpYmxlIGJ5IHVzZXJzIG90aGVyIHRoYW4geW91cnNlbGYuIGBNb2RpZmljYXRpb24nIG9mIGEgZmlsZSBtZWFucyBhbnkgcHJvY2VkdXJlIHRoYXQgcHJvZHVjZXMgYSBkZXJpdmF0aXZlIGZpbGUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IC0tIHRoYXQgaXMsIGEgZmlsZSBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBmaWxlIG9yIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuXG5cbkNoYW5naW5nIHRoZSBuYW1lIG9mIGEgZmlsZSAob3RoZXIgdGhhbiBhcyBuZWNlc3NpdGF0ZWQgYnkgdGhlIGZpbGUgY29udmVudGlvbnMgb2YgdGhlIHRhcmdldCBmaWxlIHN5c3RlbXMpIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBtb2RpZmljYXRpb24gb2YgdGhlIGZpbGUuXG5cblRoZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UgZG8gbm90IGhhdmUgdG8gYmUgYXBwbGllZCB0byBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGFib3ZlIGNvbmRpdGlvbnMuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgQ29uZGl0aW9uIDcuIGRvZXMgYXBwbHkgdG8gYW55IHN1Y2ggbW9kaWZpZWQgZmlsZS5cblxuVGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG5vdCBpbnRlbmRlZCB0byBwcm9oaWJpdCwgYW5kIGhlbmNlIGRvIG5vdCBhcHBseSB0bywgdGhlIHVwZGF0aW5nLCBieSBhbnkgbWV0aG9kLCBvZiBhIGZpbGUgc28gdGhhdCBpdCBiZWNvbWVzIGlkZW50aWNhbCB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhhdCBmaWxlIG9mIFRoZSBQcm9ncmFtLlxuXG5BIFJlY29tbWVuZGF0aW9uIG9uIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JdCBpcyB3aXNlIG5ldmVyIHRvIG1vZGlmeSBhIGZpbGUgb2YgVGhlIFByb2dyYW0sIGV2ZW4gZm9yIHlvdXIgb3duIHBlcnNvbmFsIHVzZSwgd2l0aG91dCBhbHNvIG1lZXRpbmcgdGhlIGFib3ZlIGVpZ2h0IGNvbmRpdGlvbnMgZm9yIGRpc3RyaWJ1dGluZyB0aGUgbW9kaWZpZWQgZmlsZS4gV2hpbGUgeW91IG1pZ2h0IGludGVuZCB0aGF0IHN1Y2ggbW9kaWZpZWQgZmlsZXMgd2lsbCBuZXZlciBiZSBkaXN0cmlidXRlZCwgb2Z0ZW4gdGhpcyB3aWxsIGhhcHBlbiBieSBhY2NpZGVudCAtLSB5b3UgbWF5IGZvcmdldCB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIHRoZSBmaWxlOyBvciBpdCBtYXkgbm90IG9jY3VyIHRvIHlvdSB3aGVuIGFsbG93aW5nIG90aGVycyB0byBhY2Nlc3MgdGhlIG1vZGlmaWVkIGZpbGUgdGhhdCB5b3UgYXJlIHRodXMgZGlzdHJpYnV0aW5nIGl0IGFuZCB2aW9sYXRpbmcgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLiBJdCBpcyB1c3VhbGx5IGluIHlvdXIgYmVzdCBpbnRlcmVzdCB0byBrZWVwIHlvdXIgY29weSBvZiBUaGUgUHJvZ3JhbSBpZGVudGljYWwgd2l0aCB0aGUgcHVibGljIG9uZS4gTWFueSBwcm9ncmFtcyBwcm92aWRlIHdheXMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgdGhhdCBwcm9ncmFtIHdpdGhvdXQgYWx0ZXJpbmcgaXRzIGxpY2Vuc2VkIGZpbGVzLlxuXG5BZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gSW5kaXZpZHVhbCBGaWxlcyBvZiBUaGUgUHJvZ3JhbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5BbiBpbmRpdmlkdWFsIGZpbGUgb2YgVGhlIFByb2dyYW0gbWF5IGJlYXIgYWRkaXRpb25hbCBjb25kaXRpb25zIHRoYXQgc3VwcGxlbWVudCBhbmQvb3Igc3VwZXJzZWRlIHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZSBpZiwgYW5kIG9ubHkgaWYsIHN1Y2ggYWRkaXRpb25hbCBjb25kaXRpb25zIGV4Y2x1c2l2ZWx5IGNvbmNlcm4gbW9kaWZpY2F0aW9uIG9mIHRoZSBmaWxlIG9yIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUuIFRoZSBjb25kaXRpb25zIG9uIGluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gdGhlcmVmb3JlIG1heSBkaWZmZXIgb25seSB3aXRoIHJlc3BlY3QgdG8gdGhlIGtpbmQgYW5kIGV4dGVudCBvZiBtb2RpZmljYXRpb24gb2YgdGhvc2UgZmlsZXMgdGhhdCBpcyBhbGxvd2VkLCBhbmQgd2l0aCByZXNwZWN0IHRvIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhvc2UgZmlsZXMuXG5cbkFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWCBTb2Z0d2FyZSBGaWxlc1xuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuSWYgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBMYVRlWCAodGhhdCBpcywgaWYgaXQgaXMgYSBMYVRlWCBzb2Z0d2FyZSBmaWxlKSwgdGhlbiB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgY29uZGl0aW9ucywgd2hpY2ggc3VwcGxlbWVudCBhbmQvb3Igc3VwZXJzZWRlIHRoZSBjb25kaXRpb25zIGFib3ZlLCBhcHBseSB0byB0aGUgZmlsZSBhY2NvcmRpbmcgdG8gaXRzIGZpbGVuYW1lIGV4dGVuc2lvbjpcblxuICAgLSBZb3UgbWF5IG5vdCBtb2RpZnkgYW55IGZpbGUgd2l0aCBmaWxlbmFtZSBleHRlbnNpb24gYC5pbnMnIHNpbmNlIHRoZXNlIGFyZSBpbnN0YWxsYXRpb24gZmlsZXMgY29udGFpbmluZyB0aGUgbGVnYWwgbm90aWNlcyB0aGF0IGFyZSBwbGFjZWQgaW4gdGhlIGZpbGVzIHRoZXkgZ2VuZXJhdGUuXG5cbiAgIC0gWW91IG1heSBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGZpbGVzIHdpdGggZmlsZW5hbWUgZXh0ZW5zaW9uIGAuZmQnIChMYVRlWCBmb250IGRlZmluaXRpb24gZmlsZXMpIHVuZGVyIHRoZSBzdGFuZGFyZCBjb25kaXRpb25zIG9mIHRoZSBMUFBMIGFzIGRlc2NyaWJlZCBhYm92ZS4gWW91IG1heSBhbHNvIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmllZCBMYVRlWCBmb250IGRlZmluaXRpb24gZmlsZXMgd2l0aCB0aGVpciBvcmlnaW5hbCBuYW1lcyBwcm92aWRlZCB0aGF0OlxuXG4gICAgICAoMSkgdGhlIG9ubHkgY2hhbmdlcyB0byB0aGUgb3JpZ2luYWwgZmlsZXMgZWl0aGVyIGVuYWJsZSB1c2Ugb2YgYXZhaWxhYmxlIGZvbnRzIG9yIHByZXZlbnQgYXR0ZW1wdHMgdG8gYWNjZXNzIHVuYXZhaWxhYmxlIGZvbnRzO1xuXG4gICAgICAoMikgeW91IGFsc28gZGlzdHJpYnV0ZSB0aGUgb3JpZ2luYWwsIHVubW9kaWZpZWQgZmlsZXMgKFRlWCBpbnB1dCBwYXRocyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHdoaWNoIHNldCBvZiBMYVRlWCBmb250IGRlZmluaXRpb24gZmlsZXMgaXMgYWN0dWFsbHkgdXNlZCBieSBUZVgpLlxuXG4gICAtIFlvdSBtYXkgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBmaWxlcyB3aXRoIGZpbGVuYW1lIGV4dGVuc2lvbiBgLmNmZycgKGNvbmZpZ3VyYXRpb24gZmlsZXMpIHdpdGggdGhlaXIgb3JpZ2luYWwgbmFtZXMuIFRoZSBQcm9ncmFtIG1heSAoYW5kIHVzdWFsbHkgd2lsbCkgc3BlY2lmeSB0aGUgcmFuZ2Ugb2YgY29tbWFuZHMgdGhhdCBhcmUgYWxsb3dlZCBpbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmaWxlLlxuXG5CZWNhdXNlIG9mIHBvcnRhYmlsaXR5IGFuZCBleGNoYW5nZWFiaWxpdHkgaXNzdWVzIGluIExhVGVYIHNvZnR3YXJlLCBUaGUgTGFUZVgzIFByb2plY3QgZGVwcmVjYXRlcyB0aGUgZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mIGNvbXBvbmVudHMgb2YgTGFUZVggb3Igb2YgZ2VuZXJhbGx5IGF2YWlsYWJsZSBjb250cmlidXRlZCBjb2RlIGZvciB0aGVtLCBidXQgc3VjaCBkaXN0cmlidXRpb24gY2FuIG1lZXQgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLlxuXG5OTyBXQVJSQU5UWVxuXG49PT09PT09PT09PVxuXG5UaGVyZSBpcyBubyB3YXJyYW50eSBmb3IgVGhlIFByb2dyYW0uIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4gd3JpdGluZywgVGhlIENvcHlyaWdodCBIb2xkZXIgcHJvdmlkZXMgVGhlIFByb2dyYW0gYGFzIGlzJywgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIFRoZSBQcm9ncmFtIGlzIHdpdGggeW91LiBTaG91bGQgVGhlIFByb2dyYW0gcHJvdmUgZGVmZWN0aXZlLCB5b3UgYXNzdW1lIHRoZSBjb3N0IG9mIGFsbCBuZWNlc3Nhcnkgc2VydmljaW5nLCByZXBhaXIsIG9yIGNvcnJlY3Rpb24uXG5cbkluIG5vIGV2ZW50IHVubGVzcyBhZ3JlZWQgdG8gaW4gd3JpdGluZyB3aWxsIFRoZSBDb3B5cmlnaHQgSG9sZGVyLCBvciBhbnkgYXV0aG9yIG5hbWVkIGluIHRoZSBmaWxlcyBvZiBUaGUgUHJvZ3JhbSwgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IFRoZSBQcm9ncmFtIGFzIHBlcm1pdHRlZCBhYm92ZSwgYmUgbGlhYmxlIHRvIHlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiBhbnkgdXNlIG9mIFRoZSBQcm9ncmFtIG9yIG91dCBvZiBpbmFiaWxpdHkgdG8gdXNlIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgbG9zcyBvZiBkYXRhLCBkYXRhIGJlaW5nIHJlbmRlcmVkIGluYWNjdXJhdGUsIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkgYW55b25lIGFzIGEgcmVzdWx0IG9mIGFueSBmYWlsdXJlIG9mIFRoZSBQcm9ncmFtIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIgcHJvZ3JhbXMpLCBldmVuIGlmIFRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIgcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLlxuXG5XSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBQUk9HUkFNUyBVTkRFUiBUSElTIExJQ0VOU0UgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoaXMgc2VjdGlvbiBjb250YWlucyBpbXBvcnRhbnQgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kIHJlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGluZyB0aGVpciBwcm9ncmFtcyB1bmRlciB0aGlzIGxpY2Vuc2UuIFRoZXNlIGF1dGhvcnMgYXJlIGFkZHJlc3NlZCBhcyBgeW91JyBpbiB0aGlzIHNlY3Rpb24uXG5cbkNob29zaW5nIFRoaXMgTGljZW5zZSBvciBBbm90aGVyIExpY2Vuc2VcblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JZiBmb3IgYW55IHBhcnQgb2YgeW91ciBwcm9ncmFtIHlvdSB3YW50IG9yIG5lZWQgdG8gdXNlICpkaXN0cmlidXRpb24qIGNvbmRpdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aG9zZSBpbiB0aGlzIGxpY2Vuc2UsIHRoZW4gZG8gbm90IHJlZmVyIHRvIHRoaXMgbGljZW5zZSBhbnl3aGVyZSBpbiB5b3VyIHByb2dyYW0gYnV0IGluc3RlYWQgZGlzdHJpYnV0ZSB5b3VyIHByb2dyYW0gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gWW91IG1heSB1c2UgdGhlIHRleHQgb2YgdGhpcyBsaWNlbnNlIGFzIGEgbW9kZWwgZm9yIHlvdXIgb3duIGxpY2Vuc2UsIGJ1dCB5b3VyIGxpY2Vuc2Ugc2hvdWxkIG5vdCByZWZlciB0byB0aGUgTFBQTCBvciBvdGhlcndpc2UgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGF0IHlvdXIgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTC5cblxuVGhlIGRvY3VtZW50IGBtb2RndWlkZS50ZXgnIGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBleHBsYWlucyB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLiBJdCBleHBsYWlucywgZm9yIGV4YW1wbGUsIHdoeSBkaXN0cmlidXRpbmcgTGFUZVggdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHdhcyBjb25zaWRlcmVkIGluYXBwcm9wcmlhdGUuIEV2ZW4gaWYgeW91ciBwcm9ncmFtIGlzIHVucmVsYXRlZCB0byBMYVRlWCwgdGhlIGRpc2N1c3Npb24gaW4gYG1vZGd1aWRlLnRleCcgbWF5IHN0aWxsIGJlIHJlbGV2YW50LCBhbmQgYXV0aG9ycyBpbnRlbmRpbmcgdG8gZGlzdHJpYnV0ZSB0aGVpciBwcm9ncmFtcyB1bmRlciBhbnkgbGljZW5zZSBhcmUgZW5jb3VyYWdlZCB0byByZWFkIGl0LlxuXG5Ib3cgdG8gVXNlIFRoaXMgTGljZW5zZVxuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UbyB1c2UgdGhpcyBsaWNlbnNlLCBwbGFjZSBpbiBlYWNoIG9mIHRoZSBmaWxlcyBvZiB5b3VyIHByb2dyYW0gYm90aCBhbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIGFuZCBhbHNvIGEgc3RhdGVtZW50IHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBmaWxlIGlzIGNvbnN0cmFpbmVkIGJ5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS5cblxuSGVyZSBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudDpcblxuJSUgcGlnLmR0eFxuXG4lJSBDb3B5cmlnaHQgMjAwMSBNLiBZLiBOYW1lXG5cbiVcblxuJSBUaGlzIHByb2dyYW0gbWF5IGJlIGRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmllZCB1bmRlciB0aGVcblxuJSBjb25kaXRpb25zIG9mIHRoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlLCBlaXRoZXIgdmVyc2lvbiAxLjJcblxuJSBvZiB0aGlzIGxpY2Vuc2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuJSBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBsaWNlbnNlIGlzIGluXG5cbiUgaHR0cDovL3d3dy5sYXRleC1wcm9qZWN0Lm9yZy9scHBsLnR4dFxuXG4lIGFuZCB2ZXJzaW9uIDEuMiBvciBsYXRlciBpcyBwYXJ0IG9mIGFsbCBkaXN0cmlidXRpb25zIG9mIExhVGVYXG5cbiUgdmVyc2lvbiAxOTk5LzEyLzAxIG9yIGxhdGVyLlxuXG4lXG5cbiUgVGhpcyBwcm9ncmFtIGNvbnNpc3RzIG9mIHRoZSBmaWxlcyBwaWcuZHR4IGFuZCBwaWcuaW5zXG5cbkdpdmVuIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudCBpbiBhIGZpbGUsIHRoZSBjb25kaXRpb25zIGdpdmVuIGluIHRoaXMgbGljZW5zZSBkb2N1bWVudCB3b3VsZCBhcHBseSwgd2l0aCBgVGhlIFByb2dyYW0nIHJlZmVycmluZyB0byB0aGUgdHdvIGZpbGVzIGBwaWcuZHR4JyBhbmQgYHBpZy5pbnMnLCBhbmQgYFRoZSBDb3B5cmlnaHQgSG9sZGVyJyByZWZlcnJpbmcgdG8gdGhlIHBlcnNvbiBgTS4gWS4gTmFtZScuXG5cbkltcG9ydGFudCBSZWNvbW1lbmRhdGlvbnNcblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5EZWZpbmluZyBXaGF0IENvbnN0aXR1dGVzIFRoZSBQcm9ncmFtXG5cblRoZSBMUFBMIHJlcXVpcmVzIHRoYXQgZGlzdHJpYnV0aW9ucyBvZiBUaGUgUHJvZ3JhbSBjb250YWluIGFsbCB0aGUgZmlsZXMgb2YgVGhlIFByb2dyYW0uIEl0IGlzIHRoZXJlZm9yZSBpbXBvcnRhbnQgdGhhdCB5b3UgcHJvdmlkZSBhIHdheSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGljaCBmaWxlcyBjb25zdGl0dXRlIFRoZSBQcm9ncmFtLiBUaGlzIGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYWNoaWV2ZWQgYnkgZXhwbGljaXRseSBsaXN0aW5nIGFsbCB0aGUgZmlsZXMgb2YgVGhlIFByb2dyYW0gbmVhciB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBlYWNoIGZpbGUgb3IgYnkgdXNpbmcgYSBsaW5lIGxpa2VcblxuJSBUaGlzIHByb2dyYW0gY29uc2lzdHMgb2YgYWxsIGZpbGVzIGxpc3RlZCBpbiBtYW5pZmVzdC50eHQuXG5cbmluIHRoYXQgcGxhY2UuIEluIHRoZSBhYnNlbmNlIG9mIGFuIHVuZXF1aXZvY2FsIGxpc3QgaXQgbWlnaHQgYmUgaW1wb3NzaWJsZSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGF0IGlzIGNvbnNpZGVyZWQgYnkgeW91IHRvIGNvbXByaXNlIFRoZSBQcm9ncmFtLlxuXG5Ob3RpbmcgRXhjZXB0aW9uYWwgRmlsZXMgSWYgVGhlIFByb2dyYW0gY29udGFpbnMgYW55IGZpbGVzIGJlYXJpbmcgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uIG1vZGlmaWNhdGlvbiwgb3Igb24gZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zLCBvZiB0aG9zZSBmaWxlcyAob3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQgaW4gYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWCBTb2Z0d2FyZSBGaWxlcycpLCB0aGVuIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgVGhlIFByb2dyYW0gY29udGFpbiBhIHByb21pbmVudCBmaWxlIHRoYXQgZGVmaW5lcyB0aGUgZXhjZXB0aW9uYWwgY29uZGl0aW9ucywgYW5kIGVpdGhlciBsaXN0cyB0aGUgZXhjZXB0aW9uYWwgZmlsZXMgb3IgZGVmaW5lcyBvbmUgb3IgbW9yZSBjYXRlZ29yaWVzIG9mIGV4Y2VwdGlvbmFsIGZpbGVzLlxuXG5GaWxlcyBjb250YWluaW5nIHRoZSB0ZXh0IG9mIGEgbGljZW5zZSAoc3VjaCBhcyB0aGlzIGZpbGUpIGFyZSBvZnRlbiBleGFtcGxlcyBvZiBmaWxlcyBiZWFyaW5nIG1vcmUgcmVzdHJpY3RpdmUgY29uZGl0aW9ucyBvbiBtb2RpZmljYXRpb24uIExhVGVYIGNvbmZpZ3VyYXRpb24gZmlsZXMgKHdpdGggZmlsZW5hbWUgZXh0ZW5zaW9uIGAuY2ZnJykgYXJlIGV4YW1wbGVzIG9mIGZpbGVzIGJlYXJpbmcgbGVzcyByZXN0cmljdGl2ZSBjb25kaXRpb25zIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlLiBUaGUgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uIExhVGVYIHNvZnR3YXJlIGdpdmVuIGFib3ZlIGFyZSBleGFtcGxlcyBvZiBkZWNsYXJpbmcgYSBjYXRlZ29yeSBvZiBmaWxlcyBiZWFyaW5nIGV4Y2VwdGlvbmFsIGFkZGl0aW9uYWwgY29uZGl0aW9ucy4iXSwibGljZW5zZUlkcyI6WyJMUFBMLTEuMiJdLCJrZXl3b3JkcyI6WyIxIDIgMTk5OSIsIjIgMTk5OSAwOSIsIjE5OTkgMDkgMDMiLCIwOSAwMyBjb3B5cmlnaHQiLCIwMyBjb3B5cmlnaHQgMTk5OSIsImEgZmlsZSBvdGhlciIsImZpbGUgb3RoZXIgdGhhbiIsInRoYW4gYXMgbmVjZXNzaXRhdGVkIiwiYXMgbmVjZXNzaXRhdGVkIGJ5IiwibmVjZXNzaXRhdGVkIGJ5IHRoZSIsInRoZSBmaWxlIGNvbnZlbnRpb25zIiwiZmlsZSBjb252ZW50aW9ucyBvZiIsImNvbnZlbnRpb25zIG9mIHRoZSIsIm9mIHRoZSB0YXJnZXQiLCJ0aGUgdGFyZ2V0IGZpbGUiLCJ0YXJnZXQgZmlsZSBzeXN0ZW1zIiwiZmlsZSBzeXN0ZW1zIGlzIiwic3lzdGVtcyBpcyBjb25zaWRlcmVkIiwiMSAyIG9mIiwiMiBvciBsYXRlciIsInZlcnNpb24gMTk5OSAxMiIsIjE5OTkgMTIgMDEiLCJscHBsIHZlcnNpb24gMSAyIiwidmVyc2lvbiAxIDIgMTk5OSIsIjEgMiAxOTk5IDA5IiwiMiAxOTk5IDA5IDAzIiwiMTk5OSAwOSAwMyBjb3B5cmlnaHQiLCIwOSAwMyBjb3B5cmlnaHQgMTk5OSIsIjAzIGNvcHlyaWdodCAxOTk5IGxhdGV4MyIsIm9mIGEgZmlsZSBvdGhlciIsImEgZmlsZSBvdGhlciB0aGFuIiwiZmlsZSBvdGhlciB0aGFuIGFzIiwib3RoZXIgdGhhbiBhcyBuZWNlc3NpdGF0ZWQiLCJ0aGFuIGFzIG5lY2Vzc2l0YXRlZCBieSIsImFzIG5lY2Vzc2l0YXRlZCBieSB0aGUiLCJuZWNlc3NpdGF0ZWQgYnkgdGhlIGZpbGUiLCJieSB0aGUgZmlsZSBjb252ZW50aW9ucyIsInRoZSBmaWxlIGNvbnZlbnRpb25zIG9mIiwiZmlsZSBjb252ZW50aW9ucyBvZiB0aGUiLCJjb252ZW50aW9ucyBvZiB0aGUgdGFyZ2V0Iiwib2YgdGhlIHRhcmdldCBmaWxlIiwidGhlIHRhcmdldCBmaWxlIHN5c3RlbXMiLCJ0YXJnZXQgZmlsZSBzeXN0ZW1zIGlzIiwiZmlsZSBzeXN0ZW1zIGlzIGNvbnNpZGVyZWQiLCJzeXN0ZW1zIGlzIGNvbnNpZGVyZWQgdG8iLCJlaXRoZXIgdmVyc2lvbiAxIDIiLCJ2ZXJzaW9uIDEgMiBvZiIsIjEgMiBvZiB0aGlzIiwiYW5kIHZlcnNpb24gMSAyIiwiMSAyIG9yIGxhdGVyIiwiMiBvciBsYXRlciBpcyIsImxhdGV4IHZlcnNpb24gMTk5OSAxMiIsInZlcnNpb24gMTk5OSAxMiAwMSIsIjE5OTkgMTIgMDEgb3IiLCJsaWNlbnNlIGxwcGwgdmVyc2lvbiAxIDIiLCJscHBsIHZlcnNpb24gMSAyIDE5OTkiLCJ2ZXJzaW9uIDEgMiAxOTk5IDA5IiwiMSAyIDE5OTkgMDkgMDMiLCIyIDE5OTkgMDkgMDMgY29weXJpZ2h0IiwiMTk5OSAwOSAwMyBjb3B5cmlnaHQgMTk5OSIsIjA5IDAzIGNvcHlyaWdodCAxOTk5IGxhdGV4MyIsIjAzIGNvcHlyaWdodCAxOTk5IGxhdGV4MyBwcm9qZWN0IiwibmFtZSBvZiBhIGZpbGUgb3RoZXIiLCJvZiBhIGZpbGUgb3RoZXIgdGhhbiIsImEgZmlsZSBvdGhlciB0aGFuIGFzIiwiZmlsZSBvdGhlciB0aGFuIGFzIG5lY2Vzc2l0YXRlZCIsIm90aGVyIHRoYW4gYXMgbmVjZXNzaXRhdGVkIGJ5IiwidGhhbiBhcyBuZWNlc3NpdGF0ZWQgYnkgdGhlIiwiYXMgbmVjZXNzaXRhdGVkIGJ5IHRoZSBmaWxlIiwibmVjZXNzaXRhdGVkIGJ5IHRoZSBmaWxlIGNvbnZlbnRpb25zIiwiYnkgdGhlIGZpbGUgY29udmVudGlvbnMgb2YiLCJ0aGUgZmlsZSBjb252ZW50aW9ucyBvZiB0aGUiLCJmaWxlIGNvbnZlbnRpb25zIG9mIHRoZSB0YXJnZXQiLCJjb252ZW50aW9ucyBvZiB0aGUgdGFyZ2V0IGZpbGUiLCJvZiB0aGUgdGFyZ2V0IGZpbGUgc3lzdGVtcyIsInRoZSB0YXJnZXQgZmlsZSBzeXN0ZW1zIGlzIiwidGFyZ2V0IGZpbGUgc3lzdGVtcyBpcyBjb25zaWRlcmVkIiwiZmlsZSBzeXN0ZW1zIGlzIGNvbnNpZGVyZWQgdG8iLCJzeXN0ZW1zIGlzIGNvbnNpZGVyZWQgdG8gYmUiLCJsaWNlbnNlIGVpdGhlciB2ZXJzaW9uIDEgMiIsImVpdGhlciB2ZXJzaW9uIDEgMiBvZiIsInZlcnNpb24gMSAyIG9mIHRoaXMiLCIxIDIgb2YgdGhpcyBsaWNlbnNlIiwidHh0IGFuZCB2ZXJzaW9uIDEgMiIsImFuZCB2ZXJzaW9uIDEgMiBvciIsInZlcnNpb24gMSAyIG9yIGxhdGVyIiwiMSAyIG9yIGxhdGVyIGlzIiwiMiBvciBsYXRlciBpcyBwYXJ0Iiwib2YgbGF0ZXggdmVyc2lvbiAxOTk5IDEyIiwibGF0ZXggdmVyc2lvbiAxOTk5IDEyIDAxIiwidmVyc2lvbiAxOTk5IDEyIDAxIG9yIiwiMTk5OSAxMiAwMSBvciBsYXRlciJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZVxuXG49LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LVxuXG5MUFBMIFZlcnNpb24gMS4zYSAyMDA0LTEwLTAxIENvcHlyaWdodCAxOTk5IDIwMDItMDQgTGFUZVgzIFByb2plY3RcblxuRXZlcnlvbmUgaXMgYWxsb3dlZCB0byBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBtb2RpZmljYXRpb24gb2YgaXQgaXMgbm90IGFsbG93ZWQuXG5cblBSRUFNQkxFXG5cbj09PT09PT09XG5cblRoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlIChMUFBMKSBpcyB0aGUgcHJpbWFyeSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZSB0aGUgTGFUZVgga2VybmVsIGFuZCB0aGUgYmFzZSBMYVRlWCBwYWNrYWdlcyBhcmUgZGlzdHJpYnV0ZWQuXG5cbllvdSBtYXkgdXNlIHRoaXMgbGljZW5zZSBmb3IgYW55IHdvcmsgb2Ygd2hpY2ggeW91IGhvbGQgdGhlIGNvcHlyaWdodCBhbmQgd2hpY2ggeW91IHdpc2ggdG8gZGlzdHJpYnV0ZS4gVGhpcyBsaWNlbnNlIG1heSBiZSBwYXJ0aWN1bGFybHkgc3VpdGFibGUgaWYgeW91ciB3b3JrIGlzIFRlWC1yZWxhdGVkIChzdWNoIGFzIGEgTGFUZVggcGFja2FnZSksIGJ1dCB5b3UgbWF5IHVzZSBpdCB3aXRoIHNtYWxsIG1vZGlmaWNhdGlvbnMgZXZlbiBpZiB5b3VyIHdvcmsgaXMgdW5yZWxhdGVkIHRvIFRlWC5cblxuVGhlIHNlY3Rpb24gYFdIRVRIRVIgQU5EIEhPVyBUTyBESVNUUklCVVRFIFdPUktTIFVOREVSIFRISVMgTElDRU5TRScsIGJlbG93LCBnaXZlcyBpbnN0cnVjdGlvbnMsIGV4YW1wbGVzLCBhbmQgcmVjb21tZW5kYXRpb25zIGZvciBhdXRob3JzIHdobyBhcmUgY29uc2lkZXJpbmcgZGlzdHJpYnV0aW5nIHRoZWlyIHdvcmtzIHVuZGVyIHRoaXMgbGljZW5zZS5cblxuVGhpcyBsaWNlbnNlIGdpdmVzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSB3b3JrIG1heSBiZSBkaXN0cmlidXRlZCBhbmQgbW9kaWZpZWQsIGFzIHdlbGwgYXMgY29uZGl0aW9ucyB1bmRlciB3aGljaCBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGF0IHdvcmsgbWF5IGJlIGRpc3RyaWJ1dGVkLlxuXG5XZSwgdGhlIExhVGVYMyBQcm9qZWN0LCBiZWxpZXZlIHRoYXQgdGhlIGNvbmRpdGlvbnMgYmVsb3cgZ2l2ZSB5b3UgdGhlIGZyZWVkb20gdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB5b3VyIHdvcmsgdGhhdCBjb25mb3JtIHdpdGggd2hhdGV2ZXIgdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zIHlvdSB3aXNoIHdoaWxlIG1haW50YWluaW5nIHRoZSBhdmFpbGFiaWxpdHksIGludGVncml0eSwgYW5kIHJlbGlhYmlsaXR5IG9mIHRoYXQgd29yay4gSWYgeW91IGRvIG5vdCBzZWUgaG93IHRvIGFjaGlldmUgeW91ciBnb2FsIHdoaWxlIG1lZXRpbmcgdGhlc2UgY29uZGl0aW9ucywgdGhlbiByZWFkIHRoZSBkb2N1bWVudCBgY2ZnZ3VpZGUudGV4JyBhbmQgYG1vZGd1aWRlLnRleCcgaW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGZvciBzdWdnZXN0aW9ucy5cblxuREVGSU5JVElPTlNcblxuPT09PT09PT09PT1cblxuSW4gdGhpcyBsaWNlbnNlIGRvY3VtZW50IHRoZSBmb2xsb3dpbmcgdGVybXMgYXJlIHVzZWQ6XG5cbmBXb3JrJyBBbnkgd29yayBiZWluZyBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIGBEZXJpdmVkIFdvcmsnIEFueSB3b3JrIHRoYXQgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGlzIGRlcml2ZWQgZnJvbSB0aGUgV29yay5cblxuYE1vZGlmaWNhdGlvbicgQW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgRGVyaXZlZCBXb3JrIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyAtLSBmb3IgZXhhbXBsZSwgdGhlIHByb2R1Y3Rpb24gb2YgYSBmaWxlIGNvbnRhaW5pbmcgYW4gb3JpZ2luYWwgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmsgb3IgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHN1Y2ggYSBmaWxlLCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS5cblxuYE1vZGlmeScgVG8gYXBwbHkgYW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgRGVyaXZlZCBXb3JrIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdy4gYERpc3RyaWJ1dGlvbicgTWFraW5nIGNvcGllcyBvZiB0aGUgV29yayBhdmFpbGFibGUgZnJvbSBvbmUgcGVyc29uIHRvIGFub3RoZXIsIGluIHdob2xlIG9yIGluIHBhcnQuIERpc3RyaWJ1dGlvbiBpbmNsdWRlcyAoYnV0IGlzIG5vdCBsaW1pdGVkIHRvKSBtYWtpbmcgYW55IGVsZWN0cm9uaWMgY29tcG9uZW50cyBvZiB0aGUgV29yayBhY2Nlc3NpYmxlIGJ5IGZpbGUgdHJhbnNmZXIgcHJvdG9jb2xzIHN1Y2ggYXMgRlRQIG9yIEhUVFAgb3IgYnkgc2hhcmVkIGZpbGUgc3lzdGVtcyBzdWNoIGFzIFN1bidzIE5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykuXG5cbmBDb21waWxlZCBXb3JrJyBBIHZlcnNpb24gb2YgdGhlIFdvcmsgdGhhdCBoYXMgYmVlbiBwcm9jZXNzZWQgaW50byBhIGZvcm0gd2hlcmUgaXQgaXMgZGlyZWN0bHkgdXNhYmxlIG9uIGEgY29tcHV0ZXIgc3lzdGVtLiBUaGlzIHByb2Nlc3NpbmcgbWF5IGluY2x1ZGUgdXNpbmcgaW5zdGFsbGF0aW9uIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIFdvcmssIHRyYW5zZm9ybWF0aW9ucyBvZiB0aGUgV29yaywgY29weWluZyBvZiBjb21wb25lbnRzIG9mIHRoZSBXb3JrLCBvciBvdGhlciBhY3Rpdml0aWVzLiBOb3RlIHRoYXQgbW9kaWZpY2F0aW9uIG9mIGFueSBpbnN0YWxsYXRpb24gZmFjaWxpdGllcyBwcm92aWRlZCBieSB0aGUgV29yayBjb25zdGl0dXRlcyBtb2RpZmljYXRpb24gb2YgdGhlIFdvcmsuXG5cbmBDdXJyZW50IE1haW50YWluZXInIEEgcGVyc29uIG9yIHBlcnNvbnMgbm9taW5hdGVkIGFzIHN1Y2ggd2l0aGluIHRoZSBXb3JrLiBJZiB0aGVyZSBpcyBubyBzdWNoIGV4cGxpY2l0IG5vbWluYXRpb24gdGhlbiBpdCBpcyB0aGUgYENvcHlyaWdodCBIb2xkZXInIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdy5cblxuYEJhc2UgSW50ZXJwcmV0ZXInIEEgcHJvZ3JhbSBvciBwcm9jZXNzIHRoYXQgaXMgbm9ybWFsbHkgbmVlZGVkIGZvciBydW5uaW5nIG9yIGludGVycHJldGluZyBhIHBhcnQgb3IgdGhlIHdob2xlIG9mIHRoZSBXb3JrLiBBIEJhc2UgSW50ZXJwcmV0ZXIgbWF5IGRlcGVuZCBvbiBleHRlcm5hbCBjb21wb25lbnRzIGJ1dCB0aGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgQmFzZSBJbnRlcnByZXRlciBwcm92aWRlZCB0aGF0IGVhY2ggZXh0ZXJuYWwgY29tcG9uZW50IGNsZWFybHkgaWRlbnRpZmllcyBpdHNlbGYgd2hlbmV2ZXIgaXQgaXMgdXNlZCBpbnRlcmFjdGl2ZWx5LiBVbmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQgd2hlbiBhcHBseWluZyB0aGUgbGljZW5zZSB0byB0aGUgV29yaywgdGhlIG9ubHkgYXBwbGljYWJsZSBCYXNlIEludGVycHJldGVyIGlzIGEgXCJMYVRlWC1Gb3JtYXRcIi5cblxuQ09ORElUSU9OUyBPTiBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgIDEuIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiB0aGUgV29yayBhcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gSW4gcGFydGljdWxhciwgdGhlIGFjdCBvZiBydW5uaW5nIHRoZSBXb3JrIGlzIG5vdCByZXN0cmljdGVkIGFuZCBubyByZXF1aXJlbWVudHMgYXJlIG1hZGUgY29uY2VybmluZyBhbnkgb2ZmZXJzIG9mIHN1cHBvcnQgZm9yIHRoZSBXb3JrLlxuXG4gICAyLiBZb3UgbWF5IGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrIGFzIHlvdSByZWNlaXZlZCBpdC4gRGlzdHJpYnV0aW9uIG9mIG9ubHkgcGFydCBvZiB0aGUgV29yayBpcyBjb25zaWRlcmVkIG1vZGlmaWNhdGlvbiBvZiB0aGUgV29yaywgYW5kIG5vIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgc3VjaCBhIERlcml2ZWQgV29yayBtYXkgYmUgYXNzdW1lZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBjbGF1c2UuXG5cbiAgIDMuIFlvdSBtYXkgZGlzdHJpYnV0ZSBhIENvbXBpbGVkIFdvcmsgdGhhdCBoYXMgYmVlbiBnZW5lcmF0ZWQgZnJvbSBhIGNvbXBsZXRlLCB1bm1vZGlmaWVkIGNvcHkgb2YgdGhlIFdvcmsgYXMgZGlzdHJpYnV0ZWQgdW5kZXIgQ2xhdXNlIDIgYWJvdmUsIGFzIGxvbmcgYXMgdGhhdCBDb21waWxlZCBXb3JrIGlzIGRpc3RyaWJ1dGVkIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgcmVjaXBpZW50cyBtYXkgaW5zdGFsbCB0aGUgQ29tcGlsZWQgV29yayBvbiB0aGVpciBzeXN0ZW0gZXhhY3RseSBhcyBpdCB3b3VsZCBoYXZlIGJlZW4gaW5zdGFsbGVkIGlmIHRoZXkgZ2VuZXJhdGVkIGEgQ29tcGlsZWQgV29yayBkaXJlY3RseSBmcm9tIHRoZSBXb3JrLlxuXG4gICA0LiBJZiB5b3UgYXJlIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXksIHdpdGhvdXQgcmVzdHJpY3Rpb24sIG1vZGlmeSB0aGUgV29yaywgdGh1cyBjcmVhdGluZyBhIERlcml2ZWQgV29yay4gWW91IG1heSBhbHNvIGRpc3RyaWJ1dGUgdGhlIERlcml2ZWQgV29yayB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgQ29tcGlsZWQgV29ya3MgZ2VuZXJhdGVkIGZyb20gdGhlIERlcml2ZWQgV29yay4gRGVyaXZlZCBXb3JrcyBkaXN0cmlidXRlZCBpbiB0aGlzIG1hbm5lciBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyIGFyZSBjb25zaWRlcmVkIHRvIGJlIHVwZGF0ZWQgdmVyc2lvbnMgb2YgdGhlIFdvcmsuXG5cbiAgIDUuIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGUgV29yaywgdGh1cyBjcmVhdGluZyBhIERlcml2ZWQgV29yayBiYXNlZCBvbiB0aGUgV29yaywgYW5kIGNvbXBpbGUgdGhpcyBEZXJpdmVkIFdvcmssIHRodXMgY3JlYXRpbmcgYSBDb21waWxlZCBXb3JrIGJhc2VkIG9uIHRoZSBEZXJpdmVkIFdvcmsuXG5cbiAgIDYuIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkgZGlzdHJpYnV0ZSBhIERlcml2ZWQgV29yayBwcm92aWRlZCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldCBmb3IgZXZlcnkgY29tcG9uZW50IG9mIHRoZSBXb3JrIHVubGVzcyB0aGF0IGNvbXBvbmVudCBjbGVhcmx5IHN0YXRlcyBpbiB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGl0IGlzIGV4ZW1wdCBmcm9tIHRoYXQgY29uZGl0aW9uLiBPbmx5IHRoZSBDdXJyZW50IE1haW50YWluZXIgaXMgYWxsb3dlZCB0byBhZGQgc3VjaCBzdGF0ZW1lbnRzIG9mIGV4ZW1wdGlvbiB0byBhIGNvbXBvbmVudCBvZiB0aGUgV29yay5cblxuICAgICAgYS4gSWYgYSBjb21wb25lbnQgb2YgdGhpcyBEZXJpdmVkIFdvcmsgY2FuIGJlIGEgZGlyZWN0IHJlcGxhY2VtZW50IGZvciBhIGNvbXBvbmVudCBvZiB0aGUgV29yayB3aGVuIHRoYXQgY29tcG9uZW50IGlzIHVzZWQgd2l0aCB0aGUgQmFzZSBJbnRlcnByZXRlciwgdGhlbiwgd2hlcmV2ZXIgdGhpcyBjb21wb25lbnQgb2YgdGhlIFdvcmsgaWRlbnRpZmllcyBpdHNlbGYgdG8gdGhlIHVzZXIgd2hlbiB1c2VkIGludGVyYWN0aXZlbHkgd2l0aCB0aGF0IEJhc2UgSW50ZXJwcmV0ZXIsIHRoZSByZXBsYWNlbWVudCBjb21wb25lbnQgb2YgdGhpcyBEZXJpdmVkIFdvcmsgY2xlYXJseSBhbmQgdW5hbWJpZ3VvdXNseSBpZGVudGlmaWVzIGl0c2VsZiBhcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBjb21wb25lbnQgdG8gdGhlIHVzZXIgd2hlbiB1c2VkIGludGVyYWN0aXZlbHkgd2l0aCB0aGF0IEJhc2UgSW50ZXJwcmV0ZXIuXG5cbiAgICAgIGIuIEV2ZXJ5IGNvbXBvbmVudCBvZiB0aGUgRGVyaXZlZCBXb3JrIGNvbnRhaW5zIHByb21pbmVudCBub3RpY2VzIGRldGFpbGluZyB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzIHRvIHRoYXQgY29tcG9uZW50LCBvciBhIHByb21pbmVudCByZWZlcmVuY2UgdG8gYW5vdGhlciBmaWxlIHRoYXQgaXMgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgRGVyaXZlZCBXb3JrIGFuZCB0aGF0IGNvbnRhaW5zIGEgY29tcGxldGUgYW5kIGFjY3VyYXRlIGxvZyBvZiB0aGUgY2hhbmdlcy5cblxuICAgICAgYy4gTm8gaW5mb3JtYXRpb24gaW4gdGhlIERlcml2ZWQgV29yayBpbXBsaWVzIHRoYXQgYW55IHBlcnNvbnMsIGluY2x1ZGluZyAoYnV0IG5vdCBsaW1pdGVkIHRvKSB0aGUgYXV0aG9ycyBvZiB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yaywgcHJvdmlkZSBhbnkgc3VwcG9ydCwgaW5jbHVkaW5nIChidXQgbm90IGxpbWl0ZWQgdG8pIHRoZSByZXBvcnRpbmcgYW5kIGhhbmRsaW5nIG9mIGVycm9ycywgdG8gcmVjaXBpZW50cyBvZiB0aGUgRGVyaXZlZCBXb3JrIHVubGVzcyB0aG9zZSBwZXJzb25zIGhhdmUgc3RhdGVkIGV4cGxpY2l0bHkgdGhhdCB0aGV5IGRvIHByb3ZpZGUgc3VjaCBzdXBwb3J0IGZvciB0aGUgRGVyaXZlZCBXb3JrLlxuXG4gICAgICBkLiBZb3UgZGlzdHJpYnV0ZSBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyB3aXRoIHRoZSBEZXJpdmVkIFdvcms6XG5cbiAgICAgICAgIDEuIEEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yazsgaWYgeW91ciBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCBjb21wb25lbnQgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSB0aGUgbW9kaWZpZWQgY29tcG9uZW50IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIFdvcmsgZnJvbSB0aGUgc2FtZSBvciBzb21lIHNpbWlsYXIgcGxhY2UgbWVldHMgdGhpcyBjb25kaXRpb24sIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSB0aGUgV29yayBhbG9uZyB3aXRoIHRoZSBtb2RpZmllZCBjb21wb25lbnQ7XG5cbiAgICAgICAgIDIuIEluZm9ybWF0aW9uIHRoYXQgaXMgc3VmZmljaWVudCB0byBvYnRhaW4gYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrLlxuXG4gICA3LiBJZiB5b3UgYXJlIG5vdCB0aGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoZSBXb3JrLCB5b3UgbWF5IGRpc3RyaWJ1dGUgYSBDb21waWxlZCBXb3JrIGdlbmVyYXRlZCBmcm9tIGEgRGVyaXZlZCBXb3JrLCBhcyBsb25nIGFzIHRoZSBEZXJpdmVkIFdvcmsgaXMgZGlzdHJpYnV0ZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIENvbXBpbGVkIFdvcmssIGFuZCBhcyBsb25nIGFzIHRoZSBjb25kaXRpb25zIG9mIENsYXVzZSA2LCBhYm92ZSwgYXJlIG1ldCB3aXRoIHJlZ2FyZCB0byB0aGUgRGVyaXZlZCBXb3JrLlxuXG4gICA4LiBUaGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbm90IGludGVuZGVkIHRvIHByb2hpYml0LCBhbmQgaGVuY2UgZG8gbm90IGFwcGx5IHRvLCB0aGUgbW9kaWZpY2F0aW9uLCBieSBhbnkgbWV0aG9kLCBvZiBhbnkgY29tcG9uZW50IHNvIHRoYXQgaXQgYmVjb21lcyBpZGVudGljYWwgdG8gYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoYXQgY29tcG9uZW50IG9mIHRoZSBXb3JrIGFzIGl0IGlzIGRpc3RyaWJ1dGVkIGJ5IHRoZSBDdXJyZW50IE1haW50YWluZXIgdW5kZXIgQ2xhdXNlIDQsIGFib3ZlLlxuXG4gICA5LiBEaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3IgYW55IERlcml2ZWQgV29yayBpbiBhbiBhbHRlcm5hdGl2ZSBmb3JtYXQsIHdoZXJlIHRoZSBXb3JrIG9yIHRoYXQgRGVyaXZlZCBXb3JrIChpbiB3aG9sZSBvciBpbiBwYXJ0KSBpcyB0aGVuIHByb2R1Y2VkIGJ5IGFwcGx5aW5nIHNvbWUgcHJvY2VzcyB0byB0aGF0IGZvcm1hdCwgZG9lcyBub3QgcmVsYXggb3IgbnVsbGlmeSBhbnkgc2VjdGlvbnMgb2YgdGhpcyBsaWNlbnNlIGFzIHRoZXkgcGVydGFpbiB0byB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGF0IHByb2Nlc3MuXG5cbiAgIDEwLlxuXG4gICAgICBhLiBBIERlcml2ZWQgV29yayBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBwcm92aWRlZCB0aGF0IGxpY2Vuc2UgaXRzZWxmIGhvbm9ycyB0aGUgY29uZGl0aW9ucyBsaXN0ZWQgaW4gQ2xhdXNlIDYgYWJvdmUsIGluIHJlZ2FyZCB0byB0aGUgV29yaywgdGhvdWdoIGl0IGRvZXMgbm90IGhhdmUgdG8gaG9ub3IgdGhlIHJlc3Qgb2YgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLlxuXG4gICAgICBiLiBJZiBhIERlcml2ZWQgV29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGlzIGxpY2Vuc2UsIHRoYXQgRGVyaXZlZCBXb3JrIG11c3QgcHJvdmlkZSBzdWZmaWNpZW50IGRvY3VtZW50YXRpb24gYXMgcGFydCBvZiBpdHNlbGYgdG8gYWxsb3cgZWFjaCByZWNpcGllbnQgb2YgdGhhdCBEZXJpdmVkIFdvcmsgdG8gaG9ub3IgdGhlIHJlc3RyaWN0aW9ucyBpbiBDbGF1c2UgNiBhYm92ZSwgY29uY2VybmluZyBjaGFuZ2VzIGZyb20gdGhlIFdvcmsuXG5cbiAgIDExLiBUaGlzIGxpY2Vuc2UgcGxhY2VzIG5vIHJlc3RyaWN0aW9ucyBvbiB3b3JrcyB0aGF0IGFyZSB1bnJlbGF0ZWQgdG8gdGhlIFdvcmssIG5vciBkb2VzIHRoaXMgbGljZW5zZSBwbGFjZSBhbnkgcmVzdHJpY3Rpb25zIG9uIGFnZ3JlZ2F0aW5nIHN1Y2ggd29ya3Mgd2l0aCB0aGUgV29yayBieSBhbnkgbWVhbnMuXG5cbiAgIDEyLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0bywgb3IgbWF5IGJlIHVzZWQgdG8sIHByZXZlbnQgY29tcGxldGUgY29tcGxpYW5jZSBieSBhbGwgcGFydGllcyB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MuXG5cbk5PIFdBUlJBTlRZXG5cbj09PT09PT09PT09XG5cblRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgV29yay4gRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCBpbiB3cml0aW5nLCB0aGUgQ29weXJpZ2h0IEhvbGRlciBwcm92aWRlcyB0aGUgV29yayBgYXMgaXMnLCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIFdvcmsgaXMgd2l0aCB5b3UuIFNob3VsZCB0aGUgV29yayBwcm92ZSBkZWZlY3RpdmUsIHlvdSBhc3N1bWUgdGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciwgb3IgY29ycmVjdGlvbi5cblxuSW4gbm8gZXZlbnQgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nIHdpbGwgVGhlIENvcHlyaWdodCBIb2xkZXIsIG9yIGFueSBhdXRob3IgbmFtZWQgaW4gdGhlIGNvbXBvbmVudHMgb2YgdGhlIFdvcmssIG9yIGFueSBvdGhlciBwYXJ0eSB3aG8gbWF5IGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgV29yayBhcyBwZXJtaXR0ZWQgYWJvdmUsIGJlIGxpYWJsZSB0byB5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgYW55IHVzZSBvZiB0aGUgV29yayBvciBvdXQgb2YgaW5hYmlsaXR5IHRvIHVzZSB0aGUgV29yayAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGxvc3Mgb2YgZGF0YSwgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlLCBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5IGFueW9uZSBhcyBhIHJlc3VsdCBvZiBhbnkgZmFpbHVyZSBvZiB0aGUgV29yayB0byBvcGVyYXRlIHdpdGggYW55IG90aGVyIHByb2dyYW1zKSwgZXZlbiBpZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBvciBzYWlkIGF1dGhvciBvciBzYWlkIG90aGVyIHBhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy5cblxuTUFJTlRFTkFOQ0UgT0YgVEhFIFdPUktcblxuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIFdvcmsgaGFzIHRoZSBzdGF0dXMgYGF1dGhvci1tYWludGFpbmVkJyBpZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBleHBsaWNpdGx5IGFuZCBwcm9taW5lbnRseSBzdGF0ZXMgbmVhciB0aGUgcHJpbWFyeSBjb3B5cmlnaHQgbm90aWNlIGluIHRoZSBXb3JrIHRoYXQgdGhlIFdvcmsgY2FuIG9ubHkgYmUgbWFpbnRhaW5lZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlciBvciBzaW1wbHkgdGhhdCBpcyBgYXV0aG9yLW1haW50YWluZWQnLlxuXG5UaGUgV29yayBoYXMgdGhlIHN0YXR1cyBgbWFpbnRhaW5lZCcgaWYgdGhlcmUgaXMgYSBDdXJyZW50IE1haW50YWluZXIgd2hvIGhhcyBpbmRpY2F0ZWQgaW4gdGhlIFdvcmsgdGhhdCB0aGV5IGFyZSB3aWxsaW5nIHRvIHJlY2VpdmUgZXJyb3IgcmVwb3J0cyBmb3IgdGhlIFdvcmsgKGZvciBleGFtcGxlLCBieSBzdXBwbHlpbmcgYSB2YWxpZCBlLW1haWwgYWRkcmVzcykuIEl0IGlzIG5vdCByZXF1aXJlZCBmb3IgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB0byBhY2tub3dsZWRnZSBvciBhY3QgdXBvbiB0aGVzZSBlcnJvciByZXBvcnRzLlxuXG5UaGUgV29yayBjaGFuZ2VzIGZyb20gc3RhdHVzIGBtYWludGFpbmVkJyB0byBgdW5tYWludGFpbmVkJyBpZiB0aGVyZSBpcyBubyBDdXJyZW50IE1haW50YWluZXIsIG9yIHRoZSBwZXJzb24gc3RhdGVkIHRvIGJlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgd29yayBjYW5ub3QgYmUgcmVhY2hlZCB0aHJvdWdoIHRoZSBpbmRpY2F0ZWQgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiBmb3IgYSBwZXJpb2Qgb2Ygc2l4IG1vbnRocywgYW5kIHRoZXJlIGFyZSBubyBvdGhlciBzaWduaWZpY2FudCBzaWducyBvZiBhY3RpdmUgbWFpbnRlbmFuY2UuXG5cbllvdSBjYW4gYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmsgYnkgYWdyZWVtZW50IHdpdGggYW55IGV4aXN0aW5nIEN1cnJlbnQgTWFpbnRhaW5lciB0byB0YWtlIG92ZXIgdGhpcyByb2xlLlxuXG5JZiB0aGUgV29yayBpcyB1bm1haW50YWluZWQsIHlvdSBjYW4gYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmsgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuXG4gICAxLiBNYWtlIGEgcmVhc29uYWJsZSBhdHRlbXB0IHRvIHRyYWNlIHRoZSBDdXJyZW50IE1haW50YWluZXIgKGFuZCB0aGUgQ29weXJpZ2h0IEhvbGRlciwgaWYgdGhlIHR3byBkaWZmZXIpIHRocm91Z2ggdGhlIG1lYW5zIG9mIGFuIEludGVybmV0IG9yIHNpbWlsYXIgc2VhcmNoLlxuXG4gICAyLiBJZiB0aGlzIHNlYXJjaCBpcyBzdWNjZXNzZnVsLCB0aGVuIGVucXVpcmUgd2hldGhlciB0aGUgV29yayBpcyBzdGlsbCBtYWludGFpbmVkLlxuXG4gICAgICBhLiBJZiBpdCBpcyBiZWluZyBtYWludGFpbmVkLCB0aGVuIGFzayB0aGUgQ3VycmVudCBNYWludGFpbmVyIHRvIHVwZGF0ZSB0aGVpciBjb21tdW5pY2F0aW9uIGRhdGEgd2l0aGluIG9uZSBtb250aC5cblxuICAgICAgYi4gSWYgdGhlIHNlYXJjaCBpcyB1bnN1Y2Nlc3NmdWwgb3Igbm8gYWN0aW9uIHRvIHJlc3VtZSBhY3RpdmUgbWFpbnRlbmFuY2UgaXMgdGFrZW4gYnkgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciwgdGhlbiBhbm5vdW5jZSB3aXRoaW4gdGhlIHBlcnRpbmVudCBjb21tdW5pdHkgeW91ciBpbnRlbnRpb24gdG8gdGFrZSBvdmVyIG1haW50ZW5hbmNlLiAoSWYgdGhlIFdvcmsgaXMgYSBMYVRlWCB3b3JrLCB0aGlzIGNvdWxkIGJlIGRvbmUsIGZvciBleGFtcGxlLCBieSBwb3N0aW5nIHRvIGNvbXAudGV4dC50ZXguKVxuXG4gICAgICAzYS4gSWYgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBpcyByZWFjaGFibGUgYW5kIGFncmVlcyB0byBwYXNzIG1haW50ZW5hbmNlIG9mIHRoZSBXb3JrIHRvIHlvdSwgdGhlbiB0aGlzIHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseSB1cG9uIGFubm91bmNlbWVudC5cblxuICAgICAgYi4gSWYgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBpcyBub3QgcmVhY2hhYmxlIGFuZCB0aGUgQ29weXJpZ2h0IEhvbGRlciBhZ3JlZXMgdGhhdCBtYWludGVuYW5jZSBvZiB0aGUgV29yayBiZSBwYXNzZWQgdG8geW91LCB0aGVuIHRoaXMgdGFrZXMgZWZmZWN0IGltbWVkaWF0ZWx5IHVwb24gYW5ub3VuY2VtZW50LlxuXG4gICA0LiBJZiB5b3UgbWFrZSBhbiBgaW50ZW50aW9uIGFubm91bmNlbWVudCcgYXMgZGVzY3JpYmVkIGluIDJiLiBhYm92ZSBhbmQgYWZ0ZXIgdGhyZWUgbW9udGhzIHlvdXIgaW50ZW50aW9uIGlzIGNoYWxsZW5nZWQgbmVpdGhlciBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyIG5vciBieSB0aGUgQ29weXJpZ2h0IEhvbGRlciBub3IgYnkgb3RoZXIgcGVvcGxlLCB0aGVuIHlvdSBtYXkgYXJyYW5nZSBmb3IgdGhlIFdvcmsgdG8gYmUgY2hhbmdlZCBzbyBhcyB0byBuYW1lIHlvdSBhcyB0aGUgKG5ldykgQ3VycmVudCBNYWludGFpbmVyLlxuXG4gICA1LiBJZiB0aGUgcHJldmlvdXNseSB1bnJlYWNoYWJsZSBDdXJyZW50IE1haW50YWluZXIgYmVjb21lcyByZWFjaGFibGUgb25jZSBtb3JlIHdpdGhpbiB0aHJlZSBtb250aHMgb2YgYSBjaGFuZ2UgY29tcGxldGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAzYikgb3IgNCksIHRoZW4gdGhhdCBDdXJyZW50IE1haW50YWluZXIgbXVzdCBiZWNvbWUgb3IgcmVtYWluIHRoZSBDdXJyZW50IE1haW50YWluZXIgdXBvbiByZXF1ZXN0IHByb3ZpZGVkIHRoZXkgdGhlbiB1cGRhdGUgdGhlaXIgY29tbXVuaWNhdGlvbiBkYXRhIHdpdGhpbiBvbmUgbW9udGguXG5cbkEgY2hhbmdlIGluIHRoZSBDdXJyZW50IE1haW50YWluZXIgZG9lcyBub3QsIG9mIGl0c2VsZiwgYWx0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgV29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTCBsaWNlbnNlLlxuXG5JZiB5b3UgYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBzaG91bGQgaW1tZWRpYXRlbHkgcHJvdmlkZSwgd2l0aGluIHRoZSBXb3JrLCBhIHByb21pbmVudCBhbmQgdW5hbWJpZ3VvdXMgc3RhdGVtZW50IG9mIHlvdXIgc3RhdHVzIGFzIEN1cnJlbnQgTWFpbnRhaW5lci4gWW91IHNob3VsZCBhbHNvIGFubm91bmNlIHlvdXIgbmV3IHN0YXR1cyB0byB0aGUgc2FtZSBwZXJ0aW5lbnQgY29tbXVuaXR5IGFzIGluIDJiKSBhYm92ZS5cblxuV0hFVEhFUiBBTkQgSE9XIFRPIERJU1RSSUJVVEUgV09SS1MgVU5ERVIgVEhJUyBMSUNFTlNFXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGlzIHNlY3Rpb24gY29udGFpbnMgaW1wb3J0YW50IGluc3RydWN0aW9ucywgZXhhbXBsZXMsIGFuZCByZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMgd2hvIGFyZSBjb25zaWRlcmluZyBkaXN0cmlidXRpbmcgdGhlaXIgd29ya3MgdW5kZXIgdGhpcyBsaWNlbnNlLiBUaGVzZSBhdXRob3JzIGFyZSBhZGRyZXNzZWQgYXMgYHlvdScgaW4gdGhpcyBzZWN0aW9uLlxuXG5DaG9vc2luZyBUaGlzIExpY2Vuc2Ugb3IgQW5vdGhlciBMaWNlbnNlXG5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuSWYgZm9yIGFueSBwYXJ0IG9mIHlvdXIgd29yayB5b3Ugd2FudCBvciBuZWVkIHRvIHVzZSAqZGlzdHJpYnV0aW9uKiBjb25kaXRpb25zIHRoYXQgZGlmZmVyIHNpZ25pZmljYW50bHkgZnJvbSB0aG9zZSBpbiB0aGlzIGxpY2Vuc2UsIHRoZW4gZG8gbm90IHJlZmVyIHRvIHRoaXMgbGljZW5zZSBhbnl3aGVyZSBpbiB5b3VyIHdvcmsgYnV0LCBpbnN0ZWFkLCBkaXN0cmlidXRlIHlvdXIgd29yayB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLiBZb3UgbWF5IHVzZSB0aGUgdGV4dCBvZiB0aGlzIGxpY2Vuc2UgYXMgYSBtb2RlbCBmb3IgeW91ciBvd24gbGljZW5zZSwgYnV0IHlvdXIgbGljZW5zZSBzaG91bGQgbm90IHJlZmVyIHRvIHRoZSBMUFBMIG9yIG90aGVyd2lzZSBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgeW91ciB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMUFBMLlxuXG5UaGUgZG9jdW1lbnQgYG1vZGd1aWRlLnRleCcgaW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGV4cGxhaW5zIHRoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuIEl0IGV4cGxhaW5zLCBmb3IgZXhhbXBsZSwgd2h5IGRpc3RyaWJ1dGluZyBMYVRlWCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgd2FzIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZS4gRXZlbiBpZiB5b3VyIHdvcmsgaXMgdW5yZWxhdGVkIHRvIExhVGVYLCB0aGUgZGlzY3Vzc2lvbiBpbiBgbW9kZ3VpZGUudGV4JyBtYXkgc3RpbGwgYmUgcmVsZXZhbnQsIGFuZCBhdXRob3JzIGludGVuZGluZyB0byBkaXN0cmlidXRlIHRoZWlyIHdvcmtzIHVuZGVyIGFueSBsaWNlbnNlIGFyZSBlbmNvdXJhZ2VkIHRvIHJlYWQgaXQuXG5cbkEgUmVjb21tZW5kYXRpb24gb24gTW9kaWZpY2F0aW9uIFdpdGhvdXQgRGlzdHJpYnV0aW9uXG5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkl0IGlzIHdpc2UgbmV2ZXIgdG8gbW9kaWZ5IGEgY29tcG9uZW50IG9mIHRoZSBXb3JrLCBldmVuIGZvciB5b3VyIG93biBwZXJzb25hbCB1c2UsIHdpdGhvdXQgYWxzbyBtZWV0aW5nIHRoZSBhYm92ZSBjb25kaXRpb25zIGZvciBkaXN0cmlidXRpbmcgdGhlIG1vZGlmaWVkIGNvbXBvbmVudC4gV2hpbGUgeW91IG1pZ2h0IGludGVuZCB0aGF0IHN1Y2ggbW9kaWZpY2F0aW9ucyB3aWxsIG5ldmVyIGJlIGRpc3RyaWJ1dGVkLCBvZnRlbiB0aGlzIHdpbGwgaGFwcGVuIGJ5IGFjY2lkZW50IC0tIHlvdSBtYXkgZm9yZ2V0IHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgdGhhdCBjb21wb25lbnQ7IG9yIGl0IG1heSBub3Qgb2NjdXIgdG8geW91IHdoZW4gYWxsb3dpbmcgb3RoZXJzIHRvIGFjY2VzcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiB0aGF0IHlvdSBhcmUgdGh1cyBkaXN0cmlidXRpbmcgaXQgYW5kIHZpb2xhdGluZyB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UgaW4gd2F5cyB0aGF0IGNvdWxkIGhhdmUgbGVnYWwgaW1wbGljYXRpb25zIGFuZCwgd29yc2UsIGNhdXNlIHByb2JsZW1zIGZvciB0aGUgY29tbXVuaXR5LiBJdCBpcyB0aGVyZWZvcmUgdXN1YWxseSBpbiB5b3VyIGJlc3QgaW50ZXJlc3QgdG8ga2VlcCB5b3VyIGNvcHkgb2YgdGhlIFdvcmsgaWRlbnRpY2FsIHdpdGggdGhlIHB1YmxpYyBvbmUuIE1hbnkgd29ya3MgcHJvdmlkZSB3YXlzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoYXQgd29yayB3aXRob3V0IGFsdGVyaW5nIGFueSBvZiBpdHMgbGljZW5zZWQgY29tcG9uZW50cy5cblxuSG93IHRvIFVzZSBUaGlzIExpY2Vuc2VcblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVG8gdXNlIHRoaXMgbGljZW5zZSwgcGxhY2UgaW4gZWFjaCBvZiB0aGUgY29tcG9uZW50cyBvZiB5b3VyIHdvcmsgYm90aCBhbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIHRoZSB3b3JrIHdhcyBhdXRob3JlZCBhbmQvb3IgbGFzdCBzdWJzdGFudGlhbGx5IG1vZGlmaWVkLiBJbmNsdWRlIGFsc28gYSBzdGF0ZW1lbnQgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgdGhhdCBjb21wb25lbnQgaXMgY29uc3RyYWluZWQgYnkgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLlxuXG5IZXJlIGlzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50OlxuXG4lJSBwaWcuZHR4XG5cbiUlIENvcHlyaWdodCAyMDAzIE0uIFkuIE5hbWVcblxuJVxuXG4lIFRoaXMgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZVxuXG4lIGNvbmRpdGlvbnMgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UsIGVpdGhlciB2ZXJzaW9uIDEuM1xuXG4lIG9mIHRoaXMgbGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4lIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpY2Vuc2UgaXMgaW5cblxuJSBodHRwOi8vd3d3LmxhdGV4LXByb2plY3Qub3JnL2xwcGwudHh0XG5cbiUgYW5kIHZlcnNpb24gMS4zIG9yIGxhdGVyIGlzIHBhcnQgb2YgYWxsIGRpc3RyaWJ1dGlvbnMgb2YgTGFUZVhcblxuJSB2ZXJzaW9uIDIwMDMvMTIvMDEgb3IgbGF0ZXIuXG5cbiVcblxuJSBUaGlzIHdvcmsgaGFzIHRoZSBMUFBMIG1haW50ZW5hbmNlIHN0YXR1cyBcIiBtYWludGFpbmVkIFwiLlxuXG4lXG5cbiUgVGhpcyBDdXJyZW50IE1haW50YWluZXIgb2YgdGhpcyB3b3JrIGlzIE0uIFkuIE5hbWUgLlxuXG4lXG5cbiUgVGhpcyB3b3JrIGNvbnNpc3RzIG9mIHRoZSBmaWxlcyBwaWcuZHR4IGFuZCBwaWcuaW5zXG5cbiUgYW5kIHRoZSBkZXJpdmVkIGZpbGUgcGlnLnN0eSAuXG5cbkdpdmVuIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudCBpbiBhIGZpbGUsIHRoZSBjb25kaXRpb25zIGdpdmVuIGluIHRoaXMgbGljZW5zZSBkb2N1bWVudCB3b3VsZCBhcHBseSwgd2l0aCB0aGUgYFdvcmsnIHJlZmVycmluZyB0byB0aGUgdGhyZWUgZmlsZXMgYHBpZy5kdHgnLCBgcGlnLmlucycsIGFuZCBgcGlnLnN0eScgKHRoZSBsYXN0IGJlaW5nIGdlbmVyYXRlZCBmcm9tIGBwaWcuZHR4JyB1c2luZyBgcGlnLmlucycpLCB0aGUgYEJhc2UgSW50ZXJwcmV0ZXInIHJlZmVycmluZyB0byBhbnkgXCJMYVRlWC1Gb3JtYXRcIiwgYW5kIGJvdGggYENvcHlyaWdodCBIb2xkZXInIGFuZCBgQ3VycmVudCBNYWludGFpbmVyJyByZWZlcnJpbmcgdG8gdGhlIHBlcnNvbiBgTS4gWS4gTmFtZScuXG5cbklmIHlvdSBkbyBub3Qgd2FudCB0aGUgTWFpbnRlbmFuY2Ugc2VjdGlvbiBvZiBMUFBMIHRvIGFwcGx5IHRvIHlvdXIgV29yaywgY2hhbmdlIFwibWFpbnRhaW5lZFwiIGFib3ZlIGludG8gXCJhdXRob3ItbWFpbnRhaW5lZFwiLiBIb3dldmVyLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIFwibWFpbnRhaW5lZFwiIGFzIHRoZSBNYWludGVuYW5jZSBzZWN0aW9uIHdhcyBhZGRlZCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB5b3VyIFdvcmsgcmVtYWlucyB1c2VmdWwgdG8gdGhlIGNvbW11bml0eSBldmVuIHdoZW4geW91IGNhbiBubyBsb25nZXIgbWFpbnRhaW4gYW5kIHN1cHBvcnQgaXQgeW91cnNlbGYuXG5cbkltcG9ydGFudCBSZWNvbW1lbmRhdGlvbnNcblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5EZWZpbmluZyBXaGF0IENvbnN0aXR1dGVzIHRoZSBXb3JrXG5cblRoZSBMUFBMIHJlcXVpcmVzIHRoYXQgZGlzdHJpYnV0aW9ucyBvZiB0aGUgV29yayBjb250YWluIGFsbCB0aGUgZmlsZXMgb2YgdGhlIFdvcmsuIEl0IGlzIHRoZXJlZm9yZSBpbXBvcnRhbnQgdGhhdCB5b3UgcHJvdmlkZSBhIHdheSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGljaCBmaWxlcyBjb25zdGl0dXRlIHRoZSBXb3JrLiBUaGlzIGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYWNoaWV2ZWQgYnkgZXhwbGljaXRseSBsaXN0aW5nIGFsbCB0aGUgZmlsZXMgb2YgdGhlIFdvcmsgbmVhciB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBlYWNoIGZpbGUgb3IgYnkgdXNpbmcgYSBsaW5lIHN1Y2ggYXM6XG5cbiUgVGhpcyB3b3JrIGNvbnNpc3RzIG9mIGFsbCBmaWxlcyBsaXN0ZWQgaW4gbWFuaWZlc3QudHh0LlxuXG5pbiB0aGF0IHBsYWNlLiBJbiB0aGUgYWJzZW5jZSBvZiBhbiB1bmVxdWl2b2NhbCBsaXN0IGl0IG1pZ2h0IGJlIGltcG9zc2libGUgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hhdCBpcyBjb25zaWRlcmVkIGJ5IHlvdSB0byBjb21wcmlzZSB0aGUgV29yayBhbmQsIGluIHN1Y2ggYSBjYXNlLCB0aGUgbGljZW5zZWUgd291bGQgYmUgZW50aXRsZWQgdG8gbWFrZSByZWFzb25hYmxlIGNvbmplY3R1cmVzIGFzIHRvIHdoaWNoIGZpbGVzIGNvbXByaXNlIHRoZSBXb3JrLiJdLCJsaWNlbnNlSWRzIjpbIkxQUEwtMS4zYSJdLCJrZXl3b3JkcyI6WyJ2ZXJzaW9uIDEgM2EiLCIxIDNhIDIwMDQiLCIzYSAyMDA0IDEwIiwiMjAwNCAxMCAwMSIsIjEwIDAxIGNvcHlyaWdodCIsIjE5OTkgMjAwMiAwNCIsIjIwMDIgMDQgbGF0ZXgzIiwiMDQgbGF0ZXgzIHByb2plY3QiLCJ3aGljaCB0aGUgdGhlIiwidGhlIHRoZSBsYXRleCIsInVzZSBpdCB3aXRoIiwiaXQgd2l0aCBzbWFsbCIsIndpdGggc21hbGwgbW9kaWZpY2F0aW9ucyIsInNtYWxsIG1vZGlmaWNhdGlvbnMgZXZlbiIsIm1vZGlmaWNhdGlvbnMgZXZlbiBpZiIsImxhdGV4IGZvcm1hdCBjb25kaXRpb25zIiwiZm9ybWF0IGNvbmRpdGlvbnMgb24iLCJzaW1wbHkgdGhhdCBpcyIsInRoYXQgaXMgYXV0aG9yIiwiZHR4IGNvcHlyaWdodCAyMDAzIiwiY29weXJpZ2h0IDIwMDMgbSIsIjIwMDMgbSB5IiwibGF0ZXggdmVyc2lvbiAyMDAzIiwidmVyc2lvbiAyMDAzIDEyIiwiMjAwMyAxMiAwMSIsInN0YXR1cyBtYWludGFpbmVkIHRoaXMiLCJtYWludGFpbmVkIHRoaXMgY3VycmVudCIsInRoaXMgY3VycmVudCBtYWludGFpbmVyIiwiaXQgeW91cnNlbGYgaW1wb3J0YW50IiwieW91cnNlbGYgaW1wb3J0YW50IHJlY29tbWVuZGF0aW9ucyIsImxwcGwgdmVyc2lvbiAxIDNhIiwidmVyc2lvbiAxIDNhIDIwMDQiLCIxIDNhIDIwMDQgMTAiLCIzYSAyMDA0IDEwIDAxIiwiMjAwNCAxMCAwMSBjb3B5cmlnaHQiLCIxMCAwMSBjb3B5cmlnaHQgMTk5OSIsIjAxIGNvcHlyaWdodCAxOTk5IDIwMDIiLCJjb3B5cmlnaHQgMTk5OSAyMDAyIDA0IiwiMTk5OSAyMDAyIDA0IGxhdGV4MyIsIjIwMDIgMDQgbGF0ZXgzIHByb2plY3QiLCIwNCBsYXRleDMgcHJvamVjdCBldmVyeW9uZSIsInVuZGVyIHdoaWNoIHRoZSB0aGUiLCJ3aGljaCB0aGUgdGhlIGxhdGV4IiwidGhlIHRoZSBsYXRleCBrZXJuZWwiLCJtYXkgdXNlIGl0IHdpdGgiLCJ1c2UgaXQgd2l0aCBzbWFsbCIsIml0IHdpdGggc21hbGwgbW9kaWZpY2F0aW9ucyIsIndpdGggc21hbGwgbW9kaWZpY2F0aW9ucyBldmVuIiwic21hbGwgbW9kaWZpY2F0aW9ucyBldmVuIGlmIiwibW9kaWZpY2F0aW9ucyBldmVuIGlmIHlvdXIiLCJhIGxhdGV4IGZvcm1hdCBjb25kaXRpb25zIiwibGF0ZXggZm9ybWF0IGNvbmRpdGlvbnMgb24iLCJmb3JtYXQgY29uZGl0aW9ucyBvbiBkaXN0cmlidXRpb24iLCJ0aGlzIGxpY2Vuc2UgdGhhdCBkZXJpdmVkIiwib3Igc2ltcGx5IHRoYXQgaXMiLCJzaW1wbHkgdGhhdCBpcyBhdXRob3IiLCJ0aGF0IGlzIGF1dGhvciBtYWludGFpbmVkIiwicGlnIGR0eCBjb3B5cmlnaHQgMjAwMyIsImR0eCBjb3B5cmlnaHQgMjAwMyBtIiwiY29weXJpZ2h0IDIwMDMgbSB5IiwiMjAwMyBtIHkgbmFtZSIsIm9mIGxhdGV4IHZlcnNpb24gMjAwMyIsImxhdGV4IHZlcnNpb24gMjAwMyAxMiIsInZlcnNpb24gMjAwMyAxMiAwMSIsIjIwMDMgMTIgMDEgb3IiLCJtYWludGVuYW5jZSBzdGF0dXMgbWFpbnRhaW5lZCB0aGlzIiwic3RhdHVzIG1haW50YWluZWQgdGhpcyBjdXJyZW50IiwibWFpbnRhaW5lZCB0aGlzIGN1cnJlbnQgbWFpbnRhaW5lciIsInRoaXMgY3VycmVudCBtYWludGFpbmVyIG9mIiwic3VwcG9ydCBpdCB5b3Vyc2VsZiBpbXBvcnRhbnQiLCJpdCB5b3Vyc2VsZiBpbXBvcnRhbnQgcmVjb21tZW5kYXRpb25zIiwieW91cnNlbGYgaW1wb3J0YW50IHJlY29tbWVuZGF0aW9ucyBkZWZpbmluZyIsImxpY2Vuc2UgbHBwbCB2ZXJzaW9uIDEgM2EiLCJscHBsIHZlcnNpb24gMSAzYSAyMDA0IiwidmVyc2lvbiAxIDNhIDIwMDQgMTAiLCIxIDNhIDIwMDQgMTAgMDEiLCIzYSAyMDA0IDEwIDAxIGNvcHlyaWdodCIsIjIwMDQgMTAgMDEgY29weXJpZ2h0IDE5OTkiLCIxMCAwMSBjb3B5cmlnaHQgMTk5OSAyMDAyIiwiMDEgY29weXJpZ2h0IDE5OTkgMjAwMiAwNCIsImNvcHlyaWdodCAxOTk5IDIwMDIgMDQgbGF0ZXgzIiwiMTk5OSAyMDAyIDA0IGxhdGV4MyBwcm9qZWN0IiwiMjAwMiAwNCBsYXRleDMgcHJvamVjdCBldmVyeW9uZSIsIjA0IGxhdGV4MyBwcm9qZWN0IGV2ZXJ5b25lIGlzIiwibGljZW5zZSB1bmRlciB3aGljaCB0aGUgdGhlIiwidW5kZXIgd2hpY2ggdGhlIHRoZSBsYXRleCIsIndoaWNoIHRoZSB0aGUgbGF0ZXgga2VybmVsIiwidGhlIHRoZSBsYXRleCBrZXJuZWwgYW5kIiwieW91IG1heSB1c2UgaXQgd2l0aCIsIm1heSB1c2UgaXQgd2l0aCBzbWFsbCIsInVzZSBpdCB3aXRoIHNtYWxsIG1vZGlmaWNhdGlvbnMiLCJpdCB3aXRoIHNtYWxsIG1vZGlmaWNhdGlvbnMgZXZlbiIsIndpdGggc21hbGwgbW9kaWZpY2F0aW9ucyBldmVuIGlmIiwic21hbGwgbW9kaWZpY2F0aW9ucyBldmVuIGlmIHlvdXIiLCJtb2RpZmljYXRpb25zIGV2ZW4gaWYgeW91ciB3b3JrIiwiaXMgYSBsYXRleCBmb3JtYXQgY29uZGl0aW9ucyIsImEgbGF0ZXggZm9ybWF0IGNvbmRpdGlvbnMgb24iLCJsYXRleCBmb3JtYXQgY29uZGl0aW9ucyBvbiBkaXN0cmlidXRpb24iLCJmb3JtYXQgY29uZGl0aW9ucyBvbiBkaXN0cmlidXRpb24gYW5kIiwid29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGlzIiwiZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBsaWNlbnNlIHRoYXQiLCJ1bmRlciB0aGlzIGxpY2Vuc2UgdGhhdCBkZXJpdmVkIiwidGhpcyBsaWNlbnNlIHRoYXQgZGVyaXZlZCB3b3JrIiwiaG9sZGVyIG9yIHNpbXBseSB0aGF0IGlzIiwib3Igc2ltcGx5IHRoYXQgaXMgYXV0aG9yIiwic2ltcGx5IHRoYXQgaXMgYXV0aG9yIG1haW50YWluZWQiLCJ0aGF0IGlzIGF1dGhvciBtYWludGFpbmVkIHRoZSIsInN0YXRlbWVudCBwaWcgZHR4IGNvcHlyaWdodCAyMDAzIiwicGlnIGR0eCBjb3B5cmlnaHQgMjAwMyBtIiwiZHR4IGNvcHlyaWdodCAyMDAzIG0geSIsImNvcHlyaWdodCAyMDAzIG0geSBuYW1lIiwiMjAwMyBtIHkgbmFtZSB0aGlzIiwiZGlzdHJpYnV0aW9ucyBvZiBsYXRleCB2ZXJzaW9uIDIwMDMiLCJvZiBsYXRleCB2ZXJzaW9uIDIwMDMgMTIiLCJsYXRleCB2ZXJzaW9uIDIwMDMgMTIgMDEiLCJ2ZXJzaW9uIDIwMDMgMTIgMDEgb3IiLCIyMDAzIDEyIDAxIG9yIGxhdGVyIiwibHBwbCBtYWludGVuYW5jZSBzdGF0dXMgbWFpbnRhaW5lZCB0aGlzIiwibWFpbnRlbmFuY2Ugc3RhdHVzIG1haW50YWluZWQgdGhpcyBjdXJyZW50Iiwic3RhdHVzIG1haW50YWluZWQgdGhpcyBjdXJyZW50IG1haW50YWluZXIiLCJtYWludGFpbmVkIHRoaXMgY3VycmVudCBtYWludGFpbmVyIG9mIiwidGhpcyBjdXJyZW50IG1haW50YWluZXIgb2YgdGhpcyIsImFuZCBzdXBwb3J0IGl0IHlvdXJzZWxmIGltcG9ydGFudCIsInN1cHBvcnQgaXQgeW91cnNlbGYgaW1wb3J0YW50IHJlY29tbWVuZGF0aW9ucyIsIml0IHlvdXJzZWxmIGltcG9ydGFudCByZWNvbW1lbmRhdGlvbnMgZGVmaW5pbmciLCJ5b3Vyc2VsZiBpbXBvcnRhbnQgcmVjb21tZW5kYXRpb25zIGRlZmluaW5nIHdoYXQiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2VcblxuPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS1cblxuTFBQTCBWZXJzaW9uIDEuM2MgMjAwOC0wNS0wNCBDb3B5cmlnaHQgMTk5OSAyMDAyLTIwMDggTGFUZVgzIFByb2plY3RcblxuRXZlcnlvbmUgaXMgYWxsb3dlZCB0byBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBtb2RpZmljYXRpb24gb2YgaXQgaXMgbm90IGFsbG93ZWQuXG5cblBSRUFNQkxFXG5cbj09PT09PT09XG5cblRoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlIChMUFBMKSBpcyB0aGUgcHJpbWFyeSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZSBMYVRlWCBrZXJuZWwgYW5kIHRoZSBiYXNlIExhVGVYIHBhY2thZ2VzIGFyZSBkaXN0cmlidXRlZC5cblxuWW91IG1heSB1c2UgdGhpcyBsaWNlbnNlIGZvciBhbnkgd29yayBvZiB3aGljaCB5b3UgaG9sZCB0aGUgY29weXJpZ2h0IGFuZCB3aGljaCB5b3Ugd2lzaCB0byBkaXN0cmlidXRlLiBUaGlzIGxpY2Vuc2UgbWF5IGJlIHBhcnRpY3VsYXJseSBzdWl0YWJsZSBpZiB5b3VyIHdvcmsgaXMgVGVYLXJlbGF0ZWQgKHN1Y2ggYXMgYSBMYVRlWCBwYWNrYWdlKSwgYnV0IGl0IGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IHlvdSBjYW4gdXNlIGl0IGV2ZW4gaWYgeW91ciB3b3JrIGlzIHVucmVsYXRlZCB0byBUZVguXG5cblRoZSBzZWN0aW9uIGBXSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBXT1JLUyBVTkRFUiBUSElTIExJQ0VOU0UnLCBiZWxvdywgZ2l2ZXMgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kIHJlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGluZyB0aGVpciB3b3JrcyB1bmRlciB0aGlzIGxpY2Vuc2UuXG5cblRoaXMgbGljZW5zZSBnaXZlcyBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQgYW5kIG1vZGlmaWVkLCBhcyB3ZWxsIGFzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhhdCB3b3JrIG1heSBiZSBkaXN0cmlidXRlZC5cblxuV2UsIHRoZSBMYVRlWDMgUHJvamVjdCwgYmVsaWV2ZSB0aGF0IHRoZSBjb25kaXRpb25zIGJlbG93IGdpdmUgeW91IHRoZSBmcmVlZG9tIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgeW91ciB3b3JrIHRoYXQgY29uZm9ybSB3aXRoIHdoYXRldmVyIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9ucyB5b3Ugd2lzaCB3aGlsZSBtYWludGFpbmluZyB0aGUgYXZhaWxhYmlsaXR5LCBpbnRlZ3JpdHksIGFuZCByZWxpYWJpbGl0eSBvZiB0aGF0IHdvcmsuIElmIHlvdSBkbyBub3Qgc2VlIGhvdyB0byBhY2hpZXZlIHlvdXIgZ29hbCB3aGlsZSBtZWV0aW5nIHRoZXNlIGNvbmRpdGlvbnMsIHRoZW4gcmVhZCB0aGUgZG9jdW1lbnQgYGNmZ2d1aWRlLnRleCcgYW5kIGBtb2RndWlkZS50ZXgnIGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBmb3Igc3VnZ2VzdGlvbnMuXG5cbkRFRklOSVRJT05TXG5cbj09PT09PT09PT09XG5cbkluIHRoaXMgbGljZW5zZSBkb2N1bWVudCB0aGUgZm9sbG93aW5nIHRlcm1zIGFyZSB1c2VkOlxuXG5gV29yaycgQW55IHdvcmsgYmVpbmcgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBgRGVyaXZlZCBXb3JrJyBBbnkgd29yayB0aGF0IHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBpcyBkZXJpdmVkIGZyb20gdGhlIFdvcmsuXG5cbmBNb2RpZmljYXRpb24nIEFueSBwcm9jZWR1cmUgdGhhdCBwcm9kdWNlcyBhIERlcml2ZWQgV29yayB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgLS0gZm9yIGV4YW1wbGUsIHRoZSBwcm9kdWN0aW9uIG9mIGEgZmlsZSBjb250YWluaW5nIGFuIG9yaWdpbmFsIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrIG9yIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiBzdWNoIGEgZmlsZSwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuXG5cbmBNb2RpZnknIFRvIGFwcGx5IGFueSBwcm9jZWR1cmUgdGhhdCBwcm9kdWNlcyBhIERlcml2ZWQgV29yayB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcuIGBEaXN0cmlidXRpb24nIE1ha2luZyBjb3BpZXMgb2YgdGhlIFdvcmsgYXZhaWxhYmxlIGZyb20gb25lIHBlcnNvbiB0byBhbm90aGVyLCBpbiB3aG9sZSBvciBpbiBwYXJ0LiBEaXN0cmlidXRpb24gaW5jbHVkZXMgKGJ1dCBpcyBub3QgbGltaXRlZCB0bykgbWFraW5nIGFueSBlbGVjdHJvbmljIGNvbXBvbmVudHMgb2YgdGhlIFdvcmsgYWNjZXNzaWJsZSBieSBmaWxlIHRyYW5zZmVyIHByb3RvY29scyBzdWNoIGFzIEZUUCBvciBIVFRQIG9yIGJ5IHNoYXJlZCBmaWxlIHN5c3RlbXMgc3VjaCBhcyBTdW4ncyBOZXR3b3JrIEZpbGUgU3lzdGVtIChORlMpLlxuXG5gQ29tcGlsZWQgV29yaycgQSB2ZXJzaW9uIG9mIHRoZSBXb3JrIHRoYXQgaGFzIGJlZW4gcHJvY2Vzc2VkIGludG8gYSBmb3JtIHdoZXJlIGl0IGlzIGRpcmVjdGx5IHVzYWJsZSBvbiBhIGNvbXB1dGVyIHN5c3RlbS4gVGhpcyBwcm9jZXNzaW5nIG1heSBpbmNsdWRlIHVzaW5nIGluc3RhbGxhdGlvbiBmYWNpbGl0aWVzIHByb3ZpZGVkIGJ5IHRoZSBXb3JrLCB0cmFuc2Zvcm1hdGlvbnMgb2YgdGhlIFdvcmssIGNvcHlpbmcgb2YgY29tcG9uZW50cyBvZiB0aGUgV29yaywgb3Igb3RoZXIgYWN0aXZpdGllcy4gTm90ZSB0aGF0IG1vZGlmaWNhdGlvbiBvZiBhbnkgaW5zdGFsbGF0aW9uIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIFdvcmsgY29uc3RpdHV0ZXMgbW9kaWZpY2F0aW9uIG9mIHRoZSBXb3JrLlxuXG5gQ3VycmVudCBNYWludGFpbmVyJyBBIHBlcnNvbiBvciBwZXJzb25zIG5vbWluYXRlZCBhcyBzdWNoIHdpdGhpbiB0aGUgV29yay4gSWYgdGhlcmUgaXMgbm8gc3VjaCBleHBsaWNpdCBub21pbmF0aW9uIHRoZW4gaXQgaXMgdGhlIGBDb3B5cmlnaHQgSG9sZGVyJyB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcuXG5cbmBCYXNlIEludGVycHJldGVyJyBBIHByb2dyYW0gb3IgcHJvY2VzcyB0aGF0IGlzIG5vcm1hbGx5IG5lZWRlZCBmb3IgcnVubmluZyBvciBpbnRlcnByZXRpbmcgYSBwYXJ0IG9yIHRoZSB3aG9sZSBvZiB0aGUgV29yay5cblxuQSBCYXNlIEludGVycHJldGVyIG1heSBkZXBlbmQgb24gZXh0ZXJuYWwgY29tcG9uZW50cyBidXQgdGhlc2UgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIEJhc2UgSW50ZXJwcmV0ZXIgcHJvdmlkZWQgdGhhdCBlYWNoIGV4dGVybmFsIGNvbXBvbmVudCBjbGVhcmx5IGlkZW50aWZpZXMgaXRzZWxmIHdoZW5ldmVyIGl0IGlzIHVzZWQgaW50ZXJhY3RpdmVseS4gVW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHdoZW4gYXBwbHlpbmcgdGhlIGxpY2Vuc2UgdG8gdGhlIFdvcmssIHRoZSBvbmx5IGFwcGxpY2FibGUgQmFzZSBJbnRlcnByZXRlciBpcyBhIGBMYVRlWC1Gb3JtYXQnIG9yIGluIHRoZSBjYXNlIG9mIGZpbGVzIGJlbG9uZ2luZyB0byB0aGUgYExhVGVYLWZvcm1hdCcgYSBwcm9ncmFtIGltcGxlbWVudGluZyB0aGUgYFRlWCBsYW5ndWFnZScuXG5cbkNPTkRJVElPTlMgT04gRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT05cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAxLiBBY3Rpdml0aWVzIG90aGVyIHRoYW4gZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgdGhlIFdvcmsgYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgbGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIEluIHBhcnRpY3VsYXIsIHRoZSBhY3Qgb2YgcnVubmluZyB0aGUgV29yayBpcyBub3QgcmVzdHJpY3RlZCBhbmQgbm8gcmVxdWlyZW1lbnRzIGFyZSBtYWRlIGNvbmNlcm5pbmcgYW55IG9mZmVycyBvZiBzdXBwb3J0IGZvciB0aGUgV29yay5cblxuICAgMi4gWW91IG1heSBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yayBhcyB5b3UgcmVjZWl2ZWQgaXQuIERpc3RyaWJ1dGlvbiBvZiBvbmx5IHBhcnQgb2YgdGhlIFdvcmsgaXMgY29uc2lkZXJlZCBtb2RpZmljYXRpb24gb2YgdGhlIFdvcmssIGFuZCBubyByaWdodCB0byBkaXN0cmlidXRlIHN1Y2ggYSBEZXJpdmVkIFdvcmsgbWF5IGJlIGFzc3VtZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgY2xhdXNlLlxuXG4gICAzLiBZb3UgbWF5IGRpc3RyaWJ1dGUgYSBDb21waWxlZCBXb3JrIHRoYXQgaGFzIGJlZW4gZ2VuZXJhdGVkIGZyb20gYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrIGFzIGRpc3RyaWJ1dGVkIHVuZGVyIENsYXVzZSAyIGFib3ZlLCBhcyBsb25nIGFzIHRoYXQgQ29tcGlsZWQgV29yayBpcyBkaXN0cmlidXRlZCBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIHJlY2lwaWVudHMgbWF5IGluc3RhbGwgdGhlIENvbXBpbGVkIFdvcmsgb24gdGhlaXIgc3lzdGVtIGV4YWN0bHkgYXMgaXQgd291bGQgaGF2ZSBiZWVuIGluc3RhbGxlZCBpZiB0aGV5IGdlbmVyYXRlZCBhIENvbXBpbGVkIFdvcmsgZGlyZWN0bHkgZnJvbSB0aGUgV29yay5cblxuICAgNC4gSWYgeW91IGFyZSB0aGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoZSBXb3JrLCB5b3UgbWF5LCB3aXRob3V0IHJlc3RyaWN0aW9uLCBtb2RpZnkgdGhlIFdvcmssIHRodXMgY3JlYXRpbmcgYSBEZXJpdmVkIFdvcmsuIFlvdSBtYXkgYWxzbyBkaXN0cmlidXRlIHRoZSBEZXJpdmVkIFdvcmsgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIENvbXBpbGVkIFdvcmtzIGdlbmVyYXRlZCBmcm9tIHRoZSBEZXJpdmVkIFdvcmsuIERlcml2ZWQgV29ya3MgZGlzdHJpYnV0ZWQgaW4gdGhpcyBtYW5uZXIgYnkgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBhcmUgY29uc2lkZXJlZCB0byBiZSB1cGRhdGVkIHZlcnNpb25zIG9mIHRoZSBXb3JrLlxuXG4gICA1LiBJZiB5b3UgYXJlIG5vdCB0aGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoZSBXb3JrLCB5b3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhlIFdvcmssIHRodXMgY3JlYXRpbmcgYSBEZXJpdmVkIFdvcmsgYmFzZWQgb24gdGhlIFdvcmssIGFuZCBjb21waWxlIHRoaXMgRGVyaXZlZCBXb3JrLCB0aHVzIGNyZWF0aW5nIGEgQ29tcGlsZWQgV29yayBiYXNlZCBvbiB0aGUgRGVyaXZlZCBXb3JrLlxuXG4gICA2LiBJZiB5b3UgYXJlIG5vdCB0aGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoZSBXb3JrLCB5b3UgbWF5IGRpc3RyaWJ1dGUgYSBEZXJpdmVkIFdvcmsgcHJvdmlkZWQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQgZm9yIGV2ZXJ5IGNvbXBvbmVudCBvZiB0aGUgV29yayB1bmxlc3MgdGhhdCBjb21wb25lbnQgY2xlYXJseSBzdGF0ZXMgaW4gdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpdCBpcyBleGVtcHQgZnJvbSB0aGF0IGNvbmRpdGlvbi4gT25seSB0aGUgQ3VycmVudCBNYWludGFpbmVyIGlzIGFsbG93ZWQgdG8gYWRkIHN1Y2ggc3RhdGVtZW50cyBvZiBleGVtcHRpb24gdG8gYSBjb21wb25lbnQgb2YgdGhlIFdvcmsuXG5cbiAgICAgIGEuIElmIGEgY29tcG9uZW50IG9mIHRoaXMgRGVyaXZlZCBXb3JrIGNhbiBiZSBhIGRpcmVjdCByZXBsYWNlbWVudCBmb3IgYSBjb21wb25lbnQgb2YgdGhlIFdvcmsgd2hlbiB0aGF0IGNvbXBvbmVudCBpcyB1c2VkIHdpdGggdGhlIEJhc2UgSW50ZXJwcmV0ZXIsIHRoZW4sIHdoZXJldmVyIHRoaXMgY29tcG9uZW50IG9mIHRoZSBXb3JrIGlkZW50aWZpZXMgaXRzZWxmIHRvIHRoZSB1c2VyIHdoZW4gdXNlZCBpbnRlcmFjdGl2ZWx5IHdpdGggdGhhdCBCYXNlIEludGVycHJldGVyLCB0aGUgcmVwbGFjZW1lbnQgY29tcG9uZW50IG9mIHRoaXMgRGVyaXZlZCBXb3JrIGNsZWFybHkgYW5kIHVuYW1iaWd1b3VzbHkgaWRlbnRpZmllcyBpdHNlbGYgYXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgY29tcG9uZW50IHRvIHRoZSB1c2VyIHdoZW4gdXNlZCBpbnRlcmFjdGl2ZWx5IHdpdGggdGhhdCBCYXNlIEludGVycHJldGVyLlxuXG4gICAgICBiLiBFdmVyeSBjb21wb25lbnQgb2YgdGhlIERlcml2ZWQgV29yayBjb250YWlucyBwcm9taW5lbnQgbm90aWNlcyBkZXRhaWxpbmcgdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyB0byB0aGF0IGNvbXBvbmVudCwgb3IgYSBwcm9taW5lbnQgcmVmZXJlbmNlIHRvIGFub3RoZXIgZmlsZSB0aGF0IGlzIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIERlcml2ZWQgV29yayBhbmQgdGhhdCBjb250YWlucyBhIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSBsb2cgb2YgdGhlIGNoYW5nZXMuXG5cbiAgICAgIGMuIE5vIGluZm9ybWF0aW9uIGluIHRoZSBEZXJpdmVkIFdvcmsgaW1wbGllcyB0aGF0IGFueSBwZXJzb25zLCBpbmNsdWRpbmcgKGJ1dCBub3QgbGltaXRlZCB0bykgdGhlIGF1dGhvcnMgb2YgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmssIHByb3ZpZGUgYW55IHN1cHBvcnQsIGluY2x1ZGluZyAoYnV0IG5vdCBsaW1pdGVkIHRvKSB0aGUgcmVwb3J0aW5nIGFuZCBoYW5kbGluZyBvZiBlcnJvcnMsIHRvIHJlY2lwaWVudHMgb2YgdGhlIERlcml2ZWQgV29yayB1bmxlc3MgdGhvc2UgcGVyc29ucyBoYXZlIHN0YXRlZCBleHBsaWNpdGx5IHRoYXQgdGhleSBkbyBwcm92aWRlIHN1Y2ggc3VwcG9ydCBmb3IgdGhlIERlcml2ZWQgV29yay5cblxuICAgICAgZC4gWW91IGRpc3RyaWJ1dGUgYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgd2l0aCB0aGUgRGVyaXZlZCBXb3JrOlxuXG4gICAgICAgICAxLiBBIGNvbXBsZXRlLCB1bm1vZGlmaWVkIGNvcHkgb2YgdGhlIFdvcms7IGlmIHlvdXIgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQgY29tcG9uZW50IGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgdGhlIG1vZGlmaWVkIGNvbXBvbmVudCBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBXb3JrIGZyb20gdGhlIHNhbWUgb3Igc29tZSBzaW1pbGFyIHBsYWNlIG1lZXRzIHRoaXMgY29uZGl0aW9uLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIFdvcmsgYWxvbmcgd2l0aCB0aGUgbW9kaWZpZWQgY29tcG9uZW50O1xuXG4gICAgICAgICAyLiBJbmZvcm1hdGlvbiB0aGF0IGlzIHN1ZmZpY2llbnQgdG8gb2J0YWluIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yay5cblxuICAgNy4gSWYgeW91IGFyZSBub3QgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IG1heSBkaXN0cmlidXRlIGEgQ29tcGlsZWQgV29yayBnZW5lcmF0ZWQgZnJvbSBhIERlcml2ZWQgV29yaywgYXMgbG9uZyBhcyB0aGUgRGVyaXZlZCBXb3JrIGlzIGRpc3RyaWJ1dGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBDb21waWxlZCBXb3JrLCBhbmQgYXMgbG9uZyBhcyB0aGUgY29uZGl0aW9ucyBvZiBDbGF1c2UgNiwgYWJvdmUsIGFyZSBtZXQgd2l0aCByZWdhcmQgdG8gdGhlIERlcml2ZWQgV29yay5cblxuICAgOC4gVGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG5vdCBpbnRlbmRlZCB0byBwcm9oaWJpdCwgYW5kIGhlbmNlIGRvIG5vdCBhcHBseSB0bywgdGhlIG1vZGlmaWNhdGlvbiwgYnkgYW55IG1ldGhvZCwgb2YgYW55IGNvbXBvbmVudCBzbyB0aGF0IGl0IGJlY29tZXMgaWRlbnRpY2FsIHRvIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGF0IGNvbXBvbmVudCBvZiB0aGUgV29yayBhcyBpdCBpcyBkaXN0cmlidXRlZCBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyIHVuZGVyIENsYXVzZSA0LCBhYm92ZS5cblxuICAgOS4gRGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG9yIGFueSBEZXJpdmVkIFdvcmsgaW4gYW4gYWx0ZXJuYXRpdmUgZm9ybWF0LCB3aGVyZSB0aGUgV29yayBvciB0aGF0IERlcml2ZWQgV29yayAoaW4gd2hvbGUgb3IgaW4gcGFydCkgaXMgdGhlbiBwcm9kdWNlZCBieSBhcHBseWluZyBzb21lIHByb2Nlc3MgdG8gdGhhdCBmb3JtYXQsIGRvZXMgbm90IHJlbGF4IG9yIG51bGxpZnkgYW55IHNlY3Rpb25zIG9mIHRoaXMgbGljZW5zZSBhcyB0aGV5IHBlcnRhaW4gdG8gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhhdCBwcm9jZXNzLlxuXG4gICAxMC5cblxuICAgICAgYS4gQSBEZXJpdmVkIFdvcmsgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgcHJvdmlkZWQgdGhhdCBsaWNlbnNlIGl0c2VsZiBob25vcnMgdGhlIGNvbmRpdGlvbnMgbGlzdGVkIGluIENsYXVzZSA2IGFib3ZlLCBpbiByZWdhcmQgdG8gdGhlIFdvcmssIHRob3VnaCBpdCBkb2VzIG5vdCBoYXZlIHRvIGhvbm9yIHRoZSByZXN0IG9mIHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS5cblxuICAgICAgYi4gSWYgYSBEZXJpdmVkIFdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSwgdGhhdCBEZXJpdmVkIFdvcmsgbXVzdCBwcm92aWRlIHN1ZmZpY2llbnQgZG9jdW1lbnRhdGlvbiBhcyBwYXJ0IG9mIGl0c2VsZiB0byBhbGxvdyBlYWNoIHJlY2lwaWVudCBvZiB0aGF0IERlcml2ZWQgV29yayB0byBob25vciB0aGUgcmVzdHJpY3Rpb25zIGluIENsYXVzZSA2IGFib3ZlLCBjb25jZXJuaW5nIGNoYW5nZXMgZnJvbSB0aGUgV29yay5cblxuICAgMTEuIFRoaXMgbGljZW5zZSBwbGFjZXMgbm8gcmVzdHJpY3Rpb25zIG9uIHdvcmtzIHRoYXQgYXJlIHVucmVsYXRlZCB0byB0aGUgV29yaywgbm9yIGRvZXMgdGhpcyBsaWNlbnNlIHBsYWNlIGFueSByZXN0cmljdGlvbnMgb24gYWdncmVnYXRpbmcgc3VjaCB3b3JrcyB3aXRoIHRoZSBXb3JrIGJ5IGFueSBtZWFucy5cblxuICAgMTIuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvLCBvciBtYXkgYmUgdXNlZCB0bywgcHJldmVudCBjb21wbGV0ZSBjb21wbGlhbmNlIGJ5IGFsbCBwYXJ0aWVzIHdpdGggYWxsIGFwcGxpY2FibGUgbGF3cy5cblxuTk8gV0FSUkFOVFlcblxuPT09PT09PT09PT1cblxuVGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBXb3JrLiBFeGNlcHQgd2hlbiBvdGhlcndpc2Ugc3RhdGVkIGluIHdyaXRpbmcsIHRoZSBDb3B5cmlnaHQgSG9sZGVyIHByb3ZpZGVzIHRoZSBXb3JrIGBhcyBpcycsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgV29yayBpcyB3aXRoIHlvdS4gU2hvdWxkIHRoZSBXb3JrIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZSB0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyLCBvciBjb3JyZWN0aW9uLlxuXG5JbiBubyBldmVudCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcgd2lsbCBUaGUgQ29weXJpZ2h0IEhvbGRlciwgb3IgYW55IGF1dGhvciBuYW1lZCBpbiB0aGUgY29tcG9uZW50cyBvZiB0aGUgV29yaywgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBXb3JrIGFzIHBlcm1pdHRlZCBhYm92ZSwgYmUgbGlhYmxlIHRvIHlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiBhbnkgdXNlIG9mIHRoZSBXb3JrIG9yIG91dCBvZiBpbmFiaWxpdHkgdG8gdXNlIHRoZSBXb3JrIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgbG9zcyBvZiBkYXRhLCBkYXRhIGJlaW5nIHJlbmRlcmVkIGluYWNjdXJhdGUsIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkgYW55b25lIGFzIGEgcmVzdWx0IG9mIGFueSBmYWlsdXJlIG9mIHRoZSBXb3JrIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIgcHJvZ3JhbXMpLCBldmVuIGlmIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIgcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLlxuXG5NQUlOVEVOQU5DRSBPRiBUSEUgV09SS1xuXG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgV29yayBoYXMgdGhlIHN0YXR1cyBgYXV0aG9yLW1haW50YWluZWQnIGlmIHRoZSBDb3B5cmlnaHQgSG9sZGVyIGV4cGxpY2l0bHkgYW5kIHByb21pbmVudGx5IHN0YXRlcyBuZWFyIHRoZSBwcmltYXJ5IGNvcHlyaWdodCBub3RpY2UgaW4gdGhlIFdvcmsgdGhhdCB0aGUgV29yayBjYW4gb25seSBiZSBtYWludGFpbmVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNpbXBseSB0aGF0IGl0IGlzIGBhdXRob3ItbWFpbnRhaW5lZCcuXG5cblRoZSBXb3JrIGhhcyB0aGUgc3RhdHVzIGBtYWludGFpbmVkJyBpZiB0aGVyZSBpcyBhIEN1cnJlbnQgTWFpbnRhaW5lciB3aG8gaGFzIGluZGljYXRlZCBpbiB0aGUgV29yayB0aGF0IHRoZXkgYXJlIHdpbGxpbmcgdG8gcmVjZWl2ZSBlcnJvciByZXBvcnRzIGZvciB0aGUgV29yayAoZm9yIGV4YW1wbGUsIGJ5IHN1cHBseWluZyBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzKS4gSXQgaXMgbm90IHJlcXVpcmVkIGZvciB0aGUgQ3VycmVudCBNYWludGFpbmVyIHRvIGFja25vd2xlZGdlIG9yIGFjdCB1cG9uIHRoZXNlIGVycm9yIHJlcG9ydHMuXG5cblRoZSBXb3JrIGNoYW5nZXMgZnJvbSBzdGF0dXMgYG1haW50YWluZWQnIHRvIGB1bm1haW50YWluZWQnIGlmIHRoZXJlIGlzIG5vIEN1cnJlbnQgTWFpbnRhaW5lciwgb3IgdGhlIHBlcnNvbiBzdGF0ZWQgdG8gYmUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoZSB3b3JrIGNhbm5vdCBiZSByZWFjaGVkIHRocm91Z2ggdGhlIGluZGljYXRlZCBtZWFucyBvZiBjb21tdW5pY2F0aW9uIGZvciBhIHBlcmlvZCBvZiBzaXggbW9udGhzLCBhbmQgdGhlcmUgYXJlIG5vIG90aGVyIHNpZ25pZmljYW50IHNpZ25zIG9mIGFjdGl2ZSBtYWludGVuYW5jZS5cblxuWW91IGNhbiBiZWNvbWUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yayBieSBhZ3JlZW1lbnQgd2l0aCBhbnkgZXhpc3RpbmcgQ3VycmVudCBNYWludGFpbmVyIHRvIHRha2Ugb3ZlciB0aGlzIHJvbGUuXG5cbklmIHRoZSBXb3JrIGlzIHVubWFpbnRhaW5lZCwgeW91IGNhbiBiZWNvbWUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yayB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgIDEuIE1ha2UgYSByZWFzb25hYmxlIGF0dGVtcHQgdG8gdHJhY2UgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciAoYW5kIHRoZSBDb3B5cmlnaHQgSG9sZGVyLCBpZiB0aGUgdHdvIGRpZmZlcikgdGhyb3VnaCB0aGUgbWVhbnMgb2YgYW4gSW50ZXJuZXQgb3Igc2ltaWxhciBzZWFyY2guXG5cbiAgIDIuIElmIHRoaXMgc2VhcmNoIGlzIHN1Y2Nlc3NmdWwsIHRoZW4gZW5xdWlyZSB3aGV0aGVyIHRoZSBXb3JrIGlzIHN0aWxsIG1haW50YWluZWQuXG5cbiAgICAgIGEuIElmIGl0IGlzIGJlaW5nIG1haW50YWluZWQsIHRoZW4gYXNrIHRoZSBDdXJyZW50IE1haW50YWluZXIgdG8gdXBkYXRlIHRoZWlyIGNvbW11bmljYXRpb24gZGF0YSB3aXRoaW4gb25lIG1vbnRoLlxuXG4gICAgICBiLiBJZiB0aGUgc2VhcmNoIGlzIHVuc3VjY2Vzc2Z1bCBvciBubyBhY3Rpb24gdG8gcmVzdW1lIGFjdGl2ZSBtYWludGVuYW5jZSBpcyB0YWtlbiBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyLCB0aGVuIGFubm91bmNlIHdpdGhpbiB0aGUgcGVydGluZW50IGNvbW11bml0eSB5b3VyIGludGVudGlvbiB0byB0YWtlIG92ZXIgbWFpbnRlbmFuY2UuIChJZiB0aGUgV29yayBpcyBhIExhVGVYIHdvcmssIHRoaXMgY291bGQgYmUgZG9uZSwgZm9yIGV4YW1wbGUsIGJ5IHBvc3RpbmcgdG8gY29tcC50ZXh0LnRleC4pXG5cbiAgICAgIDNhLiBJZiB0aGUgQ3VycmVudCBNYWludGFpbmVyIGlzIHJlYWNoYWJsZSBhbmQgYWdyZWVzIHRvIHBhc3MgbWFpbnRlbmFuY2Ugb2YgdGhlIFdvcmsgdG8geW91LCB0aGVuIHRoaXMgdGFrZXMgZWZmZWN0IGltbWVkaWF0ZWx5IHVwb24gYW5ub3VuY2VtZW50LlxuXG4gICAgICBiLiBJZiB0aGUgQ3VycmVudCBNYWludGFpbmVyIGlzIG5vdCByZWFjaGFibGUgYW5kIHRoZSBDb3B5cmlnaHQgSG9sZGVyIGFncmVlcyB0aGF0IG1haW50ZW5hbmNlIG9mIHRoZSBXb3JrIGJlIHBhc3NlZCB0byB5b3UsIHRoZW4gdGhpcyB0YWtlcyBlZmZlY3QgaW1tZWRpYXRlbHkgdXBvbiBhbm5vdW5jZW1lbnQuXG5cbiAgIDQuIElmIHlvdSBtYWtlIGFuIGBpbnRlbnRpb24gYW5ub3VuY2VtZW50JyBhcyBkZXNjcmliZWQgaW4gMmIuIGFib3ZlIGFuZCBhZnRlciB0aHJlZSBtb250aHMgeW91ciBpbnRlbnRpb24gaXMgY2hhbGxlbmdlZCBuZWl0aGVyIGJ5IHRoZSBDdXJyZW50IE1haW50YWluZXIgbm9yIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyIG5vciBieSBvdGhlciBwZW9wbGUsIHRoZW4geW91IG1heSBhcnJhbmdlIGZvciB0aGUgV29yayB0byBiZSBjaGFuZ2VkIHNvIGFzIHRvIG5hbWUgeW91IGFzIHRoZSAobmV3KSBDdXJyZW50IE1haW50YWluZXIuXG5cbiAgIDUuIElmIHRoZSBwcmV2aW91c2x5IHVucmVhY2hhYmxlIEN1cnJlbnQgTWFpbnRhaW5lciBiZWNvbWVzIHJlYWNoYWJsZSBvbmNlIG1vcmUgd2l0aGluIHRocmVlIG1vbnRocyBvZiBhIGNoYW5nZSBjb21wbGV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIDNiKSBvciA0KSwgdGhlbiB0aGF0IEN1cnJlbnQgTWFpbnRhaW5lciBtdXN0IGJlY29tZSBvciByZW1haW4gdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB1cG9uIHJlcXVlc3QgcHJvdmlkZWQgdGhleSB0aGVuIHVwZGF0ZSB0aGVpciBjb21tdW5pY2F0aW9uIGRhdGEgd2l0aGluIG9uZSBtb250aC5cblxuQSBjaGFuZ2UgaW4gdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBkb2VzIG5vdCwgb2YgaXRzZWxmLCBhbHRlciB0aGUgZmFjdCB0aGF0IHRoZSBXb3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMUFBMIGxpY2Vuc2UuXG5cbklmIHlvdSBiZWNvbWUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IHNob3VsZCBpbW1lZGlhdGVseSBwcm92aWRlLCB3aXRoaW4gdGhlIFdvcmssIGEgcHJvbWluZW50IGFuZCB1bmFtYmlndW91cyBzdGF0ZW1lbnQgb2YgeW91ciBzdGF0dXMgYXMgQ3VycmVudCBNYWludGFpbmVyLiBZb3Ugc2hvdWxkIGFsc28gYW5ub3VuY2UgeW91ciBuZXcgc3RhdHVzIHRvIHRoZSBzYW1lIHBlcnRpbmVudCBjb21tdW5pdHkgYXMgaW4gMmIpIGFib3ZlLlxuXG5XSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBXT1JLUyBVTkRFUiBUSElTIExJQ0VOU0VcblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoaXMgc2VjdGlvbiBjb250YWlucyBpbXBvcnRhbnQgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kIHJlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGluZyB0aGVpciB3b3JrcyB1bmRlciB0aGlzIGxpY2Vuc2UuIFRoZXNlIGF1dGhvcnMgYXJlIGFkZHJlc3NlZCBhcyBgeW91JyBpbiB0aGlzIHNlY3Rpb24uXG5cbkNob29zaW5nIFRoaXMgTGljZW5zZSBvciBBbm90aGVyIExpY2Vuc2VcblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JZiBmb3IgYW55IHBhcnQgb2YgeW91ciB3b3JrIHlvdSB3YW50IG9yIG5lZWQgdG8gdXNlICpkaXN0cmlidXRpb24qIGNvbmRpdGlvbnMgdGhhdCBkaWZmZXIgc2lnbmlmaWNhbnRseSBmcm9tIHRob3NlIGluIHRoaXMgbGljZW5zZSwgdGhlbiBkbyBub3QgcmVmZXIgdG8gdGhpcyBsaWNlbnNlIGFueXdoZXJlIGluIHlvdXIgd29yayBidXQsIGluc3RlYWQsIGRpc3RyaWJ1dGUgeW91ciB3b3JrIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UuIFlvdSBtYXkgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgbGljZW5zZSBhcyBhIG1vZGVsIGZvciB5b3VyIG93biBsaWNlbnNlLCBidXQgeW91ciBsaWNlbnNlIHNob3VsZCBub3QgcmVmZXIgdG8gdGhlIExQUEwgb3Igb3RoZXJ3aXNlIGdpdmUgdGhlIGltcHJlc3Npb24gdGhhdCB5b3VyIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwuXG5cblRoZSBkb2N1bWVudCBgbW9kZ3VpZGUudGV4JyBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZXhwbGFpbnMgdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4gSXQgZXhwbGFpbnMsIGZvciBleGFtcGxlLCB3aHkgZGlzdHJpYnV0aW5nIExhVGVYIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB3YXMgY29uc2lkZXJlZCBpbmFwcHJvcHJpYXRlLiBFdmVuIGlmIHlvdXIgd29yayBpcyB1bnJlbGF0ZWQgdG8gTGFUZVgsIHRoZSBkaXNjdXNzaW9uIGluIGBtb2RndWlkZS50ZXgnIG1heSBzdGlsbCBiZSByZWxldmFudCwgYW5kIGF1dGhvcnMgaW50ZW5kaW5nIHRvIGRpc3RyaWJ1dGUgdGhlaXIgd29ya3MgdW5kZXIgYW55IGxpY2Vuc2UgYXJlIGVuY291cmFnZWQgdG8gcmVhZCBpdC5cblxuQSBSZWNvbW1lbmRhdGlvbiBvbiBNb2RpZmljYXRpb24gV2l0aG91dCBEaXN0cmlidXRpb25cblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuSXQgaXMgd2lzZSBuZXZlciB0byBtb2RpZnkgYSBjb21wb25lbnQgb2YgdGhlIFdvcmssIGV2ZW4gZm9yIHlvdXIgb3duIHBlcnNvbmFsIHVzZSwgd2l0aG91dCBhbHNvIG1lZXRpbmcgdGhlIGFib3ZlIGNvbmRpdGlvbnMgZm9yIGRpc3RyaWJ1dGluZyB0aGUgbW9kaWZpZWQgY29tcG9uZW50LiBXaGlsZSB5b3UgbWlnaHQgaW50ZW5kIHRoYXQgc3VjaCBtb2RpZmljYXRpb25zIHdpbGwgbmV2ZXIgYmUgZGlzdHJpYnV0ZWQsIG9mdGVuIHRoaXMgd2lsbCBoYXBwZW4gYnkgYWNjaWRlbnQgLS0geW91IG1heSBmb3JnZXQgdGhhdCB5b3UgaGF2ZSBtb2RpZmllZCB0aGF0IGNvbXBvbmVudDsgb3IgaXQgbWF5IG5vdCBvY2N1ciB0byB5b3Ugd2hlbiBhbGxvd2luZyBvdGhlcnMgdG8gYWNjZXNzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIHRoYXQgeW91IGFyZSB0aHVzIGRpc3RyaWJ1dGluZyBpdCBhbmQgdmlvbGF0aW5nIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZSBpbiB3YXlzIHRoYXQgY291bGQgaGF2ZSBsZWdhbCBpbXBsaWNhdGlvbnMgYW5kLCB3b3JzZSwgY2F1c2UgcHJvYmxlbXMgZm9yIHRoZSBjb21tdW5pdHkuIEl0IGlzIHRoZXJlZm9yZSB1c3VhbGx5IGluIHlvdXIgYmVzdCBpbnRlcmVzdCB0byBrZWVwIHlvdXIgY29weSBvZiB0aGUgV29yayBpZGVudGljYWwgd2l0aCB0aGUgcHVibGljIG9uZS4gTWFueSB3b3JrcyBwcm92aWRlIHdheXMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgdGhhdCB3b3JrIHdpdGhvdXQgYWx0ZXJpbmcgYW55IG9mIGl0cyBsaWNlbnNlZCBjb21wb25lbnRzLlxuXG5Ib3cgdG8gVXNlIFRoaXMgTGljZW5zZVxuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UbyB1c2UgdGhpcyBsaWNlbnNlLCBwbGFjZSBpbiBlYWNoIG9mIHRoZSBjb21wb25lbnRzIG9mIHlvdXIgd29yayBib3RoIGFuIGV4cGxpY2l0IGNvcHlyaWdodCBub3RpY2UgaW5jbHVkaW5nIHlvdXIgbmFtZSBhbmQgdGhlIHllYXIgdGhlIHdvcmsgd2FzIGF1dGhvcmVkIGFuZC9vciBsYXN0IHN1YnN0YW50aWFsbHkgbW9kaWZpZWQuIEluY2x1ZGUgYWxzbyBhIHN0YXRlbWVudCB0aGF0IHRoZSBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiB0aGF0IGNvbXBvbmVudCBpcyBjb25zdHJhaW5lZCBieSB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuXG5cbkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgbm90aWNlIGFuZCBzdGF0ZW1lbnQ6XG5cbiUlIHBpZy5kdHhcblxuJSUgQ29weXJpZ2h0IDIwMDUgTS4gWS4gTmFtZVxuXG4lXG5cbiUgVGhpcyB3b3JrIG1heSBiZSBkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQgdW5kZXIgdGhlXG5cbiUgY29uZGl0aW9ucyBvZiB0aGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSwgZWl0aGVyIHZlcnNpb24gMS4zXG5cbiUgb2YgdGhpcyBsaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiUgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbGljZW5zZSBpcyBpblxuXG4lIGh0dHA6Ly93d3cubGF0ZXgtcHJvamVjdC5vcmcvbHBwbC50eHRcblxuJSBhbmQgdmVyc2lvbiAxLjMgb3IgbGF0ZXIgaXMgcGFydCBvZiBhbGwgZGlzdHJpYnV0aW9ucyBvZiBMYVRlWFxuXG4lIHZlcnNpb24gMjAwNS8xMi8wMSBvciBsYXRlci5cblxuJVxuXG4lIFRoaXMgd29yayBoYXMgdGhlIExQUEwgbWFpbnRlbmFuY2Ugc3RhdHVzIFwiIG1haW50YWluZWQgXCIuXG5cbiVcblxuJSBUaGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoaXMgd29yayBpcyBNLiBZLiBOYW1lIC5cblxuJVxuXG4lIFRoaXMgd29yayBjb25zaXN0cyBvZiB0aGUgZmlsZXMgcGlnLmR0eCBhbmQgcGlnLmluc1xuXG4lIGFuZCB0aGUgZGVyaXZlZCBmaWxlIHBpZy5zdHkgLlxuXG5HaXZlbiBzdWNoIGEgbm90aWNlIGFuZCBzdGF0ZW1lbnQgaW4gYSBmaWxlLCB0aGUgY29uZGl0aW9ucyBnaXZlbiBpbiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgd291bGQgYXBwbHksIHdpdGggdGhlIGBXb3JrJyByZWZlcnJpbmcgdG8gdGhlIHRocmVlIGZpbGVzIGBwaWcuZHR4JywgYHBpZy5pbnMnLCBhbmQgYHBpZy5zdHknICh0aGUgbGFzdCBiZWluZyBnZW5lcmF0ZWQgZnJvbSBgcGlnLmR0eCcgdXNpbmcgYHBpZy5pbnMnKSwgdGhlIGBCYXNlIEludGVycHJldGVyJyByZWZlcnJpbmcgdG8gYW55IGBMYVRlWC1Gb3JtYXQnLCBhbmQgYm90aCBgQ29weXJpZ2h0IEhvbGRlcicgYW5kIGBDdXJyZW50IE1haW50YWluZXInIHJlZmVycmluZyB0byB0aGUgcGVyc29uIGBNLiBZLiBOYW1lJy5cblxuSWYgeW91IGRvIG5vdCB3YW50IHRoZSBNYWludGVuYW5jZSBzZWN0aW9uIG9mIExQUEwgdG8gYXBwbHkgdG8geW91ciBXb3JrLCBjaGFuZ2UgYG1haW50YWluZWQnIGFib3ZlIGludG8gYGF1dGhvci1tYWludGFpbmVkJy4gSG93ZXZlciwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBgbWFpbnRhaW5lZCcsIGFzIHRoZSBNYWludGVuYW5jZSBzZWN0aW9uIHdhcyBhZGRlZCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB5b3VyIFdvcmsgcmVtYWlucyB1c2VmdWwgdG8gdGhlIGNvbW11bml0eSBldmVuIHdoZW4geW91IGNhbiBubyBsb25nZXIgbWFpbnRhaW4gYW5kIHN1cHBvcnQgaXQgeW91cnNlbGYuXG5cbkRlcml2ZWQgV29ya3MgVGhhdCBBcmUgTm90IFJlcGxhY2VtZW50c1xuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuU2V2ZXJhbCBjbGF1c2VzIG9mIHRoZSBMUFBMIHNwZWNpZnkgbWVhbnMgdG8gcHJvdmlkZSByZWxpYWJpbGl0eSBhbmQgc3RhYmlsaXR5IGZvciB0aGUgdXNlciBjb21tdW5pdHkuIFRoZXkgdGhlcmVmb3JlIGNvbmNlcm4gdGhlbXNlbHZlcyB3aXRoIHRoZSBjYXNlIHRoYXQgYSBEZXJpdmVkIFdvcmsgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIChjb21wYXRpYmxlIG9yIGluY29tcGF0aWJsZSkgcmVwbGFjZW1lbnQgb2YgdGhlIG9yaWdpbmFsIFdvcmsuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlIChlLmcuLCBpZiBhIGZldyBsaW5lcyBvZiBjb2RlIGFyZSByZXVzZWQgZm9yIGEgY29tcGxldGVseSBkaWZmZXJlbnQgdGFzayksIHRoZW4gY2xhdXNlcyA2YiBhbmQgNmQgc2hhbGwgbm90IGFwcGx5LlxuXG5JbXBvcnRhbnQgUmVjb21tZW5kYXRpb25zXG5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuRGVmaW5pbmcgV2hhdCBDb25zdGl0dXRlcyB0aGUgV29ya1xuXG5UaGUgTFBQTCByZXF1aXJlcyB0aGF0IGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFdvcmsgY29udGFpbiBhbGwgdGhlIGZpbGVzIG9mIHRoZSBXb3JrLiBJdCBpcyB0aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgeW91IHByb3ZpZGUgYSB3YXkgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hpY2ggZmlsZXMgY29uc3RpdHV0ZSB0aGUgV29yay4gVGhpcyBjb3VsZCwgZm9yIGV4YW1wbGUsIGJlIGFjaGlldmVkIGJ5IGV4cGxpY2l0bHkgbGlzdGluZyBhbGwgdGhlIGZpbGVzIG9mIHRoZSBXb3JrIG5lYXIgdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgZWFjaCBmaWxlIG9yIGJ5IHVzaW5nIGEgbGluZSBzdWNoIGFzOlxuXG4lIFRoaXMgd29yayBjb25zaXN0cyBvZiBhbGwgZmlsZXMgbGlzdGVkIGluIG1hbmlmZXN0LnR4dC5cblxuaW4gdGhhdCBwbGFjZS4gSW4gdGhlIGFic2VuY2Ugb2YgYW4gdW5lcXVpdm9jYWwgbGlzdCBpdCBtaWdodCBiZSBpbXBvc3NpYmxlIGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgY29uc2lkZXJlZCBieSB5b3UgdG8gY29tcHJpc2UgdGhlIFdvcmsgYW5kLCBpbiBzdWNoIGEgY2FzZSwgdGhlIGxpY2Vuc2VlIHdvdWxkIGJlIGVudGl0bGVkIHRvIG1ha2UgcmVhc29uYWJsZSBjb25qZWN0dXJlcyBhcyB0byB3aGljaCBmaWxlcyBjb21wcmlzZSB0aGUgV29yay4iXSwibGljZW5zZUlkcyI6WyJMUFBMLTEuM2MiXSwia2V5d29yZHMiOlsidmVyc2lvbiAxIDNjIiwiMSAzYyAyMDA4IiwiM2MgMjAwOCAwNSIsIjIwMDggMDUgMDQiLCIwNSAwNCBjb3B5cmlnaHQiLCIwNCBjb3B5cmlnaHQgMTk5OSIsIjE5OTkgMjAwMiAyMDA4IiwiMjAwMiAyMDA4IGxhdGV4MyIsIjIwMDggbGF0ZXgzIHByb2plY3QiLCJ3aGljaCB0aGUgbGF0ZXgiLCJwYWNrYWdlIGJ1dCBpdCIsImJ1dCBpdCBpcyIsIml0IGlzIHdyaXR0ZW4iLCJ3cml0dGVuIGluIHN1Y2giLCJsYXRleCBmb3JtYXQgb3IiLCJmb3JtYXQgb3IgaW4iLCJjYXNlIG9mIGZpbGVzIiwib2YgZmlsZXMgYmVsb25naW5nIiwiZmlsZXMgYmVsb25naW5nIHRvIiwidG8gdGhlIGxhdGV4IiwidGhlIGxhdGV4IGZvcm1hdCIsImxhdGV4IGZvcm1hdCBhIiwiZm9ybWF0IGEgcHJvZ3JhbSIsImEgcHJvZ3JhbSBpbXBsZW1lbnRpbmciLCJwcm9ncmFtIGltcGxlbWVudGluZyB0aGUiLCJpbXBsZW1lbnRpbmcgdGhlIHRleCIsInRoZSB0ZXggbGFuZ3VhZ2UiLCJ0ZXggbGFuZ3VhZ2UgY29uZGl0aW9ucyIsImxhbmd1YWdlIGNvbmRpdGlvbnMgb24iLCJkaWZmZXJlbnQgbGljZW5zZSB0aGF0Iiwic2ltcGx5IHRoYXQgaXQiLCJpdCBpcyBhdXRob3IiLCJkdHggY29weXJpZ2h0IDIwMDUiLCJjb3B5cmlnaHQgMjAwNSBtIiwiMjAwNSBtIHkiLCJsYXRleCB2ZXJzaW9uIDIwMDUiLCJ2ZXJzaW9uIDIwMDUgMTIiLCIyMDA1IDEyIDAxIiwic3RhdHVzIG1haW50YWluZWQgdGhlIiwibWFpbnRhaW5lZCB0aGUgY3VycmVudCIsIml0IHlvdXJzZWxmIGRlcml2ZWQiLCJ5b3Vyc2VsZiBkZXJpdmVkIHdvcmtzIiwiZGVyaXZlZCB3b3JrcyB0aGF0IiwiYXJlIG5vdCByZXBsYWNlbWVudHMiLCJub3QgcmVwbGFjZW1lbnRzIHNldmVyYWwiLCJyZXBsYWNlbWVudHMgc2V2ZXJhbCBjbGF1c2VzIiwic2V2ZXJhbCBjbGF1c2VzIG9mIiwiY2xhdXNlcyBvZiB0aGUiLCJ0aGUgbHBwbCBzcGVjaWZ5IiwibHBwbCBzcGVjaWZ5IG1lYW5zIiwic3BlY2lmeSBtZWFucyB0byIsInRvIHByb3ZpZGUgcmVsaWFiaWxpdHkiLCJwcm92aWRlIHJlbGlhYmlsaXR5IGFuZCIsInJlbGlhYmlsaXR5IGFuZCBzdGFiaWxpdHkiLCJhbmQgc3RhYmlsaXR5IGZvciIsInN0YWJpbGl0eSBmb3IgdGhlIiwidGhlIHVzZXIgY29tbXVuaXR5IiwidXNlciBjb21tdW5pdHkgdGhleSIsImNvbW11bml0eSB0aGV5IHRoZXJlZm9yZSIsInRoZXkgdGhlcmVmb3JlIGNvbmNlcm4iLCJ0aGVyZWZvcmUgY29uY2VybiB0aGVtc2VsdmVzIiwiY29uY2VybiB0aGVtc2VsdmVzIHdpdGgiLCJ0aGVtc2VsdmVzIHdpdGggdGhlIiwid2l0aCB0aGUgY2FzZSIsInRoZSBjYXNlIHRoYXQiLCJjYXNlIHRoYXQgYSIsInRoYXQgYSBkZXJpdmVkIiwid29yayBpcyBpbnRlbmRlZCIsImJlIHVzZWQgYXMiLCJhcyBhIGNvbXBhdGlibGUiLCJhIGNvbXBhdGlibGUgb3IiLCJjb21wYXRpYmxlIG9yIGluY29tcGF0aWJsZSIsIm9yIGluY29tcGF0aWJsZSByZXBsYWNlbWVudCIsImluY29tcGF0aWJsZSByZXBsYWNlbWVudCBvZiIsIm9yaWdpbmFsIHdvcmsgaWYiLCJub3QgdGhlIGNhc2UiLCJ0aGUgY2FzZSBlIiwiY2FzZSBlIGciLCJlIGcgaWYiLCJnIGlmIGEiLCJpZiBhIGZldyIsIm9mIGNvZGUgYXJlIiwiY29kZSBhcmUgcmV1c2VkIiwiYXJlIHJldXNlZCBmb3IiLCJyZXVzZWQgZm9yIGEiLCJmb3IgYSBjb21wbGV0ZWx5IiwiYSBjb21wbGV0ZWx5IGRpZmZlcmVudCIsImNvbXBsZXRlbHkgZGlmZmVyZW50IHRhc2siLCJkaWZmZXJlbnQgdGFzayB0aGVuIiwidGFzayB0aGVuIGNsYXVzZXMiLCJ0aGVuIGNsYXVzZXMgNmIiLCJjbGF1c2VzIDZiIGFuZCIsIjZiIGFuZCA2ZCIsImFuZCA2ZCBzaGFsbCIsIjZkIHNoYWxsIG5vdCIsIm5vdCBhcHBseSBpbXBvcnRhbnQiLCJhcHBseSBpbXBvcnRhbnQgcmVjb21tZW5kYXRpb25zIiwibHBwbCB2ZXJzaW9uIDEgM2MiLCJ2ZXJzaW9uIDEgM2MgMjAwOCIsIjEgM2MgMjAwOCAwNSIsIjNjIDIwMDggMDUgMDQiLCIyMDA4IDA1IDA0IGNvcHlyaWdodCIsIjA1IDA0IGNvcHlyaWdodCAxOTk5IiwiMDQgY29weXJpZ2h0IDE5OTkgMjAwMiIsImNvcHlyaWdodCAxOTk5IDIwMDIgMjAwOCIsIjE5OTkgMjAwMiAyMDA4IGxhdGV4MyIsIjIwMDIgMjAwOCBsYXRleDMgcHJvamVjdCIsIjIwMDggbGF0ZXgzIHByb2plY3QgZXZlcnlvbmUiLCJ1bmRlciB3aGljaCB0aGUgbGF0ZXgiLCJ3aGljaCB0aGUgbGF0ZXgga2VybmVsIiwibGF0ZXggcGFja2FnZSBidXQgaXQiLCJwYWNrYWdlIGJ1dCBpdCBpcyIsImJ1dCBpdCBpcyB3cml0dGVuIiwiaXQgaXMgd3JpdHRlbiBpbiIsImlzIHdyaXR0ZW4gaW4gc3VjaCIsIndyaXR0ZW4gaW4gc3VjaCBhIiwiYSB3YXkgdGhhdCB5b3UiLCJ3YXkgdGhhdCB5b3UgY2FuIiwidGhhdCB5b3UgY2FuIHVzZSIsImNhbiB1c2UgaXQgZXZlbiIsImEgbGF0ZXggZm9ybWF0IG9yIiwibGF0ZXggZm9ybWF0IG9yIGluIiwiZm9ybWF0IG9yIGluIHRoZSIsInRoZSBjYXNlIG9mIGZpbGVzIiwiY2FzZSBvZiBmaWxlcyBiZWxvbmdpbmciLCJvZiBmaWxlcyBiZWxvbmdpbmcgdG8iLCJmaWxlcyBiZWxvbmdpbmcgdG8gdGhlIiwiYmVsb25naW5nIHRvIHRoZSBsYXRleCIsInRvIHRoZSBsYXRleCBmb3JtYXQiLCJ0aGUgbGF0ZXggZm9ybWF0IGEiLCJsYXRleCBmb3JtYXQgYSBwcm9ncmFtIiwiZm9ybWF0IGEgcHJvZ3JhbSBpbXBsZW1lbnRpbmciLCJhIHByb2dyYW0gaW1wbGVtZW50aW5nIHRoZSIsInByb2dyYW0gaW1wbGVtZW50aW5nIHRoZSB0ZXgiLCJpbXBsZW1lbnRpbmcgdGhlIHRleCBsYW5ndWFnZSIsInRoZSB0ZXggbGFuZ3VhZ2UgY29uZGl0aW9ucyIsInRleCBsYW5ndWFnZSBjb25kaXRpb25zIG9uIiwibGFuZ3VhZ2UgY29uZGl0aW9ucyBvbiBkaXN0cmlidXRpb24iLCJpcyBkaXN0cmlidXRlZCB1bmRlciBhIiwiYSBkaWZmZXJlbnQgbGljZW5zZSB0aGF0IiwiZGlmZmVyZW50IGxpY2Vuc2UgdGhhdCBkZXJpdmVkIiwib3Igc2ltcGx5IHRoYXQgaXQiLCJzaW1wbHkgdGhhdCBpdCBpcyIsInRoYXQgaXQgaXMgYXV0aG9yIiwiaXQgaXMgYXV0aG9yIG1haW50YWluZWQiLCJwaWcgZHR4IGNvcHlyaWdodCAyMDA1IiwiZHR4IGNvcHlyaWdodCAyMDA1IG0iLCJjb3B5cmlnaHQgMjAwNSBtIHkiLCIyMDA1IG0geSBuYW1lIiwib2YgbGF0ZXggdmVyc2lvbiAyMDA1IiwibGF0ZXggdmVyc2lvbiAyMDA1IDEyIiwidmVyc2lvbiAyMDA1IDEyIDAxIiwiMjAwNSAxMiAwMSBvciIsIm1haW50ZW5hbmNlIHN0YXR1cyBtYWludGFpbmVkIHRoZSIsInN0YXR1cyBtYWludGFpbmVkIHRoZSBjdXJyZW50IiwibWFpbnRhaW5lZCB0aGUgY3VycmVudCBtYWludGFpbmVyIiwic3VwcG9ydCBpdCB5b3Vyc2VsZiBkZXJpdmVkIiwiaXQgeW91cnNlbGYgZGVyaXZlZCB3b3JrcyIsInlvdXJzZWxmIGRlcml2ZWQgd29ya3MgdGhhdCIsImRlcml2ZWQgd29ya3MgdGhhdCBhcmUiLCJ3b3JrcyB0aGF0IGFyZSBub3QiLCJ0aGF0IGFyZSBub3QgcmVwbGFjZW1lbnRzIiwiYXJlIG5vdCByZXBsYWNlbWVudHMgc2V2ZXJhbCIsIm5vdCByZXBsYWNlbWVudHMgc2V2ZXJhbCBjbGF1c2VzIiwicmVwbGFjZW1lbnRzIHNldmVyYWwgY2xhdXNlcyBvZiIsInNldmVyYWwgY2xhdXNlcyBvZiB0aGUiLCJjbGF1c2VzIG9mIHRoZSBscHBsIiwib2YgdGhlIGxwcGwgc3BlY2lmeSIsInRoZSBscHBsIHNwZWNpZnkgbWVhbnMiLCJscHBsIHNwZWNpZnkgbWVhbnMgdG8iLCJzcGVjaWZ5IG1lYW5zIHRvIHByb3ZpZGUiLCJtZWFucyB0byBwcm92aWRlIHJlbGlhYmlsaXR5IiwidG8gcHJvdmlkZSByZWxpYWJpbGl0eSBhbmQiLCJwcm92aWRlIHJlbGlhYmlsaXR5IGFuZCBzdGFiaWxpdHkiLCJyZWxpYWJpbGl0eSBhbmQgc3RhYmlsaXR5IGZvciIsImFuZCBzdGFiaWxpdHkgZm9yIHRoZSIsInN0YWJpbGl0eSBmb3IgdGhlIHVzZXIiLCJmb3IgdGhlIHVzZXIgY29tbXVuaXR5IiwidGhlIHVzZXIgY29tbXVuaXR5IHRoZXkiLCJ1c2VyIGNvbW11bml0eSB0aGV5IHRoZXJlZm9yZSIsImNvbW11bml0eSB0aGV5IHRoZXJlZm9yZSBjb25jZXJuIiwidGhleSB0aGVyZWZvcmUgY29uY2VybiB0aGVtc2VsdmVzIiwidGhlcmVmb3JlIGNvbmNlcm4gdGhlbXNlbHZlcyB3aXRoIiwiY29uY2VybiB0aGVtc2VsdmVzIHdpdGggdGhlIiwidGhlbXNlbHZlcyB3aXRoIHRoZSBjYXNlIiwid2l0aCB0aGUgY2FzZSB0aGF0IiwidGhlIGNhc2UgdGhhdCBhIiwiY2FzZSB0aGF0IGEgZGVyaXZlZCIsInRoYXQgYSBkZXJpdmVkIHdvcmsiLCJkZXJpdmVkIHdvcmsgaXMgaW50ZW5kZWQiLCJ3b3JrIGlzIGludGVuZGVkIHRvIiwidG8gYmUgdXNlZCBhcyIsImJlIHVzZWQgYXMgYSIsInVzZWQgYXMgYSBjb21wYXRpYmxlIiwiYXMgYSBjb21wYXRpYmxlIG9yIiwiYSBjb21wYXRpYmxlIG9yIGluY29tcGF0aWJsZSIsImNvbXBhdGlibGUgb3IgaW5jb21wYXRpYmxlIHJlcGxhY2VtZW50Iiwib3IgaW5jb21wYXRpYmxlIHJlcGxhY2VtZW50IG9mIiwiaW5jb21wYXRpYmxlIHJlcGxhY2VtZW50IG9mIHRoZSIsInJlcGxhY2VtZW50IG9mIHRoZSBvcmlnaW5hbCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgS2FybCBCZXJyeS5cblxuQ29weXJpZ2h0IChDKSAxOTg4LCAxOTk0LCAyMDA3IFN0ZXBoZW4gR2lsbW9yZS5cblxuQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2IFRvcnN0ZW4gTWFydGluc2VuLlxuXG5QZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBtYW51YWwgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXJlIHByZXNlcnZlZCBvbiBhbGwgY29waWVzLlxuXG5QZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIG1hbnVhbCB1bmRlciB0aGUgY29uZGl0aW9ucyBmb3IgdmVyYmF0aW0gY29weWluZywgcHJvdmlkZWQgdGhhdCB0aGUgZW50aXJlIHJlc3VsdGluZyBkZXJpdmVkIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEgcGVybWlzc2lvbiBub3RpY2UgaWRlbnRpY2FsIHRvIHRoaXMgb25lLlxuXG5QZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhpcyBtYW51YWwgaW50byBhbm90aGVyIGxhbmd1YWdlLCB1bmRlciB0aGUgYWJvdmUgY29uZGl0aW9ucyBmb3IgbW9kaWZpZWQgdmVyc2lvbnMuIl0sImxpY2Vuc2VJZHMiOlsiTGF0ZXgyZSJdLCJrZXl3b3JkcyI6WyJjIDIwMDcgMjAwOCIsIjIwMDcgMjAwOCAyMDA5IiwiMjAwOCAyMDA5IDIwMTAiLCIyMDA5IDIwMTAga2FybCIsIjIwMTAga2FybCBiZXJyeSIsImthcmwgYmVycnkgY29weXJpZ2h0IiwiYmVycnkgY29weXJpZ2h0IGMiLCJjIDE5ODggMTk5NCIsIjE5ODggMTk5NCAyMDA3IiwiMTk5NCAyMDA3IHN0ZXBoZW4iLCIyMDA3IHN0ZXBoZW4gZ2lsbW9yZSIsInN0ZXBoZW4gZ2lsbW9yZSBjb3B5cmlnaHQiLCJnaWxtb3JlIGNvcHlyaWdodCBjIiwiMTk5NCAxOTk1IDE5OTYiLCIxOTk1IDE5OTYgdG9yc3RlbiIsIjE5OTYgdG9yc3RlbiBtYXJ0aW5zZW4iLCJ0b3JzdGVuIG1hcnRpbnNlbiBwZXJtaXNzaW9uIiwibWFydGluc2VuIHBlcm1pc3Npb24gaXMiLCJ0aGlzIG1hbnVhbCBwcm92aWRlZCIsIm1hbnVhbCBwcm92aWRlZCB0aGUiLCJ0aGlzIG1hbnVhbCB1bmRlciIsIm1hbnVhbCB1bmRlciB0aGUiLCJ0aGlzIG9uZSBwZXJtaXNzaW9uIiwib25lIHBlcm1pc3Npb24gaXMiLCJhbmQgZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMiLCJ0cmFuc2xhdGlvbnMgb2YgdGhpcyIsInRoaXMgbWFudWFsIGludG8iLCJtYW51YWwgaW50byBhbm90aGVyIiwiYW5vdGhlciBsYW5ndWFnZSB1bmRlciIsImxhbmd1YWdlIHVuZGVyIHRoZSIsImNvbmRpdGlvbnMgZm9yIG1vZGlmaWVkIiwiY29weXJpZ2h0IGMgMjAwNyAyMDA4IiwiYyAyMDA3IDIwMDggMjAwOSIsIjIwMDcgMjAwOCAyMDA5IDIwMTAiLCIyMDA4IDIwMDkgMjAxMCBrYXJsIiwiMjAwOSAyMDEwIGthcmwgYmVycnkiLCIyMDEwIGthcmwgYmVycnkgY29weXJpZ2h0Iiwia2FybCBiZXJyeSBjb3B5cmlnaHQgYyIsImJlcnJ5IGNvcHlyaWdodCBjIDE5ODgiLCJjb3B5cmlnaHQgYyAxOTg4IDE5OTQiLCJjIDE5ODggMTk5NCAyMDA3IiwiMTk4OCAxOTk0IDIwMDcgc3RlcGhlbiIsIjE5OTQgMjAwNyBzdGVwaGVuIGdpbG1vcmUiLCIyMDA3IHN0ZXBoZW4gZ2lsbW9yZSBjb3B5cmlnaHQiLCJzdGVwaGVuIGdpbG1vcmUgY29weXJpZ2h0IGMiLCJnaWxtb3JlIGNvcHlyaWdodCBjIDE5OTQiLCJjIDE5OTQgMTk5NSAxOTk2IiwiMTk5NCAxOTk1IDE5OTYgdG9yc3RlbiIsIjE5OTUgMTk5NiB0b3JzdGVuIG1hcnRpbnNlbiIsIjE5OTYgdG9yc3RlbiBtYXJ0aW5zZW4gcGVybWlzc2lvbiIsInRvcnN0ZW4gbWFydGluc2VuIHBlcm1pc3Npb24gaXMiLCJtYXJ0aW5zZW4gcGVybWlzc2lvbiBpcyBncmFudGVkIiwiY29waWVzIG9mIHRoaXMgbWFudWFsIiwib2YgdGhpcyBtYW51YWwgcHJvdmlkZWQiLCJ0aGlzIG1hbnVhbCBwcm92aWRlZCB0aGUiLCJtYW51YWwgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCIsInZlcnNpb25zIG9mIHRoaXMgbWFudWFsIiwib2YgdGhpcyBtYW51YWwgdW5kZXIiLCJ0aGlzIG1hbnVhbCB1bmRlciB0aGUiLCJtYW51YWwgdW5kZXIgdGhlIGNvbmRpdGlvbnMiLCJ0byB0aGlzIG9uZSBwZXJtaXNzaW9uIiwidGhpcyBvbmUgcGVybWlzc2lvbiBpcyIsIm9uZSBwZXJtaXNzaW9uIGlzIGdyYW50ZWQiLCJjb3B5IGFuZCBkaXN0cmlidXRlIHRyYW5zbGF0aW9ucyIsImFuZCBkaXN0cmlidXRlIHRyYW5zbGF0aW9ucyBvZiIsImRpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoaXMiLCJ0cmFuc2xhdGlvbnMgb2YgdGhpcyBtYW51YWwiLCJvZiB0aGlzIG1hbnVhbCBpbnRvIiwidGhpcyBtYW51YWwgaW50byBhbm90aGVyIiwibWFudWFsIGludG8gYW5vdGhlciBsYW5ndWFnZSIsImludG8gYW5vdGhlciBsYW5ndWFnZSB1bmRlciIsImFub3RoZXIgbGFuZ3VhZ2UgdW5kZXIgdGhlIiwibGFuZ3VhZ2UgdW5kZXIgdGhlIGFib3ZlIiwidW5kZXIgdGhlIGFib3ZlIGNvbmRpdGlvbnMiLCJhYm92ZSBjb25kaXRpb25zIGZvciBtb2RpZmllZCIsImNvbmRpdGlvbnMgZm9yIG1vZGlmaWVkIHZlcnNpb25zIiwiY29weXJpZ2h0IGMgMjAwNyAyMDA4IDIwMDkiLCJjIDIwMDcgMjAwOCAyMDA5IDIwMTAiLCIyMDA3IDIwMDggMjAwOSAyMDEwIGthcmwiLCIyMDA4IDIwMDkgMjAxMCBrYXJsIGJlcnJ5IiwiMjAwOSAyMDEwIGthcmwgYmVycnkgY29weXJpZ2h0IiwiMjAxMCBrYXJsIGJlcnJ5IGNvcHlyaWdodCBjIiwia2FybCBiZXJyeSBjb3B5cmlnaHQgYyAxOTg4IiwiYmVycnkgY29weXJpZ2h0IGMgMTk4OCAxOTk0IiwiY29weXJpZ2h0IGMgMTk4OCAxOTk0IDIwMDciLCJjIDE5ODggMTk5NCAyMDA3IHN0ZXBoZW4iLCIxOTg4IDE5OTQgMjAwNyBzdGVwaGVuIGdpbG1vcmUiLCIxOTk0IDIwMDcgc3RlcGhlbiBnaWxtb3JlIGNvcHlyaWdodCIsIjIwMDcgc3RlcGhlbiBnaWxtb3JlIGNvcHlyaWdodCBjIiwic3RlcGhlbiBnaWxtb3JlIGNvcHlyaWdodCBjIDE5OTQiLCJnaWxtb3JlIGNvcHlyaWdodCBjIDE5OTQgMTk5NSIsImNvcHlyaWdodCBjIDE5OTQgMTk5NSAxOTk2IiwiYyAxOTk0IDE5OTUgMTk5NiB0b3JzdGVuIiwiMTk5NCAxOTk1IDE5OTYgdG9yc3RlbiBtYXJ0aW5zZW4iLCIxOTk1IDE5OTYgdG9yc3RlbiBtYXJ0aW5zZW4gcGVybWlzc2lvbiIsIjE5OTYgdG9yc3RlbiBtYXJ0aW5zZW4gcGVybWlzc2lvbiBpcyIsInRvcnN0ZW4gbWFydGluc2VuIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCIsIm1hcnRpbnNlbiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8iLCJ2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBtYW51YWwiLCJjb3BpZXMgb2YgdGhpcyBtYW51YWwgcHJvdmlkZWQiLCJvZiB0aGlzIG1hbnVhbCBwcm92aWRlZCB0aGUiLCJ0aGlzIG1hbnVhbCBwcm92aWRlZCB0aGUgY29weXJpZ2h0IiwibWFudWFsIHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlIiwibW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBtYW51YWwiLCJ2ZXJzaW9ucyBvZiB0aGlzIG1hbnVhbCB1bmRlciIsIm9mIHRoaXMgbWFudWFsIHVuZGVyIHRoZSIsInRoaXMgbWFudWFsIHVuZGVyIHRoZSBjb25kaXRpb25zIiwibWFudWFsIHVuZGVyIHRoZSBjb25kaXRpb25zIGZvciIsImlkZW50aWNhbCB0byB0aGlzIG9uZSBwZXJtaXNzaW9uIiwidG8gdGhpcyBvbmUgcGVybWlzc2lvbiBpcyIsInRoaXMgb25lIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCIsIm9uZSBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8iLCJ0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRyYW5zbGF0aW9ucyIsImNvcHkgYW5kIGRpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIiwiYW5kIGRpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoaXMiLCJkaXN0cmlidXRlIHRyYW5zbGF0aW9ucyBvZiB0aGlzIG1hbnVhbCIsInRyYW5zbGF0aW9ucyBvZiB0aGlzIG1hbnVhbCBpbnRvIiwib2YgdGhpcyBtYW51YWwgaW50byBhbm90aGVyIiwidGhpcyBtYW51YWwgaW50byBhbm90aGVyIGxhbmd1YWdlIiwibWFudWFsIGludG8gYW5vdGhlciBsYW5ndWFnZSB1bmRlciIsImludG8gYW5vdGhlciBsYW5ndWFnZSB1bmRlciB0aGUiLCJhbm90aGVyIGxhbmd1YWdlIHVuZGVyIHRoZSBhYm92ZSIsImxhbmd1YWdlIHVuZGVyIHRoZSBhYm92ZSBjb25kaXRpb25zIiwidW5kZXIgdGhlIGFib3ZlIGNvbmRpdGlvbnMgZm9yIiwidGhlIGFib3ZlIGNvbmRpdGlvbnMgZm9yIG1vZGlmaWVkIiwiYWJvdmUgY29uZGl0aW9ucyBmb3IgbW9kaWZpZWQgdmVyc2lvbnMiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChDKSAyMDAxIExlcHRvbmljYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgd2l0aCBOTyBXQVJSQU5UWSBPRiBBTlkgS0lORC5cblxuTm8gYXV0aG9yIG9yIGRpc3RyaWJ1dG9yIGFjY2VwdHMgcmVzcG9uc2liaWxpdHkgdG8gYW55b25lIGZvciB0aGUgY29uc2VxdWVuY2VzIG9mIHVzaW5nIHRoaXMgc29mdHdhcmUsIG9yIGZvciB3aGV0aGVyIGl0IHNlcnZlcyBhbnkgcGFydGljdWxhciBwdXJwb3NlIG9yIHdvcmtzIGF0IGFsbCwgdW5sZXNzIGhlIG9yIHNoZSBzYXlzIHNvIGluIHdyaXRpbmcuIEV2ZXJ5b25lIGlzIGdyYW50ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGlzIHNvdXJjZSBjb2RlLCBmb3IgY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCBwdXJwb3Nlcywgd2l0aCB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcblxuICAgKDEpIHRoZSBvcmlnaW4gb2YgdGhpcyBzb3VyY2UgY29kZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDtcblxuICAgKDIpIG1vZGlmaWVkIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaDsgYW5kXG5cbiAgICgzKSB0aGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2Ugb3IgbW9kaWZpZWQgc291cmNlIGRpc3RyaWJ1dGlvbi4iXSwibGljZW5zZUlkcyI6WyJMZXB0b25pY2EiXSwia2V5d29yZHMiOlsiYyAyMDAxIGxlcHRvbmljYSIsIjIwMDEgbGVwdG9uaWNhIGFsbCIsImxlcHRvbmljYSBhbGwgcmlnaHRzIiwidXNlZnVsIGJ1dCB3aXRoIiwiYnV0IHdpdGggbm8iLCJhbnkga2luZCBubyIsImtpbmQgbm8gYXV0aG9yIiwic29mdHdhcmUgb3IgZm9yIiwidW5sZXNzIGhlIG9yIiwib3Igc2hlIHNheXMiLCJzaGUgc2F5cyBzbyIsImFuZCByZWRpc3RyaWJ1dGUgdGhpcyIsInJlZGlzdHJpYnV0ZSB0aGlzIHNvdXJjZSIsImNvbW1lcmNpYWwgcHVycG9zZXMgd2l0aCIsInB1cnBvc2VzIHdpdGggdGhlIiwibWlzcmVwcmVzZW50ZWQgMiBtb2RpZmllZCIsIjIgbW9kaWZpZWQgdmVyc2lvbnMiLCJtb2RpZmllZCB2ZXJzaW9ucyBtdXN0Iiwic3VjaCBhbmQgMyIsImFuZCAzIHRoaXMiLCJvciBtb2RpZmllZCBzb3VyY2UiLCJtb2RpZmllZCBzb3VyY2UgZGlzdHJpYnV0aW9uIiwiY29weXJpZ2h0IGMgMjAwMSBsZXB0b25pY2EiLCJjIDIwMDEgbGVwdG9uaWNhIGFsbCIsIjIwMDEgbGVwdG9uaWNhIGFsbCByaWdodHMiLCJsZXB0b25pY2EgYWxsIHJpZ2h0cyByZXNlcnZlZCIsImJlIHVzZWZ1bCBidXQgd2l0aCIsInVzZWZ1bCBidXQgd2l0aCBubyIsImJ1dCB3aXRoIG5vIHdhcnJhbnR5Iiwib2YgYW55IGtpbmQgbm8iLCJhbnkga2luZCBubyBhdXRob3IiLCJraW5kIG5vIGF1dGhvciBvciIsIm9mIHVzaW5nIHRoaXMgc29mdHdhcmUiLCJ1c2luZyB0aGlzIHNvZnR3YXJlIG9yIiwidGhpcyBzb2Z0d2FyZSBvciBmb3IiLCJzb2Z0d2FyZSBvciBmb3Igd2hldGhlciIsImFsbCB1bmxlc3MgaGUgb3IiLCJ1bmxlc3MgaGUgb3Igc2hlIiwiaGUgb3Igc2hlIHNheXMiLCJvciBzaGUgc2F5cyBzbyIsInNoZSBzYXlzIHNvIGluIiwibW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhpcyIsImFuZCByZWRpc3RyaWJ1dGUgdGhpcyBzb3VyY2UiLCJyZWRpc3RyaWJ1dGUgdGhpcyBzb3VyY2UgY29kZSIsInRoaXMgc291cmNlIGNvZGUgZm9yIiwic291cmNlIGNvZGUgZm9yIGNvbW1lcmNpYWwiLCJub24gY29tbWVyY2lhbCBwdXJwb3NlcyB3aXRoIiwiY29tbWVyY2lhbCBwdXJwb3NlcyB3aXRoIHRoZSIsInB1cnBvc2VzIHdpdGggdGhlIGZvbGxvd2luZyIsIndpdGggdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMiLCJiZSBtaXNyZXByZXNlbnRlZCAyIG1vZGlmaWVkIiwibWlzcmVwcmVzZW50ZWQgMiBtb2RpZmllZCB2ZXJzaW9ucyIsIjIgbW9kaWZpZWQgdmVyc2lvbnMgbXVzdCIsIm1vZGlmaWVkIHZlcnNpb25zIG11c3QgYmUiLCJhcyBzdWNoIGFuZCAzIiwic3VjaCBhbmQgMyB0aGlzIiwiYW5kIDMgdGhpcyBub3RpY2UiLCJhbnkgc291cmNlIG9yIG1vZGlmaWVkIiwic291cmNlIG9yIG1vZGlmaWVkIHNvdXJjZSIsIm9yIG1vZGlmaWVkIHNvdXJjZSBkaXN0cmlidXRpb24iLCJjb3B5cmlnaHQgYyAyMDAxIGxlcHRvbmljYSBhbGwiLCJjIDIwMDEgbGVwdG9uaWNhIGFsbCByaWdodHMiLCIyMDAxIGxlcHRvbmljYSBhbGwgcmlnaHRzIHJlc2VydmVkIiwibGVwdG9uaWNhIGFsbCByaWdodHMgcmVzZXJ2ZWQgdGhpcyIsInJlc2VydmVkIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQiLCJ3aWxsIGJlIHVzZWZ1bCBidXQgd2l0aCIsImJlIHVzZWZ1bCBidXQgd2l0aCBubyIsInVzZWZ1bCBidXQgd2l0aCBubyB3YXJyYW50eSIsImJ1dCB3aXRoIG5vIHdhcnJhbnR5IG9mIiwid2FycmFudHkgb2YgYW55IGtpbmQgbm8iLCJvZiBhbnkga2luZCBubyBhdXRob3IiLCJhbnkga2luZCBubyBhdXRob3Igb3IiLCJraW5kIG5vIGF1dGhvciBvciBkaXN0cmlidXRvciIsImNvbnNlcXVlbmNlcyBvZiB1c2luZyB0aGlzIHNvZnR3YXJlIiwib2YgdXNpbmcgdGhpcyBzb2Z0d2FyZSBvciIsInVzaW5nIHRoaXMgc29mdHdhcmUgb3IgZm9yIiwidGhpcyBzb2Z0d2FyZSBvciBmb3Igd2hldGhlciIsInNvZnR3YXJlIG9yIGZvciB3aGV0aGVyIGl0IiwiYXQgYWxsIHVubGVzcyBoZSBvciIsImFsbCB1bmxlc3MgaGUgb3Igc2hlIiwidW5sZXNzIGhlIG9yIHNoZSBzYXlzIiwiaGUgb3Igc2hlIHNheXMgc28iLCJvciBzaGUgc2F5cyBzbyBpbiIsInNoZSBzYXlzIHNvIGluIHdyaXRpbmciLCJjb3B5IG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoaXMiLCJtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGlzIHNvdXJjZSIsImFuZCByZWRpc3RyaWJ1dGUgdGhpcyBzb3VyY2UgY29kZSIsInJlZGlzdHJpYnV0ZSB0aGlzIHNvdXJjZSBjb2RlIGZvciIsInRoaXMgc291cmNlIGNvZGUgZm9yIGNvbW1lcmNpYWwiLCJzb3VyY2UgY29kZSBmb3IgY29tbWVyY2lhbCBvciIsIm9yIG5vbiBjb21tZXJjaWFsIHB1cnBvc2VzIHdpdGgiLCJub24gY29tbWVyY2lhbCBwdXJwb3NlcyB3aXRoIHRoZSIsImNvbW1lcmNpYWwgcHVycG9zZXMgd2l0aCB0aGUgZm9sbG93aW5nIiwicHVycG9zZXMgd2l0aCB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyIsIndpdGggdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgMSIsIm5vdCBiZSBtaXNyZXByZXNlbnRlZCAyIG1vZGlmaWVkIiwiYmUgbWlzcmVwcmVzZW50ZWQgMiBtb2RpZmllZCB2ZXJzaW9ucyIsIm1pc3JlcHJlc2VudGVkIDIgbW9kaWZpZWQgdmVyc2lvbnMgbXVzdCIsIjIgbW9kaWZpZWQgdmVyc2lvbnMgbXVzdCBiZSIsIm1vZGlmaWVkIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSIsIm1hcmtlZCBhcyBzdWNoIGFuZCAzIiwiYXMgc3VjaCBhbmQgMyB0aGlzIiwic3VjaCBhbmQgMyB0aGlzIG5vdGljZSIsImFuZCAzIHRoaXMgbm90aWNlIG1heSIsImZyb20gYW55IHNvdXJjZSBvciBtb2RpZmllZCIsImFueSBzb3VyY2Ugb3IgbW9kaWZpZWQgc291cmNlIiwic291cmNlIG9yIG1vZGlmaWVkIHNvdXJjZSBkaXN0cmlidXRpb24iXX0seyJsaWNlbnNlVGV4dHMiOlsiTGljZW5jZSBMaWJyZSBkdSBRdcOpYmVjIOKAkyBQZXJtaXNzaXZlIChMaUxpUS1QKVxuXG5WZXJzaW9uIDEuMVxuXG4gICAxLiBQcsOpYW1idWxlXG5cbiAgIENldHRlIGxpY2VuY2UgcydhcHBsaXF1ZSDDoCB0b3V0IGxvZ2ljaWVsIGRpc3RyaWJ1w6kgZG9udCBsZSB0aXR1bGFpcmUgZHUgZHJvaXQgZCdhdXRldXIgcHLDqWNpc2UgcXUnaWwgZXN0IHN1amV0IGF1eCB0ZXJtZXMgZGUgbGEgTGljZW5jZSBMaWJyZSBkdSBRdcOpYmVjIOKAkyBQZXJtaXNzaXZlIChMaUxpUS1QKSAoY2ktYXByw6hzIGFwcGVsw6llIGxhIMKrwqBsaWNlbmNlwqDCuykuXG5cbiAgIDIuIETDqWZpbml0aW9uc1xuXG4gICBEYW5zIGxhIHByw6lzZW50ZSBsaWNlbmNlLCDDoCBtb2lucyBxdWUgbGUgY29udGV4dGUgbidpbmRpcXVlIHVuIHNlbnMgZGlmZsOpcmVudCwgb24gZW50ZW5kIHBhcjpcblxuICAgwqvCoGNvbmPDqWRhbnTCoMK7wqA6IGxlIHRpdHVsYWlyZSBkdSBkcm9pdCBkJ2F1dGV1ciBzdXIgbGUgbG9naWNpZWwsIG91IHRvdXRlIHBlcnNvbm5lIGTDu21lbnQgYXV0b3Jpc8OpZSBwYXIgY2UgZGVybmllciDDoCBhY2NvcmRlciBsYSBwcsOpc2VudGUgbGljZW5jZTtcblxuICAgwqvCoGNvbnRyaWJ1dGV1csKgwrvCoDogbGUgdGl0dWxhaXJlIGR1IGRyb2l0IGQnYXV0ZXVyIG91IHRvdXRlIHBlcnNvbm5lIGF1dG9yaXPDqWUgcGFyIGNlIGRlcm5pZXIgw6Agc291bWV0dHJlIGF1IGNvbmPDqWRhbnQgdW5lIGNvbnRyaWJ1dGlvbi4gVW4gY29udHJpYnV0ZXVyIGRvbnQgc2EgY29udHJpYnV0aW9uIGVzdCBpbmNvcnBvcsOpZSBhdSBsb2dpY2llbCBlc3QgY29uc2lkw6lyw6kgY29tbWUgdW4gY29uY8OpZGFudCBlbiByZWdhcmQgZGUgc2EgY29udHJpYnV0aW9uO1xuXG4gICDCq8KgY29udHJpYnV0aW9uwqDCu8KgOiB0b3V0IGxvZ2ljaWVsIG9yaWdpbmFsLCBvdSBwYXJ0aWUgZGUgbG9naWNpZWwgb3JpZ2luYWwgc291bWlzIGV0IGRlc3RpbsOpIMOgIMOqdHJlIGluY29ycG9yw6kgZGFucyBsZSBsb2dpY2llbDtcblxuICAgwqvCoGRpc3RyaWJ1dGlvbsKgwrvCoDogbGUgZmFpdCBkZSBkw6lsaXZyZXIgdW5lIGNvcGllIGR1IGxvZ2ljaWVsO1xuXG4gICDCq8KgbGljZW5jacOpwqDCu8KgOiB0b3V0ZSBwZXJzb25uZSBxdWkgcG9zc8OoZGUgdW5lIGNvcGllIGR1IGxvZ2ljaWVsIGV0IHF1aSBleGVyY2UgbGVzIGRyb2l0cyBjb25jw6lkw6lzIHBhciBsYSBsaWNlbmNlO1xuXG4gICDCq8KgbG9naWNpZWzCoMK7wqA6IHVuZSDFk3V2cmUgcHJvdMOpZ8OpZSBwYXIgbGUgZHJvaXQgZCdhdXRldXIsIHRlbGxlIHF1J3VuIHByb2dyYW1tZSBkJ29yZGluYXRldXIgZXQgc2EgZG9jdW1lbnRhdGlvbiwgcG91ciBsYXF1ZWxsZSBsZSB0aXR1bGFpcmUgZHUgZHJvaXQgZCdhdXRldXIgYSBwcsOpY2lzw6kgcXUnZWxsZSBlc3Qgc3VqZXR0ZSBhdXggdGVybWVzIGRlIGxhIHByw6lzZW50ZSBsaWNlbmNlO1xuXG4gICDCq8KgbG9naWNpZWwgZMOpcml2w6nCoMK7wqA6IHRvdXQgbG9naWNpZWwgb3JpZ2luYWwgcsOpYWxpc8OpIHBhciB1biBsaWNlbmNpw6ksIGF1dHJlIHF1ZSBsZSBsb2dpY2llbCBvdSB1biBsb2dpY2llbCBtb2RpZmnDqSwgcXVpIHByb2R1aXQgb3UgcmVwcm9kdWl0IGxhIHRvdGFsaXTDqSBvdSB1bmUgcGFydGllIGltcG9ydGFudGUgZHUgbG9naWNpZWw7XG5cbiAgIMKrwqBsb2dpY2llbCBtb2RpZmnDqcKgwrvCoDogdG91dGUgbW9kaWZpY2F0aW9uIHBhciB1biBsaWNlbmNpw6kgZGUgbCd1biBkZXMgZmljaGllcnMgc291cmNlIGR1IGxvZ2ljaWVsIG91IGVuY29yZSB0b3V0IG5vdXZlYXUgZmljaGllciBzb3VyY2UgcXVpIGluY29ycG9yZSBsZSBsb2dpY2llbCBvdSB1bmUgcGFydGllIGltcG9ydGFudGUgZGUgY2UgZGVybmllci5cblxuICAgMy4gTGljZW5jZSBkZSBkcm9pdCBkJ2F1dGV1clxuXG4gICBTb3VzIHLDqXNlcnZlIGRlcyB0ZXJtZXMgZGUgbGEgbGljZW5jZSwgbGUgY29uY8OpZGFudCBhY2NvcmRlIGF1IGxpY2VuY2nDqSB1bmUgbGljZW5jZSBub24gZXhjbHVzaXZlIGV0IGxpYnJlIGRlIHJlZGV2YW5jZXMgbHVpIHBlcm1ldHRhbnQgZCdleGVyY2VyIGxlcyBkcm9pdHMgc3VpdmFudHMgc3VyIGxlIGxvZ2ljaWVswqA6XG5cbiAgICAgIDHCoCBQcm9kdWlyZSBvdSByZXByb2R1aXJlIGxhIHRvdGFsaXTDqSBvdSB1bmUgcGFydGllIGltcG9ydGFudGU7XG5cbiAgICAgIDLCoCBFeMOpY3V0ZXIgb3UgcmVwcsOpc2VudGVyIGxhIHRvdGFsaXTDqSBvdSB1bmUgcGFydGllIGltcG9ydGFudGUgZW4gcHVibGljO1xuXG4gICAgICAzwqAgUHVibGllciBsYSB0b3RhbGl0w6kgb3UgdW5lIHBhcnRpZSBpbXBvcnRhbnRlO1xuXG4gICAgICA0wqAgU291cy1saWNlbmNpZXIgc291cyB1bmUgYXV0cmUgbGljZW5jZSBsaWJyZSwgYXBwcm91dsOpZSBvdSBjZXJ0aWZpw6llIHBhciBsYSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gb3UgbCdPcGVuIFNvdXJjZSBJbml0aWF0aXZlLlxuXG4gICBcblxuICAgQ2V0dGUgbGljZW5jZSBlc3QgYWNjb3Jkw6llIHNhbnMgbGltaXRlIHRlcnJpdG9yaWFsZSBldCBzYW5zIGxpbWl0ZSBkZSB0ZW1wcy5cblxuICAgTCdleGVyY2ljZSBjb21wbGV0IGRlIGNlcyBkcm9pdHMgZXN0IHN1amV0IMOgIGxhIGRpc3RyaWJ1dGlvbiBwYXIgbGUgY29uY8OpZGFudCBkdSBjb2RlIHNvdXJjZSBkdSBsb2dpY2llbCwgbGVxdWVsIGRvaXQgw6p0cmUgc291cyB1bmUgZm9ybWUgcGVybWV0dGFudCBkJ3kgYXBwb3J0ZXIgZGVzIG1vZGlmaWNhdGlvbnMuIExlIGNvbmPDqWRhbnQgcGV1dCBhdXNzaSBkaXN0cmlidWVyIGxlIGxvZ2ljaWVsIGFjY29tcGFnbsOpIGQndW5lIG9mZnJlIGRlIGRpc3RyaWJ1ZXIgbGUgY29kZSBzb3VyY2UgZHUgbG9naWNpZWwsIHNhbnMgZnJhaXMgc3VwcGzDqW1lbnRhaXJlcywgYXV0cmVzIHF1ZSBjZXV4IHJhaXNvbm5hYmxlcyBhZmluIGRlIHBlcm1ldHRyZSBsYSBsaXZyYWlzb24gZHUgY29kZSBzb3VyY2UuIENldHRlIG9mZnJlIGRvaXQgw6p0cmUgdmFsaWRlIHBlbmRhbnQgdW5lIGR1csOpZSByYWlzb25uYWJsZS5cblxuICAgNC4gRGlzdHJpYnV0aW9uXG5cbiAgIExlIGxpY2VuY2nDqSBwZXV0IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkdSBsb2dpY2llbCwgZCd1biBsb2dpY2llbCBtb2RpZmnDqSBvdSBkw6lyaXbDqSwgc291cyByw6lzZXJ2ZSBkZSByZXNwZWN0ZXIgbGVzIGNvbmRpdGlvbnMgc3VpdmFudGVzIDpcblxuICAgXG5cbiAgICAgIDHCoCBMZSBsb2dpY2llbCBkb2l0IMOqdHJlIGFjY29tcGFnbsOpIGQndW4gZXhlbXBsYWlyZSBkZSBjZXR0ZSBsaWNlbmNlO1xuXG4gICAgICAywqAgU2kgbGUgbG9naWNpZWwgYSDDqXTDqSBtb2RpZmnDqSwgbGUgbGljZW5jacOpIGRvaXQgZW4gZmFpcmUgbGEgbWVudGlvbiwgZGUgcHLDqWbDqXJlbmNlIGRhbnMgY2hhY3VuIGRlcyBmaWNoaWVycyBtb2RpZmnDqXMgZG9udCBsYSBuYXR1cmUgcGVybWV0IHVuZSB0ZWxsZSBtZW50aW9uO1xuXG4gICAgICAzwqAgTGVzIMOpdGlxdWV0dGVzIG91IG1lbnRpb25zIGZhaXNhbnQgw6l0YXQgZGVzIGRyb2l0cyBkJ2F1dGV1ciwgZGVzIG1hcnF1ZXMgZGUgY29tbWVyY2UsIGRlcyBnYXJhbnRpZXMgb3UgZGUgbGEgcGF0ZXJuaXTDqSBjb25jZXJuYW50IGxlIGxvZ2ljaWVsIG5lIGRvaXZlbnQgcGFzIMOqdHJlIG1vZGlmacOpZXMgb3Ugc3VwcHJpbcOpZXMsIMOgIG1vaW5zIHF1ZSBjZXMgw6l0aXF1ZXR0ZXMgb3UgbWVudGlvbnMgbmUgc29pZW50IGluYXBwbGljYWJsZXMgw6AgdW4gbG9naWNpZWwgbW9kaWZpw6kgb3UgZMOpcml2w6kgZG9ubsOpLlxuXG4gICBcblxuICAgNS5cblxuICAgQ29udHJpYnV0aW9uc1xuXG4gICBTb3VzIHLDqXNlcnZlIGQndW5lIGVudGVudGUgZGlzdGluY3RlLCB0b3V0ZSBjb250cmlidXRpb24gc291bWlzZSBwYXIgdW4gY29udHJpYnV0ZXVyIGF1IGNvbmPDqWRhbnQgcG91ciBpbmNsdXNpb24gZGFucyBsZSBsb2dpY2llbCBzZXJhIHNvdW1pc2UgYXV4IHRlcm1lcyBkZSBjZXR0ZSBsaWNlbmNlLlxuXG4gICA2LiBNYXJxdWVzIGRlIGNvbW1lcmNlXG5cbiAgIExhIGxpY2VuY2UgbidhY2NvcmRlIGF1Y3VuZSBwZXJtaXNzaW9uIHBhcnRpY3VsacOocmUgcXVpIHBlcm1ldHRyYWl0IGQndXRpbGlzZXIgbGVzIG1hcnF1ZXMgZGUgY29tbWVyY2UgZHUgY29uY8OpZGFudCwgYXV0cmUgcXVlIGNlbGxlIHJlcXVpc2UgcGVybWV0dGFudCBkJ2lkZW50aWZpZXIgbGEgcHJvdmVuYW5jZSBkdSBsb2dpY2llbC5cblxuICAgNy4gR2FyYW50aWVzXG5cbiAgIFNhdWYgbWVudGlvbiBjb250cmFpcmUsIGxlIGNvbmPDqWRhbnQgZGlzdHJpYnVlIGxlIGxvZ2ljaWVsIHNhbnMgYXVjdW5lIGdhcmFudGllLCBhdXggcmlzcXVlcyBldCBww6lyaWxzIGRlIGwnYWNxdcOpcmV1ciBkZSBsYSBjb3BpZSBkdSBsb2dpY2llbCwgZXQgY2UsIHNhbnMgYXNzdXJlciBxdWUgbGUgbG9naWNpZWwgcHVpc3NlIHLDqXBvbmRyZSDDoCB1biBiZXNvaW4gcGFydGljdWxpZXIgb3UgcHVpc3NlIGRvbm5lciB1biByw6lzdWx0YXQgcXVlbGNvbnF1ZS5cblxuICAgU2FucyBsaWVyIGxlIGNvbmPDqWRhbnQgZCd1bmUgcXVlbGNvbnF1ZSBtYW5pw6hyZSwgcmllbiBuJ2VtcMOqY2hlIHVuIGxpY2VuY2nDqSBkJ29mZnJpciBvdSBkJ2V4Y2x1cmUgZGVzIGdhcmFudGllcyBvdSBkdSBzdXBwb3J0LlxuXG4gICA4LiBSZXNwb25zYWJpbGl0w6lcblxuICAgTGUgbGljZW5jacOpIGVzdCByZXNwb25zYWJsZSBkZSB0b3V0IHByw6lqdWRpY2UgcsOpc3VsdGFudCBkZSBsJ2V4ZXJjaWNlIGRlcyBkcm9pdHMgYWNjb3Jkw6lzIHBhciBsYSBsaWNlbmNlLlxuXG4gICBMZSBjb25jw6lkYW50IG5lIHNhdXJhaXQgw6p0cmUgdGVudSByZXNwb25zYWJsZSBkZSBkb21tYWdlcyBzdWJpcyBwYXIgbGUgbGljZW5jacOpIG91IHBhciBkZXMgdGllcnMsIHBvdXIgcXVlbHF1ZSBjYXVzZSBxdWUgY2Ugc29pdCBlbiBsaWVuIGF2ZWMgbGEgbGljZW5jZSBldCBsZXMgZHJvaXRzIHF1aSB5IHNvbnQgYWNjb3Jkw6lzLlxuXG4gICA5LiBSw6lzaWxpYXRpb25cblxuICAgTGEgcHLDqXNlbnRlIGxpY2VuY2UgZXN0IGF1dG9tYXRpcXVlbWVudCByw6lzaWxpw6llIGTDqHMgcXVlIGxlcyBkcm9pdHMgcXVpIHkgc29udCBhY2NvcmTDqXMgbmUgc29udCBwYXMgZXhlcmPDqXMgY29uZm9ybcOpbWVudCBhdXggdGVybWVzIHF1aSB5IHNvbnQgc3RpcHVsw6lzLlxuXG4gICBUb3V0ZWZvaXMsIHNpIGxlIGTDqWZhdXQgZXN0IGNvcnJpZ8OpIGRhbnMgdW4gZMOpbGFpIGRlIDMwIGpvdXJzIGRlIHNhIHByaXNlIGRlIGNvbm5haXNzYW5jZSBwYXIgbGEgcGVyc29ubmUgZW4gZMOpZmF1dCwgZXQgcXUnaWwgcydhZ2l0IGR1IHByZW1pZXIgZMOpZmF1dCwgbGEgbGljZW5jZSBlc3QgYWNjb3Jkw6llIGRlIG5vdXZlYXUuXG5cbiAgIFBvdXIgdG91dCBkw6lmYXV0IHN1YnPDqXF1ZW50LCBsZSBjb25zZW50ZW1lbnQgZXhwcsOocyBkdSBjb25jw6lkYW50IGVzdCBuw6ljZXNzYWlyZSBhZmluIHF1ZSBsYSBsaWNlbmNlIHNvaXQgYWNjb3Jkw6llIGRlIG5vdXZlYXUuXG5cbiAgIDEwLiBWZXJzaW9uIGRlIGxhIGxpY2VuY2VcblxuICAgTGUgQ2VudHJlIGRlIHNlcnZpY2VzIHBhcnRhZ8OpcyBkdSBRdcOpYmVjLCBzZXMgYXlhbnRzIGNhdXNlIG91IHRvdXRlIHBlcnNvbm5lIHF1J2lsIGTDqXNpZ25lLCBwZXV2ZW50IGRpZmZ1c2VyIGRlcyB2ZXJzaW9ucyByw6l2aXPDqWVzIG91IG1vZGlmacOpZXMgZGUgY2V0dGUgbGljZW5jZS4gQ2hhcXVlIHZlcnNpb24gcmVjZXZyYSB1biBudW3DqXJvIHVuaXF1ZS4gU2kgdW4gbG9naWNpZWwgZXN0IGTDqWrDoCBzb3VtaXMgYXV4IHRlcm1lcyBkJ3VuZSB2ZXJzaW9uIHNww6ljaWZpcXVlLCBjJ2VzdCBzZXVsZW1lbnQgY2V0dGUgdmVyc2lvbiBxdWkgbGllcmEgbGVzIHBhcnRpZXMgw6AgbGEgbGljZW5jZS5cblxuICAgTGUgY29uY8OpZGFudCBwZXV0IGF1c3NpIGNob2lzaXIgZGUgY29uY8OpZGVyIGxhIGxpY2VuY2Ugc291cyBsYSB2ZXJzaW9uIGFjdHVlbGxlIG91IHRvdXRlIHZlcnNpb24gdWx0w6lyaWV1cmUsIGF1cXVlbCBjYXMgbGUgbGljZW5jacOpIHBldXQgY2hvaXNpciBzb3VzIHF1ZWxsZSB2ZXJzaW9uIGxhIGxpY2VuY2UgbHVpIGVzdCBhY2NvcmTDqWUuXG5cbiAgIDExLiBEaXZlcnNcblxuICAgRGFucyBsYSBtZXN1cmUgb8O5IGxlIGNvbmPDqWRhbnQgZXN0IHVuIG1pbmlzdMOocmUsIHVuIG9yZ2FuaXNtZSBwdWJsaWMgb3UgdW5lIHBlcnNvbm5lIG1vcmFsZSBkZSBkcm9pdCBwdWJsaWMsIGNyw6nDqXMgZW4gdmVydHUgZCd1bmUgbG9pIGRlIGwnQXNzZW1ibMOpZSBuYXRpb25hbGUgZHUgUXXDqWJlYywgbGEgbGljZW5jZSBlc3QgcsOpZ2llIHBhciBsZSBkcm9pdCBhcHBsaWNhYmxlIGF1IFF1w6liZWMgZXQgZW4gY2FzIGRlIGNvbnRlc3RhdGlvbiwgbGVzIHRyaWJ1bmF1eCBkdSBRdcOpYmVjIHNlcm9udCBzZXVscyBjb21ww6l0ZW50cy5cblxuICAgTGEgcHLDqXNlbnRlIGxpY2VuY2UgcGV1dCDDqnRyZSBkaXN0cmlidcOpZSBzYW5zIGNvbmRpdGlvbnMgcGFydGljdWxpw6hyZXMuIFRvdXRlZm9pcywgdW5lIHZlcnNpb24gbW9kaWZpw6llIGRvaXQgw6p0cmUgZGlzdHJpYnXDqWUgc291cyB1biBub20gZGlmZsOpcmVudC4gVG91dGUgcsOpZsOpcmVuY2UgYXUgQ2VudHJlIGRlIHNlcnZpY2VzIHBhcnRhZ8OpcyBkdSBRdcOpYmVjLCBldCwgbGUgY2FzIMOpY2jDqWFudCwgc2VzIGF5YW50IGNhdXNlLCBkb2l0IMOqdHJlIHJldGlyw6llLCBhdXRyZSBxdWUgY2VsbGUgcGVybWV0dGFudCBkJ2lkZW50aWZpZXIgbGEgcHJvdmVuYW5jZSBkZSBsYSBsaWNlbmNlLiJdLCJsaWNlbnNlSWRzIjpbIkxpTGlRLVAtMS4xIl0sImtleXdvcmRzIjpbImxpbGlxIHAgdmVyc2lvbiIsInAgdmVyc2lvbiAxIiwibGlsaXEgcCBjaSIsInAgY2kgYXByIiwicGFydGllIGltcG9ydGFudGUgNCIsImltcG9ydGFudGUgNCBzb3VzIiwiNCBzb3VzIGxpY2VuY2llciIsInNvdXMgbGljZW5jaWVyIHNvdXMiLCJsaWNlbmNpZXIgc291cyB1bmUiLCJzb3VzIHVuZSBhdXRyZSIsInVuZSBhdXRyZSBsaWNlbmNlIiwiYXV0cmUgbGljZW5jZSBsaWJyZSIsInNvdXJjZSBpbml0aWF0aXZlIGNldHRlIiwiaW5pdGlhdGl2ZSBjZXR0ZSBsaWNlbmNlIiwicml2IGRvbm4gNSIsImRvbm4gNSBjb250cmlidXRpb25zIiwidGVudSByZXNwb25zYWJsZSBkZSIsInJlc3BvbnNhYmxlIGRlIGRvbW1hZ2VzIiwiZGUgZG9tbWFnZXMgc3ViaXMiLCJkb21tYWdlcyBzdWJpcyBwYXIiLCJsaWNlbmNlIGVzdCBhdXRvbWF0aXF1ZW1lbnQiLCJlc3QgYXV0b21hdGlxdWVtZW50IHIiLCJhdXRvbWF0aXF1ZW1lbnQgciBzaWxpIiwic2lsaSBlIGQiLCJlIGQgcyIsInBlcm1pc3NpdmUgbGlsaXEgcCB2ZXJzaW9uIiwibGlsaXEgcCB2ZXJzaW9uIDEiLCJwIHZlcnNpb24gMSAxIiwicGVybWlzc2l2ZSBsaWxpcSBwIGNpIiwibGlsaXEgcCBjaSBhcHIiLCJwIGNpIGFwciBzIiwidW5lIHBhcnRpZSBpbXBvcnRhbnRlIDQiLCJwYXJ0aWUgaW1wb3J0YW50ZSA0IHNvdXMiLCJpbXBvcnRhbnRlIDQgc291cyBsaWNlbmNpZXIiLCI0IHNvdXMgbGljZW5jaWVyIHNvdXMiLCJzb3VzIGxpY2VuY2llciBzb3VzIHVuZSIsImxpY2VuY2llciBzb3VzIHVuZSBhdXRyZSIsInNvdXMgdW5lIGF1dHJlIGxpY2VuY2UiLCJ1bmUgYXV0cmUgbGljZW5jZSBsaWJyZSIsImF1dHJlIGxpY2VuY2UgbGlicmUgYXBwcm91diIsIm9wZW4gc291cmNlIGluaXRpYXRpdmUgY2V0dGUiLCJzb3VyY2UgaW5pdGlhdGl2ZSBjZXR0ZSBsaWNlbmNlIiwiaW5pdGlhdGl2ZSBjZXR0ZSBsaWNlbmNlIGVzdCIsImQgcml2IGRvbm4gNSIsInJpdiBkb25uIDUgY29udHJpYnV0aW9ucyIsImRvbm4gNSBjb250cmlidXRpb25zIHNvdXMiLCJ0cmUgdGVudSByZXNwb25zYWJsZSBkZSIsInRlbnUgcmVzcG9uc2FibGUgZGUgZG9tbWFnZXMiLCJyZXNwb25zYWJsZSBkZSBkb21tYWdlcyBzdWJpcyIsImRlIGRvbW1hZ2VzIHN1YmlzIHBhciIsImRvbW1hZ2VzIHN1YmlzIHBhciBsZSIsInNlbnRlIGxpY2VuY2UgZXN0IGF1dG9tYXRpcXVlbWVudCIsImxpY2VuY2UgZXN0IGF1dG9tYXRpcXVlbWVudCByIiwiZXN0IGF1dG9tYXRpcXVlbWVudCByIHNpbGkiLCJhdXRvbWF0aXF1ZW1lbnQgciBzaWxpIGUiLCJyIHNpbGkgZSBkIiwic2lsaSBlIGQgcyIsImUgZCBzIHF1ZSIsImJlYyBwZXJtaXNzaXZlIGxpbGlxIHAgdmVyc2lvbiIsInBlcm1pc3NpdmUgbGlsaXEgcCB2ZXJzaW9uIDEiLCJsaWxpcSBwIHZlcnNpb24gMSAxIiwicCB2ZXJzaW9uIDEgMSAxIiwiYmVjIHBlcm1pc3NpdmUgbGlsaXEgcCBjaSIsInBlcm1pc3NpdmUgbGlsaXEgcCBjaSBhcHIiLCJsaWxpcSBwIGNpIGFwciBzIiwicCBjaSBhcHIgcyBhcHBlbCIsIm91IHVuZSBwYXJ0aWUgaW1wb3J0YW50ZSA0IiwidW5lIHBhcnRpZSBpbXBvcnRhbnRlIDQgc291cyIsInBhcnRpZSBpbXBvcnRhbnRlIDQgc291cyBsaWNlbmNpZXIiLCJpbXBvcnRhbnRlIDQgc291cyBsaWNlbmNpZXIgc291cyIsIjQgc291cyBsaWNlbmNpZXIgc291cyB1bmUiLCJzb3VzIGxpY2VuY2llciBzb3VzIHVuZSBhdXRyZSIsImxpY2VuY2llciBzb3VzIHVuZSBhdXRyZSBsaWNlbmNlIiwic291cyB1bmUgYXV0cmUgbGljZW5jZSBsaWJyZSIsInVuZSBhdXRyZSBsaWNlbmNlIGxpYnJlIGFwcHJvdXYiLCJhdXRyZSBsaWNlbmNlIGxpYnJlIGFwcHJvdXYgZSIsImwgb3BlbiBzb3VyY2UgaW5pdGlhdGl2ZSBjZXR0ZSIsIm9wZW4gc291cmNlIGluaXRpYXRpdmUgY2V0dGUgbGljZW5jZSIsInNvdXJjZSBpbml0aWF0aXZlIGNldHRlIGxpY2VuY2UgZXN0IiwiaW5pdGlhdGl2ZSBjZXR0ZSBsaWNlbmNlIGVzdCBhY2NvcmQiLCJvdSBkIHJpdiBkb25uIDUiLCJkIHJpdiBkb25uIDUgY29udHJpYnV0aW9ucyIsInJpdiBkb25uIDUgY29udHJpYnV0aW9ucyBzb3VzIiwiZG9ubiA1IGNvbnRyaWJ1dGlvbnMgc291cyByIiwic2F1cmFpdCB0cmUgdGVudSByZXNwb25zYWJsZSBkZSIsInRyZSB0ZW51IHJlc3BvbnNhYmxlIGRlIGRvbW1hZ2VzIiwidGVudSByZXNwb25zYWJsZSBkZSBkb21tYWdlcyBzdWJpcyIsInJlc3BvbnNhYmxlIGRlIGRvbW1hZ2VzIHN1YmlzIHBhciIsImRlIGRvbW1hZ2VzIHN1YmlzIHBhciBsZSIsImRvbW1hZ2VzIHN1YmlzIHBhciBsZSBsaWNlbmNpIiwic3ViaXMgcGFyIGxlIGxpY2VuY2kgb3UiLCJwciBzZW50ZSBsaWNlbmNlIGVzdCBhdXRvbWF0aXF1ZW1lbnQiLCJzZW50ZSBsaWNlbmNlIGVzdCBhdXRvbWF0aXF1ZW1lbnQgciIsImxpY2VuY2UgZXN0IGF1dG9tYXRpcXVlbWVudCByIHNpbGkiLCJlc3QgYXV0b21hdGlxdWVtZW50IHIgc2lsaSBlIiwiYXV0b21hdGlxdWVtZW50IHIgc2lsaSBlIGQiLCJyIHNpbGkgZSBkIHMiLCJzaWxpIGUgZCBzIHF1ZSIsImUgZCBzIHF1ZSBsZXMiXX0seyJsaWNlbnNlVGV4dHMiOlsiTGljZW5jZSBMaWJyZSBkdSBRdcOpYmVjIOKAkyBSw6ljaXByb2NpdMOpIChMaUxpUS1SKVxuXG5WZXJzaW9uIDEuMVxuXG4gICAxLiBQcsOpYW1idWxlXG5cbiAgIENldHRlIGxpY2VuY2UgcydhcHBsaXF1ZSDDoCB0b3V0IGxvZ2ljaWVsIGRpc3RyaWJ1w6kgZG9udCBsZSB0aXR1bGFpcmUgZHUgZHJvaXQgZCdhdXRldXIgcHLDqWNpc2UgcXUnaWwgZXN0IHN1amV0IGF1eCB0ZXJtZXMgZGUgbGEgTGljZW5jZSBMaWJyZSBkdSBRdcOpYmVjIOKAkyBSw6ljaXByb2NpdMOpIChMaUxpUS1SKSAoY2ktYXByw6hzIGFwcGVsw6llIGxhIMKrwqBsaWNlbmNlwqDCuykuXG5cbiAgIDIuIETDqWZpbml0aW9uc1xuXG4gICBEYW5zIGxhIHByw6lzZW50ZSBsaWNlbmNlLCDDoCBtb2lucyBxdWUgbGUgY29udGV4dGUgbidpbmRpcXVlIHVuIHNlbnMgZGlmZsOpcmVudCwgb24gZW50ZW5kIHBhcjpcblxuICAgwqvCoGNvbmPDqWRhbnTCoMK7wqA6IGxlIHRpdHVsYWlyZSBkdSBkcm9pdCBkJ2F1dGV1ciBzdXIgbGUgbG9naWNpZWwsIG91IHRvdXRlIHBlcnNvbm5lIGTDu21lbnQgYXV0b3Jpc8OpZSBwYXIgY2UgZGVybmllciDDoCBhY2NvcmRlciBsYSBwcsOpc2VudGUgbGljZW5jZTtcblxuICAgwqvCoGNvbnRyaWJ1dGV1csKgwrvCoDogbGUgdGl0dWxhaXJlIGR1IGRyb2l0IGQnYXV0ZXVyIG91IHRvdXRlIHBlcnNvbm5lIGF1dG9yaXPDqWUgcGFyIGNlIGRlcm5pZXIgw6Agc291bWV0dHJlIGF1IGNvbmPDqWRhbnQgdW5lIGNvbnRyaWJ1dGlvbi4gVW4gY29udHJpYnV0ZXVyIGRvbnQgc2EgY29udHJpYnV0aW9uIGVzdCBpbmNvcnBvcsOpZSBhdSBsb2dpY2llbCBlc3QgY29uc2lkw6lyw6kgY29tbWUgdW4gY29uY8OpZGFudCBlbiByZWdhcmQgZGUgc2EgY29udHJpYnV0aW9uO1xuXG4gICDCq8KgY29udHJpYnV0aW9uwqDCu8KgOiB0b3V0IGxvZ2ljaWVsIG9yaWdpbmFsLCBvdSBwYXJ0aWUgZGUgbG9naWNpZWwgb3JpZ2luYWwgc291bWlzIGV0IGRlc3RpbsOpIMOgIMOqdHJlIGluY29ycG9yw6kgZGFucyBsZSBsb2dpY2llbDtcblxuICAgwqvCoGRpc3RyaWJ1dGlvbsKgwrvCoDogbGUgZmFpdCBkZSBkw6lsaXZyZXIgdW5lIGNvcGllIGR1IGxvZ2ljaWVsO1xuXG4gICDCq8KgbGljZW5jacOpwqDCu8KgOiB0b3V0ZSBwZXJzb25uZSBxdWkgcG9zc8OoZGUgdW5lIGNvcGllIGR1IGxvZ2ljaWVsIGV0IHF1aSBleGVyY2UgbGVzIGRyb2l0cyBjb25jw6lkw6lzIHBhciBsYSBsaWNlbmNlO1xuXG4gICDCq8KgbG9naWNpZWzCoMK7wqA6IHVuZSDFk3V2cmUgcHJvdMOpZ8OpZSBwYXIgbGUgZHJvaXQgZCdhdXRldXIsIHRlbGxlIHF1J3VuIHByb2dyYW1tZSBkJ29yZGluYXRldXIgZXQgc2EgZG9jdW1lbnRhdGlvbiwgcG91ciBsYXF1ZWxsZSBsZSB0aXR1bGFpcmUgZHUgZHJvaXQgZCdhdXRldXIgYSBwcsOpY2lzw6kgcXUnZWxsZSBlc3Qgc3VqZXR0ZSBhdXggdGVybWVzIGRlIGxhIHByw6lzZW50ZSBsaWNlbmNlO1xuXG4gICDCq8KgbG9naWNpZWwgZMOpcml2w6nCoMK7wqA6IHRvdXQgbG9naWNpZWwgb3JpZ2luYWwgcsOpYWxpc8OpIHBhciB1biBsaWNlbmNpw6ksIGF1dHJlIHF1ZSBsZSBsb2dpY2llbCBvdSB1biBsb2dpY2llbCBtb2RpZmnDqSwgcXVpIHByb2R1aXQgb3UgcmVwcm9kdWl0IGxhIHRvdGFsaXTDqSBvdSB1bmUgcGFydGllIGltcG9ydGFudGUgZHUgbG9naWNpZWw7XG5cbiAgIMKrwqBsb2dpY2llbCBtb2RpZmnDqcKgwrvCoDogdG91dGUgbW9kaWZpY2F0aW9uIHBhciB1biBsaWNlbmNpw6kgZGUgbCd1biBkZXMgZmljaGllcnMgc291cmNlIGR1IGxvZ2ljaWVsIG91IGVuY29yZSB0b3V0IG5vdXZlYXUgZmljaGllciBzb3VyY2UgcXVpIGluY29ycG9yZSBsZSBsb2dpY2llbCBvdSB1bmUgcGFydGllIGltcG9ydGFudGUgZGUgY2UgZGVybmllci5cblxuICAgMy4gTGljZW5jZSBkZSBkcm9pdCBkJ2F1dGV1clxuXG4gICBTb3VzIHLDqXNlcnZlIGRlcyB0ZXJtZXMgZGUgbGEgbGljZW5jZSwgbGUgY29uY8OpZGFudCBhY2NvcmRlIGF1IGxpY2VuY2nDqSB1bmUgbGljZW5jZSBub24gZXhjbHVzaXZlIGV0IGxpYnJlIGRlIHJlZGV2YW5jZXMgbHVpIHBlcm1ldHRhbnQgZCdleGVyY2VyIGxlcyBkcm9pdHMgc3VpdmFudHMgc3VyIGxlIGxvZ2ljaWVswqA6XG5cbiAgICAgIDHCoCBQcm9kdWlyZSBvdSByZXByb2R1aXJlIGxhIHRvdGFsaXTDqSBvdSB1bmUgcGFydGllIGltcG9ydGFudGU7XG5cbiAgICAgIDLCoCBFeMOpY3V0ZXIgb3UgcmVwcsOpc2VudGVyIGxhIHRvdGFsaXTDqSBvdSB1bmUgcGFydGllIGltcG9ydGFudGUgZW4gcHVibGljO1xuXG4gICAgICAzwqAgUHVibGllciBsYSB0b3RhbGl0w6kgb3UgdW5lIHBhcnRpZSBpbXBvcnRhbnRlLlxuXG4gICBcblxuICAgQ2V0dGUgbGljZW5jZSBlc3QgYWNjb3Jkw6llIHNhbnMgbGltaXRlIHRlcnJpdG9yaWFsZSBldCBzYW5zIGxpbWl0ZSBkZSB0ZW1wcy5cblxuICAgTCdleGVyY2ljZSBjb21wbGV0IGRlIGNlcyBkcm9pdHMgZXN0IHN1amV0IMOgIGxhIGRpc3RyaWJ1dGlvbiBwYXIgbGUgY29uY8OpZGFudCBkdSBjb2RlIHNvdXJjZSBkdSBsb2dpY2llbCwgbGVxdWVsIGRvaXQgw6p0cmUgc291cyB1bmUgZm9ybWUgcGVybWV0dGFudCBkJ3kgYXBwb3J0ZXIgZGVzIG1vZGlmaWNhdGlvbnMuIExlIGNvbmPDqWRhbnQgcGV1dCBhdXNzaSBkaXN0cmlidWVyIGxlIGxvZ2ljaWVsIGFjY29tcGFnbsOpIGQndW5lIG9mZnJlIGRlIGRpc3RyaWJ1ZXIgbGUgY29kZSBzb3VyY2UgZHUgbG9naWNpZWwsIHNhbnMgZnJhaXMgc3VwcGzDqW1lbnRhaXJlcywgYXV0cmVzIHF1ZSBjZXV4IHJhaXNvbm5hYmxlcyBhZmluIGRlIHBlcm1ldHRyZSBsYSBsaXZyYWlzb24gZHUgY29kZSBzb3VyY2UuIENldHRlIG9mZnJlIGRvaXQgw6p0cmUgdmFsaWRlIHBlbmRhbnQgdW5lIGR1csOpZSByYWlzb25uYWJsZS5cblxuICAgNC4gRGlzdHJpYnV0aW9uXG5cbiAgIExlIGxpY2VuY2nDqSBwZXV0IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkdSBsb2dpY2llbCwgZCd1biBsb2dpY2llbCBtb2RpZmnDqSBvdSBkw6lyaXbDqSwgc291cyByw6lzZXJ2ZSBkZSByZXNwZWN0ZXIgbGVzIGNvbmRpdGlvbnMgc3VpdmFudGVzIDpcblxuICAgICAgMcKgIExlIGxvZ2ljaWVsIGRvaXQgw6p0cmUgYWNjb21wYWduw6kgZCd1biBleGVtcGxhaXJlIGRlIGNldHRlIGxpY2VuY2U7XG5cbiAgICAgIDLCoCBTaSBsZSBsb2dpY2llbCBhIMOpdMOpIG1vZGlmacOpLCBsZSBsaWNlbmNpw6kgZG9pdCBlbiBmYWlyZSBsYSBtZW50aW9uLCBkZSBwcsOpZsOpcmVuY2UgZGFucyBjaGFjdW4gZGVzIGZpY2hpZXJzIG1vZGlmacOpcyBkb250IGxhIG5hdHVyZSBwZXJtZXQgdW5lIHRlbGxlIG1lbnRpb247XG5cbiAgICAgIDPCoCBMZXMgw6l0aXF1ZXR0ZXMgb3UgbWVudGlvbnMgZmFpc2FudCDDqXRhdCBkZXMgZHJvaXRzIGQnYXV0ZXVyLCBkZXMgbWFycXVlcyBkZSBjb21tZXJjZSwgZGVzIGdhcmFudGllcyBvdSBkZSBsYSBwYXRlcm5pdMOpIGNvbmNlcm5hbnQgbGUgbG9naWNpZWwgbmUgZG9pdmVudCBwYXMgw6p0cmUgbW9kaWZpw6llcyBvdSBzdXBwcmltw6llcywgw6AgbW9pbnMgcXVlIGNlcyDDqXRpcXVldHRlcyBvdSBtZW50aW9ucyBuZSBzb2llbnQgaW5hcHBsaWNhYmxlcyDDoCB1biBsb2dpY2llbCBtb2RpZmnDqSBvdSBkw6lyaXbDqSBkb25uw6kuXG5cbiAgIDQuMS4gUsOpY2lwcm9jaXTDqVxuXG4gICBDaGFxdWUgZm9pcyBxdWUgbGUgbGljZW5jacOpIGRpc3RyaWJ1ZSBsZSBsb2dpY2llbCwgbGUgY29uY8OpZGFudCBvZmZyZSBhdSByw6ljaXBpZW5kYWlyZSB1bmUgY29uY2Vzc2lvbiBzdXIgbGUgbG9naWNpZWwgc2Vsb24gbGVzIHRlcm1lcyBkZSBsYSBwcsOpc2VudGUgbGljZW5jZS4gTGUgbGljZW5jacOpIGRvaXQgb2ZmcmlyIHVuZSBjb25jZXNzaW9uIHNlbG9uIGxlcyB0ZXJtZXMgZGUgbGEgcHLDqXNlbnRlIGxpY2VuY2UgcG91ciB0b3V0IGxvZ2ljaWVsIG1vZGlmacOpIHF1J2lsIGRpc3RyaWJ1ZS5cblxuICAgQ2hhcXVlIGZvaXMgcXVlIGxlIGxpY2VuY2nDqSBkaXN0cmlidWUgbGUgbG9naWNpZWwgb3UgdW4gbG9naWNpZWwgbW9kaWZpw6ksIGNlIGRlcm5pZXIgZG9pdCBhc3N1bWVyIGwnb2JsaWdhdGlvbiBkJ2VuIGRpc3RyaWJ1ZXIgbGUgY29kZSBzb3VyY2UsIGRlIGxhIG1hbmnDqHJlIHByw6l2dWUgYXUgdHJvaXNpw6htZSBhbGluw6lhIGRlIGwnYXJ0aWNsZcKgMy5cblxuICAgNC4yLiBDb21wYXRpYmlsaXTDqVxuXG4gICBEYW5zIGxhIG1lc3VyZSBvw7kgbGUgbGljZW5jacOpIHNvdWhhaXRlIGRpc3RyaWJ1ZXIgdW4gbG9naWNpZWwgbW9kaWZpw6kgY29tYmluw6kgw6AgdW4gbG9naWNpZWwgYXNzdWpldHRpIMOgIHVuZSBsaWNlbmNlIGNvbXBhdGlibGUsIG1haXMgZG9udCBpbCBuZSBzZXJhaXQgcGFzIHBvc3NpYmxlIGQnZW4gcmVzcGVjdGVyIGxlcyB0ZXJtZXMsIGxlIGNvbmPDqWRhbnQgb2ZmcmUsIGVuIHBsdXMgZGUgbGEgcHLDqXNlbnRlIGNvbmNlc3Npb24sIHVuZSBjb25jZXNzaW9uIHNlbG9uIGxlcyB0ZXJtZXMgZGUgY2V0dGUgbGljZW5jZSBjb21wYXRpYmxlLlxuXG4gICBVbiBsaWNlbmNpw6kgcXVpIGVzdCB0aXR1bGFpcmUgZXhjbHVzaWYgZHUgZHJvaXQgZCdhdXRldXIgc3VyIGxlIGxvZ2ljaWVsIGFzc3VqZXR0aSDDoCB1bmUgbGljZW5jZSBjb21wYXRpYmxlIG5lIHBldXQgcGFzIHNlIHByw6l2YWxvaXIgZGUgY2V0dGUgb2ZmcmUuIElsIGVuIGVzdCBkZSBtw6ptZSBwb3VyIHRvdXRlIGF1dHJlIHBlcnNvbm5lIGTDu21lbnQgYXV0b3Jpc8OpZSDDoCBzb3VzLWxpY2VuY2llciBwYXIgbGUgdGl0dWxhaXJlIGV4Y2x1c2lmIGR1IGRyb2l0IGQnYXV0ZXVyIHN1ciBsZSBsb2dpY2llbCBhc3N1amV0dGkgw6AgdW5lIGxpY2VuY2UgY29tcGF0aWJsZS5cblxuICAgRXN0IGNvbnNpZMOpcsOpZSBjb21tZSB1bmUgbGljZW5jZSBjb21wYXRpYmxlIHRvdXRlIGxpY2VuY2UgbGlicmUgYXBwcm91dsOpZSBvdSBjZXJ0aWZpw6llIHBhciBsYSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gb3UgbCdPcGVuIFNvdXJjZSBJbml0aWF0aXZlLCBkb250IGxlIG5pdmVhdSBkZSByw6ljaXByb2NpdMOpIGVzdCBjb21wYXJhYmxlIG91IHN1cMOpcmlldXIgw6AgY2VsdWkgZGUgbGEgcHLDqXNlbnRlIGxpY2VuY2UsIHNhbnMgdG91dGVmb2lzIMOqdHJlIG1vaW5kcmUsIG5vdGFtbWVudMKgOlxuXG4gICAgICAxwqAgQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETC0xLjApXG5cbiAgICAgIDLCoCBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKENQTC0xLjApXG5cbiAgICAgIDPCoCBDb250cmF0IGRlIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgQ2VDSUxMLCB2ZXJzaW9uIDIuMSAoQ0VDSUxMLTIuMSlcblxuICAgICAgNMKgIENvbnRyYXQgZGUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBDZUNJTEwtQyAoQ0VDSUxMLUMpXG5cbiAgICAgIDXCoCBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjAgKEVQTC0xLjApXG5cbiAgICAgIDbCoCBFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAxLjEgKEVVUEwgdi4gMS4xKVxuXG4gICAgICA3wqAgTGljZW5jZSBMaWJyZSBkdSBRdcOpYmVjIOKAkyBSw6ljaXByb2NpdMOpIGZvcnRlIHZlcnNpb24gMS4xIChMaUxpUS1SKyAxLjEpXG5cbiAgICAgIDjCoCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgKEdOVSBHUEx2MilcblxuICAgICAgOcKgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMyAoR05VIEdQTHYzKVxuXG4gICAgICAxMMKgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSAoR05VIExHUEx2Mi4xKVxuXG4gICAgICAxMcKgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDMgKEdOVSBMR1BMdjMpXG5cbiAgICAgIDEywqAgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMCAoTVBMLTIuMClcblxuICAgNS4gQ29udHJpYnV0aW9uc1xuXG4gICBTb3VzIHLDqXNlcnZlIGQndW5lIGVudGVudGUgZGlzdGluY3RlLCB0b3V0ZSBjb250cmlidXRpb24gc291bWlzZSBwYXIgdW4gY29udHJpYnV0ZXVyIGF1IGNvbmPDqWRhbnQgcG91ciBpbmNsdXNpb24gZGFucyBsZSBsb2dpY2llbCBzZXJhIHNvdW1pc2UgYXV4IHRlcm1lcyBkZSBjZXR0ZSBsaWNlbmNlLlxuXG4gICA2LiBNYXJxdWVzIGRlIGNvbW1lcmNlXG5cbiAgIExhIGxpY2VuY2UgbidhY2NvcmRlIGF1Y3VuZSBwZXJtaXNzaW9uIHBhcnRpY3VsacOocmUgcXVpIHBlcm1ldHRyYWl0IGQndXRpbGlzZXIgbGVzIG1hcnF1ZXMgZGUgY29tbWVyY2UgZHUgY29uY8OpZGFudCwgYXV0cmUgcXVlIGNlbGxlIHJlcXVpc2UgcGVybWV0dGFudCBkJ2lkZW50aWZpZXIgbGEgcHJvdmVuYW5jZSBkdSBsb2dpY2llbC5cblxuICAgNy4gR2FyYW50aWVzXG5cbiAgIFNhdWYgbWVudGlvbiBjb250cmFpcmUsIGxlIGNvbmPDqWRhbnQgZGlzdHJpYnVlIGxlIGxvZ2ljaWVsIHNhbnMgYXVjdW5lIGdhcmFudGllLCBhdXggcmlzcXVlcyBldCBww6lyaWxzIGRlIGwnYWNxdcOpcmV1ciBkZSBsYSBjb3BpZSBkdSBsb2dpY2llbCwgZXQgY2UsIHNhbnMgYXNzdXJlciBxdWUgbGUgbG9naWNpZWwgcHVpc3NlIHLDqXBvbmRyZSDDoCB1biBiZXNvaW4gcGFydGljdWxpZXIgb3UgcHVpc3NlIGRvbm5lciB1biByw6lzdWx0YXQgcXVlbGNvbnF1ZS5cblxuICAgU2FucyBsaWVyIGxlIGNvbmPDqWRhbnQgZCd1bmUgcXVlbGNvbnF1ZSBtYW5pw6hyZSwgcmllbiBuJ2VtcMOqY2hlIHVuIGxpY2VuY2nDqSBkJ29mZnJpciBvdSBkJ2V4Y2x1cmUgZGVzIGdhcmFudGllcyBvdSBkdSBzdXBwb3J0LlxuXG4gICA4LiBSZXNwb25zYWJpbGl0w6lcblxuICAgTGUgbGljZW5jacOpIGVzdCByZXNwb25zYWJsZSBkZSB0b3V0IHByw6lqdWRpY2UgcsOpc3VsdGFudCBkZSBsJ2V4ZXJjaWNlIGRlcyBkcm9pdHMgYWNjb3Jkw6lzIHBhciBsYSBsaWNlbmNlLlxuXG4gICBMZSBjb25jw6lkYW50IG5lIHNhdXJhaXQgw6p0cmUgdGVudSByZXNwb25zYWJsZSBkdSBwcsOpanVkaWNlIHN1YmkgcGFyIGxlIGxpY2VuY2nDqSBvdSBwYXIgZGVzIHRpZXJzLCBwb3VyIHF1ZWxxdWUgY2F1c2UgcXVlIGNlIHNvaXQgZW4gbGllbiBhdmVjIGxhIGxpY2VuY2UgZXQgbGVzIGRyb2l0cyBxdWkgeSBzb250IGFjY29yZMOpcy5cblxuICAgOS4gUsOpc2lsaWF0aW9uXG5cbiAgIExhIHByw6lzZW50ZSBsaWNlbmNlIGVzdCByw6lzaWxpw6llIGRlIHBsZWluIGRyb2l0IGTDqHMgcXVlIGxlcyBkcm9pdHMgcXVpIHkgc29udCBhY2NvcmTDqXMgbmUgc29udCBwYXMgZXhlcmPDqXMgY29uZm9ybcOpbWVudCBhdXggdGVybWVzIHF1aSB5IHNvbnQgc3RpcHVsw6lzLlxuXG4gICBUb3V0ZWZvaXMsIHNpIGxlIGTDqWZhdXQgZXN0IGNvcnJpZ8OpIGRhbnMgdW4gZMOpbGFpIGRlIDMwIGpvdXJzIGRlIHNhIHByaXNlIGRlIGNvbm5haXNzYW5jZSBwYXIgbGEgcGVyc29ubmUgZW4gZMOpZmF1dCwgZXQgcXUnaWwgcydhZ2l0IGR1IHByZW1pZXIgZMOpZmF1dCwgbGEgbGljZW5jZSBlc3QgYWNjb3Jkw6llIGRlIG5vdXZlYXUuXG5cbiAgIFBvdXIgdG91dCBkw6lmYXV0IHN1YnPDqXF1ZW50LCBsZSBjb25zZW50ZW1lbnQgZXhwcsOocyBkdSBjb25jw6lkYW50IGVzdCBuw6ljZXNzYWlyZSBhZmluIHF1ZSBsYSBsaWNlbmNlIHNvaXQgYWNjb3Jkw6llIGRlIG5vdXZlYXUuXG5cbiAgIDEwLiBWZXJzaW9uIGRlIGxhIGxpY2VuY2VcblxuICAgTGUgQ2VudHJlIGRlIHNlcnZpY2VzIHBhcnRhZ8OpcyBkdSBRdcOpYmVjLCBzZXMgYXlhbnRzIGNhdXNlIG91IHRvdXRlIHBlcnNvbm5lIHF1J2lsIGTDqXNpZ25lLCBwZXV2ZW50IGRpZmZ1c2VyIGRlcyB2ZXJzaW9ucyByw6l2aXPDqWVzIG91IG1vZGlmacOpZXMgZGUgY2V0dGUgbGljZW5jZS4gQ2hhcXVlIHZlcnNpb24gcmVjZXZyYSB1biBudW3DqXJvIHVuaXF1ZS4gU2kgdW4gbG9naWNpZWwgZXN0IGTDqWrDoCBzb3VtaXMgYXV4IHRlcm1lcyBkJ3VuZSB2ZXJzaW9uIHNww6ljaWZpcXVlLCBjJ2VzdCBzZXVsZW1lbnQgY2V0dGUgdmVyc2lvbiBxdWkgbGllcmEgbGVzIHBhcnRpZXMgw6AgbGEgbGljZW5jZS5cblxuICAgTGUgY29uY8OpZGFudCBwZXV0IGF1c3NpIGNob2lzaXIgZGUgY29uY8OpZGVyIGxhIGxpY2VuY2Ugc291cyBsYSB2ZXJzaW9uIGFjdHVlbGxlIG91IHRvdXRlIHZlcnNpb24gdWx0w6lyaWV1cmUsIGF1cXVlbCBjYXMgbGUgbGljZW5jacOpIHBldXQgY2hvaXNpciBzb3VzIHF1ZWxsZSB2ZXJzaW9uIGxhIGxpY2VuY2UgbHVpIGVzdCBhY2NvcmTDqWUuXG5cbiAgIDExLiBEaXZlcnNcblxuICAgRGFucyBsYSBtZXN1cmUgb8O5IGxlIGNvbmPDqWRhbnQgZXN0IHVuIG1pbmlzdMOocmUsIHVuIG9yZ2FuaXNtZSBwdWJsaWMgb3UgdW5lIHBlcnNvbm5lIG1vcmFsZSBkZSBkcm9pdCBwdWJsaWMsIGNyw6nDqXMgZW4gdmVydHUgZCd1bmUgbG9pIGRlIGwnQXNzZW1ibMOpZSBuYXRpb25hbGUgZHUgUXXDqWJlYywgbGEgbGljZW5jZSBlc3QgcsOpZ2llIHBhciBsZSBkcm9pdCBhcHBsaWNhYmxlIGF1IFF1w6liZWMgZXQgZW4gY2FzIGRlIGNvbnRlc3RhdGlvbiwgbGVzIHRyaWJ1bmF1eCBkdSBRdcOpYmVjIHNlcm9udCBzZXVscyBjb21ww6l0ZW50cy5cblxuICAgTGEgcHLDqXNlbnRlIGxpY2VuY2UgcGV1dCDDqnRyZSBkaXN0cmlidcOpZSBzYW5zIGNvbmRpdGlvbnMgcGFydGljdWxpw6hyZXMuIFRvdXRlZm9pcywgdW5lIHZlcnNpb24gbW9kaWZpw6llIGRvaXQgw6p0cmUgZGlzdHJpYnXDqWUgc291cyB1biBub20gZGlmZsOpcmVudC4gVG91dGUgcsOpZsOpcmVuY2UgYXUgQ2VudHJlIGRlIHNlcnZpY2VzIHBhcnRhZ8OpcyBkdSBRdcOpYmVjLCBldCwgbGUgY2FzIMOpY2jDqWFudCwgc2VzIGF5YW50IGRyb2l0LCBkb2l0IMOqdHJlIHJldGlyw6llLCBhdXRyZSBxdWUgY2VsbGUgcGVybWV0dGFudCBkJ2lkZW50aWZpZXIgbGEgcHJvdmVuYW5jZSBkZSBsYSBsaWNlbmNlLiJdLCJsaWNlbnNlSWRzIjpbIkxpTGlRLVItMS4xIl0sImtleXdvcmRzIjpbImxvZ2ljaWVsIG1vZGlmaSBxdSIsIm1vZGlmaSBxdSBpbCIsImxvZ2ljaWVsIG1vZGlmaSBjZSIsIm1vZGlmaSBjZSBkZXJuaWVyIiwibG9naWNpZWwgbW9kaWZpIGNvbWJpbiIsIm1vZGlmaSBjb21iaW4gdW4iLCJlc3QgY29tcGFyYWJsZSBvdSIsImNvbXBhcmFibGUgb3Ugc3VwIiwib3Ugc3VwIHJpZXVyIiwic3VwIHJpZXVyIGNlbHVpIiwicmlldXIgY2VsdWkgZGUiLCIxIGNvbW1vbiBkZXZlbG9wbWVudCIsImxpY2Vuc2UgY2RkbCAxIiwiY2RkbCAxIDAiLCIwIDIgY29tbW9uIiwiMiBjb21tb24gcHVibGljIiwiMSAwIDMiLCIwIDMgY29udHJhdCIsIjMgY29udHJhdCBkZSIsIjIgMSA0IiwiMSA0IGNvbnRyYXQiLCI0IGNvbnRyYXQgZGUiLCJsaWJyZSBjZWNpbGwgYyIsImNlY2lsbCBjIGNlY2lsbCIsImMgY2VjaWxsIGMiLCJjZWNpbGwgYyA1IiwiYyA1IGVjbGlwc2UiLCI1IGVjbGlwc2UgcHVibGljIiwiMCA2IGV1cm9wZWFuIiwiNiBldXJvcGVhbiB1bmlvbiIsIjEgMSA3IiwiMSA3IGxpY2VuY2UiLCI3IGxpY2VuY2UgbGlicmUiLCJjaXByb2NpdCBmb3J0ZSB2ZXJzaW9uIiwiZm9ydGUgdmVyc2lvbiAxIiwiMSAxIGxpbGlxIiwiMSBsaWxpcSByIiwibGlsaXEgciAxIiwiciAxIDEiLCIxIDEgOCIsIjEgOCBnbnUiLCI4IGdudSBnZW5lcmFsIiwiZ251IGdwbHYyIDkiLCJncGx2MiA5IGdudSIsIjkgZ251IGdlbmVyYWwiLCJnbnUgZ3BsdjMgMTAiLCJncGx2MyAxMCBnbnUiLCIxMCBnbnUgbGVzc2VyIiwiMiAxIGdudSIsIjEgZ251IGxncGx2MiIsImdudSBsZ3BsdjIgMSIsImxncGx2MiAxIDExIiwiMSAxMSBnbnUiLCIxMSBnbnUgbGVzc2VyIiwiMyBnbnUgbGdwbHYzIiwiZ251IGxncGx2MyAxMiIsImxncGx2MyAxMiBtb3ppbGxhIiwiMTIgbW96aWxsYSBwdWJsaWMiLCIyIDAgbXBsIiwiMCBtcGwgMiIsIjIgMCA1IiwiMCA1IGNvbnRyaWJ1dGlvbnMiLCJzZXMgYXlhbnQgZHJvaXQiLCJheWFudCBkcm9pdCBkb2l0IiwiZHJvaXQgZG9pdCB0cmUiLCJjaXByb2NpdCBsaWxpcSByIHZlcnNpb24iLCJjaXByb2NpdCBsaWxpcSByIGNpIiwidG91dCBsb2dpY2llbCBtb2RpZmkgcXUiLCJsb2dpY2llbCBtb2RpZmkgcXUgaWwiLCJtb2RpZmkgcXUgaWwgZGlzdHJpYnVlIiwiZGlzdHJpYnVlIGxlIGxvZ2ljaWVsIG91IiwidW4gbG9naWNpZWwgbW9kaWZpIGNlIiwibG9naWNpZWwgbW9kaWZpIGNlIGRlcm5pZXIiLCJtb2RpZmkgY2UgZGVybmllciBkb2l0IiwidW4gbG9naWNpZWwgbW9kaWZpIGNvbWJpbiIsImxvZ2ljaWVsIG1vZGlmaSBjb21iaW4gdW4iLCJtb2RpZmkgY29tYmluIHVuIGxvZ2ljaWVsIiwiY2lwcm9jaXQgZXN0IGNvbXBhcmFibGUgb3UiLCJlc3QgY29tcGFyYWJsZSBvdSBzdXAiLCJjb21wYXJhYmxlIG91IHN1cCByaWV1ciIsIm91IHN1cCByaWV1ciBjZWx1aSIsInN1cCByaWV1ciBjZWx1aSBkZSIsInJpZXVyIGNlbHVpIGRlIGxhIiwibm90YW1tZW50IDEgY29tbW9uIGRldmVsb3BtZW50IiwiMSBjb21tb24gZGV2ZWxvcG1lbnQgYW5kIiwiZGlzdHJpYnV0aW9uIGxpY2Vuc2UgY2RkbCAxIiwibGljZW5zZSBjZGRsIDEgMCIsImNkZGwgMSAwIDIiLCIxIDAgMiBjb21tb24iLCIwIDIgY29tbW9uIHB1YmxpYyIsIjIgY29tbW9uIHB1YmxpYyBsaWNlbnNlIiwiY3BsIDEgMCAzIiwiMSAwIDMgY29udHJhdCIsIjAgMyBjb250cmF0IGRlIiwiMyBjb250cmF0IGRlIGxpY2VuY2UiLCJjZWNpbGwgMiAxIDQiLCIyIDEgNCBjb250cmF0IiwiMSA0IGNvbnRyYXQgZGUiLCI0IGNvbnRyYXQgZGUgbGljZW5jZSIsImxvZ2ljaWVsIGxpYnJlIGNlY2lsbCBjIiwibGlicmUgY2VjaWxsIGMgY2VjaWxsIiwiY2VjaWxsIGMgY2VjaWxsIGMiLCJjIGNlY2lsbCBjIDUiLCJjZWNpbGwgYyA1IGVjbGlwc2UiLCJjIDUgZWNsaXBzZSBwdWJsaWMiLCI1IGVjbGlwc2UgcHVibGljIGxpY2Vuc2UiLCJlcGwgMSAwIDYiLCIxIDAgNiBldXJvcGVhbiIsIjAgNiBldXJvcGVhbiB1bmlvbiIsIjYgZXVyb3BlYW4gdW5pb24gcHVibGljIiwidiAxIDEgNyIsIjEgMSA3IGxpY2VuY2UiLCIxIDcgbGljZW5jZSBsaWJyZSIsIjcgbGljZW5jZSBsaWJyZSBkdSIsInIgY2lwcm9jaXQgZm9ydGUgdmVyc2lvbiIsImNpcHJvY2l0IGZvcnRlIHZlcnNpb24gMSIsImZvcnRlIHZlcnNpb24gMSAxIiwidmVyc2lvbiAxIDEgbGlsaXEiLCIxIDEgbGlsaXEgciIsIjEgbGlsaXEgciAxIiwibGlsaXEgciAxIDEiLCJyIDEgMSA4IiwiMSAxIDggZ251IiwiMSA4IGdudSBnZW5lcmFsIiwiOCBnbnUgZ2VuZXJhbCBwdWJsaWMiLCIyIGdudSBncGx2MiA5IiwiZ251IGdwbHYyIDkgZ251IiwiZ3BsdjIgOSBnbnUgZ2VuZXJhbCIsIjkgZ251IGdlbmVyYWwgcHVibGljIiwiMyBnbnUgZ3BsdjMgMTAiLCJnbnUgZ3BsdjMgMTAgZ251IiwiZ3BsdjMgMTAgZ251IGxlc3NlciIsIjEwIGdudSBsZXNzZXIgZ2VuZXJhbCIsInZlcnNpb24gMiAxIGdudSIsIjIgMSBnbnUgbGdwbHYyIiwiMSBnbnUgbGdwbHYyIDEiLCJnbnUgbGdwbHYyIDEgMTEiLCJsZ3BsdjIgMSAxMSBnbnUiLCIxIDExIGdudSBsZXNzZXIiLCIxMSBnbnUgbGVzc2VyIGdlbmVyYWwiLCJ2ZXJzaW9uIDMgZ251IGxncGx2MyIsIjMgZ251IGxncGx2MyAxMiIsImdudSBsZ3BsdjMgMTIgbW96aWxsYSIsImxncGx2MyAxMiBtb3ppbGxhIHB1YmxpYyIsIjEyIG1vemlsbGEgcHVibGljIGxpY2Vuc2UiLCJ2ZXJzaW9uIDIgMCBtcGwiLCIyIDAgbXBsIDIiLCIwIG1wbCAyIDAiLCJtcGwgMiAwIDUiLCIyIDAgNSBjb250cmlidXRpb25zIiwiMCA1IGNvbnRyaWJ1dGlvbnMgc291cyIsImFudCBzZXMgYXlhbnQgZHJvaXQiLCJzZXMgYXlhbnQgZHJvaXQgZG9pdCIsImF5YW50IGRyb2l0IGRvaXQgdHJlIiwiZHJvaXQgZG9pdCB0cmUgcmV0aXIiLCJyIGNpcHJvY2l0IGxpbGlxIHIgdmVyc2lvbiIsImNpcHJvY2l0IGxpbGlxIHIgdmVyc2lvbiAxIiwiciBjaXByb2NpdCBsaWxpcSByIGNpIiwiY2lwcm9jaXQgbGlsaXEgciBjaSBhcHIiLCJwb3VyIHRvdXQgbG9naWNpZWwgbW9kaWZpIHF1IiwidG91dCBsb2dpY2llbCBtb2RpZmkgcXUgaWwiLCJsb2dpY2llbCBtb2RpZmkgcXUgaWwgZGlzdHJpYnVlIiwibW9kaWZpIHF1IGlsIGRpc3RyaWJ1ZSBjaGFxdWUiLCJsaWNlbmNpIGRpc3RyaWJ1ZSBsZSBsb2dpY2llbCBvdSIsImRpc3RyaWJ1ZSBsZSBsb2dpY2llbCBvdSB1biIsIm91IHVuIGxvZ2ljaWVsIG1vZGlmaSBjZSIsInVuIGxvZ2ljaWVsIG1vZGlmaSBjZSBkZXJuaWVyIiwibG9naWNpZWwgbW9kaWZpIGNlIGRlcm5pZXIgZG9pdCIsIm1vZGlmaSBjZSBkZXJuaWVyIGRvaXQgYXNzdW1lciIsImRpc3RyaWJ1ZXIgdW4gbG9naWNpZWwgbW9kaWZpIGNvbWJpbiIsInVuIGxvZ2ljaWVsIG1vZGlmaSBjb21iaW4gdW4iLCJsb2dpY2llbCBtb2RpZmkgY29tYmluIHVuIGxvZ2ljaWVsIiwibW9kaWZpIGNvbWJpbiB1biBsb2dpY2llbCBhc3N1amV0dGkiLCJyIGNpcHJvY2l0IGVzdCBjb21wYXJhYmxlIG91IiwiY2lwcm9jaXQgZXN0IGNvbXBhcmFibGUgb3Ugc3VwIiwiZXN0IGNvbXBhcmFibGUgb3Ugc3VwIHJpZXVyIiwiY29tcGFyYWJsZSBvdSBzdXAgcmlldXIgY2VsdWkiLCJvdSBzdXAgcmlldXIgY2VsdWkgZGUiLCJzdXAgcmlldXIgY2VsdWkgZGUgbGEiLCJyaWV1ciBjZWx1aSBkZSBsYSBwciIsIm1vaW5kcmUgbm90YW1tZW50IDEgY29tbW9uIGRldmVsb3BtZW50Iiwibm90YW1tZW50IDEgY29tbW9uIGRldmVsb3BtZW50IGFuZCIsIjEgY29tbW9uIGRldmVsb3BtZW50IGFuZCBkaXN0cmlidXRpb24iLCJhbmQgZGlzdHJpYnV0aW9uIGxpY2Vuc2UgY2RkbCAxIiwiZGlzdHJpYnV0aW9uIGxpY2Vuc2UgY2RkbCAxIDAiLCJsaWNlbnNlIGNkZGwgMSAwIDIiLCJjZGRsIDEgMCAyIGNvbW1vbiIsIjEgMCAyIGNvbW1vbiBwdWJsaWMiLCIwIDIgY29tbW9uIHB1YmxpYyBsaWNlbnNlIiwiMiBjb21tb24gcHVibGljIGxpY2Vuc2UgdmVyc2lvbiIsIjAgY3BsIDEgMCAzIiwiY3BsIDEgMCAzIGNvbnRyYXQiLCIxIDAgMyBjb250cmF0IGRlIiwiMCAzIGNvbnRyYXQgZGUgbGljZW5jZSIsIjMgY29udHJhdCBkZSBsaWNlbmNlIGRlIiwiMSBjZWNpbGwgMiAxIDQiLCJjZWNpbGwgMiAxIDQgY29udHJhdCIsIjIgMSA0IGNvbnRyYXQgZGUiLCIxIDQgY29udHJhdCBkZSBsaWNlbmNlIiwiNCBjb250cmF0IGRlIGxpY2VuY2UgZGUiXX0seyJsaWNlbnNlVGV4dHMiOlsiTGljZW5jZSBMaWJyZSBkdSBRdcOpYmVjIOKAkyBSw6ljaXByb2NpdMOpIGZvcnRlIChMaUxpUS1SKylcblxuVmVyc2lvbiAxLjFcblxuICAgMS4gUHLDqWFtYnVsZVxuXG4gICBDZXR0ZSBsaWNlbmNlIHMnYXBwbGlxdWUgw6AgdG91dCBsb2dpY2llbCBkaXN0cmlidcOpIGRvbnQgbGUgdGl0dWxhaXJlIGR1IGRyb2l0IGQnYXV0ZXVyIHByw6ljaXNlIHF1J2lsIGVzdCBzdWpldCBhdXggdGVybWVzIGRlIGxhIExpY2VuY2UgTGlicmUgZHUgUXXDqWJlYyDigJMgUsOpY2lwcm9jaXTDqSBmb3J0ZSAoTGlMaVEtUispIChjaS1hcHLDqHMgYXBwZWzDqWUgbGEgwqvCoGxpY2VuY2XCoMK7KS5cblxuICAgMi4gRMOpZmluaXRpb25zXG5cbiAgIERhbnMgbGEgcHLDqXNlbnRlIGxpY2VuY2UsIMOgIG1vaW5zIHF1ZSBsZSBjb250ZXh0ZSBuJ2luZGlxdWUgdW4gc2VucyBkaWZmw6lyZW50LCBvbiBlbnRlbmQgcGFyOlxuXG4gICDCqyBjb25jw6lkYW50IMK7IDogbGUgdGl0dWxhaXJlIGR1IGRyb2l0IGQnYXV0ZXVyIHN1ciBsZSBsb2dpY2llbCwgb3UgdG91dGUgcGVyc29ubmUgZMO7bWVudCBhdXRvcmlzw6llIHBhciBjZSBkZXJuaWVyIMOgIGFjY29yZGVyIGxhIHByw6lzZW50ZSBsaWNlbmNlO1xuXG4gICDCqyBjb250cmlidXRldXIgwrsgOiBsZSB0aXR1bGFpcmUgZHUgZHJvaXQgZCdhdXRldXIgb3UgdG91dGUgcGVyc29ubmUgYXV0b3Jpc8OpZSBwYXIgY2UgZGVybmllciDDoCBzb3VtZXR0cmUgYXUgY29uY8OpZGFudCB1bmUgY29udHJpYnV0aW9uLiBVbiBjb250cmlidXRldXIgZG9udCBzYSBjb250cmlidXRpb24gZXN0IGluY29ycG9yw6llIGF1IGxvZ2ljaWVsIGVzdCBjb25zaWTDqXLDqSBjb21tZSB1biBjb25jw6lkYW50IGVuIHJlZ2FyZCBkZSBzYSBjb250cmlidXRpb247XG5cbiAgIMKrIGNvbnRyaWJ1dGlvbiDCuyA6IHRvdXQgbG9naWNpZWwgb3JpZ2luYWwsIG91IHBhcnRpZSBkZSBsb2dpY2llbCBvcmlnaW5hbCBzb3VtaXMgZXQgZGVzdGluw6kgw6Agw6p0cmUgaW5jb3Jwb3LDqSBkYW5zIGxlIGxvZ2ljaWVsO1xuXG4gICDCqyBkaXN0cmlidXRpb24gwrsgOiBsZSBmYWl0IGRlIGTDqWxpdnJlciB1bmUgY29waWUgZHUgbG9naWNpZWw7XG5cbiAgIMKrIGxpY2VuY2nDqSDCuyA6IHRvdXRlIHBlcnNvbm5lIHF1aSBwb3Nzw6hkZSB1bmUgY29waWUgZHUgbG9naWNpZWwgZXQgcXVpIGV4ZXJjZSBsZXMgZHJvaXRzIGNvbmPDqWTDqXMgcGFyIGxhIGxpY2VuY2U7XG5cbiAgIMKrIGxvZ2ljaWVsIMK7IDogdW5lIMWTdXZyZSBwcm90w6lnw6llIHBhciBsZSBkcm9pdCBkJ2F1dGV1ciwgdGVsbGUgcXUndW4gcHJvZ3JhbW1lIGQnb3JkaW5hdGV1ciBldCBzYSBkb2N1bWVudGF0aW9uLCBwb3VyIGxhcXVlbGxlIGxlIHRpdHVsYWlyZSBkdSBkcm9pdCBkJ2F1dGV1ciBhIHByw6ljaXPDqSBxdSdlbGxlIGVzdCBzdWpldHRlIGF1eCB0ZXJtZXMgZGUgbGEgcHLDqXNlbnRlIGxpY2VuY2U7XG5cbiAgIMKrIGxvZ2ljaWVsIGTDqXJpdsOpIMK7IDogdG91dCBsb2dpY2llbCBvcmlnaW5hbCByw6lhbGlzw6kgcGFyIHVuIGxpY2VuY2nDqSwgYXV0cmUgcXVlIGxlIGxvZ2ljaWVsIG91IHVuIGxvZ2ljaWVsIG1vZGlmacOpLCBxdWkgcHJvZHVpdCBvdSByZXByb2R1aXQgbGEgdG90YWxpdMOpIG91IHVuZSBwYXJ0aWUgaW1wb3J0YW50ZSBkdSBsb2dpY2llbDtcblxuICAgwqsgbG9naWNpZWwgbW9kaWZpw6kgwrsgOiB0b3V0ZSBtb2RpZmljYXRpb24gcGFyIHVuIGxpY2VuY2nDqSBkZSBsJ3VuIGRlcyBmaWNoaWVycyBzb3VyY2UgZHUgbG9naWNpZWwgb3UgZW5jb3JlIHRvdXQgbm91dmVhdSBmaWNoaWVyIHNvdXJjZSBxdWkgaW5jb3Jwb3JlIGxlIGxvZ2ljaWVsIG91IHVuZSBwYXJ0aWUgaW1wb3J0YW50ZSBkZSBjZSBkZXJuaWVyLlxuXG4gICAzLiBMaWNlbmNlIGRlIGRyb2l0IGQnYXV0ZXVyXG5cbiAgIFNvdXMgcsOpc2VydmUgZGVzIHRlcm1lcyBkZSBsYSBsaWNlbmNlLCBsZSBjb25jw6lkYW50IGFjY29yZGUgYXUgbGljZW5jacOpIHVuZSBsaWNlbmNlIG5vbiBleGNsdXNpdmUgZXQgbGlicmUgZGUgcmVkZXZhbmNlcyBsdWkgcGVybWV0dGFudCBkJ2V4ZXJjZXIgbGVzIGRyb2l0cyBzdWl2YW50cyBzdXIgbGUgbG9naWNpZWw6XG5cbiAgICAgIDEgUHJvZHVpcmUgb3UgcmVwcm9kdWlyZSBsYSB0b3RhbGl0w6kgb3UgdW5lIHBhcnRpZSBpbXBvcnRhbnRlO1xuXG4gICAgICAyIEV4w6ljdXRlciBvdSByZXByw6lzZW50ZXIgbGEgdG90YWxpdMOpIG91IHVuZSBwYXJ0aWUgaW1wb3J0YW50ZSBlbiBwdWJsaWM7XG5cbiAgICAgIDMgUHVibGllciBsYSB0b3RhbGl0w6kgb3UgdW5lIHBhcnRpZSBpbXBvcnRhbnRlLlxuXG4gICBDZXR0ZSBsaWNlbmNlIGVzdCBhY2NvcmTDqWUgc2FucyBsaW1pdGUgdGVycml0b3JpYWxlIGV0IHNhbnMgbGltaXRlIGRlIHRlbXBzLlxuXG4gICBMJ2V4ZXJjaWNlIGNvbXBsZXQgZGUgY2VzIGRyb2l0cyBlc3Qgc3VqZXQgw6AgbGEgZGlzdHJpYnV0aW9uIHBhciBsZSBjb25jw6lkYW50IGR1IGNvZGUgc291cmNlIGR1IGxvZ2ljaWVsLCBsZXF1ZWwgZG9pdCDDqnRyZSBzb3VzIHVuZSBmb3JtZSBwZXJtZXR0YW50IGQneSBhcHBvcnRlciBkZXMgbW9kaWZpY2F0aW9ucy4gTGUgY29uY8OpZGFudCBwZXV0IGF1c3NpIGRpc3RyaWJ1ZXIgbGUgbG9naWNpZWwgYWNjb21wYWduw6kgZCd1bmUgb2ZmcmUgZGUgZGlzdHJpYnVlciBsZSBjb2RlIHNvdXJjZSBkdSBsb2dpY2llbCwgc2FucyBmcmFpcyBzdXBwbMOpbWVudGFpcmVzLCBhdXRyZXMgcXVlIGNldXggcmFpc29ubmFibGVzIGFmaW4gZGUgcGVybWV0dHJlIGxhIGxpdnJhaXNvbiBkdSBjb2RlIHNvdXJjZS4gQ2V0dGUgb2ZmcmUgZG9pdCDDqnRyZSB2YWxpZGUgcGVuZGFudCB1bmUgZHVyw6llIHJhaXNvbm5hYmxlLlxuXG4gICA0LiBEaXN0cmlidXRpb25cblxuICAgTGUgbGljZW5jacOpIHBldXQgZGlzdHJpYnVlciBkZXMgY29waWVzIGR1IGxvZ2ljaWVsLCBkJ3VuIGxvZ2ljaWVsIG1vZGlmacOpIG91IGTDqXJpdsOpLCBzb3VzIHLDqXNlcnZlIGRlIHJlc3BlY3RlciBsZXMgY29uZGl0aW9ucyBzdWl2YW50ZXMgOlxuXG4gICAgICAxIExlIGxvZ2ljaWVsIGRvaXQgw6p0cmUgYWNjb21wYWduw6kgZCd1biBleGVtcGxhaXJlIGRlIGNldHRlIGxpY2VuY2U7XG5cbiAgICAgIDIgU2kgbGUgbG9naWNpZWwgYSDDqXTDqSBtb2RpZmnDqSwgbGUgbGljZW5jacOpIGRvaXQgZW4gZmFpcmUgbGEgbWVudGlvbiwgZGUgcHLDqWbDqXJlbmNlIGRhbnMgY2hhY3VuIGRlcyBmaWNoaWVycyBtb2RpZmnDqXMgZG9udCBsYSBuYXR1cmUgcGVybWV0IHVuZSB0ZWxsZSBtZW50aW9uO1xuXG4gICAgICAzIExlcyDDqXRpcXVldHRlcyBvdSBtZW50aW9ucyBmYWlzYW50IMOpdGF0IGRlcyBkcm9pdHMgZCdhdXRldXIsIGRlcyBtYXJxdWVzIGRlIGNvbW1lcmNlLCBkZXMgZ2FyYW50aWVzIG91IGRlIGxhIHBhdGVybml0w6kgY29uY2VybmFudCBsZSBsb2dpY2llbCBuZSBkb2l2ZW50IHBhcyDDqnRyZSBtb2RpZmnDqWVzIG91IHN1cHByaW3DqWVzLCDDoCBtb2lucyBxdWUgY2VzIMOpdGlxdWV0dGVzIG91IG1lbnRpb25zIG5lIHNvaWVudCBpbmFwcGxpY2FibGVzIMOgIHVuIGxvZ2ljaWVsIG1vZGlmacOpIG91IGTDqXJpdsOpIGRvbm7DqS5cblxuICAgNC4xLiBSw6ljaXByb2NpdMOpXG5cbiAgIENoYXF1ZSBmb2lzIHF1ZSBsZSBsaWNlbmNpw6kgZGlzdHJpYnVlIGxlIGxvZ2ljaWVsLCBsZSBjb25jw6lkYW50IG9mZnJlIGF1IHLDqWNpcGllbmRhaXJlIHVuZSBjb25jZXNzaW9uIHN1ciBsZSBsb2dpY2llbCBzZWxvbiBsZXMgdGVybWVzIGRlIGxhIHByw6lzZW50ZSBsaWNlbmNlLiBMZSBsaWNlbmNpw6kgZG9pdCBvZmZyaXIgdW5lIGNvbmNlc3Npb24gc2Vsb24gbGVzIHRlcm1lcyBkZSBsYSBwcsOpc2VudGUgbGljZW5jZSBwb3VyIHRvdXQgbG9naWNpZWwgbW9kaWZpw6kgb3UgZMOpcml2w6kgcXUnaWwgZGlzdHJpYnVlLlxuXG4gICBDaGFxdWUgZm9pcyBxdWUgbGUgbGljZW5jacOpIGRpc3RyaWJ1ZSBsZSBsb2dpY2llbCwgdW4gbG9naWNpZWwgbW9kaWZpw6ksIG91IHVuIGxvZ2ljaWVsIGTDqXJpdsOpLCBjZSBkZXJuaWVyIGRvaXQgYXNzdW1lciBsJ29ibGlnYXRpb24gZCdlbiBkaXN0cmlidWVyIGxlIGNvZGUgc291cmNlLCBkZSBsYSBtYW5pw6hyZSBwcsOpdnVlIGF1IHRyb2lzacOobWUgYWxpbsOpYSBkZSBsJ2FydGljbGUgMy5cblxuICAgNC4yLiBDb21wYXRpYmlsaXTDqVxuXG4gICBEYW5zIGxhIG1lc3VyZSBvw7kgbGUgbGljZW5jacOpIHNvdWhhaXRlIGRpc3RyaWJ1ZXIgdW4gbG9naWNpZWwgbW9kaWZpw6kgb3UgZMOpcml2w6kgY29tYmluw6kgw6AgdW4gbG9naWNpZWwgYXNzdWpldHRpIMOgIHVuZSBsaWNlbmNlIGNvbXBhdGlibGUsIG1haXMgZG9udCBpbCBuZSBzZXJhaXQgcGFzIHBvc3NpYmxlIGQnZW4gcmVzcGVjdGVyIGxlcyB0ZXJtZXMsIGxlIGNvbmPDqWRhbnQgb2ZmcmUsIGVuIHBsdXMgZGUgbGEgcHLDqXNlbnRlIGNvbmNlc3Npb24sIHVuZSBjb25jZXNzaW9uIHNlbG9uIGxlcyB0ZXJtZXMgZGUgY2V0dGUgbGljZW5jZSBjb21wYXRpYmxlLlxuXG4gICBVbiBsaWNlbmNpw6kgcXVpIGVzdCB0aXR1bGFpcmUgZXhjbHVzaWYgZHUgZHJvaXQgZCdhdXRldXIgc3VyIGxlIGxvZ2ljaWVsIGFzc3VqZXR0aSDDoCB1bmUgbGljZW5jZSBjb21wYXRpYmxlIG5lIHBldXQgcGFzIHNlIHByw6l2YWxvaXIgZGUgY2V0dGUgb2ZmcmUuIElsIGVuIGVzdCBkZSBtw6ptZSBwb3VyIHRvdXRlIGF1dHJlIHBlcnNvbm5lIGTDu21lbnQgYXV0b3Jpc8OpZSDDoCBzb3VzLWxpY2VuY2llciBwYXIgbGUgdGl0dWxhaXJlIGV4Y2x1c2lmIGR1IGRyb2l0IGQnYXV0ZXVyIHN1ciBsZSBsb2dpY2llbCBhc3N1amV0dGkgw6AgdW5lIGxpY2VuY2UgY29tcGF0aWJsZS5cblxuICAgRXN0IGNvbnNpZMOpcsOpZSBjb21tZSB1bmUgbGljZW5jZSBjb21wYXRpYmxlIHRvdXRlIGxpY2VuY2UgbGlicmUgYXBwcm91dsOpZSBvdSBjZXJ0aWZpw6llIHBhciBsYSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gb3UgbCdPcGVuIFNvdXJjZSBJbml0aWF0aXZlLCBkb250IGxlIG5pdmVhdSBkZSByw6ljaXByb2NpdMOpIGVzdCBjb21wYXJhYmxlIMOgIGNlbHVpIGRlIGxhIHByw6lzZW50ZSBsaWNlbmNlLCBzYW5zIHRvdXRlZm9pcyDDqnRyZSBtb2luZHJlLCBub3RhbW1lbnQ6XG5cbiAgICAgIDEgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChDUEwtMS4wKVxuXG4gICAgICAyIENvbnRyYXQgZGUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBDZUNJTEwsIHZlcnNpb24gMi4xIChDRUNJTEwtMi4xKVxuXG4gICAgICAzIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMCAoRVBMLTEuMClcblxuICAgICAgNCBFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAxLjEgKEVVUEwgdi4gMS4xKVxuXG4gICAgICA1IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiAoR05VIEdQTHYyKVxuXG4gICAgICA2IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMyAoR05VIEdQTHYzKVxuXG4gICA1LiBDb250cmlidXRpb25zXG5cbiAgIFNvdXMgcsOpc2VydmUgZCd1bmUgZW50ZW50ZSBkaXN0aW5jdGUsIHRvdXRlIGNvbnRyaWJ1dGlvbiBzb3VtaXNlIHBhciB1biBjb250cmlidXRldXIgYXUgY29uY8OpZGFudCBwb3VyIGluY2x1c2lvbiBkYW5zIGxlIGxvZ2ljaWVsIHNlcmEgc291bWlzZSBhdXggdGVybWVzIGRlIGNldHRlIGxpY2VuY2UuXG5cbiAgIDYuIE1hcnF1ZXMgZGUgY29tbWVyY2VcblxuICAgTGEgbGljZW5jZSBuJ2FjY29yZGUgYXVjdW5lIHBlcm1pc3Npb24gcGFydGljdWxpw6hyZSBxdWkgcGVybWV0dHJhaXQgZCd1dGlsaXNlciBsZXMgbWFycXVlcyBkZSBjb21tZXJjZSBkdSBjb25jw6lkYW50LCBhdXRyZSBxdWUgY2VsbGUgcmVxdWlzZSBwZXJtZXR0YW50IGQnaWRlbnRpZmllciBsYSBwcm92ZW5hbmNlIGR1IGxvZ2ljaWVsLlxuXG4gICA3LiBHYXJhbnRpZXNcblxuICAgU2F1ZiBtZW50aW9uIGNvbnRyYWlyZSwgbGUgY29uY8OpZGFudCBkaXN0cmlidWUgbGUgbG9naWNpZWwgc2FucyBhdWN1bmUgZ2FyYW50aWUsIGF1eCByaXNxdWVzIGV0IHDDqXJpbHMgZGUgbCdhY3F1w6lyZXVyIGRlIGxhIGNvcGllIGR1IGxvZ2ljaWVsLCBldCBjZSwgc2FucyBhc3N1cmVyIHF1ZSBsZSBsb2dpY2llbCBwdWlzc2UgcsOpcG9uZHJlIMOgIHVuIGJlc29pbiBwYXJ0aWN1bGllciBvdSBwdWlzc2UgZG9ubmVyIHVuIHLDqXN1bHRhdCBxdWVsY29ucXVlLlxuXG4gICBTYW5zIGxpZXIgbGUgY29uY8OpZGFudCBkJ3VuZSBxdWVsY29ucXVlIG1hbmnDqHJlLCByaWVuIG4nZW1ww6pjaGUgdW4gbGljZW5jacOpIGQnb2ZmcmlyIG91IGQnZXhjbHVyZSBkZXMgZ2FyYW50aWVzIG91IGR1IHN1cHBvcnQuXG5cbiAgIDguIFJlc3BvbnNhYmlsaXTDqVxuXG4gICBMZSBsaWNlbmNpw6kgZXN0IHJlc3BvbnNhYmxlIGRlIHRvdXQgcHLDqWp1ZGljZSByw6lzdWx0YW50IGRlIGwnZXhlcmNpY2UgZGVzIGRyb2l0cyBhY2NvcmTDqXMgcGFyIGxhIGxpY2VuY2UuXG5cbiAgIExlIGNvbmPDqWRhbnQgbmUgc2F1cmFpdCDDqnRyZSB0ZW51IHJlc3BvbnNhYmxlIGR1IHByw6lqdWRpY2Ugc3ViaSBwYXIgbGUgbGljZW5jacOpIG91IHBhciBkZXMgdGllcnMsIHBvdXIgcXVlbHF1ZSBjYXVzZSBxdWUgY2Ugc29pdCBlbiBsaWVuIGF2ZWMgbGEgbGljZW5jZSBldCBsZXMgZHJvaXRzIHF1aSB5IHNvbnQgYWNjb3Jkw6lzLlxuXG4gICA5LiBSw6lzaWxpYXRpb25cblxuICAgTGEgcHLDqXNlbnRlIGxpY2VuY2UgZXN0IHLDqXNpbGnDqWUgZGUgcGxlaW4gZHJvaXQgZMOocyBxdWUgbGVzIGRyb2l0cyBxdWkgeSBzb250IGFjY29yZMOpcyBuZSBzb250IHBhcyBleGVyY8OpcyBjb25mb3Jtw6ltZW50IGF1eCB0ZXJtZXMgcXVpIHkgc29udCBzdGlwdWzDqXMuXG5cbiAgIFRvdXRlZm9pcywgc2kgbGUgZMOpZmF1dCBlc3QgY29ycmlnw6kgZGFucyB1biBkw6lsYWkgZGUgMzAgam91cnMgZGUgc2EgcHJpc2UgZGUgY29ubmFpc3NhbmNlIHBhciBsYSBwZXJzb25uZSBlbiBkw6lmYXV0LCBldCBxdSdpbCBzJ2FnaXQgZHUgcHJlbWllciBkw6lmYXV0LCBsYSBsaWNlbmNlIGVzdCBhY2NvcmTDqWUgZGUgbm91dmVhdS5cblxuICAgUG91ciB0b3V0IGTDqWZhdXQgc3Vic8OpcXVlbnQsIGxlIGNvbnNlbnRlbWVudCBleHByw6hzIGR1IGNvbmPDqWRhbnQgZXN0IG7DqWNlc3NhaXJlIGFmaW4gcXVlIGxhIGxpY2VuY2Ugc29pdCBhY2NvcmTDqWUgZGUgbm91dmVhdS5cblxuICAgMTAuIFZlcnNpb24gZGUgbGEgbGljZW5jZVxuXG4gICBMZSBDZW50cmUgZGUgc2VydmljZXMgcGFydGFnw6lzIGR1IFF1w6liZWMsIHNlcyBheWFudHMgY2F1c2Ugb3UgdG91dGUgcGVyc29ubmUgcXUnaWwgZMOpc2lnbmUsIHBldXZlbnQgZGlmZnVzZXIgZGVzIHZlcnNpb25zIHLDqXZpc8OpZXMgb3UgbW9kaWZpw6llcyBkZSBjZXR0ZSBsaWNlbmNlLiBDaGFxdWUgdmVyc2lvbiByZWNldnJhIHVuIG51bcOpcm8gdW5pcXVlLiBTaSB1biBsb2dpY2llbCBlc3QgZMOpasOgIHNvdW1pcyBhdXggdGVybWVzIGQndW5lIHZlcnNpb24gc3DDqWNpZmlxdWUsIGMnZXN0IHNldWxlbWVudCBjZXR0ZSB2ZXJzaW9uIHF1aSBsaWVyYSBsZXMgcGFydGllcyDDoCBsYSBsaWNlbmNlLlxuXG4gICBMZSBjb25jw6lkYW50IHBldXQgYXVzc2kgY2hvaXNpciBkZSBjb25jw6lkZXIgbGEgbGljZW5jZSBzb3VzIGxhIHZlcnNpb24gYWN0dWVsbGUgb3UgdG91dGUgdmVyc2lvbiB1bHTDqXJpZXVyZSwgYXVxdWVsIGNhcyBsZSBsaWNlbmNpw6kgcGV1dCBjaG9pc2lyIHNvdXMgcXVlbGxlIHZlcnNpb24gbGEgbGljZW5jZSBsdWkgZXN0IGFjY29yZMOpZS5cblxuICAgMTEuIERpdmVyc1xuXG4gICBEYW5zIGxhIG1lc3VyZSBvw7kgbGUgY29uY8OpZGFudCBlc3QgdW4gbWluaXN0w6hyZSwgdW4gb3JnYW5pc21lIHB1YmxpYyBvdSB1bmUgcGVyc29ubmUgbW9yYWxlIGRlIGRyb2l0IHB1YmxpYywgY3LDqcOpcyBlbiB2ZXJ0dSBkJ3VuZSBsb2kgZGUgbCdBc3NlbWJsw6llIG5hdGlvbmFsZSBkdSBRdcOpYmVjLCBsYSBsaWNlbmNlIGVzdCByw6lnaWUgcGFyIGxlIGRyb2l0IGFwcGxpY2FibGUgYXUgUXXDqWJlYyBldCBlbiBjYXMgZGUgY29udGVzdGF0aW9uLCBsZXMgdHJpYnVuYXV4IGR1IFF1w6liZWMgc2Vyb250IHNldWxzIGNvbXDDqXRlbnRzLlxuXG4gICBMYSBwcsOpc2VudGUgbGljZW5jZSBwZXV0IMOqdHJlIGRpc3RyaWJ1w6llIHNhbnMgY29uZGl0aW9ucyBwYXJ0aWN1bGnDqHJlcy4gVG91dGVmb2lzLCB1bmUgdmVyc2lvbiBtb2RpZmnDqWUgZG9pdCDDqnRyZSBkaXN0cmlidcOpZSBzb3VzIHVuIG5vbSBkaWZmw6lyZW50LiBUb3V0ZSByw6lmw6lyZW5jZSBhdSBDZW50cmUgZGUgc2VydmljZXMgcGFydGFnw6lzIGR1IFF1w6liZWMsIGV0LCBsZSBjYXMgw6ljaMOpYW50LCBzZXMgYXlhbnQgY2F1c2UsIGRvaXQgw6p0cmUgcmV0aXLDqWUsIGF1dHJlIHF1ZSBjZWxsZSBwZXJtZXR0YW50IGQnaWRlbnRpZmllciBsYSBwcm92ZW5hbmNlIGRlIGxhIGxpY2VuY2UuIl0sImxpY2Vuc2VJZHMiOlsiTGlMaVEtUnBsdXMtMS4xIl0sImtleXdvcmRzIjpbImQgcml2IHF1Iiwicml2IHF1IGlsIiwibGUgbG9naWNpZWwgdW4iLCJsb2dpY2llbCB1biBsb2dpY2llbCIsIm1vZGlmaSBvdSB1biIsImQgcml2IGNlIiwicml2IGNlIGRlcm5pZXIiLCJkIHJpdiBjb21iaW4iLCJyaXYgY29tYmluIHVuIiwiZXN0IGNvbXBhcmFibGUgY2VsdWkiLCJjb21wYXJhYmxlIGNlbHVpIGRlIiwiMSBjb21tb24gcHVibGljIiwiMCAyIGNvbnRyYXQiLCIyIGNvbnRyYXQgZGUiLCIxIDMgZWNsaXBzZSIsIjMgZWNsaXBzZSBwdWJsaWMiLCIxIDAgNCIsIjAgNCBldXJvcGVhbiIsIjQgZXVyb3BlYW4gdW5pb24iLCIxIDEgNSIsIjEgNSBnbnUiLCI1IGdudSBnZW5lcmFsIiwiZ251IGdwbHYyIDYiLCJncGx2MiA2IGdudSIsIjYgZ251IGdlbmVyYWwiLCJnbnUgZ3BsdjMgNSIsImdwbHYzIDUgY29udHJpYnV0aW9ucyIsImZvcnRlIGxpbGlxIHIgdmVyc2lvbiIsImZvcnRlIGxpbGlxIHIgY2kiLCJ0b3V0IGxvZ2ljaWVsIG1vZGlmaSBvdSIsIm91IGQgcml2IHF1IiwiZCByaXYgcXUgaWwiLCJyaXYgcXUgaWwgZGlzdHJpYnVlIiwiZGlzdHJpYnVlIGxlIGxvZ2ljaWVsIHVuIiwibGUgbG9naWNpZWwgdW4gbG9naWNpZWwiLCJsb2dpY2llbCB1biBsb2dpY2llbCBtb2RpZmkiLCJsb2dpY2llbCBtb2RpZmkgb3UgdW4iLCJtb2RpZmkgb3UgdW4gbG9naWNpZWwiLCJvdSB1biBsb2dpY2llbCBkIiwidW4gbG9naWNpZWwgZCByaXYiLCJsb2dpY2llbCBkIHJpdiBjZSIsImQgcml2IGNlIGRlcm5pZXIiLCJyaXYgY2UgZGVybmllciBkb2l0Iiwib3UgZCByaXYgY29tYmluIiwiZCByaXYgY29tYmluIHVuIiwicml2IGNvbWJpbiB1biBsb2dpY2llbCIsImNpcHJvY2l0IGVzdCBjb21wYXJhYmxlIGNlbHVpIiwiZXN0IGNvbXBhcmFibGUgY2VsdWkgZGUiLCJjb21wYXJhYmxlIGNlbHVpIGRlIGxhIiwibm90YW1tZW50IDEgY29tbW9uIHB1YmxpYyIsIjEgY29tbW9uIHB1YmxpYyBsaWNlbnNlIiwiY3BsIDEgMCAyIiwiMSAwIDIgY29udHJhdCIsIjAgMiBjb250cmF0IGRlIiwiMiBjb250cmF0IGRlIGxpY2VuY2UiLCJjZWNpbGwgMiAxIDMiLCIyIDEgMyBlY2xpcHNlIiwiMSAzIGVjbGlwc2UgcHVibGljIiwiMyBlY2xpcHNlIHB1YmxpYyBsaWNlbnNlIiwiZXBsIDEgMCA0IiwiMSAwIDQgZXVyb3BlYW4iLCIwIDQgZXVyb3BlYW4gdW5pb24iLCI0IGV1cm9wZWFuIHVuaW9uIHB1YmxpYyIsInYgMSAxIDUiLCIxIDEgNSBnbnUiLCIxIDUgZ251IGdlbmVyYWwiLCI1IGdudSBnZW5lcmFsIHB1YmxpYyIsIjIgZ251IGdwbHYyIDYiLCJnbnUgZ3BsdjIgNiBnbnUiLCJncGx2MiA2IGdudSBnZW5lcmFsIiwiNiBnbnUgZ2VuZXJhbCBwdWJsaWMiLCIzIGdudSBncGx2MyA1IiwiZ251IGdwbHYzIDUgY29udHJpYnV0aW9ucyIsImdwbHYzIDUgY29udHJpYnV0aW9ucyBzb3VzIiwiY2lwcm9jaXQgZm9ydGUgbGlsaXEgciB2ZXJzaW9uIiwiZm9ydGUgbGlsaXEgciB2ZXJzaW9uIDEiLCJjaXByb2NpdCBmb3J0ZSBsaWxpcSByIGNpIiwiZm9ydGUgbGlsaXEgciBjaSBhcHIiLCJwb3VyIHRvdXQgbG9naWNpZWwgbW9kaWZpIG91IiwidG91dCBsb2dpY2llbCBtb2RpZmkgb3UgZCIsIm1vZGlmaSBvdSBkIHJpdiBxdSIsIm91IGQgcml2IHF1IGlsIiwiZCByaXYgcXUgaWwgZGlzdHJpYnVlIiwicml2IHF1IGlsIGRpc3RyaWJ1ZSBjaGFxdWUiLCJsaWNlbmNpIGRpc3RyaWJ1ZSBsZSBsb2dpY2llbCB1biIsImRpc3RyaWJ1ZSBsZSBsb2dpY2llbCB1biBsb2dpY2llbCIsImxlIGxvZ2ljaWVsIHVuIGxvZ2ljaWVsIG1vZGlmaSIsImxvZ2ljaWVsIHVuIGxvZ2ljaWVsIG1vZGlmaSBvdSIsInVuIGxvZ2ljaWVsIG1vZGlmaSBvdSB1biIsImxvZ2ljaWVsIG1vZGlmaSBvdSB1biBsb2dpY2llbCIsIm1vZGlmaSBvdSB1biBsb2dpY2llbCBkIiwib3UgdW4gbG9naWNpZWwgZCByaXYiLCJ1biBsb2dpY2llbCBkIHJpdiBjZSIsImxvZ2ljaWVsIGQgcml2IGNlIGRlcm5pZXIiLCJkIHJpdiBjZSBkZXJuaWVyIGRvaXQiLCJyaXYgY2UgZGVybmllciBkb2l0IGFzc3VtZXIiLCJkaXN0cmlidWVyIHVuIGxvZ2ljaWVsIG1vZGlmaSBvdSIsIm1vZGlmaSBvdSBkIHJpdiBjb21iaW4iLCJvdSBkIHJpdiBjb21iaW4gdW4iLCJkIHJpdiBjb21iaW4gdW4gbG9naWNpZWwiLCJyaXYgY29tYmluIHVuIGxvZ2ljaWVsIGFzc3VqZXR0aSIsInIgY2lwcm9jaXQgZXN0IGNvbXBhcmFibGUgY2VsdWkiLCJjaXByb2NpdCBlc3QgY29tcGFyYWJsZSBjZWx1aSBkZSIsImVzdCBjb21wYXJhYmxlIGNlbHVpIGRlIGxhIiwiY29tcGFyYWJsZSBjZWx1aSBkZSBsYSBwciIsIm1vaW5kcmUgbm90YW1tZW50IDEgY29tbW9uIHB1YmxpYyIsIm5vdGFtbWVudCAxIGNvbW1vbiBwdWJsaWMgbGljZW5zZSIsIjEgY29tbW9uIHB1YmxpYyBsaWNlbnNlIHZlcnNpb24iLCIwIGNwbCAxIDAgMiIsImNwbCAxIDAgMiBjb250cmF0IiwiMSAwIDIgY29udHJhdCBkZSIsIjAgMiBjb250cmF0IGRlIGxpY2VuY2UiLCIyIGNvbnRyYXQgZGUgbGljZW5jZSBkZSIsIjEgY2VjaWxsIDIgMSAzIiwiY2VjaWxsIDIgMSAzIGVjbGlwc2UiLCIyIDEgMyBlY2xpcHNlIHB1YmxpYyIsIjEgMyBlY2xpcHNlIHB1YmxpYyBsaWNlbnNlIiwiMyBlY2xpcHNlIHB1YmxpYyBsaWNlbnNlIHYiLCIwIGVwbCAxIDAgNCIsImVwbCAxIDAgNCBldXJvcGVhbiIsIjEgMCA0IGV1cm9wZWFuIHVuaW9uIiwiMCA0IGV1cm9wZWFuIHVuaW9uIHB1YmxpYyIsIjQgZXVyb3BlYW4gdW5pb24gcHVibGljIGxpY2Vuc2UiLCJldXBsIHYgMSAxIDUiLCJ2IDEgMSA1IGdudSIsIjEgMSA1IGdudSBnZW5lcmFsIiwiMSA1IGdudSBnZW5lcmFsIHB1YmxpYyIsIjUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UiLCJ2ZXJzaW9uIDIgZ251IGdwbHYyIDYiLCIyIGdudSBncGx2MiA2IGdudSIsImdudSBncGx2MiA2IGdudSBnZW5lcmFsIiwiZ3BsdjIgNiBnbnUgZ2VuZXJhbCBwdWJsaWMiLCI2IGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIiwidmVyc2lvbiAzIGdudSBncGx2MyA1IiwiMyBnbnUgZ3BsdjMgNSBjb250cmlidXRpb25zIiwiZ251IGdwbHYzIDUgY29udHJpYnV0aW9ucyBzb3VzIiwiZ3BsdjMgNSBjb250cmlidXRpb25zIHNvdXMgciJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGlzIGNvcHkgb2YgdGhlIGxpYnBuZyBub3RpY2VzIGlzIHByb3ZpZGVkIGZvciB5b3VyIGNvbnZlbmllbmNlLiBJbiBjYXNlIG9mIGFueSBkaXNjcmVwYW5jeSBiZXR3ZWVuIHRoaXMgY29weSBhbmQgdGhlIG5vdGljZXMgaW4gdGhlIGZpbGUgcG5nLmggdGhhdCBpcyBpbmNsdWRlZCBpbiB0aGUgbGlicG5nIGRpc3RyaWJ1dGlvbiwgdGhlIGxhdHRlciBzaGFsbCBwcmV2YWlsLlxuXG5DT1BZUklHSFQgTk9USUNFLCBESVNDTEFJTUVSLCBhbmQgTElDRU5TRTpcblxuSWYgeW91IG1vZGlmeSBsaWJwbmcgeW91IG1heSBpbnNlcnQgYWRkaXRpb25hbCBub3RpY2VzIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzIHNlbnRlbmNlLlxuXG5UaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIGxpYnBuZyBsaWNlbnNlLlxuXG5saWJwbmcgdmVyc2lvbnMgMS4yLjYsIEF1Z3VzdCAxNSwgMjAwNCwgdGhyb3VnaCAxLjQuNSwgRGVjZW1iZXIgOSwgMjAxMCwgYXJlIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNi0yMDEwIEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZSBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMS4yLjUgd2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWwgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnNcblxuQ29zbWluIFRydXRhXG5cbmxpYnBuZyB2ZXJzaW9ucyAxLjAuNywgSnVseSAxLCAyMDAwLCB0aHJvdWdoIDEuMi41IC0gT2N0b2JlciAzLCAyMDAyLCBhcmVcblxuQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjAuNiB3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnNcblxuU2ltb24tUGllcnJlIENhZGlldXhcblxuRXJpYyBTLiBSYXltb25kXG5cbkdpbGxlcyBWb2xsYW50XG5cbmFuZCB3aXRoIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25zIHRvIHRoZSBkaXNjbGFpbWVyOlxuXG5UaGVyZSBpcyBubyB3YXJyYW50eSBhZ2FpbnN0IGludGVyZmVyZW5jZSB3aXRoIHlvdXIgZW5qb3ltZW50IG9mIHRoZSBsaWJyYXJ5IG9yIGFnYWluc3QgaW5mcmluZ2VtZW50LiBUaGVyZSBpcyBubyB3YXJyYW50eSB0aGF0IG91ciBlZmZvcnRzIG9yIHRoZSBsaWJyYXJ5IHdpbGwgZnVsZmlsbCBhbnkgb2YgeW91ciBwYXJ0aWN1bGFyIHB1cnBvc2VzIG9yIG5lZWRzLiBUaGlzIGxpYnJhcnkgaXMgcHJvdmlkZWQgd2l0aCBhbGwgZmF1bHRzLCBhbmQgdGhlIGVudGlyZSByaXNrIG9mIHNhdGlzZmFjdG9yeSBxdWFsaXR5LCBwZXJmb3JtYW5jZSwgYWNjdXJhY3ksIGFuZCBlZmZvcnQgaXMgd2l0aCB0aGUgdXNlci5cblxubGlicG5nIHZlcnNpb25zIDAuOTcsIEphbnVhcnkgMTk5OCwgdGhyb3VnaCAxLjAuNiwgTWFyY2ggMjAsIDIwMDAsIGFyZVxuXG5Db3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0wLjk2LCB3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnM6XG5cblRvbSBMYW5lXG5cbkdsZW5uIFJhbmRlcnMtUGVocnNvblxuXG5XaWxsZW0gdmFuIFNjaGFpa1xuXG5saWJwbmcgdmVyc2lvbnMgMC44OSwgSnVuZSAxOTk2LCB0aHJvdWdoIDAuOTYsIE1heSAxOTk3LCBhcmVcblxuQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlnZ2VyXG5cbkRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0wLjg4LCB3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnM6XG5cbkpvaG4gQm93bGVyXG5cbktldmluIEJyYWNleVxuXG5TYW0gQnVzaGVsbFxuXG5NYWdudXMgSG9sbWdyZW5cblxuR3JlZyBSb2Vsb2ZzXG5cblRvbSBUYW5uZXJcblxubGlicG5nIHZlcnNpb25zIDAuNSwgTWF5IDE5OTUsIHRocm91Z2ggMC44OCwgSmFudWFyeSAxOTk2LCBhcmVcblxuQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IEd1eSBFcmljIFNjaGFsbmF0LCBHcm91cCA0MiwgSW5jLlxuXG5Gb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgY29weXJpZ2h0IGFuZCBsaWNlbnNlLCBcIkNvbnRyaWJ1dGluZyBBdXRob3JzXCIgaXMgZGVmaW5lZCBhcyB0aGUgZm9sbG93aW5nIHNldCBvZiBpbmRpdmlkdWFsczpcblxuQW5kcmVhcyBEaWxnZXJcblxuRGF2ZSBNYXJ0aW5kYWxlXG5cbkd1eSBFcmljIFNjaGFsbmF0XG5cblBhdWwgU2NobWlkdFxuXG5UaW0gV2VnbmVyXG5cblRoZSBQTkcgUmVmZXJlbmNlIExpYnJhcnkgaXMgc3VwcGxpZWQgXCJBUyBJU1wiLiBUaGUgQ29udHJpYnV0aW5nIEF1dGhvcnMgYW5kIEdyb3VwIDQyLCBJbmMuIGRpc2NsYWltIGFsbCB3YXJyYW50aWVzLCBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgb2YgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UuIFRoZSBDb250cmlidXRpbmcgQXV0aG9ycyBhbmQgR3JvdXAgNDIsIEluYy4gYXNzdW1lIG5vIGxpYWJpbGl0eSBmb3IgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHdoaWNoIG1heSByZXN1bHQgZnJvbSB0aGUgdXNlIG9mIHRoZSBQTkcgUmVmZXJlbmNlIExpYnJhcnksIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2UuXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc291cmNlIGNvZGUsIG9yIHBvcnRpb25zIGhlcmVvZiwgZm9yIGFueSBwdXJwb3NlLCB3aXRob3V0IGZlZSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcblxuICAgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvdXJjZSBjb2RlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkLlxuXG4gICAyLiBBbHRlcmVkIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCBhbmQgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvdXJjZS5cblxuICAgMy4gVGhpcyBDb3B5cmlnaHQgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBvciBhbHRlcmVkIHNvdXJjZSBkaXN0cmlidXRpb24uXG5cblRoZSBDb250cmlidXRpbmcgQXV0aG9ycyBhbmQgR3JvdXAgNDIsIEluYy4gc3BlY2lmaWNhbGx5IHBlcm1pdCwgd2l0aG91dCBmZWUsIGFuZCBlbmNvdXJhZ2UgdGhlIHVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGFzIGEgY29tcG9uZW50IHRvIHN1cHBvcnRpbmcgdGhlIFBORyBmaWxlIGZvcm1hdCBpbiBjb21tZXJjaWFsIHByb2R1Y3RzLiBJZiB5b3UgdXNlIHRoaXMgc291cmNlIGNvZGUgaW4gYSBwcm9kdWN0LCBhY2tub3dsZWRnbWVudCBpcyBub3QgcmVxdWlyZWQgYnV0IHdvdWxkIGJlIGFwcHJlY2lhdGVkLlxuXG5BIFwicG5nX2dldF9jb3B5cmlnaHRcIiBmdW5jdGlvbiBpcyBhdmFpbGFibGUsIGZvciBjb252ZW5pZW50IHVzZSBpbiBcImFib3V0XCIgYm94ZXMgYW5kIHRoZSBsaWtlOlxuXG5wcmludGYoXCIlc1wiLHBuZ19nZXRfY29weXJpZ2h0KE5VTEwpKTtcblxuQWxzbywgdGhlIFBORyBsb2dvIChpbiBQTkcgZm9ybWF0LCBvZiBjb3Vyc2UpIGlzIHN1cHBsaWVkIGluIHRoZSBmaWxlcyBcInBuZ2Jhci5wbmdcIiBhbmQgXCJwbmdiYXIuanBnICg4OHgzMSkgYW5kIFwicG5nbm93LnBuZ1wiICg5OHgzMSkuXG5cbkxpYnBuZyBpcyBPU0kgQ2VydGlmaWVkIE9wZW4gU291cmNlIFNvZnR3YXJlLiBPU0kgQ2VydGlmaWVkIE9wZW4gU291cmNlIGlzIGEgY2VydGlmaWNhdGlvbiBtYXJrIG9mIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLlxuXG5HbGVubiBSYW5kZXJzLVBlaHJzb25cblxuZ2xlbm5ycCBhdCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXRcblxuRGVjZW1iZXIgOSwgMjAxMCJdLCJsaWNlbnNlSWRzIjpbIkxpYnBuZyJdLCJrZXl3b3JkcyI6WyJ0aGlzIGNvcHkgb2YiLCJvZiB0aGUgbGlicG5nIiwidGhlIGxpYnBuZyBub3RpY2VzIiwibGlicG5nIG5vdGljZXMgaXMiLCJub3RpY2VzIGlzIHByb3ZpZGVkIiwicHJvdmlkZWQgZm9yIHlvdXIiLCJjb252ZW5pZW5jZSBpbiBjYXNlIiwib2YgYW55IGRpc2NyZXBhbmN5IiwiYW55IGRpc2NyZXBhbmN5IGJldHdlZW4iLCJkaXNjcmVwYW5jeSBiZXR3ZWVuIHRoaXMiLCJiZXR3ZWVuIHRoaXMgY29weSIsInRoaXMgY29weSBhbmQiLCJjb3B5IGFuZCB0aGUiLCJhbmQgdGhlIG5vdGljZXMiLCJ0aGUgZmlsZSBwbmciLCJmaWxlIHBuZyBoIiwicG5nIGggdGhhdCIsImggdGhhdCBpcyIsImluIHRoZSBsaWJwbmciLCJ0aGUgbGlicG5nIGRpc3RyaWJ1dGlvbiIsImxpYnBuZyBkaXN0cmlidXRpb24gdGhlIiwiZGlzdHJpYnV0aW9uIHRoZSBsYXR0ZXIiLCJ0aGUgbGF0dGVyIHNoYWxsIiwibGF0dGVyIHNoYWxsIHByZXZhaWwiLCJzaGFsbCBwcmV2YWlsIGNvcHlyaWdodCIsInByZXZhaWwgY29weXJpZ2h0IG5vdGljZSIsImNvcHlyaWdodCBub3RpY2UgZGlzY2xhaW1lciIsIm5vdGljZSBkaXNjbGFpbWVyIGFuZCIsImFuZCBsaWNlbnNlIGlmIiwieW91IG1vZGlmeSBsaWJwbmciLCJtb2RpZnkgbGlicG5nIHlvdSIsImxpYnBuZyB5b3UgbWF5IiwieW91IG1heSBpbnNlcnQiLCJtYXkgaW5zZXJ0IGFkZGl0aW9uYWwiLCJpbnNlcnQgYWRkaXRpb25hbCBub3RpY2VzIiwiYWRkaXRpb25hbCBub3RpY2VzIGltbWVkaWF0ZWx5Iiwibm90aWNlcyBpbW1lZGlhdGVseSBmb2xsb3dpbmciLCJpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcyIsImZvbGxvd2luZyB0aGlzIHNlbnRlbmNlIiwidGhpcyBzZW50ZW5jZSB0aGlzIiwic2VudGVuY2UgdGhpcyBjb2RlIiwidW5kZXIgdGhlIGxpYnBuZyIsInRoZSBsaWJwbmcgbGljZW5zZSIsImxpYnBuZyBsaWNlbnNlIGxpYnBuZyIsImxpY2Vuc2UgbGlicG5nIHZlcnNpb25zIiwiMiA2IGF1Z3VzdCIsIjYgYXVndXN0IDE1IiwiYXVndXN0IDE1IDIwMDQiLCIxNSAyMDA0IHRocm91Z2giLCIyMDA0IHRocm91Z2ggMSIsInRocm91Z2ggMSA0IiwiMSA0IDUiLCI0IDUgZGVjZW1iZXIiLCI1IGRlY2VtYmVyIDkiLCI5IDIwMTAgYXJlIiwiMjAxMCBhcmUgY29weXJpZ2h0IiwiYyAyMDA0IDIwMDYiLCIyMDA0IDIwMDYgMjAxMCIsIjIwMDYgMjAxMCBnbGVubiIsIjIwMTAgZ2xlbm4gcmFuZGVycyIsImxpYnBuZyAxIDIiLCIyIDUgd2l0aCIsInRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbCIsImZvbGxvd2luZyBpbmRpdmlkdWFsIGFkZGVkIiwiaW5kaXZpZHVhbCBhZGRlZCB0byIsImNvbnRyaWJ1dGluZyBhdXRob3JzIGNvc21pbiIsImF1dGhvcnMgY29zbWluIHRydXRhIiwiY29zbWluIHRydXRhIGxpYnBuZyIsInRydXRhIGxpYnBuZyB2ZXJzaW9ucyIsInZlcnNpb25zIDEgMCIsIjAgNyBqdWx5IiwiNyBqdWx5IDEiLCJqdWx5IDEgMjAwMCIsIjEgMjAwMCB0aHJvdWdoIiwiMjAwMCB0aHJvdWdoIDEiLCIyIDUgb2N0b2JlciIsIjUgb2N0b2JlciAzIiwib2N0b2JlciAzIDIwMDIiLCIzIDIwMDIgYXJlIiwiMjAwMiBhcmUgY29weXJpZ2h0IiwiMjAwMCAyMDAyIGdsZW5uIiwiMjAwMiBnbGVubiByYW5kZXJzIiwibGlicG5nIDEgMCIsIjAgNiB3aXRoIiwiNiB3aXRoIHRoZSIsImNvbnRyaWJ1dGluZyBhdXRob3JzIHNpbW9uIiwiYXV0aG9ycyBzaW1vbiBwaWVycmUiLCJzaW1vbiBwaWVycmUgY2FkaWV1eCIsInBpZXJyZSBjYWRpZXV4IGVyaWMiLCJjYWRpZXV4IGVyaWMgcyIsImVyaWMgcyByYXltb25kIiwicyByYXltb25kIGdpbGxlcyIsInJheW1vbmQgZ2lsbGVzIHZvbGxhbnQiLCJnaWxsZXMgdm9sbGFudCBhbmQiLCJ2b2xsYW50IGFuZCB3aXRoIiwidGhlIGZvbGxvd2luZyBhZGRpdGlvbnMiLCJmb2xsb3dpbmcgYWRkaXRpb25zIHRvIiwidGhlIGRpc2NsYWltZXIgdGhlcmUiLCJkaXNjbGFpbWVyIHRoZXJlIGlzIiwibm8gd2FycmFudHkgYWdhaW5zdCIsIndhcnJhbnR5IGFnYWluc3QgaW50ZXJmZXJlbmNlIiwibGlicmFyeSBvciBhZ2FpbnN0Iiwib3IgYWdhaW5zdCBpbmZyaW5nZW1lbnQiLCJhZ2FpbnN0IGluZnJpbmdlbWVudCB0aGVyZSIsImluZnJpbmdlbWVudCB0aGVyZSBpcyIsIm5vIHdhcnJhbnR5IHRoYXQiLCJ3YXJyYW50eSB0aGF0IG91ciIsInRoYXQgb3VyIGVmZm9ydHMiLCJvdXIgZWZmb3J0cyBvciIsImVmZm9ydHMgb3IgdGhlIiwib3IgdGhlIGxpYnJhcnkiLCJsaWJyYXJ5IHdpbGwgZnVsZmlsbCIsIndpbGwgZnVsZmlsbCBhbnkiLCJmdWxmaWxsIGFueSBvZiIsIm9mIHlvdXIgcGFydGljdWxhciIsInlvdXIgcGFydGljdWxhciBwdXJwb3NlcyIsInBhcnRpY3VsYXIgcHVycG9zZXMgb3IiLCJwdXJwb3NlcyBvciBuZWVkcyIsIm9yIG5lZWRzIHRoaXMiLCJuZWVkcyB0aGlzIGxpYnJhcnkiLCJsaWJyYXJ5IGlzIHByb3ZpZGVkIiwicHJvdmlkZWQgd2l0aCBhbGwiLCJhbGwgZmF1bHRzIGFuZCIsImZhdWx0cyBhbmQgdGhlIiwiYW5kIHRoZSBlbnRpcmUiLCJlbnRpcmUgcmlzayBvZiIsInJpc2sgb2Ygc2F0aXNmYWN0b3J5Iiwic2F0aXNmYWN0b3J5IHF1YWxpdHkgcGVyZm9ybWFuY2UiLCJxdWFsaXR5IHBlcmZvcm1hbmNlIGFjY3VyYWN5IiwicGVyZm9ybWFuY2UgYWNjdXJhY3kgYW5kIiwiYWNjdXJhY3kgYW5kIGVmZm9ydCIsImFuZCBlZmZvcnQgaXMiLCJlZmZvcnQgaXMgd2l0aCIsImlzIHdpdGggdGhlIiwid2l0aCB0aGUgdXNlciIsInRoZSB1c2VyIGxpYnBuZyIsInVzZXIgbGlicG5nIHZlcnNpb25zIiwidmVyc2lvbnMgMCA5NyIsIjAgOTcgamFudWFyeSIsIjk3IGphbnVhcnkgMTk5OCIsImphbnVhcnkgMTk5OCB0aHJvdWdoIiwiMTk5OCB0aHJvdWdoIDEiLCJ0aHJvdWdoIDEgMCIsIjAgNiBtYXJjaCIsIjYgbWFyY2ggMjAiLCJtYXJjaCAyMCAyMDAwIiwiMjAgMjAwMCBhcmUiLCIyMDAwIGFyZSBjb3B5cmlnaHQiLCIxOTk4IDE5OTkgZ2xlbm4iLCIxOTk5IGdsZW5uIHJhbmRlcnMiLCJsaWJwbmcgMCA5NiIsIjAgOTYgd2l0aCIsIjk2IHdpdGggdGhlIiwiY29udHJpYnV0aW5nIGF1dGhvcnMgdG9tIiwiYXV0aG9ycyB0b20gbGFuZSIsInRvbSBsYW5lIGdsZW5uIiwibGFuZSBnbGVubiByYW5kZXJzIiwicmFuZGVycyBwZWhyc29uIHdpbGxlbSIsInBlaHJzb24gd2lsbGVtIHZhbiIsIndpbGxlbSB2YW4gc2NoYWlrIiwidmFuIHNjaGFpayBsaWJwbmciLCJzY2hhaWsgbGlicG5nIHZlcnNpb25zIiwidmVyc2lvbnMgMCA4OSIsIjAgODkganVuZSIsIjg5IGp1bmUgMTk5NiIsImp1bmUgMTk5NiB0aHJvdWdoIiwiMTk5NiB0aHJvdWdoIDAiLCJ0aHJvdWdoIDAgOTYiLCIwIDk2IG1heSIsIjk2IG1heSAxOTk3IiwibWF5IDE5OTcgYXJlIiwiMTk5NyBhcmUgY29weXJpZ2h0IiwiMTk5NyBhbmRyZWFzIGRpZ2dlciIsImFuZHJlYXMgZGlnZ2VyIGRpc3RyaWJ1dGVkIiwiZGlnZ2VyIGRpc3RyaWJ1dGVkIGFjY29yZGluZyIsImxpYnBuZyAwIDg4IiwiMCA4OCB3aXRoIiwiODggd2l0aCB0aGUiLCJjb250cmlidXRpbmcgYXV0aG9ycyBqb2huIiwiYXV0aG9ycyBqb2huIGJvd2xlciIsImpvaG4gYm93bGVyIGtldmluIiwiYm93bGVyIGtldmluIGJyYWNleSIsImtldmluIGJyYWNleSBzYW0iLCJicmFjZXkgc2FtIGJ1c2hlbGwiLCJzYW0gYnVzaGVsbCBtYWdudXMiLCJidXNoZWxsIG1hZ251cyBob2xtZ3JlbiIsIm1hZ251cyBob2xtZ3JlbiBncmVnIiwiaG9sbWdyZW4gZ3JlZyByb2Vsb2ZzIiwiZ3JlZyByb2Vsb2ZzIHRvbSIsInJvZWxvZnMgdG9tIHRhbm5lciIsInRvbSB0YW5uZXIgbGlicG5nIiwidGFubmVyIGxpYnBuZyB2ZXJzaW9ucyIsInZlcnNpb25zIDAgNSIsIjAgNSBtYXkiLCI1IG1heSAxOTk1IiwibWF5IDE5OTUgdGhyb3VnaCIsIjE5OTUgdGhyb3VnaCAwIiwidGhyb3VnaCAwIDg4IiwiMCA4OCBqYW51YXJ5IiwiODggamFudWFyeSAxOTk2Il19LHsibGljZW5zZVRleHRzIjpbIlJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4iXSwibGljZW5zZUlkcyI6WyJMaW51eC1PcGVuSUIiXSwia2V5d29yZHMiOlsiZGlzdHJpYnV0aW9uIHRoZSBzb2Z0d2FyZSIsInRoZSBkaXN0cmlidXRpb24gdGhlIHNvZnR3YXJlIiwiZGlzdHJpYnV0aW9uIHRoZSBzb2Z0d2FyZSBpcyIsIndpdGggdGhlIGRpc3RyaWJ1dGlvbiB0aGUgc29mdHdhcmUiLCJ0aGUgZGlzdHJpYnV0aW9uIHRoZSBzb2Z0d2FyZSBpcyIsImRpc3RyaWJ1dGlvbiB0aGUgc29mdHdhcmUgaXMgcHJvdmlkZWQiXX0seyJsaWNlbnNlVGV4dHMiOlsiTUlUIE5vIEF0dHJpYnV0aW9uIENvcHlyaWdodCBcdTAwM2NZRUFSclx1MDAzZSBcdTAwM2NDT1BZUklHSFQgSE9MREVSXHUwMDNlXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzby5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIl0sImxpY2Vuc2VJZHMiOlsiTUlULTAiXSwia2V5d29yZHMiOlsibm8gYXR0cmlidXRpb24gY29weXJpZ2h0IiwiYXR0cmlidXRpb24gY29weXJpZ2h0IHllYXJyIiwiY29weXJpZ2h0IHllYXJyIGNvcHlyaWdodCIsInllYXJyIGNvcHlyaWdodCBob2xkZXIiLCJjb3B5cmlnaHQgaG9sZGVyIHBlcm1pc3Npb24iLCJob2xkZXIgcGVybWlzc2lvbiBpcyIsIm1pdCBubyBhdHRyaWJ1dGlvbiBjb3B5cmlnaHQiLCJubyBhdHRyaWJ1dGlvbiBjb3B5cmlnaHQgeWVhcnIiLCJhdHRyaWJ1dGlvbiBjb3B5cmlnaHQgeWVhcnIgY29weXJpZ2h0IiwiY29weXJpZ2h0IHllYXJyIGNvcHlyaWdodCBob2xkZXIiLCJ5ZWFyciBjb3B5cmlnaHQgaG9sZGVyIHBlcm1pc3Npb24iLCJjb3B5cmlnaHQgaG9sZGVyIHBlcm1pc3Npb24gaXMiLCJob2xkZXIgcGVybWlzc2lvbiBpcyBoZXJlYnkiLCJtaXQgbm8gYXR0cmlidXRpb24gY29weXJpZ2h0IHllYXJyIiwibm8gYXR0cmlidXRpb24gY29weXJpZ2h0IHllYXJyIGNvcHlyaWdodCIsImF0dHJpYnV0aW9uIGNvcHlyaWdodCB5ZWFyciBjb3B5cmlnaHQgaG9sZGVyIiwiY29weXJpZ2h0IHllYXJyIGNvcHlyaWdodCBob2xkZXIgcGVybWlzc2lvbiIsInllYXJyIGNvcHlyaWdodCBob2xkZXIgcGVybWlzc2lvbiBpcyIsImNvcHlyaWdodCBob2xkZXIgcGVybWlzc2lvbiBpcyBoZXJlYnkiLCJob2xkZXIgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJcdTAwM2Njb3B5cmlnaHQgbm90aWNlXHUwMDNlIEJ5IG9idGFpbmluZywgdXNpbmcsIGFuZC9vciBjb3B5aW5nIHRoaXMgc29mdHdhcmUgYW5kL29yIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIHlvdSBhZ3JlZSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QsIGFuZCB3aWxsIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnM6XG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USEUgQ09QWVJJR0hUIEhPTERFUiBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIFRIRSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuIl0sImxpY2Vuc2VJZHMiOlsiTUlULUNNVSJdLCJrZXl3b3JkcyI6WyJjb3B5cmlnaHQgbm90aWNlIGJ5Iiwibm90aWNlIGJ5IG9idGFpbmluZyIsImNvcHlpbmcgdGhpcyBzb2Z0d2FyZSIsIm9yIGl0cyBhc3NvY2lhdGVkIiwiYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHlvdSIsImRvY3VtZW50YXRpb24geW91IGFncmVlIiwiYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZvciIsImNvcHlyaWdodCBob2xkZXIgbm90IiwiaG9sZGVyIG5vdCBiZSIsImNvcHlyaWdodCBob2xkZXIgZGlzY2xhaW0iLCJob2xkZXIgZGlzY2xhaW0gYWxsIiwiY29weXJpZ2h0IG5vdGljZSBieSBvYnRhaW5pbmciLCJub3RpY2UgYnkgb2J0YWluaW5nIHVzaW5nIiwib3IgY29weWluZyB0aGlzIHNvZnR3YXJlIiwiY29weWluZyB0aGlzIHNvZnR3YXJlIGFuZCIsInRoaXMgc29mdHdhcmUgYW5kIG9yIiwic29mdHdhcmUgYW5kIG9yIGl0cyIsImFuZCBvciBpdHMgYXNzb2NpYXRlZCIsIm9yIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24iLCJpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHlvdSIsImFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB5b3UgYWdyZWUiLCJkb2N1bWVudGF0aW9uIHlvdSBhZ3JlZSB0aGF0Iiwic29mdHdhcmUgYW5kIGl0cyBhc3NvY2lhdGVkIiwiaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmb3IiLCJhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZm9yIGFueSIsInRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdCIsImNvcHlyaWdodCBob2xkZXIgbm90IGJlIiwiaG9sZGVyIG5vdCBiZSB1c2VkIiwic3BlY2lmaWMgd3JpdHRlbiBwZXJtaXNzaW9uIHRoZSIsInBlcm1pc3Npb24gdGhlIGNvcHlyaWdodCBob2xkZXIiLCJ0aGUgY29weXJpZ2h0IGhvbGRlciBkaXNjbGFpbSIsImNvcHlyaWdodCBob2xkZXIgZGlzY2xhaW0gYWxsIiwiaG9sZGVyIGRpc2NsYWltIGFsbCB3YXJyYW50aWVzIiwiY29weXJpZ2h0IG5vdGljZSBieSBvYnRhaW5pbmcgdXNpbmciLCJub3RpY2UgYnkgb2J0YWluaW5nIHVzaW5nIGFuZCIsImFuZCBvciBjb3B5aW5nIHRoaXMgc29mdHdhcmUiLCJvciBjb3B5aW5nIHRoaXMgc29mdHdhcmUgYW5kIiwiY29weWluZyB0aGlzIHNvZnR3YXJlIGFuZCBvciIsInRoaXMgc29mdHdhcmUgYW5kIG9yIGl0cyIsInNvZnR3YXJlIGFuZCBvciBpdHMgYXNzb2NpYXRlZCIsImFuZCBvciBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIiwib3IgaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB5b3UiLCJpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHlvdSBhZ3JlZSIsImFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB5b3UgYWdyZWUgdGhhdCIsImRvY3VtZW50YXRpb24geW91IGFncmVlIHRoYXQgeW91IiwidGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGFzc29jaWF0ZWQiLCJzb2Z0d2FyZSBhbmQgaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiIsImFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZvciIsIml0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZm9yIGFueSIsImFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UiLCJ0aGF0IHRoZSBuYW1lIG9mIHRoZSIsIm9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdCIsInRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdCBiZSIsImNvcHlyaWdodCBob2xkZXIgbm90IGJlIHVzZWQiLCJob2xkZXIgbm90IGJlIHVzZWQgaW4iLCJ3aXRob3V0IHNwZWNpZmljIHdyaXR0ZW4gcGVybWlzc2lvbiB0aGUiLCJzcGVjaWZpYyB3cml0dGVuIHBlcm1pc3Npb24gdGhlIGNvcHlyaWdodCIsIndyaXR0ZW4gcGVybWlzc2lvbiB0aGUgY29weXJpZ2h0IGhvbGRlciIsInBlcm1pc3Npb24gdGhlIGNvcHlyaWdodCBob2xkZXIgZGlzY2xhaW0iLCJ0aGUgY29weXJpZ2h0IGhvbGRlciBkaXNjbGFpbSBhbGwiLCJjb3B5cmlnaHQgaG9sZGVyIGRpc2NsYWltIGFsbCB3YXJyYW50aWVzIiwiaG9sZGVyIGRpc2NsYWltIGFsbCB3YXJyYW50aWVzIHdpdGgiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChDKSAyMDAwLTIwMDggQ2Fyc3RlbiBIYWl0emxlciwgR2VvZmYgSGFycmlzb24gYW5kIHZhcmlvdXMgY29udHJpYnV0b3JzIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IEtpbSBXb2VsZGVyc1xuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaXRzIGRvY3VtZW50YXRpb24gYW5kIG1hcmtldGluZyBcdTAwMjYgcHVibGljaXR5IG1hdGVyaWFscywgYW5kIGFja25vd2xlZGdtZW50IHNoYWxsIGJlIGdpdmVuIGluIHRoZSBkb2N1bWVudGF0aW9uLCBtYXRlcmlhbHMgYW5kIHNvZnR3YXJlIHBhY2thZ2VzIHRoYXQgdGhpcyBTb2Z0d2FyZSB3YXMgdXNlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIl0sImxpY2Vuc2VJZHMiOlsiTUlULWFkdmVydGlzaW5nIl0sImtleXdvcmRzIjpbImMgMjAwMCAyMDA4IiwiMjAwMCAyMDA4IGNhcnN0ZW4iLCIyMDA4IGNhcnN0ZW4gaGFpdHpsZXIiLCJjYXJzdGVuIGhhaXR6bGVyIGdlb2ZmIiwiaGFpdHpsZXIgZ2VvZmYgaGFycmlzb24iLCJnZW9mZiBoYXJyaXNvbiBhbmQiLCJoYXJyaXNvbiBhbmQgdmFyaW91cyIsInZhcmlvdXMgY29udHJpYnV0b3JzIGNvcHlyaWdodCIsImNvbnRyaWJ1dG9ycyBjb3B5cmlnaHQgYyIsImMgMjAwNCAyMDA4IiwiMjAwNCAyMDA4IGtpbSIsIjIwMDgga2ltIHdvZWxkZXJzIiwia2ltIHdvZWxkZXJzIHBlcm1pc3Npb24iLCJ3b2VsZGVycyBwZXJtaXNzaW9uIGlzIiwiZG9jdW1lbnRhdGlvbiBhbmQgbWFya2V0aW5nIiwiYW5kIG1hcmtldGluZyBwdWJsaWNpdHkiLCJtYXJrZXRpbmcgcHVibGljaXR5IG1hdGVyaWFscyIsInB1YmxpY2l0eSBtYXRlcmlhbHMgYW5kIiwibWF0ZXJpYWxzIGFuZCBhY2tub3dsZWRnbWVudCIsInRoZSBkb2N1bWVudGF0aW9uIG1hdGVyaWFscyIsImRvY3VtZW50YXRpb24gbWF0ZXJpYWxzIGFuZCIsIm1hdGVyaWFscyBhbmQgc29mdHdhcmUiLCJjb3B5cmlnaHQgYyAyMDAwIDIwMDgiLCJjIDIwMDAgMjAwOCBjYXJzdGVuIiwiMjAwMCAyMDA4IGNhcnN0ZW4gaGFpdHpsZXIiLCIyMDA4IGNhcnN0ZW4gaGFpdHpsZXIgZ2VvZmYiLCJjYXJzdGVuIGhhaXR6bGVyIGdlb2ZmIGhhcnJpc29uIiwiaGFpdHpsZXIgZ2VvZmYgaGFycmlzb24gYW5kIiwiZ2VvZmYgaGFycmlzb24gYW5kIHZhcmlvdXMiLCJoYXJyaXNvbiBhbmQgdmFyaW91cyBjb250cmlidXRvcnMiLCJhbmQgdmFyaW91cyBjb250cmlidXRvcnMgY29weXJpZ2h0IiwidmFyaW91cyBjb250cmlidXRvcnMgY29weXJpZ2h0IGMiLCJjb250cmlidXRvcnMgY29weXJpZ2h0IGMgMjAwNCIsImNvcHlyaWdodCBjIDIwMDQgMjAwOCIsImMgMjAwNCAyMDA4IGtpbSIsIjIwMDQgMjAwOCBraW0gd29lbGRlcnMiLCIyMDA4IGtpbSB3b2VsZGVycyBwZXJtaXNzaW9uIiwia2ltIHdvZWxkZXJzIHBlcm1pc3Npb24gaXMiLCJ3b2VsZGVycyBwZXJtaXNzaW9uIGlzIGhlcmVieSIsInRoZSBzb2Z0d2FyZSBpdHMgZG9jdW1lbnRhdGlvbiIsInNvZnR3YXJlIGl0cyBkb2N1bWVudGF0aW9uIGFuZCIsIml0cyBkb2N1bWVudGF0aW9uIGFuZCBtYXJrZXRpbmciLCJkb2N1bWVudGF0aW9uIGFuZCBtYXJrZXRpbmcgcHVibGljaXR5IiwiYW5kIG1hcmtldGluZyBwdWJsaWNpdHkgbWF0ZXJpYWxzIiwibWFya2V0aW5nIHB1YmxpY2l0eSBtYXRlcmlhbHMgYW5kIiwicHVibGljaXR5IG1hdGVyaWFscyBhbmQgYWNrbm93bGVkZ21lbnQiLCJtYXRlcmlhbHMgYW5kIGFja25vd2xlZGdtZW50IHNoYWxsIiwiaW4gdGhlIGRvY3VtZW50YXRpb24gbWF0ZXJpYWxzIiwidGhlIGRvY3VtZW50YXRpb24gbWF0ZXJpYWxzIGFuZCIsImRvY3VtZW50YXRpb24gbWF0ZXJpYWxzIGFuZCBzb2Z0d2FyZSIsIm1hdGVyaWFscyBhbmQgc29mdHdhcmUgcGFja2FnZXMiLCJjb3B5cmlnaHQgYyAyMDAwIDIwMDggY2Fyc3RlbiIsImMgMjAwMCAyMDA4IGNhcnN0ZW4gaGFpdHpsZXIiLCIyMDAwIDIwMDggY2Fyc3RlbiBoYWl0emxlciBnZW9mZiIsIjIwMDggY2Fyc3RlbiBoYWl0emxlciBnZW9mZiBoYXJyaXNvbiIsImNhcnN0ZW4gaGFpdHpsZXIgZ2VvZmYgaGFycmlzb24gYW5kIiwiaGFpdHpsZXIgZ2VvZmYgaGFycmlzb24gYW5kIHZhcmlvdXMiLCJnZW9mZiBoYXJyaXNvbiBhbmQgdmFyaW91cyBjb250cmlidXRvcnMiLCJoYXJyaXNvbiBhbmQgdmFyaW91cyBjb250cmlidXRvcnMgY29weXJpZ2h0IiwiYW5kIHZhcmlvdXMgY29udHJpYnV0b3JzIGNvcHlyaWdodCBjIiwidmFyaW91cyBjb250cmlidXRvcnMgY29weXJpZ2h0IGMgMjAwNCIsImNvbnRyaWJ1dG9ycyBjb3B5cmlnaHQgYyAyMDA0IDIwMDgiLCJjb3B5cmlnaHQgYyAyMDA0IDIwMDgga2ltIiwiYyAyMDA0IDIwMDgga2ltIHdvZWxkZXJzIiwiMjAwNCAyMDA4IGtpbSB3b2VsZGVycyBwZXJtaXNzaW9uIiwiMjAwOCBraW0gd29lbGRlcnMgcGVybWlzc2lvbiBpcyIsImtpbSB3b2VsZGVycyBwZXJtaXNzaW9uIGlzIGhlcmVieSIsIndvZWxkZXJzIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQiLCJjb3BpZXMgb2YgdGhlIHNvZnR3YXJlIGl0cyIsIm9mIHRoZSBzb2Z0d2FyZSBpdHMgZG9jdW1lbnRhdGlvbiIsInRoZSBzb2Z0d2FyZSBpdHMgZG9jdW1lbnRhdGlvbiBhbmQiLCJzb2Z0d2FyZSBpdHMgZG9jdW1lbnRhdGlvbiBhbmQgbWFya2V0aW5nIiwiaXRzIGRvY3VtZW50YXRpb24gYW5kIG1hcmtldGluZyBwdWJsaWNpdHkiLCJkb2N1bWVudGF0aW9uIGFuZCBtYXJrZXRpbmcgcHVibGljaXR5IG1hdGVyaWFscyIsImFuZCBtYXJrZXRpbmcgcHVibGljaXR5IG1hdGVyaWFscyBhbmQiLCJtYXJrZXRpbmcgcHVibGljaXR5IG1hdGVyaWFscyBhbmQgYWNrbm93bGVkZ21lbnQiLCJwdWJsaWNpdHkgbWF0ZXJpYWxzIGFuZCBhY2tub3dsZWRnbWVudCBzaGFsbCIsIm1hdGVyaWFscyBhbmQgYWNrbm93bGVkZ21lbnQgc2hhbGwgYmUiLCJnaXZlbiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBtYXRlcmlhbHMiLCJpbiB0aGUgZG9jdW1lbnRhdGlvbiBtYXRlcmlhbHMgYW5kIiwidGhlIGRvY3VtZW50YXRpb24gbWF0ZXJpYWxzIGFuZCBzb2Z0d2FyZSIsImRvY3VtZW50YXRpb24gbWF0ZXJpYWxzIGFuZCBzb2Z0d2FyZSBwYWNrYWdlcyIsIm1hdGVyaWFscyBhbmQgc29mdHdhcmUgcGFja2FnZXMgdGhhdCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgKEMpIDIwMDAgQ2Fyc3RlbiBIYWl0emxlciBhbmQgdmFyaW91cyBjb250cmlidXRvcnMgKHNlZSBBVVRIT1JTKVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBhbmQgaXRzIENvcHlyaWdodCBub3RpY2VzLiBJbiBhZGRpdGlvbiBwdWJsaWNseSBkb2N1bWVudGVkIGFja25vd2xlZGdtZW50IG11c3QgYmUgZ2l2ZW4gdGhhdCB0aGlzIHNvZnR3YXJlIGhhcyBiZWVuIHVzZWQgaWYgbm8gc291cmNlIGNvZGUgb2YgdGhpcyBzb2Z0d2FyZSBpcyBtYWRlIGF2YWlsYWJsZSBwdWJsaWNseS4gVGhpcyBpbmNsdWRlcyBhY2tub3dsZWRnbWVudHMgaW4gZWl0aGVyIENvcHlyaWdodCBub3RpY2VzLCBNYW51YWxzLCBQdWJsaWNpdHkgYW5kIE1hcmtldGluZyBkb2N1bWVudHMgb3IgYW55IGRvY3VtZW50YXRpb24gcHJvdmlkZWQgd2l0aCBhbnkgcHJvZHVjdCBjb250YWluaW5nIHRoaXMgc29mdHdhcmUuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBhcHBseSB0byBhbnkgc29mdHdhcmUgdGhhdCBsaW5rcyB0byB0aGUgbGlicmFyaWVzIHByb3ZpZGVkIGJ5IHRoaXMgc29mdHdhcmUgKHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkpLCBidXQgb25seSB0byB0aGUgc29mdHdhcmUgcHJvdmlkZWQuXG5cblBsZWFzZSBzZWUgdGhlIENPUFlJTkcuUExBSU4gZm9yIGEgcGxhaW4tZW5nbGlzaCBleHBsYW5hdGlvbiBvZiB0aGlzIG5vdGljZSBhbmQgaXQncyBpbnRlbnQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiJdLCJsaWNlbnNlSWRzIjpbIk1JVC1lbm5hIl0sImtleXdvcmRzIjpbImMgMjAwMCBjYXJzdGVuIiwiMjAwMCBjYXJzdGVuIGhhaXR6bGVyIiwiY2Fyc3RlbiBoYWl0emxlciBhbmQiLCJoYWl0emxlciBhbmQgdmFyaW91cyIsInZhcmlvdXMgY29udHJpYnV0b3JzIHNlZSIsImNvbnRyaWJ1dG9ycyBzZWUgYXV0aG9ycyIsInNlZSBhdXRob3JzIHBlcm1pc3Npb24iLCJhdXRob3JzIHBlcm1pc3Npb24gaXMiLCJhdmFpbGFibGUgcHVibGljbHkgdGhpcyIsInB1YmxpY2x5IHRoaXMgaW5jbHVkZXMiLCJ0aGlzIGluY2x1ZGVzIGFja25vd2xlZGdtZW50cyIsImluY2x1ZGVzIGFja25vd2xlZGdtZW50cyBpbiIsImFja25vd2xlZGdtZW50cyBpbiBlaXRoZXIiLCJub3RpY2UgYW5kIGl0IiwiYW5kIGl0IHMiLCJpdCBzIGludGVudCIsInMgaW50ZW50IHRoZSIsImNvcHlyaWdodCBjIDIwMDAgY2Fyc3RlbiIsImMgMjAwMCBjYXJzdGVuIGhhaXR6bGVyIiwiMjAwMCBjYXJzdGVuIGhhaXR6bGVyIGFuZCIsImNhcnN0ZW4gaGFpdHpsZXIgYW5kIHZhcmlvdXMiLCJoYWl0emxlciBhbmQgdmFyaW91cyBjb250cmlidXRvcnMiLCJhbmQgdmFyaW91cyBjb250cmlidXRvcnMgc2VlIiwidmFyaW91cyBjb250cmlidXRvcnMgc2VlIGF1dGhvcnMiLCJjb250cmlidXRvcnMgc2VlIGF1dGhvcnMgcGVybWlzc2lvbiIsInNlZSBhdXRob3JzIHBlcm1pc3Npb24gaXMiLCJhdXRob3JzIHBlcm1pc3Npb24gaXMgaGVyZWJ5IiwibWFkZSBhdmFpbGFibGUgcHVibGljbHkgdGhpcyIsImF2YWlsYWJsZSBwdWJsaWNseSB0aGlzIGluY2x1ZGVzIiwicHVibGljbHkgdGhpcyBpbmNsdWRlcyBhY2tub3dsZWRnbWVudHMiLCJ0aGlzIGluY2x1ZGVzIGFja25vd2xlZGdtZW50cyBpbiIsImluY2x1ZGVzIGFja25vd2xlZGdtZW50cyBpbiBlaXRoZXIiLCJhY2tub3dsZWRnbWVudHMgaW4gZWl0aGVyIGNvcHlyaWdodCIsInRoaXMgbm90aWNlIGFuZCBpdCIsIm5vdGljZSBhbmQgaXQgcyIsImFuZCBpdCBzIGludGVudCIsIml0IHMgaW50ZW50IHRoZSIsInMgaW50ZW50IHRoZSBzb2Z0d2FyZSIsImNvcHlyaWdodCBjIDIwMDAgY2Fyc3RlbiBoYWl0emxlciIsImMgMjAwMCBjYXJzdGVuIGhhaXR6bGVyIGFuZCIsIjIwMDAgY2Fyc3RlbiBoYWl0emxlciBhbmQgdmFyaW91cyIsImNhcnN0ZW4gaGFpdHpsZXIgYW5kIHZhcmlvdXMgY29udHJpYnV0b3JzIiwiaGFpdHpsZXIgYW5kIHZhcmlvdXMgY29udHJpYnV0b3JzIHNlZSIsImFuZCB2YXJpb3VzIGNvbnRyaWJ1dG9ycyBzZWUgYXV0aG9ycyIsInZhcmlvdXMgY29udHJpYnV0b3JzIHNlZSBhdXRob3JzIHBlcm1pc3Npb24iLCJjb250cmlidXRvcnMgc2VlIGF1dGhvcnMgcGVybWlzc2lvbiBpcyIsInNlZSBhdXRob3JzIHBlcm1pc3Npb24gaXMgaGVyZWJ5IiwiYXV0aG9ycyBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIiwiaXMgbWFkZSBhdmFpbGFibGUgcHVibGljbHkgdGhpcyIsIm1hZGUgYXZhaWxhYmxlIHB1YmxpY2x5IHRoaXMgaW5jbHVkZXMiLCJhdmFpbGFibGUgcHVibGljbHkgdGhpcyBpbmNsdWRlcyBhY2tub3dsZWRnbWVudHMiLCJwdWJsaWNseSB0aGlzIGluY2x1ZGVzIGFja25vd2xlZGdtZW50cyBpbiIsInRoaXMgaW5jbHVkZXMgYWNrbm93bGVkZ21lbnRzIGluIGVpdGhlciIsImluY2x1ZGVzIGFja25vd2xlZGdtZW50cyBpbiBlaXRoZXIgY29weXJpZ2h0IiwiYWNrbm93bGVkZ21lbnRzIGluIGVpdGhlciBjb3B5cmlnaHQgbm90aWNlcyIsIm9mIHRoaXMgbm90aWNlIGFuZCBpdCIsInRoaXMgbm90aWNlIGFuZCBpdCBzIiwibm90aWNlIGFuZCBpdCBzIGludGVudCIsImFuZCBpdCBzIGludGVudCB0aGUiLCJpdCBzIGludGVudCB0aGUgc29mdHdhcmUiLCJzIGludGVudCB0aGUgc29mdHdhcmUgaXMiXX0seyJsaWNlbnNlVGV4dHMiOlsiUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGFuZCBhY2tub3dsZWRnbWVudCBzaGFsbCBiZSBnaXZlbiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgc29mdHdhcmUgcGFja2FnZXMgdGhhdCB0aGlzIFNvZnR3YXJlIHdhcyB1c2VkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4iXSwibGljZW5zZUlkcyI6WyJNSVQtZmVoIl0sImtleXdvcmRzIjpbImRvY3VtZW50YXRpb24gYW5kIGFja25vd2xlZGdtZW50IiwiYW5kIGl0cyBkb2N1bWVudGF0aW9uIGFuZCIsIml0cyBkb2N1bWVudGF0aW9uIGFuZCBhY2tub3dsZWRnbWVudCIsImRvY3VtZW50YXRpb24gYW5kIGFja25vd2xlZGdtZW50IHNoYWxsIiwiZG9jdW1lbnRhdGlvbiBhbmQgc29mdHdhcmUgcGFja2FnZXMiLCJzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gYW5kIiwiYW5kIGl0cyBkb2N1bWVudGF0aW9uIGFuZCBhY2tub3dsZWRnbWVudCIsIml0cyBkb2N1bWVudGF0aW9uIGFuZCBhY2tub3dsZWRnbWVudCBzaGFsbCIsImRvY3VtZW50YXRpb24gYW5kIGFja25vd2xlZGdtZW50IHNoYWxsIGJlIiwiZ2l2ZW4gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kIiwiaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kIHNvZnR3YXJlIiwidGhlIGRvY3VtZW50YXRpb24gYW5kIHNvZnR3YXJlIHBhY2thZ2VzIiwiZG9jdW1lbnRhdGlvbiBhbmQgc29mdHdhcmUgcGFja2FnZXMgdGhhdCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJNSVQgTGljZW5zZSBDb3B5cmlnaHQgKGMpIFx1MDAzY3llYXJcdTAwM2UgXHUwMDNjY29weXJpZ2h0IGhvbGRlcnNcdTAwM2VcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4iLCIgVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbkNvcHlyaWdodCAoYykgMjAxNSBcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuVEhFIFNPRlRXQVJFLiIsIiBNSVQgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpIDIwMTggQmVuIEJveXRlclxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuIiwiTUlUIE5vIEF0dHJpYnV0aW9uXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpc1xuc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlXG53aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksXG5tZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG5wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28uXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCxcbklOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBXG5QQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUXG5IT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT05cbk9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIl0sImxpY2Vuc2VJZHMiOlsiTUlUIl0sImtleXdvcmRzIjpbImNvcHlyaWdodCBob2xkZXJzIHBlcm1pc3Npb24iLCJob2xkZXJzIHBlcm1pc3Npb24gaXMiLCJwZXJtaXNzaW9uIG5vdGljZSBpbmNsdWRpbmciLCJpbmNsdWRpbmcgdGhlIG5leHQiLCJ0aGUgbmV4dCBwYXJhZ3JhcGgiLCJuZXh0IHBhcmFncmFwaCBzaGFsbCIsInBhcmFncmFwaCBzaGFsbCBiZSIsInllYXIgY29weXJpZ2h0IGhvbGRlcnMgcGVybWlzc2lvbiIsImNvcHlyaWdodCBob2xkZXJzIHBlcm1pc3Npb24gaXMiLCJob2xkZXJzIHBlcm1pc3Npb24gaXMgaGVyZWJ5IiwidGhpcyBwZXJtaXNzaW9uIG5vdGljZSBpbmNsdWRpbmciLCJwZXJtaXNzaW9uIG5vdGljZSBpbmNsdWRpbmcgdGhlIiwibm90aWNlIGluY2x1ZGluZyB0aGUgbmV4dCIsImluY2x1ZGluZyB0aGUgbmV4dCBwYXJhZ3JhcGgiLCJ0aGUgbmV4dCBwYXJhZ3JhcGggc2hhbGwiLCJuZXh0IHBhcmFncmFwaCBzaGFsbCBiZSIsInBhcmFncmFwaCBzaGFsbCBiZSBpbmNsdWRlZCIsIm1pdCBsaWNlbnNlIGNvcHlyaWdodCBjIHllYXIiLCJjIHllYXIgY29weXJpZ2h0IGhvbGRlcnMgcGVybWlzc2lvbiIsInllYXIgY29weXJpZ2h0IGhvbGRlcnMgcGVybWlzc2lvbiBpcyIsImNvcHlyaWdodCBob2xkZXJzIHBlcm1pc3Npb24gaXMgaGVyZWJ5IiwiaG9sZGVycyBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIiwiYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgaW5jbHVkaW5nIiwidGhpcyBwZXJtaXNzaW9uIG5vdGljZSBpbmNsdWRpbmcgdGhlIiwicGVybWlzc2lvbiBub3RpY2UgaW5jbHVkaW5nIHRoZSBuZXh0Iiwibm90aWNlIGluY2x1ZGluZyB0aGUgbmV4dCBwYXJhZ3JhcGgiLCJpbmNsdWRpbmcgdGhlIG5leHQgcGFyYWdyYXBoIHNoYWxsIiwidGhlIG5leHQgcGFyYWdyYXBoIHNoYWxsIGJlIiwibmV4dCBwYXJhZ3JhcGggc2hhbGwgYmUgaW5jbHVkZWQiLCJwYXJhZ3JhcGggc2hhbGwgYmUgaW5jbHVkZWQgaW4iLCJtaXQgbGljZW5zZSBtaXQiLCJsaWNlbnNlIG1pdCBjb3B5cmlnaHQiLCJtaXQgY29weXJpZ2h0IGMiLCJjb3B5cmlnaHQgYyAyMDE1IiwiYyAyMDE1IHBlcm1pc3Npb24iLCIyMDE1IHBlcm1pc3Npb24gaXMiLCJ0aGUgbWl0IGxpY2Vuc2UgbWl0IiwibWl0IGxpY2Vuc2UgbWl0IGNvcHlyaWdodCIsImxpY2Vuc2UgbWl0IGNvcHlyaWdodCBjIiwibWl0IGNvcHlyaWdodCBjIDIwMTUiLCJjb3B5cmlnaHQgYyAyMDE1IHBlcm1pc3Npb24iLCJjIDIwMTUgcGVybWlzc2lvbiBpcyIsIjIwMTUgcGVybWlzc2lvbiBpcyBoZXJlYnkiLCJ0aGUgbWl0IGxpY2Vuc2UgbWl0IGNvcHlyaWdodCIsIm1pdCBsaWNlbnNlIG1pdCBjb3B5cmlnaHQgYyIsImxpY2Vuc2UgbWl0IGNvcHlyaWdodCBjIDIwMTUiLCJtaXQgY29weXJpZ2h0IGMgMjAxNSBwZXJtaXNzaW9uIiwiY29weXJpZ2h0IGMgMjAxNSBwZXJtaXNzaW9uIGlzIiwiYyAyMDE1IHBlcm1pc3Npb24gaXMgaGVyZWJ5IiwiMjAxNSBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIiwiYyAyMDE4IGJlbiIsIjIwMTggYmVuIGJveXRlciIsImJlbiBib3l0ZXIgcGVybWlzc2lvbiIsImJveXRlciBwZXJtaXNzaW9uIGlzIiwibGljZW5zZSBjb3B5cmlnaHQgYyAyMDE4IiwiY29weXJpZ2h0IGMgMjAxOCBiZW4iLCJjIDIwMTggYmVuIGJveXRlciIsIjIwMTggYmVuIGJveXRlciBwZXJtaXNzaW9uIiwiYmVuIGJveXRlciBwZXJtaXNzaW9uIGlzIiwiYm95dGVyIHBlcm1pc3Npb24gaXMgaGVyZWJ5IiwibWl0IGxpY2Vuc2UgY29weXJpZ2h0IGMgMjAxOCIsImxpY2Vuc2UgY29weXJpZ2h0IGMgMjAxOCBiZW4iLCJjb3B5cmlnaHQgYyAyMDE4IGJlbiBib3l0ZXIiLCJjIDIwMTggYmVuIGJveXRlciBwZXJtaXNzaW9uIiwiMjAxOCBiZW4gYm95dGVyIHBlcm1pc3Npb24gaXMiLCJiZW4gYm95dGVyIHBlcm1pc3Npb24gaXMgaGVyZWJ5IiwiYm95dGVyIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQiLCJubyBhdHRyaWJ1dGlvbiBwZXJtaXNzaW9uIiwiYXR0cmlidXRpb24gcGVybWlzc2lvbiBpcyIsIm1pdCBubyBhdHRyaWJ1dGlvbiBwZXJtaXNzaW9uIiwibm8gYXR0cmlidXRpb24gcGVybWlzc2lvbiBpcyIsImF0dHJpYnV0aW9uIHBlcm1pc3Npb24gaXMgaGVyZWJ5IiwibWl0IG5vIGF0dHJpYnV0aW9uIHBlcm1pc3Npb24gaXMiLCJubyBhdHRyaWJ1dGlvbiBwZXJtaXNzaW9uIGlzIGhlcmVieSIsImF0dHJpYnV0aW9uIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQiXX0seyJsaWNlbnNlVGV4dHMiOlsiUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbkRpc3RyaWJ1dGlvbnMgb2YgYWxsIG9yIHBhcnQgb2YgdGhlIFNvZnR3YXJlIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgdGhlIHJlY2lwaWVudHMgYXMgdGhleSB3b3VsZCB1c2UgdGhlIHVubW9kaWZpZWQgU29mdHdhcmUsIGNvbnRhaW5pbmcgbW9kaWZpY2F0aW9ucyB0aGF0IHN1YnN0YW50aWFsbHkgYWx0ZXIsIHJlbW92ZSwgb3IgZGlzYWJsZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBTb2Z0d2FyZSwgb3V0c2lkZSBvZiB0aGUgZG9jdW1lbnRlZCBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMgcHJvdmlkZWQgYnkgdGhlIFNvZnR3YXJlLCBzaGFsbCBiZSBtb2RpZmllZCBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIEF1dGhvcidzIGJ1ZyByZXBvcnRpbmcgZW1haWwgYWRkcmVzc2VzIGFuZCB1cmxzIGFyZSBlaXRoZXIgcmVwbGFjZWQgd2l0aCB0aGUgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgcGFydGllcyByZXNwb25zaWJsZSBmb3IgdGhlIGNoYW5nZXMsIG9yIHJlbW92ZWQgZW50aXJlbHkuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiJdLCJsaWNlbnNlSWRzIjpbIk1JVE5GQSJdLCJrZXl3b3JkcyI6WyJ0aGUgc29mdHdhcmUgZGlzdHJpYnV0aW9ucyIsInNvZnR3YXJlIGRpc3RyaWJ1dGlvbnMgb2YiLCJkaXN0cmlidXRpb25zIG9mIGFsbCIsInNvZnR3YXJlIGludGVuZGVkIHRvIiwiYnkgdGhlIHJlY2lwaWVudHMiLCJ0aGUgcmVjaXBpZW50cyBhcyIsInJlY2lwaWVudHMgYXMgdGhleSIsImFzIHRoZXkgd291bGQiLCJ0aGV5IHdvdWxkIHVzZSIsIndvdWxkIHVzZSB0aGUiLCJ1c2UgdGhlIHVubW9kaWZpZWQiLCJ1bm1vZGlmaWVkIHNvZnR3YXJlIGNvbnRhaW5pbmciLCJzb2Z0d2FyZSBjb250YWluaW5nIG1vZGlmaWNhdGlvbnMiLCJjb250YWluaW5nIG1vZGlmaWNhdGlvbnMgdGhhdCIsIm1vZGlmaWNhdGlvbnMgdGhhdCBzdWJzdGFudGlhbGx5IiwidGhhdCBzdWJzdGFudGlhbGx5IGFsdGVyIiwic3Vic3RhbnRpYWxseSBhbHRlciByZW1vdmUiLCJhbHRlciByZW1vdmUgb3IiLCJyZW1vdmUgb3IgZGlzYWJsZSIsIm9yIGRpc2FibGUgZnVuY3Rpb25hbGl0eSIsImRpc2FibGUgZnVuY3Rpb25hbGl0eSBvZiIsInRoZSBzb2Z0d2FyZSBvdXRzaWRlIiwic29mdHdhcmUgb3V0c2lkZSBvZiIsIm91dHNpZGUgb2YgdGhlIiwib2YgdGhlIGRvY3VtZW50ZWQiLCJ0aGUgZG9jdW1lbnRlZCBjb25maWd1cmF0aW9uIiwiZG9jdW1lbnRlZCBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMiLCJjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMgcHJvdmlkZWQiLCJtZWNoYW5pc21zIHByb3ZpZGVkIGJ5IiwiYmUgbW9kaWZpZWQgc3VjaCIsIm1vZGlmaWVkIHN1Y2ggdGhhdCIsImF1dGhvciBzIGJ1ZyIsInMgYnVnIHJlcG9ydGluZyIsImJ1ZyByZXBvcnRpbmcgZW1haWwiLCJyZXBvcnRpbmcgZW1haWwgYWRkcmVzc2VzIiwiZW1haWwgYWRkcmVzc2VzIGFuZCIsImFkZHJlc3NlcyBhbmQgdXJscyIsImFuZCB1cmxzIGFyZSIsInVybHMgYXJlIGVpdGhlciIsImFyZSBlaXRoZXIgcmVwbGFjZWQiLCJlaXRoZXIgcmVwbGFjZWQgd2l0aCIsIndpdGggdGhlIGNvbnRhY3QiLCJjb250YWN0IGluZm9ybWF0aW9uIG9mIiwidGhlIHBhcnRpZXMgcmVzcG9uc2libGUiLCJwYXJ0aWVzIHJlc3BvbnNpYmxlIGZvciIsInRoZSBjaGFuZ2VzIG9yIiwiY2hhbmdlcyBvciByZW1vdmVkIiwib3IgcmVtb3ZlZCBlbnRpcmVseSIsInJlbW92ZWQgZW50aXJlbHkgdGhlIiwiZW50aXJlbHkgdGhlIHNvZnR3YXJlIiwib2YgdGhlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbnMiLCJ0aGUgc29mdHdhcmUgZGlzdHJpYnV0aW9ucyBvZiIsInNvZnR3YXJlIGRpc3RyaWJ1dGlvbnMgb2YgYWxsIiwiZGlzdHJpYnV0aW9ucyBvZiBhbGwgb3IiLCJ0aGUgc29mdHdhcmUgaW50ZW5kZWQgdG8iLCJzb2Z0d2FyZSBpbnRlbmRlZCB0byBiZSIsInRvIGJlIHVzZWQgYnkiLCJiZSB1c2VkIGJ5IHRoZSIsInVzZWQgYnkgdGhlIHJlY2lwaWVudHMiLCJieSB0aGUgcmVjaXBpZW50cyBhcyIsInRoZSByZWNpcGllbnRzIGFzIHRoZXkiLCJyZWNpcGllbnRzIGFzIHRoZXkgd291bGQiLCJhcyB0aGV5IHdvdWxkIHVzZSIsInRoZXkgd291bGQgdXNlIHRoZSIsIndvdWxkIHVzZSB0aGUgdW5tb2RpZmllZCIsInVzZSB0aGUgdW5tb2RpZmllZCBzb2Z0d2FyZSIsInRoZSB1bm1vZGlmaWVkIHNvZnR3YXJlIGNvbnRhaW5pbmciLCJ1bm1vZGlmaWVkIHNvZnR3YXJlIGNvbnRhaW5pbmcgbW9kaWZpY2F0aW9ucyIsInNvZnR3YXJlIGNvbnRhaW5pbmcgbW9kaWZpY2F0aW9ucyB0aGF0IiwiY29udGFpbmluZyBtb2RpZmljYXRpb25zIHRoYXQgc3Vic3RhbnRpYWxseSIsIm1vZGlmaWNhdGlvbnMgdGhhdCBzdWJzdGFudGlhbGx5IGFsdGVyIiwidGhhdCBzdWJzdGFudGlhbGx5IGFsdGVyIHJlbW92ZSIsInN1YnN0YW50aWFsbHkgYWx0ZXIgcmVtb3ZlIG9yIiwiYWx0ZXIgcmVtb3ZlIG9yIGRpc2FibGUiLCJyZW1vdmUgb3IgZGlzYWJsZSBmdW5jdGlvbmFsaXR5Iiwib3IgZGlzYWJsZSBmdW5jdGlvbmFsaXR5IG9mIiwiZGlzYWJsZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSIsImZ1bmN0aW9uYWxpdHkgb2YgdGhlIHNvZnR3YXJlIiwib2YgdGhlIHNvZnR3YXJlIG91dHNpZGUiLCJ0aGUgc29mdHdhcmUgb3V0c2lkZSBvZiIsInNvZnR3YXJlIG91dHNpZGUgb2YgdGhlIiwib3V0c2lkZSBvZiB0aGUgZG9jdW1lbnRlZCIsIm9mIHRoZSBkb2N1bWVudGVkIGNvbmZpZ3VyYXRpb24iLCJ0aGUgZG9jdW1lbnRlZCBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMiLCJkb2N1bWVudGVkIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtcyBwcm92aWRlZCIsImNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtcyBwcm92aWRlZCBieSIsIm1lY2hhbmlzbXMgcHJvdmlkZWQgYnkgdGhlIiwicHJvdmlkZWQgYnkgdGhlIHNvZnR3YXJlIiwiYnkgdGhlIHNvZnR3YXJlIHNoYWxsIiwic29mdHdhcmUgc2hhbGwgYmUgbW9kaWZpZWQiLCJzaGFsbCBiZSBtb2RpZmllZCBzdWNoIiwiYmUgbW9kaWZpZWQgc3VjaCB0aGF0IiwibW9kaWZpZWQgc3VjaCB0aGF0IHRoZSIsIm9yaWdpbmFsIGF1dGhvciBzIGJ1ZyIsImF1dGhvciBzIGJ1ZyByZXBvcnRpbmciLCJzIGJ1ZyByZXBvcnRpbmcgZW1haWwiLCJidWcgcmVwb3J0aW5nIGVtYWlsIGFkZHJlc3NlcyIsInJlcG9ydGluZyBlbWFpbCBhZGRyZXNzZXMgYW5kIiwiZW1haWwgYWRkcmVzc2VzIGFuZCB1cmxzIiwiYWRkcmVzc2VzIGFuZCB1cmxzIGFyZSIsImFuZCB1cmxzIGFyZSBlaXRoZXIiLCJ1cmxzIGFyZSBlaXRoZXIgcmVwbGFjZWQiLCJhcmUgZWl0aGVyIHJlcGxhY2VkIHdpdGgiLCJlaXRoZXIgcmVwbGFjZWQgd2l0aCB0aGUiLCJyZXBsYWNlZCB3aXRoIHRoZSBjb250YWN0Iiwid2l0aCB0aGUgY29udGFjdCBpbmZvcm1hdGlvbiIsInRoZSBjb250YWN0IGluZm9ybWF0aW9uIG9mIiwiY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUiLCJpbmZvcm1hdGlvbiBvZiB0aGUgcGFydGllcyIsIm9mIHRoZSBwYXJ0aWVzIHJlc3BvbnNpYmxlIiwidGhlIHBhcnRpZXMgcmVzcG9uc2libGUgZm9yIiwicGFydGllcyByZXNwb25zaWJsZSBmb3IgdGhlIiwicmVzcG9uc2libGUgZm9yIHRoZSBjaGFuZ2VzIiwiZm9yIHRoZSBjaGFuZ2VzIG9yIiwidGhlIGNoYW5nZXMgb3IgcmVtb3ZlZCIsImNoYW5nZXMgb3IgcmVtb3ZlZCBlbnRpcmVseSIsIm9yIHJlbW92ZWQgZW50aXJlbHkgdGhlIiwicmVtb3ZlZCBlbnRpcmVseSB0aGUgc29mdHdhcmUiLCJlbnRpcmVseSB0aGUgc29mdHdhcmUgaXMiLCJwb3J0aW9ucyBvZiB0aGUgc29mdHdhcmUgZGlzdHJpYnV0aW9ucyIsIm9mIHRoZSBzb2Z0d2FyZSBkaXN0cmlidXRpb25zIG9mIiwidGhlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbnMgb2YgYWxsIiwic29mdHdhcmUgZGlzdHJpYnV0aW9ucyBvZiBhbGwgb3IiLCJkaXN0cmlidXRpb25zIG9mIGFsbCBvciBwYXJ0IiwicGFydCBvZiB0aGUgc29mdHdhcmUgaW50ZW5kZWQiLCJvZiB0aGUgc29mdHdhcmUgaW50ZW5kZWQgdG8iLCJ0aGUgc29mdHdhcmUgaW50ZW5kZWQgdG8gYmUiLCJzb2Z0d2FyZSBpbnRlbmRlZCB0byBiZSB1c2VkIiwiaW50ZW5kZWQgdG8gYmUgdXNlZCBieSIsInRvIGJlIHVzZWQgYnkgdGhlIiwiYmUgdXNlZCBieSB0aGUgcmVjaXBpZW50cyIsInVzZWQgYnkgdGhlIHJlY2lwaWVudHMgYXMiLCJieSB0aGUgcmVjaXBpZW50cyBhcyB0aGV5IiwidGhlIHJlY2lwaWVudHMgYXMgdGhleSB3b3VsZCIsInJlY2lwaWVudHMgYXMgdGhleSB3b3VsZCB1c2UiLCJhcyB0aGV5IHdvdWxkIHVzZSB0aGUiLCJ0aGV5IHdvdWxkIHVzZSB0aGUgdW5tb2RpZmllZCIsIndvdWxkIHVzZSB0aGUgdW5tb2RpZmllZCBzb2Z0d2FyZSIsInVzZSB0aGUgdW5tb2RpZmllZCBzb2Z0d2FyZSBjb250YWluaW5nIiwidGhlIHVubW9kaWZpZWQgc29mdHdhcmUgY29udGFpbmluZyBtb2RpZmljYXRpb25zIiwidW5tb2RpZmllZCBzb2Z0d2FyZSBjb250YWluaW5nIG1vZGlmaWNhdGlvbnMgdGhhdCIsInNvZnR3YXJlIGNvbnRhaW5pbmcgbW9kaWZpY2F0aW9ucyB0aGF0IHN1YnN0YW50aWFsbHkiLCJjb250YWluaW5nIG1vZGlmaWNhdGlvbnMgdGhhdCBzdWJzdGFudGlhbGx5IGFsdGVyIiwibW9kaWZpY2F0aW9ucyB0aGF0IHN1YnN0YW50aWFsbHkgYWx0ZXIgcmVtb3ZlIiwidGhhdCBzdWJzdGFudGlhbGx5IGFsdGVyIHJlbW92ZSBvciIsInN1YnN0YW50aWFsbHkgYWx0ZXIgcmVtb3ZlIG9yIGRpc2FibGUiLCJhbHRlciByZW1vdmUgb3IgZGlzYWJsZSBmdW5jdGlvbmFsaXR5IiwicmVtb3ZlIG9yIGRpc2FibGUgZnVuY3Rpb25hbGl0eSBvZiIsIm9yIGRpc2FibGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUiLCJkaXNhYmxlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHNvZnR3YXJlIiwiZnVuY3Rpb25hbGl0eSBvZiB0aGUgc29mdHdhcmUgb3V0c2lkZSIsIm9mIHRoZSBzb2Z0d2FyZSBvdXRzaWRlIG9mIiwidGhlIHNvZnR3YXJlIG91dHNpZGUgb2YgdGhlIiwic29mdHdhcmUgb3V0c2lkZSBvZiB0aGUgZG9jdW1lbnRlZCIsIm91dHNpZGUgb2YgdGhlIGRvY3VtZW50ZWQgY29uZmlndXJhdGlvbiIsIm9mIHRoZSBkb2N1bWVudGVkIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtcyIsInRoZSBkb2N1bWVudGVkIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtcyBwcm92aWRlZCIsImRvY3VtZW50ZWQgY29uZmlndXJhdGlvbiBtZWNoYW5pc21zIHByb3ZpZGVkIGJ5IiwiY29uZmlndXJhdGlvbiBtZWNoYW5pc21zIHByb3ZpZGVkIGJ5IHRoZSIsIm1lY2hhbmlzbXMgcHJvdmlkZWQgYnkgdGhlIHNvZnR3YXJlIiwicHJvdmlkZWQgYnkgdGhlIHNvZnR3YXJlIHNoYWxsIiwiYnkgdGhlIHNvZnR3YXJlIHNoYWxsIGJlIiwidGhlIHNvZnR3YXJlIHNoYWxsIGJlIG1vZGlmaWVkIiwic29mdHdhcmUgc2hhbGwgYmUgbW9kaWZpZWQgc3VjaCIsInNoYWxsIGJlIG1vZGlmaWVkIHN1Y2ggdGhhdCIsImJlIG1vZGlmaWVkIHN1Y2ggdGhhdCB0aGUiLCJtb2RpZmllZCBzdWNoIHRoYXQgdGhlIG9yaWdpbmFsIiwic3VjaCB0aGF0IHRoZSBvcmlnaW5hbCBhdXRob3IiLCJ0aGUgb3JpZ2luYWwgYXV0aG9yIHMgYnVnIiwib3JpZ2luYWwgYXV0aG9yIHMgYnVnIHJlcG9ydGluZyIsImF1dGhvciBzIGJ1ZyByZXBvcnRpbmcgZW1haWwiLCJzIGJ1ZyByZXBvcnRpbmcgZW1haWwgYWRkcmVzc2VzIiwiYnVnIHJlcG9ydGluZyBlbWFpbCBhZGRyZXNzZXMgYW5kIiwicmVwb3J0aW5nIGVtYWlsIGFkZHJlc3NlcyBhbmQgdXJscyIsImVtYWlsIGFkZHJlc3NlcyBhbmQgdXJscyBhcmUiLCJhZGRyZXNzZXMgYW5kIHVybHMgYXJlIGVpdGhlciIsImFuZCB1cmxzIGFyZSBlaXRoZXIgcmVwbGFjZWQiLCJ1cmxzIGFyZSBlaXRoZXIgcmVwbGFjZWQgd2l0aCIsImFyZSBlaXRoZXIgcmVwbGFjZWQgd2l0aCB0aGUiLCJlaXRoZXIgcmVwbGFjZWQgd2l0aCB0aGUgY29udGFjdCIsInJlcGxhY2VkIHdpdGggdGhlIGNvbnRhY3QgaW5mb3JtYXRpb24iLCJ3aXRoIHRoZSBjb250YWN0IGluZm9ybWF0aW9uIG9mIiwidGhlIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIiwiY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgcGFydGllcyIsImluZm9ybWF0aW9uIG9mIHRoZSBwYXJ0aWVzIHJlc3BvbnNpYmxlIiwib2YgdGhlIHBhcnRpZXMgcmVzcG9uc2libGUgZm9yIiwidGhlIHBhcnRpZXMgcmVzcG9uc2libGUgZm9yIHRoZSIsInBhcnRpZXMgcmVzcG9uc2libGUgZm9yIHRoZSBjaGFuZ2VzIiwicmVzcG9uc2libGUgZm9yIHRoZSBjaGFuZ2VzIG9yIiwiZm9yIHRoZSBjaGFuZ2VzIG9yIHJlbW92ZWQiLCJ0aGUgY2hhbmdlcyBvciByZW1vdmVkIGVudGlyZWx5IiwiY2hhbmdlcyBvciByZW1vdmVkIGVudGlyZWx5IHRoZSIsIm9yIHJlbW92ZWQgZW50aXJlbHkgdGhlIHNvZnR3YXJlIiwicmVtb3ZlZCBlbnRpcmVseSB0aGUgc29mdHdhcmUgaXMiLCJlbnRpcmVseSB0aGUgc29mdHdhcmUgaXMgcHJvdmlkZWQiXX0seyJsaWNlbnNlVGV4dHMiOlsiTU9aSUxMQSBQVUJMSUMgTElDRU5TRVxuXG5WZXJzaW9uIDEuMFxuXG4gICAxLiBEZWZpbml0aW9ucy5cblxuICAgICAgMS4xLiBcIkNvbnRyaWJ1dG9yXCIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLlxuXG4gICAgICAxLjIuIFwiQ29udHJpYnV0b3IgVmVyc2lvblwiIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci5cblxuICAgICAgMS4zLiBcIkNvdmVyZWQgQ29kZVwiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuXG5cbiAgICAgIDEuNC4gXCJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc21cIiBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS5cblxuICAgICAgMS41LiBcIkV4ZWN1dGFibGVcIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS5cblxuICAgICAgMS42LiBcIkluaXRpYWwgRGV2ZWxvcGVyXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLlxuXG4gICAgICAxLjcuIFwiTGFyZ2VyIFdvcmtcIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjguIFwiTGljZW5zZVwiIG1lYW5zIHRoaXMgZG9jdW1lbnQuXG5cbiAgICAgIDEuOS4gXCJNb2RpZmljYXRpb25zXCIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6XG5cbiAgICAgICAgIEEuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgICAgIEIuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIDEuMTAuIFwiT3JpZ2luYWwgQ29kZVwiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuMTEuIFwiU291cmNlIENvZGVcIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBhIGxpc3Qgb2Ygc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3IncyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuXG5cbiAgICAgIDEuMTIuIFwiWW91XCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgXCJZb3VcIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJjb250cm9sXCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLlxuXG4gICAgICAyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC5cblxuICAgICAgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgICAgKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZFxuXG4gICAgICAgICAoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsIChcIlV0aWxpemVcIikgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLlxuXG4gICAgICAyLjIuIENvbnRyaWJ1dG9yIEdyYW50LlxuXG4gICAgICBFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgICAgKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuXG5cbiAgIDMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy5cblxuICAgICAgMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLlxuXG4gICAgICBUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS5cblxuICAgICAgMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuXG5cbiAgICAgIEFueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LlxuXG4gICAgICAzLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIFlvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS5cblxuICAgICAgMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVyc1xuXG4gICAgICAgICAoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLlxuXG4gICAgICAgICBJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaW4gcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgKG9yIGl0cyB1dGlsaXphdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgXCJMRUdBTFwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBZb3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgWW91IG1ha2UgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuXG5cbiAgICAgICAgIChiKSBDb250cmlidXRvciBBUElzLlxuXG4gICAgICAgICBJZiBZb3VyIE1vZGlmaWNhdGlvbiBpcyBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIFlvdSBvd24gb3IgY29udHJvbCBwYXRlbnRzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIHlvdSBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLlxuXG4gICAgICAzLjUuIFJlcXVpcmVkIE5vdGljZXMuXG5cbiAgICAgIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLCBhbmQgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUsIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocyksIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkgZmlsZSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuXG5cbiAgICAgIDMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuXG5cbiAgICAgIFlvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjcuIExhcmdlciBXb3Jrcy5cblxuICAgICAgWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICA0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uXG5cbiAgIElmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LlxuXG4gICA1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSwgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLlxuXG4gICA2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS5cblxuICAgICAgNi4xLiBOZXcgVmVyc2lvbnMuXG5cbiAgICAgIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uIChcIk5ldHNjYXBlXCIpIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci5cblxuICAgICAgNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLlxuXG4gICAgICBPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTmV0c2NhcGUuIE5vIG9uZSBvdGhlciB0aGFuIE5ldHNjYXBlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgNi4zLiBEZXJpdmF0aXZlIFdvcmtzLlxuXG4gICAgICBJZiB5b3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyBcIk1vemlsbGFcIiwgXCJNT1pJTExBUExcIiwgXCJNT1pQTFwiLCBcIk5ldHNjYXBlXCIsIFwiTlBMXCIgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgYW55d2hlcmUgaW4geW91ciBsaWNlbnNlIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCB5b3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgYW5kIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pXG5cbiAgIDcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuXG5cbiAgIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuXG5cbiAgIDguIFRFUk1JTkFUSU9OLlxuXG4gICBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuXG5cbiAgIDkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLlxuXG4gICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEFUIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS5cblxuICAgMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuXG5cbiAgIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSBcImNvbW1lcmNpYWwgaXRlbSxcIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlXCIgYW5kIFwiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLFwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi5cblxuICAgMTEuIE1JU0NFTExBTkVPVVMuXG5cbiAgIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiwgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYTogKGEpIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcsIGFsbCBkaXNwdXRlcyByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgKGV4Y2VwdGluZyBhbnkgZGlzcHV0ZSByZWxhdGluZyB0byBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzKSBzaGFsbCBiZSBzdWJqZWN0IHRvIGZpbmFsIGFuZCBiaW5kaW5nIGFyYml0cmF0aW9uLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcGF5aW5nIGFsbCBjb3N0cyBvZiBhcmJpdHJhdGlvbjsgKGIpIGFueSBhcmJpdHJhdGlvbiByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBoZWxkIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgdW5kZXIgdGhlIGF1c3BpY2VzIG9mIEpBTVMvRW5kRGlzcHV0ZTsgYW5kIChjKSBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS5cblxuICAgMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuXG5cbiAgIEV4Y2VwdCBpbiBjYXNlcyB3aGVyZSBhbm90aGVyIENvbnRyaWJ1dG9yIGhhcyBmYWlsZWQgdG8gY29tcGx5IHdpdGggU2VjdGlvbiAzLjQsIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIFlvdXIgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgQ292ZXJlZCBDb2RlIHlvdSBtYWRlIGF2YWlsYWJsZSwgdGhlIHJldmVudWVzIHlvdSByZWNlaXZlZCBmcm9tIHV0aWxpemluZyBzdWNoIHJpZ2h0cywgYW5kIG90aGVyIHJlbGV2YW50IGZhY3RvcnMuIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggYWZmZWN0ZWQgcGFydGllcyB0byBkaXN0cmlidXRlIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gRVhISUJJVCBBLlxuXG5cIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML1xuXG5Tb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG5UaGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fXyAuIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fXyAuIFBvcnRpb25zIGNyZWF0ZWQgYnkgX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX18gLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBDb250cmlidXRvcihzKTogX19fX18gLlwiIl0sImxpY2Vuc2VJZHMiOlsiTVBMLTEuMCJdLCJrZXl3b3JkcyI6bnVsbH0seyJsaWNlbnNlVGV4dHMiOlsiTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMVxuXG4gICAxLiBEZWZpbml0aW9ucy5cblxuICAgICAgMS4wLjEuIFwiQ29tbWVyY2lhbCBVc2VcIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUgQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LlxuXG4gICAgICAxLjEuIFwiQ29udHJpYnV0b3JcIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIDEuMi4gXCJDb250cmlidXRvciBWZXJzaW9uXCIgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLlxuXG4gICAgICAxLjMuIFwiQ292ZXJlZCBDb2RlXCIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi5cblxuICAgICAgMS40LiBcIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbVwiIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLlxuXG4gICAgICAxLjUuIFwiRXhlY3V0YWJsZVwiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLlxuXG4gICAgICAxLjYuIFwiSW5pdGlhbCBEZXZlbG9wZXJcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuXG5cbiAgICAgIDEuNy4gXCJMYXJnZXIgV29ya1wiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuOC4gXCJMaWNlbnNlXCIgbWVhbnMgdGhpcyBkb2N1bWVudC5cblxuICAgICAgMS44LjEuIFwiTGljZW5zYWJsZVwiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLlxuXG4gICAgICAxLjkuIFwiTW9kaWZpY2F0aW9uc1wiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOlxuXG4gICAgICBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICAgICBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICAgICAxLjEwLiBcIk9yaWdpbmFsIENvZGVcIiBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjEwLjEuIFwiUGF0ZW50IENsYWltc1wiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLlxuXG4gICAgICAxLjExLiBcIlNvdXJjZSBDb2RlXCIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3IncyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuXG5cbiAgICAgIDEuMTIuIFwiWW91XCIgKG9yIFwiWW91clwiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBcIllvdVwiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcImNvbnRyb2xcIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgMi4gU291cmNlIENvZGUgTGljZW5zZS5cblxuICAgICAgMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuIFRoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6XG5cbiAgICAgICAgIGEuIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kXG5cbiAgICAgICAgIGIuIHVuZGVyIFBhdGVudHMgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLlxuXG4gICAgICAgICBjLiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xIChhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAgICBkLiBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEgKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLlxuXG4gICAgICAyLjIuIENvbnRyaWJ1dG9yIEdyYW50LiBTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZVxuXG4gICAgICAgICBhLiB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kXG5cbiAgICAgICAgIGIuIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuXG5cbiAgICAgICAgIGMuIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMiAoYSkgYW5kIDIuMiAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICAgICAgICBkLiBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIgKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuXG5cbiAgIDMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy5cblxuICAgICAgMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLiBUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS5cblxuICAgICAgMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIEFueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LlxuXG4gICAgICAzLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIFlvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS5cblxuICAgICAgMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVyc1xuXG4gICAgICAgICAoYSkgVGhpcmQgUGFydHkgQ2xhaW1zXG5cbiAgICAgICAgIElmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSdzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgXCJMRUdBTFwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuXG5cbiAgICAgICAgIChiKSBDb250cmlidXRvciBBUElzXG5cbiAgICAgICAgIElmIENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS5cblxuICAgICAgICAgKGMpIFJlcHJlc2VudGF0aW9ucy5cblxuICAgICAgICAgQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40IChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3Mgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgMy41LiBSZXF1aXJlZCBOb3RpY2VzLiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbnMgMy4xLCAzLjIsIDMuMywgMy40IGFuZCAzLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCdzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuXG5cbiAgICAgIDMuNy4gTGFyZ2VyIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgIDQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi5cblxuICAgSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC5cblxuICAgNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLlxuXG4gICA2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS5cblxuICAgICAgNi4xLiBOZXcgVmVyc2lvbnNcblxuICAgICAgTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24gKFwiTmV0c2NhcGVcIikgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLlxuXG4gICAgICA2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnNcblxuICAgICAgT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IE5ldHNjYXBlLiBObyBvbmUgb3RoZXIgdGhhbiBOZXRzY2FwZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDYuMy4gRGVyaXZhdGl2ZSBXb3Jrc1xuXG4gICAgICBJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyBcIk1vemlsbGFcIiwgXCJNT1pJTExBUExcIiwgXCJNT1pQTFwiLCBcIk5ldHNjYXBlXCIsIFwiTVBMXCIsIFwiTlBMXCIgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIGFuZCBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKVxuXG4gICA3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZXG5cbiAgIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuXG5cbiAgIDguIFRlcm1pbmF0aW9uXG5cbiAgICAgIDguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLlxuXG4gICAgICA4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3BlciBvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzIFwiUGFydGljaXBhbnRcIikgYWxsZWdpbmcgdGhhdDpcblxuICAgICAgICAgYS4gc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLlxuXG4gICAgICAgICBiLiBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC5cblxuICAgICAgOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLlxuXG4gICAgICA4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi5cblxuICAgOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFlcblxuICAgVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICAxMC4gVS5TLiBnb3Zlcm5tZW50IGVuZCB1c2Vyc1xuXG4gICBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgXCJjb21tZXJjaWFsIGl0ZW0sXCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mIFwiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZVwiIGFuZCBcImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbixcIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uXG5cbiAgIDExLiBNaXNjZWxsYW5lb3VzXG5cbiAgIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLlxuXG4gICAxMi4gUmVzcG9uc2liaWxpdHkgZm9yIGNsYWltc1xuXG4gICBBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuXG5cbiAgIDEzLiBNdWx0aXBsZS1saWNlbnNlZCBjb2RlXG5cbiAgIEluaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcyBcIk11bHRpcGxlLUxpY2Vuc2VkXCIuIFwiTXVsdGlwbGUtTGljZW5zZWRcIiBtZWFucyB0aGF0IHRoZSBJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgWW91ciBjaG9pY2Ugb2YgdGhlIE1QTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBFeGhpYml0IEEgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlLlxuXG5cIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML1xuXG5Tb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG5UaGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAuXG5cblRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX18gLlxuXG5Qb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fIC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIC5cblxuQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSBcIiBbX19fXSBMaWNlbnNlXCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIFtfX19fX19dIExpY2Vuc2UgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dIExpY2Vuc2UuIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuXCJcblxuTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy4iXSwibGljZW5zZUlkcyI6WyJNUEwtMS4xIl0sImtleXdvcmRzIjpudWxsfSx7ImxpY2Vuc2VUZXh0cyI6WyJNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4wXG5cbiAgIDEuIERlZmluaXRpb25zXG5cbiAgICAgIDEuMS4gXCJDb250cmlidXRvclwiIG1lYW5zIGVhY2ggaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgdGhhdCBjcmVhdGVzLCBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YsIG9yIG93bnMgQ292ZXJlZCBTb2Z0d2FyZS5cblxuICAgICAgMS4yLiBcIkNvbnRyaWJ1dG9yIFZlcnNpb25cIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbnMgb2Ygb3RoZXJzIChpZiBhbnkpIHVzZWQgYnkgYSBDb250cmlidXRvciBhbmQgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yJ3MgQ29udHJpYnV0aW9uLlxuXG4gICAgICAxLjMuIFwiQ29udHJpYnV0aW9uXCIgbWVhbnMgQ292ZXJlZCBTb2Z0d2FyZSBvZiBhIHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuXG5cbiAgICAgIDEuNC4gXCJDb3ZlcmVkIFNvZnR3YXJlXCIgbWVhbnMgU291cmNlIENvZGUgRm9ybSB0byB3aGljaCB0aGUgaW5pdGlhbCBDb250cmlidXRvciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIHRoZSBFeGVjdXRhYmxlIEZvcm0gb2Ygc3VjaCBTb3VyY2UgQ29kZSBGb3JtLCBhbmQgTW9kaWZpY2F0aW9ucyBvZiBzdWNoIFNvdXJjZSBDb2RlIEZvcm0sIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi5cblxuICAgICAgMS41LiBcIkluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeSBMaWNlbnNlc1wiIG1lYW5zXG5cbiAgICAgICAgIChhKSB0aGF0IHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEIgdG8gdGhlIENvdmVyZWQgU29mdHdhcmU7IG9yXG5cbiAgICAgICAgIChiKSB0aGF0IHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHdhcyBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAxLjEgb3IgZWFybGllciBvZiB0aGUgTGljZW5zZSwgYnV0IG5vdCBhbHNvIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIFNlY29uZGFyeSBMaWNlbnNlLlxuXG4gICAgICAxLjYuIFwiRXhlY3V0YWJsZSBGb3JtXCIgbWVhbnMgYW55IGZvcm0gb2YgdGhlIHdvcmsgb3RoZXIgdGhhbiBTb3VyY2UgQ29kZSBGb3JtLlxuXG4gICAgICAxLjcuIFwiTGFyZ2VyIFdvcmtcIiBtZWFucyBhIHdvcmsgdGhhdCBjb21iaW5lcyBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb3RoZXIgbWF0ZXJpYWwsIGluIGEgc2VwYXJhdGUgZmlsZSBvciBmaWxlcywgdGhhdCBpcyBub3QgQ292ZXJlZCBTb2Z0d2FyZS5cblxuICAgICAgMS44LiBcIkxpY2Vuc2VcIiBtZWFucyB0aGlzIGRvY3VtZW50LlxuXG4gICAgICAxLjkuIFwiTGljZW5zYWJsZVwiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHksIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjEwLiBcIk1vZGlmaWNhdGlvbnNcIiBtZWFucyBhbnkgb2YgdGhlIGZvbGxvd2luZzpcblxuICAgICAgICAgKGEpIGFueSBmaWxlIGluIFNvdXJjZSBDb2RlIEZvcm0gdGhhdCByZXN1bHRzIGZyb20gYW4gYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgQ292ZXJlZCBTb2Z0d2FyZTsgb3JcblxuICAgICAgICAgKGIpIGFueSBuZXcgZmlsZSBpbiBTb3VyY2UgQ29kZSBGb3JtIHRoYXQgY29udGFpbnMgYW55IENvdmVyZWQgU29mdHdhcmUuXG5cbiAgICAgIDEuMTEuIFwiUGF0ZW50IENsYWltc1wiIG9mIGEgQ29udHJpYnV0b3IgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQsIGJ1dCBmb3IgdGhlIGdyYW50IG9mIHRoZSBMaWNlbnNlLCBieSB0aGUgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yIHNhbGUsIGhhdmluZyBtYWRlLCBpbXBvcnQsIG9yIHRyYW5zZmVyIG9mIGVpdGhlciBpdHMgQ29udHJpYnV0aW9ucyBvciBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbi5cblxuICAgICAgMS4xMi4gXCJTZWNvbmRhcnkgTGljZW5zZVwiIG1lYW5zIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMi4wLCB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIuMSwgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAzLjAsIG9yIGFueSBsYXRlciB2ZXJzaW9ucyBvZiB0aG9zZSBsaWNlbnNlcy5cblxuICAgICAgMS4xMy4gXCJTb3VyY2UgQ29kZSBGb3JtXCIgbWVhbnMgdGhlIGZvcm0gb2YgdGhlIHdvcmsgcHJlZmVycmVkIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4xNC4gXCJZb3VcIiAob3IgXCJZb3VyXCIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJjb250cm9sXCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgIDIuIExpY2Vuc2UgR3JhbnRzIGFuZCBDb25kaXRpb25zXG5cbiAgICAgIDIuMS4gR3JhbnRzXG5cbiAgICAgIEVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZTpcblxuICAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBzdWNoIENvbnRyaWJ1dG9yIHRvIHVzZSwgcmVwcm9kdWNlLCBtYWtlIGF2YWlsYWJsZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIGV4cGxvaXQgaXRzIENvbnRyaWJ1dGlvbnMsIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIE1vZGlmaWNhdGlvbnMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kXG5cbiAgICAgICAgIChiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIG9mIHN1Y2ggQ29udHJpYnV0b3IgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgZWl0aGVyIGl0cyBDb250cmlidXRpb25zIG9yIGl0cyBDb250cmlidXRvciBWZXJzaW9uLlxuXG4gICAgICAyLjIuIEVmZmVjdGl2ZSBEYXRlXG5cbiAgICAgIFRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb24gMi4xIHdpdGggcmVzcGVjdCB0byBhbnkgQ29udHJpYnV0aW9uIGJlY29tZSBlZmZlY3RpdmUgZm9yIGVhY2ggQ29udHJpYnV0aW9uIG9uIHRoZSBkYXRlIHRoZSBDb250cmlidXRvciBmaXJzdCBkaXN0cmlidXRlcyBzdWNoIENvbnRyaWJ1dGlvbi5cblxuICAgICAgMi4zLiBMaW1pdGF0aW9ucyBvbiBHcmFudCBTY29wZVxuXG4gICAgICBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMiBhcmUgdGhlIG9ubHkgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBObyBhZGRpdGlvbmFsIHJpZ2h0cyBvciBsaWNlbnNlcyB3aWxsIGJlIGltcGxpZWQgZnJvbSB0aGUgZGlzdHJpYnV0aW9uIG9yIGxpY2Vuc2luZyBvZiBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIHRoaXMgTGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIGJ5IGEgQ29udHJpYnV0b3I6XG5cbiAgICAgICAgIChhKSBmb3IgYW55IGNvZGUgdGhhdCBhIENvbnRyaWJ1dG9yIGhhcyByZW1vdmVkIGZyb20gQ292ZXJlZCBTb2Z0d2FyZTsgb3JcblxuICAgICAgICAgKGIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIFlvdXIgYW5kIGFueSBvdGhlciB0aGlyZCBwYXJ0eSdzIG1vZGlmaWNhdGlvbnMgb2YgQ292ZXJlZCBTb2Z0d2FyZSwgb3IgKGlpKSB0aGUgY29tYmluYXRpb24gb2YgaXRzIENvbnRyaWJ1dGlvbnMgd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24pOyBvclxuXG4gICAgICAgICAoYykgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiB0aGUgYWJzZW5jZSBvZiBpdHMgQ29udHJpYnV0aW9ucy5cblxuICAgICAgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgaW4gdGhlIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIGxvZ29zIG9mIGFueSBDb250cmlidXRvciAoZXhjZXB0IGFzIG1heSBiZSBuZWNlc3NhcnkgdG8gY29tcGx5IHdpdGggdGhlIG5vdGljZSByZXF1aXJlbWVudHMgaW4gU2VjdGlvbiAzLjQpLlxuXG4gICAgICAyLjQuIFN1YnNlcXVlbnQgTGljZW5zZXNcblxuICAgICAgTm8gQ29udHJpYnV0b3IgbWFrZXMgYWRkaXRpb25hbCBncmFudHMgYXMgYSByZXN1bHQgb2YgWW91ciBjaG9pY2UgdG8gZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHNlZSBTZWN0aW9uIDEwLjIpIG9yIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIFNlY29uZGFyeSBMaWNlbnNlIChpZiBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMy4zKS5cblxuICAgICAgMi41LiBSZXByZXNlbnRhdGlvblxuXG4gICAgICBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0aGUgQ29udHJpYnV0b3IgYmVsaWV2ZXMgaXRzIENvbnRyaWJ1dGlvbnMgYXJlIGl0cyBvcmlnaW5hbCBjcmVhdGlvbihzKSBvciBpdCBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyB0byBpdHMgQ29udHJpYnV0aW9ucyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDIuNi4gRmFpciBVc2VcblxuICAgICAgVGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byBsaW1pdCBhbnkgcmlnaHRzIFlvdSBoYXZlIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGRvY3RyaW5lcyBvZiBmYWlyIHVzZSwgZmFpciBkZWFsaW5nLCBvciBvdGhlciBlcXVpdmFsZW50cy5cblxuICAgICAgMi43LiBDb25kaXRpb25zXG5cbiAgICAgIFNlY3Rpb25zIDMuMSwgMy4yLCAzLjMsIGFuZCAzLjQgYXJlIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbiAyLjEuXG5cbiAgIDMuIFJlc3BvbnNpYmlsaXRpZXNcblxuICAgICAgMy4xLiBEaXN0cmlidXRpb24gb2YgU291cmNlIEZvcm1cblxuICAgICAgQWxsIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIFNvZnR3YXJlIGluIFNvdXJjZSBDb2RlIEZvcm0sIGluY2x1ZGluZyBhbnkgTW9kaWZpY2F0aW9ucyB0aGF0IFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUsIG11c3QgYmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5mb3JtIHJlY2lwaWVudHMgdGhhdCB0aGUgU291cmNlIENvZGUgRm9ybSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpcyBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRoZXkgY2FuIG9idGFpbiBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbWF5IG5vdCBhdHRlbXB0IHRvIGFsdGVyIG9yIHJlc3RyaWN0IHRoZSByZWNpcGllbnRzJyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIEZvcm0uXG5cbiAgICAgIDMuMi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgRm9ybVxuXG4gICAgICBJZiBZb3UgZGlzdHJpYnV0ZSBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUgRm9ybSB0aGVuOlxuXG4gICAgICAgICAoYSkgc3VjaCBDb3ZlcmVkIFNvZnR3YXJlIG11c3QgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBGb3JtLCBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjEsIGFuZCBZb3UgbXVzdCBpbmZvcm0gcmVjaXBpZW50cyBvZiB0aGUgRXhlY3V0YWJsZSBGb3JtIGhvdyB0aGV5IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHN1Y2ggU291cmNlIENvZGUgRm9ybSBieSByZWFzb25hYmxlIG1lYW5zIGluIGEgdGltZWx5IG1hbm5lciwgYXQgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbiB0byB0aGUgcmVjaXBpZW50OyBhbmRcblxuICAgICAgICAgKGIpIFlvdSBtYXkgZGlzdHJpYnV0ZSBzdWNoIEV4ZWN1dGFibGUgRm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBvciBzdWJsaWNlbnNlIGl0IHVuZGVyIGRpZmZlcmVudCB0ZXJtcywgcHJvdmlkZWQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgRm9ybSBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRzJyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIEZvcm0gdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAzLjMuIERpc3RyaWJ1dGlvbiBvZiBhIExhcmdlciBXb3JrXG5cbiAgICAgIFlvdSBtYXkgY3JlYXRlIGFuZCBkaXN0cmlidXRlIGEgTGFyZ2VyIFdvcmsgdW5kZXIgdGVybXMgb2YgWW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgWW91IGFsc28gY29tcGx5IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgZm9yIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLiBJZiB0aGUgTGFyZ2VyIFdvcmsgaXMgYSBjb21iaW5hdGlvbiBvZiBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggYSB3b3JrIGdvdmVybmVkIGJ5IG9uZSBvciBtb3JlIFNlY29uZGFyeSBMaWNlbnNlcywgYW5kIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGlzIG5vdCBJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkgTGljZW5zZXMsIHRoaXMgTGljZW5zZSBwZXJtaXRzIFlvdSB0byBhZGRpdGlvbmFsbHkgZGlzdHJpYnV0ZSBzdWNoIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHN1Y2ggU2Vjb25kYXJ5IExpY2Vuc2UocyksIHNvIHRoYXQgdGhlIHJlY2lwaWVudCBvZiB0aGUgTGFyZ2VyIFdvcmsgbWF5LCBhdCB0aGVpciBvcHRpb24sIGZ1cnRoZXIgZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoaXMgTGljZW5zZSBvciBzdWNoIFNlY29uZGFyeSBMaWNlbnNlKHMpLlxuXG4gICAgICAzLjQuIE5vdGljZXNcblxuICAgICAgWW91IG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIHRoZSBzdWJzdGFuY2Ugb2YgYW55IGxpY2Vuc2Ugbm90aWNlcyAoaW5jbHVkaW5nIGNvcHlyaWdodCBub3RpY2VzLCBwYXRlbnQgbm90aWNlcywgZGlzY2xhaW1lcnMgb2Ygd2FycmFudHksIG9yIGxpbWl0YXRpb25zIG9mIGxpYWJpbGl0eSkgY29udGFpbmVkIHdpdGhpbiB0aGUgU291cmNlIENvZGUgRm9ybSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSwgZXhjZXB0IHRoYXQgWW91IG1heSBhbHRlciBhbnkgbGljZW5zZSBub3RpY2VzIHRvIHRoZSBleHRlbnQgcmVxdWlyZWQgdG8gcmVtZWR5IGtub3duIGZhY3R1YWwgaW5hY2N1cmFjaWVzLlxuXG4gICAgICAzLjUuIEFwcGxpY2F0aW9uIG9mIEFkZGl0aW9uYWwgVGVybXNcblxuICAgICAgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgU29mdHdhcmUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSwgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4gWW91IG1heSBpbmNsdWRlIGFkZGl0aW9uYWwgZGlzY2xhaW1lcnMgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb25zIG9mIGxpYWJpbGl0eSBzcGVjaWZpYyB0byBhbnkganVyaXNkaWN0aW9uLlxuXG4gICA0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb25cblxuICAgSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBwbGFjZWQgaW4gYSB0ZXh0IGZpbGUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciB0aGlzIExpY2Vuc2UuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuXG5cbiAgIDUuIFRlcm1pbmF0aW9uXG5cbiAgICAgIDUuMS4gVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBvZiBpdHMgdGVybXMuIEhvd2V2ZXIsIGlmIFlvdSBiZWNvbWUgY29tcGxpYW50LCB0aGVuIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgQ29udHJpYnV0b3IgYXJlIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50aWwgc3VjaCBDb250cmlidXRvciBleHBsaWNpdGx5IGFuZCBmaW5hbGx5IHRlcm1pbmF0ZXMgWW91ciBncmFudHMsIGFuZCAoYikgb24gYW4gb25nb2luZyBiYXNpcywgaWYgc3VjaCBDb250cmlidXRvciBmYWlscyB0byBub3RpZnkgWW91IG9mIHRoZSBub24tY29tcGxpYW5jZSBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8gNjAgZGF5cyBhZnRlciBZb3UgaGF2ZSBjb21lIGJhY2sgaW50byBjb21wbGlhbmNlLiBNb3Jlb3ZlciwgWW91ciBncmFudHMgZnJvbSBhIHBhcnRpY3VsYXIgQ29udHJpYnV0b3IgYXJlIHJlaW5zdGF0ZWQgb24gYW4gb25nb2luZyBiYXNpcyBpZiBzdWNoIENvbnRyaWJ1dG9yIG5vdGlmaWVzIFlvdSBvZiB0aGUgbm9uLWNvbXBsaWFuY2UgYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIFlvdSBoYXZlIHJlY2VpdmVkIG5vdGljZSBvZiBub24tY29tcGxpYW5jZSB3aXRoIHRoaXMgTGljZW5zZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZCBZb3UgYmVjb21lIGNvbXBsaWFudCBwcmlvciB0byAzMCBkYXlzIGFmdGVyIFlvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLlxuXG4gICAgICA1LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucywgY291bnRlci1jbGFpbXMsIGFuZCBjcm9zcy1jbGFpbXMpIGFsbGVnaW5nIHRoYXQgYSBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBhbnkgYW5kIGFsbCBDb250cmlidXRvcnMgZm9yIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIFNlY3Rpb24gMi4xIG9mIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUuXG5cbiAgICAgIDUuMy4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDUuMSBvciA1LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgWW91ciBkaXN0cmlidXRvcnMgdW5kZXIgdGhpcyBMaWNlbnNlIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uXG5cbiAgIDYuIERpc2NsYWltZXIgb2YgV2FycmFudHlcblxuICAgQ292ZXJlZCBTb2Z0d2FyZSBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gXCJhcyBpc1wiIGJhc2lzLCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkLCBpbXBsaWVkLCBvciBzdGF0dXRvcnksIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB3YXJyYW50aWVzIHRoYXQgdGhlIENvdmVyZWQgU29mdHdhcmUgaXMgZnJlZSBvZiBkZWZlY3RzLCBtZXJjaGFudGFibGUsIGZpdCBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2Ugb3Igbm9uLWluZnJpbmdpbmcuIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgaXMgd2l0aCBZb3UuIFNob3VsZCBhbnkgQ292ZXJlZCBTb2Z0d2FyZSBwcm92ZSBkZWZlY3RpdmUgaW4gYW55IHJlc3BlY3QsIFlvdSAobm90IGFueSBDb250cmlidXRvcikgYXNzdW1lIHRoZSBjb3N0IG9mIGFueSBuZWNlc3Nhcnkgc2VydmljaW5nLCByZXBhaXIsIG9yIGNvcnJlY3Rpb24uIFRoaXMgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIHVzZSBvZiBhbnkgQ292ZXJlZCBTb2Z0d2FyZSBpcyBhdXRob3JpemVkIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLlxuXG4gICA3LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eVxuXG4gICBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IsIG9yIGFueW9uZSB3aG8gZGlzdHJpYnV0ZXMgQ292ZXJlZCBTb2Z0d2FyZSBhcyBwZXJtaXR0ZWQgYWJvdmUsIGJlIGxpYWJsZSB0byBZb3UgZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zdCBwcm9maXRzLCBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLCBldmVuIGlmIHN1Y2ggcGFydHkgc2hhbGwgaGF2ZSBiZWVuIGluZm9ybWVkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuIFRoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIGxpYWJpbGl0eSBmb3IgZGVhdGggb3IgcGVyc29uYWwgaW5qdXJ5IHJlc3VsdGluZyBmcm9tIHN1Y2ggcGFydHkncyBuZWdsaWdlbmNlIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LlxuXG4gICA4LiBMaXRpZ2F0aW9uXG5cbiAgIEFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmUgdGhlIGRlZmVuZGFudCBtYWludGFpbnMgaXRzIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBhbmQgc3VjaCBsaXRpZ2F0aW9uIHNoYWxsIGJlIGdvdmVybmVkIGJ5IGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24sIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gTm90aGluZyBpbiB0aGlzIFNlY3Rpb24gc2hhbGwgcHJldmVudCBhIHBhcnR5J3MgYWJpbGl0eSB0byBicmluZyBjcm9zcy1jbGFpbXMgb3IgY291bnRlci1jbGFpbXMuXG5cbiAgIDkuIE1pc2NlbGxhbmVvdXNcblxuICAgVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYmUgdXNlZCB0byBjb25zdHJ1ZSB0aGlzIExpY2Vuc2UgYWdhaW5zdCBhIENvbnRyaWJ1dG9yLlxuXG4gICAxMC4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2VcblxuICAgICAgMTAuMS4gTmV3IFZlcnNpb25zXG5cbiAgICAgIE1vemlsbGEgRm91bmRhdGlvbiBpcyB0aGUgbGljZW5zZSBzdGV3YXJkLiBFeGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiAxMC4zLCBubyBvbmUgb3RoZXIgdGhhbiB0aGUgbGljZW5zZSBzdGV3YXJkIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IG9yIHB1Ymxpc2ggbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci5cblxuICAgICAgMTAuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9uc1xuXG4gICAgICBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHVuZGVyIHdoaWNoIFlvdSBvcmlnaW5hbGx5IHJlY2VpdmVkIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLCBvciB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIGxpY2Vuc2Ugc3Rld2FyZC5cblxuICAgICAgMTAuMy4gTW9kaWZpZWQgVmVyc2lvbnNcblxuICAgICAgSWYgeW91IGNyZWF0ZSBzb2Z0d2FyZSBub3QgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGxpY2Vuc2UgZm9yIHN1Y2ggc29mdHdhcmUsIHlvdSBtYXkgY3JlYXRlIGFuZCB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpZiB5b3UgcmVuYW1lIHRoZSBsaWNlbnNlIGFuZCByZW1vdmUgYW55IHJlZmVyZW5jZXMgdG8gdGhlIG5hbWUgb2YgdGhlIGxpY2Vuc2Ugc3Rld2FyZCAoZXhjZXB0IHRvIG5vdGUgdGhhdCBzdWNoIG1vZGlmaWVkIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkuXG5cbiAgICAgIDEwLjQuIERpc3RyaWJ1dGluZyBTb3VyY2UgQ29kZSBGb3JtIHRoYXQgaXMgSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzXG5cbiAgICAgIElmIFlvdSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSBTb3VyY2UgQ29kZSBGb3JtIHRoYXQgaXMgSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQiBvZiB0aGlzIExpY2Vuc2UgbXVzdCBiZSBhdHRhY2hlZC4gRXhoaWJpdCBBIC0gU291cmNlIENvZGUgRm9ybSBMaWNlbnNlIE5vdGljZVxuXG5UaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMgZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy5cblxuSWYgaXQgaXMgbm90IHBvc3NpYmxlIG9yIGRlc2lyYWJsZSB0byBwdXQgdGhlIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgZmlsZSwgdGhlbiBZb3UgbWF5IGluY2x1ZGUgdGhlIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgTElDRU5TRSBmaWxlIGluIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHJlY2lwaWVudCB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS5cblxuWW91IG1heSBhZGQgYWRkaXRpb25hbCBhY2N1cmF0ZSBub3RpY2VzIG9mIGNvcHlyaWdodCBvd25lcnNoaXAuXG5cbkV4aGliaXQgQiAtIFwiSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzXCIgTm90aWNlXG5cblRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBcIkluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeSBMaWNlbnNlc1wiLCBhcyBkZWZpbmVkIGJ5IHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlLCB2LiAyLjAuIl0sImxpY2Vuc2VJZHMiOlsiTVBMLTIuMC1uby1jb3B5bGVmdC1leGNlcHRpb24iLCJNUEwtMi4wIl0sImtleXdvcmRzIjpbIjEgb3IgZWFybGllciIsImFueSBqdXJpc2RpY3Rpb24gNCIsImp1cmlzZGljdGlvbiA0IGluYWJpbGl0eSIsIm11c3QgYmUgcGxhY2VkIiwicGxhY2VkIGluIGEiLCJ0ZXh0IGZpbGUgaW5jbHVkZWQiLCJmaWxlIGluY2x1ZGVkIHdpdGgiLCI1IDMgaW4iLCJ1bmRlciBzZWN0aW9ucyA1Iiwic2VjdGlvbnMgNSAxIiwiNSAxIG9yIiwiMSBvciA1Iiwib3IgNSAyIiwiNSAyIGFib3ZlIiwiY2xhaW1zIDkgbWlzY2VsbGFuZW91cyIsImEgY29udHJpYnV0b3IgMTAiLCJjb250cmlidXRvciAxMCB2ZXJzaW9ucyIsIjEwIHZlcnNpb25zIG9mIiwidGhlIGxpY2Vuc2UgMTAiLCJsaWNlbnNlIDEwIDEiLCIxMCAxIG5ldyIsIm5ldyB2ZXJzaW9ucyBtb3ppbGxhIiwidmVyc2lvbnMgbW96aWxsYSBmb3VuZGF0aW9uIiwibW96aWxsYSBmb3VuZGF0aW9uIGlzIiwic3Rld2FyZCBleGNlcHQgYXMiLCJzZWN0aW9uIDEwIDMiLCIxMCAzIG5vIiwidmVyc2lvbiBudW1iZXIgMTAiLCJudW1iZXIgMTAgMiIsIjEwIDIgZWZmZWN0IiwibGljZW5zZSBzdGV3YXJkIDEwIiwic3Rld2FyZCAxMCAzIiwiMTAgMyBtb2RpZmllZCIsImxpY2Vuc2UgMTAgNCIsIjEwIDQgZGlzdHJpYnV0aW5nIiwiMCBpZiBhIiwidGhlIG1wbCB3YXMiLCJtcGwgd2FzIG5vdCIsIm9uZSBhdCBodHRwIiwiYXQgaHR0cCBtb3ppbGxhIiwiaHR0cCBtb3ppbGxhIG9yZyIsIm9yZyBtcGwgMiIsIjAgaWYgaXQiLCJieSB0aGUgbW96aWxsYSIsIjIgMCAxIGRlZmluaXRpb25zIiwib2YgdmVyc2lvbiAxIDEiLCIxIDEgb3IgZWFybGllciIsIjEgb3IgZWFybGllciBvZiIsInRvIGFueSBqdXJpc2RpY3Rpb24gNCIsImFueSBqdXJpc2RpY3Rpb24gNCBpbmFiaWxpdHkiLCJqdXJpc2RpY3Rpb24gNCBpbmFiaWxpdHkgdG8iLCJkZXNjcmlwdGlvbiBtdXN0IGJlIHBsYWNlZCIsIm11c3QgYmUgcGxhY2VkIGluIiwiYmUgcGxhY2VkIGluIGEiLCJwbGFjZWQgaW4gYSB0ZXh0IiwiYSB0ZXh0IGZpbGUgaW5jbHVkZWQiLCJ0ZXh0IGZpbGUgaW5jbHVkZWQgd2l0aCIsImZpbGUgaW5jbHVkZWQgd2l0aCBhbGwiLCJ0aGlzIGxpY2Vuc2UgZXhjZXB0IHRvIiwibGljZW5zZSBleGNlcHQgdG8gdGhlIiwidGVybWluYXRpb24gNSAxIHRoZSIsIjUgMSB0aGUgcmlnaHRzIiwibm90aWNlIDUgMiBpZiIsInRlcm1pbmF0ZSA1IDMgaW4iLCI1IDMgaW4gdGhlIiwidGVybWluYXRpb24gdW5kZXIgc2VjdGlvbnMgNSIsInVuZGVyIHNlY3Rpb25zIDUgMSIsInNlY3Rpb25zIDUgMSBvciIsIjUgMSBvciA1IiwiMSBvciA1IDIiLCJvciA1IDIgYWJvdmUiLCI1IDIgYWJvdmUgYWxsIiwiY291bnRlciBjbGFpbXMgOSBtaXNjZWxsYW5lb3VzIiwiY2xhaW1zIDkgbWlzY2VsbGFuZW91cyB0aGlzIiwiYWdhaW5zdCBhIGNvbnRyaWJ1dG9yIDEwIiwiYSBjb250cmlidXRvciAxMCB2ZXJzaW9ucyIsImNvbnRyaWJ1dG9yIDEwIHZlcnNpb25zIG9mIiwiMTAgdmVyc2lvbnMgb2YgdGhlIiwib2YgdGhlIGxpY2Vuc2UgMTAiLCJ0aGUgbGljZW5zZSAxMCAxIiwibGljZW5zZSAxMCAxIG5ldyIsIjEwIDEgbmV3IHZlcnNpb25zIiwiMSBuZXcgdmVyc2lvbnMgbW96aWxsYSIsIm5ldyB2ZXJzaW9ucyBtb3ppbGxhIGZvdW5kYXRpb24iLCJ2ZXJzaW9ucyBtb3ppbGxhIGZvdW5kYXRpb24gaXMiLCJtb3ppbGxhIGZvdW5kYXRpb24gaXMgdGhlIiwiZm91bmRhdGlvbiBpcyB0aGUgbGljZW5zZSIsImlzIHRoZSBsaWNlbnNlIHN0ZXdhcmQiLCJsaWNlbnNlIHN0ZXdhcmQgZXhjZXB0IGFzIiwic3Rld2FyZCBleGNlcHQgYXMgcHJvdmlkZWQiLCJwcm92aWRlZCBpbiBzZWN0aW9uIDEwIiwiaW4gc2VjdGlvbiAxMCAzIiwic2VjdGlvbiAxMCAzIG5vIiwiMTAgMyBubyBvbmUiLCJkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlciAxMCIsInZlcnNpb24gbnVtYmVyIDEwIDIiLCJudW1iZXIgMTAgMiBlZmZlY3QiLCIxMCAyIGVmZmVjdCBvZiIsInRoZSBsaWNlbnNlIHN0ZXdhcmQgMTAiLCJsaWNlbnNlIHN0ZXdhcmQgMTAgMyIsInN0ZXdhcmQgMTAgMyBtb2RpZmllZCIsIjEwIDMgbW9kaWZpZWQgdmVyc2lvbnMiLCJmcm9tIHRoaXMgbGljZW5zZSAxMCIsInRoaXMgbGljZW5zZSAxMCA0IiwibGljZW5zZSAxMCA0IGRpc3RyaWJ1dGluZyIsIjEwIDQgZGlzdHJpYnV0aW5nIHNvdXJjZSIsInRlcm1zIG9mIHRoZSBtb3ppbGxhIiwidiAyIDAgaWYiLCIyIDAgaWYgYSIsIjAgaWYgYSBjb3B5IiwiY29weSBvZiB0aGUgbXBsIiwib2YgdGhlIG1wbCB3YXMiLCJ0aGUgbXBsIHdhcyBub3QiLCJtcGwgd2FzIG5vdCBkaXN0cmlidXRlZCIsIm9idGFpbiBvbmUgYXQgaHR0cCIsIm9uZSBhdCBodHRwIG1vemlsbGEiLCJhdCBodHRwIG1vemlsbGEgb3JnIiwiaHR0cCBtb3ppbGxhIG9yZyBtcGwiLCJtb3ppbGxhIG9yZyBtcGwgMiIsIm9yZyBtcGwgMiAwIiwibXBsIDIgMCBpZiIsIjIgMCBpZiBpdCIsIjAgaWYgaXQgaXMiLCJ3aXRoIHNlY29uZGFyeSBsaWNlbnNlcyBub3RpY2UiLCJkZWZpbmVkIGJ5IHRoZSBtb3ppbGxhIiwiYnkgdGhlIG1vemlsbGEgcHVibGljIiwidmVyc2lvbiAyIDAgMSBkZWZpbml0aW9ucyIsIjIgMCAxIGRlZmluaXRpb25zIDEiLCJ0ZXJtcyBvZiB2ZXJzaW9uIDEgMSIsIm9mIHZlcnNpb24gMSAxIG9yIiwidmVyc2lvbiAxIDEgb3IgZWFybGllciIsIjEgMSBvciBlYXJsaWVyIG9mIiwiMSBvciBlYXJsaWVyIG9mIHRoZSIsIjEyIHNlY29uZGFyeSBsaWNlbnNlIG1lYW5zIGVpdGhlciIsImxpY2Vuc2UgeW91IG1heSBub3QgYXR0ZW1wdCIsInNwZWNpZmljIHRvIGFueSBqdXJpc2RpY3Rpb24gNCIsInRvIGFueSBqdXJpc2RpY3Rpb24gNCBpbmFiaWxpdHkiLCJhbnkganVyaXNkaWN0aW9uIDQgaW5hYmlsaXR5IHRvIiwianVyaXNkaWN0aW9uIDQgaW5hYmlsaXR5IHRvIGNvbXBseSIsInN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBwbGFjZWQiLCJkZXNjcmlwdGlvbiBtdXN0IGJlIHBsYWNlZCBpbiIsIm11c3QgYmUgcGxhY2VkIGluIGEiLCJiZSBwbGFjZWQgaW4gYSB0ZXh0IiwicGxhY2VkIGluIGEgdGV4dCBmaWxlIiwiaW4gYSB0ZXh0IGZpbGUgaW5jbHVkZWQiLCJhIHRleHQgZmlsZSBpbmNsdWRlZCB3aXRoIiwidGV4dCBmaWxlIGluY2x1ZGVkIHdpdGggYWxsIiwiZmlsZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIiwiYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIGNvdmVyZWQiLCJkaXN0cmlidXRpb25zIG9mIHRoZSBjb3ZlcmVkIHNvZnR3YXJlIiwidGhlIGNvdmVyZWQgc29mdHdhcmUgdW5kZXIgdGhpcyIsInNvZnR3YXJlIHVuZGVyIHRoaXMgbGljZW5zZSBleGNlcHQiLCJ1bmRlciB0aGlzIGxpY2Vuc2UgZXhjZXB0IHRvIiwidGhpcyBsaWNlbnNlIGV4Y2VwdCB0byB0aGUiLCJsaWNlbnNlIGV4Y2VwdCB0byB0aGUgZXh0ZW50IiwiNSB0ZXJtaW5hdGlvbiA1IDEgdGhlIiwidGVybWluYXRpb24gNSAxIHRoZSByaWdodHMiLCI1IDEgdGhlIHJpZ2h0cyBncmFudGVkIiwidGhlIG5vdGljZSA1IDIgaWYiLCJub3RpY2UgNSAyIGlmIHlvdSIsIjUgMiBpZiB5b3UgaW5pdGlhdGUiLCJzaGFsbCB0ZXJtaW5hdGUgNSAzIGluIiwidGVybWluYXRlIDUgMyBpbiB0aGUiLCI1IDMgaW4gdGhlIGV2ZW50Iiwib2YgdGVybWluYXRpb24gdW5kZXIgc2VjdGlvbnMgNSIsInRlcm1pbmF0aW9uIHVuZGVyIHNlY3Rpb25zIDUgMSIsInVuZGVyIHNlY3Rpb25zIDUgMSBvciIsInNlY3Rpb25zIDUgMSBvciA1IiwiNSAxIG9yIDUgMiIsIjEgb3IgNSAyIGFib3ZlIiwib3IgNSAyIGFib3ZlIGFsbCIsIjUgMiBhYm92ZSBhbGwgZW5kIiwib3IgY291bnRlciBjbGFpbXMgOSBtaXNjZWxsYW5lb3VzIiwiY291bnRlciBjbGFpbXMgOSBtaXNjZWxsYW5lb3VzIHRoaXMiLCJjbGFpbXMgOSBtaXNjZWxsYW5lb3VzIHRoaXMgbGljZW5zZSIsImxpY2Vuc2UgYWdhaW5zdCBhIGNvbnRyaWJ1dG9yIDEwIiwiYWdhaW5zdCBhIGNvbnRyaWJ1dG9yIDEwIHZlcnNpb25zIiwiYSBjb250cmlidXRvciAxMCB2ZXJzaW9ucyBvZiIsImNvbnRyaWJ1dG9yIDEwIHZlcnNpb25zIG9mIHRoZSIsIjEwIHZlcnNpb25zIG9mIHRoZSBsaWNlbnNlIiwidmVyc2lvbnMgb2YgdGhlIGxpY2Vuc2UgMTAiLCJvZiB0aGUgbGljZW5zZSAxMCAxIiwidGhlIGxpY2Vuc2UgMTAgMSBuZXciLCJsaWNlbnNlIDEwIDEgbmV3IHZlcnNpb25zIiwiMTAgMSBuZXcgdmVyc2lvbnMgbW96aWxsYSIsIjEgbmV3IHZlcnNpb25zIG1vemlsbGEgZm91bmRhdGlvbiIsIm5ldyB2ZXJzaW9ucyBtb3ppbGxhIGZvdW5kYXRpb24gaXMiLCJ2ZXJzaW9ucyBtb3ppbGxhIGZvdW5kYXRpb24gaXMgdGhlIiwibW96aWxsYSBmb3VuZGF0aW9uIGlzIHRoZSBsaWNlbnNlIiwiZm91bmRhdGlvbiBpcyB0aGUgbGljZW5zZSBzdGV3YXJkIiwiaXMgdGhlIGxpY2Vuc2Ugc3Rld2FyZCBleGNlcHQiLCJ0aGUgbGljZW5zZSBzdGV3YXJkIGV4Y2VwdCBhcyIsImxpY2Vuc2Ugc3Rld2FyZCBleGNlcHQgYXMgcHJvdmlkZWQiLCJzdGV3YXJkIGV4Y2VwdCBhcyBwcm92aWRlZCBpbiIsImFzIHByb3ZpZGVkIGluIHNlY3Rpb24gMTAiLCJwcm92aWRlZCBpbiBzZWN0aW9uIDEwIDMiLCJpbiBzZWN0aW9uIDEwIDMgbm8iLCJzZWN0aW9uIDEwIDMgbm8gb25lIiwiMTAgMyBubyBvbmUgb3RoZXIiLCJhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyIDEwIl19LHsibGljZW5zZVRleHRzIjpbIk1pY3Jvc29mdCBQdWJsaWMgTGljZW5zZSAoTXMtUEwpXG5cblRoaXMgbGljZW5zZSBnb3Zlcm5zIHVzZSBvZiB0aGUgYWNjb21wYW55aW5nIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoZSBzb2Z0d2FyZSwgeW91IGFjY2VwdCB0aGlzIGxpY2Vuc2UuIElmIHlvdSBkbyBub3QgYWNjZXB0IHRoZSBsaWNlbnNlLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS5cblxuICAgMS4gRGVmaW5pdGlvbnNcblxuICAgVGhlIHRlcm1zIFwicmVwcm9kdWNlLFwiIFwicmVwcm9kdWN0aW9uLFwiIFwiZGVyaXZhdGl2ZSB3b3JrcyxcIiBhbmQgXCJkaXN0cmlidXRpb25cIiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgaGVyZSBhcyB1bmRlciBVLlMuIGNvcHlyaWdodCBsYXcuIEEgXCJjb250cmlidXRpb25cIiBpcyB0aGUgb3JpZ2luYWwgc29mdHdhcmUsIG9yIGFueSBhZGRpdGlvbnMgb3IgY2hhbmdlcyB0byB0aGUgc29mdHdhcmUuIEEgXCJjb250cmlidXRvclwiIGlzIGFueSBwZXJzb24gdGhhdCBkaXN0cmlidXRlcyBpdHMgY29udHJpYnV0aW9uIHVuZGVyIHRoaXMgbGljZW5zZS4gXCJMaWNlbnNlZCBwYXRlbnRzXCIgYXJlIGEgY29udHJpYnV0b3IncyBwYXRlbnQgY2xhaW1zIHRoYXQgcmVhZCBkaXJlY3RseSBvbiBpdHMgY29udHJpYnV0aW9uLlxuXG4gICAyLiBHcmFudCBvZiBSaWdodHNcblxuICAgICAgKEEpIENvcHlyaWdodCBHcmFudC0gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBhbmQgbGltaXRhdGlvbnMgaW4gc2VjdGlvbiAzLCBlYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UgaXRzIGNvbnRyaWJ1dGlvbiwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIGl0cyBjb250cmlidXRpb24sIGFuZCBkaXN0cmlidXRlIGl0cyBjb250cmlidXRpb24gb3IgYW55IGRlcml2YXRpdmUgd29ya3MgdGhhdCB5b3UgY3JlYXRlLlxuXG4gICAgICAoQikgUGF0ZW50IEdyYW50LSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdW5kZXIgaXRzIGxpY2Vuc2VkIHBhdGVudHMgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBpdHMgY29udHJpYnV0aW9uIGluIHRoZSBzb2Z0d2FyZSBvciBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBjb250cmlidXRpb24gaW4gdGhlIHNvZnR3YXJlLlxuXG4gICAzLiBDb25kaXRpb25zIGFuZCBMaW1pdGF0aW9uc1xuXG4gICAgICAoQSkgTm8gVHJhZGVtYXJrIExpY2Vuc2UtIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBncmFudCB5b3UgcmlnaHRzIHRvIHVzZSBhbnkgY29udHJpYnV0b3JzJyBuYW1lLCBsb2dvLCBvciB0cmFkZW1hcmtzLlxuXG4gICAgICAoQikgSWYgeW91IGJyaW5nIGEgcGF0ZW50IGNsYWltIGFnYWluc3QgYW55IGNvbnRyaWJ1dG9yIG92ZXIgcGF0ZW50cyB0aGF0IHlvdSBjbGFpbSBhcmUgaW5mcmluZ2VkIGJ5IHRoZSBzb2Z0d2FyZSwgeW91ciBwYXRlbnQgbGljZW5zZSBmcm9tIHN1Y2ggY29udHJpYnV0b3IgdG8gdGhlIHNvZnR3YXJlIGVuZHMgYXV0b21hdGljYWxseS5cblxuICAgICAgKEMpIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSwgeW91IG11c3QgcmV0YWluIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBzb2Z0d2FyZS5cblxuICAgICAgKEQpIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSBpbiBzb3VyY2UgY29kZSBmb3JtLCB5b3UgbWF5IGRvIHNvIG9ubHkgdW5kZXIgdGhpcyBsaWNlbnNlIGJ5IGluY2x1ZGluZyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBsaWNlbnNlIHdpdGggeW91ciBkaXN0cmlidXRpb24uIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtLCB5b3UgbWF5IG9ubHkgZG8gc28gdW5kZXIgYSBsaWNlbnNlIHRoYXQgY29tcGxpZXMgd2l0aCB0aGlzIGxpY2Vuc2UuXG5cbiAgICAgIChFKSBUaGUgc29mdHdhcmUgaXMgbGljZW5zZWQgXCJhcy1pcy5cIiBZb3UgYmVhciB0aGUgcmlzayBvZiB1c2luZyBpdC4gVGhlIGNvbnRyaWJ1dG9ycyBnaXZlIG5vIGV4cHJlc3Mgd2FycmFudGllcywgZ3VhcmFudGVlcywgb3IgY29uZGl0aW9ucy4gWW91IG1heSBoYXZlIGFkZGl0aW9uYWwgY29uc3VtZXIgcmlnaHRzIHVuZGVyIHlvdXIgbG9jYWwgbGF3cyB3aGljaCB0aGlzIGxpY2Vuc2UgY2Fubm90IGNoYW5nZS4gVG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgdW5kZXIgeW91ciBsb2NhbCBsYXdzLCB0aGUgY29udHJpYnV0b3JzIGV4Y2x1ZGUgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIGFuZCBub24taW5mcmluZ2VtZW50LiJdLCJsaWNlbnNlSWRzIjpbIk1TLVBMIl0sImtleXdvcmRzIjpbIm1pY3Jvc29mdCBwdWJsaWMgbGljZW5zZSIsInB1YmxpYyBsaWNlbnNlIG1zIiwibGljZW5zZSBtcyBwbCIsIm1zIHBsIHRoaXMiLCJwbCB0aGlzIGxpY2Vuc2UiLCJsaW1pdGF0aW9ucyBhIG5vIiwib3IgdHJhZGVtYXJrcyBiIiwidHJhZGVtYXJrcyBiIGlmIiwiYXV0b21hdGljYWxseSBjIGlmIiwidGhlIHNvZnR3YXJlIGQiLCJzb2Z0d2FyZSBkIGlmIiwibGljZW5zZSBlIHRoZSIsImUgdGhlIHNvZnR3YXJlIiwibWljcm9zb2Z0IHB1YmxpYyBsaWNlbnNlIG1zIiwicHVibGljIGxpY2Vuc2UgbXMgcGwiLCJsaWNlbnNlIG1zIHBsIHRoaXMiLCJtcyBwbCB0aGlzIGxpY2Vuc2UiLCJwbCB0aGlzIGxpY2Vuc2UgZ292ZXJucyIsImFuZCBsaW1pdGF0aW9ucyBhIG5vIiwibGltaXRhdGlvbnMgYSBubyB0cmFkZW1hcmsiLCJhIG5vIHRyYWRlbWFyayBsaWNlbnNlIiwibG9nbyBvciB0cmFkZW1hcmtzIGIiLCJvciB0cmFkZW1hcmtzIGIgaWYiLCJ0cmFkZW1hcmtzIGIgaWYgeW91Iiwic29mdHdhcmUgZW5kcyBhdXRvbWF0aWNhbGx5IGMiLCJlbmRzIGF1dG9tYXRpY2FsbHkgYyBpZiIsImF1dG9tYXRpY2FsbHkgYyBpZiB5b3UiLCJpbiB0aGUgc29mdHdhcmUgZCIsInRoZSBzb2Z0d2FyZSBkIGlmIiwic29mdHdhcmUgZCBpZiB5b3UiLCJ3aXRoIHRoaXMgbGljZW5zZSBlIiwidGhpcyBsaWNlbnNlIGUgdGhlIiwibGljZW5zZSBlIHRoZSBzb2Z0d2FyZSIsImUgdGhlIHNvZnR3YXJlIGlzIiwibWljcm9zb2Z0IHB1YmxpYyBsaWNlbnNlIG1zIHBsIiwicHVibGljIGxpY2Vuc2UgbXMgcGwgdGhpcyIsImxpY2Vuc2UgbXMgcGwgdGhpcyBsaWNlbnNlIiwibXMgcGwgdGhpcyBsaWNlbnNlIGdvdmVybnMiLCJwbCB0aGlzIGxpY2Vuc2UgZ292ZXJucyB1c2UiLCJjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBhIG5vIiwiYW5kIGxpbWl0YXRpb25zIGEgbm8gdHJhZGVtYXJrIiwibGltaXRhdGlvbnMgYSBubyB0cmFkZW1hcmsgbGljZW5zZSIsImEgbm8gdHJhZGVtYXJrIGxpY2Vuc2UgdGhpcyIsIm5hbWUgbG9nbyBvciB0cmFkZW1hcmtzIGIiLCJsb2dvIG9yIHRyYWRlbWFya3MgYiBpZiIsIm9yIHRyYWRlbWFya3MgYiBpZiB5b3UiLCJ0cmFkZW1hcmtzIGIgaWYgeW91IGJyaW5nIiwidGhlIHNvZnR3YXJlIGVuZHMgYXV0b21hdGljYWxseSBjIiwic29mdHdhcmUgZW5kcyBhdXRvbWF0aWNhbGx5IGMgaWYiLCJlbmRzIGF1dG9tYXRpY2FsbHkgYyBpZiB5b3UiLCJhdXRvbWF0aWNhbGx5IGMgaWYgeW91IGRpc3RyaWJ1dGUiLCJjIGlmIHlvdSBkaXN0cmlidXRlIGFueSIsInByZXNlbnQgaW4gdGhlIHNvZnR3YXJlIGQiLCJpbiB0aGUgc29mdHdhcmUgZCBpZiIsInRoZSBzb2Z0d2FyZSBkIGlmIHlvdSIsInNvZnR3YXJlIGQgaWYgeW91IGRpc3RyaWJ1dGUiLCJjb21wbGllcyB3aXRoIHRoaXMgbGljZW5zZSBlIiwid2l0aCB0aGlzIGxpY2Vuc2UgZSB0aGUiLCJ0aGlzIGxpY2Vuc2UgZSB0aGUgc29mdHdhcmUiLCJsaWNlbnNlIGUgdGhlIHNvZnR3YXJlIGlzIiwiZSB0aGUgc29mdHdhcmUgaXMgbGljZW5zZWQiXX0seyJsaWNlbnNlVGV4dHMiOlsiTWljcm9zb2Z0IFJlY2lwcm9jYWwgTGljZW5zZSAoTXMtUkwpXG5cblRoaXMgbGljZW5zZSBnb3Zlcm5zIHVzZSBvZiB0aGUgYWNjb21wYW55aW5nIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoZSBzb2Z0d2FyZSwgeW91IGFjY2VwdCB0aGlzIGxpY2Vuc2UuIElmIHlvdSBkbyBub3QgYWNjZXB0IHRoZSBsaWNlbnNlLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS5cblxuICAgMS4gRGVmaW5pdGlvbnNcblxuICAgVGhlIHRlcm1zIFwicmVwcm9kdWNlLFwiIFwicmVwcm9kdWN0aW9uLFwiIFwiZGVyaXZhdGl2ZSB3b3JrcyxcIiBhbmQgXCJkaXN0cmlidXRpb25cIiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgaGVyZSBhcyB1bmRlciBVLlMuIGNvcHlyaWdodCBsYXcuXG5cbiAgIEEgXCJjb250cmlidXRpb25cIiBpcyB0aGUgb3JpZ2luYWwgc29mdHdhcmUsIG9yIGFueSBhZGRpdGlvbnMgb3IgY2hhbmdlcyB0byB0aGUgc29mdHdhcmUuXG5cbiAgIEEgXCJjb250cmlidXRvclwiIGlzIGFueSBwZXJzb24gdGhhdCBkaXN0cmlidXRlcyBpdHMgY29udHJpYnV0aW9uIHVuZGVyIHRoaXMgbGljZW5zZS5cblxuICAgXCJMaWNlbnNlZCBwYXRlbnRzXCIgYXJlIGEgY29udHJpYnV0b3IncyBwYXRlbnQgY2xhaW1zIHRoYXQgcmVhZCBkaXJlY3RseSBvbiBpdHMgY29udHJpYnV0aW9uLlxuXG4gICAyLiBHcmFudCBvZiBSaWdodHNcblxuICAgICAgKEEpIENvcHlyaWdodCBHcmFudC0gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBhbmQgbGltaXRhdGlvbnMgaW4gc2VjdGlvbiAzLCBlYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UgaXRzIGNvbnRyaWJ1dGlvbiwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIGl0cyBjb250cmlidXRpb24sIGFuZCBkaXN0cmlidXRlIGl0cyBjb250cmlidXRpb24gb3IgYW55IGRlcml2YXRpdmUgd29ya3MgdGhhdCB5b3UgY3JlYXRlLlxuXG4gICAgICAoQikgUGF0ZW50IEdyYW50LSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdW5kZXIgaXRzIGxpY2Vuc2VkIHBhdGVudHMgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBpdHMgY29udHJpYnV0aW9uIGluIHRoZSBzb2Z0d2FyZSBvciBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBjb250cmlidXRpb24gaW4gdGhlIHNvZnR3YXJlLlxuXG4gICAzLiBDb25kaXRpb25zIGFuZCBMaW1pdGF0aW9uc1xuXG4gICAgICAoQSkgUmVjaXByb2NhbCBHcmFudHMtIEZvciBhbnkgZmlsZSB5b3UgZGlzdHJpYnV0ZSB0aGF0IGNvbnRhaW5zIGNvZGUgZnJvbSB0aGUgc29mdHdhcmUgKGluIHNvdXJjZSBjb2RlIG9yIGJpbmFyeSBmb3JtYXQpLCB5b3UgbXVzdCBwcm92aWRlIHJlY2lwaWVudHMgdGhlIHNvdXJjZSBjb2RlIHRvIHRoYXQgZmlsZSBhbG9uZyB3aXRoIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UsIHdoaWNoIGxpY2Vuc2Ugd2lsbCBnb3Zlcm4gdGhhdCBmaWxlLiBZb3UgbWF5IGxpY2Vuc2Ugb3RoZXIgZmlsZXMgdGhhdCBhcmUgZW50aXJlbHkgeW91ciBvd24gd29yayBhbmQgZG8gbm90IGNvbnRhaW4gY29kZSBmcm9tIHRoZSBzb2Z0d2FyZSB1bmRlciBhbnkgdGVybXMgeW91IGNob29zZS5cblxuICAgICAgKEIpIE5vIFRyYWRlbWFyayBMaWNlbnNlLSBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgeW91IHJpZ2h0cyB0byB1c2UgYW55IGNvbnRyaWJ1dG9ycycgbmFtZSwgbG9nbywgb3IgdHJhZGVtYXJrcy5cblxuICAgICAgKEMpIElmIHlvdSBicmluZyBhIHBhdGVudCBjbGFpbSBhZ2FpbnN0IGFueSBjb250cmlidXRvciBvdmVyIHBhdGVudHMgdGhhdCB5b3UgY2xhaW0gYXJlIGluZnJpbmdlZCBieSB0aGUgc29mdHdhcmUsIHlvdXIgcGF0ZW50IGxpY2Vuc2UgZnJvbSBzdWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBzb2Z0d2FyZSBlbmRzIGF1dG9tYXRpY2FsbHkuXG5cbiAgICAgIChEKSBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUsIHlvdSBtdXN0IHJldGFpbiBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgc29mdHdhcmUuXG5cbiAgICAgIChFKSBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUgaW4gc291cmNlIGNvZGUgZm9ybSwgeW91IG1heSBkbyBzbyBvbmx5IHVuZGVyIHRoaXMgbGljZW5zZSBieSBpbmNsdWRpbmcgYSBjb21wbGV0ZSBjb3B5IG9mIHRoaXMgbGljZW5zZSB3aXRoIHlvdXIgZGlzdHJpYnV0aW9uLiBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybSwgeW91IG1heSBvbmx5IGRvIHNvIHVuZGVyIGEgbGljZW5zZSB0aGF0IGNvbXBsaWVzIHdpdGggdGhpcyBsaWNlbnNlLlxuXG4gICAgICAoRikgVGhlIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIFwiYXMtaXMuXCIgWW91IGJlYXIgdGhlIHJpc2sgb2YgdXNpbmcgaXQuIFRoZSBjb250cmlidXRvcnMgZ2l2ZSBubyBleHByZXNzIHdhcnJhbnRpZXMsIGd1YXJhbnRlZXMsIG9yIGNvbmRpdGlvbnMuIFlvdSBtYXkgaGF2ZSBhZGRpdGlvbmFsIGNvbnN1bWVyIHJpZ2h0cyB1bmRlciB5b3VyIGxvY2FsIGxhd3Mgd2hpY2ggdGhpcyBsaWNlbnNlIGNhbm5vdCBjaGFuZ2UuIFRvIHRoZSBleHRlbnQgcGVybWl0dGVkIHVuZGVyIHlvdXIgbG9jYWwgbGF3cywgdGhlIGNvbnRyaWJ1dG9ycyBleGNsdWRlIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBhbmQgbm9uLWluZnJpbmdlbWVudC4iXSwibGljZW5zZUlkcyI6WyJNUy1STCJdLCJrZXl3b3JkcyI6WyJtaWNyb3NvZnQgcmVjaXByb2NhbCBsaWNlbnNlIiwicmVjaXByb2NhbCBsaWNlbnNlIG1zIiwibGljZW5zZSBtcyBybCIsIm1zIHJsIHRoaXMiLCJybCB0aGlzIGxpY2Vuc2UiLCJsaW1pdGF0aW9ucyBhIHJlY2lwcm9jYWwiLCJhIHJlY2lwcm9jYWwgZ3JhbnRzIiwicmVjaXByb2NhbCBncmFudHMgZm9yIiwiZ3JhbnRzIGZvciBhbnkiLCJmb3IgYW55IGZpbGUiLCJmaWxlIHlvdSBkaXN0cmlidXRlIiwieW91IGRpc3RyaWJ1dGUgdGhhdCIsImRpc3RyaWJ1dGUgdGhhdCBjb250YWlucyIsInRoYXQgY29udGFpbnMgY29kZSIsImNvbnRhaW5zIGNvZGUgZnJvbSIsIm9yIGJpbmFyeSBmb3JtYXQiLCJiaW5hcnkgZm9ybWF0IHlvdSIsIm11c3QgcHJvdmlkZSByZWNpcGllbnRzIiwicmVjaXBpZW50cyB0aGUgc291cmNlIiwiY29kZSB0byB0aGF0IiwidG8gdGhhdCBmaWxlIiwidGhhdCBmaWxlIGFsb25nIiwibGljZW5zZSB3aGljaCBsaWNlbnNlIiwid2hpY2ggbGljZW5zZSB3aWxsIiwibGljZW5zZSB3aWxsIGdvdmVybiIsIndpbGwgZ292ZXJuIHRoYXQiLCJnb3Zlcm4gdGhhdCBmaWxlIiwibWF5IGxpY2Vuc2Ugb3RoZXIiLCJsaWNlbnNlIG90aGVyIGZpbGVzIiwib3RoZXIgZmlsZXMgdGhhdCIsIm93biB3b3JrIGFuZCIsIndvcmsgYW5kIGRvIiwiZG8gbm90IGNvbnRhaW4iLCJub3QgY29udGFpbiBjb2RlIiwiY29udGFpbiBjb2RlIGZyb20iLCJ5b3UgY2hvb3NlIGIiLCJjaG9vc2UgYiBubyIsImIgbm8gdHJhZGVtYXJrIiwib3IgdHJhZGVtYXJrcyBjIiwidHJhZGVtYXJrcyBjIGlmIiwiZW5kcyBhdXRvbWF0aWNhbGx5IGQiLCJhdXRvbWF0aWNhbGx5IGQgaWYiLCJ0aGUgc29mdHdhcmUgZSIsInNvZnR3YXJlIGUgaWYiLCJsaWNlbnNlIGYgdGhlIiwiZiB0aGUgc29mdHdhcmUiLCJtaWNyb3NvZnQgcmVjaXByb2NhbCBsaWNlbnNlIG1zIiwicmVjaXByb2NhbCBsaWNlbnNlIG1zIHJsIiwibGljZW5zZSBtcyBybCB0aGlzIiwibXMgcmwgdGhpcyBsaWNlbnNlIiwicmwgdGhpcyBsaWNlbnNlIGdvdmVybnMiLCJhbmQgbGltaXRhdGlvbnMgYSByZWNpcHJvY2FsIiwibGltaXRhdGlvbnMgYSByZWNpcHJvY2FsIGdyYW50cyIsImEgcmVjaXByb2NhbCBncmFudHMgZm9yIiwicmVjaXByb2NhbCBncmFudHMgZm9yIGFueSIsImdyYW50cyBmb3IgYW55IGZpbGUiLCJmb3IgYW55IGZpbGUgeW91IiwiYW55IGZpbGUgeW91IGRpc3RyaWJ1dGUiLCJmaWxlIHlvdSBkaXN0cmlidXRlIHRoYXQiLCJ5b3UgZGlzdHJpYnV0ZSB0aGF0IGNvbnRhaW5zIiwiZGlzdHJpYnV0ZSB0aGF0IGNvbnRhaW5zIGNvZGUiLCJ0aGF0IGNvbnRhaW5zIGNvZGUgZnJvbSIsImNvbnRhaW5zIGNvZGUgZnJvbSB0aGUiLCJmcm9tIHRoZSBzb2Z0d2FyZSBpbiIsImNvZGUgb3IgYmluYXJ5IGZvcm1hdCIsIm9yIGJpbmFyeSBmb3JtYXQgeW91IiwiYmluYXJ5IGZvcm1hdCB5b3UgbXVzdCIsImZvcm1hdCB5b3UgbXVzdCBwcm92aWRlIiwieW91IG11c3QgcHJvdmlkZSByZWNpcGllbnRzIiwibXVzdCBwcm92aWRlIHJlY2lwaWVudHMgdGhlIiwicHJvdmlkZSByZWNpcGllbnRzIHRoZSBzb3VyY2UiLCJyZWNpcGllbnRzIHRoZSBzb3VyY2UgY29kZSIsInNvdXJjZSBjb2RlIHRvIHRoYXQiLCJjb2RlIHRvIHRoYXQgZmlsZSIsInRvIHRoYXQgZmlsZSBhbG9uZyIsInRoYXQgZmlsZSBhbG9uZyB3aXRoIiwiZmlsZSBhbG9uZyB3aXRoIGEiLCJhbG9uZyB3aXRoIGEgY29weSIsInRoaXMgbGljZW5zZSB3aGljaCBsaWNlbnNlIiwibGljZW5zZSB3aGljaCBsaWNlbnNlIHdpbGwiLCJ3aGljaCBsaWNlbnNlIHdpbGwgZ292ZXJuIiwibGljZW5zZSB3aWxsIGdvdmVybiB0aGF0Iiwid2lsbCBnb3Zlcm4gdGhhdCBmaWxlIiwiZ292ZXJuIHRoYXQgZmlsZSB5b3UiLCJmaWxlIHlvdSBtYXkgbGljZW5zZSIsInlvdSBtYXkgbGljZW5zZSBvdGhlciIsIm1heSBsaWNlbnNlIG90aGVyIGZpbGVzIiwibGljZW5zZSBvdGhlciBmaWxlcyB0aGF0Iiwib3RoZXIgZmlsZXMgdGhhdCBhcmUiLCJ5b3VyIG93biB3b3JrIGFuZCIsIm93biB3b3JrIGFuZCBkbyIsIndvcmsgYW5kIGRvIG5vdCIsImFuZCBkbyBub3QgY29udGFpbiIsImRvIG5vdCBjb250YWluIGNvZGUiLCJub3QgY29udGFpbiBjb2RlIGZyb20iLCJjb250YWluIGNvZGUgZnJvbSB0aGUiLCJmcm9tIHRoZSBzb2Z0d2FyZSB1bmRlciIsInNvZnR3YXJlIHVuZGVyIGFueSB0ZXJtcyIsInRlcm1zIHlvdSBjaG9vc2UgYiIsInlvdSBjaG9vc2UgYiBubyIsImNob29zZSBiIG5vIHRyYWRlbWFyayIsImIgbm8gdHJhZGVtYXJrIGxpY2Vuc2UiLCJsb2dvIG9yIHRyYWRlbWFya3MgYyIsIm9yIHRyYWRlbWFya3MgYyBpZiIsInRyYWRlbWFya3MgYyBpZiB5b3UiLCJjIGlmIHlvdSBicmluZyIsInNvZnR3YXJlIGVuZHMgYXV0b21hdGljYWxseSBkIiwiZW5kcyBhdXRvbWF0aWNhbGx5IGQgaWYiLCJhdXRvbWF0aWNhbGx5IGQgaWYgeW91IiwiaW4gdGhlIHNvZnR3YXJlIGUiLCJ0aGUgc29mdHdhcmUgZSBpZiIsInNvZnR3YXJlIGUgaWYgeW91IiwiZSBpZiB5b3UgZGlzdHJpYnV0ZSIsIndpdGggdGhpcyBsaWNlbnNlIGYiLCJ0aGlzIGxpY2Vuc2UgZiB0aGUiLCJsaWNlbnNlIGYgdGhlIHNvZnR3YXJlIiwiZiB0aGUgc29mdHdhcmUgaXMiLCJtaWNyb3NvZnQgcmVjaXByb2NhbCBsaWNlbnNlIG1zIHJsIiwicmVjaXByb2NhbCBsaWNlbnNlIG1zIHJsIHRoaXMiLCJsaWNlbnNlIG1zIHJsIHRoaXMgbGljZW5zZSIsIm1zIHJsIHRoaXMgbGljZW5zZSBnb3Zlcm5zIiwicmwgdGhpcyBsaWNlbnNlIGdvdmVybnMgdXNlIiwiY29uZGl0aW9ucyBhbmQgbGltaXRhdGlvbnMgYSByZWNpcHJvY2FsIiwiYW5kIGxpbWl0YXRpb25zIGEgcmVjaXByb2NhbCBncmFudHMiLCJsaW1pdGF0aW9ucyBhIHJlY2lwcm9jYWwgZ3JhbnRzIGZvciIsImEgcmVjaXByb2NhbCBncmFudHMgZm9yIGFueSIsInJlY2lwcm9jYWwgZ3JhbnRzIGZvciBhbnkgZmlsZSIsImdyYW50cyBmb3IgYW55IGZpbGUgeW91IiwiZm9yIGFueSBmaWxlIHlvdSBkaXN0cmlidXRlIiwiYW55IGZpbGUgeW91IGRpc3RyaWJ1dGUgdGhhdCIsImZpbGUgeW91IGRpc3RyaWJ1dGUgdGhhdCBjb250YWlucyIsInlvdSBkaXN0cmlidXRlIHRoYXQgY29udGFpbnMgY29kZSIsImRpc3RyaWJ1dGUgdGhhdCBjb250YWlucyBjb2RlIGZyb20iLCJ0aGF0IGNvbnRhaW5zIGNvZGUgZnJvbSB0aGUiLCJjb250YWlucyBjb2RlIGZyb20gdGhlIHNvZnR3YXJlIiwiY29kZSBmcm9tIHRoZSBzb2Z0d2FyZSBpbiIsImZyb20gdGhlIHNvZnR3YXJlIGluIHNvdXJjZSIsInNvdXJjZSBjb2RlIG9yIGJpbmFyeSBmb3JtYXQiLCJjb2RlIG9yIGJpbmFyeSBmb3JtYXQgeW91Iiwib3IgYmluYXJ5IGZvcm1hdCB5b3UgbXVzdCIsImJpbmFyeSBmb3JtYXQgeW91IG11c3QgcHJvdmlkZSIsImZvcm1hdCB5b3UgbXVzdCBwcm92aWRlIHJlY2lwaWVudHMiLCJ5b3UgbXVzdCBwcm92aWRlIHJlY2lwaWVudHMgdGhlIiwibXVzdCBwcm92aWRlIHJlY2lwaWVudHMgdGhlIHNvdXJjZSIsInByb3ZpZGUgcmVjaXBpZW50cyB0aGUgc291cmNlIGNvZGUiLCJyZWNpcGllbnRzIHRoZSBzb3VyY2UgY29kZSB0byIsInRoZSBzb3VyY2UgY29kZSB0byB0aGF0Iiwic291cmNlIGNvZGUgdG8gdGhhdCBmaWxlIiwiY29kZSB0byB0aGF0IGZpbGUgYWxvbmciLCJ0byB0aGF0IGZpbGUgYWxvbmcgd2l0aCIsInRoYXQgZmlsZSBhbG9uZyB3aXRoIGEiLCJmaWxlIGFsb25nIHdpdGggYSBjb3B5IiwiYWxvbmcgd2l0aCBhIGNvcHkgb2YiLCJjb3B5IG9mIHRoaXMgbGljZW5zZSB3aGljaCIsIm9mIHRoaXMgbGljZW5zZSB3aGljaCBsaWNlbnNlIiwidGhpcyBsaWNlbnNlIHdoaWNoIGxpY2Vuc2Ugd2lsbCIsImxpY2Vuc2Ugd2hpY2ggbGljZW5zZSB3aWxsIGdvdmVybiIsIndoaWNoIGxpY2Vuc2Ugd2lsbCBnb3Zlcm4gdGhhdCIsImxpY2Vuc2Ugd2lsbCBnb3Zlcm4gdGhhdCBmaWxlIiwid2lsbCBnb3Zlcm4gdGhhdCBmaWxlIHlvdSIsImdvdmVybiB0aGF0IGZpbGUgeW91IG1heSIsInRoYXQgZmlsZSB5b3UgbWF5IGxpY2Vuc2UiLCJmaWxlIHlvdSBtYXkgbGljZW5zZSBvdGhlciIsInlvdSBtYXkgbGljZW5zZSBvdGhlciBmaWxlcyIsIm1heSBsaWNlbnNlIG90aGVyIGZpbGVzIHRoYXQiLCJsaWNlbnNlIG90aGVyIGZpbGVzIHRoYXQgYXJlIiwib3RoZXIgZmlsZXMgdGhhdCBhcmUgZW50aXJlbHkiLCJlbnRpcmVseSB5b3VyIG93biB3b3JrIGFuZCIsInlvdXIgb3duIHdvcmsgYW5kIGRvIiwib3duIHdvcmsgYW5kIGRvIG5vdCIsIndvcmsgYW5kIGRvIG5vdCBjb250YWluIiwiYW5kIGRvIG5vdCBjb250YWluIGNvZGUiLCJkbyBub3QgY29udGFpbiBjb2RlIGZyb20iLCJub3QgY29udGFpbiBjb2RlIGZyb20gdGhlIiwiY29udGFpbiBjb2RlIGZyb20gdGhlIHNvZnR3YXJlIiwiY29kZSBmcm9tIHRoZSBzb2Z0d2FyZSB1bmRlciIsImZyb20gdGhlIHNvZnR3YXJlIHVuZGVyIGFueSIsInRoZSBzb2Z0d2FyZSB1bmRlciBhbnkgdGVybXMiLCJzb2Z0d2FyZSB1bmRlciBhbnkgdGVybXMgeW91IiwiYW55IHRlcm1zIHlvdSBjaG9vc2UgYiIsInRlcm1zIHlvdSBjaG9vc2UgYiBubyIsInlvdSBjaG9vc2UgYiBubyB0cmFkZW1hcmsiLCJjaG9vc2UgYiBubyB0cmFkZW1hcmsgbGljZW5zZSIsImIgbm8gdHJhZGVtYXJrIGxpY2Vuc2UgdGhpcyIsIm5hbWUgbG9nbyBvciB0cmFkZW1hcmtzIGMiLCJsb2dvIG9yIHRyYWRlbWFya3MgYyBpZiIsIm9yIHRyYWRlbWFya3MgYyBpZiB5b3UiLCJ0cmFkZW1hcmtzIGMgaWYgeW91IGJyaW5nIiwiYyBpZiB5b3UgYnJpbmcgYSIsInRoZSBzb2Z0d2FyZSBlbmRzIGF1dG9tYXRpY2FsbHkgZCIsInNvZnR3YXJlIGVuZHMgYXV0b21hdGljYWxseSBkIGlmIiwiZW5kcyBhdXRvbWF0aWNhbGx5IGQgaWYgeW91IiwiYXV0b21hdGljYWxseSBkIGlmIHlvdSBkaXN0cmlidXRlIiwicHJlc2VudCBpbiB0aGUgc29mdHdhcmUgZSIsImluIHRoZSBzb2Z0d2FyZSBlIGlmIiwidGhlIHNvZnR3YXJlIGUgaWYgeW91Iiwic29mdHdhcmUgZSBpZiB5b3UgZGlzdHJpYnV0ZSIsImUgaWYgeW91IGRpc3RyaWJ1dGUgYW55IiwiY29tcGxpZXMgd2l0aCB0aGlzIGxpY2Vuc2UgZiIsIndpdGggdGhpcyBsaWNlbnNlIGYgdGhlIl19LHsibGljZW5zZVRleHRzIjpbIlNvZnR3YXJlIExpY2Vuc2UgZm9yIE1UTCBDb3B5cmlnaHQgKGMpIDIwMDcgVGhlIFRydXN0ZWVzIG9mIEluZGlhbmEgVW5pdmVyc2l0eS5cblxuMjAwOCBEcmVzZGVuIFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSBhbmQgdGhlIFRydXN0ZWVzIG9mIEluZGlhbmEgVW5pdmVyc2l0eS5cblxuMjAxMCBTaW11Tm92YSBVRyAoaGFmdHVuZ3NiZXNjaHLDpG5rdCksIHd3dy5zaW11bm92YS5jb20uXG5cbkFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbkF1dGhvcnM6IFBldGVyIEdvdHRzY2hsaW5nIGFuZCBBbmRyZXcgTHVtc2RhaW5lXG5cblRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBNYXRyaXggVGVtcGxhdGUgTGlicmFyeVxuXG5EcmVzZGVuIFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSAtLSBzaG9ydCBUVUQgLS0gYW5kIEluZGlhbmEgVW5pdmVyc2l0eSAtLSBzaG9ydCBJVSAtLSBoYXZlIHRoZSBleGNsdXNpdmUgcmlnaHRzIHRvIGxpY2Vuc2UgdGhpcyBwcm9kdWN0IHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZS5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBBbGwgcmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGUgbGlzdCBvZiBhdXRob3JzIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29kZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBkaXNjbGFpbWVyIGxpc3RlZCBpbiB0aGlzIGxpY2Vuc2U7XG5cbiAgIDIuIEFsbCByZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZGlzY2xhaW1lciBsaXN0ZWQgaW4gdGhpcyBsaWNlbnNlIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uO1xuXG4gICAzLiBBbnkgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIGFsbCByZWRpc3RyaWJ1dGlvbnMgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OlxuXG4gICBcIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYXQgdGhlIFVuaXZlcnNpdHkgb2YgTm90cmUgRGFtZSwgdGhlIFBlcnZhc2l2ZSBUZWNobm9sb2d5IExhYnMgYXQgSW5kaWFuYSBVbml2ZXJzaXR5LCBhbmQgRHJlc2RlbiBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3kuIEZvciB0ZWNobmljYWwgaW5mb3JtYXRpb24gY29udGFjdCBBbmRyZXcgTHVtc2RhaW5lIGF0IHRoZSBQZXJ2YXNpdmUgVGVjaG5vbG9neSBMYWJzIGF0IEluZGlhbmEgVW5pdmVyc2l0eS4gRm9yIGFkbWluaXN0cmF0aXZlIGFuZCBsaWNlbnNlIHF1ZXN0aW9ucyBjb250YWN0IHRoZSBBZHZhbmNlZCBSZXNlYXJjaCBhbmQgVGVjaG5vbG9neSBJbnN0aXR1dGUgYXQgMTEwMCBXYXRlcndheSBCbHZkLiBJbmRpYW5hcG9saXMsIEluZGlhbmEgNDYyMDIsIHBob25lIDMxNy0yNzQtNTkwNSwgZmF4IDMxNy0yNzQtNTkwMi5cIlxuXG4gICBBbHRlcm5hdGl2ZWx5LCB0aGlzIGFja25vd2xlZGdlbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuXG5cbiAgIDQuIFRoZSBuYW1lIFwiTVRMXCIgc2hhbGwgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gSVUgb3IgVFVELiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBJbmRpYW5hIFVuaXZlcnNpdHkgQWR2YW5jZWQgUmVzZWFyY2ggXHUwMDI2IFRlY2hub2xvZ3kgSW5zdGl0dXRlLlxuXG4gICA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCBcIk1UTFwiLCBub3IgbWF5IFwiTVRMXCIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIEluZGlhbmEgVW5pdmVyc2l0eSBBZHZhbmNlZCBSZXNlYXJjaCBcdTAwMjYgVGVjaG5vbG9neSBJbnN0aXR1dGUuXG5cblRVRCBhbmQgSVUgcHJvdmlkZSBubyByZWFzc3VyYW5jZXMgdGhhdCB0aGUgc291cmNlIGNvZGUgcHJvdmlkZWQgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBUVUQgYW5kIElVIGRpc2NsYWltIGFueSBsaWFiaWxpdHkgdG8gYW55IHJlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuXG5cbkxJQ0VOU0VFIFVOREVSU1RBTkRTIFRIQVQgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEZPUiBXSElDSCBOTyBXQVJSQU5USUVTIEFTIFRPIENBUEFCSUxJVElFUyBPUiBBQ0NVUkFDWSBBUkUgTUFERS4gRFJFU0RFTiBVTklWRVJTSVRZIE9GIFRFQ0hOT0xPR1kgQU5EIElORElBTkEgVU5JVkVSU0lUWSBHSVZFIE5PIFdBUlJBTlRJRVMgQU5EIE1BS0UgTk8gUkVQUkVTRU5UQVRJT04gVEhBVCBTT0ZUV0FSRSBJUyBGUkVFIE9GIElORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBQQVRFTlQsIENPUFlSSUdIVCwgT1IgT1RIRVIgUFJPUFJJRVRBUlkgUklHSFRTLiBEUkVTREVOIFVOSVZFUlNJVFkgT0YgVEVDSE5PTE9HWSBBTkQgSU5ESUFOQSBVTklWRVJTSVRZIE1BS0UgTk8gV0FSUkFOVElFUyBUSEFUIFNPRlRXQVJFIElTIEZSRUUgRlJPTSBcIkJVR1NcIiwgXCJWSVJVU0VTXCIsIFwiVFJPSkFOIEhPUlNFU1wiLCBcIlRSQVAgRE9PUlNcIiwgXCJXT1JNU1wiLCBPUiBPVEhFUiBIQVJNRlVMIENPREUuIExJQ0VOU0VFIEFTU1VNRVMgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBQRVJGT1JNQU5DRSBPRiBTT0ZUV0FSRSBBTkQvT1IgQVNTT0NJQVRFRCBNQVRFUklBTFMsIEFORCBUTyBUSEUgUEVSRk9STUFOQ0UgQU5EIFZBTElESVRZIE9GIElORk9STUFUSU9OIEdFTkVSQVRFRCBVU0lORyBTT0ZUV0FSRS4iXSwibGljZW5zZUlkcyI6WyJNVExMIl0sImtleXdvcmRzIjpbInNvZnR3YXJlIGxpY2Vuc2UgZm9yIiwibGljZW5zZSBmb3IgbXRsIiwiZm9yIG10bCBjb3B5cmlnaHQiLCJtdGwgY29weXJpZ2h0IGMiLCJjIDIwMDcgdGhlIiwiMjAwNyB0aGUgdHJ1c3RlZXMiLCJpbmRpYW5hIHVuaXZlcnNpdHkgMjAwOCIsInVuaXZlcnNpdHkgMjAwOCBkcmVzZGVuIiwiMjAwOCBkcmVzZGVuIHVuaXZlcnNpdHkiLCJ0ZWNobm9sb2d5IGFuZCB0aGUiLCJhbmQgdGhlIHRydXN0ZWVzIiwiaW5kaWFuYSB1bml2ZXJzaXR5IDIwMTAiLCJ1bml2ZXJzaXR5IDIwMTAgc2ltdW5vdmEiLCIyMDEwIHNpbXVub3ZhIHVnIiwic2ltdW5vdmEgdWcgaGFmdHVuZ3NiZXNjaHIiLCJ1ZyBoYWZ0dW5nc2Jlc2NociBua3QiLCJoYWZ0dW5nc2Jlc2NociBua3Qgd3d3Iiwibmt0IHd3dyBzaW11bm92YSIsInd3dyBzaW11bm92YSBjb20iLCJzaW11bm92YSBjb20gYWxsIiwicmlnaHRzIHJlc2VydmVkIGF1dGhvcnMiLCJyZXNlcnZlZCBhdXRob3JzIHBldGVyIiwiYXV0aG9ycyBwZXRlciBnb3R0c2NobGluZyIsInBldGVyIGdvdHRzY2hsaW5nIGFuZCIsImdvdHRzY2hsaW5nIGFuZCBhbmRyZXciLCJhbmQgYW5kcmV3IGx1bXNkYWluZSIsImFuZHJldyBsdW1zZGFpbmUgdGhpcyIsImx1bXNkYWluZSB0aGlzIGZpbGUiLCJvZiB0aGUgbWF0cml4IiwidGhlIG1hdHJpeCB0ZW1wbGF0ZSIsIm1hdHJpeCB0ZW1wbGF0ZSBsaWJyYXJ5IiwidGVtcGxhdGUgbGlicmFyeSBkcmVzZGVuIiwibGlicmFyeSBkcmVzZGVuIHVuaXZlcnNpdHkiLCJvZiB0ZWNobm9sb2d5IHNob3J0IiwidGVjaG5vbG9neSBzaG9ydCB0dWQiLCJzaG9ydCB0dWQgYW5kIiwidHVkIGFuZCBpbmRpYW5hIiwiaW5kaWFuYSB1bml2ZXJzaXR5IHNob3J0IiwidW5pdmVyc2l0eSBzaG9ydCBpdSIsInNob3J0IGl1IGhhdmUiLCJpdSBoYXZlIHRoZSIsImhhdmUgdGhlIGV4Y2x1c2l2ZSIsImV4Y2x1c2l2ZSByaWdodHMgdG8iLCJyaWdodHMgdG8gbGljZW5zZSIsImxpY2Vuc2UgdGhpcyBwcm9kdWN0IiwidGhpcyBwcm9kdWN0IHVuZGVyIiwiZm9sbG93aW5nIGxpY2Vuc2UgcmVkaXN0cmlidXRpb24iLCJ1bml2ZXJzaXR5IG9mIG5vdHJlIiwib2Ygbm90cmUgZGFtZSIsIm5vdHJlIGRhbWUgdGhlIiwiZGFtZSB0aGUgcGVydmFzaXZlIiwiaW5kaWFuYSB1bml2ZXJzaXR5IGFuZCIsInVuaXZlcnNpdHkgYW5kIGRyZXNkZW4iLCJhbmQgZHJlc2RlbiB1bml2ZXJzaXR5Iiwib2YgdGVjaG5vbG9neSBmb3IiLCJ0ZWNobm9sb2d5IGZvciB0ZWNobmljYWwiLCJmb3IgdGVjaG5pY2FsIGluZm9ybWF0aW9uIiwidGVjaG5pY2FsIGluZm9ybWF0aW9uIGNvbnRhY3QiLCJpbmZvcm1hdGlvbiBjb250YWN0IGFuZHJldyIsImNvbnRhY3QgYW5kcmV3IGx1bXNkYWluZSIsImFuZHJldyBsdW1zZGFpbmUgYXQiLCJsdW1zZGFpbmUgYXQgdGhlIiwiYXQgdGhlIHBlcnZhc2l2ZSIsInVuaXZlcnNpdHkgZm9yIGFkbWluaXN0cmF0aXZlIiwiZm9yIGFkbWluaXN0cmF0aXZlIGFuZCIsImFkbWluaXN0cmF0aXZlIGFuZCBsaWNlbnNlIiwiYW5kIGxpY2Vuc2UgcXVlc3Rpb25zIiwibGljZW5zZSBxdWVzdGlvbnMgY29udGFjdCIsInF1ZXN0aW9ucyBjb250YWN0IHRoZSIsImNvbnRhY3QgdGhlIGFkdmFuY2VkIiwidGhlIGFkdmFuY2VkIHJlc2VhcmNoIiwiYWR2YW5jZWQgcmVzZWFyY2ggYW5kIiwicmVzZWFyY2ggYW5kIHRlY2hub2xvZ3kiLCJhbmQgdGVjaG5vbG9neSBpbnN0aXR1dGUiLCJ0ZWNobm9sb2d5IGluc3RpdHV0ZSBhdCIsImluc3RpdHV0ZSBhdCAxMTAwIiwiYXQgMTEwMCB3YXRlcndheSIsIjExMDAgd2F0ZXJ3YXkgYmx2ZCIsIndhdGVyd2F5IGJsdmQgaW5kaWFuYXBvbGlzIiwiYmx2ZCBpbmRpYW5hcG9saXMgaW5kaWFuYSIsImluZGlhbmFwb2xpcyBpbmRpYW5hIDQ2MjAyIiwiaW5kaWFuYSA0NjIwMiBwaG9uZSIsIjQ2MjAyIHBob25lIDMxNyIsInBob25lIDMxNyAyNzQiLCIzMTcgMjc0IDU5MDUiLCIyNzQgNTkwNSBmYXgiLCI1OTA1IGZheCAzMTciLCJmYXggMzE3IDI3NCIsIjMxNyAyNzQgNTkwMiIsIjI3NCA1OTAyIGFsdGVybmF0aXZlbHkiLCI1OTAyIGFsdGVybmF0aXZlbHkgdGhpcyIsImFsdGVybmF0aXZlbHkgdGhpcyBhY2tub3dsZWRnZW1lbnQiLCJ0aGlzIGFja25vd2xlZGdlbWVudCBtYXkiLCJhY2tub3dsZWRnZW1lbnQgbWF5IGFwcGVhciIsInRoZSBuYW1lIG10bCIsIm5hbWUgbXRsIHNoYWxsIiwibXRsIHNoYWxsIG5vdCIsInBlcm1pc3Npb24gZnJvbSBpdSIsImZyb20gaXUgb3IiLCJpdSBvciB0dWQiLCJvciB0dWQgZm9yIiwidHVkIGZvciB3cml0dGVuIiwicGxlYXNlIGNvbnRhY3QgaW5kaWFuYSIsImNvbnRhY3QgaW5kaWFuYSB1bml2ZXJzaXR5IiwidGVjaG5vbG9neSBpbnN0aXR1dGUgNSIsImluc3RpdHV0ZSA1IHByb2R1Y3RzIiwiYmUgY2FsbGVkIG10bCIsImNhbGxlZCBtdGwgbm9yIiwibXRsIG5vciBtYXkiLCJub3IgbWF5IG10bCIsIm1heSBtdGwgYXBwZWFyIiwibXRsIGFwcGVhciBpbiIsInBlcm1pc3Npb24gb2YgaW5kaWFuYSIsInRlY2hub2xvZ3kgaW5zdGl0dXRlIHR1ZCIsImluc3RpdHV0ZSB0dWQgYW5kIiwiYW5kIGl1IHByb3ZpZGUiLCJpdSBwcm92aWRlIG5vIiwib3RoZXIgZW50aXR5IHR1ZCIsImVudGl0eSB0dWQgYW5kIiwiYW5kIGl1IGRpc2NsYWltIiwiaXUgZGlzY2xhaW0gYW55IiwiYXJlIG1hZGUgZHJlc2RlbiIsIm1hZGUgZHJlc2RlbiB1bml2ZXJzaXR5IiwiaW5kaWFuYSB1bml2ZXJzaXR5IGdpdmUiLCJ1bml2ZXJzaXR5IGdpdmUgbm8iLCJnaXZlIG5vIHdhcnJhbnRpZXMiLCJ3YXJyYW50aWVzIGFuZCBtYWtlIiwiYW5kIG1ha2Ugbm8iLCJwcm9wcmlldGFyeSByaWdodHMgZHJlc2RlbiIsInJpZ2h0cyBkcmVzZGVuIHVuaXZlcnNpdHkiLCJpbmRpYW5hIHVuaXZlcnNpdHkgbWFrZSIsIm1ha2Ugbm8gd2FycmFudGllcyIsInNvZnR3YXJlIGxpY2Vuc2UgZm9yIG10bCIsImxpY2Vuc2UgZm9yIG10bCBjb3B5cmlnaHQiLCJmb3IgbXRsIGNvcHlyaWdodCBjIiwibXRsIGNvcHlyaWdodCBjIDIwMDciLCJjb3B5cmlnaHQgYyAyMDA3IHRoZSIsImMgMjAwNyB0aGUgdHJ1c3RlZXMiLCIyMDA3IHRoZSB0cnVzdGVlcyBvZiIsIm9mIGluZGlhbmEgdW5pdmVyc2l0eSAyMDA4IiwiaW5kaWFuYSB1bml2ZXJzaXR5IDIwMDggZHJlc2RlbiIsInVuaXZlcnNpdHkgMjAwOCBkcmVzZGVuIHVuaXZlcnNpdHkiLCIyMDA4IGRyZXNkZW4gdW5pdmVyc2l0eSBvZiIsIm9mIHRlY2hub2xvZ3kgYW5kIHRoZSIsInRlY2hub2xvZ3kgYW5kIHRoZSB0cnVzdGVlcyIsImFuZCB0aGUgdHJ1c3RlZXMgb2YiLCJvZiBpbmRpYW5hIHVuaXZlcnNpdHkgMjAxMCIsImluZGlhbmEgdW5pdmVyc2l0eSAyMDEwIHNpbXVub3ZhIiwidW5pdmVyc2l0eSAyMDEwIHNpbXVub3ZhIHVnIiwiMjAxMCBzaW11bm92YSB1ZyBoYWZ0dW5nc2Jlc2NociIsInNpbXVub3ZhIHVnIGhhZnR1bmdzYmVzY2hyIG5rdCIsInVnIGhhZnR1bmdzYmVzY2hyIG5rdCB3d3ciLCJoYWZ0dW5nc2Jlc2NociBua3Qgd3d3IHNpbXVub3ZhIiwibmt0IHd3dyBzaW11bm92YSBjb20iLCJ3d3cgc2ltdW5vdmEgY29tIGFsbCIsInNpbXVub3ZhIGNvbSBhbGwgcmlnaHRzIiwiYWxsIHJpZ2h0cyByZXNlcnZlZCBhdXRob3JzIiwicmlnaHRzIHJlc2VydmVkIGF1dGhvcnMgcGV0ZXIiLCJyZXNlcnZlZCBhdXRob3JzIHBldGVyIGdvdHRzY2hsaW5nIiwiYXV0aG9ycyBwZXRlciBnb3R0c2NobGluZyBhbmQiLCJwZXRlciBnb3R0c2NobGluZyBhbmQgYW5kcmV3IiwiZ290dHNjaGxpbmcgYW5kIGFuZHJldyBsdW1zZGFpbmUiLCJhbmQgYW5kcmV3IGx1bXNkYWluZSB0aGlzIiwiYW5kcmV3IGx1bXNkYWluZSB0aGlzIGZpbGUiLCJsdW1zZGFpbmUgdGhpcyBmaWxlIGlzIiwicGFydCBvZiB0aGUgbWF0cml4Iiwib2YgdGhlIG1hdHJpeCB0ZW1wbGF0ZSIsInRoZSBtYXRyaXggdGVtcGxhdGUgbGlicmFyeSIsIm1hdHJpeCB0ZW1wbGF0ZSBsaWJyYXJ5IGRyZXNkZW4iLCJ0ZW1wbGF0ZSBsaWJyYXJ5IGRyZXNkZW4gdW5pdmVyc2l0eSIsImxpYnJhcnkgZHJlc2RlbiB1bml2ZXJzaXR5IG9mIiwidW5pdmVyc2l0eSBvZiB0ZWNobm9sb2d5IHNob3J0Iiwib2YgdGVjaG5vbG9neSBzaG9ydCB0dWQiLCJ0ZWNobm9sb2d5IHNob3J0IHR1ZCBhbmQiLCJzaG9ydCB0dWQgYW5kIGluZGlhbmEiLCJ0dWQgYW5kIGluZGlhbmEgdW5pdmVyc2l0eSIsImFuZCBpbmRpYW5hIHVuaXZlcnNpdHkgc2hvcnQiLCJpbmRpYW5hIHVuaXZlcnNpdHkgc2hvcnQgaXUiLCJ1bml2ZXJzaXR5IHNob3J0IGl1IGhhdmUiLCJzaG9ydCBpdSBoYXZlIHRoZSIsIml1IGhhdmUgdGhlIGV4Y2x1c2l2ZSIsImhhdmUgdGhlIGV4Y2x1c2l2ZSByaWdodHMiLCJ0aGUgZXhjbHVzaXZlIHJpZ2h0cyB0byIsImV4Y2x1c2l2ZSByaWdodHMgdG8gbGljZW5zZSIsInJpZ2h0cyB0byBsaWNlbnNlIHRoaXMiLCJ0byBsaWNlbnNlIHRoaXMgcHJvZHVjdCIsImxpY2Vuc2UgdGhpcyBwcm9kdWN0IHVuZGVyIiwidGhpcyBwcm9kdWN0IHVuZGVyIHRoZSIsInByb2R1Y3QgdW5kZXIgdGhlIGZvbGxvd2luZyIsInRoZSBmb2xsb3dpbmcgbGljZW5zZSByZWRpc3RyaWJ1dGlvbiIsImZvbGxvd2luZyBsaWNlbnNlIHJlZGlzdHJpYnV0aW9uIGFuZCIsImRldmVsb3BlZCBhdCB0aGUgdW5pdmVyc2l0eSIsImF0IHRoZSB1bml2ZXJzaXR5IG9mIiwidGhlIHVuaXZlcnNpdHkgb2Ygbm90cmUiLCJ1bml2ZXJzaXR5IG9mIG5vdHJlIGRhbWUiLCJvZiBub3RyZSBkYW1lIHRoZSIsIm5vdHJlIGRhbWUgdGhlIHBlcnZhc2l2ZSIsImRhbWUgdGhlIHBlcnZhc2l2ZSB0ZWNobm9sb2d5IiwiYXQgaW5kaWFuYSB1bml2ZXJzaXR5IGFuZCIsImluZGlhbmEgdW5pdmVyc2l0eSBhbmQgZHJlc2RlbiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJNYWtlSW5kZXggRGlzdHJpYnV0aW9uIE5vdGljZVxuXG4xMS8xMS8xOTg5IENvcHlyaWdodCAoQykgMTk4OSBieSBDaGVuIFx1MDAyNiBIYXJyaXNvbiBJbnRlcm5hdGlvbmFsIFN5c3RlbXMsIEluYy5cblxuQ29weXJpZ2h0IChDKSAxOTg4IGJ5IE9saXZldHRpIFJlc2VhcmNoIENlbnRlclxuXG5Db3B5cmlnaHQgKEMpIDE5ODcgYnkgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhXG5cbkF1dGhvcjpcblxuUGVob25nIENoZW4gKHBoY0ByZW5vaXIuYmVya2VsZXkuZWR1KVxuXG5DaGVuIFx1MDAyNiBIYXJyaXNvbiBJbnRlcm5hdGlvbmFsIFN5c3RlbXMsIEluYy5cblxuUGFsbyBBbHRvLCBDYWxpZm9ybmlhXG5cblVTQVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgb3JpZ2luYWwgY29waWVzIG9mIHRoaXMgcHJvZ3JhbSBwcm92aWRlZCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFyZSBwcmVzZXJ2ZWQgYW5kIHByb3ZpZGVkIHRoYXQgdGhlIHJlY2lwaWVudCBpcyBub3QgYXNrZWQgdG8gd2FpdmUgb3IgbGltaXQgaGlzIHJpZ2h0IHRvIHJlZGlzdHJpYnV0ZSBjb3BpZXMgYXMgYWxsb3dlZCBieSB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFuZCBwcm92aWRlZCB0aGF0IGFueW9uZSB3aG8gcmVjZWl2ZXMgYW4gZXhlY3V0YWJsZSBmb3JtIG9mIHRoaXMgcHJvZ3JhbSBpcyBncmFudGVkIGFjY2VzcyB0byBhIG1hY2hpbmUtcmVhZGFibGUgZm9ybSBvZiB0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgcHJvZ3JhbSBhdCBhIGNvc3Qgbm90IGdyZWF0ZXIgdGhhbiByZWFzb25hYmxlIHJlcHJvZHVjdGlvbiwgc2hpcHBpbmcsIGFuZCBoYW5kbGluZyBjb3N0cy4gRXhlY3V0YWJsZSBmb3JtcyBvZiB0aGlzIHByb2dyYW0gZGlzdHJpYnV0ZWQgd2l0aG91dCB0aGUgc291cmNlIGNvZGUgbXVzdCBiZSBhY2NvbXBhbmllZCBieSBhIGNvbnNwaWN1b3VzIGNvcHkgb2YgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhbmQgYSBzdGF0ZW1lbnQgdGhhdCB0ZWxscyB0aGUgcmVjaXBpZW50IGhvdyB0byBvYnRhaW4gdGhlIHNvdXJjZSBjb2RlLlxuXG5QZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBhbGwgb3IgcGFydCBvZiB0aGlzIHByb2dyYW0gdW5kZXIgdGhlIGNvbmRpdGlvbnMgYWJvdmUgd2l0aCB0aGUgYWRkaXRpb25hbCByZXF1aXJlbWVudCB0aGF0IHRoZSBlbnRpcmUgbW9kaWZpZWQgd29yayBtdXN0IGJlIGNvdmVyZWQgYnkgYSBwZXJtaXNzaW9uIG5vdGljZSBpZGVudGljYWwgdG8gdGhpcyBwZXJtaXNzaW9uIG5vdGljZS4gQW55dGhpbmcgZGlzdHJpYnV0ZWQgd2l0aCBhbmQgdXNhYmxlIG9ubHkgaW4gY29uanVuY3Rpb24gd2l0aCBzb21ldGhpbmcgZGVyaXZlZCBmcm9tIHRoaXMgcHJvZ3JhbSwgd2hvc2UgdXNlZnVsIHB1cnBvc2UgaXMgdG8gZXh0ZW5kIG9yIGFkYXB0IG9yIGFkZCBjYXBhYmlsaXRpZXMgdG8gdGhpcyBwcm9ncmFtLCBpcyB0byBiZSBjb25zaWRlcmVkIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIHByb2dyYW0gdW5kZXIgdGhlIHJlcXVpcmVtZW50IGFib3ZlLiBQb3J0cyBvZiB0aGlzIHByb2dyYW0gdG8gb3RoZXIgc3lzdGVtcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBkaXN0cmlidXRpb24gYXJlIGFsc28gY29uc2lkZXJlZCBtb2RpZmllZCB2ZXJzaW9ucy4gQWxsIG1vZGlmaWVkIHZlcnNpb25zIHNob3VsZCBiZSByZXBvcnRlZCBiYWNrIHRvIHRoZSBhdXRob3IuXG5cblRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB3aXRoIG5vIHdhcnJhbnR5IG9mIGFueSBzb3J0LiBObyBjb250cmlidXRvciBhY2NlcHRzIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgY29uc2VxdWVuY2VzIG9mIHVzaW5nIHRoaXMgcHJvZ3JhbSBvciBmb3Igd2hldGhlciBpdCBzZXJ2ZXMgYW55IHBhcnRpY3VsYXIgcHVycG9zZS4iXSwibGljZW5zZUlkcyI6WyJNYWtlSW5kZXgiXSwia2V5d29yZHMiOlsibWFrZWluZGV4IGRpc3RyaWJ1dGlvbiBub3RpY2UiLCJkaXN0cmlidXRpb24gbm90aWNlIDExIiwibm90aWNlIDExIDExIiwiMTEgMTEgMTk4OSIsIjExIDE5ODkgY29weXJpZ2h0IiwiYyAxOTg5IGJ5IiwiMTk4OSBieSBjaGVuIiwiYnkgY2hlbiBoYXJyaXNvbiIsImMgMTk4OCBieSIsIjE5ODggYnkgb2xpdmV0dGkiLCJieSBvbGl2ZXR0aSByZXNlYXJjaCIsIm9saXZldHRpIHJlc2VhcmNoIGNlbnRlciIsInJlc2VhcmNoIGNlbnRlciBjb3B5cmlnaHQiLCJjZW50ZXIgY29weXJpZ2h0IGMiLCJjb3B5cmlnaHQgYyAxOTg3IiwiYyAxOTg3IGJ5IiwiMTk4NyBieSByZWdlbnRzIiwiYnkgcmVnZW50cyBvZiIsIm9mIGNhbGlmb3JuaWEgYXV0aG9yIiwiY2FsaWZvcm5pYSBhdXRob3IgcGVob25nIiwiYXV0aG9yIHBlaG9uZyBjaGVuIiwicGVob25nIGNoZW4gcGhjIiwiY2hlbiBwaGMgcmVub2lyIiwicGhjIHJlbm9pciBiZXJrZWxleSIsInJlbm9pciBiZXJrZWxleSBlZHUiLCJiZXJrZWxleSBlZHUgY2hlbiIsImVkdSBjaGVuIGhhcnJpc29uIiwic3lzdGVtcyBpbmMgcGFsbyIsImluYyBwYWxvIGFsdG8iLCJhbHRvIGNhbGlmb3JuaWEgdXNhIiwiZGlzdHJpYnV0ZSBvcmlnaW5hbCBjb3BpZXMiLCJvcmlnaW5hbCBjb3BpZXMgb2YiLCJ0aGlzIHByb2dyYW0gcHJvdmlkZWQiLCJhcmUgcHJlc2VydmVkIGFuZCIsInByZXNlcnZlZCBhbmQgcHJvdmlkZWQiLCJ0aGUgcmVjaXBpZW50IGlzIiwicmVjaXBpZW50IGlzIG5vdCIsImlzIG5vdCBhc2tlZCIsIm5vdCBhc2tlZCB0byIsImFza2VkIHRvIHdhaXZlIiwidG8gd2FpdmUgb3IiLCJ3YWl2ZSBvciBsaW1pdCIsIm9yIGxpbWl0IGhpcyIsImxpbWl0IGhpcyByaWdodCIsInJpZ2h0IHRvIHJlZGlzdHJpYnV0ZSIsInJlZGlzdHJpYnV0ZSBjb3BpZXMgYXMiLCJjb3BpZXMgYXMgYWxsb3dlZCIsImFsbG93ZWQgYnkgdGhpcyIsImJ5IHRoaXMgcGVybWlzc2lvbiIsIm5vdGljZSBhbmQgcHJvdmlkZWQiLCJwcm92aWRlZCB0aGF0IGFueW9uZSIsIndobyByZWNlaXZlcyBhbiIsInJlY2VpdmVzIGFuIGV4ZWN1dGFibGUiLCJhbiBleGVjdXRhYmxlIGZvcm0iLCJwcm9ncmFtIGlzIGdyYW50ZWQiLCJpcyBncmFudGVkIGFjY2VzcyIsImdyYW50ZWQgYWNjZXNzIHRvIiwidG8gYSBtYWNoaW5lIiwiZm9yIHRoaXMgcHJvZ3JhbSIsInRoaXMgcHJvZ3JhbSBhdCIsInByb2dyYW0gYXQgYSIsImEgY29zdCBub3QiLCJjb3N0IG5vdCBncmVhdGVyIiwibm90IGdyZWF0ZXIgdGhhbiIsImdyZWF0ZXIgdGhhbiByZWFzb25hYmxlIiwidGhhbiByZWFzb25hYmxlIHJlcHJvZHVjdGlvbiIsInJlYXNvbmFibGUgcmVwcm9kdWN0aW9uIHNoaXBwaW5nIiwicmVwcm9kdWN0aW9uIHNoaXBwaW5nIGFuZCIsInNoaXBwaW5nIGFuZCBoYW5kbGluZyIsImFuZCBoYW5kbGluZyBjb3N0cyIsImhhbmRsaW5nIGNvc3RzIGV4ZWN1dGFibGUiLCJjb3N0cyBleGVjdXRhYmxlIGZvcm1zIiwiZm9ybXMgb2YgdGhpcyIsInRoaXMgcHJvZ3JhbSBkaXN0cmlidXRlZCIsInByb2dyYW0gZGlzdHJpYnV0ZWQgd2l0aG91dCIsImRpc3RyaWJ1dGVkIHdpdGhvdXQgdGhlIiwiYnkgYSBjb25zcGljdW91cyIsImEgY29uc3BpY3VvdXMgY29weSIsImNvbnNwaWN1b3VzIGNvcHkgb2YiLCJvZiB0aGlzIHBlcm1pc3Npb24iLCJzdGF0ZW1lbnQgdGhhdCB0ZWxscyIsInRoYXQgdGVsbHMgdGhlIiwidGVsbHMgdGhlIHJlY2lwaWVudCIsInRoZSByZWNpcGllbnQgaG93IiwicmVjaXBpZW50IGhvdyB0byIsInNvdXJjZSBjb2RlIHBlcm1pc3Npb24iLCJjb2RlIHBlcm1pc3Npb24gaXMiLCJ0byBkaXN0cmlidXRlIG1vZGlmaWVkIiwiY29uZGl0aW9ucyBhYm92ZSB3aXRoIiwidGhlIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnQiLCJhZGRpdGlvbmFsIHJlcXVpcmVtZW50IHRoYXQiLCJyZXF1aXJlbWVudCB0aGF0IHRoZSIsInRoZSBlbnRpcmUgbW9kaWZpZWQiLCJlbnRpcmUgbW9kaWZpZWQgd29yayIsIm11c3QgYmUgY292ZXJlZCIsImJ5IGEgcGVybWlzc2lvbiIsInRvIHRoaXMgcGVybWlzc2lvbiIsInBlcm1pc3Npb24gbm90aWNlIGFueXRoaW5nIiwibm90aWNlIGFueXRoaW5nIGRpc3RyaWJ1dGVkIiwiYW55dGhpbmcgZGlzdHJpYnV0ZWQgd2l0aCIsImRpc3RyaWJ1dGVkIHdpdGggYW5kIiwid2l0aCBhbmQgdXNhYmxlIiwiYW5kIHVzYWJsZSBvbmx5IiwidXNhYmxlIG9ubHkgaW4iLCJvbmx5IGluIGNvbmp1bmN0aW9uIiwiY29uanVuY3Rpb24gd2l0aCBzb21ldGhpbmciLCJ3aXRoIHNvbWV0aGluZyBkZXJpdmVkIiwic29tZXRoaW5nIGRlcml2ZWQgZnJvbSIsImZyb20gdGhpcyBwcm9ncmFtIiwidGhpcyBwcm9ncmFtIHdob3NlIiwicHJvZ3JhbSB3aG9zZSB1c2VmdWwiLCJ3aG9zZSB1c2VmdWwgcHVycG9zZSIsInVzZWZ1bCBwdXJwb3NlIGlzIiwicHVycG9zZSBpcyB0byIsImlzIHRvIGV4dGVuZCIsInRvIGV4dGVuZCBvciIsImV4dGVuZCBvciBhZGFwdCIsIm9yIGFkYXB0IG9yIiwiYWRhcHQgb3IgYWRkIiwib3IgYWRkIGNhcGFiaWxpdGllcyIsImFkZCBjYXBhYmlsaXRpZXMgdG8iLCJjYXBhYmlsaXRpZXMgdG8gdGhpcyIsInRvIHRoaXMgcHJvZ3JhbSIsInByb2dyYW0gaXMgdG8iLCJ0byBiZSBjb25zaWRlcmVkIiwiY29uc2lkZXJlZCBhIG1vZGlmaWVkIiwidW5kZXIgdGhlIHJlcXVpcmVtZW50IiwidGhlIHJlcXVpcmVtZW50IGFib3ZlIiwicmVxdWlyZW1lbnQgYWJvdmUgcG9ydHMiLCJhYm92ZSBwb3J0cyBvZiIsInBvcnRzIG9mIHRoaXMiLCJ0aGlzIHByb2dyYW0gdG8iLCJwcm9ncmFtIHRvIG90aGVyIiwidG8gb3RoZXIgc3lzdGVtcyIsIm90aGVyIHN5c3RlbXMgbm90Iiwic3lzdGVtcyBub3Qgc3VwcG9ydGVkIiwibm90IHN1cHBvcnRlZCBpbiIsInN1cHBvcnRlZCBpbiB0aGUiLCJkaXN0cmlidXRpb24gYXJlIGFsc28iLCJhcmUgYWxzbyBjb25zaWRlcmVkIiwiYWxzbyBjb25zaWRlcmVkIG1vZGlmaWVkIiwiY29uc2lkZXJlZCBtb2RpZmllZCB2ZXJzaW9ucyIsIm1vZGlmaWVkIHZlcnNpb25zIGFsbCIsInZlcnNpb25zIGFsbCBtb2RpZmllZCIsImFsbCBtb2RpZmllZCB2ZXJzaW9ucyIsIm1vZGlmaWVkIHZlcnNpb25zIHNob3VsZCIsInZlcnNpb25zIHNob3VsZCBiZSIsInNob3VsZCBiZSByZXBvcnRlZCIsImJlIHJlcG9ydGVkIGJhY2siLCJyZXBvcnRlZCBiYWNrIHRvIiwidGhlIGF1dGhvciB0aGlzIiwiZGlzdHJpYnV0ZWQgd2l0aCBubyIsImFueSBzb3J0IG5vIiwic29ydCBubyBjb250cmlidXRvciIsIm5vIGNvbnRyaWJ1dG9yIGFjY2VwdHMiLCJjb250cmlidXRvciBhY2NlcHRzIHJlc3BvbnNpYmlsaXR5IiwiYWNjZXB0cyByZXNwb25zaWJpbGl0eSBmb3IiLCJ1c2luZyB0aGlzIHByb2dyYW0iLCJ0aGlzIHByb2dyYW0gb3IiLCJwcm9ncmFtIG9yIGZvciIsIm1ha2VpbmRleCBkaXN0cmlidXRpb24gbm90aWNlIDExIiwiZGlzdHJpYnV0aW9uIG5vdGljZSAxMSAxMSIsIm5vdGljZSAxMSAxMSAxOTg5IiwiMTEgMTEgMTk4OSBjb3B5cmlnaHQiLCIxMSAxOTg5IGNvcHlyaWdodCBjIiwiY29weXJpZ2h0IGMgMTk4OSBieSIsImMgMTk4OSBieSBjaGVuIiwiMTk4OSBieSBjaGVuIGhhcnJpc29uIiwiYnkgY2hlbiBoYXJyaXNvbiBpbnRlcm5hdGlvbmFsIiwiaW50ZXJuYXRpb25hbCBzeXN0ZW1zIGluYyBjb3B5cmlnaHQiLCJzeXN0ZW1zIGluYyBjb3B5cmlnaHQgYyIsImluYyBjb3B5cmlnaHQgYyAxOTg4IiwiY29weXJpZ2h0IGMgMTk4OCBieSIsImMgMTk4OCBieSBvbGl2ZXR0aSIsIjE5ODggYnkgb2xpdmV0dGkgcmVzZWFyY2giLCJieSBvbGl2ZXR0aSByZXNlYXJjaCBjZW50ZXIiLCJvbGl2ZXR0aSByZXNlYXJjaCBjZW50ZXIgY29weXJpZ2h0IiwicmVzZWFyY2ggY2VudGVyIGNvcHlyaWdodCBjIiwiY2VudGVyIGNvcHlyaWdodCBjIDE5ODciLCJjb3B5cmlnaHQgYyAxOTg3IGJ5IiwiYyAxOTg3IGJ5IHJlZ2VudHMiLCIxOTg3IGJ5IHJlZ2VudHMgb2YiLCJieSByZWdlbnRzIG9mIHRoZSIsInVuaXZlcnNpdHkgb2YgY2FsaWZvcm5pYSBhdXRob3IiLCJvZiBjYWxpZm9ybmlhIGF1dGhvciBwZWhvbmciLCJjYWxpZm9ybmlhIGF1dGhvciBwZWhvbmcgY2hlbiIsImF1dGhvciBwZWhvbmcgY2hlbiBwaGMiLCJwZWhvbmcgY2hlbiBwaGMgcmVub2lyIiwiY2hlbiBwaGMgcmVub2lyIGJlcmtlbGV5IiwicGhjIHJlbm9pciBiZXJrZWxleSBlZHUiLCJyZW5vaXIgYmVya2VsZXkgZWR1IGNoZW4iLCJiZXJrZWxleSBlZHUgY2hlbiBoYXJyaXNvbiIsImVkdSBjaGVuIGhhcnJpc29uIGludGVybmF0aW9uYWwiLCJpbnRlcm5hdGlvbmFsIHN5c3RlbXMgaW5jIHBhbG8iLCJzeXN0ZW1zIGluYyBwYWxvIGFsdG8iLCJpbmMgcGFsbyBhbHRvIGNhbGlmb3JuaWEiLCJwYWxvIGFsdG8gY2FsaWZvcm5pYSB1c2EiLCJhbHRvIGNhbGlmb3JuaWEgdXNhIHBlcm1pc3Npb24iLCJoZXJlYnkgZ3JhbnRlZCB0byBtYWtlIiwibWFrZSBhbmQgZGlzdHJpYnV0ZSBvcmlnaW5hbCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgTWlyT1MgTGljZW5jZSBDb3B5cmlnaHQgW1lFQVJdIFtOQU1FXSBbRU1BSUxdXG5cblByb3ZpZGVkIHRoYXQgdGhlc2UgdGVybXMgYW5kIGRpc2NsYWltZXIgYW5kIGFsbCBjb3B5cmlnaHQgbm90aWNlcyBhcmUgcmV0YWluZWQgb3IgcmVwcm9kdWNlZCBpbiBhbiBhY2NvbXBhbnlpbmcgZG9jdW1lbnQsIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBkZWFsIGluIHRoaXMgd29yayB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgdW5saW1pdGVkIHJpZ2h0cyB0byB1c2UsIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUsIHNlbGwsIG1vZGlmeSwgbWVyZ2UsIGdpdmUgYXdheSwgb3Igc3VibGljZW5jZS5cblxuVGhpcyB3b3JrIGlzIHByb3ZpZGVkIFwiQVMgSVNcIiBhbmQgV0lUSE9VVCBXQVJSQU5UWSBvZiBhbnkga2luZCwgdG8gdGhlIHV0bW9zdCBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBuZWl0aGVyIGV4cHJlc3Mgbm9yIGltcGxpZWQ7IHdpdGhvdXQgbWFsaWNpb3VzIGludGVudCBvciBncm9zcyBuZWdsaWdlbmNlLiBJbiBubyBldmVudCBtYXkgYSBsaWNlbnNvciwgYXV0aG9yIG9yIGNvbnRyaWJ1dG9yIGJlIGhlbGQgbGlhYmxlIGZvciBpbmRpcmVjdCwgZGlyZWN0LCBvdGhlciBkYW1hZ2UsIGxvc3MsIG9yIG90aGVyIGlzc3VlcyBhcmlzaW5nIGluIGFueSB3YXkgb3V0IG9mIGRlYWxpbmcgaW4gdGhlIHdvcmssIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2Ugb3IgZXhpc3RlbmNlIG9mIGEgZGVmZWN0LCBleGNlcHQgcHJvdmVuIHRoYXQgaXQgcmVzdWx0cyBvdXQgb2Ygc2FpZCBwZXJzb24ncyBpbW1lZGlhdGUgZmF1bHQgd2hlbiB1c2luZyB0aGUgd29yayBhcyBpbnRlbmRlZC4iXSwibGljZW5zZUlkcyI6WyJNaXJPUyJdLCJrZXl3b3JkcyI6WyJ0aGUgbWlyb3MgbGljZW5jZSIsIm1pcm9zIGxpY2VuY2UgY29weXJpZ2h0IiwibGljZW5jZSBjb3B5cmlnaHQgeWVhciIsImNvcHlyaWdodCB5ZWFyIG5hbWUiLCJ5ZWFyIG5hbWUgZW1haWwiLCJuYW1lIGVtYWlsIHByb3ZpZGVkIiwiZW1haWwgcHJvdmlkZWQgdGhhdCIsInByb3ZpZGVkIHRoYXQgdGhlc2UiLCJ0aGF0IHRoZXNlIHRlcm1zIiwidGVybXMgYW5kIGRpc2NsYWltZXIiLCJhbmQgZGlzY2xhaW1lciBhbmQiLCJkaXNjbGFpbWVyIGFuZCBhbGwiLCJhcmUgcmV0YWluZWQgb3IiLCJyZXRhaW5lZCBvciByZXByb2R1Y2VkIiwib3IgcmVwcm9kdWNlZCBpbiIsInJlcHJvZHVjZWQgaW4gYW4iLCJpbiBhbiBhY2NvbXBhbnlpbmciLCJhbiBhY2NvbXBhbnlpbmcgZG9jdW1lbnQiLCJhY2NvbXBhbnlpbmcgZG9jdW1lbnQgcGVybWlzc2lvbiIsImRvY3VtZW50IHBlcm1pc3Npb24gaXMiLCJncmFudGVkIHRvIGRlYWwiLCJkZWFsIGluIHRoaXMiLCJ0aGlzIHdvcmsgd2l0aG91dCIsInJlc3RyaWN0aW9uIGluY2x1ZGluZyB1bmxpbWl0ZWQiLCJpbmNsdWRpbmcgdW5saW1pdGVkIHJpZ2h0cyIsInVubGltaXRlZCByaWdodHMgdG8iLCJ0byB1c2UgcHVibGljbHkiLCJ1c2UgcHVibGljbHkgcGVyZm9ybSIsInBlcmZvcm0gZGlzdHJpYnV0ZSBzZWxsIiwiZGlzdHJpYnV0ZSBzZWxsIG1vZGlmeSIsInNlbGwgbW9kaWZ5IG1lcmdlIiwibW9kaWZ5IG1lcmdlIGdpdmUiLCJtZXJnZSBnaXZlIGF3YXkiLCJhd2F5IG9yIHN1YmxpY2VuY2UiLCJvciBzdWJsaWNlbmNlIHRoaXMiLCJzdWJsaWNlbmNlIHRoaXMgd29yayIsInRvIHRoZSB1dG1vc3QiLCJ0aGUgdXRtb3N0IGV4dGVudCIsInV0bW9zdCBleHRlbnQgcGVybWl0dGVkIiwibGF3IG5laXRoZXIgZXhwcmVzcyIsIm5laXRoZXIgZXhwcmVzcyBub3IiLCJleHByZXNzIG5vciBpbXBsaWVkIiwibm9yIGltcGxpZWQgd2l0aG91dCIsImltcGxpZWQgd2l0aG91dCBtYWxpY2lvdXMiLCJ3aXRob3V0IG1hbGljaW91cyBpbnRlbnQiLCJtYWxpY2lvdXMgaW50ZW50IG9yIiwiaW50ZW50IG9yIGdyb3NzIiwib3IgZ3Jvc3MgbmVnbGlnZW5jZSIsImdyb3NzIG5lZ2xpZ2VuY2UgaW4iLCJuZWdsaWdlbmNlIGluIG5vIiwibm8gZXZlbnQgbWF5IiwiZXZlbnQgbWF5IGEiLCJtYXkgYSBsaWNlbnNvciIsImEgbGljZW5zb3IgYXV0aG9yIiwibGljZW5zb3IgYXV0aG9yIG9yIiwiYXV0aG9yIG9yIGNvbnRyaWJ1dG9yIiwib3IgY29udHJpYnV0b3IgYmUiLCJjb250cmlidXRvciBiZSBoZWxkIiwibGlhYmxlIGZvciBpbmRpcmVjdCIsImZvciBpbmRpcmVjdCBkaXJlY3QiLCJpbmRpcmVjdCBkaXJlY3Qgb3RoZXIiLCJkaXJlY3Qgb3RoZXIgZGFtYWdlIiwib3RoZXIgZGFtYWdlIGxvc3MiLCJkYW1hZ2UgbG9zcyBvciIsImxvc3Mgb3Igb3RoZXIiLCJvciBvdGhlciBpc3N1ZXMiLCJvdGhlciBpc3N1ZXMgYXJpc2luZyIsImlzc3VlcyBhcmlzaW5nIGluIiwib3V0IG9mIGRlYWxpbmciLCJvZiBkZWFsaW5nIGluIiwiZGVhbGluZyBpbiB0aGUiLCJkYW1hZ2Ugb3IgZXhpc3RlbmNlIiwib3IgZXhpc3RlbmNlIG9mIiwib2YgYSBkZWZlY3QiLCJhIGRlZmVjdCBleGNlcHQiLCJkZWZlY3QgZXhjZXB0IHByb3ZlbiIsImV4Y2VwdCBwcm92ZW4gdGhhdCIsInByb3ZlbiB0aGF0IGl0IiwidGhhdCBpdCByZXN1bHRzIiwiaXQgcmVzdWx0cyBvdXQiLCJyZXN1bHRzIG91dCBvZiIsIm91dCBvZiBzYWlkIiwib2Ygc2FpZCBwZXJzb24iLCJzYWlkIHBlcnNvbiBzIiwicGVyc29uIHMgaW1tZWRpYXRlIiwicyBpbW1lZGlhdGUgZmF1bHQiLCJpbW1lZGlhdGUgZmF1bHQgd2hlbiIsImZhdWx0IHdoZW4gdXNpbmciLCJ3aGVuIHVzaW5nIHRoZSIsInVzaW5nIHRoZSB3b3JrIiwid29yayBhcyBpbnRlbmRlZCIsInRoZSBtaXJvcyBsaWNlbmNlIGNvcHlyaWdodCIsIm1pcm9zIGxpY2VuY2UgY29weXJpZ2h0IHllYXIiLCJsaWNlbmNlIGNvcHlyaWdodCB5ZWFyIG5hbWUiLCJjb3B5cmlnaHQgeWVhciBuYW1lIGVtYWlsIiwieWVhciBuYW1lIGVtYWlsIHByb3ZpZGVkIiwibmFtZSBlbWFpbCBwcm92aWRlZCB0aGF0IiwiZW1haWwgcHJvdmlkZWQgdGhhdCB0aGVzZSIsInByb3ZpZGVkIHRoYXQgdGhlc2UgdGVybXMiLCJ0aGF0IHRoZXNlIHRlcm1zIGFuZCIsInRoZXNlIHRlcm1zIGFuZCBkaXNjbGFpbWVyIiwidGVybXMgYW5kIGRpc2NsYWltZXIgYW5kIiwiYW5kIGRpc2NsYWltZXIgYW5kIGFsbCIsImRpc2NsYWltZXIgYW5kIGFsbCBjb3B5cmlnaHQiLCJhbmQgYWxsIGNvcHlyaWdodCBub3RpY2VzIiwibm90aWNlcyBhcmUgcmV0YWluZWQgb3IiLCJhcmUgcmV0YWluZWQgb3IgcmVwcm9kdWNlZCIsInJldGFpbmVkIG9yIHJlcHJvZHVjZWQgaW4iLCJvciByZXByb2R1Y2VkIGluIGFuIiwicmVwcm9kdWNlZCBpbiBhbiBhY2NvbXBhbnlpbmciLCJpbiBhbiBhY2NvbXBhbnlpbmcgZG9jdW1lbnQiLCJhbiBhY2NvbXBhbnlpbmcgZG9jdW1lbnQgcGVybWlzc2lvbiIsImFjY29tcGFueWluZyBkb2N1bWVudCBwZXJtaXNzaW9uIGlzIiwiZG9jdW1lbnQgcGVybWlzc2lvbiBpcyBncmFudGVkIiwiaXMgZ3JhbnRlZCB0byBkZWFsIiwiZ3JhbnRlZCB0byBkZWFsIGluIiwidG8gZGVhbCBpbiB0aGlzIiwiZGVhbCBpbiB0aGlzIHdvcmsiLCJpbiB0aGlzIHdvcmsgd2l0aG91dCIsInRoaXMgd29yayB3aXRob3V0IHJlc3RyaWN0aW9uIiwid2l0aG91dCByZXN0cmljdGlvbiBpbmNsdWRpbmcgdW5saW1pdGVkIiwicmVzdHJpY3Rpb24gaW5jbHVkaW5nIHVubGltaXRlZCByaWdodHMiLCJpbmNsdWRpbmcgdW5saW1pdGVkIHJpZ2h0cyB0byIsInVubGltaXRlZCByaWdodHMgdG8gdXNlIiwicmlnaHRzIHRvIHVzZSBwdWJsaWNseSIsInRvIHVzZSBwdWJsaWNseSBwZXJmb3JtIiwidXNlIHB1YmxpY2x5IHBlcmZvcm0gZGlzdHJpYnV0ZSIsInB1YmxpY2x5IHBlcmZvcm0gZGlzdHJpYnV0ZSBzZWxsIiwicGVyZm9ybSBkaXN0cmlidXRlIHNlbGwgbW9kaWZ5IiwiZGlzdHJpYnV0ZSBzZWxsIG1vZGlmeSBtZXJnZSIsInNlbGwgbW9kaWZ5IG1lcmdlIGdpdmUiLCJtb2RpZnkgbWVyZ2UgZ2l2ZSBhd2F5IiwibWVyZ2UgZ2l2ZSBhd2F5IG9yIiwiZ2l2ZSBhd2F5IG9yIHN1YmxpY2VuY2UiLCJhd2F5IG9yIHN1YmxpY2VuY2UgdGhpcyIsIm9yIHN1YmxpY2VuY2UgdGhpcyB3b3JrIiwic3VibGljZW5jZSB0aGlzIHdvcmsgaXMiLCJraW5kIHRvIHRoZSB1dG1vc3QiLCJ0byB0aGUgdXRtb3N0IGV4dGVudCIsInRoZSB1dG1vc3QgZXh0ZW50IHBlcm1pdHRlZCIsInV0bW9zdCBleHRlbnQgcGVybWl0dGVkIGJ5IiwiYXBwbGljYWJsZSBsYXcgbmVpdGhlciBleHByZXNzIiwibGF3IG5laXRoZXIgZXhwcmVzcyBub3IiLCJuZWl0aGVyIGV4cHJlc3Mgbm9yIGltcGxpZWQiLCJleHByZXNzIG5vciBpbXBsaWVkIHdpdGhvdXQiLCJub3IgaW1wbGllZCB3aXRob3V0IG1hbGljaW91cyIsImltcGxpZWQgd2l0aG91dCBtYWxpY2lvdXMgaW50ZW50Iiwid2l0aG91dCBtYWxpY2lvdXMgaW50ZW50IG9yIiwibWFsaWNpb3VzIGludGVudCBvciBncm9zcyIsImludGVudCBvciBncm9zcyBuZWdsaWdlbmNlIiwib3IgZ3Jvc3MgbmVnbGlnZW5jZSBpbiIsImdyb3NzIG5lZ2xpZ2VuY2UgaW4gbm8iLCJuZWdsaWdlbmNlIGluIG5vIGV2ZW50IiwiaW4gbm8gZXZlbnQgbWF5Iiwibm8gZXZlbnQgbWF5IGEiLCJldmVudCBtYXkgYSBsaWNlbnNvciIsIm1heSBhIGxpY2Vuc29yIGF1dGhvciIsImEgbGljZW5zb3IgYXV0aG9yIG9yIiwibGljZW5zb3IgYXV0aG9yIG9yIGNvbnRyaWJ1dG9yIiwiYXV0aG9yIG9yIGNvbnRyaWJ1dG9yIGJlIiwib3IgY29udHJpYnV0b3IgYmUgaGVsZCIsImNvbnRyaWJ1dG9yIGJlIGhlbGQgbGlhYmxlIiwiaGVsZCBsaWFibGUgZm9yIGluZGlyZWN0IiwibGlhYmxlIGZvciBpbmRpcmVjdCBkaXJlY3QiLCJmb3IgaW5kaXJlY3QgZGlyZWN0IG90aGVyIiwiaW5kaXJlY3QgZGlyZWN0IG90aGVyIGRhbWFnZSIsImRpcmVjdCBvdGhlciBkYW1hZ2UgbG9zcyIsIm90aGVyIGRhbWFnZSBsb3NzIG9yIiwiZGFtYWdlIGxvc3Mgb3Igb3RoZXIiLCJsb3NzIG9yIG90aGVyIGlzc3VlcyIsIm9yIG90aGVyIGlzc3VlcyBhcmlzaW5nIiwib3RoZXIgaXNzdWVzIGFyaXNpbmcgaW4iLCJpc3N1ZXMgYXJpc2luZyBpbiBhbnkiLCJ3YXkgb3V0IG9mIGRlYWxpbmciLCJvdXQgb2YgZGVhbGluZyBpbiIsIm9mIGRlYWxpbmcgaW4gdGhlIiwiZGVhbGluZyBpbiB0aGUgd29yayIsImluIHRoZSB3b3JrIGV2ZW4iLCJ3b3JrIGV2ZW4gaWYgYWR2aXNlZCIsInN1Y2ggZGFtYWdlIG9yIGV4aXN0ZW5jZSIsImRhbWFnZSBvciBleGlzdGVuY2Ugb2YiLCJvciBleGlzdGVuY2Ugb2YgYSIsImV4aXN0ZW5jZSBvZiBhIGRlZmVjdCIsIm9mIGEgZGVmZWN0IGV4Y2VwdCIsImEgZGVmZWN0IGV4Y2VwdCBwcm92ZW4iLCJkZWZlY3QgZXhjZXB0IHByb3ZlbiB0aGF0IiwiZXhjZXB0IHByb3ZlbiB0aGF0IGl0IiwicHJvdmVuIHRoYXQgaXQgcmVzdWx0cyIsInRoYXQgaXQgcmVzdWx0cyBvdXQiLCJpdCByZXN1bHRzIG91dCBvZiIsInJlc3VsdHMgb3V0IG9mIHNhaWQiLCJvdXQgb2Ygc2FpZCBwZXJzb24iLCJvZiBzYWlkIHBlcnNvbiBzIiwic2FpZCBwZXJzb24gcyBpbW1lZGlhdGUiLCJwZXJzb24gcyBpbW1lZGlhdGUgZmF1bHQiLCJzIGltbWVkaWF0ZSBmYXVsdCB3aGVuIiwiaW1tZWRpYXRlIGZhdWx0IHdoZW4gdXNpbmciLCJmYXVsdCB3aGVuIHVzaW5nIHRoZSIsIndoZW4gdXNpbmcgdGhlIHdvcmsiLCJ1c2luZyB0aGUgd29yayBhcyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJNT1RPU09UTyBPUEVOIFNPVVJDRSBMSUNFTlNFIC0gVmVyc2lvbiAwLjkuMVxuXG5UaGlzIE1vdG9zb3RvIE9wZW4gU291cmNlIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIikgYXBwbGllcyB0byBcIkNvbW11bml0eSBQb3J0YWwgU2VydmVyXCIgYW5kIHJlbGF0ZWQgc29mdHdhcmUgcHJvZHVjdHMgYXMgd2VsbCBhcyBhbnkgdXBkYXRlc29yIG1haW50ZW5hbmNlIHJlbGVhc2VzIG9mIHRoYXQgc29mdHdhcmUgKFwiTW90b3NvdG8gUHJvZHVjdHNcIikgdGhhdCBhcmUgZGlzdHJpYnV0ZWQgYnkgTW90b3NvdG8uQ29tIEIuVi4gKFwiTGljZW5zb3JcIikuIEFueSBNb3Rvc290byBQcm9kdWN0IGxpY2Vuc2VkIHB1cnN1YW50IHRvIHRoaXMgTGljZW5zZSBpcyBhIFwiTGljZW5zZWQgUHJvZHVjdC5cIiBMaWNlbnNlZCBQcm9kdWN0LCBpbiBpdHMgZW50aXJldHksIGlzIHByb3RlY3RlZCBieSBEdXRjaCBjb3B5cmlnaHQgbGF3LiBUaGlzIExpY2Vuc2UgaWRlbnRpZmllcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggeW91IG1heSB1c2UsIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IExpY2Vuc2VkIFByb2R1Y3QgYW5kIGhhcyBiZWVuIHN1Ym1pdHRlZCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBJbml0aWF0aXZlIChPU0kpIGZvciBhcHByb3ZhbC4gUHJlYW1ibGVcblxuVGhpcyBQcmVhbWJsZSBpcyBpbnRlbmRlZCB0byBkZXNjcmliZSwgaW4gcGxhaW4gRW5nbGlzaCwgdGhlIG5hdHVyZSBhbmQgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCB0aGlzIFByZWFtYmxlIGlzIG5vdCBhIHBhcnQgb2YgdGhpcyBsaWNlbnNlLiBUaGUgbGVnYWwgZWZmZWN0IG9mIHRoaXMgTGljZW5zZSBpcyBkZXBlbmRlbnQgb25seSB1cG9uIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZSBhbmQgbm90IHRoaXMgUHJlYW1ibGUuIFRoaXMgTGljZW5zZSBjb21wbGllcyB3aXRoIHRoZSBPcGVuIFNvdXJjZSBEZWZpbml0aW9uIGFuZCBoYXMgYmVlbiBhcHByb3ZlZCBieSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGJlIG1hcmtlZCBhcyBcIk9TSSBDZXJ0aWZpZWQgT3BlbiBTb3VyY2UgU29mdHdhcmUuXCJcblxuVGhpcyBMaWNlbnNlIHByb3ZpZGVzIHRoYXQ6XG5cbiAgIDEuIFlvdSBtYXkgdXNlLCBzZWxsIG9yIGdpdmUgYXdheSB0aGUgTGljZW5zZWQgUHJvZHVjdCwgYWxvbmUgb3IgYXMgYSBjb21wb25lbnQgb2YgYW4gYWdncmVnYXRlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBjb250YWluaW5nIHByb2dyYW1zIGZyb20gc2V2ZXJhbCBkaWZmZXJlbnQgc291cmNlcy4gTm8gcm95YWx0eSBvciBvdGhlciBmZWUgaXMgcmVxdWlyZWQuXG5cbiAgIDIuIEJvdGggU291cmNlIENvZGUgYW5kIGV4ZWN1dGFibGUgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGluY2x1ZGluZyBNb2RpZmljYXRpb25zIG1hZGUgYnkgcHJldmlvdXMgQ29udHJpYnV0b3JzLCBhcmUgYXZhaWxhYmxlIGZvciB5b3VyIHVzZS4gKFRoZSB0ZXJtcyBcIkxpY2Vuc2VkIFByb2R1Y3QsXCIgXCJNb2RpZmljYXRpb25zLFwiIFwiQ29udHJpYnV0b3JzXCIgYW5kIFwiU291cmNlIENvZGVcIiBhcmUgZGVmaW5lZCBpbiB0aGUgTGljZW5zZS4pXG5cbiAgIDMuIFlvdSBhcmUgYWxsb3dlZCB0byBtYWtlIE1vZGlmaWNhdGlvbnMgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGFuZCB5b3UgY2FuIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGZyb20gaXQuIChUaGUgdGVybSBcIkRlcml2YXRpdmUgV29ya3NcIiBpcyBkZWZpbmVkIGluIHRoZSBMaWNlbnNlLilcblxuICAgNC4gQnkgYWNjZXB0aW5nIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHVuZGVyIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5zZSwgeW91IGFncmVlIHRoYXQgYW55IE1vZGlmaWNhdGlvbnMgeW91IG1ha2UgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QgYW5kIHRoZW4gZGlzdHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlLiBJbiBwYXJ0aWN1bGFyLCB5b3UgbXVzdCBtYWtlIHRoZSBTb3VyY2UgQ29kZSBvZiB5b3VyIE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIHRvIG90aGVycy5cblxuICAgNS4gWW91IG1heSB1c2UgdGhlIExpY2Vuc2VkIFByb2R1Y3QgZm9yIGFueSBwdXJwb3NlLCBidXQgdGhlIExpY2Vuc29yIGlzIG5vdCBwcm92aWRpbmcgeW91IGFueSB3YXJyYW50eSB3aGF0c29ldmVyLCBub3IgaXMgdGhlIExpY2Vuc29yIGFjY2VwdGluZyBhbnkgbGlhYmlsaXR5IGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNlZCBQcm9kdWN0IGRvZXNuJ3Qgd29yayBwcm9wZXJseSBvciBjYXVzZXMgeW91IGFueSBpbmp1cnkgb3IgZGFtYWdlcy5cblxuICAgNi4gSWYgeW91IHN1YmxpY2Vuc2UgdGhlIExpY2Vuc2VkIFByb2R1Y3Qgb3IgRGVyaXZhdGl2ZSBXb3JrcywgeW91IG1heSBjaGFyZ2UgZmVlcyBmb3Igd2FycmFudHkgb3Igc3VwcG9ydCwgb3IgZm9yIGFjY2VwdGluZyBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIHlvdXIgY3VzdG9tZXJzLiBZb3UgY2Fubm90IGNoYXJnZSBmb3IgdGhlIFNvdXJjZSBDb2RlLlxuXG4gICA3LiBJZiB5b3UgYXNzZXJ0IGFueSBwYXRlbnQgY2xhaW1zIGFnYWluc3QgdGhlIExpY2Vuc29yIHJlbGF0aW5nIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBvciBpZiB5b3UgYnJlYWNoIGFueSB0ZXJtcyBvZiB0aGUgTGljZW5zZSwgeW91ciByaWdodHMgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QgdW5kZXIgdGhpcyBMaWNlbnNlIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlLlxuXG5Zb3UgbWF5IHVzZSB0aGlzIExpY2Vuc2UgdG8gZGlzdHJpYnV0ZSB5b3VyIG93biBEZXJpdmF0aXZlIFdvcmtzLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5zZSB3aWxsIGFwcGx5IHRvIHlvdXIgRGVyaXZhdGl2ZSBXb3JrcyBqdXN0IGFzIHRoZXkgZG8gdG8gdGhlIG9yaWdpbmFsIExpY2Vuc2VkIFByb2R1Y3QuXG5cbkFsdGVybmF0aXZlbHksIHlvdSBtYXkgZGlzdHJpYnV0ZSB5b3VyIERlcml2YXRpdmUgV29ya3MgdW5kZXIgYW55IG90aGVyIE9TSS1hcHByb3ZlZCBPcGVuIFNvdXJjZSBsaWNlbnNlLCBvciB1bmRlciBhIHByb3ByaWV0YXJ5IGxpY2Vuc2Ugb2YgeW91ciBjaG9pY2UuIElmIHlvdSB1c2UgYW55IGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHlvdSBtdXN0IGNvbnRpbnVlIHRvIGZ1bGZpbGwgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyB0aGUgcHJvdmlzaW9ucyByZWxhdGluZyB0byBwdWJsaXNoaW5nIHRoZSBTb3VyY2UgQ29kZSkgZm9yIHRob3NlIHBvcnRpb25zIG9mIHlvdXIgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGNvbnNpc3Qgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGluY2x1ZGluZyB0aGUgZmlsZXMgY29udGFpbmluZyBNb2RpZmljYXRpb25zLlxuXG5OZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIG1heSBiZSBwdWJsaXNoZWQgZnJvbSB0aW1lIHRvIHRpbWUuIFlvdSBtYXkgY2hvb3NlIHRvIGNvbnRpbnVlIHRvIHVzZSB0aGUgbGljZW5zZSB0ZXJtcyBpbiB0aGlzIHZlcnNpb24gb2YgdGhlIExpY2Vuc2Ugb3IgdGhvc2UgZnJvbSB0aGUgbmV3IHZlcnNpb24uIEhvd2V2ZXIsIG9ubHkgdGhlIExpY2Vuc29yIGhhcyB0aGUgcmlnaHQgdG8gY2hhbmdlIHRoZSBMaWNlbnNlIHRlcm1zIGFzIHRoZXkgYXBwbHkgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QuIFRoaXMgTGljZW5zZSByZWxpZXMgb24gcHJlY2lzZSBkZWZpbml0aW9ucyBmb3IgY2VydGFpbiB0ZXJtcy4gVGhvc2UgdGVybXMgYXJlIGRlZmluZWQgd2hlbiB0aGV5IGFyZSBmaXJzdCB1c2VkLCBhbmQgdGhlIGRlZmluaXRpb25zIGFyZSByZXBlYXRlZCBmb3IgeW91ciBjb252ZW5pZW5jZSBpbiBhIEdsb3NzYXJ5IGF0IHRoZSBlbmQgb2YgdGhlIExpY2Vuc2UuXG5cbkxpY2Vuc2UgVGVybXNcblxuICAgMS4gR3JhbnQgb2YgTGljZW5zZSBGcm9tIExpY2Vuc29yLlxuXG4gICBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIHlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRvIGRvIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEuIFVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgTGljZW5zZWQgUHJvZHVjdCBvciBwb3J0aW9ucyB0aGVyZW9mIChpbmNsdWRpbmcgTW9kaWZpY2F0aW9ucyBhcyBoZXJlaW5hZnRlciBkZWZpbmVkKSwgaW4gYm90aCBTb3VyY2UgQ29kZSBvciBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0uIFwiU291cmNlIENvZGVcIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgY29udGFpbmVkIHRoZXJlaW4sIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLCBvciBhIGxpc3Qgb2YgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LlxuXG4gICAgICBiLiBDcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyAoYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgdW5kZXIgRHV0Y2ggY29weXJpZ2h0IGxhdykgb2YgTGljZW5zZWQgUHJvZHVjdCBieSBhZGRpbmcgdG8gb3IgZGVsZXRpbmcgZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBzYWlkIExpY2Vuc2VkIFByb2R1Y3QuXG5cbiAgICAgIGMuIFVuZGVyIGNsYWltcyBvZiBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTGljZW5zZWQgUHJvZHVjdCBvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBjbGFpbSBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIHlvdSB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBMaWNlbnNlZCBQcm9kdWN0IG9yIHBvcnRpb25zIHRoZXJlb2Ygb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLlxuXG4gICAyLiBHcmFudCBvZiBMaWNlbnNlIHRvIE1vZGlmaWNhdGlvbnMgRnJvbSBDb250cmlidXRvci5cblxuICAgXCJNb2RpZmljYXRpb25zXCIgbWVhbnMgYW55IGFkZGl0aW9ucyB0byBvciBkZWxldGlvbnMgZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiAoaSkgYSBmaWxlIGNvbnRhaW5pbmcgTGljZW5zZWQgUHJvZHVjdCwgb3IgKGlpKSBhbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBMaWNlbnNlZCBQcm9kdWN0LiBIZXJlaW5hZnRlciBpbiB0aGlzIExpY2Vuc2UsIHRoZSB0ZXJtIFwiTGljZW5zZWQgUHJvZHVjdFwiIHNoYWxsIGluY2x1ZGUgYWxsIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgcmVjZWl2ZSBmcm9tIGFueSBDb250cmlidXRvci4gQnkgYXBwbGljYXRpb24gb2YgdGhlIHByb3Zpc2lvbnMgaW4gU2VjdGlvbiA0KGEpIGJlbG93LCBlYWNoIHBlcnNvbiBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgb3IgY29udHJpYnV0ZWQgdG8gdGhlIGNyZWF0aW9uIG9mLCBhbmQgZGlzdHJpYnV0ZWQsIGEgTW9kaWZpY2F0aW9uIChhIFwiQ29udHJpYnV0b3JcIikgaGVyZWJ5IGdyYW50cyB5b3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCB0byBkbyB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhLiBVc2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIGFueSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbiBib3RoIFNvdXJjZSBDb2RlIG9yIGFzIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSwgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMgb3IgYXMgcGFydCBvZiBEZXJpdmF0aXZlIFdvcmtzLlxuXG4gICAgICBiLiBVbmRlciBjbGFpbXMgb2YgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIE1vZGlmaWNhdGlvbnMgb3IgcG9ydGlvbnMgdGhlcmVvZiwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggY2xhaW0gaXMgbmVjZXNzYXJ5IHRvIGVuYWJsZSB5b3UgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTW9kaWZpY2F0aW9ucyBvciBwb3J0aW9ucyB0aGVyZW9mIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi5cblxuICAgMy4gRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuXG5cbiAgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHNlcGFyYXRlIGZyb20gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGZvciBjb2RlIHRoYXQgeW91IGRlbGV0ZSBmcm9tIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBvciBmb3IgY29tYmluYXRpb25zIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2VkIFByb2R1Y3QuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgY29kZSB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS5cblxuICAgNC4gWW91ciBPYmxpZ2F0aW9ucyBSZWdhcmRpbmcgRGlzdHJpYnV0aW9uLlxuXG4gICAgICBhLiBBcHBsaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UgdG8gWW91ciBNb2RpZmljYXRpb25zLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgeW91ciB1c2Ugb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QsIHlvdSBoZXJlYnkgYWdyZWUgdGhhdCBhbnkgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUsIGFuZCB3aGljaCB5b3UgZGlzdHJpYnV0ZSwgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIFNlY3Rpb24gMi4gQW55IE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgY3JlYXRlIG9yIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA3LiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBNb2RpZmljYXRpb25zIHlvdSBkaXN0cmlidXRlLiBZb3UgYWdyZWUgbm90IHRvIG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIG9yIGV4ZWN1dGFibGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCBvciBNb2RpZmljYXRpb25zIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIHlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0KGUpLlxuXG4gICAgICBiLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIFlvdSBtdXN0IG1ha2UgYXZhaWxhYmxlLCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgU291cmNlIENvZGUgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QgYW5kIGFueSBNb2RpZmljYXRpb25zIHRoYXQgeW91IGRpc3RyaWJ1dGUsIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyB5b3UgZGlzdHJpYnV0ZSBhbnkgZXhlY3V0YWJsZSBvciBvdGhlciBmb3JtIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBvciB2aWEgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEgKGFuIFwiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtXCIpLiBUaGUgU291cmNlIENvZGUgZm9yIGFueSB2ZXJzaW9uIG9mIExpY2Vuc2VkIFByb2R1Y3Qgb3IgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBkaXN0cmlidXRlIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiBzYWlkIExpY2Vuc2VkIFByb2R1Y3Qgb3IgTW9kaWZpY2F0aW9ucyBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZS4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LlxuXG4gICAgICBjLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiBZb3UgbXVzdCBjYXVzZSBhbnkgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUsIGFuZCB3aGljaCB5b3UgZGlzdHJpYnV0ZSwgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGFkZGl0aW9ucywgY2hhbmdlcyBvciBkZWxldGlvbnMgeW91IG1hZGUgdG8gY3JlYXRlIG9yIGNvbnRyaWJ1dGUgdG8gdGhvc2UgTW9kaWZpY2F0aW9ucywgYW5kIHRoZSBkYXRlcyBvZiBhbnkgc3VjaCBhZGRpdGlvbnMsIGNoYW5nZXMgb3IgZGVsZXRpb25zLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb25zIGFyZSBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGFuZCBpbmNsdWRlIHRoZSBuYW1lcyBvZiB0aGUgTGljZW5zb3IgYW5kIGFueSBDb250cmlidXRvciB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCBpbiAoaSkgdGhlIFNvdXJjZSBDb2RlIGFuZCAoaWkpIGluIGFueSBub3RpY2UgZGlzcGxheWVkIGJ5IGEgdmVyc2lvbiBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCB5b3UgZGlzdHJpYnV0ZSBvciBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggeW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LiBZb3UgbWF5IG5vdCBtb2RpZnkgb3IgZGVsZXRlIGFueSBwcmVleGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgTGljZW5zZWQgUHJvZHVjdC5cblxuICAgICAgZC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuXG5cbiAgICAgICAgIGkuIFRoaXJkIFBhcnR5IENsYWltcy4gSWYgeW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHRvIGEgdGhpcmQgcGFydHkncyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSwgeW91IG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkIFwiTEVHQUxcIiB0aGF0IGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciB5b3UgbWFrZSBhbnkgTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNChiKSwgeW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIHlvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGZyb20geW91IHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC5cblxuICAgICAgICAgaWkuIENvbnRyaWJ1dG9yIEFQSXMuIElmIHlvdXIgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSAoXCJBUElcIikgYW5kIHlvdSBoYXZlIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgdGhhdCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS5cblxuICAgICAgICAgaWlpLiBSZXByZXNlbnRhdGlvbnMuIFlvdSByZXByZXNlbnQgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byA0KGQpKGkpIGFib3ZlLCB5b3UgYmVsaWV2ZSB0aGF0IGFueSBNb2RpZmljYXRpb25zIHlvdSBkaXN0cmlidXRlIGFyZSB5b3VyIG9yaWdpbmFsIGNyZWF0aW9ucyBhbmQgdGhhdCB5b3UgaGF2ZSBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgZS4gUmVxdWlyZWQgTm90aWNlcy4gWW91IG11c3QgZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiB5b3UgcHJvdmlkZSBhbG9uZyB3aXRoIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgTW9kaWZpY2F0aW9ucyB5b3UgY3JlYXRlIG9yIHRvIHdoaWNoIHlvdSBjb250cmlidXRlLCBhbmQgd2hpY2ggeW91IGRpc3RyaWJ1dGUsIHdoZXJldmVyIHlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gTGljZW5zZWQgUHJvZHVjdC4gWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgY29udGFpbmVkIGluIEV4aGliaXQgQSAodGhlIFwiTm90aWNlXCIpIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYW55IGNvcHkgeW91IGRpc3RyaWJ1dGUgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QuIElmIHlvdSBjcmVhdGVkIGEgTW9kaWZpY2F0aW9uLCB5b3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgTm90aWNlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHRoZSBOb3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIE5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIExpY2Vuc2VkIFByb2R1Y3QuIEhvd2V2ZXIsIHlvdSBtYXkgZG8gc28gb25seSBvbiB5b3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgeW91IGFsb25lLCBhbmQgeW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIExpY2Vuc29yIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgTGljZW5zb3Igb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyB5b3Ugb2ZmZXIuXG5cbiAgICAgIGYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiBZb3UgbWF5IGRpc3RyaWJ1dGUgTGljZW5zZWQgUHJvZHVjdCBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0gdW5kZXIgYSBsaWNlbnNlIG9mIHlvdXIgY2hvaWNlIHRoYXQgbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlIHByb3ZpZGVkIChpKSB5b3UgaGF2ZSBzYXRpc2ZpZWQgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9ucyA0KGEpIHRocm91Z2ggNChlKSBmb3IgdGhhdCBkaXN0cmlidXRpb24sIChpaSkgeW91IGluY2x1ZGUgYSBjb25zcGljdW91cyBub3RpY2UgaW4gdGhlIGV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFuZCBjb2xsYXRlcmFsIG1hdGVyaWFscyBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgeW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDQoYiksIChpaWkpIHlvdSByZXRhaW4gYWxsIGV4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBhbmQgKGl2KSB5b3UgbWFrZSBpdCBjbGVhciB0aGF0IGFueSB0ZXJtcyB0aGF0IGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSB5b3UgYWxvbmUsIG5vdCBieSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBMaWNlbnNvciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgTGljZW5zb3Igb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgdGVybXMgeW91IG9mZmVyLlxuXG4gICAgICBnLiBEaXN0cmlidXRpb24gb2YgRGVyaXZhdGl2ZSBXb3Jrcy4gWW91IG1heSBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyAoZS5nLiwgY29tYmluYXRpb25zIG9mIHNvbWUgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHdpdGggb3RoZXIgY29kZSkgYW5kIGRpc3RyaWJ1dGUgdGhlIERlcml2YXRpdmUgV29ya3MgYXMgcHJvZHVjdHMgdW5kZXIgYW55IG90aGVyIGxpY2Vuc2UgeW91IHNlbGVjdCwgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRob3NlIHBvcnRpb25zIG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgY29uc2lzdCBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCBvciBhbnkgTW9kaWZpY2F0aW9ucyB0aGVyZXRvLlxuXG4gICA1LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uXG5cbiAgIElmIGl0IGlzIGltcG9zc2libGUgZm9yIHlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uLCB0aGVuIHlvdSBtdXN0IChpKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgKGlpKSBjaXRlIHRoZSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24gdGhhdCBwcm9oaWJpdHMgeW91IGZyb20gYWRoZXJpbmcgdG8gdGhlIExpY2Vuc2UsIGFuZCAoaWlpKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gNChkKSwgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCBhdCBjb21wdXRlciBwcm9ncmFtbWluZyB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuXG5cbiAgIDYuIEFwcGxpY2F0aW9uIG9mIFRoaXMgTGljZW5zZS5cblxuICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCBMaWNlbnNvciBvciBDb250cmlidXRvciBoYXMgYXR0YWNoZWQgdGhlIE5vdGljZSBpbiBFeGhpYml0IEEsIHdoaWNoIGlzIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgdGhpcyByZWZlcmVuY2UuXG5cbiAgIDcuIFZlcnNpb25zIG9mIFRoaXMgTGljZW5zZS5cblxuICAgICAgYS4gVmVyc2lvbi4gVGhlIE1vdG9zb3RvIE9wZW4gU291cmNlIExpY2Vuc2UgaXMgZGVyaXZlZCBmcm9tIHRoZSBKYWJiZXIgT3BlbiBTb3VyY2UgTGljZW5zZS4gQWxsIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gYXBwbGljYWJsZSBsYXcgYW5kIHRoZSBsb2NhdGlvbiBvZiBjb3VydC5cblxuICAgICAgYi4gTmV3IFZlcnNpb25zLiBMaWNlbnNvciBtYXkgcHVibGlzaCBmcm9tIHRpbWUgdG8gdGltZSByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuXG5cbiAgICAgIGMuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIE9uY2UgTGljZW5zZWQgUHJvZHVjdCBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIHlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIExpY2Vuc2VkIFByb2R1Y3QgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IExpY2Vuc29yLiBObyBvbmUgb3RoZXIgdGhhbiBMaWMgZW5zb3IgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gTGljZW5zZWQgUHJvZHVjdCBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgZC4gRGVyaXZhdGl2ZSBXb3JrcyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHdoaWNoIHlvdSBtYXkgZG8gb25seSBpbiBvcmRlciB0byBhcHBseSBpdCB0byBzb2Z0d2FyZSB0aGF0IGlzIG5vdCBhbHJlYWR5IGEgTGljZW5zZWQgUHJvZHVjdCB1bmRlciB0aGlzIExpY2Vuc2UsIHlvdSBtdXN0IHJlbmFtZSB5b3VyIGxpY2Vuc2Ugc28gdGhhdCBpdCBpcyBub3QgY29uZnVzaW5nbHkgc2ltaWxhciB0byB0aGlzIExpY2Vuc2UsIGFuZCBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdCB5b3VyIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgdGhhdCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UuIEluIHNvIG5hbWluZyB5b3VyIGxpY2Vuc2UsIHlvdSBtYXkgbm90IHVzZSBhbnkgdHJhZGVtYXJrIG9mIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvci5cblxuICAgOC4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS5cblxuICAgTElDRU5TRUQgUFJPRFVDVCBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBMSUNFTlNFRCBQUk9EVUNUIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBMSUNFTlNFRCBQUk9EVUNUIElTIFdJVEggWU9VLiBTSE9VTEQgTElDRU5TRUQgUFJPRFVDVCBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoQU5EIE5PVCBUSEUgTElDRU5TT1IgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgTElDRU5TRUQgUFJPRFVDVCBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLlxuXG4gICA5LiBUZXJtaW5hdGlvbi5cblxuICAgICAgYS4gQXV0b21hdGljIFRlcm1pbmF0aW9uIFVwb24gQnJlYWNoLiBUaGlzIGxpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiB5b3UgZmFpbCB0byBjb21wbHkgd2l0aCB0aGUgdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHRoYXQgYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBsaWNlbnNlLiBQcm92aXNpb25zIHRoYXQsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBzaGFsbCBzdXJ2aXZlLlxuXG4gICAgICBiLiBUZXJtaW5hdGlvbiBVcG9uIEFzc2VydGlvbiBvZiBQYXRlbnQgSW5mcmluZ2VtZW50LiBJZiB5b3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBMaWNlbnNvciBvciBhIENvbnRyaWJ1dG9yIChMaWNlbnNvciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20geW91IGZpbGUgc3VjaCBhbiBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gaGVyZWluIGFzIFwiUmVzcG9uZGVudFwiKSBhbGxlZ2luZyB0aGF0IExpY2Vuc2VkIFByb2R1Y3QgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFJlc3BvbmRlbnQgdG8geW91IHVuZGVyIFNlY3Rpb25zIDEgb3IgMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIHByb3NwZWN0aXZlbHkgdXBvbiBzaXh0eSAoNjApIGRheXMgbm90aWNlIGZyb20gUmVzcG9uZGVudCAodGhlIFwiTm90aWNlIFBlcmlvZFwiKSB1bmxlc3Mgd2l0aGluIHRoYXQgTm90aWNlIFBlcmlvZCB5b3UgZWl0aGVyIGFncmVlIGluIHdyaXRpbmcgKGkpIHRvIHBheSBSZXNwb25kZW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibHkgcm95YWx0eSBmb3IgeW91ciBwYXN0IG9yIGZ1dHVyZSB1c2Ugb2YgTGljZW5zZWQgUHJvZHVjdCBtYWRlIGJ5IHN1Y2ggUmVzcG9uZGVudCwgb3IgKGlpKSB3aXRoZHJhdyB5b3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIExpY2Vuc2VkIFByb2R1Y3QgYWdhaW5zdCBzdWNoIFJlc3BvbmRlbnQuIElmIHdpdGhpbiBzYWlkIE5vdGljZSBQZXJpb2QgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieSBMaWNlbnNvciB0byB5b3UgdW5kZXIgU2VjdGlvbnMgMSBhbmQgMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiBzYWlkIE5vdGljZSBQZXJpb2QuXG5cbiAgICAgIGMuIFJlYXNvbmFibGUgVmFsdWUgb2YgVGhpcyBMaWNlbnNlLiBJZiB5b3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFJlc3BvbmRlbnQgYWxsZWdpbmcgdGhhdCBMaWNlbnNlZCBQcm9kdWN0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzYWlkIFJlc3BvbmRlbnQgdW5kZXIgU2VjdGlvbnMgMSBhbmQgMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLlxuXG4gICAgICBkLiBObyBSZXRyb2FjdGl2ZSBFZmZlY3Qgb2YgVGVybWluYXRpb24uIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA5KGEpIG9yIDkoYikgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBsaWNlbnNlcyB0byBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGUgcnMpIHRoYXQgaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSB5b3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLlxuXG4gICAxMC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuXG5cblVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFRIRSBMSUNFTlNPUiwgQU5ZIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgTElDRU5TRUQgUFJPRFVDVCwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFkiXSwibGljZW5zZUlkcyI6WyJNb3Rvc290byJdLCJrZXl3b3JkcyI6WyIwIDkgMSIsIjEgdGhpcyBtb3Rvc290byIsInRoaXMgbW90b3NvdG8gb3BlbiIsImFwcGxpZXMgdG8gY29tbXVuaXR5IiwidG8gY29tbXVuaXR5IHBvcnRhbCIsImNvbW11bml0eSBwb3J0YWwgc2VydmVyIiwicG9ydGFsIHNlcnZlciBhbmQiLCJzZXJ2ZXIgYW5kIHJlbGF0ZWQiLCJhcyBhbnkgdXBkYXRlc29yIiwiYW55IHVwZGF0ZXNvciBtYWludGVuYW5jZSIsInVwZGF0ZXNvciBtYWludGVuYW5jZSByZWxlYXNlcyIsInRoYXQgc29mdHdhcmUgbW90b3NvdG8iLCJzb2Z0d2FyZSBtb3Rvc290byBwcm9kdWN0cyIsIm1vdG9zb3RvIHByb2R1Y3RzIHRoYXQiLCJkaXN0cmlidXRlZCBieSBtb3Rvc290byIsImJ5IG1vdG9zb3RvIGNvbSIsIm1vdG9zb3RvIGNvbSBiIiwiY29tIGIgdiIsImIgdiBsaWNlbnNvciIsInYgbGljZW5zb3IgYW55IiwibGljZW5zb3IgYW55IG1vdG9zb3RvIiwiYW55IG1vdG9zb3RvIHByb2R1Y3QiLCJtb3Rvc290byBwcm9kdWN0IGxpY2Vuc2VkIiwicHJvdGVjdGVkIGJ5IGR1dGNoIiwiYnkgZHV0Y2ggY29weXJpZ2h0IiwicHJvZHVjdCBhbmQgaGFzIiwiaGFzIGJlZW4gc3VibWl0dGVkIiwiYmVlbiBzdWJtaXR0ZWQgdG8iLCJzdWJtaXR0ZWQgdG8gdGhlIiwib3BlbiBzb2Z0d2FyZSBpbml0aWF0aXZlIiwic29mdHdhcmUgaW5pdGlhdGl2ZSBvc2kiLCJpbml0aWF0aXZlIG9zaSBmb3IiLCJvc2kgZm9yIGFwcHJvdmFsIiwiZm9yIGFwcHJvdmFsIHByZWFtYmxlIiwiYXBwcm92YWwgcHJlYW1ibGUgdGhpcyIsImRlZmluaXRpb24gYW5kIGhhcyIsInNvdXJjZSBpbml0aWF0aXZlIHNvZnR3YXJlIiwiaW5pdGlhdGl2ZSBzb2Z0d2FyZSBkaXN0cmlidXRlZCIsIm1heSBiZSBtYXJrZWQiLCJtYXJrZWQgYXMgb3NpIiwiYXMgb3NpIGNlcnRpZmllZCIsInNvdXJjZSBzb2Z0d2FyZSB0aGlzIiwiaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMgYXMiLCJtb2RpZmljYXRpb25zIGFzIGhlcmVpbmFmdGVyIiwiYXMgaGVyZWluYWZ0ZXIgZGVmaW5lZCIsImhlcmVpbmFmdGVyIGRlZmluZWQgaW4iLCJkZWZpbmVkIGluIGJvdGgiLCJleGVjdXRhYmxlIHByb2dyYW0gc291cmNlIiwibGljZW5zZWQgcHJvZHVjdCBiIiwicHJvZHVjdCBiIGNyZWF0ZSIsImIgY3JlYXRlIGRlcml2YXRpdmUiLCJkZWZpbmVkIHVuZGVyIGR1dGNoIiwidW5kZXIgZHV0Y2ggY29weXJpZ2h0IiwibGljZW5zZWQgcHJvZHVjdCBieSIsInByb2R1Y3QgYnkgYWRkaW5nIiwibGljZW5zZWQgcHJvZHVjdCBjIiwicHJvZHVjdCBjIHVuZGVyIiwiYyB1bmRlciBjbGFpbXMiLCI0IGUgYiIsImUgYiBhdmFpbGFiaWxpdHkiLCJwYXJ0eSBjIGRlc2NyaXB0aW9uIiwiYyBkZXNjcmlwdGlvbiBvZiIsInlvdSBkaXN0cmlidXRlIHRvIiwiZGlzdHJpYnV0ZSB0byBjb250YWluIiwiY29udHJpYnV0ZSB0byB0aG9zZSIsInRvIHRob3NlIG1vZGlmaWNhdGlvbnMiLCJ0aG9zZSBtb2RpZmljYXRpb25zIGFuZCIsInByb2R1Y3QgYW5kIGluY2x1ZGUiLCJwcm9kdWN0IGluIGkiLCJkaXNwbGF5ZWQgYnkgYSIsInByb2R1Y3QgeW91IGRpc3RyaWJ1dGUiLCJwcm9kdWN0IHlvdSBtYXkiLCJkZWxldGUgYW55IHByZWV4aXN0aW5nIiwiYW55IHByZWV4aXN0aW5nIGNvcHlyaWdodCIsInByZWV4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIiwibGljZW5zZWQgcHJvZHVjdCBkIiwicHJvZHVjdCBkIGludGVsbGVjdHVhbCIsImQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IiwidG8gNCBkIiwiNCBkIGkiLCJkIGkgYWJvdmUiLCJsaWNlbnNlIGUgcmVxdWlyZWQiLCJlIHJlcXVpcmVkIG5vdGljZXMiLCJ0aHJvdWdoIDQgZSIsIjQgZSBmb3IiLCJlIGZvciB0aGF0IiwiNCBiIGlpaSIsImIgaWlpIHlvdSIsImlpaSB5b3UgcmV0YWluIiwicmV0YWluIGFsbCBleGlzdGluZyIsImFsbCBleGlzdGluZyBjb3B5cmlnaHQiLCJwcm9kdWN0IGFuZCBpdiIsImFuZCBpdiB5b3UiLCJpdiB5b3UgbWFrZSIsInlvdSBvZmZlciBnIiwib2ZmZXIgZyBkaXN0cmlidXRpb24iLCJnIGRpc3RyaWJ1dGlvbiBvZiIsImxpY2Vuc2UgYSB2ZXJzaW9uIiwiYSB2ZXJzaW9uIHRoZSIsInZlcnNpb24gdGhlIG1vdG9zb3RvIiwidGhlIG1vdG9zb3RvIG9wZW4iLCJzb3VyY2UgbGljZW5zZSBpcyIsInNvdXJjZSBsaWNlbnNlIGFsbCIsImxpY2Vuc2UgYWxsIGNoYW5nZXMiLCJhbGwgY2hhbmdlcyBhcmUiLCJjaGFuZ2VzIGFyZSByZWxhdGVkIiwiYXJlIHJlbGF0ZWQgdG8iLCJyZWxhdGVkIHRvIGFwcGxpY2FibGUiLCJsb2NhdGlvbiBvZiBjb3VydCIsIm9mIGNvdXJ0IGIiLCJjb3VydCBiIG5ldyIsImIgbmV3IHZlcnNpb25zIiwidGhlIGxpY2Vuc2UgYyIsImxpY2Vuc2UgYyBlZmZlY3QiLCJjIGVmZmVjdCBvZiIsIm90aGVyIHRoYW4gbGljIiwidGhhbiBsaWMgZW5zb3IiLCJsaWMgZW5zb3IgaGFzIiwiZW5zb3IgaGFzIHRoZSIsImxpY2Vuc2UgZCBkZXJpdmF0aXZlIiwiZCBkZXJpdmF0aXZlIHdvcmtzIiwiZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlIiwiYW5kIHJlc2VsbGUgcnMiLCJyZXNlbGxlIHJzIHRoYXQiLCJycyB0aGF0IGhhdmUiLCJ2ZXJzaW9uIDAgOSAxIiwiMCA5IDEgdGhpcyIsIjkgMSB0aGlzIG1vdG9zb3RvIiwiMSB0aGlzIG1vdG9zb3RvIG9wZW4iLCJ0aGlzIG1vdG9zb3RvIG9wZW4gc291cmNlIiwibGljZW5zZSBhcHBsaWVzIHRvIGNvbW11bml0eSIsImFwcGxpZXMgdG8gY29tbXVuaXR5IHBvcnRhbCIsInRvIGNvbW11bml0eSBwb3J0YWwgc2VydmVyIiwiY29tbXVuaXR5IHBvcnRhbCBzZXJ2ZXIgYW5kIiwicG9ydGFsIHNlcnZlciBhbmQgcmVsYXRlZCIsInNlcnZlciBhbmQgcmVsYXRlZCBzb2Z0d2FyZSIsIndlbGwgYXMgYW55IHVwZGF0ZXNvciIsImFzIGFueSB1cGRhdGVzb3IgbWFpbnRlbmFuY2UiLCJhbnkgdXBkYXRlc29yIG1haW50ZW5hbmNlIHJlbGVhc2VzIiwidXBkYXRlc29yIG1haW50ZW5hbmNlIHJlbGVhc2VzIG9mIiwib2YgdGhhdCBzb2Z0d2FyZSBtb3Rvc290byIsInRoYXQgc29mdHdhcmUgbW90b3NvdG8gcHJvZHVjdHMiLCJzb2Z0d2FyZSBtb3Rvc290byBwcm9kdWN0cyB0aGF0IiwibW90b3NvdG8gcHJvZHVjdHMgdGhhdCBhcmUiLCJhcmUgZGlzdHJpYnV0ZWQgYnkgbW90b3NvdG8iLCJkaXN0cmlidXRlZCBieSBtb3Rvc290byBjb20iLCJieSBtb3Rvc290byBjb20gYiIsIm1vdG9zb3RvIGNvbSBiIHYiLCJjb20gYiB2IGxpY2Vuc29yIiwiYiB2IGxpY2Vuc29yIGFueSIsInYgbGljZW5zb3IgYW55IG1vdG9zb3RvIiwibGljZW5zb3IgYW55IG1vdG9zb3RvIHByb2R1Y3QiLCJhbnkgbW90b3NvdG8gcHJvZHVjdCBsaWNlbnNlZCIsIm1vdG9zb3RvIHByb2R1Y3QgbGljZW5zZWQgcHVyc3VhbnQiLCJpcyBwcm90ZWN0ZWQgYnkgZHV0Y2giLCJwcm90ZWN0ZWQgYnkgZHV0Y2ggY29weXJpZ2h0IiwiYnkgZHV0Y2ggY29weXJpZ2h0IGxhdyIsImR1dGNoIGNvcHlyaWdodCBsYXcgdGhpcyIsIm1vZGlmeSBsaWNlbnNlZCBwcm9kdWN0IGFuZCIsImxpY2Vuc2VkIHByb2R1Y3QgYW5kIGhhcyIsInByb2R1Y3QgYW5kIGhhcyBiZWVuIiwiYW5kIGhhcyBiZWVuIHN1Ym1pdHRlZCIsImhhcyBiZWVuIHN1Ym1pdHRlZCB0byIsImJlZW4gc3VibWl0dGVkIHRvIHRoZSIsInN1Ym1pdHRlZCB0byB0aGUgb3BlbiIsInRvIHRoZSBvcGVuIHNvZnR3YXJlIiwidGhlIG9wZW4gc29mdHdhcmUgaW5pdGlhdGl2ZSIsIm9wZW4gc29mdHdhcmUgaW5pdGlhdGl2ZSBvc2kiLCJzb2Z0d2FyZSBpbml0aWF0aXZlIG9zaSBmb3IiLCJpbml0aWF0aXZlIG9zaSBmb3IgYXBwcm92YWwiLCJvc2kgZm9yIGFwcHJvdmFsIHByZWFtYmxlIiwiZm9yIGFwcHJvdmFsIHByZWFtYmxlIHRoaXMiLCJhcHByb3ZhbCBwcmVhbWJsZSB0aGlzIHByZWFtYmxlIiwic291cmNlIGRlZmluaXRpb24gYW5kIGhhcyIsImRlZmluaXRpb24gYW5kIGhhcyBiZWVuIiwiYW5kIGhhcyBiZWVuIGFwcHJvdmVkIiwib3BlbiBzb3VyY2UgaW5pdGlhdGl2ZSBzb2Z0d2FyZSIsInNvdXJjZSBpbml0aWF0aXZlIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIiwiaW5pdGlhdGl2ZSBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciIsInNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMiLCJsaWNlbnNlIG1heSBiZSBtYXJrZWQiLCJtYXkgYmUgbWFya2VkIGFzIiwiYmUgbWFya2VkIGFzIG9zaSIsIm1hcmtlZCBhcyBvc2kgY2VydGlmaWVkIiwiYXMgb3NpIGNlcnRpZmllZCBvcGVuIiwib3BlbiBzb3VyY2Ugc29mdHdhcmUgdGhpcyIsInNvdXJjZSBzb2Z0d2FyZSB0aGlzIGxpY2Vuc2UiLCJzb2Z0d2FyZSB0aGlzIGxpY2Vuc2UgcHJvdmlkZXMiLCJhbmQgZGlzdHJpYnV0ZSBsaWNlbnNlZCBwcm9kdWN0IiwiZGlzdHJpYnV0ZSBsaWNlbnNlZCBwcm9kdWN0IG9yIiwidGhlcmVvZiBpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucyBhcyIsImluY2x1ZGluZyBtb2RpZmljYXRpb25zIGFzIGhlcmVpbmFmdGVyIiwibW9kaWZpY2F0aW9ucyBhcyBoZXJlaW5hZnRlciBkZWZpbmVkIiwiYXMgaGVyZWluYWZ0ZXIgZGVmaW5lZCBpbiIsImhlcmVpbmFmdGVyIGRlZmluZWQgaW4gYm90aCIsImRlZmluZWQgaW4gYm90aCBzb3VyY2UiLCJhbiBleGVjdXRhYmxlIHByb2dyYW0gc291cmNlIiwiZXhlY3V0YWJsZSBwcm9ncmFtIHNvdXJjZSBjb2RlIiwicHJvZ3JhbSBzb3VyY2UgY29kZSBtZWFucyIsInRoZSBsaWNlbnNlZCBwcm9kdWN0IGIiXX0seyJsaWNlbnNlVGV4dHMiOlsi5pyo5YWw5a695p2+6K645Y+v6K+BLCDnrKwx54mIIOacqOWFsOWuveadvuiuuOWPr+ivge+8jCDnrKwx54mIXG5cbjIwMTnlubQ45pyIIGh0dHA6Ly9saWNlbnNlLmNvc2NsLm9yZy5jbi9NdWxhblBTTFxuXG7mgqjlr7lcIui9r+S7tlwi55qE5aSN5Yi244CB5L2/55So44CB5L+u5pS55Y+K5YiG5Y+R5Y+X5pyo5YWw5a695p2+6K645Y+v6K+B77yM56ysMeeJiO+8iFwi5pys6K645Y+v6K+BXCLvvInnmoTlpoLkuIvmnaHmrL7nmoTnuqbmnZ/vvJpcblxuICAgMC4g5a6a5LmJXG5cbiAgIFwi6L2v5Lu2XCLmmK/mjIfnlLFcIui0oeeMrlwi5p6E5oiQ55qE6K645Y+v5ZyoXCLmnKzorrjlj6/or4FcIuS4i+eahOeoi+W6j+WSjOebuOWFs+aWh+aho+eahOmbhuWQiOOAglxuXG4gICBcIui0oeeMruiAhVwi5piv5oyH5bCG5Y+X54mI5p2D5rOV5L+d5oqk55qE5L2c5ZOB6K645Y+v5ZyoXCLmnKzorrjlj6/or4FcIuS4i+eahOiHqueEtuS6uuaIllwi5rOV5Lq65a6e5L2TXCLjgIJcblxuICAgXCLms5Xkurrlrp7kvZNcIuaYr+aMh+aPkOS6pOi0oeeMrueahOacuuaehOWPiuWFtlwi5YWz6IGU5a6e5L2TXCLjgIJcblxuICAgXCLlhbPogZTlrp7kvZNcIuaYr+aMh++8jOWvuVwi5pys6K645Y+v6K+BXCLkuIvnmoTkuIDmlrnogIzoqIDvvIzmjqfliLbjgIHlj5fmjqfliLbmiJbkuI7lhbblhbHlkIzlj5fmjqfliLbnmoTmnLrmnoTvvIzmraTlpITnmoTmjqfliLbmmK/mjIfmnInlj5fmjqfmlrnmiJblhbHlkIzlj5fmjqfmlrnoh7PlsJE1MCXnm7TmjqXmiJbpl7TmjqXnmoTmipXnpajmnYPjgIHotYTph5HmiJblhbbku5bmnInku7for4HliLjjgIJcblxuICAgXCLotKHnjK5cIuaYr+aMh+eUseS7u+S4gFwi6LSh54yu6ICFXCLorrjlj6/lnKhcIuacrOiuuOWPr+ivgVwi5LiL55qE5Y+X54mI5p2D5rOV5L+d5oqk55qE5L2c5ZOB44CCXG5cbiAgIDEuIOaOiOS6iOeJiOadg+iuuOWPr1xuXG4gICDmr4/kuKpcIui0oeeMruiAhVwi5qC55o2uXCLmnKzorrjlj6/or4FcIuaOiOS6iOaCqOawuOS5heaAp+eahOOAgeWFqOeQg+aAp+eahOOAgeWFjei0ueeahOOAgemdnueLrOWNoOeahOOAgeS4jeWPr+aSpOmUgOeahOeJiOadg+iuuOWPr++8jOaCqOWPr+S7peWkjeWItuOAgeS9v+eUqOOAgeS/ruaUueOAgeWIhuWPkeWFtlwi6LSh54yuXCLvvIzkuI3orrrkv67mlLnkuI7lkKbjgIJcblxuICAgMi4g5o6I5LqI5LiT5Yip6K645Y+vXG5cbiAgIOavj+S4qlwi6LSh54yu6ICFXCLmoLnmja5cIuacrOiuuOWPr+ivgVwi5o6I5LqI5oKo5rC45LmF5oCn55qE44CB5YWo55CD5oCn55qE44CB5YWN6LS555qE44CB6Z2e54us5Y2g55qE44CB5LiN5Y+v5pKk6ZSA55qE77yI5qC55o2u5pys5p2h6KeE5a6a5pKk6ZSA6Zmk5aSW77yJ5LiT5Yip6K645Y+v77yM5L6b5oKo5Yi26YCg44CB5aeU5omY5Yi26YCg44CB5L2/55So44CB6K646K+66ZSA5ZSu44CB6ZSA5ZSu44CB6L+b5Y+j5YW2XCLotKHnjK5cIuaIluS7peWFtuS7luaWueW8j+i9rOenu+WFtlwi6LSh54yuXCLjgILliY3ov7DkuJPliKnorrjlj6/ku4XpmZDkuo5cIui0oeeMruiAhVwi546w5Zyo5oiW5bCG5p2l5oul5pyJ5oiW5o6n5Yi255qE5YW2XCLotKHnjK5cIuacrOi6q+aIluWFtlwi6LSh54yuXCLkuI7orrjlj69cIui0oeeMrlwi5pe255qEXCLova/ku7ZcIue7k+WQiOiAjOWwhuW/heeEtuS8muS+teeKr+eahOS4k+WIqeadg+WIqeimgeaxgu+8jOS4jeWMheaLrOS7heWboOaCqOaIluS7luS6uuS/ruaUuVwi6LSh54yuXCLmiJblhbbku5bnu5PlkIjogIzlsIblv4XnhLbkvJrkvrXniq/liLDnmoTkuJPliKnmnYPliKnopoHmsYLjgILlpoLmgqjmiJbmgqjnmoRcIuWFs+iBlOWunuS9k1wi55u05o6l5oiW6Ze05o6l5Zyw77yI5YyF5ous6YCa6L+H5Luj55CG44CB5LiT5Yip6KKr6K645Y+v5Lq65oiW5Y+X6K6p5Lq677yJ77yM5bCxXCLova/ku7ZcIuaIluWFtuS4reeahFwi6LSh54yuXCLlr7nku7vkvZXkurrlj5HotbfkuJPliKnkvrXmnYPor4norrzvvIjljIXmi6zlj43or4nmiJbkuqTlj4nor4norrzvvInmiJblhbbku5bkuJPliKnnu7TmnYPooYzliqjvvIzmjIfmjqflhbbkvrXniq/kuJPliKnmnYPvvIzliJlcIuacrOiuuOWPr+ivgVwi5o6I5LqI5oKo5a+5XCLova/ku7ZcIueahOS4k+WIqeiuuOWPr+iHquaCqOaPkOi1t+ivieiuvOaIluWPkei1t+e7tOadg+ihjOWKqOS5i+aXpee7iOatouOAglxuXG4gICAzLiDml6DllYbmoIforrjlj69cblxuICAgXCLmnKzorrjlj6/or4FcIuS4jeaPkOS+m+WvuVwi6LSh54yu6ICFXCLnmoTllYblk4HlkI3np7DjgIHllYbmoIfjgIHmnI3liqHmoIflv5fmiJbkuqflk4HlkI3np7DnmoTllYbmoIforrjlj6/vvIzkvYbmgqjkuLrmu6HotrPnrKw05p2h6KeE5a6a55qE5aOw5piO5LmJ5Yqh6ICM5b+F6aG75L2/55So6Zmk5aSW44CCXG5cbiAgIDQuIOWIhuWPkemZkOWItlxuXG4gICDmgqjlj6/ku6XlnKjku7vkvZXlqpLku4vkuK3lsIZcIui9r+S7tlwi5Lul5rqQ56iL5bqP5b2i5byP5oiW5Y+v5omn6KGM5b2i5byP6YeN5paw5YiG5Y+R77yM5LiN6K665L+u5pS55LiO5ZCm77yM5L2G5oKo5b+F6aG75ZCR5o6l5pS26ICF5o+Q5L6bXCLmnKzorrjlj6/or4FcIueahOWJr+acrO+8jOW5tuS/neeVmVwi6L2v5Lu2XCLkuK3nmoTniYjmnYPjgIHllYbmoIfjgIHkuJPliKnlj4rlhY3otKPlo7DmmI7jgIJcblxuICAgNS4g5YWN6LSj5aOw5piO5LiO6LSj5Lu76ZmQ5Yi2XG5cbiAgIFwi6L2v5Lu2XCLlj4rlhbbkuK3nmoRcIui0oeeMrlwi5Zyo5o+Q5L6b5pe25LiN5bim5Lu75L2V5piO56S65oiW6buY56S655qE5ouF5L+d44CC5Zyo5Lu75L2V5oOF5Ya15LiL77yMXCLotKHnjK7ogIVcIuaIlueJiOadg+aJgOacieiAheS4jeWvueS7u+S9leS6uuWboOS9v+eUqFwi6L2v5Lu2XCLmiJblhbbkuK3nmoRcIui0oeeMrlwi6ICM5byV5Y+R55qE5Lu75L2V55u05o6l5oiW6Ze05o6l5o2f5aSx5om/5ouF6LSj5Lu777yM5LiN6K665Zug5L2V56eN5Y6f5Zug5a+86Ie05oiW6ICF5Z+65LqO5L2V56eN5rOV5b6L55CG6K66LOWNs+S9v+WFtuabvuiiq+W7uuiuruacieatpOenjeaNn+WkseeahOWPr+iDveaAp+OAglxuXG7mnaHmrL7nu5PmnZ9cblxu5aaC5L2V5bCG5pyo5YWw5a695p2+6K645Y+v6K+B77yM56ysMeeJiO+8jOW6lOeUqOWIsOaCqOeahOi9r+S7tlxuXG7lpoLmnpzmgqjluIzmnJvlsIbmnKjlhbDlrr3mnb7orrjlj6/or4HvvIznrKwx54mI77yM5bqU55So5Yiw5oKo55qE5paw6L2v5Lu277yM5Li65LqG5pa55L6/5o6l5pS26ICF5p+l6ZiF77yM5bu66K6u5oKo5a6M5oiQ5aaC5LiL5LiJ5q2l77yaXG5cbiAgIDHvvIwg6K+35oKo6KGl5YWF5aaC5LiL5aOw5piO5Lit55qE56m655m977yM5YyF5ous6L2v5Lu25ZCN44CB6L2v5Lu255qE6aaW5qyh5Y+R6KGo5bm05Lu95Lul5Y+K5oKo5L2c5Li654mI5p2D5Lq655qE5ZCN5a2X77ybXG5cbiAgIDLvvIwg6K+35oKo5Zyo6L2v5Lu25YyF55qE5LiA57qn55uu5b2V5LiL5Yib5bu65LulXCJMSUNFTlNFXCLkuLrlkI3nmoTmlofku7bvvIzlsIbmlbTkuKrorrjlj6/or4HmlofmnKzmlL7lhaXor6Xmlofku7bkuK3vvJtcblxuICAgM++8jCDor7flsIblpoLkuIvlo7DmmI7mlofmnKzmlL7lhaXmr4/kuKrmupDmlofku7bnmoTlpLTpg6jms6jph4rkuK3jgIJcblxuQ29weXJpZ2h0IChjKSBbMjAxOV0gW25hbWUgb2YgY29weXJpZ2h0IGhvbGRlcl1cblxuW1NvZnR3YXJlIE5hbWVdIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNdWxhbiBQU0wgdjEuXG5cbllvdSBjYW4gdXNlIHRoaXMgc29mdHdhcmUgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTXVsYW4gUFNMIHYxLlxuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgTXVsYW4gUFNMIHYxIGF0OlxuXG5odHRwOi8vbGljZW5zZS5jb3NjbC5vcmcuY24vTXVsYW5QU0xcblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cblxuU2VlIHRoZSBNdWxhbiBQU0wgdjEgZm9yIG1vcmUgZGV0YWlscy4gTXVsYW4gUGVybWlzc2l2ZSBTb2Z0d2FyZSBMaWNlbnNl77yMVmVyc2lvbiAxIE11bGFuIFBlcm1pc3NpdmUgU29mdHdhcmUgTGljZW5zZe+8jFZlcnNpb24gMSAoTXVsYW4gUFNMIHYxKVxuXG5BdWd1c3QgMjAxOSBodHRwOi8vbGljZW5zZS5jb3NjbC5vcmcuY24vTXVsYW5QU0xcblxuWW91ciByZXByb2R1Y3Rpb24sIHVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlIHNoYWxsIGJlIHN1YmplY3QgdG8gTXVsYW4gUFNMIHYxICh0aGlzIExpY2Vuc2UpIHdpdGggZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zOlxuXG4gICAwLiBEZWZpbml0aW9uXG5cbiAgIFNvZnR3YXJlIG1lYW5zIHRoZSBwcm9ncmFtIGFuZCByZWxhdGVkIGRvY3VtZW50cyB3aGljaCBhcmUgY29tcHJpc2VkIG9mIHRob3NlIENvbnRyaWJ1dGlvbiBhbmQgbGljZW5zZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICBDb250cmlidXRvciBtZWFucyB0aGUgSW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgd2hvIGxpY2Vuc2VzIGl0cyBjb3B5cmlnaHRhYmxlIHdvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICBMZWdhbCBFbnRpdHkgbWVhbnMgdGhlIGVudGl0eSBtYWtpbmcgYSBDb250cmlidXRpb24gYW5kIGFsbCBpdHMgQWZmaWxpYXRlcy5cblxuICAgQWZmaWxpYXRlcyBtZWFucyBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIG9yIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgJ2NvbnRyb2wnIG1lYW5zIGRpcmVjdCBvciBpbmRpcmVjdCBvd25lcnNoaXAgb2YgYXQgbGVhc3QgZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgdm90aW5nIHBvd2VyLCBjYXBpdGFsIG9yIG90aGVyIHNlY3VyaXRpZXMgb2YgY29udHJvbGxlZCBvciBjb21tb25seSBjb250cm9sbGVkIGVudGl0eS5cblxuICAgQ29udHJpYnV0aW9uIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgbGljZW5zZWQgYnkgYSBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgMS4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2VcblxuICAgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8geW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgaXJyZXZvY2FibGUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSBpdHMgQ29udHJpYnV0aW9uLCB3aXRoIG1vZGlmaWNhdGlvbiBvciBub3QuXG5cbiAgIDIuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlXG5cbiAgIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIHlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIGlycmV2b2NhYmxlIChleGNlcHQgZm9yIHJldm9jYXRpb24gdW5kZXIgdGhpcyBTZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgZm9yIHNhbGUsIHNlbGwsIGltcG9ydCBvciBvdGhlcndpc2UgdHJhbnNmZXIgaXRzIENvbnRyaWJ1dGlvbiB3aGVyZSBzdWNoIHBhdGVudCBsaWNlbnNlIGlzIG9ubHkgbGltaXRlZCB0byB0aGUgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3Igbm93IG9yIGluIGZ1dHVyZSB3aGljaCB3aWxsIGJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSBpdHMgQ29udHJpYnV0aW9uIGFsb25lLCBvciBieSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIHdpdGggdGhlIFNvZnR3YXJlIHRvIHdoaWNoIHRoZSBDb250cmlidXRpb24gd2FzIGNvbnRyaWJ1dGVkLCBleGNsdWRpbmcgb2YgYW55IHBhdGVudCBjbGFpbXMgc29sZWx5IGJlIGluZnJpbmdlZCBieSB5b3VyIG9yIG90aGVycycgbW9kaWZpY2F0aW9uIG9yIG90aGVyIGNvbWJpbmF0aW9ucy4gSWYgeW91IG9yIHlvdXIgQWZmaWxpYXRlcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IChpbmNsdWRpbmcgdGhyb3VnaCBhbiBhZ2VudCwgcGF0ZW50IGxpY2Vuc2VlIG9yIGFzc2lnbmVl77yJLCBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gKGluY2x1ZGluZyBhIGNyb3NzIGNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxpdGlnYXRpb24pIG9yIG90aGVyIHBhdGVudCBlbmZvcmNlbWVudCBhY3Rpdml0aWVzIGFnYWluc3QgYW55IGluZGl2aWR1YWwgb3IgZW50aXR5IGJ5IGFsbGVnaW5nIHRoYXQgdGhlIFNvZnR3YXJlIG9yIGFueSBDb250cmlidXRpb24gaW4gaXQgaW5mcmluZ2VzIHBhdGVudHMsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlIGdyYW50ZWQgdG8geW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhlIFNvZnR3YXJlIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gb3IgYWN0aXZpdHkgaXMgZmlsZWQgb3IgdGFrZW4uXG5cbiAgIDMuIE5vIFRyYWRlbWFyayBMaWNlbnNlXG5cbiAgIE5vIHRyYWRlbWFyayBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiBDb250cmlidXRvciwgZXhjZXB0IGFzIHJlcXVpcmVkIHRvIGZ1bGZpbGwgbm90aWNlIHJlcXVpcmVtZW50cyBpbiBzZWN0aW9uIDQuXG5cbiAgIDQuIERpc3RyaWJ1dGlvbiBSZXN0cmljdGlvblxuXG4gICBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGluIGFueSBtZWRpdW0gd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgd2hldGhlciBpbiBzb3VyY2Ugb3IgZXhlY3V0YWJsZSBmb3JtcywgcHJvdmlkZWQgdGhhdCB5b3UgcHJvdmlkZSByZWNpcGllbnRzIHdpdGggYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbmQgcmV0YWluIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmsgYW5kIGRpc2NsYWltZXIgc3RhdGVtZW50cyBpbiB0aGUgU29mdHdhcmUuXG5cbiAgIDUuIERpc2NsYWltZXIgb2YgV2FycmFudHkgYW5kIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5XG5cbiAgIFRoZSBTb2Z0d2FyZSBhbmQgQ29udHJpYnV0aW9uIGluIGl0IGFyZSBwcm92aWRlZCB3aXRob3V0IHdhcnJhbnRpZXMgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIEluIG5vIGV2ZW50IHNoYWxsIGFueSBDb250cmlidXRvciBvciBjb3B5cmlnaHQgaG9sZGVyIGJlIGxpYWJsZSB0byB5b3UgZm9yIGFueSBkYW1hZ2VzLGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIGFueSBkaXJlY3QsIG9yIGluZGlyZWN0LCBzcGVjaWFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGZyb20geW91ciB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUgU29mdHdhcmUgb3IgdGhlIENvbnRyaWJ1dGlvbiBpbiBpdCwgbm8gbWF0dGVyIGhvdyBpdCdzIGNhdXNlZCBvciBiYXNlZCBvbiB3aGljaCBsZWdhbCB0aGVvcnksIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLlxuXG5FbmQgb2YgdGhlIFRlcm1zIGFuZCBDb25kaXRpb25zXG5cbkhvdyB0byBhcHBseSB0aGUgTXVsYW4gUGVybWlzc2l2ZSBTb2Z0d2FyZSBMaWNlbnNl77yMVmVyc2lvbiAxIChNdWxhbiBQU0wgdjEpIHRvIHlvdXIgc29mdHdhcmVcblxuVG8gYXBwbHkgdGhlIE11bGFuIFBTTCB2MSB0byB5b3VyIHdvcmssIGZvciBlYXN5IGlkZW50aWZpY2F0aW9uIGJ5IHJlY2lwaWVudHMsIHlvdSBhcmUgc3VnZ2VzdGVkIHRvIGNvbXBsZXRlIGZvbGxvd2luZyB0aHJlZSBzdGVwczpcblxuICAgaS4gRmlsbCBpbiB0aGUgYmxhbmtzIGluIGZvbGxvd2luZyBzdGF0ZW1lbnQsIGluY2x1ZGluZyBpbnNlcnQgeW91ciBzb2Z0d2FyZSBuYW1lLCB0aGUgeWVhciBvZiB0aGUgZmlyc3QgcHVibGljYXRpb24gb2YgeW91ciBzb2Z0d2FyZSwgYW5kIHlvdXIgbmFtZSBpZGVudGlmaWVkIGFzIHRoZSBjb3B5cmlnaHQgb3duZXI7XG5cbiAgIGlpLiBDcmVhdGUgYSBmaWxlIG5hbWVkIFwiTElDRU5TRVwiIHdoaWNoIGNvbnRhaW5zIHRoZSB3aG9sZSBjb250ZXh0IG9mIHRoaXMgTGljZW5zZSBpbiB0aGUgZmlyc3QgZGlyZWN0b3J5IG9mIHlvdXIgc29mdHdhcmUgcGFja2FnZTtcblxuICAgaWlpLiBBdHRhY2ggdGhlIHN0YXRlbWVudCB0byB0aGUgYXBwcm9wcmlhdGUgYW5ub3RhdGVkIHN5bnRheCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggc291cmNlIGZpbGUuXG5cbkNvcHlyaWdodCAoYykgWzIwMTldIFtuYW1lIG9mIGNvcHlyaWdodCBob2xkZXJdXG5cbltTb2Z0d2FyZSBOYW1lXSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTXVsYW4gUFNMIHYxLlxuXG5Zb3UgY2FuIHVzZSB0aGlzIHNvZnR3YXJlIGFjY29yZGluZyB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIE11bGFuIFBTTCB2MS5cblxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIE11bGFuIFBTTCB2MSBhdDpcblxuaHR0cDovL2xpY2Vuc2UuY29zY2wub3JnLmNuL011bGFuUFNMXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG5cblNlZSB0aGUgTXVsYW4gUFNMIHYxIGZvciBtb3JlIGRldGFpbHMuIl0sImxpY2Vuc2VJZHMiOlsiTXVsYW5QU0wtMS4wIl0sImtleXdvcmRzIjpbIjEgMSAyMDE5IiwiMSAyMDE5IDgiLCIyMDE5IDggaHR0cCIsIjggaHR0cCBsaWNlbnNlIiwiY24gbXVsYW5wc2wgMSIsIm11bGFucHNsIDEgMCIsIjEgMCA1MCIsIjQgNSAxIiwiNSAxIDEiLCIxIDEgMiIsIjEgbXVsYW4gcGVybWlzc2l2ZSIsInBzbCB2MSBhdWd1c3QiLCJ2MSBhdWd1c3QgMjAxOSIsImF1Z3VzdCAyMDE5IGh0dHAiLCIyMDE5IGh0dHAgbGljZW5zZSIsImNuIG11bGFucHNsIHlvdXIiLCJtdWxhbnBzbCB5b3VyIHJlcHJvZHVjdGlvbiIsInBzbCB2MSB0aGlzIiwidjEgdGhpcyBsaWNlbnNlIiwibGljZW5zZSB3aXRoIGZvbGxvd2luZyIsIndpdGggZm9sbG93aW5nIHRlcm1zIiwid2hpY2ggYXJlIGNvbXByaXNlZCIsImFyZSBjb21wcmlzZWQgb2YiLCJjb21wcmlzZWQgb2YgdGhvc2UiLCJvZiB0aG9zZSBjb250cmlidXRpb24iLCJ0aG9zZSBjb250cmlidXRpb24gYW5kIiwiY29udHJpYnV0aW9uIGFuZCBsaWNlbnNlZCIsInRoYXQgY29udHJvbCBvciIsImNvbnRyb2wgb3IgYXJlIiwib3IgYXJlIGNvbnRyb2xsZWQiLCJjb250cm9sIHdpdGggYSIsIndpdGggYSBwYXJ0eSIsImNvbnRyb2xsZWQgZW50aXR5IGNvbnRyaWJ1dGlvbiIsImVudGl0eSBjb250cmlidXRpb24gbWVhbnMiLCJsaWNlbnNlIDEgZ3JhbnQiLCJ3YXMgY29udHJpYnV0ZWQgZXhjbHVkaW5nIiwiY29udHJpYnV0ZWQgZXhjbHVkaW5nIG9mIiwiZXhjbHVkaW5nIG9mIGFueSIsInBhdGVudCBjbGFpbXMgc29sZWx5IiwiY2xhaW1zIHNvbGVseSBiZSIsInNvbGVseSBiZSBpbmZyaW5nZWQiLCJieSB5b3VyIG9yIiwieW91ciBvciBvdGhlcnMiLCJvciBvdGhlcnMgbW9kaWZpY2F0aW9uIiwib3RoZXJzIG1vZGlmaWNhdGlvbiBvciIsIm9yIG90aGVyIGNvbWJpbmF0aW9ucyIsIm90aGVyIGNvbWJpbmF0aW9ucyBpZiIsImNvbWJpbmF0aW9ucyBpZiB5b3UiLCJvciBpbmRpcmVjdGx5IGluY2x1ZGluZyIsImluZGlyZWN0bHkgaW5jbHVkaW5nIHRocm91Z2giLCJpbmNsdWRpbmcgdGhyb3VnaCBhbiIsInRocm91Z2ggYW4gYWdlbnQiLCJhbiBhZ2VudCBwYXRlbnQiLCJhZ2VudCBwYXRlbnQgbGljZW5zZWUiLCJwYXRlbnQgbGljZW5zZWUgb3IiLCJsaWNlbnNlZSBvciBhc3NpZ25lZSIsIm9yIGFzc2lnbmVlIGluc3RpdHV0ZSIsImFzc2lnbmVlIGluc3RpdHV0ZSBwYXRlbnQiLCIxIDEgMjAxOSA4IiwiMSAyMDE5IDggaHR0cCIsIjIwMTkgOCBodHRwIGxpY2Vuc2UiLCI4IGh0dHAgbGljZW5zZSBjb3NjbCIsIm9yZyBjbiBtdWxhbnBzbCAxIiwiY24gbXVsYW5wc2wgMSAwIiwibXVsYW5wc2wgMSAwIDUwIiwiMSAwIDUwIDEiLCI0IDQgNSAxIiwiNCA1IDEgMSIsIjUgMSAxIDEiLCIxIDEgMSAyIiwiMSAxIDIgbGljZW5zZSIsIjMgY29weXJpZ2h0IGMgMjAxOSIsInZlcnNpb24gMSBtdWxhbiBwZXJtaXNzaXZlIiwiMSBtdWxhbiBwZXJtaXNzaXZlIHNvZnR3YXJlIiwibXVsYW4gcHNsIHYxIGF1Z3VzdCIsInBzbCB2MSBhdWd1c3QgMjAxOSIsInYxIGF1Z3VzdCAyMDE5IGh0dHAiLCJhdWd1c3QgMjAxOSBodHRwIGxpY2Vuc2UiLCIyMDE5IGh0dHAgbGljZW5zZSBjb3NjbCIsIm9yZyBjbiBtdWxhbnBzbCB5b3VyIiwiY24gbXVsYW5wc2wgeW91ciByZXByb2R1Y3Rpb24iLCJtdWxhbnBzbCB5b3VyIHJlcHJvZHVjdGlvbiB1c2UiLCJ0byBtdWxhbiBwc2wgdjEiLCJtdWxhbiBwc2wgdjEgdGhpcyIsInBzbCB2MSB0aGlzIGxpY2Vuc2UiLCJ2MSB0aGlzIGxpY2Vuc2Ugd2l0aCIsInRoaXMgbGljZW5zZSB3aXRoIGZvbGxvd2luZyIsImxpY2Vuc2Ugd2l0aCBmb2xsb3dpbmcgdGVybXMiLCJ3aXRoIGZvbGxvd2luZyB0ZXJtcyBhbmQiLCJkb2N1bWVudHMgd2hpY2ggYXJlIGNvbXByaXNlZCIsIndoaWNoIGFyZSBjb21wcmlzZWQgb2YiLCJhcmUgY29tcHJpc2VkIG9mIHRob3NlIiwiY29tcHJpc2VkIG9mIHRob3NlIGNvbnRyaWJ1dGlvbiIsIm9mIHRob3NlIGNvbnRyaWJ1dGlvbiBhbmQiLCJ0aG9zZSBjb250cmlidXRpb24gYW5kIGxpY2Vuc2VkIiwiY29udHJpYnV0aW9uIGFuZCBsaWNlbnNlZCB1bmRlciIsImFuZCBsaWNlbnNlZCB1bmRlciB0aGlzIiwiZW50aXRpZXMgdGhhdCBjb250cm9sIG9yIiwidGhhdCBjb250cm9sIG9yIGFyZSIsImNvbnRyb2wgb3IgYXJlIGNvbnRyb2xsZWQiLCJvciBhcmUgY29udHJvbGxlZCBieSIsImNvbW1vbiBjb250cm9sIHdpdGggYSIsImNvbnRyb2wgd2l0aCBhIHBhcnR5Iiwid2l0aCBhIHBhcnR5IHRvIiwidG8gdGhpcyBsaWNlbnNlIGNvbnRyb2wiLCJjb21tb25seSBjb250cm9sbGVkIGVudGl0eSBjb250cmlidXRpb24iLCJjb250cm9sbGVkIGVudGl0eSBjb250cmlidXRpb24gbWVhbnMiLCJlbnRpdHkgY29udHJpYnV0aW9uIG1lYW5zIHRoZSIsInRoaXMgbGljZW5zZSAxIGdyYW50IiwibGljZW5zZSAxIGdyYW50IG9mIiwiY29udHJpYnV0aW9uIHdhcyBjb250cmlidXRlZCBleGNsdWRpbmciLCJ3YXMgY29udHJpYnV0ZWQgZXhjbHVkaW5nIG9mIiwiY29udHJpYnV0ZWQgZXhjbHVkaW5nIG9mIGFueSIsImV4Y2x1ZGluZyBvZiBhbnkgcGF0ZW50IiwiYW55IHBhdGVudCBjbGFpbXMgc29sZWx5IiwicGF0ZW50IGNsYWltcyBzb2xlbHkgYmUiLCJjbGFpbXMgc29sZWx5IGJlIGluZnJpbmdlZCIsInNvbGVseSBiZSBpbmZyaW5nZWQgYnkiLCJpbmZyaW5nZWQgYnkgeW91ciBvciIsImJ5IHlvdXIgb3Igb3RoZXJzIiwieW91ciBvciBvdGhlcnMgbW9kaWZpY2F0aW9uIiwib3Igb3RoZXJzIG1vZGlmaWNhdGlvbiBvciIsIm90aGVycyBtb2RpZmljYXRpb24gb3Igb3RoZXIiLCJtb2RpZmljYXRpb24gb3Igb3RoZXIgY29tYmluYXRpb25zIiwib3Igb3RoZXIgY29tYmluYXRpb25zIGlmIiwib3RoZXIgY29tYmluYXRpb25zIGlmIHlvdSIsImNvbWJpbmF0aW9ucyBpZiB5b3Ugb3IiLCJkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluY2x1ZGluZyIsIm9yIGluZGlyZWN0bHkgaW5jbHVkaW5nIHRocm91Z2giLCJpbmRpcmVjdGx5IGluY2x1ZGluZyB0aHJvdWdoIGFuIiwiaW5jbHVkaW5nIHRocm91Z2ggYW4gYWdlbnQiLCJ0aHJvdWdoIGFuIGFnZW50IHBhdGVudCIsImFuIGFnZW50IHBhdGVudCBsaWNlbnNlZSIsImFnZW50IHBhdGVudCBsaWNlbnNlZSBvciIsInBhdGVudCBsaWNlbnNlZSBvciBhc3NpZ25lZSIsImxpY2Vuc2VlIG9yIGFzc2lnbmVlIGluc3RpdHV0ZSIsIm9yIGFzc2lnbmVlIGluc3RpdHV0ZSBwYXRlbnQiLCJhc3NpZ25lZSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24iLCJkYW1hZ2VzIGVuZCBvZiB0aGUiLCJ2MSB0byB5b3VyIHNvZnR3YXJlIiwidjEgdG8geW91ciB3b3JrIiwiZmlsZSBjb3B5cmlnaHQgYyAyMDE5IiwiMSAxIDIwMTkgOCBodHRwIiwiMSAyMDE5IDggaHR0cCBsaWNlbnNlIiwiMjAxOSA4IGh0dHAgbGljZW5zZSBjb3NjbCIsIjggaHR0cCBsaWNlbnNlIGNvc2NsIG9yZyIsImNvc2NsIG9yZyBjbiBtdWxhbnBzbCAxIiwib3JnIGNuIG11bGFucHNsIDEgMCIsImNuIG11bGFucHNsIDEgMCA1MCIsIm11bGFucHNsIDEgMCA1MCAxIiwiMSAwIDUwIDEgMiIsIjMgNCA0IDUgMSIsIjQgNCA1IDEgMSIsIjQgNSAxIDEgMSIsIjUgMSAxIDEgMiIsIjEgMSAxIDIgbGljZW5zZSIsIjEgMSAyIGxpY2Vuc2UgMyIsImxpY2Vuc2UgMyBjb3B5cmlnaHQgYyAyMDE5IiwiMyBjb3B5cmlnaHQgYyAyMDE5IG5hbWUiLCJ2MSBmb3IgbW9yZSBkZXRhaWxzIG11bGFuIiwibGljZW5zZSB2ZXJzaW9uIDEgbXVsYW4gcGVybWlzc2l2ZSIsInZlcnNpb24gMSBtdWxhbiBwZXJtaXNzaXZlIHNvZnR3YXJlIiwiMSBtdWxhbiBwZXJtaXNzaXZlIHNvZnR3YXJlIGxpY2Vuc2UiLCIxIG11bGFuIHBzbCB2MSBhdWd1c3QiLCJtdWxhbiBwc2wgdjEgYXVndXN0IDIwMTkiLCJwc2wgdjEgYXVndXN0IDIwMTkgaHR0cCIsInYxIGF1Z3VzdCAyMDE5IGh0dHAgbGljZW5zZSIsImF1Z3VzdCAyMDE5IGh0dHAgbGljZW5zZSBjb3NjbCIsIjIwMTkgaHR0cCBsaWNlbnNlIGNvc2NsIG9yZyIsImNvc2NsIG9yZyBjbiBtdWxhbnBzbCB5b3VyIiwib3JnIGNuIG11bGFucHNsIHlvdXIgcmVwcm9kdWN0aW9uIiwiY24gbXVsYW5wc2wgeW91ciByZXByb2R1Y3Rpb24gdXNlIiwibXVsYW5wc2wgeW91ciByZXByb2R1Y3Rpb24gdXNlIG1vZGlmaWNhdGlvbiIsInN1YmplY3QgdG8gbXVsYW4gcHNsIHYxIiwidG8gbXVsYW4gcHNsIHYxIHRoaXMiLCJtdWxhbiBwc2wgdjEgdGhpcyBsaWNlbnNlIiwicHNsIHYxIHRoaXMgbGljZW5zZSB3aXRoIiwidjEgdGhpcyBsaWNlbnNlIHdpdGggZm9sbG93aW5nIiwidGhpcyBsaWNlbnNlIHdpdGggZm9sbG93aW5nIHRlcm1zIiwibGljZW5zZSB3aXRoIGZvbGxvd2luZyB0ZXJtcyBhbmQiLCJ3aXRoIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucyIsInJlbGF0ZWQgZG9jdW1lbnRzIHdoaWNoIGFyZSBjb21wcmlzZWQiLCJkb2N1bWVudHMgd2hpY2ggYXJlIGNvbXByaXNlZCBvZiIsIndoaWNoIGFyZSBjb21wcmlzZWQgb2YgdGhvc2UiLCJhcmUgY29tcHJpc2VkIG9mIHRob3NlIGNvbnRyaWJ1dGlvbiIsImNvbXByaXNlZCBvZiB0aG9zZSBjb250cmlidXRpb24gYW5kIiwib2YgdGhvc2UgY29udHJpYnV0aW9uIGFuZCBsaWNlbnNlZCIsInRob3NlIGNvbnRyaWJ1dGlvbiBhbmQgbGljZW5zZWQgdW5kZXIiLCJjb250cmlidXRpb24gYW5kIGxpY2Vuc2VkIHVuZGVyIHRoaXMiLCJhbmQgbGljZW5zZWQgdW5kZXIgdGhpcyBsaWNlbnNlIiwibGljZW5zZWQgdW5kZXIgdGhpcyBsaWNlbnNlIGNvbnRyaWJ1dG9yIiwibWVhbnMgZW50aXRpZXMgdGhhdCBjb250cm9sIG9yIiwiZW50aXRpZXMgdGhhdCBjb250cm9sIG9yIGFyZSIsInRoYXQgY29udHJvbCBvciBhcmUgY29udHJvbGxlZCIsImNvbnRyb2wgb3IgYXJlIGNvbnRyb2xsZWQgYnkiLCJvciBhcmUgY29udHJvbGxlZCBieSBvciIsInVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggYSIsImNvbW1vbiBjb250cm9sIHdpdGggYSBwYXJ0eSIsImNvbnRyb2wgd2l0aCBhIHBhcnR5IHRvIiwid2l0aCBhIHBhcnR5IHRvIHRoaXMiXX0seyJsaWNlbnNlVGV4dHMiOlsi5pyo5YWw5a695p2+6K645Y+v6K+BLCDnrKwy54mIIOacqOWFsOWuveadvuiuuOWPr+ivge+8jCDnrKwy54mIXG5cbjIwMjDlubQx5pyIIGh0dHA6Ly9saWNlbnNlLmNvc2NsLm9yZy5jbi9NdWxhblBTTDJcblxu5oKo5a+5XCLova/ku7ZcIueahOWkjeWItuOAgeS9v+eUqOOAgeS/ruaUueWPiuWIhuWPkeWPl+acqOWFsOWuveadvuiuuOWPr+ivge+8jOesrDLniYjvvIhcIuacrOiuuOWPr+ivgVwi77yJ55qE5aaC5LiL5p2h5qy+55qE57qm5p2f77yaXG5cbiAgIDAuIOWumuS5iVxuXG4gICBcIui9r+S7tlwiIOaYr+aMh+eUsVwi6LSh54yuXCLmnoTmiJDnmoTorrjlj6/lnKhcIuacrOiuuOWPr+ivgVwi5LiL55qE56iL5bqP5ZKM55u45YWz5paH5qGj55qE6ZuG5ZCI44CCXG5cbiAgIFwi6LSh54yuXCIg5piv5oyH55Sx5Lu75LiAXCLotKHnjK7ogIVcIuiuuOWPr+WcqFwi5pys6K645Y+v6K+BXCLkuIvnmoTlj5fniYjmnYPms5Xkv53miqTnmoTkvZzlk4HjgIJcblxuICAgXCLotKHnjK7ogIVcIiDmmK/mjIflsIblj5fniYjmnYPms5Xkv53miqTnmoTkvZzlk4Horrjlj6/lnKhcIuacrOiuuOWPr+ivgVwi5LiL55qE6Ieq54S25Lq65oiWXCLms5Xkurrlrp7kvZNcIuOAglxuXG4gICBcIuazleS6uuWunuS9k1wiIOaYr+aMh+aPkOS6pOi0oeeMrueahOacuuaehOWPiuWFtlwi5YWz6IGU5a6e5L2TXCLjgIJcblxuICAgXCLlhbPogZTlrp7kvZNcIiDmmK/mjIfvvIzlr7lcIuacrOiuuOWPr+ivgVwi5LiL55qE6KGM5Li65pa56ICM6KiA77yM5o6n5Yi244CB5Y+X5o6n5Yi25oiW5LiO5YW25YWx5ZCM5Y+X5o6n5Yi255qE5py65p6E77yM5q2k5aSE55qE5o6n5Yi25piv5oyH5pyJ5Y+X5o6n5pa55oiW5YWx5ZCM5Y+X5o6n5pa56Iez5bCRNTAl55u05o6l5oiW6Ze05o6l55qE5oqV56Wo5p2D44CB6LWE6YeR5oiW5YW25LuW5pyJ5Lu36K+B5Yi444CCXG5cbiAgIDEuIOaOiOS6iOeJiOadg+iuuOWPr1xuXG4gICDmr4/kuKpcIui0oeeMruiAhVwi5qC55o2uXCLmnKzorrjlj6/or4FcIuaOiOS6iOaCqOawuOS5heaAp+eahOOAgeWFqOeQg+aAp+eahOOAgeWFjei0ueeahOOAgemdnueLrOWNoOeahOOAgeS4jeWPr+aSpOmUgOeahOeJiOadg+iuuOWPr++8jOaCqOWPr+S7peWkjeWItuOAgeS9v+eUqOOAgeS/ruaUueOAgeWIhuWPkeWFtlwi6LSh54yuXCLvvIzkuI3orrrkv67mlLnkuI7lkKbjgIJcblxuICAgMi4g5o6I5LqI5LiT5Yip6K645Y+vXG5cbiAgIOavj+S4qlwi6LSh54yu6ICFXCLmoLnmja5cIuacrOiuuOWPr+ivgVwi5o6I5LqI5oKo5rC45LmF5oCn55qE44CB5YWo55CD5oCn55qE44CB5YWN6LS555qE44CB6Z2e54us5Y2g55qE44CB5LiN5Y+v5pKk6ZSA55qE77yI5qC55o2u5pys5p2h6KeE5a6a5pKk6ZSA6Zmk5aSW77yJ5LiT5Yip6K645Y+v77yM5L6b5oKo5Yi26YCg44CB5aeU5omY5Yi26YCg44CB5L2/55So44CB6K646K+66ZSA5ZSu44CB6ZSA5ZSu44CB6L+b5Y+j5YW2XCLotKHnjK5cIuaIluS7peWFtuS7luaWueW8j+i9rOenu+WFtlwi6LSh54yuXCLjgILliY3ov7DkuJPliKnorrjlj6/ku4XpmZDkuo5cIui0oeeMruiAhVwi546w5Zyo5oiW5bCG5p2l5oul5pyJ5oiW5o6n5Yi255qE5YW2XCLotKHnjK5cIuacrOi6q+aIluWFtlwi6LSh54yuXCLkuI7orrjlj69cIui0oeeMrlwi5pe255qEXCLova/ku7ZcIue7k+WQiOiAjOWwhuW/heeEtuS8muS+teeKr+eahOS4k+WIqeadg+WIqeimgeaxgu+8jOS4jeWMheaLrOWvuVwi6LSh54yuXCLnmoTkv67mlLnmiJbljIXlkKtcIui0oeeMrlwi55qE5YW25LuW57uT5ZCI44CC5aaC5p6c5oKo5oiW5oKo55qEXCLlhbPogZTlrp7kvZNcIuebtOaOpeaIlumXtOaOpeWcsO+8jOWwsVwi6L2v5Lu2XCLmiJblhbbkuK3nmoRcIui0oeeMrlwi5a+55Lu75L2V5Lq65Y+R6LW35LiT5Yip5L615p2D6K+J6K6877yI5YyF5ous5Y+N6K+J5oiW5Lqk5Y+J6K+J6K6877yJ5oiW5YW25LuW5LiT5Yip57u05p2D6KGM5Yqo77yM5oyH5o6n5YW25L6154qv5LiT5Yip5p2D77yM5YiZXCLmnKzorrjlj6/or4FcIuaOiOS6iOaCqOWvuVwi6L2v5Lu2XCLnmoTkuJPliKnorrjlj6/oh6rmgqjmj5Dotbfor4norrzmiJblj5Hotbfnu7TmnYPooYzliqjkuYvml6Xnu4jmraLjgIJcblxuICAgMy4g5peg5ZWG5qCH6K645Y+vXG5cbiAgIFwi5pys6K645Y+v6K+BXCLkuI3mj5Dkvpvlr7lcIui0oeeMruiAhVwi55qE5ZWG5ZOB5ZCN56ew44CB5ZWG5qCH44CB5pyN5Yqh5qCH5b+X5oiW5Lqn5ZOB5ZCN56ew55qE5ZWG5qCH6K645Y+v77yM5L2G5oKo5Li65ruh6Laz56ysNOadoeinhOWumueahOWjsOaYjuS5ieWKoeiAjOW/hemhu+S9v+eUqOmZpOWkluOAglxuXG4gICA0LiDliIblj5HpmZDliLZcblxuICAg5oKo5Y+v5Lul5Zyo5Lu75L2V5aqS5LuL5Lit5bCGXCLova/ku7ZcIuS7pea6kOeoi+W6j+W9ouW8j+aIluWPr+aJp+ihjOW9ouW8j+mHjeaWsOWIhuWPke+8jOS4jeiuuuS/ruaUueS4juWQpu+8jOS9huaCqOW/hemhu+WQkeaOpeaUtuiAheaPkOS+m1wi5pys6K645Y+v6K+BXCLnmoTlia/mnKzvvIzlubbkv53nlZlcIui9r+S7tlwi5Lit55qE54mI5p2D44CB5ZWG5qCH44CB5LiT5Yip5Y+K5YWN6LSj5aOw5piO44CCXG5cbiAgIDUuIOWFjei0o+WjsOaYjuS4jui0o+S7u+mZkOWItlxuXG4gICBcIui9r+S7tlwi5Y+K5YW25Lit55qEXCLotKHnjK5cIuWcqOaPkOS+m+aXtuS4jeW4puS7u+S9leaYjuekuuaIlum7mOekuueahOaLheS/neOAguWcqOS7u+S9leaDheWGteS4i++8jFwi6LSh54yu6ICFXCLmiJbniYjmnYPmiYDmnInogIXkuI3lr7nku7vkvZXkurrlm6Dkvb/nlKhcIui9r+S7tlwi5oiW5YW25Lit55qEXCLotKHnjK5cIuiAjOW8leWPkeeahOS7u+S9leebtOaOpeaIlumXtOaOpeaNn+WkseaJv+aLhei0o+S7u++8jOS4jeiuuuWboOS9leenjeWOn+WboOWvvOiHtOaIluiAheWfuuS6juS9leenjeazleW+i+eQhuiuuu+8jOWNs+S9v+WFtuabvuiiq+W7uuiuruacieatpOenjeaNn+WkseeahOWPr+iDveaAp+OAglxuXG4gICA2LiDor63oqIBcblxuICAgXCLmnKzorrjlj6/or4FcIuS7peS4reiLseaWh+WPjOivreihqOi/sO+8jOS4reiLseaWh+eJiOacrOWFt+acieWQjOetieazleW+i+aViOWKm+OAguWmguaenOS4reiLseaWh+eJiOacrOWtmOWcqOS7u+S9leWGsueqgeS4jeS4gOiHtO+8jOS7peS4reaWh+eJiOS4uuWHhuOAglxuXG7mnaHmrL7nu5PmnZ9cblxu5aaC5L2V5bCG5pyo5YWw5a695p2+6K645Y+v6K+B77yM56ysMueJiO+8jOW6lOeUqOWIsOaCqOeahOi9r+S7tlxuXG7lpoLmnpzmgqjluIzmnJvlsIbmnKjlhbDlrr3mnb7orrjlj6/or4HvvIznrKwy54mI77yM5bqU55So5Yiw5oKo55qE5paw6L2v5Lu277yM5Li65LqG5pa55L6/5o6l5pS26ICF5p+l6ZiF77yM5bu66K6u5oKo5a6M5oiQ5aaC5LiL5LiJ5q2l77yaXG5cbiAgIDHvvIwg6K+35oKo6KGl5YWF5aaC5LiL5aOw5piO5Lit55qE56m655m977yM5YyF5ous6L2v5Lu25ZCN44CB6L2v5Lu255qE6aaW5qyh5Y+R6KGo5bm05Lu95Lul5Y+K5oKo5L2c5Li654mI5p2D5Lq655qE5ZCN5a2X77ybXG5cbiAgIDLvvIwg6K+35oKo5Zyo6L2v5Lu25YyF55qE5LiA57qn55uu5b2V5LiL5Yib5bu65LulXCJMSUNFTlNFXCLkuLrlkI3nmoTmlofku7bvvIzlsIbmlbTkuKrorrjlj6/or4HmlofmnKzmlL7lhaXor6Xmlofku7bkuK3vvJtcblxuICAgM++8jCDor7flsIblpoLkuIvlo7DmmI7mlofmnKzmlL7lhaXmr4/kuKrmupDmlofku7bnmoTlpLTpg6jms6jph4rkuK3jgIJcblxuQ29weXJpZ2h0IChjKSBbWWVhcl0gW25hbWUgb2YgY29weXJpZ2h0IGhvbGRlcl1cblxuW1NvZnR3YXJlIE5hbWVdIGlzIGxpY2Vuc2VkIHVuZGVyIE11bGFuIFBTTCB2Mi5cblxuWW91IGNhbiB1c2UgdGhpcyBzb2Z0d2FyZSBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBNdWxhbiBQU0wgdjIuXG5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiBNdWxhbiBQU0wgdjIgYXQ6XG5cbmh0dHA6Ly9saWNlbnNlLmNvc2NsLm9yZy5jbi9NdWxhblBTTDJcblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCxcblxuRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBOT04tSU5GUklOR0VNRU5ULFxuXG5NRVJDSEFOVEFCSUxJVFkgT1IgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cblxuU2VlIHRoZSBNdWxhbiBQU0wgdjIgZm9yIG1vcmUgZGV0YWlscy4gTXVsYW4gUGVybWlzc2l2ZSBTb2Z0d2FyZSBMaWNlbnNl77yMVmVyc2lvbiAyIE11bGFuIFBlcm1pc3NpdmUgU29mdHdhcmUgTGljZW5zZe+8jFZlcnNpb24gMiAoTXVsYW4gUFNMIHYyKVxuXG5KYW51YXJ5IDIwMjAgaHR0cDovL2xpY2Vuc2UuY29zY2wub3JnLmNuL011bGFuUFNMMlxuXG5Zb3VyIHJlcHJvZHVjdGlvbiwgdXNlLCBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgc2hhbGwgYmUgc3ViamVjdCB0byBNdWxhbiBQU0wgdjIgKHRoaXMgTGljZW5zZSkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zOlxuXG4gICAwLiBEZWZpbml0aW9uXG5cbiAgIFNvZnR3YXJlIG1lYW5zIHRoZSBwcm9ncmFtIGFuZCByZWxhdGVkIGRvY3VtZW50cyB3aGljaCBhcmUgbGljZW5zZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBjb21wcmlzZSBhbGwgQ29udHJpYnV0aW9uKHMpLlxuXG4gICBDb250cmlidXRpb24gbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCBieSBhIHBhcnRpY3VsYXIgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICBDb250cmlidXRvciBtZWFucyB0aGUgSW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgd2hvIGxpY2Vuc2VzIGl0cyBjb3B5cmlnaHRhYmxlIHdvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICBMZWdhbCBFbnRpdHkgbWVhbnMgdGhlIGVudGl0eSBtYWtpbmcgYSBDb250cmlidXRpb24gYW5kIGFsbCBpdHMgQWZmaWxpYXRlcy5cblxuICAgQWZmaWxpYXRlcyBtZWFucyBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB0aGUgYWN0aW5nIGVudGl0eSB1bmRlciB0aGlzIExpY2Vuc2UsICdjb250cm9sJyBtZWFucyBkaXJlY3Qgb3IgaW5kaXJlY3Qgb3duZXJzaGlwIG9mIGF0IGxlYXN0IGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIHZvdGluZyBwb3dlciwgY2FwaXRhbCBvciBvdGhlciBzZWN1cml0aWVzIG9mIGNvbnRyb2xsZWQgb3IgY29tbW9ubHkgY29udHJvbGxlZCBlbnRpdHkuXG5cbiAgIDEuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlXG5cbiAgIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIHlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIGlycmV2b2NhYmxlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgaXRzIENvbnRyaWJ1dGlvbiwgd2l0aCBtb2RpZmljYXRpb24gb3Igbm90LlxuXG4gICAyLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZVxuXG4gICBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byB5b3UgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGZvciByZXZvY2F0aW9uIHVuZGVyIHRoaXMgU2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIGZvciBzYWxlLCBzZWxsLCBpbXBvcnQgb3Igb3RoZXJ3aXNlIHRyYW5zZmVyIGl0cyBDb250cmlidXRpb24sIHdoZXJlIHN1Y2ggcGF0ZW50IGxpY2Vuc2UgaXMgb25seSBsaW1pdGVkIHRvIHRoZSBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgc3VjaCBDb250cmlidXRvciBub3cgb3IgaW4gZnV0dXJlIHdoaWNoIHdpbGwgYmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IGl0cyBDb250cmlidXRpb24gYWxvbmUsIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb24gd2l0aCB0aGUgU29mdHdhcmUgdG8gd2hpY2ggdGhlIENvbnRyaWJ1dGlvbiB3YXMgY29udHJpYnV0ZWQuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8gYW55IG1vZGlmaWNhdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uLCBhbmQgYW55IG90aGVyIGNvbWJpbmF0aW9uIHdoaWNoIGluY2x1ZGVzIHRoZSBDb250cmlidXRpb24uIElmIHlvdSBvciB5b3VyIEFmZmlsaWF0ZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gKGluY2x1ZGluZyBhIGNyb3NzIGNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxpdGlnYXRpb24pIG9yIG90aGVyIHBhdGVudCBlbmZvcmNlbWVudCBhY3Rpdml0aWVzIGFnYWluc3QgYW55IGluZGl2aWR1YWwgb3IgZW50aXR5IGJ5IGFsbGVnaW5nIHRoYXQgdGhlIFNvZnR3YXJlIG9yIGFueSBDb250cmlidXRpb24gaW4gaXQgaW5mcmluZ2VzIHBhdGVudHMsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlIGdyYW50ZWQgdG8geW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhlIFNvZnR3YXJlIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gb3IgYWN0aXZpdHkgaXMgZmlsZWQgb3IgdGFrZW4uXG5cbiAgIDMuIE5vIFRyYWRlbWFyayBMaWNlbnNlXG5cbiAgIE5vIHRyYWRlbWFyayBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiBDb250cmlidXRvciwgZXhjZXB0IGFzIHJlcXVpcmVkIHRvIGZ1bGZpbGwgbm90aWNlIHJlcXVpcmVtZW50cyBpbiBzZWN0aW9uIDQuXG5cbiAgIDQuIERpc3RyaWJ1dGlvbiBSZXN0cmljdGlvblxuXG4gICBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGluIGFueSBtZWRpdW0gd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgd2hldGhlciBpbiBzb3VyY2Ugb3IgZXhlY3V0YWJsZSBmb3JtcywgcHJvdmlkZWQgdGhhdCB5b3UgcHJvdmlkZSByZWNpcGllbnRzIHdpdGggYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbmQgcmV0YWluIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmsgYW5kIGRpc2NsYWltZXIgc3RhdGVtZW50cyBpbiB0aGUgU29mdHdhcmUuXG5cbiAgIDUuIERpc2NsYWltZXIgb2YgV2FycmFudHkgYW5kIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5XG5cbiAgIFRIRSBTT0ZUV0FSRSBBTkQgQ09OVFJJQlVUSU9OIElOIElUIEFSRSBQUk9WSURFRCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFOWSBDT05UUklCVVRPUiBPUiBDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBUTyBZT1UgRk9SIEFOWSBEQU1BR0VTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgRElSRUNULCBPUiBJTkRJUkVDVCwgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBGUk9NIFlPVVIgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFIE9SIFRIRSBDT05UUklCVVRJT04gSU4gSVQsIE5PIE1BVFRFUiBIT1cgSVQnUyBDQVVTRUQgT1IgQkFTRUQgT04gV0hJQ0ggTEVHQUwgVEhFT1JZLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuICAgNi4gTGFuZ3VhZ2VcblxuICAgVEhJUyBMSUNFTlNFIElTIFdSSVRURU4gSU4gQk9USCBDSElORVNFIEFORCBFTkdMSVNILCBBTkQgVEhFIENISU5FU0UgVkVSU0lPTiBBTkQgRU5HTElTSCBWRVJTSU9OIFNIQUxMIEhBVkUgVEhFIFNBTUUgTEVHQUwgRUZGRUNULiBJTiBUSEUgQ0FTRSBPRiBESVZFUkdFTkNFIEJFVFdFRU4gVEhFIENISU5FU0UgQU5EIEVOR0xJU0ggVkVSU0lPTlMsIFRIRSBDSElORVNFIFZFUlNJT04gU0hBTEwgUFJFVkFJTC5cblxuRU5EIE9GIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXG5Ib3cgdG8gQXBwbHkgdGhlIE11bGFuIFBlcm1pc3NpdmUgU29mdHdhcmUgTGljZW5zZe+8jFZlcnNpb24gMiAoTXVsYW4gUFNMIHYyKSB0byBZb3VyIFNvZnR3YXJlXG5cblRvIGFwcGx5IHRoZSBNdWxhbiBQU0wgdjIgdG8geW91ciB3b3JrLCBmb3IgZWFzeSBpZGVudGlmaWNhdGlvbiBieSByZWNpcGllbnRzLCB5b3UgYXJlIHN1Z2dlc3RlZCB0byBjb21wbGV0ZSBmb2xsb3dpbmcgdGhyZWUgc3RlcHM6XG5cbiAgIGkuIEZpbGwgaW4gdGhlIGJsYW5rcyBpbiBmb2xsb3dpbmcgc3RhdGVtZW50LCBpbmNsdWRpbmcgaW5zZXJ0IHlvdXIgc29mdHdhcmUgbmFtZSwgdGhlIHllYXIgb2YgdGhlIGZpcnN0IHB1YmxpY2F0aW9uIG9mIHlvdXIgc29mdHdhcmUsIGFuZCB5b3VyIG5hbWUgaWRlbnRpZmllZCBhcyB0aGUgY29weXJpZ2h0IG93bmVyO1xuXG4gICBpaS4gQ3JlYXRlIGEgZmlsZSBuYW1lZCBcIkxJQ0VOU0VcIiB3aGljaCBjb250YWlucyB0aGUgd2hvbGUgY29udGV4dCBvZiB0aGlzIExpY2Vuc2UgaW4gdGhlIGZpcnN0IGRpcmVjdG9yeSBvZiB5b3VyIHNvZnR3YXJlIHBhY2thZ2U7XG5cbiAgIGlpaS4gQXR0YWNoIHRoZSBzdGF0ZW1lbnQgdG8gdGhlIGFwcHJvcHJpYXRlIGFubm90YXRlZCBzeW50YXggYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHNvdXJjZSBmaWxlLlxuXG5Db3B5cmlnaHQgKGMpIFtZZWFyXSBbbmFtZSBvZiBjb3B5cmlnaHQgaG9sZGVyXVxuXG5bU29mdHdhcmUgTmFtZV0gaXMgbGljZW5zZWQgdW5kZXIgTXVsYW4gUFNMIHYyLlxuXG5Zb3UgY2FuIHVzZSB0aGlzIHNvZnR3YXJlIGFjY29yZGluZyB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIE11bGFuIFBTTCB2Mi5cblxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIE11bGFuIFBTTCB2MiBhdDpcblxuaHR0cDovL2xpY2Vuc2UuY29zY2wub3JnLmNuL011bGFuUFNMMlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELFxuXG5FSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIE5PTi1JTkZSSU5HRU1FTlQsXG5cbk1FUkNIQU5UQUJJTElUWSBPUiBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuXG5TZWUgdGhlIE11bGFuIFBTTCB2MiBmb3IgbW9yZSBkZXRhaWxzLiJdLCJsaWNlbnNlSWRzIjpbIk11bGFuUFNMLTIuMCJdLCJrZXl3b3JkcyI6WyIyIDIgMjAyMCIsIjIgMjAyMCAxIiwiMjAyMCAxIGh0dHAiLCIxIGh0dHAgbGljZW5zZSIsImNuIG11bGFucHNsMiAyIiwibXVsYW5wc2wyIDIgMCIsIjIgMCA1MCIsIjUgNiAyIiwiMiBtdWxhbiBwZXJtaXNzaXZlIiwicHNsIHYyIGphbnVhcnkiLCJ2MiBqYW51YXJ5IDIwMjAiLCJqYW51YXJ5IDIwMjAgaHR0cCIsIjIwMjAgaHR0cCBsaWNlbnNlIiwiY24gbXVsYW5wc2wyIHlvdXIiLCJtdWxhbnBzbDIgeW91ciByZXByb2R1Y3Rpb24iLCJwc2wgdjIgdGhpcyIsInYyIHRoaXMgbGljZW5zZSIsIndoaWNoIGFyZSBsaWNlbnNlZCIsImxpY2Vuc2UgYW5kIGNvbXByaXNlIiwiYW5kIGNvbXByaXNlIGFsbCIsImNvbXByaXNlIGFsbCBjb250cmlidXRpb24iLCJhbGwgY29udHJpYnV0aW9uIHMiLCJjb250cmlidXRpb24gcyBjb250cmlidXRpb24iLCJzIGNvbnRyaWJ1dGlvbiBtZWFucyIsIndpdGggdGhlIGFjdGluZyIsImFjdGluZyBlbnRpdHkgdW5kZXIiLCJlbnRpdHkgdW5kZXIgdGhpcyIsImNvbnRyb2xsZWQgZW50aXR5IDEiLCJlbnRpdHkgMSBncmFudCIsIndhcyBjb250cmlidXRlZCB0aGUiLCJjb250cmlidXRlZCB0aGUgcGF0ZW50IiwiYW55IG1vZGlmaWNhdGlvbiBvZiIsImNvbnRyaWJ1dGlvbiBhbmQgYW55IiwiYW55IG90aGVyIGNvbWJpbmF0aW9uIiwib3RoZXIgY29tYmluYXRpb24gd2hpY2giLCJjb21iaW5hdGlvbiB3aGljaCBpbmNsdWRlcyIsImluY2x1ZGVzIHRoZSBjb250cmlidXRpb24iLCJjb250cmlidXRpb24gaWYgeW91Iiwib3IgaW5kaXJlY3RseSBpbnN0aXR1dGUiLCJpbmRpcmVjdGx5IGluc3RpdHV0ZSBwYXRlbnQiLCJkYW1hZ2VzIDYgbGFuZ3VhZ2UiLCI2IGxhbmd1YWdlIHRoaXMiLCJsYW5ndWFnZSB0aGlzIGxpY2Vuc2UiLCJsaWNlbnNlIGlzIHdyaXR0ZW4iLCJ3cml0dGVuIGluIGJvdGgiLCJpbiBib3RoIGNoaW5lc2UiLCJib3RoIGNoaW5lc2UgYW5kIiwiZW5nbGlzaCBhbmQgdGhlIiwiYW5kIHRoZSBjaGluZXNlIiwiY2hpbmVzZSB2ZXJzaW9uIGFuZCIsInZlcnNpb24gYW5kIGVuZ2xpc2giLCJhbmQgZW5nbGlzaCB2ZXJzaW9uIiwiZW5nbGlzaCB2ZXJzaW9uIHNoYWxsIiwidmVyc2lvbiBzaGFsbCBoYXZlIiwic2FtZSBsZWdhbCBlZmZlY3QiLCJsZWdhbCBlZmZlY3QgaW4iLCJjYXNlIG9mIGRpdmVyZ2VuY2UiLCJvZiBkaXZlcmdlbmNlIGJldHdlZW4iLCJkaXZlcmdlbmNlIGJldHdlZW4gdGhlIiwiYmV0d2VlbiB0aGUgY2hpbmVzZSIsInRoZSBjaGluZXNlIGFuZCIsImFuZCBlbmdsaXNoIHZlcnNpb25zIiwiZW5nbGlzaCB2ZXJzaW9ucyB0aGUiLCJ2ZXJzaW9ucyB0aGUgY2hpbmVzZSIsImNoaW5lc2UgdmVyc2lvbiBzaGFsbCIsInZlcnNpb24gc2hhbGwgcHJldmFpbCIsInNoYWxsIHByZXZhaWwgZW5kIiwicHJldmFpbCBlbmQgb2YiLCIyIDIgMjAyMCAxIiwiMiAyMDIwIDEgaHR0cCIsIjIwMjAgMSBodHRwIGxpY2Vuc2UiLCIxIGh0dHAgbGljZW5zZSBjb3NjbCIsIm9yZyBjbiBtdWxhbnBzbDIgMiIsImNuIG11bGFucHNsMiAyIDAiLCJtdWxhbnBzbDIgMiAwIDUwIiwiMiAwIDUwIDEiLCI0IDQgNSA2IiwiNCA1IDYgMiIsIjUgNiAyIDIiLCI2IDIgMiAxIiwiMiAyIDEgMiIsIjIgMSAyIGxpY2Vuc2UiLCIzIGNvcHlyaWdodCBjIHllYXIiLCJ2ZXJzaW9uIDIgbXVsYW4gcGVybWlzc2l2ZSIsIjIgbXVsYW4gcGVybWlzc2l2ZSBzb2Z0d2FyZSIsIm11bGFuIHBzbCB2MiBqYW51YXJ5IiwicHNsIHYyIGphbnVhcnkgMjAyMCIsInYyIGphbnVhcnkgMjAyMCBodHRwIiwiamFudWFyeSAyMDIwIGh0dHAgbGljZW5zZSIsIjIwMjAgaHR0cCBsaWNlbnNlIGNvc2NsIiwib3JnIGNuIG11bGFucHNsMiB5b3VyIiwiY24gbXVsYW5wc2wyIHlvdXIgcmVwcm9kdWN0aW9uIiwibXVsYW5wc2wyIHlvdXIgcmVwcm9kdWN0aW9uIHVzZSIsInRvIG11bGFuIHBzbCB2MiIsIm11bGFuIHBzbCB2MiB0aGlzIiwicHNsIHYyIHRoaXMgbGljZW5zZSIsInYyIHRoaXMgbGljZW5zZSB3aXRoIiwibGljZW5zZSB3aXRoIHRoZSBmb2xsb3dpbmciLCJkb2N1bWVudHMgd2hpY2ggYXJlIGxpY2Vuc2VkIiwid2hpY2ggYXJlIGxpY2Vuc2VkIHVuZGVyIiwiYXJlIGxpY2Vuc2VkIHVuZGVyIHRoaXMiLCJ0aGlzIGxpY2Vuc2UgYW5kIGNvbXByaXNlIiwibGljZW5zZSBhbmQgY29tcHJpc2UgYWxsIiwiYW5kIGNvbXByaXNlIGFsbCBjb250cmlidXRpb24iLCJjb21wcmlzZSBhbGwgY29udHJpYnV0aW9uIHMiLCJhbGwgY29udHJpYnV0aW9uIHMgY29udHJpYnV0aW9uIiwiY29udHJpYnV0aW9uIHMgY29udHJpYnV0aW9uIG1lYW5zIiwicyBjb250cmlidXRpb24gbWVhbnMgdGhlIiwiY29udHJvbCB3aXRoIHRoZSBhY3RpbmciLCJ3aXRoIHRoZSBhY3RpbmcgZW50aXR5IiwidGhlIGFjdGluZyBlbnRpdHkgdW5kZXIiLCJhY3RpbmcgZW50aXR5IHVuZGVyIHRoaXMiLCJlbnRpdHkgdW5kZXIgdGhpcyBsaWNlbnNlIiwidW5kZXIgdGhpcyBsaWNlbnNlIGNvbnRyb2wiLCJjb21tb25seSBjb250cm9sbGVkIGVudGl0eSAxIiwiY29udHJvbGxlZCBlbnRpdHkgMSBncmFudCIsImVudGl0eSAxIGdyYW50IG9mIiwiY29udHJpYnV0aW9uIHdhcyBjb250cmlidXRlZCB0aGUiLCJ3YXMgY29udHJpYnV0ZWQgdGhlIHBhdGVudCIsImNvbnRyaWJ1dGVkIHRoZSBwYXRlbnQgbGljZW5zZSIsImFwcGx5IHRvIGFueSBtb2RpZmljYXRpb24iLCJ0byBhbnkgbW9kaWZpY2F0aW9uIG9mIiwiYW55IG1vZGlmaWNhdGlvbiBvZiB0aGUiLCJtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbiIsInRoZSBjb250cmlidXRpb24gYW5kIGFueSIsImNvbnRyaWJ1dGlvbiBhbmQgYW55IG90aGVyIiwiYW5kIGFueSBvdGhlciBjb21iaW5hdGlvbiIsImFueSBvdGhlciBjb21iaW5hdGlvbiB3aGljaCIsIm90aGVyIGNvbWJpbmF0aW9uIHdoaWNoIGluY2x1ZGVzIiwiY29tYmluYXRpb24gd2hpY2ggaW5jbHVkZXMgdGhlIiwid2hpY2ggaW5jbHVkZXMgdGhlIGNvbnRyaWJ1dGlvbiIsImluY2x1ZGVzIHRoZSBjb250cmlidXRpb24gaWYiLCJ0aGUgY29udHJpYnV0aW9uIGlmIHlvdSIsImNvbnRyaWJ1dGlvbiBpZiB5b3Ugb3IiLCJkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluc3RpdHV0ZSIsIm9yIGluZGlyZWN0bHkgaW5zdGl0dXRlIHBhdGVudCIsImluZGlyZWN0bHkgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIiwic3VjaCBkYW1hZ2VzIDYgbGFuZ3VhZ2UiLCJkYW1hZ2VzIDYgbGFuZ3VhZ2UgdGhpcyIsIjYgbGFuZ3VhZ2UgdGhpcyBsaWNlbnNlIiwibGFuZ3VhZ2UgdGhpcyBsaWNlbnNlIGlzIiwidGhpcyBsaWNlbnNlIGlzIHdyaXR0ZW4iLCJsaWNlbnNlIGlzIHdyaXR0ZW4gaW4iLCJpcyB3cml0dGVuIGluIGJvdGgiLCJ3cml0dGVuIGluIGJvdGggY2hpbmVzZSIsImluIGJvdGggY2hpbmVzZSBhbmQiLCJib3RoIGNoaW5lc2UgYW5kIGVuZ2xpc2giLCJjaGluZXNlIGFuZCBlbmdsaXNoIGFuZCIsImFuZCBlbmdsaXNoIGFuZCB0aGUiLCJlbmdsaXNoIGFuZCB0aGUgY2hpbmVzZSIsImFuZCB0aGUgY2hpbmVzZSB2ZXJzaW9uIiwidGhlIGNoaW5lc2UgdmVyc2lvbiBhbmQiLCJjaGluZXNlIHZlcnNpb24gYW5kIGVuZ2xpc2giLCJ2ZXJzaW9uIGFuZCBlbmdsaXNoIHZlcnNpb24iLCJhbmQgZW5nbGlzaCB2ZXJzaW9uIHNoYWxsIiwiZW5nbGlzaCB2ZXJzaW9uIHNoYWxsIGhhdmUiLCJ2ZXJzaW9uIHNoYWxsIGhhdmUgdGhlIiwic2hhbGwgaGF2ZSB0aGUgc2FtZSIsImhhdmUgdGhlIHNhbWUgbGVnYWwiLCJ0aGUgc2FtZSBsZWdhbCBlZmZlY3QiLCJzYW1lIGxlZ2FsIGVmZmVjdCBpbiIsImxlZ2FsIGVmZmVjdCBpbiB0aGUiLCJlZmZlY3QgaW4gdGhlIGNhc2UiLCJ0aGUgY2FzZSBvZiBkaXZlcmdlbmNlIiwiY2FzZSBvZiBkaXZlcmdlbmNlIGJldHdlZW4iLCJvZiBkaXZlcmdlbmNlIGJldHdlZW4gdGhlIiwiZGl2ZXJnZW5jZSBiZXR3ZWVuIHRoZSBjaGluZXNlIiwiYmV0d2VlbiB0aGUgY2hpbmVzZSBhbmQiLCJ0aGUgY2hpbmVzZSBhbmQgZW5nbGlzaCIsImNoaW5lc2UgYW5kIGVuZ2xpc2ggdmVyc2lvbnMiLCJhbmQgZW5nbGlzaCB2ZXJzaW9ucyB0aGUiLCJlbmdsaXNoIHZlcnNpb25zIHRoZSBjaGluZXNlIiwidmVyc2lvbnMgdGhlIGNoaW5lc2UgdmVyc2lvbiIsInRoZSBjaGluZXNlIHZlcnNpb24gc2hhbGwiLCJjaGluZXNlIHZlcnNpb24gc2hhbGwgcHJldmFpbCIsInZlcnNpb24gc2hhbGwgcHJldmFpbCBlbmQiLCJzaGFsbCBwcmV2YWlsIGVuZCBvZiIsInByZXZhaWwgZW5kIG9mIHRoZSIsInYyIHRvIHlvdXIgc29mdHdhcmUiLCJ2MiB0byB5b3VyIHdvcmsiLCJmaWxlIGNvcHlyaWdodCBjIHllYXIiLCIyIDIgMjAyMCAxIGh0dHAiLCIyIDIwMjAgMSBodHRwIGxpY2Vuc2UiLCIyMDIwIDEgaHR0cCBsaWNlbnNlIGNvc2NsIiwiMSBodHRwIGxpY2Vuc2UgY29zY2wgb3JnIiwiY29zY2wgb3JnIGNuIG11bGFucHNsMiAyIiwib3JnIGNuIG11bGFucHNsMiAyIDAiLCJjbiBtdWxhbnBzbDIgMiAwIDUwIiwibXVsYW5wc2wyIDIgMCA1MCAxIiwiMiAwIDUwIDEgMiIsIjMgNCA0IDUgNiIsIjQgNCA1IDYgMiIsIjQgNSA2IDIgMiIsIjUgNiAyIDIgMSIsIjYgMiAyIDEgMiIsIjIgMiAxIDIgbGljZW5zZSIsIjIgMSAyIGxpY2Vuc2UgMyIsImxpY2Vuc2UgMyBjb3B5cmlnaHQgYyB5ZWFyIiwiMyBjb3B5cmlnaHQgYyB5ZWFyIG5hbWUiLCJ2MiBmb3IgbW9yZSBkZXRhaWxzIG11bGFuIl19LHsibGljZW5zZVRleHRzIjpbIk11bHRpY3MgTGljZW5zZSBIaXN0b3JpY2FsIEJhY2tncm91bmRcblxuVGhpcyBlZGl0aW9uIG9mIHRoZSBNdWx0aWNzIHNvZnR3YXJlIG1hdGVyaWFscyBhbmQgZG9jdW1lbnRhdGlvbiBpcyBwcm92aWRlZCBhbmQgZG9uYXRlZCB0byBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5IGJ5IEdyb3VwIEJVTEwgaW5jbHVkaW5nIEJVTEwgSE4gSW5mb3JtYXRpb24gU3lzdGVtcyBJbmMuIGFzIGEgY29udHJpYnV0aW9uIHRvIGNvbXB1dGVyIHNjaWVuY2Uga25vd2xlZGdlLiBUaGlzIGRvbmF0aW9uIGlzIG1hZGUgYWxzbyB0byBnaXZlIGV2aWRlbmNlIG9mIHRoZSBjb21tb24gY29udHJpYnV0aW9ucyBvZiBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBCZWxsIExhYm9yYXRvcmllcywgR2VuZXJhbCBFbGVjdHJpYywgSG9uZXl3ZWxsIEluZm9ybWF0aW9uIFN5c3RlbXMgSW5jLiwgSG9uZXl3ZWxsIEJVTEwgSW5jLiwgR3JvdXBlIEJVTEwgYW5kIEJVTEwgSE4gSW5mb3JtYXRpb24gU3lzdGVtcyBJbmMuIHRvIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIG9wZXJhdGluZyBzeXN0ZW0uIE11bHRpY3MgZGV2ZWxvcG1lbnQgd2FzIGluaXRpYXRlZCBieSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5IFByb2plY3QgTUFDICgxOTYzLTE5NzApLCByZW5hbWVkIHRoZSBNSVQgTGFib3JhdG9yeSBmb3IgQ29tcHV0ZXIgU2NpZW5jZSBhbmQgQXJ0aWZpY2lhbCBJbnRlbGxpZ2VuY2UgaW4gdGhlIG1pZCAxOTcwcywgdW5kZXIgdGhlIGxlYWRlcnNoaXAgb2YgUHJvZmVzc29yIEZlcm5hbmRvIEpvc2UgQ29yYmF0by4gVXNlcnMgY29uc2lkZXIgdGhhdCBNdWx0aWNzIHByb3ZpZGVkIHRoZSBiZXN0IHNvZnR3YXJlIGFyY2hpdGVjdHVyZSBmb3IgbWFuYWdpbmcgY29tcHV0ZXIgaGFyZHdhcmUgcHJvcGVybHkgYW5kIGZvciBleGVjdXRpbmcgcHJvZ3JhbXMuIE1hbnkgc3Vic2VxdWVudCBvcGVyYXRpbmcgc3lzdGVtcyBpbmNvcnBvcmF0ZWQgTXVsdGljcyBwcmluY2lwbGVzLiBNdWx0aWNzIHdhcyBkaXN0cmlidXRlZCBpbiAxOTc1IHRvIDIwMDAgYnkgR3JvdXAgQnVsbCBpbiBFdXJvcGUsIGFuZCBpbiB0aGUgVS5TLiBieSBCdWxsIEhOIEluZm9ybWF0aW9uIFN5c3RlbXMgSW5jLiwgYXMgc3VjY2Vzc29yIGluIGludGVyZXN0IGJ5IGNoYW5nZSBpbiBuYW1lIG9ubHkgdG8gSG9uZXl3ZWxsIEJ1bGwgSW5jLiBhbmQgSG9uZXl3ZWxsIEluZm9ybWF0aW9uIFN5c3RlbXMgSW5jLiAuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZXNlIHByb2dyYW1zIGFuZCB0aGVpciBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGJlbG93IGNvcHlyaWdodCBub3RpY2UgYW5kIGhpc3RvcmljYWwgYmFja2dyb3VuZCBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBoaXN0b3JpY2FsIGJhY2tncm91bmQgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWVzIG9mIE1JVCwgSElTLCBCVUxMIG9yIEJVTEwgSE4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBwcm9ncmFtcyB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gQ29weXJpZ2h0IDE5NzIgYnkgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSBhbmQgSG9uZXl3ZWxsIEluZm9ybWF0aW9uIFN5c3RlbXMgSW5jLlxuXG5Db3B5cmlnaHQgMjAwNiBieSBCVUxMIEhOIEluZm9ybWF0aW9uIFN5c3RlbXMgSW5jLlxuXG5Db3B5cmlnaHQgMjAwNiBieSBCdWxsIFNBUyBBbGwgUmlnaHRzIFJlc2VydmVkIl0sImxpY2Vuc2VJZHMiOlsiTXVsdGljcyJdLCJrZXl3b3JkcyI6WyJtdWx0aWNzIGxpY2Vuc2UgaGlzdG9yaWNhbCIsImxpY2Vuc2UgaGlzdG9yaWNhbCBiYWNrZ3JvdW5kIiwiaGlzdG9yaWNhbCBiYWNrZ3JvdW5kIHRoaXMiLCJiYWNrZ3JvdW5kIHRoaXMgZWRpdGlvbiIsInRoaXMgZWRpdGlvbiBvZiIsIm9mIHRoZSBtdWx0aWNzIiwidGhlIG11bHRpY3Mgc29mdHdhcmUiLCJtdWx0aWNzIHNvZnR3YXJlIG1hdGVyaWFscyIsInNvZnR3YXJlIG1hdGVyaWFscyBhbmQiLCJpcyBwcm92aWRlZCBhbmQiLCJwcm92aWRlZCBhbmQgZG9uYXRlZCIsImFuZCBkb25hdGVkIHRvIiwiZG9uYXRlZCB0byBtYXNzYWNodXNldHRzIiwidG8gbWFzc2FjaHVzZXR0cyBpbnN0aXR1dGUiLCJvZiB0ZWNobm9sb2d5IGJ5IiwidGVjaG5vbG9neSBieSBncm91cCIsImdyb3VwIGJ1bGwgaW5jbHVkaW5nIiwiYnVsbCBpbmNsdWRpbmcgYnVsbCIsImluY2x1ZGluZyBidWxsIGhuIiwiaW5jIGFzIGEiLCJjb250cmlidXRpb24gdG8gY29tcHV0ZXIiLCJ0byBjb21wdXRlciBzY2llbmNlIiwiY29tcHV0ZXIgc2NpZW5jZSBrbm93bGVkZ2UiLCJzY2llbmNlIGtub3dsZWRnZSB0aGlzIiwia25vd2xlZGdlIHRoaXMgZG9uYXRpb24iLCJ0aGlzIGRvbmF0aW9uIGlzIiwiZG9uYXRpb24gaXMgbWFkZSIsImlzIG1hZGUgYWxzbyIsIm1hZGUgYWxzbyB0byIsImFsc28gdG8gZ2l2ZSIsInRvIGdpdmUgZXZpZGVuY2UiLCJnaXZlIGV2aWRlbmNlIG9mIiwiZXZpZGVuY2Ugb2YgdGhlIiwidGhlIGNvbW1vbiBjb250cmlidXRpb25zIiwiY29tbW9uIGNvbnRyaWJ1dGlvbnMgb2YiLCJjb250cmlidXRpb25zIG9mIG1hc3NhY2h1c2V0dHMiLCJvZiBtYXNzYWNodXNldHRzIGluc3RpdHV0ZSIsIm9mIHRlY2hub2xvZ3kgYmVsbCIsInRlY2hub2xvZ3kgYmVsbCBsYWJvcmF0b3JpZXMiLCJiZWxsIGxhYm9yYXRvcmllcyBnZW5lcmFsIiwibGFib3JhdG9yaWVzIGdlbmVyYWwgZWxlY3RyaWMiLCJnZW5lcmFsIGVsZWN0cmljIGhvbmV5d2VsbCIsImVsZWN0cmljIGhvbmV5d2VsbCBpbmZvcm1hdGlvbiIsInN5c3RlbXMgaW5jIGhvbmV5d2VsbCIsImluYyBob25leXdlbGwgYnVsbCIsImJ1bGwgaW5jIGdyb3VwZSIsImluYyBncm91cGUgYnVsbCIsImdyb3VwZSBidWxsIGFuZCIsImJ1bGwgYW5kIGJ1bGwiLCJhbmQgYnVsbCBobiIsInN5c3RlbXMgaW5jIHRvIiwiaW5jIHRvIHRoZSIsInRvIHRoZSBkZXZlbG9wbWVudCIsIm9mIHRoaXMgb3BlcmF0aW5nIiwidGhpcyBvcGVyYXRpbmcgc3lzdGVtIiwib3BlcmF0aW5nIHN5c3RlbSBtdWx0aWNzIiwic3lzdGVtIG11bHRpY3MgZGV2ZWxvcG1lbnQiLCJtdWx0aWNzIGRldmVsb3BtZW50IHdhcyIsImRldmVsb3BtZW50IHdhcyBpbml0aWF0ZWQiLCJ3YXMgaW5pdGlhdGVkIGJ5IiwiaW5pdGlhdGVkIGJ5IG1hc3NhY2h1c2V0dHMiLCJvZiB0ZWNobm9sb2d5IHByb2plY3QiLCJ0ZWNobm9sb2d5IHByb2plY3QgbWFjIiwicHJvamVjdCBtYWMgMTk2MyIsIm1hYyAxOTYzIDE5NzAiLCIxOTYzIDE5NzAgcmVuYW1lZCIsIjE5NzAgcmVuYW1lZCB0aGUiLCJyZW5hbWVkIHRoZSBtaXQiLCJ0aGUgbWl0IGxhYm9yYXRvcnkiLCJtaXQgbGFib3JhdG9yeSBmb3IiLCJsYWJvcmF0b3J5IGZvciBjb21wdXRlciIsImZvciBjb21wdXRlciBzY2llbmNlIiwiY29tcHV0ZXIgc2NpZW5jZSBhbmQiLCJzY2llbmNlIGFuZCBhcnRpZmljaWFsIiwiYW5kIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlIiwiYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UgaW4iLCJpbnRlbGxpZ2VuY2UgaW4gdGhlIiwiaW4gdGhlIG1pZCIsInRoZSBtaWQgMTk3MHMiLCJtaWQgMTk3MHMgdW5kZXIiLCIxOTcwcyB1bmRlciB0aGUiLCJ1bmRlciB0aGUgbGVhZGVyc2hpcCIsInRoZSBsZWFkZXJzaGlwIG9mIiwibGVhZGVyc2hpcCBvZiBwcm9mZXNzb3IiLCJvZiBwcm9mZXNzb3IgZmVybmFuZG8iLCJwcm9mZXNzb3IgZmVybmFuZG8gam9zZSIsImZlcm5hbmRvIGpvc2UgY29yYmF0byIsImpvc2UgY29yYmF0byB1c2VycyIsImNvcmJhdG8gdXNlcnMgY29uc2lkZXIiLCJ1c2VycyBjb25zaWRlciB0aGF0IiwiY29uc2lkZXIgdGhhdCBtdWx0aWNzIiwidGhhdCBtdWx0aWNzIHByb3ZpZGVkIiwibXVsdGljcyBwcm92aWRlZCB0aGUiLCJwcm92aWRlZCB0aGUgYmVzdCIsInRoZSBiZXN0IHNvZnR3YXJlIiwiYmVzdCBzb2Z0d2FyZSBhcmNoaXRlY3R1cmUiLCJzb2Z0d2FyZSBhcmNoaXRlY3R1cmUgZm9yIiwiYXJjaGl0ZWN0dXJlIGZvciBtYW5hZ2luZyIsImZvciBtYW5hZ2luZyBjb21wdXRlciIsIm1hbmFnaW5nIGNvbXB1dGVyIGhhcmR3YXJlIiwiY29tcHV0ZXIgaGFyZHdhcmUgcHJvcGVybHkiLCJoYXJkd2FyZSBwcm9wZXJseSBhbmQiLCJwcm9wZXJseSBhbmQgZm9yIiwiYW5kIGZvciBleGVjdXRpbmciLCJmb3IgZXhlY3V0aW5nIHByb2dyYW1zIiwiZXhlY3V0aW5nIHByb2dyYW1zIG1hbnkiLCJwcm9ncmFtcyBtYW55IHN1YnNlcXVlbnQiLCJtYW55IHN1YnNlcXVlbnQgb3BlcmF0aW5nIiwic3Vic2VxdWVudCBvcGVyYXRpbmcgc3lzdGVtcyIsIm9wZXJhdGluZyBzeXN0ZW1zIGluY29ycG9yYXRlZCIsInN5c3RlbXMgaW5jb3Jwb3JhdGVkIG11bHRpY3MiLCJpbmNvcnBvcmF0ZWQgbXVsdGljcyBwcmluY2lwbGVzIiwibXVsdGljcyBwcmluY2lwbGVzIG11bHRpY3MiLCJwcmluY2lwbGVzIG11bHRpY3Mgd2FzIiwibXVsdGljcyB3YXMgZGlzdHJpYnV0ZWQiLCJ3YXMgZGlzdHJpYnV0ZWQgaW4iLCJkaXN0cmlidXRlZCBpbiAxOTc1IiwiaW4gMTk3NSB0byIsIjE5NzUgdG8gMjAwMCIsInRvIDIwMDAgYnkiLCIyMDAwIGJ5IGdyb3VwIiwiZ3JvdXAgYnVsbCBpbiIsImJ1bGwgaW4gZXVyb3BlIiwiaW4gZXVyb3BlIGFuZCIsImV1cm9wZSBhbmQgaW4iLCJ1IHMgYnkiLCJzIGJ5IGJ1bGwiLCJpbmMgYXMgc3VjY2Vzc29yIiwiYXMgc3VjY2Vzc29yIGluIiwic3VjY2Vzc29yIGluIGludGVyZXN0IiwiaW4gaW50ZXJlc3QgYnkiLCJpbnRlcmVzdCBieSBjaGFuZ2UiLCJieSBjaGFuZ2UgaW4iLCJjaGFuZ2UgaW4gbmFtZSIsImluIG5hbWUgb25seSIsIm5hbWUgb25seSB0byIsIm9ubHkgdG8gaG9uZXl3ZWxsIiwidG8gaG9uZXl3ZWxsIGJ1bGwiLCJidWxsIGluYyBhbmQiLCJpbmMgYW5kIGhvbmV5d2VsbCIsInN5c3RlbXMgaW5jIHBlcm1pc3Npb24iLCJhbmQgZGlzdHJpYnV0ZSB0aGVzZSIsImRpc3RyaWJ1dGUgdGhlc2UgcHJvZ3JhbXMiLCJ0aGVzZSBwcm9ncmFtcyBhbmQiLCJwcm9ncmFtcyBhbmQgdGhlaXIiLCJhbmQgdGhlaXIgZG9jdW1lbnRhdGlvbiIsInRoZWlyIGRvY3VtZW50YXRpb24gZm9yIiwidGhhdCB0aGUgYmVsb3ciLCJ0aGUgYmVsb3cgY29weXJpZ2h0IiwiYmVsb3cgY29weXJpZ2h0IG5vdGljZSIsImhpc3RvcmljYWwgYmFja2dyb3VuZCBhcHBlYXIiLCJiYWNrZ3JvdW5kIGFwcGVhciBpbiIsImhpc3RvcmljYWwgYmFja2dyb3VuZCBhbmQiLCJiYWNrZ3JvdW5kIGFuZCB0aGlzIiwidGhhdCB0aGUgbmFtZXMiLCJuYW1lcyBvZiBtaXQiLCJvZiBtaXQgaGlzIiwibWl0IGhpcyBidWxsIiwiaGlzIGJ1bGwgb3IiLCJidWxsIG9yIGJ1bGwiLCJvciBidWxsIGhuIiwiYnVsbCBobiBub3QiLCJobiBub3QgYmUiLCJ0aGUgcHJvZ3JhbXMgd2l0aG91dCIsInByb2dyYW1zIHdpdGhvdXQgc3BlY2lmaWMiLCJ3cml0dGVuIHBlcm1pc3Npb24gY29weXJpZ2h0IiwicGVybWlzc2lvbiBjb3B5cmlnaHQgMTk3MiIsImNvcHlyaWdodCAxOTcyIGJ5IiwiMTk3MiBieSBtYXNzYWNodXNldHRzIiwidGVjaG5vbG9neSBhbmQgaG9uZXl3ZWxsIiwiYnkgYnVsbCBzYXMiLCJidWxsIHNhcyBhbGwiLCJzYXMgYWxsIHJpZ2h0cyIsIm11bHRpY3MgbGljZW5zZSBoaXN0b3JpY2FsIGJhY2tncm91bmQiLCJsaWNlbnNlIGhpc3RvcmljYWwgYmFja2dyb3VuZCB0aGlzIiwiaGlzdG9yaWNhbCBiYWNrZ3JvdW5kIHRoaXMgZWRpdGlvbiIsImJhY2tncm91bmQgdGhpcyBlZGl0aW9uIG9mIiwidGhpcyBlZGl0aW9uIG9mIHRoZSIsImVkaXRpb24gb2YgdGhlIG11bHRpY3MiLCJvZiB0aGUgbXVsdGljcyBzb2Z0d2FyZSIsInRoZSBtdWx0aWNzIHNvZnR3YXJlIG1hdGVyaWFscyIsIm11bHRpY3Mgc29mdHdhcmUgbWF0ZXJpYWxzIGFuZCIsInNvZnR3YXJlIG1hdGVyaWFscyBhbmQgZG9jdW1lbnRhdGlvbiIsIm1hdGVyaWFscyBhbmQgZG9jdW1lbnRhdGlvbiBpcyIsImRvY3VtZW50YXRpb24gaXMgcHJvdmlkZWQgYW5kIiwiaXMgcHJvdmlkZWQgYW5kIGRvbmF0ZWQiLCJwcm92aWRlZCBhbmQgZG9uYXRlZCB0byIsImFuZCBkb25hdGVkIHRvIG1hc3NhY2h1c2V0dHMiLCJkb25hdGVkIHRvIG1hc3NhY2h1c2V0dHMgaW5zdGl0dXRlIiwidG8gbWFzc2FjaHVzZXR0cyBpbnN0aXR1dGUgb2YiLCJpbnN0aXR1dGUgb2YgdGVjaG5vbG9neSBieSIsIm9mIHRlY2hub2xvZ3kgYnkgZ3JvdXAiLCJ0ZWNobm9sb2d5IGJ5IGdyb3VwIGJ1bGwiLCJieSBncm91cCBidWxsIGluY2x1ZGluZyIsImdyb3VwIGJ1bGwgaW5jbHVkaW5nIGJ1bGwiLCJidWxsIGluY2x1ZGluZyBidWxsIGhuIiwiaW5jbHVkaW5nIGJ1bGwgaG4gaW5mb3JtYXRpb24iLCJzeXN0ZW1zIGluYyBhcyBhIiwiaW5jIGFzIGEgY29udHJpYnV0aW9uIiwiYXMgYSBjb250cmlidXRpb24gdG8iXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChjKSAxOTk1LTIwMTIgYnkgQXJra3JhIEVudGVycHJpc2VzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRElTQ0xBSU1FUi5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBESVNDTEFJTUVSIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBBbnkgYWRkaXRpb25zLCBkZWxldGlvbnMsIG9yIGNoYW5nZXMgdG8gdGhlIG9yaWdpbmFsIGZpbGVzIG11c3QgYmUgY2xlYXJseSBpbmRpY2F0ZWQgaW4gYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24uIGluY2x1ZGluZyB0aGUgcmVhc29ucyBmb3IgdGhlIGNoYW5nZXMsIGFuZCB0aGUgbmFtZXMgb2YgdGhvc2Ugd2hvIG1hZGUgdGhlIG1vZGlmaWNhdGlvbnMuXG5cbkRJU0NMQUlNRVJcblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iXSwibGljZW5zZUlkcyI6WyJNdXAiXSwia2V5d29yZHMiOlsiYyAxOTk1IDIwMTIiLCIxOTk1IDIwMTIgYnkiLCIyMDEyIGJ5IGFya2tyYSIsImJ5IGFya2tyYSBlbnRlcnByaXNlcyIsImFya2tyYSBlbnRlcnByaXNlcyBhbGwiLCJlbnRlcnByaXNlcyBhbGwgcmlnaHRzIiwiMyBhbnkgYWRkaXRpb25zIiwiYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gaW5jbHVkaW5nIiwiZG9jdW1lbnRhdGlvbiBpbmNsdWRpbmcgdGhlIiwiaW5jbHVkaW5nIHRoZSByZWFzb25zIiwiY2hhbmdlcyBhbmQgdGhlIiwiYW5kIHRoZSBuYW1lcyIsIm5hbWVzIG9mIHRob3NlIiwidGhvc2Ugd2hvIG1hZGUiLCJ3aG8gbWFkZSB0aGUiLCJtYWRlIHRoZSBtb2RpZmljYXRpb25zIiwidGhlIG1vZGlmaWNhdGlvbnMgZGlzY2xhaW1lciIsIm1vZGlmaWNhdGlvbnMgZGlzY2xhaW1lciB0aGlzIiwiY29weXJpZ2h0IGMgMTk5NSAyMDEyIiwiYyAxOTk1IDIwMTIgYnkiLCIxOTk1IDIwMTIgYnkgYXJra3JhIiwiMjAxMiBieSBhcmtrcmEgZW50ZXJwcmlzZXMiLCJieSBhcmtrcmEgZW50ZXJwcmlzZXMgYWxsIiwiYXJra3JhIGVudGVycHJpc2VzIGFsbCByaWdodHMiLCJlbnRlcnByaXNlcyBhbGwgcmlnaHRzIHJlc2VydmVkIiwiZGlzdHJpYnV0aW9uIDMgYW55IGFkZGl0aW9ucyIsIjMgYW55IGFkZGl0aW9ucyBkZWxldGlvbnMiLCJpbiBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBpbmNsdWRpbmciLCJhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBpbmNsdWRpbmcgdGhlIiwiZG9jdW1lbnRhdGlvbiBpbmNsdWRpbmcgdGhlIHJlYXNvbnMiLCJpbmNsdWRpbmcgdGhlIHJlYXNvbnMgZm9yIiwicmVhc29ucyBmb3IgdGhlIGNoYW5nZXMiLCJmb3IgdGhlIGNoYW5nZXMgYW5kIiwidGhlIGNoYW5nZXMgYW5kIHRoZSIsImNoYW5nZXMgYW5kIHRoZSBuYW1lcyIsImFuZCB0aGUgbmFtZXMgb2YiLCJ0aGUgbmFtZXMgb2YgdGhvc2UiLCJuYW1lcyBvZiB0aG9zZSB3aG8iLCJvZiB0aG9zZSB3aG8gbWFkZSIsInRob3NlIHdobyBtYWRlIHRoZSIsIndobyBtYWRlIHRoZSBtb2RpZmljYXRpb25zIiwibWFkZSB0aGUgbW9kaWZpY2F0aW9ucyBkaXNjbGFpbWVyIiwidGhlIG1vZGlmaWNhdGlvbnMgZGlzY2xhaW1lciB0aGlzIiwibW9kaWZpY2F0aW9ucyBkaXNjbGFpbWVyIHRoaXMgc29mdHdhcmUiLCJjb3B5cmlnaHQgYyAxOTk1IDIwMTIgYnkiLCJjIDE5OTUgMjAxMiBieSBhcmtrcmEiLCIxOTk1IDIwMTIgYnkgYXJra3JhIGVudGVycHJpc2VzIiwiMjAxMiBieSBhcmtrcmEgZW50ZXJwcmlzZXMgYWxsIiwiYnkgYXJra3JhIGVudGVycHJpc2VzIGFsbCByaWdodHMiLCJhcmtrcmEgZW50ZXJwcmlzZXMgYWxsIHJpZ2h0cyByZXNlcnZlZCIsImVudGVycHJpc2VzIGFsbCByaWdodHMgcmVzZXJ2ZWQgcmVkaXN0cmlidXRpb24iLCJ0aGUgZGlzdHJpYnV0aW9uIDMgYW55IGFkZGl0aW9ucyIsImRpc3RyaWJ1dGlvbiAzIGFueSBhZGRpdGlvbnMgZGVsZXRpb25zIiwiMyBhbnkgYWRkaXRpb25zIGRlbGV0aW9ucyBvciIsImluZGljYXRlZCBpbiBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBpbmNsdWRpbmciLCJpbiBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBpbmNsdWRpbmcgdGhlIiwiYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gaW5jbHVkaW5nIHRoZSByZWFzb25zIiwiZG9jdW1lbnRhdGlvbiBpbmNsdWRpbmcgdGhlIHJlYXNvbnMgZm9yIiwiaW5jbHVkaW5nIHRoZSByZWFzb25zIGZvciB0aGUiLCJ0aGUgcmVhc29ucyBmb3IgdGhlIGNoYW5nZXMiLCJyZWFzb25zIGZvciB0aGUgY2hhbmdlcyBhbmQiLCJmb3IgdGhlIGNoYW5nZXMgYW5kIHRoZSIsInRoZSBjaGFuZ2VzIGFuZCB0aGUgbmFtZXMiLCJjaGFuZ2VzIGFuZCB0aGUgbmFtZXMgb2YiLCJhbmQgdGhlIG5hbWVzIG9mIHRob3NlIiwidGhlIG5hbWVzIG9mIHRob3NlIHdobyIsIm5hbWVzIG9mIHRob3NlIHdobyBtYWRlIiwib2YgdGhvc2Ugd2hvIG1hZGUgdGhlIiwidGhvc2Ugd2hvIG1hZGUgdGhlIG1vZGlmaWNhdGlvbnMiLCJ3aG8gbWFkZSB0aGUgbW9kaWZpY2F0aW9ucyBkaXNjbGFpbWVyIiwibWFkZSB0aGUgbW9kaWZpY2F0aW9ucyBkaXNjbGFpbWVyIHRoaXMiLCJ0aGUgbW9kaWZpY2F0aW9ucyBkaXNjbGFpbWVyIHRoaXMgc29mdHdhcmUiLCJtb2RpZmljYXRpb25zIGRpc2NsYWltZXIgdGhpcyBzb2Z0d2FyZSBpcyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJOQVNBIE9QRU4gU09VUkNFIEFHUkVFTUVOVCBWRVJTSU9OIDEuM1xuXG5USElTIE9QRU4gU09VUkNFIEFHUkVFTUVOVCAoXCJBR1JFRU1FTlRcIikgREVGSU5FUyBUSEUgUklHSFRTIE9GIFVTRSwgUkVQUk9EVUNUSU9OLCBESVNUUklCVVRJT04sIE1PRElGSUNBVElPTiBBTkQgUkVESVNUUklCVVRJT04gT0YgQ0VSVEFJTiBDT01QVVRFUiBTT0ZUV0FSRSBPUklHSU5BTExZIFJFTEVBU0VEIEJZIFRIRSBVTklURUQgU1RBVEVTIEdPVkVSTk1FTlQgQVMgUkVQUkVTRU5URUQgQlkgVEhFIEdPVkVSTk1FTlQgQUdFTkNZIExJU1RFRCBCRUxPVyAoXCJHT1ZFUk5NRU5UIEFHRU5DWVwiKS4gVEhFIFVOSVRFRCBTVEFURVMgR09WRVJOTUVOVCwgQVMgUkVQUkVTRU5URUQgQlkgR09WRVJOTUVOVCBBR0VOQ1ksIElTIEFOIElOVEVOREVEIFRISVJELVBBUlRZIEJFTkVGSUNJQVJZIE9GIEFMTCBTVUJTRVFVRU5UIERJU1RSSUJVVElPTlMgT1IgUkVESVNUUklCVVRJT05TIE9GIFRIRSBTVUJKRUNUIFNPRlRXQVJFLiBBTllPTkUgV0hPIFVTRVMsIFJFUFJPRFVDRVMsIERJU1RSSUJVVEVTLCBNT0RJRklFUyBPUiBSRURJU1RSSUJVVEVTIFRIRSBTVUJKRUNUIFNPRlRXQVJFLCBBUyBERUZJTkVEIEhFUkVJTiwgT1IgQU5ZIFBBUlQgVEhFUkVPRiwgSVMsIEJZIFRIQVQgQUNUSU9OLCBBQ0NFUFRJTkcgSU4gRlVMTCBUSEUgUkVTUE9OU0lCSUxJVElFUyBBTkQgT0JMSUdBVElPTlMgQ09OVEFJTkVEIElOIFRISVMgQUdSRUVNRU5ULlxuXG5Hb3Zlcm5tZW50IEFnZW5jeTogX19fX19fX19fX19fX19fXG5cbkdvdmVybm1lbnQgQWdlbmN5IE9yaWdpbmFsIFNvZnR3YXJlIERlc2lnbmF0aW9uOiBfX19fX19fX19fX19fX19cblxuR292ZXJubWVudCBBZ2VuY3kgT3JpZ2luYWwgU29mdHdhcmUgVGl0bGU6IF9fX19fX19fX19fX19fX1xuXG5Vc2VyIFJlZ2lzdHJhdGlvbiBSZXF1ZXN0ZWQuIFBsZWFzZSBWaXNpdCBodHRwOi8vX19fX19fX19fX19fX19fXG5cbkdvdmVybm1lbnQgQWdlbmN5IFBvaW50IG9mIENvbnRhY3QgZm9yIE9yaWdpbmFsIFNvZnR3YXJlOiBfX19fX19fX19fX19fX19cblxuICAgXG5cbiAgIERFRklOSVRJT05TXG5cbiAgICAgIEEuIFwiQ29udHJpYnV0b3JcIiBtZWFucyBHb3Zlcm5tZW50IEFnZW5jeSwgYXMgdGhlIGRldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIGFuZCBhbnkgZW50aXR5IHRoYXQgbWFrZXMgYSBNb2RpZmljYXRpb24uXG5cbiAgICAgIEIuIFwiQ292ZXJlZCBQYXRlbnRzXCIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBNb2RpZmljYXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBTdWJqZWN0IFNvZnR3YXJlLlxuXG4gICAgICBDLiBcIkRpc3BsYXlcIiBtZWFucyB0aGUgc2hvd2luZyBvZiBhIGNvcHkgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIGVpdGhlciBkaXJlY3RseSBvciBieSBtZWFucyBvZiBhbiBpbWFnZSwgb3IgYW55IG90aGVyIGRldmljZS5cblxuICAgICAgRC4gXCJEaXN0cmlidXRpb25cIiBtZWFucyBjb252ZXlhbmNlIG9yIHRyYW5zZmVyIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCByZWdhcmRsZXNzIG9mIG1lYW5zLCB0byBhbm90aGVyLlxuXG4gICAgICBFLiBcIkxhcmdlciBXb3JrXCIgbWVhbnMgY29tcHV0ZXIgc29mdHdhcmUgdGhhdCBjb21iaW5lcyBTdWJqZWN0IFNvZnR3YXJlLCBvciBwb3J0aW9ucyB0aGVyZW9mLCB3aXRoIHNvZnR3YXJlIHNlcGFyYXRlIGZyb20gdGhlIFN1YmplY3QgU29mdHdhcmUgdGhhdCBpcyBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LlxuXG4gICAgICBGLiBcIk1vZGlmaWNhdGlvblwiIG1lYW5zIGFueSBhbHRlcmF0aW9uIG9mLCBpbmNsdWRpbmcgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSwgdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBTdWJqZWN0IFNvZnR3YXJlLCBhbmQgaW5jbHVkZXMgZGVyaXZhdGl2ZSB3b3JrcywgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gdGhlIENvcHlyaWdodCBTdGF0dXRlLCAxNyBVU0MgMTAxLiBIb3dldmVyLCB0aGUgYWN0IG9mIGluY2x1ZGluZyBTdWJqZWN0IFNvZnR3YXJlIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yayBkb2VzIG5vdCBpbiBhbmQgb2YgaXRzZWxmIGNvbnN0aXR1dGUgYSBNb2RpZmljYXRpb24uXG5cbiAgICAgIEcuIFwiT3JpZ2luYWwgU29mdHdhcmVcIiBtZWFucyB0aGUgY29tcHV0ZXIgc29mdHdhcmUgZmlyc3QgcmVsZWFzZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYnkgR292ZXJubWVudCBBZ2VuY3kgd2l0aCBHb3Zlcm5tZW50IEFnZW5jeSBkZXNpZ25hdGlvbiBfX19fX19fX19fX19fX18gYW5kIGVudGl0bGVkIF9fX19fX19fX19fX19fXyAsIGluY2x1ZGluZyBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLCBpZiBhbnkuXG5cbiAgICAgIEguIFwiUmVjaXBpZW50XCIgbWVhbnMgYW55b25lIHdobyBhY3F1aXJlcyB0aGUgU3ViamVjdCBTb2Z0d2FyZSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuXG5cbiAgICAgIEkuIFwiUmVkaXN0cmlidXRpb25cIiBtZWFucyBEaXN0cmlidXRpb24gb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgYWZ0ZXIgYSBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS5cblxuICAgICAgSi4gXCJSZXByb2R1Y3Rpb25cIiBtZWFucyB0aGUgbWFraW5nIG9mIGEgY291bnRlcnBhcnQsIGltYWdlIG9yIGNvcHkgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUuXG5cbiAgICAgIEsuIFwiU2FsZVwiIG1lYW5zIHRoZSBleGNoYW5nZSBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBmb3IgbW9uZXkgb3IgZXF1aXZhbGVudCB2YWx1ZS5cblxuICAgICAgTC4gXCJTdWJqZWN0IFNvZnR3YXJlXCIgbWVhbnMgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBNb2RpZmljYXRpb25zLCBvciBhbnkgcmVzcGVjdGl2ZSBwYXJ0cyB0aGVyZW9mLlxuXG4gICAgICBNLiBcIlVzZVwiIG1lYW5zIHRoZSBhcHBsaWNhdGlvbiBvciBlbXBsb3ltZW50IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS5cblxuICAgXG5cbiAgIEdSQU5UIE9GIFJJR0hUU1xuXG4gICAgICBBLiBVbmRlciBOb24tUGF0ZW50IFJpZ2h0czogU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IsIHdpdGggcmVzcGVjdCB0byBpdHMgb3duIGNvbnRyaWJ1dGlvbiB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgaGVyZWJ5IGdyYW50cyB0byBlYWNoIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIGVuZ2FnZSBpbiB0aGUgZm9sbG93aW5nIGFjdGl2aXRpZXMgcGVydGFpbmluZyB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZTpcblxuICAgICAgICAgMS4gVXNlXG5cbiAgICAgICAgIDIuIERpc3RyaWJ1dGlvblxuXG4gICAgICAgICAzLiBSZXByb2R1Y3Rpb25cblxuICAgICAgICAgNC4gTW9kaWZpY2F0aW9uXG5cbiAgICAgICAgIDUuIFJlZGlzdHJpYnV0aW9uXG5cbiAgICAgICAgIDYuIERpc3BsYXlcblxuICAgICAgQi4gVW5kZXIgUGF0ZW50IFJpZ2h0czogU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IsIHdpdGggcmVzcGVjdCB0byBpdHMgb3duIGNvbnRyaWJ1dGlvbiB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgaGVyZWJ5IGdyYW50cyB0byBlYWNoIFJlY2lwaWVudCB1bmRlciBDb3ZlcmVkIFBhdGVudHMgYSBub24tZXhjbHVzaXZlLCB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB0byBlbmdhZ2UgaW4gdGhlIGZvbGxvd2luZyBhY3Rpdml0aWVzIHBlcnRhaW5pbmcgdG8gdGhlIFN1YmplY3QgU29mdHdhcmU6XG5cbiAgICAgICAgIDEuIFVzZVxuXG4gICAgICAgICAyLiBEaXN0cmlidXRpb25cblxuICAgICAgICAgMy4gUmVwcm9kdWN0aW9uXG5cbiAgICAgICAgIDQuIFNhbGVcblxuICAgICAgICAgNS4gT2ZmZXIgZm9yIFNhbGVcblxuICAgICAgQy4gVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIFBhcmFncmFwaCBCLiBhbHNvIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiBhIENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9uIGFuZCB0aGUgU3ViamVjdCBTb2Z0d2FyZSBpZiwgYXQgdGhlIHRpbWUgdGhlIE1vZGlmaWNhdGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHRoZSBhZGRpdGlvbiBvZiBzdWNoIE1vZGlmaWNhdGlvbiBjYXVzZXMgdGhlIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlIENvdmVyZWQgUGF0ZW50cy4gSXQgZG9lcyBub3QgYXBwbHkgdG8gYW55IG90aGVyIGNvbWJpbmF0aW9ucyB0aGF0IGluY2x1ZGUgYSBNb2RpZmljYXRpb24uXG5cbiAgICAgIEQuIFRoZSByaWdodHMgZ3JhbnRlZCBpbiBQYXJhZ3JhcGhzIEEuIGFuZCBCLiBhbGxvdyB0aGUgUmVjaXBpZW50IHRvIHN1YmxpY2Vuc2UgdGhvc2Ugc2FtZSByaWdodHMuIFN1Y2ggc3VibGljZW5zZSBtdXN0IGJlIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LlxuXG4gICBcblxuICAgT0JMSUdBVElPTlMgT0YgUkVDSVBJRU5UXG5cbiAgICAgIEEuIERpc3RyaWJ1dGlvbiBvciBSZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBtdXN0IGJlIG1hZGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgZXhjZXB0IGZvciBhZGRpdGlvbnMgY292ZXJlZCB1bmRlciBwYXJhZ3JhcGggM0guXG5cbiAgICAgICAgIDEuIFdoZW5ldmVyIGEgUmVjaXBpZW50IGRpc3RyaWJ1dGVzIG9yIHJlZGlzdHJpYnV0ZXMgdGhlIFN1YmplY3QgU29mdHdhcmUsIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlOyBhbmRcblxuICAgICAgICAgMi4gSWYgUmVjaXBpZW50IGRpc3RyaWJ1dGVzIG9yIHJlZGlzdHJpYnV0ZXMgdGhlIFN1YmplY3QgU29mdHdhcmUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBzb3VyY2UgY29kZSwgUmVjaXBpZW50IG11c3QgYWxzbyBtYWtlIHRoZSBzb3VyY2UgY29kZSBmcmVlbHkgYXZhaWxhYmxlLCBhbmQgbXVzdCBwcm92aWRlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBvYnRhaW4gdGhlIHNvdXJjZSBjb2RlIGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS5cblxuICAgICAgQi4gRWFjaCBSZWNpcGllbnQgbXVzdCBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2UgYXBwZWFycyBwcm9taW5lbnRseSBpbiB0aGUgU3ViamVjdCBTb2Z0d2FyZTpcblxuICAgICAgW0dvdmVybm1lbnQgQWdlbmN5IHdpbGwgaW5zZXJ0IHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBub3RpY2UgaW4gZWFjaCBhZ3JlZW1lbnQgYWNjb21wYW55aW5nIHRoZSBpbml0aWFsIGRpc3RyaWJ1dGlvbiBvZiBvcmlnaW5hbCBzb2Z0d2FyZSBhbmQgcmVtb3ZlIHRoaXMgYnJhY2tldGVkIGxhbmd1YWdlLl1cblxuICAgICAgW1RoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSB3aWxsIGJlIHVzZWQgaWYgY3JlYXRlZCBieSBhIGNvbnRyYWN0b3IgcHVyc3VhbnQgdG8gR292ZXJubWVudCBBZ2VuY3kgY29udHJhY3QgYW5kIHJpZ2h0cyBvYnRhaW5lZCBmcm9tIGNyZWF0b3IgYnkgYXNzaWdubWVudC4gR292ZXJubWVudCBBZ2VuY3kgd2lsbCBpbnNlcnQgdGhlIHllYXIgYW5kIGl0cyBBZ2VuY3kgZGVzaWduYXRpb24gYW5kIHJlbW92ZSB0aGUgYnJhY2tldGVkIGxhbmd1YWdlLl0gQ29weXJpZ2h0IChjKSB7WUVBUn0gVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGFzIHJlcHJlc2VudGVkIGJ5IF9fX19fX19fX19fX19fXyAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbiAgICAgIFtUaGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2Ugd2lsbCBiZSB1c2VkIGlmIGNyZWF0ZWQgYnkgY2l2aWwgc2VydmFudHMgb25seS4gR292ZXJubWVudCBBZ2VuY3kgd2lsbCBpbnNlcnQgdGhlIHllYXIgYW5kIGl0cyBBZ2VuY3kgZGVzaWduYXRpb24gYW5kIHJlbW92ZSB0aGUgYnJhY2tldGVkIGxhbmd1YWdlLl0gQ29weXJpZ2h0IChjKSB7WUVBUn0gVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGFzIHJlcHJlc2VudGVkIGJ5IF9fX19fX19fX19fX19fXyAuIE5vIGNvcHlyaWdodCBpcyBjbGFpbWVkIGluIHRoZSBVbml0ZWQgU3RhdGVzIHVuZGVyIFRpdGxlIDE3LCBVLlMuQ29kZS4gQWxsIE90aGVyIFJpZ2h0cyBSZXNlcnZlZC5cblxuICAgICAgQy4gRWFjaCBDb250cmlidXRvciBtdXN0IGNoYXJhY3Rlcml6ZSBpdHMgYWx0ZXJhdGlvbiBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBhcyBhIE1vZGlmaWNhdGlvbiBhbmQgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3Igb2YgaXRzIE1vZGlmaWNhdGlvbiBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgTW9kaWZpY2F0aW9uLiBJbiBmdWxmaWxsbWVudCBvZiB0aGVzZSByZXF1aXJlbWVudHMsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIGZpbGUgKGUuZy4sIGEgY2hhbmdlIGxvZyBmaWxlKSB0aGF0IGRlc2NyaWJlcyB0aGUgYWx0ZXJhdGlvbnMgbWFkZSBhbmQgdGhlIGRhdGUgb2YgdGhlIGFsdGVyYXRpb25zLCBpZGVudGlmaWVzIENvbnRyaWJ1dG9yIGFzIG9yaWdpbmF0b3Igb2YgdGhlIGFsdGVyYXRpb25zLCBhbmQgY29uc2VudHMgdG8gY2hhcmFjdGVyaXphdGlvbiBvZiB0aGUgYWx0ZXJhdGlvbnMgYXMgYSBNb2RpZmljYXRpb24sIGZvciBleGFtcGxlLCBieSBpbmNsdWRpbmcgYSBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgU29mdHdhcmUgcHJvdmlkZWQgYnkgR292ZXJubWVudCBBZ2VuY3kuIE9uY2UgY29uc2VudCBpcyBncmFudGVkLCBpdCBtYXkgbm90IHRoZXJlYWZ0ZXIgYmUgcmV2b2tlZC5cblxuICAgICAgRC4gQSBDb250cmlidXRvciBtYXkgYWRkIGl0cyBvd24gY29weXJpZ2h0IG5vdGljZSB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZS4gT25jZSBhIGNvcHlyaWdodCBub3RpY2UgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIFN1YmplY3QgU29mdHdhcmUsIGEgUmVjaXBpZW50IG1heSBub3QgcmVtb3ZlIGl0IHdpdGhvdXQgdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiB0aGUgQ29udHJpYnV0b3Igd2hvIGFkZGVkIHRoZSBub3RpY2UuXG5cbiAgICAgIEUuIEEgUmVjaXBpZW50IG1heSBub3QgbWFrZSBhbnkgcmVwcmVzZW50YXRpb24gaW4gdGhlIFN1YmplY3QgU29mdHdhcmUgb3IgaW4gYW55IHByb21vdGlvbmFsLCBhZHZlcnRpc2luZyBvciBvdGhlciBtYXRlcmlhbCB0aGF0IG1heSBiZSBjb25zdHJ1ZWQgYXMgYW4gZW5kb3JzZW1lbnQgYnkgR292ZXJubWVudCBBZ2VuY3kgb3IgYnkgYW55IHByaW9yIFJlY2lwaWVudCBvZiBhbnkgcHJvZHVjdCBvciBzZXJ2aWNlIHByb3ZpZGVkIGJ5IFJlY2lwaWVudCwgb3IgdGhhdCBtYXkgc2VlayB0byBvYnRhaW4gY29tbWVyY2lhbCBhZHZhbnRhZ2UgYnkgdGhlIGZhY3Qgb2YgR292ZXJubWVudCBBZ2VuY3kncyBvciBhIHByaW9yIFJlY2lwaWVudCdzIHBhcnRpY2lwYXRpb24gaW4gdGhpcyBBZ3JlZW1lbnQuXG5cbiAgICAgIEYuIEluIGFuIGVmZm9ydCB0byB0cmFjayB1c2FnZSBhbmQgbWFpbnRhaW4gYWNjdXJhdGUgcmVjb3JkcyBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgZWFjaCBSZWNpcGllbnQsIHVwb24gcmVjZWlwdCBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgaXMgcmVxdWVzdGVkIHRvIHJlZ2lzdGVyIHdpdGggR292ZXJubWVudCBBZ2VuY3kgYnkgdmlzaXRpbmcgdGhlIGZvbGxvd2luZyB3ZWJzaXRlOiBfX19fX19fX19fX19fX18gLiBSZWNpcGllbnQncyBuYW1lIGFuZCBwZXJzb25hbCBpbmZvcm1hdGlvbiBzaGFsbCBiZSB1c2VkIGZvciBzdGF0aXN0aWNhbCBwdXJwb3NlcyBvbmx5LiBPbmNlIGEgUmVjaXBpZW50IG1ha2VzIGEgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSwgaXQgaXMgcmVxdWVzdGVkIHRoYXQgdGhlIFJlY2lwaWVudCBpbmZvcm0gR292ZXJubWVudCBBZ2VuY3kgYXQgdGhlIHdlYiBzaXRlIHByb3ZpZGVkIGFib3ZlIGhvdyB0byBhY2Nlc3MgdGhlIE1vZGlmaWNhdGlvbi5cblxuICAgICAgW0FsdGVybmF0aXZlIHBhcmFncmFwaCBmb3IgdXNlIHdoZW4gYSB3ZWIgc2l0ZSBmb3IgcmVsZWFzZSBhbmQgbW9uaXRvcmluZyBvZiBzdWJqZWN0IHNvZnR3YXJlIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBieSByZWxlYXNpbmcgR292ZXJubWVudCBBZ2VuY3ldIEluIGFuIGVmZm9ydCB0byB0cmFjayB1c2FnZSBhbmQgbWFpbnRhaW4gYWNjdXJhdGUgcmVjb3JkcyBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgZWFjaCBSZWNpcGllbnQsIHVwb24gcmVjZWlwdCBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgaXMgcmVxdWVzdGVkIHRvIHByb3ZpZGUgR292ZXJubWVudCBBZ2VuY3ksIGJ5IGUtbWFpbCB0byB0aGUgR292ZXJubWVudCBBZ2VuY3kgUG9pbnQgb2YgQ29udGFjdCBsaXN0ZWQgaW4gY2xhdXNlIDUuRi4sIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246IF9fX19fX19fX19fX19fXyAuIFJlY2lwaWVudCdzIG5hbWUgYW5kIHBlcnNvbmFsIGluZm9ybWF0aW9uIHNoYWxsIGJlIHVzZWQgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzIG9ubHkuIE9uY2UgYSBSZWNpcGllbnQgbWFrZXMgYSBNb2RpZmljYXRpb24gYXZhaWxhYmxlLCBpdCBpcyByZXF1ZXN0ZWQgdGhhdCB0aGUgUmVjaXBpZW50IGluZm9ybSBHb3Zlcm5tZW50IEFnZW5jeSwgYnkgZS1tYWlsIHRvIHRoZSBHb3Zlcm5tZW50IEFnZW5jeSBQb2ludCBvZiBDb250YWN0IGxpc3RlZCBpbiBjbGF1c2UgNS5GLiwgaG93IHRvIGFjY2VzcyB0aGUgTW9kaWZpY2F0aW9uLlxuXG4gICAgICBHLiBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0aGF0IGl0cyBNb2RpZmljYXRpb24gaXMgYmVsaWV2ZWQgdG8gYmUgQ29udHJpYnV0b3IncyBvcmlnaW5hbCBjcmVhdGlvbiBhbmQgZG9lcyBub3QgdmlvbGF0ZSBhbnkgZXhpc3RpbmcgYWdyZWVtZW50cywgcmVndWxhdGlvbnMsIHN0YXR1dGVzIG9yIHJ1bGVzLCBhbmQgZnVydGhlciB0aGF0IENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgQWdyZWVtZW50LlxuXG4gICAgICBILiBBIFJlY2lwaWVudCBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBhbmQvb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIG90aGVyIFJlY2lwaWVudHMgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUuIEEgUmVjaXBpZW50IG1heSBkbyBzbywgaG93ZXZlciwgb25seSBvbiBpdHMgb3duIGJlaGFsZiBhbmQgbm90IG9uIGJlaGFsZiBvZiBHb3Zlcm5tZW50IEFnZW5jeSBvciBhbnkgb3RoZXIgUmVjaXBpZW50LiBTdWNoIGEgUmVjaXBpZW50IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBhbmQvb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSB0aGF0IFJlY2lwaWVudCBhbG9uZS4gRnVydGhlciwgc3VjaCBSZWNpcGllbnQgYWdyZWVzIHRvIGluZGVtbmlmeSBHb3Zlcm5tZW50IEFnZW5jeSBhbmQgZXZlcnkgb3RoZXIgUmVjaXBpZW50IGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZW0gYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBhbmQvb3IgbGlhYmlsaXR5IG9mZmVyZWQgYnkgc3VjaCBSZWNpcGllbnQuXG5cbiAgICAgIEkuIEEgUmVjaXBpZW50IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgU3ViamVjdCBTb2Z0d2FyZSB3aXRoIHNlcGFyYXRlIHNvZnR3YXJlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggY2FzZSwgdGhlIFJlY2lwaWVudCBtdXN0IG1ha2Ugc3VyZSBTdWJqZWN0IFNvZnR3YXJlLCBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRlZCBpbiB0aGUgTGFyZ2VyIFdvcmsgaXMgc3ViamVjdCB0byB0aGlzIEFncmVlbWVudC5cblxuICAgICAgSi4gTm90d2l0aHN0YW5kaW5nIGFueSBwcm92aXNpb25zIGNvbnRhaW5lZCBoZXJlaW4sIFJlY2lwaWVudCBpcyBoZXJlYnkgcHV0IG9uIG5vdGljZSB0aGF0IGV4cG9ydCBvZiBhbnkgZ29vZHMgb3IgdGVjaG5pY2FsIGRhdGEgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBtYXkgcmVxdWlyZSBzb21lIGZvcm0gb2YgZXhwb3J0IGxpY2Vuc2UgZnJvbSB0aGUgVS5TLiBHb3Zlcm5tZW50LiBGYWlsdXJlIHRvIG9idGFpbiBuZWNlc3NhcnkgZXhwb3J0IGxpY2Vuc2VzIG1heSByZXN1bHQgaW4gY3JpbWluYWwgbGlhYmlsaXR5IHVuZGVyIFUuUy4gbGF3cy4gR292ZXJubWVudCBBZ2VuY3kgbmVpdGhlciByZXByZXNlbnRzIHRoYXQgYSBsaWNlbnNlIHNoYWxsIG5vdCBiZSByZXF1aXJlZCBub3IgdGhhdCwgaWYgcmVxdWlyZWQsIGl0IHNoYWxsIGJlIGlzc3VlZC4gTm90aGluZyBncmFudGVkIGhlcmVpbiBwcm92aWRlcyBhbnkgc3VjaCBleHBvcnQgbGljZW5zZS5cblxuICAgXG5cbiAgIERJU0NMQUlNRVIgT0YgV0FSUkFOVElFUyBBTkQgTElBQklMSVRJRVM7IFdBSVZFUiBBTkQgSU5ERU1OSUZJQ0FUSU9OXG5cbiAgICAgIEEuIE5vIFdhcnJhbnR5OiBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQsIElNUExJRUQsIE9SIFNUQVRVVE9SWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIEFOWSBXQVJSQU5UWSBUSEFUIFRIRSBTVUJKRUNUIFNPRlRXQVJFIFdJTEwgQ09ORk9STSBUTyBTUEVDSUZJQ0FUSU9OUywgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBGUkVFRE9NIEZST00gSU5GUklOR0VNRU5ULCBBTlkgV0FSUkFOVFkgVEhBVCBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBXSUxMIEJFIEVSUk9SIEZSRUUsIE9SIEFOWSBXQVJSQU5UWSBUSEFUIERPQ1VNRU5UQVRJT04sIElGIFBST1ZJREVELCBXSUxMIENPTkZPUk0gVE8gVEhFIFNVQkpFQ1QgU09GVFdBUkUuIFRISVMgQUdSRUVNRU5UIERPRVMgTk9ULCBJTiBBTlkgTUFOTkVSLCBDT05TVElUVVRFIEFOIEVORE9SU0VNRU5UIEJZIEdPVkVSTk1FTlQgQUdFTkNZIE9SIEFOWSBQUklPUiBSRUNJUElFTlQgT0YgQU5ZIFJFU1VMVFMsIFJFU1VMVElORyBERVNJR05TLCBIQVJEV0FSRSwgU09GVFdBUkUgUFJPRFVDVFMgT1IgQU5ZIE9USEVSIEFQUExJQ0FUSU9OUyBSRVNVTFRJTkcgRlJPTSBVU0UgT0YgVEhFIFNVQkpFQ1QgU09GVFdBUkUuIEZVUlRIRVIsIEdPVkVSTk1FTlQgQUdFTkNZIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBBTkQgTElBQklMSVRJRVMgUkVHQVJESU5HIFRISVJELVBBUlRZIFNPRlRXQVJFLCBJRiBQUkVTRU5UIElOIFRIRSBPUklHSU5BTCBTT0ZUV0FSRSwgQU5EIERJU1RSSUJVVEVTIElUIFwiQVMgSVMuXCJcblxuICAgICAgQi4gV2FpdmVyIGFuZCBJbmRlbW5pdHk6IFJFQ0lQSUVOVCBBR1JFRVMgVE8gV0FJVkUgQU5ZIEFORCBBTEwgQ0xBSU1TIEFHQUlOU1QgVEhFIFVOSVRFRCBTVEFURVMgR09WRVJOTUVOVCwgSVRTIENPTlRSQUNUT1JTIEFORCBTVUJDT05UUkFDVE9SUywgQVMgV0VMTCBBUyBBTlkgUFJJT1IgUkVDSVBJRU5ULiBJRiBSRUNJUElFTlQnUyBVU0UgT0YgVEhFIFNVQkpFQ1QgU09GVFdBUkUgUkVTVUxUUyBJTiBBTlkgTElBQklMSVRJRVMsIERFTUFORFMsIERBTUFHRVMsIEVYUEVOU0VTIE9SIExPU1NFUyBBUklTSU5HIEZST00gU1VDSCBVU0UsIElOQ0xVRElORyBBTlkgREFNQUdFUyBGUk9NIFBST0RVQ1RTIEJBU0VEIE9OLCBPUiBSRVNVTFRJTkcgRlJPTSwgUkVDSVBJRU5UJ1MgVVNFIE9GIFRIRSBTVUJKRUNUIFNPRlRXQVJFLCBSRUNJUElFTlQgU0hBTEwgSU5ERU1OSUZZIEFORCBIT0xEIEhBUk1MRVNTIFRIRSBVTklURUQgU1RBVEVTIEdPVkVSTk1FTlQsIElUUyBDT05UUkFDVE9SUyBBTkQgU1VCQ09OVFJBQ1RPUlMsIEFTIFdFTEwgQVMgQU5ZIFBSSU9SIFJFQ0lQSUVOVCwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgTEFXLiBSRUNJUElFTlQnUyBTT0xFIFJFTUVEWSBGT1IgQU5ZIFNVQ0ggTUFUVEVSIFNIQUxMIEJFIFRIRSBJTU1FRElBVEUsIFVOSUxBVEVSQUwgVEVSTUlOQVRJT04gT0YgVEhJUyBBR1JFRU1FTlQuXG5cbiAgIFxuXG4gICBHRU5FUkFMIFRFUk1TXG5cbiAgICAgIEEuIFRlcm1pbmF0aW9uOiBUaGlzIEFncmVlbWVudCBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIGEgUmVjaXBpZW50IGZhaWxzIHRvIGNvbXBseSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBhbmQgZmFpbHMgdG8gY3VyZSBzdWNoIG5vbmNvbXBsaWFuY2Ugd2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBVcG9uIHRlcm1pbmF0aW9uLCBhIFJlY2lwaWVudCBhZ3JlZXMgdG8gaW1tZWRpYXRlbHkgY2Vhc2UgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFN1YmplY3QgU29mdHdhcmUuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZSBwcm9wZXJseSBncmFudGVkIGJ5IHRoZSBicmVhY2hpbmcgUmVjaXBpZW50IHNoYWxsIHN1cnZpdmUgYW55IHN1Y2ggdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgICAgIEIuIFNldmVyYWJpbGl0eTogSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LlxuXG4gICAgICBDLiBBcHBsaWNhYmxlIExhdzogVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byBVbml0ZWQgU3RhdGVzIGZlZGVyYWwgbGF3IG9ubHkgZm9yIGFsbCBwdXJwb3NlcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGRldGVybWluaW5nIHRoZSB2YWxpZGl0eSBvZiB0aGlzIEFncmVlbWVudCwgdGhlIG1lYW5pbmcgb2YgaXRzIHByb3Zpc2lvbnMgYW5kIHRoZSByaWdodHMsIG9ibGlnYXRpb25zIGFuZCByZW1lZGllcyBvZiB0aGUgcGFydGllcy5cblxuICAgICAgRC4gRW50aXJlIFVuZGVyc3RhbmRpbmc6IFRoaXMgQWdyZWVtZW50IGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgdW5kZXJzdGFuZGluZyBhbmQgYWdyZWVtZW50IG9mIHRoZSBwYXJ0aWVzIHJlbGF0aW5nIHRvIHJlbGVhc2Ugb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgYW5kIG1heSBub3QgYmUgc3VwZXJzZWRlZCwgbW9kaWZpZWQgb3IgYW1lbmRlZCBleGNlcHQgYnkgZnVydGhlciB3cml0dGVuIGFncmVlbWVudCBkdWx5IGV4ZWN1dGVkIGJ5IHRoZSBwYXJ0aWVzLlxuXG4gICAgICBFLiBCaW5kaW5nIEF1dGhvcml0eTogQnkgYWNjZXB0aW5nIGFuZCB1c2luZyB0aGUgU3ViamVjdCBTb2Z0d2FyZSB1bmRlciB0aGlzIEFncmVlbWVudCwgYSBSZWNpcGllbnQgYWZmaXJtcyBpdHMgYXV0aG9yaXR5IHRvIGJpbmQgdGhlIFJlY2lwaWVudCB0byBhbGwgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIHRoYXQgdGhhdCBSZWNpcGllbnQgaGVyZWJ5IGFncmVlcyB0byBhbGwgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZWluLlxuXG4gICAgICBGLiBQb2ludCBvZiBDb250YWN0OiBBbnkgUmVjaXBpZW50IGNvbnRhY3Qgd2l0aCBHb3Zlcm5tZW50IEFnZW5jeSBpcyB0byBiZSBkaXJlY3RlZCB0byB0aGUgZGVzaWduYXRlZCByZXByZXNlbnRhdGl2ZSBhcyBmb2xsb3dzOiBfX19fX19fX19fX19fX18gLiJdLCJsaWNlbnNlSWRzIjpbIk5BU0EtMS4zIl0sImtleXdvcmRzIjpbIm5hc2Egb3BlbiBzb3VyY2UiLCJzb3VyY2UgYWdyZWVtZW50IHZlcnNpb24iLCIzIHRoaXMgb3BlbiIsInRoaXMgb3BlbiBzb3VyY2UiLCJzb3VyY2UgYWdyZWVtZW50IGFncmVlbWVudCIsImFncmVlbWVudCBhZ3JlZW1lbnQgZGVmaW5lcyIsImFncmVlbWVudCBkZWZpbmVzIHRoZSIsIm9mIGNlcnRhaW4gY29tcHV0ZXIiLCJjZXJ0YWluIGNvbXB1dGVyIHNvZnR3YXJlIiwiY29tcHV0ZXIgc29mdHdhcmUgb3JpZ2luYWxseSIsInNvZnR3YXJlIG9yaWdpbmFsbHkgcmVsZWFzZWQiLCJyZXByZXNlbnRlZCBieSB0aGUiLCJnb3Zlcm5tZW50IGFnZW5jeSBsaXN0ZWQiLCJhZ2VuY3kgbGlzdGVkIGJlbG93IiwibGlzdGVkIGJlbG93IGdvdmVybm1lbnQiLCJiZWxvdyBnb3Zlcm5tZW50IGFnZW5jeSIsImdvdmVybm1lbnQgYWdlbmN5IHRoZSIsImFnZW5jeSB0aGUgdW5pdGVkIiwicmVwcmVzZW50ZWQgYnkgZ292ZXJubWVudCIsImFnZW5jeSBpcyBhbiIsImJlbmVmaWNpYXJ5IG9mIGFsbCIsIm9mIGFsbCBzdWJzZXF1ZW50IiwiYWxsIHN1YnNlcXVlbnQgZGlzdHJpYnV0aW9ucyIsInN1YnNlcXVlbnQgZGlzdHJpYnV0aW9ucyBvciIsImRpc3RyaWJ1dGlvbnMgb3IgcmVkaXN0cmlidXRpb25zIiwib3IgcmVkaXN0cmlidXRpb25zIG9mIiwic3ViamVjdCBzb2Z0d2FyZSBhbnlvbmUiLCJzb2Z0d2FyZSBhbnlvbmUgd2hvIiwiYXMgZGVmaW5lZCBoZXJlaW4iLCJkZWZpbmVkIGhlcmVpbiBvciIsImZ1bGwgdGhlIHJlc3BvbnNpYmlsaXRpZXMiLCJ0aGUgcmVzcG9uc2liaWxpdGllcyBhbmQiLCJyZXNwb25zaWJpbGl0aWVzIGFuZCBvYmxpZ2F0aW9ucyIsImFuZCBvYmxpZ2F0aW9ucyBjb250YWluZWQiLCJvYmxpZ2F0aW9ucyBjb250YWluZWQgaW4iLCJ0aGlzIGFncmVlbWVudCBnb3Zlcm5tZW50IiwiYWdyZWVtZW50IGdvdmVybm1lbnQgYWdlbmN5IiwiZ292ZXJubWVudCBhZ2VuY3kgZ292ZXJubWVudCIsImFnZW5jeSBnb3Zlcm5tZW50IGFnZW5jeSIsIm9yaWdpbmFsIHNvZnR3YXJlIGRlc2lnbmF0aW9uIiwic29mdHdhcmUgZGVzaWduYXRpb24gZ292ZXJubWVudCIsImRlc2lnbmF0aW9uIGdvdmVybm1lbnQgYWdlbmN5Iiwib3JpZ2luYWwgc29mdHdhcmUgdGl0bGUiLCJzb2Z0d2FyZSB0aXRsZSB1c2VyIiwidGl0bGUgdXNlciByZWdpc3RyYXRpb24iLCJ1c2VyIHJlZ2lzdHJhdGlvbiByZXF1ZXN0ZWQiLCJyZWdpc3RyYXRpb24gcmVxdWVzdGVkIHBsZWFzZSIsInJlcXVlc3RlZCBwbGVhc2UgdmlzaXQiLCJ2aXNpdCBodHRwIGdvdmVybm1lbnQiLCJodHRwIGdvdmVybm1lbnQgYWdlbmN5Iiwib2YgY29udGFjdCBmb3IiLCJjb250YWN0IGZvciBvcmlnaW5hbCIsImZvciBvcmlnaW5hbCBzb2Z0d2FyZSIsIm9yaWdpbmFsIHNvZnR3YXJlIGRlZmluaXRpb25zIiwic29mdHdhcmUgZGVmaW5pdGlvbnMgYSIsImRlZmluaXRpb25zIGEgY29udHJpYnV0b3IiLCJjb250cmlidXRvciBtZWFucyBnb3Zlcm5tZW50IiwibWVhbnMgZ292ZXJubWVudCBhZ2VuY3kiLCJnb3Zlcm5tZW50IGFnZW5jeSBhcyIsImFnZW5jeSBhcyB0aGUiLCJhcyB0aGUgZGV2ZWxvcGVyIiwiYW5kIGFueSBlbnRpdHkiLCJlbnRpdHkgdGhhdCBtYWtlcyIsInRoYXQgbWFrZXMgYSIsImEgbW9kaWZpY2F0aW9uIGIiLCJtb2RpZmljYXRpb24gYiBjb3ZlcmVkIiwiYiBjb3ZlcmVkIHBhdGVudHMiLCJjb3ZlcmVkIHBhdGVudHMgbWVhbiIsIml0cyBtb2RpZmljYXRpb24gYWxvbmUiLCJtb2RpZmljYXRpb24gYWxvbmUgb3IiLCJzdWJqZWN0IHNvZnR3YXJlIGMiLCJzb2Z0d2FyZSBjIGRpc3BsYXkiLCJjIGRpc3BsYXkgbWVhbnMiLCJkaXNwbGF5IG1lYW5zIHRoZSIsIm1lYW5zIHRoZSBzaG93aW5nIiwidGhlIHNob3dpbmcgb2YiLCJzaG93aW5nIG9mIGEiLCJzdWJqZWN0IHNvZnR3YXJlIGVpdGhlciIsInNvZnR3YXJlIGVpdGhlciBkaXJlY3RseSIsIm9mIGFuIGltYWdlIiwiYW4gaW1hZ2Ugb3IiLCJpbWFnZSBvciBhbnkiLCJhbnkgb3RoZXIgZGV2aWNlIiwib3RoZXIgZGV2aWNlIGQiLCJkZXZpY2UgZCBkaXN0cmlidXRpb24iLCJkIGRpc3RyaWJ1dGlvbiBtZWFucyIsImRpc3RyaWJ1dGlvbiBtZWFucyBjb252ZXlhbmNlIiwibWVhbnMgY29udmV5YW5jZSBvciIsImNvbnZleWFuY2Ugb3IgdHJhbnNmZXIiLCJ0cmFuc2ZlciBvZiB0aGUiLCJzdWJqZWN0IHNvZnR3YXJlIHJlZ2FyZGxlc3MiLCJzb2Z0d2FyZSByZWdhcmRsZXNzIG9mIiwicmVnYXJkbGVzcyBvZiBtZWFucyIsIm9mIG1lYW5zIHRvIiwibWVhbnMgdG8gYW5vdGhlciIsInRvIGFub3RoZXIgZSIsImFub3RoZXIgZSBsYXJnZXIiLCJlIGxhcmdlciB3b3JrIiwid29yayBtZWFucyBjb21wdXRlciIsIm1lYW5zIGNvbXB1dGVyIHNvZnR3YXJlIiwiY29tcHV0ZXIgc29mdHdhcmUgdGhhdCIsInNvZnR3YXJlIHRoYXQgY29tYmluZXMiLCJ0aGF0IGNvbWJpbmVzIHN1YmplY3QiLCJjb21iaW5lcyBzdWJqZWN0IHNvZnR3YXJlIiwidGhlcmVvZiB3aXRoIHNvZnR3YXJlIiwid2l0aCBzb2Z0d2FyZSBzZXBhcmF0ZSIsInNvZnR3YXJlIHNlcGFyYXRlIGZyb20iLCJmcm9tIHRoZSBzdWJqZWN0Iiwic3ViamVjdCBzb2Z0d2FyZSB0aGF0IiwiaXMgbm90IGdvdmVybmVkIiwiYWdyZWVtZW50IGYgbW9kaWZpY2F0aW9uIiwiZiBtb2RpZmljYXRpb24gbWVhbnMiLCJtb2RpZmljYXRpb24gbWVhbnMgYW55IiwibWVhbnMgYW55IGFsdGVyYXRpb24iLCJhbHRlcmF0aW9uIG9mIGluY2x1ZGluZyIsIm9mIGluY2x1ZGluZyBhZGRpdGlvbiIsImluY2x1ZGluZyBhZGRpdGlvbiB0byIsInNvZnR3YXJlIG9yIHN1YmplY3QiLCJvciBzdWJqZWN0IHNvZnR3YXJlIiwic29mdHdhcmUgYW5kIGluY2x1ZGVzIiwiYW5kIGluY2x1ZGVzIGRlcml2YXRpdmUiLCJpbmNsdWRlcyBkZXJpdmF0aXZlIHdvcmtzIiwidGhlIGNvcHlyaWdodCBzdGF0dXRlIiwiY29weXJpZ2h0IHN0YXR1dGUgMTciLCJzdGF0dXRlIDE3IHVzYyIsIjE3IHVzYyAxMDEiLCJ1c2MgMTAxIGhvd2V2ZXIiLCIxMDEgaG93ZXZlciB0aGUiLCJob3dldmVyIHRoZSBhY3QiLCJhY3Qgb2YgaW5jbHVkaW5nIiwib2YgaW5jbHVkaW5nIHN1YmplY3QiLCJpbmNsdWRpbmcgc3ViamVjdCBzb2Z0d2FyZSIsImxhcmdlciB3b3JrIGRvZXMiLCJhbmQgb2YgaXRzZWxmIiwib2YgaXRzZWxmIGNvbnN0aXR1dGUiLCJpdHNlbGYgY29uc3RpdHV0ZSBhIiwiY29uc3RpdHV0ZSBhIG1vZGlmaWNhdGlvbiIsImEgbW9kaWZpY2F0aW9uIGciLCJtb2RpZmljYXRpb24gZyBvcmlnaW5hbCIsImcgb3JpZ2luYWwgc29mdHdhcmUiLCJtZWFucyB0aGUgY29tcHV0ZXIiLCJ0aGUgY29tcHV0ZXIgc29mdHdhcmUiLCJjb21wdXRlciBzb2Z0d2FyZSBmaXJzdCIsInNvZnR3YXJlIGZpcnN0IHJlbGVhc2VkIiwiYWdyZWVtZW50IGJ5IGdvdmVybm1lbnQiLCJnb3Zlcm5tZW50IGFnZW5jeSB3aXRoIiwiYWdlbmN5IHdpdGggZ292ZXJubWVudCIsImdvdmVybm1lbnQgYWdlbmN5IGRlc2lnbmF0aW9uIiwiZGVzaWduYXRpb24gYW5kIGVudGl0bGVkIiwiYW5kIGVudGl0bGVkIGluY2x1ZGluZyIsImVudGl0bGVkIGluY2x1ZGluZyBzb3VyY2UiLCJhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBpZiIsImlmIGFueSBoIiwiYW55IGggcmVjaXBpZW50IiwiaCByZWNpcGllbnQgbWVhbnMiLCJhbnlvbmUgd2hvIGFjcXVpcmVzIiwid2hvIGFjcXVpcmVzIHRoZSIsImFjcXVpcmVzIHRoZSBzdWJqZWN0IiwiYWxsIGNvbnRyaWJ1dG9ycyBpIiwiY29udHJpYnV0b3JzIGkgcmVkaXN0cmlidXRpb24iLCJpIHJlZGlzdHJpYnV0aW9uIG1lYW5zIiwicmVkaXN0cmlidXRpb24gbWVhbnMgZGlzdHJpYnV0aW9uIiwibWVhbnMgZGlzdHJpYnV0aW9uIG9mIiwic3ViamVjdCBzb2Z0d2FyZSBhZnRlciIsInNvZnR3YXJlIGFmdGVyIGEiLCJhZnRlciBhIG1vZGlmaWNhdGlvbiIsImEgbW9kaWZpY2F0aW9uIGhhcyIsImJlZW4gbWFkZSBqIiwibWFkZSBqIHJlcHJvZHVjdGlvbiIsImogcmVwcm9kdWN0aW9uIG1lYW5zIiwicmVwcm9kdWN0aW9uIG1lYW5zIHRoZSIsIm1lYW5zIHRoZSBtYWtpbmciLCJtYWtpbmcgb2YgYSIsIm9mIGEgY291bnRlcnBhcnQiLCJhIGNvdW50ZXJwYXJ0IGltYWdlIiwiY291bnRlcnBhcnQgaW1hZ2Ugb3IiLCJpbWFnZSBvciBjb3B5Iiwib3IgY29weSBvZiIsInN1YmplY3Qgc29mdHdhcmUgayIsInNvZnR3YXJlIGsgc2FsZSIsImsgc2FsZSBtZWFucyIsInNhbGUgbWVhbnMgdGhlIiwibWVhbnMgdGhlIGV4Y2hhbmdlIiwic29mdHdhcmUgZm9yIG1vbmV5IiwiZm9yIG1vbmV5IG9yIiwibW9uZXkgb3IgZXF1aXZhbGVudCIsIm9yIGVxdWl2YWxlbnQgdmFsdWUiLCJlcXVpdmFsZW50IHZhbHVlIGwiLCJ2YWx1ZSBsIHN1YmplY3QiLCJsIHN1YmplY3Qgc29mdHdhcmUiLCJzdWJqZWN0IHNvZnR3YXJlIG1lYW5zIiwib3JpZ2luYWwgc29mdHdhcmUgbW9kaWZpY2F0aW9ucyIsImFueSByZXNwZWN0aXZlIHBhcnRzIiwicmVzcGVjdGl2ZSBwYXJ0cyB0aGVyZW9mIiwicGFydHMgdGhlcmVvZiBtIiwidGhlcmVvZiBtIHVzZSIsIm0gdXNlIG1lYW5zIiwidXNlIG1lYW5zIHRoZSIsIm1lYW5zIHRoZSBhcHBsaWNhdGlvbiIsInRoZSBhcHBsaWNhdGlvbiBvciJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgTmV0IEJvb2xlYW4gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLCAyMiBBdWd1c3QgMTk5OCBDb3B5cmlnaHQgMTk5OCwgTmV0IEJvb2xlYW4gSW5jb3Jwb3JhdGVkLCBSZWR3b29kIENpdHksIENhbGlmb3JuaWEsIFVTQSBBbGwgUmlnaHRzIFJlc2VydmVkLiBOb3RlOiBUaGlzIGxpY2Vuc2UgaXMgZGVyaXZlZCBmcm9tIHRoZSBcIkFydGlzdGljIExpY2Vuc2VcIiBhcyBkaXN0cmlidXRlZCB3aXRoIHRoZSBQZXJsIFByb2dyYW1taW5nIExhbmd1YWdlLiBJdHMgdGVybXMgYXJlIGRpZmZlcmVudCBmcm9tIHRob3NlIG9mIHRoZSBcIkFydGlzdGljIExpY2Vuc2UuXCJcblxuUFJFQU1CTEVcblxuVGhlIGludGVudCBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIHN0YXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgUGFja2FnZSBtYXkgYmUgY29waWVkLCBzdWNoIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zIHNvbWUgc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIHBhY2thZ2UsIHdoaWxlIGdpdmluZyB0aGUgdXNlcnMgb2YgdGhlIHBhY2thZ2UgdGhlIHJpZ2h0IHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGUgUGFja2FnZSBpbiBhIG1vcmUtb3ItbGVzcyBjdXN0b21hcnkgZmFzaGlvbiwgcGx1cyB0aGUgcmlnaHQgdG8gbWFrZSByZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuXG5cbkRlZmluaXRpb25zOlxuXG5cIlBhY2thZ2VcIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgZmlsZXMgZGlzdHJpYnV0ZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gb2YgZmlsZXMgY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLlxuXG5cIlN0YW5kYXJkIFZlcnNpb25cIiByZWZlcnMgdG8gc3VjaCBhIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHdpc2hlcyBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci5cblxuXCJDb3B5cmlnaHQgSG9sZGVyXCIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yIGNvcHlyaWdodHMgZm9yIHRoZSBwYWNrYWdlLlxuXG5cIllvdVwiIGlzIHlvdSwgaWYgeW91J3JlIHRoaW5raW5nIGFib3V0IGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoaXMgUGFja2FnZS5cblxuXCJSZWFzb25hYmxlIGNvcHlpbmcgZmVlXCIgaXMgd2hhdGV2ZXIgeW91IGNhbiBqdXN0aWZ5IG9uIHRoZSBiYXNpcyBvZiBtZWRpYSBjb3N0LCBkdXBsaWNhdGlvbiBjaGFyZ2VzLCB0aW1lIG9mIHBlb3BsZSBpbnZvbHZlZCwgYW5kIHNvIG9uLiAoWW91IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGp1c3RpZnkgaXQgdG8gdGhlIENvcHlyaWdodCBIb2xkZXIsIGJ1dCBvbmx5IHRvIHRoZSBjb21wdXRpbmcgY29tbXVuaXR5IGF0IGxhcmdlIGFzIGEgbWFya2V0IHRoYXQgbXVzdCBiZWFyIHRoZSBmZWUuKVxuXG5cIkZyZWVseSBBdmFpbGFibGVcIiBtZWFucyB0aGF0IG5vIGZlZSBpcyBjaGFyZ2VkIGZvciB0aGUgaXRlbSBpdHNlbGYsIHRob3VnaCB0aGVyZSBtYXkgYmUgZmVlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUgaXRlbS4gSXQgYWxzbyBtZWFucyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIGl0ZW0gbWF5IHJlZGlzdHJpYnV0ZSBpdCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHRoZXkgcmVjZWl2ZWQgaXQuXG5cbiAgIDEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLlxuXG4gICAyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyIG1vZGlmaWNhdGlvbnMgZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIG9yIGZyb20gdGhlIENvcHlyaWdodCBIb2xkZXIuIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24uXG5cbiAgIDMuIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhpcyBQYWNrYWdlIGluIGFueSB3YXksIHByb3ZpZGVkIHRoYXQgeW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUgc3RhdGluZyBob3cgYW5kIHdoZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEpIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UgbWFrZSB0aGVtIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBwbGFjaW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWFqb3IgYXJjaGl2ZSBzaXRlIHN1Y2ggYXMgdXVuZXQudXUubmV0LCBvciBieSBhbGxvd2luZyB0aGUgQ29weXJpZ2h0IEhvbGRlciB0byBpbmNsdWRlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgUGFja2FnZS5cblxuICAgICAgYikgdXNlIHRoZSBtb2RpZmllZCBQYWNrYWdlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uLlxuXG4gICAgICBjKSByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBzbyB0aGUgbmFtZXMgZG8gbm90IGNvbmZsaWN0IHdpdGggc3RhbmRhcmQgZXhlY3V0YWJsZXMsIHdoaWNoIG11c3QgYWxzbyBiZSBwcm92aWRlZCwgYW5kIHByb3ZpZGUgYSBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSB0aGF0IGNsZWFybHkgZG9jdW1lbnRzIGhvdyBpdCBkaWZmZXJzIGZyb20gdGhlIFN0YW5kYXJkIFZlcnNpb24uXG5cbiAgICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLlxuXG4gICA0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSBkaXN0cmlidXRlIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZXMgYW5kIGxpYnJhcnkgZmlsZXMsIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLlxuXG4gICAgICBiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZiB0aGUgUGFja2FnZSB3aXRoIHlvdXIgbW9kaWZpY2F0aW9ucy5cblxuICAgICAgYykgYWNjb21wYW55IGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIFN0YW5kYXJkIFZlcnNpb24gZXhlY3V0YWJsZXMsIGdpdmluZyB0aGUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIG5vbi1zdGFuZGFyZCBuYW1lcywgYW5kIGNsZWFybHkgZG9jdW1lbnRpbmcgdGhlIGRpZmZlcmVuY2VzIGluIG1hbnVhbCBwYWdlcyAob3IgZXF1aXZhbGVudCksIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi5cblxuICAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuXG5cbiAgIDUuIFlvdSBtYXkgY2hhcmdlIGEgcmVhc29uYWJsZSBjb3B5aW5nIGZlZSBmb3IgYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2UuIFlvdSBtYXkgY2hhcmdlIGFueSBmZWUgeW91IGNob29zZSBmb3Igc3VwcG9ydCBvZiB0aGlzIFBhY2thZ2UuIFlvdSBtYXkgbm90IGNoYXJnZSBhIGZlZSBmb3IgdGhpcyBQYWNrYWdlIGl0c2VsZi4gSG93ZXZlciwgeW91IG1heSBkaXN0cmlidXRlIHRoaXMgUGFja2FnZSBpbiBhZ2dyZWdhdGUgd2l0aCBvdGhlciAocG9zc2libHkgY29tbWVyY2lhbCkgcHJvZ3JhbXMgYXMgcGFydCBvZiBhIGxhcmdlciAocG9zc2libHkgY29tbWVyY2lhbCkgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHByb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBhZHZlcnRpc2UgdGhpcyBQYWNrYWdlIGFzIGEgcHJvZHVjdCBvZiB5b3VyIG93bi5cblxuICAgNi4gVGhlIHNjcmlwdHMgYW5kIGxpYnJhcnkgZmlsZXMgc3VwcGxpZWQgYXMgaW5wdXQgdG8gb3IgcHJvZHVjZWQgYXMgb3V0cHV0IGZyb20gdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsIHVuZGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYmVsb25nIHRvIHdob21ldmVyIGdlbmVyYXRlZCB0aGVtLCBhbmQgbWF5IGJlIHNvbGQgY29tbWVyY2lhbGx5LCBhbmQgbWF5IGJlIGFnZ3JlZ2F0ZWQgd2l0aCB0aGlzIFBhY2thZ2UuXG5cbiAgIDcuIEMgc3Vicm91dGluZXMgc3VwcGxpZWQgYnkgeW91IGFuZCBsaW5rZWQgaW50byB0aGlzIFBhY2thZ2UgaW4gb3JkZXIgdG8gZW11bGF0ZSBzdWJyb3V0aW5lcyBhbmQgdmFyaWFibGVzIG9mIHRoZSBsYW5ndWFnZSBkZWZpbmVkIGJ5IHRoaXMgUGFja2FnZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGFyZSB0aGUgZXF1aXZhbGVudCBvZiBpbnB1dCBhcyBpbiBQYXJhZ3JhcGggNiwgcHJvdmlkZWQgdGhlc2Ugc3Vicm91dGluZXMgZG8gbm90IGNoYW5nZSB0aGUgbGFuZ3VhZ2UgaW4gYW55IHdheSB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGZhaWwgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHRoZSBsYW5ndWFnZS5cblxuICAgOC4gVGhlIG5hbWUgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuICAgOS4gVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRoZSBFbmQiXSwibGljZW5zZUlkcyI6WyJOQlBMLTEuMCJdLCJrZXl3b3JkcyI6WyJ0aGUgbmV0IGJvb2xlYW4iLCJuZXQgYm9vbGVhbiBwdWJsaWMiLCJib29sZWFuIHB1YmxpYyBsaWNlbnNlIiwidmVyc2lvbiAxIDIyIiwiMSAyMiBhdWd1c3QiLCIyMiBhdWd1c3QgMTk5OCIsImNvcHlyaWdodCAxOTk4IG5ldCIsIjE5OTggbmV0IGJvb2xlYW4iLCJuZXQgYm9vbGVhbiBpbmNvcnBvcmF0ZWQiLCJib29sZWFuIGluY29ycG9yYXRlZCByZWR3b29kIiwiaW5jb3Jwb3JhdGVkIHJlZHdvb2QgY2l0eSIsInRoZSBuZXQgYm9vbGVhbiBwdWJsaWMiLCJuZXQgYm9vbGVhbiBwdWJsaWMgbGljZW5zZSIsImJvb2xlYW4gcHVibGljIGxpY2Vuc2UgdmVyc2lvbiIsImxpY2Vuc2UgdmVyc2lvbiAxIDIyIiwidmVyc2lvbiAxIDIyIGF1Z3VzdCIsIjEgMjIgYXVndXN0IDE5OTgiLCIyMiBhdWd1c3QgMTk5OCBjb3B5cmlnaHQiLCIxOTk4IGNvcHlyaWdodCAxOTk4IG5ldCIsImNvcHlyaWdodCAxOTk4IG5ldCBib29sZWFuIiwiMTk5OCBuZXQgYm9vbGVhbiBpbmNvcnBvcmF0ZWQiLCJuZXQgYm9vbGVhbiBpbmNvcnBvcmF0ZWQgcmVkd29vZCIsImJvb2xlYW4gaW5jb3Jwb3JhdGVkIHJlZHdvb2QgY2l0eSIsImluY29ycG9yYXRlZCByZWR3b29kIGNpdHkgY2FsaWZvcm5pYSIsInRoZSBuZXQgYm9vbGVhbiBwdWJsaWMgbGljZW5zZSIsIm5ldCBib29sZWFuIHB1YmxpYyBsaWNlbnNlIHZlcnNpb24iLCJib29sZWFuIHB1YmxpYyBsaWNlbnNlIHZlcnNpb24gMSIsInB1YmxpYyBsaWNlbnNlIHZlcnNpb24gMSAyMiIsImxpY2Vuc2UgdmVyc2lvbiAxIDIyIGF1Z3VzdCIsInZlcnNpb24gMSAyMiBhdWd1c3QgMTk5OCIsIjEgMjIgYXVndXN0IDE5OTggY29weXJpZ2h0IiwiMjIgYXVndXN0IDE5OTggY29weXJpZ2h0IDE5OTgiLCJhdWd1c3QgMTk5OCBjb3B5cmlnaHQgMTk5OCBuZXQiLCIxOTk4IGNvcHlyaWdodCAxOTk4IG5ldCBib29sZWFuIiwiY29weXJpZ2h0IDE5OTggbmV0IGJvb2xlYW4gaW5jb3Jwb3JhdGVkIiwiMTk5OCBuZXQgYm9vbGVhbiBpbmNvcnBvcmF0ZWQgcmVkd29vZCIsIm5ldCBib29sZWFuIGluY29ycG9yYXRlZCByZWR3b29kIGNpdHkiLCJib29sZWFuIGluY29ycG9yYXRlZCByZWR3b29kIGNpdHkgY2FsaWZvcm5pYSIsImluY29ycG9yYXRlZCByZWR3b29kIGNpdHkgY2FsaWZvcm5pYSB1c2EiLCJ1c2EgYWxsIHJpZ2h0cyByZXNlcnZlZCBub3RlIl19LHsibGljZW5zZVRleHRzIjpbIk5vbi1Db21tZXJjaWFsIEdvdmVybm1lbnQgTGljZW5jZVxuXG5mb3IgcHVibGljIHNlY3RvciBpbmZvcm1hdGlvblxuXG5Zb3UgYXJlIGVuY291cmFnZWQgdG8gdXNlIGFuZCByZS11c2UgdGhlIEluZm9ybWF0aW9uIHRoYXQgaXMgYXZhaWxhYmxlIHVuZGVyIHRoaXMgbGljZW5jZSBmcmVlbHkgYW5kIGZsZXhpYmx5LCB3aXRoIG9ubHkgYSBmZXcgY29uZGl0aW9ucy5cblxuVXNpbmcgaW5mb3JtYXRpb24gdW5kZXIgdGhpcyBsaWNlbmNlXG5cblVzZSBvZiBjb3B5cmlnaHQgYW5kIGRhdGFiYXNlIHJpZ2h0IG1hdGVyaWFsIGV4cHJlc3NseSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIGxpY2VuY2UgKHRoZSAnSW5mb3JtYXRpb24nKSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBiZWxvdy5cblxuVGhlIExpY2Vuc29yIGdyYW50cyB5b3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsLCBub24tZXhjbHVzaXZlIGxpY2VuY2UgdG8gdXNlIHRoZSBJbmZvcm1hdGlvbiBmb3IgTm9uLUNvbW1lcmNpYWwgcHVycG9zZXMgb25seSBzdWJqZWN0IHRvIHRoZSBjb25kaXRpb25zIGJlbG93LlxuXG5UaGlzIGxpY2VuY2UgZG9lcyBub3QgYWZmZWN0IHlvdXIgZnJlZWRvbSB1bmRlciBmYWlyIGRlYWxpbmcgb3IgZmFpciB1c2Ugb3IgYW55IG90aGVyIGNvcHlyaWdodCBvciBkYXRhYmFzZSByaWdodCBleGNlcHRpb25zIGFuZCBsaW1pdGF0aW9ucy5cblxuWW91IGFyZSBmcmVlIHRvOlxuXG4gICBjb3B5LCBwdWJsaXNoLCBkaXN0cmlidXRlIGFuZCB0cmFuc21pdCB0aGUgSW5mb3JtYXRpb247XG5cbiAgIGFkYXB0IHRoZSBJbmZvcm1hdGlvbjtcblxuICAgZXhwbG9pdCB0aGUgSW5mb3JtYXRpb24gZm9yIE5vbi1Db21tZXJjaWFsIHB1cnBvc2VzIGZvciBleGFtcGxlLCBieSBjb21iaW5pbmcgaXQgd2l0aCBvdGhlciBpbmZvcm1hdGlvbiBpbiB5b3VyIG93biBwcm9kdWN0IG9yIGFwcGxpY2F0aW9uLlxuXG5Zb3UgYXJlIG5vdCBwZXJtaXR0ZWQgdG86XG5cbiAgIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8geW91IGJ5IHRoaXMgbGljZW5jZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uXG5cbllvdSBtdXN0LCB3aGVyZSB5b3UgZG8gYW55IG9mIHRoZSBhYm92ZTpcblxuICAgYWNrbm93bGVkZ2UgdGhlIHNvdXJjZSBvZiB0aGUgSW5mb3JtYXRpb24gYnkgaW5jbHVkaW5nIGFueSBhdHRyaWJ1dGlvbiBzdGF0ZW1lbnQgc3BlY2lmaWVkIGJ5IHRoZSBJbmZvcm1hdGlvbiBQcm92aWRlcihzKSBhbmQsIHdoZXJlIHBvc3NpYmxlLCBwcm92aWRlIGEgbGluayB0byB0aGlzIGxpY2VuY2U7XG5cbiAgIElmIHRoZSBJbmZvcm1hdGlvbiBQcm92aWRlciBkb2VzIG5vdCBwcm92aWRlIGEgc3BlY2lmaWMgYXR0cmlidXRpb24gc3RhdGVtZW50LCB5b3UgbXVzdCB1c2UgdGhlIGZvbGxvd2luZzpcblxuICAgQ29udGFpbnMgaW5mb3JtYXRpb24gbGljZW5zZWQgdW5kZXIgdGhlIE5vbi1Db21tZXJjaWFsIEdvdmVybm1lbnQgTGljZW5jZSB2Mi4wLlxuXG4gICBJZiB5b3UgYXJlIHVzaW5nIEluZm9ybWF0aW9uIGZyb20gc2V2ZXJhbCBJbmZvcm1hdGlvbiBQcm92aWRlcnMgYW5kIGxpc3RpbmcgbXVsdGlwbGUgYXR0cmlidXRpb25zIGlzIG5vdCBwcmFjdGljYWwgaW4geW91ciBwcm9kdWN0IG9yIGFwcGxpY2F0aW9uLCB5b3UgbWF5IGluY2x1ZGUgYSBVUkkgb3IgaHlwZXJsaW5rIHRvIGEgcmVzb3VyY2UgdGhhdCBjb250YWlucyB0aGUgcmVxdWlyZWQgYXR0cmlidXRpb24gc3RhdGVtZW50cy5cblxuICAgZW5zdXJlIHRoYXQgYW55IG9ud2FyZCBsaWNlbnNpbmcgb2YgdGhlIEluZm9ybWF0aW9uIOKAkyBmb3IgZXhhbXBsZSB3aGVuIGNvbWJpbmVkIHdpdGggb3RoZXIgaW5mb3JtYXRpb24g4oCTIGlzIGZvciBOb24tQ29tbWVyY2lhbCBwdXJwb3NlcyBvbmx5LlxuXG4gICBUaGVzZSBhcmUgaW1wb3J0YW50IGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbmNlIGFuZCBpZiB5b3UgZmFpbCB0byBjb21wbHkgd2l0aCB0aGVtIG9yIHVzZSB0aGUgSW5mb3JtYXRpb24gb3RoZXIgdGhhbiBmb3IgTm9uLUNvbW1lcmNpYWwgcHVycG9zZXMgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHlvdSB1bmRlciB0aGlzIGxpY2VuY2UsIG9yIGFueSBzaW1pbGFyIGxpY2VuY2UgZ3JhbnRlZCBieSB0aGUgTGljZW5zb3IsIHdpbGwgZW5kIGF1dG9tYXRpY2FsbHkuXG5cbkV4ZW1wdGlvbnNcblxuVGhpcyBsaWNlbmNlIGRvZXMgbm90IGNvdmVyIHRoZSB1c2Ugb2Y6XG5cbiAgIOKAoiBwZXJzb25hbCBkYXRhIGluIHRoZSBJbmZvcm1hdGlvbjtcblxuICAg4oCiIEluZm9ybWF0aW9uIHRoYXQgaGFzIG5vdCBiZWVuIGFjY2Vzc2VkIGJ5IHdheSBvZiBwdWJsaWNhdGlvbiBvciBkaXNjbG9zdXJlIHVuZGVyIGluZm9ybWF0aW9uIGFjY2VzcyBsZWdpc2xhdGlvbiAoaW5jbHVkaW5nIHRoZSBGcmVlZG9tIG9mIEluZm9ybWF0aW9uIEFjdHMgZm9yIHRoZSBVSyBhbmQgU2NvdGxhbmQpIGJ5IG9yIHdpdGggdGhlIGNvbnNlbnQgb2YgdGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyO1xuXG4gICDigKIgZGVwYXJ0bWVudGFsIG9yIHB1YmxpYyBzZWN0b3Igb3JnYW5pc2F0aW9uIGxvZ29zLCBjcmVzdHMsIG1pbGl0YXJ5IGluc2lnbmlhIGFuZCB0aGUgUm95YWwgQXJtcyBleGNlcHQgd2hlcmUgdGhleSBmb3JtIGFuIGludGVncmFsIHBhcnQgb2YgYSBkb2N1bWVudCBvciBkYXRhc2V0O1xuXG4gICDigKIgbWlsaXRhcnkgaW5zaWduaWFcblxuICAg4oCiIHRoaXJkIHBhcnR5IHJpZ2h0cyB0aGUgSW5mb3JtYXRpb24gUHJvdmlkZXIgaXMgbm90IGF1dGhvcmlzZWQgdG8gbGljZW5zZTtcblxuICAg4oCiIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIGluY2x1ZGluZyBwYXRlbnRzLCB0cmFkZSBtYXJrcywgYW5kIGRlc2lnbiByaWdodHM7IGFuZFxuXG4gICDigKIgaWRlbnRpdHkgZG9jdW1lbnRzIHN1Y2ggYXMgdGhlIEJyaXRpc2ggUGFzc3BvcnQuXG5cbk5vbi1lbmRvcnNlbWVudFxuXG5UaGlzIGxpY2VuY2UgZG9lcyBub3QgZ3JhbnQgeW91IGFueSByaWdodCB0byB1c2UgdGhlIEluZm9ybWF0aW9uIGluIGEgd2F5IHRoYXQgc3VnZ2VzdHMgYW55IG9mZmljaWFsIHN0YXR1cyBvciB0aGF0IHRoZSBJbmZvcm1hdGlvbiBQcm92aWRlciBhbmQvb3IgTGljZW5zb3IgZW5kb3JzZSB5b3Ugb3IgeW91ciB1c2Ugb2YgdGhlIEluZm9ybWF0aW9uLlxuXG5ObyB3YXJyYW50eVxuXG5UaGUgSW5mb3JtYXRpb24gaXMgbGljZW5zZWQgJ2FzIGlzJyBhbmQgdGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyIGV4Y2x1ZGVzIGFsbCByZXByZXNlbnRhdGlvbnMsIHdhcnJhbnRpZXMsIG9ibGlnYXRpb25zIGFuZCBsaWFiaWxpdGllcyBpbiByZWxhdGlvbiB0byB0aGUgSW5mb3JtYXRpb24gdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuXG5cblRoZSBJbmZvcm1hdGlvbiBQcm92aWRlciBpcyBub3QgbGlhYmxlIGZvciBhbnkgZXJyb3JzIG9yIG9taXNzaW9ucyBpbiB0aGUgSW5mb3JtYXRpb24gYW5kIHNoYWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBsb3NzLCBpbmp1cnkgb3IgZGFtYWdlIG9mIGFueSBraW5kIGNhdXNlZCBieSBpdHMgdXNlLiBUaGUgSW5mb3JtYXRpb24gUHJvdmlkZXIgZG9lcyBub3QgZ3VhcmFudGVlIHRoZSBjb250aW51ZWQgc3VwcGx5IG9mIHRoZSBJbmZvcm1hdGlvbi5cblxuR292ZXJuaW5nIExhd1xuXG5UaGlzIGxpY2VuY2UgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgSW5mb3JtYXRpb24gUHJvdmlkZXIgaGFzIGl0cyBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MsIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRoZSBJbmZvcm1hdGlvbiBQcm92aWRlci5cblxuRGVmaW5pdGlvbnNcblxuSW4gdGhpcyBsaWNlbmNlIHRoZSB0ZXJtcyBiZWxvdyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6XG5cbidJbmZvcm1hdGlvbicgbWVhbnMgaW5mb3JtYXRpb24gcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBvciBieSBkYXRhYmFzZSByaWdodCAoZm9yIGV4YW1wbGUsIGxpdGVyYXJ5IGFuZCBhcnRpc3RpYyB3b3JrcywgY29udGVudCwgZGF0YSBhbmQgc291cmNlIGNvZGUpIG9mZmVyZWQgZm9yIHVzZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbmNlLlxuXG4nSW5mb3JtYXRpb24gUHJvdmlkZXInIG1lYW5zIHRoZSBwZXJzb24gb3Igb3JnYW5pc2F0aW9uIHByb3ZpZGluZyB0aGUgSW5mb3JtYXRpb24gdW5kZXIgdGhpcyBsaWNlbmNlLlxuXG4nTGljZW5zb3InIG1lYW5zIGFueSBJbmZvcm1hdGlvbiBQcm92aWRlciB3aGljaCBoYXMgdGhlIGF1dGhvcml0eSB0byBvZmZlciBJbmZvcm1hdGlvbiB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbmNlIG9yIHRoZSBLZWVwZXIgb2YgdGhlIFB1YmxpYyBSZWNvcmRzLCB3aG8gaGFzIHRoZSBhdXRob3JpdHkgdG8gb2ZmZXIgSW5mb3JtYXRpb24gc3ViamVjdCB0byBDcm93biBjb3B5cmlnaHQgYW5kIENyb3duIGRhdGFiYXNlIHJpZ2h0cyBhbmQgSW5mb3JtYXRpb24gc3ViamVjdCB0byBjb3B5cmlnaHQgYW5kIGRhdGFiYXNlIHJpZ2h0IHRoYXQgaGFzIGJlZW4gYXNzaWduZWQgdG8gb3IgYWNxdWlyZWQgYnkgdGhlIENyb3duLCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbmNlLlxuXG4nTm9uLUNvbW1lcmNpYWwgcHVycG9zZXMnIG1lYW5zIG5vdCBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgbGljZW5jZSwgJ3ByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uJyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBleGNoYW5nZSBvZiB0aGUgSW5mb3JtYXRpb24gZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiB0aGUgSW5mb3JtYXRpb24uXG5cbidVc2UnIGFzIGEgdmVyYiwgbWVhbnMgZG9pbmcgYW55IGFjdCB3aGljaCBpcyByZXN0cmljdGVkIGJ5IGNvcHlyaWdodCBvciBkYXRhYmFzZSByaWdodCwgd2hldGhlciBpbiB0aGUgb3JpZ2luYWwgbWVkaXVtIG9yIGluIGFueSBvdGhlciBtZWRpdW0sIGFuZCBpbmNsdWRlcyB3aXRob3V0IGxpbWl0YXRpb24gZGlzdHJpYnV0aW5nLCBjb3B5aW5nLCBhZGFwdGluZywgbW9kaWZ5aW5nIGFzIG1heSBiZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gdXNlIGl0IGluIGEgZGlmZmVyZW50IG1vZGUgb3IgZm9ybWF0LlxuXG4nWW91JyBtZWFucyB0aGUgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24sIG9yIGJvZHkgb2YgcGVyc29ucyBjb3Jwb3JhdGUgb3IgaW5jb3Jwb3JhdGUsIGFjcXVpcmluZyByaWdodHMgdW5kZXIgdGhpcyBsaWNlbmNlLiJdLCJsaWNlbnNlSWRzIjpbIk5DR0wtVUstMi4wIl0sImtleXdvcmRzIjpbImdvdmVybm1lbnQgbGljZW5jZSBmb3IiLCJsaWNlbmNlIGZvciBwdWJsaWMiLCJmb3IgcHVibGljIHNlY3RvciIsInNlY3RvciBpbmZvcm1hdGlvbiB5b3UiLCJpbmZvcm1hdGlvbiB5b3UgYXJlIiwicHVycG9zZXMgb25seSBzdWJqZWN0Iiwib25seSBzdWJqZWN0IHRvIiwiY29tbWVyY2lhbCBwdXJwb3NlcyBmb3IiLCJwdXJwb3NlcyBmb3IgZXhhbXBsZSIsIm90aGVyIGluZm9ybWF0aW9uIGluIiwiYXBwbGljYXRpb24geW91IGFyZSIsInBlcm1pdHRlZCB0byBleGVyY2lzZSIsImxpY2VuY2UgaW4gYW55IiwibW9uZXRhcnkgY29tcGVuc2F0aW9uIHlvdSIsImNvbXBlbnNhdGlvbiB5b3UgbXVzdCIsImZvbGxvd2luZyBjb250YWlucyBpbmZvcm1hdGlvbiIsInRoZSBub24gY29tbWVyY2lhbCIsInYyIDAgaWYiLCJhdHRyaWJ1dGlvbiBzdGF0ZW1lbnRzIGVuc3VyZSIsInN0YXRlbWVudHMgZW5zdXJlIHRoYXQiLCJlbnN1cmUgdGhhdCBhbnkiLCJ0aGF0IGFueSBvbndhcmQiLCJhbnkgb253YXJkIGxpY2Vuc2luZyIsIm9ud2FyZCBsaWNlbnNpbmcgb2YiLCJpbmZvcm1hdGlvbiBmb3IgZXhhbXBsZSIsImZvciBleGFtcGxlIHdoZW4iLCJleGFtcGxlIHdoZW4gY29tYmluZWQiLCJvdGhlciBpbmZvcm1hdGlvbiBpcyIsImluZm9ybWF0aW9uIGlzIGZvciIsImlzIGZvciBub24iLCJwdXJwb3NlcyBvbmx5IHRoZXNlIiwib25seSB0aGVzZSBhcmUiLCJ3aXRoIHRoZW0gb3IiLCJ0aGVtIG9yIHVzZSIsInRoZSBpbmZvcm1hdGlvbiBvdGhlciIsImluZm9ybWF0aW9uIG90aGVyIHRoYW4iLCJjb21tZXJjaWFsIHB1cnBvc2VzIHRoZSIsInB1cnBvc2VzIHRoZSByaWdodHMiLCJsb2dvcyBjcmVzdHMgbWlsaXRhcnkiLCJjcmVzdHMgbWlsaXRhcnkgaW5zaWduaWEiLCJtaWxpdGFyeSBpbnNpZ25pYSBhbmQiLCJpbnNpZ25pYSBhbmQgdGhlIiwidGhpcyBsaWNlbmNlIG5vbiIsImxpY2VuY2Ugbm9uIGNvbW1lcmNpYWwiLCJjb21tZXJjaWFsIHB1cnBvc2VzIG1lYW5zIiwicHVycG9zZXMgbWVhbnMgbm90IiwibWVhbnMgbm90IGludGVuZGVkIiwidGhpcyBsaWNlbmNlIHByaXZhdGUiLCJsaWNlbmNlIHByaXZhdGUgbW9uZXRhcnkiLCJtb25ldGFyeSBjb21wZW5zYXRpb24gZG9lcyIsImNvbXBlbnNhdGlvbiBkb2VzIG5vdCIsImluY2x1ZGUgdGhlIGV4Y2hhbmdlIiwib3Igb3RoZXJ3aXNlIHByb3ZpZGVkIiwib3RoZXJ3aXNlIHByb3ZpZGVkIHRoZXJlIiwidGhlIGluZm9ybWF0aW9uIHVzZSIsImluZm9ybWF0aW9uIHVzZSBhcyIsImNvbW1lcmNpYWwgZ292ZXJubWVudCBsaWNlbmNlIGZvciIsImdvdmVybm1lbnQgbGljZW5jZSBmb3IgcHVibGljIiwibGljZW5jZSBmb3IgcHVibGljIHNlY3RvciIsImZvciBwdWJsaWMgc2VjdG9yIGluZm9ybWF0aW9uIiwicHVibGljIHNlY3RvciBpbmZvcm1hdGlvbiB5b3UiLCJzZWN0b3IgaW5mb3JtYXRpb24geW91IGFyZSIsImluZm9ybWF0aW9uIHlvdSBhcmUgZW5jb3VyYWdlZCIsImNvbW1lcmNpYWwgcHVycG9zZXMgb25seSBzdWJqZWN0IiwicHVycG9zZXMgb25seSBzdWJqZWN0IHRvIiwib25seSBzdWJqZWN0IHRvIHRoZSIsImV4cGxvaXQgdGhlIGluZm9ybWF0aW9uIGZvciIsIm5vbiBjb21tZXJjaWFsIHB1cnBvc2VzIGZvciIsImNvbW1lcmNpYWwgcHVycG9zZXMgZm9yIGV4YW1wbGUiLCJwdXJwb3NlcyBmb3IgZXhhbXBsZSBieSIsIndpdGggb3RoZXIgaW5mb3JtYXRpb24gaW4iLCJvdGhlciBpbmZvcm1hdGlvbiBpbiB5b3VyIiwiaW5mb3JtYXRpb24gaW4geW91ciBvd24iLCJvciBhcHBsaWNhdGlvbiB5b3UgYXJlIiwiYXBwbGljYXRpb24geW91IGFyZSBub3QiLCJub3QgcGVybWl0dGVkIHRvIGV4ZXJjaXNlIiwicGVybWl0dGVkIHRvIGV4ZXJjaXNlIGFueSIsInlvdSBieSB0aGlzIGxpY2VuY2UiLCJieSB0aGlzIGxpY2VuY2UgaW4iLCJ0aGlzIGxpY2VuY2UgaW4gYW55IiwibGljZW5jZSBpbiBhbnkgbWFubmVyIiwicHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24geW91IiwibW9uZXRhcnkgY29tcGVuc2F0aW9uIHlvdSBtdXN0IiwiY29tcGVuc2F0aW9uIHlvdSBtdXN0IHdoZXJlIiwidGhlIGZvbGxvd2luZyBjb250YWlucyBpbmZvcm1hdGlvbiIsImZvbGxvd2luZyBjb250YWlucyBpbmZvcm1hdGlvbiBsaWNlbnNlZCIsInVuZGVyIHRoZSBub24gY29tbWVyY2lhbCIsInRoZSBub24gY29tbWVyY2lhbCBnb3Zlcm5tZW50IiwiY29tbWVyY2lhbCBnb3Zlcm5tZW50IGxpY2VuY2UgdjIiLCJsaWNlbmNlIHYyIDAgaWYiLCJ2MiAwIGlmIHlvdSIsInJlcXVpcmVkIGF0dHJpYnV0aW9uIHN0YXRlbWVudHMgZW5zdXJlIiwiYXR0cmlidXRpb24gc3RhdGVtZW50cyBlbnN1cmUgdGhhdCIsInN0YXRlbWVudHMgZW5zdXJlIHRoYXQgYW55IiwiZW5zdXJlIHRoYXQgYW55IG9ud2FyZCIsInRoYXQgYW55IG9ud2FyZCBsaWNlbnNpbmciLCJhbnkgb253YXJkIGxpY2Vuc2luZyBvZiIsIm9ud2FyZCBsaWNlbnNpbmcgb2YgdGhlIiwibGljZW5zaW5nIG9mIHRoZSBpbmZvcm1hdGlvbiIsInRoZSBpbmZvcm1hdGlvbiBmb3IgZXhhbXBsZSIsImluZm9ybWF0aW9uIGZvciBleGFtcGxlIHdoZW4iLCJmb3IgZXhhbXBsZSB3aGVuIGNvbWJpbmVkIiwiZXhhbXBsZSB3aGVuIGNvbWJpbmVkIHdpdGgiLCJ3aGVuIGNvbWJpbmVkIHdpdGggb3RoZXIiLCJjb21iaW5lZCB3aXRoIG90aGVyIGluZm9ybWF0aW9uIiwid2l0aCBvdGhlciBpbmZvcm1hdGlvbiBpcyIsIm90aGVyIGluZm9ybWF0aW9uIGlzIGZvciIsImluZm9ybWF0aW9uIGlzIGZvciBub24iLCJpcyBmb3Igbm9uIGNvbW1lcmNpYWwiLCJjb21tZXJjaWFsIHB1cnBvc2VzIG9ubHkgdGhlc2UiLCJwdXJwb3NlcyBvbmx5IHRoZXNlIGFyZSIsIm9ubHkgdGhlc2UgYXJlIGltcG9ydGFudCIsImNvbXBseSB3aXRoIHRoZW0gb3IiLCJ3aXRoIHRoZW0gb3IgdXNlIiwidGhlbSBvciB1c2UgdGhlIiwib3IgdXNlIHRoZSBpbmZvcm1hdGlvbiIsInVzZSB0aGUgaW5mb3JtYXRpb24gb3RoZXIiLCJ0aGUgaW5mb3JtYXRpb24gb3RoZXIgdGhhbiIsImluZm9ybWF0aW9uIG90aGVyIHRoYW4gZm9yIiwidGhhbiBmb3Igbm9uIGNvbW1lcmNpYWwiLCJub24gY29tbWVyY2lhbCBwdXJwb3NlcyB0aGUiLCJjb21tZXJjaWFsIHB1cnBvc2VzIHRoZSByaWdodHMiLCJwdXJwb3NlcyB0aGUgcmlnaHRzIGdyYW50ZWQiLCJvcmdhbmlzYXRpb24gbG9nb3MgY3Jlc3RzIG1pbGl0YXJ5IiwibG9nb3MgY3Jlc3RzIG1pbGl0YXJ5IGluc2lnbmlhIiwiY3Jlc3RzIG1pbGl0YXJ5IGluc2lnbmlhIGFuZCIsIm1pbGl0YXJ5IGluc2lnbmlhIGFuZCB0aGUiLCJpbnNpZ25pYSBhbmQgdGhlIHJveWFsIiwidGhlIHB1YmxpYyByZWNvcmRzIHdobyIsIm9mIHRoaXMgbGljZW5jZSBub24iLCJ0aGlzIGxpY2VuY2Ugbm9uIGNvbW1lcmNpYWwiLCJsaWNlbmNlIG5vbiBjb21tZXJjaWFsIHB1cnBvc2VzIiwibm9uIGNvbW1lcmNpYWwgcHVycG9zZXMgbWVhbnMiLCJjb21tZXJjaWFsIHB1cnBvc2VzIG1lYW5zIG5vdCIsInB1cnBvc2VzIG1lYW5zIG5vdCBpbnRlbmRlZCIsIm1lYW5zIG5vdCBpbnRlbmRlZCBmb3IiLCJub3QgaW50ZW5kZWQgZm9yIG9yIiwicHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24gZm9yIiwibW9uZXRhcnkgY29tcGVuc2F0aW9uIGZvciB0aGUiLCJjb21wZW5zYXRpb24gZm9yIHRoZSBwdXJwb3NlcyIsInB1cnBvc2VzIG9mIHRoaXMgbGljZW5jZSIsIm9mIHRoaXMgbGljZW5jZSBwcml2YXRlIiwidGhpcyBsaWNlbmNlIHByaXZhdGUgbW9uZXRhcnkiLCJsaWNlbmNlIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uIiwicHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24gZG9lcyIsIm1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBkb2VzIG5vdCIsImNvbXBlbnNhdGlvbiBkb2VzIG5vdCBpbmNsdWRlIiwibm90IGluY2x1ZGUgdGhlIGV4Y2hhbmdlIiwiaW5jbHVkZSB0aGUgZXhjaGFuZ2Ugb2YiLCJ0aGUgaW5mb3JtYXRpb24gZm9yIG90aGVyIiwiaW5mb3JtYXRpb24gZm9yIG90aGVyIGNvcHlyaWdodGVkIiwic2hhcmluZyBvciBvdGhlcndpc2UgcHJvdmlkZWQiLCJvciBvdGhlcndpc2UgcHJvdmlkZWQgdGhlcmUiLCJvdGhlcndpc2UgcHJvdmlkZWQgdGhlcmUgaXMiLCJvZiB0aGUgaW5mb3JtYXRpb24gdXNlIiwidGhlIGluZm9ybWF0aW9uIHVzZSBhcyIsImluZm9ybWF0aW9uIHVzZSBhcyBhIiwibm9uIGNvbW1lcmNpYWwgZ292ZXJubWVudCBsaWNlbmNlIGZvciIsImNvbW1lcmNpYWwgZ292ZXJubWVudCBsaWNlbmNlIGZvciBwdWJsaWMiLCJnb3Zlcm5tZW50IGxpY2VuY2UgZm9yIHB1YmxpYyBzZWN0b3IiLCJsaWNlbmNlIGZvciBwdWJsaWMgc2VjdG9yIGluZm9ybWF0aW9uIiwiZm9yIHB1YmxpYyBzZWN0b3IgaW5mb3JtYXRpb24geW91IiwicHVibGljIHNlY3RvciBpbmZvcm1hdGlvbiB5b3UgYXJlIiwic2VjdG9yIGluZm9ybWF0aW9uIHlvdSBhcmUgZW5jb3VyYWdlZCIsImluZm9ybWF0aW9uIHlvdSBhcmUgZW5jb3VyYWdlZCB0byIsInRvIHVzZSB0aGUgaW5mb3JtYXRpb24gZm9yIiwidXNlIHRoZSBpbmZvcm1hdGlvbiBmb3Igbm9uIiwibm9uIGNvbW1lcmNpYWwgcHVycG9zZXMgb25seSBzdWJqZWN0IiwiY29tbWVyY2lhbCBwdXJwb3NlcyBvbmx5IHN1YmplY3QgdG8iLCJwdXJwb3NlcyBvbmx5IHN1YmplY3QgdG8gdGhlIiwib25seSBzdWJqZWN0IHRvIHRoZSBjb25kaXRpb25zIiwiaW5mb3JtYXRpb24gZXhwbG9pdCB0aGUgaW5mb3JtYXRpb24gZm9yIiwiZXhwbG9pdCB0aGUgaW5mb3JtYXRpb24gZm9yIG5vbiIsImZvciBub24gY29tbWVyY2lhbCBwdXJwb3NlcyBmb3IiLCJub24gY29tbWVyY2lhbCBwdXJwb3NlcyBmb3IgZXhhbXBsZSIsImNvbW1lcmNpYWwgcHVycG9zZXMgZm9yIGV4YW1wbGUgYnkiLCJwdXJwb3NlcyBmb3IgZXhhbXBsZSBieSBjb21iaW5pbmciLCJpdCB3aXRoIG90aGVyIGluZm9ybWF0aW9uIGluIiwid2l0aCBvdGhlciBpbmZvcm1hdGlvbiBpbiB5b3VyIiwib3RoZXIgaW5mb3JtYXRpb24gaW4geW91ciBvd24iLCJpbmZvcm1hdGlvbiBpbiB5b3VyIG93biBwcm9kdWN0IiwicHJvZHVjdCBvciBhcHBsaWNhdGlvbiB5b3UgYXJlIiwib3IgYXBwbGljYXRpb24geW91IGFyZSBub3QiLCJhcHBsaWNhdGlvbiB5b3UgYXJlIG5vdCBwZXJtaXR0ZWQiLCJhcmUgbm90IHBlcm1pdHRlZCB0byBleGVyY2lzZSIsIm5vdCBwZXJtaXR0ZWQgdG8gZXhlcmNpc2UgYW55IiwicGVybWl0dGVkIHRvIGV4ZXJjaXNlIGFueSBvZiIsInRvIHlvdSBieSB0aGlzIGxpY2VuY2UiLCJ5b3UgYnkgdGhpcyBsaWNlbmNlIGluIiwiYnkgdGhpcyBsaWNlbmNlIGluIGFueSIsInRoaXMgbGljZW5jZSBpbiBhbnkgbWFubmVyIiwibGljZW5jZSBpbiBhbnkgbWFubmVyIHRoYXQiLCJvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiB5b3UiLCJwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiB5b3UgbXVzdCIsIm1vbmV0YXJ5IGNvbXBlbnNhdGlvbiB5b3UgbXVzdCB3aGVyZSIsImNvbXBlbnNhdGlvbiB5b3UgbXVzdCB3aGVyZSB5b3UiLCJ1c2UgdGhlIGZvbGxvd2luZyBjb250YWlucyBpbmZvcm1hdGlvbiIsInRoZSBmb2xsb3dpbmcgY29udGFpbnMgaW5mb3JtYXRpb24gbGljZW5zZWQiLCJmb2xsb3dpbmcgY29udGFpbnMgaW5mb3JtYXRpb24gbGljZW5zZWQgdW5kZXIiLCJpbmZvcm1hdGlvbiBsaWNlbnNlZCB1bmRlciB0aGUgbm9uIl19LHsibGljZW5zZVRleHRzIjpbIlVuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQSBPcGVuIFNvdXJjZSBMaWNlbnNlIENvcHlyaWdodCAoYykgXHUwMDNjWWVhclx1MDAzZSBcdTAwM2NPd25lciBPcmdhbml6YXRpb24gTmFtZVx1MDAzZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuRGV2ZWxvcGVkIGJ5OiBcblxuXHUwMDNjTmFtZSBvZiBEZXZlbG9wbWVudCBHcm91cFx1MDAzZVxuXG5cdTAwM2NOYW1lIG9mIEluc3RpdHV0aW9uXHUwMDNlXG5cblx1MDAzY1VSTCBmb3IgRGV2ZWxvcG1lbnQgR3JvdXAvSW5zdGl0dXRpb25cdTAwM2VcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIHdpdGggdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMuXG5cbiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBcdTAwM2NOYW1lIG9mIERldmVsb3BtZW50IEdyb3VwLCBOYW1lIG9mIEluc3RpdHV0aW9uXHUwMDNlICwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIFdJVEggVEhFIFNPRlRXQVJFLiJdLCJsaWNlbnNlSWRzIjpbIk5DU0EiXSwia2V5d29yZHMiOlsieWVhciBvd25lciBvcmdhbml6YXRpb24iLCJvd25lciBvcmdhbml6YXRpb24gbmFtZSIsIm9yZ2FuaXphdGlvbiBuYW1lIGFsbCIsIm5hbWUgYWxsIHJpZ2h0cyIsInJpZ2h0cyByZXNlcnZlZCBkZXZlbG9wZWQiLCJyZXNlcnZlZCBkZXZlbG9wZWQgYnkiLCJkZXZlbG9wZWQgYnkgbmFtZSIsIm9mIGluc3RpdHV0aW9uIHVybCIsImluc3RpdHV0aW9uIHVybCBmb3IiLCJ1cmwgZm9yIGRldmVsb3BtZW50IiwiZm9yIGRldmVsb3BtZW50IGdyb3VwIiwiZGV2ZWxvcG1lbnQgZ3JvdXAgaW5zdGl0dXRpb24iLCJncm91cCBpbnN0aXR1dGlvbiBwZXJtaXNzaW9uIiwiaW5zdGl0dXRpb24gcGVybWlzc2lvbiBpcyIsInRvIGRlYWwgd2l0aCIsImRlYWwgd2l0aCB0aGUiLCJmb2xsb3dpbmcgY29uZGl0aW9ucyByZWRpc3RyaWJ1dGlvbnMiLCJmb2xsb3dpbmcgZGlzY2xhaW1lcnMgcmVkaXN0cmlidXRpb25zIiwiZGlzY2xhaW1lcnMgcmVkaXN0cmlidXRpb25zIGluIiwiZm9sbG93aW5nIGRpc2NsYWltZXJzIGluIiwiZGlzY2xhaW1lcnMgaW4gdGhlIiwibmFtZXMgb2YgbmFtZSIsIm9mIG5hbWUgb2YiLCJvZiBpbnN0aXR1dGlvbiBub3IiLCJpbnN0aXR1dGlvbiBub3IgdGhlIiwidGhlIGNvbnRyaWJ1dG9ycyBvciIsImNvbnRyaWJ1dG9ycyBvciBjb3B5cmlnaHQiLCJvdGhlciBkZWFsaW5ncyB3aXRoIiwiZGVhbGluZ3Mgd2l0aCB0aGUiLCJjIHllYXIgb3duZXIgb3JnYW5pemF0aW9uIiwieWVhciBvd25lciBvcmdhbml6YXRpb24gbmFtZSIsIm93bmVyIG9yZ2FuaXphdGlvbiBuYW1lIGFsbCIsIm9yZ2FuaXphdGlvbiBuYW1lIGFsbCByaWdodHMiLCJuYW1lIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJhbGwgcmlnaHRzIHJlc2VydmVkIGRldmVsb3BlZCIsInJpZ2h0cyByZXNlcnZlZCBkZXZlbG9wZWQgYnkiLCJyZXNlcnZlZCBkZXZlbG9wZWQgYnkgbmFtZSIsImRldmVsb3BlZCBieSBuYW1lIG9mIiwiYnkgbmFtZSBvZiBkZXZlbG9wbWVudCIsIm5hbWUgb2YgaW5zdGl0dXRpb24gdXJsIiwib2YgaW5zdGl0dXRpb24gdXJsIGZvciIsImluc3RpdHV0aW9uIHVybCBmb3IgZGV2ZWxvcG1lbnQiLCJ1cmwgZm9yIGRldmVsb3BtZW50IGdyb3VwIiwiZm9yIGRldmVsb3BtZW50IGdyb3VwIGluc3RpdHV0aW9uIiwiZGV2ZWxvcG1lbnQgZ3JvdXAgaW5zdGl0dXRpb24gcGVybWlzc2lvbiIsImdyb3VwIGluc3RpdHV0aW9uIHBlcm1pc3Npb24gaXMiLCJpbnN0aXR1dGlvbiBwZXJtaXNzaW9uIGlzIGhlcmVieSIsInNvZnR3YXJlIHRvIGRlYWwgd2l0aCIsInRvIGRlYWwgd2l0aCB0aGUiLCJkZWFsIHdpdGggdGhlIHNvZnR3YXJlIiwid2l0aCB0aGUgc29mdHdhcmUgd2l0aG91dCIsInRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyByZWRpc3RyaWJ1dGlvbnMiLCJmb2xsb3dpbmcgY29uZGl0aW9ucyByZWRpc3RyaWJ1dGlvbnMgb2YiLCJ0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzIHJlZGlzdHJpYnV0aW9ucyIsImZvbGxvd2luZyBkaXNjbGFpbWVycyByZWRpc3RyaWJ1dGlvbnMgaW4iLCJkaXNjbGFpbWVycyByZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IiwidGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiIsImZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUiLCJkaXNjbGFpbWVycyBpbiB0aGUgZG9jdW1lbnRhdGlvbiIsImRpc3RyaWJ1dGlvbiBuZWl0aGVyIHRoZSBuYW1lcyIsInRoZSBuYW1lcyBvZiBuYW1lIiwibmFtZXMgb2YgbmFtZSBvZiIsIm9mIG5hbWUgb2YgZGV2ZWxvcG1lbnQiLCJuYW1lIG9mIGluc3RpdHV0aW9uIG5vciIsIm9mIGluc3RpdHV0aW9uIG5vciB0aGUiLCJpbnN0aXR1dGlvbiBub3IgdGhlIG5hbWVzIiwicGVybWlzc2lvbiB0aGUgc29mdHdhcmUgaXMiLCJzaGFsbCB0aGUgY29udHJpYnV0b3JzIG9yIiwidGhlIGNvbnRyaWJ1dG9ycyBvciBjb3B5cmlnaHQiLCJjb250cmlidXRvcnMgb3IgY29weXJpZ2h0IGhvbGRlcnMiLCJvciBvdGhlciBkZWFsaW5ncyB3aXRoIiwib3RoZXIgZGVhbGluZ3Mgd2l0aCB0aGUiLCJkZWFsaW5ncyB3aXRoIHRoZSBzb2Z0d2FyZSIsIm5jc2Egb3BlbiBzb3VyY2UgbGljZW5zZSBjb3B5cmlnaHQiLCJzb3VyY2UgbGljZW5zZSBjb3B5cmlnaHQgYyB5ZWFyIiwibGljZW5zZSBjb3B5cmlnaHQgYyB5ZWFyIG93bmVyIiwiY29weXJpZ2h0IGMgeWVhciBvd25lciBvcmdhbml6YXRpb24iLCJjIHllYXIgb3duZXIgb3JnYW5pemF0aW9uIG5hbWUiLCJ5ZWFyIG93bmVyIG9yZ2FuaXphdGlvbiBuYW1lIGFsbCIsIm93bmVyIG9yZ2FuaXphdGlvbiBuYW1lIGFsbCByaWdodHMiLCJvcmdhbml6YXRpb24gbmFtZSBhbGwgcmlnaHRzIHJlc2VydmVkIiwibmFtZSBhbGwgcmlnaHRzIHJlc2VydmVkIGRldmVsb3BlZCIsImFsbCByaWdodHMgcmVzZXJ2ZWQgZGV2ZWxvcGVkIGJ5IiwicmlnaHRzIHJlc2VydmVkIGRldmVsb3BlZCBieSBuYW1lIiwicmVzZXJ2ZWQgZGV2ZWxvcGVkIGJ5IG5hbWUgb2YiLCJkZXZlbG9wZWQgYnkgbmFtZSBvZiBkZXZlbG9wbWVudCIsImJ5IG5hbWUgb2YgZGV2ZWxvcG1lbnQgZ3JvdXAiLCJncm91cCBuYW1lIG9mIGluc3RpdHV0aW9uIHVybCIsIm5hbWUgb2YgaW5zdGl0dXRpb24gdXJsIGZvciIsIm9mIGluc3RpdHV0aW9uIHVybCBmb3IgZGV2ZWxvcG1lbnQiLCJpbnN0aXR1dGlvbiB1cmwgZm9yIGRldmVsb3BtZW50IGdyb3VwIiwidXJsIGZvciBkZXZlbG9wbWVudCBncm91cCBpbnN0aXR1dGlvbiIsImZvciBkZXZlbG9wbWVudCBncm91cCBpbnN0aXR1dGlvbiBwZXJtaXNzaW9uIiwiZGV2ZWxvcG1lbnQgZ3JvdXAgaW5zdGl0dXRpb24gcGVybWlzc2lvbiBpcyIsImdyb3VwIGluc3RpdHV0aW9uIHBlcm1pc3Npb24gaXMgaGVyZWJ5IiwiaW5zdGl0dXRpb24gcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCIsInRoZSBzb2Z0d2FyZSB0byBkZWFsIHdpdGgiLCJzb2Z0d2FyZSB0byBkZWFsIHdpdGggdGhlIiwidG8gZGVhbCB3aXRoIHRoZSBzb2Z0d2FyZSIsImRlYWwgd2l0aCB0aGUgc29mdHdhcmUgd2l0aG91dCIsIndpdGggdGhlIHNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24iLCJ0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgcmVkaXN0cmlidXRpb25zIiwidGhlIGZvbGxvd2luZyBjb25kaXRpb25zIHJlZGlzdHJpYnV0aW9ucyBvZiIsImZvbGxvd2luZyBjb25kaXRpb25zIHJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UiLCJhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyByZWRpc3RyaWJ1dGlvbnMiLCJ0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzIHJlZGlzdHJpYnV0aW9ucyBpbiIsImZvbGxvd2luZyBkaXNjbGFpbWVycyByZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IiwiZGlzY2xhaW1lcnMgcmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIiwiYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4iLCJ0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzIGluIHRoZSIsImZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUgZG9jdW1lbnRhdGlvbiIsImRpc2NsYWltZXJzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZCIsInRoZSBkaXN0cmlidXRpb24gbmVpdGhlciB0aGUgbmFtZXMiLCJkaXN0cmlidXRpb24gbmVpdGhlciB0aGUgbmFtZXMgb2YiLCJuZWl0aGVyIHRoZSBuYW1lcyBvZiBuYW1lIiwidGhlIG5hbWVzIG9mIG5hbWUgb2YiLCJuYW1lcyBvZiBuYW1lIG9mIGRldmVsb3BtZW50Iiwib2YgbmFtZSBvZiBkZXZlbG9wbWVudCBncm91cCIsImdyb3VwIG5hbWUgb2YgaW5zdGl0dXRpb24gbm9yIiwibmFtZSBvZiBpbnN0aXR1dGlvbiBub3IgdGhlIiwib2YgaW5zdGl0dXRpb24gbm9yIHRoZSBuYW1lcyIsImluc3RpdHV0aW9uIG5vciB0aGUgbmFtZXMgb2YiLCJ3cml0dGVuIHBlcm1pc3Npb24gdGhlIHNvZnR3YXJlIGlzIiwicGVybWlzc2lvbiB0aGUgc29mdHdhcmUgaXMgcHJvdmlkZWQiLCJldmVudCBzaGFsbCB0aGUgY29udHJpYnV0b3JzIG9yIiwic2hhbGwgdGhlIGNvbnRyaWJ1dG9ycyBvciBjb3B5cmlnaHQiLCJ0aGUgY29udHJpYnV0b3JzIG9yIGNvcHlyaWdodCBob2xkZXJzIiwiY29udHJpYnV0b3JzIG9yIGNvcHlyaWdodCBob2xkZXJzIGJlIiwidXNlIG9yIG90aGVyIGRlYWxpbmdzIHdpdGgiLCJvciBvdGhlciBkZWFsaW5ncyB3aXRoIHRoZSIsIm90aGVyIGRlYWxpbmdzIHdpdGggdGhlIHNvZnR3YXJlIl19LHsibGljZW5zZVRleHRzIjpbIk5FVEhBQ0sgR0VORVJBTCBQVUJMSUMgTElDRU5TRSAoQ29weXJpZ2h0IDE5ODkgTS4gU3RlcGhlbnNvbilcblxuKEJhc2VkIG9uIHRoZSBCSVNPTiBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlLCBjb3B5cmlnaHQgMTk4OCBSaWNoYXJkIE0uIFN0YWxsbWFuKVxuXG5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlLCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuIFlvdSBjYW4gYWxzbyB1c2UgdGhpcyB3b3JkaW5nIHRvIG1ha2UgdGhlIHRlcm1zIGZvciBvdGhlciBwcm9ncmFtcy5cblxuVGhlIGxpY2Vuc2UgYWdyZWVtZW50cyBvZiBtb3N0IHNvZnR3YXJlIGNvbXBhbmllcyBrZWVwIHlvdSBhdCB0aGUgbWVyY3kgb2YgdGhvc2UgY29tcGFuaWVzLiBCeSBjb250cmFzdCwgb3VyIGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ2l2ZSBldmVyeW9uZSB0aGUgcmlnaHQgdG8gc2hhcmUgTmV0SGFjay4gVG8gbWFrZSBzdXJlIHRoYXQgeW91IGdldCB0aGUgcmlnaHRzIHdlIHdhbnQgeW91IHRvIGhhdmUsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBIZW5jZSB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50LlxuXG5TcGVjaWZpY2FsbHksIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHJpZ2h0IHRvIGdpdmUgYXdheSBjb3BpZXMgb2YgTmV0SGFjaywgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBlbHNlIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgTmV0SGFjayBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy5cblxuVG8gbWFrZSBzdXJlIHRoYXQgZXZlcnlvbmUgaGFzIHN1Y2ggcmlnaHRzLCB3ZSBoYXZlIHRvIGZvcmJpZCB5b3UgdG8gZGVwcml2ZSBhbnlvbmUgZWxzZSBvZiB0aGVzZSByaWdodHMuIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgTmV0SGFjaywgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCB0ZWxsIHRoZW0gdGhlaXIgcmlnaHRzLlxuXG5BbHNvLCBmb3Igb3VyIG93biBwcm90ZWN0aW9uLCB3ZSBtdXN0IG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIGZpbmRzIG91dCB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciBOZXRIYWNrLiBJZiBOZXRIYWNrIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3Qgd2hhdCB3ZSBkaXN0cmlidXRlZC5cblxuVGhlcmVmb3JlIHdlIChNaWtlIFN0ZXBoZW5zb24gYW5kIG90aGVyIGhvbGRlcnMgb2YgTmV0SGFjayBjb3B5cmlnaHRzKSBtYWtlIHRoZSBmb2xsb3dpbmcgdGVybXMgd2hpY2ggc2F5IHdoYXQgeW91IG11c3QgZG8gdG8gYmUgYWxsb3dlZCB0byBkaXN0cmlidXRlIG9yIGNoYW5nZSBOZXRIYWNrLlxuXG5DT1BZSU5HIFBPTElDSUVTXG5cbiAgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgTmV0SGFjayBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3Uga2VlcCBpbnRhY3QgdGhlIG5vdGljZXMgb24gYWxsIGZpbGVzIHRoYXQgcmVmZXIgdG8gY29weXJpZ2h0cywgdG8gdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIE5ldEhhY2sgcHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCBhbG9uZyB3aXRoIHRoZSBwcm9ncmFtLlxuXG4gICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIE5ldEhhY2sgb3IgYW55IHBvcnRpb24gb2YgaXQsIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyB1bmRlciB0aGUgdGVybXMgb2YgUGFyYWdyYXBoIDEgYWJvdmUgKGluY2x1ZGluZyBkaXN0cmlidXRpbmcgdGhpcyBMaWNlbnNlIEFncmVlbWVudCksIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gdGhlIGZvbGxvd2luZzpcblxuICAgICAgYSkgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7IGFuZFxuXG4gICAgICBiKSBjYXVzZSB0aGUgd2hvbGUgb2YgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgYSBkZXJpdmF0aXZlIG9mIE5ldEhhY2sgb3IgYW55IHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIG9uIHRlcm1zIGlkZW50aWNhbCB0byB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCAoZXhjZXB0IHRoYXQgeW91IG1heSBjaG9vc2UgdG8gZ3JhbnQgbW9yZSBleHRlbnNpdmUgd2FycmFudHkgcHJvdGVjdGlvbiB0byBzb21lIG9yIGFsbCB0aGlyZCBwYXJ0aWVzLCBhdCB5b3VyIG9wdGlvbilcblxuICAgICAgYykgWW91IG1heSBjaGFyZ2UgYSBkaXN0cmlidXRpb24gZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLlxuXG4gICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgTmV0SGFjayAob3IgYSBwb3J0aW9uIG9yIGRlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFBhcmFncmFwaCAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvcixcblxuICAgICAgYikgYWNjb21wYW55IGl0IHdpdGggZnVsbCBpbmZvcm1hdGlvbiBhcyB0byBob3cgdG8gb2J0YWluIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZyb20gYW4gYXBwcm9wcmlhdGUgYXJjaGl2ZSBzaXRlLiAoVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uLilcblxuICAgRm9yIHRoZXNlIHB1cnBvc2VzLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBlaXRoZXIgdGhlIGZ1bGwgc291cmNlIGRpc3RyaWJ1dGlvbiBhcyBvcmlnaW5hbGx5IHJlbGVhc2VkIG92ZXIgVXNlbmV0IG9yIHVwZGF0ZWQgY29waWVzIG9mIHRoZSBmaWxlcyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZS5cblxuICAgNC4gWW91IG1heSBub3QgY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBOZXRIYWNrIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgTmV0SGFjayBpcyB2b2lkIGFuZCB5b3VyIHJpZ2h0cyB0byB1c2UgdGhlIHByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIGFncmVlbWVudCBzaGFsbCBiZSBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29tcHV0ZXIgc29mdHdhcmUgcHJvZ3JhbXMgZnJvbSB5b3Ugd2l0aCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLlxuXG5TdGF0ZWQgcGxhaW5seTogWW91IGFyZSBwZXJtaXR0ZWQgdG8gbW9kaWZ5IE5ldEhhY2ssIG9yIG90aGVyd2lzZSB1c2UgcGFydHMgb2YgTmV0SGFjaywgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGggdGhlIGNvbmRpdGlvbnMgc3BlY2lmaWVkIGFib3ZlOyBpbiBwYXJ0aWN1bGFyLCB5b3VyIG1vZGlmaWVkIE5ldEhhY2sgb3IgcHJvZ3JhbSBjb250YWluaW5nIHBhcnRzIG9mIE5ldEhhY2sgbXVzdCByZW1haW4gZnJlZWx5IGF2YWlsYWJsZSBhcyBwcm92aWRlZCBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBJbiBvdGhlciB3b3JkcywgZ28gYWhlYWQgYW5kIHNoYXJlIE5ldEhhY2ssIGJ1dCBkb24ndCB0cnkgdG8gc3RvcCBhbnlvbmUgZWxzZSBmcm9tIHNoYXJpbmcgaXQgZmFydGhlci4iXSwibGljZW5zZUlkcyI6WyJOR1BMIl0sImtleXdvcmRzIjpbIm5ldGhhY2sgZ2VuZXJhbCBwdWJsaWMiLCJsaWNlbnNlIGNvcHlyaWdodCAxOTg5IiwiY29weXJpZ2h0IDE5ODkgbSIsIjE5ODkgbSBzdGVwaGVuc29uIiwibSBzdGVwaGVuc29uIGJhc2VkIiwic3RlcGhlbnNvbiBiYXNlZCBvbiIsIm9uIHRoZSBiaXNvbiIsInRoZSBiaXNvbiBnZW5lcmFsIiwiYmlzb24gZ2VuZXJhbCBwdWJsaWMiLCJsaWNlbnNlIGNvcHlyaWdodCAxOTg4IiwiY29weXJpZ2h0IDE5ODggcmljaGFyZCIsIjE5ODggcmljaGFyZCBtIiwicmljaGFyZCBtIHN0YWxsbWFuIiwibSBzdGFsbG1hbiBldmVyeW9uZSIsInN0YWxsbWFuIGV2ZXJ5b25lIGlzIiwibGljZW5zZSBidXQgY2hhbmdpbmciLCJhbGxvd2VkIHlvdSBjYW4iLCJ1c2UgdGhpcyB3b3JkaW5nIiwidGhpcyB3b3JkaW5nIHRvIiwid29yZGluZyB0byBtYWtlIiwibWFrZSB0aGUgdGVybXMiLCJ0aGUgdGVybXMgZm9yIiwidGVybXMgZm9yIG90aGVyIiwiZm9yIG90aGVyIHByb2dyYW1zIiwib3RoZXIgcHJvZ3JhbXMgdGhlIiwicHJvZ3JhbXMgdGhlIGxpY2Vuc2UiLCJzb2Z0d2FyZSBjb21wYW5pZXMga2VlcCIsImNvbXBhbmllcyBrZWVwIHlvdSIsImtlZXAgeW91IGF0IiwieW91IGF0IHRoZSIsInRvIGdpdmUgZXZlcnlvbmUiLCJnaXZlIGV2ZXJ5b25lIHRoZSIsImV2ZXJ5b25lIHRoZSByaWdodCIsInJpZ2h0IHRvIHNoYXJlIiwidG8gc2hhcmUgbmV0aGFjayIsInNoYXJlIG5ldGhhY2sgdG8iLCJuZXRoYWNrIHRvIG1ha2UiLCJ0aGF0IHlvdSBnZXQiLCJnZXQgdGhlIHJpZ2h0cyIsInRoZSByaWdodHMgd2UiLCJyaWdodHMgd2Ugd2FudCIsIndlIHdhbnQgeW91Iiwid2FudCB5b3UgdG8iLCJ5b3UgdG8gaGF2ZSIsInRvIGhhdmUgd2UiLCJoYXZlIHdlIG5lZWQiLCJ0aGUgcmlnaHRzIGhlbmNlIiwicmlnaHRzIGhlbmNlIHRoaXMiLCJoZW5jZSB0aGlzIGxpY2Vuc2UiLCJsaWNlbnNlIGFncmVlbWVudCBzcGVjaWZpY2FsbHkiLCJhZ3JlZW1lbnQgc3BlY2lmaWNhbGx5IHdlIiwic3BlY2lmaWNhbGx5IHdlIHdhbnQiLCJyaWdodCB0byBnaXZlIiwiZ2l2ZSBhd2F5IGNvcGllcyIsImF3YXkgY29waWVzIG9mIiwib2YgbmV0aGFjayB0aGF0IiwibmV0aGFjayB0aGF0IHlvdSIsImNvZGUgb3IgZWxzZSIsIm9yIGVsc2UgY2FuIiwiZWxzZSBjYW4gZ2V0IiwiY2FuIGNoYW5nZSBuZXRoYWNrIiwiY2hhbmdlIG5ldGhhY2sgb3IiLCJuZXRoYWNrIG9yIHVzZSIsInRoaW5ncyB0byBtYWtlIiwic3VyZSB0aGF0IGV2ZXJ5b25lIiwidGhhdCBldmVyeW9uZSBoYXMiLCJldmVyeW9uZSBoYXMgc3VjaCIsImhhcyBzdWNoIHJpZ2h0cyIsInN1Y2ggcmlnaHRzIHdlIiwicmlnaHRzIHdlIGhhdmUiLCJ3ZSBoYXZlIHRvIiwiaGF2ZSB0byBmb3JiaWQiLCJmb3JiaWQgeW91IHRvIiwieW91IHRvIGRlcHJpdmUiLCJ0byBkZXByaXZlIGFueW9uZSIsImRlcHJpdmUgYW55b25lIGVsc2UiLCJhbnlvbmUgZWxzZSBvZiIsImVsc2Ugb2YgdGhlc2UiLCJ0aGVzZSByaWdodHMgZm9yIiwicmlnaHRzIGZvciBleGFtcGxlIiwib2YgbmV0aGFjayB5b3UiLCJuZXRoYWNrIHlvdSBtdXN0IiwidGhlaXIgcmlnaHRzIGFsc28iLCJyaWdodHMgYWxzbyBmb3IiLCJhbHNvIGZvciBvdXIiLCJmb3Igb3VyIG93biIsIm91ciBvd24gcHJvdGVjdGlvbiIsIm93biBwcm90ZWN0aW9uIHdlIiwicHJvdGVjdGlvbiB3ZSBtdXN0Iiwid2UgbXVzdCBtYWtlIiwibXVzdCBtYWtlIGNlcnRhaW4iLCJ0aGF0IGV2ZXJ5b25lIGZpbmRzIiwiZXZlcnlvbmUgZmluZHMgb3V0IiwiZmluZHMgb3V0IHRoYXQiLCJvdXQgdGhhdCB0aGVyZSIsIndhcnJhbnR5IGZvciBuZXRoYWNrIiwiZm9yIG5ldGhhY2sgaWYiLCJuZXRoYWNrIGlmIG5ldGhhY2siLCJpZiBuZXRoYWNrIGlzIiwibmV0aGFjayBpcyBtb2RpZmllZCIsImlzIG5vdCB3aGF0Iiwibm90IHdoYXQgd2UiLCJ3aGF0IHdlIGRpc3RyaWJ1dGVkIiwid2UgZGlzdHJpYnV0ZWQgdGhlcmVmb3JlIiwiZGlzdHJpYnV0ZWQgdGhlcmVmb3JlIHdlIiwidGhlcmVmb3JlIHdlIG1pa2UiLCJ3ZSBtaWtlIHN0ZXBoZW5zb24iLCJtaWtlIHN0ZXBoZW5zb24gYW5kIiwic3RlcGhlbnNvbiBhbmQgb3RoZXIiLCJhbmQgb3RoZXIgaG9sZGVycyIsIm90aGVyIGhvbGRlcnMgb2YiLCJob2xkZXJzIG9mIG5ldGhhY2siLCJvZiBuZXRoYWNrIGNvcHlyaWdodHMiLCJuZXRoYWNrIGNvcHlyaWdodHMgbWFrZSIsImNvcHlyaWdodHMgbWFrZSB0aGUiLCJtYWtlIHRoZSBmb2xsb3dpbmciLCJmb2xsb3dpbmcgdGVybXMgd2hpY2giLCJ0ZXJtcyB3aGljaCBzYXkiLCJ3aGljaCBzYXkgd2hhdCIsInNheSB3aGF0IHlvdSIsIndoYXQgeW91IG11c3QiLCJtdXN0IGRvIHRvIiwiZG8gdG8gYmUiLCJ0byBiZSBhbGxvd2VkIiwiZGlzdHJpYnV0ZSBvciBjaGFuZ2UiLCJvciBjaGFuZ2UgbmV0aGFjayIsImNoYW5nZSBuZXRoYWNrIGNvcHlpbmciLCJuZXRoYWNrIGNvcHlpbmcgcG9saWNpZXMiLCJjb3B5aW5nIHBvbGljaWVzIDEiLCJwb2xpY2llcyAxIHlvdSIsIm9mIG5ldGhhY2sgc291cmNlIiwibmV0aGFjayBzb3VyY2UgY29kZSIsInRoYXQgeW91IGtlZXAiLCJ5b3Uga2VlcCBpbnRhY3QiLCJrZWVwIGludGFjdCB0aGUiLCJpbnRhY3QgdGhlIG5vdGljZXMiLCJ0aGUgbm90aWNlcyBvbiIsIm5vdGljZXMgb24gYWxsIiwib24gYWxsIGZpbGVzIiwiZmlsZXMgdGhhdCByZWZlciIsInJlZmVyIHRvIGNvcHlyaWdodHMiLCJ0byBjb3B5cmlnaHRzIHRvIiwiY29weXJpZ2h0cyB0byB0aGlzIiwib2YgdGhlIG5ldGhhY2siLCJ0aGUgbmV0aGFjayBwcm9ncmFtIiwibmV0aGFjayBwcm9ncmFtIGEiLCJsaWNlbnNlIGFncmVlbWVudCBhbG9uZyIsImFncmVlbWVudCBhbG9uZyB3aXRoIiwicHJvZ3JhbSAyIHlvdSIsIjEgYWJvdmUgaW5jbHVkaW5nIiwiYWJvdmUgaW5jbHVkaW5nIGRpc3RyaWJ1dGluZyIsImluY2x1ZGluZyBkaXN0cmlidXRpbmcgdGhpcyIsImRpc3RyaWJ1dGluZyB0aGlzIGxpY2Vuc2UiLCJvciBpcyBhIiwiZGVyaXZhdGl2ZSBvZiBuZXRoYWNrIiwidGhpcmQgcGFydGllcyBvbiIsInBhcnRpZXMgb24gdGVybXMiLCJvbiB0ZXJtcyBpZGVudGljYWwiLCJ0ZXJtcyBpZGVudGljYWwgdG8iLCJpZGVudGljYWwgdG8gdGhvc2UiLCJ0byB0aG9zZSBjb250YWluZWQiLCJsaWNlbnNlIGFncmVlbWVudCBleGNlcHQiLCJhZ3JlZW1lbnQgZXhjZXB0IHRoYXQiLCJ0byBncmFudCBtb3JlIiwiZ3JhbnQgbW9yZSBleHRlbnNpdmUiLCJtb3JlIGV4dGVuc2l2ZSB3YXJyYW50eSIsImV4dGVuc2l2ZSB3YXJyYW50eSBwcm90ZWN0aW9uIiwib3B0aW9uIGMgeW91IiwiYSBmZWUgMyIsImZlZSAzIHlvdSIsImFuZCBkaXN0cmlidXRlIG5ldGhhY2siLCJkaXN0cmlidXRlIG5ldGhhY2sgb3IiLCJuZXRoYWNrIG9yIGEiLCJpdCB3aXRoIGZ1bGwiLCJ3aXRoIGZ1bGwgaW5mb3JtYXRpb24iLCJmdWxsIGluZm9ybWF0aW9uIGFzIiwiaW5mb3JtYXRpb24gYXMgdG8iLCJ0byBob3cgdG8iLCJvYnRhaW4gdGhlIGNvbXBsZXRlIiwiY29kZSBmcm9tIGFuIiwiZnJvbSBhbiBhcHByb3ByaWF0ZSIsImFuIGFwcHJvcHJpYXRlIGFyY2hpdmUiLCJhcHByb3ByaWF0ZSBhcmNoaXZlIHNpdGUiLCJhcmNoaXZlIHNpdGUgdGhpcyIsInNpdGUgdGhpcyBhbHRlcm5hdGl2ZSIsIm5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGZvciIsImRpc3RyaWJ1dGlvbiBmb3IgdGhlc2UiLCJ0aGVzZSBwdXJwb3NlcyBjb21wbGV0ZSIsInB1cnBvc2VzIGNvbXBsZXRlIHNvdXJjZSIsImNvZGUgbWVhbnMgZWl0aGVyIiwiZWl0aGVyIHRoZSBmdWxsIiwiZnVsbCBzb3VyY2UgZGlzdHJpYnV0aW9uIiwic291cmNlIGRpc3RyaWJ1dGlvbiBhcyIsImRpc3RyaWJ1dGlvbiBhcyBvcmlnaW5hbGx5IiwiYXMgb3JpZ2luYWxseSByZWxlYXNlZCIsIm9yaWdpbmFsbHkgcmVsZWFzZWQgb3ZlciIsInJlbGVhc2VkIG92ZXIgdXNlbmV0Iiwib3ZlciB1c2VuZXQgb3IiLCJ1c2VuZXQgb3IgdXBkYXRlZCIsIm9yIHVwZGF0ZWQgY29waWVzIl19LHsibGljZW5zZVRleHRzIjpbIk5vcndlZ2lhbiBMaWNlbmNlIGZvciBPcGVuIEdvdmVybm1lbnQgRGF0YSAoTkxPRClcblxuUHJlZmFjZSBvZiBsaWNlbmNlXG5cblRoaXMgbGljZW5jZSBncmFudHMgeW91IHRoZSByaWdodCB0byBjb3B5LCB1c2UgYW5kIGRpc3RyaWJ1dGUgaW5mb3JtYXRpb24sIHByb3ZpZGVkIHlvdSBhY2tub3dsZWRnZSB0aGUgY29udHJpYnV0b3JzIGFuZCBjb21wbHkgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc3RpcHVsYXRlZCBpbiB0aGlzIGxpY2VuY2UuIEJ5IHVzaW5nIGluZm9ybWF0aW9uIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgbGljZW5jZSwgeW91IGFjY2VwdCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGluIHRoaXMgbGljZW5jZS4gQXMgc2V0IG91dCBpbiBTZWN0aW9uIDcsIHRoZSBsaWNlbnNvciBkaXNjbGFpbXMgYW55IGFuZCBhbGwgbGlhYmlsaXR5IGZvciB0aGUgcXVhbGl0eSBvZiB0aGUgaW5mb3JtYXRpb24gYW5kIHdoYXQgdGhlIGluZm9ybWF0aW9uIGlzIHVzZWQgZm9yLlxuXG5UaGlzIGxpY2VuY2Ugc2hhbGwgbm90IGltcG9zZSBhbnkgbGltaXRhdGlvbnMgb24gdGhlIHJpZ2h0cyBvciBmcmVlZG9tcyBvZiB0aGUgbGljZW5zZWUgdW5kZXIgdGhlIE5vcndlZ2lhbiBGcmVlZG9tIG9mIEluZm9ybWF0aW9uIEFjdCBvciBhbnkgb3RoZXIgbGVnaXNsYXRpb24gZ3JhbnRpbmcgdGhlIGdlbmVyYWwgcHVibGljIGEgcmlnaHQgb2YgYWNjZXNzIHRvIHB1YmxpYyBzZWN0b3IgaW5mb3JtYXRpb24sIG9yIHRoYXQgZm9sbG93IGZyb20gZXhlbXB0aW9ucyBvciBsaW1pdGF0aW9ucyBzdGlwdWxhdGVkIGluIHRoZSBOb3J3ZWdpYW4gQ29weXJpZ2h0IEFjdC4gRnVydGhlciwgdGhlIGxpY2VuY2Ugc2hhbGwgbm90IGltcG9zZSBhbnkgbGltaXRhdGlvbnMgb24gdGhlIGxpY2Vuc2VlJ3MgZnJlZWRvbSBvZiBleHByZXNzaW9uIHJlY29nbml6ZWQgYnkgbGF3LlxuXG4gICAxLiBEZWZpbml0aW9uc1xuXG4gICDCq0RhdGFiYXNlwrsgc2hhbGwgbWVhbiBhIGRhdGFiYXNlIG9yIHNpbWlsYXIgcHJvdGVjdGVkIHVuZGVyIFNlY3Rpb24gNDMgb2YgdGhlIE5vcndlZ2lhbiBDb3B5cmlnaHQgQWN0LlxuXG4gICDCq0luZm9ybWF0aW9uwrsgc2hhbGwgbWVhbiB0ZXh0cywgaW1hZ2VzLCByZWNvcmRpbmdzLCBkYXRhIHNldHMgb3Igb3RoZXIgd29ya3MgcHJvdGVjdGVkIHVuZGVyIFNlY3Rpb24gMSBvZiB0aGUgTm9yd2VnaWFuIENvcHlyaWdodCBBY3QsIG9yIHdoaWNoIGFyZSBwcm90ZWN0ZWQgdW5kZXIgcHJvdmlzaW9ucyBhZGRyZXNzaW5nIHdoYXQgaXMgcmVmZXJyZWQgdG8gYXMgwqtuZWlnaGJvdXJpbmcgcmlnaHRzwrsgaW4gQ2hhcHRlciA1IG9mIHRoZSBOb3J3ZWdpYW4gQ29weXJpZ2h0IEFjdCAoaW5jbHVkaW5nIGRhdGFiYXNlcyBhbmQgcGhvdG9ncmFwaHMpLCBhbmQgd2hpY2ggYXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgbGljZW5jZS5cblxuICAgwqtDb3B5wrsgc2hhbGwgbWVhbiByZXByb2R1Y3Rpb24gaW4gYW55IGZvcm0uXG5cbiAgIMKrTGljZW5zZWXCuyBhbmQgwqt5b3XCuyBzaGFsbCBtZWFuIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29ucyB1c2luZyBpbmZvcm1hdGlvbiB1bmRlciB0aGlzIGxpY2VuY2UuXG5cbiAgIMKrTGljZW5zb3LCuyBzaGFsbCBtZWFuIHRoZSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB0aGF0IG1ha2VzIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB1bmRlciB0aGlzIGxpY2VuY2UuXG5cbiAgIMKrRGlzdHJpYnV0ZcK7IHNoYWxsIG1lYW4gYW55IGFjdGlvbnMgd2hlcmVieSBpbmZvcm1hdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSwgaW5jbHVkaW5nIHRvIGRpc3RyaWJ1dGUsIHRyYW5zZmVyLCBjb21tdW5pY2F0ZSwgZGlzcGVyc2UsIHNob3csIHBlcmZvcm0sIHNlbGwsIGxlbmQgYW5kIHJlbnQuXG5cbiAgIMKrVXNlwrsgc2hhbGwgbWVhbiBvbmUgb3IgbW9yZSBhY3Rpb25zIHJlbGV2YW50IHRvIGNvcHlyaWdodCBsYXcgcmVxdWlyaW5nIHBlcm1pc3Npb24gZnJvbSB0aGUgb3duZXIgb2YgdGhlIGNvcHlyaWdodC5cblxuICAgMi4gTGljZW5jZVxuXG4gICBUaGUgbGljZW5zZWUsIHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIHRoYXQgZm9sbG93IGZyb20gdGhpcyBsaWNlbmNlLCBtYXkgdXNlIHRoZSBpbmZvcm1hdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIGluIGFsbCBjb250ZXh0cywgYnk6XG5cbiAgICogY29weWluZyB0aGUgaW5mb3JtYXRpb24gYW5kIGRpc3RyaWJ1dGluZyB0aGUgaW5mb3JtYXRpb24gdG8gb3RoZXJzLFxuXG4gICAqIG1vZGlmeWluZyB0aGUgaW5mb3JtYXRpb24gYW5kL29yIGNvbWJpbmluZyB0aGUgaW5mb3JtYXRpb24gd2l0aCBvdGhlciBpbmZvcm1hdGlvbiwgYW5kXG5cbiAgICogY29weWluZyBhbmQgZGlzdHJpYnV0aW5nIHN1Y2ggY2hhbmdlZCBvciBjb21iaW5lZCBpbmZvcm1hdGlvbi5cblxuICAgKiBUaGlzIGlzIGEgbm9uLWV4Y2x1c2l2ZSwgZnJlZSwgcGVycGV0dWFsIGFuZCB3b3JsZHdpZGUgbGljZW5jZS4gVGhlIGluZm9ybWF0aW9uIG1heSBiZSB1c2VkIGluIGFueSBtZWRpdW0gYW5kIGZvcm1hdCBrbm93biB0b2RheSBhbmQvb3Igd2hpY2ggd2lsbCBiZWNvbWUga25vd24gaW4gdGhlIGZ1dHVyZS4gVGhlIExpY2Vuc2VlIHNoYWxsIG5vdCBzdWItbGljZW5zZSBvciB0cmFuc2ZlciB0aGlzIGxpY2VuY2UuXG5cbiAgIDMuIEV4ZW1wdGlvbnNcblxuICAgVGhlIGxpY2VuY2UgZG9lcyBub3QgYXBwbHkgdG8gYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBncmFudCBhIHJpZ2h0IHRvIHVzZTpcblxuICAgKiBpbmZvcm1hdGlvbiB3aGljaCBjb250YWlucyBwZXJzb25hbCBkYXRhIGNvdmVyZWQgYnkgdGhlIE5vcndlZ2lhbiBQZXJzb25hbCBEYXRhIEFjdCB1bmxlc3MgdGhlcmUgaXMgYSBsZWdpdGltYXRlIGJhc2lzIGZvciB0aGUgZGlzY2xvc3VyZSBhbmQgZnVydGhlciBwcm9jZXNzaW5nIG9mIHRoZSBwZXJzb25hbCBkYXRhXG5cbiAgICogaW5mb3JtYXRpb24gZGlzdHJpYnV0ZWQgaW4gdmlvbGF0aW9uIG9mIGEgc3RhdHV0b3J5IG9ibGlnYXRpb24gdG8gb2JzZXJ2ZSBjb25maWRlbnRpYWxpdHlcblxuICAgKiBpbmZvcm1hdGlvbiBleGNsdWRlZCBmcm9tIHB1YmxpYyBkaXNjbG9zdXJlIHB1cnN1YW50IHRvIGxhdywgaW5jbHVkaW5nIGluZm9ybWF0aW9uIGRlZW1lZCBzZW5zaXRpdmUgdW5kZXIgdGhlIE5vcndlZ2lhbiBOYXRpb25hbCBTZWN1cml0eSBBY3RcblxuICAgKiBpbmZvcm1hdGlvbiBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IHJpZ2h0cyB3aGljaCB0aGUgbGljZW5zb3IgaXMgbm90IGF1dGhvcmlzZWQgdG8gbGljZW5zZSB0byB0aGUgbGljZW5zZWVcblxuICAgKiBpbmZvcm1hdGlvbiBwcm90ZWN0ZWQgYnkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCBhbmQgbmVpZ2hib3VyaW5nIHJpZ2h0cyBpbiBhY2NvcmRhbmNlIHdpdGggQ2hhcHRlciA1IG9mIHRoZSBOb3J3ZWdpYW4gQ29weXJpZ2h0IEFjdCwgc3VjaCBhcyB0cmFkZW1hcmtzLCBwYXRlbnRzIGFuZCBkZXNpZ24gcmlnaHRzLCBidXQgdGhpcyBkb2VzIG5vdCBlbnRhaWwgYW4gaW1wZWRpbWVudCB0byB1c2UgaW5mb3JtYXRpb24gd2hlcmUgdGhlIGxpY2Vuc29yJ3MgbG9nbyBoYXMgYmVlbiBwZXJtYW5lbnRseSBpbnRlZ3JhdGVkIGludG8gdGhlIGluZm9ybWF0aW9uIG9yIHRvIGF0dHJpYnV0ZSB0aGUgb3JpZ2luIG9mIHRoZSBpbmZvcm1hdGlvbiBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGFydGljbGUgYmVsb3cgcmVsYXRpbmcgdG8gYXR0cmlidXRpb24uXG5cbiAgIElmIHRoZSBsaWNlbnNvciBoYXMgbWFkZSBhdmFpbGFibGUgaW5mb3JtYXRpb24gbm90IGNvdmVyZWQgYnkgdGhlIGxpY2VuY2UgYWNjb3JkaW5nIHRvIHRoZSBhYm92ZSBsaXN0LCB0aGUgbGljZW5zZWUgbXVzdCBjZWFzZSBhbGwgdXNlIG9mIHRoZSBpbmZvcm1hdGlvbiB1bmRlciB0aGUgbGljZW5jZSwgYW5kIGVyYXNlIHRoZSBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIGhlIG9yIHNoZSBiZWNvbWVzIGF3YXJlIG9mIG9yIHNob3VsZCBoYXZlIHVuZGVyc3Rvb2QgdGhhdCB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGNvdmVyZWQgYnkgdGhlIGxpY2VuY2UuXG5cbiAgIDQuIEVmZmVjdHMgb2YgYnJlYWNoIG9mIHRoZSBsaWNlbmNlXG5cbiAgIFRoZSBsaWNlbmNlIGlzIHN1YmplY3QgdG8gdGhlIGxpY2Vuc2VlJ3MgY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2VuY2UuIEluIHRoZSBldmVudCB0aGF0IHRoZSBsaWNlbnNlZSBjb21taXRzIGEgYnJlYWNoIG9mIHRoaXMgbGljZW5jZSwgdGhpcyB3aWxsIGVudGFpbCB0aGF0IHRoZSBsaWNlbnNlZSdzIHJpZ2h0IHRvIHVzZSB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSByZXZva2VkIGltbWVkaWF0ZWx5IHdpdGhvdXQgZnVydGhlciBub3RpY2UuIEluIGNhc2Ugb2Ygc3VjaCBhIGJyZWFjaCwgdGhlIGxpY2Vuc2VlIG11c3QgaW1tZWRpYXRlbHkgYW5kIHdpdGhvdXQgZnVydGhlciBub3RpY2UgdGFrZSBtZWFzdXJlcyB0byBjYXVzZSB0aGUgaW5mcmluZ2VtZW50IHRvIGVuZC4gQmVjYXVzZSB0aGUgcmlnaHQgdG8gdXNlIHRoZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiB0ZXJtaW5hdGVkLCB0aGUgbGljZW5zZWUgbXVzdCBjZWFzZSBhbGwgdXNlIG9mIHRoZSBpbmZvcm1hdGlvbiBieSB2aXJ0dWUgb2YgdGhlIGxpY2VuY2UuXG5cbiAgIDUuIEF0dHJpYnV0aW9uXG5cbiAgIFRoZSBsaWNlbnNlZSBzaGFsbCBhdHRyaWJ1dGUgdGhlIGxpY2Vuc29yIGFzIHNwZWNpZmllZCBieSB0aGUgbGljZW5zb3IgYW5kIGluY2x1ZGUgYSByZWZlcmVuY2UgdG8gdGhpcyBsaWNlbmNlLiBUbyB0aGUgZXh0ZW50IHByYWN0aWNhbGx5IHBvc3NpYmxlLCB0aGUgbGljZW5zZWUgc2hhbGwgcHJvdmlkZSBhIGxpbmsgdG8gYm90aCB0aGlzIGxpY2VuY2UgYW5kIHRoZSBzb3VyY2Ugb2YgdGhlIGluZm9ybWF0aW9uLlxuXG4gICBJZiB0aGUgbGljZW5zb3IgaGFzIG5vdCBzcGVjaWZpZWQgaG93IGF0dHJpYnV0aW9ucyBzaGFsbCBiZSBtYWRlLCB0aGUgbGljZW5zZWUgc2hhbGwgbm9ybWFsbHkgc3RhdGUgdGhlIGZvbGxvd2luZzogwqtDb250YWlucyBkYXRhIHVuZGVyIHRoZSBOb3J3ZWdpYW4gbGljZW5jZSBmb3IgT3BlbiBHb3Zlcm5tZW50IGRhdGEgKE5MT0QpIGRpc3RyaWJ1dGVkIGJ5IFtuYW1lIG9mIGxpY2Vuc29yXcK7LlxuXG4gICBJZiB0aGUgbGljZW5zb3IgaGFzIHNwZWNpZmllZCB0aGF0IHRoZSBpbmZvcm1hdGlvbiBzaGFsbCBvbmx5IGJlIGF2YWlsYWJsZSB1bmRlciBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBsaWNlbmNlLCBjZi4gU2VjdGlvbiAxMCwgdGhlIGxpY2Vuc2VlIHNoYWxsIGFsc28gc3RhdGUgdGhpcy5cblxuICAgSWYgdGhlIGluZm9ybWF0aW9uIGhhcyBiZWVuIGNoYW5nZWQsIHRoZSBsaWNlbnNlZSBtdXN0IGNsZWFybHkgaW5kaWNhdGUgdGhhdCBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIGJ5IHRoZSBsaWNlbnNlZS5cblxuICAgNi4gUHJvcGVyIHVzZVxuXG4gICBUaGUgbGljZW5zZWUgc2hhbGwgbm90IHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gYSBtYW5uZXIgdGhhdCBhcHBlYXJzIG1pc2xlYWRpbmcgbm9yIHByZXNlbnQgdGhlIGluZm9ybWF0aW9uIGluIGEgZGlzdG9ydGVkIG9yIGluY29ycmVjdCBtYW5uZXIuXG5cbiAgIE5laXRoZXIgdGhlIGxpY2Vuc29yJ3Mgbm9yIG90aGVyIGNvbnRyaWJ1dG9ycycgbmFtZXMgb3IgdHJhZGVtYXJrcyBtdXN0IGJlIHVzZWQgdG8gc3VwcG9ydCwgcmVjb21tZW5kIG9yIG1hcmtldCB0aGUgbGljZW5zZWUgb3IgYW55IHByb2R1Y3RzIG9yIHNlcnZpY2VzIHVzaW5nIHRoZSBpbmZvcm1hdGlvbi5cblxuICAgNy4gRGlzY2xhaW1lciBvZiBsaWFiaWxpdHlcblxuICAgVGhlIGluZm9ybWF0aW9uIGlzIGxpY2Vuc2VkIMKrYXMgaXPCuy4gVGhlIGluZm9ybWF0aW9uIG1heSBjb250YWluIGVycm9ycyBhbmQgb21pc3Npb25zLiBUaGUgbGljZW5zb3IgcHJvdmlkZXMgbm8gd2FycmFudGllcywgaW5jbHVkaW5nIHJlbGF0aW5nIHRvIHRoZSBjb250ZW50IGFuZCByZWxldmFuY2Ugb2YgdGhlIGluZm9ybWF0aW9uLlxuXG4gICBUaGUgbGljZW5zb3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgZm9yIGVycm9ycyBhbmQgZGVmZWN0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGluZm9ybWF0aW9uIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuXG4gICBUaGUgbGljZW5zb3Igc2hhbGwgbm90IGJlIGxpYWJsZSBmb3IgZGlyZWN0IG9yIGluZGlyZWN0IGxvc3NlcyBhcyBhIHJlc3VsdCBvZiB1c2Ugb2YgdGhlIGluZm9ybWF0aW9uIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBjb3B5aW5nIG9yIGZ1cnRoZXIgZGlzdHJpYnV0aW9uIG9mIHRoZSBpbmZvcm1hdGlvbi5cblxuICAgOC4gR3VhcmFudGVlcyByZWdhcmRpbmcgZGF0YSBxdWFsaXR5IGFuZCBhY2Nlc3NpYmlsaXR5XG5cbiAgIFRoaXMgbGljZW5jZSBkb2VzIG5vdCBwcmV2ZW50IHRoZSBsaWNlbnNvciBmcm9tIGlzc3Vpbmcgc3VwcGxlbWVudGFyeSBzdGF0ZW1lbnRzIHJlZ2FyZGluZyBleHBlY3RlZCBvciBpbnRlbmRlZCBkYXRhIHF1YWxpdHkgYW5kIGFjY2Vzc2liaWxpdHkuIFN1Y2ggc3RhdGVtZW50cyBzaGFsbCBiZSByZWdhcmRlZCBhcyBpbmRpY2F0aXZlIGluIG5hdHVyZSBhbmQgbm90IGJpbmRpbmcgb24gdGhlIHBhcnQgb2YgdGhlIGxpY2Vuc29yLiBUaGUgZGlzY2xhaW1lcnMgaW4gU2VjdGlvbiA3IGFsc28gYXBwbHkgaW4gZnVsbCBmb3Igc3VjaCBpbmRpY2F0aXZlIHN0YXRlbWVudHMuIEJhc2VkIG9uIHNlcGFyYXRlIGFncmVlbWVudCwgdGhlIGxpY2Vuc29yIG1heSBwcm92aWRlIGd1YXJhbnRlZXMgYW5kIGRpc3RyaWJ1dGUgdGhlIGluZm9ybWF0aW9uIG9uIHRlcm1zIGFuZCBjb25kaXRpb25zIGRpZmZlcmVudCBmcm9tIHRob3NlIHNldCBmb3J0aCBpbiB0aGlzIGxpY2VuY2UuXG5cbiAgIDkuIExpY2VuY2UgY29tcGF0aWJpbGl0eVxuXG4gICBJZiB0aGUgbGljZW5zZWUgaXMgdG8gZGlzdHJpYnV0ZSBhbiBhZGFwdGVkIG9yIGNvbWJpbmVkIHdvcmsgYmFzZWQgb24gaW5mb3JtYXRpb24gY292ZXJlZCBieSB0aGlzIGxpY2VuY2UgYW5kIHNvbWUgb3RoZXIgd29yayBsaWNlbnNlZCB1bmRlciBhIGxpY2VuY2UgY29tcGF0aWJsZSBieSBjb250cmFjdCwgc3VjaCBkaXN0cmlidXRpb24gbWF5IGJlIGJhc2VkIG9uIGFuIGFwcHJvcHJpYXRlIGxpY2VuY2UgY29tcGF0aWJsZSBieSBjb250cmFjdCwgY2YuIHRoZSBsaXN0IGJlbG93LlxuXG4gICBBIGxpY2VuY2UgY29tcGF0aWJsZSBieSBjb250cmFjdCBzaGFsbCBtZWFuIHRoZSBmb2xsb3dpbmcgbGljZW5jZXM6XG5cbiAgICogZm9yIGFsbCBpbmZvcm1hdGlvbjogT3BlbiBHb3Zlcm5tZW50IExpY2VuY2UgKHZlcnNpb24gMS4wKSxcblxuICAgKiBmb3IgdGhvc2UgcGFydHMgb2YgdGhlIGluZm9ybWF0aW9uIHdoaWNoIGRvIG5vdCBjb25zdGl0dXRlIGRhdGFiYXNlczogQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiBMaWNlbmNlIChnZW5lcmljIHZlcnNpb24gMS4wLCAyLjAsIDIuNSBhbmQgdW5wb3J0ZWQgdmVyc2lvbiAzLjApIGFuZCBDcmVhdGl2ZSBDb21tb25zIE5hdm5naXZlbHNlIDMuMCBOb3JnZSxcblxuICAgKiBmb3IgdGhvc2UgcGFydHMgb2YgdGhlIGluZm9ybWF0aW9uIHdoaWNoIGNvbnN0aXR1dGUgZGF0YWJhc2VzOiBPcGVuIERhdGEgQ29tbW9ucyBBdHRyaWJ1dGlvbiBMaWNlbnNlICh2ZXJzaW9uIDEuMCkuXG5cbiAgIFRoaXMgcHJvdmlzaW9uIGRvZXMgbm90IHByZXZlbnQgb3RoZXIgbGljZW5jZXMgZnJvbSBiZWluZyBjb21wYXRpYmxlIHdpdGggdGhpcyBsaWNlbmNlIGJhc2VkIG9uIHRoZWlyIGNvbnRlbnQuXG5cbiAgIDEwLiBOZXcgdmVyc2lvbnMgb2YgdGhlIGxpY2VuY2VcblxuICAgVGhlIGxpY2Vuc2VlIG1heSBjaG9vc2UgdG8gdXNlIHRoZSBpbmZvcm1hdGlvbiBjb3ZlcmVkIGJ5IHRoaXMgbGljZW5jZSB1bmRlciBhbnkgbmV3IHZlcnNpb25zIG9mIHRoZSBOb3J3ZWdpYW4gbGljZW5jZSBmb3IgT3BlbiBHb3Zlcm5tZW50IGRhdGEgKE5MT0QpIGlzc3VlZCBieSB0aGUgcmVzcG9uc2libGUgbWluaXN0cnkgKGN1cnJlbnRseSB0aGUgTWluaXN0cnkgb2YgR292ZXJubWVudCBBZG1pbmlzdHJhdGlvbiwgUmVmb3JtIGFuZCBDaHVyY2ggQWZmYWlycykgd2hlbiB0aGVzZSB2ZXJzaW9ucyBhcmUgZmluYWwgYW5kIG9mZmljaWFsLCB1bmxlc3MgdGhlIGxpY2Vuc29yIHdoZW4gbWFraW5nIHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgdW5kZXIgdGhpcyBsaWNlbmNlIHNwZWNpZmljYWxseSBoYXMgc3RhdGVkIHRoYXQgc29sZWx5IHZlcnNpb24gMS4wIG9mIHRoaXMgbGljZW5jZSBtYXkgYmUgdXNlZC5cblxuICAgMTEuIEdvdmVybmluZyBsYXcgYW5kIGxlZ2FsIHZlbnVlXG5cblRoaXMgbGljZW5jZSwgaW5jbHVkaW5nIGl0cyBmb3JtYXRpb24sIGFuZCBhbnkgZGlzcHV0ZXMgYW5kIGNsYWltcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gd2l0aCBvciByZWxhdGluZyB0byB0aGlzIGxpY2VuY2UsIHNoYWxsIGJlIHJlZ3VsYXRlZCBieSBOb3J3ZWdpYW4gbGF3LiBUaGUgbGVnYWwgdmVudWUgc2hhbGwgYmUgdGhlIGxpY2Vuc29yJ3Mgb3JkaW5hcnkgbGVnYWwgdmVudWUuIFRoZSBsaWNlbnNvciBtYXksIHdpdGggcmVnYXJkIHRvIGludGVsbGVjdHVhbCBwcm9wcmlldGFyeSByaWdodHMsIGNob29zZSB0byBwdXJzdWUgYSBjbGFpbSBhdCBvdGhlciBjb21wZXRlbnQgbGVnYWwgdmVudWVzIGFuZC9vciBiYXNlZCBvbiB0aGUgbGF3cyBvZiB0aGUgY291bnRyeSB3aGVyZSB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBhcmUgc291Z2h0IGVuZm9yY2VkLiJdLCJsaWNlbnNlSWRzIjpbIk5MT0QtMS4wIl0sImtleXdvcmRzIjpbImRhdGEgbmxvZCBwcmVmYWNlIiwibmxvZCBwcmVmYWNlIG9mIiwicHJlZmFjZSBvZiBsaWNlbmNlIiwib2YgbGljZW5jZSB0aGlzIiwidGhpcyBsaWNlbmNlIGdyYW50cyIsImxpY2VuY2UgZ3JhbnRzIHlvdSIsInJpZ2h0IHRvIGNvcHkiLCJ0byBjb3B5IHVzZSIsImNvcHkgdXNlIGFuZCIsImFuZCBkaXN0cmlidXRlIGluZm9ybWF0aW9uIiwiZGlzdHJpYnV0ZSBpbmZvcm1hdGlvbiBwcm92aWRlZCIsImluZm9ybWF0aW9uIHByb3ZpZGVkIHlvdSIsImFja25vd2xlZGdlIHRoZSBjb250cmlidXRvcnMiLCJ0aGUgY29udHJpYnV0b3JzIGFuZCIsImNvbnRyaWJ1dG9ycyBhbmQgY29tcGx5IiwiYW5kIGNvbmRpdGlvbnMgc3RpcHVsYXRlZCIsImNvbmRpdGlvbnMgc3RpcHVsYXRlZCBpbiIsInN0aXB1bGF0ZWQgaW4gdGhpcyIsImxpY2VuY2UgYnkgdXNpbmciLCJieSB1c2luZyBpbmZvcm1hdGlvbiIsInVzaW5nIGluZm9ybWF0aW9uIG1hZGUiLCJpbmZvcm1hdGlvbiBtYWRlIGF2YWlsYWJsZSIsImxpY2VuY2UgeW91IGFjY2VwdCIsImxpY2VuY2UgYXMgc2V0Iiwic2VjdGlvbiA3IHRoZSIsIjcgdGhlIGxpY2Vuc29yIiwibGlhYmlsaXR5IGZvciB0aGUiLCJmb3IgdGhlIHF1YWxpdHkiLCJpbmZvcm1hdGlvbiBhbmQgd2hhdCIsIndoYXQgdGhlIGluZm9ybWF0aW9uIiwiaW5mb3JtYXRpb24gaXMgdXNlZCIsInVzZWQgZm9yIHRoaXMiLCJmb3IgdGhpcyBsaWNlbmNlIiwib24gdGhlIHJpZ2h0cyIsInRoZSByaWdodHMgb3IiLCJyaWdodHMgb3IgZnJlZWRvbXMiLCJvciBmcmVlZG9tcyBvZiIsImZyZWVkb21zIG9mIHRoZSIsInRoZSBub3J3ZWdpYW4gZnJlZWRvbSIsIm5vcndlZ2lhbiBmcmVlZG9tIG9mIiwib2YgaW5mb3JtYXRpb24gYWN0IiwiaW5mb3JtYXRpb24gYWN0IG9yIiwiYWN0IG9yIGFueSIsImFueSBvdGhlciBsZWdpc2xhdGlvbiIsIm90aGVyIGxlZ2lzbGF0aW9uIGdyYW50aW5nIiwibGVnaXNsYXRpb24gZ3JhbnRpbmcgdGhlIiwiZ3JhbnRpbmcgdGhlIGdlbmVyYWwiLCJnZW5lcmFsIHB1YmxpYyBhIiwicHVibGljIGEgcmlnaHQiLCJyaWdodCBvZiBhY2Nlc3MiLCJhY2Nlc3MgdG8gcHVibGljIiwidG8gcHVibGljIHNlY3RvciIsInNlY3RvciBpbmZvcm1hdGlvbiBvciIsImluZm9ybWF0aW9uIG9yIHRoYXQiLCJvciB0aGF0IGZvbGxvdyIsImZvbGxvdyBmcm9tIGV4ZW1wdGlvbnMiLCJmcm9tIGV4ZW1wdGlvbnMgb3IiLCJleGVtcHRpb25zIG9yIGxpbWl0YXRpb25zIiwib3IgbGltaXRhdGlvbnMgc3RpcHVsYXRlZCIsImxpbWl0YXRpb25zIHN0aXB1bGF0ZWQgaW4iLCJzdGlwdWxhdGVkIGluIHRoZSIsImluIHRoZSBub3J3ZWdpYW4iLCJjb3B5cmlnaHQgYWN0IGZ1cnRoZXIiLCJhY3QgZnVydGhlciB0aGUiLCJmdXJ0aGVyIHRoZSBsaWNlbmNlIiwidGhlIGxpY2VuY2Ugc2hhbGwiLCJsaWNlbnNlZSBzIGZyZWVkb20iLCJzIGZyZWVkb20gb2YiLCJmcmVlZG9tIG9mIGV4cHJlc3Npb24iLCJvZiBleHByZXNzaW9uIHJlY29nbml6ZWQiLCJleHByZXNzaW9uIHJlY29nbml6ZWQgYnkiLCJyZWNvZ25pemVkIGJ5IGxhdyIsImJ5IGxhdyAxIiwibGF3IDEgZGVmaW5pdGlvbnMiLCIxIGRlZmluaXRpb25zIGRhdGFiYXNlIiwiZGVmaW5pdGlvbnMgZGF0YWJhc2Ugc2hhbGwiLCJkYXRhYmFzZSBzaGFsbCBtZWFuIiwibWVhbiBhIGRhdGFiYXNlIiwiZGF0YWJhc2Ugb3Igc2ltaWxhciIsIm9yIHNpbWlsYXIgcHJvdGVjdGVkIiwic2ltaWxhciBwcm90ZWN0ZWQgdW5kZXIiLCJ1bmRlciBzZWN0aW9uIDQzIiwic2VjdGlvbiA0MyBvZiIsImNvcHlyaWdodCBhY3QgaW5mb3JtYXRpb24iLCJhY3QgaW5mb3JtYXRpb24gc2hhbGwiLCJpbmZvcm1hdGlvbiBzaGFsbCBtZWFuIiwic2hhbGwgbWVhbiB0ZXh0cyIsIm1lYW4gdGV4dHMgaW1hZ2VzIiwidGV4dHMgaW1hZ2VzIHJlY29yZGluZ3MiLCJpbWFnZXMgcmVjb3JkaW5ncyBkYXRhIiwicmVjb3JkaW5ncyBkYXRhIHNldHMiLCJkYXRhIHNldHMgb3IiLCJzZXRzIG9yIG90aGVyIiwib3RoZXIgd29ya3MgcHJvdGVjdGVkIiwid29ya3MgcHJvdGVjdGVkIHVuZGVyIiwic2VjdGlvbiAxIG9mIiwiYWN0IG9yIHdoaWNoIiwib3Igd2hpY2ggYXJlIiwid2hpY2ggYXJlIHByb3RlY3RlZCIsImFyZSBwcm90ZWN0ZWQgdW5kZXIiLCJwcm90ZWN0ZWQgdW5kZXIgcHJvdmlzaW9ucyIsInVuZGVyIHByb3Zpc2lvbnMgYWRkcmVzc2luZyIsInByb3Zpc2lvbnMgYWRkcmVzc2luZyB3aGF0IiwiYWRkcmVzc2luZyB3aGF0IGlzIiwid2hhdCBpcyByZWZlcnJlZCIsInRvIGFzIG5laWdoYm91cmluZyIsImFzIG5laWdoYm91cmluZyByaWdodHMiLCJyaWdodHMgaW4gY2hhcHRlciIsImluIGNoYXB0ZXIgNSIsImNvcHlyaWdodCBhY3QgaW5jbHVkaW5nIiwiYWN0IGluY2x1ZGluZyBkYXRhYmFzZXMiLCJpbmNsdWRpbmcgZGF0YWJhc2VzIGFuZCIsImRhdGFiYXNlcyBhbmQgcGhvdG9ncmFwaHMiLCJhbmQgcGhvdG9ncmFwaHMgYW5kIiwicGhvdG9ncmFwaHMgYW5kIHdoaWNoIiwiYXJlIGRpc3RyaWJ1dGVkIHVuZGVyIiwidGhpcyBsaWNlbmNlIGNvcHkiLCJsaWNlbmNlIGNvcHkgc2hhbGwiLCJjb3B5IHNoYWxsIG1lYW4iLCJtZWFuIHJlcHJvZHVjdGlvbiBpbiIsInJlcHJvZHVjdGlvbiBpbiBhbnkiLCJhbnkgZm9ybSBsaWNlbnNlZSIsImZvcm0gbGljZW5zZWUgYW5kIiwibGljZW5zZWUgYW5kIHlvdSIsInlvdSBzaGFsbCBtZWFuIiwic2hhbGwgbWVhbiBuYXR1cmFsIiwibWVhbiBuYXR1cmFsIG9yIiwib3IgbGVnYWwgcGVyc29ucyIsImxlZ2FsIHBlcnNvbnMgdXNpbmciLCJwZXJzb25zIHVzaW5nIGluZm9ybWF0aW9uIiwibGljZW5jZSBsaWNlbnNvciBzaGFsbCIsIm1lYW4gdGhlIG5hdHVyYWwiLCJ0aGF0IG1ha2VzIGluZm9ybWF0aW9uIiwibWFrZXMgaW5mb3JtYXRpb24gYXZhaWxhYmxlIiwidGhpcyBsaWNlbmNlIGRpc3RyaWJ1dGUiLCJsaWNlbmNlIGRpc3RyaWJ1dGUgc2hhbGwiLCJkaXN0cmlidXRlIHNoYWxsIG1lYW4iLCJtZWFuIGFueSBhY3Rpb25zIiwiYW55IGFjdGlvbnMgd2hlcmVieSIsImFjdGlvbnMgd2hlcmVieSBpbmZvcm1hdGlvbiIsIndoZXJlYnkgaW5mb3JtYXRpb24gaXMiLCJpbmZvcm1hdGlvbiBpcyBtYWRlIiwibWFkZSBhdmFpbGFibGUgaW5jbHVkaW5nIiwiYXZhaWxhYmxlIGluY2x1ZGluZyB0byIsImluY2x1ZGluZyB0byBkaXN0cmlidXRlIiwiZGlzdHJpYnV0ZSB0cmFuc2ZlciBjb21tdW5pY2F0ZSIsInRyYW5zZmVyIGNvbW11bmljYXRlIGRpc3BlcnNlIiwiY29tbXVuaWNhdGUgZGlzcGVyc2Ugc2hvdyIsImRpc3BlcnNlIHNob3cgcGVyZm9ybSIsInNob3cgcGVyZm9ybSBzZWxsIiwicGVyZm9ybSBzZWxsIGxlbmQiLCJzZWxsIGxlbmQgYW5kIiwiYW5kIHJlbnQgdXNlIiwicmVudCB1c2Ugc2hhbGwiLCJzaGFsbCBtZWFuIG9uZSIsIm1lYW4gb25lIG9yIiwib3IgbW9yZSBhY3Rpb25zIiwibW9yZSBhY3Rpb25zIHJlbGV2YW50IiwiYWN0aW9ucyByZWxldmFudCB0byIsInJlbGV2YW50IHRvIGNvcHlyaWdodCIsInRvIGNvcHlyaWdodCBsYXciLCJjb3B5cmlnaHQgbGF3IHJlcXVpcmluZyIsImxhdyByZXF1aXJpbmcgcGVybWlzc2lvbiIsInJlcXVpcmluZyBwZXJtaXNzaW9uIGZyb20iLCJmcm9tIHRoZSBvd25lciIsInRoZSBjb3B5cmlnaHQgMiIsImNvcHlyaWdodCAyIGxpY2VuY2UiLCIyIGxpY2VuY2UgdGhlIiwidGhlIGxpY2Vuc2VlIHN1YmplY3QiLCJsaWNlbnNlZSBzdWJqZWN0IHRvIiwidGhlIGxpbWl0YXRpb25zIHRoYXQiLCJsaW1pdGF0aW9ucyB0aGF0IGZvbGxvdyIsImZvbGxvdyBmcm9tIHRoaXMiLCJmcm9tIHRoaXMgbGljZW5jZSIsImxpY2VuY2UgbWF5IHVzZSIsImluZm9ybWF0aW9uIGZvciBhbnkiLCJpbiBhbGwgY29udGV4dHMiLCJhbGwgY29udGV4dHMgYnkiLCJjb250ZXh0cyBieSBjb3B5aW5nIiwiYnkgY29weWluZyB0aGUiLCJjb3B5aW5nIHRoZSBpbmZvcm1hdGlvbiIsImluZm9ybWF0aW9uIGFuZCBkaXN0cmlidXRpbmciLCJkaXN0cmlidXRpbmcgdGhlIGluZm9ybWF0aW9uIiwiaW5mb3JtYXRpb24gdG8gb3RoZXJzIiwidG8gb3RoZXJzIG1vZGlmeWluZyIsIm90aGVycyBtb2RpZnlpbmcgdGhlIiwibW9kaWZ5aW5nIHRoZSBpbmZvcm1hdGlvbiIsImluZm9ybWF0aW9uIGFuZCBvciIsImFuZCBvciBjb21iaW5pbmciLCJvciBjb21iaW5pbmcgdGhlIiwiY29tYmluaW5nIHRoZSBpbmZvcm1hdGlvbiIsInRoZSBpbmZvcm1hdGlvbiB3aXRoIiwiaW5mb3JtYXRpb24gd2l0aCBvdGhlciIsIm90aGVyIGluZm9ybWF0aW9uIGFuZCIsImluZm9ybWF0aW9uIGFuZCBjb3B5aW5nIiwiYW5kIGNvcHlpbmcgYW5kIiwiY29weWluZyBhbmQgZGlzdHJpYnV0aW5nIiwiYW5kIGRpc3RyaWJ1dGluZyBzdWNoIiwiZGlzdHJpYnV0aW5nIHN1Y2ggY2hhbmdlZCIsInN1Y2ggY2hhbmdlZCBvciJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJOTyBMSU1JVCBQVUJMSUMgTElDRU5TRVxuXG5WZXJzaW9uIDAsIEp1bmUgMjAxMiBHaWxsZXMgTEFNSVJBTFxuXG5MYSBCaWxsYWlzXG5cbjM1NTgwIEJhdWxvblxuXG5GcmFuY2UgTk8gTElNSVQgUFVCTElDIExJQ0VOU0VcblxuVGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiwgbW9kaWZpY2F0aW9uIG9yIGFueXRoaW5nIGVsc2UuXG5cbiAgIDAuIE5vIGxpbWl0IHRvIGRvIGFueXRoaW5nIHdpdGggdGhpcyB3b3JrIGFuZCB0aGlzIGxpY2Vuc2UuIl0sImxpY2Vuc2VJZHMiOlsiTkxQTCJdLCJrZXl3b3JkcyI6WyJ2ZXJzaW9uIDAganVuZSIsIjAganVuZSAyMDEyIiwianVuZSAyMDEyIGdpbGxlcyIsIjIwMTIgZ2lsbGVzIGxhbWlyYWwiLCJnaWxsZXMgbGFtaXJhbCBsYSIsImxhbWlyYWwgbGEgYmlsbGFpcyIsImxhIGJpbGxhaXMgMzU1ODAiLCJiaWxsYWlzIDM1NTgwIGJhdWxvbiIsIjM1NTgwIGJhdWxvbiBmcmFuY2UiLCJiYXVsb24gZnJhbmNlIG5vIiwiZnJhbmNlIG5vIGxpbWl0IiwiY29weWluZyBkaXN0cmlidXRpb24gbW9kaWZpY2F0aW9uIiwiZGlzdHJpYnV0aW9uIG1vZGlmaWNhdGlvbiBvciIsIm1vZGlmaWNhdGlvbiBvciBhbnl0aGluZyIsIm9yIGFueXRoaW5nIGVsc2UiLCJhbnl0aGluZyBlbHNlIDAiLCJlbHNlIDAgbm8iLCIwIG5vIGxpbWl0Iiwibm8gbGltaXQgdG8iLCJsaW1pdCB0byBkbyIsIndpdGggdGhpcyB3b3JrIiwid29yayBhbmQgdGhpcyIsImxpbWl0IHB1YmxpYyBsaWNlbnNlIHZlcnNpb24iLCJwdWJsaWMgbGljZW5zZSB2ZXJzaW9uIDAiLCJsaWNlbnNlIHZlcnNpb24gMCBqdW5lIiwidmVyc2lvbiAwIGp1bmUgMjAxMiIsIjAganVuZSAyMDEyIGdpbGxlcyIsImp1bmUgMjAxMiBnaWxsZXMgbGFtaXJhbCIsIjIwMTIgZ2lsbGVzIGxhbWlyYWwgbGEiLCJnaWxsZXMgbGFtaXJhbCBsYSBiaWxsYWlzIiwibGFtaXJhbCBsYSBiaWxsYWlzIDM1NTgwIiwibGEgYmlsbGFpcyAzNTU4MCBiYXVsb24iLCJiaWxsYWlzIDM1NTgwIGJhdWxvbiBmcmFuY2UiLCIzNTU4MCBiYXVsb24gZnJhbmNlIG5vIiwiYmF1bG9uIGZyYW5jZSBubyBsaW1pdCIsImZyYW5jZSBubyBsaW1pdCBwdWJsaWMiLCJsaW1pdCBwdWJsaWMgbGljZW5zZSB0ZXJtcyIsImZvciBjb3B5aW5nIGRpc3RyaWJ1dGlvbiBtb2RpZmljYXRpb24iLCJjb3B5aW5nIGRpc3RyaWJ1dGlvbiBtb2RpZmljYXRpb24gb3IiLCJkaXN0cmlidXRpb24gbW9kaWZpY2F0aW9uIG9yIGFueXRoaW5nIiwibW9kaWZpY2F0aW9uIG9yIGFueXRoaW5nIGVsc2UiLCJvciBhbnl0aGluZyBlbHNlIDAiLCJhbnl0aGluZyBlbHNlIDAgbm8iLCJlbHNlIDAgbm8gbGltaXQiLCIwIG5vIGxpbWl0IHRvIiwibm8gbGltaXQgdG8gZG8iLCJsaW1pdCB0byBkbyBhbnl0aGluZyIsImFueXRoaW5nIHdpdGggdGhpcyB3b3JrIiwid2l0aCB0aGlzIHdvcmsgYW5kIiwidGhpcyB3b3JrIGFuZCB0aGlzIiwid29yayBhbmQgdGhpcyBsaWNlbnNlIiwibm8gbGltaXQgcHVibGljIGxpY2Vuc2UgdmVyc2lvbiIsImxpbWl0IHB1YmxpYyBsaWNlbnNlIHZlcnNpb24gMCIsInB1YmxpYyBsaWNlbnNlIHZlcnNpb24gMCBqdW5lIiwibGljZW5zZSB2ZXJzaW9uIDAganVuZSAyMDEyIiwidmVyc2lvbiAwIGp1bmUgMjAxMiBnaWxsZXMiLCIwIGp1bmUgMjAxMiBnaWxsZXMgbGFtaXJhbCIsImp1bmUgMjAxMiBnaWxsZXMgbGFtaXJhbCBsYSIsIjIwMTIgZ2lsbGVzIGxhbWlyYWwgbGEgYmlsbGFpcyIsImdpbGxlcyBsYW1pcmFsIGxhIGJpbGxhaXMgMzU1ODAiLCJsYW1pcmFsIGxhIGJpbGxhaXMgMzU1ODAgYmF1bG9uIiwibGEgYmlsbGFpcyAzNTU4MCBiYXVsb24gZnJhbmNlIiwiYmlsbGFpcyAzNTU4MCBiYXVsb24gZnJhbmNlIG5vIiwiMzU1ODAgYmF1bG9uIGZyYW5jZSBubyBsaW1pdCIsImJhdWxvbiBmcmFuY2Ugbm8gbGltaXQgcHVibGljIiwiZnJhbmNlIG5vIGxpbWl0IHB1YmxpYyBsaWNlbnNlIiwibm8gbGltaXQgcHVibGljIGxpY2Vuc2UgdGVybXMiLCJsaW1pdCBwdWJsaWMgbGljZW5zZSB0ZXJtcyBhbmQiLCJjb25kaXRpb25zIGZvciBjb3B5aW5nIGRpc3RyaWJ1dGlvbiBtb2RpZmljYXRpb24iLCJmb3IgY29weWluZyBkaXN0cmlidXRpb24gbW9kaWZpY2F0aW9uIG9yIiwiY29weWluZyBkaXN0cmlidXRpb24gbW9kaWZpY2F0aW9uIG9yIGFueXRoaW5nIiwiZGlzdHJpYnV0aW9uIG1vZGlmaWNhdGlvbiBvciBhbnl0aGluZyBlbHNlIiwibW9kaWZpY2F0aW9uIG9yIGFueXRoaW5nIGVsc2UgMCIsIm9yIGFueXRoaW5nIGVsc2UgMCBubyIsImFueXRoaW5nIGVsc2UgMCBubyBsaW1pdCIsImVsc2UgMCBubyBsaW1pdCB0byIsIjAgbm8gbGltaXQgdG8gZG8iLCJubyBsaW1pdCB0byBkbyBhbnl0aGluZyIsImxpbWl0IHRvIGRvIGFueXRoaW5nIHdpdGgiLCJ0byBkbyBhbnl0aGluZyB3aXRoIHRoaXMiLCJkbyBhbnl0aGluZyB3aXRoIHRoaXMgd29yayIsImFueXRoaW5nIHdpdGggdGhpcyB3b3JrIGFuZCIsIndpdGggdGhpcyB3b3JrIGFuZCB0aGlzIiwidGhpcyB3b3JrIGFuZCB0aGlzIGxpY2Vuc2UiXX0seyJsaWNlbnNlVGV4dHMiOlsiTkVUSVpFTiBPUEVOIFNPVVJDRSBMSUNFTlNFXG5cblZlcnNpb24gMS4wXG5cbiAgIDEuIERlZmluaXRpb25zLlxuXG4gICAgICAxLjAuMS4gXCJDb21tZXJjaWFsIFVzZVwiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuXG5cbiAgICAgIDEuMS4gXCJDb250cmlidXRvclwiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4yLiBcIkNvbnRyaWJ1dG9yIFZlcnNpb25cIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuXG5cbiAgICAgIDEuMy4gXCJDb3ZlcmVkIENvZGVcIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLlxuXG4gICAgICAxLjQuIFwiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtXCIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuXG5cbiAgICAgIDEuNS4gXCJFeGVjdXRhYmxlXCIgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuXG5cbiAgICAgIDEuNi4gXCJJbml0aWFsIERldmVsb3BlclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS5cblxuICAgICAgMS43LiBcIkxhcmdlciBXb3JrXCIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS44LiBcIkxpY2Vuc2VcIiBtZWFucyB0aGlzIGRvY3VtZW50LlxuXG4gICAgICAxLjguMS4gXCJMaWNlbnNhYmxlXCIgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uXG5cbiAgICAgIDEuOS4gXCJNb2RpZmljYXRpb25zXCIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6XG5cbiAgICAgICAgIEEuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgICAgIEIuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIDEuMTAuIFwiT3JpZ2luYWwgQ29kZVwiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuMTAuMS4gXCJQYXRlbnQgQ2xhaW1zXCIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuXG5cbiAgICAgIDEuMTEuIFwiU291cmNlIENvZGVcIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS5cblxuICAgICAgMS4xMi4gXCJZb3VcIiAob3IgXCJZb3VyXCIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbFwiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLlxuXG4gICAgICAyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kXG5cbiAgICAgICAgIChiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS5cblxuICAgICAgICAgKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgICAgKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy5cblxuICAgICAgMi4yLiBDb250cmlidXRvciBHcmFudC5cblxuICAgICAgU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2VcblxuICAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuXG5cbiAgICAgICAgIChjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgICAgICAgIChkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci5cblxuICAgMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLlxuXG4gICAgICAzLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuIFRoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LlxuXG4gICAgICAzLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuXG5cbiAgICAgIDMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICAgICAzLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzXG5cbiAgICAgICAgIChhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuXG5cbiAgICAgICAgIElmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSdzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgXCJMRUdBTFwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuXG5cbiAgICAgICAgIChiKSBDb250cmlidXRvciBBUElzLlxuXG4gICAgICAgICBJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuXG5cbiAgICAgICAgIChjKSBSZXByZXNlbnRhdGlvbnMuXG5cbiAgICAgICAgIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3Mgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgMy41LiBSZXF1aXJlZCBOb3RpY2VzLlxuXG4gICAgICBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLlxuXG4gICAgICBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjcuIExhcmdlciBXb3Jrcy5cblxuICAgICAgWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgTEVEcyBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgIDQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi5cblxuICAgSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC5cblxuICAgNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLlxuXG4gICA2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS5cblxuICAgICAgNi4xLiBOZXcgVmVyc2lvbnMuXG5cbiAgICAgIE5ldGl6ZW4gUHR5IEx0ZCAoXCJOZXRpemVuIFwiKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuXG5cbiAgICAgIDYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy5cblxuICAgICAgT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IE5ldGl6ZW4uIE5vIG9uZSBvdGhlciB0aGFuIE5ldGl6ZW4gaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICA2LjMuIERlcml2YXRpdmUgV29ya3MuXG5cbiAgICAgIElmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzIFwiTmV0aXplblwiLCBcIk5PU0xcIiBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE5ldGl6ZW4gT3BlbiBTb3VyY2UgTGljZW5zZSBhbmQgWGVuIE9wZW4gU291cmNlIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLilcblxuICAgNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS5cblxuICAgQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi5cblxuICAgICAgNy4xIFRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdyBhbmQgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB0byB0aGUgY29udHJhcnkgaW4gdGhpcyBBZ3JlZW1lbnQsIGFsbCB3YXJyYW50aWVzIHdoZXRoZXIgZXhwcmVzcywgaW1wbGllZCwgc3RhdHV0b3J5IG9yIG90aGVyd2lzZSwgcmVsYXRpbmcgaW4gYW55IHdheSB0byB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgdG8gdGhpcyBBZ3JlZW1lbnQgZ2VuZXJhbGx5LCBhcmUgZXhjbHVkZWQuIFdoZXJlIGxlZ2lzbGF0aW9uIGltcGxpZXMgaW4gdGhpcyBBZ3JlZW1lbnQgYW55IGNvbmRpdGlvbiBvciB3YXJyYW50eSBhbmQgdGhhdCBsZWdpc2xhdGlvbiBhdm9pZHMgb3IgcHJvaGliaXRzIHByb3Zpc2lvbnMgaW4gYSBjb250cmFjdCBleGNsdWRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBhcHBsaWNhdGlvbiBvZiBvciB0aGUgZXhlcmNpc2Ugb2Ygb3IgbGlhYmlsaXR5IHVuZGVyIHN1Y2ggdGVybSwgc3VjaCB0ZXJtIHNoYWxsIGJlIGRlZW1lZCB0byBiZSBpbmNsdWRlZCBpbiB0aGlzIEFncmVlbWVudC4gSG93ZXZlciwgdGhlIGxpYWJpbGl0eSBvZiBTdXBwbGllciBmb3IgYW55IGJyZWFjaCBvZiBzdWNoIHRlcm0gc2hhbGwgYmUgbGltaXRlZCwgYXQgdGhlIG9wdGlvbiBvZiBTdXBwbGllciwgdG8gYW55IG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmc6IGlmIHRoZSBicmVhY2ggcmVsYXRlZCB0byBnb29kczogdGhlIHJlcGxhY2VtZW50IG9mIHRoZSBnb29kcyBvciB0aGUgc3VwcGx5IG9mIGVxdWl2YWxlbnQgZ29vZHM7IHRoZSByZXBhaXIgb2Ygc3VjaCBnb29kczsgdGhlIHBheW1lbnQgb2YgdGhlIGNvc3Qgb2YgcmVwbGFjaW5nIHRoZSBnb29kcyBvciBvZiBhY3F1aXJpbmcgZXF1aXZhbGVudCBnb29kczsgb3IgdGhlIHBheW1lbnQgb2YgdGhlIGNvc3Qgb2YgaGF2aW5nIHRoZSBnb29kcyByZXBhaXJlZDsgYW5kIGlmIHRoZSBicmVhY2ggcmVsYXRlcyB0byBzZXJ2aWNlcyB0aGUgc3VwcGx5aW5nIG9mIHRoZSBzZXJ2aWNlcyBhZ2Fpbjsgb3IgdGhlIHBheW1lbnQgb2YgdGhlIGNvc3Qgb2YgaGF2aW5nIHRoZSBzZXJ2aWNlcyBzdXBwbGllZCBhZ2Fpbi5cblxuICAgOC4gVEVSTUlOQVRJT04uXG5cbiAgICAgIDguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLlxuXG4gICAgICA4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3BlciBvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzIFwiUGFydGljaXBhbnRcIikgYWxsZWdpbmcgdGhhdDpcblxuICAgICAgICAgKGEpIHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0byB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzIG9mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YgdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS5cblxuICAgICAgICAgKGIpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LlxuXG4gICAgICA4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuXG5cbiAgICAgIDguNC4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLlxuXG4gICA5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS5cblxuICAgVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICAxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy5cblxuICAgVGhlIENvdmVyZWQgQ29kZSBpcyBhIFwiY29tbWVyY2lhbCBpdGVtLFwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiBcImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmVcIiBhbmQgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sXCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLlxuXG4gICAxMS4gTUlTQ0VMTEFORU9VUy5cblxuICAgVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuXG5cbiAgIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBjb25zdHJ1ZWQgYWNjb3JkaW5nIHRvIHRoZSBsYXcgb2YgdGhlIFN0YXRlIG9mIFZpY3RvcmlhLiBUaGUgcGFydGllcyBpcnJldm9jYWJseSBzdWJtaXQgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YgdGhlIENvdXJ0cyBvZiBWaWN0b3JpYSBhbmQgQXVzdHJhbGlhIGFuZCBhbnkgQ291cnRzIGhlYXJpbmcgYXBwZWFscyBmcm9tIHN1Y2ggQ291cnRzLiBUaGlzIEFncmVlbWVudCBpcyBkZWVtZWQgdG8gaGF2ZSBiZWVuIG1hZGUgaW4gVmljdG9yaWEuXG5cbiAgIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLlxuXG4gICAxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy5cblxuICAgQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LlxuXG4gICAxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS5cblxuICAgSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzIFwiTXVsdGlwbGUtTGljZW5zZWRcIi4gXCJNdWx0aXBsZS1MaWNlbnNlZFwiIG1lYW5zIHRoYXQgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlciBZb3VyIGNob2ljZSBvZiB0aGUgTlBMIG9yIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIEVYSElCSVQgQSAtIE5ldGl6ZW4gT3BlbiBTb3VyY2UgTGljZW5zZVxuXG5gYFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE5ldGl6ZW4gT3BlbiBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL25ldGl6ZW4uY29tLmF1L2xpY2Vuc2VzL05PUEwvXG5cblNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cblRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLlxuXG5UaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fLiBQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fIF9fX19fX19fX19fX19fX19fX19fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuXG5Db250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uXG5cbkFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBfX19fXyBsaWNlbnNlICh0aGUgXCJbX19fXSBMaWNlbnNlXCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIFtfX19fX19dIExpY2Vuc2UgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBOT1NMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXSBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTk9TTCBvciB0aGUgW19fX10gTGljZW5zZS5cIlxuXG5bTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dIl0sImxpY2Vuc2VJZHMiOlsiTk9TTCJdLCJrZXl3b3JkcyI6WyJhIHNpbmdsZSBsZWRzIiwic2luZ2xlIGxlZHMgcHJvZHVjdCIsImxlZHMgcHJvZHVjdCBpbiIsIm5ldyB2ZXJzaW9ucyBuZXRpemVuIiwidmVyc2lvbnMgbmV0aXplbiBwdHkiLCJuZXRpemVuIHB0eSBsdGQiLCJwdHkgbHRkIG5ldGl6ZW4iLCJsdGQgbmV0aXplbiBtYXkiLCJuZXRpemVuIG1heSBwdWJsaXNoIiwicHVibGlzaGVkIGJ5IG5ldGl6ZW4iLCJieSBuZXRpemVuIG5vIiwibmV0aXplbiBubyBvbmUiLCJvdGhlciB0aGFuIG5ldGl6ZW4iLCJ0aGFuIG5ldGl6ZW4gaGFzIiwibmV0aXplbiBoYXMgdGhlIiwidGhlIHBocmFzZXMgbmV0aXplbiIsInBocmFzZXMgbmV0aXplbiBub3NsIiwibmV0aXplbiBub3NsIG9yIiwibm9zbCBvciBhbnkiLCJmcm9tIHRoZSBuZXRpemVuIiwibGljZW5zZSBhbmQgeGVuIiwiYW5kIHhlbiBvcGVuIiwieGVuIG9wZW4gc291cmNlIiwic291cmNlIGxpY2Vuc2UgZmlsbGluZyIsIjcgMSB0byIsImV4cHJlc3NseSBwcm92aWRlZCB0byIsImNvbnRyYXJ5IGluIHRoaXMiLCJhZ3JlZW1lbnQgYWxsIHdhcnJhbnRpZXMiLCJhbGwgd2FycmFudGllcyB3aGV0aGVyIiwib3Igb3RoZXJ3aXNlIHJlbGF0aW5nIiwib3RoZXJ3aXNlIHJlbGF0aW5nIGluIiwicmVsYXRpbmcgaW4gYW55Iiwid2F5IHRvIHRoZSIsIm9yIHRvIHRoaXMiLCJ0aGlzIGFncmVlbWVudCBnZW5lcmFsbHkiLCJhZ3JlZW1lbnQgZ2VuZXJhbGx5IGFyZSIsImdlbmVyYWxseSBhcmUgZXhjbHVkZWQiLCJhcmUgZXhjbHVkZWQgd2hlcmUiLCJleGNsdWRlZCB3aGVyZSBsZWdpc2xhdGlvbiIsIndoZXJlIGxlZ2lzbGF0aW9uIGltcGxpZXMiLCJsZWdpc2xhdGlvbiBpbXBsaWVzIGluIiwiaW1wbGllcyBpbiB0aGlzIiwiYWdyZWVtZW50IGFueSBjb25kaXRpb24iLCJhbnkgY29uZGl0aW9uIG9yIiwiY29uZGl0aW9uIG9yIHdhcnJhbnR5Iiwib3Igd2FycmFudHkgYW5kIiwiYW5kIHRoYXQgbGVnaXNsYXRpb24iLCJ0aGF0IGxlZ2lzbGF0aW9uIGF2b2lkcyIsImxlZ2lzbGF0aW9uIGF2b2lkcyBvciIsImF2b2lkcyBvciBwcm9oaWJpdHMiLCJvciBwcm9oaWJpdHMgcHJvdmlzaW9ucyIsInByb2hpYml0cyBwcm92aXNpb25zIGluIiwicHJvdmlzaW9ucyBpbiBhIiwiaW4gYSBjb250cmFjdCIsImEgY29udHJhY3QgZXhjbHVkaW5nIiwiY29udHJhY3QgZXhjbHVkaW5nIG9yIiwiZXhjbHVkaW5nIG9yIG1vZGlmeWluZyIsIm1vZGlmeWluZyB0aGUgYXBwbGljYXRpb24iLCJhcHBsaWNhdGlvbiBvZiBvciIsIm9mIG9yIGxpYWJpbGl0eSIsIm9yIGxpYWJpbGl0eSB1bmRlciIsImxpYWJpbGl0eSB1bmRlciBzdWNoIiwidW5kZXIgc3VjaCB0ZXJtIiwic3VjaCB0ZXJtIHN1Y2giLCJ0ZXJtIHN1Y2ggdGVybSIsImFncmVlbWVudCBob3dldmVyIHRoZSIsImhvd2V2ZXIgdGhlIGxpYWJpbGl0eSIsInRoZSBsaWFiaWxpdHkgb2YiLCJsaWFiaWxpdHkgb2Ygc3VwcGxpZXIiLCJvZiBzdXBwbGllciBmb3IiLCJzdXBwbGllciBmb3IgYW55IiwiZm9yIGFueSBicmVhY2giLCJicmVhY2ggb2Ygc3VjaCIsIm9mIHN1Y2ggdGVybSIsImJlIGxpbWl0ZWQgYXQiLCJsaW1pdGVkIGF0IHRoZSIsIm9wdGlvbiBvZiBzdXBwbGllciIsIm9mIHN1cHBsaWVyIHRvIiwic3VwcGxpZXIgdG8gYW55IiwidG8gYW55IG9uZSIsImFueSBvbmUgb3IiLCJmb2xsb3dpbmcgaWYgdGhlIiwidGhlIGJyZWFjaCByZWxhdGVkIiwiYnJlYWNoIHJlbGF0ZWQgdG8iLCJyZWxhdGVkIHRvIGdvb2RzIiwidG8gZ29vZHMgdGhlIiwiZ29vZHMgdGhlIHJlcGxhY2VtZW50IiwidGhlIHJlcGxhY2VtZW50IG9mIiwib2YgdGhlIGdvb2RzIiwib3IgdGhlIHN1cHBseSIsInRoZSBzdXBwbHkgb2YiLCJzdXBwbHkgb2YgZXF1aXZhbGVudCIsIm9mIGVxdWl2YWxlbnQgZ29vZHMiLCJlcXVpdmFsZW50IGdvb2RzIHRoZSIsImdvb2RzIHRoZSByZXBhaXIiLCJ0aGUgcmVwYWlyIG9mIiwicmVwYWlyIG9mIHN1Y2giLCJvZiBzdWNoIGdvb2RzIiwic3VjaCBnb29kcyB0aGUiLCJnb29kcyB0aGUgcGF5bWVudCIsImNvc3Qgb2YgcmVwbGFjaW5nIiwib2YgcmVwbGFjaW5nIHRoZSIsInJlcGxhY2luZyB0aGUgZ29vZHMiLCJnb29kcyBvciBvZiIsIm9yIG9mIGFjcXVpcmluZyIsIm9mIGFjcXVpcmluZyBlcXVpdmFsZW50IiwiYWNxdWlyaW5nIGVxdWl2YWxlbnQgZ29vZHMiLCJlcXVpdmFsZW50IGdvb2RzIG9yIiwiaGF2aW5nIHRoZSBnb29kcyIsInRoZSBnb29kcyByZXBhaXJlZCIsImdvb2RzIHJlcGFpcmVkIGFuZCIsInJlcGFpcmVkIGFuZCBpZiIsInRoZSBicmVhY2ggcmVsYXRlcyIsImJyZWFjaCByZWxhdGVzIHRvIiwicmVsYXRlcyB0byBzZXJ2aWNlcyIsInRvIHNlcnZpY2VzIHRoZSIsInNlcnZpY2VzIHRoZSBzdXBwbHlpbmciLCJ0aGUgc3VwcGx5aW5nIG9mIiwic3VwcGx5aW5nIG9mIHRoZSIsIm9mIHRoZSBzZXJ2aWNlcyIsInRoZSBzZXJ2aWNlcyBhZ2FpbiIsInNlcnZpY2VzIGFnYWluIG9yIiwiYWdhaW4gb3IgdGhlIiwiaGF2aW5nIHRoZSBzZXJ2aWNlcyIsInRoZSBzZXJ2aWNlcyBzdXBwbGllZCIsInNlcnZpY2VzIHN1cHBsaWVkIGFnYWluIiwic3VwcGxpZWQgYWdhaW4gOCIsImFnYWluIDggdGVybWluYXRpb24iLCJlbmZvcmNlYWJsZSB0aGlzIGFncmVlbWVudCIsImFuZCBjb25zdHJ1ZWQgYWNjb3JkaW5nIiwidG8gdGhlIGxhdyIsInN0YXRlIG9mIHZpY3RvcmlhIiwib2YgdmljdG9yaWEgdGhlIiwidmljdG9yaWEgdGhlIHBhcnRpZXMiLCJ0aGUgcGFydGllcyBpcnJldm9jYWJseSIsInBhcnRpZXMgaXJyZXZvY2FibHkgc3VibWl0IiwiaXJyZXZvY2FibHkgc3VibWl0IHRvIiwic3VibWl0IHRvIHRoZSIsImNvdXJ0cyBvZiB2aWN0b3JpYSIsIm9mIHZpY3RvcmlhIGFuZCIsInZpY3RvcmlhIGFuZCBhdXN0cmFsaWEiLCJhbmQgYXVzdHJhbGlhIGFuZCIsImF1c3RyYWxpYSBhbmQgYW55IiwiYW5kIGFueSBjb3VydHMiLCJhbnkgY291cnRzIGhlYXJpbmciLCJjb3VydHMgaGVhcmluZyBhcHBlYWxzIiwiaGVhcmluZyBhcHBlYWxzIGZyb20iLCJhcHBlYWxzIGZyb20gc3VjaCIsImZyb20gc3VjaCBjb3VydHMiLCJzdWNoIGNvdXJ0cyB0aGlzIiwiY291cnRzIHRoaXMgYWdyZWVtZW50IiwiYWdyZWVtZW50IGlzIGRlZW1lZCIsImlzIGRlZW1lZCB0byIsImJlZW4gbWFkZSBpbiIsIm1hZGUgaW4gdmljdG9yaWEiLCJpbiB2aWN0b3JpYSB0aGUiLCJ2aWN0b3JpYSB0aGUgYXBwbGljYXRpb24iLCJleGhpYml0IGEgbmV0aXplbiIsImEgbmV0aXplbiBvcGVuIiwidG8gdGhlIG5ldGl6ZW4iLCJhdCBodHRwIG5ldGl6ZW4iLCJodHRwIG5ldGl6ZW4gY29tIiwibmV0aXplbiBjb20gYXUiLCJjb20gYXUgbGljZW5zZXMiLCJhdSBsaWNlbnNlcyBub3BsIiwibGljZW5zZXMgbm9wbCBzb2Z0d2FyZSIsIm5vcGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQiLCJ1bmRlciB0aGUgbm9zbCIsInRoZSBub3NsIGluZGljYXRlIiwibm9zbCBpbmRpY2F0ZSB5b3VyIiwiZWl0aGVyIHRoZSBub3NsIiwidGhlIG5vc2wgb3IiLCJub3NsIG9yIHRoZSIsImFzIGEgc2luZ2xlIGxlZHMiLCJhIHNpbmdsZSBsZWRzIHByb2R1Y3QiLCJzaW5nbGUgbGVkcyBwcm9kdWN0IGluIiwibGVkcyBwcm9kdWN0IGluIHN1Y2giLCIxIG5ldyB2ZXJzaW9ucyBuZXRpemVuIiwibmV3IHZlcnNpb25zIG5ldGl6ZW4gcHR5IiwidmVyc2lvbnMgbmV0aXplbiBwdHkgbHRkIiwibmV0aXplbiBwdHkgbHRkIG5ldGl6ZW4iLCJwdHkgbHRkIG5ldGl6ZW4gbWF5IiwibHRkIG5ldGl6ZW4gbWF5IHB1Ymxpc2giLCJuZXRpemVuIG1heSBwdWJsaXNoIHJldmlzZWQiLCJsaWNlbnNlIHB1Ymxpc2hlZCBieSBuZXRpemVuIiwicHVibGlzaGVkIGJ5IG5ldGl6ZW4gbm8iLCJieSBuZXRpemVuIG5vIG9uZSIsIm5ldGl6ZW4gbm8gb25lIG90aGVyIiwib25lIG90aGVyIHRoYW4gbmV0aXplbiIsIm90aGVyIHRoYW4gbmV0aXplbiBoYXMiLCJ0aGFuIG5ldGl6ZW4gaGFzIHRoZSIsIm5ldGl6ZW4gaGFzIHRoZSByaWdodCIsInRoYXQgdGhlIHBocmFzZXMgbmV0aXplbiIsInRoZSBwaHJhc2VzIG5ldGl6ZW4gbm9zbCIsInBocmFzZXMgbmV0aXplbiBub3NsIG9yIiwibmV0aXplbiBub3NsIG9yIGFueSIsIm5vc2wgb3IgYW55IGNvbmZ1c2luZ2x5IiwiZGlmZmVyIGZyb20gdGhlIG5ldGl6ZW4iLCJmcm9tIHRoZSBuZXRpemVuIG9wZW4iLCJvcGVuIHNvdXJjZSBsaWNlbnNlIGFuZCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJORVRTQ0FQRSBQVUJMSUMgTElDRU5TRVxuXG5WZXJzaW9uIDEuMFxuXG4gICAxLiBEZWZpbml0aW9ucy5cblxuICAgICAgMS4xLiBgYENvbnRyaWJ1dG9yJycgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLlxuXG4gICAgICAxLjIuIGBgQ29udHJpYnV0b3IgVmVyc2lvbicnIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci5cblxuICAgICAgMS4zLiBgYENvdmVyZWQgQ29kZScnIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuXG5cbiAgICAgIDEuNC4gYGBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20nJyBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS5cblxuICAgICAgMS41LiBgYEV4ZWN1dGFibGUnJyBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS5cblxuICAgICAgMS42LiBgYEluaXRpYWwgRGV2ZWxvcGVyJycgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnlFeGhpYml0IEEuXG5cbiAgICAgIDEuNy4gYGBMYXJnZXIgV29yaycnIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuOC4gYGBMaWNlbnNlJycgbWVhbnMgdGhpcyBkb2N1bWVudC5cblxuICAgICAgMS45LiBgYE1vZGlmaWNhdGlvbnMnJyBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczpcblxuICAgICAgICAgQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgICAgQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4xMC4gYGBPcmlnaW5hbCBDb2RlJycgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieUV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjExLiBgYFNvdXJjZSBDb2RlJycgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3IgYSBsaXN0IG9mIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yJ3MgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLlxuXG4gICAgICAxLjEyLiBgYFlvdScnIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsIGBgWW91JycgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIGBgY29udHJvbCcnIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgMi4gU291cmNlIENvZGUgTGljZW5zZS5cblxuICAgICAgMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuIFRoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6XG5cbiAgICAgICAgIGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZFxuXG4gICAgICAgICAoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsIChgYFV0aWxpemUnJykgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLlxuXG4gICAgICBcblxuICAgICAgMi4yLiBDb250cmlidXRvciBHcmFudC5cblxuICAgICAgRWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6XG5cbiAgICAgICAgIChhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kXG5cbiAgICAgICAgIChiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLlxuXG4gICAzLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuXG5cbiAgICAgIDMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4gVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuXG5cbiAgICAgIDMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLiBBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS5cblxuICAgICAgMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiBZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgICAgIDMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnNcblxuICAgICAgICAgKGEpIFRoaXJkIFBhcnR5IENsYWltcy4gSWYgWW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBwYXJ0eSBjbGFpbXMgYW4gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGluIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBjb2RlIChvciBpdHMgdXRpbGl6YXRpb24gdW5kZXIgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkIGBgTEVHQUwnJyB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgWW91IG1ha2UgWW91ciBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgWW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLlxuXG4gICAgICAgICAoYikgQ29udHJpYnV0b3IgQVBJcy4gSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBZb3Ugb3duIG9yIGNvbnRyb2wgcGF0ZW50cyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS5cblxuICAgICAgMy41LiBSZXF1aXJlZCBOb3RpY2VzLiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci5cblxuICAgICAgMy43LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS5cblxuICAgNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLlxuXG4gICBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC5cblxuICAgNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS5cblxuICAgNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuXG5cbiAgICAgIDYuMS4gTmV3IFZlcnNpb25zLiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbiAoYGBOZXRzY2FwZScnKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuXG5cbiAgICAgIDYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4gT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IE5ldHNjYXBlLiBObyBvbmUgb3RoZXIgdGhhbiBOZXRzY2FwZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4gSWYgeW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgYGBNb3ppbGxhJycsIGBgTU9aSUxMQVBMJycsIGBgTU9aUEwnJywgYGBOZXRzY2FwZScnLCBgYE5QTCcnIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGFueXdoZXJlIGluIHlvdXIgbGljZW5zZSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgeW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIGFuZCBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKVxuXG4gICA3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLlxuXG4gICBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIGBgQVMgSVMnJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLlxuXG4gICA4LiBURVJNSU5BVElPTi5cblxuICAgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLlxuXG4gICA5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS5cblxuICAgVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWSBPVEhFUiBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVCBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLlxuXG4gICBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgYGBjb21tZXJjaWFsIGl0ZW0sJycgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mIGBgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZScnIGFuZCBgYGNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwnJyBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uXG5cbiAgIDExLiBNSVNDRUxMQU5FT1VTLlxuXG4gICBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4sIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2E6IChhKSB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nLCBhbGwgZGlzcHV0ZXMgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIChleGNlcHRpbmcgYW55IGRpc3B1dGUgcmVsYXRpbmcgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cykgc2hhbGwgYmUgc3ViamVjdCB0byBmaW5hbCBhbmQgYmluZGluZyBhcmJpdHJhdGlvbiwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHBheWluZyBhbGwgY29zdHMgb2YgYXJiaXRyYXRpb247IChiKSBhbnkgYXJiaXRyYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgaGVsZCBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHVuZGVyIHRoZSBhdXNwaWNlcyBvZiBKQU1TL0VuZERpc3B1dGU7IGFuZCAoYykgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuXG5cbiAgIDEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLlxuXG4gICBFeGNlcHQgaW4gY2FzZXMgd2hlcmUgYW5vdGhlciBDb250cmlidXRvciBoYXMgZmFpbGVkIHRvIGNvbXBseSB3aXRoIFNlY3Rpb24gMy40LCBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBZb3VyIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY29waWVzIG9mIENvdmVyZWQgQ29kZSB5b3UgbWFkZSBhdmFpbGFibGUsIHRoZSByZXZlbnVlcyB5b3UgcmVjZWl2ZWQgZnJvbSB1dGlsaXppbmcgc3VjaCByaWdodHMsIGFuZCBvdGhlciByZWxldmFudCBmYWN0b3JzLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIGFmZmVjdGVkIHBhcnRpZXMgdG8gZGlzdHJpYnV0ZSByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuXG5cbkFNRU5ETUVOVFNcblxuQWRkaXRpb25hbCBUZXJtcyBhcHBsaWNhYmxlIHRvIHRoZSBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZS5cblxuICAgSS4gRWZmZWN0LlxuXG4gICBUaGVzZSBhZGRpdGlvbmFsIHRlcm1zIGRlc2NyaWJlZCBpbiB0aGlzIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlIC0tIEFtZW5kbWVudHMgc2hhbGwgYXBwbHkgdG8gdGhlIE1vemlsbGEgQ29tbXVuaWNhdG9yIGNsaWVudCBjb2RlIGFuZCB0byBhbGwgQ292ZXJlZCBDb2RlIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgSUkuIGBgTmV0c2NhcGUncyBCcmFuZGVkIENvZGUnJyBtZWFucyBDb3ZlcmVkIENvZGUgdGhhdCBOZXRzY2FwZSBkaXN0cmlidXRlcyBhbmQvb3IgcGVybWl0cyBvdGhlcnMgdG8gZGlzdHJpYnV0ZSB1bmRlciBvbmUgb3IgbW9yZSB0cmFkZW1hcmsocykgd2hpY2ggYXJlIGNvbnRyb2xsZWQgYnkgTmV0c2NhcGUgYnV0IHdoaWNoIGFyZSBub3QgbGljZW5zZWQgZm9yIHVzZSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgIElJSS4gTmV0c2NhcGUgYW5kIGxvZ28uXG5cbiAgIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrIGBgTmV0c2NhcGUnJywgdGhlIGBgTmV0c2NhcGUgTiBhbmQgaG9yaXpvbicnIGxvZ28gb3IgdGhlIE5ldHNjYXBlIGxpZ2h0aG91c2UgbG9nbywgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgQ29kZS5cblxuICAgSVYuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIENvbnRyYWN0dWFsIE9ibGlnYXRpb24uXG5cbiAgIFByaW9yIHRvIGxpY2Vuc2luZyB0aGUgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UsIE5ldHNjYXBlIGhhcyBsaWNlbnNlZCB0aGlyZCBwYXJ0eSBjb2RlIGZvciB1c2UgaW4gTmV0c2NhcGUncyBCcmFuZGVkIENvZGUuIFRvIHRoZSBleHRlbnQgdGhhdCBOZXRzY2FwZSBpcyBsaW1pdGVkIGNvbnRyYWN0dWFsbHkgZnJvbSBtYWtpbmcgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UsIE5ldHNjYXBlIG1heSBjaG9vc2UgdG8gcmVpbnRlZ3JhdGUgc3VjaCBjb2RlIGludG8gQ292ZXJlZCBDb2RlIHdpdGhvdXQgYmVpbmcgcmVxdWlyZWQgdG8gZGlzdHJpYnV0ZSBzdWNoIGNvZGUgaW4gU291cmNlIENvZGUgZm9ybSwgZXZlbiBpZiBzdWNoIGNvZGUgd291bGQgb3RoZXJ3aXNlIGJlIGNvbnNpZGVyZWQgYGBNb2RpZmljYXRpb25zJycgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICBWLiBVc2Ugb2YgTW9kaWZpY2F0aW9ucyBhbmQgQ292ZXJlZCBDb2RlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLlxuXG4gICBWLjEuIEluIEdlbmVyYWwuIFRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMgYXBwbHkgdG8gTmV0c2NhcGUsIGV4Y2VwdCB0byB0aGUgZXh0ZW50IHNwZWNpZmllZCBpbiB0aGlzIEFtZW5kbWVudCwgU2VjdGlvbiBWLjIgYW5kIFYuMy5cblxuICAgVi4yLiBPdGhlciBQcm9kdWN0cy4gTmV0c2NhcGUgbWF5IGluY2x1ZGUgQ292ZXJlZCBDb2RlIGluIHByb2R1Y3RzIG90aGVyIHRoYW4gdGhlIE5ldHNjYXBlJ3MgQnJhbmRlZCBDb2RlIHdoaWNoIGFyZSByZWxlYXNlZCBieSBOZXRzY2FwZSBkdXJpbmcgdGhlIHR3byAoMikgeWVhcnMgZm9sbG93aW5nIHRoZSByZWxlYXNlIGRhdGUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIHdpdGhvdXQgc3VjaCBhZGRpdGlvbmFsIHByb2R1Y3RzIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIHN1Y2ggYWRkaXRpb25hbCBwcm9kdWN0cyBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlLiBWLjMuIEFsdGVybmF0aXZlIExpY2Vuc2luZy4gTmV0c2NhcGUgbWF5IGxpY2Vuc2UgdGhlIFNvdXJjZSBDb2RlIG9mIE5ldHNjYXBlJ3MgQnJhbmRlZCBDb2RlLCBpbmNsdWRpbmcgTW9kaWZpY2F0aW9ucyBpbmNvcnBvcmF0ZWQgdGhlcmVpbiwgd2l0aG91dCBzdWNoIGFkZGl0aW9uYWwgcHJvZHVjdHMgYmVjb21pbmcgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgbWF5IGxpY2Vuc2Ugc3VjaCBhZGRpdGlvbmFsIHByb2R1Y3RzIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UuXG5cbiAgIFZJLiBBcmJpdHJhdGlvbiBhbmQgTGl0aWdhdGlvbi5cblxuICAgTm90d2l0aHN0YW5kaW5nIHRoZSBsaW1pdGF0aW9ucyBvZiBTZWN0aW9uIDExIGFib3ZlLCB0aGUgcHJvdmlzaW9ucyByZWdhcmRpbmcgYXJiaXRyYXRpb24gYW5kIGxpdGlnYXRpb24gaW4gU2VjdGlvbiAxMShhKSwgKGIpIGFuZCAoYykgb2YgdGhlIExpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gYWxsIGRpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZS4gRVhISUJJVCBBLlxuXG5cIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL05QTC9cblxuU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuVGhlIE9yaWdpbmFsIENvZGUgaXMgTW96aWxsYSBDb21tdW5pY2F0b3IgY2xpZW50IGNvZGUsIHJlbGVhc2VkIE1hcmNoIDMxLCAxOTk4LlxuXG5UaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uIFBvcnRpb25zIGNyZWF0ZWQgYnkgTmV0c2NhcGUgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLlwiXG5cbltOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YgdGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBUaGlzIGlzIGR1ZSB0byB0aW1lIGNvbnN0cmFpbnRzIGVuY291bnRlcmVkIGluIHNpbXVsdGFuZW91c2x5IGZpbmFsaXppbmcgdGhlIExpY2Vuc2UgYW5kIGluIHByZXBhcmluZyB0aGUgT3JpZ2luYWwgQ29kZSBmb3IgcmVsZWFzZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dIl0sImxpY2Vuc2VJZHMiOlsiTlBMLTEuMCJdLCJrZXl3b3JkcyI6WyJieWV4aGliaXQgYSAxIiwiYnlleGhpYml0IGEgYXMiLCJlcXVpdGFibGUgYmFzaXMgYW1lbmRtZW50cyIsImJhc2lzIGFtZW5kbWVudHMgYWRkaXRpb25hbCIsImFtZW5kbWVudHMgYWRkaXRpb25hbCB0ZXJtcyIsInRoZSB0cmFkZW1hcmsgbmV0c2NhcGUiLCJ0cmFkZW1hcmsgbmV0c2NhcGUgdGhlIiwibGlnaHRob3VzZSBsb2dvIGV2ZW4iLCJvcmlnaW5hbCBjb2RlIGl2IiwiY29kZSBpdiBpbmFiaWxpdHkiLCJsaWNlbnNlIHZpIGFyYml0cmF0aW9uIiwidmkgYXJiaXRyYXRpb24gYW5kIiwiYW5kIGxpdGlnYXRpb24gbm90d2l0aHN0YW5kaW5nIiwicHJvdmlzaW9ucyByZWdhcmRpbmcgYXJiaXRyYXRpb24iLCJyZWdhcmRpbmcgYXJiaXRyYXRpb24gYW5kIiwiYW5kIGxpdGlnYXRpb24gaW4iLCJjIDE5OTggbmV0c2NhcGUiLCIxOTk4IG5ldHNjYXBlIGNvbW11bmljYXRpb25zIiwib3JpZ2luYWwgY29kZSB0aGlzIiwiY29kZSB0aGlzIGlzIiwidGhpcyBpcyBkdWUiLCJpcyBkdWUgdG8iLCJkdWUgdG8gdGltZSIsInRvIHRpbWUgY29uc3RyYWludHMiLCJ0aW1lIGNvbnN0cmFpbnRzIGVuY291bnRlcmVkIiwiY29uc3RyYWludHMgZW5jb3VudGVyZWQgaW4iLCJlbmNvdW50ZXJlZCBpbiBzaW11bHRhbmVvdXNseSIsImluIHNpbXVsdGFuZW91c2x5IGZpbmFsaXppbmciLCJzaW11bHRhbmVvdXNseSBmaW5hbGl6aW5nIHRoZSIsImZpbmFsaXppbmcgdGhlIGxpY2Vuc2UiLCJhbmQgaW4gcHJlcGFyaW5nIiwiaW4gcHJlcGFyaW5nIHRoZSIsInByZXBhcmluZyB0aGUgb3JpZ2luYWwiLCJjb2RlIGZvciByZWxlYXNlIiwiZm9yIHJlbGVhc2UgeW91IiwicmVsZWFzZSB5b3Ugc2hvdWxkIiwicmVxdWlyZWQgYnlleGhpYml0IGEgMSIsImJ5ZXhoaWJpdCBhIDEgNyIsInJlcXVpcmVkIGJ5ZXhoaWJpdCBhIGFzIiwiYnlleGhpYml0IGEgYXMgb3JpZ2luYWwiLCJhbiBlcXVpdGFibGUgYmFzaXMgYW1lbmRtZW50cyIsImVxdWl0YWJsZSBiYXNpcyBhbWVuZG1lbnRzIGFkZGl0aW9uYWwiLCJiYXNpcyBhbWVuZG1lbnRzIGFkZGl0aW9uYWwgdGVybXMiLCJhbWVuZG1lbnRzIGFkZGl0aW9uYWwgdGVybXMgYXBwbGljYWJsZSIsInVzZSB0aGUgdHJhZGVtYXJrIG5ldHNjYXBlIiwidGhlIHRyYWRlbWFyayBuZXRzY2FwZSB0aGUiLCJ0cmFkZW1hcmsgbmV0c2NhcGUgdGhlIG5ldHNjYXBlIiwibmV0c2NhcGUgbGlnaHRob3VzZSBsb2dvIGV2ZW4iLCJsaWdodGhvdXNlIGxvZ28gZXZlbiBpZiIsInRoZSBvcmlnaW5hbCBjb2RlIGl2Iiwib3JpZ2luYWwgY29kZSBpdiBpbmFiaWxpdHkiLCJjb2RlIGl2IGluYWJpbGl0eSB0byIsInRoZXJlaW4gd2l0aG91dCBzdWNoIGFkZGl0aW9uYWwiLCJ0aGlzIGxpY2Vuc2UgdmkgYXJiaXRyYXRpb24iLCJsaWNlbnNlIHZpIGFyYml0cmF0aW9uIGFuZCIsInZpIGFyYml0cmF0aW9uIGFuZCBsaXRpZ2F0aW9uIiwiYXJiaXRyYXRpb24gYW5kIGxpdGlnYXRpb24gbm90d2l0aHN0YW5kaW5nIiwiYW5kIGxpdGlnYXRpb24gbm90d2l0aHN0YW5kaW5nIHRoZSIsInRoZSBwcm92aXNpb25zIHJlZ2FyZGluZyBhcmJpdHJhdGlvbiIsInByb3Zpc2lvbnMgcmVnYXJkaW5nIGFyYml0cmF0aW9uIGFuZCIsInJlZ2FyZGluZyBhcmJpdHJhdGlvbiBhbmQgbGl0aWdhdGlvbiIsImFyYml0cmF0aW9uIGFuZCBsaXRpZ2F0aW9uIGluIiwiYW5kIGxpdGlnYXRpb24gaW4gc2VjdGlvbiIsImNvcHlyaWdodCBjIDE5OTggbmV0c2NhcGUiLCJjIDE5OTggbmV0c2NhcGUgY29tbXVuaWNhdGlvbnMiLCIxOTk4IG5ldHNjYXBlIGNvbW11bmljYXRpb25zIGNvcnBvcmF0aW9uIiwidGhlIG9yaWdpbmFsIGNvZGUgdGhpcyIsIm9yaWdpbmFsIGNvZGUgdGhpcyBpcyIsImNvZGUgdGhpcyBpcyBkdWUiLCJ0aGlzIGlzIGR1ZSB0byIsImlzIGR1ZSB0byB0aW1lIiwiZHVlIHRvIHRpbWUgY29uc3RyYWludHMiLCJ0byB0aW1lIGNvbnN0cmFpbnRzIGVuY291bnRlcmVkIiwidGltZSBjb25zdHJhaW50cyBlbmNvdW50ZXJlZCBpbiIsImNvbnN0cmFpbnRzIGVuY291bnRlcmVkIGluIHNpbXVsdGFuZW91c2x5IiwiZW5jb3VudGVyZWQgaW4gc2ltdWx0YW5lb3VzbHkgZmluYWxpemluZyIsImluIHNpbXVsdGFuZW91c2x5IGZpbmFsaXppbmcgdGhlIiwic2ltdWx0YW5lb3VzbHkgZmluYWxpemluZyB0aGUgbGljZW5zZSIsImZpbmFsaXppbmcgdGhlIGxpY2Vuc2UgYW5kIiwibGljZW5zZSBhbmQgaW4gcHJlcGFyaW5nIiwiYW5kIGluIHByZXBhcmluZyB0aGUiLCJpbiBwcmVwYXJpbmcgdGhlIG9yaWdpbmFsIiwicHJlcGFyaW5nIHRoZSBvcmlnaW5hbCBjb2RlIiwib3JpZ2luYWwgY29kZSBmb3IgcmVsZWFzZSIsImNvZGUgZm9yIHJlbGVhc2UgeW91IiwiZm9yIHJlbGVhc2UgeW91IHNob3VsZCIsInJlbGVhc2UgeW91IHNob3VsZCB1c2UiLCJub3RpY2UgcmVxdWlyZWQgYnlleGhpYml0IGEgMSIsInJlcXVpcmVkIGJ5ZXhoaWJpdCBhIDEgNyIsImJ5ZXhoaWJpdCBhIDEgNyBsYXJnZXIiLCJub3RpY2UgcmVxdWlyZWQgYnlleGhpYml0IGEgYXMiLCJyZXF1aXJlZCBieWV4aGliaXQgYSBhcyBvcmlnaW5hbCIsImJ5ZXhoaWJpdCBhIGFzIG9yaWdpbmFsIGNvZGUiLCJvbiBhbiBlcXVpdGFibGUgYmFzaXMgYW1lbmRtZW50cyIsImFuIGVxdWl0YWJsZSBiYXNpcyBhbWVuZG1lbnRzIGFkZGl0aW9uYWwiLCJlcXVpdGFibGUgYmFzaXMgYW1lbmRtZW50cyBhZGRpdGlvbmFsIHRlcm1zIiwiYmFzaXMgYW1lbmRtZW50cyBhZGRpdGlvbmFsIHRlcm1zIGFwcGxpY2FibGUiLCJhbWVuZG1lbnRzIGFkZGl0aW9uYWwgdGVybXMgYXBwbGljYWJsZSB0byIsInRvIHVzZSB0aGUgdHJhZGVtYXJrIG5ldHNjYXBlIiwidXNlIHRoZSB0cmFkZW1hcmsgbmV0c2NhcGUgdGhlIiwidGhlIHRyYWRlbWFyayBuZXRzY2FwZSB0aGUgbmV0c2NhcGUiLCJ0cmFkZW1hcmsgbmV0c2NhcGUgdGhlIG5ldHNjYXBlIG4iLCJ0aGUgbmV0c2NhcGUgbGlnaHRob3VzZSBsb2dvIGV2ZW4iLCJuZXRzY2FwZSBsaWdodGhvdXNlIGxvZ28gZXZlbiBpZiIsImxpZ2h0aG91c2UgbG9nbyBldmVuIGlmIHN1Y2giLCJpbiB0aGUgb3JpZ2luYWwgY29kZSBpdiIsInRoZSBvcmlnaW5hbCBjb2RlIGl2IGluYWJpbGl0eSIsIm9yaWdpbmFsIGNvZGUgaXYgaW5hYmlsaXR5IHRvIiwiY29kZSBpdiBpbmFiaWxpdHkgdG8gY29tcGx5IiwiaW5jb3Jwb3JhdGVkIHRoZXJlaW4gd2l0aG91dCBzdWNoIGFkZGl0aW9uYWwiLCJ0aGVyZWluIHdpdGhvdXQgc3VjaCBhZGRpdGlvbmFsIHByb2R1Y3RzIiwiaW4gdGhpcyBsaWNlbnNlIHZpIGFyYml0cmF0aW9uIiwidGhpcyBsaWNlbnNlIHZpIGFyYml0cmF0aW9uIGFuZCIsImxpY2Vuc2UgdmkgYXJiaXRyYXRpb24gYW5kIGxpdGlnYXRpb24iLCJ2aSBhcmJpdHJhdGlvbiBhbmQgbGl0aWdhdGlvbiBub3R3aXRoc3RhbmRpbmciLCJhcmJpdHJhdGlvbiBhbmQgbGl0aWdhdGlvbiBub3R3aXRoc3RhbmRpbmcgdGhlIiwiYW5kIGxpdGlnYXRpb24gbm90d2l0aHN0YW5kaW5nIHRoZSBsaW1pdGF0aW9ucyIsImFib3ZlIHRoZSBwcm92aXNpb25zIHJlZ2FyZGluZyBhcmJpdHJhdGlvbiIsInRoZSBwcm92aXNpb25zIHJlZ2FyZGluZyBhcmJpdHJhdGlvbiBhbmQiLCJwcm92aXNpb25zIHJlZ2FyZGluZyBhcmJpdHJhdGlvbiBhbmQgbGl0aWdhdGlvbiIsInJlZ2FyZGluZyBhcmJpdHJhdGlvbiBhbmQgbGl0aWdhdGlvbiBpbiIsImFyYml0cmF0aW9uIGFuZCBsaXRpZ2F0aW9uIGluIHNlY3Rpb24iLCJhbmQgbGl0aWdhdGlvbiBpbiBzZWN0aW9uIDExIiwiYXJlIGNvcHlyaWdodCBjIDE5OTggbmV0c2NhcGUiLCJjb3B5cmlnaHQgYyAxOTk4IG5ldHNjYXBlIGNvbW11bmljYXRpb25zIiwiYyAxOTk4IG5ldHNjYXBlIGNvbW11bmljYXRpb25zIGNvcnBvcmF0aW9uIiwiMTk5OCBuZXRzY2FwZSBjb21tdW5pY2F0aW9ucyBjb3Jwb3JhdGlvbiBhbGwiLCJvZiB0aGUgb3JpZ2luYWwgY29kZSB0aGlzIiwidGhlIG9yaWdpbmFsIGNvZGUgdGhpcyBpcyIsIm9yaWdpbmFsIGNvZGUgdGhpcyBpcyBkdWUiLCJjb2RlIHRoaXMgaXMgZHVlIHRvIiwidGhpcyBpcyBkdWUgdG8gdGltZSIsImlzIGR1ZSB0byB0aW1lIGNvbnN0cmFpbnRzIiwiZHVlIHRvIHRpbWUgY29uc3RyYWludHMgZW5jb3VudGVyZWQiLCJ0byB0aW1lIGNvbnN0cmFpbnRzIGVuY291bnRlcmVkIGluIiwidGltZSBjb25zdHJhaW50cyBlbmNvdW50ZXJlZCBpbiBzaW11bHRhbmVvdXNseSIsImNvbnN0cmFpbnRzIGVuY291bnRlcmVkIGluIHNpbXVsdGFuZW91c2x5IGZpbmFsaXppbmciLCJlbmNvdW50ZXJlZCBpbiBzaW11bHRhbmVvdXNseSBmaW5hbGl6aW5nIHRoZSIsImluIHNpbXVsdGFuZW91c2x5IGZpbmFsaXppbmcgdGhlIGxpY2Vuc2UiLCJzaW11bHRhbmVvdXNseSBmaW5hbGl6aW5nIHRoZSBsaWNlbnNlIGFuZCIsImZpbmFsaXppbmcgdGhlIGxpY2Vuc2UgYW5kIGluIiwidGhlIGxpY2Vuc2UgYW5kIGluIHByZXBhcmluZyIsImxpY2Vuc2UgYW5kIGluIHByZXBhcmluZyB0aGUiLCJhbmQgaW4gcHJlcGFyaW5nIHRoZSBvcmlnaW5hbCIsImluIHByZXBhcmluZyB0aGUgb3JpZ2luYWwgY29kZSIsInByZXBhcmluZyB0aGUgb3JpZ2luYWwgY29kZSBmb3IiLCJ0aGUgb3JpZ2luYWwgY29kZSBmb3IgcmVsZWFzZSIsIm9yaWdpbmFsIGNvZGUgZm9yIHJlbGVhc2UgeW91IiwiY29kZSBmb3IgcmVsZWFzZSB5b3Ugc2hvdWxkIiwiZm9yIHJlbGVhc2UgeW91IHNob3VsZCB1c2UiLCJyZWxlYXNlIHlvdSBzaG91bGQgdXNlIHRoZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJOZXRzY2FwZSBQdWJsaWMgTEljZW5zZSB2ZXJzaW9uIDEuMVxuXG5BTUVORE1FTlRTXG5cblRoZSBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoXCJOUExcIikgY29uc2lzdHMgb2YgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgd2l0aCB0aGUgZm9sbG93aW5nIEFtZW5kbWVudHMsIGluY2x1ZGluZyBFeGhpYml0IEEtTmV0c2NhcGUgUHVibGljIExpY2Vuc2UuIEZpbGVzIGlkZW50aWZpZWQgd2l0aCBcIkV4aGliaXQgQS1OZXRzY2FwZSBQdWJsaWMgTGljZW5zZVwiIGFyZSBnb3Zlcm5lZCBieSB0aGUgTmV0c2NhcGUgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEuXG5cbkFkZGl0aW9uYWwgVGVybXMgYXBwbGljYWJsZSB0byB0aGUgTmV0c2NhcGUgUHVibGljIExpY2Vuc2UuXG5cbiAgIEkuIEVmZmVjdC5cblxuICAgVGhlc2UgYWRkaXRpb25hbCB0ZXJtcyBkZXNjcmliZWQgaW4gdGhpcyBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZSAtLSBBbWVuZG1lbnRzIHNoYWxsIGFwcGx5IHRvIHRoZSBNb3ppbGxhIENvbW11bmljYXRvciBjbGllbnQgY29kZSBhbmQgdG8gYWxsIENvdmVyZWQgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgIElJLiBcIk5ldHNjYXBlJ3MgQnJhbmRlZCBDb2RlXCIgbWVhbnMgQ292ZXJlZCBDb2RlIHRoYXQgTmV0c2NhcGUgZGlzdHJpYnV0ZXMgYW5kL29yIHBlcm1pdHMgb3RoZXJzIHRvIGRpc3RyaWJ1dGUgdW5kZXIgb25lIG9yIG1vcmUgdHJhZGVtYXJrKHMpIHdoaWNoIGFyZSBjb250cm9sbGVkIGJ5IE5ldHNjYXBlIGJ1dCB3aGljaCBhcmUgbm90IGxpY2Vuc2VkIGZvciB1c2UgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICBJSUkuIE5ldHNjYXBlIGFuZCBsb2dvLlxuXG4gICBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3MgXCJOZXRzY2FwZVwiLCB0aGUgXCJOZXRzY2FwZSBOIGFuZCBob3Jpem9uXCIgbG9nbyBvciB0aGUgXCJOZXRzY2FwZSBsaWdodGhvdXNlXCIgbG9nbywgXCJOZXRjZW50ZXJcIiwgXCJHZWNrb1wiLCBcIkphdmFcIiBvciBcIkphdmFTY3JpcHRcIiwgXCJTbWFydCBCcm93c2luZ1wiIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucy5cblxuICAgSVYuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIENvbnRyYWN0dWFsIE9ibGlnYXRpb24uXG5cbiAgIFByaW9yIHRvIGxpY2Vuc2luZyB0aGUgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UsIE5ldHNjYXBlIGhhcyBsaWNlbnNlZCB0aGlyZCBwYXJ0eSBjb2RlIGZvciB1c2UgaW4gTmV0c2NhcGUncyBCcmFuZGVkIENvZGUuIFRvIHRoZSBleHRlbnQgdGhhdCBOZXRzY2FwZSBpcyBsaW1pdGVkIGNvbnRyYWN0dWFsbHkgZnJvbSBtYWtpbmcgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UsIE5ldHNjYXBlIG1heSBjaG9vc2UgdG8gcmVpbnRlZ3JhdGUgc3VjaCBjb2RlIGludG8gQ292ZXJlZCBDb2RlIHdpdGhvdXQgYmVpbmcgcmVxdWlyZWQgdG8gZGlzdHJpYnV0ZSBzdWNoIGNvZGUgaW4gU291cmNlIENvZGUgZm9ybSwgZXZlbiBpZiBzdWNoIGNvZGUgd291bGQgb3RoZXJ3aXNlIGJlIGNvbnNpZGVyZWQgXCJNb2RpZmljYXRpb25zXCIgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICBWLiBVc2Ugb2YgTW9kaWZpY2F0aW9ucyBhbmQgQ292ZXJlZCBDb2RlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLlxuXG4gICAgICBWLjEuIEluIEdlbmVyYWwuXG5cbiAgICAgIFRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMgYXBwbHkgdG8gTmV0c2NhcGUsIGV4Y2VwdCB0byB0aGUgZXh0ZW50IHNwZWNpZmllZCBpbiB0aGlzIEFtZW5kbWVudCwgU2VjdGlvbiBWLjIgYW5kIFYuMy5cblxuICAgICAgVi4yLiBPdGhlciBQcm9kdWN0cy5cblxuICAgICAgTmV0c2NhcGUgbWF5IGluY2x1ZGUgQ292ZXJlZCBDb2RlIGluIHByb2R1Y3RzIG90aGVyIHRoYW4gdGhlIE5ldHNjYXBlJ3MgQnJhbmRlZCBDb2RlIHdoaWNoIGFyZSByZWxlYXNlZCBieSBOZXRzY2FwZSBkdXJpbmcgdGhlIHR3byAoMikgeWVhcnMgZm9sbG93aW5nIHRoZSByZWxlYXNlIGRhdGUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIHdpdGhvdXQgc3VjaCBhZGRpdGlvbmFsIHByb2R1Y3RzIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIHN1Y2ggYWRkaXRpb25hbCBwcm9kdWN0cyBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlLlxuXG4gICAgICBWLjMuIEFsdGVybmF0aXZlIExpY2Vuc2luZy5cblxuICAgICAgTmV0c2NhcGUgbWF5IGxpY2Vuc2UgdGhlIFNvdXJjZSBDb2RlIG9mIE5ldHNjYXBlJ3MgQnJhbmRlZCBDb2RlLCBpbmNsdWRpbmcgTW9kaWZpY2F0aW9ucyBpbmNvcnBvcmF0ZWQgdGhlcmVpbiwgd2l0aG91dCBzdWNoIE5ldHNjYXBlIEJyYW5kZWQgQ29kZSBiZWNvbWluZyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBtYXkgbGljZW5zZSBzdWNoIE5ldHNjYXBlIEJyYW5kZWQgQ29kZSBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlLlxuXG4gICBWSS4gTGl0aWdhdGlvbi5cblxuICAgTm90d2l0aHN0YW5kaW5nIHRoZSBsaW1pdGF0aW9ucyBvZiBTZWN0aW9uIDExIGFib3ZlLCB0aGUgcHJvdmlzaW9ucyByZWdhcmRpbmcgbGl0aWdhdGlvbiBpbiBTZWN0aW9uIDExKGEpLCAoYikgYW5kIChjKSBvZiB0aGUgTGljZW5zZSBzaGFsbCBhcHBseSB0byBhbGwgZGlzcHV0ZXMgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlLlxuXG4gICBFWEhJQklUIEEtTmV0c2NhcGUgUHVibGljIExpY2Vuc2UuXG5cbiAgIFwiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTmV0c2NhcGUgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTlBML1xuXG5Tb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG5UaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGllbnQgY29kZSwgcmVsZWFzZWQgTWFyY2ggMzEsIDE5OTguXG5cblRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4gUG9ydGlvbnMgY3JlYXRlZCBieSBOZXRzY2FwZSBhcmUgQ29weXJpZ2h0IChDKSAxOTk4LTE5OTkgTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbkNvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy5cblxuQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSBcIltfX19dIExpY2Vuc2VcIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgW19fX19dIExpY2Vuc2UgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE5QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgW19fX10gTGljZW5zZS4gSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE5QTCBvciB0aGUgW19fX10gTGljZW5zZS5cIlxuXG5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xXG5cbiAgIDEuIERlZmluaXRpb25zLlxuXG4gICAxLjAuMS4gXCJDb21tZXJjaWFsIFVzZVwiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuXG5cbiAgICAgIDEuMS4gXCJDb250cmlidXRvclwiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4yLiBcIkNvbnRyaWJ1dG9yIFZlcnNpb25cIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuXG5cbiAgICAgIDEuMy4gXCJDb3ZlcmVkIENvZGVcIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLlxuXG4gICAgICAxLjQuIFwiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtXCIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuXG5cbiAgICAgIDEuNS4gXCJFeGVjdXRhYmxlXCIgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuXG5cbiAgICAgIDEuNi4gXCJJbml0aWFsIERldmVsb3BlclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS5cblxuICAgICAgMS43LiBcIkxhcmdlciBXb3JrXCIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS44LiBcIkxpY2Vuc2VcIiBtZWFucyB0aGlzIGRvY3VtZW50LlxuXG4gICAgICAxLjguMS4gXCJMaWNlbnNhYmxlXCIgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uXG5cbiAgICAgIDEuOS4gXCJNb2RpZmljYXRpb25zXCIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6XG5cbiAgICAgIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIDEuMTAuIFwiT3JpZ2luYWwgQ29kZVwiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuMTAuMS4gXCJQYXRlbnQgQ2xhaW1zXCIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuXG5cbiAgICAgIDEuMTEuIFwiU291cmNlIENvZGVcIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS5cblxuICAgICAgMS4xMi4gXCJZb3VcIiAob3IgXCJZb3VyXCIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbFwiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLlxuXG4gICAgICAyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgICAgYS4gdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgYi4gdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuXG5cbiAgICAgICAgIGMuIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEgKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgICAgIGQuIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMSAoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuXG5cbiAgICAgIDIuMi4gQ29udHJpYnV0b3IgR3JhbnQuIFN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlXG5cbiAgICAgICAgIGEuIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgYi4gdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIDIpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS5cblxuICAgICAgICAgYy4gdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yIChhKSBhbmQgMi4yIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgICAgICAgIGQuIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMiAoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci5cblxuICAgMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLlxuXG4gICAgICAzLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuIFRoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LlxuXG4gICAgICAzLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuXG5cbiAgICAgIDMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICAgICAzLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzXG5cbiAgICAgICAgIChhKSBUaGlyZCBQYXJ0eSBDbGFpbXNcblxuICAgICAgICAgSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5J3MgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvciB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCBcIkxFR0FMXCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC5cblxuICAgICAgICAgKGIpIENvbnRyaWJ1dG9yIEFQSXNcblxuICAgICAgICAgSWYgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLlxuXG4gICAgICAgICAoYykgUmVwcmVzZW50YXRpb25zLlxuXG4gICAgICAgICBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQgKGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3IncyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAzLjUuIFJlcXVpcmVkIE5vdGljZXMuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuXG5cbiAgICAgIDMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuIFlvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9ucyAzLjEsIDMuMiwgMy4zLCAzLjQgYW5kIDMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci5cblxuICAgICAgMy43LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS5cblxuICAgNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLlxuXG4gICBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LlxuXG4gICA1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuXG5cbiAgIDYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLlxuXG4gICAgICA2LjEuIE5ldyBWZXJzaW9uc1xuXG4gICAgICBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbiAoXCJOZXRzY2FwZVwiKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuXG5cbiAgICAgIDYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9uc1xuXG4gICAgICBPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTmV0c2NhcGUuIE5vIG9uZSBvdGhlciB0aGFuIE5ldHNjYXBlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgNi4zLiBEZXJpdmF0aXZlIFdvcmtzXG5cbiAgICAgIElmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzIFwiTW96aWxsYVwiLCBcIk1PWklMTEFQTFwiLCBcIk1PWlBMXCIsIFwiTmV0c2NhcGVcIiwgXCJNUExcIiwgXCJOUExcIiBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgYW5kIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pXG5cbiAgIDcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFlcblxuICAgQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi5cblxuICAgOC4gVGVybWluYXRpb25cblxuICAgICAgOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuXG5cbiAgICAgIDguMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyIG9yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgXCJQYXJ0aWNpcGFudFwiKSBhbGxlZ2luZyB0aGF0OlxuXG4gICAgICAgICBhLiBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuXG5cbiAgICAgICAgIGIuIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LlxuXG4gICAgICA4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuXG5cbiAgICAgIDguNC4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLlxuXG4gICA5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWVxuXG4gICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDEwLiBVLlMuIGdvdmVybm1lbnQgZW5kIHVzZXJzXG5cbiAgIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSBcImNvbW1lcmNpYWwgaXRlbSxcIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlXCIgYW5kIFwiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLFwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi5cblxuICAgMTEuIE1pc2NlbGxhbmVvdXNcblxuICAgVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuXG5cbiAgIDEyLiBSZXNwb25zaWJpbGl0eSBmb3IgY2xhaW1zXG5cbiAgIEFzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS5cblxuICAgMTMuIE11bHRpcGxlLWxpY2Vuc2VkIGNvZGVcblxuICAgSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzIFwiTXVsdGlwbGUtTGljZW5zZWRcIi4gXCJNdWx0aXBsZS1MaWNlbnNlZFwiIG1lYW5zIHRoYXQgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlciBZb3VyIGNob2ljZSBvZiB0aGUgTVBMIG9yIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIEV4aGliaXQgQSAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UuXG5cblwiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvXG5cblNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cblRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLlxuXG5UaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fLlxuXG5Qb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fXG5cbl9fX19fX19fX19fX19fX19fX19fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuXG5Db250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uXG5cbkFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBfX19fXyBsaWNlbnNlICh0aGUgXCJbX19fXSBMaWNlbnNlXCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIFtfX19fX19dIExpY2Vuc2UgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dIExpY2Vuc2UuIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuXCJcblxuTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy4iXSwibGljZW5zZUlkcyI6WyJOUEwtMS4xIl0sImtleXdvcmRzIjpbIjEgMSBhbWVuZG1lbnRzIiwiMSBhbWVuZG1lbnRzIHRoZSIsImFtZW5kbWVudHMgdGhlIG5ldHNjYXBlIiwiMSAxIG5wbCIsIjEgbnBsIGNvbnNpc3RzIiwibnBsIGNvbnNpc3RzIG9mIiwidGhlIGZvbGxvd2luZyBhbWVuZG1lbnRzIiwiZm9sbG93aW5nIGFtZW5kbWVudHMgaW5jbHVkaW5nIiwiYW1lbmRtZW50cyBpbmNsdWRpbmcgZXhoaWJpdCIsImluY2x1ZGluZyBleGhpYml0IGEiLCJwdWJsaWMgbGljZW5zZSBmaWxlcyIsImxpY2Vuc2UgZmlsZXMgaWRlbnRpZmllZCIsImZpbGVzIGlkZW50aWZpZWQgd2l0aCIsImlkZW50aWZpZWQgd2l0aCBleGhpYml0Iiwid2l0aCBleGhpYml0IGEiLCJsaWNlbnNlIGFyZSBnb3Zlcm5lZCIsImJ5IHRoZSBuZXRzY2FwZSIsIjEgYWRkaXRpb25hbCB0ZXJtcyIsInRoZSB0cmFkZW1hcmtzIG5ldHNjYXBlIiwidHJhZGVtYXJrcyBuZXRzY2FwZSB0aGUiLCJsaWdodGhvdXNlIGxvZ28gbmV0Y2VudGVyIiwibG9nbyBuZXRjZW50ZXIgZ2Vja28iLCJuZXRjZW50ZXIgZ2Vja28gamF2YSIsImdlY2tvIGphdmEgb3IiLCJvciBqYXZhc2NyaXB0IHNtYXJ0IiwiamF2YXNjcmlwdCBzbWFydCBicm93c2luZyIsInNtYXJ0IGJyb3dzaW5nIGV2ZW4iLCJicm93c2luZyBldmVuIGlmIiwib3IgbW9kaWZpY2F0aW9ucyBpdiIsIm1vZGlmaWNhdGlvbnMgaXYgaW5hYmlsaXR5Iiwid2l0aG91dCBzdWNoIG5ldHNjYXBlIiwibGljZW5zZSBzdWNoIG5ldHNjYXBlIiwibGljZW5zZSB2aSBsaXRpZ2F0aW9uIiwidmkgbGl0aWdhdGlvbiBub3R3aXRoc3RhbmRpbmciLCJwcm92aXNpb25zIHJlZ2FyZGluZyBsaXRpZ2F0aW9uIiwicmVnYXJkaW5nIGxpdGlnYXRpb24gaW4iLCIxOTk4IDE5OTkgbmV0c2NhcGUiLCIxOTk5IG5ldHNjYXBlIGNvbW11bmljYXRpb25zIiwidW5kZXIgdGhlIG5wbCIsInRoZSBucGwgaW5kaWNhdGUiLCJucGwgaW5kaWNhdGUgeW91ciIsImVpdGhlciB0aGUgbnBsIiwidGhlIGxpY2Vuc2UgbW96aWxsYSIsInZlcnNpb24gMSAxIGFtZW5kbWVudHMiLCIxIDEgYW1lbmRtZW50cyB0aGUiLCIxIGFtZW5kbWVudHMgdGhlIG5ldHNjYXBlIiwiYW1lbmRtZW50cyB0aGUgbmV0c2NhcGUgcHVibGljIiwidmVyc2lvbiAxIDEgbnBsIiwiMSAxIG5wbCBjb25zaXN0cyIsIjEgbnBsIGNvbnNpc3RzIG9mIiwibnBsIGNvbnNpc3RzIG9mIHRoZSIsInZlcnNpb24gMSAxIHdpdGgiLCJ3aXRoIHRoZSBmb2xsb3dpbmcgYW1lbmRtZW50cyIsInRoZSBmb2xsb3dpbmcgYW1lbmRtZW50cyBpbmNsdWRpbmciLCJmb2xsb3dpbmcgYW1lbmRtZW50cyBpbmNsdWRpbmcgZXhoaWJpdCIsImFtZW5kbWVudHMgaW5jbHVkaW5nIGV4aGliaXQgYSIsImluY2x1ZGluZyBleGhpYml0IGEgbmV0c2NhcGUiLCJuZXRzY2FwZSBwdWJsaWMgbGljZW5zZSBmaWxlcyIsInB1YmxpYyBsaWNlbnNlIGZpbGVzIGlkZW50aWZpZWQiLCJsaWNlbnNlIGZpbGVzIGlkZW50aWZpZWQgd2l0aCIsImZpbGVzIGlkZW50aWZpZWQgd2l0aCBleGhpYml0IiwiaWRlbnRpZmllZCB3aXRoIGV4aGliaXQgYSIsIndpdGggZXhoaWJpdCBhIG5ldHNjYXBlIiwibmV0c2NhcGUgcHVibGljIGxpY2Vuc2UgYXJlIiwicHVibGljIGxpY2Vuc2UgYXJlIGdvdmVybmVkIiwibGljZW5zZSBhcmUgZ292ZXJuZWQgYnkiLCJnb3Zlcm5lZCBieSB0aGUgbmV0c2NhcGUiLCJieSB0aGUgbmV0c2NhcGUgcHVibGljIiwidmVyc2lvbiAxIDEgYWRkaXRpb25hbCIsIjEgMSBhZGRpdGlvbmFsIHRlcm1zIiwiMSBhZGRpdGlvbmFsIHRlcm1zIGFwcGxpY2FibGUiLCJ1c2UgdGhlIHRyYWRlbWFya3MgbmV0c2NhcGUiLCJ0aGUgdHJhZGVtYXJrcyBuZXRzY2FwZSB0aGUiLCJ0cmFkZW1hcmtzIG5ldHNjYXBlIHRoZSBuZXRzY2FwZSIsIm5ldHNjYXBlIGxpZ2h0aG91c2UgbG9nbyBuZXRjZW50ZXIiLCJsaWdodGhvdXNlIGxvZ28gbmV0Y2VudGVyIGdlY2tvIiwibG9nbyBuZXRjZW50ZXIgZ2Vja28gamF2YSIsIm5ldGNlbnRlciBnZWNrbyBqYXZhIG9yIiwiZ2Vja28gamF2YSBvciBqYXZhc2NyaXB0IiwiamF2YSBvciBqYXZhc2NyaXB0IHNtYXJ0Iiwib3IgamF2YXNjcmlwdCBzbWFydCBicm93c2luZyIsImphdmFzY3JpcHQgc21hcnQgYnJvd3NpbmcgZXZlbiIsInNtYXJ0IGJyb3dzaW5nIGV2ZW4gaWYiLCJicm93c2luZyBldmVuIGlmIHN1Y2giLCJjb2RlIG9yIG1vZGlmaWNhdGlvbnMgaXYiLCJvciBtb2RpZmljYXRpb25zIGl2IGluYWJpbGl0eSIsIm1vZGlmaWNhdGlvbnMgaXYgaW5hYmlsaXR5IHRvIiwidGhlcmVpbiB3aXRob3V0IHN1Y2ggbmV0c2NhcGUiLCJ3aXRob3V0IHN1Y2ggbmV0c2NhcGUgYnJhbmRlZCIsIm5ldHNjYXBlIGJyYW5kZWQgY29kZSBiZWNvbWluZyIsIm1heSBsaWNlbnNlIHN1Y2ggbmV0c2NhcGUiLCJsaWNlbnNlIHN1Y2ggbmV0c2NhcGUgYnJhbmRlZCIsIm5ldHNjYXBlIGJyYW5kZWQgY29kZSBvbiIsInRoaXMgbGljZW5zZSB2aSBsaXRpZ2F0aW9uIiwibGljZW5zZSB2aSBsaXRpZ2F0aW9uIG5vdHdpdGhzdGFuZGluZyIsInZpIGxpdGlnYXRpb24gbm90d2l0aHN0YW5kaW5nIHRoZSIsInRoZSBwcm92aXNpb25zIHJlZ2FyZGluZyBsaXRpZ2F0aW9uIiwicHJvdmlzaW9ucyByZWdhcmRpbmcgbGl0aWdhdGlvbiBpbiIsInJlZ2FyZGluZyBsaXRpZ2F0aW9uIGluIHNlY3Rpb24iLCJsaWNlbnNlIGV4aGliaXQgYSBuZXRzY2FwZSIsIm5ldHNjYXBlIHB1YmxpYyBsaWNlbnNlIHRoZSIsImMgMTk5OCAxOTk5IG5ldHNjYXBlIiwiMTk5OCAxOTk5IG5ldHNjYXBlIGNvbW11bmljYXRpb25zIiwiMTk5OSBuZXRzY2FwZSBjb21tdW5pY2F0aW9ucyBjb3Jwb3JhdGlvbiIsImZpbGUgdW5kZXIgdGhlIG5wbCIsInVuZGVyIHRoZSBucGwgaW5kaWNhdGUiLCJ0aGUgbnBsIGluZGljYXRlIHlvdXIiLCJucGwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiIsInVuZGVyIGVpdGhlciB0aGUgbnBsIiwiZWl0aGVyIHRoZSBucGwgb3IiLCJucGwgb3IgdGhlIGxpY2Vuc2UiLCJvciB0aGUgbGljZW5zZSBtb3ppbGxhIiwidGhlIGxpY2Vuc2UgbW96aWxsYSBwdWJsaWMiLCJsaWNlbnNlIHZlcnNpb24gMSAxIGFtZW5kbWVudHMiLCJ2ZXJzaW9uIDEgMSBhbWVuZG1lbnRzIHRoZSIsIjEgMSBhbWVuZG1lbnRzIHRoZSBuZXRzY2FwZSIsIjEgYW1lbmRtZW50cyB0aGUgbmV0c2NhcGUgcHVibGljIiwiYW1lbmRtZW50cyB0aGUgbmV0c2NhcGUgcHVibGljIGxpY2Vuc2UiLCJsaWNlbnNlIHZlcnNpb24gMSAxIG5wbCIsInZlcnNpb24gMSAxIG5wbCBjb25zaXN0cyIsIjEgMSBucGwgY29uc2lzdHMgb2YiLCIxIG5wbCBjb25zaXN0cyBvZiB0aGUiLCJucGwgY29uc2lzdHMgb2YgdGhlIG1vemlsbGEiLCJsaWNlbnNlIHZlcnNpb24gMSAxIHdpdGgiLCJ2ZXJzaW9uIDEgMSB3aXRoIHRoZSIsIjEgd2l0aCB0aGUgZm9sbG93aW5nIGFtZW5kbWVudHMiLCJ3aXRoIHRoZSBmb2xsb3dpbmcgYW1lbmRtZW50cyBpbmNsdWRpbmciLCJ0aGUgZm9sbG93aW5nIGFtZW5kbWVudHMgaW5jbHVkaW5nIGV4aGliaXQiLCJmb2xsb3dpbmcgYW1lbmRtZW50cyBpbmNsdWRpbmcgZXhoaWJpdCBhIiwiYW1lbmRtZW50cyBpbmNsdWRpbmcgZXhoaWJpdCBhIG5ldHNjYXBlIiwiaW5jbHVkaW5nIGV4aGliaXQgYSBuZXRzY2FwZSBwdWJsaWMiLCJhIG5ldHNjYXBlIHB1YmxpYyBsaWNlbnNlIGZpbGVzIiwibmV0c2NhcGUgcHVibGljIGxpY2Vuc2UgZmlsZXMgaWRlbnRpZmllZCIsInB1YmxpYyBsaWNlbnNlIGZpbGVzIGlkZW50aWZpZWQgd2l0aCIsImxpY2Vuc2UgZmlsZXMgaWRlbnRpZmllZCB3aXRoIGV4aGliaXQiLCJmaWxlcyBpZGVudGlmaWVkIHdpdGggZXhoaWJpdCBhIiwiaWRlbnRpZmllZCB3aXRoIGV4aGliaXQgYSBuZXRzY2FwZSIsIndpdGggZXhoaWJpdCBhIG5ldHNjYXBlIHB1YmxpYyIsImEgbmV0c2NhcGUgcHVibGljIGxpY2Vuc2UgYXJlIiwibmV0c2NhcGUgcHVibGljIGxpY2Vuc2UgYXJlIGdvdmVybmVkIiwicHVibGljIGxpY2Vuc2UgYXJlIGdvdmVybmVkIGJ5IiwibGljZW5zZSBhcmUgZ292ZXJuZWQgYnkgdGhlIiwiYXJlIGdvdmVybmVkIGJ5IHRoZSBuZXRzY2FwZSIsImdvdmVybmVkIGJ5IHRoZSBuZXRzY2FwZSBwdWJsaWMiLCJieSB0aGUgbmV0c2NhcGUgcHVibGljIGxpY2Vuc2UiLCJsaWNlbnNlIHZlcnNpb24gMSAxIGFkZGl0aW9uYWwiLCJ2ZXJzaW9uIDEgMSBhZGRpdGlvbmFsIHRlcm1zIiwiMSAxIGFkZGl0aW9uYWwgdGVybXMgYXBwbGljYWJsZSIsIjEgYWRkaXRpb25hbCB0ZXJtcyBhcHBsaWNhYmxlIHRvIiwidG8gdXNlIHRoZSB0cmFkZW1hcmtzIG5ldHNjYXBlIiwidXNlIHRoZSB0cmFkZW1hcmtzIG5ldHNjYXBlIHRoZSIsInRoZSB0cmFkZW1hcmtzIG5ldHNjYXBlIHRoZSBuZXRzY2FwZSIsInRyYWRlbWFya3MgbmV0c2NhcGUgdGhlIG5ldHNjYXBlIG4iLCJ0aGUgbmV0c2NhcGUgbGlnaHRob3VzZSBsb2dvIG5ldGNlbnRlciIsIm5ldHNjYXBlIGxpZ2h0aG91c2UgbG9nbyBuZXRjZW50ZXIgZ2Vja28iLCJsaWdodGhvdXNlIGxvZ28gbmV0Y2VudGVyIGdlY2tvIGphdmEiLCJsb2dvIG5ldGNlbnRlciBnZWNrbyBqYXZhIG9yIiwibmV0Y2VudGVyIGdlY2tvIGphdmEgb3IgamF2YXNjcmlwdCIsImdlY2tvIGphdmEgb3IgamF2YXNjcmlwdCBzbWFydCIsImphdmEgb3IgamF2YXNjcmlwdCBzbWFydCBicm93c2luZyIsIm9yIGphdmFzY3JpcHQgc21hcnQgYnJvd3NpbmcgZXZlbiIsImphdmFzY3JpcHQgc21hcnQgYnJvd3NpbmcgZXZlbiBpZiIsInNtYXJ0IGJyb3dzaW5nIGV2ZW4gaWYgc3VjaCIsImJyb3dzaW5nIGV2ZW4gaWYgc3VjaCBtYXJrcyIsIm9yaWdpbmFsIGNvZGUgb3IgbW9kaWZpY2F0aW9ucyBpdiIsImNvZGUgb3IgbW9kaWZpY2F0aW9ucyBpdiBpbmFiaWxpdHkiLCJvciBtb2RpZmljYXRpb25zIGl2IGluYWJpbGl0eSB0byIsIm1vZGlmaWNhdGlvbnMgaXYgaW5hYmlsaXR5IHRvIGNvbXBseSIsImluY29ycG9yYXRlZCB0aGVyZWluIHdpdGhvdXQgc3VjaCBuZXRzY2FwZSIsInRoZXJlaW4gd2l0aG91dCBzdWNoIG5ldHNjYXBlIGJyYW5kZWQiLCJ3aXRob3V0IHN1Y2ggbmV0c2NhcGUgYnJhbmRlZCBjb2RlIiwic3VjaCBuZXRzY2FwZSBicmFuZGVkIGNvZGUgYmVjb21pbmciLCJuZXRzY2FwZSBicmFuZGVkIGNvZGUgYmVjb21pbmcgc3ViamVjdCIsImFuZCBtYXkgbGljZW5zZSBzdWNoIG5ldHNjYXBlIiwibWF5IGxpY2Vuc2Ugc3VjaCBuZXRzY2FwZSBicmFuZGVkIiwibGljZW5zZSBzdWNoIG5ldHNjYXBlIGJyYW5kZWQgY29kZSIsInN1Y2ggbmV0c2NhcGUgYnJhbmRlZCBjb2RlIG9uIiwibmV0c2NhcGUgYnJhbmRlZCBjb2RlIG9uIGRpZmZlcmVudCIsImluIHRoaXMgbGljZW5zZSB2aSBsaXRpZ2F0aW9uIiwidGhpcyBsaWNlbnNlIHZpIGxpdGlnYXRpb24gbm90d2l0aHN0YW5kaW5nIiwibGljZW5zZSB2aSBsaXRpZ2F0aW9uIG5vdHdpdGhzdGFuZGluZyB0aGUiLCJ2aSBsaXRpZ2F0aW9uIG5vdHdpdGhzdGFuZGluZyB0aGUgbGltaXRhdGlvbnMiLCJhYm92ZSB0aGUgcHJvdmlzaW9ucyByZWdhcmRpbmcgbGl0aWdhdGlvbiIsInRoZSBwcm92aXNpb25zIHJlZ2FyZGluZyBsaXRpZ2F0aW9uIGluIiwicHJvdmlzaW9ucyByZWdhcmRpbmcgbGl0aWdhdGlvbiBpbiBzZWN0aW9uIiwicmVnYXJkaW5nIGxpdGlnYXRpb24gaW4gc2VjdGlvbiAxMSIsInRoaXMgbGljZW5zZSBleGhpYml0IGEgbmV0c2NhcGUiLCJsaWNlbnNlIGV4aGliaXQgYSBuZXRzY2FwZSBwdWJsaWMiLCJhIG5ldHNjYXBlIHB1YmxpYyBsaWNlbnNlIHRoZSIsIm5ldHNjYXBlIHB1YmxpYyBsaWNlbnNlIHRoZSBjb250ZW50cyIsImNvcHlyaWdodCBjIDE5OTggMTk5OSBuZXRzY2FwZSIsImMgMTk5OCAxOTk5IG5ldHNjYXBlIGNvbW11bmljYXRpb25zIiwiMTk5OCAxOTk5IG5ldHNjYXBlIGNvbW11bmljYXRpb25zIGNvcnBvcmF0aW9uIiwiMTk5OSBuZXRzY2FwZSBjb21tdW5pY2F0aW9ucyBjb3Jwb3JhdGlvbiBhbGwiLCJ0aGlzIGZpbGUgdW5kZXIgdGhlIG5wbCIsImZpbGUgdW5kZXIgdGhlIG5wbCBpbmRpY2F0ZSIsInVuZGVyIHRoZSBucGwgaW5kaWNhdGUgeW91ciIsInRoZSBucGwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiIsIm5wbCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5IiwiZmlsZSB1bmRlciBlaXRoZXIgdGhlIG5wbCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSAzLjBcblxuVGhpcyBOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSAoXCJOb24tUHJvZml0IE9TTFwiKSB2ZXJzaW9uIDMuMCAodGhlIFwiTGljZW5zZVwiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSBcIk9yaWdpbmFsIFdvcmtcIikgd2hvc2Ugb3duZXIgKHRoZSBcIkxpY2Vuc29yXCIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBsaWNlbnNpbmcgbm90aWNlIGFkamFjZW50IHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazpcblxuTGljZW5zZWQgdW5kZXIgdGhlIE5vbi1Qcm9maXQgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIHZlcnNpb24gMy4wXG5cbiAgIDEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY29weXJpZ2h0LCB0byBkbyB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzLCBlaXRoZXIgYWxvbmUgb3IgYXMgcGFydCBvZiBhIGNvbGxlY3RpdmUgd29yaztcblxuICAgICAgYikgdG8gdHJhbnNsYXRlLCBhZGFwdCwgYWx0ZXIsIHRyYW5zZm9ybSwgbW9kaWZ5LCBvciBhcnJhbmdlIHRoZSBPcmlnaW5hbCBXb3JrLCB0aGVyZWJ5IGNyZWF0aW5nIGRlcml2YXRpdmUgd29ya3MgKFwiRGVyaXZhdGl2ZSBXb3Jrc1wiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrO1xuXG4gICAgICBjKSB0byBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljLCB3aXRoIHRoZSBwcm92aXNvIHRoYXQgY29waWVzIG9mIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHNoYWxsIGJlIGxpY2Vuc2VkIHVuZGVyIHRoaXMgTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2Ugb3IgYXMgcHJvdmlkZWQgaW4gc2VjdGlvbiAxNyhkKTtcblxuICAgICAgZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kXG5cbiAgICAgIGUpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuXG5cbiAgIDIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgdW5kZXIgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZSBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwYXRlbnRzLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZCBpbXBvcnQgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuXG5cbiAgIDMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtIFwiU291cmNlIENvZGVcIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLlxuXG4gICA0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLCBub3RoaW5nIGluIHRoaXMgTGljZW5zZSBncmFudHMgYW55IGxpY2Vuc2UgdG8gTGljZW5zb3IncyB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkuIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBvciBpbXBvcnQgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgbGljZW5zZWQgY2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObyBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlIGFueSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLlxuXG4gICA1KSBFeHRlcm5hbCBEZXBsb3ltZW50LiBUaGUgdGVybSBcIkV4dGVybmFsIERlcGxveW1lbnRcIiBtZWFucyB0aGUgdXNlLCBkaXN0cmlidXRpb24sIG9yIGNvbW11bmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBpbiBhbnkgd2F5IHN1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aG9zZSB3b3JrcyBhcmUgZGlzdHJpYnV0ZWQgb3IgY29tbXVuaWNhdGVkIHRvIHRob3NlIHBlcnNvbnMgb3IgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgbmV0d29yay4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdSBtdXN0IHRyZWF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yayBhcyBhIGRpc3RyaWJ1dGlvbiB1bmRlciBzZWN0aW9uIDEoYykuXG5cbiAgIDYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuIFwiQXR0cmlidXRpb24gTm90aWNlLlwiIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay5cblxuICAgNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG5vbi1pbmZyaW5nZW1lbnQsIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GIFRIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuXG5cbiAgIDgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueW9uZSBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuIFRoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi5cblxuICAgOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmLCBhdCBhbnkgdGltZSwgWW91IGV4cHJlc3NseSBhc3NlbnRlZCB0byB0aGlzIExpY2Vuc2UsIHRoYXQgYXNzZW50IGluZGljYXRlcyB5b3VyIGNsZWFyIGFuZCBpcnJldm9jYWJsZSBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgWW91IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBjb25kaXRpb25zIHlvdXIgcmlnaHRzIHRvIHVuZGVydGFrZSB0aGUgYWN0aXZpdGllcyBsaXN0ZWQgaW4gU2VjdGlvbiAxLCBpbmNsdWRpbmcgeW91ciByaWdodCB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgZG9pbmcgc28gd2l0aG91dCBob25vcmluZyB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpcyBwcm9oaWJpdGVkIGJ5IGNvcHlyaWdodCBsYXcgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBhZmZlY3QgY29weXJpZ2h0IGV4Y2VwdGlvbnMgYW5kIGxpbWl0YXRpb25zIChpbmNsdWRpbmcgXCJmYWlyIHVzZVwiIG9yIFwiZmFpciBkZWFsaW5nXCIpLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgdXBvbiB5b3VyIGZhaWx1cmUgdG8gaG9ub3IgdGhlIGNvbmRpdGlvbnMgaW4gU2VjdGlvbiAxKGMpLlxuXG4gICAxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgYWdhaW5zdCBMaWNlbnNvciBvciBhbnkgbGljZW5zZWUgYWxsZWdpbmcgdGhhdCB0aGUgT3JpZ2luYWwgV29yayBpbmZyaW5nZXMgYSBwYXRlbnQuIFRoaXMgdGVybWluYXRpb24gcHJvdmlzaW9uIHNoYWxsIG5vdCBhcHBseSBmb3IgYW4gYWN0aW9uIGFsbGVnaW5nIHBhdGVudCBpbmZyaW5nZW1lbnQgYnkgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuXG5cbiAgIDExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiBjb3B5cmlnaHQgb3IgcGF0ZW50IGxhdyBpbiB0aGUgYXBwcm9wcmlhdGUganVyaXNkaWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAxMikgQXR0b3JuZXlzJyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDEzKSBNaXNjZWxsYW5lb3VzLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS5cblxuICAgMTQpIERlZmluaXRpb24gb2YgXCJZb3VcIiBpbiBUaGlzIExpY2Vuc2UuIFwiWW91XCIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBcIllvdVwiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbFwiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS5cblxuICAgMTYpIE1vZGlmaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBpcyBDb3B5cmlnaHQgwqkgMjAwNSBMYXdyZW5jZSBSb3Nlbi4gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUsIG9yIGNvbW11bmljYXRlIHRoaXMgTGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgcGVybWl0cyBZb3UgdG8gbW9kaWZ5IHRoaXMgTGljZW5zZSBhcyBhcHBsaWVkIHRvIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHRvIERlcml2YXRpdmUgV29ya3MuIEhvd2V2ZXIsIFlvdSBtYXkgbW9kaWZ5IHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5zZSBhbmQgY29weSwgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSB5b3VyIG1vZGlmaWVkIHZlcnNpb24gKHRoZSBcIk1vZGlmaWVkIExpY2Vuc2VcIikgYW5kIGFwcGx5IGl0IHRvIG90aGVyIG9yaWdpbmFsIHdvcmtzIG9mIGF1dGhvcnNoaXAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IChpKSBZb3UgbWF5IG5vdCBpbmRpY2F0ZSBpbiBhbnkgd2F5IHRoYXQgeW91ciBNb2RpZmllZCBMaWNlbnNlIGlzIHRoZSBcIk9wZW4gU29mdHdhcmUgTGljZW5zZVwiIG9yIFwiT1NMXCIgYW5kIHlvdSBtYXkgbm90IHVzZSB0aG9zZSBuYW1lcyBpbiB0aGUgbmFtZSBvZiB5b3VyIE1vZGlmaWVkIExpY2Vuc2U7IChpaSkgWW91IG11c3QgcmVwbGFjZSB0aGUgbm90aWNlIHNwZWNpZmllZCBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoIGFib3ZlIHdpdGggdGhlIG5vdGljZSBcIkxpY2Vuc2VkIHVuZGVyIFx1MDAzY2luc2VydCB5b3VyIGxpY2Vuc2UgbmFtZSBoZXJlXHUwMDNlXCIgb3Igd2l0aCBhIG5vdGljZSBvZiB5b3VyIG93biB0aGF0IGlzIG5vdCBjb25mdXNpbmdseSBzaW1pbGFyIHRvIHRoZSBub3RpY2UgaW4gdGhpcyBMaWNlbnNlOyBhbmQgKGlpaSkgWW91IG1heSBub3QgY2xhaW0gdGhhdCB5b3VyIG9yaWdpbmFsIHdvcmtzIGFyZSBvcGVuIHNvdXJjZSBzb2Z0d2FyZSB1bmxlc3MgeW91ciBNb2RpZmllZCBMaWNlbnNlIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IE9wZW4gU291cmNlIEluaXRpYXRpdmUgKE9TSSkgYW5kIFlvdSBjb21wbHkgd2l0aCBpdHMgbGljZW5zZSByZXZpZXcgYW5kIGNlcnRpZmljYXRpb24gcHJvY2Vzcy5cblxuICAgMTcpIE5vbi1Qcm9maXQgQW1lbmRtZW50LiBUaGUgbmFtZSBvZiB0aGlzIGFtZW5kZWQgdmVyc2lvbiBvZiB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChcIk9TTCAzLjBcIikgaXMgXCJOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSAzLjBcIi4gVGhlIG9yaWdpbmFsIE9TTCAzLjAgbGljZW5zZSBoYXMgYmVlbiBhbWVuZGVkIGFzIGZvbGxvd3M6XG5cbiAgICAgIChhKSBMaWNlbnNvciByZXByZXNlbnRzIGFuZCBkZWNsYXJlcyB0aGF0IGl0IGlzIGEgbm90LWZvci1wcm9maXQgb3JnYW5pemF0aW9uIHRoYXQgZGVyaXZlcyBubyByZXZlbnVlIHdoYXRzb2V2ZXIgZnJvbSB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgb3IgZnJvbSBzdXBwb3J0IG9yIHNlcnZpY2VzIHJlbGF0aW5nIHRoZXJldG8uXG5cbiAgICAgIChiKSBUaGUgZmlyc3Qgc2VudGVuY2Ugb2YgU2VjdGlvbiA3IFtcIldhcnJhbnR5IG9mIFByb3ZlbmFuY2VcIl0gb2YgT1NMIDMuMCBoYXMgYmVlbiBzdHJpY2tlbi4gRm9yIE9yaWdpbmFsIFdvcmtzIGxpY2Vuc2VkIHVuZGVyIHRoaXMgTm9uLVByb2ZpdCBPU0wgMy4wLCBMSUNFTlNPUiBPRkZFUlMgTk8gV0FSUkFOVElFUyBXSEFUU09FVkVSLlxuXG4gICAgICAoYykgSW4gdGhlIGZpcnN0IHNlbnRlbmNlIG9mIFNlY3Rpb24gOCBbXCJMaW1pdGF0aW9uIG9mIExpYWJpbGl0eVwiXSBvZiB0aGlzIE5vbi1Qcm9maXQgT1NMIDMuMCwgdGhlIGxpc3Qgb2YgZGFtYWdlcyBmb3Igd2hpY2ggTElBQklMSVRZIElTIExJTUlURUQgbm93IGluY2x1ZGVzIFwiZGlyZWN0XCIgZGFtYWdlcy5cblxuICAgICAgKGQpIFRoZSBwcm92aXNvIGluIFNlY3Rpb24gMShjKSBvZiB0aGlzIExpY2Vuc2Ugbm93IHJlZmVycyB0byB0aGlzIFwiTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2VcIiByYXRoZXIgdGhhbiB0aGUgXCJPcGVuIFNvZnR3YXJlIExpY2Vuc2VcIi4gWW91IG1heSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiB1bmRlciB0aGlzIE5vbi1Qcm9maXQgT1NMIDMuMCBsaWNlbnNlIG9ubHkgaWYgWW91IG1ha2UgdGhlIHJlcHJlc2VudGF0aW9uIGFuZCBkZWNsYXJhdGlvbiBpbiBwYXJhZ3JhcGggKGEpIG9mIHRoaXMgU2VjdGlvbiAxNy4gT3RoZXJ3aXNlLCBZb3Ugc2hhbGwgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2Ygb25seSB1bmRlciB0aGUgT1NMIDMuMCBsaWNlbnNlIGFuZCBZb3Ugc2hhbGwgcHVibGlzaCBjbGVhciBsaWNlbnNpbmcgbm90aWNlcyBzbyBzdGF0aW5nLiBBbHNvIGJ5IHdheSBvZiBjbGFyaWZpY2F0aW9uLCB0aGlzIExpY2Vuc2UgZG9lcyBub3QgYXV0aG9yaXplIFlvdSB0byBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHdvcmtzIHVuZGVyIHRoaXMgTm9uLVByb2ZpdCBPU0wgMy4wIGlmIFlvdSByZWNlaXZlZCB0aGVtIHVuZGVyIHRoZSBvcmlnaW5hbCBPU0wgMy4wIGxpY2Vuc2UuXG5cbiAgICAgIChlKSBPcmlnaW5hbCBXb3JrcyBsaWNlbnNlZCB1bmRlciB0aGlzIGxpY2Vuc2Ugc2hhbGwgcmVmZXJlbmNlIFwiTm9uLVByb2ZpdCBPU0wgMy4wXCIgaW4gbGljZW5zaW5nIG5vdGljZXMgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIHdvcmtzIGxpY2Vuc2VkIHVuZGVyIHRoZSBvcmlnaW5hbCBPU0wgMy4wIGxpY2Vuc2UuIl0sImxpY2Vuc2VJZHMiOlsiTlBPU0wtMy4wIl0sImtleXdvcmRzIjpbIjAgdGhpcyBub24iLCJzb2Z0d2FyZSBsaWNlbnNlIG5vbiIsImxpY2Vuc2Ugbm9uIHByb2ZpdCIsInByb2ZpdCBvc2wgdmVyc2lvbiIsIm9zbCB2ZXJzaW9uIDMiLCJ0aGUgbm9uIHByb2ZpdCIsIm9yIGFzIHByb3ZpZGVkIiwiaW4gc2VjdGlvbiAxNyIsInNlY3Rpb24gMTcgZCIsIjE3IGQgZCIsImQgZCB0byIsIndhcnJhbnR5IHRoZSBvcmlnaW5hbCIsImNlcnRpZmljYXRpb24gcHJvY2VzcyAxNyIsInByb2Nlc3MgMTcgbm9uIiwiMTcgbm9uIHByb2ZpdCIsIm5vbiBwcm9maXQgYW1lbmRtZW50IiwicHJvZml0IGFtZW5kbWVudCB0aGUiLCJhbWVuZG1lbnQgdGhlIG5hbWUiLCJvZiB0aGlzIGFtZW5kZWQiLCJ0aGlzIGFtZW5kZWQgdmVyc2lvbiIsImFtZW5kZWQgdmVyc2lvbiBvZiIsImxpY2Vuc2Ugb3NsIDMiLCIzIDAgaXMiLCIwIGlzIG5vbiIsImlzIG5vbiBwcm9maXQiLCIwIHRoZSBvcmlnaW5hbCIsIjAgbGljZW5zZSBoYXMiLCJoYXMgYmVlbiBhbWVuZGVkIiwiYmVlbiBhbWVuZGVkIGFzIiwiYW1lbmRlZCBhcyBmb2xsb3dzIiwiZm9sbG93cyBhIGxpY2Vuc29yIiwiYSBsaWNlbnNvciByZXByZXNlbnRzIiwicmVwcmVzZW50cyBhbmQgZGVjbGFyZXMiLCJhbmQgZGVjbGFyZXMgdGhhdCIsImRlY2xhcmVzIHRoYXQgaXQiLCJpcyBhIG5vdCIsImZvciBwcm9maXQgb3JnYW5pemF0aW9uIiwicHJvZml0IG9yZ2FuaXphdGlvbiB0aGF0Iiwib3JnYW5pemF0aW9uIHRoYXQgZGVyaXZlcyIsInRoYXQgZGVyaXZlcyBubyIsImRlcml2ZXMgbm8gcmV2ZW51ZSIsIm5vIHJldmVudWUgd2hhdHNvZXZlciIsInJldmVudWUgd2hhdHNvZXZlciBmcm9tIiwid29ya3MgdGhlcmVvZiBvciIsInRoZXJlb2Ygb3IgZnJvbSIsIm9yIGZyb20gc3VwcG9ydCIsImZyb20gc3VwcG9ydCBvciIsInN1cHBvcnQgb3Igc2VydmljZXMiLCJvciBzZXJ2aWNlcyByZWxhdGluZyIsInNlcnZpY2VzIHJlbGF0aW5nIHRoZXJldG8iLCJyZWxhdGluZyB0aGVyZXRvIGIiLCJ0aGVyZXRvIGIgdGhlIiwiYiB0aGUgZmlyc3QiLCJzZWN0aW9uIDcgd2FycmFudHkiLCJvZiBwcm92ZW5hbmNlIG9mIiwicHJvdmVuYW5jZSBvZiBvc2wiLCJvZiBvc2wgMyIsIjMgMCBoYXMiLCJoYXMgYmVlbiBzdHJpY2tlbiIsImJlZW4gc3RyaWNrZW4gZm9yIiwic3RyaWNrZW4gZm9yIG9yaWdpbmFsIiwiZm9yIG9yaWdpbmFsIHdvcmtzIiwiMyAwIGxpY2Vuc29yIiwiMCBsaWNlbnNvciBvZmZlcnMiLCJsaWNlbnNvciBvZmZlcnMgbm8iLCJvZmZlcnMgbm8gd2FycmFudGllcyIsIndhcnJhbnRpZXMgd2hhdHNvZXZlciBjIiwid2hhdHNvZXZlciBjIGluIiwiYyBpbiB0aGUiLCJzZWN0aW9uIDggbGltaXRhdGlvbiIsImxpYWJpbGl0eSBvZiB0aGlzIiwib2YgdGhpcyBub24iLCIwIHRoZSBsaXN0IiwibGlzdCBvZiBkYW1hZ2VzIiwib2YgZGFtYWdlcyBmb3IiLCJkYW1hZ2VzIGZvciB3aGljaCIsImZvciB3aGljaCBsaWFiaWxpdHkiLCJ3aGljaCBsaWFiaWxpdHkgaXMiLCJpcyBsaW1pdGVkIG5vdyIsImxpbWl0ZWQgbm93IGluY2x1ZGVzIiwibm93IGluY2x1ZGVzIGRpcmVjdCIsImluY2x1ZGVzIGRpcmVjdCBkYW1hZ2VzIiwiZGlyZWN0IGRhbWFnZXMgZCIsImRhbWFnZXMgZCB0aGUiLCJkIHRoZSBwcm92aXNvIiwiMSBjIG9mIiwiYyBvZiB0aGlzIiwidGhpcyBsaWNlbnNlIG5vdyIsImxpY2Vuc2Ugbm93IHJlZmVycyIsIm5vdyByZWZlcnMgdG8iLCJ0byB0aGlzIG5vbiIsInNvZnR3YXJlIGxpY2Vuc2UgcmF0aGVyIiwidGhhbiB0aGUgb3BlbiIsInNvZnR3YXJlIGxpY2Vuc2UgeW91Iiwid29ya3MgdGhlcmVvZiB1bmRlciIsInRoZXJlb2YgdW5kZXIgdGhpcyIsIjAgbGljZW5zZSBvbmx5IiwibWFrZSB0aGUgcmVwcmVzZW50YXRpb24iLCJ0aGUgcmVwcmVzZW50YXRpb24gYW5kIiwicmVwcmVzZW50YXRpb24gYW5kIGRlY2xhcmF0aW9uIiwiYW5kIGRlY2xhcmF0aW9uIGluIiwiZGVjbGFyYXRpb24gaW4gcGFyYWdyYXBoIiwicGFyYWdyYXBoIGEgb2YiLCJ0aGlzIHNlY3Rpb24gMTciLCJzZWN0aW9uIDE3IG90aGVyd2lzZSIsIjE3IG90aGVyd2lzZSB5b3UiLCJvdGhlcndpc2UgeW91IHNoYWxsIiwieW91IHNoYWxsIGRpc3RyaWJ1dGUiLCJzaGFsbCBkaXN0cmlidXRlIG9yIiwid29ya3MgdGhlcmVvZiBvbmx5IiwidGhlcmVvZiBvbmx5IHVuZGVyIiwidW5kZXIgdGhlIG9zbCIsInRoZSBvc2wgMyIsIjAgbGljZW5zZSBhbmQiLCJ5b3Ugc2hhbGwgcHVibGlzaCIsInNoYWxsIHB1Ymxpc2ggY2xlYXIiLCJwdWJsaXNoIGNsZWFyIGxpY2Vuc2luZyIsImNsZWFyIGxpY2Vuc2luZyBub3RpY2VzIiwibGljZW5zaW5nIG5vdGljZXMgc28iLCJub3RpY2VzIHNvIHN0YXRpbmciLCJzbyBzdGF0aW5nIGFsc28iLCJzdGF0aW5nIGFsc28gYnkiLCJhbHNvIGJ5IHdheSIsIndheSBvZiBjbGFyaWZpY2F0aW9uIiwib2YgY2xhcmlmaWNhdGlvbiB0aGlzIiwiY2xhcmlmaWNhdGlvbiB0aGlzIGxpY2Vuc2UiLCJub3QgYXV0aG9yaXplIHlvdSIsImF1dGhvcml6ZSB5b3UgdG8iLCJvciBjb21tdW5pY2F0ZSB3b3JrcyIsImNvbW11bmljYXRlIHdvcmtzIHVuZGVyIiwiMyAwIGlmIiwieW91IHJlY2VpdmVkIHRoZW0iLCJyZWNlaXZlZCB0aGVtIHVuZGVyIiwiMCBsaWNlbnNlIGUiLCJlIG9yaWdpbmFsIHdvcmtzIiwibGljZW5zZSBzaGFsbCByZWZlcmVuY2UiLCJzaGFsbCByZWZlcmVuY2Ugbm9uIiwicmVmZXJlbmNlIG5vbiBwcm9maXQiLCIzIDAgaW4iLCIwIGluIGxpY2Vuc2luZyIsImluIGxpY2Vuc2luZyBub3RpY2VzIiwibGljZW5zaW5nIG5vdGljZXMgdG8iLCJub3RpY2VzIHRvIGRpc3Rpbmd1aXNoIiwidG8gZGlzdGluZ3Vpc2ggdGhlbSIsImRpc3Rpbmd1aXNoIHRoZW0gZnJvbSIsInRoZW0gZnJvbSB3b3JrcyIsImZyb20gd29ya3MgbGljZW5zZWQiLCJsaWNlbnNlIDMgMCB0aGlzIiwiMyAwIHRoaXMgbm9uIiwiMCB0aGlzIG5vbiBwcm9maXQiLCJvcGVuIHNvZnR3YXJlIGxpY2Vuc2Ugbm9uIiwic29mdHdhcmUgbGljZW5zZSBub24gcHJvZml0IiwibGljZW5zZSBub24gcHJvZml0IG9zbCIsIm5vbiBwcm9maXQgb3NsIHZlcnNpb24iLCJwcm9maXQgb3NsIHZlcnNpb24gMyIsIm9zbCB2ZXJzaW9uIDMgMCIsInZlcnNpb24gMyAwIHRoZSIsIjMgMCB0aGUgbGljZW5zZSIsIjAgdGhlIGxpY2Vuc2UgYXBwbGllcyIsInVuZGVyIHRoZSBub24gcHJvZml0IiwidGhlIG5vbiBwcm9maXQgb3BlbiIsInNvZnR3YXJlIGxpY2Vuc2Ugb3IgYXMiLCJsaWNlbnNlIG9yIGFzIHByb3ZpZGVkIiwib3IgYXMgcHJvdmlkZWQgaW4iLCJwcm92aWRlZCBpbiBzZWN0aW9uIDE3IiwiaW4gc2VjdGlvbiAxNyBkIiwic2VjdGlvbiAxNyBkIGQiLCIxNyBkIGQgdG8iLCJkIGQgdG8gcGVyZm9ybSIsIm9mIHdhcnJhbnR5IHRoZSBvcmlnaW5hbCIsIndhcnJhbnR5IHRoZSBvcmlnaW5hbCB3b3JrIiwiYW55b25lIGZvciBhbnkgZGlyZWN0IiwiYW5kIGNlcnRpZmljYXRpb24gcHJvY2VzcyAxNyIsImNlcnRpZmljYXRpb24gcHJvY2VzcyAxNyBub24iLCJwcm9jZXNzIDE3IG5vbiBwcm9maXQiLCIxNyBub24gcHJvZml0IGFtZW5kbWVudCIsIm5vbiBwcm9maXQgYW1lbmRtZW50IHRoZSIsInByb2ZpdCBhbWVuZG1lbnQgdGhlIG5hbWUiLCJhbWVuZG1lbnQgdGhlIG5hbWUgb2YiLCJuYW1lIG9mIHRoaXMgYW1lbmRlZCIsIm9mIHRoaXMgYW1lbmRlZCB2ZXJzaW9uIiwidGhpcyBhbWVuZGVkIHZlcnNpb24gb2YiLCJhbWVuZGVkIHZlcnNpb24gb2YgdGhlIiwib2YgdGhlIG9wZW4gc29mdHdhcmUiLCJzb2Z0d2FyZSBsaWNlbnNlIG9zbCAzIiwibGljZW5zZSBvc2wgMyAwIiwib3NsIDMgMCBpcyIsIjMgMCBpcyBub24iLCIwIGlzIG5vbiBwcm9maXQiLCJpcyBub24gcHJvZml0IG9wZW4iLCJsaWNlbnNlIDMgMCB0aGUiLCIzIDAgdGhlIG9yaWdpbmFsIiwiMCB0aGUgb3JpZ2luYWwgb3NsIiwiMyAwIGxpY2Vuc2UgaGFzIiwiMCBsaWNlbnNlIGhhcyBiZWVuIiwibGljZW5zZSBoYXMgYmVlbiBhbWVuZGVkIiwiaGFzIGJlZW4gYW1lbmRlZCBhcyIsImJlZW4gYW1lbmRlZCBhcyBmb2xsb3dzIiwiYW1lbmRlZCBhcyBmb2xsb3dzIGEiLCJhcyBmb2xsb3dzIGEgbGljZW5zb3IiXX0seyJsaWNlbnNlVGV4dHMiOlsiTlJMIExpY2Vuc2UgQ09QWVJJR0hUIE5PVElDRVxuXG5BbGwgb2YgdGhlIGRvY3VtZW50YXRpb24gYW5kIHNvZnR3YXJlIGluY2x1ZGVkIGluIHRoaXMgc29mdHdhcmUgZGlzdHJpYnV0aW9uIGZyb20gdGhlIFVTIE5hdmFsIFJlc2VhcmNoIExhYm9yYXRvcnkgKE5STCkgYXJlIGNvcHlyaWdodGVkIGJ5IHRoZWlyIHJlc3BlY3RpdmUgZGV2ZWxvcGVycy5cblxuUG9ydGlvbnMgb2YgdGhlIHNvZnR3YXJlIGFyZSBkZXJpdmVkIGZyb20gdGhlIE5ldC8yIGFuZCA0LjQtTGl0ZSBCZXJrZWxleSBTb2Z0d2FyZSBEaXN0cmlidXRpb25zIChCU0QpIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYXQgQmVya2VsZXkgYW5kIHRob3NlIHBvcnRpb25zIGFyZSBjb3B5cmlnaHQgYnkgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gVGhlIFVDIEJlcmtlbGV5IENvcHlyaWdodCBhbmQgTGljZW5zZSBhZ3JlZW1lbnQgaXMgYmluZGluZyBvbiB0aG9zZSBwb3J0aW9ucyBvZiB0aGUgc29mdHdhcmUuIEluIGFsbCBjYXNlcywgdGhlIE5STCBkZXZlbG9wZXJzIGhhdmUgcmV0YWluZWQgdGhlIG9yaWdpbmFsIFVDIEJlcmtlbGV5IGNvcHlyaWdodCBhbmQgbGljZW5zZSBub3RpY2VzIGluIHRoZSByZXNwZWN0aXZlIGZpbGVzIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgVUMgQmVya2VsZXkgY29weXJpZ2h0cyBhbmQgbGljZW5zZS5cblxuUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiB3ZXJlIGRldmVsb3BlZCBhdCBOUkwgYnkgdmFyaW91cyBwZW9wbGUuIFRob3NlIGRldmVsb3BlcnMgaGF2ZSBlYWNoIGNvcHlyaWdodGVkIHRoZSBwb3J0aW9ucyB0aGF0IHRoZXkgZGV2ZWxvcGVkIGF0IE5STCBhbmQgaGF2ZSBhc3NpZ25lZCBBbGwgUmlnaHRzIGZvciB0aG9zZSBwb3J0aW9ucyB0byBOUkwuIE91dHNpZGUgdGhlIFVTQSwgTlJMIGhhcyBjb3B5cmlnaHQgb24gc29tZSBvZiB0aGUgc29mdHdhcmUgZGV2ZWxvcGVkIGF0IE5STC4gVGhlIGFmZmVjdGVkIGZpbGVzIGFsbCBjb250YWluIHNwZWNpZmljIGNvcHlyaWdodCBub3RpY2VzIGFuZCB0aG9zZSBub3RpY2VzIG11c3QgYmUgcmV0YWluZWQgaW4gYW55IGRlcml2ZWQgd29yay4gTlJMIExJQ0VOU0VcblxuTlJMIGdyYW50cyBwZXJtaXNzaW9uIGZvciByZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBvZiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gY3JlYXRlZCBhdCBOUkwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgMS4gQWxsIHRlcm1zIG9mIHRoZSBVQyBCZXJrZWxleSBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgbXVzdCBiZSBmb2xsb3dlZC5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAzLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgIDQuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnRzOlxuXG4gICAgICBcblxuICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy5cblxuICAgICAgXG5cbiAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYXQgdGhlIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgRGl2aXNpb24sIFVTIE5hdmFsIFJlc2VhcmNoIExhYm9yYXRvcnkuXG5cbiAgIDUuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE5STCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USEUgU09GVFdBUkUgUFJPVklERUQgQlkgTlJMIElTIFBST1ZJREVEIEJZIE5STCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBOUkwgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5UaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiB0aGUgVVMgTmF2YWwgUmVzZWFyY2ggTGFib3JhdG9yeSAoTlJMKS4iXSwibGljZW5zZUlkcyI6WyJOUkwiXSwia2V5d29yZHMiOlsibnJsIGxpY2Vuc2UgY29weXJpZ2h0IiwibGljZW5zZSBjb3B5cmlnaHQgbm90aWNlIiwiY29weXJpZ2h0IG5vdGljZSBhbGwiLCJub3RpY2UgYWxsIG9mIiwiYW5kIHNvZnR3YXJlIGluY2x1ZGVkIiwic29mdHdhcmUgaW5jbHVkZWQgaW4iLCJ0aGlzIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiIsInNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBmcm9tIiwiZGlzdHJpYnV0aW9uIGZyb20gdGhlIiwiZnJvbSB0aGUgdXMiLCJsYWJvcmF0b3J5IG5ybCBhcmUiLCJucmwgYXJlIGNvcHlyaWdodGVkIiwiYnkgdGhlaXIgcmVzcGVjdGl2ZSIsInRoZWlyIHJlc3BlY3RpdmUgZGV2ZWxvcGVycyIsInJlc3BlY3RpdmUgZGV2ZWxvcGVycyBwb3J0aW9ucyIsImRldmVsb3BlcnMgcG9ydGlvbnMgb2YiLCJzb2Z0d2FyZSBhcmUgZGVyaXZlZCIsImFyZSBkZXJpdmVkIGZyb20iLCJmcm9tIHRoZSBuZXQiLCJ0aGUgbmV0IDIiLCJuZXQgMiBhbmQiLCJhbmQgNCA0IiwiNCA0IGxpdGUiLCI0IGxpdGUgYmVya2VsZXkiLCJsaXRlIGJlcmtlbGV5IHNvZnR3YXJlIiwiYmVya2VsZXkgc29mdHdhcmUgZGlzdHJpYnV0aW9ucyIsInNvZnR3YXJlIGRpc3RyaWJ1dGlvbnMgYnNkIiwiZGlzdHJpYnV0aW9ucyBic2Qgb2YiLCJic2Qgb2YgdGhlIiwib2YgY2FsaWZvcm5pYSBhdCIsImNhbGlmb3JuaWEgYXQgYmVya2VsZXkiLCJhdCBiZXJrZWxleSBhbmQiLCJiZXJrZWxleSBhbmQgdGhvc2UiLCJhbmQgdGhvc2UgcG9ydGlvbnMiLCJ0aG9zZSBwb3J0aW9ucyBhcmUiLCJwb3J0aW9ucyBhcmUgY29weXJpZ2h0IiwiYXJlIGNvcHlyaWdodCBieSIsInJlc2VydmVkIHRoZSB1YyIsImFuZCBsaWNlbnNlIGFncmVlbWVudCIsImFncmVlbWVudCBpcyBiaW5kaW5nIiwiaXMgYmluZGluZyBvbiIsImJpbmRpbmcgb24gdGhvc2UiLCJvbiB0aG9zZSBwb3J0aW9ucyIsInNvZnR3YXJlIGluIGFsbCIsImFsbCBjYXNlcyB0aGUiLCJjYXNlcyB0aGUgbnJsIiwidGhlIG5ybCBkZXZlbG9wZXJzIiwibnJsIGRldmVsb3BlcnMgaGF2ZSIsImRldmVsb3BlcnMgaGF2ZSByZXRhaW5lZCIsImhhdmUgcmV0YWluZWQgdGhlIiwicmV0YWluZWQgdGhlIG9yaWdpbmFsIiwidGhlIG9yaWdpbmFsIHVjIiwib3JpZ2luYWwgdWMgYmVya2VsZXkiLCJpbiB0aGUgcmVzcGVjdGl2ZSIsInRoZSByZXNwZWN0aXZlIGZpbGVzIiwicmVzcGVjdGl2ZSBmaWxlcyBpbiIsImZpbGVzIGluIGFjY29yZGFuY2UiLCJ3aXRoIHRoZSB1YyIsInVjIGJlcmtlbGV5IGNvcHlyaWdodHMiLCJiZXJrZWxleSBjb3B5cmlnaHRzIGFuZCIsImNvcHlyaWdodHMgYW5kIGxpY2Vuc2UiLCJhbmQgbGljZW5zZSBwb3J0aW9ucyIsImFuZCBkb2N1bWVudGF0aW9uIHdlcmUiLCJkb2N1bWVudGF0aW9uIHdlcmUgZGV2ZWxvcGVkIiwid2VyZSBkZXZlbG9wZWQgYXQiLCJhdCBucmwgYnkiLCJucmwgYnkgdmFyaW91cyIsImJ5IHZhcmlvdXMgcGVvcGxlIiwidmFyaW91cyBwZW9wbGUgdGhvc2UiLCJwZW9wbGUgdGhvc2UgZGV2ZWxvcGVycyIsInRob3NlIGRldmVsb3BlcnMgaGF2ZSIsImRldmVsb3BlcnMgaGF2ZSBlYWNoIiwiaGF2ZSBlYWNoIGNvcHlyaWdodGVkIiwiZWFjaCBjb3B5cmlnaHRlZCB0aGUiLCJjb3B5cmlnaHRlZCB0aGUgcG9ydGlvbnMiLCJ0aGUgcG9ydGlvbnMgdGhhdCIsInBvcnRpb25zIHRoYXQgdGhleSIsInRoYXQgdGhleSBkZXZlbG9wZWQiLCJ0aGV5IGRldmVsb3BlZCBhdCIsImF0IG5ybCBhbmQiLCJucmwgYW5kIGhhdmUiLCJhbmQgaGF2ZSBhc3NpZ25lZCIsImhhdmUgYXNzaWduZWQgYWxsIiwiYXNzaWduZWQgYWxsIHJpZ2h0cyIsImFsbCByaWdodHMgZm9yIiwicmlnaHRzIGZvciB0aG9zZSIsInRob3NlIHBvcnRpb25zIHRvIiwicG9ydGlvbnMgdG8gbnJsIiwidG8gbnJsIG91dHNpZGUiLCJucmwgb3V0c2lkZSB0aGUiLCJvdXRzaWRlIHRoZSB1c2EiLCJ0aGUgdXNhIG5ybCIsInVzYSBucmwgaGFzIiwibnJsIGhhcyBjb3B5cmlnaHQiLCJoYXMgY29weXJpZ2h0IG9uIiwiY29weXJpZ2h0IG9uIHNvbWUiLCJvbiBzb21lIG9mIiwiYXQgbnJsIHRoZSIsIm5ybCB0aGUgYWZmZWN0ZWQiLCJ0aGUgYWZmZWN0ZWQgZmlsZXMiLCJhZmZlY3RlZCBmaWxlcyBhbGwiLCJmaWxlcyBhbGwgY29udGFpbiIsImFsbCBjb250YWluIHNwZWNpZmljIiwiY29udGFpbiBzcGVjaWZpYyBjb3B5cmlnaHQiLCJzcGVjaWZpYyBjb3B5cmlnaHQgbm90aWNlcyIsIm5vdGljZXMgYW5kIHRob3NlIiwiYW5kIHRob3NlIG5vdGljZXMiLCJ0aG9zZSBub3RpY2VzIG11c3QiLCJpbiBhbnkgZGVyaXZlZCIsImRlcml2ZWQgd29yayBucmwiLCJ3b3JrIG5ybCBsaWNlbnNlIiwibnJsIGxpY2Vuc2UgbnJsIiwibGljZW5zZSBucmwgZ3JhbnRzIiwibnJsIGdyYW50cyBwZXJtaXNzaW9uIiwiZ3JhbnRzIHBlcm1pc3Npb24gZm9yIiwicGVybWlzc2lvbiBmb3IgcmVkaXN0cmlidXRpb24iLCJmb3IgcmVkaXN0cmlidXRpb24gYW5kIiwiYW5kIGRvY3VtZW50YXRpb24gY3JlYXRlZCIsImRvY3VtZW50YXRpb24gY3JlYXRlZCBhdCIsImNyZWF0ZWQgYXQgbnJsIiwiYXQgbnJsIHByb3ZpZGVkIiwibnJsIHByb3ZpZGVkIHRoYXQiLCIxIGFsbCB0ZXJtcyIsIm9mIHRoZSB1YyIsImFuZCBsaWNlbnNlIG11c3QiLCJtdXN0IGJlIGZvbGxvd2VkIiwiYmUgZm9sbG93ZWQgMiIsImZvbGxvd2VkIDIgcmVkaXN0cmlidXRpb25zIiwiZm9sbG93aW5nIGRpc2NsYWltZXIgMyIsImRpc2NsYWltZXIgMyByZWRpc3RyaWJ1dGlvbnMiLCJkaXN0cmlidXRpb24gNCBhbGwiLCJ0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudHMiLCJmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50cyB0aGlzIiwiYWNrbm93bGVkZ2VtZW50cyB0aGlzIHByb2R1Y3QiLCJpdHMgY29udHJpYnV0b3JzIHRoaXMiLCJjb250cmlidXRvcnMgdGhpcyBwcm9kdWN0IiwiYXQgdGhlIGluZm9ybWF0aW9uIiwidGhlIGluZm9ybWF0aW9uIHRlY2hub2xvZ3kiLCJpbmZvcm1hdGlvbiB0ZWNobm9sb2d5IGRpdmlzaW9uIiwidGVjaG5vbG9neSBkaXZpc2lvbiB1cyIsImRpdmlzaW9uIHVzIG5hdmFsIiwicmVzZWFyY2ggbGFib3JhdG9yeSA1IiwibGFib3JhdG9yeSA1IG5laXRoZXIiLCJvZiB0aGUgbnJsIiwidGhlIG5ybCBub3IiLCJucmwgbm9yIHRoZSIsImJ5IG5ybCBpcyIsIm5ybCBpcyBwcm92aWRlZCIsImJ5IG5ybCBhbmQiLCJucmwgYW5kIGNvbnRyaWJ1dG9ycyIsImV2ZW50IHNoYWxsIG5ybCIsInNoYWxsIG5ybCBvciIsIm5ybCBvciBjb250cmlidXRvcnMiLCJucmwgbGljZW5zZSBjb3B5cmlnaHQgbm90aWNlIiwibGljZW5zZSBjb3B5cmlnaHQgbm90aWNlIGFsbCIsImNvcHlyaWdodCBub3RpY2UgYWxsIG9mIiwibm90aWNlIGFsbCBvZiB0aGUiLCJhbGwgb2YgdGhlIGRvY3VtZW50YXRpb24iLCJkb2N1bWVudGF0aW9uIGFuZCBzb2Z0d2FyZSBpbmNsdWRlZCIsImFuZCBzb2Z0d2FyZSBpbmNsdWRlZCBpbiIsInNvZnR3YXJlIGluY2x1ZGVkIGluIHRoaXMiLCJpbmNsdWRlZCBpbiB0aGlzIHNvZnR3YXJlIiwiaW4gdGhpcyBzb2Z0d2FyZSBkaXN0cmlidXRpb24iLCJ0aGlzIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBmcm9tIiwic29mdHdhcmUgZGlzdHJpYnV0aW9uIGZyb20gdGhlIiwiZGlzdHJpYnV0aW9uIGZyb20gdGhlIHVzIiwiZnJvbSB0aGUgdXMgbmF2YWwiLCJyZXNlYXJjaCBsYWJvcmF0b3J5IG5ybCBhcmUiLCJsYWJvcmF0b3J5IG5ybCBhcmUgY29weXJpZ2h0ZWQiLCJucmwgYXJlIGNvcHlyaWdodGVkIGJ5IiwiYXJlIGNvcHlyaWdodGVkIGJ5IHRoZWlyIiwiY29weXJpZ2h0ZWQgYnkgdGhlaXIgcmVzcGVjdGl2ZSIsImJ5IHRoZWlyIHJlc3BlY3RpdmUgZGV2ZWxvcGVycyIsInRoZWlyIHJlc3BlY3RpdmUgZGV2ZWxvcGVycyBwb3J0aW9ucyIsInJlc3BlY3RpdmUgZGV2ZWxvcGVycyBwb3J0aW9ucyBvZiIsImRldmVsb3BlcnMgcG9ydGlvbnMgb2YgdGhlIiwib2YgdGhlIHNvZnR3YXJlIGFyZSIsInRoZSBzb2Z0d2FyZSBhcmUgZGVyaXZlZCIsInNvZnR3YXJlIGFyZSBkZXJpdmVkIGZyb20iLCJhcmUgZGVyaXZlZCBmcm9tIHRoZSIsImRlcml2ZWQgZnJvbSB0aGUgbmV0IiwiZnJvbSB0aGUgbmV0IDIiLCJ0aGUgbmV0IDIgYW5kIiwibmV0IDIgYW5kIDQiLCIyIGFuZCA0IDQiLCJhbmQgNCA0IGxpdGUiLCI0IDQgbGl0ZSBiZXJrZWxleSIsIjQgbGl0ZSBiZXJrZWxleSBzb2Z0d2FyZSIsImxpdGUgYmVya2VsZXkgc29mdHdhcmUgZGlzdHJpYnV0aW9ucyIsImJlcmtlbGV5IHNvZnR3YXJlIGRpc3RyaWJ1dGlvbnMgYnNkIiwic29mdHdhcmUgZGlzdHJpYnV0aW9ucyBic2Qgb2YiLCJkaXN0cmlidXRpb25zIGJzZCBvZiB0aGUiLCJic2Qgb2YgdGhlIHVuaXZlcnNpdHkiLCJ1bml2ZXJzaXR5IG9mIGNhbGlmb3JuaWEgYXQiLCJvZiBjYWxpZm9ybmlhIGF0IGJlcmtlbGV5IiwiY2FsaWZvcm5pYSBhdCBiZXJrZWxleSBhbmQiLCJhdCBiZXJrZWxleSBhbmQgdGhvc2UiLCJiZXJrZWxleSBhbmQgdGhvc2UgcG9ydGlvbnMiLCJhbmQgdGhvc2UgcG9ydGlvbnMgYXJlIiwidGhvc2UgcG9ydGlvbnMgYXJlIGNvcHlyaWdodCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJOVFAgTm8gQXR0cmlidXRpb24gKE5UUC0wKSBDb3B5cmlnaHQgKDQtZGlnaXQteWVhcikgYnkgKENvcHlyaWdodEhvbGRlcnNOYW1lKVxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIG5hbWVzb2YgKFRyYWRlbWFya2VkTmFtZSkgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIChUcmFkZW1hcmtlZE5hbWUpIG1ha2Vzbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgXCJhcyBpc1wiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LiJdLCJsaWNlbnNlSWRzIjpbIk5UUC0wIl0sImtleXdvcmRzIjpbIm50cCBubyBhdHRyaWJ1dGlvbiIsIm5vIGF0dHJpYnV0aW9uIG50cCIsImF0dHJpYnV0aW9uIG50cCAwIiwibnRwIDAgY29weXJpZ2h0IiwiMCBjb3B5cmlnaHQgNCIsImNvcHlyaWdodCA0IGRpZ2l0IiwiZGlnaXQgeWVhciBieSIsInllYXIgYnkgY29weXJpZ2h0aG9sZGVyc25hbWUiLCJieSBjb3B5cmlnaHRob2xkZXJzbmFtZSBwZXJtaXNzaW9uIiwiY29weXJpZ2h0aG9sZGVyc25hbWUgcGVybWlzc2lvbiB0byIsInRoYXQgdGhlIG5hbWVzb2YiLCJ0aGUgbmFtZXNvZiB0cmFkZW1hcmtlZG5hbWUiLCJuYW1lc29mIHRyYWRlbWFya2VkbmFtZSBub3QiLCJwZXJtaXNzaW9uIHRyYWRlbWFya2VkbmFtZSBtYWtlc25vIiwidHJhZGVtYXJrZWRuYW1lIG1ha2Vzbm8gcmVwcmVzZW50YXRpb25zIiwibWFrZXNubyByZXByZXNlbnRhdGlvbnMgYWJvdXQiLCJudHAgbm8gYXR0cmlidXRpb24gbnRwIiwibm8gYXR0cmlidXRpb24gbnRwIDAiLCJhdHRyaWJ1dGlvbiBudHAgMCBjb3B5cmlnaHQiLCJudHAgMCBjb3B5cmlnaHQgNCIsIjAgY29weXJpZ2h0IDQgZGlnaXQiLCJjb3B5cmlnaHQgNCBkaWdpdCB5ZWFyIiwiNCBkaWdpdCB5ZWFyIGJ5IiwiZGlnaXQgeWVhciBieSBjb3B5cmlnaHRob2xkZXJzbmFtZSIsInllYXIgYnkgY29weXJpZ2h0aG9sZGVyc25hbWUgcGVybWlzc2lvbiIsImJ5IGNvcHlyaWdodGhvbGRlcnNuYW1lIHBlcm1pc3Npb24gdG8iLCJjb3B5cmlnaHRob2xkZXJzbmFtZSBwZXJtaXNzaW9uIHRvIHVzZSIsInByb3ZpZGVkIHRoYXQgdGhlIG5hbWVzb2YiLCJ0aGF0IHRoZSBuYW1lc29mIHRyYWRlbWFya2VkbmFtZSIsInRoZSBuYW1lc29mIHRyYWRlbWFya2VkbmFtZSBub3QiLCJuYW1lc29mIHRyYWRlbWFya2VkbmFtZSBub3QgYmUiLCJwcmlvciBwZXJtaXNzaW9uIHRyYWRlbWFya2VkbmFtZSBtYWtlc25vIiwicGVybWlzc2lvbiB0cmFkZW1hcmtlZG5hbWUgbWFrZXNubyByZXByZXNlbnRhdGlvbnMiLCJ0cmFkZW1hcmtlZG5hbWUgbWFrZXNubyByZXByZXNlbnRhdGlvbnMgYWJvdXQiLCJtYWtlc25vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUiLCJudHAgbm8gYXR0cmlidXRpb24gbnRwIDAiLCJubyBhdHRyaWJ1dGlvbiBudHAgMCBjb3B5cmlnaHQiLCJhdHRyaWJ1dGlvbiBudHAgMCBjb3B5cmlnaHQgNCIsIm50cCAwIGNvcHlyaWdodCA0IGRpZ2l0IiwiMCBjb3B5cmlnaHQgNCBkaWdpdCB5ZWFyIiwiY29weXJpZ2h0IDQgZGlnaXQgeWVhciBieSIsIjQgZGlnaXQgeWVhciBieSBjb3B5cmlnaHRob2xkZXJzbmFtZSIsImRpZ2l0IHllYXIgYnkgY29weXJpZ2h0aG9sZGVyc25hbWUgcGVybWlzc2lvbiIsInllYXIgYnkgY29weXJpZ2h0aG9sZGVyc25hbWUgcGVybWlzc2lvbiB0byIsImJ5IGNvcHlyaWdodGhvbGRlcnNuYW1lIHBlcm1pc3Npb24gdG8gdXNlIiwiY29weXJpZ2h0aG9sZGVyc25hbWUgcGVybWlzc2lvbiB0byB1c2UgY29weSIsInB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgcHJvdmlkZWQiLCJncmFudGVkIHByb3ZpZGVkIHRoYXQgdGhlIG5hbWVzb2YiLCJwcm92aWRlZCB0aGF0IHRoZSBuYW1lc29mIHRyYWRlbWFya2VkbmFtZSIsInRoYXQgdGhlIG5hbWVzb2YgdHJhZGVtYXJrZWRuYW1lIG5vdCIsInRoZSBuYW1lc29mIHRyYWRlbWFya2VkbmFtZSBub3QgYmUiLCJuYW1lc29mIHRyYWRlbWFya2VkbmFtZSBub3QgYmUgdXNlZCIsIndyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbiB0cmFkZW1hcmtlZG5hbWUgbWFrZXNubyIsInByaW9yIHBlcm1pc3Npb24gdHJhZGVtYXJrZWRuYW1lIG1ha2Vzbm8gcmVwcmVzZW50YXRpb25zIiwicGVybWlzc2lvbiB0cmFkZW1hcmtlZG5hbWUgbWFrZXNubyByZXByZXNlbnRhdGlvbnMgYWJvdXQiLCJ0cmFkZW1hcmtlZG5hbWUgbWFrZXNubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIiwibWFrZXNubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5Il19LHsibGljZW5zZVRleHRzIjpbIk5UUCBMaWNlbnNlIChOVFApIENvcHlyaWdodCAoYykgKENvcHlyaWdodEhvbGRlcnNOYW1lKSAoRnJvbSA0LWRpZ2l0LXllYXIpLShUbyA0LWRpZ2l0LXllYXIpXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIChUcmFkZW1hcmtlZE5hbWUpIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAoVHJhZGVtYXJrZWROYW1lKSBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCBcImFzIGlzXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuIl0sImxpY2Vuc2VJZHMiOlsiTlRQIl0sImtleXdvcmRzIjpbIm50cCBsaWNlbnNlIG50cCIsImxpY2Vuc2UgbnRwIGNvcHlyaWdodCIsIm50cCBjb3B5cmlnaHQgYyIsImNvcHlyaWdodCBjIGNvcHlyaWdodGhvbGRlcnNuYW1lIiwiYyBjb3B5cmlnaHRob2xkZXJzbmFtZSBmcm9tIiwiY29weXJpZ2h0aG9sZGVyc25hbWUgZnJvbSA0IiwiZnJvbSA0IGRpZ2l0IiwiZGlnaXQgeWVhciB0byIsInllYXIgdG8gNCIsInRvIDQgZGlnaXQiLCJkaWdpdCB5ZWFyIHBlcm1pc3Npb24iLCJ5ZWFyIHBlcm1pc3Npb24gdG8iLCJ0aGUgbmFtZSB0cmFkZW1hcmtlZG5hbWUiLCJuYW1lIHRyYWRlbWFya2VkbmFtZSBub3QiLCJwZXJtaXNzaW9uIHRyYWRlbWFya2VkbmFtZSBtYWtlcyIsInRyYWRlbWFya2VkbmFtZSBtYWtlcyBubyIsInRoZSBzdWl0YWJpbGl0eSB0aGlzIiwic3VpdGFiaWxpdHkgdGhpcyBzb2Z0d2FyZSIsIm50cCBsaWNlbnNlIG50cCBjb3B5cmlnaHQiLCJsaWNlbnNlIG50cCBjb3B5cmlnaHQgYyIsIm50cCBjb3B5cmlnaHQgYyBjb3B5cmlnaHRob2xkZXJzbmFtZSIsImNvcHlyaWdodCBjIGNvcHlyaWdodGhvbGRlcnNuYW1lIGZyb20iLCJjIGNvcHlyaWdodGhvbGRlcnNuYW1lIGZyb20gNCIsImNvcHlyaWdodGhvbGRlcnNuYW1lIGZyb20gNCBkaWdpdCIsImZyb20gNCBkaWdpdCB5ZWFyIiwiNCBkaWdpdCB5ZWFyIHRvIiwiZGlnaXQgeWVhciB0byA0IiwieWVhciB0byA0IGRpZ2l0IiwidG8gNCBkaWdpdCB5ZWFyIiwiNCBkaWdpdCB5ZWFyIHBlcm1pc3Npb24iLCJkaWdpdCB5ZWFyIHBlcm1pc3Npb24gdG8iLCJ5ZWFyIHBlcm1pc3Npb24gdG8gdXNlIiwidGhhdCB0aGUgbmFtZSB0cmFkZW1hcmtlZG5hbWUiLCJ0aGUgbmFtZSB0cmFkZW1hcmtlZG5hbWUgbm90IiwibmFtZSB0cmFkZW1hcmtlZG5hbWUgbm90IGJlIiwicHJpb3IgcGVybWlzc2lvbiB0cmFkZW1hcmtlZG5hbWUgbWFrZXMiLCJwZXJtaXNzaW9uIHRyYWRlbWFya2VkbmFtZSBtYWtlcyBubyIsInRyYWRlbWFya2VkbmFtZSBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMiLCJhYm91dCB0aGUgc3VpdGFiaWxpdHkgdGhpcyIsInRoZSBzdWl0YWJpbGl0eSB0aGlzIHNvZnR3YXJlIiwic3VpdGFiaWxpdHkgdGhpcyBzb2Z0d2FyZSBmb3IiLCJudHAgbGljZW5zZSBudHAgY29weXJpZ2h0IGMiLCJsaWNlbnNlIG50cCBjb3B5cmlnaHQgYyBjb3B5cmlnaHRob2xkZXJzbmFtZSIsIm50cCBjb3B5cmlnaHQgYyBjb3B5cmlnaHRob2xkZXJzbmFtZSBmcm9tIiwiY29weXJpZ2h0IGMgY29weXJpZ2h0aG9sZGVyc25hbWUgZnJvbSA0IiwiYyBjb3B5cmlnaHRob2xkZXJzbmFtZSBmcm9tIDQgZGlnaXQiLCJjb3B5cmlnaHRob2xkZXJzbmFtZSBmcm9tIDQgZGlnaXQgeWVhciIsImZyb20gNCBkaWdpdCB5ZWFyIHRvIiwiNCBkaWdpdCB5ZWFyIHRvIDQiLCJkaWdpdCB5ZWFyIHRvIDQgZGlnaXQiLCJ5ZWFyIHRvIDQgZGlnaXQgeWVhciIsInRvIDQgZGlnaXQgeWVhciBwZXJtaXNzaW9uIiwiNCBkaWdpdCB5ZWFyIHBlcm1pc3Npb24gdG8iLCJkaWdpdCB5ZWFyIHBlcm1pc3Npb24gdG8gdXNlIiwieWVhciBwZXJtaXNzaW9uIHRvIHVzZSBjb3B5IiwiYW5kIHRoYXQgdGhlIG5hbWUgdHJhZGVtYXJrZWRuYW1lIiwidGhhdCB0aGUgbmFtZSB0cmFkZW1hcmtlZG5hbWUgbm90IiwidGhlIG5hbWUgdHJhZGVtYXJrZWRuYW1lIG5vdCBiZSIsIm5hbWUgdHJhZGVtYXJrZWRuYW1lIG5vdCBiZSB1c2VkIiwid3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uIHRyYWRlbWFya2VkbmFtZSBtYWtlcyIsInByaW9yIHBlcm1pc3Npb24gdHJhZGVtYXJrZWRuYW1lIG1ha2VzIG5vIiwicGVybWlzc2lvbiB0cmFkZW1hcmtlZG5hbWUgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIiwidHJhZGVtYXJrZWRuYW1lIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCIsInJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgdGhpcyIsImFib3V0IHRoZSBzdWl0YWJpbGl0eSB0aGlzIHNvZnR3YXJlIiwidGhlIHN1aXRhYmlsaXR5IHRoaXMgc29mdHdhcmUgZm9yIiwic3VpdGFiaWxpdHkgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Il19LHsibGljZW5zZVRleHRzIjpbIk5BVU1FTiBQdWJsaWMgTGljZW5zZSBUaGlzIHNvZnR3YXJlIGlzIENvcHlyaWdodCAoYykgTkFVTUVOICh0bSkgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBUaGUgbmFtZSBOQVVNRU4gKHRtKSBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5BVU1FTi5cblxuICAgNC4gVGhlIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBvciB0byB1c2UgaXQgZm9yIGFueSBwdXJwb3NlIGRvZXMgbm90IGdpdmUgeW91IHRoZSByaWdodCB0byB1c2UgU2VydmljZW1hcmtzIChzbSkgb3IgVHJhZGVtYXJrcyAodG0pIG9mIE5BVU1FTi5cblxuICAgNS4gSWYgYW55IGZpbGVzIG9yaWdpbmF0aW5nIGZyb20gTkFVTUVOIG9yIENvbnRyaWJ1dG9ycyBhcmUgbW9kaWZpZWQsIHlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLlxuXG5EaXNjbGFpbWVyOlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5BVU1FTiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBOQVVNRU4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiBjb250cmlidXRpb25zIG1hZGUgYnkgTkFVTUVOIGFuZCBDb250cmlidXRvcnMuIFNwZWNpZmljIGF0dHJpYnV0aW9ucyBhcmUgbGlzdGVkIGluIHRoZSBhY2NvbXBhbnlpbmcgY3JlZGl0cyBmaWxlLiJdLCJsaWNlbnNlSWRzIjpbIk5hdW1lbiJdLCJrZXl3b3JkcyI6WyJuYXVtZW4gcHVibGljIGxpY2Vuc2UiLCJjb3B5cmlnaHQgYyBuYXVtZW4iLCJjIG5hdW1lbiB0bSIsIm5hdW1lbiB0bSBhbmQiLCJ0aGUgbmFtZSBuYXVtZW4iLCJuYW1lIG5hdW1lbiB0bSIsIm5hdW1lbiB0bSBtdXN0IiwicGVybWlzc2lvbiBmcm9tIG5hdW1lbiIsImZyb20gbmF1bWVuIDQiLCJuYXVtZW4gNCB0aGUiLCJ0bSBvZiBuYXVtZW4iLCJvZiBuYXVtZW4gNSIsIm5hdW1lbiA1IGlmIiwiYW55IGZpbGVzIG9yaWdpbmF0aW5nIiwib3JpZ2luYXRpbmcgZnJvbSBuYXVtZW4iLCJmcm9tIG5hdW1lbiBvciIsIm5hdW1lbiBvciBjb250cmlidXRvcnMiLCJvciBjb250cmlidXRvcnMgYXJlIiwiY29udHJpYnV0b3JzIGFyZSBtb2RpZmllZCIsInByb3ZpZGVkIGJ5IG5hdW1lbiIsImJ5IG5hdW1lbiBhcyIsIm5hdW1lbiBhcyBpcyIsImV2ZW50IHNoYWxsIG5hdW1lbiIsInNoYWxsIG5hdW1lbiBvciIsIm5hdW1lbiBvciBpdHMiLCJtYWRlIGJ5IG5hdW1lbiIsImJ5IG5hdW1lbiBhbmQiLCJuYXVtZW4gYW5kIGNvbnRyaWJ1dG9ycyIsImFuZCBjb250cmlidXRvcnMgc3BlY2lmaWMiLCJjb250cmlidXRvcnMgc3BlY2lmaWMgYXR0cmlidXRpb25zIiwibmF1bWVuIHB1YmxpYyBsaWNlbnNlIHRoaXMiLCJwdWJsaWMgbGljZW5zZSB0aGlzIHNvZnR3YXJlIiwiaXMgY29weXJpZ2h0IGMgbmF1bWVuIiwiY29weXJpZ2h0IGMgbmF1bWVuIHRtIiwiYyBuYXVtZW4gdG0gYW5kIiwibmF1bWVuIHRtIGFuZCBjb250cmlidXRvcnMiLCIzIHRoZSBuYW1lIG5hdW1lbiIsInRoZSBuYW1lIG5hdW1lbiB0bSIsIm5hbWUgbmF1bWVuIHRtIG11c3QiLCJuYXVtZW4gdG0gbXVzdCBub3QiLCJ3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBuYXVtZW4iLCJwZXJtaXNzaW9uIGZyb20gbmF1bWVuIDQiLCJmcm9tIG5hdW1lbiA0IHRoZSIsIm5hdW1lbiA0IHRoZSByaWdodCIsInRyYWRlbWFya3MgdG0gb2YgbmF1bWVuIiwidG0gb2YgbmF1bWVuIDUiLCJvZiBuYXVtZW4gNSBpZiIsIm5hdW1lbiA1IGlmIGFueSIsImlmIGFueSBmaWxlcyBvcmlnaW5hdGluZyIsImFueSBmaWxlcyBvcmlnaW5hdGluZyBmcm9tIiwiZmlsZXMgb3JpZ2luYXRpbmcgZnJvbSBuYXVtZW4iLCJvcmlnaW5hdGluZyBmcm9tIG5hdW1lbiBvciIsImZyb20gbmF1bWVuIG9yIGNvbnRyaWJ1dG9ycyIsIm5hdW1lbiBvciBjb250cmlidXRvcnMgYXJlIiwib3IgY29udHJpYnV0b3JzIGFyZSBtb2RpZmllZCIsImNvbnRyaWJ1dG9ycyBhcmUgbW9kaWZpZWQgeW91IiwiaXMgcHJvdmlkZWQgYnkgbmF1bWVuIiwicHJvdmlkZWQgYnkgbmF1bWVuIGFzIiwiYnkgbmF1bWVuIGFzIGlzIiwibmF1bWVuIGFzIGlzIGFuZCIsIm5vIGV2ZW50IHNoYWxsIG5hdW1lbiIsImV2ZW50IHNoYWxsIG5hdW1lbiBvciIsInNoYWxsIG5hdW1lbiBvciBpdHMiLCJuYXVtZW4gb3IgaXRzIGNvbnRyaWJ1dG9ycyIsImNvbnRyaWJ1dGlvbnMgbWFkZSBieSBuYXVtZW4iLCJtYWRlIGJ5IG5hdW1lbiBhbmQiLCJieSBuYXVtZW4gYW5kIGNvbnRyaWJ1dG9ycyIsIm5hdW1lbiBhbmQgY29udHJpYnV0b3JzIHNwZWNpZmljIiwiYW5kIGNvbnRyaWJ1dG9ycyBzcGVjaWZpYyBhdHRyaWJ1dGlvbnMiLCJjb250cmlidXRvcnMgc3BlY2lmaWMgYXR0cmlidXRpb25zIGFyZSIsIm5hdW1lbiBwdWJsaWMgbGljZW5zZSB0aGlzIHNvZnR3YXJlIiwicHVibGljIGxpY2Vuc2UgdGhpcyBzb2Z0d2FyZSBpcyIsImxpY2Vuc2UgdGhpcyBzb2Z0d2FyZSBpcyBjb3B5cmlnaHQiLCJzb2Z0d2FyZSBpcyBjb3B5cmlnaHQgYyBuYXVtZW4iLCJpcyBjb3B5cmlnaHQgYyBuYXVtZW4gdG0iLCJjb3B5cmlnaHQgYyBuYXVtZW4gdG0gYW5kIiwiYyBuYXVtZW4gdG0gYW5kIGNvbnRyaWJ1dG9ycyIsIm5hdW1lbiB0bSBhbmQgY29udHJpYnV0b3JzIGFsbCIsImNvbnRyaWJ1dG9ycyBhbGwgcmlnaHRzIHJlc2VydmVkIHJlZGlzdHJpYnV0aW9uIiwiZGlzdHJpYnV0aW9uIDMgdGhlIG5hbWUgbmF1bWVuIiwiMyB0aGUgbmFtZSBuYXVtZW4gdG0iLCJ0aGUgbmFtZSBuYXVtZW4gdG0gbXVzdCIsIm5hbWUgbmF1bWVuIHRtIG11c3Qgbm90IiwibmF1bWVuIHRtIG11c3Qgbm90IGJlIiwicHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gbmF1bWVuIiwid3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gbmF1bWVuIDQiLCJwZXJtaXNzaW9uIGZyb20gbmF1bWVuIDQgdGhlIiwiZnJvbSBuYXVtZW4gNCB0aGUgcmlnaHQiLCJuYXVtZW4gNCB0aGUgcmlnaHQgdG8iLCJvciB0cmFkZW1hcmtzIHRtIG9mIG5hdW1lbiIsInRyYWRlbWFya3MgdG0gb2YgbmF1bWVuIDUiLCJ0bSBvZiBuYXVtZW4gNSBpZiIsIm9mIG5hdW1lbiA1IGlmIGFueSIsIm5hdW1lbiA1IGlmIGFueSBmaWxlcyIsIjUgaWYgYW55IGZpbGVzIG9yaWdpbmF0aW5nIiwiaWYgYW55IGZpbGVzIG9yaWdpbmF0aW5nIGZyb20iLCJhbnkgZmlsZXMgb3JpZ2luYXRpbmcgZnJvbSBuYXVtZW4iLCJmaWxlcyBvcmlnaW5hdGluZyBmcm9tIG5hdW1lbiBvciIsIm9yaWdpbmF0aW5nIGZyb20gbmF1bWVuIG9yIGNvbnRyaWJ1dG9ycyIsImZyb20gbmF1bWVuIG9yIGNvbnRyaWJ1dG9ycyBhcmUiLCJuYXVtZW4gb3IgY29udHJpYnV0b3JzIGFyZSBtb2RpZmllZCIsIm9yIGNvbnRyaWJ1dG9ycyBhcmUgbW9kaWZpZWQgeW91IiwiY29udHJpYnV0b3JzIGFyZSBtb2RpZmllZCB5b3UgbXVzdCIsInNvZnR3YXJlIGlzIHByb3ZpZGVkIGJ5IG5hdW1lbiIsImlzIHByb3ZpZGVkIGJ5IG5hdW1lbiBhcyIsInByb3ZpZGVkIGJ5IG5hdW1lbiBhcyBpcyIsImJ5IG5hdW1lbiBhcyBpcyBhbmQiLCJuYXVtZW4gYXMgaXMgYW5kIGFueSIsImluIG5vIGV2ZW50IHNoYWxsIG5hdW1lbiIsIm5vIGV2ZW50IHNoYWxsIG5hdW1lbiBvciIsImV2ZW50IHNoYWxsIG5hdW1lbiBvciBpdHMiLCJzaGFsbCBuYXVtZW4gb3IgaXRzIGNvbnRyaWJ1dG9ycyIsIm5hdW1lbiBvciBpdHMgY29udHJpYnV0b3JzIGJlIiwib2YgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG5hdW1lbiIsImNvbnRyaWJ1dGlvbnMgbWFkZSBieSBuYXVtZW4gYW5kIiwibWFkZSBieSBuYXVtZW4gYW5kIGNvbnRyaWJ1dG9ycyIsImJ5IG5hdW1lbiBhbmQgY29udHJpYnV0b3JzIHNwZWNpZmljIiwibmF1bWVuIGFuZCBjb250cmlidXRvcnMgc3BlY2lmaWMgYXR0cmlidXRpb25zIiwiYW5kIGNvbnRyaWJ1dG9ycyBzcGVjaWZpYyBhdHRyaWJ1dGlvbnMgYXJlIiwiY29udHJpYnV0b3JzIHNwZWNpZmljIGF0dHJpYnV0aW9ucyBhcmUgbGlzdGVkIl19LHsibGljZW5zZVRleHRzIjpbIi0tLS0gUGFydCAxOiBDTVUvVUNEIGNvcHlyaWdodCBub3RpY2U6IChCU0QgbGlrZSkgLS0tLS0gQ29weXJpZ2h0IDE5ODksIDE5OTEsIDE5OTIgYnkgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHlcblxuRGVyaXZhdGl2ZSBXb3JrIC0gMTk5NiwgMTk5OC0yMDAwIENvcHlyaWdodCAxOTk2LCAxOTk4LTIwMDAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYVxuXG5BbGwgUmlnaHRzIFJlc2VydmVkXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgQ01VIGFuZCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyB3cml0dGVuIHBlcm1pc3Npb24uXG5cbkNNVSBBTkQgVEhFIFJFR0VOVFMgT0YgVEhFIFVOSVZFUlNJVFkgT0YgQ0FMSUZPUk5JQSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIENNVSBPUiBUSEUgUkVHRU5UUyBPRiBUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIFRIRSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG5cbi0tLS0gUGFydCAyOiBOZXR3b3JrcyBBc3NvY2lhdGVzIFRlY2hub2xvZ3ksIEluYyBjb3B5cmlnaHQgbm90aWNlIChCU0QpIC0tLS0tXG5cbkNvcHlyaWdodCAoYykgMjAwMS0yMDAzLCBOZXR3b3JrcyBBc3NvY2lhdGVzIFRlY2hub2xvZ3ksIEluYyBBbGwgcmlnaHRzIHJlc2VydmVkLiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBOZXR3b3JrcyBBc3NvY2lhdGVzIFRlY2hub2xvZ3ksIEluYyBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG4gICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG4gICAtLS0tIFBhcnQgMzogQ2FtYnJpZGdlIEJyb2FkYmFuZCBMdGQuIGNvcHlyaWdodCBub3RpY2UgKEJTRCkgLS0tLS1cblxuICAgUG9ydGlvbnMgb2YgdGhpcyBjb2RlIGFyZSBjb3B5cmlnaHQgKGMpIDIwMDEtMjAwMywgQ2FtYnJpZGdlIEJyb2FkYmFuZCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAqIFRoZSBuYW1lIG9mIENhbWJyaWRnZSBCcm9hZGJhbmQgTHRkLiBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuLS0tLSBQYXJ0IDQ6IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gY29weXJpZ2h0IG5vdGljZSAoQlNEKSAtLS0tLSBDb3B5cmlnaHQgwqkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCA0MTUwIE5ldHdvcmsgQ2lyY2xlLCBTYW50YSBDbGFyYSwgQ2FsaWZvcm5pYSA5NTA1NCwgVS5TLkEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgYmVsb3cuXG5cblRoaXMgZGlzdHJpYnV0aW9uIG1heSBpbmNsdWRlIG1hdGVyaWFscyBkZXZlbG9wZWQgYnkgdGhpcmQgcGFydGllcy5cblxuU3VuLCBTdW4gTWljcm9zeXN0ZW1zLCB0aGUgU3VuIGxvZ28gYW5kIFNvbGFyaXMgYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFUuUy4gYW5kIG90aGVyIGNvdW50cmllcy5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG4gICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG4gICAtLS0tIFBhcnQgNTogU3BhcnRhLCBJbmMgY29weXJpZ2h0IG5vdGljZSAoQlNEKSAtLS0tLVxuXG4gICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOSwgU3BhcnRhLCBJbmMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBTcGFydGEsIEluYyBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG4gICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG4gICAtLS0tIFBhcnQgNjogQ2lzY28vQlVQVE5JQyBjb3B5cmlnaHQgbm90aWNlIChCU0QpIC0tLS0tXG5cbiAgIENvcHlyaWdodCAoYykgMjAwNCwgQ2lzY28sIEluYyBhbmQgSW5mb3JtYXRpb24gTmV0d29yayBDZW50ZXIgb2YgQmVpamluZyBVbml2ZXJzaXR5IG9mIFBvc3RzIGFuZCBUZWxlY29tbXVuaWNhdGlvbnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28sIEluYywgQmVpamluZyBVbml2ZXJzaXR5IG9mIFBvc3RzIGFuZCBUZWxlY29tbXVuaWNhdGlvbnMsIG5vciB0aGUgbmFtZXMgb2YgdGhlaXIgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuLS0tLSBQYXJ0IDc6IEZhYmFzb2Z0IFJcdTAwMjZEIFNvZnR3YXJlIEdtYkggXHUwMDI2IENvIEtHIGNvcHlyaWdodCBub3RpY2UgKEJTRCkgLS0tLS0gQ29weXJpZ2h0IChjKSBGYWJhc29mdCBSXHUwMDI2RCBTb2Z0d2FyZSBHbWJIIFx1MDAyNiBDbyBLRywgMjAwMyBvc3NAZmFiYXNvZnQuY29tIEF1dGhvcjogQmVybmhhcmQgUGVuelxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgKiBUaGUgbmFtZSBvZiBGYWJhc29mdCBSXHUwMDI2RCBTb2Z0d2FyZSBHbWJIIFx1MDAyNiBDbyBLRyBvciBhbnkgb2YgaXRzIHN1YnNpZGlhcmllcywgYnJhbmQgb3IgcHJvZHVjdCBuYW1lcyBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuLS0tLSBQYXJ0IDg6IEFwcGxlIEluYy4gY29weXJpZ2h0IG5vdGljZSAoQlNEKSAtLS0tLSBDb3B5cmlnaHQgKGMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKFwiQXBwbGVcIikgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuICAgLS0tLSBQYXJ0IDk6IFNjaWVuY2VMb2dpYywgTExDIGNvcHlyaWdodCBub3RpY2UgKEJTRCkgLS0tLS1cblxuICAgQ29weXJpZ2h0IChjKSAyMDA5LCBTY2llbmNlTG9naWMsIExMQyBBbGwgcmlnaHRzIHJlc2VydmVkLiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNjaWVuY2VMb2dpYywgTExDIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIl0sImxpY2Vuc2VJZHMiOlsiTmV0LVNOTVAiXSwia2V5d29yZHMiOlsicGFydCAxIGNtdSIsIjEgY211IHVjZCIsImNtdSB1Y2QgY29weXJpZ2h0IiwidWNkIGNvcHlyaWdodCBub3RpY2UiLCJub3RpY2UgYnNkIGxpa2UiLCJic2QgbGlrZSBjb3B5cmlnaHQiLCJsaWtlIGNvcHlyaWdodCAxOTg5IiwiY29weXJpZ2h0IDE5ODkgMTk5MSIsIjE5ODkgMTk5MSAxOTkyIiwiMTk5MSAxOTkyIGJ5IiwiMTk5MiBieSBjYXJuZWdpZSIsImJ5IGNhcm5lZ2llIG1lbGxvbiIsImNhcm5lZ2llIG1lbGxvbiB1bml2ZXJzaXR5IiwibWVsbG9uIHVuaXZlcnNpdHkgZGVyaXZhdGl2ZSIsInVuaXZlcnNpdHkgZGVyaXZhdGl2ZSB3b3JrIiwiZGVyaXZhdGl2ZSB3b3JrIDE5OTYiLCJ3b3JrIDE5OTYgMTk5OCIsIjE5OTggMjAwMCBjb3B5cmlnaHQiLCIyMDAwIGNvcHlyaWdodCAxOTk2IiwiY29weXJpZ2h0IDE5OTYgMTk5OCIsIjE5OTggMjAwMCB0aGUiLCIyMDAwIHRoZSByZWdlbnRzIiwibmFtZSBvZiBjbXUiLCJvZiBjbXUgYW5kIiwib2YgY2FsaWZvcm5pYSBub3QiLCJjYWxpZm9ybmlhIG5vdCBiZSIsIndyaXR0ZW4gcGVybWlzc2lvbiBjbXUiLCJwZXJtaXNzaW9uIGNtdSBhbmQiLCJvZiBjYWxpZm9ybmlhIGRpc2NsYWltIiwiY2FsaWZvcm5pYSBkaXNjbGFpbSBhbGwiLCJldmVudCBzaGFsbCBjbXUiLCJzaGFsbCBjbXUgb3IiLCJjbXUgb3IgdGhlIiwib3IgdGhlIHJlZ2VudHMiLCJ0aGlzIHNvZnR3YXJlIHBhcnQiLCJzb2Z0d2FyZSBwYXJ0IDIiLCJwYXJ0IDIgbmV0d29ya3MiLCIyIG5ldHdvcmtzIGFzc29jaWF0ZXMiLCJ0ZWNobm9sb2d5IGluYyBjb3B5cmlnaHQiLCIyMDAxIDIwMDMgbmV0d29ya3MiLCIyMDAzIG5ldHdvcmtzIGFzc29jaWF0ZXMiLCJ0ZWNobm9sb2d5IGluYyBhbGwiLCJvZiB0aGUgbmV0d29ya3MiLCJ0aGUgbmV0d29ya3MgYXNzb2NpYXRlcyIsInRlY2hub2xvZ3kgaW5jIG5vciIsImRhbWFnZSBwYXJ0IDMiLCJwYXJ0IDMgY2FtYnJpZGdlIiwiMyBjYW1icmlkZ2UgYnJvYWRiYW5kIiwiYnJvYWRiYW5kIGx0ZCBjb3B5cmlnaHQiLCJsdGQgY29weXJpZ2h0IG5vdGljZSIsIm5vdGljZSBic2QgcG9ydGlvbnMiLCJic2QgcG9ydGlvbnMgb2YiLCJ0aGlzIGNvZGUgYXJlIiwiY29kZSBhcmUgY29weXJpZ2h0IiwiMjAwMSAyMDAzIGNhbWJyaWRnZSIsIjIwMDMgY2FtYnJpZGdlIGJyb2FkYmFuZCIsImJyb2FkYmFuZCBsdGQgYWxsIiwibmFtZSBvZiBjYW1icmlkZ2UiLCJvZiBjYW1icmlkZ2UgYnJvYWRiYW5kIiwiYnJvYWRiYW5kIGx0ZCBtYXkiLCJsdGQgbWF5IG5vdCIsImRhbWFnZSBwYXJ0IDQiLCJwYXJ0IDQgc3VuIiwiNCBzdW4gbWljcm9zeXN0ZW1zIiwibWljcm9zeXN0ZW1zIGluYyBjb3B5cmlnaHQiLCJic2QgY29weXJpZ2h0IDIwMDMiLCJjb3B5cmlnaHQgMjAwMyBzdW4iLCIyMDAzIHN1biBtaWNyb3N5c3RlbXMiLCJtaWNyb3N5c3RlbXMgaW5jIDQxNTAiLCJpbmMgNDE1MCBuZXR3b3JrIiwiNDE1MCBuZXR3b3JrIGNpcmNsZSIsIm5ldHdvcmsgY2lyY2xlIHNhbnRhIiwiY2lyY2xlIHNhbnRhIGNsYXJhIiwiY2xhcmEgY2FsaWZvcm5pYSA5NTA1NCIsImNhbGlmb3JuaWEgOTUwNTQgdSIsIjk1MDU0IHUgcyIsImxpY2Vuc2UgdGVybXMgYmVsb3ciLCJ0ZXJtcyBiZWxvdyB0aGlzIiwiYmVsb3cgdGhpcyBkaXN0cmlidXRpb24iLCJkaXN0cmlidXRpb24gbWF5IGluY2x1ZGUiLCJtYXkgaW5jbHVkZSBtYXRlcmlhbHMiLCJpbmNsdWRlIG1hdGVyaWFscyBkZXZlbG9wZWQiLCJtYXRlcmlhbHMgZGV2ZWxvcGVkIGJ5IiwiZGV2ZWxvcGVkIGJ5IHRoaXJkIiwidGhpcmQgcGFydGllcyBzdW4iLCJwYXJ0aWVzIHN1biBzdW4iLCJzdW4gc3VuIG1pY3Jvc3lzdGVtcyIsInN1biBtaWNyb3N5c3RlbXMgdGhlIiwibWljcm9zeXN0ZW1zIHRoZSBzdW4iLCJ0aGUgc3VuIGxvZ28iLCJzdW4gbG9nbyBhbmQiLCJsb2dvIGFuZCBzb2xhcmlzIiwiYW5kIHNvbGFyaXMgYXJlIiwic29sYXJpcyBhcmUgdHJhZGVtYXJrcyIsImFyZSB0cmFkZW1hcmtzIG9yIiwidHJhZGVtYXJrcyBvciByZWdpc3RlcmVkIiwib3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIiwidHJhZGVtYXJrcyBvZiBzdW4iLCJtaWNyb3N5c3RlbXMgaW5jIGluIiwiaW5jIGluIHRoZSIsInMgYW5kIG90aGVyIiwib3RoZXIgY291bnRyaWVzIHJlZGlzdHJpYnV0aW9uIiwiY291bnRyaWVzIHJlZGlzdHJpYnV0aW9uIGFuZCIsIm9mIHRoZSBzdW4iLCJ0aGUgc3VuIG1pY3Jvc3lzdGVtcyIsIm1pY3Jvc3lzdGVtcyBpbmMgbm9yIiwiZGFtYWdlIHBhcnQgNSIsInBhcnQgNSBzcGFydGEiLCI1IHNwYXJ0YSBpbmMiLCJzcGFydGEgaW5jIGNvcHlyaWdodCIsImMgMjAwMyAyMDA5IiwiMjAwMyAyMDA5IHNwYXJ0YSIsIjIwMDkgc3BhcnRhIGluYyIsInNwYXJ0YSBpbmMgYWxsIiwibmFtZSBvZiBzcGFydGEiLCJvZiBzcGFydGEgaW5jIiwic3BhcnRhIGluYyBub3IiLCJkYW1hZ2UgcGFydCA2IiwicGFydCA2IGNpc2NvIiwiNiBjaXNjbyBidXB0bmljIiwiY2lzY28gYnVwdG5pYyBjb3B5cmlnaHQiLCJidXB0bmljIGNvcHlyaWdodCBub3RpY2UiLCJjIDIwMDQgY2lzY28iLCIyMDA0IGNpc2NvIGluYyIsImNpc2NvIGluYyBhbmQiLCJpbmMgYW5kIGluZm9ybWF0aW9uIiwiYW5kIGluZm9ybWF0aW9uIG5ldHdvcmsiLCJpbmZvcm1hdGlvbiBuZXR3b3JrIGNlbnRlciIsIm5ldHdvcmsgY2VudGVyIG9mIiwiY2VudGVyIG9mIGJlaWppbmciLCJvZiBiZWlqaW5nIHVuaXZlcnNpdHkiLCJhbmQgdGVsZWNvbW11bmljYXRpb25zIGFsbCIsInRlbGVjb21tdW5pY2F0aW9ucyBhbGwgcmlnaHRzIiwibmFtZSBvZiBjaXNjbyIsIm9mIGNpc2NvIGluYyIsImNpc2NvIGluYyBiZWlqaW5nIiwiaW5jIGJlaWppbmcgdW5pdmVyc2l0eSIsImFuZCB0ZWxlY29tbXVuaWNhdGlvbnMgbm9yIiwidGVsZWNvbW11bmljYXRpb25zIG5vciB0aGUiLCJkYW1hZ2UgcGFydCA3IiwicGFydCA3IGZhYmFzb2Z0IiwiNyBmYWJhc29mdCByIiwiY28ga2cgY29weXJpZ2h0Iiwia2cgY29weXJpZ2h0IG5vdGljZSIsImNvcHlyaWdodCBjIGZhYmFzb2Z0IiwiYyBmYWJhc29mdCByIiwiY28ga2cgMjAwMyIsImtnIDIwMDMgb3NzIiwiMjAwMyBvc3MgZmFiYXNvZnQiLCJvc3MgZmFiYXNvZnQgY29tIiwiZmFiYXNvZnQgY29tIGF1dGhvciIsImNvbSBhdXRob3IgYmVybmhhcmQiLCJhdXRob3IgYmVybmhhcmQgcGVueiIsImJlcm5oYXJkIHBlbnogcmVkaXN0cmlidXRpb24iLCJwZW56IHJlZGlzdHJpYnV0aW9uIGFuZCIsIm5hbWUgb2YgZmFiYXNvZnQiLCJvZiBmYWJhc29mdCByIiwiY28ga2cgb3IiLCJrZyBvciBhbnkiLCJpdHMgc3Vic2lkaWFyaWVzIGJyYW5kIiwic3Vic2lkaWFyaWVzIGJyYW5kIG9yIiwiYnJhbmQgb3IgcHJvZHVjdCIsInByb2R1Y3QgbmFtZXMgbWF5IiwibmFtZXMgbWF5IG5vdCIsImRhbWFnZSBwYXJ0IDgiLCJwYXJ0IDggYXBwbGUiLCI4IGFwcGxlIGluYyIsImFwcGxlIGluYyBjb3B5cmlnaHQiLCJjIDIwMDcgYXBwbGUiLCJuYW1lIG9mIGFwcGxlIiwib2YgYXBwbGUgaW5jIiwiaW5jIGFwcGxlIG5vciIsImFwcGxlIG5vciB0aGUiLCJieSBhcHBsZSBhbmQiLCJhcHBsZSBvciBpdHMiLCJkYW1hZ2UgcGFydCA5IiwicGFydCA5IHNjaWVuY2Vsb2dpYyIsIjkgc2NpZW5jZWxvZ2ljIGxsYyIsInNjaWVuY2Vsb2dpYyBsbGMgY29weXJpZ2h0IiwibGxjIGNvcHlyaWdodCBub3RpY2UiLCJjIDIwMDkgc2NpZW5jZWxvZ2ljIiwiMjAwOSBzY2llbmNlbG9naWMgbGxjIiwic2NpZW5jZWxvZ2ljIGxsYyBhbGwiLCJuYW1lIG9mIHNjaWVuY2Vsb2dpYyIsIm9mIHNjaWVuY2Vsb2dpYyBsbGMiLCJzY2llbmNlbG9naWMgbGxjIG5vciIsImxsYyBub3IgdGhlIiwicGFydCAxIGNtdSB1Y2QiLCIxIGNtdSB1Y2QgY29weXJpZ2h0IiwiY211IHVjZCBjb3B5cmlnaHQgbm90aWNlIiwidWNkIGNvcHlyaWdodCBub3RpY2UgYnNkIiwiY29weXJpZ2h0IG5vdGljZSBic2QgbGlrZSIsIm5vdGljZSBic2QgbGlrZSBjb3B5cmlnaHQiLCJic2QgbGlrZSBjb3B5cmlnaHQgMTk4OSIsImxpa2UgY29weXJpZ2h0IDE5ODkgMTk5MSIsImNvcHlyaWdodCAxOTg5IDE5OTEgMTk5MiIsIjE5ODkgMTk5MSAxOTkyIGJ5IiwiMTk5MSAxOTkyIGJ5IGNhcm5lZ2llIiwiMTk5MiBieSBjYXJuZWdpZSBtZWxsb24iLCJieSBjYXJuZWdpZSBtZWxsb24gdW5pdmVyc2l0eSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgMTk5My0yMDE0IFVuaXZlcnNpdHkgQ29ycG9yYXRpb24gZm9yIEF0bW9zcGhlcmljIFJlc2VhcmNoL1VuaWRhdGFcblxuUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGRldmVsb3BlZCBieSB0aGUgVW5pZGF0YSBQcm9ncmFtIGF0IHRoZSBVbml2ZXJzaXR5IENvcnBvcmF0aW9uIGZvciBBdG1vc3BoZXJpYyBSZXNlYXJjaC5cblxuQWNjZXNzIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBzaGFsbCBpbXBvc2UgdGhlIGZvbGxvd2luZyBvYmxpZ2F0aW9ucyBhbmQgdW5kZXJzdGFuZGluZ3Mgb24gdGhlIHVzZXIuIFRoZSB1c2VyIGlzIGdyYW50ZWQgdGhlIHJpZ2h0LCB3aXRob3V0IGFueSBmZWUgb3IgY29zdCwgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFsdGVyLCBlbmhhbmNlIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUsIGFuZCBhbnkgZGVyaXZhdGl2ZSB3b3JrcyB0aGVyZW9mLCBhbmQgaXRzIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2hhdHNvZXZlciwgcHJvdmlkZWQgdGhhdCB0aGlzIGVudGlyZSBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgZGVyaXZhdGl2ZSB3b3JrcyBhbmQgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBGdXJ0aGVyLCBVQ0FSIHJlcXVlc3RzIHRoYXQgdGhlIHVzZXIgY3JlZGl0IFVDQVIvVW5pZGF0YSBpbiBhbnkgcHVibGljYXRpb25zIHRoYXQgcmVzdWx0IGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlIG9yIGluIGFueSBwcm9kdWN0IHRoYXQgaW5jbHVkZXMgdGhpcyBzb2Z0d2FyZSwgYWx0aG91Z2ggdGhpcyBpcyBub3QgYW4gb2JsaWdhdGlvbi4gVGhlIG5hbWVzIFVDQVIgYW5kL29yIFVuaWRhdGEsIGhvd2V2ZXIsIG1heSBub3QgYmUgdXNlZCBpbiBhbnkgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBhbnkgcHJvZHVjdHMgb3IgY29tbWVyY2lhbCBlbnRpdHkgdW5sZXNzIHNwZWNpZmljIHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBvYnRhaW5lZCBmcm9tIFVDQVIvVW5pZGF0YS4gVGhlIHVzZXIgYWxzbyB1bmRlcnN0YW5kcyB0aGF0IFVDQVIvVW5pZGF0YSBpcyBub3Qgb2JsaWdhdGVkIHRvIHByb3ZpZGUgdGhlIHVzZXIgd2l0aCBhbnkgc3VwcG9ydCwgY29uc3VsdGluZywgdHJhaW5pbmcgb3IgYXNzaXN0YW5jZSBvZiBhbnkga2luZCB3aXRoIHJlZ2FyZCB0byB0aGUgdXNlLCBvcGVyYXRpb24gYW5kIHBlcmZvcm1hbmNlIG9mIHRoaXMgc29mdHdhcmUgbm9yIHRvIHByb3ZpZGUgdGhlIHVzZXIgd2l0aCBhbnkgdXBkYXRlcywgcmV2aXNpb25zLCBuZXcgdmVyc2lvbnMgb3IgXCJidWcgZml4ZXMuXCJcblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVQ0FSL1VOSURBVEEgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFVDQVIvVU5JREFUQSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgQUNDRVNTLCBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4iXSwibGljZW5zZUlkcyI6WyJOZXRDREYiXSwia2V5d29yZHMiOlsiY29weXJpZ2h0IDE5OTMgMjAxNCIsIjE5OTMgMjAxNCB1bml2ZXJzaXR5IiwiMjAxNCB1bml2ZXJzaXR5IGNvcnBvcmF0aW9uIiwiYXRtb3NwaGVyaWMgcmVzZWFyY2ggdW5pZGF0YSIsInJlc2VhcmNoIHVuaWRhdGEgcG9ydGlvbnMiLCJ1bmlkYXRhIHBvcnRpb25zIG9mIiwidGhpcyBzb2Z0d2FyZSB3ZXJlIiwic29mdHdhcmUgd2VyZSBkZXZlbG9wZWQiLCJ3ZXJlIGRldmVsb3BlZCBieSIsImJ5IHRoZSB1bmlkYXRhIiwidGhlIHVuaWRhdGEgcHJvZ3JhbSIsInVuaWRhdGEgcHJvZ3JhbSBhdCIsInByb2dyYW0gYXQgdGhlIiwidGhlIHVuaXZlcnNpdHkgY29ycG9yYXRpb24iLCJhdG1vc3BoZXJpYyByZXNlYXJjaCBhY2Nlc3MiLCJyZXNlYXJjaCBhY2Nlc3MgYW5kIiwiYWNjZXNzIGFuZCB1c2UiLCJzb2Z0d2FyZSBzaGFsbCBpbXBvc2UiLCJzaGFsbCBpbXBvc2UgdGhlIiwiaW1wb3NlIHRoZSBmb2xsb3dpbmciLCJ0aGUgZm9sbG93aW5nIG9ibGlnYXRpb25zIiwiZm9sbG93aW5nIG9ibGlnYXRpb25zIGFuZCIsIm9ibGlnYXRpb25zIGFuZCB1bmRlcnN0YW5kaW5ncyIsImFuZCB1bmRlcnN0YW5kaW5ncyBvbiIsInVuZGVyc3RhbmRpbmdzIG9uIHRoZSIsInRoZSB1c2VyIHRoZSIsInVzZXIgdGhlIHVzZXIiLCJ0aGUgdXNlciBpcyIsInVzZXIgaXMgZ3JhbnRlZCIsImlzIGdyYW50ZWQgdGhlIiwiZ3JhbnRlZCB0aGUgcmlnaHQiLCJ0aGUgcmlnaHQgd2l0aG91dCIsInJpZ2h0IHdpdGhvdXQgYW55Iiwid2l0aG91dCBhbnkgZmVlIiwiYW55IGZlZSBvciIsImZlZSBvciBjb3N0Iiwib3IgY29zdCB0byIsImNvc3QgdG8gdXNlIiwiY29weSBtb2RpZnkgYWx0ZXIiLCJtb2RpZnkgYWx0ZXIgZW5oYW5jZSIsImFsdGVyIGVuaGFuY2UgYW5kIiwiZW5oYW5jZSBhbmQgZGlzdHJpYnV0ZSIsInRoZXJlb2YgYW5kIGl0cyIsImFuZCBpdHMgc3VwcG9ydGluZyIsIml0cyBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24iLCJzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24gZm9yIiwicHVycG9zZSB3aGF0c29ldmVyIHByb3ZpZGVkIiwid2hhdHNvZXZlciBwcm92aWRlZCB0aGF0IiwiZW50aXJlIG5vdGljZSBhcHBlYXJzIiwic29mdHdhcmUgZGVyaXZhdGl2ZSB3b3JrcyIsIndvcmtzIGFuZCBzdXBwb3J0aW5nIiwiYW5kIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiIsInN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiBmdXJ0aGVyIiwiZG9jdW1lbnRhdGlvbiBmdXJ0aGVyIHVjYXIiLCJmdXJ0aGVyIHVjYXIgcmVxdWVzdHMiLCJ1Y2FyIHJlcXVlc3RzIHRoYXQiLCJyZXF1ZXN0cyB0aGF0IHRoZSIsInRoZSB1c2VyIGNyZWRpdCIsInVzZXIgY3JlZGl0IHVjYXIiLCJjcmVkaXQgdWNhciB1bmlkYXRhIiwidWNhciB1bmlkYXRhIGluIiwidW5pZGF0YSBpbiBhbnkiLCJpbiBhbnkgcHVibGljYXRpb25zIiwiYW55IHB1YmxpY2F0aW9ucyB0aGF0IiwicHVibGljYXRpb25zIHRoYXQgcmVzdWx0IiwiaW4gYW55IHByb2R1Y3QiLCJhbnkgcHJvZHVjdCB0aGF0IiwicHJvZHVjdCB0aGF0IGluY2x1ZGVzIiwidGhhdCBpbmNsdWRlcyB0aGlzIiwiaW5jbHVkZXMgdGhpcyBzb2Z0d2FyZSIsInRoaXMgc29mdHdhcmUgYWx0aG91Z2giLCJzb2Z0d2FyZSBhbHRob3VnaCB0aGlzIiwiYWx0aG91Z2ggdGhpcyBpcyIsIm5vdCBhbiBvYmxpZ2F0aW9uIiwiYW4gb2JsaWdhdGlvbiB0aGUiLCJvYmxpZ2F0aW9uIHRoZSBuYW1lcyIsInRoZSBuYW1lcyB1Y2FyIiwibmFtZXMgdWNhciBhbmQiLCJ1Y2FyIGFuZCBvciIsImFuZCBvciB1bmlkYXRhIiwib3IgdW5pZGF0YSBob3dldmVyIiwidW5pZGF0YSBob3dldmVyIG1heSIsImhvd2V2ZXIgbWF5IG5vdCIsIm9yIHB1YmxpY2l0eSB0byIsInB1YmxpY2l0eSB0byBlbmRvcnNlIiwib3IgcHJvbW90ZSBhbnkiLCJwcm9tb3RlIGFueSBwcm9kdWN0cyIsInByb2R1Y3RzIG9yIGNvbW1lcmNpYWwiLCJvciBjb21tZXJjaWFsIGVudGl0eSIsImNvbW1lcmNpYWwgZW50aXR5IHVubGVzcyIsImVudGl0eSB1bmxlc3Mgc3BlY2lmaWMiLCJ1bmxlc3Mgc3BlY2lmaWMgd3JpdHRlbiIsInBlcm1pc3Npb24gaXMgb2J0YWluZWQiLCJvYnRhaW5lZCBmcm9tIHVjYXIiLCJmcm9tIHVjYXIgdW5pZGF0YSIsInVjYXIgdW5pZGF0YSB0aGUiLCJ1bmlkYXRhIHRoZSB1c2VyIiwidGhlIHVzZXIgYWxzbyIsInVzZXIgYWxzbyB1bmRlcnN0YW5kcyIsImFsc28gdW5kZXJzdGFuZHMgdGhhdCIsInVuZGVyc3RhbmRzIHRoYXQgdWNhciIsInRoYXQgdWNhciB1bmlkYXRhIiwidWNhciB1bmlkYXRhIGlzIiwidW5pZGF0YSBpcyBub3QiLCJpcyBub3Qgb2JsaWdhdGVkIiwib2JsaWdhdGVkIHRvIHByb3ZpZGUiLCJ3aXRoIGFueSBzdXBwb3J0IiwiYW55IHN1cHBvcnQgY29uc3VsdGluZyIsInN1cHBvcnQgY29uc3VsdGluZyB0cmFpbmluZyIsImNvbnN1bHRpbmcgdHJhaW5pbmcgb3IiLCJ0cmFpbmluZyBvciBhc3Npc3RhbmNlIiwib3IgYXNzaXN0YW5jZSBvZiIsImFzc2lzdGFuY2Ugb2YgYW55IiwiYW55IGtpbmQgd2l0aCIsImtpbmQgd2l0aCByZWdhcmQiLCJ0aGUgdXNlIG9wZXJhdGlvbiIsInVzZSBvcGVyYXRpb24gYW5kIiwib3BlcmF0aW9uIGFuZCBwZXJmb3JtYW5jZSIsInNvZnR3YXJlIG5vciB0byIsIm5vciB0byBwcm92aWRlIiwid2l0aCBhbnkgdXBkYXRlcyIsImFueSB1cGRhdGVzIHJldmlzaW9ucyIsInVwZGF0ZXMgcmV2aXNpb25zIG5ldyIsInJldmlzaW9ucyBuZXcgdmVyc2lvbnMiLCJuZXcgdmVyc2lvbnMgb3IiLCJ2ZXJzaW9ucyBvciBidWciLCJvciBidWcgZml4ZXMiLCJidWcgZml4ZXMgdGhpcyIsImZpeGVzIHRoaXMgc29mdHdhcmUiLCJwcm92aWRlZCBieSB1Y2FyIiwiYnkgdWNhciB1bmlkYXRhIiwidWNhciB1bmlkYXRhIGFzIiwidW5pZGF0YSBhcyBpcyIsImV2ZW50IHNoYWxsIHVjYXIiLCJzaGFsbCB1Y2FyIHVuaWRhdGEiLCJ1Y2FyIHVuaWRhdGEgYmUiLCJ1bmlkYXRhIGJlIGxpYWJsZSIsIndpdGggdGhlIGFjY2VzcyIsInRoZSBhY2Nlc3MgdXNlIiwiYWNjZXNzIHVzZSBvciIsImNvcHlyaWdodCAxOTkzIDIwMTQgdW5pdmVyc2l0eSIsIjE5OTMgMjAxNCB1bml2ZXJzaXR5IGNvcnBvcmF0aW9uIiwiMjAxNCB1bml2ZXJzaXR5IGNvcnBvcmF0aW9uIGZvciIsImZvciBhdG1vc3BoZXJpYyByZXNlYXJjaCB1bmlkYXRhIiwiYXRtb3NwaGVyaWMgcmVzZWFyY2ggdW5pZGF0YSBwb3J0aW9ucyIsInJlc2VhcmNoIHVuaWRhdGEgcG9ydGlvbnMgb2YiLCJ1bmlkYXRhIHBvcnRpb25zIG9mIHRoaXMiLCJvZiB0aGlzIHNvZnR3YXJlIHdlcmUiLCJ0aGlzIHNvZnR3YXJlIHdlcmUgZGV2ZWxvcGVkIiwic29mdHdhcmUgd2VyZSBkZXZlbG9wZWQgYnkiLCJ3ZXJlIGRldmVsb3BlZCBieSB0aGUiLCJkZXZlbG9wZWQgYnkgdGhlIHVuaWRhdGEiLCJieSB0aGUgdW5pZGF0YSBwcm9ncmFtIiwidGhlIHVuaWRhdGEgcHJvZ3JhbSBhdCIsInVuaWRhdGEgcHJvZ3JhbSBhdCB0aGUiLCJwcm9ncmFtIGF0IHRoZSB1bml2ZXJzaXR5IiwiYXQgdGhlIHVuaXZlcnNpdHkgY29ycG9yYXRpb24iLCJ0aGUgdW5pdmVyc2l0eSBjb3Jwb3JhdGlvbiBmb3IiLCJmb3IgYXRtb3NwaGVyaWMgcmVzZWFyY2ggYWNjZXNzIiwiYXRtb3NwaGVyaWMgcmVzZWFyY2ggYWNjZXNzIGFuZCIsInJlc2VhcmNoIGFjY2VzcyBhbmQgdXNlIiwiYWNjZXNzIGFuZCB1c2Ugb2YiLCJvZiB0aGlzIHNvZnR3YXJlIHNoYWxsIiwidGhpcyBzb2Z0d2FyZSBzaGFsbCBpbXBvc2UiLCJzb2Z0d2FyZSBzaGFsbCBpbXBvc2UgdGhlIiwic2hhbGwgaW1wb3NlIHRoZSBmb2xsb3dpbmciLCJpbXBvc2UgdGhlIGZvbGxvd2luZyBvYmxpZ2F0aW9ucyIsInRoZSBmb2xsb3dpbmcgb2JsaWdhdGlvbnMgYW5kIiwiZm9sbG93aW5nIG9ibGlnYXRpb25zIGFuZCB1bmRlcnN0YW5kaW5ncyIsIm9ibGlnYXRpb25zIGFuZCB1bmRlcnN0YW5kaW5ncyBvbiIsImFuZCB1bmRlcnN0YW5kaW5ncyBvbiB0aGUiLCJ1bmRlcnN0YW5kaW5ncyBvbiB0aGUgdXNlciIsIm9uIHRoZSB1c2VyIHRoZSIsInRoZSB1c2VyIHRoZSB1c2VyIiwidXNlciB0aGUgdXNlciBpcyIsInRoZSB1c2VyIGlzIGdyYW50ZWQiLCJ1c2VyIGlzIGdyYW50ZWQgdGhlIiwiaXMgZ3JhbnRlZCB0aGUgcmlnaHQiLCJncmFudGVkIHRoZSByaWdodCB3aXRob3V0IiwidGhlIHJpZ2h0IHdpdGhvdXQgYW55IiwicmlnaHQgd2l0aG91dCBhbnkgZmVlIiwid2l0aG91dCBhbnkgZmVlIG9yIiwiYW55IGZlZSBvciBjb3N0IiwiZmVlIG9yIGNvc3QgdG8iLCJvciBjb3N0IHRvIHVzZSIsImNvc3QgdG8gdXNlIGNvcHkiLCJ1c2UgY29weSBtb2RpZnkgYWx0ZXIiLCJjb3B5IG1vZGlmeSBhbHRlciBlbmhhbmNlIiwibW9kaWZ5IGFsdGVyIGVuaGFuY2UgYW5kIiwiYWx0ZXIgZW5oYW5jZSBhbmQgZGlzdHJpYnV0ZSIsImVuaGFuY2UgYW5kIGRpc3RyaWJ1dGUgdGhpcyIsInNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZSIsImFueSBkZXJpdmF0aXZlIHdvcmtzIHRoZXJlb2YiLCJ3b3JrcyB0aGVyZW9mIGFuZCBpdHMiLCJ0aGVyZW9mIGFuZCBpdHMgc3VwcG9ydGluZyIsImFuZCBpdHMgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIiwiaXRzIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiBmb3IiLCJzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSIsImFueSBwdXJwb3NlIHdoYXRzb2V2ZXIgcHJvdmlkZWQiLCJwdXJwb3NlIHdoYXRzb2V2ZXIgcHJvdmlkZWQgdGhhdCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgMTk4OS0tMjAwNCBieSBIdW50ZXIgR29hdGxleS5cblxuUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2Ugb24gYW55IGNvbXB1dGVyIHN5c3RlbSwgYW5kIHRvIHJlZGlzdHJpYnV0ZSBpdCBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG5cbiAgIDEuIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuXG4gICAyLiBBbHRlcmVkIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4iXSwibGljZW5zZUlkcyI6WyJOZXdzbGV0ciJdLCJrZXl3b3JkcyI6WyJjb3B5cmlnaHQgMTk4OSAyMDA0IiwiMTk4OSAyMDA0IGJ5IiwiMjAwNCBieSBodW50ZXIiLCJieSBodW50ZXIgZ29hdGxleSIsImh1bnRlciBnb2F0bGV5IHBlcm1pc3Npb24iLCJnb2F0bGV5IHBlcm1pc3Npb24gaXMiLCJyZXN0cmljdGlvbnMgMSB0aGlzIiwiMSB0aGlzIHNvZnR3YXJlIiwicGFydGljdWxhciBwdXJwb3NlIDIiLCJwdXJwb3NlIDIgYWx0ZXJlZCIsImNvcHlyaWdodCAxOTg5IDIwMDQgYnkiLCIxOTg5IDIwMDQgYnkgaHVudGVyIiwiMjAwNCBieSBodW50ZXIgZ29hdGxleSIsImJ5IGh1bnRlciBnb2F0bGV5IHBlcm1pc3Npb24iLCJodW50ZXIgZ29hdGxleSBwZXJtaXNzaW9uIGlzIiwiZ29hdGxleSBwZXJtaXNzaW9uIGlzIGdyYW50ZWQiLCJmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIDEgdGhpcyIsInJlc3RyaWN0aW9ucyAxIHRoaXMgc29mdHdhcmUiLCIxIHRoaXMgc29mdHdhcmUgaXMiLCJhIHBhcnRpY3VsYXIgcHVycG9zZSAyIiwicGFydGljdWxhciBwdXJwb3NlIDIgYWx0ZXJlZCIsInB1cnBvc2UgMiBhbHRlcmVkIHZlcnNpb25zIiwiY29weXJpZ2h0IDE5ODkgMjAwNCBieSBodW50ZXIiLCIxOTg5IDIwMDQgYnkgaHVudGVyIGdvYXRsZXkiLCIyMDA0IGJ5IGh1bnRlciBnb2F0bGV5IHBlcm1pc3Npb24iLCJieSBodW50ZXIgZ29hdGxleSBwZXJtaXNzaW9uIGlzIiwiaHVudGVyIGdvYXRsZXkgcGVybWlzc2lvbiBpcyBncmFudGVkIiwiZ29hdGxleSBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8iLCJ0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyAxIHRoaXMiLCJmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIDEgdGhpcyBzb2Z0d2FyZSIsInJlc3RyaWN0aW9ucyAxIHRoaXMgc29mdHdhcmUgaXMiLCIxIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQiLCJmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgMiIsImEgcGFydGljdWxhciBwdXJwb3NlIDIgYWx0ZXJlZCIsInBhcnRpY3VsYXIgcHVycG9zZSAyIGFsdGVyZWQgdmVyc2lvbnMiLCJwdXJwb3NlIDIgYWx0ZXJlZCB2ZXJzaW9ucyBtdXN0Il19LHsibGljZW5zZVRleHRzIjpbIk5va2lhIE9wZW4gU291cmNlIExpY2Vuc2UgKE5PS09TIExpY2Vuc2UpXG5cblZlcnNpb24gMS4wYSAxLiBERUZJTklUSU9OUy5cblxuXCJBZmZpbGlhdGVzXCIgb2YgYSBwYXJ0eSBzaGFsbCBtZWFuIGFuIGVudGl0eVxuXG4gICBhKSB3aGljaCBpcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGNvbnRyb2xsaW5nIHN1Y2ggcGFydHk7XG5cbiAgIGIpIHdoaWNoIGlzIHVuZGVyIHRoZSBzYW1lIGRpcmVjdCBvciBpbmRpcmVjdCBvd25lcnNoaXAgb3IgY29udHJvbCBhcyBzdWNoIHBhcnR5OyBvclxuXG4gICBjKSB3aGljaCBpcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgc3VjaCBwYXJ0eS5cblxuRm9yIHRoZXNlIHB1cnBvc2VzLCBhbiBlbnRpdHkgc2hhbGwgYmUgdHJlYXRlZCBhcyBiZWluZyBjb250cm9sbGVkIGJ5IGFub3RoZXIgaWYgdGhhdCBvdGhlciBlbnRpdHkgaGFzIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgdm90ZXMgaW4gc3VjaCBlbnRpdHksIGlzIGFibGUgdG8gZGlyZWN0IGl0cyBhZmZhaXJzIGFuZC9vciB0byBjb250cm9sIHRoZSBjb21wb3NpdGlvbiBvZiBpdHMgYm9hcmQgb2YgZGlyZWN0b3JzIG9yIGVxdWl2YWxlbnQgYm9keS5cblxuXCJDb21tZXJjaWFsIFVzZVwiIHNoYWxsIG1lYW4gZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuXG5cblwiQ29udHJpYnV0b3JcIiBzaGFsbCBtZWFuIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy5cblxuXCJDb250cmlidXRvciBWZXJzaW9uXCIgc2hhbGwgbWVhbiBpbiBjYXNlIG9mIGFueSBDb250cmlidXRvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yIGFuZCBpbiBjYXNlIG9mIE5va2lhIGluIGFkZGl0aW9uIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBpbiBhbnkgZm9ybSwgaW5jbHVkaW5nIHRoZSBmb3JtIGFzIEV4Y2V1dGFibGUuXG5cblwiQ292ZXJlZCBTb2Z0d2FyZVwiIHNoYWxsIG1lYW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLlxuXG5cIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbVwiIHNoYWxsIG1lYW4gYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuXG5cblwiRXhlY3V0YWJsZVwiIHNoYWxsIG1lYW4gQ292ZXJlZCBTb2Z0d2FyZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLlxuXG5cIk5va2lhXCIgc2hhbGwgbWVhbiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXRzIEFmZmlsaWF0ZXMuXG5cblwiTGFyZ2VyIFdvcmtcIiBzaGFsbCBtZWFuIGEgd29yaywgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBTb2Z0d2FyZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuXCJMaWNlbnNlXCIgc2hhbGwgbWVhbiB0aGlzIGRvY3VtZW50LlxuXG5cIkxpY2Vuc2FibGVcIiBzaGFsbCBtZWFuIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLlxuXG5cIk1vZGlmaWNhdGlvbnNcIiBzaGFsbCBtZWFuIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgU29mdHdhcmUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBTb2Z0d2FyZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6XG5cbiAgIGEpIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBTb2Z0d2FyZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICBiKSBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy5cblxuXCJPcmlnaW5hbCBTb2Z0d2FyZVwiIHNoYWxsIG1lYW4gdGhlIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIFNvZnR3YXJlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIFNvZnR3YXJlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS5cblxuXCJQYXRlbnQgQ2xhaW1zXCIgc2hhbGwgbWVhbiBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci5cblxuXCJTb3VyY2UgQ29kZVwiIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgU29mdHdhcmUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBTb2Z0d2FyZSBvZiB0aGUgQ29udHJpYnV0b3IncyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuXG5cblwiWW91XCIgKG9yIFwiWW91clwiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgQWZmaWxpYXRlcyBvZiBzdWNoIGVudGl0eS4gMi4gU09VUkNFIENPREUgTElDRU5TRS5cblxuICAgMi4xIE5va2lhIEdyYW50LlxuXG4gICBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIE5va2lhIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgYSkgdW5kZXIgY29weXJpZ2h0cyBMaWNlbnNhYmxlIGJ5IE5va2lhIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yaztcblxuICAgICAgYikgYW5kIHVuZGVyIFBhdGVudHMgQ2xhaW1zIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIFNvZnR3YXJlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuXG5cbiAgICAgIGMpIFRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIE5va2lhIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIFNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIFNvZnR3YXJlOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuXG5cbiAgIDIuMiBDb250cmlidXRvciBHcmFudC5cblxuICAgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZVxuXG4gICAgICBhKSB1bmRlciBjb3B5cmlnaHRzIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIFNvZnR3YXJlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZFxuXG4gICAgICBiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLlxuXG4gICAgICBjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLlxuXG4gICAgICBkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgU29mdHdhcmUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuIDMuIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUy5cblxuICAgMy4xIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuXG5cbiAgIFRoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgU29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS5cblxuICAgMy4yIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS5cblxuICAgQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuXG5cbiAgIDMuMyBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLlxuXG4gICBZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBTb2Z0d2FyZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIFNvZnR3YXJlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBTb2Z0d2FyZSBwcm92aWRlZCBieSBOb2tpYSBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIE5va2lhIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZS5cblxuICAgMy40IEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzXG5cbiAgICAgIChhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuIElmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSdzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgXCJMRUdBTFwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgU29mdHdhcmUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLlxuXG4gICAgICAoYikgQ29udHJpYnV0b3IgQVBJcy4gSWYgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLlxuXG4gICAgICAoYykgUmVwcmVzZW50YXRpb25zLiBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcidzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgIDMuNSBSZXF1aXJlZCBOb3RpY2VzLlxuXG4gICBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgU29mdHdhcmUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIFNvZnR3YXJlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiBOb2tpYSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSBOb2tpYSBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgTm9raWEgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuXG5cbiAgIDMuNiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy5cblxuICAgWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgU29mdHdhcmUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIFNvZnR3YXJlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIFNvZnR3YXJlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IE5va2lhIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgTm9raWEgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IE5va2lhIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLlxuXG4gICAzLjcgTGFyZ2VyIFdvcmtzLlxuXG4gICBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb3RoZXIgc29mdHdhcmUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgU29mdHdhcmUuIDQuIElOQUJJTElUWSBUTyBDT01QTFkgRFVFIFRPIFNUQVRVVEUgT1IgUkVHVUxBVElPTi5cblxuSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuXG5cbkV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuIDUuIEFQUExJQ0FUSU9OIE9GIFRISVMgTElDRU5TRS5cblxuVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCBOb2tpYSBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBTb2Z0d2FyZS4gNi4gVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UuXG5cbiAgIDYuMSBOZXcgVmVyc2lvbnMuXG5cbiAgIE5va2lhIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci5cblxuICAgNi4yIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuXG5cbiAgIE9uY2UgQ292ZXJlZCBTb2Z0d2FyZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IE5va2lhLiBObyBvbmUgb3RoZXIgdGhhbiBOb2tpYSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIFNvZnR3YXJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiA3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLlxuXG5DT1ZFUkVEIFNPRlRXQVJFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBTT0ZUV0FSRSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBTT0ZUV0FSRSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIFNPRlRXQVJFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgTk9LSUEsIElUUyBMSUNFTlNPUlMgT1IgQUZGSUxJQVRFUyBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBTT0ZUV0FSRSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLiA4LiBURVJNSU5BVElPTi5cblxuICAgOC4xIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuXG5cbiAgIDguMiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgTm9raWEgb3IgYSBDb250cmlidXRvciAoTm9raWEgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzIFwiUGFydGljaXBhbnRcIikgYWxsZWdpbmcgdGhhdDpcblxuICAgICAgYSkgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLlxuXG4gICAgICBiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC5cblxuICAgOC4zIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuXG5cbiAgIDguNCBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uIDkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLlxuXG5VTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIE5PS0lBLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIFNPRlRXQVJFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgQlVUIE1BWSBBTExPVyBMSUFCSUxJVFkgVE8gQkUgTElNSVRFRDsgSU4gU1VDSCBDQVNFUywgQSBQQVJUWSdzLCBJVFMgRU1QTE9ZRUVTLCBMSUNFTlNPUlMgT1IgQUZGSUxJQVRFUycgTElBQklMSVRZIFNIQUxMIEJFIExJTUlURUQgVE8gVS5TLiAkNTAuIE5vdGhpbmcgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBzaGFsbCBwcmVqdWRpY2UgdGhlIHN0YXR1dG9yeSByaWdodHMgb2YgYW55IHBhcnR5IGRlYWxpbmcgYXMgYSBjb25zdW1lci4gMTAuIE1JU0NFTExBTkVPVVMuXG5cblRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIEFsbCByaWdodHMgaW4gdGhlIENvdmVyZWQgU29mdHdhcmUgbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgcmVzZXJ2ZWQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGdyYW50IFlvdSBhbnkgcmlnaHRzIHRvIHVzZSBhbnkgb2YgdGhlIHRyYWRlbWFya3Mgb2YgTm9raWEgb3IgYW55IG9mIGl0cyBBZmZpbGlhdGVzLCBldmVuIGlmIGFueSBvZiBzdWNoIHRyYWRlbWFya3MgYXJlIGluY2x1ZGVkIGluIGFueSBwYXJ0IG9mIENvdmVyZWQgU29mdHdhcmUgYW5kL29yIGRvY3VtZW50YXRpb24gdG8gaXQuXG5cblRoaXMgTGljZW5zZSBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiBGaW5sYW5kIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIEFsbCBkaXNwdXRlcyBhcmlzaW5nIGZyb20gb3IgcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc2V0dGxlZCBieSBhIHNpbmdsZSBhcmJpdHJhdG9yIGFwcG9pbnRlZCBieSB0aGUgQ2VudHJhbCBDaGFtYmVyIG9mIENvbW1lcmNlIG9mIEZpbmxhbmQuIFRoZSBhcmJpdHJhdGlvbiBwcm9jZWR1cmUgc2hhbGwgdGFrZSBwbGFjZSBpbiBIZWxzaW5raSwgRmlubGFuZCBpbiB0aGUgRW5nbGlzaCBsYW5ndWFnZS4gSWYgYW55IHBhcnQgb2YgdGhpcyBBZ3JlZW1lbnQgaXMgZm91bmQgdm9pZCBhbmQgdW5lbmZvcmNlYWJsZSwgaXQgd2lsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGUgYmFsYW5jZSBvZiB0aGUgQWdyZWVtZW50LCB3aGljaCBzaGFsbCByZW1haW4gdmFsaWQgYW5kIGVuZm9yY2VhYmxlIGFjY29yZGluZyB0byBpdHMgdGVybXMuIDExLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLlxuXG5BcyBiZXR3ZWVuIE5va2lhIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIE5va2lhIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuIEVYSElCSVQgQVxuXG5UaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBOT0tPUyBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5cblNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cblRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBpc1xuXG5fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy5cblxuQ29weXJpZ2h0IMKpIFx1MDAzY3llYXJcdTAwM2UgTm9raWEgYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLiJdLCJsaWNlbnNlSWRzIjpbIk5va2lhIl0sImtleXdvcmRzIjpbInNvdXJjZSBsaWNlbnNlIG5va29zIiwibGljZW5zZSBub2tvcyBsaWNlbnNlIiwiMSAwYSAxIiwiMGEgMSBkZWZpbml0aW9ucyIsIjEgZGVmaW5pdGlvbnMgYWZmaWxpYXRlcyIsImRlZmluaXRpb25zIGFmZmlsaWF0ZXMgb2YiLCJhZmZpbGlhdGVzIG9mIGEiLCJhIHBhcnR5IHNoYWxsIiwicGFydHkgc2hhbGwgbWVhbiIsIm1lYW4gYW4gZW50aXR5IiwiYW4gZW50aXR5IGEiLCJlbnRpdHkgYSB3aGljaCIsImluZGlyZWN0bHkgY29udHJvbGxpbmcgc3VjaCIsImNvbnRyb2xsaW5nIHN1Y2ggcGFydHkiLCJzdWNoIHBhcnR5IGIiLCJwYXJ0eSBiIHdoaWNoIiwiYiB3aGljaCBpcyIsIndoaWNoIGlzIHVuZGVyIiwiaXMgdW5kZXIgdGhlIiwidGhlIHNhbWUgZGlyZWN0Iiwic2FtZSBkaXJlY3Qgb3IiLCJpbmRpcmVjdCBvd25lcnNoaXAgb3IiLCJvd25lcnNoaXAgb3IgY29udHJvbCIsIm9yIGNvbnRyb2wgYXMiLCJjb250cm9sIGFzIHN1Y2giLCJhcyBzdWNoIHBhcnR5IiwicGFydHkgb3IgYyIsIm9yIGMgd2hpY2giLCJjIHdoaWNoIGlzIiwib3IgaW5kaXJlY3RseSBvd25lZCIsImluZGlyZWN0bHkgb3duZWQgb3IiLCJieSBzdWNoIHBhcnR5Iiwic3VjaCBwYXJ0eSBmb3IiLCJwYXJ0eSBmb3IgdGhlc2UiLCJ0aGVzZSBwdXJwb3NlcyBhbiIsInB1cnBvc2VzIGFuIGVudGl0eSIsImFuIGVudGl0eSBzaGFsbCIsImFzIGJlaW5nIGNvbnRyb2xsZWQiLCJiZWluZyBjb250cm9sbGVkIGJ5IiwiY29udHJvbGxlZCBieSBhbm90aGVyIiwiYnkgYW5vdGhlciBpZiIsImFub3RoZXIgaWYgdGhhdCIsImlmIHRoYXQgb3RoZXIiLCJ0aGF0IG90aGVyIGVudGl0eSIsIm90aGVyIGVudGl0eSBoYXMiLCJlbnRpdHkgaGFzIGZpZnR5IiwiaGFzIGZpZnR5IHBlcmNlbnQiLCJvZiB0aGUgdm90ZXMiLCJ0aGUgdm90ZXMgaW4iLCJ2b3RlcyBpbiBzdWNoIiwiaW4gc3VjaCBlbnRpdHkiLCJzdWNoIGVudGl0eSBpcyIsImVudGl0eSBpcyBhYmxlIiwiYWJsZSB0byBkaXJlY3QiLCJkaXJlY3QgaXRzIGFmZmFpcnMiLCJpdHMgYWZmYWlycyBhbmQiLCJhZmZhaXJzIGFuZCBvciIsImFuZCBvciB0byIsIm9yIHRvIGNvbnRyb2wiLCJjb250cm9sIHRoZSBjb21wb3NpdGlvbiIsInRoZSBjb21wb3NpdGlvbiBvZiIsImNvbXBvc2l0aW9uIG9mIGl0cyIsIm9mIGl0cyBib2FyZCIsIml0cyBib2FyZCBvZiIsImJvYXJkIG9mIGRpcmVjdG9ycyIsIm9mIGRpcmVjdG9ycyBvciIsImRpcmVjdG9ycyBvciBlcXVpdmFsZW50Iiwib3IgZXF1aXZhbGVudCBib2R5IiwiZXF1aXZhbGVudCBib2R5IGNvbW1lcmNpYWwiLCJib2R5IGNvbW1lcmNpYWwgdXNlIiwiY29tbWVyY2lhbCB1c2Ugc2hhbGwiLCJzaGFsbCBtZWFuIGRpc3RyaWJ1dGlvbiIsIm1lYW4gZGlzdHJpYnV0aW9uIG9yIiwidGhpcmQgcGFydHkgY29udHJpYnV0b3IiLCJwYXJ0eSBjb250cmlidXRvciBzaGFsbCIsInNoYWxsIG1lYW4gZWFjaCIsIm1lYW4gZWFjaCBlbnRpdHkiLCJvZiBtb2RpZmljYXRpb25zIGNvbnRyaWJ1dG9yIiwibW9kaWZpY2F0aW9ucyBjb250cmlidXRvciB2ZXJzaW9uIiwiY29udHJpYnV0b3IgdmVyc2lvbiBzaGFsbCIsInZlcnNpb24gc2hhbGwgbWVhbiIsInNoYWxsIG1lYW4gaW4iLCJtZWFuIGluIGNhc2UiLCJhbnkgY29udHJpYnV0b3IgdGhlIiwiY29udHJpYnV0b3IgdGhlIGNvbWJpbmF0aW9uIiwicGFydGljdWxhciBjb250cmlidXRvciBhbmQiLCJjb250cmlidXRvciBhbmQgaW4iLCJhbmQgaW4gY2FzZSIsImNhc2Ugb2Ygbm9raWEiLCJub2tpYSBpbiBhZGRpdGlvbiIsImFkZGl0aW9uIHRoZSBvcmlnaW5hbCIsIm9yaWdpbmFsIHNvZnR3YXJlIGluIiwiYW55IGZvcm0gaW5jbHVkaW5nIiwiZm9ybSBpbmNsdWRpbmcgdGhlIiwiaW5jbHVkaW5nIHRoZSBmb3JtIiwidGhlIGZvcm0gYXMiLCJmb3JtIGFzIGV4Y2V1dGFibGUiLCJhcyBleGNldXRhYmxlIGNvdmVyZWQiLCJleGNldXRhYmxlIGNvdmVyZWQgc29mdHdhcmUiLCJjb3ZlcmVkIHNvZnR3YXJlIHNoYWxsIiwibWVhbiB0aGUgb3JpZ2luYWwiLCJwb3J0aW9ucyB0aGVyZW9mIGVsZWN0cm9uaWMiLCJ0aGVyZW9mIGVsZWN0cm9uaWMgZGlzdHJpYnV0aW9uIiwiZGlzdHJpYnV0aW9uIG1lY2hhbmlzbSBzaGFsbCIsIm1lY2hhbmlzbSBzaGFsbCBtZWFuIiwibWVhbiBhIG1lY2hhbmlzbSIsIm9mIGRhdGEgZXhlY3V0YWJsZSIsImRhdGEgZXhlY3V0YWJsZSBzaGFsbCIsImV4ZWN1dGFibGUgc2hhbGwgbWVhbiIsInNoYWxsIG1lYW4gY292ZXJlZCIsIm1lYW4gY292ZXJlZCBzb2Z0d2FyZSIsInNvdXJjZSBjb2RlIG5va2lhIiwiY29kZSBub2tpYSBzaGFsbCIsIm5va2lhIHNoYWxsIG1lYW4iLCJzaGFsbCBtZWFuIG5va2lhIiwibWVhbiBub2tpYSBjb3Jwb3JhdGlvbiIsIm5va2lhIGNvcnBvcmF0aW9uIGFuZCIsImNvcnBvcmF0aW9uIGFuZCBpdHMiLCJhbmQgaXRzIGFmZmlsaWF0ZXMiLCJpdHMgYWZmaWxpYXRlcyBsYXJnZXIiLCJhZmZpbGlhdGVzIGxhcmdlciB3b3JrIiwibGFyZ2VyIHdvcmsgc2hhbGwiLCJtZWFuIGEgd29yayIsImxpY2Vuc2UgbGljZW5zZSBzaGFsbCIsInNoYWxsIG1lYW4gdGhpcyIsIm1lYW4gdGhpcyBkb2N1bWVudCIsInRoaXMgZG9jdW1lbnQgbGljZW5zYWJsZSIsImRvY3VtZW50IGxpY2Vuc2FibGUgc2hhbGwiLCJsaWNlbnNhYmxlIHNoYWxsIG1lYW4iLCJzaGFsbCBtZWFuIGhhdmluZyIsIm1lYW4gaGF2aW5nIHRoZSIsImNvbnZleWVkIGhlcmVpbiBtb2RpZmljYXRpb25zIiwiaGVyZWluIG1vZGlmaWNhdGlvbnMgc2hhbGwiLCJtb2RpZmljYXRpb25zIHNoYWxsIG1lYW4iLCJ3aGVuIGNvdmVyZWQgc29mdHdhcmUiLCJwcmV2aW91cyBtb2RpZmljYXRpb25zIG9yaWdpbmFsIiwibW9kaWZpY2F0aW9ucyBvcmlnaW5hbCBzb2Z0d2FyZSIsIm9yaWdpbmFsIHNvZnR3YXJlIHNoYWxsIiwibWVhbiB0aGUgc291cmNlIiwiYXMgb3JpZ2luYWwgc29mdHdhcmUiLCJzb2Z0d2FyZSBhbmQgd2hpY2giLCJhbHJlYWR5IGNvdmVyZWQgc29mdHdhcmUiLCJjb3ZlcmVkIHNvZnR3YXJlIGdvdmVybmVkIiwibGljZW5zZSBwYXRlbnQgY2xhaW1zIiwicGF0ZW50IGNsYWltcyBzaGFsbCIsImNsYWltcyBzaGFsbCBtZWFuIiwibWVhbiBhbnkgcGF0ZW50IiwiYnkgZ3JhbnRvciBzb3VyY2UiLCJncmFudG9yIHNvdXJjZSBjb2RlIiwiY29kZSBzaGFsbCBtZWFuIiwiY292ZXJlZCBzb2Z0d2FyZSBmb3IiLCJzb2Z0d2FyZSBmb3IgbWFraW5nIiwic29mdHdhcmUgb3IgYW5vdGhlciIsImF2YWlsYWJsZSBjb3ZlcmVkIHNvZnR3YXJlIiwibm8gY2hhcmdlIHlvdSIsImNoYXJnZSB5b3Ugb3IiLCJ5b3UgaW5jbHVkZXMgYWZmaWxpYXRlcyIsImluY2x1ZGVzIGFmZmlsaWF0ZXMgb2YiLCJhZmZpbGlhdGVzIG9mIHN1Y2giLCIyIDEgbm9raWEiLCIxIG5va2lhIGdyYW50Iiwibm9raWEgZ3JhbnQgc3ViamVjdCIsInRoaXMgbGljZW5zZSBub2tpYSIsImxpY2Vuc2Ugbm9raWEgaGVyZWJ5Iiwibm9raWEgaGVyZWJ5IGdyYW50cyIsImxpY2Vuc2FibGUgYnkgbm9raWEiLCJieSBub2tpYSB0byIsIm5va2lhIHRvIHVzZSIsIndvcmsgYiBhbmQiLCJiIGFuZCB1bmRlciIsImFuZCB1bmRlciBwYXRlbnRzIiwicGF0ZW50cyBjbGFpbXMgbmVjZXNzYXJpbHkiLCJ0aGUgZGF0ZSBub2tpYSIsImRhdGUgbm9raWEgZmlyc3QiLCJub2tpYSBmaXJzdCBkaXN0cmlidXRlcyIsImRpc3RyaWJ1dGVzIG9yaWdpbmFsIHNvZnR3YXJlIiwib3JpZ2luYWwgc29mdHdhcmUgMiIsInNvZnR3YXJlIDIgc2VwYXJhdGUiLCJzb2Z0d2FyZSBvciAzIiwicGF0ZW50IGNsYWltcyBuZWNlc3NhcmlseSIsImNvdmVyZWQgc29mdHdhcmUgZCIsInNvZnR3YXJlIGQgbm90d2l0aHN0YW5kaW5nIiwiY292ZXJlZCBzb2Z0d2FyZSBtYXkiLCJhbGwgY292ZXJlZCBzb2Z0d2FyZSIsImNvdmVyZWQgc29mdHdhcmUgdG8iLCJwcm92aWRlZCBieSBub2tpYSIsImJ5IG5va2lhIGFuZCIsIm5va2lhIGFuZCBpbmNsdWRpbmciLCJuYW1lIG9mIG5va2lhIiwibm9raWEgaW4gYSIsImNvdmVyZWQgc29mdHdhcmUgMyIsInNvZnR3YXJlIDMgNCIsInNvZnR3YXJlIHRoYXQgbmV3IiwiYmVoYWxmIG9mIG5va2lhIiwic29mdHdhcmUgYW5kIGlmIiwic29mdHdhcmUgaXMgYXZhaWxhYmxlIiwic29mdHdhcmUgb3Igb3duZXJzaGlwIiwibm90IGJ5IG5va2lhIiwib3RoZXIgc29mdHdhcmUgbm90Iiwic29mdHdhcmUgNCBpbmFiaWxpdHkiXX0seyJsaWNlbnNlVGV4dHMiOlsiTm93ZWIgaXMgY29weXJpZ2h0IDE5ODktMjAwMCBieSBOb3JtYW4gUmFtc2V5LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5Ob3dlYiBpcyBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0LiBJdCBpcyBub3QgcHVibGljLWRvbWFpbiBzb2Z0d2FyZSBvciBzaGFyZXdhcmUsIGFuZCBpdCBpcyBub3QgcHJvdGVjdGVkIGJ5IGEgYGBjb3B5bGVmdCcnIGFncmVlbWVudCBsaWtlIHRoZSBvbmUgdXNlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLlxuXG5Ob3dlYiBpcyBhdmFpbGFibGUgZnJlZSBmb3IgYW55IHVzZSBpbiBhbnkgZmllbGQgb2YgZW5kZWF2b3IuIFlvdSBtYXkgcmVkaXN0cmlidXRlIG5vd2ViIGluIHdob2xlIG9yIGluIHBhcnQgcHJvdmlkZWQgeW91IGFja25vd2xlZGdlIGl0cyBzb3VyY2UgYW5kIGluY2x1ZGUgdGhpcyBDT1BZUklHSFQgZmlsZS4gWW91IG1heSBtb2RpZnkgbm93ZWIgYW5kIGNyZWF0ZSBkZXJpdmVkIHdvcmtzLCBwcm92aWRlZCB5b3UgcmV0YWluIHRoaXMgY29weXJpZ2h0IG5vdGljZSwgYnV0IHRoZSByZXN1bHQgbWF5IG5vdCBiZSBjYWxsZWQgbm93ZWIgd2l0aG91dCBteSB3cml0dGVuIGNvbnNlbnQuXG5cbllvdSBtYXkgc2VsbCBub3dlYiBpZiB5b3Ugd2lzaC4gRm9yIGV4YW1wbGUsIHlvdSBtYXkgc2VsbCBhIENELVJPTSBpbmNsdWRpbmcgbm93ZWIuXG5cbllvdSBtYXkgc2VsbCBhIGRlcml2ZWQgd29yaywgcHJvdmlkZWQgdGhhdCBhbGwgc291cmNlIGNvZGUgZm9yIHlvdXIgZGVyaXZlZCB3b3JrIGlzIGF2YWlsYWJsZSwgYXQgbm8gYWRkaXRpb25hbCBjaGFyZ2UsIHRvIGFueW9uZSB3aG8gYnV5cyB5b3VyIGRlcml2ZWQgd29yayBpbiBhbnkgZm9ybS4gWW91IG11c3QgZ2l2ZSBwZXJtaXNzb24gZm9yIHNhaWQgc291cmNlIGNvZGUgdG8gYmUgdXNlZCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZS4gWW91IG11c3Qgc3RhdGUgY2xlYXJseSB0aGF0IHlvdXIgd29yayB1c2VzIG9yIGlzIGJhc2VkIG9uIG5vd2ViIGFuZCB0aGF0IG5vd2ViIGlzIGF2YWlsYWJsZSBmcmVlIG9mIGNoYW5nZS4gWW91IG11c3QgYWxzbyByZXF1ZXN0IHRoYXQgYnVnIHJlcG9ydHMgb24geW91ciB3b3JrIGJlIHJlcG9ydGVkIHRvIHlvdS4iXSwibGljZW5zZUlkcyI6WyJOb3dlYiJdLCJrZXl3b3JkcyI6WyJub3dlYiBpcyBjb3B5cmlnaHQiLCJpcyBjb3B5cmlnaHQgMTk4OSIsImNvcHlyaWdodCAxOTg5IDIwMDAiLCIxOTg5IDIwMDAgYnkiLCIyMDAwIGJ5IG5vcm1hbiIsImJ5IG5vcm1hbiByYW1zZXkiLCJub3JtYW4gcmFtc2V5IGFsbCIsInJhbXNleSBhbGwgcmlnaHRzIiwicmlnaHRzIHJlc2VydmVkIG5vd2ViIiwicmVzZXJ2ZWQgbm93ZWIgaXMiLCJub3dlYiBpcyBwcm90ZWN0ZWQiLCJieSBjb3B5cmlnaHQgaXQiLCJjb3B5cmlnaHQgaXQgaXMiLCJpcyBub3QgcHVibGljIiwibm90IHB1YmxpYyBkb21haW4iLCJkb21haW4gc29mdHdhcmUgb3IiLCJzb2Z0d2FyZSBvciBzaGFyZXdhcmUiLCJvciBzaGFyZXdhcmUgYW5kIiwic2hhcmV3YXJlIGFuZCBpdCIsImFuZCBpdCBpcyIsImlzIG5vdCBwcm90ZWN0ZWQiLCJub3QgcHJvdGVjdGVkIGJ5IiwicHJvdGVjdGVkIGJ5IGEiLCJieSBhIGNvcHlsZWZ0IiwiYSBjb3B5bGVmdCBhZ3JlZW1lbnQiLCJjb3B5bGVmdCBhZ3JlZW1lbnQgbGlrZSIsImFncmVlbWVudCBsaWtlIHRoZSIsImxpa2UgdGhlIG9uZSIsInRoZSBvbmUgdXNlZCIsIm9uZSB1c2VkIGJ5Iiwic29mdHdhcmUgZm91bmRhdGlvbiBub3dlYiIsImZvdW5kYXRpb24gbm93ZWIgaXMiLCJhdmFpbGFibGUgZnJlZSBmb3IiLCJmcmVlIGZvciBhbnkiLCJhbnkgdXNlIGluIiwiaW4gYW55IGZpZWxkIiwib2YgZW5kZWF2b3IgeW91IiwiZW5kZWF2b3IgeW91IG1heSIsIm1heSByZWRpc3RyaWJ1dGUgbm93ZWIiLCJyZWRpc3RyaWJ1dGUgbm93ZWIgaW4iLCJub3dlYiBpbiB3aG9sZSIsInBhcnQgcHJvdmlkZWQgeW91IiwieW91IGFja25vd2xlZGdlIGl0cyIsImFja25vd2xlZGdlIGl0cyBzb3VyY2UiLCJpdHMgc291cmNlIGFuZCIsInNvdXJjZSBhbmQgaW5jbHVkZSIsImFuZCBpbmNsdWRlIHRoaXMiLCJ0aGlzIGNvcHlyaWdodCBmaWxlIiwiY29weXJpZ2h0IGZpbGUgeW91IiwibWF5IG1vZGlmeSBub3dlYiIsIm1vZGlmeSBub3dlYiBhbmQiLCJub3dlYiBhbmQgY3JlYXRlIiwiYW5kIGNyZWF0ZSBkZXJpdmVkIiwiY3JlYXRlIGRlcml2ZWQgd29ya3MiLCJkZXJpdmVkIHdvcmtzIHByb3ZpZGVkIiwid29ya3MgcHJvdmlkZWQgeW91IiwicmV0YWluIHRoaXMgY29weXJpZ2h0IiwiY29weXJpZ2h0IG5vdGljZSBidXQiLCJub3RpY2UgYnV0IHRoZSIsImJ1dCB0aGUgcmVzdWx0IiwidGhlIHJlc3VsdCBtYXkiLCJyZXN1bHQgbWF5IG5vdCIsImJlIGNhbGxlZCBub3dlYiIsImNhbGxlZCBub3dlYiB3aXRob3V0Iiwibm93ZWIgd2l0aG91dCBteSIsIndpdGhvdXQgbXkgd3JpdHRlbiIsIm15IHdyaXR0ZW4gY29uc2VudCIsIndyaXR0ZW4gY29uc2VudCB5b3UiLCJjb25zZW50IHlvdSBtYXkiLCJtYXkgc2VsbCBub3dlYiIsInNlbGwgbm93ZWIgaWYiLCJub3dlYiBpZiB5b3UiLCJ5b3Ugd2lzaCBmb3IiLCJ3aXNoIGZvciBleGFtcGxlIiwic2VsbCBhIGNkIiwiY2Qgcm9tIGluY2x1ZGluZyIsInJvbSBpbmNsdWRpbmcgbm93ZWIiLCJpbmNsdWRpbmcgbm93ZWIgeW91Iiwibm93ZWIgeW91IG1heSIsInNlbGwgYSBkZXJpdmVkIiwidGhhdCBhbGwgc291cmNlIiwiZm9yIHlvdXIgZGVyaXZlZCIsIndvcmsgaXMgYXZhaWxhYmxlIiwiYXQgbm8gYWRkaXRpb25hbCIsIm5vIGFkZGl0aW9uYWwgY2hhcmdlIiwiYWRkaXRpb25hbCBjaGFyZ2UgdG8iLCJjaGFyZ2UgdG8gYW55b25lIiwiYW55b25lIHdobyBidXlzIiwid2hvIGJ1eXMgeW91ciIsImJ1eXMgeW91ciBkZXJpdmVkIiwibXVzdCBnaXZlIHBlcm1pc3NvbiIsImdpdmUgcGVybWlzc29uIGZvciIsInBlcm1pc3NvbiBmb3Igc2FpZCIsImZvciBzYWlkIHNvdXJjZSIsInNhaWQgc291cmNlIGNvZGUiLCJ1c2VkIGFuZCBtb2RpZmllZCIsImFuZCBtb2RpZmllZCB1bmRlciIsInlvdSBtdXN0IHN0YXRlIiwibXVzdCBzdGF0ZSBjbGVhcmx5Iiwic3RhdGUgY2xlYXJseSB0aGF0IiwiY2xlYXJseSB0aGF0IHlvdXIiLCJ5b3VyIHdvcmsgdXNlcyIsIndvcmsgdXNlcyBvciIsInVzZXMgb3IgaXMiLCJiYXNlZCBvbiBub3dlYiIsIm9uIG5vd2ViIGFuZCIsIm5vd2ViIGFuZCB0aGF0IiwiYW5kIHRoYXQgbm93ZWIiLCJ0aGF0IG5vd2ViIGlzIiwiYXZhaWxhYmxlIGZyZWUgb2YiLCJmcmVlIG9mIGNoYW5nZSIsIm11c3QgYWxzbyByZXF1ZXN0IiwiYWxzbyByZXF1ZXN0IHRoYXQiLCJyZXF1ZXN0IHRoYXQgYnVnIiwidGhhdCBidWcgcmVwb3J0cyIsImJ1ZyByZXBvcnRzIG9uIiwicmVwb3J0cyBvbiB5b3VyIiwib24geW91ciB3b3JrIiwieW91ciB3b3JrIGJlIiwid29yayBiZSByZXBvcnRlZCIsInJlcG9ydGVkIHRvIHlvdSIsIm5vd2ViIGlzIGNvcHlyaWdodCAxOTg5IiwiaXMgY29weXJpZ2h0IDE5ODkgMjAwMCIsImNvcHlyaWdodCAxOTg5IDIwMDAgYnkiLCIxOTg5IDIwMDAgYnkgbm9ybWFuIiwiMjAwMCBieSBub3JtYW4gcmFtc2V5IiwiYnkgbm9ybWFuIHJhbXNleSBhbGwiLCJub3JtYW4gcmFtc2V5IGFsbCByaWdodHMiLCJyYW1zZXkgYWxsIHJpZ2h0cyByZXNlcnZlZCIsImFsbCByaWdodHMgcmVzZXJ2ZWQgbm93ZWIiLCJyaWdodHMgcmVzZXJ2ZWQgbm93ZWIgaXMiLCJyZXNlcnZlZCBub3dlYiBpcyBwcm90ZWN0ZWQiLCJub3dlYiBpcyBwcm90ZWN0ZWQgYnkiLCJwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IGl0IiwiYnkgY29weXJpZ2h0IGl0IGlzIiwiY29weXJpZ2h0IGl0IGlzIG5vdCIsIml0IGlzIG5vdCBwdWJsaWMiLCJpcyBub3QgcHVibGljIGRvbWFpbiIsIm5vdCBwdWJsaWMgZG9tYWluIHNvZnR3YXJlIiwicHVibGljIGRvbWFpbiBzb2Z0d2FyZSBvciIsImRvbWFpbiBzb2Z0d2FyZSBvciBzaGFyZXdhcmUiLCJzb2Z0d2FyZSBvciBzaGFyZXdhcmUgYW5kIiwib3Igc2hhcmV3YXJlIGFuZCBpdCIsInNoYXJld2FyZSBhbmQgaXQgaXMiLCJhbmQgaXQgaXMgbm90IiwiaXQgaXMgbm90IHByb3RlY3RlZCIsImlzIG5vdCBwcm90ZWN0ZWQgYnkiLCJub3QgcHJvdGVjdGVkIGJ5IGEiLCJwcm90ZWN0ZWQgYnkgYSBjb3B5bGVmdCIsImJ5IGEgY29weWxlZnQgYWdyZWVtZW50IiwiYSBjb3B5bGVmdCBhZ3JlZW1lbnQgbGlrZSIsImNvcHlsZWZ0IGFncmVlbWVudCBsaWtlIHRoZSIsImFncmVlbWVudCBsaWtlIHRoZSBvbmUiLCJsaWtlIHRoZSBvbmUgdXNlZCIsInRoZSBvbmUgdXNlZCBieSIsIm9uZSB1c2VkIGJ5IHRoZSIsInVzZWQgYnkgdGhlIGZyZWUiLCJmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24gbm93ZWIiLCJzb2Z0d2FyZSBmb3VuZGF0aW9uIG5vd2ViIGlzIiwiZm91bmRhdGlvbiBub3dlYiBpcyBhdmFpbGFibGUiLCJpcyBhdmFpbGFibGUgZnJlZSBmb3IiLCJhdmFpbGFibGUgZnJlZSBmb3IgYW55IiwiZnJlZSBmb3IgYW55IHVzZSIsImZvciBhbnkgdXNlIGluIiwiYW55IHVzZSBpbiBhbnkiLCJ1c2UgaW4gYW55IGZpZWxkIiwiaW4gYW55IGZpZWxkIG9mIiwiYW55IGZpZWxkIG9mIGVuZGVhdm9yIiwiZmllbGQgb2YgZW5kZWF2b3IgeW91Iiwib2YgZW5kZWF2b3IgeW91IG1heSIsImVuZGVhdm9yIHlvdSBtYXkgcmVkaXN0cmlidXRlIiwieW91IG1heSByZWRpc3RyaWJ1dGUgbm93ZWIiLCJtYXkgcmVkaXN0cmlidXRlIG5vd2ViIGluIiwicmVkaXN0cmlidXRlIG5vd2ViIGluIHdob2xlIiwibm93ZWIgaW4gd2hvbGUgb3IiLCJvciBpbiBwYXJ0IHByb3ZpZGVkIiwiaW4gcGFydCBwcm92aWRlZCB5b3UiLCJwYXJ0IHByb3ZpZGVkIHlvdSBhY2tub3dsZWRnZSIsInByb3ZpZGVkIHlvdSBhY2tub3dsZWRnZSBpdHMiLCJ5b3UgYWNrbm93bGVkZ2UgaXRzIHNvdXJjZSIsImFja25vd2xlZGdlIGl0cyBzb3VyY2UgYW5kIiwiaXRzIHNvdXJjZSBhbmQgaW5jbHVkZSIsInNvdXJjZSBhbmQgaW5jbHVkZSB0aGlzIiwiYW5kIGluY2x1ZGUgdGhpcyBjb3B5cmlnaHQiLCJpbmNsdWRlIHRoaXMgY29weXJpZ2h0IGZpbGUiLCJ0aGlzIGNvcHlyaWdodCBmaWxlIHlvdSIsImNvcHlyaWdodCBmaWxlIHlvdSBtYXkiLCJmaWxlIHlvdSBtYXkgbW9kaWZ5IiwieW91IG1heSBtb2RpZnkgbm93ZWIiLCJtYXkgbW9kaWZ5IG5vd2ViIGFuZCIsIm1vZGlmeSBub3dlYiBhbmQgY3JlYXRlIiwibm93ZWIgYW5kIGNyZWF0ZSBkZXJpdmVkIiwiYW5kIGNyZWF0ZSBkZXJpdmVkIHdvcmtzIiwiY3JlYXRlIGRlcml2ZWQgd29ya3MgcHJvdmlkZWQiLCJkZXJpdmVkIHdvcmtzIHByb3ZpZGVkIHlvdSIsIndvcmtzIHByb3ZpZGVkIHlvdSByZXRhaW4iLCJwcm92aWRlZCB5b3UgcmV0YWluIHRoaXMiLCJ5b3UgcmV0YWluIHRoaXMgY29weXJpZ2h0IiwicmV0YWluIHRoaXMgY29weXJpZ2h0IG5vdGljZSIsInRoaXMgY29weXJpZ2h0IG5vdGljZSBidXQiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IMKpIDIwMDItMjAwNCBKYW1lcyBXLiBOZXdraXJrLCBNaWNoYWVsIEMuIFR3bywgQWxleGVpIEEuIFZvcm9udHNvdiwgQ2hhcmxpZSBQb29sZVxuXG5Db3B5cmlnaHQgwqkgMjAwMC0yMDA0IFBoaWxpcCBBLiBDcmFpZ1xuXG5UaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cblxuUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdCBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IChzZWUgdGhlIGZvbGxvd2luZykgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiBpcyByZXF1aXJlZC5cblxuICAgUG9ydGlvbnMgQ29weXJpZ2h0IMKpIDIwMDItMjAwNCBKYW1lcyBXLiBOZXdraXJrLCBNaWNoYWVsIEMuIFR3bywgQWxleGVpIEEuIFZvcm9udHNvdiwgQ2hhcmxpZSBQb29sZSBvciBDb3B5cmlnaHQgwqkgMjAwMC0yMDA0IFBoaWxpcCBBLiBDcmFpZ1xuXG4gICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuXG5cbiAgIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uIl0sImxpY2Vuc2VJZHMiOlsiTnVuaXQiXSwia2V5d29yZHMiOlsicG9vbGUgY29weXJpZ2h0IDIwMDAiLCJwb3J0aW9ucyBjb3B5cmlnaHQgMjAwMiIsIm9yIGNvcHlyaWdodCAyMDAwIiwidm9yb250c292IGNoYXJsaWUgcG9vbGUgY29weXJpZ2h0IiwiY2hhcmxpZSBwb29sZSBjb3B5cmlnaHQgMjAwMCIsInBvb2xlIGNvcHlyaWdodCAyMDAwIDIwMDQiLCJyZXF1aXJlZCBwb3J0aW9ucyBjb3B5cmlnaHQgMjAwMiIsInBvcnRpb25zIGNvcHlyaWdodCAyMDAyIDIwMDQiLCJ2b3JvbnRzb3YgY2hhcmxpZSBwb29sZSBvciIsInBvb2xlIG9yIGNvcHlyaWdodCAyMDAwIiwib3IgY29weXJpZ2h0IDIwMDAgMjAwNCIsImEgdm9yb250c292IGNoYXJsaWUgcG9vbGUgY29weXJpZ2h0Iiwidm9yb250c292IGNoYXJsaWUgcG9vbGUgY29weXJpZ2h0IDIwMDAiLCJjaGFybGllIHBvb2xlIGNvcHlyaWdodCAyMDAwIDIwMDQiLCJwb29sZSBjb3B5cmlnaHQgMjAwMCAyMDA0IHBoaWxpcCIsIjIwMDQgcGhpbGlwIGEgY3JhaWcgdGhpcyIsImlzIHJlcXVpcmVkIHBvcnRpb25zIGNvcHlyaWdodCAyMDAyIiwicmVxdWlyZWQgcG9ydGlvbnMgY29weXJpZ2h0IDIwMDIgMjAwNCIsInBvcnRpb25zIGNvcHlyaWdodCAyMDAyIDIwMDQgamFtZXMiLCJhIHZvcm9udHNvdiBjaGFybGllIHBvb2xlIG9yIiwidm9yb250c292IGNoYXJsaWUgcG9vbGUgb3IgY29weXJpZ2h0IiwiY2hhcmxpZSBwb29sZSBvciBjb3B5cmlnaHQgMjAwMCIsInBvb2xlIG9yIGNvcHlyaWdodCAyMDAwIDIwMDQiLCJvciBjb3B5cmlnaHQgMjAwMCAyMDA0IHBoaWxpcCIsIjIwMDQgcGhpbGlwIGEgY3JhaWcgMiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJPcGVuIFVzZSBvZiBEYXRhIEFncmVlbWVudCB2MS4wXG5cblRoaXMgaXMgdGhlIE9wZW4gVXNlIG9mIERhdGEgQWdyZWVtZW50LCBWZXJzaW9uIDEuMCAodGhlIFwiTy1VREFcIikuIENhcGl0YWxpemVkIHRlcm1zIGFyZSBkZWZpbmVkIGluIFNlY3Rpb24gNS4gRGF0YSBQcm92aWRlciBhbmQgeW91IGFncmVlIGFzIGZvbGxvd3M6XG5cbiAgIDEuIFByb3Zpc2lvbiBvZiB0aGUgRGF0YVxuXG4gICAgICAxLjEuIFlvdSBtYXkgdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZSBEYXRhIG1hZGUgYXZhaWxhYmxlIHRvIHlvdSBieSB0aGUgRGF0YSBQcm92aWRlciB1bmRlciB0aGlzIE8tVURBIGlmIHlvdSBmb2xsb3cgdGhlIE8tVURBJ3MgdGVybXMuXG5cbiAgICAgIDEuMi4gRGF0YSBQcm92aWRlciB3aWxsIG5vdCBzdWUgeW91IG9yIGFueSBEb3duc3RyZWFtIFJlY2lwaWVudCBmb3IgYW55IGNsYWltIGFyaXNpbmcgb3V0IG9mIHRoZSB1c2UsIG1vZGlmaWNhdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIHRoZSBEYXRhIHByb3ZpZGVkIHlvdSBtZWV0IHRoZSB0ZXJtcyBvZiB0aGUgTy1VREEuXG5cbiAgICAgIDEuMy4gVGhpcyBPLVVEQSBkb2VzIG5vdCByZXN0cmljdCB5b3VyIHVzZSwgbW9kaWZpY2F0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgYW55IHBvcnRpb25zIG9mIHRoZSBEYXRhIHRoYXQgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluIG9yIHRoYXQgbWF5IGJlIHVzZWQsIG1vZGlmaWVkLCBvciBkaXN0cmlidXRlZCB1bmRlciBhbnkgb3RoZXIgbGVnYWwgZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24uXG5cbiAgIDIuIE5vIFJlc3RyaWN0aW9ucyBvbiBVc2Ugb3IgUmVzdWx0c1xuXG4gICAgICAyLjEuIFRoZSBPLVVEQSBkb2VzIG5vdCBpbXBvc2UgYW55IHJlc3RyaWN0aW9uIHdpdGggcmVzcGVjdCB0bzpcblxuICAgICAgICAgMi4xLjEuIHRoZSB1c2Ugb3IgbW9kaWZpY2F0aW9uIG9mIERhdGE7IG9yXG5cbiAgICAgICAgIDIuMS4yLiB0aGUgdXNlLCBtb2RpZmljYXRpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBSZXN1bHRzLlxuXG4gICAzLiBSZWRpc3RyaWJ1dGlvbiBvZiBEYXRhXG5cbiAgICAgIDMuMS4gWW91IG1heSByZWRpc3RyaWJ1dGUgdGhlIERhdGEgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXM6XG5cbiAgICAgICAgIDMuMS4xLiBZb3UgaW5jbHVkZSB3aXRoIGFueSBEYXRhIHlvdSByZWRpc3RyaWJ1dGUgYWxsIGNyZWRpdCBvciBhdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbiB0aGF0IHlvdSByZWNlaXZlZCB3aXRoIHRoZSBEYXRhLCBhbmQgeW91ciB0ZXJtcyByZXF1aXJlIGFueSBEb3duc3RyZWFtIFJlY2lwaWVudCB0byBkbyB0aGUgc2FtZTsgYW5kXG5cbiAgICAgICAgIDMuMS4yLiBZb3VyIHRlcm1zIGluY2x1ZGUgYSB3YXJyYW50eSBkaXNjbGFpbWVyIGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBmb3IgVXBzdHJlYW0gRGF0YSBQcm92aWRlcnMgYXQgbGVhc3QgYXMgYnJvYWQgYXMgdGhvc2UgY29udGFpbmVkIGluIFNlY3Rpb24gNC4yIGFuZCA0LjMgb2YgdGhlIE8tVURBLlxuXG4gICA0LiBObyBXYXJyYW50eSwgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHlcblxuICAgICAgNC4xLiBEYXRhIFByb3ZpZGVyIGRvZXMgbm90IHJlcHJlc2VudCBvciB3YXJyYW50IHRoYXQgaXQgaGFzIGFueSByaWdodHMgd2hhdHNvZXZlciBpbiB0aGUgRGF0YS5cblxuICAgICAgNC4yLiBUSEUgREFUQSBJUyBQUk9WSURFRCBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG5cbiAgICAgIDQuMy4gTkVJVEhFUiBEQVRBIFBST1ZJREVSIE5PUiBBTlkgVVBTVFJFQU0gREFUQSBQUk9WSURFUiBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgREFUQSBPUiBSRVNVTFRTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuICAgNS4gRGVmaW5pdGlvbnNcblxuICAgICAgNS4xLiBcIkRhdGFcIiBtZWFucyB0aGUgbWF0ZXJpYWwgeW91IHJlY2VpdmUgdW5kZXIgdGhlIE8tVURBIGluIG1vZGlmaWVkIG9yIHVubW9kaWZpZWQgZm9ybSwgYnV0IG5vdCBpbmNsdWRpbmcgUmVzdWx0cy5cblxuICAgICAgNS4yLiBcIkRhdGEgUHJvdmlkZXJcIiBtZWFucyB0aGUgc291cmNlIGZyb20gd2hpY2ggeW91IHJlY2VpdmUgdGhlIERhdGEgYW5kIHdpdGggd2hvbSB5b3UgZW50ZXIgaW50byB0aGUgTy1VREEuXG5cbiAgICAgIDUuMy4gXCJEb3duc3RyZWFtIFJlY2lwaWVudFwiIG1lYW5zIGFueSBwZXJzb24gb3IgcGVyc29ucyB3aG8gcmVjZWl2ZXMgdGhlIERhdGEgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBmcm9tIHlvdSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIE8tVURBLlxuXG4gICAgICA1LjQuIFwiUmVzdWx0XCIgbWVhbnMgYW55dGhpbmcgdGhhdCB5b3UgZGV2ZWxvcCBvciBpbXByb3ZlIGZyb20geW91ciB1c2Ugb2YgRGF0YSB0aGF0IGRvZXMgbm90IGluY2x1ZGUgbW9yZSB0aGFuIGEgZGUgbWluaW1pcyBwb3J0aW9uIG9mIHRoZSBEYXRhIG9uIHdoaWNoIHRoZSB1c2UgaXMgYmFzZWQuIFJlc3VsdHMgbWF5IGluY2x1ZGUgZGUgbWluaW1pcyBwb3J0aW9ucyBvZiB0aGUgRGF0YSBuZWNlc3NhcnkgdG8gcmVwb3J0IG9uIG9yIGV4cGxhaW4gdXNlIHRoYXQgaGFzIGJlZW4gY29uZHVjdGVkIHdpdGggdGhlIERhdGEsIHN1Y2ggYXMgZmlndXJlcyBpbiBzY2llbnRpZmljIHBhcGVycywgYnV0IGRvIG5vdCBpbmNsdWRlIG1vcmUuIEFydGlmaWNpYWwgaW50ZWxsaWdlbmNlIG1vZGVscyB0cmFpbmVkIG9uIERhdGEgKGFuZCB3aGljaCBkbyBub3QgaW5jbHVkZSBtb3JlIHRoYW4gYSBkZSBtaW5pbWlzIHBvcnRpb24gb2YgRGF0YSkgYXJlIFJlc3VsdHMuXG5cbiAgICAgIDUuNS4gXCJVcHN0cmVhbSBEYXRhIFByb3ZpZGVyc1wiIG1lYW5zIHRoZSBzb3VyY2Ugb3Igc291cmNlcyBmcm9tIHdoaWNoIHRoZSBEYXRhIFByb3ZpZGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgcmVjZWl2ZWQsIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTy1VREEsIG1hdGVyaWFsIHRoYXQgaXMgaW5jbHVkZWQgaW4gdGhlIERhdGEuIl0sImxpY2Vuc2VJZHMiOlsiTy1VREEtMS4wIl0sImtleXdvcmRzIjpbImRhdGEgYWdyZWVtZW50IHYxIiwidjEgMCB0aGlzIiwidGhlIG9wZW4gdXNlIiwiZGF0YSBhZ3JlZW1lbnQgdmVyc2lvbiIsIjAgdGhlIG8iLCJvIHVkYSBjYXBpdGFsaXplZCIsInVkYSBjYXBpdGFsaXplZCB0ZXJtcyIsImNhcGl0YWxpemVkIHRlcm1zIGFyZSIsInNlY3Rpb24gNSBkYXRhIiwiNSBkYXRhIHByb3ZpZGVyIiwiZGF0YSBwcm92aWRlciBhbmQiLCJwcm92aWRlciBhbmQgeW91IiwiZm9sbG93cyAxIHByb3Zpc2lvbiIsIjEgcHJvdmlzaW9uIG9mIiwidGhlIGRhdGEgMSIsImRhdGEgMSAxIiwiZGlzdHJpYnV0ZSB0aGUgZGF0YSIsInRoZSBkYXRhIG1hZGUiLCJkYXRhIG1hZGUgYXZhaWxhYmxlIiwiZGF0YSBwcm92aWRlciB1bmRlciIsInByb3ZpZGVyIHVuZGVyIHRoaXMiLCJ1bmRlciB0aGlzIG8iLCJvIHVkYSBpZiIsInVkYSBpZiB5b3UiLCJmb2xsb3cgdGhlIG8iLCJvIHVkYSBzIiwidWRhIHMgdGVybXMiLCJzIHRlcm1zIDEiLCJ0ZXJtcyAxIDIiLCIxIDIgZGF0YSIsImRhdGEgcHJvdmlkZXIgd2lsbCIsInByb3ZpZGVyIHdpbGwgbm90Iiwid2lsbCBub3Qgc3VlIiwibm90IHN1ZSB5b3UiLCJzdWUgeW91IG9yIiwib3IgYW55IGRvd25zdHJlYW0iLCJkb3duc3RyZWFtIHJlY2lwaWVudCBmb3IiLCJhbnkgY2xhaW0gYXJpc2luZyIsInRoZSBkYXRhIHByb3ZpZGVkIiwiZGF0YSBwcm92aWRlZCB5b3UiLCJwcm92aWRlZCB5b3UgbWVldCIsIm8gdWRhIDEiLCJ1ZGEgMSAzIiwiMyB0aGlzIG8iLCJub3QgcmVzdHJpY3QgeW91ciIsInJlc3RyaWN0IHlvdXIgdXNlIiwieW91ciB1c2UgbW9kaWZpY2F0aW9uIiwib2YgYW55IHBvcnRpb25zIiwiYW55IHBvcnRpb25zIG9mIiwidGhlIGRhdGEgdGhhdCIsImRhdGEgdGhhdCBhcmUiLCJhcmUgaW4gdGhlIiwiZG9tYWluIG9yIHRoYXQiLCJiZSB1c2VkIG1vZGlmaWVkIiwidXNlZCBtb2RpZmllZCBvciIsIm1vZGlmaWVkIG9yIGRpc3RyaWJ1dGVkIiwib3IgZGlzdHJpYnV0ZWQgdW5kZXIiLCJvdGhlciBsZWdhbCBleGNlcHRpb24iLCJsZWdhbCBleGNlcHRpb24gb3IiLCJvciBsaW1pdGF0aW9uIDIiLCJsaW1pdGF0aW9uIDIgbm8iLCIyIG5vIHJlc3RyaWN0aW9ucyIsInJlc3RyaWN0aW9ucyBvbiB1c2UiLCJvbiB1c2Ugb3IiLCJ1c2Ugb3IgcmVzdWx0cyIsIm9yIHJlc3VsdHMgMiIsInJlc3VsdHMgMiAxIiwiMSB0aGUgbyIsImRvZXMgbm90IGltcG9zZSIsImltcG9zZSBhbnkgcmVzdHJpY3Rpb24iLCJhbnkgcmVzdHJpY3Rpb24gd2l0aCIsInJlc3RyaWN0aW9uIHdpdGggcmVzcGVjdCIsInJlc3BlY3QgdG8gMiIsInRvIDIgMSIsIjEgdGhlIHVzZSIsInVzZSBvciBtb2RpZmljYXRpb24iLCJtb2RpZmljYXRpb24gb2YgZGF0YSIsImRhdGEgb3IgMiIsIm9yIDIgMSIsIjIgdGhlIHVzZSIsImRpc3RyaWJ1dGlvbiBvZiByZXN1bHRzIiwib2YgcmVzdWx0cyAzIiwicmVzdWx0cyAzIHJlZGlzdHJpYnV0aW9uIiwicmVkaXN0cmlidXRpb24gb2YgZGF0YSIsIm9mIGRhdGEgMyIsImRhdGEgMyAxIiwicmVkaXN0cmlidXRlIHRoZSBkYXRhIiwiZGF0YSB1bmRlciB0ZXJtcyIsImxvbmcgYXMgMyIsImFzIDMgMSIsIjMgMSAxIiwiMSB5b3UgaW5jbHVkZSIsImluY2x1ZGUgd2l0aCBhbnkiLCJ3aXRoIGFueSBkYXRhIiwiYW55IGRhdGEgeW91IiwiZGF0YSB5b3UgcmVkaXN0cmlidXRlIiwieW91IHJlZGlzdHJpYnV0ZSBhbGwiLCJyZWRpc3RyaWJ1dGUgYWxsIGNyZWRpdCIsIm9yIGF0dHJpYnV0aW9uIGluZm9ybWF0aW9uIiwiYXR0cmlidXRpb24gaW5mb3JtYXRpb24gdGhhdCIsImluZm9ybWF0aW9uIHRoYXQgeW91IiwieW91IHJlY2VpdmVkIHdpdGgiLCJyZWNlaXZlZCB3aXRoIHRoZSIsImRhdGEgYW5kIHlvdXIiLCJhbmQgeW91ciB0ZXJtcyIsInlvdXIgdGVybXMgcmVxdWlyZSIsInRlcm1zIHJlcXVpcmUgYW55IiwicmVxdWlyZSBhbnkgZG93bnN0cmVhbSIsImRvd25zdHJlYW0gcmVjaXBpZW50IHRvIiwicmVjaXBpZW50IHRvIGRvIiwidGhlIHNhbWUgYW5kIiwic2FtZSBhbmQgMyIsImFuZCAzIDEiLCIzIDEgMiIsIjEgMiB5b3VyIiwiMiB5b3VyIHRlcm1zIiwieW91ciB0ZXJtcyBpbmNsdWRlIiwidGVybXMgaW5jbHVkZSBhIiwiaW5jbHVkZSBhIHdhcnJhbnR5IiwiYSB3YXJyYW50eSBkaXNjbGFpbWVyIiwid2FycmFudHkgZGlzY2xhaW1lciBhbmQiLCJvZiBsaWFiaWxpdHkgZm9yIiwibGlhYmlsaXR5IGZvciB1cHN0cmVhbSIsImZvciB1cHN0cmVhbSBkYXRhIiwiZGF0YSBwcm92aWRlcnMgYXQiLCJwcm92aWRlcnMgYXQgbGVhc3QiLCJsZWFzdCBhcyBicm9hZCIsImFzIGJyb2FkIGFzIiwiYnJvYWQgYXMgdGhvc2UiLCJhcyB0aG9zZSBjb250YWluZWQiLCJjb250YWluZWQgaW4gc2VjdGlvbiIsIjQgMiBhbmQiLCJhbmQgNCAzIiwiNCAzIG9mIiwibyB1ZGEgNCIsInVkYSA0IG5vIiwiNCBubyB3YXJyYW50eSIsIm5vIHdhcnJhbnR5IGxpbWl0YXRpb24iLCJ3YXJyYW50eSBsaW1pdGF0aW9uIG9mIiwib2YgbGlhYmlsaXR5IDQiLCJsaWFiaWxpdHkgNCAxIiwiNCAxIGRhdGEiLCIxIGRhdGEgcHJvdmlkZXIiLCJkYXRhIHByb3ZpZGVyIGRvZXMiLCJkb2VzIG5vdCByZXByZXNlbnQiLCJub3QgcmVwcmVzZW50IG9yIiwicmVwcmVzZW50IG9yIHdhcnJhbnQiLCJvciB3YXJyYW50IHRoYXQiLCJ3YXJyYW50IHRoYXQgaXQiLCJpdCBoYXMgYW55IiwiaGFzIGFueSByaWdodHMiLCJhbnkgcmlnaHRzIHdoYXRzb2V2ZXIiLCJyaWdodHMgd2hhdHNvZXZlciBpbiIsIndoYXRzb2V2ZXIgaW4gdGhlIiwidGhlIGRhdGEgNCIsIjIgdGhlIGRhdGEiLCJwdXJwb3NlIDQgMyIsIjQgMyBuZWl0aGVyIiwiMyBuZWl0aGVyIGRhdGEiLCJuZWl0aGVyIGRhdGEgcHJvdmlkZXIiLCJkYXRhIHByb3ZpZGVyIG5vciIsInByb3ZpZGVyIG5vciBhbnkiLCJub3IgYW55IHVwc3RyZWFtIiwiYW55IHVwc3RyZWFtIGRhdGEiLCJ1cHN0cmVhbSBkYXRhIHByb3ZpZGVyIiwiZGF0YSBwcm92aWRlciBzaGFsbCIsInByb3ZpZGVyIHNoYWxsIGhhdmUiLCJkYXRhIG9yIHJlc3VsdHMiLCJvciByZXN1bHRzIGV2ZW4iLCJyZXN1bHRzIGV2ZW4gaWYiLCJkYW1hZ2VzIDUgZGVmaW5pdGlvbnMiLCI1IGRlZmluaXRpb25zIDUiLCJkZWZpbml0aW9ucyA1IDEiLCI1IDEgZGF0YSIsIjEgZGF0YSBtZWFucyIsIm1lYW5zIHRoZSBtYXRlcmlhbCIsInRoZSBtYXRlcmlhbCB5b3UiLCJtYXRlcmlhbCB5b3UgcmVjZWl2ZSIsInlvdSByZWNlaXZlIHVuZGVyIiwicmVjZWl2ZSB1bmRlciB0aGUiLCJ1bmRlciB0aGUgbyIsIm8gdWRhIGluIiwidWRhIGluIG1vZGlmaWVkIiwiaW4gbW9kaWZpZWQgb3IiLCJvciB1bm1vZGlmaWVkIGZvcm0iLCJ1bm1vZGlmaWVkIGZvcm0gYnV0IiwiZm9ybSBidXQgbm90IiwiYnV0IG5vdCBpbmNsdWRpbmciLCJub3QgaW5jbHVkaW5nIHJlc3VsdHMiLCJpbmNsdWRpbmcgcmVzdWx0cyA1IiwicmVzdWx0cyA1IDIiLCI1IDIgZGF0YSIsInRoZSBzb3VyY2UgZnJvbSIsInNvdXJjZSBmcm9tIHdoaWNoIiwiZnJvbSB3aGljaCB5b3UiLCJyZWNlaXZlIHRoZSBkYXRhIiwiZGF0YSBhbmQgd2l0aCIsImFuZCB3aXRoIHdob20iLCJ3aXRoIHdob20geW91Iiwid2hvbSB5b3UgZW50ZXIiXX0seyJsaWNlbnNlVGV4dHMiOlsiT3BlbiBDQVNDQURFIFRlY2hub2xvZ3kgUHVibGljIExpY2Vuc2VcblxuVmVyc2lvbiA2LjYsIEFwcmlsIDIwMTNcblxuT1BFTiBDQVNDQURFIHJlbGVhc2VzIGFuZCBtYWtlcyBwdWJsaWNseSBhdmFpbGFibGUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBzb2Z0d2FyZSBPcGVuIENBU0NBREUgVGVjaG5vbG9neSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS5cblxuSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgbGljZW5zZSB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueSBwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcyBsaWNlbnNlIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcyBpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuIE1hbnkgcGVvcGxlIGhhdmUgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0IHN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0IGNob2ljZS5cblxuUGxlYXNlIHJlYWQgdGhpcyBsaWNlbnNlIGNhcmVmdWxseSBhbmQgY29tcGxldGVseSBiZWZvcmUgZG93bmxvYWRpbmcgdGhpcyBzb2Z0d2FyZS4gQnkgZG93bmxvYWRpbmcsIHVzaW5nLCBtb2RpZnlpbmcsIGRpc3RyaWJ1dGluZyBhbmQgc3VibGljZW5zaW5nIHRoaXMgc29mdHdhcmUsIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2UgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4gSWYgeW91IGRvIG5vdCB3YW50IHRvIGFjY2VwdCBvciBjYW5ub3QgYWNjZXB0IGZvciBhbnkgcmVhc29ucyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLCBwbGVhc2UgZG8gbm90IGRvd25sb2FkIG9yIHVzZSBpbiBhbnkgbWFubmVyIHRoaXMgc29mdHdhcmUuXG5cbiAgIDEuIERlZmluaXRpb25zXG5cbiAgIFVubGVzcyB0aGVyZSBpcyBzb21ldGhpbmcgaW4gdGhlIHN1YmplY3QgbWF0dGVyIG9yIGluIHRoZSBjb250ZXh0IGluY29uc2lzdGVudCB0aGVyZXdpdGgsIHRoZSBjYXBpdGFsaXplZCB0ZXJtcyB1c2VkIGluIHRoaXMgTGljZW5zZSBzaGFsbCBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZy5cblxuICAgXCJBcHBsaWNhYmxlIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHNcIiBtZWFucyAoYSkgd2l0aCByZXNwZWN0IHRvIHRoZSBJbml0aWFsIERldmVsb3BlciwgYW55IHJpZ2h0cyB1bmRlciBwYXRlbnRzIG9yIHBhdGVudHMgYXBwbGljYXRpb25zIG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzdHJpYnV0ZSBvciBzdWJsaWNlbnNlIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGhvdXQgaW5mcmluZ2VtZW50OyBhbmQgKGIpIHdpdGggcmVzcGVjdCB0byBZb3Ugb3IgYW55IENvbnRyaWJ1dG9yLCBhbnkgcmlnaHRzIHVuZGVyIHBhdGVudHMgb3IgcGF0ZW50cyBhcHBsaWNhdGlvbnMgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3Ugb3IgdG8gc3VjaCBDb250cmlidXRvciBhbmQgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBjb250YWluZWQgaW4gWW91ciBNb2RpZmljYXRpb25zIG9yIGluIHN1Y2ggQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zLCB0YWtlbiBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIE9yaWdpbmFsIENvZGUuXG5cbiAgIFwiQ29udHJpYnV0b3JcIiBtZWFucyBlYWNoIGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgYW55IE1vZGlmaWNhdGlvbiwgaW5jbHVkaW5nIHRoZSBJbml0aWFsIERldmVsb3Blci5cblxuICAgXCJEZXJpdmF0aXZlIFByb2dyYW1cIjogbWVhbnMgYSBuZXcgcHJvZ3JhbSBjb21iaW5pbmcgdGhlIFNvZnR3YXJlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBvdGhlciBzb3VyY2UgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgXCJJbml0aWFsIERldmVsb3BlclwiOiBtZWFucyBPUEVOIENBU0NBREUsIHdpdGggbWFpbiBvZmZpY2VzIGF0IDEsIHBsYWNlIGRlcyBGcsOocmVzIE1vbnRnb2xmaWVyLCA3ODI4MCwgR3V5YW5jb3VydCwgRnJhbmNlLlxuXG4gICBcIk1vZGlmaWNhdGlvbnNcIjogbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20gb3IgY2hhbmdlIHRvIHRoZSBzdWJzdGFuY2Ugb3IgdGhlIHN0cnVjdHVyZSBvZiB0aGUgU29mdHdhcmUuIFdoZW4gc291cmNlIGNvZGUgb2YgdGhlIFNvZnR3YXJlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogKGEpIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSBvciBjaGFuZ2UgdG8gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIHRoZSBTb2Z0d2FyZSBvciAoYikgYW55IG5ldyBmaWxlIG9yIG90aGVyIHJlcHJlc2VudGF0aW9uIG9mIGNvbXB1dGVyIHByb2dyYW0gc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBTb2Z0d2FyZS4gQnkgd2F5IG9mIGV4YW1wbGUsIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbnkgZGVidWcgb2YsIG9yIGltcHJvdmVtZW50IHRvLCB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgb2YgaXRzIGNvbXBvbmVudHMgb3IgcG9ydGlvbnMgYXMgd2VsbCBhcyBpdHMgbmV4dCB2ZXJzaW9ucyBvciByZWxlYXNlcyB0aGVyZW9mLlxuXG4gICBcIk9yaWdpbmFsIENvZGVcIjogbWVhbnMgKGEpIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgc29mdHdhcmUgT3BlbiBDQVNDQURFIFRlY2hub2xvZ3kgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIHNvdXJjZSBjb2RlIG9mIGFueSB1cGRhdGVzIG9yIHVwZ3JhZGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCAoYikgdGhlIG9iamVjdCBjb2RlIGNvbXBpbGVkIGZyb20gc3VjaCBzb3VyY2UgY29kZSBhbmQgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgIFwiU29mdHdhcmVcIjogbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIHRoZSBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi5cblxuICAgXCJZb3VcIiBvciBcIllvdXJcIjogbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2VcblxuICAgMi4gQWNjZXB0YW5jZSBvZiBsaWNlbnNlXG5cbiAgIEJ5IHVzaW5nLCByZXByb2R1Y2luZywgbW9kaWZ5aW5nLCBkaXN0cmlidXRpbmcgb3Igc3VibGljZW5zaW5nIHRoZSBTb2Z0d2FyZSBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBZb3UgZXhwcmVzc2x5IGluZGljYXRlIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIGFuZCB1bmRlcnRha2UgdG8gYWN0IGluIGFjY29yZGFuY2Ugd2l0aCBhbGwgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGFwcGxpY2FibGUgdG8gWW91LlxuXG4gICAzLiBTY29wZSBhbmQgcHVycG9zZVxuXG4gICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgU29mdHdhcmUgYW5kIFlvdSBtYXkgbm90IHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Ugb3IgY2lyY3VsYXRlIHRoZSBTb2Z0d2FyZSwgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0IHRvIG90aGVyd2lzZSB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXN0cmlidXRlIG9yIHN1YmxpY2Vuc2UgdGhlIFNvZnR3YXJlIGlzIHZvaWQgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICA0LiBDb250cmlidXRvciBsaWNlbnNlXG5cbiAgIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBlYWNoIG9mIHRoZSBDb250cmlidXRvcnMgaGVyZWJ5IGdyYW50IFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgYW5kIG5vbi1leGNsdXNpdmUgbGljZW5zZSB1bmRlciB0aGUgQXBwbGljYWJsZSBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzIHRoZXkgb3duIG9yIGNvbnRyb2wsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIFNvZnR3YXJlIHByb3ZpZGVkIHRoYXQ6XG5cbiAgIFlvdSByZXByb2R1Y2UgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgdGhlIGNvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhdHRhY2hlZCBoZXJldG8gYXMgU2NoZWR1bGUgXCJBXCIgYW5kIGFueSBvdGhlciBub3RpY2VzIG9yIGRpc2NsYWltZXJzIGF0dGFjaGVkIHRvIHRoZSBTb2Z0d2FyZSBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTtcblxuICAgWW91IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvZnR3YXJlIFlvdSBkaXN0cmlidXRlO1xuXG4gICBJZiB5b3UgZGlzdHJpYnV0ZSBvciBzdWJsaWNlbnNlIHRoZSBTb2Z0d2FyZSAoYXMgbW9kaWZpZWQgYnkgWW91IG9yIG9uIFlvdXIgYmVoYWxmIGFzIHRoZSBjYXNlIG1heSBiZSksIFlvdSBjYXVzZSBzdWNoIFNvZnR3YXJlIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUsIGF0IG5vIGNoYXJnZSwgdG8gYWxsIHRoaXJkIHBhcnRpZXMsIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgbWFraW5nIGluIHBhcnRpY3VsYXIgYXZhaWxhYmxlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgU29mdHdhcmU7XG5cbiAgIFlvdSBkb2N1bWVudCBhbGwgWW91ciBNb2RpZmljYXRpb25zLCBpbmRpY2F0ZSB0aGUgZGF0ZSBvZiBlYWNoIHN1Y2ggTW9kaWZpY2F0aW9uLCBkZXNpZ25hdGUgdGhlIHZlcnNpb24gb2YgdGhlIFNvZnR3YXJlIFlvdSB1c2VkLCBwcm9taW5lbnRseSBpbmNsdWRlIGEgZmlsZSBjYXJyeWluZyBzdWNoIGluZm9ybWF0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgTW9kaWZpY2F0aW9ucyBhbmQgZHVwbGljYXRlIHRoZSBjb3B5cmlnaHQgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIGF0dGFjaGVkIGhlcmV0byBhcyBTY2hlZHVsZSBcIkJcIiBvciBhbnkgb3RoZXIgbm90aWNlcyBvciBkaXNjbGFpbWVycyBhdHRhY2hlZCB0byB0aGUgU29mdHdhcmUgd2l0aCB5b3VyIE1vZGlmaWNhdGlvbnMuXG5cbiAgIEZvciBncmVhdGVyIGNlcnRhaW50eSwgaXQgaXMgZXhwcmVzc2x5IHVuZGVyc3Rvb2QgdGhhdCBZb3UgbWF5IGZyZWVseSBjcmVhdGUgRGVyaXZhdGl2ZSBQcm9ncmFtcyAod2l0aG91dCBhbnkgb2JsaWdhdGlvbiB0byBwdWJsaXNoIHN1Y2ggRGVyaXZhdGl2ZSBQcm9ncmFtKSBhbmQgZGlzdHJpYnV0ZSBzYW1lIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggY2FzZSwgWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBTb2Z0d2FyZSBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLlxuXG4gICA1LiBZb3VyIGxpY2Vuc2VcblxuICAgWW91IGhlcmVieSBncmFudCBhbGwgQ29udHJpYnV0b3JzIGFuZCBhbnlvbmUgd2hvIGJlY29tZXMgYSBwYXJ0eSB1bmRlciB0aGlzIExpY2Vuc2UgYSB3b3JsZC13aWRlLCBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUgYW5kIGlycmV2b2NhYmxlIGxpY2Vuc2UgdW5kZXIgdGhlIEFwcGxpY2FibGUgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSBhbGwgWW91ciBNb2RpZmljYXRpb25zIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDYuIFNvZnR3YXJlIHN1YmplY3QgdG8gbGljZW5zZVxuXG4gICBZb3VyIE1vZGlmaWNhdGlvbnMgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gWW91IGFyZSBub3QgYXV0aG9yaXplZCB0byBpbXBvc2UgYW55IG90aGVyIHRlcm1zIG9yIGNvbmRpdGlvbnMgdGhhbiB0aG9zZSBwcmV2YWlsaW5nIHVuZGVyIHRoaXMgTGljZW5zZSB3aGVuIFlvdSBkaXN0cmlidXRlIGFuZC9vciBzdWJsaWNlbnNlIHRoZSBTb2Z0d2FyZSwgc2F2ZSBhbmQgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDcgaGVyZW9mLlxuXG4gICA3LiBBZGRpdGlvbmFsIHRlcm1zXG5cbiAgIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBvbiBhIG5vbi1leGNsdXNpdmUgYmFzaXMsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yIGFueSB3YXJyYW50eSwgc3VwcG9ydCwgbWFpbnRlbmFuY2UsIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBvciBvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBTb2Z0d2FyZSAodGhlIFwiQWRkaXRpb25hbCBUZXJtc1wiKSB0byB0aGUgcmVjaXBpZW50cyBvZiB0aGUgU29mdHdhcmUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSBhbmQgZXhjbHVzaXZlIHJlc3BvbnNpYmlsaXR5LiBZb3UgbXVzdCBvYnRhaW4gdGhlIHJlY2lwaWVudCdzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGFueSBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9ycyB3aXRoIHJlc3BlY3QgdG8gYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy5cblxuICAgOC4gRGlzY2xhaW1lciBvZiB3YXJyYW50eVxuXG4gICBUaGUgU29mdHdhcmUgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuIFwiYXMgaXNcIiBiYXNpcywgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgd2FycmFudGllcyB0aGF0IHRoZSBTb2Z0d2FyZSBpcyBmcmVlIG9mIGRlZmVjdHMsIG1lcmNoYW50YWJsZSwgZml0IGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBvciBub24taW5mcmluZ2luZy4gVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgU29mdHdhcmUgaXMgd2l0aCBZb3UuXG5cbiAgIDkuIExpYWJpbGl0eVxuXG4gICBVbmRlciBubyBjaXJjdW1zdGFuY2VzIHNoYWxsIFlvdSwgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvciBiZSBsaWFibGUgdG8gYW55IHBlcnNvbiBmb3IgYW55IGRpcmVjdCBvciBpbmRpcmVjdCBkYW1hZ2VzIG9mIGFueSBraW5kIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCBsb3NzIG9mIGRhdGEsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24gb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyByZXN1bHRpbmcgZnJvbSBvciByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugb3IgaW5kaXJlY3RseSB0byB0aGUgdXNlIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgMTAuIFRyYWRlbWFya1xuXG4gICBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3MsIHRyYWRlIG5hbWVzIGFuZCBkb21haW4gbmFtZXMgXCJNQVRSQVwiLCBcIkVBRFMgTWF0cmEgRGF0YXZpc2lvblwiLCBcIkNBUy5DQURFXCIsIFwiT3BlbiBDQVNDQURFXCIsIFwib3BlbmNhc2NhZGUuY29tXCIgYW5kIFwib3BlbmNhc2NhZGUub3JnXCIgb3IgYW55IG90aGVyIHRyYWRlbWFya3MsIHRyYWRlIG5hbWVzIG9yIGRvbWFpbiBuYW1lcyB1c2VkIG9yIG93bmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3Blci5cblxuICAgMTEuIENvcHlyaWdodFxuXG4gICBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3UgbWF5IG5vdCByZW1vdmUgdGhlIGNvcHlyaWdodCDCqSBub3RpY2Ugd2hpY2ggYXBwZWFycyB3aGVuIFlvdSBkb3dubG9hZCB0aGUgU29mdHdhcmUuXG5cbiAgIDEyLiBUZXJtXG5cbiAgIFRoaXMgTGljZW5zZSBpcyBncmFudGVkIHRvIFlvdSBmb3IgYSB0ZXJtIGVxdWFsIHRvIHRoZSByZW1haW5pbmcgcGVyaW9kIG9mIHByb3RlY3Rpb24gY292ZXJlZCBieSB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBhcHBsaWNhYmxlIHRvIHRoZSBPcmlnaW5hbCBDb2RlLlxuXG4gICAxMy4gVGVybWluYXRpb25cblxuICAgSW4gY2FzZSBvZiB0ZXJtaW5hdGlvbiwgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiAzIGFib3ZlLCBZb3UgYWdyZWUgdG8gaW1tZWRpYXRlbHkgc3RvcCBhbnkgZnVydGhlciB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCBkaXN0cmlidXRpb24gYW5kIHN1YmxpY2Vuc2luZyBvZiB0aGUgU29mdHdhcmUgYW5kIHRvIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgdGhhdCBhcmUgaW4gWW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyBvZiB0aGUgU29mdHdhcmUgd2hpY2ggaGF2ZSBiZWVuIHByb3Blcmx5IGdyYW50ZWQgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBJbiBhZGRpdGlvbiwgU2VjdGlvbnMgNSwgOCB0byAxMSwgMTMuMiBhbmQgMTUuMiBvZiB0aGlzIExpY2Vuc2UsIGluIHJlYXNvbiBvZiB0aGVpciBuYXR1cmUsIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBmb3IgYSBwZXJpb2Qgb2YgZmlmdGVlbiAoMTUpIHllYXJzLlxuXG4gICAxNC4gVmVyc2lvbnMgb2YgdGhlIGxpY2Vuc2VcblxuICAgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG1heSBwdWJsaXNoIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNob29zZSB0byBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoYXQgdmVyc2lvbiBvciB1c2UgdGhlIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHB1Ymxpc2hlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuXG5cbiAgIDE1LiBNaXNjZWxsYW5lb3VzXG5cbiAgICAgIDE1LjEgUmVsYXRpb25zaGlwIG9mIHRoZSBQYXJ0aWVzIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIFlvdSBhbmQgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiBvciBvdGhlcndpc2UuXG5cbiAgICAgIDE1LjIgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIgdGhlIEluaXRpYWwgRGV2ZWxvcGVyJ3MgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBvciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtIHRoZSBzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvciBvdGhlcndpc2UgY29tcGV0ZSB3aXRoLCBNb2RpZmljYXRpb25zLCBEZXJpdmF0aXZlIFByb2dyYW1zLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS5cblxuICAgICAgMTUuMyBTZXZlcmFiaWxpdHkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBvciBwb3J0aW9uIHRoZXJlb2YsIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgZWNvbm9taWMgYmVuZWZpdHMgYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZXh0ZW50LiBFTkQgT0YgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRVxuXG5PUEVOIENBU0NBREUgaXMgYSBGcmVuY2ggc29jacOpdMOpIHBhciBhY3Rpb25zIHNpbXBsaWZpw6llIGhhdmluZyBpdHMgcmVnaXN0ZXJlZCBoZWFkIG9mZmljZSBhdCAxLCBwbGFjZSBkZXMgRnLDqHJlcyBNb250Z29sZmllciwgNzgyODAsIEd1eWFuY291cnQsIEZyYW5jZSBhbmQgbWFpbiBvZmZpY2VzIGF0IDEsIHBsYWNlIGRlcyBGcsOocmVzIE1vbnRnb2xmaWVyLCA3ODI4MCwgR3V5YW5jb3VydCwgRnJhbmNlLiBJdHMgd2ViIHNpdGUgaXMgbG9jYXRlZCBhdCB0aGUgZm9sbG93aW5nIGFkZHJlc3Mgb3BlbmNhc2NhZGUuY29tXG5cbk9wZW4gQ0FTQ0FERSBUZWNobm9sb2d5IFB1YmxpYyBMaWNlbnNlXG5cblNjaGVkdWxlIFwiQVwiXG5cblRoZSBjb250ZW50IG9mIHRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIENBU0NBREUgVGVjaG5vbG9neSBQdWJsaWMgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoZSBjb250ZW50IG9mIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBQbGVhc2Ugb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBvcGVuY2FzY2FkZS5jb20gYW5kIHJlYWQgaXQgY29tcGxldGVseSBiZWZvcmUgdXNpbmcgdGhpcyBmaWxlLlxuXG5UaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgT1BFTiBDQVNDQURFLCB3aXRoIG1haW4gb2ZmaWNlcyBhdCAxLCBwbGFjZSBkZXMgRnLDqHJlcyBNb250Z29sZmllciwgNzgyODAsIEd1eWFuY291cnQsIEZyYW5jZS4gVGhlIE9yaWdpbmFsIENvZGUgaXMgY29weXJpZ2h0IMKpIE9QRU4gQ0FTQ0FERSBTQVMsIDIwMDEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFwiVGhlIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBhbmQgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBkaXNjbGFpbXMgYWxsIHN1Y2ggd2FycmFudGllcywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBvciBub24taW5mcmluZ2VtZW50LlxuXG5QbGVhc2Ugc2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2VcIi5cblxuRW5kIG9mIFNjaGVkdWxlIFwiQVwiXG5cbk9wZW4gQ0FTQ0FERSBUZWNobm9sb2d5IFB1YmxpYyBMaWNlbnNlXG5cblNjaGVkdWxlIFwiQlwiXG5cblwiVGhlIGNvbnRlbnQgb2YgdGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gQ0FTQ0FERSBUZWNobm9sb2d5IFB1YmxpYyBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhlIGNvbnRlbnQgb2YgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFBsZWFzZSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IG9wZW5jYXNjYWRlLmNvbSBhbmQgcmVhZCBpdCBjb21wbGV0ZWx5IGJlZm9yZSB1c2luZyB0aGlzIGZpbGUuXG5cblRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBPUEVOIENBU0NBREUsIHdpdGggbWFpbiBvZmZpY2VzIGF0IDEsIHBsYWNlIGRlcyBGcsOocmVzIE1vbnRnb2xmaWVyLCA3ODI4MCwgR3V5YW5jb3VydCwgRnJhbmNlLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBjb3B5cmlnaHQgwqkgT3BlbiBDQVNDQURFIFNBUywgMjAwMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuTW9kaWZpY2F0aW9ucyB0byB0aGUgT3JpZ2luYWwgQ29kZSBoYXZlIGJlZW4gbWFkZSBieSBfX19fX19fX19fX19fX19fX19fX19fX18uIE1vZGlmaWNhdGlvbnMgYXJlIGNvcHlyaWdodCDCqSBbWWVhciB0byBiZSBpbmNsdWRlZF0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblRoZSBzb2Z0d2FyZSBPcGVuIENBU0NBREUgVGVjaG5vbG9neSBhbmQgYWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGFyZSBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGFuZCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGRpc2NsYWltcyBhbGwgc3VjaCB3YXJyYW50aWVzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIG9yIG5vbi1pbmZyaW5nZW1lbnQuXG5cblBsZWFzZSBzZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZVwiXG5cbkVuZCBvZiBTY2hlZHVsZSBcIkJcIiJdLCJsaWNlbnNlSWRzIjpbIk9DQ1QtUEwiXSwia2V5d29yZHMiOlsibGljZW5zZSB2ZXJzaW9uIDYiLCJ2ZXJzaW9uIDYgNiIsIjYgNiBhcHJpbCIsIjYgYXByaWwgMjAxMyIsImFwcmlsIDIwMTMgb3BlbiIsIjIwMTMgb3BlbiBjYXNjYWRlIiwib3BlbiBjYXNjYWRlIHJlbGVhc2VzIiwiY2FzY2FkZSByZWxlYXNlcyBhbmQiLCJyZWxlYXNlcyBhbmQgbWFrZXMiLCJhbmQgbWFrZXMgcHVibGljbHkiLCJwdWJsaWNseSBhdmFpbGFibGUgdGhlIiwiY2FzY2FkZSB0ZWNobm9sb2d5IHRvIiwidGVjaG5vbG9neSB0byB0aGUiLCJmcmVlIHNvZnR3YXJlIGRldmVsb3BtZW50IiwiZGV2ZWxvcG1lbnQgY29tbXVuaXR5IHVuZGVyIiwiY29tbXVuaXR5IHVuZGVyIHRoZSIsImxpY2Vuc2UgdG8gaW5kdWNlIiwiY2xhaW1zIHRoaXMgbGljZW5zZSIsImxpY2Vuc2UgaGFzIHRoZSIsInRoYXQgY2hvaWNlIHBsZWFzZSIsImNob2ljZSBwbGVhc2UgcmVhZCIsImxpY2Vuc2UgY2FyZWZ1bGx5IGFuZCIsImNhcmVmdWxseSBhbmQgY29tcGxldGVseSIsImFuZCBjb21wbGV0ZWx5IGJlZm9yZSIsImNvbXBsZXRlbHkgYmVmb3JlIGRvd25sb2FkaW5nIiwiYnkgZG93bmxvYWRpbmcgdXNpbmciLCJkb3dubG9hZGluZyB1c2luZyBtb2RpZnlpbmciLCJ1c2luZyBtb2RpZnlpbmcgZGlzdHJpYnV0aW5nIiwibW9kaWZ5aW5nIGRpc3RyaWJ1dGluZyBhbmQiLCJkaXN0cmlidXRpbmcgYW5kIHN1YmxpY2Vuc2luZyIsImFuZCBzdWJsaWNlbnNpbmcgdGhpcyIsInN1YmxpY2Vuc2luZyB0aGlzIHNvZnR3YXJlIiwieW91ciBhY2NlcHRhbmNlIHRvIiwibm90IHdhbnQgdG8iLCJ3YW50IHRvIGFjY2VwdCIsInRvIGFjY2VwdCBvciIsImFjY2VwdCBvciBjYW5ub3QiLCJvciBjYW5ub3QgYWNjZXB0IiwiY2Fubm90IGFjY2VwdCBmb3IiLCJhY2NlcHQgZm9yIGFueSIsImZvciBhbnkgcmVhc29ucyIsImFueSByZWFzb25zIHRoZSIsInJlYXNvbnMgdGhlIHRlcm1zIiwib3IgdXNlIGluIiwiYW55IG1hbm5lciB0aGlzIiwibWFubmVyIHRoaXMgc29mdHdhcmUiLCJ0aGlzIHNvZnR3YXJlIDEiLCIxIGRlZmluaXRpb25zIHVubGVzcyIsImRlZmluaXRpb25zIHVubGVzcyB0aGVyZSIsInRoZXJlIGlzIHNvbWV0aGluZyIsImlzIHNvbWV0aGluZyBpbiIsInNvbWV0aGluZyBpbiB0aGUiLCJtYXR0ZXIgb3IgaW4iLCJpbiB0aGUgY29udGV4dCIsInRoZSBjb250ZXh0IGluY29uc2lzdGVudCIsImNvbnRleHQgaW5jb25zaXN0ZW50IHRoZXJld2l0aCIsImluY29uc2lzdGVudCB0aGVyZXdpdGggdGhlIiwidGhlcmV3aXRoIHRoZSBjYXBpdGFsaXplZCIsInRoZSBjYXBpdGFsaXplZCB0ZXJtcyIsImNhcGl0YWxpemVkIHRlcm1zIHVzZWQiLCJ0ZXJtcyB1c2VkIGluIiwiZm9sbG93aW5nIG1lYW5pbmcgYXBwbGljYWJsZSIsIm1lYW5pbmcgYXBwbGljYWJsZSBpbnRlbGxlY3R1YWwiLCJwcm9wZXJ0eSByaWdodHMgbWVhbnMiLCJyaWdodHMgbWVhbnMgYSIsIm1lYW5zIGEgd2l0aCIsImEgd2l0aCByZXNwZWN0IiwiZGV2ZWxvcGVyIGFueSByaWdodHMiLCJzdWJsaWNlbnNlIHRoZSBvcmlnaW5hbCIsImFuZCBiIHdpdGgiLCJiIHdpdGggcmVzcGVjdCIsInJlc3BlY3QgdG8geW91IiwiYW55IGNvbnRyaWJ1dG9yIGFueSIsImNvbnRyaWJ1dG9yIGFueSByaWdodHMiLCJ5b3Ugb3IgdG8iLCJvciB0byBzdWNoIiwidG8gc3VjaCBjb250cmlidXRvciIsImNvbnRhaW5lZCBpbiB5b3VyIiwibW9kaWZpY2F0aW9ucyBvciBpbiIsIm9yIGluIHN1Y2giLCJpbiBzdWNoIGNvbnRyaWJ1dG9yIiwicyBtb2RpZmljYXRpb25zIHRha2VuIiwib3JpZ2luYWwgY29kZSBjb250cmlidXRvciIsImNvZGUgY29udHJpYnV0b3IgbWVhbnMiLCJjcmVhdGlvbiBvZiBhbnkiLCJvZiBhbnkgbW9kaWZpY2F0aW9uIiwiYW55IG1vZGlmaWNhdGlvbiBpbmNsdWRpbmciLCJtb2RpZmljYXRpb24gaW5jbHVkaW5nIHRoZSIsImluaXRpYWwgZGV2ZWxvcGVyIGRlcml2YXRpdmUiLCJkZXZlbG9wZXIgZGVyaXZhdGl2ZSBwcm9ncmFtIiwiZGVyaXZhdGl2ZSBwcm9ncmFtIG1lYW5zIiwicHJvZ3JhbSBtZWFucyBhIiwibWVhbnMgYSBuZXciLCJuZXcgcHJvZ3JhbSBjb21iaW5pbmciLCJwcm9ncmFtIGNvbWJpbmluZyB0aGUiLCJjb21iaW5pbmcgdGhlIHNvZnR3YXJlIiwidGhlcmVvZiB3aXRoIG90aGVyIiwid2l0aCBvdGhlciBzb3VyY2UiLCJvdGhlciBzb3VyY2UgY29kZSIsInNvdXJjZSBjb2RlIG5vdCIsInRoaXMgbGljZW5zZSBpbml0aWFsIiwiZGV2ZWxvcGVyIG1lYW5zIG9wZW4iLCJtZWFucyBvcGVuIGNhc2NhZGUiLCJndXlhbmNvdXJ0IGZyYW5jZSBtb2RpZmljYXRpb25zIiwiZnJhbmNlIG1vZGlmaWNhdGlvbnMgbWVhbiIsInN1YnN0YW5jZSBvciB0aGUiLCJvciB0aGUgc3RydWN0dXJlIiwidGhlIHN0cnVjdHVyZSBvZiIsInRoZSBzb2Z0d2FyZSB3aGVuIiwic29mdHdhcmUgd2hlbiBzb3VyY2UiLCJ3aGVuIHNvdXJjZSBjb2RlIiwiY29udGFpbmluZyB0aGUgc29mdHdhcmUiLCJzb2Z0d2FyZSBieSB3YXkiLCJvZiBleGFtcGxlIG1vZGlmaWNhdGlvbnMiLCJleGFtcGxlIG1vZGlmaWNhdGlvbnMgaW5jbHVkZSIsIm1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbnkiLCJpbmNsdWRlIGFueSBkZWJ1ZyIsImFueSBkZWJ1ZyBvZiIsImRlYnVnIG9mIG9yIiwib2Ygb3IgaW1wcm92ZW1lbnQiLCJvciBpbXByb3ZlbWVudCB0byIsIml0cyBjb21wb25lbnRzIG9yIiwiY29tcG9uZW50cyBvciBwb3J0aW9ucyIsIm9yIHBvcnRpb25zIGFzIiwicG9ydGlvbnMgYXMgd2VsbCIsImFzIGl0cyBuZXh0IiwiaXRzIG5leHQgdmVyc2lvbnMiLCJuZXh0IHZlcnNpb25zIG9yIiwidmVyc2lvbnMgb3IgcmVsZWFzZXMiLCJvciByZWxlYXNlcyB0aGVyZW9mIiwicmVsZWFzZXMgdGhlcmVvZiBvcmlnaW5hbCIsInRoZXJlb2Ygb3JpZ2luYWwgY29kZSIsImNhc2NhZGUgdGVjaG5vbG9neSBvcmlnaW5hbGx5IiwidGVjaG5vbG9neSBvcmlnaW5hbGx5IG1hZGUiLCJvciB1cGdyYWRlcyBvZiIsInVwZ3JhZGVzIG9mIHRoZSIsImF2YWlsYWJsZSBieSBpbml0aWFsIiwidGhpcyBsaWNlbnNlIHNvZnR3YXJlIiwibGljZW5zZSBzb2Z0d2FyZSBtZWFucyIsImNvZGUgdGhlIG1vZGlmaWNhdGlvbnMiLCJ0aGUgbW9kaWZpY2F0aW9ucyB0aGUiLCJwb3J0aW9ucyB0aGVyZW9mIHlvdSIsInRoZXJlb2YgeW91IG9yIiwibGljZW5zZSAyIGFjY2VwdGFuY2UiLCIyIGFjY2VwdGFuY2Ugb2YiLCJvZiBsaWNlbnNlIGJ5IiwiYnkgdXNpbmcgcmVwcm9kdWNpbmciLCJ1c2luZyByZXByb2R1Y2luZyBtb2RpZnlpbmciLCJyZXByb2R1Y2luZyBtb2RpZnlpbmcgZGlzdHJpYnV0aW5nIiwiZGlzdHJpYnV0aW5nIG9yIHN1YmxpY2Vuc2luZyIsIm9yIHN1YmxpY2Vuc2luZyB0aGUiLCJzdWJsaWNlbnNpbmcgdGhlIHNvZnR3YXJlIiwicG9ydGlvbiB0aGVyZW9mIHlvdSIsInRoZXJlb2YgeW91IGV4cHJlc3NseSIsInlvdSBleHByZXNzbHkgaW5kaWNhdGUiLCJleHByZXNzbHkgaW5kaWNhdGUgeW91ciIsImxpY2Vuc2UgYW5kIHVuZGVydGFrZSIsImFuZCB1bmRlcnRha2UgdG8iLCJ1bmRlcnRha2UgdG8gYWN0IiwiYWN0IGluIGFjY29yZGFuY2UiLCJhY2NvcmRhbmNlIHdpdGggYWxsIiwiYXBwbGljYWJsZSB0byB5b3UiLCJ0byB5b3UgMyIsInlvdSAzIHNjb3BlIiwiMyBzY29wZSBhbmQiLCJzY29wZSBhbmQgcHVycG9zZSIsImFuZCBwdXJwb3NlIHRoaXMiLCJub3QgdXNlIHJlcHJvZHVjZSIsIm1vZGlmeSBkaXN0cmlidXRlIHN1YmxpY2Vuc2UiLCJkaXN0cmlidXRlIHN1YmxpY2Vuc2Ugb3IiLCJzdWJsaWNlbnNlIG9yIGNpcmN1bGF0ZSIsIm9yIGNpcmN1bGF0ZSB0aGUiLCJjaXJjdWxhdGUgdGhlIHNvZnR3YXJlIiwicG9ydGlvbiB0aGVyZW9mIGV4Y2VwdCIsInRoZXJlb2YgZXhjZXB0IGFzIiwiYXR0ZW1wdCB0byBvdGhlcndpc2UiLCJ0byBvdGhlcndpc2UgdXNlIiwib3RoZXJ3aXNlIHVzZSByZXByb2R1Y2UiLCJzb2Z0d2FyZSBpcyB2b2lkIiwibGljZW5zZSA0IGNvbnRyaWJ1dG9yIiwiNCBjb250cmlidXRvciBsaWNlbnNlIiwiY29udHJpYnV0b3IgbGljZW5zZSBzdWJqZWN0IiwiZGV2ZWxvcGVyIGFuZCBlYWNoIiwiYW5kIGVhY2ggb2YiLCJmcmVlIGlycmV2b2NhYmxlIGFuZCIsImlycmV2b2NhYmxlIGFuZCBub24iLCJhbmQgbm9uIGV4Y2x1c2l2ZSIsInByb3BlcnR5IHJpZ2h0cyB0aGV5IiwicmlnaHRzIHRoZXkgb3duIiwidGhleSBvd24gb3IiLCJ0aGF0IHlvdSByZXByb2R1Y2UiLCJ5b3UgcmVwcm9kdWNlIGluIiwic29mdHdhcmUgdGhlIGNvcHlyaWdodCIsImRpc2NsYWltZXJzIG9mIHRoZSIsImRldmVsb3BlciBhcyB0aGV5IiwiY29kZSBhbmQgYXR0YWNoZWQiLCJhbmQgYXR0YWNoZWQgaGVyZXRvIiwiYXMgc2NoZWR1bGUgYSIsInNjaGVkdWxlIGEgYW5kIiwiYSBhbmQgYW55Il19LHsibGljZW5zZVRleHRzIjpbIk9DTEMgUmVzZWFyY2ggUHVibGljIExpY2Vuc2UgMi4wXG5cblRlcm1zIFx1MDAyNiBDb25kaXRpb25zIE9mIFVzZVxuXG5NYXksIDIwMDIgQ29weXJpZ2h0IMKpIDIwMDIuIE9DTEMgT25saW5lIENvbXB1dGVyIExpYnJhcnkgQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcblxuUExFQVNFIFJFQUQgVEhJUyBET0NVTUVOVCBDQVJFRlVMTFkuIEJZIERPV05MT0FESU5HIE9SIFVTSU5HIFRIRSBDT0RFIEJBU0UgQU5EL09SIERPQ1VNRU5UQVRJT04gQUNDT01QQU5ZSU5HIFRISVMgTElDRU5TRSAoVEhFIFwiTGljZW5zZVwiKSwgWU9VIEFHUkVFIFRPIFRIRSBGT0xMT1dJTkcgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBMSUNFTlNFLlxuXG5TZWN0aW9uIDEuIFlvdXIgUmlnaHRzXG5cblN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgT0NMQyBPZmZpY2Ugb2YgUmVzZWFyY2ggKHRoZSBcIk9yaWdpbmFsIENvbnRyaWJ1dG9yXCIpIGFuZCBlYWNoIHN1YnNlcXVlbnQgY29udHJpYnV0b3IgKGNvbGxlY3RpdmVseSB3aXRoIHRoZSBPcmlnaW5hbCBDb250cmlidXRvciwgdGhlIFwiQ29udHJpYnV0b3JzXCIpIGhlcmVieSBncmFudCB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIG5vLWNoYXJnZSwgdHJhbnNmZXJhYmxlIGxpY2Vuc2UgdG8gZXhlY3V0ZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBhbmQgZGlzdHJpYnV0ZSAoaW50ZXJuYWxseSBhbmQgZXh0ZXJuYWxseSksIGZvciBjb21tZXJjaWFsIGFuZCBub25jb21tZXJjaWFsIHB1cnBvc2VzLCB0aGUgb3JpZ2luYWwgY29kZSBjb250cmlidXRlZCBieSBPcmlnaW5hbCBDb250cmlidXRvciBhbmQgYWxsIE1vZGlmaWNhdGlvbnMgKGNvbGxlY3RpdmVseSBjYWxsZWQgdGhlIFwiUHJvZ3JhbVwiKS5cblxuU2VjdGlvbiAyLiBEZWZpbml0aW9uc1xuXG5BIFwiTW9kaWZpY2F0aW9uXCIgdG8gdGhlIFByb2dyYW0gaXMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGFueSBmaWxlIG9mIHRoZSBQcm9ncmFtIGFuZCBhbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgUHJvZ3JhbS4gSWYgeW91IG1ha2UgYSBNb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gZXh0ZXJuYWxseSB5b3UgYXJlIGEgXCJDb250cmlidXRvci5cIiBUaGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIG11c3QgYmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBpbmNsdWRpbmcgdGhvc2UgaW4gU2VjdGlvbiAzIGJlbG93LlxuXG5BIFwiQ29tYmluZWQgV29ya1wiIHJlc3VsdHMgZnJvbSBjb21iaW5pbmcgYW5kIGludGVncmF0aW5nIGFsbCBvciBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIGNvZGUuIEEgQ29tYmluZWQgV29yayBtYXkgYmUgdGhvdWdodCBvZiBhcyBoYXZpbmcgbXVsdGlwbGUgcGFyZW50cyBvciBiZWluZyByZXN1bHQgb2YgbXVsdGlwbGUgbGluZXMgb2YgY29kZSBkZXZlbG9wbWVudC5cblxuU2VjdGlvbiAzLiBEaXN0cmlidXRpb24gTGljZW5zaW5nIFRlcm1zXG5cbiAgIEEuIEdlbmVyYWwgUmVxdWlyZW1lbnRzXG5cbiAgIEV4Y2VwdCBhcyBuZWNlc3NhcnkgdG8gcmVjb2duaXplIHRoaXJkLXBhcnR5IHJpZ2h0cyBvciB0aGlyZC1wYXJ0eSByZXN0cmljdGlvbiAoc2VlIGJlbG93KSwgYSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYW55IG9mIHRoZSBmb3JtcyBsaXN0ZWQgYmVsb3cgbXVzdCBub3QgcHV0IGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50J3MgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi5cblxuICAgQXMgYSBDb250cmlidXRvciwgeW91IHJlcHJlc2VudCB0aGF0IHlvdXIgTW9kaWZpY2F0aW9uKHMpIGFyZSB5b3VyIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZCwgdG8gdGhlIGJlc3Qgb2YgeW91ciBrbm93bGVkZ2UsIG5vIHRoaXJkIHBhcnR5IGhhcyBhbnkgY2xhaW0gKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcykgcmVsYXRpbmcgdG8geW91ciBNb2RpZmljYXRpb24ocykuIFlvdSByZXByZXNlbnQgdGhhdCBlYWNoIG9mIHlvdXIgTW9kaWZpY2F0aW9ucyBpbmNsdWRlcyBjb21wbGV0ZSBkZXRhaWxzIG9mIGFueSB0aGlyZC1wYXJ0eSByaWdodCBvciBvdGhlciB0aGlyZC1wYXJ0eSByZXN0cmljdGlvbiBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnQgb2YgeW91ciBNb2RpZmljYXRpb24gKGluY2x1ZGluZyBhIGNvcHkgb2YgYW55IGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnQpLlxuXG4gICBUaGUgUHJvZ3JhbSBtdXN0IGJlIGRpc3RyaWJ1dGVkIHdpdGhvdXQgY2hhcmdlIGJleW9uZCB0aGUgY29zdHMgb2YgcGh5c2ljYWxseSB0cmFuc2ZlcnJpbmcgdGhlIGZpbGVzIHRvIHRoZSByZWNpcGllbnQuXG5cbiAgIFRoaXMgV2FycmFudHkgRGlzY2xhaW1lci9MaW1pdGF0aW9uIG9mIExpYWJpbGl0eSBtdXN0IGJlIHByb21pbmVudGx5IGRpc3BsYXllZCB3aXRoIGV2ZXJ5IGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhbnkgZm9ybTpcblxuICAgWU9VIEFHUkVFIFRIQVQgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgKEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQpLiBBQ0NPUkRJTkdMWSwgT0NMQyBNQUtFUyBOTyBXQVJSQU5USUVTLCBSRVBSRVNFTlRBVElPTlMgT1IgR1VBUkFOVEVFUywgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLCBSRVBSRVNFTlRBVElPTlMgT1IgR1VBUkFOVEVFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLCBBUyBUTzogKEEpIFRIRSBGVU5DVElPTkFMSVRZIE9SIE5PTklORlJJTkdFTUVOVCBPRiBQUk9HUkFNLCBBTlkgTU9ESUZJQ0FUSU9OLCBBIENPTUJJTkVEIFdPUksgT1IgQU4gQUdHUkVHQVRFIFdPUks7IE9SIChCKSBUSEUgUkVTVUxUUyBPRiBBTlkgUFJPSkVDVCBVTkRFUlRBS0VOIFVTSU5HIFRIRSBQUk9HUkFNLCBBTlkgTU9ESUZJQ0FUSU9OLCBBIENPTUJJTkVEIFdPUksgT1IgQU4gQUdHUkVHQVRFIFdPUksuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIE9SIEFOWSBPVEhFUiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSEUgUFJPR1JBTSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFlPVSBIRVJFQlkgV0FJVkUgQU5ZIENMQUlNUyBGT1IgREFNQUdFUyBPRiBBTlkgS0lORCBBR0FJTlNUIENPTlRSSUJVVE9SUyBXSElDSCBNQVkgUkVTVUxUIEZST00gWU9VUiBVU0UgT0YgVEhFIFBST0dSQU0uXG5cbiAgIEIuIFJlcXVpcmVtZW50cyBmb3IgYSBEaXN0cmlidXRpb24gb2YgTW9kaWZpYWJsZSBDb2RlXG5cbiAgIElmIHlvdSBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIGEgZm9ybSB0byB3aGljaCB0aGUgcmVjaXBpZW50IGNhbiBtYWtlIE1vZGlmaWNhdGlvbnMgKGUuZy4gc291cmNlIGNvZGUpLCB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGFwcGx5IHRvIHVzZSBieSByZWNpcGllbnQuIEluIGFkZGl0aW9uLCBlYWNoIHNvdXJjZSBhbmQgZGF0YSBmaWxlIG9mIHRoZSBQcm9ncmFtIGFuZCBhbnkgTW9kaWZpY2F0aW9uIHlvdSBkaXN0cmlidXRlIG11c3QgY29udGFpbiB0aGUgZm9sbG93aW5nIG5vdGljZTpcblxuICAgXCJDb3B5cmlnaHQgKGMpIDIwMDAtIChpbnNlcnQgdGhlbiBjdXJyZW50IHllYXIpIE9DTEMgT25saW5lIENvbXB1dGVyIExpYnJhcnkgQ2VudGVyLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnMgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlLCBhcyB1cGRhdGVkIGZyb20gdGltZSB0byB0aW1lIGJ5IHRoZSBPQ0xDIE9mZmljZSBvZiBSZXNlYXJjaCwgYXJlIHN1YmplY3QgdG8gT0NMQyBSZXNlYXJjaCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGN1cnJlbnQgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vcHVybC5vY2xjLm9yZy9vY2xjL3Jlc2VhcmNoL09SUEwvLiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgT0NMQyBSZXNlYXJjaC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gT0NMQyBSZXNlYXJjaCwgcGxlYXNlIHNlZSBodHRwOi8vd3d3Lm9jbGMub3JnL3Jlc2VhcmNoLy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fXyAuIFBvcnRpb25zIGNyZWF0ZWQgYnkgX19fX19fX19fX19fX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChDKSBfX19fX19fX19fX19fX19fX19fX19fX19fX19fIC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIC5cIlxuXG4gICBDLiBSZXF1aXJlbWVudHMgZm9yIGEgRGlzdHJpYnV0aW9uIG9mIE5vbi1tb2RpZmlhYmxlIENvZGVcblxuICAgSWYgeW91IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gYSBmb3JtIHRvIHdoaWNoIHRoZSByZWNpcGllbnQgY2Fubm90IG1ha2UgTW9kaWZpY2F0aW9ucyAoZS5nLiBvYmplY3QgY29kZSksIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgYXBwbHkgdG8gdXNlIGJ5IHJlY2lwaWVudCBhbmQgeW91IG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIHN0YXRlbWVudCBpbiBhcHByb3ByaWF0ZSBhbmQgY29uc3BpY3VvdXMgbG9jYXRpb25zOlxuXG4gICBcIkNvcHlyaWdodCAoYykgMjAwMC0gKGluc2VydCB0aGVuIGN1cnJlbnQgeWVhcikgT0NMQyBPbmxpbmUgQ29tcHV0ZXIgTGlicmFyeSBDZW50ZXIsIEluYy4gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cIlxuXG4gICBJbiBhZGRpdGlvbiwgdGhlIHNvdXJjZSBjb2RlIG11c3QgYmUgaW5jbHVkZWQgd2l0aCB0aGUgb2JqZWN0IGNvZGUgZGlzdHJpYnV0aW9uIG9yIHRoZSBkaXN0cmlidXRvciBtdXN0IHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIHRvIHRoZSByZWNpcGllbnQgdXBvbiByZXF1ZXN0LlxuXG4gICBELiBSZXF1aXJlbWVudHMgZm9yIGEgQ29tYmluZWQgV29yayBEaXN0cmlidXRpb25cblxuICAgRGlzdHJpYnV0aW9ucyBvZiBDb21iaW5lZCBXb3JrcyBhcmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGFuZCBtdXN0IGJlIG1hZGUgYXQgbm8gY2hhcmdlIHRvIHRoZSByZWNpcGllbnQgYmV5b25kIHRoZSBjb3N0cyBvZiBwaHlzaWNhbGx5IHRyYW5zZmVycmluZyB0aGUgZmlsZXMgdG8gcmVjaXBpZW50LlxuXG4gICBBIENvbWJpbmVkIFdvcmsgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIGVpdGhlciBtb2RpZmlhYmxlIG9yIG5vbi1tb2RpZmlhYmxlIGNvZGUuIFRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLkIgb3IgMy5DIGFib3ZlIChhcyBhcHByb3ByaWF0ZSkgYXBwbHkgdG8gc3VjaCBkaXN0cmlidXRpb25zLlxuXG4gICBBbiBcIkFnZ3JlZ2F0ZSBXb3JrXCIgaXMgd2hlbiB0aGUgUHJvZ3JhbSBleGlzdHMsIHdpdGhvdXQgaW50ZWdyYXRpb24sIHdpdGggb3RoZXIgcHJvZ3JhbXMgb24gYSBzdG9yYWdlIG1lZGl1bS4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIHBvcnRpb25zIG9mIGFuIEFnZ3JlZ2F0ZSBXb3JrIHdoaWNoIGFyZSBub3QgY292ZXJlZCBieSB0aGUgZGVmaW5pdGlvbiBvZiBcIlByb2dyYW1cIiBwcm92aWRlZCBpbiB0aGlzIExpY2Vuc2UuIFlvdSBhcmUgbm90IGZvcmJpZGRlbiBmcm9tIHNlbGxpbmcgYW4gQWdncmVnYXRlIFdvcmsuIEhvd2V2ZXIsIHRoZSBQcm9ncmFtIGNvbnRhaW5lZCBpbiBhbiBBZ2dyZWdhdGUgV29yayBpcyBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gQWxzbywgc2hvdWxkIHRoZSBQcm9ncmFtIGJlIGV4dHJhY3RlZCBmcm9tIGFuIEFnZ3JlZ2F0ZSBXb3JrLCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgdXNlIG9mIHRoZSBQcm9ncmFtIGFwYXJ0IGZyb20gdGhlIEFnZ3JlZ2F0ZSBXb3JrLlxuXG4gICBTZWN0aW9uIDQuIExpY2Vuc2UgR3JhbnRcblxuICAgRm9yIHB1cnBvc2VzIG9mIHBlcm1pdHRpbmcgdXNlIG9mIHlvdXIgTW9kaWZpY2F0aW9ucyBieSBPQ0xDIGFuZCBvdGhlciBsaWNlbnNlZXMgaGVyZXVuZGVyLCB5b3UgaGVyZWJ5IGdyYW50IHRvIE9DTEMgYW5kIHN1Y2ggb3RoZXIgbGljZW5zZWVzIHRoZSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgdHJhbnNmZXJhYmxlLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHRvIGV4ZWN1dGUsIGNvcHksIGFsdGVyLCBkZWxldGUsIG1vZGlmeSwgYWRhcHQsIGNoYW5nZSwgcmV2aXNlLCBlbmhhbmNlLCBkZXZlbG9wLCBwdWJsaWNseSBkaXNwbGF5LCBkaXN0cmlidXRlIChpbnRlcm5hbGx5IGFuZCBleHRlcm5hbGx5KSBhbmQvb3IgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgb24geW91ciBNb2RpZmljYXRpb25zIChhbmQgZGVyaXZhdGl2ZSB3b3JrcyB0aGVyZW9mKSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlc2UgVGVybXMuIFRoaXMgU2VjdGlvbiA0IHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIGZvciBhbnkgcmVhc29uLlxuXG5TZWN0aW9uIDUuIFRlcm1pbmF0aW9uIG9mIFJpZ2h0c1xuXG5UaGlzIG5vbi1leGNsdXNpdmUgbGljZW5zZSAod2l0aCByZXNwZWN0IHRvIHRoZSBncmFudCBmcm9tIGEgcGFydGljdWxhciBDb250cmlidXRvcikgYXV0b21hdGljYWxseSB0ZXJtaW5hdGVzIGZvciBhbnkgZW50aXR5IHRoYXQgaW5pdGlhdGVzIGxlZ2FsIGFjdGlvbiBmb3IgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudCAod2l0aCByZXNwZWN0IHRvIHRoZSBQcm9ncmFtKSBhZ2FpbnN0IHN1Y2ggQ29udHJpYnV0b3IgYXMgb2YgdGhlIGluaXRpYXRpb24gb2Ygc3VjaCBhY3Rpb24uXG5cbklmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoaXMgTGljZW5zZSwgeW91ciByaWdodHMgKGJ1dCBub3QgeW91ciBvYmxpZ2F0aW9ucykgdW5kZXIgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVubGVzcyB5b3UgY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgbm9uY29tcGxpYW5jZS4gQWxsIHN1YmxpY2Vuc2VzIGdyYW50ZWQgYnkgeW91IHdoaWNoIHByZWV4aXN0IHN1Y2ggdGVybWluYXRpb24gYW5kIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgc3VjaCB0ZXJtaW5hdGlvbi5cblxuU2VjdGlvbiA2LiBPdGhlciBUZXJtc1xuXG5FeGNlcHQgZm9yIHRoZSBjb3B5cmlnaHQgbm90aWNlcyByZXF1aXJlZCBhYm92ZSwgeW91IG1heSBub3QgdXNlIGFueSB0cmFkZW1hcmsgb2YgYW55IG9mIHRoZSBDb250cmlidXRvcnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIHRoZSByZWxldmFudCBDb250cmlidXRvci4gWW91IGFncmVlIG5vdCB0byByZW1vdmUsIGFsdGVyIG9yIG9ic2N1cmUgYW55IGNvcHlyaWdodCBvciBvdGhlciBwcm9wcmlldGFyeSByaWdodHMgbm90aWNlIGNvbnRhaW5lZCBpbiB0aGUgUHJvZ3JhbS5cblxuQWxsIHRyYW5zZmVycyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mIHNoYWxsIGJlIG1hZGUgaW4gY29tcGxpYW5jZSB3aXRoIFUuUy4gaW1wb3J0L2V4cG9ydCByZWd1bGF0aW9ucyBvciBvdGhlciByZXN0cmljdGlvbnMgb2YgdGhlIFUuUy4gRGVwYXJ0bWVudCBvZiBDb21tZXJjZSwgYXMgd2VsbCBhcyBvdGhlciBzaW1pbGFyIHRyYWRlIG9yIGNvbW1lcmNlIHJlc3RyaWN0aW9ucyB3aGljaCBtaWdodCBhcHBseS5cblxuQW55IHBhdGVudCBvYnRhaW5lZCBieSBhbnkgcGFydHkgY292ZXJpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBhcnQgdGhlcmVvZiBtdXN0IGluY2x1ZGUgYSBwcm92aXNpb24gcHJvdmlkaW5nIGZvciB0aGUgZnJlZSwgcGVycGV0dWFsIGFuZCB1bnJlc3RyaWN0ZWQgY29tbWVyY2lhbCBhbmQgbm9uY29tbWVyY2lhbCB1c2UgYnkgYW55IHRoaXJkIHBhcnR5LlxuXG5JZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIHNldHRsZW1lbnQgcmVsYXRpbmcgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudCBvciBhbnkgb3RoZXIgY2F1c2Ugb2YgYWN0aW9uLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBzdWNoIGNvbmRpdGlvbnMgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSBjb21wbGlhbmNlIHdpdGggdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gc28gYXMgdG8gc2ltdWx0YW5lb3VzbHkgc2F0aXNmeSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgc3VjaCBvdGhlciBjb25kaXRpb25zLCB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB5b3UgY291bGQgbm90IHNhdGlzZnkgYm90aCB0aGUgcGF0ZW50IGxpY2Vuc2UgYW5kIHRoaXMgTGljZW5zZSwgYW5kIHlvdSB3b3VsZCBiZSByZXF1aXJlZCB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLlxuXG5JZiB5b3UgbGVhcm4gb2YgYSB0aGlyZCBwYXJ0eSBjbGFpbSBvciBvdGhlciByZXN0cmljdGlvbiByZWxhdGluZyB0byBhIFByb2dyYW0geW91IGhhdmUgYWxyZWFkeSBkaXN0cmlidXRlZCB5b3Ugc2hhbGwgcHJvbXB0bHkgcmVkbyB5b3VyIFByb2dyYW0gdG8gYWRkcmVzcyB0aGUgaXNzdWUgYW5kIHRha2UgYWxsIHJlYXNvbmFibGUgc3RlcHMgdG8gaW5mb3JtIHRob3NlIHdobyBtYXkgaGF2ZSByZWNlaXZlZCB0aGUgUHJvZ3JhbSBhdCBpc3N1ZS4gQW4gZXhhbXBsZSBvZiBhbiBhcHByb3ByaWF0ZSByZWFzb25hYmxlIHN0ZXAgdG8gaW5mb3JtIHdvdWxkIGJlIHBvc3RpbmcgYW4gYW5ub3VuY2VtZW50IG9uIGFuIGFwcHJvcHJpYXRlIHdlYiBidWxsZXRpbiBib2FyZC5cblxuVGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGFyZSBkZWVtZWQgdG8gYmUgc2V2ZXJhYmxlLCBhbmQgdGhlIGludmFsaWRpdHkgb3IgdW5lbmZvcmNlYWJpbGl0eSBvZiBhbnkgcHJvdmlzaW9uIHNoYWxsIG5vdCBhZmZlY3Qgb3IgaW1wYWlyIHRoZSByZW1haW5pbmcgcHJvdmlzaW9ucyB3aGljaCBzaGFsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIEluIHN1YnN0aXR1dGlvbiBmb3IgYW55IHByb3Zpc2lvbiBoZWxkIHVubGF3ZnVsLCB0aGVyZSBzaGFsbCBiZSBzdWJzdGl0dXRlZCBhIHByb3Zpc2lvbiBvZiBzaW1pbGFyIGltcG9ydCByZWZsZWN0aW5nIHRoZSBvcmlnaW5hbCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMgaGVyZXRvIHRvIHRoZSBleHRlbnQgcGVybWlzc2libGUgdW5kZXIgbGF3LlxuXG5UaGUgT3JpZ2luYWwgQ29udHJpYnV0b3IgZnJvbSB0aW1lIHRvIHRpbWUgbWF5IGNoYW5nZSB0aGlzIExpY2Vuc2UsIGFuZCB0aGUgYW1lbmRlZCBsaWNlbnNlIHdpbGwgYXBwbHkgdG8gYWxsIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBkb3dubG9hZGVkIGFmdGVyIHRoZSBuZXcgbGljZW5zZSBpcyBwb3N0ZWQuIFRoaXMgTGljZW5zZSBncmFudHMgb25seSB0aGUgcmlnaHRzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluIGFuZCBwcm92aWRlcyB5b3Ugd2l0aCBubyBpbXBsaWVkIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvci5cblxuVGhpcyBMaWNlbnNlIGlzIHRoZSBjb21wbGV0ZSBhbmQgZXhjbHVzaXZlIHN0YXRlbWVudCBvZiB0aGUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mIGFuZCBtYXkgbm90IGJlIGFtZW5kZWQgZXhjZXB0IGJ5IHRoZSB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgcGFydGllcy4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBPaGlvIGFuZCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCB3aXRob3V0IHJlZ2FyZCB0byBwcmluY2lwbGVzIG9mIGNvbmZsaWN0cyBvZiBsYXcuIl0sImxpY2Vuc2VJZHMiOlsiT0NMQy0yLjAiXSwia2V5d29yZHMiOlsiMCB0ZXJtcyBjb25kaXRpb25zIiwidGVybXMgY29uZGl0aW9ucyBvZiIsIm9mIHVzZSBtYXkiLCJ1c2UgbWF5IDIwMDIiLCJtYXkgMjAwMiBjb3B5cmlnaHQiLCJjb3B5cmlnaHQgMjAwMiBvY2xjIiwiMjAwMiBvY2xjIG9ubGluZSIsImNlbnRlciBpbmMgYWxsIiwiZG9jdW1lbnQgY2FyZWZ1bGx5IGJ5IiwiY2FyZWZ1bGx5IGJ5IGRvd25sb2FkaW5nIiwidXNpbmcgdGhlIGNvZGUiLCJ0aGUgY29kZSBiYXNlIiwiYmFzZSBhbmQgb3IiLCJvciBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyIsImRvY3VtZW50YXRpb24gYWNjb21wYW55aW5nIHRoaXMiLCJsaWNlbnNlIHNlY3Rpb24gMSIsInNlY3Rpb24gMSB5b3VyIiwiMSB5b3VyIHJpZ2h0cyIsInlvdXIgcmlnaHRzIHN1YmplY3QiLCJsaWNlbnNlIHRoZSBvY2xjIiwib2YgcmVzZWFyY2ggdGhlIiwic3Vic2VxdWVudCBjb250cmlidXRvciBjb2xsZWN0aXZlbHkiLCJjb250cmlidXRvciBjb2xsZWN0aXZlbHkgd2l0aCIsImNvbGxlY3RpdmVseSB3aXRoIHRoZSIsIm9yaWdpbmFsIGNvbnRyaWJ1dG9yIHRoZSIsImNvbnRyaWJ1dG9yIHRoZSBjb250cmlidXRvcnMiLCJleGNsdXNpdmUgd29ybGR3aWRlIG5vIiwid29ybGR3aWRlIG5vIGNoYXJnZSIsIm5vIGNoYXJnZSB0cmFuc2ZlcmFibGUiLCJjaGFyZ2UgdHJhbnNmZXJhYmxlIGxpY2Vuc2UiLCJ0byBleGVjdXRlIHByZXBhcmUiLCJleGVjdXRlIHByZXBhcmUgZGVyaXZhdGl2ZSIsIndvcmtzIG9mIGFuZCIsIm9mIGFuZCBkaXN0cmlidXRlIiwiYW5kIGRpc3RyaWJ1dGUgaW50ZXJuYWxseSIsImFuZCBleHRlcm5hbGx5IGZvciIsImV4dGVybmFsbHkgZm9yIGNvbW1lcmNpYWwiLCJhbmQgbm9uY29tbWVyY2lhbCBwdXJwb3NlcyIsIm5vbmNvbW1lcmNpYWwgcHVycG9zZXMgdGhlIiwicHVycG9zZXMgdGhlIG9yaWdpbmFsIiwib3JpZ2luYWwgY29kZSBjb250cmlidXRlZCIsImNvZGUgY29udHJpYnV0ZWQgYnkiLCJjb250cmlidXRlZCBieSBvcmlnaW5hbCIsImJ5IG9yaWdpbmFsIGNvbnRyaWJ1dG9yIiwiYWxsIG1vZGlmaWNhdGlvbnMgY29sbGVjdGl2ZWx5IiwibW9kaWZpY2F0aW9ucyBjb2xsZWN0aXZlbHkgY2FsbGVkIiwiY29sbGVjdGl2ZWx5IGNhbGxlZCB0aGUiLCJjYWxsZWQgdGhlIHByb2dyYW0iLCJ0aGUgcHJvZ3JhbSBzZWN0aW9uIiwicHJvZ3JhbSBzZWN0aW9uIDIiLCJzZWN0aW9uIDIgZGVmaW5pdGlvbnMiLCIyIGRlZmluaXRpb25zIGEiLCJkZWZpbml0aW9ucyBhIG1vZGlmaWNhdGlvbiIsImEgbW9kaWZpY2F0aW9uIHRvIiwicHJvZ3JhbSBpcyBhbnkiLCJjb250ZW50cyBvZiBhbnkiLCJvZiBhbnkgZmlsZSIsImFueSBmaWxlIG9mIiwiYW5kIGFueSBuZXciLCJtYWtlIGEgbW9kaWZpY2F0aW9uIiwibW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRlIiwidGhlIHByb2dyYW0gZXh0ZXJuYWxseSIsInByb2dyYW0gZXh0ZXJuYWxseSB5b3UiLCJleHRlcm5hbGx5IHlvdSBhcmUiLCJjb250cmlidXRvciB0aGUgZGlzdHJpYnV0aW9uIiwibGljZW5zZSBpbmNsdWRpbmcgdGhvc2UiLCJpbmNsdWRpbmcgdGhvc2UgaW4iLCJ0aG9zZSBpbiBzZWN0aW9uIiwiMyBiZWxvdyBhIiwiYmVsb3cgYSBjb21iaW5lZCIsImNvbWJpbmVkIHdvcmsgcmVzdWx0cyIsInJlc3VsdHMgZnJvbSBjb21iaW5pbmciLCJmcm9tIGNvbWJpbmluZyBhbmQiLCJjb21iaW5pbmcgYW5kIGludGVncmF0aW5nIiwiYW5kIGludGVncmF0aW5nIGFsbCIsImludGVncmF0aW5nIGFsbCBvciIsImFsbCBvciBwYXJ0cyIsIm90aGVyIGNvZGUgYSIsImNvZGUgYSBjb21iaW5lZCIsIm1heSBiZSB0aG91Z2h0IiwiYmUgdGhvdWdodCBvZiIsInRob3VnaHQgb2YgYXMiLCJvZiBhcyBoYXZpbmciLCJhcyBoYXZpbmcgbXVsdGlwbGUiLCJoYXZpbmcgbXVsdGlwbGUgcGFyZW50cyIsIm11bHRpcGxlIHBhcmVudHMgb3IiLCJwYXJlbnRzIG9yIGJlaW5nIiwib3IgYmVpbmcgcmVzdWx0IiwiYmVpbmcgcmVzdWx0IG9mIiwicmVzdWx0IG9mIG11bHRpcGxlIiwib2YgbXVsdGlwbGUgbGluZXMiLCJtdWx0aXBsZSBsaW5lcyBvZiIsIm9mIGNvZGUgZGV2ZWxvcG1lbnQiLCJjb2RlIGRldmVsb3BtZW50IHNlY3Rpb24iLCJkZXZlbG9wbWVudCBzZWN0aW9uIDMiLCJzZWN0aW9uIDMgZGlzdHJpYnV0aW9uIiwiMyBkaXN0cmlidXRpb24gbGljZW5zaW5nIiwiZGlzdHJpYnV0aW9uIGxpY2Vuc2luZyB0ZXJtcyIsImxpY2Vuc2luZyB0ZXJtcyBhIiwidGVybXMgYSBnZW5lcmFsIiwiYSBnZW5lcmFsIHJlcXVpcmVtZW50cyIsImdlbmVyYWwgcmVxdWlyZW1lbnRzIGV4Y2VwdCIsInJlcXVpcmVtZW50cyBleGNlcHQgYXMiLCJleGNlcHQgYXMgbmVjZXNzYXJ5IiwibmVjZXNzYXJ5IHRvIHJlY29nbml6ZSIsInRvIHJlY29nbml6ZSB0aGlyZCIsInJlY29nbml6ZSB0aGlyZCBwYXJ0eSIsInBhcnR5IHJpZ2h0cyBvciIsInJpZ2h0cyBvciB0aGlyZCIsIm9yIHRoaXJkIHBhcnR5IiwicGFydHkgcmVzdHJpY3Rpb24gc2VlIiwicmVzdHJpY3Rpb24gc2VlIGJlbG93Iiwic2VlIGJlbG93IGEiLCJiZWxvdyBhIGRpc3RyaWJ1dGlvbiIsImluIGFueSBvZiIsIm9mIHRoZSBmb3JtcyIsInRoZSBmb3JtcyBsaXN0ZWQiLCJmb3JtcyBsaXN0ZWQgYmVsb3ciLCJsaXN0ZWQgYmVsb3cgbXVzdCIsImJlbG93IG11c3Qgbm90IiwibXVzdCBub3QgcHV0Iiwibm90IHB1dCBhbnkiLCJwdXQgYW55IGZ1cnRoZXIiLCJncmFudGVkIGhlcmVpbiBhcyIsImhlcmVpbiBhcyBhIiwicmVwcmVzZW50IHRoYXQgeW91ciIsInRoYXQgeW91ciBtb2RpZmljYXRpb24iLCJtb2RpZmljYXRpb24gcyBhcmUiLCJzIGFyZSB5b3VyIiwidG8geW91ciBtb2RpZmljYXRpb24iLCJzIHlvdSByZXByZXNlbnQiLCJyZXByZXNlbnQgdGhhdCBlYWNoIiwidGhhdCBlYWNoIG9mIiwieW91ciBtb2RpZmljYXRpb25zIGluY2x1ZGVzIiwibW9kaWZpY2F0aW9ucyBpbmNsdWRlcyBjb21wbGV0ZSIsInRoaXJkIHBhcnR5IHJpZ2h0IiwicGFydHkgcmlnaHQgb3IiLCJyaWdodCBvciBvdGhlciIsIm9yIG90aGVyIHRoaXJkIiwicGFydHkgcmVzdHJpY3Rpb24gYXNzb2NpYXRlZCIsIm9mIHlvdXIgbW9kaWZpY2F0aW9uIiwieW91ciBtb2RpZmljYXRpb24gaW5jbHVkaW5nIiwibW9kaWZpY2F0aW9uIGluY2x1ZGluZyBhIiwiYW55IGFwcGxpY2FibGUgbGljZW5zZSIsImFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnQiLCJiZSBkaXN0cmlidXRlZCB3aXRob3V0IiwiZGlzdHJpYnV0ZWQgd2l0aG91dCBjaGFyZ2UiLCJ3aXRob3V0IGNoYXJnZSBiZXlvbmQiLCJyZWNpcGllbnQgdGhpcyB3YXJyYW50eSIsInRoaXMgd2FycmFudHkgZGlzY2xhaW1lciIsIndhcnJhbnR5IGRpc2NsYWltZXIgbGltaXRhdGlvbiIsIm9mIGxpYWJpbGl0eSBtdXN0IiwibGlhYmlsaXR5IG11c3QgYmUiLCJiZSBwcm9taW5lbnRseSBkaXNwbGF5ZWQiLCJwcm9taW5lbnRseSBkaXNwbGF5ZWQgd2l0aCIsImRpc3BsYXllZCB3aXRoIGV2ZXJ5Iiwid2l0aCBldmVyeSBkaXN0cmlidXRpb24iLCJldmVyeSBkaXN0cmlidXRpb24gb2YiLCJmb3JtIHlvdSBhZ3JlZSIsIm9yIGltcGxpZWQgYWNjb3JkaW5nbHkiLCJpbXBsaWVkIGFjY29yZGluZ2x5IG9jbGMiLCJhY2NvcmRpbmdseSBvY2xjIG1ha2VzIiwib2NsYyBtYWtlcyBubyIsIm5vIHdhcnJhbnRpZXMgcmVwcmVzZW50YXRpb25zIiwib3IgZ3VhcmFudGVlcyBlaXRoZXIiLCJndWFyYW50ZWVzIGVpdGhlciBleHByZXNzIiwiaW1wbGllZCBhbmQgZGlzY2xhaW1zIiwiYW5kIGRpc2NsYWltcyBhbGwiLCJvciBndWFyYW50ZWVzIGluY2x1ZGluZyIsImd1YXJhbnRlZXMgaW5jbHVkaW5nIHdpdGhvdXQiLCJwYXJ0aWN1bGFyIHB1cnBvc2UgYXMiLCJwdXJwb3NlIGFzIHRvIiwiYSB0aGUgZnVuY3Rpb25hbGl0eSIsInRoZSBmdW5jdGlvbmFsaXR5IG9yIiwiZnVuY3Rpb25hbGl0eSBvciBub25pbmZyaW5nZW1lbnQiLCJvciBub25pbmZyaW5nZW1lbnQgb2YiLCJub25pbmZyaW5nZW1lbnQgb2YgcHJvZ3JhbSIsIm9mIHByb2dyYW0gYW55IiwiYWdncmVnYXRlIHdvcmsgb3IiLCJ3b3JrIG9yIGIiLCJiIHRoZSByZXN1bHRzIiwicmVzdWx0cyBvZiBhbnkiLCJvZiBhbnkgcHJvamVjdCIsImFueSBwcm9qZWN0IHVuZGVydGFrZW4iLCJwcm9qZWN0IHVuZGVydGFrZW4gdXNpbmciLCJ1bmRlcnRha2VuIHVzaW5nIHRoZSIsInVzaW5nIHRoZSBwcm9ncmFtIiwiYWdncmVnYXRlIHdvcmsgaW4iLCJ3b3JrIGluIG5vIiwidGhlIGNvbnRyaWJ1dG9ycyBiZSIsInNwZWNpYWwgZXhlbXBsYXJ5IGNvbnNlcXVlbnRpYWwiLCJleGVtcGxhcnkgY29uc2VxdWVudGlhbCBvciIsImNvbnNlcXVlbnRpYWwgb3IgYW55IiwicHJvZ3JhbSBldmVuIGlmIiwiZGFtYWdlcyB5b3UgaGVyZWJ5IiwieW91IGhlcmVieSB3YWl2ZSIsImhlcmVieSB3YWl2ZSBhbnkiLCJ3YWl2ZSBhbnkgY2xhaW1zIiwiYW55IGNsYWltcyBmb3IiLCJjbGFpbXMgZm9yIGRhbWFnZXMiXX0seyJsaWNlbnNlVGV4dHMiOlsiIyNcblxuT0RDIEF0dHJpYnV0aW9uIExpY2Vuc2UgKE9EQy1CeSkgIyMjXG5cblByZWFtYmxlXG5cblRoZSBPcGVuIERhdGEgQ29tbW9ucyBBdHRyaWJ1dGlvbiBMaWNlbnNlIGlzIGEgbGljZW5zZSBhZ3JlZW1lbnQgaW50ZW5kZWQgdG8gYWxsb3cgdXNlcnMgdG8gZnJlZWx5IHNoYXJlLCBtb2RpZnksIGFuZCB1c2UgdGhpcyBEYXRhYmFzZSBzdWJqZWN0IG9ubHkgdG8gdGhlIGF0dHJpYnV0aW9uIHJlcXVpcmVtZW50cyBzZXQgb3V0IGluIFNlY3Rpb24gNC5cblxuRGF0YWJhc2VzIGNhbiBjb250YWluIGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGNvbnRlbnQgKGltYWdlcywgYXVkaW92aXN1YWwgbWF0ZXJpYWwsIGFuZCBzb3VuZHMgYWxsIGluIHRoZSBzYW1lIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSksIGFuZCBzbyB0aGlzIGxpY2Vuc2Ugb25seSBnb3Zlcm5zIHRoZSByaWdodHMgb3ZlciB0aGUgRGF0YWJhc2UsIGFuZCBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBEYXRhYmFzZSBpbmRpdmlkdWFsbHkuIExpY2Vuc29ycyBtYXkgdGhlcmVmb3JlIHdpc2ggdG8gdXNlIHRoaXMgbGljZW5zZSB0b2dldGhlciB3aXRoIGFub3RoZXIgbGljZW5zZSBmb3IgdGhlIGNvbnRlbnRzLlxuXG5Tb21ldGltZXMgdGhlIGNvbnRlbnRzIG9mIGEgZGF0YWJhc2UsIG9yIHRoZSBkYXRhYmFzZSBpdHNlbGYsIGNhbiBiZSBjb3ZlcmVkIGJ5IG90aGVyIHJpZ2h0cyBub3QgYWRkcmVzc2VkIGhlcmUgKHN1Y2ggYXMgcHJpdmF0ZSBjb250cmFjdHMsIHRyYWRlbWFyayBvdmVyIHRoZSBuYW1lLCBvciBwcml2YWN5IHJpZ2h0cyAvIGRhdGEgcHJvdGVjdGlvbiByaWdodHMgb3ZlciBpbmZvcm1hdGlvbiBpbiB0aGUgY29udGVudHMpLCBhbmQgc28geW91IGFyZSBhZHZpc2VkIHRoYXQgeW91IG1heSBoYXZlIHRvIGNvbnN1bHQgb3RoZXIgZG9jdW1lbnRzIG9yIGNsZWFyIG90aGVyIHJpZ2h0cyBiZWZvcmUgZG9pbmcgYWN0aXZpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuXG5cbi0tLS0tLVxuXG5UaGUgTGljZW5zb3IgKGFzIGRlZmluZWQgYmVsb3cpXG5cbmFuZFxuXG5Zb3UgKGFzIGRlZmluZWQgYmVsb3cpXG5cbmFncmVlIGFzIGZvbGxvd3M6XG5cbiAgIDEuMCBEZWZpbml0aW9ucyBvZiBDYXBpdGFsaXNlZCBXb3Jkc1xuXG4gICBcIkNvbGxlY3RpdmUgRGF0YWJhc2VcIiAtIE1lYW5zIHRoaXMgRGF0YWJhc2UgaW4gdW5tb2RpZmllZCBmb3JtIGFzIHBhcnQgb2YgYSBjb2xsZWN0aW9uIG9mIGluZGVwZW5kZW50IGRhdGFiYXNlcyBpbiB0aGVtc2VsdmVzIHRoYXQgdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIERhdGFiYXNlIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIERhdGFiYXNlLlxuXG4gICBcIkNvbnZleVwiIC0gQXMgYSB2ZXJiLCBtZWFucyBVc2luZyB0aGUgRGF0YWJhc2UsIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSwgb3IgdGhlIERhdGFiYXNlIGFzIHBhcnQgb2YgYSBDb2xsZWN0aXZlIERhdGFiYXNlIGluIGFueSB3YXkgdGhhdCBlbmFibGVzIGEgUGVyc29uIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMgb2YgdGhlIERhdGFiYXNlIG9yIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZS4gQ29udmV5aW5nIGRvZXMgbm90IGluY2x1ZGUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaCBhIGNvbXB1dGVyIG5ldHdvcmssIG9yIGNyZWF0aW5nIGFuZCBVc2luZyBhIFByb2R1Y2VkIFdvcmssIHdoZXJlIG5vIHRyYW5zZmVyIG9mIGEgY29weSBvZiB0aGUgRGF0YWJhc2Ugb3IgYSBEZXJpdmF0aXZlIERhdGFiYXNlIG9jY3Vycy5cblxuICAgXCJDb250ZW50c1wiIC0gVGhlIGNvbnRlbnRzIG9mIHRoaXMgRGF0YWJhc2UsIHdoaWNoIGluY2x1ZGVzIHRoZSBpbmZvcm1hdGlvbiwgaW5kZXBlbmRlbnQgd29ya3MsIG9yIG90aGVyIG1hdGVyaWFsIGNvbGxlY3RlZCBpbnRvIHRoZSBEYXRhYmFzZS4gRm9yIGV4YW1wbGUsIHRoZSBjb250ZW50cyBvZiB0aGUgRGF0YWJhc2UgY291bGQgYmUgZmFjdHVhbCBkYXRhIG9yIHdvcmtzIHN1Y2ggYXMgaW1hZ2VzLCBhdWRpb3Zpc3VhbCBtYXRlcmlhbCwgdGV4dCwgb3Igc291bmRzLlxuXG4gICBcIkRhdGFiYXNlXCIgLSBBIGNvbGxlY3Rpb24gb2YgbWF0ZXJpYWwgKHRoZSBDb250ZW50cykgYXJyYW5nZWQgaW4gYSBzeXN0ZW1hdGljIG9yIG1ldGhvZGljYWwgd2F5IGFuZCBpbmRpdmlkdWFsbHkgYWNjZXNzaWJsZSBieSBlbGVjdHJvbmljIG9yIG90aGVyIG1lYW5zIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgXCJEYXRhYmFzZSBEaXJlY3RpdmVcIiAtIE1lYW5zIERpcmVjdGl2ZSA5Ni85L0VDIG9mIHRoZSBFdXJvcGVhbiBQYXJsaWFtZW50IGFuZCBvZiB0aGUgQ291bmNpbCBvZiAxMSBNYXJjaCAxOTk2IG9uIHRoZSBsZWdhbCBwcm90ZWN0aW9uIG9mIGRhdGFiYXNlcywgYXMgYW1lbmRlZCBvciBzdWNjZWVkZWQuXG5cbiAgIFwiRGF0YWJhc2UgUmlnaHRcIiAtIE1lYW5zIHJpZ2h0cyByZXN1bHRpbmcgZnJvbSB0aGUgQ2hhcHRlciBJSUkgKFwic3VpIGdlbmVyaXNcIikgcmlnaHRzIGluIHRoZSBEYXRhYmFzZSBEaXJlY3RpdmUgKGFzIGFtZW5kZWQgYW5kIGFzIHRyYW5zcG9zZWQgYnkgbWVtYmVyIHN0YXRlcyksIHdoaWNoIGluY2x1ZGVzIHRoZSBFeHRyYWN0aW9uIGFuZCBSZS11dGlsaXNhdGlvbiBvZiB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cywgYXMgd2VsbCBhcyBhbnkgc2ltaWxhciByaWdodHMgYXZhaWxhYmxlIGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gdW5kZXIgU2VjdGlvbiAxMC40LlxuXG4gICBcIkRlcml2YXRpdmUgRGF0YWJhc2VcIiAtIE1lYW5zIGEgZGF0YWJhc2UgYmFzZWQgdXBvbiB0aGUgRGF0YWJhc2UsIGFuZCBpbmNsdWRlcyBhbnkgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGFycmFuZ2VtZW50LCBtb2RpZmljYXRpb24sIG9yIGFueSBvdGhlciBhbHRlcmF0aW9uIG9mIHRoZSBEYXRhYmFzZSBvciBvZiBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzLiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIEV4dHJhY3Rpbmcgb3IgUmUtdXRpbGlzaW5nIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzIGluIGEgbmV3IERhdGFiYXNlLlxuXG4gICBcIkV4dHJhY3Rpb25cIiAtIE1lYW5zIHRoZSBwZXJtYW5lbnQgb3IgdGVtcG9yYXJ5IHRyYW5zZmVyIG9mIGFsbCBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzIHRvIGFub3RoZXIgbWVkaXVtIGJ5IGFueSBtZWFucyBvciBpbiBhbnkgZm9ybS5cblxuICAgXCJMaWNlbnNlXCIgLSBNZWFucyB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50IGFuZCBpcyBib3RoIGEgbGljZW5zZSBvZiByaWdodHMgc3VjaCBhcyBjb3B5cmlnaHQgYW5kIERhdGFiYXNlIFJpZ2h0cyBhbmQgYW4gYWdyZWVtZW50IGluIGNvbnRyYWN0LlxuXG4gICBcIkxpY2Vuc29yXCIgLSBNZWFucyB0aGUgUGVyc29uIHRoYXQgb2ZmZXJzIHRoZSBEYXRhYmFzZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICBcIlBlcnNvblwiIC0gTWVhbnMgYSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiBvciBhIGJvZHkgb2YgcGVyc29ucyBjb3Jwb3JhdGUgb3IgaW5jb3Jwb3JhdGUuXG5cbiAgIFwiUHJvZHVjZWQgV29ya1wiIC0gYSB3b3JrIChzdWNoIGFzIGFuIGltYWdlLCBhdWRpb3Zpc3VhbCBtYXRlcmlhbCwgdGV4dCwgb3Igc291bmRzKSByZXN1bHRpbmcgZnJvbSB1c2luZyB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cyAodmlhIGEgc2VhcmNoIG9yIG90aGVyIHF1ZXJ5KSBmcm9tIHRoaXMgRGF0YWJhc2UsIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSwgb3IgdGhpcyBEYXRhYmFzZSBhcyBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZS5cblxuICAgXCJQdWJsaWNseVwiIC0gbWVhbnMgdG8gUGVyc29ucyBvdGhlciB0aGFuIFlvdSBvciB1bmRlciBZb3VyIGNvbnRyb2wgYnkgZWl0aGVyIG1vcmUgdGhhbiA1MCUgb3duZXJzaGlwIG9yIGJ5IHRoZSBwb3dlciB0byBkaXJlY3QgdGhlaXIgYWN0aXZpdGllcyAoc3VjaCBhcyBjb250cmFjdGluZyB3aXRoIGFuIGluZGVwZW5kZW50IGNvbnN1bHRhbnQpLlxuXG4gICBcIlJlLXV0aWxpc2F0aW9uXCIgLSBtZWFucyBhbnkgZm9ybSBvZiBtYWtpbmcgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgYWxsIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMgYnkgdGhlIGRpc3RyaWJ1dGlvbiBvZiBjb3BpZXMsIGJ5IHJlbnRpbmcsIGJ5IG9ubGluZSBvciBvdGhlciBmb3JtcyBvZiB0cmFuc21pc3Npb24uXG5cbiAgIFwiU3Vic3RhbnRpYWxcIiAtIE1lYW5zIHN1YnN0YW50aWFsIGluIHRlcm1zIG9mIHF1YW50aXR5IG9yIHF1YWxpdHkgb3IgYSBjb21iaW5hdGlvbiBvZiBib3RoLiBUaGUgcmVwZWF0ZWQgYW5kIHN5c3RlbWF0aWMgRXh0cmFjdGlvbiBvciBSZS11dGlsaXNhdGlvbiBvZiBpbnN1YnN0YW50aWFsIHBhcnRzIG9mIHRoZSBDb250ZW50cyBtYXkgYW1vdW50IHRvIHRoZSBFeHRyYWN0aW9uIG9yIFJlLXV0aWxpc2F0aW9uIG9mIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMuXG5cbiAgIFwiVXNlXCIgLSBBcyBhIHZlcmIsIG1lYW5zIGRvaW5nIGFueSBhY3QgdGhhdCBpcyByZXN0cmljdGVkIGJ5IGNvcHlyaWdodCBvciBEYXRhYmFzZSBSaWdodHMgd2hldGhlciBpbiB0aGUgb3JpZ2luYWwgbWVkaXVtIG9yIGFueSBvdGhlcjsgYW5kIGluY2x1ZGVzIHdpdGhvdXQgbGltaXRhdGlvbiBkaXN0cmlidXRpbmcsIGNvcHlpbmcsIHB1YmxpY2x5IHBlcmZvcm1pbmcsIHB1YmxpY2x5IGRpc3BsYXlpbmcsIGFuZCBwcmVwYXJpbmcgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgRGF0YWJhc2UsIGFzIHdlbGwgYXMgbW9kaWZ5aW5nIHRoZSBEYXRhYmFzZSBhcyBtYXkgYmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIHVzZSBpdCBpbiBhIGRpZmZlcmVudCBtb2RlIG9yIGZvcm1hdC5cblxuICAgXCJZb3VcIiAtIE1lYW5zIGEgUGVyc29uIGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBEYXRhYmFzZSwgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLlxuXG4gICBXb3JkcyBpbiB0aGUgc2luZ3VsYXIgaW5jbHVkZSB0aGUgcGx1cmFsIGFuZCB2aWNlIHZlcnNhLlxuXG4gICAyLjAgV2hhdCB0aGlzIExpY2Vuc2UgY292ZXJzXG5cbiAgIDIuMS4gTGVnYWwgZWZmZWN0IG9mIHRoaXMgZG9jdW1lbnQuIFRoaXMgTGljZW5zZSBpczpcblxuICAgICAgYS4gQSBsaWNlbnNlIG9mIGFwcGxpY2FibGUgY29weXJpZ2h0IGFuZCBuZWlnaGJvdXJpbmcgcmlnaHRzO1xuXG4gICAgICBiLiBBIGxpY2Vuc2Ugb2YgdGhlIERhdGFiYXNlIFJpZ2h0OyBhbmRcblxuICAgICAgYy4gQW4gYWdyZWVtZW50IGluIGNvbnRyYWN0IGJldHdlZW4gWW91IGFuZCB0aGUgTGljZW5zb3IuXG5cbiAgIDIuMiBMZWdhbCByaWdodHMgY292ZXJlZC4gVGhpcyBMaWNlbnNlIGNvdmVycyB0aGUgbGVnYWwgcmlnaHRzIGluIHRoZSBEYXRhYmFzZSwgaW5jbHVkaW5nOlxuXG4gICAgICBhLiBDb3B5cmlnaHQuIEFueSBjb3B5cmlnaHQgb3IgbmVpZ2hib3VyaW5nIHJpZ2h0cyBpbiB0aGUgRGF0YWJhc2UuIFRoZSBjb3B5cmlnaHQgbGljZW5zZWQgaW5jbHVkZXMgYW55IGluZGl2aWR1YWwgZWxlbWVudHMgb2YgdGhlIERhdGFiYXNlLCBidXQgZG9lcyBub3QgY292ZXIgdGhlIGNvcHlyaWdodCBvdmVyIHRoZSBDb250ZW50cyBpbmRlcGVuZGVudCBvZiB0aGlzIERhdGFiYXNlLiBTZWUgU2VjdGlvbiAyLjQgZm9yIGRldGFpbHMuIENvcHlyaWdodCBsYXcgdmFyaWVzIGJldHdlZW4ganVyaXNkaWN0aW9ucywgYnV0IGlzIGxpa2VseSB0byBjb3ZlcjogdGhlIERhdGFiYXNlIG1vZGVsIG9yIHNjaGVtYSwgd2hpY2ggaXMgdGhlIHN0cnVjdHVyZSwgYXJyYW5nZW1lbnQsIGFuZCBvcmdhbmlzYXRpb24gb2YgdGhlIERhdGFiYXNlLCBhbmQgY2FuIGFsc28gaW5jbHVkZSB0aGUgRGF0YWJhc2UgdGFibGVzIGFuZCB0YWJsZSBpbmRleGVzOyB0aGUgZGF0YSBlbnRyeSBhbmQgb3V0cHV0IHNoZWV0czsgYW5kIHRoZSBGaWVsZCBuYW1lcyBvZiBDb250ZW50cyBzdG9yZWQgaW4gdGhlIERhdGFiYXNlO1xuXG4gICAgICBiLiBEYXRhYmFzZSBSaWdodHMuIERhdGFiYXNlIFJpZ2h0cyBvbmx5IGV4dGVuZCB0byB0aGUgRXh0cmFjdGlvbiBhbmQgUmUtdXRpbGlzYXRpb24gb2YgdGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMuIERhdGFiYXNlIFJpZ2h0cyBjYW4gYXBwbHkgZXZlbiB3aGVuIHRoZXJlIGlzIG5vIGNvcHlyaWdodCBvdmVyIHRoZSBEYXRhYmFzZS4gRGF0YWJhc2UgUmlnaHRzIGNhbiBhbHNvIGFwcGx5IHdoZW4gdGhlIENvbnRlbnRzIGFyZSByZW1vdmVkIGZyb20gdGhlIERhdGFiYXNlIGFuZCBhcmUgc2VsZWN0ZWQgYW5kIGFycmFuZ2VkIGluIGEgd2F5IHRoYXQgd291bGQgbm90IGluZnJpbmdlIGFueSBhcHBsaWNhYmxlIGNvcHlyaWdodDsgYW5kXG5cbiAgICAgIGMuIENvbnRyYWN0LiBUaGlzIGlzIGFuIGFncmVlbWVudCBiZXR3ZWVuIFlvdSBhbmQgdGhlIExpY2Vuc29yIGZvciBhY2Nlc3MgdG8gdGhlIERhdGFiYXNlLiBJbiByZXR1cm4geW91IGFncmVlIHRvIGNlcnRhaW4gY29uZGl0aW9ucyBvZiB1c2Ugb24gdGhpcyBhY2Nlc3MgYXMgb3V0bGluZWQgaW4gdGhpcyBMaWNlbnNlLlxuXG4gICAyLjMgUmlnaHRzIG5vdCBjb3ZlcmVkLlxuXG4gICAgICBhLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gY29tcHV0ZXIgcHJvZ3JhbXMgdXNlZCBpbiB0aGUgbWFraW5nIG9yIG9wZXJhdGlvbiBvZiB0aGUgRGF0YWJhc2U7XG5cbiAgICAgIGIuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBjb3ZlciBhbnkgcGF0ZW50cyBvdmVyIHRoZSBDb250ZW50cyBvciB0aGUgRGF0YWJhc2U7IGFuZFxuXG4gICAgICBjLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgY292ZXIgYW55IHRyYWRlbWFya3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBEYXRhYmFzZS5cblxuICAgMi40IFJlbGF0aW9uc2hpcCB0byBDb250ZW50cyBpbiB0aGUgRGF0YWJhc2UuIFRoZSBpbmRpdmlkdWFsIGl0ZW1zIG9mIHRoZSBDb250ZW50cyBjb250YWluZWQgaW4gdGhpcyBEYXRhYmFzZSBtYXkgYmUgY292ZXJlZCBieSBvdGhlciByaWdodHMsIGluY2x1ZGluZyBjb3B5cmlnaHQsIHBhdGVudCwgZGF0YSBwcm90ZWN0aW9uLCBwcml2YWN5LCBvciBwZXJzb25hbGl0eSByaWdodHMsIGFuZCB0aGlzIExpY2Vuc2UgZG9lcyBub3QgY292ZXIgYW55IHJpZ2h0cyAob3RoZXIgdGhhbiBEYXRhYmFzZSBSaWdodHMgb3IgaW4gY29udHJhY3QpIGluIGluZGl2aWR1YWwgQ29udGVudHMgY29udGFpbmVkIGluIHRoZSBEYXRhYmFzZS4gRm9yIGV4YW1wbGUsIGlmIHVzZWQgb24gYSBEYXRhYmFzZSBvZiBpbWFnZXMgKHRoZSBDb250ZW50cyksIHRoaXMgTGljZW5zZSB3b3VsZCBub3QgYXBwbHkgdG8gY29weXJpZ2h0IG92ZXIgaW5kaXZpZHVhbCBpbWFnZXMsIHdoaWNoIGNvdWxkIGhhdmUgdGhlaXIgb3duIHNlcGFyYXRlIGxpY2Vuc2VzLCBvciBvbmUgc2luZ2xlIGxpY2Vuc2UgY292ZXJpbmcgYWxsIG9mIHRoZSByaWdodHMgb3ZlciB0aGUgaW1hZ2VzLlxuXG4gICAzLjAgUmlnaHRzIGdyYW50ZWRcblxuICAgMy4xIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhlIExpY2Vuc29yIGdyYW50cyB0byBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgdGVybWluYWJsZSAoYnV0IG9ubHkgdW5kZXIgU2VjdGlvbiA5KSBsaWNlbnNlIHRvIFVzZSB0aGUgRGF0YWJhc2UgZm9yIHRoZSBkdXJhdGlvbiBvZiBhbnkgYXBwbGljYWJsZSBjb3B5cmlnaHQgYW5kIERhdGFiYXNlIFJpZ2h0cy4gVGhlc2UgcmlnaHRzIGV4cGxpY2l0bHkgaW5jbHVkZSBjb21tZXJjaWFsIHVzZSwgYW5kIGRvIG5vdCBleGNsdWRlIGFueSBmaWVsZCBvZiBlbmRlYXZvdXIuIFRvIHRoZSBleHRlbnQgcG9zc2libGUgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiwgdGhlc2UgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGNyZWF0ZWQgaW4gdGhlIGZ1dHVyZS5cblxuICAgVGhlIHJpZ2h0cyBncmFudGVkIGNvdmVyLCBmb3IgZXhhbXBsZTpcblxuICAgICAgYS4gRXh0cmFjdGlvbiBhbmQgUmUtdXRpbGlzYXRpb24gb2YgdGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHM7XG5cbiAgICAgIGIuIENyZWF0aW9uIG9mIERlcml2YXRpdmUgRGF0YWJhc2VzO1xuXG4gICAgICBjLiBDcmVhdGlvbiBvZiBDb2xsZWN0aXZlIERhdGFiYXNlcztcblxuICAgICAgZC4gQ3JlYXRpb24gb2YgdGVtcG9yYXJ5IG9yIHBlcm1hbmVudCByZXByb2R1Y3Rpb25zIGJ5IGFueSBtZWFucyBhbmQgaW4gYW55IGZvcm0sIGluIHdob2xlIG9yIGluIHBhcnQsIGluY2x1ZGluZyBvZiBhbnkgRGVyaXZhdGl2ZSBEYXRhYmFzZXMgb3IgYXMgYSBwYXJ0IG9mIENvbGxlY3RpdmUgRGF0YWJhc2VzOyBhbmRcblxuICAgICAgZS4gRGlzdHJpYnV0aW9uLCBjb21tdW5pY2F0aW9uLCBkaXNwbGF5LCBsZW5kaW5nLCBtYWtpbmcgYXZhaWxhYmxlLCBvciBwZXJmb3JtYW5jZSB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBhbmQgaW4gYW55IGZvcm0sIGluIHdob2xlIG9yIGluIHBhcnQsIGluY2x1ZGluZyBvZiBhbnkgRGVyaXZhdGl2ZSBEYXRhYmFzZSBvciBhcyBhIHBhcnQgb2YgQ29sbGVjdGl2ZSBEYXRhYmFzZXMuXG5cbiAgIDMuMiBDb21wdWxzb3J5IGxpY2Vuc2Ugc2NoZW1lcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6XG5cbiAgICAgIGEuIE5vbi13YWl2YWJsZSBjb21wdWxzb3J5IGxpY2Vuc2Ugc2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7XG5cbiAgICAgIGIuIFdhaXZhYmxlIGNvbXB1bHNvcnkgbGljZW5zZSBzY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCxcblxuICAgICAgYy4gVm9sdW50YXJ5IGxpY2Vuc2Ugc2NoZW1lcy4gVGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAzLjMgVGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIERhdGFiYXNlIHVuZGVyIGRpZmZlcmVudCB0ZXJtcywgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgb3IgbWFraW5nIGF2YWlsYWJsZSB0aGUgRGF0YWJhc2UsIGlzIHJlc2VydmVkLiBOb3RlIHRoYXQgdGhpcyBEYXRhYmFzZSBtYXkgYmUgbXVsdGlwbGUtbGljZW5zZWQsIGFuZCBzbyBZb3UgbWF5IGhhdmUgdGhlIGNob2ljZSBvZiB1c2luZyBhbHRlcm5hdGl2ZSBsaWNlbnNlcyBmb3IgdGhpcyBEYXRhYmFzZS4gU3ViamVjdCB0byBTZWN0aW9uIDEwLjQsIGFsbCBvdGhlciByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSByZXNlcnZlZC5cblxuICAgNC4wIENvbmRpdGlvbnMgb2YgVXNlXG5cbiAgIDQuMSBUaGUgcmlnaHRzIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGFyZSBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIFlvdXIgY29tcGx5aW5nIHdpdGggdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG9mIHVzZS4gVGhlc2UgYXJlIGltcG9ydGFudCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgYW5kIGlmIFlvdSBmYWlsIHRvIGZvbGxvdyB0aGVtLCBZb3Ugd2lsbCBiZSBpbiBtYXRlcmlhbCBicmVhY2ggb2YgaXRzIHRlcm1zLlxuXG4gICA0LjIgTm90aWNlcy4gSWYgWW91IFB1YmxpY2x5IENvbnZleSB0aGlzIERhdGFiYXNlLCBhbnkgRGVyaXZhdGl2ZSBEYXRhYmFzZSwgb3IgdGhlIERhdGFiYXNlIGFzIHBhcnQgb2YgYSBDb2xsZWN0aXZlIERhdGFiYXNlLCB0aGVuIFlvdSBtdXN0OlxuXG4gICAgICBhLiBEbyBzbyBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2U7XG5cbiAgICAgIGIuIEluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBvciBpdHMgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIHdpdGggdGhlIERhdGFiYXNlIG9yIERlcml2YXRpdmUgRGF0YWJhc2UsIGluY2x1ZGluZyBib3RoIGluIHRoZSBEYXRhYmFzZSBvciBEZXJpdmF0aXZlIERhdGFiYXNlIGFuZCBpbiBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbjtcblxuICAgICAgYy4gS2VlcCBpbnRhY3QgYW55IGNvcHlyaWdodCBvciBEYXRhYmFzZSBSaWdodCBub3RpY2VzIGFuZCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOyBhbmRcblxuICAgICAgZC4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCB0aGUgcmVxdWlyZWQgbm90aWNlcyBpbiBhIHBhcnRpY3VsYXIgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHRoZSBub3RpY2VzIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIHVzZXJzIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBpdC5cblxuICAgNC4zIE5vdGljZSBmb3IgdXNpbmcgb3V0cHV0IChDb250ZW50cykuIENyZWF0aW5nIGFuZCBVc2luZyBhIFByb2R1Y2VkIFdvcmsgZG9lcyBub3QgcmVxdWlyZSB0aGUgbm90aWNlIGluIFNlY3Rpb24gNC4yLiBIb3dldmVyLCBpZiB5b3UgUHVibGljbHkgVXNlIGEgUHJvZHVjZWQgV29yaywgWW91IG11c3QgaW5jbHVkZSBhIG5vdGljZSBhc3NvY2lhdGVkIHdpdGggdGhlIFByb2R1Y2VkIFdvcmsgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIG1ha2UgYW55IFBlcnNvbiB0aGF0IHVzZXMsIHZpZXdzLCBhY2Nlc3NlcywgaW50ZXJhY3RzIHdpdGgsIG9yIGlzIG90aGVyd2lzZSBleHBvc2VkIHRvIHRoZSBQcm9kdWNlZCBXb3JrIGF3YXJlIHRoYXQgQ29udGVudCB3YXMgb2J0YWluZWQgZnJvbSB0aGUgRGF0YWJhc2UsIERlcml2YXRpdmUgRGF0YWJhc2UsIG9yIHRoZSBEYXRhYmFzZSBhcyBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZSwgYW5kIHRoYXQgaXQgaXMgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYS4gRXhhbXBsZSBub3RpY2UuIFRoZSBmb2xsb3dpbmcgdGV4dCB3aWxsIHNhdGlzZnkgbm90aWNlIHVuZGVyIFNlY3Rpb24gNC4zOlxuXG4gICAgICBDb250YWlucyBpbmZvcm1hdGlvbiBmcm9tIERBVEFCQVNFIE5BTUUgd2hpY2ggaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIE9EQyBBdHRyaWJ1dGlvbiBMaWNlbnNlLlxuXG4gICAgICBEQVRBQkFTRSBOQU1FIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBEYXRhYmFzZSBhbmQgYSBoeXBlcmxpbmsgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBEYXRhYmFzZS4gXCJPREMgQXR0cmlidXRpb24gTGljZW5zZVwiIHNob3VsZCBjb250YWluIGEgaHlwZXJsaW5rIHRvIHRoZSBVUkkgb2YgdGhlIHRleHQgb2YgdGhpcyBMaWNlbnNlLiBJZiBoeXBlcmxpbmtzIGFyZSBub3QgcG9zc2libGUsIFlvdSBzaG91bGQgaW5jbHVkZSB0aGUgcGxhaW4gdGV4dCBvZiB0aGUgcmVxdWlyZWQgVVJJJ3Mgd2l0aCB0aGUgYWJvdmUgbm90aWNlLlxuXG4gICA0LjQgTGljZW5zaW5nIG9mIG90aGVycy4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgRGF0YWJhc2UuIEVhY2ggdGltZSBZb3UgY29tbXVuaWNhdGUgdGhlIERhdGFiYXNlLCB0aGUgd2hvbGUgb3IgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMsIG9yIGFueSBEZXJpdmF0aXZlIERhdGFiYXNlIHRvIGFueW9uZSBlbHNlIGluIGFueSB3YXksIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIERhdGFiYXNlIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoaXMgTGljZW5zZS4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UsIGJ1dCBZb3UgbWF5IGVuZm9yY2UgYW55IHJpZ2h0cyB0aGF0IFlvdSBoYXZlIG92ZXIgYSBEZXJpdmF0aXZlIERhdGFiYXNlLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgYW55IG1vZGlmaWNhdGlvbnMgb2YgYSBEZXJpdmF0aXZlIERhdGFiYXNlIG1hZGUgYnkgWW91IG9yIGFub3RoZXIgUGVyc29uIGF0IFlvdXIgZGlyZWN0aW9uLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICA1LjAgTW9yYWwgcmlnaHRzXG5cbiAgIDUuMSBNb3JhbCByaWdodHMuIFRoaXMgc2VjdGlvbiBjb3ZlcnMgbW9yYWwgcmlnaHRzLCBpbmNsdWRpbmcgYW55IHJpZ2h0cyB0byBiZSBpZGVudGlmaWVkIGFzIHRoZSBhdXRob3Igb2YgdGhlIERhdGFiYXNlIG9yIHRvIG9iamVjdCB0byB0cmVhdG1lbnQgdGhhdCB3b3VsZCBvdGhlcndpc2UgcHJlanVkaWNlIHRoZSBhdXRob3IncyBob25vdXIgYW5kIHJlcHV0YXRpb24sIG9yIGFueSBvdGhlciBkZXJvZ2F0b3J5IHRyZWF0bWVudDpcblxuICAgICAgYS4gRm9yIGp1cmlzZGljdGlvbnMgYWxsb3dpbmcgd2FpdmVyIG9mIG1vcmFsIHJpZ2h0cywgTGljZW5zb3Igd2FpdmVzIGFsbCBtb3JhbCByaWdodHMgdGhhdCBMaWNlbnNvciBtYXkgaGF2ZSBpbiB0aGUgRGF0YWJhc2UgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBvc3NpYmxlIGJ5IHRoZSBsYXcgb2YgdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiB1bmRlciBTZWN0aW9uIDEwLjQ7XG5cbiAgICAgIGIuIElmIHdhaXZlciBvZiBtb3JhbCByaWdodHMgdW5kZXIgU2VjdGlvbiA1LjEgYSBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGlzIG5vdCBwb3NzaWJsZSwgTGljZW5zb3IgYWdyZWVzIG5vdCB0byBhc3NlcnQgYW55IG1vcmFsIHJpZ2h0cyBvdmVyIHRoZSBEYXRhYmFzZSBhbmQgd2FpdmVzIGFsbCBjbGFpbXMgaW4gbW9yYWwgcmlnaHRzIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwb3NzaWJsZSBieSB0aGUgbGF3IG9mIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gdW5kZXIgU2VjdGlvbiAxMC40OyBhbmRcblxuICAgICAgYy4gRm9yIGp1cmlzZGljdGlvbnMgbm90IGFsbG93aW5nIHdhaXZlciBvciBhbiBhZ3JlZW1lbnQgbm90IHRvIGFzc2VydCBtb3JhbCByaWdodHMgdW5kZXIgU2VjdGlvbiA1LjEgYSBhbmQgYiwgdGhlIGF1dGhvciBtYXkgcmV0YWluIHRoZWlyIG1vcmFsIHJpZ2h0cyBvdmVyIGNlcnRhaW4gYXNwZWN0cyBvZiB0aGUgRGF0YWJhc2UuXG5cbiAgICAgIFBsZWFzZSBub3RlIHRoYXQgc29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyBmb3IgdGhlIHdhaXZlciBvZiBtb3JhbCByaWdodHMsIGFuZCBzbyBtb3JhbCByaWdodHMgbWF5IHN0aWxsIHN1YnNpc3Qgb3ZlciB0aGUgRGF0YWJhc2UgaW4gc29tZSBqdXJpc2RpY3Rpb25zLlxuXG4gICA2LjAgRmFpciBkZWFsaW5nLCBEYXRhYmFzZSBleGNlcHRpb25zLCBhbmQgb3RoZXIgcmlnaHRzIG5vdCBhZmZlY3RlZFxuXG4gICA2LjEgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGFmZmVjdCBhbnkgcmlnaHRzIHRoYXQgWW91IG9yIGFueW9uZSBlbHNlIG1heSBpbmRlcGVuZGVudGx5IGhhdmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IHRvIG1ha2UgYW55IHVzZSBvZiB0aGlzIERhdGFiYXNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uOlxuXG4gICAgICBhLiBFeGNlcHRpb25zIHRvIHRoZSBEYXRhYmFzZSBSaWdodCBpbmNsdWRpbmc6IEV4dHJhY3Rpb24gb2YgQ29udGVudHMgZnJvbSBub24tZWxlY3Ryb25pYyBEYXRhYmFzZXMgZm9yIHByaXZhdGUgcHVycG9zZXMsIEV4dHJhY3Rpb24gZm9yIHB1cnBvc2VzIG9mIGlsbHVzdHJhdGlvbiBmb3IgdGVhY2hpbmcgb3Igc2NpZW50aWZpYyByZXNlYXJjaCwgYW5kIEV4dHJhY3Rpb24gb3IgUmUtdXRpbGlzYXRpb24gZm9yIHB1YmxpYyBzZWN1cml0eSBvciBhbiBhZG1pbmlzdHJhdGl2ZSBvciBqdWRpY2lhbCBwcm9jZWR1cmUuXG5cbiAgICAgIGIuIEZhaXIgZGVhbGluZywgZmFpciB1c2UsIG9yIGFueSBvdGhlciBsZWdhbGx5IHJlY29nbmlzZWQgbGltaXRhdGlvbiBvciBleGNlcHRpb24gdG8gaW5mcmluZ2VtZW50IG9mIGNvcHlyaWdodCBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuXG5cbiAgIDYuMiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYWZmZWN0IGFueSByaWdodHMgb2YgbGF3ZnVsIHVzZXJzIHRvIEV4dHJhY3QgYW5kIFJlLXV0aWxpc2UgaW5zdWJzdGFudGlhbCBwYXJ0cyBvZiB0aGUgQ29udGVudHMsIGV2YWx1YXRlZCBxdWFudGl0YXRpdmVseSBvciBxdWFsaXRhdGl2ZWx5LCBmb3IgYW55IHB1cnBvc2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyBjcmVhdGluZyBhIERlcml2YXRpdmUgRGF0YWJhc2UgKHN1YmplY3QgdG8gb3RoZXIgcmlnaHRzIG92ZXIgdGhlIENvbnRlbnRzLCBzZWUgU2VjdGlvbiAyLjQpLiBUaGUgcmVwZWF0ZWQgYW5kIHN5c3RlbWF0aWMgRXh0cmFjdGlvbiBvciBSZS11dGlsaXNhdGlvbiBvZiBpbnN1YnN0YW50aWFsIHBhcnRzIG9mIHRoZSBDb250ZW50cyBtYXkgaG93ZXZlciBhbW91bnQgdG8gdGhlIEV4dHJhY3Rpb24gb3IgUmUtdXRpbGlzYXRpb24gb2YgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cy5cblxuICAgNy4wIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXJcblxuICAgNy4xIFRoZSBEYXRhYmFzZSBpcyBsaWNlbnNlZCBieSB0aGUgTGljZW5zb3IgXCJhcyBpc1wiIGFuZCB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3MsIGltcGxpZWQsIG9yIGFyaXNpbmcgYnkgc3RhdHV0ZSwgY3VzdG9tLCBjb3Vyc2Ugb2YgZGVhbGluZywgb3IgdHJhZGUgdXNhZ2UuIExpY2Vuc29yIHNwZWNpZmljYWxseSBkaXNjbGFpbXMgYW55IGFuZCBhbGwgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUsIG5vbi1pbmZyaW5nZW1lbnQsIGFjY3VyYWN5IG9yIGNvbXBsZXRlbmVzcywgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgZXJyb3JzLCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgbWVyY2hhbnRhYmlsaXR5LCBvciBvdGhlcndpc2UuIFNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvZiBpbXBsaWVkIHdhcnJhbnRpZXMsIHNvIHRoaXMgZXhjbHVzaW9uIG1heSBub3QgYXBwbHkgdG8gWW91LlxuXG4gICA4LjAgTGltaXRhdGlvbiBvZiBsaWFiaWxpdHlcblxuICAgOC4xIFN1YmplY3QgdG8gYW55IGxpYWJpbGl0eSB0aGF0IG1heSBub3QgYmUgZXhjbHVkZWQgb3IgbGltaXRlZCBieSBsYXcsIHRoZSBMaWNlbnNvciBpcyBub3QgbGlhYmxlIGZvciwgYW5kIGV4cHJlc3NseSBleGNsdWRlcywgYWxsIGxpYWJpbGl0eSBmb3IgbG9zcyBvciBkYW1hZ2UgaG93ZXZlciBhbmQgd2hlbmV2ZXIgY2F1c2VkIHRvIGFueW9uZSBieSBhbnkgdXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgd2hldGhlciBieSBZb3Ugb3IgYnkgYW55b25lIGVsc2UsIGFuZCB3aGV0aGVyIGNhdXNlZCBieSBhbnkgZmF1bHQgb24gdGhlIHBhcnQgb2YgdGhlIExpY2Vuc29yIG9yIG5vdC4gVGhpcyBleGNsdXNpb24gb2YgbGlhYmlsaXR5IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIGFueSBzcGVjaWFsLCBpbmNpZGVudGFsLCBjb25zZXF1ZW50aWFsLCBwdW5pdGl2ZSwgb3IgZXhlbXBsYXJ5IGRhbWFnZXMgc3VjaCBhcyBsb3NzIG9mIHJldmVudWUsIGRhdGEsIGFudGljaXBhdGVkIHByb2ZpdHMsIGFuZCBsb3N0IGJ1c2luZXNzLiBUaGlzIGV4Y2x1c2lvbiBhcHBsaWVzIGV2ZW4gaWYgdGhlIExpY2Vuc29yIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy5cblxuICAgOC4yIElmIGxpYWJpbGl0eSBtYXkgbm90IGJlIGV4Y2x1ZGVkIGJ5IGxhdywgaXQgaXMgbGltaXRlZCB0byBhY3R1YWwgYW5kIGRpcmVjdCBmaW5hbmNpYWwgbG9zcyB0byB0aGUgZXh0ZW50IGl0IGlzIGNhdXNlZCBieSBwcm92ZWQgbmVnbGlnZW5jZSBvbiB0aGUgcGFydCBvZiB0aGUgTGljZW5zb3IuXG5cbiAgIDkuMCBUZXJtaW5hdGlvbiBvZiBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2VcblxuICAgOS4xIEFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgYXV0b21hdGljYWxseSB0ZXJtaW5hdGVzIHRoaXMgTGljZW5zZSB3aXRoIGltbWVkaWF0ZSBlZmZlY3QgYW5kIHdpdGhvdXQgbm90aWNlIHRvIFlvdS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFBlcnNvbnMgd2hvIGhhdmUgcmVjZWl2ZWQgdGhlIERhdGFiYXNlLCB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cywgRGVyaXZhdGl2ZSBEYXRhYmFzZXMsIG9yIHRoZSBEYXRhYmFzZSBhcyBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZSBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHRoZWlyIHVzZSBpcyBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIExpY2Vuc2Ugb3IgYSBsaWNlbnNlIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiA0Ljggb2YgdGhpcyBMaWNlbnNlLiBTZWN0aW9ucyAxLCAyLCA3LCA4LCA5IGFuZCAxMCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgOS4yIElmIFlvdSBhcmUgbm90IGluIGJyZWFjaCBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgTGljZW5zb3Igd2lsbCBub3QgdGVybWluYXRlIFlvdXIgcmlnaHRzIHVuZGVyIGl0LlxuXG4gICA5LjMgVW5sZXNzIHRlcm1pbmF0ZWQgdW5kZXIgU2VjdGlvbiA5LjEsIHRoaXMgTGljZW5zZSBpcyBncmFudGVkIHRvIFlvdSBmb3IgdGhlIGR1cmF0aW9uIG9mIGFwcGxpY2FibGUgcmlnaHRzIGluIHRoZSBEYXRhYmFzZS5cblxuICAgOS40IFJlaW5zdGF0ZW1lbnQgb2YgcmlnaHRzLiBJZiB5b3UgY2Vhc2UgYW55IGJyZWFjaCBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIgZnVsbCByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgYmUgcmVpbnN0YXRlZDpcblxuICAgICAgYS4gUHJvdmlzaW9uYWxseSBhbmQgc3ViamVjdCB0byBwZXJtYW5lbnQgdGVybWluYXRpb24gdW50aWwgdGhlIDYwdGggZGF5IGFmdGVyIGNlc3NhdGlvbiBvZiBicmVhY2g7XG5cbiAgICAgIGIuIFBlcm1hbmVudGx5IG9uIHRoZSA2MHRoIGRheSBhZnRlciBjZXNzYXRpb24gb2YgYnJlYWNoIHVubGVzcyBvdGhlcndpc2UgcmVhc29uYWJseSBub3RpZmllZCBieSB0aGUgTGljZW5zb3I7IG9yXG5cbiAgICAgIGMuIFBlcm1hbmVudGx5IGlmIHJlYXNvbmFibHkgbm90aWZpZWQgYnkgdGhlIExpY2Vuc29yIG9mIHRoZSB2aW9sYXRpb24sIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgWW91IGhhdmUgcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aGUgTGljZW5zb3IsIGFuZCBZb3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIgeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuXG5cbiAgIDkuNSBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgRGF0YWJhc2UgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgb3IgbWFraW5nIGF2YWlsYWJsZSB0aGUgRGF0YWJhc2UuIFJlbGVhc2luZyB0aGUgRGF0YWJhc2UgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3Igc3RvcHBpbmcgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgRGF0YWJhc2Ugd2lsbCBub3Qgd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuXG5cbiAgIDEwLjAgR2VuZXJhbFxuXG4gICAxMC4xIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlLCB0aGF0IG11c3Qgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIGFuZCBlYWNoIHJlbWFpbmluZyBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHZhbGlkIGFuZCBlbmZvcmNlZCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy5cblxuICAgMTAuMiBUaGlzIExpY2Vuc2UgaXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHJpZ2h0cyBncmFudGVkIGhlcmUgb3ZlciB0aGUgRGF0YWJhc2UuIEl0IHJlcGxhY2VzIGFueSBlYXJsaWVyIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIERhdGFiYXNlLlxuXG4gICAxMC4zIElmIFlvdSBhcmUgaW4gYnJlYWNoIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIFlvdSB3aWxsIG5vdCBiZSBlbnRpdGxlZCB0byByZWx5IG9uIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdG8gY29tcGxhaW4gb2YgYW55IGJyZWFjaCBieSB0aGUgTGljZW5zb3IuXG5cbiAgIDEwLjQgQ2hvaWNlIG9mIGxhdy4gVGhpcyBMaWNlbnNlIHRha2VzIGVmZmVjdCBpbiBhbmQgd2lsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZSBzb3VnaHQgdG8gYmUgZW5mb3JjZWQuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgYW5kIERhdGFiYXNlIFJpZ2h0cyBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgdGhlc2UgYWRkaXRpb25hbCByaWdodHMgYXJlIGdyYW50ZWQgaW4gdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIG1lZXQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4iXSwibGljZW5zZUlkcyI6WyJPREMtQnktMS4wIl0sImtleXdvcmRzIjpbImF0dHJpYnV0aW9uIGxpY2Vuc2Ugb2RjIiwibGljZW5zZSBvZGMgYnkiLCJvZGMgYnkgcHJlYW1ibGUiLCJieSBwcmVhbWJsZSB0aGUiLCJhdHRyaWJ1dGlvbiBsaWNlbnNlIGlzIiwiZGF0YWJhc2Ugc3ViamVjdCBvbmx5IiwidGhlIGF0dHJpYnV0aW9uIHJlcXVpcmVtZW50cyIsImF0dHJpYnV0aW9uIHJlcXVpcmVtZW50cyBzZXQiLCJzZWN0aW9uIDQgZGF0YWJhc2VzIiwiNCBkYXRhYmFzZXMgY2FuIiwiYW5kIHNvIHRoaXMiLCJzbyB0aGlzIGxpY2Vuc2UiLCJsaWNlbnNlIG9ubHkgZ292ZXJucyIsImluZGl2aWR1YWxseSBsaWNlbnNvcnMgbWF5IiwibGljZW5zb3JzIG1heSB0aGVyZWZvcmUiLCJtYXkgdGhlcmVmb3JlIHdpc2giLCJ0aGVyZWZvcmUgd2lzaCB0byIsIndpc2ggdG8gdXNlIiwidGhpcyBsaWNlbnNlIHRvZ2V0aGVyIiwibGljZW5zZSB0b2dldGhlciB3aXRoIiwidGhlIGNvbnRlbnRzIHNvbWV0aW1lcyIsImNvbnRlbnRzIHNvbWV0aW1lcyB0aGUiLCJwcml2YXRlIGNvbnRyYWN0cyB0cmFkZW1hcmsiLCJjb250cmFjdHMgdHJhZGVtYXJrIG92ZXIiLCJ0cmFkZW1hcmsgb3ZlciB0aGUiLCJsaWNlbnNlIG9yIGl0cyIsInJlbGV2YW50IGRvY3VtZW50YXRpb24gYyIsImRvY3VtZW50YXRpb24gYyBrZWVwIiwibGljZW5zZSBhbmQgZCIsInVuZGVyIHRoZSBvZGMiLCJ0aGUgb2RjIGF0dHJpYnV0aW9uIiwiYXR0cmlidXRpb24gbGljZW5zZSBkYXRhYmFzZSIsImxpY2Vuc2UgZGF0YWJhc2UgbmFtZSIsInRoZSBkYXRhYmFzZSBvZGMiLCJkYXRhYmFzZSBvZGMgYXR0cmlidXRpb24iLCJhdHRyaWJ1dGlvbiBsaWNlbnNlIHNob3VsZCIsIjQgNCBsaWNlbnNpbmciLCI0IGxpY2Vuc2luZyBvZiIsInRoZSBub3RpY2UgOSIsIm5vdGljZSA5IDUiLCJvZGMgYXR0cmlidXRpb24gbGljZW5zZSBvZGMiLCJhdHRyaWJ1dGlvbiBsaWNlbnNlIG9kYyBieSIsImxpY2Vuc2Ugb2RjIGJ5IHByZWFtYmxlIiwib2RjIGJ5IHByZWFtYmxlIHRoZSIsImJ5IHByZWFtYmxlIHRoZSBvcGVuIiwiY29tbW9ucyBhdHRyaWJ1dGlvbiBsaWNlbnNlIGlzIiwiYXR0cmlidXRpb24gbGljZW5zZSBpcyBhIiwibGljZW5zZSBpcyBhIGxpY2Vuc2UiLCJ1c2UgdGhpcyBkYXRhYmFzZSBzdWJqZWN0IiwidGhpcyBkYXRhYmFzZSBzdWJqZWN0IG9ubHkiLCJkYXRhYmFzZSBzdWJqZWN0IG9ubHkgdG8iLCJvbmx5IHRvIHRoZSBhdHRyaWJ1dGlvbiIsInRvIHRoZSBhdHRyaWJ1dGlvbiByZXF1aXJlbWVudHMiLCJ0aGUgYXR0cmlidXRpb24gcmVxdWlyZW1lbnRzIHNldCIsImF0dHJpYnV0aW9uIHJlcXVpcmVtZW50cyBzZXQgb3V0Iiwib3V0IGluIHNlY3Rpb24gNCIsImluIHNlY3Rpb24gNCBkYXRhYmFzZXMiLCJzZWN0aW9uIDQgZGF0YWJhc2VzIGNhbiIsIjQgZGF0YWJhc2VzIGNhbiBjb250YWluIiwiZXhhbXBsZSBhbmQgc28gdGhpcyIsImFuZCBzbyB0aGlzIGxpY2Vuc2UiLCJzbyB0aGlzIGxpY2Vuc2Ugb25seSIsInRoaXMgbGljZW5zZSBvbmx5IGdvdmVybnMiLCJsaWNlbnNlIG9ubHkgZ292ZXJucyB0aGUiLCJkYXRhYmFzZSBpbmRpdmlkdWFsbHkgbGljZW5zb3JzIG1heSIsImluZGl2aWR1YWxseSBsaWNlbnNvcnMgbWF5IHRoZXJlZm9yZSIsImxpY2Vuc29ycyBtYXkgdGhlcmVmb3JlIHdpc2giLCJtYXkgdGhlcmVmb3JlIHdpc2ggdG8iLCJ0aGVyZWZvcmUgd2lzaCB0byB1c2UiLCJ3aXNoIHRvIHVzZSB0aGlzIiwidXNlIHRoaXMgbGljZW5zZSB0b2dldGhlciIsInRoaXMgbGljZW5zZSB0b2dldGhlciB3aXRoIiwibGljZW5zZSB0b2dldGhlciB3aXRoIGFub3RoZXIiLCJmb3IgdGhlIGNvbnRlbnRzIHNvbWV0aW1lcyIsInRoZSBjb250ZW50cyBzb21ldGltZXMgdGhlIiwiY29udGVudHMgc29tZXRpbWVzIHRoZSBjb250ZW50cyIsImFzIHByaXZhdGUgY29udHJhY3RzIHRyYWRlbWFyayIsInByaXZhdGUgY29udHJhY3RzIHRyYWRlbWFyayBvdmVyIiwiY29udHJhY3RzIHRyYWRlbWFyayBvdmVyIHRoZSIsInRyYWRlbWFyayBvdmVyIHRoZSBuYW1lIiwidGhpcyBsaWNlbnNlIG9yIGl0cyIsImxpY2Vuc2Ugb3IgaXRzIHVuaWZvcm0iLCJhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBjIiwicmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBjIGtlZXAiLCJkb2N1bWVudGF0aW9uIGMga2VlcCBpbnRhY3QiLCJ0aGlzIGxpY2Vuc2UgYW5kIGQiLCJsaWNlbnNlIGFuZCBkIGlmIiwiYW5kIGQgaWYgaXQiLCJhdmFpbGFibGUgdW5kZXIgdGhlIG9kYyIsInVuZGVyIHRoZSBvZGMgYXR0cmlidXRpb24iLCJ0aGUgb2RjIGF0dHJpYnV0aW9uIGxpY2Vuc2UiLCJvZGMgYXR0cmlidXRpb24gbGljZW5zZSBkYXRhYmFzZSIsImF0dHJpYnV0aW9uIGxpY2Vuc2UgZGF0YWJhc2UgbmFtZSIsImxpY2Vuc2UgZGF0YWJhc2UgbmFtZSBzaG91bGQiLCJoeXBlcmxpbmsgdG8gdGhlIGxvY2F0aW9uIiwibG9jYXRpb24gb2YgdGhlIGRhdGFiYXNlIiwib2YgdGhlIGRhdGFiYXNlIG9kYyIsInRoZSBkYXRhYmFzZSBvZGMgYXR0cmlidXRpb24iLCJkYXRhYmFzZSBvZGMgYXR0cmlidXRpb24gbGljZW5zZSIsIm9kYyBhdHRyaWJ1dGlvbiBsaWNlbnNlIHNob3VsZCIsImF0dHJpYnV0aW9uIGxpY2Vuc2Ugc2hvdWxkIGNvbnRhaW4iLCJub3RpY2UgNCA0IGxpY2Vuc2luZyIsIjQgNCBsaWNlbnNpbmcgb2YiLCI0IGxpY2Vuc2luZyBvZiBvdGhlcnMiLCJvZiB0aGUgbm90aWNlIDkiLCJ0aGUgbm90aWNlIDkgNSIsIm5vdGljZSA5IDUgbm90d2l0aHN0YW5kaW5nIiwib2RjIGF0dHJpYnV0aW9uIGxpY2Vuc2Ugb2RjIGJ5IiwiYXR0cmlidXRpb24gbGljZW5zZSBvZGMgYnkgcHJlYW1ibGUiLCJsaWNlbnNlIG9kYyBieSBwcmVhbWJsZSB0aGUiLCJvZGMgYnkgcHJlYW1ibGUgdGhlIG9wZW4iLCJieSBwcmVhbWJsZSB0aGUgb3BlbiBkYXRhIiwiZGF0YSBjb21tb25zIGF0dHJpYnV0aW9uIGxpY2Vuc2UgaXMiLCJjb21tb25zIGF0dHJpYnV0aW9uIGxpY2Vuc2UgaXMgYSIsImF0dHJpYnV0aW9uIGxpY2Vuc2UgaXMgYSBsaWNlbnNlIiwibGljZW5zZSBpcyBhIGxpY2Vuc2UgYWdyZWVtZW50IiwiYW5kIHVzZSB0aGlzIGRhdGFiYXNlIHN1YmplY3QiLCJ1c2UgdGhpcyBkYXRhYmFzZSBzdWJqZWN0IG9ubHkiLCJ0aGlzIGRhdGFiYXNlIHN1YmplY3Qgb25seSB0byIsImRhdGFiYXNlIHN1YmplY3Qgb25seSB0byB0aGUiLCJzdWJqZWN0IG9ubHkgdG8gdGhlIGF0dHJpYnV0aW9uIiwib25seSB0byB0aGUgYXR0cmlidXRpb24gcmVxdWlyZW1lbnRzIiwidG8gdGhlIGF0dHJpYnV0aW9uIHJlcXVpcmVtZW50cyBzZXQiLCJ0aGUgYXR0cmlidXRpb24gcmVxdWlyZW1lbnRzIHNldCBvdXQiLCJhdHRyaWJ1dGlvbiByZXF1aXJlbWVudHMgc2V0IG91dCBpbiIsInJlcXVpcmVtZW50cyBzZXQgb3V0IGluIHNlY3Rpb24iLCJzZXQgb3V0IGluIHNlY3Rpb24gNCIsIm91dCBpbiBzZWN0aW9uIDQgZGF0YWJhc2VzIiwiaW4gc2VjdGlvbiA0IGRhdGFiYXNlcyBjYW4iLCJzZWN0aW9uIDQgZGF0YWJhc2VzIGNhbiBjb250YWluIiwiNCBkYXRhYmFzZXMgY2FuIGNvbnRhaW4gYSIsImZvciBleGFtcGxlIGFuZCBzbyB0aGlzIiwiZXhhbXBsZSBhbmQgc28gdGhpcyBsaWNlbnNlIiwiYW5kIHNvIHRoaXMgbGljZW5zZSBvbmx5Iiwic28gdGhpcyBsaWNlbnNlIG9ubHkgZ292ZXJucyIsInRoaXMgbGljZW5zZSBvbmx5IGdvdmVybnMgdGhlIiwibGljZW5zZSBvbmx5IGdvdmVybnMgdGhlIHJpZ2h0cyIsInRoZSBkYXRhYmFzZSBpbmRpdmlkdWFsbHkgbGljZW5zb3JzIG1heSIsImRhdGFiYXNlIGluZGl2aWR1YWxseSBsaWNlbnNvcnMgbWF5IHRoZXJlZm9yZSIsImluZGl2aWR1YWxseSBsaWNlbnNvcnMgbWF5IHRoZXJlZm9yZSB3aXNoIiwibGljZW5zb3JzIG1heSB0aGVyZWZvcmUgd2lzaCB0byIsIm1heSB0aGVyZWZvcmUgd2lzaCB0byB1c2UiLCJ0aGVyZWZvcmUgd2lzaCB0byB1c2UgdGhpcyIsIndpc2ggdG8gdXNlIHRoaXMgbGljZW5zZSIsInRvIHVzZSB0aGlzIGxpY2Vuc2UgdG9nZXRoZXIiLCJ1c2UgdGhpcyBsaWNlbnNlIHRvZ2V0aGVyIHdpdGgiLCJ0aGlzIGxpY2Vuc2UgdG9nZXRoZXIgd2l0aCBhbm90aGVyIiwibGljZW5zZSB0b2dldGhlciB3aXRoIGFub3RoZXIgbGljZW5zZSIsImxpY2Vuc2UgZm9yIHRoZSBjb250ZW50cyBzb21ldGltZXMiLCJmb3IgdGhlIGNvbnRlbnRzIHNvbWV0aW1lcyB0aGUiLCJ0aGUgY29udGVudHMgc29tZXRpbWVzIHRoZSBjb250ZW50cyIsImNvbnRlbnRzIHNvbWV0aW1lcyB0aGUgY29udGVudHMgb2YiLCJzdWNoIGFzIHByaXZhdGUgY29udHJhY3RzIHRyYWRlbWFyayIsImFzIHByaXZhdGUgY29udHJhY3RzIHRyYWRlbWFyayBvdmVyIiwicHJpdmF0ZSBjb250cmFjdHMgdHJhZGVtYXJrIG92ZXIgdGhlIiwiY29udHJhY3RzIHRyYWRlbWFyayBvdmVyIHRoZSBuYW1lIiwidHJhZGVtYXJrIG92ZXIgdGhlIG5hbWUgb3IiLCJvZiB0aGlzIGxpY2Vuc2UgYiBpbmNsdWRlIiwib2YgdGhpcyBsaWNlbnNlIG9yIGl0cyIsInRoaXMgbGljZW5zZSBvciBpdHMgdW5pZm9ybSIsImxpY2Vuc2Ugb3IgaXRzIHVuaWZvcm0gcmVzb3VyY2UiLCJpbiBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBjIiwiYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gYyBrZWVwIiwicmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBjIGtlZXAgaW50YWN0IiwiZG9jdW1lbnRhdGlvbiBjIGtlZXAgaW50YWN0IGFueSIsInRvIHRoaXMgbGljZW5zZSBhbmQgZCIsInRoaXMgbGljZW5zZSBhbmQgZCBpZiIsImxpY2Vuc2UgYW5kIGQgaWYgaXQiLCJhbmQgZCBpZiBpdCBpcyIsIndoaWNoIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIiwibWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIG9kYyIsImF2YWlsYWJsZSB1bmRlciB0aGUgb2RjIGF0dHJpYnV0aW9uIiwidW5kZXIgdGhlIG9kYyBhdHRyaWJ1dGlvbiBsaWNlbnNlIiwidGhlIG9kYyBhdHRyaWJ1dGlvbiBsaWNlbnNlIGRhdGFiYXNlIiwib2RjIGF0dHJpYnV0aW9uIGxpY2Vuc2UgZGF0YWJhc2UgbmFtZSIsImF0dHJpYnV0aW9uIGxpY2Vuc2UgZGF0YWJhc2UgbmFtZSBzaG91bGQiLCJsaWNlbnNlIGRhdGFiYXNlIG5hbWUgc2hvdWxkIGJlIiwiYSBoeXBlcmxpbmsgdG8gdGhlIGxvY2F0aW9uIiwiaHlwZXJsaW5rIHRvIHRoZSBsb2NhdGlvbiBvZiIsInRvIHRoZSBsb2NhdGlvbiBvZiB0aGUiLCJ0aGUgbG9jYXRpb24gb2YgdGhlIGRhdGFiYXNlIiwibG9jYXRpb24gb2YgdGhlIGRhdGFiYXNlIG9kYyIsIm9mIHRoZSBkYXRhYmFzZSBvZGMgYXR0cmlidXRpb24iLCJ0aGUgZGF0YWJhc2Ugb2RjIGF0dHJpYnV0aW9uIGxpY2Vuc2UiLCJkYXRhYmFzZSBvZGMgYXR0cmlidXRpb24gbGljZW5zZSBzaG91bGQiLCJvZGMgYXR0cmlidXRpb24gbGljZW5zZSBzaG91bGQgY29udGFpbiIsImF0dHJpYnV0aW9uIGxpY2Vuc2Ugc2hvdWxkIGNvbnRhaW4gYSIsImFib3ZlIG5vdGljZSA0IDQgbGljZW5zaW5nIiwibm90aWNlIDQgNCBsaWNlbnNpbmcgb2YiLCI0IDQgbGljZW5zaW5nIG9mIG90aGVycyIsIjQgbGljZW5zaW5nIG9mIG90aGVycyB5b3UiLCJyZWNlaXB0IG9mIHRoZSBub3RpY2UgOSIsIm9mIHRoZSBub3RpY2UgOSA1IiwidGhlIG5vdGljZSA5IDUgbm90d2l0aHN0YW5kaW5nIiwibm90aWNlIDkgNSBub3R3aXRoc3RhbmRpbmcgdGhlIl19LHsibGljZW5zZVRleHRzIjpbIk9EQyBPcGVuIERhdGFiYXNlIExpY2Vuc2UgKE9EYkwpIFByZWFtYmxlXG5cblRoZSBPcGVuIERhdGFiYXNlIExpY2Vuc2UgKE9EYkwpIGlzIGEgbGljZW5zZSBhZ3JlZW1lbnQgaW50ZW5kZWQgdG8gYWxsb3cgdXNlcnMgdG8gZnJlZWx5IHNoYXJlLCBtb2RpZnksIGFuZCB1c2UgdGhpcyBEYXRhYmFzZSB3aGlsZSBtYWludGFpbmluZyB0aGlzIHNhbWUgZnJlZWRvbSBmb3Igb3RoZXJzLiBNYW55IGRhdGFiYXNlcyBhcmUgY292ZXJlZCBieSBjb3B5cmlnaHQsIGFuZCB0aGVyZWZvcmUgdGhpcyBkb2N1bWVudCBsaWNlbnNlcyB0aGVzZSByaWdodHMuIFNvbWUganVyaXNkaWN0aW9ucywgbWFpbmx5IGluIHRoZSBFdXJvcGVhbiBVbmlvbiwgaGF2ZSBzcGVjaWZpYyByaWdodHMgdGhhdCBjb3ZlciBkYXRhYmFzZXMsIGFuZCBzbyB0aGUgT0RiTCBhZGRyZXNzZXMgdGhlc2UgcmlnaHRzLCB0b28uIEZpbmFsbHksIHRoZSBPRGJMIGlzIGFsc28gYW4gYWdyZWVtZW50IGluIGNvbnRyYWN0IGZvciB1c2VycyBvZiB0aGlzIERhdGFiYXNlIHRvIGFjdCBpbiBjZXJ0YWluIHdheXMgaW4gcmV0dXJuIGZvciBhY2Nlc3NpbmcgdGhpcyBEYXRhYmFzZS5cblxuRGF0YWJhc2VzIGNhbiBjb250YWluIGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGNvbnRlbnQgKGltYWdlcywgYXVkaW92aXN1YWwgbWF0ZXJpYWwsIGFuZCBzb3VuZHMgYWxsIGluIHRoZSBzYW1lIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSksIGFuZCBzbyB0aGUgT0RiTCBvbmx5IGdvdmVybnMgdGhlIHJpZ2h0cyBvdmVyIHRoZSBEYXRhYmFzZSwgYW5kIG5vdCB0aGUgY29udGVudHMgb2YgdGhlIERhdGFiYXNlIGluZGl2aWR1YWxseS4gTGljZW5zb3JzIHNob3VsZCB1c2UgdGhlIE9EYkwgdG9nZXRoZXIgd2l0aCBhbm90aGVyIGxpY2Vuc2UgZm9yIHRoZSBjb250ZW50cywgaWYgdGhlIGNvbnRlbnRzIGhhdmUgYSBzaW5nbGUgc2V0IG9mIHJpZ2h0cyB0aGF0IHVuaWZvcm1seSBjb3ZlcnMgYWxsIG9mIHRoZSBjb250ZW50cy4gSWYgdGhlIGNvbnRlbnRzIGhhdmUgbXVsdGlwbGUgc2V0cyBvZiBkaWZmZXJlbnQgcmlnaHRzLCBMaWNlbnNvcnMgc2hvdWxkIGRlc2NyaWJlIHdoYXQgcmlnaHRzIGdvdmVybiB3aGF0IGNvbnRlbnRzIHRvZ2V0aGVyIGluIHRoZSBpbmRpdmlkdWFsIHJlY29yZCBvciBpbiBzb21lIG90aGVyIHdheSB0aGF0IGNsYXJpZmllcyB3aGF0IHJpZ2h0cyBhcHBseS5cblxuU29tZXRpbWVzIHRoZSBjb250ZW50cyBvZiBhIGRhdGFiYXNlLCBvciB0aGUgZGF0YWJhc2UgaXRzZWxmLCBjYW4gYmUgY292ZXJlZCBieSBvdGhlciByaWdodHMgbm90IGFkZHJlc3NlZCBoZXJlIChzdWNoIGFzIHByaXZhdGUgY29udHJhY3RzLCB0cmFkZSBtYXJrIG92ZXIgdGhlIG5hbWUsIG9yIHByaXZhY3kgcmlnaHRzIC8gZGF0YSBwcm90ZWN0aW9uIHJpZ2h0cyBvdmVyIGluZm9ybWF0aW9uIGluIHRoZSBjb250ZW50cyksIGFuZCBzbyB5b3UgYXJlIGFkdmlzZWQgdGhhdCB5b3UgbWF5IGhhdmUgdG8gY29uc3VsdCBvdGhlciBkb2N1bWVudHMgb3IgY2xlYXIgb3RoZXIgcmlnaHRzIGJlZm9yZSBkb2luZyBhY3Rpdml0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS5cblxuLS0tLS0tXG5cblRoZSBMaWNlbnNvciAoYXMgZGVmaW5lZCBiZWxvdylcblxuYW5kXG5cbllvdSAoYXMgZGVmaW5lZCBiZWxvdylcblxuYWdyZWUgYXMgZm9sbG93czpcblxuICAgMS4wIERlZmluaXRpb25zIG9mIENhcGl0YWxpc2VkIFdvcmRzXG5cbiAgIFwiQ29sbGVjdGl2ZSBEYXRhYmFzZVwiIC0gTWVhbnMgdGhpcyBEYXRhYmFzZSBpbiB1bm1vZGlmaWVkIGZvcm0gYXMgcGFydCBvZiBhIGNvbGxlY3Rpb24gb2YgaW5kZXBlbmRlbnQgZGF0YWJhc2VzIGluIHRoZW1zZWx2ZXMgdGhhdCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgRGF0YWJhc2Ugd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgRGF0YWJhc2UuXG5cbiAgIFwiQ29udmV5XCIgLSBBcyBhIHZlcmIsIG1lYW5zIFVzaW5nIHRoZSBEYXRhYmFzZSwgYSBEZXJpdmF0aXZlIERhdGFiYXNlLCBvciB0aGUgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UgaW4gYW55IHdheSB0aGF0IGVuYWJsZXMgYSBQZXJzb24gdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcyBvZiB0aGUgRGF0YWJhc2Ugb3IgYSBEZXJpdmF0aXZlIERhdGFiYXNlLiBDb252ZXlpbmcgZG9lcyBub3QgaW5jbHVkZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoIGEgY29tcHV0ZXIgbmV0d29yaywgb3IgY3JlYXRpbmcgYW5kIFVzaW5nIGEgUHJvZHVjZWQgV29yaywgd2hlcmUgbm8gdHJhbnNmZXIgb2YgYSBjb3B5IG9mIHRoZSBEYXRhYmFzZSBvciBhIERlcml2YXRpdmUgRGF0YWJhc2Ugb2NjdXJzLlxuXG4gICBcIkNvbnRlbnRzXCIgLSBUaGUgY29udGVudHMgb2YgdGhpcyBEYXRhYmFzZSwgd2hpY2ggaW5jbHVkZXMgdGhlIGluZm9ybWF0aW9uLCBpbmRlcGVuZGVudCB3b3Jrcywgb3Igb3RoZXIgbWF0ZXJpYWwgY29sbGVjdGVkIGludG8gdGhlIERhdGFiYXNlLiBGb3IgZXhhbXBsZSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBEYXRhYmFzZSBjb3VsZCBiZSBmYWN0dWFsIGRhdGEgb3Igd29ya3Mgc3VjaCBhcyBpbWFnZXMsIGF1ZGlvdmlzdWFsIG1hdGVyaWFsLCB0ZXh0LCBvciBzb3VuZHMuXG5cbiAgIFwiRGF0YWJhc2VcIiAtIEEgY29sbGVjdGlvbiBvZiBtYXRlcmlhbCAodGhlIENvbnRlbnRzKSBhcnJhbmdlZCBpbiBhIHN5c3RlbWF0aWMgb3IgbWV0aG9kaWNhbCB3YXkgYW5kIGluZGl2aWR1YWxseSBhY2Nlc3NpYmxlIGJ5IGVsZWN0cm9uaWMgb3Igb3RoZXIgbWVhbnMgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICBcIkRhdGFiYXNlIERpcmVjdGl2ZVwiIC0gTWVhbnMgRGlyZWN0aXZlIDk2LzkvRUMgb2YgdGhlIEV1cm9wZWFuIFBhcmxpYW1lbnQgYW5kIG9mIHRoZSBDb3VuY2lsIG9mIDExIE1hcmNoIDE5OTYgb24gdGhlIGxlZ2FsIHByb3RlY3Rpb24gb2YgZGF0YWJhc2VzLCBhcyBhbWVuZGVkIG9yIHN1Y2NlZWRlZC5cblxuICAgXCJEYXRhYmFzZSBSaWdodFwiIC0gTWVhbnMgcmlnaHRzIHJlc3VsdGluZyBmcm9tIHRoZSBDaGFwdGVyIElJSSAoXCJzdWkgZ2VuZXJpc1wiKSByaWdodHMgaW4gdGhlIERhdGFiYXNlIERpcmVjdGl2ZSAoYXMgYW1lbmRlZCBhbmQgYXMgdHJhbnNwb3NlZCBieSBtZW1iZXIgc3RhdGVzKSwgd2hpY2ggaW5jbHVkZXMgdGhlIEV4dHJhY3Rpb24gYW5kIFJlLXV0aWxpc2F0aW9uIG9mIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzLCBhcyB3ZWxsIGFzIGFueSBzaW1pbGFyIHJpZ2h0cyBhdmFpbGFibGUgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiB1bmRlciBTZWN0aW9uIDEwLjQuXG5cbiAgIFwiRGVyaXZhdGl2ZSBEYXRhYmFzZVwiIC0gTWVhbnMgYSBkYXRhYmFzZSBiYXNlZCB1cG9uIHRoZSBEYXRhYmFzZSwgYW5kIGluY2x1ZGVzIGFueSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgYXJyYW5nZW1lbnQsIG1vZGlmaWNhdGlvbiwgb3IgYW55IG90aGVyIGFsdGVyYXRpb24gb2YgdGhlIERhdGFiYXNlIG9yIG9mIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMuIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgRXh0cmFjdGluZyBvciBSZS11dGlsaXNpbmcgdGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMgaW4gYSBuZXcgRGF0YWJhc2UuXG5cbiAgIFwiRXh0cmFjdGlvblwiIC0gTWVhbnMgdGhlIHBlcm1hbmVudCBvciB0ZW1wb3JhcnkgdHJhbnNmZXIgb2YgYWxsIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMgdG8gYW5vdGhlciBtZWRpdW0gYnkgYW55IG1lYW5zIG9yIGluIGFueSBmb3JtLlxuXG4gICBcIkxpY2Vuc2VcIiAtIE1lYW5zIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQgYW5kIGlzIGJvdGggYSBsaWNlbnNlIG9mIHJpZ2h0cyBzdWNoIGFzIGNvcHlyaWdodCBhbmQgRGF0YWJhc2UgUmlnaHRzIGFuZCBhbiBhZ3JlZW1lbnQgaW4gY29udHJhY3QuXG5cbiAgIFwiTGljZW5zb3JcIiAtIE1lYW5zIHRoZSBQZXJzb24gdGhhdCBvZmZlcnMgdGhlIERhdGFiYXNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIFwiUGVyc29uXCIgLSBNZWFucyBhIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIG9yIGEgYm9keSBvZiBwZXJzb25zIGNvcnBvcmF0ZSBvciBpbmNvcnBvcmF0ZS5cblxuICAgXCJQcm9kdWNlZCBXb3JrXCIgLSBhIHdvcmsgKHN1Y2ggYXMgYW4gaW1hZ2UsIGF1ZGlvdmlzdWFsIG1hdGVyaWFsLCB0ZXh0LCBvciBzb3VuZHMpIHJlc3VsdGluZyBmcm9tIHVzaW5nIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzICh2aWEgYSBzZWFyY2ggb3Igb3RoZXIgcXVlcnkpIGZyb20gdGhpcyBEYXRhYmFzZSwgYSBEZXJpdmF0aXZlIERhdGFiYXNlLCBvciB0aGlzIERhdGFiYXNlIGFzIHBhcnQgb2YgYSBDb2xsZWN0aXZlIERhdGFiYXNlLlxuXG4gICBcIlB1YmxpY2x5XCIgLSBtZWFucyB0byBQZXJzb25zIG90aGVyIHRoYW4gWW91IG9yIHVuZGVyIFlvdXIgY29udHJvbCBieSBlaXRoZXIgbW9yZSB0aGFuIDUwJSBvd25lcnNoaXAgb3IgYnkgdGhlIHBvd2VyIHRvIGRpcmVjdCB0aGVpciBhY3Rpdml0aWVzIChzdWNoIGFzIGNvbnRyYWN0aW5nIHdpdGggYW4gaW5kZXBlbmRlbnQgY29uc3VsdGFudCkuXG5cbiAgIFwiUmUtdXRpbGlzYXRpb25cIiAtIG1lYW5zIGFueSBmb3JtIG9mIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBhbGwgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cyBieSB0aGUgZGlzdHJpYnV0aW9uIG9mIGNvcGllcywgYnkgcmVudGluZywgYnkgb25saW5lIG9yIG90aGVyIGZvcm1zIG9mIHRyYW5zbWlzc2lvbi5cblxuICAgXCJTdWJzdGFudGlhbFwiIC0gTWVhbnMgc3Vic3RhbnRpYWwgaW4gdGVybXMgb2YgcXVhbnRpdHkgb3IgcXVhbGl0eSBvciBhIGNvbWJpbmF0aW9uIG9mIGJvdGguIFRoZSByZXBlYXRlZCBhbmQgc3lzdGVtYXRpYyBFeHRyYWN0aW9uIG9yIFJlLXV0aWxpc2F0aW9uIG9mIGluc3Vic3RhbnRpYWwgcGFydHMgb2YgdGhlIENvbnRlbnRzIG1heSBhbW91bnQgdG8gdGhlIEV4dHJhY3Rpb24gb3IgUmUtdXRpbGlzYXRpb24gb2YgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cy5cblxuICAgXCJVc2VcIiAtIEFzIGEgdmVyYiwgbWVhbnMgZG9pbmcgYW55IGFjdCB0aGF0IGlzIHJlc3RyaWN0ZWQgYnkgY29weXJpZ2h0IG9yIERhdGFiYXNlIFJpZ2h0cyB3aGV0aGVyIGluIHRoZSBvcmlnaW5hbCBtZWRpdW0gb3IgYW55IG90aGVyOyBhbmQgaW5jbHVkZXMgd2l0aG91dCBsaW1pdGF0aW9uIGRpc3RyaWJ1dGluZywgY29weWluZywgcHVibGljbHkgcGVyZm9ybWluZywgcHVibGljbHkgZGlzcGxheWluZywgYW5kIHByZXBhcmluZyBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEYXRhYmFzZSwgYXMgd2VsbCBhcyBtb2RpZnlpbmcgdGhlIERhdGFiYXNlIGFzIG1heSBiZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gdXNlIGl0IGluIGEgZGlmZmVyZW50IG1vZGUgb3IgZm9ybWF0LlxuXG4gICBcIllvdVwiIC0gTWVhbnMgYSBQZXJzb24gZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIERhdGFiYXNlLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uXG5cbiAgIFdvcmRzIGluIHRoZSBzaW5ndWxhciBpbmNsdWRlIHRoZSBwbHVyYWwgYW5kIHZpY2UgdmVyc2EuXG5cbiAgIDIuMCBXaGF0IHRoaXMgTGljZW5zZSBjb3ZlcnNcblxuICAgMi4xLiBMZWdhbCBlZmZlY3Qgb2YgdGhpcyBkb2N1bWVudC4gVGhpcyBMaWNlbnNlIGlzOlxuXG4gICAgICBhLiBBIGxpY2Vuc2Ugb2YgYXBwbGljYWJsZSBjb3B5cmlnaHQgYW5kIG5laWdoYm91cmluZyByaWdodHM7XG5cbiAgICAgIGIuIEEgbGljZW5zZSBvZiB0aGUgRGF0YWJhc2UgUmlnaHQ7IGFuZFxuXG4gICAgICBjLiBBbiBhZ3JlZW1lbnQgaW4gY29udHJhY3QgYmV0d2VlbiBZb3UgYW5kIHRoZSBMaWNlbnNvci5cblxuICAgMi4yIExlZ2FsIHJpZ2h0cyBjb3ZlcmVkLiBUaGlzIExpY2Vuc2UgY292ZXJzIHRoZSBsZWdhbCByaWdodHMgaW4gdGhlIERhdGFiYXNlLCBpbmNsdWRpbmc6XG5cbiAgICAgIGEuIENvcHlyaWdodC4gQW55IGNvcHlyaWdodCBvciBuZWlnaGJvdXJpbmcgcmlnaHRzIGluIHRoZSBEYXRhYmFzZS4gVGhlIGNvcHlyaWdodCBsaWNlbnNlZCBpbmNsdWRlcyBhbnkgaW5kaXZpZHVhbCBlbGVtZW50cyBvZiB0aGUgRGF0YWJhc2UsIGJ1dCBkb2VzIG5vdCBjb3ZlciB0aGUgY29weXJpZ2h0IG92ZXIgdGhlIENvbnRlbnRzIGluZGVwZW5kZW50IG9mIHRoaXMgRGF0YWJhc2UuIFNlZSBTZWN0aW9uIDIuNCBmb3IgZGV0YWlscy4gQ29weXJpZ2h0IGxhdyB2YXJpZXMgYmV0d2VlbiBqdXJpc2RpY3Rpb25zLCBidXQgaXMgbGlrZWx5IHRvIGNvdmVyOiB0aGUgRGF0YWJhc2UgbW9kZWwgb3Igc2NoZW1hLCB3aGljaCBpcyB0aGUgc3RydWN0dXJlLCBhcnJhbmdlbWVudCwgYW5kIG9yZ2FuaXNhdGlvbiBvZiB0aGUgRGF0YWJhc2UsIGFuZCBjYW4gYWxzbyBpbmNsdWRlIHRoZSBEYXRhYmFzZSB0YWJsZXMgYW5kIHRhYmxlIGluZGV4ZXM7IHRoZSBkYXRhIGVudHJ5IGFuZCBvdXRwdXQgc2hlZXRzOyBhbmQgdGhlIEZpZWxkIG5hbWVzIG9mIENvbnRlbnRzIHN0b3JlZCBpbiB0aGUgRGF0YWJhc2U7XG5cbiAgICAgIGIuIERhdGFiYXNlIFJpZ2h0cy4gRGF0YWJhc2UgUmlnaHRzIG9ubHkgZXh0ZW5kIHRvIHRoZSBFeHRyYWN0aW9uIGFuZCBSZS11dGlsaXNhdGlvbiBvZiB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cy4gRGF0YWJhc2UgUmlnaHRzIGNhbiBhcHBseSBldmVuIHdoZW4gdGhlcmUgaXMgbm8gY29weXJpZ2h0IG92ZXIgdGhlIERhdGFiYXNlLiBEYXRhYmFzZSBSaWdodHMgY2FuIGFsc28gYXBwbHkgd2hlbiB0aGUgQ29udGVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgRGF0YWJhc2UgYW5kIGFyZSBzZWxlY3RlZCBhbmQgYXJyYW5nZWQgaW4gYSB3YXkgdGhhdCB3b3VsZCBub3QgaW5mcmluZ2UgYW55IGFwcGxpY2FibGUgY29weXJpZ2h0OyBhbmRcblxuICAgICAgYy4gQ29udHJhY3QuIFRoaXMgaXMgYW4gYWdyZWVtZW50IGJldHdlZW4gWW91IGFuZCB0aGUgTGljZW5zb3IgZm9yIGFjY2VzcyB0byB0aGUgRGF0YWJhc2UuIEluIHJldHVybiB5b3UgYWdyZWUgdG8gY2VydGFpbiBjb25kaXRpb25zIG9mIHVzZSBvbiB0aGlzIGFjY2VzcyBhcyBvdXRsaW5lZCBpbiB0aGlzIExpY2Vuc2UuXG5cbiAgIDIuMyBSaWdodHMgbm90IGNvdmVyZWQuXG5cbiAgICAgIGEuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBhcHBseSB0byBjb21wdXRlciBwcm9ncmFtcyB1c2VkIGluIHRoZSBtYWtpbmcgb3Igb3BlcmF0aW9uIG9mIHRoZSBEYXRhYmFzZTtcblxuICAgICAgYi4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGNvdmVyIGFueSBwYXRlbnRzIG92ZXIgdGhlIENvbnRlbnRzIG9yIHRoZSBEYXRhYmFzZTsgYW5kXG5cbiAgICAgIGMuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBjb3ZlciBhbnkgdHJhZGVtYXJrcyBhc3NvY2lhdGVkIHdpdGggdGhlIERhdGFiYXNlLlxuXG4gICAyLjQgUmVsYXRpb25zaGlwIHRvIENvbnRlbnRzIGluIHRoZSBEYXRhYmFzZS4gVGhlIGluZGl2aWR1YWwgaXRlbXMgb2YgdGhlIENvbnRlbnRzIGNvbnRhaW5lZCBpbiB0aGlzIERhdGFiYXNlIG1heSBiZSBjb3ZlcmVkIGJ5IG90aGVyIHJpZ2h0cywgaW5jbHVkaW5nIGNvcHlyaWdodCwgcGF0ZW50LCBkYXRhIHByb3RlY3Rpb24sIHByaXZhY3ksIG9yIHBlcnNvbmFsaXR5IHJpZ2h0cywgYW5kIHRoaXMgTGljZW5zZSBkb2VzIG5vdCBjb3ZlciBhbnkgcmlnaHRzIChvdGhlciB0aGFuIERhdGFiYXNlIFJpZ2h0cyBvciBpbiBjb250cmFjdCkgaW4gaW5kaXZpZHVhbCBDb250ZW50cyBjb250YWluZWQgaW4gdGhlIERhdGFiYXNlLiBGb3IgZXhhbXBsZSwgaWYgdXNlZCBvbiBhIERhdGFiYXNlIG9mIGltYWdlcyAodGhlIENvbnRlbnRzKSwgdGhpcyBMaWNlbnNlIHdvdWxkIG5vdCBhcHBseSB0byBjb3B5cmlnaHQgb3ZlciBpbmRpdmlkdWFsIGltYWdlcywgd2hpY2ggY291bGQgaGF2ZSB0aGVpciBvd24gc2VwYXJhdGUgbGljZW5zZXMsIG9yIG9uZSBzaW5nbGUgbGljZW5zZSBjb3ZlcmluZyBhbGwgb2YgdGhlIHJpZ2h0cyBvdmVyIHRoZSBpbWFnZXMuXG5cbiAgIDMuMCBSaWdodHMgZ3JhbnRlZFxuXG4gICAzLjEgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgTGljZW5zb3IgZ3JhbnRzIHRvIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCB0ZXJtaW5hYmxlIChidXQgb25seSB1bmRlciBTZWN0aW9uIDkpIGxpY2Vuc2UgdG8gVXNlIHRoZSBEYXRhYmFzZSBmb3IgdGhlIGR1cmF0aW9uIG9mIGFueSBhcHBsaWNhYmxlIGNvcHlyaWdodCBhbmQgRGF0YWJhc2UgUmlnaHRzLiBUaGVzZSByaWdodHMgZXhwbGljaXRseSBpbmNsdWRlIGNvbW1lcmNpYWwgdXNlLCBhbmQgZG8gbm90IGV4Y2x1ZGUgYW55IGZpZWxkIG9mIGVuZGVhdm91ci4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uLCB0aGVzZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgY3JlYXRlZCBpbiB0aGUgZnV0dXJlLlxuXG4gICBUaGUgcmlnaHRzIGdyYW50ZWQgY292ZXIsIGZvciBleGFtcGxlOlxuXG4gICAgICBhLiBFeHRyYWN0aW9uIGFuZCBSZS11dGlsaXNhdGlvbiBvZiB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cztcblxuICAgICAgYi4gQ3JlYXRpb24gb2YgRGVyaXZhdGl2ZSBEYXRhYmFzZXM7XG5cbiAgICAgIGMuIENyZWF0aW9uIG9mIENvbGxlY3RpdmUgRGF0YWJhc2VzO1xuXG4gICAgICBkLiBDcmVhdGlvbiBvZiB0ZW1wb3Jhcnkgb3IgcGVybWFuZW50IHJlcHJvZHVjdGlvbnMgYnkgYW55IG1lYW5zIGFuZCBpbiBhbnkgZm9ybSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgaW5jbHVkaW5nIG9mIGFueSBEZXJpdmF0aXZlIERhdGFiYXNlcyBvciBhcyBhIHBhcnQgb2YgQ29sbGVjdGl2ZSBEYXRhYmFzZXM7IGFuZFxuXG4gICAgICBlLiBEaXN0cmlidXRpb24sIGNvbW11bmljYXRpb24sIGRpc3BsYXksIGxlbmRpbmcsIG1ha2luZyBhdmFpbGFibGUsIG9yIHBlcmZvcm1hbmNlIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIGFuZCBpbiBhbnkgZm9ybSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgaW5jbHVkaW5nIG9mIGFueSBEZXJpdmF0aXZlIERhdGFiYXNlIG9yIGFzIGEgcGFydCBvZiBDb2xsZWN0aXZlIERhdGFiYXNlcy5cblxuICAgMy4yIENvbXB1bHNvcnkgbGljZW5zZSBzY2hlbWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDpcblxuICAgICAgYS4gTm9uLXdhaXZhYmxlIGNvbXB1bHNvcnkgbGljZW5zZSBzY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTtcblxuICAgICAgYi4gV2FpdmFibGUgY29tcHVsc29yeSBsaWNlbnNlIHNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2FuIGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsgYW5kLFxuXG4gICAgICBjLiBWb2x1bnRhcnkgbGljZW5zZSBzY2hlbWVzLiBUaGUgTGljZW5zb3Igd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgIDMuMyBUaGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgRGF0YWJhc2UgdW5kZXIgZGlmZmVyZW50IHRlcm1zLCBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyBvciBtYWtpbmcgYXZhaWxhYmxlIHRoZSBEYXRhYmFzZSwgaXMgcmVzZXJ2ZWQuIE5vdGUgdGhhdCB0aGlzIERhdGFiYXNlIG1heSBiZSBtdWx0aXBsZS1saWNlbnNlZCwgYW5kIHNvIFlvdSBtYXkgaGF2ZSB0aGUgY2hvaWNlIG9mIHVzaW5nIGFsdGVybmF0aXZlIGxpY2Vuc2VzIGZvciB0aGlzIERhdGFiYXNlLiBTdWJqZWN0IHRvIFNlY3Rpb24gMTAuNCwgYWxsIG90aGVyIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIHJlc2VydmVkLlxuXG4gICA0LjAgQ29uZGl0aW9ucyBvZiBVc2VcblxuICAgNC4xIFRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgYXJlIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gWW91ciBjb21wbHlpbmcgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgb2YgdXNlLiBUaGVzZSBhcmUgaW1wb3J0YW50IGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgaWYgWW91IGZhaWwgdG8gZm9sbG93IHRoZW0sIFlvdSB3aWxsIGJlIGluIG1hdGVyaWFsIGJyZWFjaCBvZiBpdHMgdGVybXMuXG5cbiAgIDQuMiBOb3RpY2VzLiBJZiBZb3UgUHVibGljbHkgQ29udmV5IHRoaXMgRGF0YWJhc2UsIGFueSBEZXJpdmF0aXZlIERhdGFiYXNlLCBvciB0aGUgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UsIHRoZW4gWW91IG11c3Q6XG5cbiAgICAgIGEuIERvIHNvIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhbm90aGVyIGxpY2Vuc2UgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNC40O1xuXG4gICAgICBiLiBJbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgKG9yLCBhcyBhcHBsaWNhYmxlLCBhIGxpY2Vuc2UgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNC40KSBvciBpdHMgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIHdpdGggdGhlIERhdGFiYXNlIG9yIERlcml2YXRpdmUgRGF0YWJhc2UsIGluY2x1ZGluZyBib3RoIGluIHRoZSBEYXRhYmFzZSBvciBEZXJpdmF0aXZlIERhdGFiYXNlIGFuZCBpbiBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbjsgYW5kXG5cbiAgICAgIGMuIEtlZXAgaW50YWN0IGFueSBjb3B5cmlnaHQgb3IgRGF0YWJhc2UgUmlnaHQgbm90aWNlcyBhbmQgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZS5cblxuICAgICAgZC4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCB0aGUgcmVxdWlyZWQgbm90aWNlcyBpbiBhIHBhcnRpY3VsYXIgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHRoZSBub3RpY2VzIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIHVzZXJzIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBpdC5cblxuICAgNC4zIE5vdGljZSBmb3IgdXNpbmcgb3V0cHV0IChDb250ZW50cykuIENyZWF0aW5nIGFuZCBVc2luZyBhIFByb2R1Y2VkIFdvcmsgZG9lcyBub3QgcmVxdWlyZSB0aGUgbm90aWNlIGluIFNlY3Rpb24gNC4yLiBIb3dldmVyLCBpZiB5b3UgUHVibGljbHkgVXNlIGEgUHJvZHVjZWQgV29yaywgWW91IG11c3QgaW5jbHVkZSBhIG5vdGljZSBhc3NvY2lhdGVkIHdpdGggdGhlIFByb2R1Y2VkIFdvcmsgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIG1ha2UgYW55IFBlcnNvbiB0aGF0IHVzZXMsIHZpZXdzLCBhY2Nlc3NlcywgaW50ZXJhY3RzIHdpdGgsIG9yIGlzIG90aGVyd2lzZSBleHBvc2VkIHRvIHRoZSBQcm9kdWNlZCBXb3JrIGF3YXJlIHRoYXQgQ29udGVudCB3YXMgb2J0YWluZWQgZnJvbSB0aGUgRGF0YWJhc2UsIERlcml2YXRpdmUgRGF0YWJhc2UsIG9yIHRoZSBEYXRhYmFzZSBhcyBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZSwgYW5kIHRoYXQgaXQgaXMgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgYS4gRXhhbXBsZSBub3RpY2UuIFRoZSBmb2xsb3dpbmcgdGV4dCB3aWxsIHNhdGlzZnkgbm90aWNlIHVuZGVyIFNlY3Rpb24gNC4zOlxuXG4gICAgICBDb250YWlucyBpbmZvcm1hdGlvbiBmcm9tIERBVEFCQVNFIE5BTUUsIHdoaWNoIGlzIG1hZGUgYXZhaWxhYmxlIGhlcmUgdW5kZXIgdGhlIE9wZW4gRGF0YWJhc2UgTGljZW5zZSAoT0RiTCkuXG5cbiAgICAgIERBVEFCQVNFIE5BTUUgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggdGhlIG5hbWUgb2YgdGhlIERhdGFiYXNlIGFuZCBhIGh5cGVybGluayB0byB0aGUgVVJJIG9mIHRoZSBEYXRhYmFzZS4gXCJPcGVuIERhdGFiYXNlIExpY2Vuc2VcIiBzaG91bGQgY29udGFpbiBhIGh5cGVybGluayB0byB0aGUgVVJJIG9mIHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5zZS4gSWYgaHlwZXJsaW5rcyBhcmUgbm90IHBvc3NpYmxlLCBZb3Ugc2hvdWxkIGluY2x1ZGUgdGhlIHBsYWluIHRleHQgb2YgdGhlIHJlcXVpcmVkIFVSSSdzIHdpdGggdGhlIGFib3ZlIG5vdGljZS5cblxuICAgNC40IFNoYXJlIGFsaWtlLlxuXG4gICAgICBhLiBBbnkgRGVyaXZhdGl2ZSBEYXRhYmFzZSB0aGF0IFlvdSBQdWJsaWNseSBVc2UgbXVzdCBiZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZjpcblxuICAgICAgICAgaS4gVGhpcyBMaWNlbnNlO1xuXG4gICAgICAgICBpaS4gQSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGlzIExpY2Vuc2U7IG9yXG5cbiAgICAgICAgIGlpaS4gQSBjb21wYXRpYmxlIGxpY2Vuc2UuXG5cbiAgICAgICAgIElmIFlvdSBsaWNlbnNlIHRoZSBEZXJpdmF0aXZlIERhdGFiYXNlIHVuZGVyIG9uZSBvZiB0aGUgbGljZW5zZXMgbWVudGlvbmVkIGluIChpaWkpLCBZb3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlLlxuXG4gICAgICBiLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgRXh0cmFjdGlvbiBvciBSZS11dGlsaXNhdGlvbiBvZiB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cyBpbnRvIGEgbmV3IGRhdGFiYXNlIGlzIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBhbmQgbXVzdCBjb21wbHkgd2l0aCBTZWN0aW9uIDQuNC5cblxuICAgICAgYy4gRGVyaXZhdGl2ZSBEYXRhYmFzZXMgYW5kIFByb2R1Y2VkIFdvcmtzLiBBIERlcml2YXRpdmUgRGF0YWJhc2UgaXMgUHVibGljbHkgVXNlZCBhbmQgc28gbXVzdCBjb21wbHkgd2l0aCBTZWN0aW9uIDQuNC4gaWYgYSBQcm9kdWNlZCBXb3JrIGNyZWF0ZWQgZnJvbSB0aGUgRGVyaXZhdGl2ZSBEYXRhYmFzZSBpcyBQdWJsaWNseSBVc2VkLlxuXG4gICAgICBkLiBTaGFyZSBBbGlrZSBhbmQgYWRkaXRpb25hbCBDb250ZW50cy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtdXN0IG5vdCBhZGQgQ29udGVudHMgdG8gRGVyaXZhdGl2ZSBEYXRhYmFzZXMgdW5kZXIgU2VjdGlvbiA0LjQgYSB0aGF0IGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBlLiBDb21wYXRpYmxlIGxpY2Vuc2VzLiBMaWNlbnNvcnMgbWF5IGF1dGhvcmlzZSBhIHByb3h5IHRvIGRldGVybWluZSBjb21wYXRpYmxlIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb24gNC40IGEgaWlpLiBJZiB0aGV5IGRvIHNvLCB0aGUgYXV0aG9yaXNlZCBwcm94eSdzIHB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhIGNvbXBhdGlibGUgbGljZW5zZSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gdXNlIHRoZSBjb21wYXRpYmxlIGxpY2Vuc2UuXG5cbiAgIDQuNSBMaW1pdHMgb2YgU2hhcmUgQWxpa2UuIFRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiA0LjQgZG8gbm90IGFwcGx5IGluIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBsaWNlbnNlIENvbGxlY3RpdmUgRGF0YWJhc2VzIHVuZGVyIHRoaXMgTGljZW5zZSBpZiBZb3UgaW5jb3Jwb3JhdGUgdGhpcyBEYXRhYmFzZSBvciBhIERlcml2YXRpdmUgRGF0YWJhc2UgaW4gdGhlIGNvbGxlY3Rpb24sIGJ1dCB0aGlzIExpY2Vuc2Ugc3RpbGwgYXBwbGllcyB0byB0aGlzIERhdGFiYXNlIG9yIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBhcyBhIHBhcnQgb2YgdGhlIENvbGxlY3RpdmUgRGF0YWJhc2U7XG5cbiAgICAgIGIuIFVzaW5nIHRoaXMgRGF0YWJhc2UsIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSwgb3IgdGhpcyBEYXRhYmFzZSBhcyBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZSB0byBjcmVhdGUgYSBQcm9kdWNlZCBXb3JrIGRvZXMgbm90IGNyZWF0ZSBhIERlcml2YXRpdmUgRGF0YWJhc2UgZm9yIHB1cnBvc2VzIG9mIFNlY3Rpb24gNC40OyBhbmRcblxuICAgICAgYy4gVXNlIG9mIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBpbnRlcm5hbGx5IHdpdGhpbiBhbiBvcmdhbmlzYXRpb24gaXMgbm90IHRvIHRoZSBwdWJsaWMgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBmYWxsIHVuZGVyIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiA0LjQuXG5cbiAgIDQuNiBBY2Nlc3MgdG8gRGVyaXZhdGl2ZSBEYXRhYmFzZXMuIElmIFlvdSBQdWJsaWNseSBVc2UgYSBEZXJpdmF0aXZlIERhdGFiYXNlIG9yIGEgUHJvZHVjZWQgV29yayBmcm9tIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSwgWW91IG11c3QgYWxzbyBvZmZlciB0byByZWNpcGllbnRzIG9mIHRoZSBEZXJpdmF0aXZlIERhdGFiYXNlIG9yIFByb2R1Y2VkIFdvcmsgYSBjb3B5IGluIGEgbWFjaGluZSByZWFkYWJsZSBmb3JtIG9mOlxuXG4gICAgICBhLiBUaGUgZW50aXJlIERlcml2YXRpdmUgRGF0YWJhc2U7IG9yXG5cbiAgICAgIGIuIEEgZmlsZSBjb250YWluaW5nIGFsbCBvZiB0aGUgYWx0ZXJhdGlvbnMgbWFkZSB0byB0aGUgRGF0YWJhc2Ugb3IgdGhlIG1ldGhvZCBvZiBtYWtpbmcgdGhlIGFsdGVyYXRpb25zIHRvIHRoZSBEYXRhYmFzZSAoc3VjaCBhcyBhbiBhbGdvcml0aG0pLCBpbmNsdWRpbmcgYW55IGFkZGl0aW9uYWwgQ29udGVudHMsIHRoYXQgbWFrZSB1cCBhbGwgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIERhdGFiYXNlIGFuZCB0aGUgRGVyaXZhdGl2ZSBEYXRhYmFzZS5cblxuICAgICAgVGhlIERlcml2YXRpdmUgRGF0YWJhc2UgKHVuZGVyIGEuKSBvciBhbHRlcmF0aW9uIGZpbGUgKHVuZGVyIGIuKSBtdXN0IGJlIGF2YWlsYWJsZSBhdCBubyBtb3JlIHRoYW4gYSByZWFzb25hYmxlIHByb2R1Y3Rpb24gY29zdCBmb3IgcGh5c2ljYWwgZGlzdHJpYnV0aW9ucyBhbmQgZnJlZSBvZiBjaGFyZ2UgaWYgZGlzdHJpYnV0ZWQgb3ZlciB0aGUgaW50ZXJuZXQuXG5cbiAgIDQuNyBUZWNobm9sb2dpY2FsIG1lYXN1cmVzIGFuZCBhZGRpdGlvbmFsIHRlcm1zXG5cbiAgICAgIGEuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBhbGxvdyBZb3UgdG8gaW1wb3NlIChleGNlcHQgc3ViamVjdCB0byBTZWN0aW9uIDQuNyBiLikgYW55IHRlcm1zIG9yIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBEYXRhYmFzZSwgYSBEZXJpdmF0aXZlIERhdGFiYXNlLCBvciB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIG9yIGFueSByaWdodHMgZ3JhbnRlZCB1bmRlciBpdCwgb3IgaGF2ZSB0aGUgZWZmZWN0IG9yIGludGVudCBvZiByZXN0cmljdGluZyB0aGUgYWJpbGl0eSBvZiBhbnkgcGVyc29uIHRvIGV4ZXJjaXNlIHRob3NlIHJpZ2h0cy5cblxuICAgICAgYi4gUGFyYWxsZWwgZGlzdHJpYnV0aW9uLiBZb3UgbWF5IGltcG9zZSB0ZXJtcyBvciB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBEYXRhYmFzZSwgYSBEZXJpdmF0aXZlIERhdGFiYXNlLCBvciB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cyAoYSBcIlJlc3RyaWN0ZWQgRGF0YWJhc2VcIikgaW4gY29udHJhdmVudGlvbiBvZiBTZWN0aW9uIDQuNzQgYS4gb25seSBpZiBZb3UgYWxzbyBtYWtlIGEgY29weSBvZiB0aGUgRGF0YWJhc2Ugb3IgYSBEZXJpdmF0aXZlIERhdGFiYXNlIGF2YWlsYWJsZSB0byB0aGUgcmVjaXBpZW50IG9mIHRoZSBSZXN0cmljdGVkIERhdGFiYXNlOlxuXG4gICAgICAgICBpLiBUaGF0IGlzIGF2YWlsYWJsZSB3aXRob3V0IGFkZGl0aW9uYWwgZmVlO1xuXG4gICAgICAgICBpaS4gVGhhdCBpcyBhdmFpbGFibGUgaW4gYSBtZWRpdW0gdGhhdCBkb2VzIG5vdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBvciBhbnkgcmlnaHRzIGdyYW50ZWQgdW5kZXIgaXQsIG9yIGhhdmUgdGhlIGVmZmVjdCBvciBpbnRlbnQgb2YgcmVzdHJpY3RpbmcgdGhlIGFiaWxpdHkgb2YgYW55IHBlcnNvbiB0byBleGVyY2lzZSB0aG9zZSByaWdodHMgKGFuIFwiVW5yZXN0cmljdGVkIERhdGFiYXNlXCIpOyBhbmRcblxuICAgICAgICAgaWlpLiBUaGUgVW5yZXN0cmljdGVkIERhdGFiYXNlIGlzIGF0IGxlYXN0IGFzIGFjY2Vzc2libGUgdG8gdGhlIHJlY2lwaWVudCBhcyBhIHByYWN0aWNhbCBtYXR0ZXIgYXMgdGhlIFJlc3RyaWN0ZWQgRGF0YWJhc2UuXG5cbiAgICAgIGMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgbWF5IHBsYWNlIHRoaXMgRGF0YWJhc2Ugb3IgYSBEZXJpdmF0aXZlIERhdGFiYXNlIGluIGFuIGF1dGhlbnRpY2F0ZWQgZW52aXJvbm1lbnQsIGJlaGluZCBhIHBhc3N3b3JkLCBvciB3aXRoaW4gYSBzaW1pbGFyIGFjY2VzcyBjb250cm9sIHNjaGVtZSBwcm92aWRlZCB0aGF0IFlvdSBkbyBub3QgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhbnkgcmlnaHRzIGdyYW50ZWQgdW5kZXIgaXQgb3IgaGF2ZSB0aGUgZWZmZWN0IG9yIGludGVudCBvZiByZXN0cmljdGluZyB0aGUgYWJpbGl0eSBvZiBhbnkgcGVyc29uIHRvIGV4ZXJjaXNlIHRob3NlIHJpZ2h0cy5cblxuICAgNC44IExpY2Vuc2luZyBvZiBvdGhlcnMuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIERhdGFiYXNlLiBFYWNoIHRpbWUgWW91IGNvbW11bmljYXRlIHRoZSBEYXRhYmFzZSwgdGhlIHdob2xlIG9yIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzLCBvciBhbnkgRGVyaXZhdGl2ZSBEYXRhYmFzZSB0byBhbnlvbmUgZWxzZSBpbiBhbnkgd2F5LCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBEYXRhYmFzZSBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGlzIExpY2Vuc2UuIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLCBidXQgWW91IG1heSBlbmZvcmNlIGFueSByaWdodHMgdGhhdCBZb3UgaGF2ZSBvdmVyIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGFueSBtb2RpZmljYXRpb25zIG9mIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBtYWRlIGJ5IFlvdSBvciBhbm90aGVyIFBlcnNvbiBhdCBZb3VyIGRpcmVjdGlvbi4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgNS4wIE1vcmFsIHJpZ2h0c1xuXG4gICA1LjEgTW9yYWwgcmlnaHRzLiBUaGlzIHNlY3Rpb24gY292ZXJzIG1vcmFsIHJpZ2h0cywgaW5jbHVkaW5nIGFueSByaWdodHMgdG8gYmUgaWRlbnRpZmllZCBhcyB0aGUgYXV0aG9yIG9mIHRoZSBEYXRhYmFzZSBvciB0byBvYmplY3QgdG8gdHJlYXRtZW50IHRoYXQgd291bGQgb3RoZXJ3aXNlIHByZWp1ZGljZSB0aGUgYXV0aG9yJ3MgaG9ub3VyIGFuZCByZXB1dGF0aW9uLCBvciBhbnkgb3RoZXIgZGVyb2dhdG9yeSB0cmVhdG1lbnQ6XG5cbiAgICAgIGEuIEZvciBqdXJpc2RpY3Rpb25zIGFsbG93aW5nIHdhaXZlciBvZiBtb3JhbCByaWdodHMsIExpY2Vuc29yIHdhaXZlcyBhbGwgbW9yYWwgcmlnaHRzIHRoYXQgTGljZW5zb3IgbWF5IGhhdmUgaW4gdGhlIERhdGFiYXNlIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwb3NzaWJsZSBieSB0aGUgbGF3IG9mIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gdW5kZXIgU2VjdGlvbiAxMC40O1xuXG4gICAgICBiLiBJZiB3YWl2ZXIgb2YgbW9yYWwgcmlnaHRzIHVuZGVyIFNlY3Rpb24gNS4xIGEgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpcyBub3QgcG9zc2libGUsIExpY2Vuc29yIGFncmVlcyBub3QgdG8gYXNzZXJ0IGFueSBtb3JhbCByaWdodHMgb3ZlciB0aGUgRGF0YWJhc2UgYW5kIHdhaXZlcyBhbGwgY2xhaW1zIGluIG1vcmFsIHJpZ2h0cyB0byB0aGUgZnVsbGVzdCBleHRlbnQgcG9zc2libGUgYnkgdGhlIGxhdyBvZiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIHVuZGVyIFNlY3Rpb24gMTAuNDsgYW5kXG5cbiAgICAgIGMuIEZvciBqdXJpc2RpY3Rpb25zIG5vdCBhbGxvd2luZyB3YWl2ZXIgb3IgYW4gYWdyZWVtZW50IG5vdCB0byBhc3NlcnQgbW9yYWwgcmlnaHRzIHVuZGVyIFNlY3Rpb24gNS4xIGEgYW5kIGIsIHRoZSBhdXRob3IgbWF5IHJldGFpbiB0aGVpciBtb3JhbCByaWdodHMgb3ZlciBjZXJ0YWluIGFzcGVjdHMgb2YgdGhlIERhdGFiYXNlLlxuXG4gICAgICBQbGVhc2Ugbm90ZSB0aGF0IHNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgZm9yIHRoZSB3YWl2ZXIgb2YgbW9yYWwgcmlnaHRzLCBhbmQgc28gbW9yYWwgcmlnaHRzIG1heSBzdGlsbCBzdWJzaXN0IG92ZXIgdGhlIERhdGFiYXNlIGluIHNvbWUganVyaXNkaWN0aW9ucy5cblxuICAgNi4wIEZhaXIgZGVhbGluZywgRGF0YWJhc2UgZXhjZXB0aW9ucywgYW5kIG90aGVyIHJpZ2h0cyBub3QgYWZmZWN0ZWRcblxuICAgNi4xIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBhZmZlY3QgYW55IHJpZ2h0cyB0aGF0IFlvdSBvciBhbnlvbmUgZWxzZSBtYXkgaW5kZXBlbmRlbnRseSBoYXZlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyB0byBtYWtlIGFueSB1c2Ugb2YgdGhpcyBEYXRhYmFzZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbjpcblxuICAgICAgYS4gRXhjZXB0aW9ucyB0byB0aGUgRGF0YWJhc2UgUmlnaHQgaW5jbHVkaW5nOiBFeHRyYWN0aW9uIG9mIENvbnRlbnRzIGZyb20gbm9uLWVsZWN0cm9uaWMgRGF0YWJhc2VzIGZvciBwcml2YXRlIHB1cnBvc2VzLCBFeHRyYWN0aW9uIGZvciBwdXJwb3NlcyBvZiBpbGx1c3RyYXRpb24gZm9yIHRlYWNoaW5nIG9yIHNjaWVudGlmaWMgcmVzZWFyY2gsIGFuZCBFeHRyYWN0aW9uIG9yIFJlLXV0aWxpc2F0aW9uIGZvciBwdWJsaWMgc2VjdXJpdHkgb3IgYW4gYWRtaW5pc3RyYXRpdmUgb3IganVkaWNpYWwgcHJvY2VkdXJlLlxuXG4gICAgICBiLiBGYWlyIGRlYWxpbmcsIGZhaXIgdXNlLCBvciBhbnkgb3RoZXIgbGVnYWxseSByZWNvZ25pc2VkIGxpbWl0YXRpb24gb3IgZXhjZXB0aW9uIHRvIGluZnJpbmdlbWVudCBvZiBjb3B5cmlnaHQgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLlxuXG4gICA2LjIgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGFmZmVjdCBhbnkgcmlnaHRzIG9mIGxhd2Z1bCB1c2VycyB0byBFeHRyYWN0IGFuZCBSZS11dGlsaXNlIGluc3Vic3RhbnRpYWwgcGFydHMgb2YgdGhlIENvbnRlbnRzLCBldmFsdWF0ZWQgcXVhbnRpdGF0aXZlbHkgb3IgcXVhbGl0YXRpdmVseSwgZm9yIGFueSBwdXJwb3NlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgY3JlYXRpbmcgYSBEZXJpdmF0aXZlIERhdGFiYXNlIChzdWJqZWN0IHRvIG90aGVyIHJpZ2h0cyBvdmVyIHRoZSBDb250ZW50cywgc2VlIFNlY3Rpb24gMi40KS4gVGhlIHJlcGVhdGVkIGFuZCBzeXN0ZW1hdGljIEV4dHJhY3Rpb24gb3IgUmUtdXRpbGlzYXRpb24gb2YgaW5zdWJzdGFudGlhbCBwYXJ0cyBvZiB0aGUgQ29udGVudHMgbWF5IGhvd2V2ZXIgYW1vdW50IHRvIHRoZSBFeHRyYWN0aW9uIG9yIFJlLXV0aWxpc2F0aW9uIG9mIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMuXG5cbiAgIDcuMCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyXG5cbiAgIDcuMSBUaGUgRGF0YWJhc2UgaXMgbGljZW5zZWQgYnkgdGhlIExpY2Vuc29yIFwiYXMgaXNcIiBhbmQgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzLCBpbXBsaWVkLCBvciBhcmlzaW5nIGJ5IHN0YXR1dGUsIGN1c3RvbSwgY291cnNlIG9mIGRlYWxpbmcsIG9yIHRyYWRlIHVzYWdlLiBMaWNlbnNvciBzcGVjaWZpY2FsbHkgZGlzY2xhaW1zIGFueSBhbmQgYWxsIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlLCBub24taW5mcmluZ2VtZW50LCBhY2N1cmFjeSBvciBjb21wbGV0ZW5lc3MsIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGVycm9ycywgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIG1lcmNoYW50YWJpbGl0eSwgb3Igb3RoZXJ3aXNlLiBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb2YgaW1wbGllZCB3YXJyYW50aWVzLCBzbyB0aGlzIGV4Y2x1c2lvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS5cblxuICAgOC4wIExpbWl0YXRpb24gb2YgbGlhYmlsaXR5XG5cbiAgIDguMSBTdWJqZWN0IHRvIGFueSBsaWFiaWxpdHkgdGhhdCBtYXkgbm90IGJlIGV4Y2x1ZGVkIG9yIGxpbWl0ZWQgYnkgbGF3LCB0aGUgTGljZW5zb3IgaXMgbm90IGxpYWJsZSBmb3IsIGFuZCBleHByZXNzbHkgZXhjbHVkZXMsIGFsbCBsaWFiaWxpdHkgZm9yIGxvc3Mgb3IgZGFtYWdlIGhvd2V2ZXIgYW5kIHdoZW5ldmVyIGNhdXNlZCB0byBhbnlvbmUgYnkgYW55IHVzZSB1bmRlciB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgYnkgWW91IG9yIGJ5IGFueW9uZSBlbHNlLCBhbmQgd2hldGhlciBjYXVzZWQgYnkgYW55IGZhdWx0IG9uIHRoZSBwYXJ0IG9mIHRoZSBMaWNlbnNvciBvciBub3QuIFRoaXMgZXhjbHVzaW9uIG9mIGxpYWJpbGl0eSBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBhbnkgc3BlY2lhbCwgaW5jaWRlbnRhbCwgY29uc2VxdWVudGlhbCwgcHVuaXRpdmUsIG9yIGV4ZW1wbGFyeSBkYW1hZ2VzIHN1Y2ggYXMgbG9zcyBvZiByZXZlbnVlLCBkYXRhLCBhbnRpY2lwYXRlZCBwcm9maXRzLCBhbmQgbG9zdCBidXNpbmVzcy4gVGhpcyBleGNsdXNpb24gYXBwbGllcyBldmVuIGlmIHRoZSBMaWNlbnNvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuXG5cbiAgIDguMiBJZiBsaWFiaWxpdHkgbWF5IG5vdCBiZSBleGNsdWRlZCBieSBsYXcsIGl0IGlzIGxpbWl0ZWQgdG8gYWN0dWFsIGFuZCBkaXJlY3QgZmluYW5jaWFsIGxvc3MgdG8gdGhlIGV4dGVudCBpdCBpcyBjYXVzZWQgYnkgcHJvdmVkIG5lZ2xpZ2VuY2Ugb24gdGhlIHBhcnQgb2YgdGhlIExpY2Vuc29yLlxuXG4gICA5LjAgVGVybWluYXRpb24gb2YgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlXG5cbiAgIDkuMSBBbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlcyB0aGlzIExpY2Vuc2Ugd2l0aCBpbW1lZGlhdGUgZWZmZWN0IGFuZCB3aXRob3V0IG5vdGljZSB0byBZb3UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBQZXJzb25zIHdobyBoYXZlIHJlY2VpdmVkIHRoZSBEYXRhYmFzZSwgdGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMsIERlcml2YXRpdmUgRGF0YWJhc2VzLCBvciB0aGUgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCB0aGVpciB1c2UgaXMgaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhpcyBMaWNlbnNlIG9yIGEgbGljZW5zZSBncmFudGVkIHVuZGVyIFNlY3Rpb24gNC44IG9mIHRoaXMgTGljZW5zZS4gU2VjdGlvbnMgMSwgMiwgNywgOCwgOSBhbmQgMTAgd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDkuMiBJZiBZb3UgYXJlIG5vdCBpbiBicmVhY2ggb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhlIExpY2Vuc29yIHdpbGwgbm90IHRlcm1pbmF0ZSBZb3VyIHJpZ2h0cyB1bmRlciBpdC5cblxuICAgOS4zIFVubGVzcyB0ZXJtaW5hdGVkIHVuZGVyIFNlY3Rpb24gOS4xLCB0aGlzIExpY2Vuc2UgaXMgZ3JhbnRlZCB0byBZb3UgZm9yIHRoZSBkdXJhdGlvbiBvZiBhcHBsaWNhYmxlIHJpZ2h0cyBpbiB0aGUgRGF0YWJhc2UuXG5cbiAgIDkuNCBSZWluc3RhdGVtZW50IG9mIHJpZ2h0cy4gSWYgeW91IGNlYXNlIGFueSBicmVhY2ggb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGZ1bGwgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIGJlIHJlaW5zdGF0ZWQ6XG5cbiAgICAgIGEuIFByb3Zpc2lvbmFsbHkgYW5kIHN1YmplY3QgdG8gcGVybWFuZW50IHRlcm1pbmF0aW9uIHVudGlsIHRoZSA2MHRoIGRheSBhZnRlciBjZXNzYXRpb24gb2YgYnJlYWNoO1xuXG4gICAgICBiLiBQZXJtYW5lbnRseSBvbiB0aGUgNjB0aCBkYXkgYWZ0ZXIgY2Vzc2F0aW9uIG9mIGJyZWFjaCB1bmxlc3Mgb3RoZXJ3aXNlIHJlYXNvbmFibHkgbm90aWZpZWQgYnkgdGhlIExpY2Vuc29yOyBvclxuXG4gICAgICBjLiBQZXJtYW5lbnRseSBpZiByZWFzb25hYmx5IG5vdGlmaWVkIGJ5IHRoZSBMaWNlbnNvciBvZiB0aGUgdmlvbGF0aW9uLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIFlvdSBoYXZlIHJlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIGZyb20gdGhlIExpY2Vuc29yLCBhbmQgWW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyIHlvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLlxuXG4gICAgICBQZXJzb25zIHN1YmplY3QgdG8gcGVybWFuZW50IHRlcm1pbmF0aW9uIG9mIHJpZ2h0cyBhcmUgbm90IGVsaWdpYmxlIHRvIGJlIGEgcmVjaXBpZW50IGFuZCByZWNlaXZlIGEgbGljZW5zZSB1bmRlciBTZWN0aW9uIDQuOC5cblxuICAgOS41IE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBEYXRhYmFzZSB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyBvciBtYWtpbmcgYXZhaWxhYmxlIHRoZSBEYXRhYmFzZS4gUmVsZWFzaW5nIHRoZSBEYXRhYmFzZSB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciBzdG9wcGluZyB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBEYXRhYmFzZSB3aWxsIG5vdCB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS5cblxuICAgMTAuMCBHZW5lcmFsXG5cbiAgIDEwLjEgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUsIHRoYXQgbXVzdCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgYW5kIGVhY2ggcmVtYWluaW5nIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgdmFsaWQgYW5kIGVuZm9yY2VkIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuXG4gICAxMC4yIFRoaXMgTGljZW5zZSBpcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZSBvdmVyIHRoZSBEYXRhYmFzZS4gSXQgcmVwbGFjZXMgYW55IGVhcmxpZXIgdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgRGF0YWJhc2UuXG5cbiAgIDEwLjMgSWYgWW91IGFyZSBpbiBicmVhY2ggb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgWW91IHdpbGwgbm90IGJlIGVudGl0bGVkIHRvIHJlbHkgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0byBjb21wbGFpbiBvZiBhbnkgYnJlYWNoIGJ5IHRoZSBMaWNlbnNvci5cblxuICAgMTAuNCBDaG9pY2Ugb2YgbGF3LiBUaGlzIExpY2Vuc2UgdGFrZXMgZWZmZWN0IGluIGFuZCB3aWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZC4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBhbmQgRGF0YWJhc2UgUmlnaHRzIGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCB0aGVzZSBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZ3JhbnRlZCBpbiB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gbWVldCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiJdLCJsaWNlbnNlSWRzIjpbIk9EYkwtMS4wIl0sImtleXdvcmRzIjpbIm9kYyBvcGVuIGRhdGFiYXNlIiwibGljZW5zZSBvZGJsIHByZWFtYmxlIiwib2RibCBwcmVhbWJsZSB0aGUiLCJsaWNlbnNlIG9kYmwgaXMiLCJvZGJsIGlzIGEiLCJ0aGlzIGRhdGFiYXNlIHdoaWxlIiwiZGF0YWJhc2Ugd2hpbGUgbWFpbnRhaW5pbmciLCJ3aGlsZSBtYWludGFpbmluZyB0aGlzIiwibWFpbnRhaW5pbmcgdGhpcyBzYW1lIiwidGhpcyBzYW1lIGZyZWVkb20iLCJzYW1lIGZyZWVkb20gZm9yIiwiZnJlZWRvbSBmb3Igb3RoZXJzIiwiZm9yIG90aGVycyBtYW55Iiwib3RoZXJzIG1hbnkgZGF0YWJhc2VzIiwiY29weXJpZ2h0IGFuZCB0aGVyZWZvcmUiLCJhbmQgdGhlcmVmb3JlIHRoaXMiLCJ0aGVyZWZvcmUgdGhpcyBkb2N1bWVudCIsInRoaXMgZG9jdW1lbnQgbGljZW5zZXMiLCJkb2N1bWVudCBsaWNlbnNlcyB0aGVzZSIsImxpY2Vuc2VzIHRoZXNlIHJpZ2h0cyIsInRoZXNlIHJpZ2h0cyBzb21lIiwicmlnaHRzIHNvbWUganVyaXNkaWN0aW9ucyIsIm1haW5seSBpbiB0aGUiLCJpbiB0aGUgZXVyb3BlYW4iLCJldXJvcGVhbiB1bmlvbiBoYXZlIiwidW5pb24gaGF2ZSBzcGVjaWZpYyIsImhhdmUgc3BlY2lmaWMgcmlnaHRzIiwic3BlY2lmaWMgcmlnaHRzIHRoYXQiLCJjb3ZlciBkYXRhYmFzZXMgYW5kIiwiZGF0YWJhc2VzIGFuZCBzbyIsInRoZSBvZGJsIGFkZHJlc3NlcyIsIm9kYmwgYWRkcmVzc2VzIHRoZXNlIiwiYWRkcmVzc2VzIHRoZXNlIHJpZ2h0cyIsInRoZXNlIHJpZ2h0cyB0b28iLCJyaWdodHMgdG9vIGZpbmFsbHkiLCJ0b28gZmluYWxseSB0aGUiLCJmaW5hbGx5IHRoZSBvZGJsIiwidGhlIG9kYmwgaXMiLCJvZGJsIGlzIGFsc28iLCJpcyBhbHNvIGFuIiwiYWxzbyBhbiBhZ3JlZW1lbnQiLCJpbiBjb250cmFjdCBmb3IiLCJjb250cmFjdCBmb3IgdXNlcnMiLCJmb3IgdXNlcnMgb2YiLCJ0aGlzIGRhdGFiYXNlIHRvIiwiZGF0YWJhc2UgdG8gYWN0IiwiYWN0IGluIGNlcnRhaW4iLCJpbiBjZXJ0YWluIHdheXMiLCJjZXJ0YWluIHdheXMgaW4iLCJ3YXlzIGluIHJldHVybiIsInJldHVybiBmb3IgYWNjZXNzaW5nIiwiZm9yIGFjY2Vzc2luZyB0aGlzIiwiYWNjZXNzaW5nIHRoaXMgZGF0YWJhc2UiLCJ0aGlzIGRhdGFiYXNlIGRhdGFiYXNlcyIsImRhdGFiYXNlIGRhdGFiYXNlcyBjYW4iLCJ0aGUgb2RibCBvbmx5Iiwib2RibCBvbmx5IGdvdmVybnMiLCJpbmRpdmlkdWFsbHkgbGljZW5zb3JzIHNob3VsZCIsImxpY2Vuc29ycyBzaG91bGQgdXNlIiwidXNlIHRoZSBvZGJsIiwidGhlIG9kYmwgdG9nZXRoZXIiLCJvZGJsIHRvZ2V0aGVyIHdpdGgiLCJjb250ZW50cyBoYXZlIGEiLCJoYXZlIGEgc2luZ2xlIiwiYSBzaW5nbGUgc2V0Iiwic2luZ2xlIHNldCBvZiIsInNldCBvZiByaWdodHMiLCJyaWdodHMgdGhhdCB1bmlmb3JtbHkiLCJ0aGF0IHVuaWZvcm1seSBjb3ZlcnMiLCJ1bmlmb3JtbHkgY292ZXJzIGFsbCIsImNvdmVycyBhbGwgb2YiLCJjb250ZW50cyBoYXZlIG11bHRpcGxlIiwiaGF2ZSBtdWx0aXBsZSBzZXRzIiwibXVsdGlwbGUgc2V0cyBvZiIsInNldHMgb2YgZGlmZmVyZW50Iiwib2YgZGlmZmVyZW50IHJpZ2h0cyIsImRpZmZlcmVudCByaWdodHMgbGljZW5zb3JzIiwicmlnaHRzIGxpY2Vuc29ycyBzaG91bGQiLCJsaWNlbnNvcnMgc2hvdWxkIGRlc2NyaWJlIiwic2hvdWxkIGRlc2NyaWJlIHdoYXQiLCJkZXNjcmliZSB3aGF0IHJpZ2h0cyIsIndoYXQgcmlnaHRzIGdvdmVybiIsInJpZ2h0cyBnb3Zlcm4gd2hhdCIsImdvdmVybiB3aGF0IGNvbnRlbnRzIiwid2hhdCBjb250ZW50cyB0b2dldGhlciIsImNvbnRlbnRzIHRvZ2V0aGVyIGluIiwidG9nZXRoZXIgaW4gdGhlIiwidGhlIGluZGl2aWR1YWwgcmVjb3JkIiwiaW5kaXZpZHVhbCByZWNvcmQgb3IiLCJyZWNvcmQgb3IgaW4iLCJzb21lIG90aGVyIHdheSIsIm90aGVyIHdheSB0aGF0Iiwid2F5IHRoYXQgY2xhcmlmaWVzIiwidGhhdCBjbGFyaWZpZXMgd2hhdCIsImNsYXJpZmllcyB3aGF0IHJpZ2h0cyIsIndoYXQgcmlnaHRzIGFwcGx5IiwicmlnaHRzIGFwcGx5IHNvbWV0aW1lcyIsImFwcGx5IHNvbWV0aW1lcyB0aGUiLCJwcml2YXRlIGNvbnRyYWN0cyB0cmFkZSIsImNvbnRyYWN0cyB0cmFkZSBtYXJrIiwidHJhZGUgbWFyayBvdmVyIiwibWFyayBvdmVyIHRoZSIsImFub3RoZXIgbGljZW5zZSBwZXJtaXR0ZWQiLCI0IDQgYiIsIjQgYiBpbmNsdWRlIiwib3IgYXMgYXBwbGljYWJsZSIsImFzIGFwcGxpY2FibGUgYSIsImFwcGxpY2FibGUgYSBsaWNlbnNlIiwiYSBsaWNlbnNlIHBlcm1pdHRlZCIsIjQgNCBvciIsIjQgb3IgaXRzIiwicmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBhbmQiLCJhbmQgYyBrZWVwIiwibWFkZSBhdmFpbGFibGUgaGVyZSIsImF2YWlsYWJsZSBoZXJlIHVuZGVyIiwiaGVyZSB1bmRlciB0aGUiLCJsaWNlbnNlIG9kYmwgZGF0YWJhc2UiLCJvZGJsIGRhdGFiYXNlIG5hbWUiLCJ0aGUgZGF0YWJhc2Ugb3BlbiIsImRhdGFiYXNlIG9wZW4gZGF0YWJhc2UiLCJkYXRhYmFzZSBsaWNlbnNlIHNob3VsZCIsIjQgNCBzaGFyZSIsIjQgc2hhcmUgYWxpa2UiLCJzaGFyZSBhbGlrZSBhIiwiYWxpa2UgYSBhbnkiLCJhIGFueSBkZXJpdmF0aXZlIiwiZGVyaXZhdGl2ZSBkYXRhYmFzZSB0aGF0IiwiZGF0YWJhc2UgdGhhdCB5b3UiLCJ0aGF0IHlvdSBwdWJsaWNseSIsInB1YmxpY2x5IHVzZSBtdXN0IiwidXNlIG11c3QgYmUiLCJtdXN0IGJlIG9ubHkiLCJiZSBvbmx5IHVuZGVyIiwidGhpcyBsaWNlbnNlIHNpbWlsYXIiLCJsaWNlbnNlIHNpbWlsYXIgaW4iLCJzcGlyaXQgdG8gdGhpcyIsImxpY2Vuc2Ugb3IgaWlpIiwib3IgaWlpIGEiLCJpaWkgYSBjb21wYXRpYmxlIiwibGljZW5zZSB0aGUgZGVyaXZhdGl2ZSIsImRhdGFiYXNlIHVuZGVyIG9uZSIsIm1lbnRpb25lZCBpbiBpaWkiLCJpbiBpaWkgeW91IiwidGhhdCBsaWNlbnNlIGIiLCJsaWNlbnNlIGIgZm9yIiwib2YgZG91YnQgZXh0cmFjdGlvbiIsImRvdWJ0IGV4dHJhY3Rpb24gb3IiLCJ0aGUgY29udGVudHMgaW50byIsImNvbnRlbnRzIGludG8gYSIsImludG8gYSBuZXciLCJuZXcgZGF0YWJhc2UgaXMiLCJkYXRhYmFzZSBpcyBhIiwiZGF0YWJhc2UgYW5kIG11c3QiLCJhbmQgbXVzdCBjb21wbHkiLCI0IDQgYyIsIjQgYyBkZXJpdmF0aXZlIiwiYyBkZXJpdmF0aXZlIGRhdGFiYXNlcyIsImRlcml2YXRpdmUgZGF0YWJhc2VzIGFuZCIsImRhdGFiYXNlcyBhbmQgcHJvZHVjZWQiLCJhbmQgcHJvZHVjZWQgd29ya3MiLCJwcm9kdWNlZCB3b3JrcyBhIiwid29ya3MgYSBkZXJpdmF0aXZlIiwicHVibGljbHkgdXNlZCBhbmQiLCJ1c2VkIGFuZCBzbyIsImFuZCBzbyBtdXN0Iiwic28gbXVzdCBjb21wbHkiLCI0IDQgaWYiLCI0IGlmIGEiLCJpZiBhIHByb2R1Y2VkIiwicHJvZHVjZWQgd29yayBjcmVhdGVkIiwid29yayBjcmVhdGVkIGZyb20iLCJwdWJsaWNseSB1c2VkIGQiLCJ1c2VkIGQgc2hhcmUiLCJkIHNoYXJlIGFsaWtlIiwic2hhcmUgYWxpa2UgYW5kIiwiYWxpa2UgYW5kIGFkZGl0aW9uYWwiLCJhbmQgYWRkaXRpb25hbCBjb250ZW50cyIsImFkZGl0aW9uYWwgY29udGVudHMgZm9yIiwiY29udGVudHMgZm9yIHRoZSIsImRvdWJ0IHlvdSBtdXN0IiwibXVzdCBub3QgYWRkIiwibm90IGFkZCBjb250ZW50cyIsImFkZCBjb250ZW50cyB0byIsImNvbnRlbnRzIHRvIGRlcml2YXRpdmUiLCJkZXJpdmF0aXZlIGRhdGFiYXNlcyB1bmRlciIsImRhdGFiYXNlcyB1bmRlciBzZWN0aW9uIiwiNCBhIHRoYXQiLCJhIHRoYXQgYXJlIiwidGhhdCBhcmUgaW5jb21wYXRpYmxlIiwibGljZW5zZSBlIGNvbXBhdGlibGUiLCJlIGNvbXBhdGlibGUgbGljZW5zZXMiLCJjb21wYXRpYmxlIGxpY2Vuc2VzIGxpY2Vuc29ycyIsImxpY2Vuc2VzIGxpY2Vuc29ycyBtYXkiLCJsaWNlbnNvcnMgbWF5IGF1dGhvcmlzZSIsIm1heSBhdXRob3Jpc2UgYSIsImF1dGhvcmlzZSBhIHByb3h5IiwiYSBwcm94eSB0byIsInByb3h5IHRvIGRldGVybWluZSIsInRvIGRldGVybWluZSBjb21wYXRpYmxlIiwiZGV0ZXJtaW5lIGNvbXBhdGlibGUgbGljZW5zZXMiXX0seyJsaWNlbnNlVGV4dHMiOlsiU0lMIE9QRU4gRk9OVCBMSUNFTlNFXG5cblZlcnNpb24gMS4wIC0gMjIgTm92ZW1iZXIgMjAwNVxuXG5QUkVBTUJMRVxuXG5UaGUgZ29hbHMgb2YgdGhlIE9wZW4gRm9udCBMaWNlbnNlIChPRkwpIGFyZSB0byBzdGltdWxhdGUgd29ybGR3aWRlIGRldmVsb3BtZW50IG9mIGNvb3BlcmF0aXZlIGZvbnQgcHJvamVjdHMsIHRvIHN1cHBvcnQgdGhlIGZvbnQgY3JlYXRpb24gZWZmb3J0cyBvZiBhY2FkZW1pYyBhbmQgbGluZ3Vpc3RpYyBjb21tdW5pdGllcywgYW5kIHRvIHByb3ZpZGUgYW4gb3BlbiBmcmFtZXdvcmsgaW4gd2hpY2ggZm9udHMgbWF5IGJlIHNoYXJlZCBhbmQgaW1wcm92ZWQgaW4gcGFydG5lcnNoaXAgd2l0aCBvdGhlcnMuXG5cblRoZSBPRkwgYWxsb3dzIHRoZSBsaWNlbnNlZCBmb250cyB0byBiZSB1c2VkLCBzdHVkaWVkLCBtb2RpZmllZCBhbmQgcmVkaXN0cmlidXRlZCBmcmVlbHkgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3Qgc29sZCBieSB0aGVtc2VsdmVzLiBUaGUgZm9udHMsIGluY2x1ZGluZyBhbnkgZGVyaXZhdGl2ZSB3b3JrcywgY2FuIGJlIGJ1bmRsZWQsIGVtYmVkZGVkLCByZWRpc3RyaWJ1dGVkIGFuZCBzb2xkIHdpdGggYW55IHNvZnR3YXJlIHByb3ZpZGVkIHRoYXQgdGhlIGZvbnQgbmFtZXMgb2YgZGVyaXZhdGl2ZSB3b3JrcyBhcmUgY2hhbmdlZC4gVGhlIGZvbnRzIGFuZCBkZXJpdmF0aXZlcywgaG93ZXZlciwgY2Fubm90IGJlIHJlbGVhc2VkIHVuZGVyIGFueSBvdGhlciB0eXBlIG9mIGxpY2Vuc2UuXG5cbkRFRklOSVRJT05TXG5cblwiRm9udCBTb2Z0d2FyZVwiIHJlZmVycyB0byBhbnkgYW5kIGFsbCBvZiB0aGUgZm9sbG93aW5nOlxuXG4gICAtIGZvbnQgZmlsZXNcblxuICAgLSBkYXRhIGZpbGVzXG5cbiAgIC0gc291cmNlIGNvZGVcblxuICAgLSBidWlsZCBzY3JpcHRzXG5cbiAgIC0gZG9jdW1lbnRhdGlvblxuXG5cIlJlc2VydmVkIEZvbnQgTmFtZVwiIHJlZmVycyB0byB0aGUgRm9udCBTb2Z0d2FyZSBuYW1lIGFzIHNlZW4gYnkgdXNlcnMgYW5kIGFueSBvdGhlciBuYW1lcyBhcyBzcGVjaWZpZWQgYWZ0ZXIgdGhlIGNvcHlyaWdodCBzdGF0ZW1lbnQuXG5cblwiU3RhbmRhcmQgVmVyc2lvblwiIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBGb250IFNvZnR3YXJlIGNvbXBvbmVudHMgYXMgZGlzdHJpYnV0ZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIuXG5cblwiTW9kaWZpZWQgVmVyc2lvblwiIHJlZmVycyB0byBhbnkgZGVyaXZhdGl2ZSBmb250IHNvZnR3YXJlIG1hZGUgYnkgYWRkaW5nIHRvLCBkZWxldGluZywgb3Igc3Vic3RpdHV0aW5nIOKAlCBpbiBwYXJ0IG9yIGluIHdob2xlIC0tIGFueSBvZiB0aGUgY29tcG9uZW50cyBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiwgYnkgY2hhbmdpbmcgZm9ybWF0cyBvciBieSBwb3J0aW5nIHRoZSBGb250IFNvZnR3YXJlIHRvIGEgbmV3IGVudmlyb25tZW50LlxuXG5cIkF1dGhvclwiIHJlZmVycyB0byBhbnkgZGVzaWduZXIsIGVuZ2luZWVyLCBwcm9ncmFtbWVyLCB0ZWNobmljYWwgd3JpdGVyIG9yIG90aGVyIHBlcnNvbiB3aG8gY29udHJpYnV0ZWQgdG8gdGhlIEZvbnQgU29mdHdhcmUuXG5cblBFUk1JU1NJT04gXHUwMDI2IENPTkRJVElPTlNcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGUgRm9udCBTb2Z0d2FyZSwgdG8gdXNlLCBzdHVkeSwgY29weSwgbWVyZ2UsIGVtYmVkLCBtb2RpZnksIHJlZGlzdHJpYnV0ZSwgYW5kIHNlbGwgbW9kaWZpZWQgYW5kIHVubW9kaWZpZWQgY29waWVzIG9mIHRoZSBGb250IFNvZnR3YXJlLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgMSkgTmVpdGhlciB0aGUgRm9udCBTb2Z0d2FyZSBub3IgYW55IG9mIGl0cyBpbmRpdmlkdWFsIGNvbXBvbmVudHMsIGluIFN0YW5kYXJkIG9yIE1vZGlmaWVkIFZlcnNpb25zLCBtYXkgYmUgc29sZCBieSBpdHNlbGYuXG5cbiAgIDIpIFN0YW5kYXJkIG9yIE1vZGlmaWVkIFZlcnNpb25zIG9mIHRoZSBGb250IFNvZnR3YXJlIG1heSBiZSBidW5kbGVkLCByZWRpc3RyaWJ1dGVkIGFuZCBzb2xkIHdpdGggYW55IHNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IGVhY2ggY29weSBjb250YWlucyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBsaWNlbnNlLiBUaGVzZSBjYW4gYmUgaW5jbHVkZWQgZWl0aGVyIGFzIHN0YW5kLWFsb25lIHRleHQgZmlsZXMsIGh1bWFuLXJlYWRhYmxlIGhlYWRlcnMgb3IgaW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUtcmVhZGFibGUgbWV0YWRhdGEgZmllbGRzIHdpdGhpbiB0ZXh0IG9yIGJpbmFyeSBmaWxlcyBhcyBsb25nIGFzIHRob3NlIGZpZWxkcyBjYW4gYmUgZWFzaWx5IHZpZXdlZCBieSB0aGUgdXNlci5cblxuICAgMykgTm8gTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgdXNlIHRoZSBSZXNlcnZlZCBGb250IE5hbWUocyksIGluIHBhcnQgb3IgaW4gd2hvbGUsIHVubGVzcyBleHBsaWNpdCB3cml0dGVuIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlci4gVGhpcyByZXN0cmljdGlvbiBhcHBsaWVzIHRvIGFsbCByZWZlcmVuY2VzIHN0b3JlZCBpbiB0aGUgRm9udCBTb2Z0d2FyZSwgc3VjaCBhcyB0aGUgZm9udCBtZW51IG5hbWUgYW5kIG90aGVyIGZvbnQgZGVzY3JpcHRpb24gZmllbGRzLCB3aGljaCBhcmUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIHRoZSBmb250IGZyb20gb3RoZXJzLlxuXG4gICA0KSBUaGUgbmFtZShzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBvciB0aGUgQXV0aG9yKHMpIG9mIHRoZSBGb250IFNvZnR3YXJlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIHByb21vdGUsIGVuZG9yc2Ugb3IgYWR2ZXJ0aXNlIGFueSBNb2RpZmllZCBWZXJzaW9uLCBleGNlcHQgdG8gYWNrbm93bGVkZ2UgdGhlIGNvbnRyaWJ1dGlvbihzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBhbmQgdGhlIEF1dGhvcihzKSBvciB3aXRoIHRoZWlyIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuICAgNSkgVGhlIEZvbnQgU29mdHdhcmUsIG1vZGlmaWVkIG9yIHVubW9kaWZpZWQsIGluIHBhcnQgb3IgaW4gd2hvbGUsIG11c3QgYmUgZGlzdHJpYnV0ZWQgdXNpbmcgdGhpcyBsaWNlbnNlLCBhbmQgbWF5IG5vdCBiZSBkaXN0cmlidXRlZCB1bmRlciBhbnkgb3RoZXIgbGljZW5zZS5cblxuVEVSTUlOQVRJT05cblxuVGhpcyBsaWNlbnNlIGJlY29tZXMgbnVsbCBhbmQgdm9pZCBpZiBhbnkgb2YgdGhlIGFib3ZlIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQuXG5cbkRJU0NMQUlNRVJcblxuVEhFIEZPTlQgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVCwgUEFURU5ULCBUUkFERU1BUkssIE9SIE9USEVSIFJJR0hULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIEZPTlQgU09GVFdBUkUgT1IgRlJPTSBPVEhFUiBERUFMSU5HUyBJTiBUSEUgRk9OVCBTT0ZUV0FSRS4iXSwibGljZW5zZUlkcyI6WyJPRkwtMS4wLW5vLVJGTiIsIk9GTC0xLjAtUkZOIiwiT0ZMLTEuMCJdLCJrZXl3b3JkcyI6WyIxIDAgMjIiLCIwIDIyIG5vdmVtYmVyIiwiMjIgbm92ZW1iZXIgMjAwNSIsIm5vdmVtYmVyIDIwMDUgcHJlYW1ibGUiLCIyMDA1IHByZWFtYmxlIHRoZSIsImRldmVsb3BtZW50IG9mIGNvb3BlcmF0aXZlIiwib2YgY29vcGVyYXRpdmUgZm9udCIsImNvb3BlcmF0aXZlIGZvbnQgcHJvamVjdHMiLCJ0byBwcm92aWRlIGFuIiwicHJvdmlkZSBhbiBvcGVuIiwiYW4gb3BlbiBmcmFtZXdvcmsiLCJ0aGF0IHRoZSBmb250IiwidGhlIGZvbnQgbmFtZXMiLCJmb250IG5hbWVzIG9mIiwibmFtZXMgb2YgZGVyaXZhdGl2ZSIsIndvcmtzIGFyZSBjaGFuZ2VkIiwiYXJlIGNoYW5nZWQgdGhlIiwiY2hhbmdlZCB0aGUgZm9udHMiLCJvZiBsaWNlbnNlIGRlZmluaXRpb25zIiwibGljZW5zZSBkZWZpbml0aW9ucyBmb250IiwidG8gYW55IGFuZCIsInRoZSBmb2xsb3dpbmcgZm9udCIsImZvbGxvd2luZyBmb250IGZpbGVzIiwiZm9udCBmaWxlcyBkYXRhIiwiZGF0YSBmaWxlcyBzb3VyY2UiLCJmaWxlcyBzb3VyY2UgY29kZSIsImJ1aWxkIHNjcmlwdHMgZG9jdW1lbnRhdGlvbiIsInNjcmlwdHMgZG9jdW1lbnRhdGlvbiByZXNlcnZlZCIsImZvbnQgc29mdHdhcmUgbmFtZSIsInNvZnR3YXJlIG5hbWUgYXMiLCJuYW1lIGFzIHNlZW4iLCJhcyBzZWVuIGJ5Iiwic2VlbiBieSB1c2VycyIsImJ5IHVzZXJzIGFuZCIsInVzZXJzIGFuZCBhbnkiLCJhbnkgb3RoZXIgbmFtZXMiLCJvdGhlciBuYW1lcyBhcyIsIm5hbWVzIGFzIHNwZWNpZmllZCIsImFzIHNwZWNpZmllZCBhZnRlciIsInNwZWNpZmllZCBhZnRlciB0aGUiLCJjb3B5cmlnaHQgc3RhdGVtZW50IHN0YW5kYXJkIiwic3RhdGVtZW50IHN0YW5kYXJkIHZlcnNpb24iLCJhbnkgZGVyaXZhdGl2ZSBmb250IiwiZGVyaXZhdGl2ZSBmb250IHNvZnR3YXJlIiwiZm9udCBzb2Z0d2FyZSBtYWRlIiwic3RhbmRhcmQgdmVyc2lvbiBieSIsImNvbXBvbmVudHMgaW4gc3RhbmRhcmQiLCJpbiBzdGFuZGFyZCBvciIsIml0c2VsZiAyIHN0YW5kYXJkIiwiMiBzdGFuZGFyZCBvciIsIm5hbWUgcyBpbiIsInMgaW4gcGFydCIsImluIHdob2xlIHVubGVzcyIsIndob2xlIHVubGVzcyBleHBsaWNpdCIsInRoaXMgcmVzdHJpY3Rpb24gYXBwbGllcyIsInJlc3RyaWN0aW9uIGFwcGxpZXMgdG8iLCJ0byBhbGwgcmVmZXJlbmNlcyIsImFsbCByZWZlcmVuY2VzIHN0b3JlZCIsInJlZmVyZW5jZXMgc3RvcmVkIGluIiwiZm9udCBzb2Z0d2FyZSBzdWNoIiwiYXMgdGhlIGZvbnQiLCJ0aGUgZm9udCBtZW51IiwiZm9udCBtZW51IG5hbWUiLCJtZW51IG5hbWUgYW5kIiwibmFtZSBhbmQgb3RoZXIiLCJhbmQgb3RoZXIgZm9udCIsIm90aGVyIGZvbnQgZGVzY3JpcHRpb24iLCJmb250IGRlc2NyaXB0aW9uIGZpZWxkcyIsImRlc2NyaXB0aW9uIGZpZWxkcyB3aGljaCIsImZpZWxkcyB3aGljaCBhcmUiLCJhcmUgdXNlZCB0byIsInVzZWQgdG8gZGlmZmVyZW50aWF0ZSIsInRvIGRpZmZlcmVudGlhdGUgdGhlIiwiZGlmZmVyZW50aWF0ZSB0aGUgZm9udCIsInRoZSBmb250IGZyb20iLCJmb250IGZyb20gb3RoZXJzIiwiZnJvbSBvdGhlcnMgNCIsIm90aGVycyA0IHRoZSIsImhvbGRlciBvciB0aGUiLCJob2xkZXIgYW5kIHRoZSIsImJlIGRpc3RyaWJ1dGVkIHVzaW5nIiwiZGlzdHJpYnV0ZWQgdXNpbmcgdGhpcyIsIm90aGVyIGxpY2Vuc2UgdGVybWluYXRpb24iLCJsaWNlbnNlIHRlcm1pbmF0aW9uIHRoaXMiLCJ2ZXJzaW9uIDEgMCAyMiIsIjEgMCAyMiBub3ZlbWJlciIsIjAgMjIgbm92ZW1iZXIgMjAwNSIsIjIyIG5vdmVtYmVyIDIwMDUgcHJlYW1ibGUiLCJub3ZlbWJlciAyMDA1IHByZWFtYmxlIHRoZSIsIjIwMDUgcHJlYW1ibGUgdGhlIGdvYWxzIiwid29ybGR3aWRlIGRldmVsb3BtZW50IG9mIGNvb3BlcmF0aXZlIiwiZGV2ZWxvcG1lbnQgb2YgY29vcGVyYXRpdmUgZm9udCIsIm9mIGNvb3BlcmF0aXZlIGZvbnQgcHJvamVjdHMiLCJjb29wZXJhdGl2ZSBmb250IHByb2plY3RzIHRvIiwiYW5kIHRvIHByb3ZpZGUgYW4iLCJ0byBwcm92aWRlIGFuIG9wZW4iLCJwcm92aWRlIGFuIG9wZW4gZnJhbWV3b3JrIiwiYW4gb3BlbiBmcmFtZXdvcmsgaW4iLCJlbWJlZGRlZCByZWRpc3RyaWJ1dGVkIGFuZCBzb2xkIiwic29mdHdhcmUgcHJvdmlkZWQgdGhhdCB0aGUiLCJwcm92aWRlZCB0aGF0IHRoZSBmb250IiwidGhhdCB0aGUgZm9udCBuYW1lcyIsInRoZSBmb250IG5hbWVzIG9mIiwiZm9udCBuYW1lcyBvZiBkZXJpdmF0aXZlIiwibmFtZXMgb2YgZGVyaXZhdGl2ZSB3b3JrcyIsIm9mIGRlcml2YXRpdmUgd29ya3MgYXJlIiwiZGVyaXZhdGl2ZSB3b3JrcyBhcmUgY2hhbmdlZCIsIndvcmtzIGFyZSBjaGFuZ2VkIHRoZSIsImFyZSBjaGFuZ2VkIHRoZSBmb250cyIsImNoYW5nZWQgdGhlIGZvbnRzIGFuZCIsInR5cGUgb2YgbGljZW5zZSBkZWZpbml0aW9ucyIsIm9mIGxpY2Vuc2UgZGVmaW5pdGlvbnMgZm9udCIsImxpY2Vuc2UgZGVmaW5pdGlvbnMgZm9udCBzb2Z0d2FyZSIsInNvZnR3YXJlIHJlZmVycyB0byBhbnkiLCJyZWZlcnMgdG8gYW55IGFuZCIsInRvIGFueSBhbmQgYWxsIiwib2YgdGhlIGZvbGxvd2luZyBmb250IiwidGhlIGZvbGxvd2luZyBmb250IGZpbGVzIiwiZm9sbG93aW5nIGZvbnQgZmlsZXMgZGF0YSIsImZvbnQgZmlsZXMgZGF0YSBmaWxlcyIsImZpbGVzIGRhdGEgZmlsZXMgc291cmNlIiwiZGF0YSBmaWxlcyBzb3VyY2UgY29kZSIsImZpbGVzIHNvdXJjZSBjb2RlIGJ1aWxkIiwiY29kZSBidWlsZCBzY3JpcHRzIGRvY3VtZW50YXRpb24iLCJidWlsZCBzY3JpcHRzIGRvY3VtZW50YXRpb24gcmVzZXJ2ZWQiLCJzY3JpcHRzIGRvY3VtZW50YXRpb24gcmVzZXJ2ZWQgZm9udCIsIm5hbWUgcmVmZXJzIHRvIHRoZSIsInJlZmVycyB0byB0aGUgZm9udCIsInRoZSBmb250IHNvZnR3YXJlIG5hbWUiLCJmb250IHNvZnR3YXJlIG5hbWUgYXMiLCJzb2Z0d2FyZSBuYW1lIGFzIHNlZW4iLCJuYW1lIGFzIHNlZW4gYnkiLCJhcyBzZWVuIGJ5IHVzZXJzIiwic2VlbiBieSB1c2VycyBhbmQiLCJieSB1c2VycyBhbmQgYW55IiwidXNlcnMgYW5kIGFueSBvdGhlciIsImFuZCBhbnkgb3RoZXIgbmFtZXMiLCJhbnkgb3RoZXIgbmFtZXMgYXMiLCJvdGhlciBuYW1lcyBhcyBzcGVjaWZpZWQiLCJuYW1lcyBhcyBzcGVjaWZpZWQgYWZ0ZXIiLCJhcyBzcGVjaWZpZWQgYWZ0ZXIgdGhlIiwic3BlY2lmaWVkIGFmdGVyIHRoZSBjb3B5cmlnaHQiLCJ0aGUgY29weXJpZ2h0IHN0YXRlbWVudCBzdGFuZGFyZCIsImNvcHlyaWdodCBzdGF0ZW1lbnQgc3RhbmRhcmQgdmVyc2lvbiIsInN0YXRlbWVudCBzdGFuZGFyZCB2ZXJzaW9uIHJlZmVycyIsImhvbGRlciBtb2RpZmllZCB2ZXJzaW9uIHJlZmVycyIsInRvIGFueSBkZXJpdmF0aXZlIGZvbnQiLCJhbnkgZGVyaXZhdGl2ZSBmb250IHNvZnR3YXJlIiwiZGVyaXZhdGl2ZSBmb250IHNvZnR3YXJlIG1hZGUiLCJmb250IHNvZnR3YXJlIG1hZGUgYnkiLCJzb2Z0d2FyZSBtYWRlIGJ5IGFkZGluZyIsImNvbXBvbmVudHMgb2YgdGhlIHN0YW5kYXJkIiwidGhlIHN0YW5kYXJkIHZlcnNpb24gYnkiLCJzdGFuZGFyZCB2ZXJzaW9uIGJ5IGNoYW5naW5nIiwiaW5kaXZpZHVhbCBjb21wb25lbnRzIGluIHN0YW5kYXJkIiwiY29tcG9uZW50cyBpbiBzdGFuZGFyZCBvciIsImluIHN0YW5kYXJkIG9yIG1vZGlmaWVkIiwiYnkgaXRzZWxmIDIgc3RhbmRhcmQiLCJpdHNlbGYgMiBzdGFuZGFyZCBvciIsIjIgc3RhbmRhcmQgb3IgbW9kaWZpZWQiLCJidW5kbGVkIHJlZGlzdHJpYnV0ZWQgYW5kIHNvbGQiLCJmb250IG5hbWUgcyBpbiIsIm5hbWUgcyBpbiBwYXJ0IiwicyBpbiBwYXJ0IG9yIiwib3IgaW4gd2hvbGUgdW5sZXNzIiwiaW4gd2hvbGUgdW5sZXNzIGV4cGxpY2l0Iiwid2hvbGUgdW5sZXNzIGV4cGxpY2l0IHdyaXR0ZW4iLCJncmFudGVkIGJ5IHRoZSBjb3B5cmlnaHQiLCJ0aGUgY29weXJpZ2h0IGhvbGRlciB0aGlzIiwiaG9sZGVyIHRoaXMgcmVzdHJpY3Rpb24gYXBwbGllcyIsInRoaXMgcmVzdHJpY3Rpb24gYXBwbGllcyB0byIsInJlc3RyaWN0aW9uIGFwcGxpZXMgdG8gYWxsIiwiYXBwbGllcyB0byBhbGwgcmVmZXJlbmNlcyIsInRvIGFsbCByZWZlcmVuY2VzIHN0b3JlZCIsImFsbCByZWZlcmVuY2VzIHN0b3JlZCBpbiIsInJlZmVyZW5jZXMgc3RvcmVkIGluIHRoZSIsInN0b3JlZCBpbiB0aGUgZm9udCIsInRoZSBmb250IHNvZnR3YXJlIHN1Y2giLCJmb250IHNvZnR3YXJlIHN1Y2ggYXMiLCJzb2Z0d2FyZSBzdWNoIGFzIHRoZSIsInN1Y2ggYXMgdGhlIGZvbnQiLCJhcyB0aGUgZm9udCBtZW51IiwidGhlIGZvbnQgbWVudSBuYW1lIiwiZm9udCBtZW51IG5hbWUgYW5kIiwibWVudSBuYW1lIGFuZCBvdGhlciIsIm5hbWUgYW5kIG90aGVyIGZvbnQiLCJhbmQgb3RoZXIgZm9udCBkZXNjcmlwdGlvbiIsIm90aGVyIGZvbnQgZGVzY3JpcHRpb24gZmllbGRzIiwiZm9udCBkZXNjcmlwdGlvbiBmaWVsZHMgd2hpY2giLCJkZXNjcmlwdGlvbiBmaWVsZHMgd2hpY2ggYXJlIiwiZmllbGRzIHdoaWNoIGFyZSB1c2VkIiwid2hpY2ggYXJlIHVzZWQgdG8iLCJhcmUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIiwidXNlZCB0byBkaWZmZXJlbnRpYXRlIHRoZSIsInRvIGRpZmZlcmVudGlhdGUgdGhlIGZvbnQiLCJkaWZmZXJlbnRpYXRlIHRoZSBmb250IGZyb20iLCJ0aGUgZm9udCBmcm9tIG90aGVycyIsImZvbnQgZnJvbSBvdGhlcnMgNCIsImZyb20gb3RoZXJzIDQgdGhlIiwib3RoZXJzIDQgdGhlIG5hbWUiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChjKSBcdTAwM2NkYXRlc1x1MDAzZSwgXHUwMDNjQ29weXJpZ2h0IEhvbGRlclx1MDAzZSAoXHUwMDNjVVJMfGVtYWlsXHUwMDNlKSxcblxud2l0aCBSZXNlcnZlZCBGb250IE5hbWUgXHUwMDNjUmVzZXJ2ZWQgRm9udCBOYW1lXHUwMDNlLiBUaGlzIEZvbnQgU29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNJTCBPcGVuIEZvbnQgTGljZW5zZSwgVmVyc2lvbiAxLjEuXG5cblRoaXMgbGljZW5zZSBpcyBjb3BpZWQgYmVsb3csIGFuZCBpcyBhbHNvIGF2YWlsYWJsZSB3aXRoIGEgRkFRIGF0OiBodHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTCBTSUwgT1BFTiBGT05UIExJQ0VOU0VcblxuVmVyc2lvbiAxLjEgLSAyNiBGZWJydWFyeSAyMDA3XG5cblBSRUFNQkxFXG5cblRoZSBnb2FscyBvZiB0aGUgT3BlbiBGb250IExpY2Vuc2UgKE9GTCkgYXJlIHRvIHN0aW11bGF0ZSB3b3JsZHdpZGUgZGV2ZWxvcG1lbnQgb2YgY29sbGFib3JhdGl2ZSBmb250IHByb2plY3RzLCB0byBzdXBwb3J0IHRoZSBmb250IGNyZWF0aW9uIGVmZm9ydHMgb2YgYWNhZGVtaWMgYW5kIGxpbmd1aXN0aWMgY29tbXVuaXRpZXMsIGFuZCB0byBwcm92aWRlIGEgZnJlZSBhbmQgb3BlbiBmcmFtZXdvcmsgaW4gd2hpY2ggZm9udHMgbWF5IGJlIHNoYXJlZCBhbmQgaW1wcm92ZWQgaW4gcGFydG5lcnNoaXAgd2l0aCBvdGhlcnMuXG5cblRoZSBPRkwgYWxsb3dzIHRoZSBsaWNlbnNlZCBmb250cyB0byBiZSB1c2VkLCBzdHVkaWVkLCBtb2RpZmllZCBhbmQgcmVkaXN0cmlidXRlZCBmcmVlbHkgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3Qgc29sZCBieSB0aGVtc2VsdmVzLiBUaGUgZm9udHMsIGluY2x1ZGluZyBhbnkgZGVyaXZhdGl2ZSB3b3JrcywgY2FuIGJlIGJ1bmRsZWQsIGVtYmVkZGVkLCByZWRpc3RyaWJ1dGVkIGFuZC9vciBzb2xkIHdpdGggYW55IHNvZnR3YXJlIHByb3ZpZGVkIHRoYXQgYW55IHJlc2VydmVkIG5hbWVzIGFyZSBub3QgdXNlZCBieSBkZXJpdmF0aXZlIHdvcmtzLiBUaGUgZm9udHMgYW5kIGRlcml2YXRpdmVzLCBob3dldmVyLCBjYW5ub3QgYmUgcmVsZWFzZWQgdW5kZXIgYW55IG90aGVyIHR5cGUgb2YgbGljZW5zZS4gVGhlIHJlcXVpcmVtZW50IGZvciBmb250cyB0byByZW1haW4gdW5kZXIgdGhpcyBsaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIGFueSBkb2N1bWVudCBjcmVhdGVkIHVzaW5nIHRoZSBmb250cyBvciB0aGVpciBkZXJpdmF0aXZlcy5cblxuREVGSU5JVElPTlNcblxuXCJGb250IFNvZnR3YXJlXCIgcmVmZXJzIHRvIHRoZSBzZXQgb2YgZmlsZXMgcmVsZWFzZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIocykgdW5kZXIgdGhpcyBsaWNlbnNlIGFuZCBjbGVhcmx5IG1hcmtlZCBhcyBzdWNoLiBUaGlzIG1heSBpbmNsdWRlIHNvdXJjZSBmaWxlcywgYnVpbGQgc2NyaXB0cyBhbmQgZG9jdW1lbnRhdGlvbi5cblxuXCJSZXNlcnZlZCBGb250IE5hbWVcIiByZWZlcnMgdG8gYW55IG5hbWVzIHNwZWNpZmllZCBhcyBzdWNoIGFmdGVyIHRoZSBjb3B5cmlnaHQgc3RhdGVtZW50KHMpLlxuXG5cIk9yaWdpbmFsIFZlcnNpb25cIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgRm9udCBTb2Z0d2FyZSBjb21wb25lbnRzIGFzIGRpc3RyaWJ1dGVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyKHMpLlxuXG5cIk1vZGlmaWVkIFZlcnNpb25cIiByZWZlcnMgdG8gYW55IGRlcml2YXRpdmUgbWFkZSBieSBhZGRpbmcgdG8sIGRlbGV0aW5nLCBvciBzdWJzdGl0dXRpbmcg4oCUIGluIHBhcnQgb3IgaW4gd2hvbGUg4oCUIGFueSBvZiB0aGUgY29tcG9uZW50cyBvZiB0aGUgT3JpZ2luYWwgVmVyc2lvbiwgYnkgY2hhbmdpbmcgZm9ybWF0cyBvciBieSBwb3J0aW5nIHRoZSBGb250IFNvZnR3YXJlIHRvIGEgbmV3IGVudmlyb25tZW50LlxuXG5cIkF1dGhvclwiIHJlZmVycyB0byBhbnkgZGVzaWduZXIsIGVuZ2luZWVyLCBwcm9ncmFtbWVyLCB0ZWNobmljYWwgd3JpdGVyIG9yIG90aGVyIHBlcnNvbiB3aG8gY29udHJpYnV0ZWQgdG8gdGhlIEZvbnQgU29mdHdhcmUuXG5cblBFUk1JU1NJT04gXHUwMDI2IENPTkRJVElPTlNcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGUgRm9udCBTb2Z0d2FyZSwgdG8gdXNlLCBzdHVkeSwgY29weSwgbWVyZ2UsIGVtYmVkLCBtb2RpZnksIHJlZGlzdHJpYnV0ZSwgYW5kIHNlbGwgbW9kaWZpZWQgYW5kIHVubW9kaWZpZWQgY29waWVzIG9mIHRoZSBGb250IFNvZnR3YXJlLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgMSkgTmVpdGhlciB0aGUgRm9udCBTb2Z0d2FyZSBub3IgYW55IG9mIGl0cyBpbmRpdmlkdWFsIGNvbXBvbmVudHMsIGluIE9yaWdpbmFsIG9yIE1vZGlmaWVkIFZlcnNpb25zLCBtYXkgYmUgc29sZCBieSBpdHNlbGYuXG5cbiAgIDIpIE9yaWdpbmFsIG9yIE1vZGlmaWVkIFZlcnNpb25zIG9mIHRoZSBGb250IFNvZnR3YXJlIG1heSBiZSBidW5kbGVkLCByZWRpc3RyaWJ1dGVkIGFuZC9vciBzb2xkIHdpdGggYW55IHNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IGVhY2ggY29weSBjb250YWlucyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBsaWNlbnNlLiBUaGVzZSBjYW4gYmUgaW5jbHVkZWQgZWl0aGVyIGFzIHN0YW5kLWFsb25lIHRleHQgZmlsZXMsIGh1bWFuLXJlYWRhYmxlIGhlYWRlcnMgb3IgaW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUtcmVhZGFibGUgbWV0YWRhdGEgZmllbGRzIHdpdGhpbiB0ZXh0IG9yIGJpbmFyeSBmaWxlcyBhcyBsb25nIGFzIHRob3NlIGZpZWxkcyBjYW4gYmUgZWFzaWx5IHZpZXdlZCBieSB0aGUgdXNlci5cblxuICAgMykgTm8gTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgdXNlIHRoZSBSZXNlcnZlZCBGb250IE5hbWUocykgdW5sZXNzIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBncmFudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIENvcHlyaWdodCBIb2xkZXIuIFRoaXMgcmVzdHJpY3Rpb24gb25seSBhcHBsaWVzIHRvIHRoZSBwcmltYXJ5IGZvbnQgbmFtZSBhcyBwcmVzZW50ZWQgdG8gdGhlIHVzZXJzLlxuXG4gICA0KSBUaGUgbmFtZShzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBvciB0aGUgQXV0aG9yKHMpIG9mIHRoZSBGb250IFNvZnR3YXJlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIHByb21vdGUsIGVuZG9yc2Ugb3IgYWR2ZXJ0aXNlIGFueSBNb2RpZmllZCBWZXJzaW9uLCBleGNlcHQgdG8gYWNrbm93bGVkZ2UgdGhlIGNvbnRyaWJ1dGlvbihzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBhbmQgdGhlIEF1dGhvcihzKSBvciB3aXRoIHRoZWlyIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuICAgNSkgVGhlIEZvbnQgU29mdHdhcmUsIG1vZGlmaWVkIG9yIHVubW9kaWZpZWQsIGluIHBhcnQgb3IgaW4gd2hvbGUsIG11c3QgYmUgZGlzdHJpYnV0ZWQgZW50aXJlbHkgdW5kZXIgdGhpcyBsaWNlbnNlLCBhbmQgbXVzdCBub3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgYW55IG90aGVyIGxpY2Vuc2UuIFRoZSByZXF1aXJlbWVudCBmb3IgZm9udHMgdG8gcmVtYWluIHVuZGVyIHRoaXMgbGljZW5zZSBkb2VzIG5vdCBhcHBseSB0byBhbnkgZG9jdW1lbnQgY3JlYXRlZCB1c2luZyB0aGUgRm9udCBTb2Z0d2FyZS5cblxuVEVSTUlOQVRJT05cblxuVGhpcyBsaWNlbnNlIGJlY29tZXMgbnVsbCBhbmQgdm9pZCBpZiBhbnkgb2YgdGhlIGFib3ZlIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQuXG5cbkRJU0NMQUlNRVJcblxuVEhFIEZPTlQgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVCwgUEFURU5ULCBUUkFERU1BUkssIE9SIE9USEVSIFJJR0hULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIEZPTlQgU09GVFdBUkUgT1IgRlJPTSBPVEhFUiBERUFMSU5HUyBJTiBUSEUgRk9OVCBTT0ZUV0FSRS4iXSwibGljZW5zZUlkcyI6WyJPRkwtMS4xLVJGTiIsIk9GTC0xLjEiXSwia2V5d29yZHMiOlsidXJsIGVtYWlsIHdpdGgiLCJlbWFpbCB3aXRoIHJlc2VydmVkIiwid2l0aCByZXNlcnZlZCBmb250IiwiZm9udCBuYW1lIHJlc2VydmVkIiwibmFtZSByZXNlcnZlZCBmb250IiwiZm9udCBuYW1lIHRoaXMiLCJuYW1lIHRoaXMgZm9udCIsImhvbGRlciB1cmwgZW1haWwgd2l0aCIsInVybCBlbWFpbCB3aXRoIHJlc2VydmVkIiwiZW1haWwgd2l0aCByZXNlcnZlZCBmb250Iiwid2l0aCByZXNlcnZlZCBmb250IG5hbWUiLCJyZXNlcnZlZCBmb250IG5hbWUgcmVzZXJ2ZWQiLCJmb250IG5hbWUgcmVzZXJ2ZWQgZm9udCIsIm5hbWUgcmVzZXJ2ZWQgZm9udCBuYW1lIiwicmVzZXJ2ZWQgZm9udCBuYW1lIHRoaXMiLCJmb250IG5hbWUgdGhpcyBmb250IiwibmFtZSB0aGlzIGZvbnQgc29mdHdhcmUiLCJjb3B5cmlnaHQgaG9sZGVyIHVybCBlbWFpbCB3aXRoIiwiaG9sZGVyIHVybCBlbWFpbCB3aXRoIHJlc2VydmVkIiwidXJsIGVtYWlsIHdpdGggcmVzZXJ2ZWQgZm9udCIsImVtYWlsIHdpdGggcmVzZXJ2ZWQgZm9udCBuYW1lIiwid2l0aCByZXNlcnZlZCBmb250IG5hbWUgcmVzZXJ2ZWQiLCJyZXNlcnZlZCBmb250IG5hbWUgcmVzZXJ2ZWQgZm9udCIsImZvbnQgbmFtZSByZXNlcnZlZCBmb250IG5hbWUiLCJuYW1lIHJlc2VydmVkIGZvbnQgbmFtZSB0aGlzIiwicmVzZXJ2ZWQgZm9udCBuYW1lIHRoaXMgZm9udCIsImZvbnQgbmFtZSB0aGlzIGZvbnQgc29mdHdhcmUiLCJuYW1lIHRoaXMgZm9udCBzb2Z0d2FyZSBpcyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgKGMpIFx1MDAzY2RhdGVzXHUwMDNlLCBcdTAwM2NDb3B5cmlnaHQgSG9sZGVyXHUwMDNlIChcdTAwM2NVUkx8ZW1haWxcdTAwM2UpLiBUaGlzIEZvbnQgU29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNJTCBPcGVuIEZvbnQgTGljZW5zZSwgVmVyc2lvbiAxLjEuXG5cblRoaXMgbGljZW5zZSBpcyBjb3BpZWQgYmVsb3csIGFuZCBpcyBhbHNvIGF2YWlsYWJsZSB3aXRoIGEgRkFRIGF0OiBodHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTCBTSUwgT1BFTiBGT05UIExJQ0VOU0VcblxuVmVyc2lvbiAxLjEgLSAyNiBGZWJydWFyeSAyMDA3XG5cblBSRUFNQkxFXG5cblRoZSBnb2FscyBvZiB0aGUgT3BlbiBGb250IExpY2Vuc2UgKE9GTCkgYXJlIHRvIHN0aW11bGF0ZSB3b3JsZHdpZGUgZGV2ZWxvcG1lbnQgb2YgY29sbGFib3JhdGl2ZSBmb250IHByb2plY3RzLCB0byBzdXBwb3J0IHRoZSBmb250IGNyZWF0aW9uIGVmZm9ydHMgb2YgYWNhZGVtaWMgYW5kIGxpbmd1aXN0aWMgY29tbXVuaXRpZXMsIGFuZCB0byBwcm92aWRlIGEgZnJlZSBhbmQgb3BlbiBmcmFtZXdvcmsgaW4gd2hpY2ggZm9udHMgbWF5IGJlIHNoYXJlZCBhbmQgaW1wcm92ZWQgaW4gcGFydG5lcnNoaXAgd2l0aCBvdGhlcnMuXG5cblRoZSBPRkwgYWxsb3dzIHRoZSBsaWNlbnNlZCBmb250cyB0byBiZSB1c2VkLCBzdHVkaWVkLCBtb2RpZmllZCBhbmQgcmVkaXN0cmlidXRlZCBmcmVlbHkgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3Qgc29sZCBieSB0aGVtc2VsdmVzLiBUaGUgZm9udHMsIGluY2x1ZGluZyBhbnkgZGVyaXZhdGl2ZSB3b3JrcywgY2FuIGJlIGJ1bmRsZWQsIGVtYmVkZGVkLCByZWRpc3RyaWJ1dGVkIGFuZC9vciBzb2xkIHdpdGggYW55IHNvZnR3YXJlIHByb3ZpZGVkIHRoYXQgYW55IHJlc2VydmVkIG5hbWVzIGFyZSBub3QgdXNlZCBieSBkZXJpdmF0aXZlIHdvcmtzLiBUaGUgZm9udHMgYW5kIGRlcml2YXRpdmVzLCBob3dldmVyLCBjYW5ub3QgYmUgcmVsZWFzZWQgdW5kZXIgYW55IG90aGVyIHR5cGUgb2YgbGljZW5zZS4gVGhlIHJlcXVpcmVtZW50IGZvciBmb250cyB0byByZW1haW4gdW5kZXIgdGhpcyBsaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIGFueSBkb2N1bWVudCBjcmVhdGVkIHVzaW5nIHRoZSBmb250cyBvciB0aGVpciBkZXJpdmF0aXZlcy5cblxuREVGSU5JVElPTlNcblxuXCJGb250IFNvZnR3YXJlXCIgcmVmZXJzIHRvIHRoZSBzZXQgb2YgZmlsZXMgcmVsZWFzZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIocykgdW5kZXIgdGhpcyBsaWNlbnNlIGFuZCBjbGVhcmx5IG1hcmtlZCBhcyBzdWNoLiBUaGlzIG1heSBpbmNsdWRlIHNvdXJjZSBmaWxlcywgYnVpbGQgc2NyaXB0cyBhbmQgZG9jdW1lbnRhdGlvbi5cblxuXCJSZXNlcnZlZCBGb250IE5hbWVcIiByZWZlcnMgdG8gYW55IG5hbWVzIHNwZWNpZmllZCBhcyBzdWNoIGFmdGVyIHRoZSBjb3B5cmlnaHQgc3RhdGVtZW50KHMpLlxuXG5cIk9yaWdpbmFsIFZlcnNpb25cIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgRm9udCBTb2Z0d2FyZSBjb21wb25lbnRzIGFzIGRpc3RyaWJ1dGVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyKHMpLlxuXG5cIk1vZGlmaWVkIFZlcnNpb25cIiByZWZlcnMgdG8gYW55IGRlcml2YXRpdmUgbWFkZSBieSBhZGRpbmcgdG8sIGRlbGV0aW5nLCBvciBzdWJzdGl0dXRpbmcg4oCUIGluIHBhcnQgb3IgaW4gd2hvbGUg4oCUIGFueSBvZiB0aGUgY29tcG9uZW50cyBvZiB0aGUgT3JpZ2luYWwgVmVyc2lvbiwgYnkgY2hhbmdpbmcgZm9ybWF0cyBvciBieSBwb3J0aW5nIHRoZSBGb250IFNvZnR3YXJlIHRvIGEgbmV3IGVudmlyb25tZW50LlxuXG5cIkF1dGhvclwiIHJlZmVycyB0byBhbnkgZGVzaWduZXIsIGVuZ2luZWVyLCBwcm9ncmFtbWVyLCB0ZWNobmljYWwgd3JpdGVyIG9yIG90aGVyIHBlcnNvbiB3aG8gY29udHJpYnV0ZWQgdG8gdGhlIEZvbnQgU29mdHdhcmUuXG5cblBFUk1JU1NJT04gXHUwMDI2IENPTkRJVElPTlNcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGUgRm9udCBTb2Z0d2FyZSwgdG8gdXNlLCBzdHVkeSwgY29weSwgbWVyZ2UsIGVtYmVkLCBtb2RpZnksIHJlZGlzdHJpYnV0ZSwgYW5kIHNlbGwgbW9kaWZpZWQgYW5kIHVubW9kaWZpZWQgY29waWVzIG9mIHRoZSBGb250IFNvZnR3YXJlLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgMSkgTmVpdGhlciB0aGUgRm9udCBTb2Z0d2FyZSBub3IgYW55IG9mIGl0cyBpbmRpdmlkdWFsIGNvbXBvbmVudHMsIGluIE9yaWdpbmFsIG9yIE1vZGlmaWVkIFZlcnNpb25zLCBtYXkgYmUgc29sZCBieSBpdHNlbGYuXG5cbiAgIDIpIE9yaWdpbmFsIG9yIE1vZGlmaWVkIFZlcnNpb25zIG9mIHRoZSBGb250IFNvZnR3YXJlIG1heSBiZSBidW5kbGVkLCByZWRpc3RyaWJ1dGVkIGFuZC9vciBzb2xkIHdpdGggYW55IHNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IGVhY2ggY29weSBjb250YWlucyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBsaWNlbnNlLiBUaGVzZSBjYW4gYmUgaW5jbHVkZWQgZWl0aGVyIGFzIHN0YW5kLWFsb25lIHRleHQgZmlsZXMsIGh1bWFuLXJlYWRhYmxlIGhlYWRlcnMgb3IgaW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUtcmVhZGFibGUgbWV0YWRhdGEgZmllbGRzIHdpdGhpbiB0ZXh0IG9yIGJpbmFyeSBmaWxlcyBhcyBsb25nIGFzIHRob3NlIGZpZWxkcyBjYW4gYmUgZWFzaWx5IHZpZXdlZCBieSB0aGUgdXNlci5cblxuICAgMykgTm8gTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgdXNlIHRoZSBSZXNlcnZlZCBGb250IE5hbWUocykgdW5sZXNzIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBncmFudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIENvcHlyaWdodCBIb2xkZXIuIFRoaXMgcmVzdHJpY3Rpb24gb25seSBhcHBsaWVzIHRvIHRoZSBwcmltYXJ5IGZvbnQgbmFtZSBhcyBwcmVzZW50ZWQgdG8gdGhlIHVzZXJzLlxuXG4gICA0KSBUaGUgbmFtZShzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBvciB0aGUgQXV0aG9yKHMpIG9mIHRoZSBGb250IFNvZnR3YXJlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIHByb21vdGUsIGVuZG9yc2Ugb3IgYWR2ZXJ0aXNlIGFueSBNb2RpZmllZCBWZXJzaW9uLCBleGNlcHQgdG8gYWNrbm93bGVkZ2UgdGhlIGNvbnRyaWJ1dGlvbihzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBhbmQgdGhlIEF1dGhvcihzKSBvciB3aXRoIHRoZWlyIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuICAgNSkgVGhlIEZvbnQgU29mdHdhcmUsIG1vZGlmaWVkIG9yIHVubW9kaWZpZWQsIGluIHBhcnQgb3IgaW4gd2hvbGUsIG11c3QgYmUgZGlzdHJpYnV0ZWQgZW50aXJlbHkgdW5kZXIgdGhpcyBsaWNlbnNlLCBhbmQgbXVzdCBub3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgYW55IG90aGVyIGxpY2Vuc2UuIFRoZSByZXF1aXJlbWVudCBmb3IgZm9udHMgdG8gcmVtYWluIHVuZGVyIHRoaXMgbGljZW5zZSBkb2VzIG5vdCBhcHBseSB0byBhbnkgZG9jdW1lbnQgY3JlYXRlZCB1c2luZyB0aGUgRm9udCBTb2Z0d2FyZS5cblxuVEVSTUlOQVRJT05cblxuVGhpcyBsaWNlbnNlIGJlY29tZXMgbnVsbCBhbmQgdm9pZCBpZiBhbnkgb2YgdGhlIGFib3ZlIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQuXG5cbkRJU0NMQUlNRVJcblxuVEhFIEZPTlQgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVCwgUEFURU5ULCBUUkFERU1BUkssIE9SIE9USEVSIFJJR0hULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIEZPTlQgU09GVFdBUkUgT1IgRlJPTSBPVEhFUiBERUFMSU5HUyBJTiBUSEUgRk9OVCBTT0ZUV0FSRS4iXSwibGljZW5zZUlkcyI6WyJPRkwtMS4xLW5vLVJGTiJdLCJrZXl3b3JkcyI6WyJ1cmwgZW1haWwgdGhpcyIsImVtYWlsIHRoaXMgZm9udCIsImhvbGRlciB1cmwgZW1haWwgdGhpcyIsInVybCBlbWFpbCB0aGlzIGZvbnQiLCJlbWFpbCB0aGlzIGZvbnQgc29mdHdhcmUiLCJjb3B5cmlnaHQgaG9sZGVyIHVybCBlbWFpbCB0aGlzIiwiaG9sZGVyIHVybCBlbWFpbCB0aGlzIGZvbnQiLCJ1cmwgZW1haWwgdGhpcyBmb250IHNvZnR3YXJlIiwiZW1haWwgdGhpcyBmb250IHNvZnR3YXJlIGlzIl19LHsibGljZW5zZVRleHRzIjpbIk9HQyBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMFxuXG5UaGlzIE9HQyB3b3JrIChpbmNsdWRpbmcgc29mdHdhcmUsIGRvY3VtZW50cywgb3Igb3RoZXIgcmVsYXRlZCBpdGVtcykgaXMgYmVpbmcgcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZS4gQnkgb2J0YWluaW5nLCB1c2luZyBhbmQvb3IgY29weWluZyB0aGlzIHdvcmssIHlvdSAodGhlIGxpY2Vuc2VlKSBhZ3JlZSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QsIGFuZCB3aWxsIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnM6XG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBhbmQgbW9kaWZ5IHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIG9yIHJveWFsdHkgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBvbiBBTEwgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucywgdGhhdCB5b3UgbWFrZTpcblxuICAgMS4gVGhlIGZ1bGwgdGV4dCBvZiB0aGlzIE5PVElDRSBpbiBhIGxvY2F0aW9uIHZpZXdhYmxlIHRvIHVzZXJzIG9mIHRoZSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgd29yay5cblxuICAgMi4gQW55IHByZS1leGlzdGluZyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgZGlzY2xhaW1lcnMsIG5vdGljZXMsIG9yIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiBub25lIGV4aXN0LCBhIHNob3J0IG5vdGljZSBvZiB0aGUgZm9sbG93aW5nIGZvcm0gKGh5cGVydGV4dCBpcyBwcmVmZXJyZWQsIHRleHQgaXMgcGVybWl0dGVkKSBzaG91bGQgYmUgdXNlZCB3aXRoaW4gdGhlIGJvZHkgb2YgYW55IHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSBjb2RlOiBcIkNvcHlyaWdodCDCqSBbJGRhdGUtb2YtZG9jdW1lbnRdIE9wZW4gR2Vvc3BhdGlhbCBDb25zb3J0aXVtLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIGh0dHA6Ly93d3cuIG9nYyAub3JnL29nYy9sZWdhbCAoSHlwZXJ0ZXh0IGlzIHByZWZlcnJlZCwgYnV0IGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBpcyBwZXJtaXR0ZWQuKVxuXG4gICAzLiBOb3RpY2Ugb2YgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgT0dDIGZpbGVzLCBpbmNsdWRpbmcgdGhlIGRhdGUgY2hhbmdlcyB3ZXJlIG1hZGUuIChXZSByZWNvbW1lbmQgeW91IHByb3ZpZGUgVVJJcyB0byB0aGUgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgY29kZSBpcyBkZXJpdmVkLilcblxuVEhJUyBTT0ZUV0FSRSBBTkQgRE9DVU1FTlRBVElPTiBJUyBQUk9WSURFRCBcIkFTIElTLFwiIEFORCBDT1BZUklHSFQgSE9MREVSUyBNQUtFIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBQQVRFTlRTLCBDT1BZUklHSFRTLCBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUy5cblxuQ09QWVJJR0hUIEhPTERFUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgQU5ZIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTi5cblxuVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcnMgbWF5IE5PVCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIFRpdGxlIHRvIGNvcHlyaWdodCBpbiB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHdpbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIGNvcHlyaWdodCBob2xkZXJzLiJdLCJsaWNlbnNlSWRzIjpbIk9HQy0xLjAiXSwia2V5d29yZHMiOlsib2djIHNvZnR3YXJlIGxpY2Vuc2UiLCIwIHRoaXMgb2djIiwidGhpcyBvZ2Mgd29yayIsIm9nYyB3b3JrIGluY2x1ZGluZyIsImRhdGUgb2YgZG9jdW1lbnQiLCJvZiBkb2N1bWVudCBvcGVuIiwiZG9jdW1lbnQgb3BlbiBnZW9zcGF0aWFsIiwib3BlbiBnZW9zcGF0aWFsIGNvbnNvcnRpdW0iLCJnZW9zcGF0aWFsIGNvbnNvcnRpdW0gaW5jIiwiY29uc29ydGl1bSBpbmMgYWxsIiwiaHR0cCB3d3cgb2djIiwid3d3IG9nYyBvcmciLCJvZ2Mgb3JnIG9nYyIsIm9yZyBvZ2MgbGVnYWwiLCJvZ2MgbGVnYWwgaHlwZXJ0ZXh0IiwibGVnYWwgaHlwZXJ0ZXh0IGlzIiwiaXMgcHJlZmVycmVkIGJ1dCIsInByZWZlcnJlZCBidXQgYSIsImJ1dCBhIHRleHR1YWwiLCJhIHRleHR1YWwgcmVwcmVzZW50YXRpb24iLCJ0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIGlzIiwicmVwcmVzZW50YXRpb24gaXMgcGVybWl0dGVkIiwiaXMgcGVybWl0dGVkIDMiLCJwZXJtaXR0ZWQgMyBub3RpY2UiLCJ0byB0aGUgb2djIiwidGhlIG9nYyBmaWxlcyIsIm9nYyBmaWxlcyBpbmNsdWRpbmciLCJvZ2Mgc29mdHdhcmUgbGljZW5zZSB2ZXJzaW9uIiwiMSAwIHRoaXMgb2djIiwiMCB0aGlzIG9nYyB3b3JrIiwidGhpcyBvZ2Mgd29yayBpbmNsdWRpbmciLCJvZ2Mgd29yayBpbmNsdWRpbmcgc29mdHdhcmUiLCJ1c2UgY29weSBhbmQgbW9kaWZ5IiwiY29weXJpZ2h0IGRhdGUgb2YgZG9jdW1lbnQiLCJkYXRlIG9mIGRvY3VtZW50IG9wZW4iLCJvZiBkb2N1bWVudCBvcGVuIGdlb3NwYXRpYWwiLCJkb2N1bWVudCBvcGVuIGdlb3NwYXRpYWwgY29uc29ydGl1bSIsIm9wZW4gZ2Vvc3BhdGlhbCBjb25zb3J0aXVtIGluYyIsImdlb3NwYXRpYWwgY29uc29ydGl1bSBpbmMgYWxsIiwiY29uc29ydGl1bSBpbmMgYWxsIHJpZ2h0cyIsInJlc2VydmVkIGh0dHAgd3d3IG9nYyIsImh0dHAgd3d3IG9nYyBvcmciLCJ3d3cgb2djIG9yZyBvZ2MiLCJvZ2Mgb3JnIG9nYyBsZWdhbCIsIm9yZyBvZ2MgbGVnYWwgaHlwZXJ0ZXh0Iiwib2djIGxlZ2FsIGh5cGVydGV4dCBpcyIsImxlZ2FsIGh5cGVydGV4dCBpcyBwcmVmZXJyZWQiLCJoeXBlcnRleHQgaXMgcHJlZmVycmVkIGJ1dCIsImlzIHByZWZlcnJlZCBidXQgYSIsInByZWZlcnJlZCBidXQgYSB0ZXh0dWFsIiwiYnV0IGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiIsImEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBpcyIsInRleHR1YWwgcmVwcmVzZW50YXRpb24gaXMgcGVybWl0dGVkIiwicmVwcmVzZW50YXRpb24gaXMgcGVybWl0dGVkIDMiLCJpcyBwZXJtaXR0ZWQgMyBub3RpY2UiLCJwZXJtaXR0ZWQgMyBub3RpY2Ugb2YiLCJtb2RpZmljYXRpb25zIHRvIHRoZSBvZ2MiLCJ0byB0aGUgb2djIGZpbGVzIiwidGhlIG9nYyBmaWxlcyBpbmNsdWRpbmciLCJvZ2MgZmlsZXMgaW5jbHVkaW5nIHRoZSIsIm9nYyBzb2Z0d2FyZSBsaWNlbnNlIHZlcnNpb24gMSIsInZlcnNpb24gMSAwIHRoaXMgb2djIiwiMSAwIHRoaXMgb2djIHdvcmsiLCIwIHRoaXMgb2djIHdvcmsgaW5jbHVkaW5nIiwidGhpcyBvZ2Mgd29yayBpbmNsdWRpbmcgc29mdHdhcmUiLCJvZ2Mgd29yayBpbmNsdWRpbmcgc29mdHdhcmUgZG9jdW1lbnRzIiwidG8gdXNlIGNvcHkgYW5kIG1vZGlmeSIsInVzZSBjb3B5IGFuZCBtb2RpZnkgdGhpcyIsImNvZGUgY29weXJpZ2h0IGRhdGUgb2YgZG9jdW1lbnQiLCJjb3B5cmlnaHQgZGF0ZSBvZiBkb2N1bWVudCBvcGVuIiwiZGF0ZSBvZiBkb2N1bWVudCBvcGVuIGdlb3NwYXRpYWwiLCJvZiBkb2N1bWVudCBvcGVuIGdlb3NwYXRpYWwgY29uc29ydGl1bSIsImRvY3VtZW50IG9wZW4gZ2Vvc3BhdGlhbCBjb25zb3J0aXVtIGluYyIsIm9wZW4gZ2Vvc3BhdGlhbCBjb25zb3J0aXVtIGluYyBhbGwiLCJnZW9zcGF0aWFsIGNvbnNvcnRpdW0gaW5jIGFsbCByaWdodHMiLCJjb25zb3J0aXVtIGluYyBhbGwgcmlnaHRzIHJlc2VydmVkIiwiaW5jIGFsbCByaWdodHMgcmVzZXJ2ZWQgaHR0cCIsInJpZ2h0cyByZXNlcnZlZCBodHRwIHd3dyBvZ2MiLCJyZXNlcnZlZCBodHRwIHd3dyBvZ2Mgb3JnIiwiaHR0cCB3d3cgb2djIG9yZyBvZ2MiLCJ3d3cgb2djIG9yZyBvZ2MgbGVnYWwiLCJvZ2Mgb3JnIG9nYyBsZWdhbCBoeXBlcnRleHQiLCJvcmcgb2djIGxlZ2FsIGh5cGVydGV4dCBpcyIsIm9nYyBsZWdhbCBoeXBlcnRleHQgaXMgcHJlZmVycmVkIiwibGVnYWwgaHlwZXJ0ZXh0IGlzIHByZWZlcnJlZCBidXQiLCJoeXBlcnRleHQgaXMgcHJlZmVycmVkIGJ1dCBhIiwiaXMgcHJlZmVycmVkIGJ1dCBhIHRleHR1YWwiLCJwcmVmZXJyZWQgYnV0IGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiIsImJ1dCBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gaXMiLCJhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gaXMgcGVybWl0dGVkIiwidGV4dHVhbCByZXByZXNlbnRhdGlvbiBpcyBwZXJtaXR0ZWQgMyIsInJlcHJlc2VudGF0aW9uIGlzIHBlcm1pdHRlZCAzIG5vdGljZSIsImlzIHBlcm1pdHRlZCAzIG5vdGljZSBvZiIsInBlcm1pdHRlZCAzIG5vdGljZSBvZiBhbnkiLCJvciBtb2RpZmljYXRpb25zIHRvIHRoZSBvZ2MiLCJtb2RpZmljYXRpb25zIHRvIHRoZSBvZ2MgZmlsZXMiLCJ0byB0aGUgb2djIGZpbGVzIGluY2x1ZGluZyIsInRoZSBvZ2MgZmlsZXMgaW5jbHVkaW5nIHRoZSIsIm9nYyBmaWxlcyBpbmNsdWRpbmcgdGhlIGRhdGUiXX0seyJsaWNlbnNlVGV4dHMiOlsiT3BlbiBHb3Zlcm5tZW50IExpY2VuY2UgLSBDYW5hZGFcblxuWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGUgSW5mb3JtYXRpb24gdGhhdCBpcyBhdmFpbGFibGUgdW5kZXIgdGhpcyBsaWNlbmNlIHdpdGggb25seSBhIGZldyBjb25kaXRpb25zLlxuXG5Vc2luZyBJbmZvcm1hdGlvbiB1bmRlciB0aGlzIGxpY2VuY2VcblxuICAgKiBVc2Ugb2YgYW55IEluZm9ybWF0aW9uIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlIHRlcm1zIGJlbG93LlxuXG4gICAqIFRoZSBJbmZvcm1hdGlvbiBQcm92aWRlciBncmFudHMgeW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCwgbm9uLWV4Y2x1c2l2ZSBsaWNlbmNlIHRvIHVzZSB0aGUgSW5mb3JtYXRpb24sIGluY2x1ZGluZyBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcywgc3ViamVjdCB0byB0aGUgdGVybXMgYmVsb3cuXG5cbllvdSBhcmUgZnJlZSB0bzpcblxuICAgKiBDb3B5LCBtb2RpZnksIHB1Ymxpc2gsIHRyYW5zbGF0ZSwgYWRhcHQsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIHVzZSB0aGUgSW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bSwgbW9kZSBvciBmb3JtYXQgZm9yIGFueSBsYXdmdWwgcHVycG9zZS5cblxuWW91IG11c3QsIHdoZXJlIHlvdSBkbyBhbnkgb2YgdGhlIGFib3ZlOlxuXG4gICAqIEFja25vd2xlZGdlIHRoZSBzb3VyY2Ugb2YgdGhlIEluZm9ybWF0aW9uIGJ5IGluY2x1ZGluZyBhbnkgYXR0cmlidXRpb24gc3RhdGVtZW50IHNwZWNpZmllZCBieSB0aGUgSW5mb3JtYXRpb24gUHJvdmlkZXIocykgYW5kLCB3aGVyZSBwb3NzaWJsZSwgcHJvdmlkZSBhIGxpbmsgdG8gdGhpcyBsaWNlbmNlLlxuXG4gICAqIElmIHRoZSBJbmZvcm1hdGlvbiBQcm92aWRlciBkb2VzIG5vdCBwcm92aWRlIGEgc3BlY2lmaWMgYXR0cmlidXRpb24gc3RhdGVtZW50LCBvciBpZiB5b3UgYXJlIHVzaW5nIEluZm9ybWF0aW9uIGZyb20gc2V2ZXJhbCBpbmZvcm1hdGlvbiBwcm92aWRlcnMgYW5kIG11bHRpcGxlIGF0dHJpYnV0aW9ucyBhcmUgbm90IHByYWN0aWNhbCBmb3IgeW91ciBwcm9kdWN0IG9yIGFwcGxpY2F0aW9uLCB5b3UgbXVzdCB1c2UgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGlvbiBzdGF0ZW1lbnQ6XG5cbiAgIENvbnRhaW5zIGluZm9ybWF0aW9uIGxpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIEdvdmVybm1lbnQgTGljZW5jZSDigJMgQ2FuYWRhLlxuXG5UaGUgdGVybXMgb2YgdGhpcyBsaWNlbmNlIGFyZSBpbXBvcnRhbnQsIGFuZCBpZiB5b3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlbSwgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHlvdSB1bmRlciB0aGlzIGxpY2VuY2UsIG9yIGFueSBzaW1pbGFyIGxpY2VuY2UgZ3JhbnRlZCBieSB0aGUgSW5mb3JtYXRpb24gUHJvdmlkZXIsIHdpbGwgZW5kIGF1dG9tYXRpY2FsbHkuXG5cbkV4ZW1wdGlvbnNcblxuVGhpcyBsaWNlbmNlIGRvZXMgbm90IGdyYW50IHlvdSBhbnkgcmlnaHQgdG8gdXNlOlxuXG4gICAqIFBlcnNvbmFsIEluZm9ybWF0aW9uO1xuXG4gICAqIHRoaXJkIHBhcnR5IHJpZ2h0cyB0aGUgSW5mb3JtYXRpb24gUHJvdmlkZXIgaXMgbm90IGF1dGhvcml6ZWQgdG8gbGljZW5zZTtcblxuICAgKiB0aGUgbmFtZXMsIGNyZXN0cywgbG9nb3MsIG9yIG90aGVyIG9mZmljaWFsIHN5bWJvbHMgb2YgdGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyOyBhbmRcblxuICAgKiBJbmZvcm1hdGlvbiBzdWJqZWN0IHRvIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIGluY2x1ZGluZyBwYXRlbnRzLCB0cmFkZS1tYXJrcyBhbmQgb2ZmaWNpYWwgbWFya3MuXG5cbk5vbi1lbmRvcnNlbWVudFxuXG5UaGlzIGxpY2VuY2UgZG9lcyBub3QgZ3JhbnQgeW91IGFueSByaWdodCB0byB1c2UgdGhlIEluZm9ybWF0aW9uIGluIGEgd2F5IHRoYXQgc3VnZ2VzdHMgYW55IG9mZmljaWFsIHN0YXR1cyBvciB0aGF0IHRoZSBJbmZvcm1hdGlvbiBQcm92aWRlciBlbmRvcnNlcyB5b3Ugb3IgeW91ciB1c2Ugb2YgdGhlIEluZm9ybWF0aW9uLlxuXG5ObyBXYXJyYW50eVxuXG5UaGUgSW5mb3JtYXRpb24gaXMgbGljZW5zZWQgXCJhcyBpc1wiLCBhbmQgdGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyIGV4Y2x1ZGVzIGFsbCByZXByZXNlbnRhdGlvbnMsIHdhcnJhbnRpZXMsIG9ibGlnYXRpb25zLCBhbmQgbGlhYmlsaXRpZXMsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy5cblxuVGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyIGlzIG5vdCBsaWFibGUgZm9yIGFueSBlcnJvcnMgb3Igb21pc3Npb25zIGluIHRoZSBJbmZvcm1hdGlvbiwgYW5kIHdpbGwgbm90IHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzIGJlIGxpYWJsZSBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIGNvbnNlcXVlbnRpYWwsIG9yIG90aGVyIGxvc3MsIGluanVyeSBvciBkYW1hZ2UgY2F1c2VkIGJ5IGl0cyB1c2Ugb3Igb3RoZXJ3aXNlIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgbGljZW5jZSBvciB0aGUgSW5mb3JtYXRpb24sIGV2ZW4gaWYgc3BlY2lmaWNhbGx5IGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggbG9zcywgaW5qdXJ5IG9yIGRhbWFnZS5cblxuR292ZXJuaW5nIExhd1xuXG5UaGlzIGxpY2VuY2UgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIHByb3ZpbmNlIG9mIE9udGFyaW8gYW5kIHRoZSBhcHBsaWNhYmxlIGxhd3Mgb2YgQ2FuYWRhLlxuXG5MZWdhbCBwcm9jZWVkaW5ncyByZWxhdGVkIHRvIHRoaXMgbGljZW5jZSBtYXkgb25seSBiZSBicm91Z2h0IGluIHRoZSBjb3VydHMgb2YgT250YXJpbyBvciB0aGUgRmVkZXJhbCBDb3VydCBvZiBDYW5hZGEuXG5cbkRlZmluaXRpb25zXG5cbkluIHRoaXMgbGljZW5jZSwgdGhlIHRlcm1zIGJlbG93IGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nczpcblxuXCJJbmZvcm1hdGlvblwiXG5cbm1lYW5zIGluZm9ybWF0aW9uIHJlc291cmNlcyBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IG9yIG90aGVyIGluZm9ybWF0aW9uIHRoYXQgaXMgb2ZmZXJlZCBmb3IgdXNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2VuY2UuXG5cblwiSW5mb3JtYXRpb24gUHJvdmlkZXJcIlxuXG5tZWFucyBIZXIgTWFqZXN0eSB0aGUgUXVlZW4gaW4gcmlnaHQgb2YgQ2FuYWRhLlxuXG5cIlBlcnNvbmFsIEluZm9ybWF0aW9uXCJcblxubWVhbnMgXCJwZXJzb25hbCBpbmZvcm1hdGlvblwiIGFzIGRlZmluZWQgaW4gc2VjdGlvbiAzIG9mIHRoZSBQcml2YWN5IEFjdCwgUi5TLkMuIDE5ODUsIGMuIFAtMjEuXG5cblwiWW91XCJcblxubWVhbnMgdGhlIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uLCBvciBib2R5IG9mIHBlcnNvbnMgY29ycG9yYXRlIG9yIGluY29ycG9yYXRlLCBhY3F1aXJpbmcgcmlnaHRzIHVuZGVyIHRoaXMgbGljZW5jZS5cblxuVmVyc2lvbmluZ1xuXG5UaGlzIGlzIHZlcnNpb24gMi4wIG9mIHRoZSBPcGVuIEdvdmVybm1lbnQgTGljZW5jZSDigJMgQ2FuYWRhLiBUaGUgSW5mb3JtYXRpb24gUHJvdmlkZXIgbWF5IG1ha2UgY2hhbmdlcyB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbmNlIGZyb20gdGltZSB0byB0aW1lIGFuZCBpc3N1ZSBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBsaWNlbmNlLiBZb3VyIHVzZSBvZiB0aGUgSW5mb3JtYXRpb24gd2lsbCBiZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhlIGxpY2VuY2UgaW4gZm9yY2UgYXMgb2YgdGhlIGRhdGUgeW91IGFjY2Vzc2VkIHRoZSBpbmZvcm1hdGlvbi4iXSwibGljZW5zZUlkcyI6WyJPR0wtQ2FuYWRhLTIuMCJdLCJrZXl3b3JkcyI6WyJsaWNlbmNlIGNhbmFkYSB5b3UiLCJjYW5hZGEgeW91IGFyZSIsInRoaXMgbGljZW5jZSB3aXRoIiwibGljZW5jZSB3aXRoIG9ubHkiLCJhbnkgaW5mb3JtYXRpb24gaW5kaWNhdGVzIiwidGVybXMgYmVsb3cgdGhlIiwiYmVsb3cgdGhlIGluZm9ybWF0aW9uIiwiaW5mb3JtYXRpb24gcHJvdmlkZXIgZ3JhbnRzIiwicHJvdmlkZXIgZ3JhbnRzIHlvdSIsImluZm9ybWF0aW9uIGluY2x1ZGluZyBmb3IiLCJpbmNsdWRpbmcgZm9yIGNvbW1lcmNpYWwiLCJmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyIsImNvbW1lcmNpYWwgcHVycG9zZXMgc3ViamVjdCIsInB1cnBvc2VzIHN1YmplY3QgdG8iLCJ0ZXJtcyBiZWxvdyB5b3UiLCJiZWxvdyB5b3UgYXJlIiwibW9kaWZ5IHB1Ymxpc2ggdHJhbnNsYXRlIiwicHVibGlzaCB0cmFuc2xhdGUgYWRhcHQiLCJ0cmFuc2xhdGUgYWRhcHQgZGlzdHJpYnV0ZSIsImFkYXB0IGRpc3RyaWJ1dGUgb3IiLCJpbmZvcm1hdGlvbiBpbiBhbnkiLCJhbnkgbWVkaXVtIG1vZGUiLCJtZWRpdW0gbW9kZSBvciIsIm9yIGZvcm1hdCBmb3IiLCJmb3JtYXQgZm9yIGFueSIsImZvciBhbnkgbGF3ZnVsIiwiYW55IGxhd2Z1bCBwdXJwb3NlIiwibGF3ZnVsIHB1cnBvc2UgeW91IiwicHVycG9zZSB5b3UgbXVzdCIsIm5vdCBwcmFjdGljYWwgZm9yIiwicHJhY3RpY2FsIGZvciB5b3VyIiwiZm9sbG93aW5nIGF0dHJpYnV0aW9uIHN0YXRlbWVudCIsImF0dHJpYnV0aW9uIHN0YXRlbWVudCBjb250YWlucyIsInN0YXRlbWVudCBjb250YWlucyBpbmZvcm1hdGlvbiIsImNhbmFkYSB0aGUgdGVybXMiLCJsaWNlbmNlIGFyZSBpbXBvcnRhbnQiLCJhcmUgaW1wb3J0YW50IGFuZCIsImltcG9ydGFudCBhbmQgaWYiLCJhbnkgb2YgdGhlbSIsIm9mIHRoZW0gdGhlIiwiaW5mb3JtYXRpb24gcHJvdmlkZXIgd2lsbCIsInByb3ZpZGVyIHdpbGwgZW5kIiwidG8gdXNlIHBlcnNvbmFsIiwidXNlIHBlcnNvbmFsIGluZm9ybWF0aW9uIiwicGVyc29uYWwgaW5mb3JtYXRpb24gdGhpcmQiLCJpbmZvcm1hdGlvbiB0aGlyZCBwYXJ0eSIsImlzIG5vdCBhdXRob3JpemVkIiwiYXV0aG9yaXplZCB0byBsaWNlbnNlIiwibGljZW5zZSB0aGUgbmFtZXMiLCJ0aGUgbmFtZXMgY3Jlc3RzIiwibmFtZXMgY3Jlc3RzIGxvZ29zIiwiY3Jlc3RzIGxvZ29zIG9yIiwibG9nb3Mgb3Igb3RoZXIiLCJvciBvdGhlciBvZmZpY2lhbCIsIm90aGVyIG9mZmljaWFsIHN5bWJvbHMiLCJvZmZpY2lhbCBzeW1ib2xzIG9mIiwic3ltYm9scyBvZiB0aGUiLCJwcm92aWRlciBhbmQgaW5mb3JtYXRpb24iLCJtYXJrcyBhbmQgb2ZmaWNpYWwiLCJhbmQgb2ZmaWNpYWwgbWFya3MiLCJvZmZpY2lhbCBtYXJrcyBub24iLCJtYXJrcyBub24gZW5kb3JzZW1lbnQiLCJhbmQgbGlhYmlsaXRpZXMgd2hldGhlciIsImxpYWJpbGl0aWVzIHdoZXRoZXIgZXhwcmVzcyIsIndoZXRoZXIgZXhwcmVzcyBvciIsImluZm9ybWF0aW9uIGFuZCB3aWxsIiwid2lsbCBub3QgdW5kZXIiLCJjaXJjdW1zdGFuY2VzIGJlIGxpYWJsZSIsImluY2lkZW50YWwgY29uc2VxdWVudGlhbCBvciIsIm9yIG90aGVyIGxvc3MiLCJvdGhlciBsb3NzIGluanVyeSIsIm9yIGRhbWFnZSBjYXVzZWQiLCJkYW1hZ2UgY2F1c2VkIGJ5IiwiaXRzIHVzZSBvciIsInRoZSBpbmZvcm1hdGlvbiBldmVuIiwiaW5mb3JtYXRpb24gZXZlbiBpZiIsImV2ZW4gaWYgc3BlY2lmaWNhbGx5IiwiaWYgc3BlY2lmaWNhbGx5IGFkdmlzZWQiLCJzcGVjaWZpY2FsbHkgYWR2aXNlZCBvZiIsIm9mIHN1Y2ggbG9zcyIsInN1Y2ggbG9zcyBpbmp1cnkiLCJvciBkYW1hZ2UgZ292ZXJuaW5nIiwiZGFtYWdlIGdvdmVybmluZyBsYXciLCJvZiB0aGUgcHJvdmluY2UiLCJwcm92aW5jZSBvZiBvbnRhcmlvIiwib2Ygb250YXJpbyBhbmQiLCJvbnRhcmlvIGFuZCB0aGUiLCJhbmQgdGhlIGFwcGxpY2FibGUiLCJ0aGUgYXBwbGljYWJsZSBsYXdzIiwiYXBwbGljYWJsZSBsYXdzIG9mIiwibGF3cyBvZiBjYW5hZGEiLCJvZiBjYW5hZGEgbGVnYWwiLCJjYW5hZGEgbGVnYWwgcHJvY2VlZGluZ3MiLCJsZWdhbCBwcm9jZWVkaW5ncyByZWxhdGVkIiwicHJvY2VlZGluZ3MgcmVsYXRlZCB0byIsImxpY2VuY2UgbWF5IG9ubHkiLCJvbmx5IGJlIGJyb3VnaHQiLCJjb3VydHMgb2Ygb250YXJpbyIsIm9mIG9udGFyaW8gb3IiLCJvbnRhcmlvIG9yIHRoZSIsIm9yIHRoZSBmZWRlcmFsIiwidGhlIGZlZGVyYWwgY291cnQiLCJmZWRlcmFsIGNvdXJ0IG9mIiwiY291cnQgb2YgY2FuYWRhIiwib2YgY2FuYWRhIGRlZmluaXRpb25zIiwiY2FuYWRhIGRlZmluaXRpb25zIGluIiwibWVhbnMgaW5mb3JtYXRpb24gcmVzb3VyY2VzIiwiaW5mb3JtYXRpb24gcmVzb3VyY2VzIHByb3RlY3RlZCIsInJlc291cmNlcyBwcm90ZWN0ZWQgYnkiLCJvdGhlciBpbmZvcm1hdGlvbiB0aGF0IiwidGhhdCBpcyBvZmZlcmVkIiwicHJvdmlkZXIgbWVhbnMgaGVyIiwibWVhbnMgaGVyIG1hamVzdHkiLCJoZXIgbWFqZXN0eSB0aGUiLCJtYWplc3R5IHRoZSBxdWVlbiIsInRoZSBxdWVlbiBpbiIsInF1ZWVuIGluIHJpZ2h0IiwiaW4gcmlnaHQgb2YiLCJyaWdodCBvZiBjYW5hZGEiLCJvZiBjYW5hZGEgcGVyc29uYWwiLCJjYW5hZGEgcGVyc29uYWwgaW5mb3JtYXRpb24iLCJwZXJzb25hbCBpbmZvcm1hdGlvbiBtZWFucyIsImluZm9ybWF0aW9uIG1lYW5zIHBlcnNvbmFsIiwibWVhbnMgcGVyc29uYWwgaW5mb3JtYXRpb24iLCJwZXJzb25hbCBpbmZvcm1hdGlvbiBhcyIsIm9mIHRoZSBwcml2YWN5IiwidGhlIHByaXZhY3kgYWN0IiwicHJpdmFjeSBhY3QgciIsImFjdCByIHMiLCJyIHMgYyIsInMgYyAxOTg1IiwiYyAxOTg1IGMiLCIxOTg1IGMgcCIsImMgcCAyMSIsInAgMjEgeW91IiwiMjEgeW91IG1lYW5zIiwidGhpcyBsaWNlbmNlIHZlcnNpb25pbmciLCJsaWNlbmNlIHZlcnNpb25pbmcgdGhpcyIsInZlcnNpb25pbmcgdGhpcyBpcyIsImNhbmFkYSB0aGUgaW5mb3JtYXRpb24iLCJpbmZvcm1hdGlvbiBwcm92aWRlciBtYXkiLCJwcm92aWRlciBtYXkgbWFrZSIsIm1heSBtYWtlIGNoYW5nZXMiLCJ0aGlzIGxpY2VuY2UgZnJvbSIsImxpY2VuY2UgZnJvbSB0aW1lIiwidG8gdGltZSBhbmQiLCJ0aW1lIGFuZCBpc3N1ZSIsImFuZCBpc3N1ZSBhIiwiaXNzdWUgYSBuZXciLCJ0aGUgbGljZW5jZSB5b3VyIiwibGljZW5jZSB5b3VyIHVzZSIsInRoZSBsaWNlbmNlIGluIiwibGljZW5jZSBpbiBmb3JjZSIsImluIGZvcmNlIGFzIiwiZm9yY2UgYXMgb2YiLCJkYXRlIHlvdSBhY2Nlc3NlZCIsInlvdSBhY2Nlc3NlZCB0aGUiLCJhY2Nlc3NlZCB0aGUgaW5mb3JtYXRpb24iLCJnb3Zlcm5tZW50IGxpY2VuY2UgY2FuYWRhIHlvdSIsImxpY2VuY2UgY2FuYWRhIHlvdSBhcmUiLCJjYW5hZGEgeW91IGFyZSBlbmNvdXJhZ2VkIiwidW5kZXIgdGhpcyBsaWNlbmNlIHdpdGgiLCJ0aGlzIGxpY2VuY2Ugd2l0aCBvbmx5IiwibGljZW5jZSB3aXRoIG9ubHkgYSIsImxpY2VuY2UgdXNlIG9mIGFueSIsInVzZSBvZiBhbnkgaW5mb3JtYXRpb24iLCJvZiBhbnkgaW5mb3JtYXRpb24gaW5kaWNhdGVzIiwiYW55IGluZm9ybWF0aW9uIGluZGljYXRlcyB5b3VyIiwib2YgdGhlIHRlcm1zIGJlbG93IiwidGhlIHRlcm1zIGJlbG93IHRoZSIsInRlcm1zIGJlbG93IHRoZSBpbmZvcm1hdGlvbiIsImJlbG93IHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlciIsInRoZSBpbmZvcm1hdGlvbiBwcm92aWRlciBncmFudHMiLCJpbmZvcm1hdGlvbiBwcm92aWRlciBncmFudHMgeW91IiwicHJvdmlkZXIgZ3JhbnRzIHlvdSBhIiwidXNlIHRoZSBpbmZvcm1hdGlvbiBpbmNsdWRpbmciLCJ0aGUgaW5mb3JtYXRpb24gaW5jbHVkaW5nIGZvciIsImluZm9ybWF0aW9uIGluY2x1ZGluZyBmb3IgY29tbWVyY2lhbCIsImluY2x1ZGluZyBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyIsImZvciBjb21tZXJjaWFsIHB1cnBvc2VzIHN1YmplY3QiLCJjb21tZXJjaWFsIHB1cnBvc2VzIHN1YmplY3QgdG8iLCJwdXJwb3NlcyBzdWJqZWN0IHRvIHRoZSIsInRvIHRoZSB0ZXJtcyBiZWxvdyIsInRoZSB0ZXJtcyBiZWxvdyB5b3UiLCJ0ZXJtcyBiZWxvdyB5b3UgYXJlIiwiYmVsb3cgeW91IGFyZSBmcmVlIiwiY29weSBtb2RpZnkgcHVibGlzaCB0cmFuc2xhdGUiLCJtb2RpZnkgcHVibGlzaCB0cmFuc2xhdGUgYWRhcHQiLCJwdWJsaXNoIHRyYW5zbGF0ZSBhZGFwdCBkaXN0cmlidXRlIiwidHJhbnNsYXRlIGFkYXB0IGRpc3RyaWJ1dGUgb3IiLCJhZGFwdCBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSIsImRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIHVzZSIsIm9yIG90aGVyd2lzZSB1c2UgdGhlIiwib3RoZXJ3aXNlIHVzZSB0aGUgaW5mb3JtYXRpb24iLCJ0aGUgaW5mb3JtYXRpb24gaW4gYW55IiwiaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bSIsImluIGFueSBtZWRpdW0gbW9kZSIsImFueSBtZWRpdW0gbW9kZSBvciIsIm1lZGl1bSBtb2RlIG9yIGZvcm1hdCIsIm1vZGUgb3IgZm9ybWF0IGZvciJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJPcGVuIEdvdmVybm1lbnQgTGljZW5jZSB2MS4wXG5cbllvdSBhcmUgZW5jb3VyYWdlZCB0byB1c2UgYW5kIHJlLXVzZSB0aGUgSW5mb3JtYXRpb24gdGhhdCBpcyBhdmFpbGFibGUgdW5kZXIgdGhpcyBsaWNlbmNlLCB0aGUgT3BlbiBHb3Zlcm5tZW50IExpY2VuY2UsIGZyZWVseSBhbmQgZmxleGlibHksIHdpdGggb25seSBhIGZldyBjb25kaXRpb25zLlxuXG5Vc2luZyBJbmZvcm1hdGlvbiB1bmRlciB0aGlzIGxpY2VuY2VcblxuVXNlIG9mIGNvcHlyaWdodCBhbmQgZGF0YWJhc2UgcmlnaHQgbWF0ZXJpYWwgZXhwcmVzc2x5IG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgbGljZW5jZSAodGhlICdJbmZvcm1hdGlvbicpIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGJlbG93LlxuXG5UaGUgTGljZW5zb3IgZ3JhbnRzIHlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwsIG5vbi1leGNsdXNpdmUgbGljZW5jZSB0byB1c2UgdGhlIEluZm9ybWF0aW9uIHN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbnMgYmVsb3cuXG5cblRoaXMgbGljZW5jZSBkb2VzIG5vdCBhZmZlY3QgeW91ciBmcmVlZG9tIHVuZGVyIGZhaXIgZGVhbGluZyBvciBmYWlyIHVzZSBvciBhbnkgb3RoZXIgY29weXJpZ2h0IG9yIGRhdGFiYXNlIHJpZ2h0IGV4Y2VwdGlvbnMgYW5kIGxpbWl0YXRpb25zLlxuXG5Zb3UgYXJlIGZyZWUgdG86XG5cbiAgIGNvcHksIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgYW5kIHRyYW5zbWl0IHRoZSBJbmZvcm1hdGlvbjtcblxuICAgYWRhcHQgdGhlIEluZm9ybWF0aW9uO1xuXG4gICBleHBsb2l0IHRoZSBJbmZvcm1hdGlvbiBjb21tZXJjaWFsbHkgZm9yIGV4YW1wbGUsIGJ5IGNvbWJpbmluZyBpdCB3aXRoIG90aGVyIEluZm9ybWF0aW9uLCBvciBieSBpbmNsdWRpbmcgaXQgaW4geW91ciBvd24gcHJvZHVjdCBvciBhcHBsaWNhdGlvbi5cblxuWW91IG11c3QsIHdoZXJlIHlvdSBkbyBhbnkgb2YgdGhlIGFib3ZlOlxuXG4gICBhY2tub3dsZWRnZSB0aGUgc291cmNlIG9mIHRoZSBJbmZvcm1hdGlvbiBieSBpbmNsdWRpbmcgYW55IGF0dHJpYnV0aW9uIHN0YXRlbWVudCBzcGVjaWZpZWQgYnkgdGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyKHMpIGFuZCwgd2hlcmUgcG9zc2libGUsIHByb3ZpZGUgYSBsaW5rIHRvIHRoaXMgbGljZW5jZTtcblxuICAgSWYgdGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyIGRvZXMgbm90IHByb3ZpZGUgYSBzcGVjaWZpYyBhdHRyaWJ1dGlvbiBzdGF0ZW1lbnQsIG9yIGlmIHlvdSBhcmUgdXNpbmcgSW5mb3JtYXRpb24gZnJvbSBzZXZlcmFsIEluZm9ybWF0aW9uIFByb3ZpZGVycyBhbmQgbXVsdGlwbGUgYXR0cmlidXRpb25zIGFyZSBub3QgcHJhY3RpY2FsIGluIHlvdXIgcHJvZHVjdCBvciBhcHBsaWNhdGlvbiwgeW91IG1heSBjb25zaWRlciB1c2luZyB0aGUgZm9sbG93aW5nOlxuXG4gICBDb250YWlucyBwdWJsaWMgc2VjdG9yIGluZm9ybWF0aW9uIGxpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIEdvdmVybm1lbnQgTGljZW5jZSB2MS4wLlxuXG4gICBlbnN1cmUgdGhhdCB5b3UgZG8gbm90IHVzZSB0aGUgSW5mb3JtYXRpb24gaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyBhbnkgb2ZmaWNpYWwgc3RhdHVzIG9yIHRoYXQgdGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyIGVuZG9yc2VzIHlvdSBvciB5b3VyIHVzZSBvZiB0aGUgSW5mb3JtYXRpb247XG5cbiAgIGVuc3VyZSB0aGF0IHlvdSBkbyBub3QgbWlzbGVhZCBvdGhlcnMgb3IgbWlzcmVwcmVzZW50IHRoZSBJbmZvcm1hdGlvbiBvciBpdHMgc291cmNlO1xuXG4gICBlbnN1cmUgdGhhdCB5b3VyIHVzZSBvZiB0aGUgSW5mb3JtYXRpb24gZG9lcyBub3QgYnJlYWNoIHRoZSBEYXRhIFByb3RlY3Rpb24gQWN0IDE5OTggb3IgdGhlIFByaXZhY3kgYW5kIEVsZWN0cm9uaWMgQ29tbXVuaWNhdGlvbnMgKEVDIERpcmVjdGl2ZSkgUmVndWxhdGlvbnMgMjAwMy5cblxuVGhlc2UgYXJlIGltcG9ydGFudCBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5jZSBhbmQgaWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhlbSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8geW91IHVuZGVyIHRoaXMgbGljZW5jZSwgb3IgYW55IHNpbWlsYXIgbGljZW5jZSBncmFudGVkIGJ5IHRoZSBMaWNlbnNvciwgd2lsbCBlbmQgYXV0b21hdGljYWxseS5cblxuRXhlbXB0aW9uc1xuXG5UaGlzIGxpY2VuY2UgZG9lcyBub3QgY292ZXIgdGhlIHVzZSBvZjpcblxuICAgLSBwZXJzb25hbCBkYXRhIGluIHRoZSBJbmZvcm1hdGlvbjtcblxuICAgLSBJbmZvcm1hdGlvbiB0aGF0IGhhcyBuZWl0aGVyIGJlZW4gcHVibGlzaGVkIG5vciBkaXNjbG9zZWQgdW5kZXIgaW5mb3JtYXRpb24gYWNjZXNzIGxlZ2lzbGF0aW9uIChpbmNsdWRpbmcgdGhlIEZyZWVkb20gb2YgSW5mb3JtYXRpb24gQWN0cyBmb3IgdGhlIFVLIGFuZCBTY290bGFuZCkgYnkgb3Igd2l0aCB0aGUgY29uc2VudCBvZiB0aGUgSW5mb3JtYXRpb24gUHJvdmlkZXI7XG5cbiAgIC0gZGVwYXJ0bWVudGFsIG9yIHB1YmxpYyBzZWN0b3Igb3JnYW5pc2F0aW9uIGxvZ29zLCBjcmVzdHMgYW5kIHRoZSBSb3lhbCBBcm1zIGV4Y2VwdCB3aGVyZSB0aGV5IGZvcm0gYW4gaW50ZWdyYWwgcGFydCBvZiBhIGRvY3VtZW50IG9yIGRhdGFzZXQ7XG5cbiAgIC0gbWlsaXRhcnkgaW5zaWduaWE7XG5cbiAgIC0gdGhpcmQgcGFydHkgcmlnaHRzIHRoZSBJbmZvcm1hdGlvbiBQcm92aWRlciBpcyBub3QgYXV0aG9yaXNlZCB0byBsaWNlbnNlO1xuXG4gICAtIEluZm9ybWF0aW9uIHN1YmplY3QgdG8gb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgaW5jbHVkaW5nIHBhdGVudHMsIHRyYWRlbWFya3MsIGFuZCBkZXNpZ24gcmlnaHRzOyBhbmRcblxuICAgLSBpZGVudGl0eSBkb2N1bWVudHMgc3VjaCBhcyB0aGUgQnJpdGlzaCBQYXNzcG9ydC5cblxuTm8gd2FycmFudHlcblxuVGhlIEluZm9ybWF0aW9uIGlzIGxpY2Vuc2VkICdhcyBpcycgYW5kIHRoZSBJbmZvcm1hdGlvbiBQcm92aWRlciBleGNsdWRlcyBhbGwgcmVwcmVzZW50YXRpb25zLCB3YXJyYW50aWVzLCBvYmxpZ2F0aW9ucyBhbmQgbGlhYmlsaXRpZXMgaW4gcmVsYXRpb24gdG8gdGhlIEluZm9ybWF0aW9uIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LlxuXG5UaGUgSW5mb3JtYXRpb24gUHJvdmlkZXIgaXMgbm90IGxpYWJsZSBmb3IgYW55IGVycm9ycyBvciBvbWlzc2lvbnMgaW4gdGhlIEluZm9ybWF0aW9uIGFuZCBzaGFsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgbG9zcywgaW5qdXJ5IG9yIGRhbWFnZSBvZiBhbnkga2luZCBjYXVzZWQgYnkgaXRzIHVzZS4gVGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyIGRvZXMgbm90IGd1YXJhbnRlZSB0aGUgY29udGludWVkIHN1cHBseSBvZiB0aGUgSW5mb3JtYXRpb24uXG5cbkdvdmVybmluZyBMYXdcblxuVGhpcyBsaWNlbmNlIGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyIGhhcyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzLCB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBieSB0aGUgSW5mb3JtYXRpb24gUHJvdmlkZXIuXG5cbkRlZmluaXRpb25zXG5cbkluIHRoaXMgbGljZW5jZSwgdGhlIHRlcm1zIGJlbG93IGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nczpcblxuICAgJ0luZm9ybWF0aW9uJyBtZWFucyBpbmZvcm1hdGlvbiBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IG9yIGJ5IGRhdGFiYXNlIHJpZ2h0IChmb3IgZXhhbXBsZSwgbGl0ZXJhcnkgYW5kIGFydGlzdGljIHdvcmtzLCBjb250ZW50LCBkYXRhIGFuZCBzb3VyY2UgY29kZSkgb2ZmZXJlZCBmb3IgdXNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2VuY2UuXG5cbiAgICdJbmZvcm1hdGlvbiBQcm92aWRlcicgbWVhbnMgdGhlIHBlcnNvbiBvciBvcmdhbmlzYXRpb24gcHJvdmlkaW5nIHRoZSBJbmZvcm1hdGlvbiB1bmRlciB0aGlzIGxpY2VuY2UuXG5cbiAgICdMaWNlbnNvcicgbWVhbnMgYW55IEluZm9ybWF0aW9uIFByb3ZpZGVyIHdoaWNoIGhhcyB0aGUgYXV0aG9yaXR5IHRvIG9mZmVyIEluZm9ybWF0aW9uIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2VuY2Ugb3IgdGhlIENvbnRyb2xsZXIgb2YgSGVyIE1hamVzdHkncyBTdGF0aW9uZXJ5IE9mZmljZSwgd2hvIGhhcyB0aGUgYXV0aG9yaXR5IHRvIG9mZmVyIEluZm9ybWF0aW9uIHN1YmplY3QgdG8gQ3Jvd24gY29weXJpZ2h0IGFuZCBDcm93biBkYXRhYmFzZSByaWdodHMgYW5kIEluZm9ybWF0aW9uIHN1YmplY3QgdG8gY29weXJpZ2h0IGFuZCBkYXRhYmFzZSByaWdodCB0aGF0IGhhcyBiZWVuIGFzc2lnbmVkIHRvIG9yIGFjcXVpcmVkIGJ5IHRoZSBDcm93biwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5jZS5cblxuICAgJ1VzZScgYXMgYSB2ZXJiLCBtZWFucyBkb2luZyBhbnkgYWN0IHdoaWNoIGlzIHJlc3RyaWN0ZWQgYnkgY29weXJpZ2h0IG9yIGRhdGFiYXNlIHJpZ2h0LCB3aGV0aGVyIGluIHRoZSBvcmlnaW5hbCBtZWRpdW0gb3IgaW4gYW55IG90aGVyIG1lZGl1bSwgYW5kIGluY2x1ZGVzIHdpdGhvdXQgbGltaXRhdGlvbiBkaXN0cmlidXRpbmcsIGNvcHlpbmcsIGFkYXB0aW5nLCBtb2RpZnlpbmcgYXMgbWF5IGJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byB1c2UgaXQgaW4gYSBkaWZmZXJlbnQgbW9kZSBvciBmb3JtYXQuXG5cbiAgICdZb3UnIG1lYW5zIHRoZSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiwgb3IgYm9keSBvZiBwZXJzb25zIGNvcnBvcmF0ZSBvciBpbmNvcnBvcmF0ZSwgYWNxdWlyaW5nIHJpZ2h0cyB1bmRlciB0aGlzIGxpY2VuY2UuXG5cbkFib3V0IHRoZSBPcGVuIEdvdmVybm1lbnQgTGljZW5jZVxuXG5UaGUgQ29udHJvbGxlciBvZiBIZXIgTWFqZXN0eSdzIFN0YXRpb25lcnkgT2ZmaWNlIChITVNPKSBoYXMgZGV2ZWxvcGVkIHRoaXMgbGljZW5jZSBhcyBhIHRvb2wgdG8gZW5hYmxlIEluZm9ybWF0aW9uIFByb3ZpZGVycyBpbiB0aGUgcHVibGljIHNlY3RvciB0byBsaWNlbnNlIHRoZSB1c2UgYW5kIHJlLXVzZSBvZiB0aGVpciBJbmZvcm1hdGlvbiB1bmRlciBhIGNvbW1vbiBvcGVuIGxpY2VuY2UuIFRoZSBDb250cm9sbGVyIGludml0ZXMgcHVibGljIHNlY3RvciBib2RpZXMgb3duaW5nIHRoZWlyIG93biBjb3B5cmlnaHQgYW5kIGRhdGFiYXNlIHJpZ2h0cyB0byBwZXJtaXQgdGhlIHVzZSBvZiB0aGVpciBJbmZvcm1hdGlvbiB1bmRlciB0aGlzIGxpY2VuY2UuXG5cblRoZSBDb250cm9sbGVyIG9mIEhNU08gaGFzIGF1dGhvcml0eSB0byBsaWNlbnNlIEluZm9ybWF0aW9uIHN1YmplY3QgdG8gY29weXJpZ2h0IGFuZCBkYXRhYmFzZSByaWdodCBvd25lZCBieSB0aGUgQ3Jvd24uIFRoZSBleHRlbnQgb2YgdGhlIENvbnRyb2xsZXIncyBvZmZlciB0byBsaWNlbnNlIHRoaXMgSW5mb3JtYXRpb24gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5jZSBpcyBzZXQgb3V0IGluIHRoZSBVSyBHb3Zlcm5tZW50IExpY2Vuc2luZyBGcmFtZXdvcmsuXG5cblRoaXMgaXMgdmVyc2lvbiAxLjAgb2YgdGhlIE9wZW4gR292ZXJubWVudCBMaWNlbmNlLiBUaGUgQ29udHJvbGxlciBvZiBITVNPIG1heSwgZnJvbSB0aW1lIHRvIHRpbWUsIGlzc3VlIG5ldyB2ZXJzaW9ucyBvZiB0aGUgT3BlbiBHb3Zlcm5tZW50IExpY2VuY2UuIEhvd2V2ZXIsIHlvdSBtYXkgY29udGludWUgdG8gdXNlIEluZm9ybWF0aW9uIGxpY2Vuc2VkIHVuZGVyIHRoaXMgdmVyc2lvbiBzaG91bGQgeW91IHdpc2ggdG8gZG8gc28uXG5cblRoZXNlIHRlcm1zIGhhdmUgYmVlbiBhbGlnbmVkIHRvIGJlIGludGVyb3BlcmFibGUgd2l0aCBhbnkgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiBMaWNlbmNlLCB3aGljaCBjb3ZlcnMgY29weXJpZ2h0LCBhbmQgT3BlbiBEYXRhIENvbW1vbnMgQXR0cmlidXRpb24gTGljZW5zZSwgd2hpY2ggY292ZXJzIGRhdGFiYXNlIHJpZ2h0cyBhbmQgYXBwbGljYWJsZSBjb3B5cmlnaHRzLlxuXG5GdXJ0aGVyIGNvbnRleHQsIGJlc3QgcHJhY3RpY2UgYW5kIGd1aWRhbmNlIGNhbiBiZSBmb3VuZCBpbiB0aGUgVUsgR292ZXJubWVudCBMaWNlbnNpbmcgRnJhbWV3b3JrIHNlY3Rpb24gb24gVGhlIE5hdGlvbmFsIEFyY2hpdmVzIHdlYnNpdGUuIl0sImxpY2Vuc2VJZHMiOlsiT0dMLVVLLTEuMCJdLCJrZXl3b3JkcyI6WyJ2MSAwIHlvdSIsImxpY2VuY2UgdGhlIG9wZW4iLCJnb3Zlcm5tZW50IGxpY2VuY2UgZnJlZWx5IiwiaW5mb3JtYXRpb24gY29tbWVyY2lhbGx5IGZvciIsIm1heSBjb25zaWRlciB1c2luZyIsImNvbnNpZGVyIHVzaW5nIHRoZSIsInYxIDAgZW5zdXJlIiwiMCBlbnN1cmUgdGhhdCIsInRoZSBpbmZvcm1hdGlvbiBlbnN1cmUiLCJpbmZvcm1hdGlvbiBlbnN1cmUgdGhhdCIsImRvIG5vdCBtaXNsZWFkIiwibm90IG1pc2xlYWQgb3RoZXJzIiwibWlzbGVhZCBvdGhlcnMgb3IiLCJvdGhlcnMgb3IgbWlzcmVwcmVzZW50Iiwib3IgbWlzcmVwcmVzZW50IHRoZSIsIm1pc3JlcHJlc2VudCB0aGUgaW5mb3JtYXRpb24iLCJvciBpdHMgc291cmNlIiwiaXRzIHNvdXJjZSBlbnN1cmUiLCJzb3VyY2UgZW5zdXJlIHRoYXQiLCJ0aGUgaW5mb3JtYXRpb24gZG9lcyIsImRvZXMgbm90IGJyZWFjaCIsIm5vdCBicmVhY2ggdGhlIiwiYnJlYWNoIHRoZSBkYXRhIiwidGhlIGRhdGEgcHJvdGVjdGlvbiIsImRhdGEgcHJvdGVjdGlvbiBhY3QiLCJwcm90ZWN0aW9uIGFjdCAxOTk4IiwiYWN0IDE5OTggb3IiLCIxOTk4IG9yIHRoZSIsIm9yIHRoZSBwcml2YWN5IiwidGhlIHByaXZhY3kgYW5kIiwicHJpdmFjeSBhbmQgZWxlY3Ryb25pYyIsImFuZCBlbGVjdHJvbmljIGNvbW11bmljYXRpb25zIiwiZWxlY3Ryb25pYyBjb21tdW5pY2F0aW9ucyBlYyIsImNvbW11bmljYXRpb25zIGVjIGRpcmVjdGl2ZSIsImVjIGRpcmVjdGl2ZSByZWd1bGF0aW9ucyIsImRpcmVjdGl2ZSByZWd1bGF0aW9ucyAyMDAzIiwicmVndWxhdGlvbnMgMjAwMyB0aGVzZSIsIjIwMDMgdGhlc2UgYXJlIiwiaW5jbHVkaW5nIHBhdGVudHMgdHJhZGVtYXJrcyIsInBhdGVudHMgdHJhZGVtYXJrcyBhbmQiLCJ0cmFkZW1hcmtzIGFuZCBkZXNpZ24iLCJicml0aXNoIHBhc3Nwb3J0IG5vIiwicGFzc3BvcnQgbm8gd2FycmFudHkiLCJvciB0aGUgY29udHJvbGxlciIsImxpY2VuY2UgdXNlIGFzIiwiaXMgdmVyc2lvbiAxIiwiZ292ZXJubWVudCBsaWNlbmNlIGhvd2V2ZXIiLCJsaWNlbmNlIGhvd2V2ZXIgeW91IiwidXNlIGluZm9ybWF0aW9uIGxpY2Vuc2VkIiwidGhpcyB2ZXJzaW9uIHNob3VsZCIsInZlcnNpb24gc2hvdWxkIHlvdSIsInNob3VsZCB5b3Ugd2lzaCIsImRvIHNvIHRoZXNlIiwic28gdGhlc2UgdGVybXMiLCJ0aGVzZSB0ZXJtcyBoYXZlIiwidGVybXMgaGF2ZSBiZWVuIiwiaGF2ZSBiZWVuIGFsaWduZWQiLCJiZWVuIGFsaWduZWQgdG8iLCJhbGlnbmVkIHRvIGJlIiwidG8gYmUgaW50ZXJvcGVyYWJsZSIsImJlIGludGVyb3BlcmFibGUgd2l0aCIsImludGVyb3BlcmFibGUgd2l0aCBhbnkiLCJ3aXRoIGFueSBjcmVhdGl2ZSIsImFueSBjcmVhdGl2ZSBjb21tb25zIiwiYXR0cmlidXRpb24gbGljZW5jZSB3aGljaCIsImxpY2VuY2Ugd2hpY2ggY292ZXJzIiwid2hpY2ggY292ZXJzIGNvcHlyaWdodCIsImNvdmVycyBjb3B5cmlnaHQgYW5kIiwiY29weXJpZ2h0IGFuZCBvcGVuIiwiYW5kIG9wZW4gZGF0YSIsImF0dHJpYnV0aW9uIGxpY2Vuc2Ugd2hpY2giLCJsaWNlbnNlIHdoaWNoIGNvdmVycyIsIndoaWNoIGNvdmVycyBkYXRhYmFzZSIsImNvdmVycyBkYXRhYmFzZSByaWdodHMiLCJyaWdodHMgYW5kIGFwcGxpY2FibGUiLCJhbmQgYXBwbGljYWJsZSBjb3B5cmlnaHRzIiwiYXBwbGljYWJsZSBjb3B5cmlnaHRzIGZ1cnRoZXIiLCJjb3B5cmlnaHRzIGZ1cnRoZXIgY29udGV4dCIsImxpY2VuY2UgdjEgMCB5b3UiLCJ2MSAwIHlvdSBhcmUiLCJ0aGlzIGxpY2VuY2UgdGhlIG9wZW4iLCJsaWNlbmNlIHRoZSBvcGVuIGdvdmVybm1lbnQiLCJvcGVuIGdvdmVybm1lbnQgbGljZW5jZSBmcmVlbHkiLCJnb3Zlcm5tZW50IGxpY2VuY2UgZnJlZWx5IGFuZCIsInRoZSBpbmZvcm1hdGlvbiBjb21tZXJjaWFsbHkgZm9yIiwiaW5mb3JtYXRpb24gY29tbWVyY2lhbGx5IGZvciBleGFtcGxlIiwiYXBwbGljYXRpb24geW91IG1heSBjb25zaWRlciIsInlvdSBtYXkgY29uc2lkZXIgdXNpbmciLCJtYXkgY29uc2lkZXIgdXNpbmcgdGhlIiwiY29uc2lkZXIgdXNpbmcgdGhlIGZvbGxvd2luZyIsInVzaW5nIHRoZSBmb2xsb3dpbmcgY29udGFpbnMiLCJsaWNlbmNlIHYxIDAgZW5zdXJlIiwidjEgMCBlbnN1cmUgdGhhdCIsIjAgZW5zdXJlIHRoYXQgeW91IiwieW91IGRvIG5vdCB1c2UiLCJvZiB0aGUgaW5mb3JtYXRpb24gZW5zdXJlIiwidGhlIGluZm9ybWF0aW9uIGVuc3VyZSB0aGF0IiwiaW5mb3JtYXRpb24gZW5zdXJlIHRoYXQgeW91IiwieW91IGRvIG5vdCBtaXNsZWFkIiwiZG8gbm90IG1pc2xlYWQgb3RoZXJzIiwibm90IG1pc2xlYWQgb3RoZXJzIG9yIiwibWlzbGVhZCBvdGhlcnMgb3IgbWlzcmVwcmVzZW50Iiwib3RoZXJzIG9yIG1pc3JlcHJlc2VudCB0aGUiLCJvciBtaXNyZXByZXNlbnQgdGhlIGluZm9ybWF0aW9uIiwibWlzcmVwcmVzZW50IHRoZSBpbmZvcm1hdGlvbiBvciIsInRoZSBpbmZvcm1hdGlvbiBvciBpdHMiLCJpbmZvcm1hdGlvbiBvciBpdHMgc291cmNlIiwib3IgaXRzIHNvdXJjZSBlbnN1cmUiLCJpdHMgc291cmNlIGVuc3VyZSB0aGF0Iiwic291cmNlIGVuc3VyZSB0aGF0IHlvdXIiLCJlbnN1cmUgdGhhdCB5b3VyIHVzZSIsIm9mIHRoZSBpbmZvcm1hdGlvbiBkb2VzIiwidGhlIGluZm9ybWF0aW9uIGRvZXMgbm90IiwiaW5mb3JtYXRpb24gZG9lcyBub3QgYnJlYWNoIiwiZG9lcyBub3QgYnJlYWNoIHRoZSIsIm5vdCBicmVhY2ggdGhlIGRhdGEiLCJicmVhY2ggdGhlIGRhdGEgcHJvdGVjdGlvbiIsInRoZSBkYXRhIHByb3RlY3Rpb24gYWN0IiwiZGF0YSBwcm90ZWN0aW9uIGFjdCAxOTk4IiwicHJvdGVjdGlvbiBhY3QgMTk5OCBvciIsImFjdCAxOTk4IG9yIHRoZSIsIjE5OTggb3IgdGhlIHByaXZhY3kiLCJvciB0aGUgcHJpdmFjeSBhbmQiLCJ0aGUgcHJpdmFjeSBhbmQgZWxlY3Ryb25pYyIsInByaXZhY3kgYW5kIGVsZWN0cm9uaWMgY29tbXVuaWNhdGlvbnMiLCJhbmQgZWxlY3Ryb25pYyBjb21tdW5pY2F0aW9ucyBlYyIsImVsZWN0cm9uaWMgY29tbXVuaWNhdGlvbnMgZWMgZGlyZWN0aXZlIiwiY29tbXVuaWNhdGlvbnMgZWMgZGlyZWN0aXZlIHJlZ3VsYXRpb25zIiwiZWMgZGlyZWN0aXZlIHJlZ3VsYXRpb25zIDIwMDMiLCJkaXJlY3RpdmUgcmVndWxhdGlvbnMgMjAwMyB0aGVzZSIsInJlZ3VsYXRpb25zIDIwMDMgdGhlc2UgYXJlIiwiMjAwMyB0aGVzZSBhcmUgaW1wb3J0YW50IiwiYXV0aG9yaXNlZCB0byBsaWNlbnNlIGluZm9ybWF0aW9uIiwicmlnaHRzIGluY2x1ZGluZyBwYXRlbnRzIHRyYWRlbWFya3MiLCJpbmNsdWRpbmcgcGF0ZW50cyB0cmFkZW1hcmtzIGFuZCIsInBhdGVudHMgdHJhZGVtYXJrcyBhbmQgZGVzaWduIiwidHJhZGVtYXJrcyBhbmQgZGVzaWduIHJpZ2h0cyIsInRoZSBicml0aXNoIHBhc3Nwb3J0IG5vIiwiYnJpdGlzaCBwYXNzcG9ydCBubyB3YXJyYW50eSIsInBhc3Nwb3J0IG5vIHdhcnJhbnR5IHRoZSIsImxpY2VuY2Ugb3IgdGhlIGNvbnRyb2xsZXIiLCJvciB0aGUgY29udHJvbGxlciBvZiIsInRoaXMgbGljZW5jZSB1c2UgYXMiLCJsaWNlbmNlIHVzZSBhcyBhIiwidGhpcyBpcyB2ZXJzaW9uIDEiLCJpcyB2ZXJzaW9uIDEgMCIsIm9wZW4gZ292ZXJubWVudCBsaWNlbmNlIGhvd2V2ZXIiLCJnb3Zlcm5tZW50IGxpY2VuY2UgaG93ZXZlciB5b3UiLCJsaWNlbmNlIGhvd2V2ZXIgeW91IG1heSIsImhvd2V2ZXIgeW91IG1heSBjb250aW51ZSIsImNvbnRpbnVlIHRvIHVzZSBpbmZvcm1hdGlvbiIsInRvIHVzZSBpbmZvcm1hdGlvbiBsaWNlbnNlZCIsInVzZSBpbmZvcm1hdGlvbiBsaWNlbnNlZCB1bmRlciIsImluZm9ybWF0aW9uIGxpY2Vuc2VkIHVuZGVyIHRoaXMiLCJsaWNlbnNlZCB1bmRlciB0aGlzIHZlcnNpb24iLCJ1bmRlciB0aGlzIHZlcnNpb24gc2hvdWxkIiwidGhpcyB2ZXJzaW9uIHNob3VsZCB5b3UiLCJ2ZXJzaW9uIHNob3VsZCB5b3Ugd2lzaCIsInNob3VsZCB5b3Ugd2lzaCB0byIsInlvdSB3aXNoIHRvIGRvIiwidG8gZG8gc28gdGhlc2UiLCJkbyBzbyB0aGVzZSB0ZXJtcyIsInNvIHRoZXNlIHRlcm1zIGhhdmUiLCJ0aGVzZSB0ZXJtcyBoYXZlIGJlZW4iLCJ0ZXJtcyBoYXZlIGJlZW4gYWxpZ25lZCIsImhhdmUgYmVlbiBhbGlnbmVkIHRvIiwiYmVlbiBhbGlnbmVkIHRvIGJlIiwiYWxpZ25lZCB0byBiZSBpbnRlcm9wZXJhYmxlIiwidG8gYmUgaW50ZXJvcGVyYWJsZSB3aXRoIiwiYmUgaW50ZXJvcGVyYWJsZSB3aXRoIGFueSIsImludGVyb3BlcmFibGUgd2l0aCBhbnkgY3JlYXRpdmUiLCJ3aXRoIGFueSBjcmVhdGl2ZSBjb21tb25zIiwiYW55IGNyZWF0aXZlIGNvbW1vbnMgYXR0cmlidXRpb24iLCJjb21tb25zIGF0dHJpYnV0aW9uIGxpY2VuY2Ugd2hpY2giLCJhdHRyaWJ1dGlvbiBsaWNlbmNlIHdoaWNoIGNvdmVycyIsImxpY2VuY2Ugd2hpY2ggY292ZXJzIGNvcHlyaWdodCIsIndoaWNoIGNvdmVycyBjb3B5cmlnaHQgYW5kIiwiY292ZXJzIGNvcHlyaWdodCBhbmQgb3BlbiIsImNvcHlyaWdodCBhbmQgb3BlbiBkYXRhIiwiYW5kIG9wZW4gZGF0YSBjb21tb25zIiwiY29tbW9ucyBhdHRyaWJ1dGlvbiBsaWNlbnNlIHdoaWNoIiwiYXR0cmlidXRpb24gbGljZW5zZSB3aGljaCBjb3ZlcnMiLCJsaWNlbnNlIHdoaWNoIGNvdmVycyBkYXRhYmFzZSIsIndoaWNoIGNvdmVycyBkYXRhYmFzZSByaWdodHMiLCJjb3ZlcnMgZGF0YWJhc2UgcmlnaHRzIGFuZCIsImRhdGFiYXNlIHJpZ2h0cyBhbmQgYXBwbGljYWJsZSIsInJpZ2h0cyBhbmQgYXBwbGljYWJsZSBjb3B5cmlnaHRzIiwiYW5kIGFwcGxpY2FibGUgY29weXJpZ2h0cyBmdXJ0aGVyIiwiYXBwbGljYWJsZSBjb3B5cmlnaHRzIGZ1cnRoZXIgY29udGV4dCIsImNvcHlyaWdodHMgZnVydGhlciBjb250ZXh0IGJlc3QiLCJnb3Zlcm5tZW50IGxpY2VuY2UgdjEgMCB5b3UiLCJsaWNlbmNlIHYxIDAgeW91IGFyZSIsInYxIDAgeW91IGFyZSBlbmNvdXJhZ2VkIiwidW5kZXIgdGhpcyBsaWNlbmNlIHRoZSBvcGVuIiwidGhpcyBsaWNlbmNlIHRoZSBvcGVuIGdvdmVybm1lbnQiLCJsaWNlbmNlIHRoZSBvcGVuIGdvdmVybm1lbnQgbGljZW5jZSIsInRoZSBvcGVuIGdvdmVybm1lbnQgbGljZW5jZSBmcmVlbHkiLCJvcGVuIGdvdmVybm1lbnQgbGljZW5jZSBmcmVlbHkgYW5kIiwiZ292ZXJubWVudCBsaWNlbmNlIGZyZWVseSBhbmQgZmxleGlibHkiLCJleHBsb2l0IHRoZSBpbmZvcm1hdGlvbiBjb21tZXJjaWFsbHkgZm9yIl19LHsibGljZW5zZVRleHRzIjpbIk9wZW4gR292ZXJubWVudCBMaWNlbmNlIHYyLjBcblxuWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSBhbmQgcmUtdXNlIHRoZSBJbmZvcm1hdGlvbiB0aGF0IGlzIGF2YWlsYWJsZSB1bmRlciB0aGlzIGxpY2VuY2UgZnJlZWx5IGFuZCBmbGV4aWJseSwgd2l0aCBvbmx5IGEgZmV3IGNvbmRpdGlvbnMuXG5cblVzaW5nIEluZm9ybWF0aW9uIHVuZGVyIHRoaXMgbGljZW5jZVxuXG5Vc2Ugb2YgY29weXJpZ2h0IGFuZCBkYXRhYmFzZSByaWdodCBtYXRlcmlhbCBleHByZXNzbHkgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBsaWNlbmNlICh0aGUgJ0luZm9ybWF0aW9uJykgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYmVsb3cuXG5cblRoZSBMaWNlbnNvciBncmFudHMgeW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCwgbm9uLWV4Y2x1c2l2ZSBsaWNlbmNlIHRvIHVzZSB0aGUgSW5mb3JtYXRpb24gc3ViamVjdCB0byB0aGUgY29uZGl0aW9ucyBiZWxvdy5cblxuVGhpcyBsaWNlbmNlIGRvZXMgbm90IGFmZmVjdCB5b3VyIGZyZWVkb20gdW5kZXIgZmFpciBkZWFsaW5nIG9yIGZhaXIgdXNlIG9yIGFueSBvdGhlciBjb3B5cmlnaHQgb3IgZGF0YWJhc2UgcmlnaHQgZXhjZXB0aW9ucyBhbmQgbGltaXRhdGlvbnMuXG5cbllvdSBhcmUgZnJlZSB0bzpcblxuICAgY29weSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQgdHJhbnNtaXQgdGhlIEluZm9ybWF0aW9uO1xuXG4gICBhZGFwdCB0aGUgSW5mb3JtYXRpb247XG5cbiAgIGV4cGxvaXQgdGhlIEluZm9ybWF0aW9uIGNvbW1lcmNpYWxseSBhbmQgbm9uLWNvbW1lcmNpYWxseSBmb3IgZXhhbXBsZSwgYnkgY29tYmluaW5nIGl0IHdpdGggb3RoZXIgSW5mb3JtYXRpb24sIG9yIGJ5IGluY2x1ZGluZyBpdCBpbiB5b3VyIG93biBwcm9kdWN0IG9yIGFwcGxpY2F0aW9uLlxuXG5Zb3UgbXVzdCwgd2hlcmUgeW91IGRvIGFueSBvZiB0aGUgYWJvdmU6XG5cbiAgIGFja25vd2xlZGdlIHRoZSBzb3VyY2Ugb2YgdGhlIEluZm9ybWF0aW9uIGJ5IGluY2x1ZGluZyBhbnkgYXR0cmlidXRpb24gc3RhdGVtZW50IHNwZWNpZmllZCBieSB0aGUgSW5mb3JtYXRpb24gUHJvdmlkZXIocykgYW5kLCB3aGVyZSBwb3NzaWJsZSwgcHJvdmlkZSBhIGxpbmsgdG8gdGhpcyBsaWNlbmNlO1xuXG4gICBJZiB0aGUgSW5mb3JtYXRpb24gUHJvdmlkZXIgZG9lcyBub3QgcHJvdmlkZSBhIHNwZWNpZmljIGF0dHJpYnV0aW9uIHN0YXRlbWVudCwgb3IgaWYgeW91IGFyZSB1c2luZyBJbmZvcm1hdGlvbiBmcm9tIHNldmVyYWwgSW5mb3JtYXRpb24gUHJvdmlkZXJzIGFuZCBtdWx0aXBsZSBhdHRyaWJ1dGlvbnMgYXJlIG5vdCBwcmFjdGljYWwgaW4geW91ciBwcm9kdWN0IG9yIGFwcGxpY2F0aW9uLCB5b3UgbWF5IHVzZSB0aGUgZm9sbG93aW5nOlxuXG4gICBDb250YWlucyBwdWJsaWMgc2VjdG9yIGluZm9ybWF0aW9uIGxpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIEdvdmVybm1lbnQgTGljZW5jZSB2Mi4wLlxuXG4gICBUaGVzZSBhcmUgaW1wb3J0YW50IGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbmNlIGFuZCBpZiB5b3UgZmFpbCB0byBjb21wbHkgd2l0aCB0aGVtIHRoZSByaWdodHMgZ3JhbnRlZCB0byB5b3UgdW5kZXIgdGhpcyBsaWNlbmNlLCBvciBhbnkgc2ltaWxhciBsaWNlbmNlIGdyYW50ZWQgYnkgdGhlIExpY2Vuc29yLCB3aWxsIGVuZCBhdXRvbWF0aWNhbGx5LlxuXG5FeGVtcHRpb25zXG5cblRoaXMgbGljZW5jZSBkb2VzIG5vdCBjb3ZlcjpcblxuICAgcGVyc29uYWwgZGF0YSBpbiB0aGUgSW5mb3JtYXRpb247XG5cbiAgIGluZm9ybWF0aW9uIHRoYXQgaGFzIG5laXRoZXIgYmVlbiBwdWJsaXNoZWQgbm9yIGRpc2Nsb3NlZCB1bmRlciBpbmZvcm1hdGlvbiBhY2Nlc3MgbGVnaXNsYXRpb24gKGluY2x1ZGluZyB0aGUgRnJlZWRvbSBvZiBJbmZvcm1hdGlvbiBBY3RzIGZvciB0aGUgVUsgYW5kIFNjb3RsYW5kKSBieSBvciB3aXRoIHRoZSBjb25zZW50IG9mIHRoZSBJbmZvcm1hdGlvbiBQcm92aWRlcjtcblxuICAgZGVwYXJ0bWVudGFsIG9yIHB1YmxpYyBzZWN0b3Igb3JnYW5pc2F0aW9uIGxvZ29zLCBjcmVzdHMgYW5kIHRoZSBSb3lhbCBBcm1zIGV4Y2VwdCB3aGVyZSB0aGV5IGZvcm0gYW4gaW50ZWdyYWwgcGFydCBvZiBhIGRvY3VtZW50IG9yIGRhdGFzZXQ7XG5cbiAgIG1pbGl0YXJ5IGluc2lnbmlhO1xuXG4gICB0aGlyZCBwYXJ0eSByaWdodHMgdGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyIGlzIG5vdCBhdXRob3Jpc2VkIHRvIGxpY2Vuc2U7XG5cbiAgIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIGluY2x1ZGluZyBwYXRlbnRzLCB0cmFkZSBtYXJrcywgYW5kIGRlc2lnbiByaWdodHM7IGFuZFxuXG4gICBpZGVudGl0eSBkb2N1bWVudHMgc3VjaCBhcyB0aGUgQnJpdGlzaCBQYXNzcG9ydFxuXG5Ob24tZW5kb3JzZW1lbnRcblxuVGhpcyBsaWNlbmNlIGRvZXMgbm90IGdyYW50IHlvdSBhbnkgcmlnaHQgdG8gdXNlIHRoZSBJbmZvcm1hdGlvbiBpbiBhIHdheSB0aGF0IHN1Z2dlc3RzIGFueSBvZmZpY2lhbCBzdGF0dXMgb3IgdGhhdCB0aGUgSW5mb3JtYXRpb24gUHJvdmlkZXIgZW5kb3JzZXMgeW91IG9yIHlvdXIgdXNlIG9mIHRoZSBJbmZvcm1hdGlvbi5cblxuTm9uIHdhcnJhbnR5XG5cblRoZSBJbmZvcm1hdGlvbiBpcyBsaWNlbnNlZCAnYXMgaXMnIGFuZCB0aGUgSW5mb3JtYXRpb24gUHJvdmlkZXIgZXhjbHVkZXMgYWxsIHJlcHJlc2VudGF0aW9ucywgd2FycmFudGllcywgb2JsaWdhdGlvbnMgYW5kIGxpYWJpbGl0aWVzIGluIHJlbGF0aW9uIHRvIHRoZSBJbmZvcm1hdGlvbiB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy5cblxuVGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyIGlzIG5vdCBsaWFibGUgZm9yIGFueSBlcnJvcnMgb3Igb21pc3Npb25zIGluIHRoZSBJbmZvcm1hdGlvbiBhbmQgc2hhbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGxvc3MsIGluanVyeSBvciBkYW1hZ2Ugb2YgYW55IGtpbmQgY2F1c2VkIGJ5IGl0cyB1c2UuIFRoZSBJbmZvcm1hdGlvbiBQcm92aWRlciBkb2VzIG5vdCBndWFyYW50ZWUgdGhlIGNvbnRpbnVlZCBzdXBwbHkgb2YgdGhlIEluZm9ybWF0aW9uLlxuXG5Hb3Zlcm5pbmcgTGF3XG5cblRoaXMgbGljZW5jZSBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBJbmZvcm1hdGlvbiBQcm92aWRlciBoYXMgaXRzIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcywgdW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgdGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyLlxuXG5EZWZpbml0aW9uc1xuXG5JbiB0aGlzIGxpY2VuY2UsIHRoZSB0ZXJtcyBiZWxvdyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6XG5cbiAgICdJbmZvcm1hdGlvbicgbWVhbnMgaW5mb3JtYXRpb24gcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBvciBieSBkYXRhYmFzZSByaWdodCAoZm9yIGV4YW1wbGUsIGxpdGVyYXJ5IGFuZCBhcnRpc3RpYyB3b3JrcywgY29udGVudCwgZGF0YSBhbmQgc291cmNlIGNvZGUpIG9mZmVyZWQgZm9yIHVzZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbmNlLlxuXG4gICAnSW5mb3JtYXRpb24gUHJvdmlkZXInIG1lYW5zIHRoZSBwZXJzb24gb3Igb3JnYW5pc2F0aW9uIHByb3ZpZGluZyB0aGUgSW5mb3JtYXRpb24gdW5kZXIgdGhpcyBsaWNlbmNlLlxuXG4gICAnTGljZW5zb3InIG1lYW5zIGFueSBJbmZvcm1hdGlvbiBQcm92aWRlciB3aG8gaGFzIHRoZSBhdXRob3JpdHkgdG8gb2ZmZXIgSW5mb3JtYXRpb24gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5jZS4gSXQgaW5jbHVkZXMgdGhlIENvbnRyb2xsZXIgb2YgSGVyIE1hamVzdHkncyBTdGF0aW9uZXJ5IE9mZmljZSwgd2hvIGhhcyB0aGUgYXV0aG9yaXR5IHRvIG9mZmVyIEluZm9ybWF0aW9uIHN1YmplY3QgdG8gQ3Jvd24gY29weXJpZ2h0IGFuZCBDcm93biBkYXRhYmFzZSByaWdodHMsIGFuZCBJbmZvcm1hdGlvbiBzdWJqZWN0IHRvIGNvcHlyaWdodCBhbmQgZGF0YWJhc2UgcmlnaHRzIHdoaWNoIGhhdmUgYmVlbiBhc3NpZ25lZCB0byBvciBhY3F1aXJlZCBieSB0aGUgQ3Jvd24sIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2VuY2UuXG5cbiAgICdVc2UnIG1lYW5zIGRvaW5nIGFueSBhY3Qgd2hpY2ggaXMgcmVzdHJpY3RlZCBieSBjb3B5cmlnaHQgb3IgZGF0YWJhc2UgcmlnaHQsIHdoZXRoZXIgaW4gdGhlIG9yaWdpbmFsIG1lZGl1bSBvciBpbiBhbnkgb3RoZXIgbWVkaXVtLCBhbmQgaW5jbHVkZXMgd2l0aG91dCBsaW1pdGF0aW9uIGRpc3RyaWJ1dGluZywgY29weWluZywgYWRhcHRpbmcsIG1vZGlmeWluZyBhcyBtYXkgYmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIHVzZSBpdCBpbiBhIGRpZmZlcmVudCBtb2RlIG9yIGZvcm1hdC5cblxuICAgJ1lvdScgbWVhbnMgdGhlIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uLCBvciBib2R5IG9mIHBlcnNvbnMgY29ycG9yYXRlIG9yIGluY29ycG9yYXRlLCBhY3F1aXJpbmcgcmlnaHRzIHVuZGVyIHRoaXMgbGljZW5jZS5cblxuQWJvdXQgdGhlIE9wZW4gR292ZXJubWVudCBMaWNlbmNlXG5cblRoZSBDb250cm9sbGVyIG9mIEhlciBNYWplc3R5J3MgU3RhdGlvbmVyeSBPZmZpY2UgKEhNU08pIGhhcyBkZXZlbG9wZWQgdGhpcyBsaWNlbmNlIGFzIGEgdG9vbCB0byBlbmFibGUgSW5mb3JtYXRpb24gUHJvdmlkZXJzIGluIHRoZSBwdWJsaWMgc2VjdG9yIHRvIGxpY2Vuc2UgdGhlIHVzZSBhbmQgcmUtdXNlIG9mIHRoZWlyIEluZm9ybWF0aW9uIHVuZGVyIGEgY29tbW9uIG9wZW4gbGljZW5jZS4gVGhlIENvbnRyb2xsZXIgaW52aXRlcyBwdWJsaWMgc2VjdG9yIGJvZGllcyBvd25pbmcgdGhlaXIgb3duIGNvcHlyaWdodCBhbmQgZGF0YWJhc2UgcmlnaHRzIHRvIHBlcm1pdCB0aGUgdXNlIG9mIHRoZWlyIEluZm9ybWF0aW9uIHVuZGVyIHRoaXMgbGljZW5jZS5cblxuVGhlIENvbnRyb2xsZXIgb2YgSE1TTyBoYXMgYXV0aG9yaXR5IHRvIGxpY2Vuc2UgSW5mb3JtYXRpb24gc3ViamVjdCB0byBjb3B5cmlnaHQgYW5kIGRhdGFiYXNlIHJpZ2h0IG93bmVkIGJ5IHRoZSBDcm93bi4gVGhlIGV4dGVudCBvZiB0aGUgQ29udHJvbGxlcidzIG9mZmVyIHRvIGxpY2Vuc2UgdGhpcyBJbmZvcm1hdGlvbiB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbmNlIGlzIHNldCBvdXQgb24gVGhlIE5hdGlvbmFsIEFyY2hpdmVzIHdlYnNpdGUuXG5cblRoaXMgaXMgdmVyc2lvbiAyLjAgb2YgdGhlIE9wZW4gR292ZXJubWVudCBMaWNlbmNlLiBUaGUgQ29udHJvbGxlciBvZiBITVNPIG1heSwgZnJvbSB0aW1lIHRvIHRpbWUsIGlzc3VlIG5ldyB2ZXJzaW9ucyBvZiB0aGUgT3BlbiBHb3Zlcm5tZW50IExpY2VuY2UuIElmIHlvdSBhcmUgYWxyZWFkeSB1c2luZyBJbmZvcm1hdGlvbiB1bmRlciBhIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIE9wZW4gR292ZXJubWVudCBMaWNlbmNlLCB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbmNlIHdpbGwgY29udGludWUgdG8gYXBwbHkuXG5cblRoZXNlIHRlcm1zIGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gTGljZW5zZSA0LjAgYW5kIHRoZSBPcGVuIERhdGEgQ29tbW9ucyBBdHRyaWJ1dGlvbiBMaWNlbnNlLCBib3RoIG9mIHdoaWNoIGxpY2Vuc2UgY29weXJpZ2h0IGFuZCBkYXRhYmFzZSByaWdodHMuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHRoZSBJbmZvcm1hdGlvbiBpcyBhZGFwdGVkIGFuZCBsaWNlbnNlZCB1bmRlciBlaXRoZXIgb2YgdGhvc2UgbGljZW5jZXMsIHlvdSBhdXRvbWF0aWNhbGx5IHNhdGlzZnkgdGhlIGNvbmRpdGlvbnMgb2YgdGhlIE9HTCB3aGVuIHlvdSBjb21wbHkgd2l0aCB0aGUgb3RoZXIgbGljZW5jZS4gVGhlIE9HTHYyLjAgaXMgT3BlbiBEZWZpbml0aW9uIGNvbXBsaWFudC5cblxuRnVydGhlciBjb250ZXh0LCBiZXN0IHByYWN0aWNlIGFuZCBndWlkYW5jZSBjYW4gYmUgZm91bmQgaW4gdGhlIFVLIEdvdmVybm1lbnQgTGljZW5zaW5nIEZyYW1ld29yayBzZWN0aW9uIG9uIFRoZSBOYXRpb25hbCBBcmNoaXZlcyB3ZWJzaXRlLiJdLCJsaWNlbnNlSWRzIjpbIk9HTC1VSy0yLjAiXSwia2V5d29yZHMiOlsidjIgMCB5b3UiLCJ2MiAwIHRoZXNlIiwiMCB0aGVzZSBhcmUiLCJ0aGUgaW5mb3JtYXRpb24gbm9uIiwiaW5mb3JtYXRpb24gbm9uIHdhcnJhbnR5Iiwibm9uIHdhcnJhbnR5IHRoZSIsImluZm9ybWF0aW9uIHByb3ZpZGVyIHdobyIsInByb3ZpZGVyIHdobyBoYXMiLCJ0aGlzIGxpY2VuY2UgaXQiLCJsaWNlbmNlIGl0IGluY2x1ZGVzIiwiaXQgaW5jbHVkZXMgdGhlIiwiaW5jbHVkZXMgdGhlIGNvbnRyb2xsZXIiLCJkYXRhYmFzZSByaWdodHMgd2hpY2giLCJyaWdodHMgd2hpY2ggaGF2ZSIsImhhdmUgYmVlbiBhc3NpZ25lZCIsInNldCBvdXQgb24iLCJvdXQgb24gdGhlIiwiYXJjaGl2ZXMgd2Vic2l0ZSB0aGlzIiwid2Vic2l0ZSB0aGlzIGlzIiwibGljZW5jZSB0aGUgb2dsdjIiLCJ0aGUgb2dsdjIgMCIsIm9nbHYyIDAgaXMiLCJsaWNlbmNlIHYyIDAgeW91IiwidjIgMCB5b3UgYXJlIiwiYXBwbGljYXRpb24geW91IG1heSB1c2UiLCJtYXkgdXNlIHRoZSBmb2xsb3dpbmciLCJsaWNlbmNlIHYyIDAgdGhlc2UiLCJ2MiAwIHRoZXNlIGFyZSIsIjAgdGhlc2UgYXJlIGltcG9ydGFudCIsIm9mIHRoZSBpbmZvcm1hdGlvbiBub24iLCJ0aGUgaW5mb3JtYXRpb24gbm9uIHdhcnJhbnR5IiwiaW5mb3JtYXRpb24gbm9uIHdhcnJhbnR5IHRoZSIsIm5vbiB3YXJyYW50eSB0aGUgaW5mb3JtYXRpb24iLCJhbnkgaW5mb3JtYXRpb24gcHJvdmlkZXIgd2hvIiwiaW5mb3JtYXRpb24gcHJvdmlkZXIgd2hvIGhhcyIsInByb3ZpZGVyIHdobyBoYXMgdGhlIiwib2YgdGhpcyBsaWNlbmNlIGl0IiwidGhpcyBsaWNlbmNlIGl0IGluY2x1ZGVzIiwibGljZW5jZSBpdCBpbmNsdWRlcyB0aGUiLCJpdCBpbmNsdWRlcyB0aGUgY29udHJvbGxlciIsImluY2x1ZGVzIHRoZSBjb250cm9sbGVyIG9mIiwiYW5kIGRhdGFiYXNlIHJpZ2h0cyB3aGljaCIsImRhdGFiYXNlIHJpZ2h0cyB3aGljaCBoYXZlIiwicmlnaHRzIHdoaWNoIGhhdmUgYmVlbiIsIndoaWNoIGhhdmUgYmVlbiBhc3NpZ25lZCIsImhhdmUgYmVlbiBhc3NpZ25lZCB0byIsImlzIHNldCBvdXQgb24iLCJzZXQgb3V0IG9uIHRoZSIsIm91dCBvbiB0aGUgbmF0aW9uYWwiLCJuYXRpb25hbCBhcmNoaXZlcyB3ZWJzaXRlIHRoaXMiLCJhcmNoaXZlcyB3ZWJzaXRlIHRoaXMgaXMiLCJ3ZWJzaXRlIHRoaXMgaXMgdmVyc2lvbiIsIm90aGVyIGxpY2VuY2UgdGhlIG9nbHYyIiwibGljZW5jZSB0aGUgb2dsdjIgMCIsInRoZSBvZ2x2MiAwIGlzIiwib2dsdjIgMCBpcyBvcGVuIiwiZ292ZXJubWVudCBsaWNlbmNlIHYyIDAgeW91IiwibGljZW5jZSB2MiAwIHlvdSBhcmUiLCJ2MiAwIHlvdSBhcmUgZW5jb3VyYWdlZCIsIm9yIGFwcGxpY2F0aW9uIHlvdSBtYXkgdXNlIiwiYXBwbGljYXRpb24geW91IG1heSB1c2UgdGhlIiwieW91IG1heSB1c2UgdGhlIGZvbGxvd2luZyIsIm1heSB1c2UgdGhlIGZvbGxvd2luZyBjb250YWlucyIsInRoZSBvcGVuIGdvdmVybm1lbnQgbGljZW5jZSB2MiIsImdvdmVybm1lbnQgbGljZW5jZSB2MiAwIHRoZXNlIiwibGljZW5jZSB2MiAwIHRoZXNlIGFyZSIsInYyIDAgdGhlc2UgYXJlIGltcG9ydGFudCIsIjAgdGhlc2UgYXJlIGltcG9ydGFudCBjb25kaXRpb25zIiwidXNlIG9mIHRoZSBpbmZvcm1hdGlvbiBub24iLCJvZiB0aGUgaW5mb3JtYXRpb24gbm9uIHdhcnJhbnR5IiwidGhlIGluZm9ybWF0aW9uIG5vbiB3YXJyYW50eSB0aGUiLCJpbmZvcm1hdGlvbiBub24gd2FycmFudHkgdGhlIGluZm9ybWF0aW9uIiwibm9uIHdhcnJhbnR5IHRoZSBpbmZvcm1hdGlvbiBpcyIsIm1lYW5zIGFueSBpbmZvcm1hdGlvbiBwcm92aWRlciB3aG8iLCJhbnkgaW5mb3JtYXRpb24gcHJvdmlkZXIgd2hvIGhhcyIsImluZm9ybWF0aW9uIHByb3ZpZGVyIHdobyBoYXMgdGhlIiwicHJvdmlkZXIgd2hvIGhhcyB0aGUgYXV0aG9yaXR5IiwidGVybXMgb2YgdGhpcyBsaWNlbmNlIGl0Iiwib2YgdGhpcyBsaWNlbmNlIGl0IGluY2x1ZGVzIiwidGhpcyBsaWNlbmNlIGl0IGluY2x1ZGVzIHRoZSIsImxpY2VuY2UgaXQgaW5jbHVkZXMgdGhlIGNvbnRyb2xsZXIiLCJpdCBpbmNsdWRlcyB0aGUgY29udHJvbGxlciBvZiIsImluY2x1ZGVzIHRoZSBjb250cm9sbGVyIG9mIGhlciIsInRvIGNvcHlyaWdodCBhbmQgZGF0YWJhc2UgcmlnaHRzIiwiY29weXJpZ2h0IGFuZCBkYXRhYmFzZSByaWdodHMgd2hpY2giLCJhbmQgZGF0YWJhc2UgcmlnaHRzIHdoaWNoIGhhdmUiLCJkYXRhYmFzZSByaWdodHMgd2hpY2ggaGF2ZSBiZWVuIiwicmlnaHRzIHdoaWNoIGhhdmUgYmVlbiBhc3NpZ25lZCIsIndoaWNoIGhhdmUgYmVlbiBhc3NpZ25lZCB0byIsImhhdmUgYmVlbiBhc3NpZ25lZCB0byBvciIsImxpY2VuY2UgaXMgc2V0IG91dCBvbiIsImlzIHNldCBvdXQgb24gdGhlIiwic2V0IG91dCBvbiB0aGUgbmF0aW9uYWwiLCJvdXQgb24gdGhlIG5hdGlvbmFsIGFyY2hpdmVzIiwidGhlIG5hdGlvbmFsIGFyY2hpdmVzIHdlYnNpdGUgdGhpcyIsIm5hdGlvbmFsIGFyY2hpdmVzIHdlYnNpdGUgdGhpcyBpcyIsImFyY2hpdmVzIHdlYnNpdGUgdGhpcyBpcyB2ZXJzaW9uIiwid2Vic2l0ZSB0aGlzIGlzIHZlcnNpb24gMiIsInRoZSBvdGhlciBsaWNlbmNlIHRoZSBvZ2x2MiIsIm90aGVyIGxpY2VuY2UgdGhlIG9nbHYyIDAiLCJsaWNlbmNlIHRoZSBvZ2x2MiAwIGlzIiwidGhlIG9nbHYyIDAgaXMgb3BlbiIsIm9nbHYyIDAgaXMgb3BlbiBkZWZpbml0aW9uIl19LHsibGljZW5zZVRleHRzIjpbIk9wZW4gR292ZXJubWVudCBMaWNlbmNlIHYzLjBcblxuWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSBhbmQgcmUtdXNlIHRoZSBJbmZvcm1hdGlvbiB0aGF0IGlzIGF2YWlsYWJsZSB1bmRlciB0aGlzIGxpY2VuY2UgZnJlZWx5IGFuZCBmbGV4aWJseSwgd2l0aCBvbmx5IGEgZmV3IGNvbmRpdGlvbnMuXG5cblVzaW5nIEluZm9ybWF0aW9uIHVuZGVyIHRoaXMgbGljZW5jZVxuXG5Vc2Ugb2YgY29weXJpZ2h0IGFuZCBkYXRhYmFzZSByaWdodCBtYXRlcmlhbCBleHByZXNzbHkgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBsaWNlbmNlICh0aGUgJ0luZm9ybWF0aW9uJykgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYmVsb3cuXG5cblRoZSBMaWNlbnNvciBncmFudHMgeW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCwgbm9uLWV4Y2x1c2l2ZSBsaWNlbmNlIHRvIHVzZSB0aGUgSW5mb3JtYXRpb24gc3ViamVjdCB0byB0aGUgY29uZGl0aW9ucyBiZWxvdy5cblxuVGhpcyBsaWNlbmNlIGRvZXMgbm90IGFmZmVjdCB5b3VyIGZyZWVkb20gdW5kZXIgZmFpciBkZWFsaW5nIG9yIGZhaXIgdXNlIG9yIGFueSBvdGhlciBjb3B5cmlnaHQgb3IgZGF0YWJhc2UgcmlnaHQgZXhjZXB0aW9ucyBhbmQgbGltaXRhdGlvbnMuXG5cbllvdSBhcmUgZnJlZSB0bzpcblxuICAgY29weSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBhbmQgdHJhbnNtaXQgdGhlIEluZm9ybWF0aW9uO1xuXG4gICBhZGFwdCB0aGUgSW5mb3JtYXRpb247XG5cbiAgIGV4cGxvaXQgdGhlIEluZm9ybWF0aW9uIGNvbW1lcmNpYWxseSBhbmQgbm9uLWNvbW1lcmNpYWxseSBmb3IgZXhhbXBsZSwgYnkgY29tYmluaW5nIGl0IHdpdGggb3RoZXIgSW5mb3JtYXRpb24sIG9yIGJ5IGluY2x1ZGluZyBpdCBpbiB5b3VyIG93biBwcm9kdWN0IG9yIGFwcGxpY2F0aW9uLlxuXG5Zb3UgbXVzdCAod2hlcmUgeW91IGRvIGFueSBvZiB0aGUgYWJvdmUpOlxuXG4gICBhY2tub3dsZWRnZSB0aGUgc291cmNlIG9mIHRoZSBJbmZvcm1hdGlvbiBpbiB5b3VyIHByb2R1Y3Qgb3IgYXBwbGljYXRpb24gYnkgaW5jbHVkaW5nIG9yIGxpbmtpbmcgdG8gYW55IGF0dHJpYnV0aW9uIHN0YXRlbWVudCBzcGVjaWZpZWQgYnkgdGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyKHMpIGFuZCwgd2hlcmUgcG9zc2libGUsIHByb3ZpZGUgYSBsaW5rIHRvIHRoaXMgbGljZW5jZTtcblxuICAgSWYgdGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyIGRvZXMgbm90IHByb3ZpZGUgYSBzcGVjaWZpYyBhdHRyaWJ1dGlvbiBzdGF0ZW1lbnQsIHlvdSBtdXN0IHVzZSB0aGUgZm9sbG93aW5nOlxuXG4gICBDb250YWlucyBwdWJsaWMgc2VjdG9yIGluZm9ybWF0aW9uIGxpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIEdvdmVybm1lbnQgTGljZW5jZSB2My4wLlxuXG4gICBJZiB5b3UgYXJlIHVzaW5nIEluZm9ybWF0aW9uIGZyb20gc2V2ZXJhbCBJbmZvcm1hdGlvbiBQcm92aWRlcnMgYW5kIGxpc3RpbmcgbXVsdGlwbGUgYXR0cmlidXRpb25zIGlzIG5vdCBwcmFjdGljYWwgaW4geW91ciBwcm9kdWN0IG9yIGFwcGxpY2F0aW9uLCB5b3UgbWF5IGluY2x1ZGUgYSBVUkkgb3IgaHlwZXJsaW5rIHRvIGEgcmVzb3VyY2UgdGhhdCBjb250YWlucyB0aGUgcmVxdWlyZWQgYXR0cmlidXRpb24gc3RhdGVtZW50cy5cblxuICAgVGhlc2UgYXJlIGltcG9ydGFudCBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5jZSBhbmQgaWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhlbSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8geW91IHVuZGVyIHRoaXMgbGljZW5jZSwgb3IgYW55IHNpbWlsYXIgbGljZW5jZSBncmFudGVkIGJ5IHRoZSBMaWNlbnNvciwgd2lsbCBlbmQgYXV0b21hdGljYWxseS5cblxuRXhlbXB0aW9uc1xuXG5UaGlzIGxpY2VuY2UgZG9lcyBub3QgY292ZXI6XG5cbiAgIHBlcnNvbmFsIGRhdGEgaW4gdGhlIEluZm9ybWF0aW9uO1xuXG4gICBJbmZvcm1hdGlvbiB0aGF0IGhhcyBub3QgYmVlbiBhY2Nlc3NlZCBieSB3YXkgb2YgcHVibGljYXRpb24gb3IgZGlzY2xvc3VyZSB1bmRlciBpbmZvcm1hdGlvbiBhY2Nlc3MgbGVnaXNsYXRpb24gKGluY2x1ZGluZyB0aGUgRnJlZWRvbSBvZiBJbmZvcm1hdGlvbiBBY3RzIGZvciB0aGUgVUsgYW5kIFNjb3RsYW5kKSBieSBvciB3aXRoIHRoZSBjb25zZW50IG9mIHRoZSBJbmZvcm1hdGlvbiBQcm92aWRlcjtcblxuICAgZGVwYXJ0bWVudGFsIG9yIHB1YmxpYyBzZWN0b3Igb3JnYW5pc2F0aW9uIGxvZ29zLCBjcmVzdHMgYW5kIHRoZSBSb3lhbCBBcm1zIGV4Y2VwdCB3aGVyZSB0aGV5IGZvcm0gYW4gaW50ZWdyYWwgcGFydCBvZiBhIGRvY3VtZW50IG9yIGRhdGFzZXQ7XG5cbiAgIG1pbGl0YXJ5IGluc2lnbmlhO1xuXG4gICB0aGlyZCBwYXJ0eSByaWdodHMgdGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyIGlzIG5vdCBhdXRob3Jpc2VkIHRvIGxpY2Vuc2U7XG5cbiAgIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIGluY2x1ZGluZyBwYXRlbnRzLCB0cmFkZSBtYXJrcywgYW5kIGRlc2lnbiByaWdodHM7IGFuZFxuXG4gICBpZGVudGl0eSBkb2N1bWVudHMgc3VjaCBhcyB0aGUgQnJpdGlzaCBQYXNzcG9ydFxuXG5Ob24tZW5kb3JzZW1lbnRcblxuVGhpcyBsaWNlbmNlIGRvZXMgbm90IGdyYW50IHlvdSBhbnkgcmlnaHQgdG8gdXNlIHRoZSBJbmZvcm1hdGlvbiBpbiBhIHdheSB0aGF0IHN1Z2dlc3RzIGFueSBvZmZpY2lhbCBzdGF0dXMgb3IgdGhhdCB0aGUgSW5mb3JtYXRpb24gUHJvdmlkZXIgYW5kL29yIExpY2Vuc29yIGVuZG9yc2UgeW91IG9yIHlvdXIgdXNlIG9mIHRoZSBJbmZvcm1hdGlvbi5cblxuTm8gd2FycmFudHlcblxuVGhlIEluZm9ybWF0aW9uIGlzIGxpY2Vuc2VkICdhcyBpcycgYW5kIHRoZSBJbmZvcm1hdGlvbiBQcm92aWRlciBhbmQvb3IgTGljZW5zb3IgZXhjbHVkZXMgYWxsIHJlcHJlc2VudGF0aW9ucywgd2FycmFudGllcywgb2JsaWdhdGlvbnMgYW5kIGxpYWJpbGl0aWVzIGluIHJlbGF0aW9uIHRvIHRoZSBJbmZvcm1hdGlvbiB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy5cblxuVGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyIGFuZC9vciBMaWNlbnNvciBhcmUgbm90IGxpYWJsZSBmb3IgYW55IGVycm9ycyBvciBvbWlzc2lvbnMgaW4gdGhlIEluZm9ybWF0aW9uIGFuZCBzaGFsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgbG9zcywgaW5qdXJ5IG9yIGRhbWFnZSBvZiBhbnkga2luZCBjYXVzZWQgYnkgaXRzIHVzZS4gVGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyIGRvZXMgbm90IGd1YXJhbnRlZSB0aGUgY29udGludWVkIHN1cHBseSBvZiB0aGUgSW5mb3JtYXRpb24uXG5cbkdvdmVybmluZyBMYXdcblxuVGhpcyBsaWNlbmNlIGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIEluZm9ybWF0aW9uIFByb3ZpZGVyIGhhcyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzLCB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBieSB0aGUgSW5mb3JtYXRpb24gUHJvdmlkZXIuXG5cbkRlZmluaXRpb25zXG5cbkluIHRoaXMgbGljZW5jZSwgdGhlIHRlcm1zIGJlbG93IGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nczpcblxuICAgJ0luZm9ybWF0aW9uJyBtZWFucyBpbmZvcm1hdGlvbiBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IG9yIGJ5IGRhdGFiYXNlIHJpZ2h0IChmb3IgZXhhbXBsZSwgbGl0ZXJhcnkgYW5kIGFydGlzdGljIHdvcmtzLCBjb250ZW50LCBkYXRhIGFuZCBzb3VyY2UgY29kZSkgb2ZmZXJlZCBmb3IgdXNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2VuY2UuXG5cbiAgICdJbmZvcm1hdGlvbiBQcm92aWRlcicgbWVhbnMgdGhlIHBlcnNvbiBvciBvcmdhbmlzYXRpb24gcHJvdmlkaW5nIHRoZSBJbmZvcm1hdGlvbiB1bmRlciB0aGlzIGxpY2VuY2UuXG5cbiAgICdMaWNlbnNvcicgbWVhbnMgYW55IEluZm9ybWF0aW9uIFByb3ZpZGVyIHdoaWNoIGhhcyB0aGUgYXV0aG9yaXR5IHRvIG9mZmVyIEluZm9ybWF0aW9uIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2VuY2Ugb3IgdGhlIEtlZXBlciBvZiBQdWJsaWMgUmVjb3Jkcywgd2hvIGhhcyB0aGUgYXV0aG9yaXR5IHRvIG9mZmVyIEluZm9ybWF0aW9uIHN1YmplY3QgdG8gQ3Jvd24gY29weXJpZ2h0IGFuZCBDcm93biBkYXRhYmFzZSByaWdodHMgYW5kIEluZm9ybWF0aW9uIHN1YmplY3QgdG8gY29weXJpZ2h0IGFuZCBkYXRhYmFzZSByaWdodCB0aGF0IGhhcyBiZWVuIGFzc2lnbmVkIHRvIG9yIGFjcXVpcmVkIGJ5IHRoZSBDcm93biwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5jZS5cblxuICAgJ1VzZScgbWVhbnMgZG9pbmcgYW55IGFjdCB3aGljaCBpcyByZXN0cmljdGVkIGJ5IGNvcHlyaWdodCBvciBkYXRhYmFzZSByaWdodCwgd2hldGhlciBpbiB0aGUgb3JpZ2luYWwgbWVkaXVtIG9yIGluIGFueSBvdGhlciBtZWRpdW0sIGFuZCBpbmNsdWRlcyB3aXRob3V0IGxpbWl0YXRpb24gZGlzdHJpYnV0aW5nLCBjb3B5aW5nLCBhZGFwdGluZywgbW9kaWZ5aW5nIGFzIG1heSBiZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gdXNlIGl0IGluIGEgZGlmZmVyZW50IG1vZGUgb3IgZm9ybWF0LlxuXG4gICAnWW91JywgJ3lvdScgYW5kICd5b3VyJyBtZWFucyB0aGUgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24sIG9yIGJvZHkgb2YgcGVyc29ucyBjb3Jwb3JhdGUgb3IgaW5jb3Jwb3JhdGUsIGFjcXVpcmluZyByaWdodHMgaW4gdGhlIEluZm9ybWF0aW9uICh3aGV0aGVyIHRoZSBJbmZvcm1hdGlvbiBpcyBvYnRhaW5lZCBkaXJlY3RseSBmcm9tIHRoZSBMaWNlbnNvciBvciBvdGhlcndpc2UpIHVuZGVyIHRoaXMgbGljZW5jZS5cblxuQWJvdXQgdGhlIE9wZW4gR292ZXJubWVudCBMaWNlbmNlXG5cblRoZSBOYXRpb25hbCBBcmNoaXZlcyBoYXMgZGV2ZWxvcGVkIHRoaXMgbGljZW5jZSBhcyBhIHRvb2wgdG8gZW5hYmxlIEluZm9ybWF0aW9uIFByb3ZpZGVycyBpbiB0aGUgcHVibGljIHNlY3RvciB0byBsaWNlbnNlIHRoZSB1c2UgYW5kIHJlLXVzZSBvZiB0aGVpciBJbmZvcm1hdGlvbiB1bmRlciBhIGNvbW1vbiBvcGVuIGxpY2VuY2UuIFRoZSBOYXRpb25hbCBBcmNoaXZlcyBpbnZpdGVzIHB1YmxpYyBzZWN0b3IgYm9kaWVzIG93bmluZyB0aGVpciBvd24gY29weXJpZ2h0IGFuZCBkYXRhYmFzZSByaWdodHMgdG8gcGVybWl0IHRoZSB1c2Ugb2YgdGhlaXIgSW5mb3JtYXRpb24gdW5kZXIgdGhpcyBsaWNlbmNlLlxuXG5UaGUgS2VlcGVyIG9mIHRoZSBQdWJsaWMgUmVjb3JkcyBoYXMgYXV0aG9yaXR5IHRvIGxpY2Vuc2UgSW5mb3JtYXRpb24gc3ViamVjdCB0byBjb3B5cmlnaHQgYW5kIGRhdGFiYXNlIHJpZ2h0IG93bmVkIGJ5IHRoZSBDcm93bi4gVGhlIGV4dGVudCBvZiB0aGUgb2ZmZXIgdG8gbGljZW5zZSB0aGlzIEluZm9ybWF0aW9uIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2VuY2UgaXMgc2V0IG91dCBpbiB0aGUgVUsgR292ZXJubWVudCBMaWNlbnNpbmcgRnJhbWV3b3JrLlxuXG5UaGlzIGlzIHZlcnNpb24gMy4wIG9mIHRoZSBPcGVuIEdvdmVybm1lbnQgTGljZW5jZS4gVGhlIE5hdGlvbmFsIEFyY2hpdmVzIG1heSwgZnJvbSB0aW1lIHRvIHRpbWUsIGlzc3VlIG5ldyB2ZXJzaW9ucyBvZiB0aGUgT3BlbiBHb3Zlcm5tZW50IExpY2VuY2UuIElmIHlvdSBhcmUgYWxyZWFkeSB1c2luZyBJbmZvcm1hdGlvbiB1bmRlciBhIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIE9wZW4gR292ZXJubWVudCBMaWNlbmNlLCB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbmNlIHdpbGwgY29udGludWUgdG8gYXBwbHkuXG5cblRoZXNlIHRlcm1zIGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gTGljZW5zZSA0LjAgYW5kIHRoZSBPcGVuIERhdGEgQ29tbW9ucyBBdHRyaWJ1dGlvbiBMaWNlbnNlLCBib3RoIG9mIHdoaWNoIGxpY2Vuc2UgY29weXJpZ2h0IGFuZCBkYXRhYmFzZSByaWdodHMuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHRoZSBJbmZvcm1hdGlvbiBpcyBhZGFwdGVkIGFuZCBsaWNlbnNlZCB1bmRlciBlaXRoZXIgb2YgdGhvc2UgbGljZW5jZXMsIHlvdSBhdXRvbWF0aWNhbGx5IHNhdGlzZnkgdGhlIGNvbmRpdGlvbnMgb2YgdGhlIE9HTCB3aGVuIHlvdSBjb21wbHkgd2l0aCB0aGUgb3RoZXIgbGljZW5jZS4gVGhlIE9HTHYzLjAgaXMgT3BlbiBEZWZpbml0aW9uIGNvbXBsaWFudC5cblxuRnVydGhlciBjb250ZXh0LCBiZXN0IHByYWN0aWNlIGFuZCBndWlkYW5jZSBjYW4gYmUgZm91bmQgaW4gdGhlIFVLIEdvdmVybm1lbnQgTGljZW5zaW5nIEZyYW1ld29yayBzZWN0aW9uIG9uIFRoZSBOYXRpb25hbCBBcmNoaXZlcyB3ZWJzaXRlLiJdLCJsaWNlbnNlSWRzIjpbIk9HTC1VSy0zLjAiXSwia2V5d29yZHMiOlsidjMgMCB5b3UiLCJvciBhcHBsaWNhdGlvbiBieSIsImFwcGxpY2F0aW9uIGJ5IGluY2x1ZGluZyIsImJ5IGluY2x1ZGluZyBvciIsImluY2x1ZGluZyBvciBsaW5raW5nIiwib3IgbGlua2luZyB0byIsImxpbmtpbmcgdG8gYW55IiwidG8gYW55IGF0dHJpYnV0aW9uIiwidjMgMCBpZiIsImF0dHJpYnV0aW9uIHN0YXRlbWVudHMgdGhlc2UiLCJzdGF0ZW1lbnRzIHRoZXNlIGFyZSIsIm9yIGxpY2Vuc29yIGV4Y2x1ZGVzIiwibGljZW5zb3IgZXhjbHVkZXMgYWxsIiwib3IgbGljZW5zb3IgYXJlIiwibGljZW5zb3IgYXJlIG5vdCIsImFyZSBub3QgbGlhYmxlIiwia2VlcGVyIG9mIHB1YmxpYyIsIm9mIHB1YmxpYyByZWNvcmRzIiwiZm9ybWF0IHlvdSB5b3UiLCJ5b3UgeW91IGFuZCIsInlvdXIgbWVhbnMgdGhlIiwiYWNxdWlyaW5nIHJpZ2h0cyBpbiIsInRoZSBpbmZvcm1hdGlvbiB3aGV0aGVyIiwiaW5mb3JtYXRpb24gd2hldGhlciB0aGUiLCJ3aGV0aGVyIHRoZSBpbmZvcm1hdGlvbiIsImluZm9ybWF0aW9uIGlzIG9idGFpbmVkIiwiaXMgb2J0YWluZWQgZGlyZWN0bHkiLCJvYnRhaW5lZCBkaXJlY3RseSBmcm9tIiwibGljZW5zb3Igb3Igb3RoZXJ3aXNlIiwib3RoZXJ3aXNlIHVuZGVyIHRoaXMiLCJuYXRpb25hbCBhcmNoaXZlcyBoYXMiLCJhcmNoaXZlcyBoYXMgZGV2ZWxvcGVkIiwibmF0aW9uYWwgYXJjaGl2ZXMgaW52aXRlcyIsImFyY2hpdmVzIGludml0ZXMgcHVibGljIiwibGljZW5jZSB0aGUga2VlcGVyIiwicHVibGljIHJlY29yZHMgaGFzIiwicmVjb3JkcyBoYXMgYXV0aG9yaXR5Iiwib2YgdGhlIG9mZmVyIiwiaXMgdmVyc2lvbiAzIiwiMyAwIG9mIiwibmF0aW9uYWwgYXJjaGl2ZXMgbWF5IiwiYXJjaGl2ZXMgbWF5IGZyb20iLCJsaWNlbmNlIHRoZSBvZ2x2MyIsInRoZSBvZ2x2MyAwIiwib2dsdjMgMCBpcyIsImxpY2VuY2UgdjMgMCB5b3UiLCJ2MyAwIHlvdSBhcmUiLCJ0aGUgaW5mb3JtYXRpb24gaW4geW91ciIsImluZm9ybWF0aW9uIGluIHlvdXIgcHJvZHVjdCIsInByb2R1Y3Qgb3IgYXBwbGljYXRpb24gYnkiLCJvciBhcHBsaWNhdGlvbiBieSBpbmNsdWRpbmciLCJhcHBsaWNhdGlvbiBieSBpbmNsdWRpbmcgb3IiLCJieSBpbmNsdWRpbmcgb3IgbGlua2luZyIsImluY2x1ZGluZyBvciBsaW5raW5nIHRvIiwib3IgbGlua2luZyB0byBhbnkiLCJsaW5raW5nIHRvIGFueSBhdHRyaWJ1dGlvbiIsInRvIGFueSBhdHRyaWJ1dGlvbiBzdGF0ZW1lbnQiLCJsaWNlbmNlIHYzIDAgaWYiLCJ2MyAwIGlmIHlvdSIsInJlcXVpcmVkIGF0dHJpYnV0aW9uIHN0YXRlbWVudHMgdGhlc2UiLCJhdHRyaWJ1dGlvbiBzdGF0ZW1lbnRzIHRoZXNlIGFyZSIsInN0YXRlbWVudHMgdGhlc2UgYXJlIGltcG9ydGFudCIsImFuZCBvciBsaWNlbnNvciBleGNsdWRlcyIsIm9yIGxpY2Vuc29yIGV4Y2x1ZGVzIGFsbCIsImxpY2Vuc29yIGV4Y2x1ZGVzIGFsbCByZXByZXNlbnRhdGlvbnMiLCJhbmQgb3IgbGljZW5zb3IgYXJlIiwib3IgbGljZW5zb3IgYXJlIG5vdCIsImxpY2Vuc29yIGFyZSBub3QgbGlhYmxlIiwiYXJlIG5vdCBsaWFibGUgZm9yIiwidGhlIGtlZXBlciBvZiBwdWJsaWMiLCJrZWVwZXIgb2YgcHVibGljIHJlY29yZHMiLCJvZiBwdWJsaWMgcmVjb3JkcyB3aG8iLCJvciBmb3JtYXQgeW91IHlvdSIsImZvcm1hdCB5b3UgeW91IGFuZCIsInlvdSB5b3UgYW5kIHlvdXIiLCJhbmQgeW91ciBtZWFucyB0aGUiLCJ5b3VyIG1lYW5zIHRoZSBuYXR1cmFsIiwiaW5jb3Jwb3JhdGUgYWNxdWlyaW5nIHJpZ2h0cyBpbiIsImFjcXVpcmluZyByaWdodHMgaW4gdGhlIiwicmlnaHRzIGluIHRoZSBpbmZvcm1hdGlvbiIsImluIHRoZSBpbmZvcm1hdGlvbiB3aGV0aGVyIiwidGhlIGluZm9ybWF0aW9uIHdoZXRoZXIgdGhlIiwiaW5mb3JtYXRpb24gd2hldGhlciB0aGUgaW5mb3JtYXRpb24iLCJ3aGV0aGVyIHRoZSBpbmZvcm1hdGlvbiBpcyIsInRoZSBpbmZvcm1hdGlvbiBpcyBvYnRhaW5lZCIsImluZm9ybWF0aW9uIGlzIG9idGFpbmVkIGRpcmVjdGx5IiwiaXMgb2J0YWluZWQgZGlyZWN0bHkgZnJvbSIsIm9idGFpbmVkIGRpcmVjdGx5IGZyb20gdGhlIiwiZGlyZWN0bHkgZnJvbSB0aGUgbGljZW5zb3IiLCJmcm9tIHRoZSBsaWNlbnNvciBvciIsInRoZSBsaWNlbnNvciBvciBvdGhlcndpc2UiLCJsaWNlbnNvciBvciBvdGhlcndpc2UgdW5kZXIiLCJvciBvdGhlcndpc2UgdW5kZXIgdGhpcyIsIm90aGVyd2lzZSB1bmRlciB0aGlzIGxpY2VuY2UiLCJ0aGUgbmF0aW9uYWwgYXJjaGl2ZXMgaGFzIiwibmF0aW9uYWwgYXJjaGl2ZXMgaGFzIGRldmVsb3BlZCIsImFyY2hpdmVzIGhhcyBkZXZlbG9wZWQgdGhpcyIsIm9wZW4gbGljZW5jZSB0aGUgbmF0aW9uYWwiLCJ0aGUgbmF0aW9uYWwgYXJjaGl2ZXMgaW52aXRlcyIsIm5hdGlvbmFsIGFyY2hpdmVzIGludml0ZXMgcHVibGljIiwiYXJjaGl2ZXMgaW52aXRlcyBwdWJsaWMgc2VjdG9yIiwidGhpcyBsaWNlbmNlIHRoZSBrZWVwZXIiLCJsaWNlbmNlIHRoZSBrZWVwZXIgb2YiLCJ0aGUgcHVibGljIHJlY29yZHMgaGFzIiwicHVibGljIHJlY29yZHMgaGFzIGF1dGhvcml0eSIsInJlY29yZHMgaGFzIGF1dGhvcml0eSB0byIsImV4dGVudCBvZiB0aGUgb2ZmZXIiLCJvZiB0aGUgb2ZmZXIgdG8iLCJ0aGUgb2ZmZXIgdG8gbGljZW5zZSIsInRoaXMgaXMgdmVyc2lvbiAzIiwiaXMgdmVyc2lvbiAzIDAiLCJ2ZXJzaW9uIDMgMCBvZiIsIjMgMCBvZiB0aGUiLCJ0aGUgbmF0aW9uYWwgYXJjaGl2ZXMgbWF5IiwibmF0aW9uYWwgYXJjaGl2ZXMgbWF5IGZyb20iLCJhcmNoaXZlcyBtYXkgZnJvbSB0aW1lIiwib3RoZXIgbGljZW5jZSB0aGUgb2dsdjMiLCJsaWNlbmNlIHRoZSBvZ2x2MyAwIiwidGhlIG9nbHYzIDAgaXMiLCJvZ2x2MyAwIGlzIG9wZW4iLCJnb3Zlcm5tZW50IGxpY2VuY2UgdjMgMCB5b3UiLCJsaWNlbmNlIHYzIDAgeW91IGFyZSIsInYzIDAgeW91IGFyZSBlbmNvdXJhZ2VkIiwic291cmNlIG9mIHRoZSBpbmZvcm1hdGlvbiBpbiIsIm9mIHRoZSBpbmZvcm1hdGlvbiBpbiB5b3VyIiwidGhlIGluZm9ybWF0aW9uIGluIHlvdXIgcHJvZHVjdCIsImluZm9ybWF0aW9uIGluIHlvdXIgcHJvZHVjdCBvciIsInlvdXIgcHJvZHVjdCBvciBhcHBsaWNhdGlvbiBieSIsInByb2R1Y3Qgb3IgYXBwbGljYXRpb24gYnkgaW5jbHVkaW5nIiwib3IgYXBwbGljYXRpb24gYnkgaW5jbHVkaW5nIG9yIiwiYXBwbGljYXRpb24gYnkgaW5jbHVkaW5nIG9yIGxpbmtpbmciLCJieSBpbmNsdWRpbmcgb3IgbGlua2luZyB0byIsImluY2x1ZGluZyBvciBsaW5raW5nIHRvIGFueSIsIm9yIGxpbmtpbmcgdG8gYW55IGF0dHJpYnV0aW9uIiwibGlua2luZyB0byBhbnkgYXR0cmlidXRpb24gc3RhdGVtZW50IiwidG8gYW55IGF0dHJpYnV0aW9uIHN0YXRlbWVudCBzcGVjaWZpZWQiLCJ0aGUgb3BlbiBnb3Zlcm5tZW50IGxpY2VuY2UgdjMiLCJnb3Zlcm5tZW50IGxpY2VuY2UgdjMgMCBpZiIsImxpY2VuY2UgdjMgMCBpZiB5b3UiLCJ2MyAwIGlmIHlvdSBhcmUiLCJ0aGUgcmVxdWlyZWQgYXR0cmlidXRpb24gc3RhdGVtZW50cyB0aGVzZSIsInJlcXVpcmVkIGF0dHJpYnV0aW9uIHN0YXRlbWVudHMgdGhlc2UgYXJlIiwiYXR0cmlidXRpb24gc3RhdGVtZW50cyB0aGVzZSBhcmUgaW1wb3J0YW50Iiwic3RhdGVtZW50cyB0aGVzZSBhcmUgaW1wb3J0YW50IGNvbmRpdGlvbnMiLCJhbmQgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVyIGFuZCIsInByb3ZpZGVyIGFuZCBvciBsaWNlbnNvciBleGNsdWRlcyIsImFuZCBvciBsaWNlbnNvciBleGNsdWRlcyBhbGwiLCJvciBsaWNlbnNvciBleGNsdWRlcyBhbGwgcmVwcmVzZW50YXRpb25zIiwibGljZW5zb3IgZXhjbHVkZXMgYWxsIHJlcHJlc2VudGF0aW9ucyB3YXJyYW50aWVzIiwibGF3IHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlciBhbmQiLCJwcm92aWRlciBhbmQgb3IgbGljZW5zb3IgYXJlIiwiYW5kIG9yIGxpY2Vuc29yIGFyZSBub3QiLCJvciBsaWNlbnNvciBhcmUgbm90IGxpYWJsZSIsImxpY2Vuc29yIGFyZSBub3QgbGlhYmxlIGZvciIsImFyZSBub3QgbGlhYmxlIGZvciBhbnkiLCJvciB0aGUga2VlcGVyIG9mIHB1YmxpYyIsInRoZSBrZWVwZXIgb2YgcHVibGljIHJlY29yZHMiLCJrZWVwZXIgb2YgcHVibGljIHJlY29yZHMgd2hvIiwib2YgcHVibGljIHJlY29yZHMgd2hvIGhhcyIsIm1vZGUgb3IgZm9ybWF0IHlvdSB5b3UiLCJvciBmb3JtYXQgeW91IHlvdSBhbmQiLCJmb3JtYXQgeW91IHlvdSBhbmQgeW91ciIsInlvdSB5b3UgYW5kIHlvdXIgbWVhbnMiLCJ5b3UgYW5kIHlvdXIgbWVhbnMgdGhlIiwiYW5kIHlvdXIgbWVhbnMgdGhlIG5hdHVyYWwiLCJ5b3VyIG1lYW5zIHRoZSBuYXR1cmFsIG9yIiwib3IgaW5jb3Jwb3JhdGUgYWNxdWlyaW5nIHJpZ2h0cyBpbiIsImluY29ycG9yYXRlIGFjcXVpcmluZyByaWdodHMgaW4gdGhlIiwiYWNxdWlyaW5nIHJpZ2h0cyBpbiB0aGUgaW5mb3JtYXRpb24iLCJyaWdodHMgaW4gdGhlIGluZm9ybWF0aW9uIHdoZXRoZXIiLCJpbiB0aGUgaW5mb3JtYXRpb24gd2hldGhlciB0aGUiLCJ0aGUgaW5mb3JtYXRpb24gd2hldGhlciB0aGUgaW5mb3JtYXRpb24iLCJpbmZvcm1hdGlvbiB3aGV0aGVyIHRoZSBpbmZvcm1hdGlvbiBpcyIsIndoZXRoZXIgdGhlIGluZm9ybWF0aW9uIGlzIG9idGFpbmVkIiwidGhlIGluZm9ybWF0aW9uIGlzIG9idGFpbmVkIGRpcmVjdGx5IiwiaW5mb3JtYXRpb24gaXMgb2J0YWluZWQgZGlyZWN0bHkgZnJvbSIsImlzIG9idGFpbmVkIGRpcmVjdGx5IGZyb20gdGhlIiwib2J0YWluZWQgZGlyZWN0bHkgZnJvbSB0aGUgbGljZW5zb3IiLCJkaXJlY3RseSBmcm9tIHRoZSBsaWNlbnNvciBvciIsImZyb20gdGhlIGxpY2Vuc29yIG9yIG90aGVyd2lzZSIsInRoZSBsaWNlbnNvciBvciBvdGhlcndpc2UgdW5kZXIiLCJsaWNlbnNvciBvciBvdGhlcndpc2UgdW5kZXIgdGhpcyIsIm9yIG90aGVyd2lzZSB1bmRlciB0aGlzIGxpY2VuY2UiLCJvdGhlcndpc2UgdW5kZXIgdGhpcyBsaWNlbmNlIGFib3V0IiwibGljZW5jZSB0aGUgbmF0aW9uYWwgYXJjaGl2ZXMgaGFzIiwidGhlIG5hdGlvbmFsIGFyY2hpdmVzIGhhcyBkZXZlbG9wZWQiLCJuYXRpb25hbCBhcmNoaXZlcyBoYXMgZGV2ZWxvcGVkIHRoaXMiLCJhcmNoaXZlcyBoYXMgZGV2ZWxvcGVkIHRoaXMgbGljZW5jZSIsImNvbW1vbiBvcGVuIGxpY2VuY2UgdGhlIG5hdGlvbmFsIiwib3BlbiBsaWNlbmNlIHRoZSBuYXRpb25hbCBhcmNoaXZlcyIsImxpY2VuY2UgdGhlIG5hdGlvbmFsIGFyY2hpdmVzIGludml0ZXMiLCJ0aGUgbmF0aW9uYWwgYXJjaGl2ZXMgaW52aXRlcyBwdWJsaWMiLCJuYXRpb25hbCBhcmNoaXZlcyBpbnZpdGVzIHB1YmxpYyBzZWN0b3IiLCJhcmNoaXZlcyBpbnZpdGVzIHB1YmxpYyBzZWN0b3IgYm9kaWVzIiwidW5kZXIgdGhpcyBsaWNlbmNlIHRoZSBrZWVwZXIiLCJ0aGlzIGxpY2VuY2UgdGhlIGtlZXBlciBvZiIsImxpY2VuY2UgdGhlIGtlZXBlciBvZiB0aGUiLCJvZiB0aGUgcHVibGljIHJlY29yZHMgaGFzIiwidGhlIHB1YmxpYyByZWNvcmRzIGhhcyBhdXRob3JpdHkiLCJwdWJsaWMgcmVjb3JkcyBoYXMgYXV0aG9yaXR5IHRvIl19LHsibGljZW5zZVRleHRzIjpbIlRoZSBPcGVuIEdyb3VwIFRlc3QgU3VpdGUgTGljZW5zZSBQcmVhbWJsZVxuXG5UaGUgaW50ZW50IG9mIHRoaXMgZG9jdW1lbnQgaXMgdG8gc3RhdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSBQYWNrYWdlIG1heSBiZSBjb3BpZWQsIHN1Y2ggdGhhdCB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYWludGFpbnMgc29tZSBzZW1ibGFuY2Ugb2YgYXJ0aXN0aWMgY29udHJvbCBvdmVyIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgcGFja2FnZSwgd2hpbGUgZ2l2aW5nIHRoZSB1c2VycyBvZiB0aGUgcGFja2FnZSB0aGUgcmlnaHQgdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoZSBQYWNrYWdlIGluIGEgbW9yZS1vci1sZXNzIGN1c3RvbWFyeSBmYXNoaW9uLCBwbHVzIHRoZSByaWdodCB0byBtYWtlIHJlYXNvbmFibGUgbW9kaWZpY2F0aW9ucy5cblxuVGVzdGluZyBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2Ugb2Ygc3RhbmRhcmRzLWJhc2VkIHByb2R1Y3RzLlxuXG5Gb3IgYnV5ZXJzOiBhZGVxdWF0ZSBjb25mb3JtYW5jZSB0ZXN0aW5nIGxlYWRzIHRvIHJlZHVjZWQgaW50ZWdyYXRpb24gY29zdHMgYW5kIHByb3RlY3Rpb24gb2YgaW52ZXN0bWVudHMgaW4gYXBwbGljYXRpb25zLCBzb2Z0d2FyZSBhbmQgcGVvcGxlLlxuXG5Gb3Igc29mdHdhcmUgZGV2ZWxvcGVyczogY29uZm9ybWFuY2UgdGVzdGluZyBvZiBwbGF0Zm9ybXMgYW5kIG1pZGRsZXdhcmUgZ3JlYXRseSByZWR1Y2VzIHRoZSBjb3N0IG9mIGRldmVsb3BpbmcgYW5kIG1haW50YWluaW5nIG11bHRpLXBsYXRmb3JtIGFwcGxpY2F0aW9uIHNvZnR3YXJlLlxuXG5Gb3Igc3VwcGxpZXJzOiBJbi1kZXB0aCB0ZXN0aW5nIGluY3JlYXNlcyBjdXN0b21lciBzYXRpc2ZhY3Rpb24gYW5kIGtlZXBzIGRldmVsb3BtZW50IGFuZCBzdXBwb3J0IGNvc3RzIGluIGNoZWNrLiBBUEkgY29uZm9ybWFuY2UgaXMgaGlnaGx5IG1lYXN1cmFibGUgYW5kIHN1cHBsaWVycyB3aG8gY2xhaW0gaXQgbXVzdCBiZSBhYmxlIHRvIHN1YnN0YW50aWF0ZSB0aGF0IGNsYWltLlxuXG5BcyBzdWNoLCBzaW5jZSB0aGVzZSBhcmUgYmVuY2htYXJrIG1lYXN1cmVzIG9mIGNvbmZvcm1hbmNlLCB3ZSBmZWVsIHRoZSBpbnRlZ3JpdHkgb2YgdGVzdCB0b29scyBpcyBvZiBpbXBvcnRhbmNlLiBJbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBleGlzdGluZyBjb25mb3JtYW5jZSBtb2RlcyBvZiB0aGlzIHRlc3QgcGFja2FnZSBhbmQgdG8gcGVybWl0IHJlY2lwaWVudHMgb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBwYWNrYWdlIHRvIHJ1biB0aGUgb3JpZ2luYWwgdGVzdCBtb2RlcywgdGhpcyBsaWNlbnNlIHJlcXVpcmVzIHRoYXQgdGhlIG9yaWdpbmFsIHRlc3QgbW9kZXMgYmUgcHJlc2VydmVkLlxuXG5JZiB5b3UgZmluZCBhIGJ1ZyBpbiBvbmUgb2YgdGhlIHN0YW5kYXJkcyBtb2RlIHRlc3QgY2FzZXMsIHBsZWFzZSBsZXQgdXMga25vdyBzbyB3ZSBjYW4gZmVlZCB0aGlzIGJhY2sgaW50byB0aGUgb3JpZ2luYWwsIGFuZCBhbHNvIHJhaXNlIGFueSBzcGVjaWZpY2F0aW9uIGlzc3VlcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBib2RpZXMgKGZvciBleGFtcGxlIHRoZSBQT1NJWCBjb21taXR0ZWVzKS5cblxuRGVmaW5pdGlvbnM6XG5cblwiUGFja2FnZVwiIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlciwgYW5kIGRlcml2YXRpdmVzIG9mIHRoYXQgY29sbGVjdGlvbiBvZiBmaWxlcyBjcmVhdGVkIHRocm91Z2ggdGV4dHVhbCBtb2RpZmljYXRpb24uXG5cblwiU3RhbmRhcmQgVmVyc2lvblwiIHJlZmVycyB0byBzdWNoIGEgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQsIG9yIGhhcyBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgd2lzaGVzIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyLlxuXG5cIkNvcHlyaWdodCBIb2xkZXJcIiBpcyB3aG9ldmVyIGlzIG5hbWVkIGluIHRoZSBjb3B5cmlnaHQgb3IgY29weXJpZ2h0cyBmb3IgdGhlIHBhY2thZ2UuXG5cblwiWW91XCIgaXMgeW91LCBpZiB5b3UncmUgdGhpbmtpbmcgYWJvdXQgY29weWluZyBvciBkaXN0cmlidXRpbmcgdGhpcyBQYWNrYWdlLlxuXG5cIlJlYXNvbmFibGUgY29weWluZyBmZWVcIiBpcyB3aGF0ZXZlciB5b3UgY2FuIGp1c3RpZnkgb24gdGhlIGJhc2lzIG9mIG1lZGlhIGNvc3QsIGR1cGxpY2F0aW9uIGNoYXJnZXMsIHRpbWUgb2YgcGVvcGxlIGludm9sdmVkLCBhbmQgc28gb24uIChZb3Ugd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8ganVzdGlmeSBpdCB0byB0aGUgQ29weXJpZ2h0IEhvbGRlciwgYnV0IG9ubHkgdG8gdGhlIGNvbXB1dGluZyBjb21tdW5pdHkgYXQgbGFyZ2UgYXMgYSBtYXJrZXQgdGhhdCBtdXN0IGJlYXIgdGhlIGZlZS4pXG5cblwiRnJlZWx5IEF2YWlsYWJsZVwiIG1lYW5zIHRoYXQgbm8gZmVlIGlzIGNoYXJnZWQgZm9yIHRoZSBpdGVtIGl0c2VsZiwgdGhvdWdoIHRoZXJlIG1heSBiZSBmZWVzIGludm9sdmVkIGluIGhhbmRsaW5nIHRoZSBpdGVtLiBJdCBhbHNvIG1lYW5zIHRoYXQgcmVjaXBpZW50cyBvZiB0aGUgaXRlbSBtYXkgcmVkaXN0cmlidXRlIGl0IHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgdGhleSByZWNlaXZlZCBpdC5cblxuICAgMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZHVwbGljYXRlIGFsbCBvZiB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZXMgYW5kIGFzc29jaWF0ZWQgZGlzY2xhaW1lcnMuXG5cbiAgIDIuIFlvdSBtYXkgYXBwbHkgYnVnIGZpeGVzLCBwb3J0YWJpbGl0eSBmaXhlcyBhbmQgb3RoZXIgbW9kaWZpY2F0aW9ucyBkZXJpdmVkIGZyb20gdGhlIFB1YmxpYyBEb21haW4gb3IgZnJvbSB0aGUgQ29weXJpZ2h0IEhvbGRlci4gQSBQYWNrYWdlIG1vZGlmaWVkIGluIHN1Y2ggYSB3YXkgc2hhbGwgc3RpbGwgYmUgY29uc2lkZXJlZCB0aGUgU3RhbmRhcmQgVmVyc2lvbi5cblxuICAgMy4gWW91IG1heSBvdGhlcndpc2UgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGlzIFBhY2thZ2UgaW4gYW55IHdheSwgcHJvdmlkZWQgdGhhdCB5b3UgaW5zZXJ0IGEgcHJvbWluZW50IG5vdGljZSBpbiBlYWNoIGNoYW5nZWQgZmlsZSBzdGF0aW5nIGhvdyBhbmQgd2hlbiB5b3UgY2hhbmdlZCB0aGF0IGZpbGUsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCB0aGUgZm9sbG93aW5nOlxuXG4gICByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBhbmQgdGVzdGNhc2VzIHNvIHRoZSBuYW1lcyBkbyBub3QgY29uZmxpY3Qgd2l0aCBzdGFuZGFyZCBleGVjdXRhYmxlcyBhbmQgdGVzdGNhc2VzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQsIGFuZCBwcm92aWRlIGEgc2VwYXJhdGUgbWFudWFsIHBhZ2UgZm9yIGVhY2ggbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGUgYW5kIHRlc3RjYXNlIHRoYXQgY2xlYXJseSBkb2N1bWVudHMgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUgU3RhbmRhcmQgVmVyc2lvbi5cblxuICAgNC4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCB0aGUgZm9sbG93aW5nOlxuXG4gICBhY2NvbXBhbnkgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBhbmQgdGVzdGNhc2VzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBTdGFuZGFyZCBWZXJzaW9uIGV4ZWN1dGFibGVzIGFuZCB0ZXN0Y2FzZXMsIGdpdmluZyB0aGUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIGFuZCB0ZXN0Y2FzZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCBhbmQgY2xlYXJseSBkb2N1bWVudGluZyB0aGUgZGlmZmVyZW5jZXMgaW4gbWFudWFsIHBhZ2VzIChvciBlcXVpdmFsZW50KSwgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLlxuXG4gICA1LiBZb3UgbWF5IGNoYXJnZSBhIHJlYXNvbmFibGUgY29weWluZyBmZWUgZm9yIGFueSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLiBZb3UgbWF5IGNoYXJnZSBhbnkgZmVlIHlvdSBjaG9vc2UgZm9yIHN1cHBvcnQgb2YgdGhpcyBQYWNrYWdlLiBZb3UgbWF5IG5vdCBjaGFyZ2UgYSBmZWUgZm9yIHRoaXMgUGFja2FnZSBpdHNlbGYuIEhvd2V2ZXIsIHlvdSBtYXkgZGlzdHJpYnV0ZSB0aGlzIFBhY2thZ2UgaW4gYWdncmVnYXRlIHdpdGggb3RoZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpIHByb2dyYW1zIGFzIHBhcnQgb2YgYSBsYXJnZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBwcm92aWRlZCB0aGF0IHlvdSBkbyBub3QgYWR2ZXJ0aXNlIHRoaXMgUGFja2FnZSBhcyBhIHByb2R1Y3Qgb2YgeW91ciBvd24uXG5cbiAgIDYuIFRoZSBzY3JpcHRzIGFuZCBsaWJyYXJ5IGZpbGVzIHN1cHBsaWVkIGFzIGlucHV0IHRvIG9yIHByb2R1Y2VkIGFzIG91dHB1dCBmcm9tIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgZG8gbm90IGF1dG9tYXRpY2FsbHkgZmFsbCB1bmRlciB0aGUgY29weXJpZ2h0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGJlbG9uZyB0byB3aG9tZXZlciBnZW5lcmF0ZWQgdGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcyBQYWNrYWdlLlxuXG4gICA3LlN1YnJvdXRpbmVzIHN1cHBsaWVkIGJ5IHlvdSBhbmQgbGlua2VkIGludG8gdGhpcyBQYWNrYWdlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBQYWNrYWdlLlxuXG4gICA4LiBUaGUgbmFtZSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG4gICA5LiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVGhlIEVuZCJdLCJsaWNlbnNlSWRzIjpbIk9HVFNMIl0sImtleXdvcmRzIjpbInRoZSBvcGVuIGdyb3VwIiwic3VpdGUgbGljZW5zZSBwcmVhbWJsZSIsInJlYXNvbmFibGUgbW9kaWZpY2F0aW9ucyB0ZXN0aW5nIiwibW9kaWZpY2F0aW9ucyB0ZXN0aW5nIGlzIiwidGVzdGluZyBpcyBlc3NlbnRpYWwiLCJpcyBlc3NlbnRpYWwgZm9yIiwiZXNzZW50aWFsIGZvciBwcm9wZXIiLCJmb3IgcHJvcGVyIGRldmVsb3BtZW50IiwicHJvcGVyIGRldmVsb3BtZW50IGFuZCIsImRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSIsImFuZCBtYWludGVuYW5jZSBvZiIsIm1haW50ZW5hbmNlIG9mIHN0YW5kYXJkcyIsIm9mIHN0YW5kYXJkcyBiYXNlZCIsInN0YW5kYXJkcyBiYXNlZCBwcm9kdWN0cyIsImJhc2VkIHByb2R1Y3RzIGZvciIsInByb2R1Y3RzIGZvciBidXllcnMiLCJmb3IgYnV5ZXJzIGFkZXF1YXRlIiwiYnV5ZXJzIGFkZXF1YXRlIGNvbmZvcm1hbmNlIiwiYWRlcXVhdGUgY29uZm9ybWFuY2UgdGVzdGluZyIsImNvbmZvcm1hbmNlIHRlc3RpbmcgbGVhZHMiLCJ0ZXN0aW5nIGxlYWRzIHRvIiwibGVhZHMgdG8gcmVkdWNlZCIsInRvIHJlZHVjZWQgaW50ZWdyYXRpb24iLCJyZWR1Y2VkIGludGVncmF0aW9uIGNvc3RzIiwiaW50ZWdyYXRpb24gY29zdHMgYW5kIiwiY29zdHMgYW5kIHByb3RlY3Rpb24iLCJhbmQgcHJvdGVjdGlvbiBvZiIsInByb3RlY3Rpb24gb2YgaW52ZXN0bWVudHMiLCJvZiBpbnZlc3RtZW50cyBpbiIsImludmVzdG1lbnRzIGluIGFwcGxpY2F0aW9ucyIsImluIGFwcGxpY2F0aW9ucyBzb2Z0d2FyZSIsImFwcGxpY2F0aW9ucyBzb2Z0d2FyZSBhbmQiLCJzb2Z0d2FyZSBhbmQgcGVvcGxlIiwiYW5kIHBlb3BsZSBmb3IiLCJwZW9wbGUgZm9yIHNvZnR3YXJlIiwiZm9yIHNvZnR3YXJlIGRldmVsb3BlcnMiLCJzb2Z0d2FyZSBkZXZlbG9wZXJzIGNvbmZvcm1hbmNlIiwiZGV2ZWxvcGVycyBjb25mb3JtYW5jZSB0ZXN0aW5nIiwiY29uZm9ybWFuY2UgdGVzdGluZyBvZiIsInRlc3Rpbmcgb2YgcGxhdGZvcm1zIiwib2YgcGxhdGZvcm1zIGFuZCIsInBsYXRmb3JtcyBhbmQgbWlkZGxld2FyZSIsImFuZCBtaWRkbGV3YXJlIGdyZWF0bHkiLCJtaWRkbGV3YXJlIGdyZWF0bHkgcmVkdWNlcyIsImdyZWF0bHkgcmVkdWNlcyB0aGUiLCJyZWR1Y2VzIHRoZSBjb3N0IiwiY29zdCBvZiBkZXZlbG9waW5nIiwib2YgZGV2ZWxvcGluZyBhbmQiLCJkZXZlbG9waW5nIGFuZCBtYWludGFpbmluZyIsImFuZCBtYWludGFpbmluZyBtdWx0aSIsIm1haW50YWluaW5nIG11bHRpIHBsYXRmb3JtIiwibXVsdGkgcGxhdGZvcm0gYXBwbGljYXRpb24iLCJwbGF0Zm9ybSBhcHBsaWNhdGlvbiBzb2Z0d2FyZSIsImFwcGxpY2F0aW9uIHNvZnR3YXJlIGZvciIsInNvZnR3YXJlIGZvciBzdXBwbGllcnMiLCJmb3Igc3VwcGxpZXJzIGluIiwic3VwcGxpZXJzIGluIGRlcHRoIiwiaW4gZGVwdGggdGVzdGluZyIsImRlcHRoIHRlc3RpbmcgaW5jcmVhc2VzIiwidGVzdGluZyBpbmNyZWFzZXMgY3VzdG9tZXIiLCJpbmNyZWFzZXMgY3VzdG9tZXIgc2F0aXNmYWN0aW9uIiwiY3VzdG9tZXIgc2F0aXNmYWN0aW9uIGFuZCIsInNhdGlzZmFjdGlvbiBhbmQga2VlcHMiLCJhbmQga2VlcHMgZGV2ZWxvcG1lbnQiLCJrZWVwcyBkZXZlbG9wbWVudCBhbmQiLCJkZXZlbG9wbWVudCBhbmQgc3VwcG9ydCIsImFuZCBzdXBwb3J0IGNvc3RzIiwic3VwcG9ydCBjb3N0cyBpbiIsImNvc3RzIGluIGNoZWNrIiwiaW4gY2hlY2sgYXBpIiwiY2hlY2sgYXBpIGNvbmZvcm1hbmNlIiwiYXBpIGNvbmZvcm1hbmNlIGlzIiwiY29uZm9ybWFuY2UgaXMgaGlnaGx5IiwiaXMgaGlnaGx5IG1lYXN1cmFibGUiLCJoaWdobHkgbWVhc3VyYWJsZSBhbmQiLCJtZWFzdXJhYmxlIGFuZCBzdXBwbGllcnMiLCJhbmQgc3VwcGxpZXJzIHdobyIsInN1cHBsaWVycyB3aG8gY2xhaW0iLCJ3aG8gY2xhaW0gaXQiLCJjbGFpbSBpdCBtdXN0IiwiYWJsZSB0byBzdWJzdGFudGlhdGUiLCJ0byBzdWJzdGFudGlhdGUgdGhhdCIsInN1YnN0YW50aWF0ZSB0aGF0IGNsYWltIiwidGhhdCBjbGFpbSBhcyIsImNsYWltIGFzIHN1Y2giLCJhcyBzdWNoIHNpbmNlIiwic3VjaCBzaW5jZSB0aGVzZSIsInRoZXNlIGFyZSBiZW5jaG1hcmsiLCJhcmUgYmVuY2htYXJrIG1lYXN1cmVzIiwiYmVuY2htYXJrIG1lYXN1cmVzIG9mIiwibWVhc3VyZXMgb2YgY29uZm9ybWFuY2UiLCJvZiBjb25mb3JtYW5jZSB3ZSIsImNvbmZvcm1hbmNlIHdlIGZlZWwiLCJ3ZSBmZWVsIHRoZSIsImZlZWwgdGhlIGludGVncml0eSIsImludGVncml0eSBvZiB0ZXN0Iiwib2YgdGVzdCB0b29scyIsInRlc3QgdG9vbHMgaXMiLCJ0b29scyBpcyBvZiIsImlzIG9mIGltcG9ydGFuY2UiLCJvZiBpbXBvcnRhbmNlIGluIiwiaW1wb3J0YW5jZSBpbiBvcmRlciIsIm9yZGVyIHRvIHByZXNlcnZlIiwicHJlc2VydmUgdGhlIGludGVncml0eSIsIm9mIHRoZSBleGlzdGluZyIsInRoZSBleGlzdGluZyBjb25mb3JtYW5jZSIsImV4aXN0aW5nIGNvbmZvcm1hbmNlIG1vZGVzIiwiY29uZm9ybWFuY2UgbW9kZXMgb2YiLCJtb2RlcyBvZiB0aGlzIiwib2YgdGhpcyB0ZXN0IiwidGhpcyB0ZXN0IHBhY2thZ2UiLCJ0ZXN0IHBhY2thZ2UgYW5kIiwicGFja2FnZSBhbmQgdG8iLCJ0byBwZXJtaXQgcmVjaXBpZW50cyIsInBlcm1pdCByZWNpcGllbnRzIG9mIiwicmVjaXBpZW50cyBvZiBtb2RpZmllZCIsInBhY2thZ2UgdG8gcnVuIiwicnVuIHRoZSBvcmlnaW5hbCIsInRlc3QgbW9kZXMgdGhpcyIsIm1vZGVzIHRoaXMgbGljZW5zZSIsInRlc3QgbW9kZXMgYmUiLCJtb2RlcyBiZSBwcmVzZXJ2ZWQiLCJiZSBwcmVzZXJ2ZWQgaWYiLCJwcmVzZXJ2ZWQgaWYgeW91IiwieW91IGZpbmQgYSIsImZpbmQgYSBidWciLCJhIGJ1ZyBpbiIsImJ1ZyBpbiBvbmUiLCJ0aGUgc3RhbmRhcmRzIG1vZGUiLCJzdGFuZGFyZHMgbW9kZSB0ZXN0IiwibW9kZSB0ZXN0IGNhc2VzIiwidGVzdCBjYXNlcyBwbGVhc2UiLCJjYXNlcyBwbGVhc2UgbGV0Iiwid2UgY2FuIGZlZWQiLCJjYW4gZmVlZCB0aGlzIiwiZmVlZCB0aGlzIGJhY2siLCJ0aGlzIGJhY2sgaW50byIsImludG8gdGhlIG9yaWdpbmFsIiwib3JpZ2luYWwgYW5kIGFsc28iLCJhbmQgYWxzbyByYWlzZSIsImFsc28gcmFpc2UgYW55IiwicmFpc2UgYW55IHNwZWNpZmljYXRpb24iLCJhbnkgc3BlY2lmaWNhdGlvbiBpc3N1ZXMiLCJzcGVjaWZpY2F0aW9uIGlzc3VlcyB3aXRoIiwiaXNzdWVzIHdpdGggdGhlIiwidGhlIGFwcHJvcHJpYXRlIGJvZGllcyIsImFwcHJvcHJpYXRlIGJvZGllcyBmb3IiLCJib2RpZXMgZm9yIGV4YW1wbGUiLCJleGFtcGxlIHRoZSBwb3NpeCIsInRoZSBwb3NpeCBjb21taXR0ZWVzIiwicG9zaXggY29tbWl0dGVlcyBkZWZpbml0aW9ucyIsImNvbW1pdHRlZXMgZGVmaW5pdGlvbnMgcGFja2FnZSIsInRoZSBmb2xsb3dpbmcgcmVuYW1lIiwiZm9sbG93aW5nIHJlbmFtZSBhbnkiLCJhbmQgdGVzdGNhc2VzIHNvIiwidGVzdGNhc2VzIHNvIHRoZSIsImFuZCB0ZXN0Y2FzZXMgd2hpY2giLCJ0ZXN0Y2FzZXMgd2hpY2ggbXVzdCIsInN0YW5kYXJkIGV4ZWN1dGFibGUgYW5kIiwiZXhlY3V0YWJsZSBhbmQgdGVzdGNhc2UiLCJhbmQgdGVzdGNhc2UgdGhhdCIsInRlc3RjYXNlIHRoYXQgY2xlYXJseSIsInN0YW5kYXJkIHZlcnNpb24gNCIsInZlcnNpb24gNCB5b3UiLCJ0aGUgZm9sbG93aW5nIGFjY29tcGFueSIsImZvbGxvd2luZyBhY2NvbXBhbnkgYW55IiwiYW5kIHRlc3RjYXNlcyB3aXRoIiwidGVzdGNhc2VzIHdpdGggdGhlaXIiLCJ2ZXJzaW9uIGV4ZWN1dGFibGVzIGFuZCIsImFuZCB0ZXN0Y2FzZXMgZ2l2aW5nIiwidGVzdGNhc2VzIGdpdmluZyB0aGUiLCJhbmQgdGVzdGNhc2VzIG5vbiIsInRlc3RjYXNlcyBub24gc3RhbmRhcmQiLCJzdGFuZGFyZCB2ZXJzaW9uIDUiLCJ2ZXJzaW9uIDUgeW91IiwicGFja2FnZSA3IHN1YnJvdXRpbmVzIiwiNyBzdWJyb3V0aW5lcyBzdXBwbGllZCIsInRoZSBvcGVuIGdyb3VwIHRlc3QiLCJ0ZXN0IHN1aXRlIGxpY2Vuc2UgcHJlYW1ibGUiLCJzdWl0ZSBsaWNlbnNlIHByZWFtYmxlIHRoZSIsIm1ha2UgcmVhc29uYWJsZSBtb2RpZmljYXRpb25zIHRlc3RpbmciLCJyZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMgdGVzdGluZyBpcyIsIm1vZGlmaWNhdGlvbnMgdGVzdGluZyBpcyBlc3NlbnRpYWwiLCJ0ZXN0aW5nIGlzIGVzc2VudGlhbCBmb3IiLCJpcyBlc3NlbnRpYWwgZm9yIHByb3BlciIsImVzc2VudGlhbCBmb3IgcHJvcGVyIGRldmVsb3BtZW50IiwiZm9yIHByb3BlciBkZXZlbG9wbWVudCBhbmQiLCJwcm9wZXIgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIiwiZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIG9mIiwiYW5kIG1haW50ZW5hbmNlIG9mIHN0YW5kYXJkcyIsIm1haW50ZW5hbmNlIG9mIHN0YW5kYXJkcyBiYXNlZCIsIm9mIHN0YW5kYXJkcyBiYXNlZCBwcm9kdWN0cyIsInN0YW5kYXJkcyBiYXNlZCBwcm9kdWN0cyBmb3IiLCJiYXNlZCBwcm9kdWN0cyBmb3IgYnV5ZXJzIiwicHJvZHVjdHMgZm9yIGJ1eWVycyBhZGVxdWF0ZSIsImZvciBidXllcnMgYWRlcXVhdGUgY29uZm9ybWFuY2UiLCJidXllcnMgYWRlcXVhdGUgY29uZm9ybWFuY2UgdGVzdGluZyIsImFkZXF1YXRlIGNvbmZvcm1hbmNlIHRlc3RpbmcgbGVhZHMiLCJjb25mb3JtYW5jZSB0ZXN0aW5nIGxlYWRzIHRvIiwidGVzdGluZyBsZWFkcyB0byByZWR1Y2VkIl19LHsibGljZW5zZVRleHRzIjpbIlRoZSBPcGVuTERBUCBQdWJsaWMgTGljZW5zZVxuXG5WZXJzaW9uIDEuMSwgMjUgQXVndXN0IDE5OTggQ29weXJpZ2h0IDE5OTgsIFRoZSBPcGVuTERBUCBGb3VuZGF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBOb3RlOiBUaGlzIGxpY2Vuc2UgaXMgZGVyaXZlZCBmcm9tIHRoZSBcIkFydGlzdGljIExpY2Vuc2VcIiBhcyBkaXN0cmlidXRlZCB3aXRoIHRoZSBQZXJsIFByb2dyYW1taW5nIExhbmd1YWdlLiBJdHMgdGVybXMgYXJlIGRpZmZlcmVudCBmcm9tIHRob3NlIG9mIHRoZSBcIkFydGlzdGljIExpY2Vuc2UuXCJcblxuUFJFQU1CTEVcblxuVGhlIGludGVudCBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIHN0YXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgUGFja2FnZSBtYXkgYmUgY29waWVkLCBzdWNoIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zIHNvbWUgc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIHBhY2thZ2UsIHdoaWxlIGdpdmluZyB0aGUgdXNlcnMgb2YgdGhlIHBhY2thZ2UgdGhlIHJpZ2h0IHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGUgUGFja2FnZSBpbiBhIG1vcmUtb3ItbGVzcyBjdXN0b21hcnkgZmFzaGlvbiwgcGx1cyB0aGUgcmlnaHQgdG8gbWFrZSByZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuXG5cbkRlZmluaXRpb25zOlxuXG5cIlBhY2thZ2VcIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgZmlsZXMgZGlzdHJpYnV0ZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gb2YgZmlsZXMgY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLlxuXG5cIlN0YW5kYXJkIFZlcnNpb25cIiByZWZlcnMgdG8gc3VjaCBhIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHdpc2hlcyBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci5cblxuXCJDb3B5cmlnaHQgSG9sZGVyXCIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yIGNvcHlyaWdodHMgZm9yIHRoZSBwYWNrYWdlLlxuXG5cIllvdVwiIGlzIHlvdSwgaWYgeW91J3JlIHRoaW5raW5nIGFib3V0IGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoaXMgUGFja2FnZS5cblxuXCJSZWFzb25hYmxlIGNvcHlpbmcgZmVlXCIgaXMgd2hhdGV2ZXIgeW91IGNhbiBqdXN0aWZ5IG9uIHRoZSBiYXNpcyBvZiBtZWRpYSBjb3N0LCBkdXBsaWNhdGlvbiBjaGFyZ2VzLCB0aW1lIG9mIHBlb3BsZSBpbnZvbHZlZCwgYW5kIHNvIG9uLiAoWW91IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGp1c3RpZnkgaXQgdG8gdGhlIENvcHlyaWdodCBIb2xkZXIsIGJ1dCBvbmx5IHRvIHRoZSBjb21wdXRpbmcgY29tbXVuaXR5IGF0IGxhcmdlIGFzIGEgbWFya2V0IHRoYXQgbXVzdCBiZWFyIHRoZSBmZWUuKVxuXG5cIkZyZWVseSBBdmFpbGFibGVcIiBtZWFucyB0aGF0IG5vIGZlZSBpcyBjaGFyZ2VkIGZvciB0aGUgaXRlbSBpdHNlbGYsIHRob3VnaCB0aGVyZSBtYXkgYmUgZmVlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUgaXRlbS4gSXQgYWxzbyBtZWFucyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIGl0ZW0gbWF5IHJlZGlzdHJpYnV0ZSBpdCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHRoZXkgcmVjZWl2ZWQgaXQuXG5cbiAgIDEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLlxuXG4gICAyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyIG1vZGlmaWNhdGlvbnMgZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIG9yIGZyb20gdGhlIENvcHlyaWdodCBIb2xkZXIuIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24uXG5cbiAgIDMuIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhpcyBQYWNrYWdlIGluIGFueSB3YXksIHByb3ZpZGVkIHRoYXQgeW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUgc3RhdGluZyBob3cgYW5kIHdoZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEpIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UgbWFrZSB0aGVtIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBwbGFjaW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWFqb3IgYXJjaGl2ZSBzaXRlIHN1Y2ggYXMgdXVuZXQudXUubmV0LCBvciBieSBhbGxvd2luZyB0aGUgQ29weXJpZ2h0IEhvbGRlciB0byBpbmNsdWRlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgUGFja2FnZS5cblxuICAgICAgYikgdXNlIHRoZSBtb2RpZmllZCBQYWNrYWdlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uLlxuXG4gICAgICBjKSByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBzbyB0aGUgbmFtZXMgZG8gbm90IGNvbmZsaWN0IHdpdGggc3RhbmRhcmQgZXhlY3V0YWJsZXMsIHdoaWNoIG11c3QgYWxzbyBiZSBwcm92aWRlZCwgYW5kIHByb3ZpZGUgYSBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSB0aGF0IGNsZWFybHkgZG9jdW1lbnRzIGhvdyBpdCBkaWZmZXJzIGZyb20gdGhlIFN0YW5kYXJkIFZlcnNpb24uXG5cbiAgICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLlxuXG4gICA0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSBkaXN0cmlidXRlIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZXMgYW5kIGxpYnJhcnkgZmlsZXMsIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLlxuXG4gICAgICBiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZiB0aGUgUGFja2FnZSB3aXRoIHlvdXIgbW9kaWZpY2F0aW9ucy5cblxuICAgICAgYykgYWNjb21wYW55IGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIFN0YW5kYXJkIFZlcnNpb24gZXhlY3V0YWJsZXMsIGdpdmluZyB0aGUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIG5vbi1zdGFuZGFyZCBuYW1lcywgYW5kIGNsZWFybHkgZG9jdW1lbnRpbmcgdGhlIGRpZmZlcmVuY2VzIGluIG1hbnVhbCBwYWdlcyAob3IgZXF1aXZhbGVudCksIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi5cblxuICAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuXG5cbiAgIDUuIFlvdSBtYXkgY2hhcmdlIGEgcmVhc29uYWJsZSBjb3B5aW5nIGZlZSBmb3IgYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2UuIFlvdSBtYXkgY2hhcmdlIGFueSBmZWUgeW91IGNob29zZSBmb3Igc3VwcG9ydCBvZiB0aGlzIFBhY2thZ2UuIFlvdSBtYXkgbm90IGNoYXJnZSBhIGZlZSBmb3IgdGhpcyBQYWNrYWdlIGl0c2VsZi4gSG93ZXZlciwgeW91IG1heSBkaXN0cmlidXRlIHRoaXMgUGFja2FnZSBpbiBhZ2dyZWdhdGUgd2l0aCBvdGhlciAocG9zc2libHkgY29tbWVyY2lhbCkgcHJvZ3JhbXMgYXMgcGFydCBvZiBhIGxhcmdlciAocG9zc2libHkgY29tbWVyY2lhbCkgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHByb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBhZHZlcnRpc2UgdGhpcyBQYWNrYWdlIGFzIGEgcHJvZHVjdCBvZiB5b3VyIG93bi5cblxuICAgNi4gVGhlIHNjcmlwdHMgYW5kIGxpYnJhcnkgZmlsZXMgc3VwcGxpZWQgYXMgaW5wdXQgdG8gb3IgcHJvZHVjZWQgYXMgb3V0cHV0IGZyb20gdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsIHVuZGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYmVsb25nIHRvIHdob21ldmVyIGdlbmVyYXRlZCB0aGVtLCBhbmQgbWF5IGJlIHNvbGQgY29tbWVyY2lhbGx5LCBhbmQgbWF5IGJlIGFnZ3JlZ2F0ZWQgd2l0aCB0aGlzIFBhY2thZ2UuXG5cbiAgIDcuIEMgc3Vicm91dGluZXMgc3VwcGxpZWQgYnkgeW91IGFuZCBsaW5rZWQgaW50byB0aGlzIFBhY2thZ2UgaW4gb3JkZXIgdG8gZW11bGF0ZSBzdWJyb3V0aW5lcyBhbmQgdmFyaWFibGVzIG9mIHRoZSBsYW5ndWFnZSBkZWZpbmVkIGJ5IHRoaXMgUGFja2FnZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGFyZSB0aGUgZXF1aXZhbGVudCBvZiBpbnB1dCBhcyBpbiBQYXJhZ3JhcGggNiwgcHJvdmlkZWQgdGhlc2Ugc3Vicm91dGluZXMgZG8gbm90IGNoYW5nZSB0aGUgbGFuZ3VhZ2UgaW4gYW55IHdheSB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGZhaWwgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHRoZSBsYW5ndWFnZS5cblxuICAgOC4gVGhlIG5hbWUgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuICAgOS4gVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRoZSBFbmQiXSwibGljZW5zZUlkcyI6WyJPTERBUC0xLjEiXSwia2V5d29yZHMiOlsiMSAxIDI1IiwiMSAyNSBhdWd1c3QiLCIyNSBhdWd1c3QgMTk5OCIsInZlcnNpb24gMSAxIDI1IiwiMSAxIDI1IGF1Z3VzdCIsIjEgMjUgYXVndXN0IDE5OTgiLCIyNSBhdWd1c3QgMTk5OCBjb3B5cmlnaHQiLCJsaWNlbnNlIHZlcnNpb24gMSAxIDI1IiwidmVyc2lvbiAxIDEgMjUgYXVndXN0IiwiMSAxIDI1IGF1Z3VzdCAxOTk4IiwiMSAyNSBhdWd1c3QgMTk5OCBjb3B5cmlnaHQiLCIyNSBhdWd1c3QgMTk5OCBjb3B5cmlnaHQgMTk5OCIsImF1Z3VzdCAxOTk4IGNvcHlyaWdodCAxOTk4IHRoZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgT3BlbkxEQVAgUHVibGljIExpY2Vuc2VcblxuVmVyc2lvbiAxLjIsIDEgU2VwdGVtYmVyIDE5OTggQ29weXJpZ2h0IDE5OTgsIFRoZSBPcGVuTERBUCBGb3VuZGF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBOb3RlOiBUaGlzIGxpY2Vuc2UgaXMgZGVyaXZlZCBmcm9tIHRoZSBcIkFydGlzdGljIExpY2Vuc2VcIiBhcyBkaXN0cmlidXRlZCB3aXRoIHRoZSBQZXJsIFByb2dyYW1taW5nIExhbmd1YWdlLiBBcyBkaWZmZXJlbmNlcyBtYXkgZXhpc3QsIHRoZSBjb21wbGV0ZSBsaWNlbnNlIHNob3VsZCBiZSByZWFkLlxuXG5QUkVBTUJMRVxuXG5UaGUgaW50ZW50IG9mIHRoaXMgZG9jdW1lbnQgaXMgdG8gc3RhdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSBQYWNrYWdlIG1heSBiZSBjb3BpZWQsIHN1Y2ggdGhhdCB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYWludGFpbnMgc29tZSBzZW1ibGFuY2Ugb2YgYXJ0aXN0aWMgY29udHJvbCBvdmVyIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgcGFja2FnZSwgd2hpbGUgZ2l2aW5nIHRoZSB1c2VycyBvZiB0aGUgcGFja2FnZSB0aGUgcmlnaHQgdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoZSBQYWNrYWdlIGluIGEgbW9yZS1vci1sZXNzIGN1c3RvbWFyeSBmYXNoaW9uLCBwbHVzIHRoZSByaWdodCB0byBtYWtlIHJlYXNvbmFibGUgbW9kaWZpY2F0aW9ucy5cblxuRGVmaW5pdGlvbnM6XG5cblwiUGFja2FnZVwiIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlciwgYW5kIGRlcml2YXRpdmVzIG9mIHRoYXQgY29sbGVjdGlvbiBvZiBmaWxlcyBjcmVhdGVkIHRocm91Z2ggdGV4dHVhbCBtb2RpZmljYXRpb24uXG5cblwiU3RhbmRhcmQgVmVyc2lvblwiIHJlZmVycyB0byBzdWNoIGEgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQsIG9yIGhhcyBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgd2lzaGVzIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyLlxuXG5cIkNvcHlyaWdodCBIb2xkZXJcIiBpcyB3aG9ldmVyIGlzIG5hbWVkIGluIHRoZSBjb3B5cmlnaHQgb3IgY29weXJpZ2h0cyBmb3IgdGhlIHBhY2thZ2UuXG5cblwiWW91XCIgaXMgeW91LCBpZiB5b3UncmUgdGhpbmtpbmcgYWJvdXQgY29weWluZyBvciBkaXN0cmlidXRpbmcgdGhpcyBQYWNrYWdlLlxuXG5cIlJlYXNvbmFibGUgY29weWluZyBmZWVcIiBpcyB3aGF0ZXZlciB5b3UgY2FuIGp1c3RpZnkgb24gdGhlIGJhc2lzIG9mIG1lZGlhIGNvc3QsIGR1cGxpY2F0aW9uIGNoYXJnZXMsIHRpbWUgb2YgcGVvcGxlIGludm9sdmVkLCBhbmQgc28gb24uIChZb3Ugd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8ganVzdGlmeSBpdCB0byB0aGUgQ29weXJpZ2h0IEhvbGRlciwgYnV0IG9ubHkgdG8gdGhlIGNvbXB1dGluZyBjb21tdW5pdHkgYXQgbGFyZ2UgYXMgYSBtYXJrZXQgdGhhdCBtdXN0IGJlYXIgdGhlIGZlZS4pXG5cblwiRnJlZWx5IEF2YWlsYWJsZVwiIG1lYW5zIHRoYXQgbm8gZmVlIGlzIGNoYXJnZWQgZm9yIHRoZSBpdGVtIGl0c2VsZiwgdGhvdWdoIHRoZXJlIG1heSBiZSBmZWVzIGludm9sdmVkIGluIGhhbmRsaW5nIHRoZSBpdGVtLiBJdCBhbHNvIG1lYW5zIHRoYXQgcmVjaXBpZW50cyBvZiB0aGUgaXRlbSBtYXkgcmVkaXN0cmlidXRlIGl0IHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgdGhleSByZWNlaXZlZCBpdC5cblxuICAgMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZHVwbGljYXRlIGFsbCBvZiB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZXMgYW5kIGFzc29jaWF0ZWQgZGlzY2xhaW1lcnMuXG5cbiAgIDIuIFlvdSBtYXkgYXBwbHkgYnVnIGZpeGVzLCBwb3J0YWJpbGl0eSBmaXhlcyBhbmQgb3RoZXIgbW9kaWZpY2F0aW9ucyBkZXJpdmVkIGZyb20gdGhlIFB1YmxpYyBEb21haW4gb3IgZnJvbSB0aGUgQ29weXJpZ2h0IEhvbGRlci4gQSBQYWNrYWdlIG1vZGlmaWVkIGluIHN1Y2ggYSB3YXkgc2hhbGwgc3RpbGwgYmUgY29uc2lkZXJlZCB0aGUgU3RhbmRhcmQgVmVyc2lvbi5cblxuICAgMy4gWW91IG1heSBvdGhlcndpc2UgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGlzIFBhY2thZ2UgaW4gYW55IHdheSwgcHJvdmlkZWQgdGhhdCB5b3UgaW5zZXJ0IGEgcHJvbWluZW50IG5vdGljZSBpbiBlYWNoIGNoYW5nZWQgZmlsZSBzdGF0aW5nIGhvdyBhbmQgd2hlbiB5b3UgY2hhbmdlZCB0aGF0IGZpbGUsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzpcblxuICAgICAgYSkgcGxhY2UgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBQdWJsaWMgRG9tYWluIG9yIG90aGVyd2lzZSBtYWtlIHRoZW0gRnJlZWx5IEF2YWlsYWJsZSwgc3VjaCBhcyBieSBwb3N0aW5nIHNhaWQgbW9kaWZpY2F0aW9ucyB0byBVc2VuZXQgb3IgYW4gZXF1aXZhbGVudCBtZWRpdW0sIG9yIHBsYWNpbmcgdGhlIG1vZGlmaWNhdGlvbnMgb24gYSBtYWpvciBhcmNoaXZlIHNpdGUgc3VjaCBhcyB1dW5ldC51dS5uZXQsIG9yIGJ5IGFsbG93aW5nIHRoZSBDb3B5cmlnaHQgSG9sZGVyIHRvIGluY2x1ZGUgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBQYWNrYWdlLlxuXG4gICAgICBiKSB1c2UgdGhlIG1vZGlmaWVkIFBhY2thZ2Ugb25seSB3aXRoaW4geW91ciBjb3Jwb3JhdGlvbiBvciBvcmdhbml6YXRpb24uXG5cbiAgICAgIGMpIHJlbmFtZSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHNvIHRoZSBuYW1lcyBkbyBub3QgY29uZmxpY3Qgd2l0aCBzdGFuZGFyZCBleGVjdXRhYmxlcywgd2hpY2ggbXVzdCBhbHNvIGJlIHByb3ZpZGVkLCBhbmQgcHJvdmlkZSBhIHNlcGFyYXRlIG1hbnVhbCBwYWdlIGZvciBlYWNoIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlIHRoYXQgY2xlYXJseSBkb2N1bWVudHMgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUgU3RhbmRhcmQgVmVyc2lvbi5cblxuICAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuXG5cbiAgIDQuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSwgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEpIGRpc3RyaWJ1dGUgYSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBleGVjdXRhYmxlcyBhbmQgbGlicmFyeSBmaWxlcywgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgKGluIHRoZSBtYW51YWwgcGFnZSBvciBlcXVpdmFsZW50KSBvbiB3aGVyZSB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uXG5cbiAgICAgIGIpIGFjY29tcGFueSB0aGUgZGlzdHJpYnV0aW9uIHdpdGggdGhlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIG9mIHRoZSBQYWNrYWdlIHdpdGggeW91ciBtb2RpZmljYXRpb25zLlxuXG4gICAgICBjKSBhY2NvbXBhbnkgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgU3RhbmRhcmQgVmVyc2lvbiBleGVjdXRhYmxlcywgZ2l2aW5nIHRoZSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCBhbmQgY2xlYXJseSBkb2N1bWVudGluZyB0aGUgZGlmZmVyZW5jZXMgaW4gbWFudWFsIHBhZ2VzIChvciBlcXVpdmFsZW50KSwgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLlxuXG4gICAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlci5cblxuICAgNS4gWW91IG1heSBjaGFyZ2UgYSByZWFzb25hYmxlIGNvcHlpbmcgZmVlIGZvciBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgUGFja2FnZS4gWW91IG1heSBjaGFyZ2UgYW55IGZlZSB5b3UgY2hvb3NlIGZvciBzdXBwb3J0IG9mIHRoaXMgUGFja2FnZS4gWW91IG1heSBub3QgY2hhcmdlIGEgZmVlIGZvciB0aGlzIFBhY2thZ2UgaXRzZWxmLiBIb3dldmVyLCB5b3UgbWF5IGRpc3RyaWJ1dGUgdGhpcyBQYWNrYWdlIGluIGFnZ3JlZ2F0ZSB3aXRoIG90aGVyIChwb3NzaWJseSBjb21tZXJjaWFsKSBwcm9ncmFtcyBhcyBwYXJ0IG9mIGEgbGFyZ2VyIChwb3NzaWJseSBjb21tZXJjaWFsKSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gcHJvdmlkZWQgdGhhdCB5b3UgZG8gbm90IGFkdmVydGlzZSB0aGlzIFBhY2thZ2UgYXMgYSBwcm9kdWN0IG9mIHlvdXIgb3duLlxuXG4gICA2LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZCBhcyBvdXRwdXQgZnJvbSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGRvIG5vdCBhdXRvbWF0aWNhbGx5IGZhbGwgdW5kZXIgdGhlIGNvcHlyaWdodCBvZiB0aGlzIFBhY2thZ2UsIGJ1dCBiZWxvbmcgdG8gd2hvbWV2ZXIgZ2VuZXJhdGVkIHRoZW0sIGFuZCBtYXkgYmUgc29sZCBjb21tZXJjaWFsbHksIGFuZCBtYXkgYmUgYWdncmVnYXRlZCB3aXRoIHRoaXMgUGFja2FnZS5cblxuICAgNy4gQyBzdWJyb3V0aW5lcyBzdXBwbGllZCBieSB5b3UgYW5kIGxpbmtlZCBpbnRvIHRoaXMgUGFja2FnZSBpbiBvcmRlciB0byBlbXVsYXRlIHN1YnJvdXRpbmVzIGFuZCB2YXJpYWJsZXMgb2YgdGhlIGxhbmd1YWdlIGRlZmluZWQgYnkgdGhpcyBQYWNrYWdlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYXJlIHRoZSBlcXVpdmFsZW50IG9mIGlucHV0IGFzIGluIFBhcmFncmFwaCA2LCBwcm92aWRlZCB0aGVzZSBzdWJyb3V0aW5lcyBkbyBub3QgY2hhbmdlIHRoZSBsYW5ndWFnZSBpbiBhbnkgd2F5IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gZmFpbCB0aGUgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlIGxhbmd1YWdlLlxuXG4gICA4LiBUaGUgbmFtZSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG4gICA5LiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVGhlIEVuZCJdLCJsaWNlbnNlSWRzIjpbIk9MREFQLTEuMiJdLCJrZXl3b3JkcyI6WyIyIDEgc2VwdGVtYmVyIiwiMSBzZXB0ZW1iZXIgMTk5OCIsInNlcHRlbWJlciAxOTk4IGNvcHlyaWdodCIsImxhbmd1YWdlIGFzIGRpZmZlcmVuY2VzIiwiYXMgZGlmZmVyZW5jZXMgbWF5IiwiZGlmZmVyZW5jZXMgbWF5IGV4aXN0IiwibWF5IGV4aXN0IHRoZSIsIjEgMiAxIHNlcHRlbWJlciIsIjIgMSBzZXB0ZW1iZXIgMTk5OCIsIjEgc2VwdGVtYmVyIDE5OTggY29weXJpZ2h0Iiwic2VwdGVtYmVyIDE5OTggY29weXJpZ2h0IDE5OTgiLCJwcm9ncmFtbWluZyBsYW5ndWFnZSBhcyBkaWZmZXJlbmNlcyIsImxhbmd1YWdlIGFzIGRpZmZlcmVuY2VzIG1heSIsImFzIGRpZmZlcmVuY2VzIG1heSBleGlzdCIsImRpZmZlcmVuY2VzIG1heSBleGlzdCB0aGUiLCJtYXkgZXhpc3QgdGhlIGNvbXBsZXRlIiwicHVibGljIGxpY2Vuc2UgdmVyc2lvbiAxIDIiLCJ2ZXJzaW9uIDEgMiAxIHNlcHRlbWJlciIsIjEgMiAxIHNlcHRlbWJlciAxOTk4IiwiMiAxIHNlcHRlbWJlciAxOTk4IGNvcHlyaWdodCIsIjEgc2VwdGVtYmVyIDE5OTggY29weXJpZ2h0IDE5OTgiLCJzZXB0ZW1iZXIgMTk5OCBjb3B5cmlnaHQgMTk5OCB0aGUiLCJwZXJsIHByb2dyYW1taW5nIGxhbmd1YWdlIGFzIGRpZmZlcmVuY2VzIiwicHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgYXMgZGlmZmVyZW5jZXMgbWF5IiwibGFuZ3VhZ2UgYXMgZGlmZmVyZW5jZXMgbWF5IGV4aXN0IiwiYXMgZGlmZmVyZW5jZXMgbWF5IGV4aXN0IHRoZSIsImRpZmZlcmVuY2VzIG1heSBleGlzdCB0aGUgY29tcGxldGUiLCJtYXkgZXhpc3QgdGhlIGNvbXBsZXRlIGxpY2Vuc2UiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIE9wZW5MREFQIFB1YmxpYyBMaWNlbnNlXG5cblZlcnNpb24gMS4zLCAxNyBKYW51YXJ5IDE5OTkgQ29weXJpZ2h0IDE5OTgtMTk5OSwgVGhlIE9wZW5MREFQIEZvdW5kYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIE5vdGU6IFRoaXMgbGljZW5zZSBpcyBkZXJpdmVkIGZyb20gdGhlIFwiQXJ0aXN0aWMgTGljZW5zZVwiIGFzIGRpc3RyaWJ1dGVkIHdpdGggdGhlIFBlcmwgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UuIEFzIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGV4aXN0LCB0aGUgY29tcGxldGUgbGljZW5zZSBzaG91bGQgYmUgcmVhZC5cblxuUFJFQU1CTEVcblxuVGhlIGludGVudCBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIHN0YXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgUGFja2FnZSBtYXkgYmUgY29waWVkLCBzdWNoIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zIHNvbWUgc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIHBhY2thZ2UsIHdoaWxlIGdpdmluZyB0aGUgdXNlcnMgb2YgdGhlIHBhY2thZ2UgdGhlIHJpZ2h0IHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGUgUGFja2FnZSBpbiBhIG1vcmUtb3ItbGVzcyBjdXN0b21hcnkgZmFzaGlvbiwgcGx1cyB0aGUgcmlnaHQgdG8gbWFrZSByZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuXG5cbkRlZmluaXRpb25zOlxuXG5cIlBhY2thZ2VcIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgZmlsZXMgZGlzdHJpYnV0ZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gb2YgZmlsZXMgY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLlxuXG5cIlN0YW5kYXJkIFZlcnNpb25cIiByZWZlcnMgdG8gc3VjaCBhIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHdpc2hlcyBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci5cblxuXCJDb3B5cmlnaHQgSG9sZGVyXCIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yIGNvcHlyaWdodHMgZm9yIHRoZSBwYWNrYWdlLlxuXG5cIllvdVwiIGlzIHlvdSwgaWYgeW91J3JlIHRoaW5raW5nIGFib3V0IGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoaXMgUGFja2FnZS5cblxuXCJSZWFzb25hYmxlIGNvcHlpbmcgZmVlXCIgaXMgd2hhdGV2ZXIgeW91IGNhbiBqdXN0aWZ5IG9uIHRoZSBiYXNpcyBvZiBtZWRpYSBjb3N0LCBkdXBsaWNhdGlvbiBjaGFyZ2VzLCB0aW1lIG9mIHBlb3BsZSBpbnZvbHZlZCwgYW5kIHNvIG9uLiAoWW91IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGp1c3RpZnkgaXQgdG8gdGhlIENvcHlyaWdodCBIb2xkZXIsIGJ1dCBvbmx5IHRvIHRoZSBjb21wdXRpbmcgY29tbXVuaXR5IGF0IGxhcmdlIGFzIGEgbWFya2V0IHRoYXQgbXVzdCBiZWFyIHRoZSBmZWUuKVxuXG5cIkZyZWVseSBBdmFpbGFibGVcIiBtZWFucyB0aGF0IG5vIGZlZSBpcyBjaGFyZ2VkIGZvciB0aGUgaXRlbSBpdHNlbGYsIHRob3VnaCB0aGVyZSBtYXkgYmUgZmVlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUgaXRlbS4gSXQgYWxzbyBtZWFucyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIGl0ZW0gbWF5IHJlZGlzdHJpYnV0ZSBpdCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHRoZXkgcmVjZWl2ZWQgaXQuXG5cbiAgIDEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLlxuXG4gICAyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyIG1vZGlmaWNhdGlvbnMgZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIG9yIGZyb20gdGhlIENvcHlyaWdodCBIb2xkZXIuIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24uXG5cbiAgIDMuIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhpcyBQYWNrYWdlIGluIGFueSB3YXksIHByb3ZpZGVkIHRoYXQgeW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUgc3RhdGluZyBob3cgYW5kIHdoZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEpIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UgbWFrZSB0aGVtIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBwbGFjaW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWFqb3IgYXJjaGl2ZSBzaXRlIHN1Y2ggYXMgdXVuZXQudXUubmV0LCBvciBieSBhbGxvd2luZyB0aGUgQ29weXJpZ2h0IEhvbGRlciB0byBpbmNsdWRlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgUGFja2FnZS5cblxuICAgICAgYikgdXNlIHRoZSBtb2RpZmllZCBQYWNrYWdlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uLlxuXG4gICAgICBjKSByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBzbyB0aGUgbmFtZXMgZG8gbm90IGNvbmZsaWN0IHdpdGggc3RhbmRhcmQgZXhlY3V0YWJsZXMsIHdoaWNoIG11c3QgYWxzbyBiZSBwcm92aWRlZCwgYW5kIHByb3ZpZGUgYSBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSB0aGF0IGNsZWFybHkgZG9jdW1lbnRzIGhvdyBpdCBkaWZmZXJzIGZyb20gdGhlIFN0YW5kYXJkIFZlcnNpb24uXG5cbiAgICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLlxuXG4gICA0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSBkaXN0cmlidXRlIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZXMgYW5kIGxpYnJhcnkgZmlsZXMsIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLlxuXG4gICAgICBiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZiB0aGUgUGFja2FnZSB3aXRoIHlvdXIgbW9kaWZpY2F0aW9ucy5cblxuICAgICAgYykgYWNjb21wYW55IGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIFN0YW5kYXJkIFZlcnNpb24gZXhlY3V0YWJsZXMsIGdpdmluZyB0aGUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIG5vbi1zdGFuZGFyZCBuYW1lcywgYW5kIGNsZWFybHkgZG9jdW1lbnRpbmcgdGhlIGRpZmZlcmVuY2VzIGluIG1hbnVhbCBwYWdlcyAob3IgZXF1aXZhbGVudCksIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi5cblxuICAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuXG5cbiAgIDUuIFlvdSBtYXkgY2hhcmdlIGEgcmVhc29uYWJsZSBjb3B5aW5nIGZlZSBmb3IgYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2UuIFlvdSBtYXkgY2hhcmdlIGFueSBmZWUgeW91IGNob29zZSBmb3Igc3VwcG9ydCBvZiB0aGlzIFBhY2thZ2UuIFlvdSBtYXkgbm90IGNoYXJnZSBhIGZlZSBmb3IgdGhpcyBQYWNrYWdlIGl0c2VsZi4gSG93ZXZlciwgeW91IG1heSBkaXN0cmlidXRlIHRoaXMgUGFja2FnZSBpbiBhZ2dyZWdhdGUgd2l0aCBvdGhlciAocG9zc2libHkgY29tbWVyY2lhbCkgcHJvZ3JhbXMgYXMgcGFydCBvZiBhIGxhcmdlciAocG9zc2libHkgY29tbWVyY2lhbCkgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHByb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBhZHZlcnRpc2UgdGhpcyBQYWNrYWdlIGFzIGEgcHJvZHVjdCBvZiB5b3VyIG93bi5cblxuICAgNi4gVGhlIHNjcmlwdHMgYW5kIGxpYnJhcnkgZmlsZXMgc3VwcGxpZWQgYXMgaW5wdXQgdG8gb3IgcHJvZHVjZWQgYXMgb3V0cHV0IGZyb20gdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsIHVuZGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYmVsb25nIHRvIHdob21ldmVyIGdlbmVyYXRlZCB0aGVtLCBhbmQgbWF5IGJlIHNvbGQgY29tbWVyY2lhbGx5LCBhbmQgbWF5IGJlIGFnZ3JlZ2F0ZWQgd2l0aCB0aGlzIFBhY2thZ2UuXG5cbiAgIDcuIEMgc3Vicm91dGluZXMgc3VwcGxpZWQgYnkgeW91IGFuZCBsaW5rZWQgaW50byB0aGlzIFBhY2thZ2UgaW4gb3JkZXIgdG8gZW11bGF0ZSBzdWJyb3V0aW5lcyBhbmQgdmFyaWFibGVzIGRlZmluZWQgYnkgdGhpcyBQYWNrYWdlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYXJlIHRoZSBlcXVpdmFsZW50IG9mIGlucHV0IGFzIGluIFBhcmFncmFwaCA2LCBwcm92aWRlZCB0aGVzZSBzdWJyb3V0aW5lcyBkbyBub3QgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgUGFja2FnZSBpbiBhbnkgd2F5IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gZmFpbCB0aGUgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlIFBhY2thZ2UuXG5cbiAgIDguIFNvZnR3YXJlIHN1cHBsaWVkIGJ5IHlvdSBhbmQgbGlua2VkIHdpdGggdGhpcyBQYWNrYWdlIGluIG9yZGVyIHRvIHVzZSBzdWJyb3V0aW5lcyBhbmQgdmFyaWFibGVzIGRlZmluZWQgYnkgdGhpcyBQYWNrYWdlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBQYWNrYWdlIGFuZCBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsIHVuZGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLCBhbmQgdGhlIGV4ZWN1dGFibGVzIHByb2R1Y2VkIGJ5IGxpbmtpbmcgeW91ciBzb2Z0d2FyZSB3aXRoIHRoaXMgUGFja2FnZSBtYXkgYmUgdXNlZCBhbmQgcmVkaXN0cmlidXRlZCB3aXRob3V0IHJlc3RyaWN0aW9uIGFuZCBtYXkgYmUgc29sZCBjb21tZXJjaWFsbHkuXG5cbiAgIDkuIFRoZSBuYW1lIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cbiAgIDEwLiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVGhlIEVuZCJdLCJsaWNlbnNlSWRzIjpbIk9MREFQLTEuMyJdLCJrZXl3b3JkcyI6WyIxIDMgMTciLCIzIDE3IGphbnVhcnkiLCIxNyBqYW51YXJ5IDE5OTkiLCJwYWNrYWdlIGFuZCB0aGUiLCJhbmQgdGhlIGV4ZWN1dGFibGVzIiwidGhlIGV4ZWN1dGFibGVzIHByb2R1Y2VkIiwic29sZCBjb21tZXJjaWFsbHkgOSIsImNvbW1lcmNpYWxseSA5IHRoZSIsInZlcnNpb24gMSAzIDE3IiwiMSAzIDE3IGphbnVhcnkiLCIzIDE3IGphbnVhcnkgMTk5OSIsIjE3IGphbnVhcnkgMTk5OSBjb3B5cmlnaHQiLCJ0aGlzIHBhY2thZ2UgYW5kIHRoZSIsInBhY2thZ2UgYW5kIHRoZSBleGVjdXRhYmxlcyIsImFuZCB0aGUgZXhlY3V0YWJsZXMgcHJvZHVjZWQiLCJ0aGUgZXhlY3V0YWJsZXMgcHJvZHVjZWQgYnkiLCJiZSBzb2xkIGNvbW1lcmNpYWxseSA5Iiwic29sZCBjb21tZXJjaWFsbHkgOSB0aGUiLCJjb21tZXJjaWFsbHkgOSB0aGUgbmFtZSIsImxpY2Vuc2UgdmVyc2lvbiAxIDMgMTciLCJ2ZXJzaW9uIDEgMyAxNyBqYW51YXJ5IiwiMSAzIDE3IGphbnVhcnkgMTk5OSIsIjMgMTcgamFudWFyeSAxOTk5IGNvcHlyaWdodCIsIjE3IGphbnVhcnkgMTk5OSBjb3B5cmlnaHQgMTk5OCIsImNvcHlyaWdodCBvZiB0aGlzIHBhY2thZ2UgYW5kIiwib2YgdGhpcyBwYWNrYWdlIGFuZCB0aGUiLCJ0aGlzIHBhY2thZ2UgYW5kIHRoZSBleGVjdXRhYmxlcyIsInBhY2thZ2UgYW5kIHRoZSBleGVjdXRhYmxlcyBwcm9kdWNlZCIsImFuZCB0aGUgZXhlY3V0YWJsZXMgcHJvZHVjZWQgYnkiLCJ0aGUgZXhlY3V0YWJsZXMgcHJvZHVjZWQgYnkgbGlua2luZyIsIm1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSA5IiwiYmUgc29sZCBjb21tZXJjaWFsbHkgOSB0aGUiLCJzb2xkIGNvbW1lcmNpYWxseSA5IHRoZSBuYW1lIiwiY29tbWVyY2lhbGx5IDkgdGhlIG5hbWUgb2YiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIE9wZW5MREFQIFB1YmxpYyBMaWNlbnNlXG5cblZlcnNpb24gMS40LCAxOCBKYW51YXJ5IDE5OTkgQ29weXJpZ2h0IDE5OTgtMTk5OSwgVGhlIE9wZW5MREFQIEZvdW5kYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIE5vdGU6IFRoaXMgbGljZW5zZSBpcyBkZXJpdmVkIGZyb20gdGhlIFwiQXJ0aXN0aWMgTGljZW5zZVwiIGFzIGRpc3RyaWJ1dGVkIHdpdGggdGhlIFBlcmwgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UuIEFzIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGV4aXN0LCB0aGUgY29tcGxldGUgbGljZW5zZSBzaG91bGQgYmUgcmVhZC5cblxuUFJFQU1CTEVcblxuVGhlIGludGVudCBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIHN0YXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgUGFja2FnZSBtYXkgYmUgY29waWVkLCBzdWNoIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zIHNvbWUgc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIHBhY2thZ2UsIHdoaWxlIGdpdmluZyB0aGUgdXNlcnMgb2YgdGhlIHBhY2thZ2UgdGhlIHJpZ2h0IHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGUgUGFja2FnZSBpbiBhIG1vcmUtb3ItbGVzcyBjdXN0b21hcnkgZmFzaGlvbiwgcGx1cyB0aGUgcmlnaHQgdG8gbWFrZSByZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuXG5cbkRlZmluaXRpb25zOlxuXG5cIlBhY2thZ2VcIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgZmlsZXMgZGlzdHJpYnV0ZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gb2YgZmlsZXMgY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLlxuXG5cIlN0YW5kYXJkIFZlcnNpb25cIiByZWZlcnMgdG8gc3VjaCBhIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHdpc2hlcyBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci5cblxuXCJDb3B5cmlnaHQgSG9sZGVyXCIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yIGNvcHlyaWdodHMgZm9yIHRoZSBwYWNrYWdlLlxuXG5cIllvdVwiIGlzIHlvdSwgaWYgeW91J3JlIHRoaW5raW5nIGFib3V0IGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoaXMgUGFja2FnZS5cblxuXCJSZWFzb25hYmxlIGNvcHlpbmcgZmVlXCIgaXMgd2hhdGV2ZXIgeW91IGNhbiBqdXN0aWZ5IG9uIHRoZSBiYXNpcyBvZiBtZWRpYSBjb3N0LCBkdXBsaWNhdGlvbiBjaGFyZ2VzLCB0aW1lIG9mIHBlb3BsZSBpbnZvbHZlZCwgYW5kIHNvIG9uLiAoWW91IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGp1c3RpZnkgaXQgdG8gdGhlIENvcHlyaWdodCBIb2xkZXIsIGJ1dCBvbmx5IHRvIHRoZSBjb21wdXRpbmcgY29tbXVuaXR5IGF0IGxhcmdlIGFzIGEgbWFya2V0IHRoYXQgbXVzdCBiZWFyIHRoZSBmZWUuKVxuXG5cIkZyZWVseSBBdmFpbGFibGVcIiBtZWFucyB0aGF0IG5vIGZlZSBpcyBjaGFyZ2VkIGZvciB0aGUgaXRlbSBpdHNlbGYsIHRob3VnaCB0aGVyZSBtYXkgYmUgZmVlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUgaXRlbS4gSXQgYWxzbyBtZWFucyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIGl0ZW0gbWF5IHJlZGlzdHJpYnV0ZSBpdCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHRoZXkgcmVjZWl2ZWQgaXQuXG5cbiAgIDEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLlxuXG4gICAyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyIG1vZGlmaWNhdGlvbnMgZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIG9yIGZyb20gdGhlIENvcHlyaWdodCBIb2xkZXIuIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24uXG5cbiAgIDMuIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhpcyBQYWNrYWdlIGluIGFueSB3YXksIHByb3ZpZGVkIHRoYXQgeW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUgc3RhdGluZyBob3cgYW5kIHdoZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEpIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UgbWFrZSB0aGVtIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBwbGFjaW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWFqb3IgYXJjaGl2ZSBzaXRlIHN1Y2ggYXMgdXVuZXQudXUubmV0LCBvciBieSBhbGxvd2luZyB0aGUgQ29weXJpZ2h0IEhvbGRlciB0byBpbmNsdWRlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgUGFja2FnZS5cblxuICAgICAgYikgdXNlIHRoZSBtb2RpZmllZCBQYWNrYWdlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uLlxuXG4gICAgICBjKSByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBzbyB0aGUgbmFtZXMgZG8gbm90IGNvbmZsaWN0IHdpdGggc3RhbmRhcmQgZXhlY3V0YWJsZXMsIHdoaWNoIG11c3QgYWxzbyBiZSBwcm92aWRlZCwgYW5kIHByb3ZpZGUgYSBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSB0aGF0IGNsZWFybHkgZG9jdW1lbnRzIGhvdyBpdCBkaWZmZXJzIGZyb20gdGhlIFN0YW5kYXJkIFZlcnNpb24uXG5cbiAgICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLlxuXG4gICA0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSBkaXN0cmlidXRlIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZXMgYW5kIGxpYnJhcnkgZmlsZXMsIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLlxuXG4gICAgICBiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZiB0aGUgUGFja2FnZSB3aXRoIHlvdXIgbW9kaWZpY2F0aW9ucy5cblxuICAgICAgYykgYWNjb21wYW55IGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIFN0YW5kYXJkIFZlcnNpb24gZXhlY3V0YWJsZXMsIGdpdmluZyB0aGUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIG5vbi1zdGFuZGFyZCBuYW1lcywgYW5kIGNsZWFybHkgZG9jdW1lbnRpbmcgdGhlIGRpZmZlcmVuY2VzIGluIG1hbnVhbCBwYWdlcyAob3IgZXF1aXZhbGVudCksIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi5cblxuICAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuXG5cbiAgIDUuIFlvdSBtYXkgY2hhcmdlIGEgcmVhc29uYWJsZSBjb3B5aW5nIGZlZSBmb3IgYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2UuIFlvdSBtYXkgY2hhcmdlIGFueSBmZWUgeW91IGNob29zZSBmb3Igc3VwcG9ydCBvZiB0aGlzIFBhY2thZ2UuIFlvdSBtYXkgbm90IGNoYXJnZSBhIGZlZSBmb3IgdGhpcyBQYWNrYWdlIGl0c2VsZi4gSG93ZXZlciwgeW91IG1heSBkaXN0cmlidXRlIHRoaXMgUGFja2FnZSBpbiBhZ2dyZWdhdGUgd2l0aCBvdGhlciAocG9zc2libHkgY29tbWVyY2lhbCkgcHJvZ3JhbXMgYXMgcGFydCBvZiBhIGxhcmdlciAocG9zc2libHkgY29tbWVyY2lhbCkgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHByb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBhZHZlcnRpc2UgdGhpcyBQYWNrYWdlIGFzIGEgcHJvZHVjdCBvZiB5b3VyIG93bi5cblxuICAgNi4gVGhlIHNjcmlwdHMgYW5kIGxpYnJhcnkgZmlsZXMgc3VwcGxpZWQgYXMgaW5wdXQgdG8gb3IgcHJvZHVjZWQgYXMgb3V0cHV0IGZyb20gdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsIHVuZGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYmVsb25nIHRvIHdob21ldmVyIGdlbmVyYXRlZCB0aGVtLCBhbmQgbWF5IGJlIHNvbGQgY29tbWVyY2lhbGx5LCBhbmQgbWF5IGJlIGFnZ3JlZ2F0ZWQgd2l0aCB0aGlzIFBhY2thZ2UuXG5cbiAgIDcuIEMgc3Vicm91dGluZXMgc3VwcGxpZWQgYnkgeW91IGFuZCBsaW5rZWQgaW50byB0aGlzIFBhY2thZ2UgaW4gb3JkZXIgdG8gZW11bGF0ZSBzdWJyb3V0aW5lcyBhbmQgdmFyaWFibGVzIGRlZmluZWQgYnkgdGhpcyBQYWNrYWdlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYXJlIHRoZSBlcXVpdmFsZW50IG9mIGlucHV0IGFzIGluIFBhcmFncmFwaCA2LCBwcm92aWRlZCB0aGVzZSBzdWJyb3V0aW5lcyBkbyBub3QgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgUGFja2FnZSBpbiBhbnkgd2F5IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gZmFpbCB0aGUgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlIFBhY2thZ2UuXG5cbiAgIDguIFNvZnR3YXJlIHN1cHBsaWVkIGJ5IHlvdSBhbmQgbGlua2VkIHdpdGggdGhpcyBQYWNrYWdlIGluIG9yZGVyIHRvIHVzZSBzdWJyb3V0aW5lcyBhbmQgdmFyaWFibGVzIGRlZmluZWQgYnkgdGhpcyBQYWNrYWdlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBQYWNrYWdlIGFuZCBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsIHVuZGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLiBFeGVjdXRhYmxlcyBwcm9kdWNlZCBieSBsaW5raW5nIHlvdXIgc29mdHdhcmUgd2l0aCB0aGlzIFBhY2thZ2UgbWF5IGJlIHVzZWQgYW5kIHJlZGlzdHJpYnV0ZWQgd2l0aG91dCByZXN0cmljdGlvbiBhbmQgbWF5IGJlIHNvbGQgY29tbWVyY2lhbGx5IHNvIGxvbmcgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgeW91ciBzb2Z0d2FyZSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgcGFja2FnZSBpdHNlbGYuXG5cbiAgIDkuIFRoZSBuYW1lIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cbiAgIDEwLiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVGhlIEVuZCJdLCJsaWNlbnNlSWRzIjpbIk9MREFQLTEuNCJdLCJrZXl3b3JkcyI6WyIxIDQgMTgiLCI0IDE4IGphbnVhcnkiLCIxOCBqYW51YXJ5IDE5OTkiLCJ0aGlzIHBhY2thZ2UgZXhlY3V0YWJsZXMiLCJwYWNrYWdlIGV4ZWN1dGFibGVzIHByb2R1Y2VkIiwic29sZCBjb21tZXJjaWFsbHkgc28iLCJjb21tZXJjaWFsbHkgc28gbG9uZyIsInRoZSBwcmltYXJ5IGZ1bmN0aW9uIiwicHJpbWFyeSBmdW5jdGlvbiBvZiIsImZ1bmN0aW9uIG9mIHlvdXIiLCJzb2Z0d2FyZSBpcyBkaWZmZXJlbnQiLCJpcyBkaWZmZXJlbnQgdGhhbiIsImRpZmZlcmVudCB0aGFuIHRoZSIsInRoYW4gdGhlIHBhY2thZ2UiLCJwYWNrYWdlIGl0c2VsZiA5IiwiaXRzZWxmIDkgdGhlIiwidmVyc2lvbiAxIDQgMTgiLCIxIDQgMTggamFudWFyeSIsIjQgMTggamFudWFyeSAxOTk5IiwiMTggamFudWFyeSAxOTk5IGNvcHlyaWdodCIsIm9mIHRoaXMgcGFja2FnZSBleGVjdXRhYmxlcyIsInRoaXMgcGFja2FnZSBleGVjdXRhYmxlcyBwcm9kdWNlZCIsInBhY2thZ2UgZXhlY3V0YWJsZXMgcHJvZHVjZWQgYnkiLCJiZSBzb2xkIGNvbW1lcmNpYWxseSBzbyIsInNvbGQgY29tbWVyY2lhbGx5IHNvIGxvbmciLCJjb21tZXJjaWFsbHkgc28gbG9uZyBhcyIsImxvbmcgYXMgdGhlIHByaW1hcnkiLCJhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiIsInRoZSBwcmltYXJ5IGZ1bmN0aW9uIG9mIiwicHJpbWFyeSBmdW5jdGlvbiBvZiB5b3VyIiwiZnVuY3Rpb24gb2YgeW91ciBzb2Z0d2FyZSIsIm9mIHlvdXIgc29mdHdhcmUgaXMiLCJ5b3VyIHNvZnR3YXJlIGlzIGRpZmZlcmVudCIsInNvZnR3YXJlIGlzIGRpZmZlcmVudCB0aGFuIiwiaXMgZGlmZmVyZW50IHRoYW4gdGhlIiwiZGlmZmVyZW50IHRoYW4gdGhlIHBhY2thZ2UiLCJ0aGFuIHRoZSBwYWNrYWdlIGl0c2VsZiIsInRoZSBwYWNrYWdlIGl0c2VsZiA5IiwicGFja2FnZSBpdHNlbGYgOSB0aGUiLCJpdHNlbGYgOSB0aGUgbmFtZSIsImxpY2Vuc2UgdmVyc2lvbiAxIDQgMTgiLCJ2ZXJzaW9uIDEgNCAxOCBqYW51YXJ5IiwiMSA0IDE4IGphbnVhcnkgMTk5OSIsIjQgMTggamFudWFyeSAxOTk5IGNvcHlyaWdodCIsIjE4IGphbnVhcnkgMTk5OSBjb3B5cmlnaHQgMTk5OCIsImNvcHlyaWdodCBvZiB0aGlzIHBhY2thZ2UgZXhlY3V0YWJsZXMiLCJvZiB0aGlzIHBhY2thZ2UgZXhlY3V0YWJsZXMgcHJvZHVjZWQiLCJ0aGlzIHBhY2thZ2UgZXhlY3V0YWJsZXMgcHJvZHVjZWQgYnkiLCJwYWNrYWdlIGV4ZWN1dGFibGVzIHByb2R1Y2VkIGJ5IGxpbmtpbmciLCJtYXkgYmUgc29sZCBjb21tZXJjaWFsbHkgc28iLCJiZSBzb2xkIGNvbW1lcmNpYWxseSBzbyBsb25nIiwic29sZCBjb21tZXJjaWFsbHkgc28gbG9uZyBhcyIsImNvbW1lcmNpYWxseSBzbyBsb25nIGFzIHRoZSIsInNvIGxvbmcgYXMgdGhlIHByaW1hcnkiLCJsb25nIGFzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIiwiYXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YiLCJ0aGUgcHJpbWFyeSBmdW5jdGlvbiBvZiB5b3VyIiwicHJpbWFyeSBmdW5jdGlvbiBvZiB5b3VyIHNvZnR3YXJlIiwiZnVuY3Rpb24gb2YgeW91ciBzb2Z0d2FyZSBpcyIsIm9mIHlvdXIgc29mdHdhcmUgaXMgZGlmZmVyZW50IiwieW91ciBzb2Z0d2FyZSBpcyBkaWZmZXJlbnQgdGhhbiIsInNvZnR3YXJlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSIsImlzIGRpZmZlcmVudCB0aGFuIHRoZSBwYWNrYWdlIiwiZGlmZmVyZW50IHRoYW4gdGhlIHBhY2thZ2UgaXRzZWxmIiwidGhhbiB0aGUgcGFja2FnZSBpdHNlbGYgOSIsInRoZSBwYWNrYWdlIGl0c2VsZiA5IHRoZSIsInBhY2thZ2UgaXRzZWxmIDkgdGhlIG5hbWUiLCJpdHNlbGYgOSB0aGUgbmFtZSBvZiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgT3BlbkxEQVAgUHVibGljIExpY2Vuc2VcblxuVmVyc2lvbiAyLjAuMSwgMjEgRGVjZW1iZXIgMTk5OSBDb3B5cmlnaHQgMTk5OSwgVGhlIE9wZW5MREFQIEZvdW5kYXRpb24sIFJlZHdvb2QgQ2l0eSwgQ2FsaWZvcm5pYSwgVVNBLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiAoXCJTb2Z0d2FyZVwiKSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gY29weXJpZ2h0IHN0YXRlbWVudHMgYW5kIG5vdGljZXMuIFJlZGlzdHJpYnV0aW9ucyBtdXN0IGFsc28gY29udGFpbiBhIGNvcHkgb2YgdGhpcyBkb2N1bWVudC5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBUaGUgbmFtZSBcIk9wZW5MREFQXCIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGZvdW5kYXRpb25Ab3BlbmxkYXAub3JnLlxuXG4gICA0LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCBcIk9wZW5MREFQXCIgbm9yIG1heSBcIk9wZW5MREFQXCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuTERBUCBGb3VuZGF0aW9uLiBPcGVuTERBUCBpcyBhIHRyYWRlbWFyayBvZiB0aGUgT3BlbkxEQVAgRm91bmRhdGlvbi5cblxuICAgNS4gRHVlIGNyZWRpdCBzaG91bGQgYmUgZ2l2ZW4gdG8gdGhlIE9wZW5MREFQIFByb2plY3QgKGh0dHA6Ly93d3cub3BlbmxkYXAub3JnLykuXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9QRU5MREFQIEZPVU5EQVRJT04gQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT1BFTkxEQVAgRk9VTkRBVElPTiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiJdLCJsaWNlbnNlSWRzIjpbIk9MREFQLTIuMC4xIl0sImtleXdvcmRzIjpbIjAgMSAyMSIsIjEgMjEgZGVjZW1iZXIiLCIyMSBkZWNlbWJlciAxOTk5IiwiZGVjZW1iZXIgMTk5OSBjb3B5cmlnaHQiLCIyIDAgMSAyMSIsIjAgMSAyMSBkZWNlbWJlciIsIjEgMjEgZGVjZW1iZXIgMTk5OSIsIjIxIGRlY2VtYmVyIDE5OTkgY29weXJpZ2h0IiwiZGVjZW1iZXIgMTk5OSBjb3B5cmlnaHQgMTk5OSIsInZlcnNpb24gMiAwIDEgMjEiLCIyIDAgMSAyMSBkZWNlbWJlciIsIjAgMSAyMSBkZWNlbWJlciAxOTk5IiwiMSAyMSBkZWNlbWJlciAxOTk5IGNvcHlyaWdodCIsIjIxIGRlY2VtYmVyIDE5OTkgY29weXJpZ2h0IDE5OTkiLCJkZWNlbWJlciAxOTk5IGNvcHlyaWdodCAxOTk5IHRoZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgT3BlbkxEQVAgUHVibGljIExpY2Vuc2VcblxuVmVyc2lvbiAyLjAsIDcgSnVuZSAxOTk5IENvcHlyaWdodCAxOTk5LCBUaGUgT3BlbkxEQVAgRm91bmRhdGlvbiwgUmVkd29vZCBDaXR5LCBDYWxpZm9ybmlhLCBVU0EuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIChcIlNvZnR3YXJlXCIpLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiBjb3B5cmlnaHQgc3RhdGVtZW50cyBhbmQgbm90aWNlcy4gUmVkaXN0cmlidXRpb25zIG11c3QgYWxzbyBjb250YWluIGEgY29weSBvZiB0aGlzIGRvY3VtZW50LlxuXG4gICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgIDMuIFRoZSBuYW1lIFwiT3BlbkxEQVBcIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3BlbkxEQVAgRm91bmRhdGlvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgZm91bmRhdGlvbkBvcGVubGRhcC5vcmcuXG5cbiAgIDQuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkIFwiT3BlbkxEQVBcIiBub3IgbWF5IFwiT3BlbkxEQVBcIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uIE9wZW5MREFQIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uXG5cbiAgIDUuIER1ZSBjcmVkaXQgc2hvdWxkIGJlIGdpdmVuIHRvIHRoZSBPcGVuTERBUCBQcm9qZWN0IChodHRwOi8vd3d3Lm9wZW5sZGFwLm9yZy8pLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPUEVOTERBUCBGT1VOREFUSU9OIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9QRU5MREFQIEZPVU5EQVRJT04gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iXSwibGljZW5zZUlkcyI6WyJPTERBUC0yLjAiXSwia2V5d29yZHMiOlsiMiAwIDciLCIwIDcganVuZSIsIjcganVuZSAxOTk5IiwianVuZSAxOTk5IGNvcHlyaWdodCIsInZlcnNpb24gMiAwIDciLCIyIDAgNyBqdW5lIiwiMCA3IGp1bmUgMTk5OSIsIjcganVuZSAxOTk5IGNvcHlyaWdodCIsImp1bmUgMTk5OSBjb3B5cmlnaHQgMTk5OSIsImxpY2Vuc2UgdmVyc2lvbiAyIDAgNyIsInZlcnNpb24gMiAwIDcganVuZSIsIjIgMCA3IGp1bmUgMTk5OSIsIjAgNyBqdW5lIDE5OTkgY29weXJpZ2h0IiwiNyBqdW5lIDE5OTkgY29weXJpZ2h0IDE5OTkiLCJqdW5lIDE5OTkgY29weXJpZ2h0IDE5OTkgdGhlIiwiZm91bmRhdGlvbiBvcGVubGRhcCBpcyBhIHJlZ2lzdGVyZWQiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIE9wZW5MREFQIFB1YmxpYyBMaWNlbnNlXG5cblZlcnNpb24gMi4xLCAyOSBGZWJydWFyeSAyMDAwIENvcHlyaWdodCAxOTk5LTIwMDAsIFRoZSBPcGVuTERBUCBGb3VuZGF0aW9uLCBSZWR3b29kIENpdHksIENhbGlmb3JuaWEsIFVTQS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gKFwiU29mdHdhcmVcIiksIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIGNvcHlyaWdodCBzdGF0ZW1lbnRzIGFuZCBub3RpY2VzLiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCBhbHNvIGNvbnRhaW4gYSBjb3B5IG9mIHRoaXMgZG9jdW1lbnQuXG5cbiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgMy4gVGhlIG5hbWUgXCJPcGVuTERBUFwiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuTERBUCBGb3VuZGF0aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBmb3VuZGF0aW9uQG9wZW5sZGFwLm9yZy5cblxuICAgNC4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgXCJPcGVuTERBUFwiIG5vciBtYXkgXCJPcGVuTERBUFwiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3BlbkxEQVAgRm91bmRhdGlvbi4gT3BlbkxEQVAgaXMgYSB0cmFkZW1hcmsgb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uXG5cbiAgIDUuIER1ZSBjcmVkaXQgc2hvdWxkIGJlIGdpdmVuIHRvIHRoZSBPcGVuTERBUCBQcm9qZWN0IChodHRwOi8vd3d3Lm9wZW5sZGFwLm9yZy8pLlxuXG4gICA2LiBUaGUgT3BlbkxEQVAgRm91bmRhdGlvbiBtYXkgcmV2aXNlIHRoaXMgbGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCByZXZpc2lvbiBpcyBkaXN0aW5ndWlzaGVkIGJ5IGEgdmVyc2lvbiBudW1iZXIuIFlvdSBtYXkgdXNlIHRoZSBTb2Z0d2FyZSB1bmRlciB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgcmV2aXNpb24gb3IgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IGxpY2Vuc2UgcmV2aXNpb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9QRU5MREFQIEZPVU5EQVRJT04gQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT1BFTkxEQVAgRk9VTkRBVElPTiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiJdLCJsaWNlbnNlSWRzIjpbIk9MREFQLTIuMSJdLCJrZXl3b3JkcyI6WyIyIDEgMjkiLCIxIDI5IGZlYnJ1YXJ5IiwiMjkgZmVicnVhcnkgMjAwMCIsImZlYnJ1YXJ5IDIwMDAgY29weXJpZ2h0IiwiMjAwMCBjb3B5cmlnaHQgMTk5OSIsImFueSBzdWJzZXF1ZW50IGxpY2Vuc2UiLCJzdWJzZXF1ZW50IGxpY2Vuc2UgcmV2aXNpb24iLCJsaWNlbnNlIHJldmlzaW9uIHRoaXMiLCJyZXZpc2lvbiB0aGlzIHNvZnR3YXJlIiwidmVyc2lvbiAyIDEgMjkiLCIyIDEgMjkgZmVicnVhcnkiLCIxIDI5IGZlYnJ1YXJ5IDIwMDAiLCIyOSBmZWJydWFyeSAyMDAwIGNvcHlyaWdodCIsImZlYnJ1YXJ5IDIwMDAgY29weXJpZ2h0IDE5OTkiLCIyMDAwIGNvcHlyaWdodCAxOTk5IDIwMDAiLCJvZiBhbnkgc3Vic2VxdWVudCBsaWNlbnNlIiwiYW55IHN1YnNlcXVlbnQgbGljZW5zZSByZXZpc2lvbiIsInN1YnNlcXVlbnQgbGljZW5zZSByZXZpc2lvbiB0aGlzIiwibGljZW5zZSByZXZpc2lvbiB0aGlzIHNvZnR3YXJlIiwicmV2aXNpb24gdGhpcyBzb2Z0d2FyZSBpcyIsImxpY2Vuc2UgdmVyc2lvbiAyIDEgMjkiLCJ2ZXJzaW9uIDIgMSAyOSBmZWJydWFyeSIsIjIgMSAyOSBmZWJydWFyeSAyMDAwIiwiMSAyOSBmZWJydWFyeSAyMDAwIGNvcHlyaWdodCIsIjI5IGZlYnJ1YXJ5IDIwMDAgY29weXJpZ2h0IDE5OTkiLCJmZWJydWFyeSAyMDAwIGNvcHlyaWdodCAxOTk5IDIwMDAiLCIyMDAwIGNvcHlyaWdodCAxOTk5IDIwMDAgdGhlIiwidGVybXMgb2YgYW55IHN1YnNlcXVlbnQgbGljZW5zZSIsIm9mIGFueSBzdWJzZXF1ZW50IGxpY2Vuc2UgcmV2aXNpb24iLCJhbnkgc3Vic2VxdWVudCBsaWNlbnNlIHJldmlzaW9uIHRoaXMiLCJzdWJzZXF1ZW50IGxpY2Vuc2UgcmV2aXNpb24gdGhpcyBzb2Z0d2FyZSIsImxpY2Vuc2UgcmV2aXNpb24gdGhpcyBzb2Z0d2FyZSBpcyIsInJldmlzaW9uIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIE9wZW5MREFQIFB1YmxpYyBMaWNlbnNlXG5cblZlcnNpb24gMi4yLjEsIDEgTWFyY2ggMjAwMFxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiAoXCJTb2Z0d2FyZVwiKSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gY29weXJpZ2h0IHN0YXRlbWVudHMgYW5kIG5vdGljZXMuIFJlZGlzdHJpYnV0aW9ucyBtdXN0IGFsc28gY29udGFpbiBhIGNvcHkgb2YgdGhpcyBkb2N1bWVudC5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBUaGUgbmFtZSBcIk9wZW5MREFQXCIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uXG5cbiAgIDQuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkIFwiT3BlbkxEQVBcIiBub3IgbWF5IFwiT3BlbkxEQVBcIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uXG5cbiAgIDUuIER1ZSBjcmVkaXQgc2hvdWxkIGJlIGdpdmVuIHRvIHRoZSBPcGVuTERBUCBQcm9qZWN0IChodHRwOi8vd3d3Lm9wZW5sZGFwLm9yZy8pLlxuXG4gICA2LiBUaGUgT3BlbkxEQVAgRm91bmRhdGlvbiBtYXkgcmV2aXNlIHRoaXMgbGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCByZXZpc2lvbiBpcyBkaXN0aW5ndWlzaGVkIGJ5IGEgdmVyc2lvbiBudW1iZXIuIFlvdSBtYXkgdXNlIHRoZSBTb2Z0d2FyZSB1bmRlciB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgcmV2aXNpb24gb3IgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHJldmlzaW9uIG9mIHRoZSBsaWNlbnNlLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPUEVOTERBUCBGT1VOREFUSU9OIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9QRU5MREFQIEZPVU5EQVRJT04gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuT3BlbkxEQVAgaXMgYSB0cmFkZW1hcmsgb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uXG5cbkNvcHlyaWdodCAxOTk5LTIwMDAgVGhlIE9wZW5MREFQIEZvdW5kYXRpb24sIFJlZHdvb2QgQ2l0eSwgQ2FsaWZvcm5pYSwgVVNBLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBQZXJtaXNzaW9uIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGVkIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGRvY3VtZW50IGlzIGdyYW50ZWQuIl0sImxpY2Vuc2VJZHMiOlsiT0xEQVAtMi4yLjEiXSwia2V5d29yZHMiOlsiMiAyIDEgMSIsIjIgMSAxIG1hcmNoIiwidmVyc2lvbiAyIDIgMSAxIiwiMiAyIDEgMSBtYXJjaCIsIjIgMSAxIG1hcmNoIDIwMDAiLCIxIDEgbWFyY2ggMjAwMCByZWRpc3RyaWJ1dGlvbiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgT3BlbkxEQVAgUHVibGljIExpY2Vuc2VcblxuVmVyc2lvbiAyLjIuMiwgMjggSnVseSAyMDAwXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIChcIlNvZnR3YXJlXCIpLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiBjb3B5cmlnaHQgc3RhdGVtZW50cyBhbmQgbm90aWNlcy5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGFwcGxpY2FibGUgY29weXJpZ2h0IHN0YXRlbWVudHMgYW5kIG5vdGljZXMsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCBjb250YWluIGEgdmVyYmF0aW0gY29weSBvZiB0aGlzIGRvY3VtZW50LlxuXG4gICA0LiBUaGUgbmFtZSBcIk9wZW5MREFQXCIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uXG5cbiAgIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkIFwiT3BlbkxEQVBcIiBub3IgbWF5IFwiT3BlbkxEQVBcIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uXG5cbiAgIDYuIER1ZSBjcmVkaXQgc2hvdWxkIGJlIGdpdmVuIHRvIHRoZSBPcGVuTERBUCBQcm9qZWN0IChodHRwOi8vd3d3Lm9wZW5sZGFwLm9yZy8pLlxuXG4gICA3LiBUaGUgT3BlbkxEQVAgRm91bmRhdGlvbiBtYXkgcmV2aXNlIHRoaXMgbGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCByZXZpc2lvbiBpcyBkaXN0aW5ndWlzaGVkIGJ5IGEgdmVyc2lvbiBudW1iZXIuIFlvdSBtYXkgdXNlIHRoZSBTb2Z0d2FyZSB1bmRlciB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgcmV2aXNpb24gb3IgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHJldmlzaW9uIG9mIHRoZSBsaWNlbnNlLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPUEVOTERBUCBGT1VOREFUSU9OIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9QRU5MREFQIEZPVU5EQVRJT04gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuT3BlbkxEQVAgaXMgYSB0cmFkZW1hcmsgb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uXG5cbkNvcHlyaWdodCAxOTk5LTIwMDAgVGhlIE9wZW5MREFQIEZvdW5kYXRpb24sIFJlZHdvb2QgQ2l0eSwgQ2FsaWZvcm5pYSwgVVNBLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBQZXJtaXNzaW9uIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGVkIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGRvY3VtZW50IGlzIGdyYW50ZWQuIl0sImxpY2Vuc2VJZHMiOlsiT0xEQVAtMi4yLjIiXSwia2V5d29yZHMiOlsiMiAyIDIiLCIyIDIgMjgiLCIyIDI4IGp1bHkiLCJ2ZXJzaW9uIDIgMiAyIiwiMiAyIDIgMjgiLCIyIDIgMjgganVseSIsIjIgMjgganVseSAyMDAwIiwibGljZW5zZSB2ZXJzaW9uIDIgMiAyIiwidmVyc2lvbiAyIDIgMiAyOCIsIjIgMiAyIDI4IGp1bHkiLCIyIDIgMjgganVseSAyMDAwIiwiMiAyOCBqdWx5IDIwMDAgcmVkaXN0cmlidXRpb24iXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIE9wZW5MREFQIFB1YmxpYyBMaWNlbnNlXG5cblZlcnNpb24gMi4yLCAxIE1hcmNoIDIwMDBcblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gKFwiU29mdHdhcmVcIiksIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIGNvcHlyaWdodCBzdGF0ZW1lbnRzIGFuZCBub3RpY2VzLiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCBhbHNvIGNvbnRhaW4gYSBjb3B5IG9mIHRoaXMgZG9jdW1lbnQuXG5cbiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgMy4gVGhlIG5hbWUgXCJPcGVuTERBUFwiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuTERBUCBGb3VuZGF0aW9uLlxuXG4gICA0LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCBcIk9wZW5MREFQXCIgbm9yIG1heSBcIk9wZW5MREFQXCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuTERBUCBGb3VuZGF0aW9uLlxuXG4gICA1LiBEdWUgY3JlZGl0IHNob3VsZCBiZSBnaXZlbiB0byB0aGUgT3BlbkxEQVAgUHJvamVjdCAoaHR0cDovL3d3dy5vcGVubGRhcC5vcmcvKS5cblxuICAgNi4gVGhlIE9wZW5MREFQIEZvdW5kYXRpb24gbWF5IHJldmlzZSB0aGlzIGxpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggcmV2aXNpb24gaXMgZGlzdGluZ3Vpc2hlZCBieSBhIHZlcnNpb24gbnVtYmVyLiBZb3UgbWF5IHVzZSB0aGUgU29mdHdhcmUgdW5kZXIgdGVybXMgb2YgdGhpcyBsaWNlbnNlIHJldmlzaW9uIG9yIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB0aGUgbGljZW5zZS5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT1BFTkxEQVAgRk9VTkRBVElPTiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPUEVOTERBUCBGT1VOREFUSU9OIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cbk9wZW5MREFQIGlzIGEgdHJhZGVtYXJrIG9mIHRoZSBPcGVuTERBUCBGb3VuZGF0aW9uLlxuXG5Db3B5cmlnaHQgMTk5OS0yMDAwLCBUaGUgT3BlbkxEQVAgRm91bmRhdGlvbiwgUmVkd29vZCBDaXR5LCBDYWxpZm9ybmlhLCBVU0EuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIFBlcm1pc3Npb24gdG8gY29weSBhbmQgZGlzdHJpYnV0ZWQgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgZG9jdW1lbnQgaXMgZ3JhbnRlZC4iXSwibGljZW5zZUlkcyI6WyJPTERBUC0yLjIiXSwia2V5d29yZHMiOlsiMiAxIG1hcmNoIiwiYW55IHN1YnNlcXVlbnQgdGhlIiwic3Vic2VxdWVudCB0aGUgbGljZW5zZSIsIjIgMiAxIG1hcmNoIiwiMiAxIG1hcmNoIDIwMDAiLCJvZiBhbnkgc3Vic2VxdWVudCB0aGUiLCJhbnkgc3Vic2VxdWVudCB0aGUgbGljZW5zZSIsInN1YnNlcXVlbnQgdGhlIGxpY2Vuc2UgdGhpcyIsInZlcnNpb24gMiAyIDEgbWFyY2giLCIyIDIgMSBtYXJjaCAyMDAwIiwiMiAxIG1hcmNoIDIwMDAgcmVkaXN0cmlidXRpb24iLCJ0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB0aGUiLCJvZiBhbnkgc3Vic2VxdWVudCB0aGUgbGljZW5zZSIsImFueSBzdWJzZXF1ZW50IHRoZSBsaWNlbnNlIHRoaXMiLCJzdWJzZXF1ZW50IHRoZSBsaWNlbnNlIHRoaXMgc29mdHdhcmUiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIE9wZW5MREFQIFB1YmxpYyBMaWNlbnNlXG5cblZlcnNpb24gMi4zLCAyOCBKdWx5IDIwMDBcblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gKFwiU29mdHdhcmVcIiksIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIGNvcHlyaWdodCBzdGF0ZW1lbnRzIGFuZCBub3RpY2VzLlxuXG4gICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXBwbGljYWJsZSBjb3B5cmlnaHQgc3RhdGVtZW50cyBhbmQgbm90aWNlcywgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgIDMuIFJlZGlzdHJpYnV0aW9ucyBtdXN0IGNvbnRhaW4gYSB2ZXJiYXRpbSBjb3B5IG9mIHRoaXMgZG9jdW1lbnQuXG5cbiAgIDQuIFRoZSBuYW1lIFwiT3BlbkxEQVBcIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3BlbkxEQVAgRm91bmRhdGlvbi5cblxuICAgNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgXCJPcGVuTERBUFwiIG5vciBtYXkgXCJPcGVuTERBUFwiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3BlbkxEQVAgRm91bmRhdGlvbi5cblxuICAgNi4gRHVlIGNyZWRpdCBzaG91bGQgYmUgZ2l2ZW4gdG8gdGhlIE9wZW5MREFQIFByb2plY3QgKGh0dHA6Ly93d3cub3BlbmxkYXAub3JnLykuXG5cbiAgIDcuIFRoZSBPcGVuTERBUCBGb3VuZGF0aW9uIG1heSByZXZpc2UgdGhpcyBsaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHJldmlzaW9uIGlzIGRpc3Rpbmd1aXNoZWQgYnkgYSB2ZXJzaW9uIG51bWJlci4gWW91IG1heSB1c2UgdGhlIFNvZnR3YXJlIHVuZGVyIHRlcm1zIG9mIHRoaXMgbGljZW5zZSByZXZpc2lvbiBvciB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgcmV2aXNpb24gb2YgdGhlIGxpY2Vuc2UuXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9QRU5MREFQIEZPVU5EQVRJT04gQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT1BFTkxEQVAgRk9VTkRBVElPTiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5PcGVuTERBUCBpcyBhIHRyYWRlbWFyayBvZiB0aGUgT3BlbkxEQVAgRm91bmRhdGlvbi5cblxuQ29weXJpZ2h0IDE5OTktMjAwMCBUaGUgT3BlbkxEQVAgRm91bmRhdGlvbiwgUmVkd29vZCBDaXR5LCBDYWxpZm9ybmlhLCBVU0EuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIFBlcm1pc3Npb24gdG8gY29weSBhbmQgZGlzdHJpYnV0ZWQgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgZG9jdW1lbnQgaXMgZ3JhbnRlZC4iXSwibGljZW5zZUlkcyI6WyJPTERBUC0yLjMiXSwia2V5d29yZHMiOlsidmVyc2lvbiAyIDMiLCIyIDMgMjgiLCIzIDI4IGp1bHkiLCJsaWNlbnNlIHZlcnNpb24gMiAzIiwidmVyc2lvbiAyIDMgMjgiLCIyIDMgMjgganVseSIsIjMgMjgganVseSAyMDAwIiwicHVibGljIGxpY2Vuc2UgdmVyc2lvbiAyIDMiLCJsaWNlbnNlIHZlcnNpb24gMiAzIDI4IiwidmVyc2lvbiAyIDMgMjgganVseSIsIjIgMyAyOCBqdWx5IDIwMDAiLCIzIDI4IGp1bHkgMjAwMCByZWRpc3RyaWJ1dGlvbiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgT3BlbkxEQVAgUHVibGljIExpY2Vuc2VcblxuVmVyc2lvbiAyLjQsIDggRGVjZW1iZXIgMjAwMFxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiAoXCJTb2Z0d2FyZVwiKSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gY29weXJpZ2h0IHN0YXRlbWVudHMgYW5kIG5vdGljZXMuXG5cbiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBzdGF0ZW1lbnRzIGFuZCBub3RpY2VzLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgMy4gUmVkaXN0cmlidXRpb25zIG11c3QgY29udGFpbiBhIHZlcmJhdGltIGNvcHkgb2YgdGhpcyBkb2N1bWVudC5cblxuICAgNC4gVGhlIG5hbWVzIGFuZCB0cmFkZW1hcmtzIG9mIHRoZSBhdXRob3JzIGFuZCBjb3B5cmlnaHQgaG9sZGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi5cblxuICAgNS4gRHVlIGNyZWRpdCBzaG91bGQgYmUgZ2l2ZW4gdG8gdGhlIE9wZW5MREFQIFByb2plY3QuXG5cbiAgIDYuIFRoZSBPcGVuTERBUCBGb3VuZGF0aW9uIG1heSByZXZpc2UgdGhpcyBsaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHJldmlzaW9uIGlzIGRpc3Rpbmd1aXNoZWQgYnkgYSB2ZXJzaW9uIG51bWJlci4gWW91IG1heSB1c2UgdGhlIFNvZnR3YXJlIHVuZGVyIHRlcm1zIG9mIHRoaXMgbGljZW5zZSByZXZpc2lvbiBvciB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgcmV2aXNpb24gb2YgdGhlIGxpY2Vuc2UuXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9QRU5MREFQIEZPVU5EQVRJT04gQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT1BFTkxEQVAgRk9VTkRBVElPTiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5PcGVuTERBUCBpcyBhIHRyYWRlbWFyayBvZiB0aGUgT3BlbkxEQVAgRm91bmRhdGlvbi5cblxuQ29weXJpZ2h0IDE5OTktMjAwMCBUaGUgT3BlbkxEQVAgRm91bmRhdGlvbiwgUmVkd29vZCBDaXR5LCBDYWxpZm9ybmlhLCBVU0EuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIFBlcm1pc3Npb24gdG8gY29weSBhbmQgZGlzdHJpYnV0ZWQgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgZG9jdW1lbnQgaXMgZ3JhbnRlZC4iXSwibGljZW5zZUlkcyI6WyJPTERBUC0yLjQiXSwia2V5d29yZHMiOlsidmVyc2lvbiAyIDQiLCIyIDQgOCIsIjQgOCBkZWNlbWJlciIsIjggZGVjZW1iZXIgMjAwMCIsImRlY2VtYmVyIDIwMDAgcmVkaXN0cmlidXRpb24iLCJvcGVubGRhcCBwcm9qZWN0IDYiLCJwcm9qZWN0IDYgdGhlIiwibGljZW5zZSB2ZXJzaW9uIDIgNCIsInZlcnNpb24gMiA0IDgiLCIyIDQgOCBkZWNlbWJlciIsIjQgOCBkZWNlbWJlciAyMDAwIiwiOCBkZWNlbWJlciAyMDAwIHJlZGlzdHJpYnV0aW9uIiwiZGVjZW1iZXIgMjAwMCByZWRpc3RyaWJ1dGlvbiBhbmQiLCJ0aGUgb3BlbmxkYXAgcHJvamVjdCA2Iiwib3BlbmxkYXAgcHJvamVjdCA2IHRoZSIsInByb2plY3QgNiB0aGUgb3BlbmxkYXAiLCJwdWJsaWMgbGljZW5zZSB2ZXJzaW9uIDIgNCIsImxpY2Vuc2UgdmVyc2lvbiAyIDQgOCIsInZlcnNpb24gMiA0IDggZGVjZW1iZXIiLCIyIDQgOCBkZWNlbWJlciAyMDAwIiwiNCA4IGRlY2VtYmVyIDIwMDAgcmVkaXN0cmlidXRpb24iLCI4IGRlY2VtYmVyIDIwMDAgcmVkaXN0cmlidXRpb24gYW5kIiwiZGVjZW1iZXIgMjAwMCByZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIiwidG8gdGhlIG9wZW5sZGFwIHByb2plY3QgNiIsInRoZSBvcGVubGRhcCBwcm9qZWN0IDYgdGhlIiwib3BlbmxkYXAgcHJvamVjdCA2IHRoZSBvcGVubGRhcCIsInByb2plY3QgNiB0aGUgb3BlbmxkYXAgZm91bmRhdGlvbiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgT3BlbkxEQVAgUHVibGljIExpY2Vuc2VcblxuVmVyc2lvbiAyLjUsIDExIE1heSAyMDAxXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIChcIlNvZnR3YXJlXCIpLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiBjb3B5cmlnaHQgc3RhdGVtZW50cyBhbmQgbm90aWNlcy5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGFwcGxpY2FibGUgY29weXJpZ2h0IHN0YXRlbWVudHMgYW5kIG5vdGljZXMsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCBjb250YWluIGEgdmVyYmF0aW0gY29weSBvZiB0aGlzIGRvY3VtZW50LlxuXG4gICA0LiBUaGUgbmFtZXMgYW5kIHRyYWRlbWFya3Mgb2YgdGhlIGF1dGhvcnMgYW5kIGNvcHlyaWdodCBob2xkZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5nIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLlxuXG4gICA1LiBEdWUgY3JlZGl0IHNob3VsZCBiZSBnaXZlbiB0byB0aGUgYXV0aG9ycyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgIDYuIFRoZSBPcGVuTERBUCBGb3VuZGF0aW9uIG1heSByZXZpc2UgdGhpcyBsaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHJldmlzaW9uIGlzIGRpc3Rpbmd1aXNoZWQgYnkgYSB2ZXJzaW9uIG51bWJlci4gWW91IG1heSB1c2UgdGhlIFNvZnR3YXJlIHVuZGVyIHRlcm1zIG9mIHRoaXMgbGljZW5zZSByZXZpc2lvbiBvciB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgcmV2aXNpb24gb2YgdGhlIGxpY2Vuc2UuXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9QRU5MREFQIEZPVU5EQVRJT04gQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT1BFTkxEQVAgRk9VTkRBVElPTiwgSVRTIENPTlRSSUJVVE9SUywgT1IgVEhFIEFVVEhPUihTKSBPUiBPV05FUihTKSBPRiBUSEUgU09GVFdBUkUgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cbk9wZW5MREFQIGlzIGEgdHJhZGVtYXJrIG9mIHRoZSBPcGVuTERBUCBGb3VuZGF0aW9uLlxuXG5Db3B5cmlnaHQgMTk5OS0yMDAxIFRoZSBPcGVuTERBUCBGb3VuZGF0aW9uLCBSZWR3b29kIENpdHksIENhbGlmb3JuaWEsIFVTQS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gUGVybWlzc2lvbiB0byBjb3B5IGFuZCBkaXN0cmlidXRlZCB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBkb2N1bWVudCBpcyBncmFudGVkLiJdLCJsaWNlbnNlSWRzIjpbIk9MREFQLTIuNSJdLCJrZXl3b3JkcyI6WyJ2ZXJzaW9uIDIgNSIsIjIgNSAxMSIsIjUgMTEgbWF5IiwiMTEgbWF5IDIwMDEiLCJtYXkgMjAwMSByZWRpc3RyaWJ1dGlvbiIsInNvZnR3YXJlIDYgdGhlIiwibGljZW5zZSB2ZXJzaW9uIDIgNSIsInZlcnNpb24gMiA1IDExIiwiMiA1IDExIG1heSIsIjUgMTEgbWF5IDIwMDEiLCIxMSBtYXkgMjAwMSByZWRpc3RyaWJ1dGlvbiIsIm1heSAyMDAxIHJlZGlzdHJpYnV0aW9uIGFuZCIsImdpdmVuIHRvIHRoZSBhdXRob3JzIiwidGhlIHNvZnR3YXJlIDYgdGhlIiwic29mdHdhcmUgNiB0aGUgb3BlbmxkYXAiLCJwdWJsaWMgbGljZW5zZSB2ZXJzaW9uIDIgNSIsImxpY2Vuc2UgdmVyc2lvbiAyIDUgMTEiLCJ2ZXJzaW9uIDIgNSAxMSBtYXkiLCIyIDUgMTEgbWF5IDIwMDEiLCI1IDExIG1heSAyMDAxIHJlZGlzdHJpYnV0aW9uIiwiMTEgbWF5IDIwMDEgcmVkaXN0cmlidXRpb24gYW5kIiwibWF5IDIwMDEgcmVkaXN0cmlidXRpb24gYW5kIHVzZSIsImJlIGdpdmVuIHRvIHRoZSBhdXRob3JzIiwiZ2l2ZW4gdG8gdGhlIGF1dGhvcnMgb2YiLCJ0aGUgYXV0aG9ycyBvZiB0aGUgc29mdHdhcmUiLCJhdXRob3JzIG9mIHRoZSBzb2Z0d2FyZSA2Iiwib2YgdGhlIHNvZnR3YXJlIDYgdGhlIiwidGhlIHNvZnR3YXJlIDYgdGhlIG9wZW5sZGFwIiwic29mdHdhcmUgNiB0aGUgb3BlbmxkYXAgZm91bmRhdGlvbiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgT3BlbkxEQVAgUHVibGljIExpY2Vuc2VcblxuVmVyc2lvbiAyLjYsIDE0IEp1bmUgMjAwMVxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiAoXCJTb2Z0d2FyZVwiKSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gY29weXJpZ2h0IHN0YXRlbWVudHMgYW5kIG5vdGljZXMuXG5cbiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBzdGF0ZW1lbnRzIGFuZCBub3RpY2VzLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgMy4gUmVkaXN0cmlidXRpb25zIG11c3QgY29udGFpbiBhIHZlcmJhdGltIGNvcHkgb2YgdGhpcyBkb2N1bWVudC5cblxuICAgNC4gVGhlIG5hbWVzIGFuZCB0cmFkZW1hcmtzIG9mIHRoZSBhdXRob3JzIGFuZCBjb3B5cmlnaHQgaG9sZGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi5cblxuICAgNS4gVGhlIE9wZW5MREFQIEZvdW5kYXRpb24gbWF5IHJldmlzZSB0aGlzIGxpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggcmV2aXNpb24gaXMgZGlzdGluZ3Vpc2hlZCBieSBhIHZlcnNpb24gbnVtYmVyLiBZb3UgbWF5IHVzZSB0aGUgU29mdHdhcmUgdW5kZXIgdGVybXMgb2YgdGhpcyBsaWNlbnNlIHJldmlzaW9uIG9yIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCByZXZpc2lvbiBvZiB0aGUgbGljZW5zZS5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT1BFTkxEQVAgRk9VTkRBVElPTiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPUEVOTERBUCBGT1VOREFUSU9OLCBJVFMgQ09OVFJJQlVUT1JTLCBPUiBUSEUgQVVUSE9SKFMpIE9SIE9XTkVSKFMpIE9GIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuT3BlbkxEQVAgaXMgYSB0cmFkZW1hcmsgb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uXG5cbkNvcHlyaWdodCAxOTk5LTIwMDEgVGhlIE9wZW5MREFQIEZvdW5kYXRpb24sIFJlZHdvb2QgQ2l0eSwgQ2FsaWZvcm5pYSwgVVNBLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBQZXJtaXNzaW9uIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGVkIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGRvY3VtZW50IGlzIGdyYW50ZWQuIl0sImxpY2Vuc2VJZHMiOlsiT0xEQVAtMi42Il0sImtleXdvcmRzIjpbInZlcnNpb24gMiA2IiwiMiA2IDE0IiwiNiAxNCBqdW5lIiwiMTQganVuZSAyMDAxIiwianVuZSAyMDAxIHJlZGlzdHJpYnV0aW9uIiwiNSB0aGUgb3BlbmxkYXAiLCJsaWNlbnNlIHZlcnNpb24gMiA2IiwidmVyc2lvbiAyIDYgMTQiLCIyIDYgMTQganVuZSIsIjYgMTQganVuZSAyMDAxIiwiMTQganVuZSAyMDAxIHJlZGlzdHJpYnV0aW9uIiwianVuZSAyMDAxIHJlZGlzdHJpYnV0aW9uIGFuZCIsInByaW9yIHBlcm1pc3Npb24gNSB0aGUiLCJwZXJtaXNzaW9uIDUgdGhlIG9wZW5sZGFwIiwiNSB0aGUgb3BlbmxkYXAgZm91bmRhdGlvbiIsInB1YmxpYyBsaWNlbnNlIHZlcnNpb24gMiA2IiwibGljZW5zZSB2ZXJzaW9uIDIgNiAxNCIsInZlcnNpb24gMiA2IDE0IGp1bmUiLCIyIDYgMTQganVuZSAyMDAxIiwiNiAxNCBqdW5lIDIwMDEgcmVkaXN0cmlidXRpb24iLCIxNCBqdW5lIDIwMDEgcmVkaXN0cmlidXRpb24gYW5kIiwianVuZSAyMDAxIHJlZGlzdHJpYnV0aW9uIGFuZCB1c2UiLCJ3cml0dGVuIHByaW9yIHBlcm1pc3Npb24gNSB0aGUiLCJwcmlvciBwZXJtaXNzaW9uIDUgdGhlIG9wZW5sZGFwIiwicGVybWlzc2lvbiA1IHRoZSBvcGVubGRhcCBmb3VuZGF0aW9uIiwiNSB0aGUgb3BlbmxkYXAgZm91bmRhdGlvbiBtYXkiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIE9wZW5MREFQIFB1YmxpYyBMaWNlbnNlXG5cblZlcnNpb24gMi43LCA3IFNlcHRlbWJlciAyMDAxXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIChcIlNvZnR3YXJlXCIpLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiBjb3B5cmlnaHQgc3RhdGVtZW50cyBhbmQgbm90aWNlcyxcblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGFwcGxpY2FibGUgY29weXJpZ2h0IHN0YXRlbWVudHMgYW5kIG5vdGljZXMsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLCBhbmRcblxuICAgMy4gUmVkaXN0cmlidXRpb25zIG11c3QgY29udGFpbiBhIHZlcmJhdGltIGNvcHkgb2YgdGhpcyBkb2N1bWVudC5cblxuVGhlIE9wZW5MREFQIEZvdW5kYXRpb24gbWF5IHJldmlzZSB0aGlzIGxpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggcmV2aXNpb24gaXMgZGlzdGluZ3Vpc2hlZCBieSBhIHZlcnNpb24gbnVtYmVyLiBZb3UgbWF5IHVzZSB0aGlzIFNvZnR3YXJlIHVuZGVyIHRlcm1zIG9mIHRoaXMgbGljZW5zZSByZXZpc2lvbiBvciB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgcmV2aXNpb24gb2YgdGhlIGxpY2Vuc2UuXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9QRU5MREFQIEZPVU5EQVRJT04gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9QRU5MREFQIEZPVU5EQVRJT04sIElUUyBDT05UUklCVVRPUlMsIE9SIFRIRSBBVVRIT1IoUykgT1IgT1dORVIoUykgT0YgVEhFIFNPRlRXQVJFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5UaGUgbmFtZXMgb2YgdGhlIGF1dGhvcnMgYW5kIGNvcHlyaWdodCBob2xkZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5nIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBUaXRsZSB0byBjb3B5cmlnaHQgaW4gdGhpcyBTb2Z0d2FyZSBzaGFsbCBhdCBhbGwgdGltZXMgcmVtYWluIHdpdGggY29weXJpZ2h0IGhvbGRlcnMuXG5cbk9wZW5MREFQIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uXG5cbkNvcHlyaWdodCAxOTk5LTIwMDEgVGhlIE9wZW5MREFQIEZvdW5kYXRpb24sIFJlZHdvb2QgQ2l0eSwgQ2FsaWZvcm5pYSwgVVNBLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBQZXJtaXNzaW9uIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgZG9jdW1lbnQgaXMgZ3JhbnRlZC4iXSwibGljZW5zZUlkcyI6WyJPTERBUC0yLjciXSwia2V5d29yZHMiOlsidmVyc2lvbiAyIDciLCIyIDcgNyIsIjcgNyBzZXB0ZW1iZXIiLCI3IHNlcHRlbWJlciAyMDAxIiwic2VwdGVtYmVyIDIwMDEgcmVkaXN0cmlidXRpb24iLCJsaWNlbnNlIHZlcnNpb24gMiA3IiwidmVyc2lvbiAyIDcgNyIsIjIgNyA3IHNlcHRlbWJlciIsIjcgNyBzZXB0ZW1iZXIgMjAwMSIsIjcgc2VwdGVtYmVyIDIwMDEgcmVkaXN0cmlidXRpb24iLCJzZXB0ZW1iZXIgMjAwMSByZWRpc3RyaWJ1dGlvbiBhbmQiLCJwdWJsaWMgbGljZW5zZSB2ZXJzaW9uIDIgNyIsImxpY2Vuc2UgdmVyc2lvbiAyIDcgNyIsInZlcnNpb24gMiA3IDcgc2VwdGVtYmVyIiwiMiA3IDcgc2VwdGVtYmVyIDIwMDEiLCI3IDcgc2VwdGVtYmVyIDIwMDEgcmVkaXN0cmlidXRpb24iLCI3IHNlcHRlbWJlciAyMDAxIHJlZGlzdHJpYnV0aW9uIGFuZCIsInNlcHRlbWJlciAyMDAxIHJlZGlzdHJpYnV0aW9uIGFuZCB1c2UiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIE9wZW5MREFQIFB1YmxpYyBMaWNlbnNlXG5cblZlcnNpb24gMi44LCAxNyBBdWd1c3QgMjAwM1xuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiAoXCJTb2Z0d2FyZVwiKSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGZvcm0gbXVzdCByZXRhaW4gY29weXJpZ2h0IHN0YXRlbWVudHMgYW5kIG5vdGljZXMsXG5cbiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBzdGF0ZW1lbnRzIGFuZCBub3RpY2VzLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kXG5cbiAgIDMuIFJlZGlzdHJpYnV0aW9ucyBtdXN0IGNvbnRhaW4gYSB2ZXJiYXRpbSBjb3B5IG9mIHRoaXMgZG9jdW1lbnQuXG5cblRoZSBPcGVuTERBUCBGb3VuZGF0aW9uIG1heSByZXZpc2UgdGhpcyBsaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHJldmlzaW9uIGlzIGRpc3Rpbmd1aXNoZWQgYnkgYSB2ZXJzaW9uIG51bWJlci4gWW91IG1heSB1c2UgdGhpcyBTb2Z0d2FyZSB1bmRlciB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgcmV2aXNpb24gb3IgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHJldmlzaW9uIG9mIHRoZSBsaWNlbnNlLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPUEVOTERBUCBGT1VOREFUSU9OIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPUEVOTERBUCBGT1VOREFUSU9OLCBJVFMgQ09OVFJJQlVUT1JTLCBPUiBUSEUgQVVUSE9SKFMpIE9SIE9XTkVSKFMpIE9GIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuVGhlIG5hbWVzIG9mIHRoZSBhdXRob3JzIGFuZCBjb3B5cmlnaHQgaG9sZGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0IGluIHRoaXMgU29mdHdhcmUgc2hhbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIGNvcHlyaWdodCBob2xkZXJzLlxuXG5PcGVuTERBUCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIHRoZSBPcGVuTERBUCBGb3VuZGF0aW9uLlxuXG5Db3B5cmlnaHQgMTk5OS0yMDAzIFRoZSBPcGVuTERBUCBGb3VuZGF0aW9uLCBSZWR3b29kIENpdHksIENhbGlmb3JuaWEsIFVTQS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gUGVybWlzc2lvbiB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGRvY3VtZW50IGlzIGdyYW50ZWQuIl0sImxpY2Vuc2VJZHMiOlsiT0xEQVAtMi44Il0sImtleXdvcmRzIjpbInZlcnNpb24gMiA4IiwiMiA4IDE3IiwiOCAxNyBhdWd1c3QiLCIxNyBhdWd1c3QgMjAwMyIsImF1Z3VzdCAyMDAzIHJlZGlzdHJpYnV0aW9uIiwiMjAwMyByZWRpc3RyaWJ1dGlvbiBhbmQiLCJzb3VyY2UgZm9ybSBtdXN0IiwiZm9ybSBtdXN0IHJldGFpbiIsImNvcHlyaWdodCAxOTk5IDIwMDMiLCIxOTk5IDIwMDMgdGhlIiwiMjAwMyB0aGUgb3BlbmxkYXAiLCJsaWNlbnNlIHZlcnNpb24gMiA4IiwidmVyc2lvbiAyIDggMTciLCIyIDggMTcgYXVndXN0IiwiOCAxNyBhdWd1c3QgMjAwMyIsIjE3IGF1Z3VzdCAyMDAzIHJlZGlzdHJpYnV0aW9uIiwiYXVndXN0IDIwMDMgcmVkaXN0cmlidXRpb24gYW5kIiwiMjAwMyByZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIiwiaW4gc291cmNlIGZvcm0gbXVzdCIsInNvdXJjZSBmb3JtIG11c3QgcmV0YWluIiwiZm9ybSBtdXN0IHJldGFpbiBjb3B5cmlnaHQiLCJmb3VuZGF0aW9uIGNvcHlyaWdodCAxOTk5IDIwMDMiLCJjb3B5cmlnaHQgMTk5OSAyMDAzIHRoZSIsIjE5OTkgMjAwMyB0aGUgb3BlbmxkYXAiLCIyMDAzIHRoZSBvcGVubGRhcCBmb3VuZGF0aW9uIiwicHVibGljIGxpY2Vuc2UgdmVyc2lvbiAyIDgiLCJsaWNlbnNlIHZlcnNpb24gMiA4IDE3IiwidmVyc2lvbiAyIDggMTcgYXVndXN0IiwiMiA4IDE3IGF1Z3VzdCAyMDAzIiwiOCAxNyBhdWd1c3QgMjAwMyByZWRpc3RyaWJ1dGlvbiIsIjE3IGF1Z3VzdCAyMDAzIHJlZGlzdHJpYnV0aW9uIGFuZCIsImF1Z3VzdCAyMDAzIHJlZGlzdHJpYnV0aW9uIGFuZCB1c2UiLCIyMDAzIHJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YiLCIxIHJlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UgZm9ybSIsInJlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UgZm9ybSBtdXN0IiwiaW4gc291cmNlIGZvcm0gbXVzdCByZXRhaW4iLCJzb3VyY2UgZm9ybSBtdXN0IHJldGFpbiBjb3B5cmlnaHQiLCJmb3JtIG11c3QgcmV0YWluIGNvcHlyaWdodCBzdGF0ZW1lbnRzIiwib3BlbmxkYXAgZm91bmRhdGlvbiBjb3B5cmlnaHQgMTk5OSAyMDAzIiwiZm91bmRhdGlvbiBjb3B5cmlnaHQgMTk5OSAyMDAzIHRoZSIsImNvcHlyaWdodCAxOTk5IDIwMDMgdGhlIG9wZW5sZGFwIiwiMTk5OSAyMDAzIHRoZSBvcGVubGRhcCBmb3VuZGF0aW9uIiwiMjAwMyB0aGUgb3BlbmxkYXAgZm91bmRhdGlvbiByZWR3b29kIl19LHsibGljZW5zZVRleHRzIjpbIlRoaXMgRmFzdENHSSBhcHBsaWNhdGlvbiBsaWJyYXJ5IHNvdXJjZSBhbmQgb2JqZWN0IGNvZGUgKHRoZSBcIlNvZnR3YXJlXCIpIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiAodGhlIFwiRG9jdW1lbnRhdGlvblwiKSBhcmUgY29weXJpZ2h0ZWQgYnkgT3BlbiBNYXJrZXQsIEluYyAoXCJPcGVuIE1hcmtldFwiKS4gVGhlIGZvbGxvd2luZyB0ZXJtcyBhcHBseSB0byBhbGwgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2Z0d2FyZSBhbmQgRG9jdW1lbnRhdGlvbiB1bmxlc3MgZXhwbGljaXRseSBkaXNjbGFpbWVkIGluIGluZGl2aWR1YWwgZmlsZXMuXG5cbk9wZW4gTWFya2V0IHBlcm1pdHMgeW91IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgbGljZW5zZSB0aGlzIFNvZnR3YXJlIGFuZCB0aGUgRG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQgZXhpc3RpbmcgY29weXJpZ2h0IG5vdGljZXMgYXJlIHJldGFpbmVkIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgdGhpcyBub3RpY2UgaXMgaW5jbHVkZWQgdmVyYmF0aW0gaW4gYW55IGRpc3RyaWJ1dGlvbnMuIE5vIHdyaXR0ZW4gYWdyZWVtZW50LCBsaWNlbnNlLCBvciByb3lhbHR5IGZlZSBpcyByZXF1aXJlZCBmb3IgYW55IG9mIHRoZSBhdXRob3JpemVkIHVzZXMuIE1vZGlmaWNhdGlvbnMgdG8gdGhpcyBTb2Z0d2FyZSBhbmQgRG9jdW1lbnRhdGlvbiBtYXkgYmUgY29weXJpZ2h0ZWQgYnkgdGhlaXIgYXV0aG9ycyBhbmQgbmVlZCBub3QgZm9sbG93IHRoZSBsaWNlbnNpbmcgdGVybXMgZGVzY3JpYmVkIGhlcmUuIElmIG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBTb2Z0d2FyZSBhbmQgRG9jdW1lbnRhdGlvbiBoYXZlIG5ldyBsaWNlbnNpbmcgdGVybXMsIHRoZSBuZXcgdGVybXMgbXVzdCBiZSBjbGVhcmx5IGluZGljYXRlZCBvbiB0aGUgZmlyc3QgcGFnZSBvZiBlYWNoIGZpbGUgd2hlcmUgdGhleSBhcHBseS5cblxuT1BFTiBNQVJLRVQgTUFLRVMgTk8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRZIFdJVEggUkVTUEVDVCBUTyBUSEUgU09GVFdBUkUgT1IgVEhFIERPQ1VNRU5UQVRJT04sIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgT1BFTiBNQVJLRVQgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgVEhJUkQgUEFSVFkgRk9SIEFOWSBEQU1BR0VTIEFSSVNJTkcgRlJPTSBPUiBSRUxBVElORyBUTyBUSElTIFNPRlRXQVJFIE9SIFRIRSBET0NVTUVOVEFUSU9OLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElORElSRUNULCBTUEVDSUFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBTSU1JTEFSIERBTUFHRVMsIElOQ0xVRElORyBMT1NUIFBST0ZJVFMgT1IgTE9TVCBEQVRBLCBFVkVOIElGIE9QRU4gTUFSS0VUIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhFIFNPRlRXQVJFIEFORCBET0NVTUVOVEFUSU9OIEFSRSBQUk9WSURFRCBcIkFTIElTXCIuIE9QRU4gTUFSS0VUIEhBUyBOTyBMSUFCSUxJVFkgSU4gQ09OVFJBQ1QsIFRPUlQsIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFIEFSSVNJTkcgT1VUIE9GIFRISVMgU09GVFdBUkUgT1IgVEhFIERPQ1VNRU5UQVRJT04uIl0sImxpY2Vuc2VJZHMiOlsiT01MIl0sImtleXdvcmRzIjpbInRoaXMgZmFzdGNnaSBhcHBsaWNhdGlvbiIsImZhc3RjZ2kgYXBwbGljYXRpb24gbGlicmFyeSIsImFwcGxpY2F0aW9uIGxpYnJhcnkgc291cmNlIiwibGlicmFyeSBzb3VyY2UgYW5kIiwiY29kZSB0aGUgc29mdHdhcmUiLCJpdHMgZG9jdW1lbnRhdGlvbiB0aGUiLCJkb2N1bWVudGF0aW9uIHRoZSBkb2N1bWVudGF0aW9uIiwidGhlIGRvY3VtZW50YXRpb24gYXJlIiwiZG9jdW1lbnRhdGlvbiBhcmUgY29weXJpZ2h0ZWQiLCJjb3B5cmlnaHRlZCBieSBvcGVuIiwiYnkgb3BlbiBtYXJrZXQiLCJvcGVuIG1hcmtldCBpbmMiLCJtYXJrZXQgaW5jIG9wZW4iLCJpbmMgb3BlbiBtYXJrZXQiLCJvcGVuIG1hcmtldCB0aGUiLCJtYXJrZXQgdGhlIGZvbGxvd2luZyIsImRvY3VtZW50YXRpb24gdW5sZXNzIGV4cGxpY2l0bHkiLCJpbmRpdmlkdWFsIGZpbGVzIG9wZW4iLCJmaWxlcyBvcGVuIG1hcmtldCIsIm9wZW4gbWFya2V0IHBlcm1pdHMiLCJtYXJrZXQgcGVybWl0cyB5b3UiLCJhbmQgdGhlIGRvY3VtZW50YXRpb24iLCJhbmQgZG9jdW1lbnRhdGlvbiBtYXkiLCJkZXNjcmliZWQgaGVyZSBpZiIsImhlcmUgaWYgbW9kaWZpY2F0aW9ucyIsImlmIG1vZGlmaWNhdGlvbnMgdG8iLCJhbmQgZG9jdW1lbnRhdGlvbiBoYXZlIiwiZG9jdW1lbnRhdGlvbiBoYXZlIG5ldyIsImhhdmUgbmV3IGxpY2Vuc2luZyIsIm5ldyBsaWNlbnNpbmcgdGVybXMiLCJsaWNlbnNpbmcgdGVybXMgdGhlIiwidGVybXMgdGhlIG5ldyIsIm5ldyB0ZXJtcyBtdXN0IiwidGVybXMgbXVzdCBiZSIsInRoZXkgYXBwbHkgb3BlbiIsImFwcGx5IG9wZW4gbWFya2V0Iiwib3BlbiBtYXJrZXQgbWFrZXMiLCJtYXJrZXQgbWFrZXMgbm8iLCJtYWtlcyBubyBleHByZXNzIiwiaW1wbGllZCB3YXJyYW50eSB3aXRoIiwid2FycmFudHkgd2l0aCByZXNwZWN0IiwiZXZlbnQgc2hhbGwgb3BlbiIsInNoYWxsIG9wZW4gbWFya2V0Iiwib3BlbiBtYXJrZXQgYmUiLCJtYXJrZXQgYmUgbGlhYmxlIiwibGltaXRhdGlvbiBhbnkgaW5kaXJlY3QiLCJkYW1hZ2VzIG9yIHNpbWlsYXIiLCJvciBzaW1pbGFyIGRhbWFnZXMiLCJzaW1pbGFyIGRhbWFnZXMgaW5jbHVkaW5nIiwibG9zdCBwcm9maXRzIG9yIiwicHJvZml0cyBvciBsb3N0Iiwib3IgbG9zdCBkYXRhIiwibG9zdCBkYXRhIGV2ZW4iLCJldmVuIGlmIG9wZW4iLCJpZiBvcGVuIG1hcmtldCIsIm1hcmtldCBoYXMgYmVlbiIsImRhbWFnZXMgdGhlIHNvZnR3YXJlIiwiYXMgaXMgb3BlbiIsImlzIG9wZW4gbWFya2V0IiwibWFya2V0IGhhcyBubyIsImhhcyBubyBsaWFiaWxpdHkiLCJsaWFiaWxpdHkgaW4gY29udHJhY3QiLCJjb250cmFjdCB0b3J0IG5lZ2xpZ2VuY2UiLCJ0b3J0IG5lZ2xpZ2VuY2Ugb3IiLCJ0aGlzIGZhc3RjZ2kgYXBwbGljYXRpb24gbGlicmFyeSIsImZhc3RjZ2kgYXBwbGljYXRpb24gbGlicmFyeSBzb3VyY2UiLCJhcHBsaWNhdGlvbiBsaWJyYXJ5IHNvdXJjZSBhbmQiLCJsaWJyYXJ5IHNvdXJjZSBhbmQgb2JqZWN0IiwiYW5kIG9iamVjdCBjb2RlIHRoZSIsIm9iamVjdCBjb2RlIHRoZSBzb2Z0d2FyZSIsImNvZGUgdGhlIHNvZnR3YXJlIGFuZCIsImFuZCBpdHMgZG9jdW1lbnRhdGlvbiB0aGUiLCJpdHMgZG9jdW1lbnRhdGlvbiB0aGUgZG9jdW1lbnRhdGlvbiIsImRvY3VtZW50YXRpb24gdGhlIGRvY3VtZW50YXRpb24gYXJlIiwidGhlIGRvY3VtZW50YXRpb24gYXJlIGNvcHlyaWdodGVkIiwiZG9jdW1lbnRhdGlvbiBhcmUgY29weXJpZ2h0ZWQgYnkiLCJhcmUgY29weXJpZ2h0ZWQgYnkgb3BlbiIsImNvcHlyaWdodGVkIGJ5IG9wZW4gbWFya2V0IiwiYnkgb3BlbiBtYXJrZXQgaW5jIiwib3BlbiBtYXJrZXQgaW5jIG9wZW4iLCJtYXJrZXQgaW5jIG9wZW4gbWFya2V0IiwiaW5jIG9wZW4gbWFya2V0IHRoZSIsIm9wZW4gbWFya2V0IHRoZSBmb2xsb3dpbmciLCJtYXJrZXQgdGhlIGZvbGxvd2luZyB0ZXJtcyIsIndpdGggdGhlIHNvZnR3YXJlIGFuZCIsInNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIHVubGVzcyIsImFuZCBkb2N1bWVudGF0aW9uIHVubGVzcyBleHBsaWNpdGx5IiwiZG9jdW1lbnRhdGlvbiB1bmxlc3MgZXhwbGljaXRseSBkaXNjbGFpbWVkIiwiaW4gaW5kaXZpZHVhbCBmaWxlcyBvcGVuIiwiaW5kaXZpZHVhbCBmaWxlcyBvcGVuIG1hcmtldCIsImZpbGVzIG9wZW4gbWFya2V0IHBlcm1pdHMiLCJvcGVuIG1hcmtldCBwZXJtaXRzIHlvdSIsIm1hcmtldCBwZXJtaXRzIHlvdSB0byIsInBlcm1pdHMgeW91IHRvIHVzZSIsInlvdSB0byB1c2UgY29weSIsInRoaXMgc29mdHdhcmUgYW5kIHRoZSIsInNvZnR3YXJlIGFuZCB0aGUgZG9jdW1lbnRhdGlvbiIsImFuZCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IiLCJ0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYW55Iiwic29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gbWF5IiwiYW5kIGRvY3VtZW50YXRpb24gbWF5IGJlIiwiZG9jdW1lbnRhdGlvbiBtYXkgYmUgY29weXJpZ2h0ZWQiLCJ0ZXJtcyBkZXNjcmliZWQgaGVyZSBpZiIsImRlc2NyaWJlZCBoZXJlIGlmIG1vZGlmaWNhdGlvbnMiLCJoZXJlIGlmIG1vZGlmaWNhdGlvbnMgdG8iLCJpZiBtb2RpZmljYXRpb25zIHRvIHRoaXMiLCJzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBoYXZlIiwiYW5kIGRvY3VtZW50YXRpb24gaGF2ZSBuZXciLCJkb2N1bWVudGF0aW9uIGhhdmUgbmV3IGxpY2Vuc2luZyIsImhhdmUgbmV3IGxpY2Vuc2luZyB0ZXJtcyIsIm5ldyBsaWNlbnNpbmcgdGVybXMgdGhlIiwibGljZW5zaW5nIHRlcm1zIHRoZSBuZXciLCJ0ZXJtcyB0aGUgbmV3IHRlcm1zIiwidGhlIG5ldyB0ZXJtcyBtdXN0IiwibmV3IHRlcm1zIG11c3QgYmUiLCJ0ZXJtcyBtdXN0IGJlIGNsZWFybHkiLCJiZSBjbGVhcmx5IGluZGljYXRlZCBvbiIsIndoZXJlIHRoZXkgYXBwbHkgb3BlbiIsInRoZXkgYXBwbHkgb3BlbiBtYXJrZXQiLCJhcHBseSBvcGVuIG1hcmtldCBtYWtlcyIsIm9wZW4gbWFya2V0IG1ha2VzIG5vIiwibWFya2V0IG1ha2VzIG5vIGV4cHJlc3MiLCJtYWtlcyBubyBleHByZXNzIG9yIiwib3IgaW1wbGllZCB3YXJyYW50eSB3aXRoIiwiaW1wbGllZCB3YXJyYW50eSB3aXRoIHJlc3BlY3QiLCJ3YXJyYW50eSB3aXRoIHJlc3BlY3QgdG8iLCJubyBldmVudCBzaGFsbCBvcGVuIiwiZXZlbnQgc2hhbGwgb3BlbiBtYXJrZXQiLCJzaGFsbCBvcGVuIG1hcmtldCBiZSIsIm9wZW4gbWFya2V0IGJlIGxpYWJsZSIsIm1hcmtldCBiZSBsaWFibGUgdG8iLCJwYXJ0eSBmb3IgYW55IGRhbWFnZXMiLCJkYW1hZ2VzIGFyaXNpbmcgZnJvbSBvciIsIndpdGhvdXQgbGltaXRhdGlvbiBhbnkgaW5kaXJlY3QiLCJsaW1pdGF0aW9uIGFueSBpbmRpcmVjdCBzcGVjaWFsIiwiY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9yIHNpbWlsYXIiLCJkYW1hZ2VzIG9yIHNpbWlsYXIgZGFtYWdlcyIsIm9yIHNpbWlsYXIgZGFtYWdlcyBpbmNsdWRpbmciLCJzaW1pbGFyIGRhbWFnZXMgaW5jbHVkaW5nIGxvc3QiLCJpbmNsdWRpbmcgbG9zdCBwcm9maXRzIG9yIiwibG9zdCBwcm9maXRzIG9yIGxvc3QiLCJwcm9maXRzIG9yIGxvc3QgZGF0YSIsIm9yIGxvc3QgZGF0YSBldmVuIiwibG9zdCBkYXRhIGV2ZW4gaWYiLCJkYXRhIGV2ZW4gaWYgb3BlbiIsImV2ZW4gaWYgb3BlbiBtYXJrZXQiLCJpZiBvcGVuIG1hcmtldCBoYXMiLCJvcGVuIG1hcmtldCBoYXMgYmVlbiIsIm1hcmtldCBoYXMgYmVlbiBhZHZpc2VkIiwic3VjaCBkYW1hZ2VzIHRoZSBzb2Z0d2FyZSIsImRhbWFnZXMgdGhlIHNvZnR3YXJlIGFuZCIsImFuZCBkb2N1bWVudGF0aW9uIGFyZSBwcm92aWRlZCIsInByb3ZpZGVkIGFzIGlzIG9wZW4iLCJhcyBpcyBvcGVuIG1hcmtldCIsImlzIG9wZW4gbWFya2V0IGhhcyIsIm9wZW4gbWFya2V0IGhhcyBubyIsIm1hcmtldCBoYXMgbm8gbGlhYmlsaXR5IiwiaGFzIG5vIGxpYWJpbGl0eSBpbiIsIm5vIGxpYWJpbGl0eSBpbiBjb250cmFjdCIsImxpYWJpbGl0eSBpbiBjb250cmFjdCB0b3J0IiwiaW4gY29udHJhY3QgdG9ydCBuZWdsaWdlbmNlIiwiY29udHJhY3QgdG9ydCBuZWdsaWdlbmNlIG9yIiwidG9ydCBuZWdsaWdlbmNlIG9yIG90aGVyd2lzZSIsIm91dCBvZiB0aGlzIHNvZnR3YXJlIiwidGhpcyBmYXN0Y2dpIGFwcGxpY2F0aW9uIGxpYnJhcnkgc291cmNlIiwiZmFzdGNnaSBhcHBsaWNhdGlvbiBsaWJyYXJ5IHNvdXJjZSBhbmQiLCJhcHBsaWNhdGlvbiBsaWJyYXJ5IHNvdXJjZSBhbmQgb2JqZWN0IiwibGlicmFyeSBzb3VyY2UgYW5kIG9iamVjdCBjb2RlIiwic291cmNlIGFuZCBvYmplY3QgY29kZSB0aGUiLCJhbmQgb2JqZWN0IGNvZGUgdGhlIHNvZnR3YXJlIiwib2JqZWN0IGNvZGUgdGhlIHNvZnR3YXJlIGFuZCIsImNvZGUgdGhlIHNvZnR3YXJlIGFuZCBpdHMiLCJzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gdGhlIiwiYW5kIGl0cyBkb2N1bWVudGF0aW9uIHRoZSBkb2N1bWVudGF0aW9uIiwiaXRzIGRvY3VtZW50YXRpb24gdGhlIGRvY3VtZW50YXRpb24gYXJlIiwiZG9jdW1lbnRhdGlvbiB0aGUgZG9jdW1lbnRhdGlvbiBhcmUgY29weXJpZ2h0ZWQiLCJ0aGUgZG9jdW1lbnRhdGlvbiBhcmUgY29weXJpZ2h0ZWQgYnkiLCJkb2N1bWVudGF0aW9uIGFyZSBjb3B5cmlnaHRlZCBieSBvcGVuIiwiYXJlIGNvcHlyaWdodGVkIGJ5IG9wZW4gbWFya2V0IiwiY29weXJpZ2h0ZWQgYnkgb3BlbiBtYXJrZXQgaW5jIiwiYnkgb3BlbiBtYXJrZXQgaW5jIG9wZW4iLCJvcGVuIG1hcmtldCBpbmMgb3BlbiBtYXJrZXQiLCJtYXJrZXQgaW5jIG9wZW4gbWFya2V0IHRoZSIsImluYyBvcGVuIG1hcmtldCB0aGUgZm9sbG93aW5nIiwib3BlbiBtYXJrZXQgdGhlIGZvbGxvd2luZyB0ZXJtcyIsIm1hcmtldCB0aGUgZm9sbG93aW5nIHRlcm1zIGFwcGx5IiwiYXNzb2NpYXRlZCB3aXRoIHRoZSBzb2Z0d2FyZSBhbmQiLCJ3aXRoIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiIsInRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiB1bmxlc3MiLCJzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiB1bmxlc3MgZXhwbGljaXRseSIsImFuZCBkb2N1bWVudGF0aW9uIHVubGVzcyBleHBsaWNpdGx5IGRpc2NsYWltZWQiLCJkb2N1bWVudGF0aW9uIHVubGVzcyBleHBsaWNpdGx5IGRpc2NsYWltZWQgaW4iLCJkaXNjbGFpbWVkIGluIGluZGl2aWR1YWwgZmlsZXMgb3BlbiIsImluIGluZGl2aWR1YWwgZmlsZXMgb3BlbiBtYXJrZXQiLCJpbmRpdmlkdWFsIGZpbGVzIG9wZW4gbWFya2V0IHBlcm1pdHMiLCJmaWxlcyBvcGVuIG1hcmtldCBwZXJtaXRzIHlvdSIsIm9wZW4gbWFya2V0IHBlcm1pdHMgeW91IHRvIiwibWFya2V0IHBlcm1pdHMgeW91IHRvIHVzZSIsInBlcm1pdHMgeW91IHRvIHVzZSBjb3B5IiwieW91IHRvIHVzZSBjb3B5IG1vZGlmeSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJPUEVOIFBVQkxJQyBMSUNFTlNFXG5cblZlcnNpb24gMS4wXG5cbiAgIDEuIERlZmluaXRpb25zLlxuXG4gICAgICAxLjEuIFwiQ29udHJpYnV0b3JcIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIDEuMi4gXCJDb250cmlidXRvciBWZXJzaW9uXCIgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLlxuXG4gICAgICAxLjMuIFwiQ292ZXJlZCBDb2RlXCIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi5cblxuICAgICAgMS40LiBcIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbVwiIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLlxuXG4gICAgICAxLjUuIFwiRXhlY3V0YWJsZVwiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLlxuXG4gICAgICAxLjYuIFwiSW5pdGlhbCBEZXZlbG9wZXJcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuXG5cbiAgICAgIDEuNy4gXCJMYXJnZXIgV29ya1wiIG1lYW5zIGEgd29yaywgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjguIFwiTGljZW5zZVwiIG1lYW5zIHRoaXMgZG9jdW1lbnQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGFkZGVuZHVtIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDYuNCBiZWxvdy5cblxuICAgICAgMS45LiBcIk1vZGlmaWNhdGlvbnNcIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczpcblxuICAgICAgICAgQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgICAgQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4xMC4gXCJPcmlnaW5hbCBDb2RlXCIgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgMS4xMS4gXCJTb3VyY2UgQ29kZVwiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIGEgbGlzdCBvZiBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS5cblxuICAgICAgMS4xMi4gXCJZb3VcIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBcIllvdScnIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcImNvbnRyb2wnJyBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgICAgIDEuMTMgXCJMaWNlbnNlIEF1dGhvclwiIG1lYW5zIEx1dHJpcyBUZWNobm9sb2dpZXMsIEluYy5cblxuICAgMi4gU291cmNlIENvZGUgTGljZW5zZS5cblxuICAgICAgMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuIFRoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kXG5cbiAgICAgICAgIChiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBJbml0aWFsIERldmVsb3BlciwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UgYW5kIHNlbGwgKGBgb2ZmZXIgdG8gc2VsbCBhbmQgaW1wb3J0JycpIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy5cblxuICAgICAgMi4yLiBDb250cmlidXRvciBHcmFudC4gRWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZFxuXG4gICAgICAgICAoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsIChgYG9mZmVyIHRvIHNlbGwgYW5kIGltcG9ydCcnKSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zXG5cbiAgIDMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy5cblxuICAgICAgMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLiBUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS5cblxuICAgICAgMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIEFueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlLCBwcmlvciB0byBhbnkgdXNlLCBleGNlcHQgZm9yIGludGVybmFsIGRldmVsb3BtZW50IGFuZCBwcmFjdGljZSwgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3Ugc2hhbGwgbm90aWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgTW9kaWZpY2F0aW9uIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIFNvdXJjZSBDb2RlIHZpYSB0aGUgY29udGFjdCBtZWFucyBwcm92aWRlZCBmb3IgaW4gdGhlIERldmVsb3BlciBTcGVjaWZpYyBsaWNlbnNlLiBJbml0aWFsIERldmVsb3BlciB3aWxsIGJlIGFjdGluZyBhcyBtYWludGFpbmVyIG9mIHRoZSBTb3VyY2UgQ29kZSBhbmQgbWF5IHByb3ZpZGUgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gbWVjaGFuaXNtIGZvciB0aGUgTW9kaWZpY2F0aW9uIHRvIGJlIG1hZGUgYXZhaWxhYmxlLlxuXG4gICAgICAzLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIFlvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS5cblxuICAgICAgMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVyc1xuXG4gICAgICAgICAoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLiBJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaW4gcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgKG9yIGl0cyB1dGlsaXphdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgXCJMRUdBTFwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBZb3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgWW91IG1ha2UgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuXG5cbiAgICAgICAgIChiKSBSZXByZXNlbnRhdGlvbnMuIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3Mgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgMy41LiBSZXF1aXJlZCBOb3RpY2VzLiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4gSWYgeW91IGRpc3RyaWJ1dGUgZXhlY3V0YWJsZSB2ZXJzaW9ucyBjb250YWluaW5nIENvdmVyZWQgQ29kZSwgeW91IG11c3QgcmVwcm9kdWNlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBCIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgcHJvZHVjdC5cblxuICAgICAgMy43LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS5cblxuICAgNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLlxuXG4gICBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgQ2l0ZSBhbGwgb2YgdGhlIHN0YXR1dGVzIG9yIHJlZ3VsYXRpb25zIHRoYXQgcHJvaGliaXQgeW91IGZyb20gY29tcGx5aW5nIGZ1bGx5IHdpdGggdGhpcyBsaWNlbnNlLiAoYykgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC5cblxuICAgNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS5cblxuICAgNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuXG5cbiAgICAgIDYuMS4gTmV3IFZlcnNpb25zLiBMaWNlbnNlIEF1dGhvciBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIgYW5kIHNoYWxsIGJlIHN1Ym1pdHRlZCB0byBvcGVuc291cmNlLm9yZyBmb3IgY2VydGlmaWNhdGlvbi5cblxuICAgICAgNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLiBPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIuIE5vIG9uZSBvdGhlciB0aGFuIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgNi4zLiBEZXJpdmF0aXZlIFdvcmtzLiBJZiB5b3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBleGNlcHQgaW4gYXNzb2NpYXRpb24gd2l0aCB0aGUgcmVxdWlyZWQgRGV2ZWxvcGVyIFNwZWNpZmljIExpY2Vuc2UgZGVzY3JpYmVkIGluIHNlY3Rpb24gNi40LCAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgYGBPcGVuJycsIGBgT3BlblBMJycsIGBgT1BMJycgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgYW55d2hlcmUgaW4geW91ciBsaWNlbnNlIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCB5b3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE9wZW4gUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLilcblxuICAgICAgNi40LiBSZXF1aXJlZCBBZGRpdGlvbmFsIERldmVsb3BlciBTcGVjaWZpYyBMaWNlbnNlXG5cbiAgICAgIFRoaXMgbGljZW5zZSBpcyBhIHVuaW9uIG9mIHRoZSBmb2xsb3dpbmcgdHdvIHBhcnRzIHRoYXQgc2hvdWxkIGJlIGZvdW5kIGFzIHRleHQgZmlsZXMgaW4gdGhlIHNhbWUgcGxhY2UgKGRpcmVjdG9yeSksIGluIHRoZSBvcmRlciBvZiBwcmVlbWluZW5jZTpcblxuICAgICAgICAgWzFdIEEgRGV2ZWxvcGVyIHNwZWNpZmljIGxpY2Vuc2UuXG5cbiAgICAgICAgIFsyXSBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIE9QTF8xXzAuVFhULCBzdGF0aW5nIHRoZSBnZW5lcmFsIGxpY2Vuc2luZyBwb2xpY3kgb2YgdGhlIHNvZnR3YXJlLlxuXG4gICAgICBJbiBjYXNlIG9mIGNvbmZsaWN0aW5nIGRpc3Bvc2l0aW9ucyBpbiB0aGUgcGFydHMgb2YgdGhpcyBsaWNlbnNlLCB0aGUgdGVybXMgb2YgdGhlIGxvd2VyLW51bWJlcmVkIHBhcnQgd2lsbCBhbHdheXMgYmUgc3VwZXJzZWRlZCBieSB0aGUgdGVybXMgb2YgdGhlIGhpZ2hlciBudW1iZXJlZCBwYXJ0LlxuXG4gICA3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLlxuXG4gICBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLlxuXG4gICA4LiBURVJNSU5BVElPTi5cblxuICAgICAgOC4xIFRlcm1pbmF0aW9uIHVwb24gQnJlYWNoXG5cbiAgICAgIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlLCB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCwgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHRoYXQsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuXG5cbiAgICAgIDguMi4gVGVybWluYXRpb24gVXBvbiBMaXRpZ2F0aW9uLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyBcIlBhcnRpY2lwYW50XCIpIGFsbGVnaW5nIHRoYXQ6XG5cbiAgICAgICAgIChhKSBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuXG5cbiAgICAgICAgIChiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC5cblxuICAgICAgOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLlxuXG4gICAgICA4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi5cblxuICAgOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuXG5cbiAgIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIQVQgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICAxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy5cblxuICAgVGhlIENvdmVyZWQgQ29kZSBpcyBhIGBgY29tbWVyY2lhbCBpdGVtLCcnIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiBgYGNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUnJyBhbmQgYGBjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sJycgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLlxuXG4gICAxMS4gTUlTQ0VMTEFORU9VUy5cblxuICAgaGlzIHNlY3Rpb24gd2FzIGludGVudGlvbmFsbHkgbGVmdCBibGFuay4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgc2VjdGlvbiBhcmUgZm91bmQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYWRkZW5kdW0gZGVzY3JpYmVkIGFib3ZlLlxuXG4gICAxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy5cblxuRXhjZXB0IGluIGNhc2VzIHdoZXJlIGFub3RoZXIgQ29udHJpYnV0b3IgaGFzIGZhaWxlZCB0byBjb21wbHkgd2l0aCBTZWN0aW9uIDMuNCwgWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgWW91ciB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiBDb3ZlcmVkIENvZGUgeW91IG1hZGUgYXZhaWxhYmxlLCB0aGUgcmV2ZW51ZXMgeW91IHJlY2VpdmVkIGZyb20gdXRpbGl6aW5nIHN1Y2ggcmlnaHRzLCBhbmQgb3RoZXIgcmVsZXZhbnQgZmFjdG9ycy4gWW91IGFncmVlIHRvIHdvcmsgd2l0aCBhZmZlY3RlZCBwYXJ0aWVzIHRvIGRpc3RyaWJ1dGUgd2l0aCBJbml0aWFsIERldmVsb3BlciByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIEVYSElCSVQgQS5cblxuVGV4dCBmb3IgdGhpcyBFeGhpYml0IEEgaXMgZm91bmQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYWRkZW5kdW0sIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDYuNCBhYm92ZSwgdGV4dCBmaWxlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3Blci4gVGhpcyBsaWNlbnNlIGlzIG5vdCB2YWxpZCBvciBjb21wbGV0ZSB3aXRoIG91dCB0aGF0IGZpbGUuXG5cbkVYSElCSVQgQi5cblxuVGV4dCBmb3IgdGhpcyBFeGhpYml0IEIgaXMgZm91bmQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYWRkZW5kdW0sIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDYuNCBhYm92ZSwgdGV4dCBmaWxlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3Blci4gVGhpcyBsaWNlbnNlIGlzIG5vdCB2YWxpZCBvciBjb21wbGV0ZSB3aXRoIG91dCB0aGF0IGZpbGUuIl0sImxpY2Vuc2VJZHMiOlsiT1BMLTEuMCJdLCJrZXl3b3JkcyI6WyJkb2N1bWVudCBhbmQgdGhlIiwiNiA0IGJlbG93IiwiNCBiZWxvdyAxIiwiYmVsb3cgMSA5IiwiMSAxMyBsaWNlbnNlIiwiMTMgbGljZW5zZSBhdXRob3IiLCJsaWNlbnNlIGF1dGhvciBtZWFucyIsImF1dGhvciBtZWFucyBsdXRyaXMiLCJtZWFucyBsdXRyaXMgdGVjaG5vbG9naWVzIiwibHV0cmlzIHRlY2hub2xvZ2llcyBpbmMiLCJ0ZWNobm9sb2dpZXMgaW5jIDIiLCJpbmMgMiBzb3VyY2UiLCJjb250cmlidXRvciB0byB0byIsInRvIHRvIG1ha2UiLCJtYWRlIGF2YWlsYWJsZSBwcmlvciIsImF2YWlsYWJsZSBwcmlvciB0byIsInByaW9yIHRvIGFueSIsImFueSB1c2UgZXhjZXB0IiwidXNlIGV4Y2VwdCBmb3IiLCJleGNlcHQgZm9yIGludGVybmFsIiwiZm9yIGludGVybmFsIGRldmVsb3BtZW50IiwiaW50ZXJuYWwgZGV2ZWxvcG1lbnQgYW5kIiwiZGV2ZWxvcG1lbnQgYW5kIHByYWN0aWNlIiwiYW5kIHByYWN0aWNlIGluIiwicHJhY3RpY2UgaW4gc291cmNlIiwicmVjaXBpZW50cyB5b3Ugc2hhbGwiLCJ5b3Ugc2hhbGwgbm90aWZ5Iiwic2hhbGwgbm90aWZ5IHRoZSIsInNvdXJjZSBjb2RlIHZpYSIsImNvZGUgdmlhIHRoZSIsInZpYSB0aGUgY29udGFjdCIsInRoZSBjb250YWN0IG1lYW5zIiwiY29udGFjdCBtZWFucyBwcm92aWRlZCIsIm1lYW5zIHByb3ZpZGVkIGZvciIsImZvciBpbiB0aGUiLCJpbiB0aGUgZGV2ZWxvcGVyIiwidGhlIGRldmVsb3BlciBzcGVjaWZpYyIsInNwZWNpZmljIGxpY2Vuc2UgaW5pdGlhbCIsImluaXRpYWwgZGV2ZWxvcGVyIHdpbGwiLCJkZXZlbG9wZXIgd2lsbCBiZSIsImNvZGUgYW5kIG1heSIsIm1hZGUgYXZhaWxhYmxlIDMiLCJhdmFpbGFibGUgMyAzIiwib2J0YWluZWQgYiByZXByZXNlbnRhdGlvbnMiLCJiIHJlcHJlc2VudGF0aW9ucyBjb250cmlidXRvciIsImFuZCBiIGNpdGUiLCJiIGNpdGUgYWxsIiwiY2l0ZSBhbGwgb2YiLCJvZiB0aGUgc3RhdHV0ZXMiLCJ0aGUgc3RhdHV0ZXMgb3IiLCJzdGF0dXRlcyBvciByZWd1bGF0aW9ucyIsIm9yIHJlZ3VsYXRpb25zIHRoYXQiLCJyZWd1bGF0aW9ucyB0aGF0IHByb2hpYml0IiwidGhhdCBwcm9oaWJpdCB5b3UiLCJwcm9oaWJpdCB5b3UgZnJvbSIsInlvdSBmcm9tIGNvbXBseWluZyIsImZyb20gY29tcGx5aW5nIGZ1bGx5IiwiY29tcGx5aW5nIGZ1bGx5IHdpdGgiLCJmdWxseSB3aXRoIHRoaXMiLCJsaWNlbnNlIGMgZGVzY3JpYmUiLCJuZXcgdmVyc2lvbnMgbGljZW5zZSIsInZlcnNpb25zIGxpY2Vuc2UgYXV0aG9yIiwibGljZW5zZSBhdXRob3IgbWF5IiwiYXV0aG9yIG1heSBwdWJsaXNoIiwibnVtYmVyIGFuZCBzaGFsbCIsInN1Ym1pdHRlZCB0byBvcGVuc291cmNlIiwidG8gb3BlbnNvdXJjZSBvcmciLCJvcGVuc291cmNlIG9yZyBmb3IiLCJvcmcgZm9yIGNlcnRpZmljYXRpb24iLCJmb3IgY2VydGlmaWNhdGlvbiA2IiwiY2VydGlmaWNhdGlvbiA2IDIiLCJpbml0aWFsIGRldmVsb3BlciBubyIsImRldmVsb3BlciBubyBvbmUiLCJvdGhlciB0aGFuIGluaXRpYWwiLCJ0aGFuIGluaXRpYWwgZGV2ZWxvcGVyIiwiZGV2ZWxvcGVyIGhhcyB0aGUiLCJsaWNlbnNlIGV4Y2VwdCBpbiIsImV4Y2VwdCBpbiBhc3NvY2lhdGlvbiIsImluIGFzc29jaWF0aW9uIHdpdGgiLCJhc3NvY2lhdGlvbiB3aXRoIHRoZSIsIndpdGggdGhlIHJlcXVpcmVkIiwidGhlIHJlcXVpcmVkIGRldmVsb3BlciIsInJlcXVpcmVkIGRldmVsb3BlciBzcGVjaWZpYyIsInNwZWNpZmljIGxpY2Vuc2UgZGVzY3JpYmVkIiwibGljZW5zZSBkZXNjcmliZWQgaW4iLCI2IDQgd2hpY2giLCI0IHdoaWNoIHlvdSIsInRoZSBwaHJhc2VzIG9wZW4iLCJwaHJhc2VzIG9wZW4gb3BlbnBsIiwib3BlbiBvcGVucGwgb3BsIiwib3BlbnBsIG9wbCBvciIsIm9wbCBvciBhbnkiLCJmcm9tIHRoZSBvcGVuIiwidGhlIG9wZW4gcHVibGljIiwiNCByZXF1aXJlZCBhZGRpdGlvbmFsIiwicmVxdWlyZWQgYWRkaXRpb25hbCBkZXZlbG9wZXIiLCJhZGRpdGlvbmFsIGRldmVsb3BlciBzcGVjaWZpYyIsInNwZWNpZmljIGxpY2Vuc2UgdGhpcyIsImlzIGEgdW5pb24iLCJhIHVuaW9uIG9mIiwiZm9sbG93aW5nIHR3byBwYXJ0cyIsInR3byBwYXJ0cyB0aGF0IiwicGFydHMgdGhhdCBzaG91bGQiLCJ0aGF0IHNob3VsZCBiZSIsInNob3VsZCBiZSBmb3VuZCIsImJlIGZvdW5kIGFzIiwiZm91bmQgYXMgdGV4dCIsImFzIHRleHQgZmlsZXMiLCJ0ZXh0IGZpbGVzIGluIiwic2FtZSBwbGFjZSBkaXJlY3RvcnkiLCJwbGFjZSBkaXJlY3RvcnkgaW4iLCJkaXJlY3RvcnkgaW4gdGhlIiwiaW4gdGhlIG9yZGVyIiwidGhlIG9yZGVyIG9mIiwib3JkZXIgb2YgcHJlZW1pbmVuY2UiLCJvZiBwcmVlbWluZW5jZSAxIiwicHJlZW1pbmVuY2UgMSBhIiwiMSBhIGRldmVsb3BlciIsImEgZGV2ZWxvcGVyIHNwZWNpZmljIiwic3BlY2lmaWMgbGljZW5zZSAyIiwibGljZW5zZSAyIHRoZSIsIjIgdGhlIGNvbnRlbnRzIiwidGhpcyBmaWxlIG9wbCIsImZpbGUgb3BsIDEiLCJvcGwgMSAwIiwiMSAwIHR4dCIsIjAgdHh0IHN0YXRpbmciLCJ0eHQgc3RhdGluZyB0aGUiLCJzdGF0aW5nIHRoZSBnZW5lcmFsIiwidGhlIGdlbmVyYWwgbGljZW5zaW5nIiwiZ2VuZXJhbCBsaWNlbnNpbmcgcG9saWN5IiwibGljZW5zaW5nIHBvbGljeSBvZiIsInBvbGljeSBvZiB0aGUiLCJzb2Z0d2FyZSBpbiBjYXNlIiwiY2FzZSBvZiBjb25mbGljdGluZyIsIm9mIGNvbmZsaWN0aW5nIGRpc3Bvc2l0aW9ucyIsImNvbmZsaWN0aW5nIGRpc3Bvc2l0aW9ucyBpbiIsImRpc3Bvc2l0aW9ucyBpbiB0aGUiLCJpbiB0aGUgcGFydHMiLCJvZiB0aGUgbG93ZXIiLCJ0aGUgbG93ZXIgbnVtYmVyZWQiLCJsb3dlciBudW1iZXJlZCBwYXJ0IiwibnVtYmVyZWQgcGFydCB3aWxsIiwicGFydCB3aWxsIGFsd2F5cyIsIndpbGwgYWx3YXlzIGJlIiwiYWx3YXlzIGJlIHN1cGVyc2VkZWQiLCJiZSBzdXBlcnNlZGVkIGJ5Iiwic3VwZXJzZWRlZCBieSB0aGUiLCJvZiB0aGUgaGlnaGVyIiwidGhlIGhpZ2hlciBudW1iZXJlZCIsImhpZ2hlciBudW1iZXJlZCBwYXJ0IiwibnVtYmVyZWQgcGFydCA3IiwicGFydCA3IGRpc2NsYWltZXIiLCI4IDEgdGVybWluYXRpb24iLCIxIHRlcm1pbmF0aW9uIHVwb24iLCI4IDIgdGVybWluYXRpb24iLCJ0ZXJtaW5hdGlvbiB1cG9uIGxpdGlnYXRpb24iLCJ1cG9uIGxpdGlnYXRpb24gaWYiLCIxMSBtaXNjZWxsYW5lb3VzIGhpcyIsIm1pc2NlbGxhbmVvdXMgaGlzIHNlY3Rpb24iLCJoaXMgc2VjdGlvbiB3YXMiLCJzZWN0aW9uIHdhcyBpbnRlbnRpb25hbGx5Iiwid2FzIGludGVudGlvbmFsbHkgbGVmdCIsImludGVudGlvbmFsbHkgbGVmdCBibGFuayIsImJsYW5rIHRoZSBjb250ZW50cyIsInRoaXMgc2VjdGlvbiBhcmUiLCJzZWN0aW9uIGFyZSBmb3VuZCIsImFyZSBmb3VuZCBpbiIsImFkZGVuZHVtIGRlc2NyaWJlZCBhYm92ZSIsImRlc2NyaWJlZCBhYm92ZSAxMiIsImFib3ZlIDEyIHJlc3BvbnNpYmlsaXR5IiwidG8gZGlzdHJpYnV0ZSB3aXRoIiwiZGlzdHJpYnV0ZSB3aXRoIGluaXRpYWwiLCJpbml0aWFsIGRldmVsb3BlciByZXNwb25zaWJpbGl0eSIsImRldmVsb3BlciByZXNwb25zaWJpbGl0eSBvbiIsImV4aGliaXQgYSB0ZXh0IiwiYSB0ZXh0IGZvciIsImEgaXMgZm91bmQiLCJ0aGF0IGZpbGUgZXhoaWJpdCIsImZpbGUgZXhoaWJpdCBiIiwiZXhoaWJpdCBiIHRleHQiLCJiIHRleHQgZm9yIiwidGhpcyBleGhpYml0IGIiLCJleGhpYml0IGIgaXMiLCJiIGlzIGZvdW5kIiwib3BlbiBwdWJsaWMgbGljZW5zZSB2ZXJzaW9uIiwibWVhbnMgdGhpcyBkb2N1bWVudCBhbmQiLCJ0aGlzIGRvY3VtZW50IGFuZCB0aGUiLCJkb2N1bWVudCBhbmQgdGhlIGNvcnJlc3BvbmRpbmciLCJhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYWRkZW5kdW0iLCJzZWN0aW9uIDYgNCBiZWxvdyIsIjYgNCBiZWxvdyAxIiwiNCBiZWxvdyAxIDkiLCJiZWxvdyAxIDkgbW9kaWZpY2F0aW9ucyIsImVudGl0eSAxIDEzIGxpY2Vuc2UiLCIxIDEzIGxpY2Vuc2UgYXV0aG9yIiwiMTMgbGljZW5zZSBhdXRob3IgbWVhbnMiLCJsaWNlbnNlIGF1dGhvciBtZWFucyBsdXRyaXMiLCJhdXRob3IgbWVhbnMgbHV0cmlzIHRlY2hub2xvZ2llcyIsIm1lYW5zIGx1dHJpcyB0ZWNobm9sb2dpZXMgaW5jIl19LHsibGljZW5zZVRleHRzIjpbIk9TRVQgUHVibGljIExpY2Vuc2UgKGMpIDIwMTUgQUxMIFJJR0hUUyBSRVNFUlZFRCBWRVJTSU9OIDIuMSBUSElTIExJQ0VOU0UgREVGSU5FUyBUSEUgUklHSFRTIE9GIFVTRSwgUkVQUk9EVUNUSU9OLCBESVNUUklCVVRJT04sIE1PRElGSUNBVElPTiwgQU5EIFJFRElTVFJJQlVUSU9OIE9GIENFUlRBSU4gQ09WRVJFRCBTT0ZUV0FSRSAoQVMgREVGSU5FRCBCRUxPVykgT1JJR0lOQUxMWSBSRUxFQVNFRCBCWSBUSEUgT1BFTiBTT1VSQ0UgRUxFQ1RJT04gVEVDSE5PTE9HWSBGT1VOREFUSU9OIChGT1JNRVJMWSBcIlRIRSBPU0RWIEZPVU5EQVRJT05cIikuXG5cbkFOWU9ORSBXSE8gVVNFUywgUkVQUk9EVUNFUywgRElTVFJJQlVURVMsIE1PRElGSUVTLCBPUiBSRURJU1RSSUJVVEVTIFRIRSBDT1ZFUkVEIFNPRlRXQVJFLCBPUiBBTlkgUEFSVCBUSEVSRU9GLCBJUyBCWSBUSEFUIEFDVElPTiwgQUNDRVBUSU5HIElOIEZVTEwgVEhFIFRFUk1TIENPTlRBSU5FRCBJTiBUSElTIEFHUkVFTUVOVC4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBTVUNIIFRFUk1TLCBZT1UgQVJFIE5PVCBQRVJNSVRURUQgVE8gVVNFIFRIRSBDT1ZFUkVEIFNPRlRXQVJFLiBUaGlzIGxpY2Vuc2Ugd2FzIHByZXBhcmVkIGJhc2VkIG9uIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIChcIk1QTFwiKSwgdmVyc2lvbiAyLjAuIEZvciBhbm5vdGF0aW9uIG9mIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoaXMgbGljZW5zZSBhbmQgTVBMIDIuMCwgcGxlYXNlIHNlZSB0aGUgT1NFVCBGb3VuZGF0aW9uIHdlYiBzaXRlIGF0IHd3dy5PU0VURm91bmRhdGlvbi5vcmcvcHVibGljLWxpY2Vuc2UuXG5cblRoZSB0ZXh0IG9mIHRoZSBsaWNlbnNlIGJlZ2lucyBoZXJlOlxuXG4gICAxLiBEZWZpbml0aW9uc1xuXG4gICAgICAxLjEgXCJDb250cmlidXRvclwiIG1lYW5zIGVhY2ggaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgdGhhdCBjcmVhdGVzLCBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YsIG9yIG93bnMgQ292ZXJlZCBTb2Z0d2FyZS5cblxuICAgICAgMS4yIFwiQ29udHJpYnV0b3IgVmVyc2lvblwiIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9ucyBvZiBvdGhlcnMgKGlmIGFueSkgdXNlZCBieSBhIENvbnRyaWJ1dG9yIGFuZCB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IncyBDb250cmlidXRpb24uXG5cbiAgICAgIDEuMyBcIkNvbnRyaWJ1dGlvblwiIG1lYW5zIENvdmVyZWQgU29mdHdhcmUgb2YgYSBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLlxuXG4gICAgICAxLjQgXCJDb3ZlcmVkIFNvZnR3YXJlXCIgbWVhbnMgU291cmNlIENvZGUgRm9ybSB0byB3aGljaCB0aGUgaW5pdGlhbCBDb250cmlidXRvciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIHRoZSBFeGVjdXRhYmxlIEZvcm0gb2Ygc3VjaCBTb3VyY2UgQ29kZSBGb3JtLCBhbmQgTW9kaWZpY2F0aW9ucyBvZiBzdWNoIFNvdXJjZSBDb2RlIEZvcm0sIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi5cblxuICAgICAgMS41IFwiSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzXCIgbWVhbnM6XG5cbiAgICAgICAgIGEuIFRoYXQgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQiB0byB0aGUgQ292ZXJlZCBTb2Z0d2FyZTsgb3JcblxuICAgICAgICAgYi4gdGhhdCB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB3YXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMS54IG9yIGVhcmxpZXIgb2YgdGhlIExpY2Vuc2UsIGJ1dCBub3QgYWxzbyB1bmRlciB0aGUgdGVybXMgb2YgYSBTZWNvbmRhcnkgTGljZW5zZS5cblxuICAgICAgMS42IFwiRXhlY3V0YWJsZSBGb3JtXCIgbWVhbnMgYW55IGZvcm0gb2YgdGhlIHdvcmsgb3RoZXIgdGhhbiBTb3VyY2UgQ29kZSBGb3JtLlxuXG4gICAgICAxLjcgXCJMYXJnZXIgV29ya1wiIG1lYW5zIGEgd29yayB0aGF0IGNvbWJpbmVzIENvdmVyZWQgU29mdHdhcmUgd2l0aCBvdGhlciBtYXRlcmlhbCwgaW4gYSBzZXBhcmF0ZSBmaWxlIChvciBmaWxlcykgdGhhdCBpcyBub3QgQ292ZXJlZCBTb2Z0d2FyZS5cblxuICAgICAgMS44IFwiTGljZW5zZVwiIG1lYW5zIHRoaXMgZG9jdW1lbnQuXG5cbiAgICAgIDEuOSBcIkxpY2Vuc2FibGVcIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5LCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgMS4xMCBcIk1vZGlmaWNhdGlvbnNcIiBtZWFucyBhbnkgb2YgdGhlIGZvbGxvd2luZzpcblxuICAgICAgICAgYS4gYW55IGZpbGUgaW4gU291cmNlIENvZGUgRm9ybSB0aGF0IHJlc3VsdHMgZnJvbSBhbiBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250ZW50cyBvZiBDb3ZlcmVkIFNvZnR3YXJlOyBvclxuXG4gICAgICAgICBiLiBhbnkgbmV3IGZpbGUgaW4gU291cmNlIENvZGUgRm9ybSB0aGF0IGNvbnRhaW5zIGFueSBDb3ZlcmVkIFNvZnR3YXJlLlxuXG4gICAgICAxLjExIFwiUGF0ZW50IENsYWltc1wiIG9mIGEgQ29udHJpYnV0b3IgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQsIGJ1dCBmb3IgdGhlIGdyYW50IG9mIHRoZSBMaWNlbnNlLCBieSB0aGUgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yIHNhbGUsIGhhdmluZyBtYWRlLCBpbXBvcnQsIG9yIHRyYW5zZmVyIG9mIGVpdGhlciBpdHMgQ29udHJpYnV0aW9ucyBvciBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbi5cblxuICAgICAgMS4xMiBcIlNlY29uZGFyeSBMaWNlbnNlXCIgbWVhbnMgb25lIG9mOiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMi4wLCB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIuMSwgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAzLjAsIG9yIGFueSBsYXRlciB2ZXJzaW9ucyBvZiB0aG9zZSBsaWNlbnNlcy5cblxuICAgICAgMS4xMyBcIlNvdXJjZSBDb2RlIEZvcm1cIiBtZWFucyB0aGUgZm9ybSBvZiB0aGUgd29yayBwcmVmZXJyZWQgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLlxuXG4gICAgICAxLjE0IFwiWW91XCIgKG9yIFwiWW91clwiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBcIllvdVwiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbFwiIG1lYW5zOlxuXG4gICAgICAgICAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yXG5cbiAgICAgICAgIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgMi4gTGljZW5zZSBHcmFudHMgYW5kIENvbmRpdGlvbnNcblxuICAgICAgMi4xIEdyYW50c1xuXG4gICAgICBFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2U6XG5cbiAgICAgICAgIGEuIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBzdWNoIENvbnRyaWJ1dG9yIHRvIHVzZSwgcmVwcm9kdWNlLCBtYWtlIGF2YWlsYWJsZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIGV4cGxvaXQgaXRzIENvbnRyaWJ1dGlvbnMsIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIE1vZGlmaWNhdGlvbnMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kXG5cbiAgICAgICAgIGIuIHVuZGVyIFBhdGVudCBDbGFpbXMgb2Ygc3VjaCBDb250cmlidXRvciB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciBlaXRoZXIgaXRzIENvbnRyaWJ1dGlvbnMgb3IgaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24uXG5cbiAgICAgIDIuMiBFZmZlY3RpdmUgRGF0ZVxuXG4gICAgICBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9uIDIuMSB3aXRoIHJlc3BlY3QgdG8gYW55IENvbnRyaWJ1dGlvbiBiZWNvbWUgZWZmZWN0aXZlIGZvciBlYWNoIENvbnRyaWJ1dGlvbiBvbiB0aGUgZGF0ZSB0aGUgQ29udHJpYnV0b3IgZmlyc3QgZGlzdHJpYnV0ZXMgc3VjaCBDb250cmlidXRpb24uXG5cbiAgICAgIDIuMyBMaW1pdGF0aW9ucyBvbiBHcmFudCBTY29wZVxuXG4gICAgICBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMiBhcmUgdGhlIG9ubHkgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBObyBhZGRpdGlvbmFsIHJpZ2h0cyBvciBsaWNlbnNlcyB3aWxsIGJlIGltcGxpZWQgZnJvbSB0aGUgZGlzdHJpYnV0aW9uIG9yIGxpY2Vuc2luZyBvZiBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIHRoaXMgTGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIGJ5IGEgQ29udHJpYnV0b3I6XG5cbiAgICAgICAgIGEuIGZvciBhbnkgY29kZSB0aGF0IGEgQ29udHJpYnV0b3IgaGFzIHJlbW92ZWQgZnJvbSBDb3ZlcmVkIFNvZnR3YXJlOyBvclxuXG4gICAgICAgICBiLiBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IChpKSBZb3VyIGFuZCBhbnkgb3RoZXIgdGhpcmQgcGFydHkncyBtb2RpZmljYXRpb25zIG9mIENvdmVyZWQgU29mdHdhcmUsIG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIGl0cyBDb250cmlidXRpb25zIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIGl0cyBDb250cmlidXRvciBWZXJzaW9uKTsgb3JcblxuICAgICAgICAgYy4gdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiB0aGUgYWJzZW5jZSBvZiBpdHMgQ29udHJpYnV0aW9ucy5cblxuICAgICAgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgaW4gdGhlIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIGxvZ29zIG9mIGFueSBDb250cmlidXRvciAoZXhjZXB0IGFzIG1heSBiZSBuZWNlc3NhcnkgdG8gY29tcGx5IHdpdGggdGhlIG5vdGljZSByZXF1aXJlbWVudHMgaW4gU2VjdGlvbiAzLjQpLlxuXG4gICAgICAyLjQgU3Vic2VxdWVudCBMaWNlbnNlc1xuXG4gICAgICBObyBDb250cmlidXRvciBtYWtlcyBhZGRpdGlvbmFsIGdyYW50cyBhcyBhIHJlc3VsdCBvZiBZb3VyIGNob2ljZSB0byBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAoc2VlIFNlY3Rpb24gMTAuMikgb3IgdW5kZXIgdGhlIHRlcm1zIG9mIGEgU2Vjb25kYXJ5IExpY2Vuc2UgKGlmIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAzLjMpLlxuXG4gICAgICAyLjUgUmVwcmVzZW50YXRpb25cblxuICAgICAgRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdGhlIENvbnRyaWJ1dG9yIGJlbGlldmVzIGl0cyBDb250cmlidXRpb25zIGFyZSBpdHMgb3JpZ2luYWwgY3JlYXRpb24ocykgb3IgaXQgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAyLjYgRmFpciBVc2VcblxuICAgICAgVGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byBsaW1pdCBhbnkgcmlnaHRzIFlvdSBoYXZlIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGRvY3RyaW5lcyBvZiBmYWlyIHVzZSwgZmFpciBkZWFsaW5nLCBvciBvdGhlciBlcXVpdmFsZW50cy5cblxuICAgICAgMi43IENvbmRpdGlvbnNcblxuICAgICAgU2VjdGlvbnMgMy4xLCAzLjIsIDMuMywgYW5kIDMuNCBhcmUgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9uIDIuMS5cblxuICAgMy4gUmVzcG9uc2liaWxpdGllc1xuXG4gICAgICAzLjEgRGlzdHJpYnV0aW9uIG9mIFNvdXJjZSBGb3JtXG5cbiAgICAgIEFsbCBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBTb2Z0d2FyZSBpbiBTb3VyY2UgQ29kZSBGb3JtLCBpbmNsdWRpbmcgYW55IE1vZGlmaWNhdGlvbnMgdGhhdCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlLCBtdXN0IGJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluZm9ybSByZWNpcGllbnRzIHRoYXQgdGhlIFNvdXJjZSBDb2RlIEZvcm0gb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0aGV5IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgY2F1c2UgYW55IG9mIFlvdXIgTW9kaWZpY2F0aW9ucyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzLiBZb3UgbWF5IG5vdCBhdHRlbXB0IHRvIGFsdGVyIG9yIHJlc3RyaWN0IHRoZSByZWNpcGllbnRzJyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIEZvcm0uXG5cbiAgICAgIDMuMiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBGb3JtXG5cbiAgICAgIElmIFlvdSBkaXN0cmlidXRlIENvdmVyZWQgU29mdHdhcmUgaW4gRXhlY3V0YWJsZSBGb3JtIHRoZW46XG5cbiAgICAgICAgIGEuIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSBtdXN0IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgRm9ybSwgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4xLCBhbmQgWW91IG11c3QgaW5mb3JtIHJlY2lwaWVudHMgb2YgdGhlIEV4ZWN1dGFibGUgRm9ybSBob3cgdGhleSBjYW4gb2J0YWluIGEgY29weSBvZiBzdWNoIFNvdXJjZSBDb2RlIEZvcm0gYnkgcmVhc29uYWJsZSBtZWFucyBpbiBhIHRpbWVseSBtYW5uZXIsIGF0IGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBkaXN0cmlidXRpb24gdG8gdGhlIHJlY2lwaWVudDsgYW5kXG5cbiAgICAgICAgIGIuIFlvdSBtYXkgZGlzdHJpYnV0ZSBzdWNoIEV4ZWN1dGFibGUgRm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBvciBzdWJsaWNlbnNlIGl0IHVuZGVyIGRpZmZlcmVudCB0ZXJtcywgcHJvdmlkZWQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgRm9ybSBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRzJyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIEZvcm0gdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAzLjMgRGlzdHJpYnV0aW9uIG9mIGEgTGFyZ2VyIFdvcmtcblxuICAgICAgWW91IG1heSBjcmVhdGUgYW5kIGRpc3RyaWJ1dGUgYSBMYXJnZXIgV29yayB1bmRlciB0ZXJtcyBvZiBZb3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCBZb3UgYWxzbyBjb21wbHkgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBmb3IgdGhlIENvdmVyZWQgU29mdHdhcmUuIElmIHRoZSBMYXJnZXIgV29yayBpcyBhIGNvbWJpbmF0aW9uIG9mIENvdmVyZWQgU29mdHdhcmUgd2l0aCBhIHdvcmsgZ292ZXJuZWQgYnkgb25lIG9yIG1vcmUgU2Vjb25kYXJ5IExpY2Vuc2VzLCBhbmQgdGhlIENvdmVyZWQgU29mdHdhcmUgaXMgbm90IEluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeSBMaWNlbnNlcywgdGhpcyBMaWNlbnNlIHBlcm1pdHMgWW91IHRvIGFkZGl0aW9uYWxseSBkaXN0cmlidXRlIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2Ygc3VjaCBTZWNvbmRhcnkgTGljZW5zZShzKSwgc28gdGhhdCB0aGUgcmVjaXBpZW50IG9mIHRoZSBMYXJnZXIgV29yayBtYXksIGF0IHRoZWlyIG9wdGlvbiwgZnVydGhlciBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhpcyBMaWNlbnNlIG9yIHN1Y2ggU2Vjb25kYXJ5IExpY2Vuc2UocykuXG5cbiAgICAgIDMuNCBOb3RpY2VzXG5cbiAgICAgIFlvdSBtYXkgbm90IHJlbW92ZSBvciBhbHRlciB0aGUgc3Vic3RhbmNlIG9mIGFueSBsaWNlbnNlIG5vdGljZXMgKGluY2x1ZGluZyBjb3B5cmlnaHQgbm90aWNlcywgcGF0ZW50IG5vdGljZXMsIGRpc2NsYWltZXJzIG9mIHdhcnJhbnR5LCBvciBsaW1pdGF0aW9ucyBvZiBsaWFiaWxpdHkpIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFNvdXJjZSBDb2RlIEZvcm0gb2YgdGhlIENvdmVyZWQgU29mdHdhcmUsIGV4Y2VwdCB0aGF0IFlvdSBtYXkgYWx0ZXIgYW55IGxpY2Vuc2Ugbm90aWNlcyB0byB0aGUgZXh0ZW50IHJlcXVpcmVkIHRvIHJlbWVkeSBrbm93biBmYWN0dWFsIGluYWNjdXJhY2llcy5cblxuICAgICAgMy41IEFwcGxpY2F0aW9uIG9mIEFkZGl0aW9uYWwgVGVybXNcblxuICAgICAgICAgMy41LjEgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgU29mdHdhcmUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSwgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4gWW91IG1heSBpbmNsdWRlIGFkZGl0aW9uYWwgZGlzY2xhaW1lcnMgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb25zIG9mIGxpYWJpbGl0eSBzcGVjaWZpYyB0byBhbnkganVyaXNkaWN0aW9uLlxuXG4gICAgICAgICAzLjUuMiBZb3UgbWF5IHBsYWNlIGFkZGl0aW9uYWwgY29uZGl0aW9ucyB1cG9uIHRoZSByaWdodHMgZ3JhbnRlZCBpbiB0aGlzIExpY2Vuc2UgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCByZWd1bGF0aW9uIChpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHN0YXRlIGFuZCBmZWRlcmFsIHByb2N1cmVtZW50IHJlZ3VsYXRpb24pLCBuYXRpb25hbCBzZWN1cml0eSwgb3IgcHVibGljIGludGVyZXN0LiBBbnkgc3VjaCBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgbXVzdCBiZSBjbGVhcmx5IGRlc2NyaWJlZCBpbiB0aGUgbm90aWNlIHByb3Zpc2lvbnMgcmVxdWlyZWQgdW5kZXIgU2VjdGlvbiAzLjQuIEFueSBhbHRlcmF0aW9uIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBhcHBseSB0byBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIGJ5IFlvdSBvciBieSBhbnkgZG93bnN0cmVhbSByZWNpcGllbnRzIHRoYXQgcmVjZWl2ZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBmcm9tIFlvdS5cblxuICAgNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uXG5cbiAgIElmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uLCB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBub3RpY2VzIHJlcXVpcmVkIHVuZGVyIFNlY3Rpb24gMy40LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LlxuXG4gICA1LiBUZXJtaW5hdGlvblxuXG4gICAgICA1LjEgRmFpbHVyZSB0byBDb21wbHlcblxuICAgICAgVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBvZiBpdHMgdGVybXMuIEhvd2V2ZXIsIGlmIFlvdSBiZWNvbWUgY29tcGxpYW50LCB0aGVuIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgQ29udHJpYnV0b3IgYXJlIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50aWwgc3VjaCBDb250cmlidXRvciBleHBsaWNpdGx5IGFuZCBmaW5hbGx5IHRlcm1pbmF0ZXMgWW91ciBncmFudHMsIGFuZCAoYikgb24gYW4gb25nb2luZyBiYXNpcywgaWYgc3VjaCBDb250cmlidXRvciBmYWlscyB0byBub3RpZnkgWW91IG9mIHRoZSBub24tY29tcGxpYW5jZSBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8gNjAtZGF5cyBhZnRlciBZb3UgaGF2ZSBjb21lIGJhY2sgaW50byBjb21wbGlhbmNlLiBNb3Jlb3ZlciwgWW91ciBncmFudHMgZnJvbSBhIHBhcnRpY3VsYXIgQ29udHJpYnV0b3IgYXJlIHJlaW5zdGF0ZWQgb24gYW4gb25nb2luZyBiYXNpcyBpZiBzdWNoIENvbnRyaWJ1dG9yIG5vdGlmaWVzIFlvdSBvZiB0aGUgbm9uLWNvbXBsaWFuY2UgYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIFlvdSBoYXZlIHJlY2VpdmVkIG5vdGljZSBvZiBub24tY29tcGxpYW5jZSB3aXRoIHRoaXMgTGljZW5zZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZCBZb3UgYmVjb21lIGNvbXBsaWFudCBwcmlvciB0byAzMC1kYXlzIGFmdGVyIFlvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLlxuXG4gICAgICA1LjIgUGF0ZW50IEluZnJpbmdlbWVudCBDbGFpbXNcblxuICAgICAgSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zLCBjb3VudGVyLWNsYWltcywgYW5kIGNyb3NzLWNsYWltcyApIGFsbGVnaW5nIHRoYXQgYSBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBhbnkgYW5kIGFsbCBDb250cmlidXRvcnMgZm9yIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIFNlY3Rpb24gMi4xIG9mIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUuXG5cbiAgICAgIDUuMyBBZGRpdGlvbmFsIENvbXBsaWFuY2UgVGVybXNcblxuICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgaW4gdGhpcyBTZWN0aW9uIDUsIGZvciBwdXJwb3NlcyBvZiB0aGlzIFNlY3Rpb24sIGlmIFlvdSBicmVhY2ggU2VjdGlvbiAzLjEgKERpc3RyaWJ1dGlvbiBvZiBTb3VyY2UgRm9ybSksIFNlY3Rpb24gMy4yIChEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBGb3JtKSwgU2VjdGlvbiAzLjMgKERpc3RyaWJ1dGlvbiBvZiBhIExhcmdlciBXb3JrKSwgb3IgU2VjdGlvbiAzLjQgKE5vdGljZXMpLCB0aGVuIGJlY29taW5nIGNvbXBsaWFudCBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiA1LjEgbXVzdCBhbHNvIGluY2x1ZGUsIG5vIGxhdGVyIHRoYW4gMzAgZGF5cyBhZnRlciByZWNlaXB0IGJ5IFlvdSBvZiBub3RpY2Ugb2Ygc3VjaCB2aW9sYXRpb24gYnkgYSBDb250cmlidXRvciwgbWFraW5nIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBGb3JtIGFzIHJlcXVpcmVkIGJ5IHRoaXMgTGljZW5zZSBvbiBhIHB1YmxpY2x5IGF2YWlsYWJsZSBjb21wdXRlciBuZXR3b3JrIGZvciBhIHBlcmlvZCBvZiBubyBsZXNzIHRoYW4gdGhyZWUgKDMpIHllYXJzLlxuXG4gICAgICA1LjQgQ29udHJpYnV0b3IgUmVtZWRpZXNcblxuICAgICAgSWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZG8gbm90IHRoZXJlYWZ0ZXIgYmVjb21lIGNvbXBsaWFudCBpbiBhY2NvcmRhbmNlIHdpdGggU2VjdGlvbiA1LjEgYW5kLCBpZiBhcHBsaWNhYmxlLCBTZWN0aW9uIDUuMywgdGhlbiBlYWNoIENvbnRyaWJ1dG9yIHJlc2VydmVzIGl0cyByaWdodCwgaW4gYWRkaXRpb24gdG8gYW55IG90aGVyIHJpZ2h0cyBpdCBtYXkgaGF2ZSBpbiBsYXcgb3IgaW4gZXF1aXR5LCB0byBicmluZyBhbiBhY3Rpb24gc2Vla2luZyBpbmp1bmN0aXZlIHJlbGllZiwgb3IgZGFtYWdlcyBmb3Igd2lsbGZ1bCBjb3B5cmlnaHQgb3IgcGF0ZW50IGluZnJpbmdlbWVudCAoaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBkYW1hZ2VzIGZvciB1bmp1c3QgZW5yaWNobWVudCwgd2hlcmUgYXZhaWxhYmxlIHVuZGVyIGxhdyksIGZvciBhbGwgYWN0aW9ucyBpbiB2aW9sYXRpb24gb2YgcmlnaHRzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGhhdmUgYmVlbiBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDUuNSBFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudHNcblxuICAgICAgSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIHRoaXMgU2VjdGlvbiA1LCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpLCB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBZb3VyIGRpc3RyaWJ1dG9ycyB1bmRlciB0aGlzIExpY2Vuc2UgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi5cblxuICAgNi4gRGlzY2xhaW1lciBvZiBXYXJyYW50eVxuXG4gICBDb3ZlcmVkIFNvZnR3YXJlIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiBcImFzIGlzXCIgYmFzaXMsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQsIGltcGxpZWQsIG9yIHN0YXR1dG9yeSwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHdhcnJhbnRpZXMgdGhhdCB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpcyBmcmVlIG9mIGRlZmVjdHMsIG1lcmNoYW50YWJsZSwgZml0IGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBvciBub24taW5mcmluZ2luZy4gVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpcyB3aXRoIFlvdS4gU2hvdWxkIGFueSBDb3ZlcmVkIFNvZnR3YXJlIHByb3ZlIGRlZmVjdGl2ZSBpbiBhbnkgcmVzcGVjdCwgWW91IChub3QgYW55IENvbnRyaWJ1dG9yKSBhc3N1bWUgdGhlIGNvc3Qgb2YgYW55IG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciwgb3IgY29ycmVjdGlvbi4gVGhpcyBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gdXNlIG9mIGFueSBDb3ZlcmVkIFNvZnR3YXJlIGlzIGF1dGhvcml6ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuXG5cbiAgIDcuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5XG5cbiAgIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIGFueSBDb250cmlidXRvciwgb3IgYW55b25lIHdobyBkaXN0cmlidXRlcyBDb3ZlcmVkIFNvZnR3YXJlIGFzIHBlcm1pdHRlZCBhYm92ZSwgYmUgbGlhYmxlIHRvIFlvdSBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3N0IHByb2ZpdHMsIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMsIGV2ZW4gaWYgc3VjaCBwYXJ0eSBzaGFsbCBoYXZlIGJlZW4gaW5mb3JtZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvciBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgcmVzdWx0aW5nIGZyb20gc3VjaCBwYXJ0eSdzIG5lZ2xpZ2VuY2UgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuXG5cbiAgIDguIExpdGlnYXRpb25cblxuICAgQW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZSB0aGUgZGVmZW5kYW50IG1haW50YWlucyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGFuZCBzdWNoIGxpdGlnYXRpb24gc2hhbGwgYmUgZ292ZXJuZWQgYnkgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiwgd2l0aG91dCByZWZlcmVuY2UgdG8gaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBOb3RoaW5nIGluIHRoaXMgU2VjdGlvbiBzaGFsbCBwcmV2ZW50IGEgcGFydHkncyBhYmlsaXR5IHRvIGJyaW5nIGNyb3NzLWNsYWltcyBvciBjb3VudGVyLWNsYWltcy5cblxuICAgOS4gR292ZXJubWVudCBUZXJtc1xuXG4gICAgICA5LjEgQ29tbWVyY2lhbCBJdGVtXG5cbiAgICAgIFRoZSBDb3ZlcmVkIFNvZnR3YXJlIGlzIGEgXCJjb21tZXJjaWFsIGl0ZW0sXCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mIFwiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZVwiIGFuZCBcImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbixcIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgU29mdHdhcmUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLlxuXG4gICAgICA5LjIgTm8gU292ZXJlaWduIEltbXVuaXR5XG5cbiAgICAgIFRoZSBVLlMuIGZlZGVyYWwgZ292ZXJubWVudCBhbmQgc3RhdGVzIHRoYXQgdXNlIG9yIGRpc3RyaWJ1dGUgQ292ZXJlZCBTb2Z0d2FyZSBoZXJlYnkgd2FpdmUgdGhlaXIgc292ZXJlaWduIGltbXVuaXR5IHdpdGggcmVzcGVjdCB0byBlbmZvcmNlbWVudCBvZiB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDkuMyBDaG9pY2Ugb2YgTGF3IGFuZCBWZW51ZVxuXG4gICAgICAgICA5LjMuMSBJZiBZb3UgYXJlIGEgZ292ZXJubWVudCBvZiBhIHN0YXRlIG9mIHRoZSBVbml0ZWQgU3RhdGVzLCBvciBZb3VyIHVzZSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpcyBwdXJzdWFudCB0byBhIHByb2N1cmVtZW50IGNvbnRyYWN0IHdpdGggc3VjaCBhIHN0YXRlIGdvdmVybm1lbnQsIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3IG9mIHN1Y2ggc3RhdGUsIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMsIGFuZCB0aGUgYWRqdWRpY2F0aW9uIG9mIGRpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyBsb2NhdGVkIGluIHN1Y2ggc3RhdGUuXG5cbiAgICAgICAgIDkuMy4yIElmIFlvdSBhcmUgYW4gYWdlbmN5IG9mIHRoZSBVbml0ZWQgU3RhdGVzIGZlZGVyYWwgZ292ZXJubWVudCwgb3IgWW91ciB1c2Ugb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgaXMgcHVyc3VhbnQgdG8gYSBwcm9jdXJlbWVudCBjb250cmFjdCB3aXRoIHN1Y2ggYW4gYWdlbmN5LCB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgZmVkZXJhbCBsYXcgZm9yIGFsbCBwdXJwb3NlcywgYW5kIHRoZSBhZGp1ZGljYXRpb24gb2YgZGlzcHV0ZXMgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHdpbGwgYmUgc3ViamVjdCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiB0aGUgZmVkZXJhbCBjb3VydHMgbG9jYXRlZCBpbiBXYXNoaW5ndG9uLCBELkMuXG5cbiAgICAgICAgIDkuMy4zIFlvdSBtYXkgYWx0ZXIgdGhlIHRlcm1zIG9mIHRoaXMgU2VjdGlvbiA5LjMgZm9yIHRoaXMgTGljZW5zZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuMi5cblxuICAgICAgOS40IFN1cHJlbWFjeVxuXG4gICAgICBUaGlzIFNlY3Rpb24gOSBpcyBpbiBsaWV1IG9mLCBhbmQgc3VwZXJzZWRlcywgYW55IG90aGVyIEZlZGVyYWwgQWNxdWlzaXRpb24gUmVndWxhdGlvbiwgRGVmZW5zZSBGZWRlcmFsIEFjcXVpc2l0aW9uIFJlZ3VsYXRpb24sIG9yIG90aGVyIGNsYXVzZSBvciBwcm92aXNpb24gdGhhdCBhZGRyZXNzZXMgZ292ZXJubWVudCByaWdodHMgaW4gY29tcHV0ZXIgc29mdHdhcmUgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAxMC4gTWlzY2VsbGFuZW91c1xuXG4gICBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIEFueSBsYXcgb3IgcmVndWxhdGlvbiwgd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciwgc2hhbGwgbm90IGJlIHVzZWQgdG8gY29uc3RydWUgdGhpcyBMaWNlbnNlIGFnYWluc3QgYSBDb250cmlidXRvci5cblxuICAgMTEuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlXG5cbiAgICAgIDExLjEgTmV3IFZlcnNpb25zXG5cbiAgICAgIFRoZSBPcGVuIFNvdXJjZSBFbGVjdGlvbiBUZWNobm9sb2d5IEZvdW5kYXRpb24gKFwiT1NFVFwiKSAoZm9ybWVybHkga25vd24gYXMgdGhlIE9wZW4gU291cmNlIERpZ2l0YWwgVm90aW5nIEZvdW5kYXRpb24pIGlzIHRoZSBzdGV3YXJkIG9mIHRoaXMgTGljZW5zZS4gRXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gMTEuMywgbm8gb25lIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2Ugc3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSBvciBwdWJsaXNoIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuXG5cbiAgICAgIDExLjIgRWZmZWN0cyBvZiBOZXcgVmVyc2lvbnNcblxuICAgICAgWW91IG1heSBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZCB0aGUgQ292ZXJlZCBTb2Z0d2FyZSwgb3IgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBsaWNlbnNlIHN0ZXdhcmQuXG5cbiAgICAgIDExLjMgTW9kaWZpZWQgVmVyc2lvbnNcblxuICAgICAgSWYgWW91IGNyZWF0ZSBzb2Z0d2FyZSBub3QgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgWW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGxpY2Vuc2UgZm9yIHN1Y2ggc29mdHdhcmUsIFlvdSBtYXkgY3JlYXRlIGFuZCB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpZiBZb3UgcmVuYW1lIHRoZSBsaWNlbnNlIGFuZCByZW1vdmUgYW55IHJlZmVyZW5jZXMgdG8gdGhlIG5hbWUgb2YgdGhlIGxpY2Vuc2Ugc3Rld2FyZCAoZXhjZXB0IHRvIG5vdGUgdGhhdCBzdWNoIG1vZGlmaWVkIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkuXG5cbiAgICAgIDExLjQgRGlzdHJpYnV0aW5nIFNvdXJjZSBDb2RlIEZvcm0gVGhhdCBpcyBJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkgTGljZW5zZXNcblxuICAgICAgSWYgWW91IGNob29zZSB0byBkaXN0cmlidXRlIFNvdXJjZSBDb2RlIEZvcm0gdGhhdCBpcyBJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkgTGljZW5zZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBCIG9mIHRoaXMgTGljZW5zZSBtdXN0IGJlIGF0dGFjaGVkLiBFWEhJQklUIEEgLSBTb3VyY2UgQ29kZSBGb3JtIExpY2Vuc2UgTm90aWNlXG5cblRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgT1NFVCBQdWJsaWMgTGljZW5zZSwgdi4yLjEgKFwiT1BMXCIpLiBJZiBhIGNvcHkgb2YgdGhlIE9QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQ6IHd3dy5PU0VURm91bmRhdGlvbi5vcmcvcHVibGljLWxpY2Vuc2UuXG5cbklmIGl0IGlzIG5vdCBwb3NzaWJsZSBvciBkZXNpcmFibGUgdG8gcHV0IHRoZSBOb3RpY2UgaW4gYSBwYXJ0aWN1bGFyIGZpbGUsIHRoZW4gWW91IG1heSBpbmNsdWRlIHRoZSBOb3RpY2UgaW4gYSBsb2NhdGlvbiAoZS5nLiwgc3VjaCBhcyBhIExJQ0VOU0UgZmlsZSBpbiBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSByZWNpcGllbnQgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIFlvdSBtYXkgYWRkIGFkZGl0aW9uYWwgYWNjdXJhdGUgbm90aWNlcyBvZiBjb3B5cmlnaHQgb3duZXJzaGlwLiBFWEhJQklUIEIgLSBcIkluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeSBMaWNlbnNlXCIgTm90aWNlXG5cblRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBcIkluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeSBMaWNlbnNlc1wiLCBhcyBkZWZpbmVkIGJ5IHRoZSBPU0VUIFB1YmxpYyBMaWNlbnNlLCB2LjIuMS4iXSwibGljZW5zZUlkcyI6WyJPU0VULVBMLTIuMSJdLCJrZXl3b3JkcyI6WyJsaWNlbnNlIGMgMjAxNSIsImMgMjAxNSBhbGwiLCIyMDE1IGFsbCByaWdodHMiLCJyaWdodHMgcmVzZXJ2ZWQgdmVyc2lvbiIsInJlc2VydmVkIHZlcnNpb24gMiIsInRoaXMgbGljZW5zZSBkZWZpbmVzIiwibGljZW5zZSBkZWZpbmVzIHRoZSIsIm9mIGNlcnRhaW4gY292ZXJlZCIsImNlcnRhaW4gY292ZXJlZCBzb2Z0d2FyZSIsImRlZmluZWQgYmVsb3cgb3JpZ2luYWxseSIsImJlbG93IG9yaWdpbmFsbHkgcmVsZWFzZWQiLCJ0ZWNobm9sb2d5IGZvdW5kYXRpb24gZm9ybWVybHkiLCJmb3VuZGF0aW9uIGZvcm1lcmx5IHRoZSIsImZvcm1lcmx5IHRoZSBvc2R2IiwidGhlIG9zZHYgZm91bmRhdGlvbiIsIm9zZHYgZm91bmRhdGlvbiBhbnlvbmUiLCJmb3VuZGF0aW9uIGFueW9uZSB3aG8iLCJyZWRpc3RyaWJ1dGVzIHRoZSBjb3ZlcmVkIiwiZnVsbCB0aGUgdGVybXMiLCJ0aGUgdGVybXMgY29udGFpbmVkIiwidGVybXMgY29udGFpbmVkIGluIiwiYWdyZWUgdG8gc3VjaCIsInRvIHN1Y2ggdGVybXMiLCJ0ZXJtcyB5b3UgYXJlIiwiY292ZXJlZCBzb2Z0d2FyZSB0aGlzIiwibGljZW5zZSB3YXMgcHJlcGFyZWQiLCJ3YXMgcHJlcGFyZWQgYmFzZWQiLCJwcmVwYXJlZCBiYXNlZCBvbiIsInB1YmxpYyBsaWNlbnNlIG1wbCIsImxpY2Vuc2UgbXBsIHZlcnNpb24iLCJtcGwgdmVyc2lvbiAyIiwiMCBmb3IgYW5ub3RhdGlvbiIsImZvciBhbm5vdGF0aW9uIG9mIiwiYW5ub3RhdGlvbiBvZiB0aGUiLCJvZiB0aGUgZGlmZmVyZW5jZXMiLCJkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoaXMiLCJiZXR3ZWVuIHRoaXMgbGljZW5zZSIsImxpY2Vuc2UgYW5kIG1wbCIsImFuZCBtcGwgMiIsIjIgMCBwbGVhc2UiLCIwIHBsZWFzZSBzZWUiLCJzZWUgdGhlIG9zZXQiLCJ0aGUgb3NldCBmb3VuZGF0aW9uIiwib3NldCBmb3VuZGF0aW9uIHdlYiIsImZvdW5kYXRpb24gd2ViIHNpdGUiLCJ3ZWIgc2l0ZSBhdCIsInNpdGUgYXQgd3d3IiwidGhlIGxpY2Vuc2UgYmVnaW5zIiwibGljZW5zZSBiZWdpbnMgaGVyZSIsImJlZ2lucyBoZXJlIDEiLCJoZXJlIDEgZGVmaW5pdGlvbnMiLCJ2ZXJzaW9uIDEgeCIsIjEgeCBvciIsInggb3IgZWFybGllciIsImxpY2Vuc2UgbWVhbnMgb25lIiwibWVhbnMgb25lIG9mIiwiY2F1c2UgYW55IG9mIiwibW9kaWZpY2F0aW9ucyB0byBjYXJyeSIsInRoZSBmaWxlcyB5b3UiLCJmaWxlcyB5b3UgbWF5IiwiYWRkaXRpb25hbCB0ZXJtcyAzIiwidGVybXMgMyA1IiwiMyA1IDEiLCJhbnkganVyaXNkaWN0aW9uIDMiLCJqdXJpc2RpY3Rpb24gMyA1IiwicGxhY2UgYWRkaXRpb25hbCBjb25kaXRpb25zIiwiYWRkaXRpb25hbCBjb25kaXRpb25zIHVwb24iLCJjb25kaXRpb25zIHVwb24gdGhlIiwidXBvbiB0aGUgcmlnaHRzIiwiZXh0ZW50IG5lY2Vzc2FyeSBkdWUiLCJuZWNlc3NhcnkgZHVlIHRvIiwianVkaWNpYWwgb3JkZXIgcmVndWxhdGlvbiIsIm9yZGVyIHJlZ3VsYXRpb24gaW5jbHVkaW5nIiwicmVndWxhdGlvbiBpbmNsdWRpbmcgd2l0aG91dCIsIndpdGhvdXQgbGltaXRhdGlvbiBzdGF0ZSIsImxpbWl0YXRpb24gc3RhdGUgYW5kIiwiYW5kIGZlZGVyYWwgcHJvY3VyZW1lbnQiLCJmZWRlcmFsIHByb2N1cmVtZW50IHJlZ3VsYXRpb24iLCJwcm9jdXJlbWVudCByZWd1bGF0aW9uIG5hdGlvbmFsIiwicmVndWxhdGlvbiBuYXRpb25hbCBzZWN1cml0eSIsIm5hdGlvbmFsIHNlY3VyaXR5IG9yIiwic2VjdXJpdHkgb3IgcHVibGljIiwib3IgcHVibGljIGludGVyZXN0IiwicHVibGljIGludGVyZXN0IGFueSIsImludGVyZXN0IGFueSBzdWNoIiwiYWRkaXRpb25hbCBjb25kaXRpb25zIG11c3QiLCJiZSBjbGVhcmx5IGRlc2NyaWJlZCIsImNsZWFybHkgZGVzY3JpYmVkIGluIiwidGhlIG5vdGljZSBwcm92aXNpb25zIiwibm90aWNlIHByb3Zpc2lvbnMgcmVxdWlyZWQiLCJwcm92aXNpb25zIHJlcXVpcmVkIHVuZGVyIiwiMyA0IGFueSIsIjQgYW55IGFsdGVyYXRpb24iLCJjb3ZlcmVkIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIiwic29mdHdhcmUgZGlzdHJpYnV0ZWQgYnkiLCJieSBhbnkgZG93bnN0cmVhbSIsImFueSBkb3duc3RyZWFtIHJlY2lwaWVudHMiLCJkb3duc3RyZWFtIHJlY2lwaWVudHMgdGhhdCIsInRoYXQgcmVjZWl2ZSB0aGUiLCJjb3ZlcmVkIHNvZnR3YXJlIGZyb20iLCJmcm9tIHlvdSA0IiwieW91IDQgaW5hYmlsaXR5IiwiaW4gdGhlIG5vdGljZXMiLCJ0aGUgbm90aWNlcyByZXF1aXJlZCIsIm5vdGljZXMgcmVxdWlyZWQgdW5kZXIiLCIzIDQgZXhjZXB0IiwiNCBleGNlcHQgdG8iLCI1IDEgZmFpbHVyZSIsIjEgZmFpbHVyZSB0byIsInRvIGNvbXBseSB0aGUiLCJjb21wbHkgdGhlIHJpZ2h0cyIsIjUgMiBwYXRlbnQiLCIyIHBhdGVudCBpbmZyaW5nZW1lbnQiLCJwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltcyIsImluZnJpbmdlbWVudCBjbGFpbXMgaWYiLCI1IDMgYWRkaXRpb25hbCIsIjMgYWRkaXRpb25hbCBjb21wbGlhbmNlIiwiYWRkaXRpb25hbCBjb21wbGlhbmNlIHRlcm1zIiwiY29tcGxpYW5jZSB0ZXJtcyBub3R3aXRoc3RhbmRpbmciLCJ0ZXJtcyBub3R3aXRoc3RhbmRpbmcgdGhlIiwiZm9yZWdvaW5nIGluIHRoaXMiLCJzZWN0aW9uIDUgZm9yIiwiNSBmb3IgcHVycG9zZXMiLCJ0aGlzIHNlY3Rpb24gaWYiLCJzZWN0aW9uIGlmIHlvdSIsInlvdSBicmVhY2ggc2VjdGlvbiIsImJyZWFjaCBzZWN0aW9uIDMiLCJzb3VyY2UgZm9ybSBzZWN0aW9uIiwiZXhlY3V0YWJsZSBmb3JtIHNlY3Rpb24iLCJ3b3JrIG9yIHNlY3Rpb24iLCJvciBzZWN0aW9uIDMiLCI0IG5vdGljZXMgdGhlbiIsIm5vdGljZXMgdGhlbiBiZWNvbWluZyIsInRoZW4gYmVjb21pbmcgY29tcGxpYW50IiwiYmVjb21pbmcgY29tcGxpYW50IGFzIiwiY29tcGxpYW50IGFzIGRlc2NyaWJlZCIsIjUgMSBtdXN0IiwiMSBtdXN0IGFsc28iLCJhbHNvIGluY2x1ZGUgbm8iLCJpbmNsdWRlIG5vIGxhdGVyIiwibGF0ZXIgdGhhbiAzMCIsInRoYW4gMzAgZGF5cyIsImFmdGVyIHJlY2VpcHQgYnkiLCJyZWNlaXB0IGJ5IHlvdSIsInlvdSBvZiBub3RpY2UiLCJvZiBub3RpY2Ugb2YiLCJzdWNoIHZpb2xhdGlvbiBieSIsInZpb2xhdGlvbiBieSBhIiwiYSBjb250cmlidXRvciBtYWtpbmciLCJjb250cmlidXRvciBtYWtpbmcgdGhlIiwic29mdHdhcmUgYXZhaWxhYmxlIGluIiwiZm9ybSBhcyByZXF1aXJlZCIsInB1YmxpY2x5IGF2YWlsYWJsZSBjb21wdXRlciIsImF2YWlsYWJsZSBjb21wdXRlciBuZXR3b3JrIiwiY29tcHV0ZXIgbmV0d29yayBmb3IiLCJuZXR3b3JrIGZvciBhIiwicGVyaW9kIG9mIG5vIiwib2Ygbm8gbGVzcyIsImxlc3MgdGhhbiB0aHJlZSIsInRoYW4gdGhyZWUgMyIsInRocmVlIDMgeWVhcnMiLCIzIHllYXJzIDUiLCJ5ZWFycyA1IDQiLCI1IDQgY29udHJpYnV0b3IiLCI0IGNvbnRyaWJ1dG9yIHJlbWVkaWVzIiwiY29udHJpYnV0b3IgcmVtZWRpZXMgaWYiLCJyZW1lZGllcyBpZiB5b3UiLCJsaWNlbnNlIGFuZCBkbyIsImRvIG5vdCB0aGVyZWFmdGVyIiwibm90IHRoZXJlYWZ0ZXIgYmVjb21lIiwidGhlcmVhZnRlciBiZWNvbWUgY29tcGxpYW50IiwiYmVjb21lIGNvbXBsaWFudCBpbiIsImNvbXBsaWFudCBpbiBhY2NvcmRhbmNlIiwid2l0aCBzZWN0aW9uIDUiLCI1IDEgYW5kIiwiMSBhbmQgaWYiLCJpZiBhcHBsaWNhYmxlIHNlY3Rpb24iLCJhcHBsaWNhYmxlIHNlY3Rpb24gNSIsInNlY3Rpb24gNSAzIiwiNSAzIHRoZW4iLCIzIHRoZW4gZWFjaCIsInRoZW4gZWFjaCBjb250cmlidXRvciIsImVhY2ggY29udHJpYnV0b3IgcmVzZXJ2ZXMiLCJjb250cmlidXRvciByZXNlcnZlcyBpdHMiLCJyZXNlcnZlcyBpdHMgcmlnaHQiLCJpdHMgcmlnaHQgaW4iLCJyaWdodCBpbiBhZGRpdGlvbiIsIm90aGVyIHJpZ2h0cyBpdCIsInJpZ2h0cyBpdCBtYXkiLCJoYXZlIGluIGxhdyIsImluIGxhdyBvciIsImxhdyBvciBpbiIsIm9yIGluIGVxdWl0eSIsImluIGVxdWl0eSB0byIsImVxdWl0eSB0byBicmluZyIsInRvIGJyaW5nIGFuIiwiYnJpbmcgYW4gYWN0aW9uIiwiYW4gYWN0aW9uIHNlZWtpbmciLCJhY3Rpb24gc2Vla2luZyBpbmp1bmN0aXZlIiwic2Vla2luZyBpbmp1bmN0aXZlIHJlbGllZiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIHYuIDEuMFxuXG5UaGlzIE9wZW4gU29mdHdhcmUgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSBcIk9yaWdpbmFsIFdvcmtcIikgd2hvc2Ugb3duZXIgKHRoZSBcIkxpY2Vuc29yXCIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazpcblxuXCJMaWNlbnNlZCB1bmRlciB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIHZlcnNpb24gMS4wXCJcblxuTGljZW5zZSBUZXJtc1xuXG4gICAxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgbm9uLXN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UgdG8gZG8gdGhlIGZvbGxvd2luZzpcblxuICAgICAgYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllcztcblxuICAgICAgYikgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIChcIkRlcml2YXRpdmUgV29ya3NcIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaztcblxuICAgICAgYykgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYywgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IGNvcGllcyBvZiBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBzaGFsbCBiZSBsaWNlbnNlZCB1bmRlciB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlO1xuXG4gICAgICBkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmRcblxuICAgICAgZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS5cblxuICAgMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIG5vbi1zdWJsaWNlbnNlYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IgKFwiTGljZW5zZWQgQ2xhaW1zXCIpIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIG5vbi1zdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHVuZGVyIHRoZSBMaWNlbnNlZCBDbGFpbXMgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSBEZXJpdmF0aXZlIFdvcmtzLlxuXG4gICAzKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSBcIlNvdXJjZSBDb2RlXCIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIGFjY2VzcyBhbmQgbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBoZXJlYnkgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGJ5IHB1Ymxpc2hpbmcgdGhlIGFkZHJlc3Mgb2YgdGhhdCBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IGluIGEgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGFwcGxpZXMgdG8gdGhlIE9yaWdpbmFsIFdvcmsuXG5cbiAgIDQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIExpY2Vuc2VkIENsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuXG5cbiAgIDUpIEV4dGVybmFsIERlcGxveW1lbnQuIFRoZSB0ZXJtIFwiRXh0ZXJuYWwgRGVwbG95bWVudFwiIG1lYW5zIHRoZSB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgYWNjZXNzZWQgb3IgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBhcmUgZGlzdHJpYnV0ZWQgdG8gdGhvc2UgcGVyc29ucywgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgY29tcHV0ZXIgbmV0d29yaywgb3IgdXNlZCB0byBwcm92aWRlIHNlcnZpY2VzIG9yIG90aGVyd2lzZSBkZWxpdmVyIGNvbnRlbnQgdG8gYW55b25lIG90aGVyIHRoYW4gWW91LiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IGFncmVlIHRoYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IHNoYWxsIGJlIGRlZW1lZCBhIGRpc3RyaWJ1dGlvbiBhbmQgc2hhbGwgYmUgbGljZW5zZWQgdG8gYWxsIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFzIHByZXNjcmliZWQgaW4gc2VjdGlvbiAxKGMpIGhlcmVpbi5cblxuICAgNikgV2FycmFudHkgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExJQ0VOU09SIFdBUlJBTlRTIFRIQVQgVEhFIENPUFlSSUdIVCBJTiBBTkQgVE8gVEhFIE9SSUdJTkFMIFdPUksgSVMgT1dORUQgQlkgVEhFIExJQ0VOU09SIE9SIFRIQVQgVEhFIE9SSUdJTkFMIFdPUksgSVMgRElTVFJJQlVURUQgQlkgTElDRU5TT1IgVU5ERVIgQSBWQUxJRCBDVVJSRU5UIExJQ0VOU0UgRlJPTSBUSEUgQ09QWVJJR0hUIE9XTkVSLiBFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSEUgSU1NRURJQVRFTFkgUFJFQ0VFRElORyBTRU5URU5DRSwgVEhFIE9SSUdJTkFMIFdPUksgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBXQVJSQU5UWSBPRiBOT04tSU5GUklOR0VNRU5UIEFORCBXQVJSQU5USUVTIFRIQVQgVEhFIE9SSUdJTkFMIFdPUksgSVMgTUVSQ0hBTlRBQkxFIE9SIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gTElDRU5TRSBUTyBPUklHSU5BTCBXT1JLIElTIEdSQU5URUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuXG5cbiAgIDcpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgTElDRU5TT1IgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBBUklTSU5HIEFTIEEgUkVTVUxUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBPUklHSU5BTCBXT1JLIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEVSU09OIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS5cblxuICAgOCkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIE5vdGhpbmcgZWxzZSBidXQgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgZ3JhbnRzIFlvdSBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBhbnkgYXR0ZW1wdCB0byBkbyBzbyBleGNlcHQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGlzIGV4cHJlc3NseSBwcm9oaWJpdGVkIGJ5IFUuUy4gY29weXJpZ2h0IGxhdywgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBieSBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhlcmVmb3JlLCBieSBleGVyY2lzaW5nIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb25zIDEgYW5kIDIgaGVyZWluLCBZb3UgaW5kaWNhdGUgWW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gVGhpcyBsaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgeW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIHVwb24gWW91ciBmYWlsdXJlIHRvIGhvbm9yIHRoZSBwcm92aXNvIGluIFNlY3Rpb24gMShjKSBoZXJlaW4uXG5cbiAgIDkpIE11dHVhbCBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgaWYgWW91IGZpbGUgYSBsYXdzdWl0IGluIGFueSBjb3VydCBhbGxlZ2luZyB0aGF0IGFueSBPU0kgQ2VydGlmaWVkIG9wZW4gc291cmNlIHNvZnR3YXJlIHRoYXQgaXMgbGljZW5zZWQgdW5kZXIgYW55IGxpY2Vuc2UgY29udGFpbmluZyB0aGlzIFwiTXV0dWFsIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uXCIgY2xhdXNlIGluZnJpbmdlcyBhbnkgcGF0ZW50IGNsYWltcyB0aGF0IGFyZSBlc3NlbnRpYWwgdG8gdXNlIHRoYXQgc29mdHdhcmUuXG5cbiAgIDEwKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBZb3UgYWdyZWUgdGhhdCBhbnkgbGF3c3VpdCBhcmlzaW5nIHVuZGVyIG9yIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBtYWludGFpbmVkIGluIHRoZSBjb3VydHMgb2YgdGhlIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiB0aGUgVS5TLiBDb3B5cmlnaHQgQWN0LCAxNyBVLlMuQy4gwqcgMTAxIGV0IHNlcS4sIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDExKSBBdHRvcm5leXMgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3Igc2Vla2luZyBkYW1hZ2VzIHJlbGF0aW5nIHRoZXJldG8sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaCBhY3Rpb24sIGluY2x1ZGluZyBhbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAxMikgTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLlxuXG4gICAxMykgRGVmaW5pdGlvbiBvZiBcIllvdVwiIGluIFRoaXMgTGljZW5zZS4gXCJZb3VcIiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJjb250cm9sXCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cblRoaXMgbGljZW5zZSBpcyBDb3B5cmlnaHQgKEMpIDIwMDIgTGF3cmVuY2UgRS4gUm9zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuIl0sImxpY2Vuc2VJZHMiOlsiT1NMLTEuMCJdLCJrZXl3b3JkcyI6WyIxIDAgbGljZW5zZSIsIjAgbGljZW5zZSB0ZXJtcyIsInRob3NlIHBlcnNvbnMgbWFkZSIsInBlcnNvbnMgbWFkZSBhdmFpbGFibGUiLCJ0aGFuIHlvdSBhcyIsImhlcmVpbiA2IHdhcnJhbnR5IiwiNiB3YXJyYW50eSBhbmQiLCJ5b3UgOCBhY2NlcHRhbmNlIiwiOCBhY2NlcHRhbmNlIGFuZCIsImFuZCB0ZXJtaW5hdGlvbiBub3RoaW5nIiwidGVybWluYXRpb24gbm90aGluZyBlbHNlIiwiYW5kIDIgaGVyZWluIiwiMiBoZXJlaW4geW91IiwiYyBoZXJlaW4gOSIsImhlcmVpbiA5IG11dHVhbCIsIjkgbXV0dWFsIHRlcm1pbmF0aW9uIiwidGhhdCBzb2Z0d2FyZSAxMCIsInNvZnR3YXJlIDEwIGp1cmlzZGljdGlvbiIsIjEwIGp1cmlzZGljdGlvbiB2ZW51ZSIsImdvdmVybmluZyBsYXcgeW91IiwibGF3IHlvdSBhZ3JlZSIsInRoYXQgYW55IGxhd3N1aXQiLCJhbnkgbGF3c3VpdCBhcmlzaW5nIiwibGF3c3VpdCBhcmlzaW5nIHVuZGVyIiwidW5kZXIgb3IgcmVsYXRpbmciLCJzaGFsbCBiZSBtYWludGFpbmVkIiwiYmUgbWFpbnRhaW5lZCBpbiIsIm1haW50YWluZWQgaW4gdGhlIiwidGhlIGp1cmlzZGljdGlvbiB3aGVyZWluIiwibGljZW5zZSAxMSBhdHRvcm5leXMiLCIxMSBhdHRvcm5leXMgZmVlcyIsImxpY2Vuc2UgMTIgbWlzY2VsbGFuZW91cyIsIjEyIG1pc2NlbGxhbmVvdXMgdGhpcyIsImVuZm9yY2VhYmxlIDEzIGRlZmluaXRpb24iLCIxMyBkZWZpbml0aW9uIG9mIiwic3VjaCBlbnRpdHkgdGhpcyIsImVudGl0eSB0aGlzIGxpY2Vuc2UiLCIxIDAgdGhpcyBvcGVuIiwidmVyc2lvbiAxIDAgbGljZW5zZSIsIjEgMCBsaWNlbnNlIHRlcm1zIiwiMCBsaWNlbnNlIHRlcm1zIDEiLCJ3b3JrcyBtYXkgYmUgYWNjZXNzZWQiLCJ0byB0aG9zZSBwZXJzb25zIG1hZGUiLCJ0aG9zZSBwZXJzb25zIG1hZGUgYXZhaWxhYmxlIiwicGVyc29ucyBtYWRlIGF2YWlsYWJsZSBhcyIsIm90aGVyIHRoYW4geW91IGFzIiwidGhhbiB5b3UgYXMgYW4iLCJ5b3UgYXMgYW4gZXhwcmVzcyIsImRlcGxveW1lbnQgYnkgeW91IHNoYWxsIiwieW91IHNoYWxsIGJlIGRlZW1lZCIsImMgaGVyZWluIDYgd2FycmFudHkiLCJoZXJlaW4gNiB3YXJyYW50eSBhbmQiLCI2IHdhcnJhbnR5IGFuZCBkaXNjbGFpbWVyIiwidG8geW91IDggYWNjZXB0YW5jZSIsInlvdSA4IGFjY2VwdGFuY2UgYW5kIiwiOCBhY2NlcHRhbmNlIGFuZCB0ZXJtaW5hdGlvbiIsImFjY2VwdGFuY2UgYW5kIHRlcm1pbmF0aW9uIG5vdGhpbmciLCJhbmQgdGVybWluYXRpb24gbm90aGluZyBlbHNlIiwidGVybWluYXRpb24gbm90aGluZyBlbHNlIGJ1dCIsIndvcmsgYW5kIGFueSBhdHRlbXB0IiwiaW4gc2VjdGlvbnMgMSBhbmQiLCIxIGFuZCAyIGhlcmVpbiIsImFuZCAyIGhlcmVpbiB5b3UiLCIyIGhlcmVpbiB5b3UgaW5kaWNhdGUiLCIxIGMgaGVyZWluIDkiLCJjIGhlcmVpbiA5IG11dHVhbCIsImhlcmVpbiA5IG11dHVhbCB0ZXJtaW5hdGlvbiIsIjkgbXV0dWFsIHRlcm1pbmF0aW9uIGZvciIsInVzZSB0aGF0IHNvZnR3YXJlIDEwIiwidGhhdCBzb2Z0d2FyZSAxMCBqdXJpc2RpY3Rpb24iLCJzb2Z0d2FyZSAxMCBqdXJpc2RpY3Rpb24gdmVudWUiLCIxMCBqdXJpc2RpY3Rpb24gdmVudWUgYW5kIiwiYW5kIGdvdmVybmluZyBsYXcgeW91IiwiZ292ZXJuaW5nIGxhdyB5b3UgYWdyZWUiLCJsYXcgeW91IGFncmVlIHRoYXQiLCJhZ3JlZSB0aGF0IGFueSBsYXdzdWl0IiwidGhhdCBhbnkgbGF3c3VpdCBhcmlzaW5nIiwiYW55IGxhd3N1aXQgYXJpc2luZyB1bmRlciIsImxhd3N1aXQgYXJpc2luZyB1bmRlciBvciIsImFyaXNpbmcgdW5kZXIgb3IgcmVsYXRpbmciLCJ1bmRlciBvciByZWxhdGluZyB0byIsImxpY2Vuc2Ugc2hhbGwgYmUgbWFpbnRhaW5lZCIsInNoYWxsIGJlIG1haW50YWluZWQgaW4iLCJiZSBtYWludGFpbmVkIGluIHRoZSIsIm1haW50YWluZWQgaW4gdGhlIGNvdXJ0cyIsImNvdXJ0cyBvZiB0aGUganVyaXNkaWN0aW9uIiwib2YgdGhlIGp1cmlzZGljdGlvbiB3aGVyZWluIiwidGhlIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSIsIm9mIHRoaXMgbGljZW5zZSAxMSIsInRoaXMgbGljZW5zZSAxMSBhdHRvcm5leXMiLCJsaWNlbnNlIDExIGF0dG9ybmV5cyBmZWVzIiwiMTEgYXR0b3JuZXlzIGZlZXMgaW4iLCJ0aGlzIGxpY2Vuc2UgMTIgbWlzY2VsbGFuZW91cyIsImxpY2Vuc2UgMTIgbWlzY2VsbGFuZW91cyB0aGlzIiwiMTIgbWlzY2VsbGFuZW91cyB0aGlzIGxpY2Vuc2UiLCJpdCBlbmZvcmNlYWJsZSAxMyBkZWZpbml0aW9uIiwiZW5mb3JjZWFibGUgMTMgZGVmaW5pdGlvbiBvZiIsIjEzIGRlZmluaXRpb24gb2YgeW91Iiwib2Ygc3VjaCBlbnRpdHkgdGhpcyIsInN1Y2ggZW50aXR5IHRoaXMgbGljZW5zZSIsImVudGl0eSB0aGlzIGxpY2Vuc2UgaXMiLCJ2IDEgMCB0aGlzIG9wZW4iLCIxIDAgdGhpcyBvcGVuIHNvZnR3YXJlIiwibGljZW5zZSB2ZXJzaW9uIDEgMCBsaWNlbnNlIiwidmVyc2lvbiAxIDAgbGljZW5zZSB0ZXJtcyIsIjEgMCBsaWNlbnNlIHRlcm1zIDEiLCIwIGxpY2Vuc2UgdGVybXMgMSBncmFudCIsInRlcm1zIDEgZ3JhbnQgb2YgY29weXJpZ2h0IiwiZGVyaXZhdGl2ZSB3b3JrcyBtYXkgYmUgYWNjZXNzZWQiLCJ3b3JrcyBtYXkgYmUgYWNjZXNzZWQgb3IiLCJkaXN0cmlidXRlZCB0byB0aG9zZSBwZXJzb25zIG1hZGUiLCJ0byB0aG9zZSBwZXJzb25zIG1hZGUgYXZhaWxhYmxlIiwidGhvc2UgcGVyc29ucyBtYWRlIGF2YWlsYWJsZSBhcyIsInBlcnNvbnMgbWFkZSBhdmFpbGFibGUgYXMgYW4iLCJhbnlvbmUgb3RoZXIgdGhhbiB5b3UgYXMiLCJvdGhlciB0aGFuIHlvdSBhcyBhbiIsInRoYW4geW91IGFzIGFuIGV4cHJlc3MiLCJ5b3UgYXMgYW4gZXhwcmVzcyBjb25kaXRpb24iLCJleHRlcm5hbCBkZXBsb3ltZW50IGJ5IHlvdSBzaGFsbCIsImRlcGxveW1lbnQgYnkgeW91IHNoYWxsIGJlIiwiYnkgeW91IHNoYWxsIGJlIGRlZW1lZCIsInlvdSBzaGFsbCBiZSBkZWVtZWQgYSIsIjEgYyBoZXJlaW4gNiB3YXJyYW50eSIsImMgaGVyZWluIDYgd2FycmFudHkgYW5kIiwiaGVyZWluIDYgd2FycmFudHkgYW5kIGRpc2NsYWltZXIiLCI2IHdhcnJhbnR5IGFuZCBkaXNjbGFpbWVyIG9mIiwiYXBwbHkgdG8geW91IDggYWNjZXB0YW5jZSIsInRvIHlvdSA4IGFjY2VwdGFuY2UgYW5kIiwieW91IDggYWNjZXB0YW5jZSBhbmQgdGVybWluYXRpb24iLCI4IGFjY2VwdGFuY2UgYW5kIHRlcm1pbmF0aW9uIG5vdGhpbmciLCJhY2NlcHRhbmNlIGFuZCB0ZXJtaW5hdGlvbiBub3RoaW5nIGVsc2UiLCJhbmQgdGVybWluYXRpb24gbm90aGluZyBlbHNlIGJ1dCIsInRlcm1pbmF0aW9uIG5vdGhpbmcgZWxzZSBidXQgdGhpcyIsIm9yaWdpbmFsIHdvcmsgYW5kIGFueSBhdHRlbXB0Iiwid29yayBhbmQgYW55IGF0dGVtcHQgdG8iLCJ5b3UgaW4gc2VjdGlvbnMgMSBhbmQiLCJpbiBzZWN0aW9ucyAxIGFuZCAyIiwic2VjdGlvbnMgMSBhbmQgMiBoZXJlaW4iLCIxIGFuZCAyIGhlcmVpbiB5b3UiLCJhbmQgMiBoZXJlaW4geW91IGluZGljYXRlIiwiMiBoZXJlaW4geW91IGluZGljYXRlIHlvdXIiLCJzZWN0aW9uIDEgYyBoZXJlaW4gOSIsIjEgYyBoZXJlaW4gOSBtdXR1YWwiLCJjIGhlcmVpbiA5IG11dHVhbCB0ZXJtaW5hdGlvbiIsImhlcmVpbiA5IG11dHVhbCB0ZXJtaW5hdGlvbiBmb3IiLCI5IG11dHVhbCB0ZXJtaW5hdGlvbiBmb3IgcGF0ZW50IiwidG8gdXNlIHRoYXQgc29mdHdhcmUgMTAiLCJ1c2UgdGhhdCBzb2Z0d2FyZSAxMCBqdXJpc2RpY3Rpb24iLCJ0aGF0IHNvZnR3YXJlIDEwIGp1cmlzZGljdGlvbiB2ZW51ZSIsInNvZnR3YXJlIDEwIGp1cmlzZGljdGlvbiB2ZW51ZSBhbmQiLCIxMCBqdXJpc2RpY3Rpb24gdmVudWUgYW5kIGdvdmVybmluZyIsInZlbnVlIGFuZCBnb3Zlcm5pbmcgbGF3IHlvdSIsImFuZCBnb3Zlcm5pbmcgbGF3IHlvdSBhZ3JlZSIsImdvdmVybmluZyBsYXcgeW91IGFncmVlIHRoYXQiLCJsYXcgeW91IGFncmVlIHRoYXQgYW55IiwieW91IGFncmVlIHRoYXQgYW55IGxhd3N1aXQiLCJhZ3JlZSB0aGF0IGFueSBsYXdzdWl0IGFyaXNpbmciLCJ0aGF0IGFueSBsYXdzdWl0IGFyaXNpbmcgdW5kZXIiLCJhbnkgbGF3c3VpdCBhcmlzaW5nIHVuZGVyIG9yIiwibGF3c3VpdCBhcmlzaW5nIHVuZGVyIG9yIHJlbGF0aW5nIiwiYXJpc2luZyB1bmRlciBvciByZWxhdGluZyB0byIsInVuZGVyIG9yIHJlbGF0aW5nIHRvIHRoaXMiLCJ0aGlzIGxpY2Vuc2Ugc2hhbGwgYmUgbWFpbnRhaW5lZCIsImxpY2Vuc2Ugc2hhbGwgYmUgbWFpbnRhaW5lZCBpbiIsInNoYWxsIGJlIG1haW50YWluZWQgaW4gdGhlIiwiYmUgbWFpbnRhaW5lZCBpbiB0aGUgY291cnRzIiwibWFpbnRhaW5lZCBpbiB0aGUgY291cnRzIG9mIiwiaW4gdGhlIGNvdXJ0cyBvZiB0aGUiLCJ0aGUgY291cnRzIG9mIHRoZSBqdXJpc2RpY3Rpb24iLCJjb3VydHMgb2YgdGhlIGp1cmlzZGljdGlvbiB3aGVyZWluIiwib2YgdGhlIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSIsInRoZSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgbGljZW5zb3IiLCJ0ZXJtaW5hdGlvbiBvZiB0aGlzIGxpY2Vuc2UgMTEiLCJvZiB0aGlzIGxpY2Vuc2UgMTEgYXR0b3JuZXlzIiwidGhpcyBsaWNlbnNlIDExIGF0dG9ybmV5cyBmZWVzIiwibGljZW5zZSAxMSBhdHRvcm5leXMgZmVlcyBpbiIsIjExIGF0dG9ybmV5cyBmZWVzIGluIGFueSIsIm9mIHRoaXMgbGljZW5zZSAxMiBtaXNjZWxsYW5lb3VzIiwidGhpcyBsaWNlbnNlIDEyIG1pc2NlbGxhbmVvdXMgdGhpcyIsImxpY2Vuc2UgMTIgbWlzY2VsbGFuZW91cyB0aGlzIGxpY2Vuc2UiLCIxMiBtaXNjZWxsYW5lb3VzIHRoaXMgbGljZW5zZSByZXByZXNlbnRzIiwibWFrZSBpdCBlbmZvcmNlYWJsZSAxMyBkZWZpbml0aW9uIiwiaXQgZW5mb3JjZWFibGUgMTMgZGVmaW5pdGlvbiBvZiIsImVuZm9yY2VhYmxlIDEzIGRlZmluaXRpb24gb2YgeW91IiwiMTMgZGVmaW5pdGlvbiBvZiB5b3UgaW4iLCJvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkgdGhpcyIsIm9mIHN1Y2ggZW50aXR5IHRoaXMgbGljZW5zZSIsInN1Y2ggZW50aXR5IHRoaXMgbGljZW5zZSBpcyIsImVudGl0eSB0aGlzIGxpY2Vuc2UgaXMgY29weXJpZ2h0Il19LHsibGljZW5zZVRleHRzIjpbIlRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2Ugdi4gMS4xXG5cblRoaXMgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlIFwiT3JpZ2luYWwgV29ya1wiKSB3aG9zZSBvd25lciAodGhlIFwiTGljZW5zb3JcIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOlxuXG5MaWNlbnNlZCB1bmRlciB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIHZlcnNpb24gMS4xXG5cbiAgIDEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBub24tc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOlxuXG4gICAgICBhKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzO1xuXG4gICAgICBiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKFwiRGVyaXZhdGl2ZSBXb3Jrc1wiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrO1xuXG4gICAgICBjKSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljLCB3aXRoIHRoZSBwcm92aXNvIHRoYXQgY29waWVzIG9mIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIHNoYWxsIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2U7XG5cbiAgICAgIGQpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZFxuXG4gICAgICBlKSB0byBkaXNwbGF5IHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5LlxuXG4gICAyKSBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgbm9uLXN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciAoXCJMaWNlbnNlZCBDbGFpbXNcIikgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgbm9uLXN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UgdW5kZXIgdGhlIExpY2Vuc2VkIENsYWltcyB0byBtYWtlLCB1c2UsIHNlbGwgYW5kIG9mZmVyIGZvciBzYWxlIERlcml2YXRpdmUgV29ya3MuXG5cbiAgIDMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtIFwiU291cmNlIENvZGVcIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBoZXJlYnkgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGJ5IHB1Ymxpc2hpbmcgdGhlIGFkZHJlc3Mgb2YgdGhhdCBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IGluIGEgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGFwcGxpZXMgdG8gdGhlIE9yaWdpbmFsIFdvcmsuXG5cbiAgIDQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIExpY2Vuc2VkIENsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuXG5cbiAgIDUpIEV4dGVybmFsIERlcGxveW1lbnQuIFRoZSB0ZXJtIFwiRXh0ZXJuYWwgRGVwbG95bWVudFwiIG1lYW5zIHRoZSB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBhcmUgZGlzdHJpYnV0ZWQgdG8gdGhvc2UgcGVyc29ucyBvciBtYWRlIGF2YWlsYWJsZSBhcyBhbiBhcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBjb21wdXRlciBuZXR3b3JrLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IGFncmVlIHRoYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IG9mIGEgRGVyaXZhdGl2ZSBXb3JrIHNoYWxsIGJlIGRlZW1lZCBhIGRpc3RyaWJ1dGlvbiBhbmQgc2hhbGwgYmUgbGljZW5zZWQgdG8gYWxsIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFzIHByZXNjcmliZWQgaW4gc2VjdGlvbiAxKGMpIGhlcmVpbi5cblxuICAgNikgQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiBcIkF0dHJpYnV0aW9uIE5vdGljZS5cIiBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuXG5cbiAgIDcpIFdhcnJhbnR5IGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGlzIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIGlzIGRpc3RyaWJ1dGVkIGJ5IExpY2Vuc29yIHVuZGVyIGEgdmFsaWQgY3VycmVudCBsaWNlbnNlIGZyb20gdGhlIGNvcHlyaWdodCBvd25lci4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByb2NlZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiBcIkFTIElTXCIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgaGVyZXVuZGVyIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuXG5cbiAgIDgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueSBwZXJzb24gZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBMaWNlbnNvcidzIG5lZ2xpZ2VuY2UgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuXG5cbiAgIDkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiBZb3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYW5kIHZvbGl0aW9uYWwgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gTm90aGluZyBlbHNlIGJ1dCB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciB0byBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGluIFNlY3Rpb25zIDEgaGVyZWluLCBhbmQgYW55IGF0dGVtcHQgdG8gZG8gc28gZXhjZXB0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBpcyBleHByZXNzbHkgcHJvaGliaXRlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcsIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgYnkgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoZXJlZm9yZSwgYnkgZXhlcmNpc2luZyBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9ucyAxIGhlcmVpbiwgWW91IGluZGljYXRlIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIHlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSB1cG9uIFlvdXIgZmFpbHVyZSB0byBob25vciB0aGUgcHJvdmlzbyBpbiBTZWN0aW9uIDEoYykgaGVyZWluLlxuXG4gICAxMCkgTXV0dWFsIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBpZiBZb3UgZmlsZSBhIGxhd3N1aXQgaW4gYW55IGNvdXJ0IGFsbGVnaW5nIHRoYXQgYW55IE9TSSBDZXJ0aWZpZWQgb3BlbiBzb3VyY2Ugc29mdHdhcmUgdGhhdCBpcyBsaWNlbnNlZCB1bmRlciBhbnkgbGljZW5zZSBjb250YWluaW5nIHRoaXMgXCJNdXR1YWwgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb25cIiBjbGF1c2UgaW5mcmluZ2VzIGFueSBwYXRlbnQgY2xhaW1zIHRoYXQgYXJlIGVzc2VudGlhbCB0byB1c2UgdGhhdCBzb2Z0d2FyZS5cblxuICAgMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIHRoZSBVLlMuIENvcHlyaWdodCBBY3QsIDE3IFUuUy5DLiDDpcKkIDEwMSBldCBzZXEuLCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAxMikgQXR0b3JuZXlzIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgMTMpIE1pc2NlbGxhbmVvdXMuIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS5cblxuICAgMTQpIERlZmluaXRpb24gb2YgXCJZb3VcIiBpbiBUaGlzIExpY2Vuc2UuIFwiWW91XCIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBcIllvdVwiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbFwiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS5cblxuVGhpcyBsaWNlbnNlIGlzIENvcHlyaWdodCAoQykgMjAwMiBMYXdyZW5jZSBFLiBSb3Nlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4iXSwibGljZW5zZUlkcyI6WyJPU0wtMS4xIl0sImtleXdvcmRzIjpbInRoZSBleHByZXNzIGFuZCIsImV4cHJlc3MgYW5kIHZvbGl0aW9uYWwiLCJhbmQgdm9saXRpb25hbCBhc3NlbnQiLCJ2b2xpdGlvbmFsIGFzc2VudCBvZiIsImhlcmVpbiAxMCBtdXR1YWwiLCIxMCBtdXR1YWwgdGVybWluYXRpb24iLCJ0aGF0IHNvZnR3YXJlIDExIiwic29mdHdhcmUgMTEganVyaXNkaWN0aW9uIiwidiAxIDEgdGhpcyIsIjEgMSB0aGlzIG9wZW4iLCIxIDEgMSBncmFudCIsIndvcmsgNyB3YXJyYW50eSBhbmQiLCI3IHdhcnJhbnR5IGFuZCBkaXNjbGFpbWVyIiwib2J0YWluIHRoZSBleHByZXNzIGFuZCIsInRoZSBleHByZXNzIGFuZCB2b2xpdGlvbmFsIiwiZXhwcmVzcyBhbmQgdm9saXRpb25hbCBhc3NlbnQiLCJhbmQgdm9saXRpb25hbCBhc3NlbnQgb2YiLCJ2b2xpdGlvbmFsIGFzc2VudCBvZiByZWNpcGllbnRzIiwicmlnaHRzIGdyYW50ZWQgaW4gc2VjdGlvbnMiLCJncmFudGVkIGluIHNlY3Rpb25zIDEiLCJzZWN0aW9ucyAxIGhlcmVpbiBhbmQiLCJzZWN0aW9ucyAxIGhlcmVpbiB5b3UiLCJjIGhlcmVpbiAxMCBtdXR1YWwiLCJoZXJlaW4gMTAgbXV0dWFsIHRlcm1pbmF0aW9uIiwiMTAgbXV0dWFsIHRlcm1pbmF0aW9uIGZvciIsInVzZSB0aGF0IHNvZnR3YXJlIDExIiwidGhhdCBzb2Z0d2FyZSAxMSBqdXJpc2RpY3Rpb24iLCJzb2Z0d2FyZSAxMSBqdXJpc2RpY3Rpb24gdmVudWUiLCJzb2Z0d2FyZSBsaWNlbnNlIHYgMSAxIiwibGljZW5zZSB2IDEgMSB0aGlzIiwidiAxIDEgdGhpcyBvcGVuIiwiMSAxIHRoaXMgb3BlbiBzb2Z0d2FyZSIsInNvZnR3YXJlIGxpY2Vuc2UgdmVyc2lvbiAxIDEiLCJ2ZXJzaW9uIDEgMSAxIGdyYW50IiwiMSAxIDEgZ3JhbnQgb2YiLCJvcmlnaW5hbCB3b3JrIDcgd2FycmFudHkgYW5kIiwid29yayA3IHdhcnJhbnR5IGFuZCBkaXNjbGFpbWVyIiwiNyB3YXJyYW50eSBhbmQgZGlzY2xhaW1lciBvZiIsInRvIG9idGFpbiB0aGUgZXhwcmVzcyBhbmQiLCJvYnRhaW4gdGhlIGV4cHJlc3MgYW5kIHZvbGl0aW9uYWwiLCJ0aGUgZXhwcmVzcyBhbmQgdm9saXRpb25hbCBhc3NlbnQiLCJleHByZXNzIGFuZCB2b2xpdGlvbmFsIGFzc2VudCBvZiIsImFuZCB2b2xpdGlvbmFsIGFzc2VudCBvZiByZWNpcGllbnRzIiwidm9saXRpb25hbCBhc3NlbnQgb2YgcmVjaXBpZW50cyB0byIsInRoZSByaWdodHMgZ3JhbnRlZCBpbiBzZWN0aW9ucyIsInJpZ2h0cyBncmFudGVkIGluIHNlY3Rpb25zIDEiLCJncmFudGVkIGluIHNlY3Rpb25zIDEgaGVyZWluIiwiaW4gc2VjdGlvbnMgMSBoZXJlaW4gYW5kIiwic2VjdGlvbnMgMSBoZXJlaW4gYW5kIGFueSIsInlvdSBpbiBzZWN0aW9ucyAxIGhlcmVpbiIsImluIHNlY3Rpb25zIDEgaGVyZWluIHlvdSIsInNlY3Rpb25zIDEgaGVyZWluIHlvdSBpbmRpY2F0ZSIsIjEgYyBoZXJlaW4gMTAgbXV0dWFsIiwiYyBoZXJlaW4gMTAgbXV0dWFsIHRlcm1pbmF0aW9uIiwiaGVyZWluIDEwIG11dHVhbCB0ZXJtaW5hdGlvbiBmb3IiLCIxMCBtdXR1YWwgdGVybWluYXRpb24gZm9yIHBhdGVudCIsInRvIHVzZSB0aGF0IHNvZnR3YXJlIDExIiwidXNlIHRoYXQgc29mdHdhcmUgMTEganVyaXNkaWN0aW9uIiwidGhhdCBzb2Z0d2FyZSAxMSBqdXJpc2RpY3Rpb24gdmVudWUiLCJzb2Z0d2FyZSAxMSBqdXJpc2RpY3Rpb24gdmVudWUgYW5kIl19LHsibGljZW5zZVRleHRzIjpbIlRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2Ugdi4gMi4wXG5cblRoaXMgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlIFwiT3JpZ2luYWwgV29ya1wiKSB3aG9zZSBvd25lciAodGhlIFwiTGljZW5zb3JcIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOlxuXG5MaWNlbnNlZCB1bmRlciB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIHZlcnNpb24gMi4wXG5cbiAgIDEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHRvIGRvIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXM7XG5cbiAgICAgIGIpIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyAoXCJEZXJpdmF0aXZlIFdvcmtzXCIpIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcms7XG5cbiAgICAgIGMpIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWMsIHdpdGggdGhlIHByb3Zpc28gdGhhdCBjb3BpZXMgb2YgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgc2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZTtcblxuICAgICAgZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kXG5cbiAgICAgIGUpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuXG5cbiAgIDIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuXG5cbiAgIDMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtIFwiU291cmNlIENvZGVcIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBoZXJlYnkgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGJ5IHB1Ymxpc2hpbmcgdGhlIGFkZHJlc3Mgb2YgdGhhdCBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IGluIGEgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGFwcGxpZXMgdG8gdGhlIE9yaWdpbmFsIFdvcmsuXG5cbiAgIDQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBMaWNlbnNvciwgbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBub3IgYW55IG9mIHRoZWlyIHRyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIE9yaWdpbmFsIFdvcmsgd2l0aG91dCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLCBzZWxsIG9yIG9mZmVyIHRvIHNlbGwgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgbGljZW5zZWQgY2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS5cblxuICAgNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gXCJFeHRlcm5hbCBEZXBsb3ltZW50XCIgbWVhbnMgdGhlIHVzZSBvciBkaXN0cmlidXRpb24gb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBpbiBhbnkgd2F5IHN1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGFyZSBkaXN0cmlidXRlZCB0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIGNvbXB1dGVyIG5ldHdvcmsuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnRzIG9mIGxpY2Vuc2UgaGVyZXVuZGVyLCBZb3UgYWdyZWUgdGhhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgc2hhbGwgYmUgZGVlbWVkIGEgZGlzdHJpYnV0aW9uIGFuZCBzaGFsbCBiZSBsaWNlbnNlZCB0byBhbGwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYXMgcHJlc2NyaWJlZCBpbiBzZWN0aW9uIDEoYykgaGVyZWluLlxuXG4gICA2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuIFwiQXR0cmlidXRpb24gTm90aWNlLlwiIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay5cblxuICAgNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByb2NlZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiBcIkFTIElTXCIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgaGVyZXVuZGVyIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuXG5cbiAgIDgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueSBwZXJzb24gZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBMaWNlbnNvcidzIG5lZ2xpZ2VuY2UgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuXG5cbiAgIDkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiBZb3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gTm90aGluZyBlbHNlIGJ1dCB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciB0byBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGluIFNlY3Rpb24gMSBoZXJlaW4sIGFuZCBhbnkgYXR0ZW1wdCB0byBkbyBzbyBleGNlcHQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGlzIGV4cHJlc3NseSBwcm9oaWJpdGVkIGJ5IFUuUy4gY29weXJpZ2h0IGxhdywgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBieSBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhlcmVmb3JlLCBieSBleGVyY2lzaW5nIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMSBoZXJlaW4sIFlvdSBpbmRpY2F0ZSBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCB5b3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgdXBvbiBZb3VyIGZhaWx1cmUgdG8gaG9ub3IgdGhlIHByb3Zpc28gaW4gU2VjdGlvbiAxKGMpIGhlcmVpbi5cblxuICAgMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IChpKSBhZ2FpbnN0IExpY2Vuc29yIHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIG9yIChpaSkgYWdhaW5zdCBhbnkgZW50aXR5IHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHRoZSBPcmlnaW5hbCBXb3JrIChidXQgZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKS5cblxuICAgMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIHRoZSBVLlMuIENvcHlyaWdodCBBY3QsIDE3IFUuUy5DLiAxMDEgZXQgc2VxLiwgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgMTIpIEF0dG9ybmV5cyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDEzKSBNaXNjZWxsYW5lb3VzLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuXG5cbiAgIDE0KSBEZWZpbml0aW9uIG9mIFwiWW91XCIgaW4gVGhpcyBMaWNlbnNlLiBcIllvdVwiIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgXCJZb3VcIiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcImNvbnRyb2xcIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgMTUpIFJpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSByZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyBub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuXG5cblRoaXMgbGljZW5zZSBpcyBDb3B5cmlnaHQgKEMpIDIwMDMgTGF3cmVuY2UgRS4gUm9zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuIl0sImxpY2Vuc2VJZHMiOlsiT1NMLTIuMCJdLCJrZXl3b3JkcyI6WyJzb2Z0d2FyZSBsaWNlbnNlIHYgMiIsIjIgMCB0aGlzIG9wZW4iLCJvcGVuIHNvZnR3YXJlIGxpY2Vuc2UgdiAyIiwic29mdHdhcmUgbGljZW5zZSB2IDIgMCIsInYgMiAwIHRoaXMgb3BlbiIsIjIgMCB0aGlzIG9wZW4gc29mdHdhcmUiLCJzb2Z0d2FyZSBsaWNlbnNlIHZlcnNpb24gMiAwIl19LHsibGljZW5zZVRleHRzIjpbIlRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2V2LiAyLjFcblxuVGhpcyBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgXCJPcmlnaW5hbCBXb3JrXCIpIHdob3NlIG93bmVyICh0aGUgXCJMaWNlbnNvclwiKSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6XG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgdmVyc2lvbiAyLjFcblxuICAgMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UgdG8gZG8gdGhlIGZvbGxvd2luZzpcblxuICAgICAgYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllcztcblxuICAgICAgYikgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIChcIkRlcml2YXRpdmUgV29ya3NcIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaztcblxuICAgICAgYykgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYywgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IGNvcGllcyBvZiBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBzaGFsbCBiZSBsaWNlbnNlZCB1bmRlciB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlO1xuXG4gICAgICBkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmRcblxuICAgICAgZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS5cblxuICAgMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy5cblxuICAgMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gXCJTb3VyY2UgQ29kZVwiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGhlcmVieSBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgYnkgcHVibGlzaGluZyB0aGUgYWRkcmVzcyBvZiB0aGF0IGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgaW4gYSBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay5cblxuICAgNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvIGdyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsIHNlbGwgb3Igb2ZmZXIgdG8gc2VsbCBlbWJvZGltZW50cyBvZiBhbnkgcGF0ZW50IGNsYWltcyBvdGhlciB0aGFuIHRoZSBsaWNlbnNlZCBjbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLlxuXG4gICA1KSBFeHRlcm5hbCBEZXBsb3ltZW50LiBUaGUgdGVybSBcIkV4dGVybmFsIERlcGxveW1lbnRcIiBtZWFucyB0aGUgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkgc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgYXJlIGRpc3RyaWJ1dGVkIHRvIHRob3NlIHBlcnNvbnMgb3IgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgY29tcHV0ZXIgbmV0d29yay4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdSBhZ3JlZSB0aGF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiBhIERlcml2YXRpdmUgV29yayBzaGFsbCBiZSBkZWVtZWQgYSBkaXN0cmlidXRpb24gYW5kIHNoYWxsIGJlIGxpY2Vuc2VkIHRvIGFsbCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhcyBwcmVzY3JpYmVkIGluIHNlY3Rpb24gMShjKSBoZXJlaW4uXG5cbiAgIDYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gXCJBdHRyaWJ1dGlvbiBOb3RpY2UuXCIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLlxuXG4gICA3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCB0aGUgcGF0ZW50IHJpZ2h0cyBncmFudGVkIGhlcmVpbiBieSBMaWNlbnNvciBhcmUgb3duZWQgYnkgdGhlIExpY2Vuc29yIG9yIGFyZSBzdWJsaWNlbnNlZCB0byBZb3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBjb250cmlidXRvcihzKSBvZiB0aG9zZSBjb3B5cmlnaHRzIGFuZCBwYXRlbnQgcmlnaHRzLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJvY2VlZGluZyBzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GIFRIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBoZXJldW5kZXIgZXhjZXB0IHVuZGVyIHRoaXMgZGlzY2xhaW1lci5cblxuICAgOCkgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55IHBlcnNvbiBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuIFRoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIGxpYWJpbGl0eSBmb3IgZGVhdGggb3IgcGVyc29uYWwgaW5qdXJ5IHJlc3VsdGluZyBmcm9tIExpY2Vuc29yJ3MgbmVnbGlnZW5jZSB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uIFNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGlzIGV4Y2x1c2lvbiBhbmQgbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS5cblxuICAgOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmIFlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yaywgWW91IG11c3QgbWFrZSBhIHJlYXNvbmFibGUgZWZmb3J0IHVuZGVyIHRoZSBjaXJjdW1zdGFuY2VzIHRvIG9idGFpbiB0aGUgZXhwcmVzcyBhc3NlbnQgb2YgcmVjaXBpZW50cyB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBOb3RoaW5nIGVsc2UgYnV0IHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGdyYW50cyBZb3UgcGVybWlzc2lvbiB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHRvIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaW4gU2VjdGlvbiAxIGhlcmVpbiwgYW5kIGFueSBhdHRlbXB0IHRvIGRvIHNvIGV4Y2VwdCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgaXMgZXhwcmVzc2x5IHByb2hpYml0ZWQgYnkgVS5TLiBjb3B5cmlnaHQgbGF3LCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGJ5IGludGVybmF0aW9uYWwgdHJlYXR5LiBUaGVyZWZvcmUsIGJ5IGV4ZXJjaXNpbmcgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAxIGhlcmVpbiwgWW91IGluZGljYXRlIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIHlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSB1cG9uIFlvdXIgZmFpbHVyZSB0byBob25vciB0aGUgcHJvdmlzbyBpbiBTZWN0aW9uIDEoYykgaGVyZWluLlxuXG4gICAxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgYWdhaW5zdCBMaWNlbnNvciBvciBhbnkgbGljZW5zZWUgYWxsZWdpbmcgdGhhdCB0aGUgT3JpZ2luYWwgV29yayBpbmZyaW5nZXMgYSBwYXRlbnQuIFRoaXMgdGVybWluYXRpb24gcHJvdmlzaW9uIHNoYWxsIG5vdCBhcHBseSBmb3IgYW4gYWN0aW9uIGFsbGVnaW5nIHBhdGVudCBpbmZyaW5nZW1lbnQgYnkgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuXG5cbiAgIDExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiB0aGUgVS5TLiBDb3B5cmlnaHQgQWN0LCAxNyBVLlMuQy4gwqcgMTAxIGV0IHNlcS4sIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDEyKSBBdHRvcm5leXMgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3Igc2Vla2luZyBkYW1hZ2VzIHJlbGF0aW5nIHRoZXJldG8sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaCBhY3Rpb24sIGluY2x1ZGluZyBhbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAxMykgTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLlxuXG4gICAxNCkgRGVmaW5pdGlvbiBvZiBcIllvdVwiIGluIFRoaXMgTGljZW5zZS4gXCJZb3VcIiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJjb250cm9sXCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgIDE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LlxuXG5UaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTGF3cmVuY2UgRS4gUm9zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuIl0sImxpY2Vuc2VJZHMiOlsiT1NMLTIuMSJdLCJrZXl3b3JkcyI6WyJvcGVuIHNvZnR3YXJlIGxpY2Vuc2V2Iiwic29mdHdhcmUgbGljZW5zZXYgMiIsImxpY2Vuc2V2IDIgMSIsInRoZSBvcGVuIHNvZnR3YXJlIGxpY2Vuc2V2Iiwib3BlbiBzb2Z0d2FyZSBsaWNlbnNldiAyIiwic29mdHdhcmUgbGljZW5zZXYgMiAxIiwibGljZW5zZXYgMiAxIHRoaXMiLCIyIDEgdGhpcyBvcGVuIiwidGhlIG9wZW4gc29mdHdhcmUgbGljZW5zZXYgMiIsIm9wZW4gc29mdHdhcmUgbGljZW5zZXYgMiAxIiwic29mdHdhcmUgbGljZW5zZXYgMiAxIHRoaXMiLCJsaWNlbnNldiAyIDEgdGhpcyBvcGVuIiwiMiAxIHRoaXMgb3BlbiBzb2Z0d2FyZSIsInNvZnR3YXJlIGxpY2Vuc2UgdmVyc2lvbiAyIDEiXX0seyJsaWNlbnNlVGV4dHMiOlsiT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIHYuIDMuMCAoT1NMLTMuMClcblxuVGhpcyBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgXCJPcmlnaW5hbCBXb3JrXCIpIHdob3NlIG93bmVyICh0aGUgXCJMaWNlbnNvclwiKSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbGljZW5zaW5nIG5vdGljZSBhZGphY2VudCB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6XG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgdmVyc2lvbiAzLjBcblxuICAgMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3VibGljZW5zYWJsZSBsaWNlbnNlLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjb3B5cmlnaHQsIHRvIGRvIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIGEpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXMsIGVpdGhlciBhbG9uZSBvciBhcyBwYXJ0IG9mIGEgY29sbGVjdGl2ZSB3b3JrO1xuXG4gICAgICBiKSB0byB0cmFuc2xhdGUsIGFkYXB0LCBhbHRlciwgdHJhbnNmb3JtLCBtb2RpZnksIG9yIGFycmFuZ2UgdGhlIE9yaWdpbmFsIFdvcmssIHRoZXJlYnkgY3JlYXRpbmcgZGVyaXZhdGl2ZSB3b3JrcyAoXCJEZXJpdmF0aXZlIFdvcmtzXCIpIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcms7XG5cbiAgICAgIGMpIHRvIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWMsIHdpdGggdGhlIHByb3Zpc28gdGhhdCBjb3BpZXMgb2YgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgc2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgdGhpcyBPcGVuIFNvZnR3YXJlIExpY2Vuc2U7XG5cbiAgICAgIGQpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZFxuXG4gICAgICBlKSB0byBkaXNwbGF5IHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5LlxuXG4gICAyKSBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcGF0ZW50cywgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQgaW1wb3J0IHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzLlxuXG4gICAzKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSBcIlNvdXJjZSBDb2RlXCIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yay5cblxuICAgNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3IgcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbiwgbm90aGluZyBpbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIGFueSBsaWNlbnNlIHRvIExpY2Vuc29yJ3MgdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5LiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgb3IgaW1wb3J0IGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gbGljZW5zZSBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS5cblxuICAgNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gXCJFeHRlcm5hbCBEZXBsb3ltZW50XCIgbWVhbnMgdGhlIHVzZSwgZGlzdHJpYnV0aW9uLCBvciBjb21tdW5pY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhvc2Ugd29ya3MgYXJlIGRpc3RyaWJ1dGVkIG9yIGNvbW11bmljYXRlZCB0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIG5ldHdvcmsuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnRzIG9mIGxpY2Vuc2UgaGVyZXVuZGVyLCBZb3UgbXVzdCB0cmVhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmsgYXMgYSBkaXN0cmlidXRpb24gdW5kZXIgc2VjdGlvbiAxKGMpLlxuXG4gICA2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiBcIkF0dHJpYnV0aW9uIE5vdGljZS5cIiBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuXG5cbiAgIDcpIFdhcnJhbnR5IG9mIFByb3ZlbmFuY2UgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgYW5kIHRoZSBwYXRlbnQgcmlnaHRzIGdyYW50ZWQgaGVyZWluIGJ5IExpY2Vuc29yIGFyZSBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgYXJlIHN1YmxpY2Vuc2VkIHRvIFlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbnRyaWJ1dG9yKHMpIG9mIHRob3NlIGNvcHlyaWdodHMgYW5kIHBhdGVudCByaWdodHMuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiBcIkFTIElTXCIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBub24taW5mcmluZ2VtZW50LCBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byB0aGUgT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLlxuXG4gICA4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnlvbmUgZm9yIGFueSBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLlxuXG4gICA5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYsIGF0IGFueSB0aW1lLCBZb3UgZXhwcmVzc2x5IGFzc2VudGVkIHRvIHRoaXMgTGljZW5zZSwgdGhhdCBhc3NlbnQgaW5kaWNhdGVzIHlvdXIgY2xlYXIgYW5kIGlycmV2b2NhYmxlIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiBZb3UgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGNvbmRpdGlvbnMgeW91ciByaWdodHMgdG8gdW5kZXJ0YWtlIHRoZSBhY3Rpdml0aWVzIGxpc3RlZCBpbiBTZWN0aW9uIDEsIGluY2x1ZGluZyB5b3VyIHJpZ2h0IHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBkb2luZyBzbyB3aXRob3V0IGhvbm9yaW5nIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGlzIHByb2hpYml0ZWQgYnkgY29weXJpZ2h0IGxhdyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGFmZmVjdCBjb3B5cmlnaHQgZXhjZXB0aW9ucyBhbmQgbGltaXRhdGlvbnMgKGluY2x1ZGluZyBcImZhaXIgdXNlXCIgb3IgXCJmYWlyIGRlYWxpbmdcIikuIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSB1cG9uIHlvdXIgZmFpbHVyZSB0byBob25vciB0aGUgY29uZGl0aW9ucyBpbiBTZWN0aW9uIDEoYykuXG5cbiAgIDEwKSBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgYXMgb2YgdGhlIGRhdGUgWW91IGNvbW1lbmNlIGFuIGFjdGlvbiwgaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltLCBhZ2FpbnN0IExpY2Vuc29yIG9yIGFueSBsaWNlbnNlZSBhbGxlZ2luZyB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIGluZnJpbmdlcyBhIHBhdGVudC4gVGhpcyB0ZXJtaW5hdGlvbiBwcm92aXNpb24gc2hhbGwgbm90IGFwcGx5IGZvciBhbiBhY3Rpb24gYWxsZWdpbmcgcGF0ZW50IGluZnJpbmdlbWVudCBieSBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS5cblxuICAgMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIGNvcHlyaWdodCBvciBwYXRlbnQgbGF3IGluIHRoZSBhcHByb3ByaWF0ZSBqdXJpc2RpY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDEyKSBBdHRvcm5leXMnIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgMTMpIE1pc2NlbGxhbmVvdXMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLlxuXG4gICAxNCkgRGVmaW5pdGlvbiBvZiBcIllvdVwiIGluIFRoaXMgTGljZW5zZS4gXCJZb3VcIiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJjb250cm9sXCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgIDE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LlxuXG4gICAxNikgTW9kaWZpY2F0aW9uIG9mIFRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGlzIENvcHlyaWdodCAoYykgMjAwNSBMYXdyZW5jZSBSb3Nlbi4gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUsIG9yIGNvbW11bmljYXRlIHRoaXMgTGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgcGVybWl0cyBZb3UgdG8gbW9kaWZ5IHRoaXMgTGljZW5zZSBhcyBhcHBsaWVkIHRvIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHRvIERlcml2YXRpdmUgV29ya3MuIEhvd2V2ZXIsIFlvdSBtYXkgbW9kaWZ5IHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5zZSBhbmQgY29weSwgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSB5b3VyIG1vZGlmaWVkIHZlcnNpb24gKHRoZSBcIk1vZGlmaWVkIExpY2Vuc2VcIikgYW5kIGFwcGx5IGl0IHRvIG90aGVyIG9yaWdpbmFsIHdvcmtzIG9mIGF1dGhvcnNoaXAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IChpKSBZb3UgbWF5IG5vdCBpbmRpY2F0ZSBpbiBhbnkgd2F5IHRoYXQgeW91ciBNb2RpZmllZCBMaWNlbnNlIGlzIHRoZSBcIk9wZW4gU29mdHdhcmUgTGljZW5zZVwiIG9yIFwiT1NMXCIgYW5kIHlvdSBtYXkgbm90IHVzZSB0aG9zZSBuYW1lcyBpbiB0aGUgbmFtZSBvZiB5b3VyIE1vZGlmaWVkIExpY2Vuc2U7IChpaSkgWW91IG11c3QgcmVwbGFjZSB0aGUgbm90aWNlIHNwZWNpZmllZCBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoIGFib3ZlIHdpdGggdGhlIG5vdGljZSBcIkxpY2Vuc2VkIHVuZGVyIFx1MDAzY2luc2VydCB5b3VyIGxpY2Vuc2UgbmFtZSBoZXJlXHUwMDNlXCIgb3Igd2l0aCBhIG5vdGljZSBvZiB5b3VyIG93biB0aGF0IGlzIG5vdCBjb25mdXNpbmdseSBzaW1pbGFyIHRvIHRoZSBub3RpY2UgaW4gdGhpcyBMaWNlbnNlOyBhbmQgKGlpaSkgWW91IG1heSBub3QgY2xhaW0gdGhhdCB5b3VyIG9yaWdpbmFsIHdvcmtzIGFyZSBvcGVuIHNvdXJjZSBzb2Z0d2FyZSB1bmxlc3MgeW91ciBNb2RpZmllZCBMaWNlbnNlIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IE9wZW4gU291cmNlIEluaXRpYXRpdmUgKE9TSSkgYW5kIFlvdSBjb21wbHkgd2l0aCBpdHMgbGljZW5zZSByZXZpZXcgYW5kIGNlcnRpZmljYXRpb24gcHJvY2Vzcy4iXSwibGljZW5zZUlkcyI6WyJPU0wtMy4wIl0sImtleXdvcmRzIjpbIjMgMCBvc2wiLCIwIG9zbCAzIiwidW5kZXIgdGhpcyBvcGVuIiwic29mdHdhcmUgbGljZW5zZSB2IDMiLCJsaWNlbnNlIHYgMyAwIiwidiAzIDAgb3NsIiwiMyAwIG9zbCAzIiwiMCBvc2wgMyAwIiwib3NsIDMgMCB0aGlzIiwiMyAwIHRoaXMgb3BlbiIsImxpY2Vuc2VkIHVuZGVyIHRoaXMgb3BlbiIsInVuZGVyIHRoaXMgb3BlbiBzb2Z0d2FyZSIsIm9wZW4gc29mdHdhcmUgbGljZW5zZSB2IDMiLCJzb2Z0d2FyZSBsaWNlbnNlIHYgMyAwIiwibGljZW5zZSB2IDMgMCBvc2wiLCJ2IDMgMCBvc2wgMyIsIjMgMCBvc2wgMyAwIiwiMCBvc2wgMyAwIHRoaXMiLCJvc2wgMyAwIHRoaXMgb3BlbiIsIjMgMCB0aGlzIG9wZW4gc29mdHdhcmUiLCJiZSBsaWNlbnNlZCB1bmRlciB0aGlzIG9wZW4iLCJsaWNlbnNlZCB1bmRlciB0aGlzIG9wZW4gc29mdHdhcmUiLCJ1bmRlciB0aGlzIG9wZW4gc29mdHdhcmUgbGljZW5zZSIsInRoaXMgb3BlbiBzb2Z0d2FyZSBsaWNlbnNlIGQiLCJjIDIwMDUgbGF3cmVuY2Ugcm9zZW4gcGVybWlzc2lvbiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJPcGVuU1NMIExpY2Vuc2UgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiBcIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdCBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLylcIlxuXG4gICA0LiBUaGUgbmFtZXMgXCJPcGVuU1NMIFRvb2xraXRcIiBhbmQgXCJPcGVuU1NMIFByb2plY3RcIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3Qgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLlxuXG4gICA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCBcIk9wZW5TU0xcIiBub3IgbWF5IFwiT3BlblNTTFwiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LlxuXG4gICA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiBcIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdCBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKVwiXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cblRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuIE9yaWdpbmFsIFNTTGVheSBMaWNlbnNlIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKVxuXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5UaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuXG5cblRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLCBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuIFRoZSBTU0wgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLlxuXG5Db3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24gYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4gVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OlxuXG4gICBcIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pXCJcblxuICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5IGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLlxuXG4gICA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OiBcIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKVwiXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cblRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UgW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0iXSwibGljZW5zZUlkcyI6WyJPcGVuU1NMIl0sImtleXdvcmRzIjpbIm9wZW5zc2wgbGljZW5zZSBjb3B5cmlnaHQiLCJjIDE5OTggMjAwOCIsIjE5OTggMjAwOCB0aGUiLCIyMDA4IHRoZSBvcGVuc3NsIiwib3BlbnNzbCBwcm9qZWN0IGFsbCIsIm9wZW5zc2wgb3JnIDQiLCJ0aGUgbmFtZXMgb3BlbnNzbCIsIm5hbWVzIG9wZW5zc2wgdG9vbGtpdCIsIm9wZW5zc2wgdG9vbGtpdCBhbmQiLCJ0b29sa2l0IGFuZCBvcGVuc3NsIiwiYW5kIG9wZW5zc2wgcHJvamVjdCIsIm9wZW5zc2wgcHJvamVjdCBtdXN0IiwicHJvamVjdCBtdXN0IG5vdCIsInBsZWFzZSBjb250YWN0IG9wZW5zc2wiLCJjb250YWN0IG9wZW5zc2wgY29yZSIsIm9wZW5zc2wgY29yZSBvcGVuc3NsIiwiY29yZSBvcGVuc3NsIG9yZyIsIm9wZW5zc2wgb3JnIDUiLCJiZSBjYWxsZWQgb3BlbnNzbCIsImNhbGxlZCBvcGVuc3NsIG5vciIsIm9wZW5zc2wgbm9yIG1heSIsIm5vciBtYXkgb3BlbnNzbCIsIm1heSBvcGVuc3NsIGFwcGVhciIsIm9wZW5zc2wgYXBwZWFyIGluIiwib2YgdGhlIG9wZW5zc2wiLCJvcGVuc3NsIHByb2plY3QgNiIsInByb2plY3QgNiByZWRpc3RyaWJ1dGlvbnMiLCJvcGVuc3NsIG9yZyB0aGlzIiwib3BlbnNzbCBwcm9qZWN0IGFzIiwic2hhbGwgdGhlIG9wZW5zc2wiLCJvcGVuc3NsIHByb2plY3Qgb3IiLCJwcm9qZWN0IG9yIGl0cyIsImRhbWFnZSB0aGlzIHByb2R1Y3QiLCJjb20gdGhpcyBwcm9kdWN0IiwiY3J5cHRzb2Z0IGNvbSBvcmlnaW5hbCIsImNvbSBvcmlnaW5hbCBzc2xlYXkiLCJvcmlnaW5hbCBzc2xlYXkgbGljZW5zZSIsInNzbGVheSBsaWNlbnNlIGNvcHlyaWdodCIsImMgMTk5NSAxOTk4IiwiMTk5NSAxOTk4IGVyaWMiLCIxOTk4IGVyaWMgeW91bmciLCJjcnlwdHNvZnQgY29tIGFsbCIsInJlc2VydmVkIHRoaXMgcGFja2FnZSIsInBhY2thZ2UgaXMgYW4iLCJpcyBhbiBzc2wiLCJhbiBzc2wgaW1wbGVtZW50YXRpb24iLCJzc2wgaW1wbGVtZW50YXRpb24gd3JpdHRlbiIsImltcGxlbWVudGF0aW9uIHdyaXR0ZW4gYnkiLCJjb20gdGhlIGltcGxlbWVudGF0aW9uIiwidGhlIGltcGxlbWVudGF0aW9uIHdhcyIsImltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIiwid2FzIHdyaXR0ZW4gc28iLCJhcyB0byBjb25mb3JtIiwidG8gY29uZm9ybSB3aXRoIiwiY29uZm9ybSB3aXRoIG5ldHNjYXBlcyIsIndpdGggbmV0c2NhcGVzIHNzbCIsIm5ldHNjYXBlcyBzc2wgdGhpcyIsInNzbCB0aGlzIGxpYnJhcnkiLCJmcmVlIGZvciBjb21tZXJjaWFsIiwiY29tbWVyY2lhbCB1c2UgYXMiLCJ1c2UgYXMgbG9uZyIsImNvbmRpdGlvbnMgYXJlIGFoZWFyZWQiLCJhcmUgYWhlYXJlZCB0byIsImFoZWFyZWQgdG8gdGhlIiwiZm9sbG93aW5nIGNvbmRpdGlvbnMgYXBwbHkiLCJ0byBhbGwgY29kZSIsImFsbCBjb2RlIGZvdW5kIiwiY29kZSBmb3VuZCBpbiIsImZvdW5kIGluIHRoaXMiLCJ0aGlzIGRpc3RyaWJ1dGlvbiBiZSIsImRpc3RyaWJ1dGlvbiBiZSBpdCIsImJlIGl0IHRoZSIsIml0IHRoZSByYzQiLCJ0aGUgcmM0IHJzYSIsInJjNCByc2EgbGhhc2giLCJyc2EgbGhhc2ggZGVzIiwibGhhc2ggZGVzIGV0YyIsImRlcyBldGMgY29kZSIsImV0YyBjb2RlIG5vdCIsImp1c3QgdGhlIHNzbCIsInRoZSBzc2wgY29kZSIsInNzbCBjb2RlIHRoZSIsImNvZGUgdGhlIHNzbCIsInRoZSBzc2wgZG9jdW1lbnRhdGlvbiIsInNzbCBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIiwid2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiIsImRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIiwidGhlIHNhbWUgY29weXJpZ2h0Iiwic2FtZSBjb3B5cmlnaHQgdGVybXMiLCJjb3B5cmlnaHQgdGVybXMgZXhjZXB0IiwidGVybXMgZXhjZXB0IHRoYXQiLCJ0aGF0IHRoZSBob2xkZXIiLCJ0aGUgaG9sZGVyIGlzIiwiaG9sZGVyIGlzIHRpbSIsImlzIHRpbSBodWRzb24iLCJjcnlwdHNvZnQgY29tIGNvcHlyaWdodCIsImNvbSBjb3B5cmlnaHQgcmVtYWlucyIsImNvcHlyaWdodCByZW1haW5zIGVyaWMiLCJyZW1haW5zIGVyaWMgeW91bmciLCJlcmljIHlvdW5nIHMiLCJ5b3VuZyBzIGFuZCIsInMgYW5kIGFzIiwiYXMgc3VjaCBhbnkiLCJzdWNoIGFueSBjb3B5cmlnaHQiLCJ0aGUgY29kZSBhcmUiLCJjb2RlIGFyZSBub3QiLCJhcmUgbm90IHRvIiwibm90IHRvIGJlIiwidG8gYmUgcmVtb3ZlZCIsImJlIHJlbW92ZWQgaWYiLCJyZW1vdmVkIGlmIHRoaXMiLCJpZiB0aGlzIHBhY2thZ2UiLCJwYWNrYWdlIGlzIHVzZWQiLCJ1c2VkIGluIGEiLCJhIHByb2R1Y3QgZXJpYyIsInByb2R1Y3QgZXJpYyB5b3VuZyIsImVyaWMgeW91bmcgc2hvdWxkIiwieW91bmcgc2hvdWxkIGJlIiwiYmUgZ2l2ZW4gYXR0cmlidXRpb24iLCJnaXZlbiBhdHRyaWJ1dGlvbiBhcyIsImF0dHJpYnV0aW9uIGFzIHRoZSIsIm9mIHRoZSBwYXJ0cyIsInRoZSBsaWJyYXJ5IHVzZWQiLCJsaWJyYXJ5IHVzZWQgdGhpcyIsInVzZWQgdGhpcyBjYW4iLCJ0aGlzIGNhbiBiZSIsIm9mIGEgdGV4dHVhbCIsImEgdGV4dHVhbCBtZXNzYWdlIiwidGV4dHVhbCBtZXNzYWdlIGF0IiwibWVzc2FnZSBhdCBwcm9ncmFtIiwiYXQgcHJvZ3JhbSBzdGFydHVwIiwicHJvZ3JhbSBzdGFydHVwIG9yIiwic3RhcnR1cCBvciBpbiIsIm9yIGluIGRvY3VtZW50YXRpb24iLCJpbiBkb2N1bWVudGF0aW9uIG9ubGluZSIsImRvY3VtZW50YXRpb24gb25saW5lIG9yIiwib25saW5lIG9yIHRleHR1YWwiLCJvciB0ZXh0dWFsIHByb3ZpZGVkIiwidGV4dHVhbCBwcm92aWRlZCB3aXRoIiwid2l0aCB0aGUgcGFja2FnZSIsInRoZSBwYWNrYWdlIHJlZGlzdHJpYnV0aW9uIiwicGFja2FnZSByZWRpc3RyaWJ1dGlvbiBhbmQiLCJjb20gdGhlIHdvcmQiLCJ0aGUgd29yZCBjcnlwdG9ncmFwaGljIiwid29yZCBjcnlwdG9ncmFwaGljIGNhbiIsImNyeXB0b2dyYXBoaWMgY2FuIGJlIiwiY2FuIGJlIGxlZnQiLCJiZSBsZWZ0IG91dCIsImxlZnQgb3V0IGlmIiwib3V0IGlmIHRoZSIsImlmIHRoZSByb3VpbmVzIiwidGhlIHJvdWluZXMgZnJvbSIsInJvdWluZXMgZnJvbSB0aGUiLCJ0aGUgbGlicmFyeSBiZWluZyIsImxpYnJhcnkgYmVpbmcgdXNlZCIsImJlaW5nIHVzZWQgYXJlIiwidXNlZCBhcmUgbm90IiwiYXJlIG5vdCBjcnlwdG9ncmFwaGljIiwibm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCIsImNyeXB0b2dyYXBoaWMgcmVsYXRlZCA0IiwicmVsYXRlZCA0IGlmIiwieW91IGluY2x1ZGUgYW55IiwiaW5jbHVkZSBhbnkgd2luZG93cyIsImFueSB3aW5kb3dzIHNwZWNpZmljIiwid2luZG93cyBzcGVjaWZpYyBjb2RlIiwic3BlY2lmaWMgY29kZSBvciIsImEgZGVyaXZhdGl2ZSB0aGVyZW9mIiwiZGVyaXZhdGl2ZSB0aGVyZW9mIGZyb20iLCJ0aGVyZW9mIGZyb20gdGhlIiwiZnJvbSB0aGUgYXBwcyIsInRoZSBhcHBzIGRpcmVjdG9yeSIsImFwcHMgZGlyZWN0b3J5IGFwcGxpY2F0aW9uIiwiZGlyZWN0b3J5IGFwcGxpY2F0aW9uIGNvZGUiLCJhcHBsaWNhdGlvbiBjb2RlIHlvdSIsIm11c3QgaW5jbHVkZSBhbiIsImluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50IiwiYW4gYWNrbm93bGVkZ2VtZW50IHRoaXMiLCJwcm92aWRlZCBieSBlcmljIiwiZXJpYyB5b3VuZyBhcyIsInlvdW5nIGFzIGlzIiwiYXV0aG9yIG9yIGNvbnRyaWJ1dG9ycyIsImRhbWFnZSB0aGUgbGljZW5jZSIsImxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiIsImFuZCBkaXN0cmlidXRpb24gdGVybXMiLCJkaXN0cmlidXRpb24gdGVybXMgZm9yIiwidGVybXMgZm9yIGFueSIsImZvciBhbnkgcHVibGljYWxseSIsImFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSIsInB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24iLCJhdmFpbGFibGUgdmVyc2lvbiBvciIsInZlcnNpb24gb3IgZGVyaXZhdGl2ZSIsImRlcml2YXRpdmUgb2YgdGhpcyIsImNvZGUgY2Fubm90IGJlIiwiY2Fubm90IGJlIGNoYW5nZWQiLCJiZSBjaGFuZ2VkIGkiLCJjaGFuZ2VkIGkgZSIsImkgZSB0aGlzIiwiZSB0aGlzIGNvZGUiLCJjb2RlIGNhbm5vdCBzaW1wbHkiLCJjYW5ub3Qgc2ltcGx5IGJlIl19LHsibGljZW5zZVRleHRzIjpbIk9wZW4gRGF0YSBDb21tb25zIC0gUHVibGljIERvbWFpbiBEZWRpY2F0aW9uIFx1MDAyNiBMaWNlbnNlIChQRERMKVxuXG5QcmVhbWJsZVxuXG5UaGUgT3BlbiBEYXRhIENvbW1vbnMgLSBQdWJsaWMgRG9tYWluIERlZGljYXRpb24gXHUwMDI2IExpY2VuY2UgaXMgYSBkb2N1bWVudCBpbnRlbmRlZCB0byBhbGxvdyB5b3UgdG8gZnJlZWx5IHNoYXJlLCBtb2RpZnksIGFuZCB1c2UgdGhpcyB3b3JrIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBhbnkgcmVzdHJpY3Rpb25zLiBUaGlzIGxpY2VuY2UgaXMgaW50ZW5kZWQgZm9yIHVzZSBvbiBkYXRhYmFzZXMgb3IgdGhlaXIgY29udGVudHMgKFwiZGF0YVwiKSwgZWl0aGVyIHRvZ2V0aGVyIG9yIGluZGl2aWR1YWxseS5cblxuTWFueSBkYXRhYmFzZXMgYXJlIGNvdmVyZWQgYnkgY29weXJpZ2h0LiBTb21lIGp1cmlzZGljdGlvbnMsIG1haW5seSBpbiBFdXJvcGUsIGhhdmUgc3BlY2lmaWMgc3BlY2lhbCByaWdodHMgdGhhdCBjb3ZlciBkYXRhYmFzZXMgY2FsbGVkIHRoZSBcInN1aSBnZW5lcmlzXCIgZGF0YWJhc2UgcmlnaHQuIEJvdGggb2YgdGhlc2Ugc2V0cyBvZiByaWdodHMsIGFzIHdlbGwgYXMgb3RoZXIgbGVnYWwgcmlnaHRzIHVzZWQgdG8gcHJvdGVjdCBkYXRhYmFzZXMgYW5kIGRhdGEsIGNhbiBjcmVhdGUgdW5jZXJ0YWludHkgb3IgcHJhY3RpY2FsIGRpZmZpY3VsdHkgZm9yIHRob3NlIHdpc2hpbmcgdG8gc2hhcmUgZGF0YWJhc2VzIGFuZCB0aGVpciB1bmRlcmx5aW5nIGRhdGEgYnV0IHJldGFpbiBhIGxpbWl0ZWQgYW1vdW50IG9mIHJpZ2h0cyB1bmRlciBhIFwic29tZSByaWdodHMgcmVzZXJ2ZWRcIiBhcHByb2FjaCB0byBsaWNlbnNpbmcgYXMgb3V0bGluZWQgaW4gdGhlIFNjaWVuY2UgQ29tbW9ucyBQcm90b2NvbCBmb3IgSW1wbGVtZW50aW5nIE9wZW4gQWNjZXNzIERhdGEuIEFzIGEgcmVzdWx0LCB0aGlzIHdhaXZlciBhbmQgbGljZW5jZSB0cmllcyB0byB0aGUgZnVsbGVzdCBleHRlbnQgcG9zc2libGUgdG8gZWxpbWluYXRlIG9yIGZ1bGx5IGxpY2Vuc2UgYW55IHJpZ2h0cyB0aGF0IGNvdmVyIHRoaXMgZGF0YWJhc2UgYW5kIGRhdGEuIEFueSBDb21tdW5pdHkgTm9ybXMgb3Igc2ltaWxhciBzdGF0ZW1lbnRzIG9mIHVzZSBvZiB0aGUgZGF0YWJhc2Ugb3IgZGF0YSBkbyBub3QgZm9ybSBhIHBhcnQgb2YgdGhpcyBkb2N1bWVudCwgYW5kIGRvIG5vdCBhY3QgYXMgYSBjb250cmFjdCBmb3IgYWNjZXNzIG9yIG90aGVyIHRlcm1zIG9mIHVzZSBmb3IgdGhlIGRhdGFiYXNlIG9yIGRhdGEuXG5cblRoZSBwb3NpdGlvbiBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSB3b3JrXG5cbkJlY2F1c2UgdGhpcyBkb2N1bWVudCBwbGFjZXMgdGhlIGRhdGFiYXNlIGFuZCBpdHMgY29udGVudHMgaW4gb3IgYXMgY2xvc2UgYXMgcG9zc2libGUgd2l0aGluIHRoZSBwdWJsaWMgZG9tYWluLCB0aGVyZSBhcmUgbm8gcmVzdHJpY3Rpb25zIG9yIHJlcXVpcmVtZW50cyBwbGFjZWQgb24gdGhlIHJlY2lwaWVudCBieSB0aGlzIGRvY3VtZW50LiBSZWNpcGllbnRzIG1heSB1c2UgdGhpcyB3b3JrIGNvbW1lcmNpYWxseSwgdXNlIHRlY2huaWNhbCBwcm90ZWN0aW9uIG1lYXN1cmVzLCBjb21iaW5lIHRoaXMgZGF0YSBvciBkYXRhYmFzZSB3aXRoIG90aGVyIGRhdGFiYXNlcyBvciBkYXRhLCBhbmQgc2hhcmUgdGhlaXIgY2hhbmdlcyBhbmQgYWRkaXRpb25zIG9yIGtlZXAgdGhlbSBzZWNyZXQuIEl0IGlzIG5vdCBhIHJlcXVpcmVtZW50IHRoYXQgcmVjaXBpZW50cyBwcm92aWRlIGZ1cnRoZXIgdXNlcnMgd2l0aCBhIGNvcHkgb2YgdGhpcyBsaWNlbmNlIG9yIGF0dHJpYnV0ZSB0aGUgb3JpZ2luYWwgY3JlYXRvciBvZiB0aGUgZGF0YSBvciBkYXRhYmFzZSBhcyBhIHNvdXJjZS4gVGhlIGdvYWwgaXMgdG8gZWxpbWluYXRlIHJlc3RyaWN0aW9ucyBoZWxkIGJ5IHRoZSBvcmlnaW5hbCBjcmVhdG9yIG9mIHRoZSBkYXRhIGFuZCBkYXRhYmFzZSBvbiB0aGUgdXNlIG9mIGl0IGJ5IG90aGVycy5cblxuVGhlIHBvc2l0aW9uIG9mIHRoZSBkZWRpY2F0b3Igb2YgdGhlIHdvcmtcblxuQ29weXJpZ2h0IGxhdywgYXMgd2l0aCBtb3N0IG90aGVyIGxhdyB1bmRlciB0aGUgYmFubmVyIG9mIFwiaW50ZWxsZWN0dWFsIHByb3BlcnR5XCIsIGlzIGluaGVyZW50bHkgbmF0aW9uYWwgbGF3LiBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgZXhpc3RzIHNldmVyYWwgZGlmZmVyZW5jZXMgaW4gaG93IGNvcHlyaWdodCBhbmQgb3RoZXIgSVAgcmlnaHRzIGNhbiBiZSByZWxpbnF1aXNoZWQsIHdhaXZlZCBvciBsaWNlbnNlZCBpbiB0aGUgbWFueSBsZWdhbCBqdXJpc2RpY3Rpb25zIG9mIHRoZSB3b3JsZC4gVGhpcyBpcyBkZXNwaXRlIG11Y2ggaGFybW9uaXNhdGlvbiBvZiBtaW5pbXVtIGxldmVscyBvZiBwcm90ZWN0aW9uLiBUaGUgaW50ZXJuZXQgYW5kIG90aGVyIGNvbW11bmljYXRpb24gdGVjaG5vbG9naWVzIHNwYW4gdGhlc2UgbWFueSBkaXNwYXJhdGUgbGVnYWwganVyaXNkaWN0aW9ucyBhbmQgdGh1cyBwb3NlIHNwZWNpYWwgZGlmZmljdWx0aWVzIGZvciBhIGRvY3VtZW50IHJlbGlucXVpc2hpbmcgYW5kIHdhaXZpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgaW5jbHVkaW5nIGNvcHlyaWdodCBhbmQgZGF0YWJhc2UgcmlnaHRzLCBmb3IgdXNlIGJ5IHRoZSBnbG9iYWwgY29tbXVuaXR5LiBCZWNhdXNlIG9mIHRoaXMgZmVhdHVyZSBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3LCB0aGlzIGRvY3VtZW50IGZpcnN0IHJlbGlucXVpc2hlcyB0aGUgcmlnaHRzIGFuZCB3YWl2ZXMgdGhlIHJlbGV2YW50IHJpZ2h0cyBhbmQgY2xhaW1zLiBJdCB0aGVuIGdvZXMgb24gdG8gbGljZW5zZSB0aGVzZSBzYW1lIHJpZ2h0cyBmb3IganVyaXNkaWN0aW9ucyBvciBhcmVhcyBvZiBsYXcgdGhhdCBtYXkgbWFrZSBpdCBkaWZmaWN1bHQgdG8gcmVsaW5xdWlzaCBvciB3YWl2ZSByaWdodHMgb3IgY2xhaW1zLlxuXG5UaGUgcHVycG9zZSBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIGVuYWJsZSByaWdodHNob2xkZXJzIHRvIHBsYWNlIHRoZWlyIHdvcmsgaW50byB0aGUgcHVibGljIGRvbWFpbi4gVW5saWtlIGxpY2VuY2VzIGZvciBmcmVlIGFuZCBvcGVuIHNvdXJjZSBzb2Z0d2FyZSwgZnJlZSBjdWx0dXJhbCB3b3Jrcywgb3Igb3BlbiBjb250ZW50IGxpY2VuY2VzLCByaWdodHNob2xkZXJzIHdpbGwgbm90IGJlIGFibGUgdG8gXCJkdWFsIGxpY2Vuc2VcIiB0aGVpciB3b3JrIGJ5IHJlbGVhc2luZyB0aGUgc2FtZSB3b3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbmNlcy4gVGhpcyBpcyBiZWNhdXNlIHRoZXkgaGF2ZSBhbGxvd2VkIGFueW9uZSB0byB1c2UgdGhlIHdvcmsgaW4gd2hhdGV2ZXIgd2F5IHRoZXkgY2hvb3NlLiBSaWdodHNob2xkZXJzIHRoZXJlZm9yZSBjYW4ndCByZS1saWNlbnNlIGl0IHVuZGVyIGNvcHlyaWdodCBvciBkYXRhYmFzZSByaWdodHMgb24gZGlmZmVyZW50IHRlcm1zIGJlY2F1c2UgdGhleSBoYXZlIG5vdGhpbmcgbGVmdCB0byBsaWNlbnNlLiBEb2luZyBzbyBjcmVhdGVzIHRydWx5IGFjY2Vzc2libGUgZGF0YSB0byBidWlsZCByaWNoIGFwcGxpY2F0aW9ucyBhbmQgYWR2YW5jZSB0aGUgcHJvZ3Jlc3Mgb2Ygc2NpZW5jZSBhbmQgdGhlIGFydHMuXG5cblRoaXMgZG9jdW1lbnQgY2FuIGNvdmVyIGVpdGhlciBvciBib3RoIG9mIHRoZSBkYXRhYmFzZSBhbmQgaXRzIGNvbnRlbnRzICh0aGUgZGF0YSkuIEJlY2F1c2UgZGF0YWJhc2VzIGNhbiBoYXZlIGEgd2lkZSB2YXJpZXR5IG9mIGNvbnRlbnQgLSBub3QganVzdCBmYWN0dWFsIGRhdGEgLSByaWdodHNob2xkZXJzIHNob3VsZCB1c2UgdGhlIE9wZW4gRGF0YSBDb21tb25zIC0gUHVibGljIERvbWFpbiBEZWRpY2F0aW9uIFx1MDAyNiBMaWNlbmNlIGZvciBhbiBlbnRpcmUgZGF0YWJhc2UgYW5kIGl0cyBjb250ZW50cyBvbmx5IGlmIGV2ZXJ5dGhpbmcgY2FuIGJlIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBkb2N1bWVudC4gQmVjYXVzZSBldmVuIGZhY3R1YWwgZGF0YSBjYW4gc29tZXRpbWVzIGhhdmUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgcmlnaHRzaG9sZGVycyBzaG91bGQgdXNlIHRoaXMgbGljZW5jZSB0byBjb3ZlciBib3RoIHRoZSBkYXRhYmFzZSBhbmQgaXRzIGZhY3R1YWwgZGF0YSB3aGVuIG1ha2luZyBtYXRlcmlhbCBhdmFpbGFibGUgdW5kZXIgdGhpcyBkb2N1bWVudDsgZXZlbiBpZiBpdCBpcyBsaWtlbHkgdGhhdCB0aGUgZGF0YSB3b3VsZCBub3QgYmUgY292ZXJlZCBieSBjb3B5cmlnaHQgb3IgZGF0YWJhc2UgcmlnaHRzLlxuXG5SaWdodHNob2xkZXJzIGNhbiBhbHNvIHVzZSB0aGlzIGRvY3VtZW50IHRvIGNvdmVyIGFueSBjb3B5cmlnaHQgb3IgZGF0YWJhc2UgcmlnaHRzIGNsYWltcyBvdmVyIG9ubHkgYSBkYXRhYmFzZSwgYW5kIGxlYXZlIHRoZSBjb250ZW50cyB0byBiZSBjb3ZlcmVkIGJ5IG90aGVyIGxpY2VuY2VzIG9yIGRvY3VtZW50cy4gVGhleSBjYW4gZG8gdGhpcyBiZWNhdXNlIHRoaXMgZG9jdW1lbnQgcmVmZXJzIHRvIHRoZSBcIldvcmtcIiwgd2hpY2ggY2FuIGJlIGVpdGhlciAtIG9yIGJvdGggLSB0aGUgZGF0YWJhc2UgYW5kIGl0cyBjb250ZW50cy4gQXMgYSByZXN1bHQsIHJpZ2h0c2hvbGRlcnMgbmVlZCB0byBjbGVhcmx5IHN0YXRlIHdoYXQgdGhleSBhcmUgZGVkaWNhdGluZyB1bmRlciB0aGlzIGRvY3VtZW50IHdoZW4gdGhleSBkZWRpY2F0ZSBpdC5cblxuSnVzdCBsaWtlIGFueSBsaWNlbmNlIG9yIG90aGVyIGRvY3VtZW50IGRlYWxpbmcgd2l0aCBpbnRlbGxlY3R1YWwgcHJvcGVydHksIHJpZ2h0c2hvbGRlcnMgc2hvdWxkIGJlIGF3YXJlIHRoYXQgb25lIGNhbiBvbmx5IGxpY2Vuc2Ugd2hhdCBvbmUgb3ducy4gUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSByaWdodHMgaGF2ZSBiZWVuIGNsZWFyZWQgdG8gbWFrZSB0aGlzIG1hdGVyaWFsIGF2YWlsYWJsZSB1bmRlciB0aGlzIGRvY3VtZW50LlxuXG5UaGlzIGRvY3VtZW50IHBlcm1hbmVudGx5IGFuZCBpcnJldm9jYWJseSBtYWtlcyB0aGUgV29yayBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBmb3IgYW55IHVzZSBvZiBhbnkga2luZCwgYW5kIGl0IHNob3VsZCBub3QgYmUgdXNlZCB1bmxlc3MgdGhlIHJpZ2h0c2hvbGRlciBpcyBwcmVwYXJlZCBmb3IgdGhpcyB0byBoYXBwZW4uXG5cblBhcnQgSTogSW50cm9kdWN0aW9uXG5cblRoZSBSaWdodHNob2xkZXIgKHRoZSBQZXJzb24gaG9sZGluZyByaWdodHMgb3IgY2xhaW1zIG92ZXIgdGhlIFdvcmspIGFncmVlcyBhcyBmb2xsb3dzOlxuXG4gICAxLjAgRGVmaW5pdGlvbnMgb2YgQ2FwaXRhbGlzZWQgV29yZHNcblxuICAgXCJDb3B5cmlnaHRcIiAtIEluY2x1ZGVzIHJpZ2h0cyB1bmRlciBjb3B5cmlnaHQgYW5kIHVuZGVyIG5laWdoYm91cmluZyByaWdodHMgYW5kIHNpbWlsYXJseSByZWxhdGVkIHNldHMgb2YgcmlnaHRzIHVuZGVyIHRoZSBsYXcgb2YgdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiB1bmRlciBTZWN0aW9uIDYuNC5cblxuICAgXCJEYXRhXCIgLSBUaGUgY29udGVudHMgb2YgdGhlIERhdGFiYXNlLCB3aGljaCBpbmNsdWRlcyB0aGUgaW5mb3JtYXRpb24sIGluZGVwZW5kZW50IHdvcmtzLCBvciBvdGhlciBtYXRlcmlhbCBjb2xsZWN0ZWQgaW50byB0aGUgRGF0YWJhc2Ugb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBEb2N1bWVudC5cblxuICAgXCJEYXRhYmFzZVwiIC0gQSBjb2xsZWN0aW9uIG9mIERhdGEgYXJyYW5nZWQgaW4gYSBzeXN0ZW1hdGljIG9yIG1ldGhvZGljYWwgd2F5IGFuZCBpbmRpdmlkdWFsbHkgYWNjZXNzaWJsZSBieSBlbGVjdHJvbmljIG9yIG90aGVyIG1lYW5zIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgRG9jdW1lbnQuXG5cbiAgIFwiRGF0YWJhc2UgUmlnaHRcIiAtIE1lYW5zIHJpZ2h0cyBvdmVyIERhdGEgcmVzdWx0aW5nIGZyb20gdGhlIENoYXB0ZXIgSUlJIChcInN1aSBnZW5lcmlzXCIpIHJpZ2h0cyBpbiB0aGUgRGF0YWJhc2UgRGlyZWN0aXZlIChEaXJlY3RpdmUgOTYvOS9FQyBvZiB0aGUgRXVyb3BlYW4gUGFybGlhbWVudCBhbmQgb2YgdGhlIENvdW5jaWwgb2YgMTEgTWFyY2ggMTk5NiBvbiB0aGUgbGVnYWwgcHJvdGVjdGlvbiBvZiBkYXRhYmFzZXMpIGFuZCBhbnkgZnV0dXJlIHVwZGF0ZXMgYXMgd2VsbCBhcyBhbnkgc2ltaWxhciByaWdodHMgYXZhaWxhYmxlIGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gdW5kZXIgU2VjdGlvbiA2LjQuXG5cbiAgIFwiRG9jdW1lbnRcIiAtIG1lYW5zIHRoaXMgcmVsaW5xdWlzaG1lbnQgYW5kIHdhaXZlciBvZiByaWdodHMgYW5kIGNsYWltcyBhbmQgYmFjayB1cCBsaWNlbmNlIGFncmVlbWVudC5cblxuICAgXCJQZXJzb25cIiAtIE1lYW5zIGEgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gb3IgYSBib2R5IG9mIHBlcnNvbnMgY29ycG9yYXRlIG9yIGluY29ycG9yYXRlLlxuXG4gICBcIlVzZVwiIC0gQXMgYSB2ZXJiLCBtZWFucyBkb2luZyBhbnkgYWN0IHRoYXQgaXMgcmVzdHJpY3RlZCBieSBDb3B5cmlnaHQgb3IgRGF0YWJhc2UgUmlnaHRzIHdoZXRoZXIgaW4gdGhlIG9yaWdpbmFsIG1lZGl1bSBvciBhbnkgb3RoZXI7IGFuZCBpbmNsdWRlcyBtb2RpZnlpbmcgdGhlIFdvcmsgYXMgbWF5IGJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byB1c2UgaXQgaW4gYSBkaWZmZXJlbnQgbW9kZSBvciBmb3JtYXQuIFRoaXMgaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIHN1YmxpY2Vuc2UgdGhlIFdvcmsuXG5cbiAgIFwiV29ya1wiIC0gTWVhbnMgZWl0aGVyIG9yIGJvdGggb2YgdGhlIERhdGFiYXNlIGFuZCBEYXRhIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgRG9jdW1lbnQuXG5cbiAgIFwiWW91XCIgLSB0aGUgUGVyc29uIGFjcXVpcmluZyByaWdodHMgdW5kZXIgdGhlIGxpY2VuY2UgZWxlbWVudHMgb2YgdGhpcyBEb2N1bWVudC5cblxuICAgV29yZHMgaW4gdGhlIHNpbmd1bGFyIGluY2x1ZGUgdGhlIHBsdXJhbCBhbmQgdmljZSB2ZXJzYS5cblxuICAgMi4wIFdoYXQgdGhpcyBkb2N1bWVudCBjb3ZlcnNcblxuICAgMi4xLiBMZWdhbCBlZmZlY3Qgb2YgdGhpcyBEb2N1bWVudC4gVGhpcyBEb2N1bWVudCBpczpcblxuICAgICAgYS4gQSBkZWRpY2F0aW9uIHRvIHRoZSBwdWJsaWMgZG9tYWluIGFuZCB3YWl2ZXIgb2YgQ29weXJpZ2h0IGFuZCBEYXRhYmFzZSBSaWdodHMgb3ZlciB0aGUgV29yazsgYW5kXG5cbiAgICAgIGIuIEEgbGljZW5jZSBvZiBDb3B5cmlnaHQgYW5kIERhdGFiYXNlIFJpZ2h0cyBvdmVyIHRoZSBXb3JrIGluIGp1cmlzZGljdGlvbnMgdGhhdCBkbyBub3QgYWxsb3cgZm9yIHJlbGlucXVpc2htZW50IG9yIHdhaXZlci5cblxuICAgMi4yLiBMZWdhbCByaWdodHMgY292ZXJlZC5cblxuICAgICAgYS4gQ29weXJpZ2h0LiBBbnkgY29weXJpZ2h0IG9yIG5laWdoYm91cmluZyByaWdodHMgaW4gdGhlIFdvcmsuIENvcHlyaWdodCBsYXcgdmFyaWVzIGJldHdlZW4ganVyaXNkaWN0aW9ucywgYnV0IGlzIGxpa2VseSB0byBjb3ZlcjogdGhlIERhdGFiYXNlIG1vZGVsIG9yIHNjaGVtYSwgd2hpY2ggaXMgdGhlIHN0cnVjdHVyZSwgYXJyYW5nZW1lbnQsIGFuZCBvcmdhbmlzYXRpb24gb2YgdGhlIERhdGFiYXNlLCBhbmQgY2FuIGFsc28gaW5jbHVkZSB0aGUgRGF0YWJhc2UgdGFibGVzIGFuZCB0YWJsZSBpbmRleGVzOyB0aGUgZGF0YSBlbnRyeSBhbmQgb3V0cHV0IHNoZWV0czsgYW5kIHRoZSBGaWVsZCBuYW1lcyBvZiBEYXRhIHN0b3JlZCBpbiB0aGUgRGF0YWJhc2UuIENvcHlyaWdodCBtYXkgYWxzbyBjb3ZlciB0aGUgRGF0YSBkZXBlbmRpbmcgb24gdGhlIGp1cmlzZGljdGlvbiBhbmQgdHlwZSBvZiBEYXRhOyBhbmRcblxuICAgICAgYi4gRGF0YWJhc2UgUmlnaHRzLiBEYXRhYmFzZSBSaWdodHMgb25seSBleHRlbmQgdG8gdGhlIGV4dHJhY3Rpb24gYW5kIHJlLXV0aWxpc2F0aW9uIG9mIHRoZSB3aG9sZSBvciBhIHN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIERhdGEuIERhdGFiYXNlIFJpZ2h0cyBjYW4gYXBwbHkgZXZlbiB3aGVuIHRoZXJlIGlzIG5vIGNvcHlyaWdodCBvdmVyIHRoZSBEYXRhYmFzZS4gRGF0YWJhc2UgUmlnaHRzIGNhbiBhbHNvIGFwcGx5IHdoZW4gdGhlIERhdGEgaXMgcmVtb3ZlZCBmcm9tIHRoZSBEYXRhYmFzZSBhbmQgaXMgc2VsZWN0ZWQgYW5kIGFycmFuZ2VkIGluIGEgd2F5IHRoYXQgd291bGQgbm90IGluZnJpbmdlIGFueSBhcHBsaWNhYmxlIGNvcHlyaWdodC5cblxuICAgMi4yIFJpZ2h0cyBub3QgY292ZXJlZC5cblxuICAgICAgYS4gVGhpcyBEb2N1bWVudCBkb2VzIG5vdCBhcHBseSB0byBjb21wdXRlciBwcm9ncmFtcyB1c2VkIGluIHRoZSBtYWtpbmcgb3Igb3BlcmF0aW9uIG9mIHRoZSBEYXRhYmFzZTtcblxuICAgICAgYi4gVGhpcyBEb2N1bWVudCBkb2VzIG5vdCBjb3ZlciBhbnkgcGF0ZW50cyBvdmVyIHRoZSBEYXRhIG9yIHRoZSBEYXRhYmFzZS4gUGxlYXNlIHNlZSBTZWN0aW9uIDQuMiBsYXRlciBpbiB0aGlzIERvY3VtZW50IGZvciBmdXJ0aGVyIGRldGFpbHM7IGFuZFxuXG4gICAgICBjLiBUaGlzIERvY3VtZW50IGRvZXMgbm90IGNvdmVyIGFueSB0cmFkZSBtYXJrcyBhc3NvY2lhdGVkIHdpdGggdGhlIERhdGFiYXNlLiBQbGVhc2Ugc2VlIFNlY3Rpb24gNC4zIGxhdGVyIGluIHRoaXMgRG9jdW1lbnQgZm9yIGZ1cnRoZXIgZGV0YWlscy5cblxuICAgICAgVXNlcnMgb2YgdGhpcyBEYXRhYmFzZSBhcmUgY2F1dGlvbmVkIHRoYXQgdGhleSBtYXkgaGF2ZSB0byBjbGVhciBvdGhlciByaWdodHMgb3IgY29uc3VsdCBvdGhlciBsaWNlbmNlcy5cblxuICAgMi4zIEZhY3RzIGFyZSBmcmVlLiBUaGUgUmlnaHRzaG9sZGVyIHRha2VzIHRoZSBwb3NpdGlvbiB0aGF0IGZhY3R1YWwgaW5mb3JtYXRpb24gaXMgbm90IGNvdmVyZWQgYnkgQ29weXJpZ2h0LiBUaGlzIERvY3VtZW50IGhvd2V2ZXIgY292ZXJzIHRoZSBXb3JrIGluIGp1cmlzZGljdGlvbnMgdGhhdCBtYXkgcHJvdGVjdCB0aGUgZmFjdHVhbCBpbmZvcm1hdGlvbiBpbiB0aGUgV29yayBieSBDb3B5cmlnaHQsIGFuZCB0byBjb3ZlciBhbnkgaW5mb3JtYXRpb24gcHJvdGVjdGVkIGJ5IENvcHlyaWdodCB0aGF0IGlzIGNvbnRhaW5lZCBpbiB0aGUgV29yay5cblxuUGFydCBJSTogRGVkaWNhdGlvbiB0byB0aGUgcHVibGljIGRvbWFpblxuXG4gICAzLjAgRGVkaWNhdGlvbiwgd2FpdmVyLCBhbmQgbGljZW5jZSBvZiBDb3B5cmlnaHQgYW5kIERhdGFiYXNlIFJpZ2h0c1xuXG4gICAzLjEgRGVkaWNhdGlvbiBvZiBDb3B5cmlnaHQgYW5kIERhdGFiYXNlIFJpZ2h0cyB0byB0aGUgcHVibGljIGRvbWFpbi4gVGhlIFJpZ2h0c2hvbGRlciBieSB1c2luZyB0aGlzIERvY3VtZW50LCBkZWRpY2F0ZXMgdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBkb21haW4gZm9yIHRoZSBiZW5lZml0IG9mIHRoZSBwdWJsaWMgYW5kIHJlbGlucXVpc2hlcyBhbGwgcmlnaHRzIGluIENvcHlyaWdodCBhbmQgRGF0YWJhc2UgUmlnaHRzIG92ZXIgdGhlIFdvcmsuXG5cbiAgICAgIGEuIFRoZSBSaWdodHNob2xkZXIgcmVhbGlzZXMgdGhhdCBvbmNlIHRoZXNlIHJpZ2h0cyBhcmUgcmVsaW5xdWlzaGVkLCB0aGF0IHRoZSBSaWdodHNob2xkZXIgaGFzIG5vIGZ1cnRoZXIgcmlnaHRzIGluIENvcHlyaWdodCBhbmQgRGF0YWJhc2UgUmlnaHRzIG92ZXIgdGhlIFdvcmssIGFuZCB0aGF0IHRoZSBXb3JrIGlzIGZyZWUgYW5kIG9wZW4gZm9yIG90aGVycyB0byBVc2UuXG5cbiAgICAgIGIuIFRoZSBSaWdodHNob2xkZXIgaW50ZW5kcyBmb3IgdGhlaXIgcmVsaW5xdWlzaG1lbnQgdG8gY292ZXIgYWxsIHByZXNlbnQgYW5kIGZ1dHVyZSByaWdodHMgaW4gdGhlIFdvcmsgdW5kZXIgQ29weXJpZ2h0IGFuZCBEYXRhYmFzZSBSaWdodHMsIHdoZXRoZXIgdGhleSBhcmUgdmVzdGVkIG9yIGNvbnRpbmdlbnQgcmlnaHRzLCBhbmQgdGhhdCB0aGlzIHJlbGlucXVpc2htZW50IG9mIHJpZ2h0cyBjb3ZlcnMgYWxsIHRoZWlyIGhlaXJzIGFuZCBzdWNjZXNzb3JzLlxuXG4gICAgICBUaGUgYWJvdmUgcmVsaW5xdWlzaG1lbnQgb2YgcmlnaHRzIGFwcGxpZXMgd29ybGR3aWRlIGFuZCBpbmNsdWRlcyBtZWRpYSBhbmQgZm9ybWF0cyBub3cga25vd24gb3IgY3JlYXRlZCBpbiB0aGUgZnV0dXJlLlxuXG4gICAzLjIgV2FpdmVyIG9mIHJpZ2h0cyBhbmQgY2xhaW1zIGluIENvcHlyaWdodCBhbmQgRGF0YWJhc2UgUmlnaHRzIHdoZW4gU2VjdGlvbiAzLjEgZGVkaWNhdGlvbiBpbmFwcGxpY2FibGUuIElmIHRoZSBkZWRpY2F0aW9uIGluIFNlY3Rpb24gMy4xIGRvZXMgbm90IGFwcGx5IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gdW5kZXIgU2VjdGlvbiA2LjQsIHRoZSBSaWdodHNob2xkZXIgd2FpdmVzIGFueSByaWdodHMgYW5kIGNsYWltcyB0aGF0IHRoZSBSaWdodHNob2xkZXIgbWF5IGhhdmUgb3IgYWNxdWlyZSBpbiB0aGUgZnV0dXJlIG92ZXIgdGhlIFdvcmsgaW46XG5cbiAgICAgIGEuIENvcHlyaWdodDsgYW5kXG5cbiAgICAgIGIuIERhdGFiYXNlIFJpZ2h0cy5cblxuICAgICAgVG8gdGhlIGV4dGVudCBwb3NzaWJsZSBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uLCB0aGUgYWJvdmUgd2FpdmVyIG9mIHJpZ2h0cyBhbmQgY2xhaW1zIGFwcGxpZXMgd29ybGR3aWRlIGFuZCBpbmNsdWRlcyBtZWRpYSBhbmQgZm9ybWF0cyBub3cga25vd24gb3IgY3JlYXRlZCBpbiB0aGUgZnV0dXJlLiBUaGUgUmlnaHRzaG9sZGVyIGFncmVlcyBub3QgdG8gYXNzZXJ0IHRoZSBhYm92ZSByaWdodHMgYW5kIHdhaXZlcyB0aGUgcmlnaHQgdG8gZW5mb3JjZSB0aGVtIG92ZXIgdGhlIFdvcmsuXG5cbiAgIDMuMyBMaWNlbmNlIG9mIENvcHlyaWdodCBhbmQgRGF0YWJhc2UgUmlnaHRzIHdoZW4gU2VjdGlvbnMgMy4xIGFuZCAzLjIgaW5hcHBsaWNhYmxlLiBJZiB0aGUgZGVkaWNhdGlvbiBhbmQgd2FpdmVyIGluIFNlY3Rpb25zIDMuMSBhbmQgMy4yIGRvZXMgbm90IGFwcGx5IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gdW5kZXIgU2VjdGlvbiA2LjQsIHRoZSBSaWdodHNob2xkZXIgYW5kIFlvdSBhZ3JlZSBhcyBmb2xsb3dzOlxuXG4gICAgICBhLiBUaGUgTGljZW5zb3IgZ3JhbnRzIHRvIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBsaWNlbmNlIHRvIFVzZSB0aGUgV29yayBmb3IgdGhlIGR1cmF0aW9uIG9mIGFueSBhcHBsaWNhYmxlIENvcHlyaWdodCBhbmQgRGF0YWJhc2UgUmlnaHRzLiBUaGVzZSByaWdodHMgZXhwbGljaXRseSBpbmNsdWRlIGNvbW1lcmNpYWwgdXNlLCBhbmQgZG8gbm90IGV4Y2x1ZGUgYW55IGZpZWxkIG9mIGVuZGVhdm91ci4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uLCB0aGVzZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgY3JlYXRlZCBpbiB0aGUgZnV0dXJlLlxuXG4gICAzLjQgTW9yYWwgcmlnaHRzLiBUaGlzIHNlY3Rpb24gY292ZXJzIG1vcmFsIHJpZ2h0cywgaW5jbHVkaW5nIHRoZSByaWdodCB0byBiZSBpZGVudGlmaWVkIGFzIHRoZSBhdXRob3Igb2YgdGhlIFdvcmsgb3IgdG8gb2JqZWN0IHRvIHRyZWF0bWVudCB0aGF0IHdvdWxkIG90aGVyd2lzZSBwcmVqdWRpY2UgdGhlIGF1dGhvcidzIGhvbm91ciBhbmQgcmVwdXRhdGlvbiwgb3IgYW55IG90aGVyIGRlcm9nYXRvcnkgdHJlYXRtZW50OlxuXG4gICAgICBhLiBGb3IganVyaXNkaWN0aW9ucyBhbGxvd2luZyB3YWl2ZXIgb2YgbW9yYWwgcmlnaHRzLCBMaWNlbnNvciB3YWl2ZXMgYWxsIG1vcmFsIHJpZ2h0cyB0aGF0IExpY2Vuc29yIG1heSBoYXZlIGluIHRoZSBXb3JrIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwb3NzaWJsZSBieSB0aGUgbGF3IG9mIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gdW5kZXIgU2VjdGlvbiA2LjQ7XG5cbiAgICAgIGIuIElmIHdhaXZlciBvZiBtb3JhbCByaWdodHMgdW5kZXIgU2VjdGlvbiAzLjQgYSBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGlzIG5vdCBwb3NzaWJsZSwgTGljZW5zb3IgYWdyZWVzIG5vdCB0byBhc3NlcnQgYW55IG1vcmFsIHJpZ2h0cyBvdmVyIHRoZSBXb3JrIGFuZCB3YWl2ZXMgYWxsIGNsYWltcyBpbiBtb3JhbCByaWdodHMgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBvc3NpYmxlIGJ5IHRoZSBsYXcgb2YgdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiB1bmRlciBTZWN0aW9uIDYuNDsgYW5kXG5cbiAgICAgIGMuIEZvciBqdXJpc2RpY3Rpb25zIG5vdCBhbGxvd2luZyB3YWl2ZXIgb3IgYW4gYWdyZWVtZW50IG5vdCB0byBhc3NlcnQgbW9yYWwgcmlnaHRzIHVuZGVyIFNlY3Rpb24gMy40IGEgYW5kIGIsIHRoZSBhdXRob3IgbWF5IHJldGFpbiB0aGVpciBtb3JhbCByaWdodHMgb3ZlciB0aGUgY29weXJpZ2h0ZWQgYXNwZWN0cyBvZiB0aGUgV29yay5cblxuICAgICAgUGxlYXNlIG5vdGUgdGhhdCBzb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IGZvciB0aGUgd2FpdmVyIG9mIG1vcmFsIHJpZ2h0cywgYW5kIHNvIG1vcmFsIHJpZ2h0cyBtYXkgc3RpbGwgc3Vic2lzdCBvdmVyIHRoZSB3b3JrIGluIHNvbWUganVyaXNkaWN0aW9ucy5cblxuICAgNC4wIFJlbGF0aW9uc2hpcCB0byBvdGhlciByaWdodHNcblxuICAgNC4xIE5vIG90aGVyIGNvbnRyYWN0dWFsIGNvbmRpdGlvbnMuIFRoZSBSaWdodHNob2xkZXIgbWFrZXMgdGhpcyBXb3JrIGF2YWlsYWJsZSB0byBZb3Ugd2l0aG91dCBhbnkgb3RoZXIgY29udHJhY3R1YWwgb2JsaWdhdGlvbnMsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIEFueSBDb21tdW5pdHkgTm9ybXMgc3RhdGVtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yayBpcyBub3QgYSBjb250cmFjdCBhbmQgZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoaXMgRG9jdW1lbnQuXG5cbiAgIDQuMiBSZWxhdGlvbnNoaXAgdG8gcGF0ZW50cy4gVGhpcyBEb2N1bWVudCBkb2VzIG5vdCBncmFudCBZb3UgYSBsaWNlbmNlIGZvciBhbnkgcGF0ZW50cyB0aGF0IHRoZSBSaWdodHNob2xkZXIgbWF5IG93bi4gVXNlcnMgb2YgdGhpcyBEYXRhYmFzZSBhcmUgY2F1dGlvbmVkIHRoYXQgdGhleSBtYXkgaGF2ZSB0byBjbGVhciBvdGhlciByaWdodHMgb3IgY29uc3VsdCBvdGhlciBsaWNlbmNlcy5cblxuICAgNC4zIFJlbGF0aW9uc2hpcCB0byB0cmFkZSBtYXJrcy4gVGhpcyBEb2N1bWVudCBkb2VzIG5vdCBncmFudCBZb3UgYSBsaWNlbmNlIGZvciBhbnkgdHJhZGUgbWFya3MgdGhhdCB0aGUgUmlnaHRzaG9sZGVyIG1heSBvd24gb3IgdGhhdCB0aGUgUmlnaHRzaG9sZGVyIG1heSB1c2UgdG8gY292ZXIgdGhlIFdvcmsuIFVzZXJzIG9mIHRoaXMgRGF0YWJhc2UgYXJlIGNhdXRpb25lZCB0aGF0IHRoZXkgbWF5IGhhdmUgdG8gY2xlYXIgb3RoZXIgcmlnaHRzIG9yIGNvbnN1bHQgb3RoZXIgbGljZW5jZXMuXG5cblBhcnQgSUlJOiBHZW5lcmFsIHByb3Zpc2lvbnNcblxuICAgNS4wIFdhcnJhbnRpZXMsIGRpc2NsYWltZXIsIGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eVxuXG4gICA1LjEgVGhlIFdvcmsgaXMgcHJvdmlkZWQgYnkgdGhlIFJpZ2h0c2hvbGRlciBcImFzIGlzXCIgYW5kIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCB3aGV0aGVyIG9mIHRpdGxlLCBvZiBhY2N1cmFjeSBvciBjb21wbGV0ZW5lc3MsIG9mIHRoZSBwcmVzZW5jZSBvZiBhYnNlbmNlIG9mIGVycm9ycywgb2YgZml0bmVzcyBmb3IgcHVycG9zZSwgb3Igb3RoZXJ3aXNlLiBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb2YgaW1wbGllZCB3YXJyYW50aWVzLCBzbyB0aGlzIGV4Y2x1c2lvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS5cblxuICAgNS4yIFN1YmplY3QgdG8gYW55IGxpYWJpbGl0eSB0aGF0IG1heSBub3QgYmUgZXhjbHVkZWQgb3IgbGltaXRlZCBieSBsYXcsIHRoZSBSaWdodHNob2xkZXIgaXMgbm90IGxpYWJsZSBmb3IsIGFuZCBleHByZXNzbHkgZXhjbHVkZXMsIGFsbCBsaWFiaWxpdHkgZm9yIGxvc3Mgb3IgZGFtYWdlIGhvd2V2ZXIgYW5kIHdoZW5ldmVyIGNhdXNlZCB0byBhbnlvbmUgYnkgYW55IHVzZSB1bmRlciB0aGlzIERvY3VtZW50LCB3aGV0aGVyIGJ5IFlvdSBvciBieSBhbnlvbmUgZWxzZSwgYW5kIHdoZXRoZXIgY2F1c2VkIGJ5IGFueSBmYXVsdCBvbiB0aGUgcGFydCBvZiB0aGUgUmlnaHRzaG9sZGVyIG9yIG5vdC4gVGhpcyBleGNsdXNpb24gb2YgbGlhYmlsaXR5IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIGFueSBzcGVjaWFsLCBpbmNpZGVudGFsLCBjb25zZXF1ZW50aWFsLCBwdW5pdGl2ZSwgb3IgZXhlbXBsYXJ5IGRhbWFnZXMuIFRoaXMgZXhjbHVzaW9uIGFwcGxpZXMgZXZlbiBpZiB0aGUgUmlnaHRzaG9sZGVyIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy5cblxuICAgNS4zIElmIGxpYWJpbGl0eSBtYXkgbm90IGJlIGV4Y2x1ZGVkIGJ5IGxhdywgaXQgaXMgbGltaXRlZCB0byBhY3R1YWwgYW5kIGRpcmVjdCBmaW5hbmNpYWwgbG9zcyB0byB0aGUgZXh0ZW50IGl0IGlzIGNhdXNlZCBieSBwcm92ZWQgbmVnbGlnZW5jZSBvbiB0aGUgcGFydCBvZiB0aGUgUmlnaHRzaG9sZGVyLlxuXG4gICA2LjAgR2VuZXJhbFxuXG4gICA2LjEgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIERvY3VtZW50IGlzIGhlbGQgdG8gYmUgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlLCB0aGF0IG11c3Qgbm90IGFmZmVjdCB0aGUgY3ZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgRG9jdW1lbnQuXG5cbiAgIDYuMiBUaGlzIERvY3VtZW50IGlzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGNvdmVyZWQgaGVyZS4gSXQgcmVwbGFjZXMgYW55IGVhcmxpZXIgdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuXG5cbiAgIDYuMyBUaGlzIERvY3VtZW50IGRvZXMgbm90IGFmZmVjdCBhbnkgcmlnaHRzIHRoYXQgWW91IG9yIGFueW9uZSBlbHNlIG1heSBpbmRlcGVuZGVudGx5IGhhdmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IHRvIG1ha2UgYW55IHVzZSBvZiB0aGlzIFdvcmssIGluY2x1ZGluZyAoZm9yIGp1cmlzZGljdGlvbnMgd2hlcmUgdGhpcyBEb2N1bWVudCBpcyBhIGxpY2VuY2UpIGZhaXIgZGVhbGluZywgZmFpciB1c2UsIGRhdGFiYXNlIGV4Y2VwdGlvbnMsIG9yIGFueSBvdGhlciBsZWdhbGx5IHJlY29nbmlzZWQgbGltaXRhdGlvbiBvciBleGNlcHRpb24gdG8gaW5mcmluZ2VtZW50IG9mIGNvcHlyaWdodCBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuXG5cbiAgIDYuNCBUaGlzIERvY3VtZW50IHRha2VzIGVmZmVjdCBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBEb2N1bWVudCB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkLiBJZiB0aGUgcmlnaHRzIHdhaXZlZCBvciBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgbGF3IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IHdhaXZlZCBvciBncmFudGVkIHVuZGVyIHRoaXMgRG9jdW1lbnQsIHRoZXNlIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBpbmNsdWRlZCBpbiB0aGlzIERvY3VtZW50IGluIG9yZGVyIHRvIG1lZXQgdGhlIGludGVudCBvZiB0aGlzIERvY3VtZW50LiJdLCJsaWNlbnNlSWRzIjpbIlBEREwtMS4wIl0sImtleXdvcmRzIjpbImRvbWFpbiBkZWRpY2F0aW9uIGxpY2Vuc2UiLCJkZWRpY2F0aW9uIGxpY2Vuc2UgcGRkbCIsImxpY2Vuc2UgcGRkbCBwcmVhbWJsZSIsInBkZGwgcHJlYW1ibGUgdGhlIiwiZGVkaWNhdGlvbiBsaWNlbmNlIGlzIiwibGljZW5jZSBpcyBhIiwiaXMgYSBkb2N1bWVudCIsImEgZG9jdW1lbnQgaW50ZW5kZWQiLCJkb2N1bWVudCBpbnRlbmRlZCB0byIsInRoaXMgd29yayBmb3IiLCJ3b3JrIGZvciBhbnkiLCJ3aXRob3V0IGFueSByZXN0cmljdGlvbnMiLCJhbnkgcmVzdHJpY3Rpb25zIHRoaXMiLCJyZXN0cmljdGlvbnMgdGhpcyBsaWNlbmNlIiwiaXMgaW50ZW5kZWQgZm9yIiwiZm9yIHVzZSBvbiIsInVzZSBvbiBkYXRhYmFzZXMiLCJvbiBkYXRhYmFzZXMgb3IiLCJkYXRhYmFzZXMgb3IgdGhlaXIiLCJvciB0aGVpciBjb250ZW50cyIsInRoZWlyIGNvbnRlbnRzIGRhdGEiLCJjb250ZW50cyBkYXRhIGVpdGhlciIsImRhdGEgZWl0aGVyIHRvZ2V0aGVyIiwiZWl0aGVyIHRvZ2V0aGVyIG9yIiwidG9nZXRoZXIgb3IgaW5kaXZpZHVhbGx5Iiwib3IgaW5kaXZpZHVhbGx5IG1hbnkiLCJpbmRpdmlkdWFsbHkgbWFueSBkYXRhYmFzZXMiLCJieSBjb3B5cmlnaHQgc29tZSIsImNvcHlyaWdodCBzb21lIGp1cmlzZGljdGlvbnMiLCJtYWlubHkgaW4gZXVyb3BlIiwiaW4gZXVyb3BlIGhhdmUiLCJldXJvcGUgaGF2ZSBzcGVjaWZpYyIsImhhdmUgc3BlY2lmaWMgc3BlY2lhbCIsInNwZWNpZmljIHNwZWNpYWwgcmlnaHRzIiwic3BlY2lhbCByaWdodHMgdGhhdCIsImNvdmVyIGRhdGFiYXNlcyBjYWxsZWQiLCJkYXRhYmFzZXMgY2FsbGVkIHRoZSIsImNhbGxlZCB0aGUgc3VpIiwidGhlIHN1aSBnZW5lcmlzIiwiZ2VuZXJpcyBkYXRhYmFzZSByaWdodCIsImRhdGFiYXNlIHJpZ2h0IGJvdGgiLCJyaWdodCBib3RoIG9mIiwiYm90aCBvZiB0aGVzZSIsIm9mIHRoZXNlIHNldHMiLCJ0aGVzZSBzZXRzIG9mIiwib2YgcmlnaHRzIGFzIiwicmlnaHRzIGFzIHdlbGwiLCJhcyBvdGhlciBsZWdhbCIsIm90aGVyIGxlZ2FsIHJpZ2h0cyIsImxlZ2FsIHJpZ2h0cyB1c2VkIiwicmlnaHRzIHVzZWQgdG8iLCJ1c2VkIHRvIHByb3RlY3QiLCJ0byBwcm90ZWN0IGRhdGFiYXNlcyIsInByb3RlY3QgZGF0YWJhc2VzIGFuZCIsImRhdGFiYXNlcyBhbmQgZGF0YSIsImFuZCBkYXRhIGNhbiIsImRhdGEgY2FuIGNyZWF0ZSIsImNhbiBjcmVhdGUgdW5jZXJ0YWludHkiLCJjcmVhdGUgdW5jZXJ0YWludHkgb3IiLCJ1bmNlcnRhaW50eSBvciBwcmFjdGljYWwiLCJvciBwcmFjdGljYWwgZGlmZmljdWx0eSIsInByYWN0aWNhbCBkaWZmaWN1bHR5IGZvciIsImRpZmZpY3VsdHkgZm9yIHRob3NlIiwiZm9yIHRob3NlIHdpc2hpbmciLCJ0aG9zZSB3aXNoaW5nIHRvIiwid2lzaGluZyB0byBzaGFyZSIsInRvIHNoYXJlIGRhdGFiYXNlcyIsInNoYXJlIGRhdGFiYXNlcyBhbmQiLCJkYXRhYmFzZXMgYW5kIHRoZWlyIiwiYW5kIHRoZWlyIHVuZGVybHlpbmciLCJ0aGVpciB1bmRlcmx5aW5nIGRhdGEiLCJ1bmRlcmx5aW5nIGRhdGEgYnV0IiwiZGF0YSBidXQgcmV0YWluIiwiYnV0IHJldGFpbiBhIiwicmV0YWluIGEgbGltaXRlZCIsImEgbGltaXRlZCBhbW91bnQiLCJsaW1pdGVkIGFtb3VudCBvZiIsImFtb3VudCBvZiByaWdodHMiLCJ1bmRlciBhIHNvbWUiLCJhIHNvbWUgcmlnaHRzIiwic29tZSByaWdodHMgcmVzZXJ2ZWQiLCJyaWdodHMgcmVzZXJ2ZWQgYXBwcm9hY2giLCJyZXNlcnZlZCBhcHByb2FjaCB0byIsImFwcHJvYWNoIHRvIGxpY2Vuc2luZyIsInRvIGxpY2Vuc2luZyBhcyIsImxpY2Vuc2luZyBhcyBvdXRsaW5lZCIsIm91dGxpbmVkIGluIHRoZSIsImluIHRoZSBzY2llbmNlIiwidGhlIHNjaWVuY2UgY29tbW9ucyIsInNjaWVuY2UgY29tbW9ucyBwcm90b2NvbCIsImNvbW1vbnMgcHJvdG9jb2wgZm9yIiwicHJvdG9jb2wgZm9yIGltcGxlbWVudGluZyIsImZvciBpbXBsZW1lbnRpbmcgb3BlbiIsImltcGxlbWVudGluZyBvcGVuIGFjY2VzcyIsIm9wZW4gYWNjZXNzIGRhdGEiLCJhY2Nlc3MgZGF0YSBhcyIsImEgcmVzdWx0IHRoaXMiLCJyZXN1bHQgdGhpcyB3YWl2ZXIiLCJ0aGlzIHdhaXZlciBhbmQiLCJhbmQgbGljZW5jZSB0cmllcyIsImxpY2VuY2UgdHJpZXMgdG8iLCJ0cmllcyB0byB0aGUiLCJleHRlbnQgcG9zc2libGUgdG8iLCJwb3NzaWJsZSB0byBlbGltaW5hdGUiLCJ0byBlbGltaW5hdGUgb3IiLCJlbGltaW5hdGUgb3IgZnVsbHkiLCJvciBmdWxseSBsaWNlbnNlIiwiZnVsbHkgbGljZW5zZSBhbnkiLCJsaWNlbnNlIGFueSByaWdodHMiLCJ0aGF0IGNvdmVyIHRoaXMiLCJjb3ZlciB0aGlzIGRhdGFiYXNlIiwidGhpcyBkYXRhYmFzZSBhbmQiLCJhbmQgZGF0YSBhbnkiLCJkYXRhIGFueSBjb21tdW5pdHkiLCJjb21tdW5pdHkgbm9ybXMgb3IiLCJub3JtcyBvciBzaW1pbGFyIiwib3Igc2ltaWxhciBzdGF0ZW1lbnRzIiwic2ltaWxhciBzdGF0ZW1lbnRzIG9mIiwic3RhdGVtZW50cyBvZiB1c2UiLCJvciBkYXRhIGRvIiwiZGF0YSBkbyBub3QiLCJub3QgZm9ybSBhIiwiZm9ybSBhIHBhcnQiLCJkb2N1bWVudCBhbmQgZG8iLCJkbyBub3QgYWN0Iiwibm90IGFjdCBhcyIsImFjdCBhcyBhIiwiYSBjb250cmFjdCBmb3IiLCJjb250cmFjdCBmb3IgYWNjZXNzIiwiZm9yIGFjY2VzcyBvciIsImFjY2VzcyBvciBvdGhlciIsImZvciB0aGUgZGF0YWJhc2UiLCJkYXRhIHRoZSBwb3NpdGlvbiIsInRoZSB3b3JrIGJlY2F1c2UiLCJ3b3JrIGJlY2F1c2UgdGhpcyIsInRoaXMgZG9jdW1lbnQgcGxhY2VzIiwiZG9jdW1lbnQgcGxhY2VzIHRoZSIsInBsYWNlcyB0aGUgZGF0YWJhc2UiLCJpdHMgY29udGVudHMgaW4iLCJjb250ZW50cyBpbiBvciIsIm9yIGFzIGNsb3NlIiwiYXMgY2xvc2UgYXMiLCJjbG9zZSBhcyBwb3NzaWJsZSIsImFzIHBvc3NpYmxlIHdpdGhpbiIsInBvc3NpYmxlIHdpdGhpbiB0aGUiLCJ3aXRoaW4gdGhlIHB1YmxpYyIsImRvbWFpbiB0aGVyZSBhcmUiLCJubyByZXN0cmljdGlvbnMgb3IiLCJyZXN0cmljdGlvbnMgb3IgcmVxdWlyZW1lbnRzIiwib3IgcmVxdWlyZW1lbnRzIHBsYWNlZCIsInJlcXVpcmVtZW50cyBwbGFjZWQgb24iLCJwbGFjZWQgb24gdGhlIiwicmVjaXBpZW50IGJ5IHRoaXMiLCJ0aGlzIGRvY3VtZW50IHJlY2lwaWVudHMiLCJkb2N1bWVudCByZWNpcGllbnRzIG1heSIsInJlY2lwaWVudHMgbWF5IHVzZSIsInRoaXMgd29yayBjb21tZXJjaWFsbHkiLCJ3b3JrIGNvbW1lcmNpYWxseSB1c2UiLCJjb21tZXJjaWFsbHkgdXNlIHRlY2huaWNhbCIsInVzZSB0ZWNobmljYWwgcHJvdGVjdGlvbiIsInByb3RlY3Rpb24gbWVhc3VyZXMgY29tYmluZSIsIm1lYXN1cmVzIGNvbWJpbmUgdGhpcyIsImNvbWJpbmUgdGhpcyBkYXRhIiwidGhpcyBkYXRhIG9yIiwib3IgZGF0YWJhc2Ugd2l0aCIsImRhdGFiYXNlIHdpdGggb3RoZXIiLCJ3aXRoIG90aGVyIGRhdGFiYXNlcyIsIm90aGVyIGRhdGFiYXNlcyBvciIsImRhdGFiYXNlcyBvciBkYXRhIiwib3IgZGF0YSBhbmQiLCJkYXRhIGFuZCBzaGFyZSIsImFuZCBzaGFyZSB0aGVpciIsInNoYXJlIHRoZWlyIGNoYW5nZXMiLCJ0aGVpciBjaGFuZ2VzIGFuZCIsImFuZCBhZGRpdGlvbnMgb3IiLCJhZGRpdGlvbnMgb3Iga2VlcCIsIm9yIGtlZXAgdGhlbSIsImtlZXAgdGhlbSBzZWNyZXQiLCJ0aGVtIHNlY3JldCBpdCIsInNlY3JldCBpdCBpcyIsInJlcXVpcmVtZW50IHRoYXQgcmVjaXBpZW50cyIsInRoYXQgcmVjaXBpZW50cyBwcm92aWRlIiwicmVjaXBpZW50cyBwcm92aWRlIGZ1cnRoZXIiLCJwcm92aWRlIGZ1cnRoZXIgdXNlcnMiLCJmdXJ0aGVyIHVzZXJzIHdpdGgiLCJ1c2VycyB3aXRoIGEiLCJsaWNlbmNlIG9yIGF0dHJpYnV0ZSIsIm9yIGF0dHJpYnV0ZSB0aGUiLCJhdHRyaWJ1dGUgdGhlIG9yaWdpbmFsIiwib3IgZGF0YWJhc2UgYXMiLCJhcyBhIHNvdXJjZSIsImEgc291cmNlIHRoZSIsInNvdXJjZSB0aGUgZ29hbCIsImdvYWwgaXMgdG8iLCJpcyB0byBlbGltaW5hdGUiLCJ0byBlbGltaW5hdGUgcmVzdHJpY3Rpb25zIiwiZWxpbWluYXRlIHJlc3RyaWN0aW9ucyBoZWxkIiwicmVzdHJpY3Rpb25zIGhlbGQgYnkiLCJkYXRhIGFuZCBkYXRhYmFzZSIsImFuZCBkYXRhYmFzZSBvbiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgUEhQIExpY2Vuc2UsIHZlcnNpb24gMy4wIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMDYgVGhlIFBIUCBHcm91cC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBUaGUgbmFtZSBcIlBIUFwiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBncm91cEBwaHAubmV0LlxuXG4gICA0LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCBcIlBIUFwiLCBub3IgbWF5IFwiUEhQXCIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gZ3JvdXBAcGhwLm5ldC4gWW91IG1heSBpbmRpY2F0ZSB0aGF0IHlvdXIgc29mdHdhcmUgd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCBQSFAgYnkgc2F5aW5nIFwiRm9vIGZvciBQSFBcIiBpbnN0ZWFkIG9mIGNhbGxpbmcgaXQgXCJQSFAgRm9vXCIgb3IgXCJwaHBmb29cIlxuXG4gICA1LiBUaGUgUEhQIEdyb3VwIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgbGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gT25jZSBjb3ZlcmVkIGNvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlLCB5b3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBjb3ZlcmVkIGNvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgcHVibGlzaGVkIGJ5IHRoZSBQSFAgR3JvdXAuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBQSFAgR3JvdXAgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gY292ZXJlZCBjb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiBcIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBQSFAsIGZyZWVseSBhdmFpbGFibGUgZnJvbSBcdTAwM2NodHRwOi8vd3d3LnBocC5uZXQvXHUwMDNlXCIuXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBIUCBERVZFTE9QTUVOVCBURUFNIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQSFAgREVWRUxPUE1FTlQgVEVBTSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5UaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIFBIUCBHcm91cC5cblxuVGhlIFBIUCBHcm91cCBjYW4gYmUgY29udGFjdGVkIHZpYSBFbWFpbCBhdCBncm91cEBwaHAubmV0LlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgUEhQIEdyb3VwIGFuZCB0aGUgUEhQIHByb2plY3QsIHBsZWFzZSBzZWUgXHUwMDNjaHR0cDovL3d3dy5waHAubmV0XHUwMDNlLlxuXG5UaGlzIHByb2R1Y3QgaW5jbHVkZXMgdGhlIFplbmQgRW5naW5lLCBmcmVlbHkgYXZhaWxhYmxlIGF0IFx1MDAzY2h0dHA6Ly93d3cuemVuZC5jb21cdTAwM2UuIl0sImxpY2Vuc2VJZHMiOlsiUEhQLTMuMCJdLCJrZXl3b3JkcyI6WyIzIDAgY29weXJpZ2h0IiwiYyAxOTk5IDIwMDYiLCIxOTk5IDIwMDYgdGhlIiwiMjAwNiB0aGUgcGhwIiwiaW5jbHVkZXMgcGhwIGZyZWVseSIsInBocCBmcmVlbHkgYXZhaWxhYmxlIiwibmV0IHRoaXMgc29mdHdhcmUiLCJuZXQgdGhpcyBwcm9kdWN0IiwidmVyc2lvbiAzIDAgY29weXJpZ2h0IiwiMyAwIGNvcHlyaWdodCBjIiwiY29weXJpZ2h0IGMgMTk5OSAyMDA2IiwiYyAxOTk5IDIwMDYgdGhlIiwiMTk5OSAyMDA2IHRoZSBwaHAiLCIyMDA2IHRoZSBwaHAgZ3JvdXAiLCJwcm9kdWN0IGluY2x1ZGVzIHBocCBmcmVlbHkiLCJpbmNsdWRlcyBwaHAgZnJlZWx5IGF2YWlsYWJsZSIsInBocCBmcmVlbHkgYXZhaWxhYmxlIGZyb20iLCJwaHAgbmV0IHRoaXMgc29mdHdhcmUiLCJuZXQgdGhpcyBzb2Z0d2FyZSBpcyIsInBocCBuZXQgdGhpcyBwcm9kdWN0IiwibmV0IHRoaXMgcHJvZHVjdCBpbmNsdWRlcyIsInBocCBsaWNlbnNlIHZlcnNpb24gMyAwIiwibGljZW5zZSB2ZXJzaW9uIDMgMCBjb3B5cmlnaHQiLCJ2ZXJzaW9uIDMgMCBjb3B5cmlnaHQgYyIsIjMgMCBjb3B5cmlnaHQgYyAxOTk5IiwiMCBjb3B5cmlnaHQgYyAxOTk5IDIwMDYiLCJjb3B5cmlnaHQgYyAxOTk5IDIwMDYgdGhlIiwiYyAxOTk5IDIwMDYgdGhlIHBocCIsIjE5OTkgMjAwNiB0aGUgcGhwIGdyb3VwIiwiMjAwNiB0aGUgcGhwIGdyb3VwIGFsbCIsInRoaXMgcHJvZHVjdCBpbmNsdWRlcyBwaHAgZnJlZWx5IiwicHJvZHVjdCBpbmNsdWRlcyBwaHAgZnJlZWx5IGF2YWlsYWJsZSIsImluY2x1ZGVzIHBocCBmcmVlbHkgYXZhaWxhYmxlIGZyb20iLCJwaHAgZnJlZWx5IGF2YWlsYWJsZSBmcm9tIGh0dHAiLCJ3d3cgcGhwIG5ldCB0aGlzIHNvZnR3YXJlIiwicGhwIG5ldCB0aGlzIHNvZnR3YXJlIGlzIiwibmV0IHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQiLCJ3d3cgcGhwIG5ldCB0aGlzIHByb2R1Y3QiLCJwaHAgbmV0IHRoaXMgcHJvZHVjdCBpbmNsdWRlcyIsIm5ldCB0aGlzIHByb2R1Y3QgaW5jbHVkZXMgdGhlIl19LHsibGljZW5zZVRleHRzIjpbIlRoZSBQSFAgTGljZW5zZSwgdmVyc2lvbiAzLjAxIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMTIgVGhlIFBIUCBHcm91cC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBUaGUgbmFtZSBcIlBIUFwiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBncm91cEBwaHAubmV0LlxuXG4gICA0LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCBcIlBIUFwiLCBub3IgbWF5IFwiUEhQXCIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gZ3JvdXBAcGhwLm5ldC4gWW91IG1heSBpbmRpY2F0ZSB0aGF0IHlvdXIgc29mdHdhcmUgd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCBQSFAgYnkgc2F5aW5nIFwiRm9vIGZvciBQSFBcIiBpbnN0ZWFkIG9mIGNhbGxpbmcgaXQgXCJQSFAgRm9vXCIgb3IgXCJwaHBmb29cIlxuXG4gICA1LiBUaGUgUEhQIEdyb3VwIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgbGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gT25jZSBjb3ZlcmVkIGNvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlLCB5b3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBjb3ZlcmVkIGNvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgcHVibGlzaGVkIGJ5IHRoZSBQSFAgR3JvdXAuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBQSFAgR3JvdXAgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gY292ZXJlZCBjb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiBcIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBQSFAgc29mdHdhcmUsIGZyZWVseSBhdmFpbGFibGUgZnJvbSBcdTAwM2NodHRwOi8vd3d3LnBocC5uZXQvc29mdHdhcmUvXHUwMDNlXCIuXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBIUCBERVZFTE9QTUVOVCBURUFNIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQSFAgREVWRUxPUE1FTlQgVEVBTSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5UaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIFBIUCBHcm91cC5cblxuVGhlIFBIUCBHcm91cCBjYW4gYmUgY29udGFjdGVkIHZpYSBFbWFpbCBhdCBncm91cEBwaHAubmV0LlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgUEhQIEdyb3VwIGFuZCB0aGUgUEhQIHByb2plY3QsIHBsZWFzZSBzZWUgXHUwMDNjaHR0cDovL3d3dy5waHAubmV0XHUwMDNlLlxuXG5QSFAgaW5jbHVkZXMgdGhlIFplbmQgRW5naW5lLCBmcmVlbHkgYXZhaWxhYmxlIGF0IFx1MDAzY2h0dHA6Ly93d3cuemVuZC5jb21cdTAwM2UuIl0sImxpY2Vuc2VJZHMiOlsiUEhQLTMuMDEiXSwia2V5d29yZHMiOlsidmVyc2lvbiAzIDAxIiwiMyAwMSBjb3B5cmlnaHQiLCIwMSBjb3B5cmlnaHQgYyIsImMgMTk5OSAyMDEyIiwiMTk5OSAyMDEyIHRoZSIsIjIwMTIgdGhlIHBocCIsImluY2x1ZGVzIHBocCBzb2Z0d2FyZSIsInBocCBzb2Z0d2FyZSBmcmVlbHkiLCJzb2Z0d2FyZSBmcmVlbHkgYXZhaWxhYmxlIiwicGhwIG5ldCBzb2Z0d2FyZSIsIm5ldCBzb2Z0d2FyZSB0aGlzIiwic29mdHdhcmUgdGhpcyBzb2Z0d2FyZSIsInBocCBuZXQgcGhwIiwibmV0IHBocCBpbmNsdWRlcyIsInBocCBpbmNsdWRlcyB0aGUiLCJsaWNlbnNlIHZlcnNpb24gMyAwMSIsInZlcnNpb24gMyAwMSBjb3B5cmlnaHQiLCIzIDAxIGNvcHlyaWdodCBjIiwiMDEgY29weXJpZ2h0IGMgMTk5OSIsImNvcHlyaWdodCBjIDE5OTkgMjAxMiIsImMgMTk5OSAyMDEyIHRoZSIsIjE5OTkgMjAxMiB0aGUgcGhwIiwiMjAxMiB0aGUgcGhwIGdyb3VwIiwicHJvZHVjdCBpbmNsdWRlcyBwaHAgc29mdHdhcmUiLCJpbmNsdWRlcyBwaHAgc29mdHdhcmUgZnJlZWx5IiwicGhwIHNvZnR3YXJlIGZyZWVseSBhdmFpbGFibGUiLCJzb2Z0d2FyZSBmcmVlbHkgYXZhaWxhYmxlIGZyb20iLCJ3d3cgcGhwIG5ldCBzb2Z0d2FyZSIsInBocCBuZXQgc29mdHdhcmUgdGhpcyIsIm5ldCBzb2Z0d2FyZSB0aGlzIHNvZnR3YXJlIiwic29mdHdhcmUgdGhpcyBzb2Z0d2FyZSBpcyIsInd3dyBwaHAgbmV0IHBocCIsInBocCBuZXQgcGhwIGluY2x1ZGVzIiwibmV0IHBocCBpbmNsdWRlcyB0aGUiLCJwaHAgaW5jbHVkZXMgdGhlIHplbmQiLCJwaHAgbGljZW5zZSB2ZXJzaW9uIDMgMDEiLCJsaWNlbnNlIHZlcnNpb24gMyAwMSBjb3B5cmlnaHQiLCJ2ZXJzaW9uIDMgMDEgY29weXJpZ2h0IGMiLCIzIDAxIGNvcHlyaWdodCBjIDE5OTkiLCIwMSBjb3B5cmlnaHQgYyAxOTk5IDIwMTIiLCJjb3B5cmlnaHQgYyAxOTk5IDIwMTIgdGhlIiwiYyAxOTk5IDIwMTIgdGhlIHBocCIsIjE5OTkgMjAxMiB0aGUgcGhwIGdyb3VwIiwiMjAxMiB0aGUgcGhwIGdyb3VwIGFsbCIsInRoaXMgcHJvZHVjdCBpbmNsdWRlcyBwaHAgc29mdHdhcmUiLCJwcm9kdWN0IGluY2x1ZGVzIHBocCBzb2Z0d2FyZSBmcmVlbHkiLCJpbmNsdWRlcyBwaHAgc29mdHdhcmUgZnJlZWx5IGF2YWlsYWJsZSIsInBocCBzb2Z0d2FyZSBmcmVlbHkgYXZhaWxhYmxlIGZyb20iLCJzb2Z0d2FyZSBmcmVlbHkgYXZhaWxhYmxlIGZyb20gaHR0cCIsImh0dHAgd3d3IHBocCBuZXQgc29mdHdhcmUiLCJ3d3cgcGhwIG5ldCBzb2Z0d2FyZSB0aGlzIiwicGhwIG5ldCBzb2Z0d2FyZSB0aGlzIHNvZnR3YXJlIiwibmV0IHNvZnR3YXJlIHRoaXMgc29mdHdhcmUgaXMiLCJzb2Z0d2FyZSB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIiwiaHR0cCB3d3cgcGhwIG5ldCBwaHAiLCJ3d3cgcGhwIG5ldCBwaHAgaW5jbHVkZXMiLCJwaHAgbmV0IHBocCBpbmNsdWRlcyB0aGUiLCJuZXQgcGhwIGluY2x1ZGVzIHRoZSB6ZW5kIiwicGhwIGluY2x1ZGVzIHRoZSB6ZW5kIGVuZ2luZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJQWVRIT04gU09GVFdBUkUgRk9VTkRBVElPTiBMSUNFTlNFIFZFUlNJT04gMlxuXG4gICAxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gdGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIChcIlBTRlwiKSwgYW5kIHRoZSBJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbiAoXCJMaWNlbnNlZVwiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZyB0aGlzIHNvZnR3YXJlIChcIlB5dGhvblwiKSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gYW5kIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uXG5cbiAgIDIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIFBTRiBoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IFBTRidzIExpY2Vuc2UgQWdyZWVtZW50IGFuZCBQU0YncyBub3RpY2Ugb2YgY29weXJpZ2h0LCBpLmUuLCBcIkNvcHlyaWdodCAoYykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjsgQWxsIFJpZ2h0cyBSZXNlcnZlZFwiIGFyZSByZXRhaW5lZCBpbiBQeXRob24gYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS5cblxuICAgMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24gb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZSB0aGUgZGVyaXZhdGl2ZSB3b3JrIGF2YWlsYWJsZSB0byBvdGhlcnMgYXMgcHJvdmlkZWQgaGVyZWluLCB0aGVuIExpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZiB0aGUgY2hhbmdlcyBtYWRlIHRvIFB5dGhvbi5cblxuICAgNC4gUFNGIGlzIG1ha2luZyBQeXRob24gYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuIFwiQVMgSVNcIiBiYXNpcy4gUFNGIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQuIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIFBTRiBNQUtFUyBOTyBBTkQgRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuXG5cbiAgIDUuIFBTRiBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBQWVRIT04gRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUyBBUyBBIFJFU1VMVCBPRiBNT0RJRllJTkcsIERJU1RSSUJVVElORywgT1IgT1RIRVJXSVNFIFVTSU5HIFBZVEhPTiwgT1IgQU5ZIERFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLlxuXG4gICA2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsIGJyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuXG5cbiAgIDcuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIFBTRiBhbmQgTGljZW5zZWUuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgUFNGIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZSBpbiBhIHRyYWRlbWFyayBzZW5zZSB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgb3Igc2VydmljZXMgb2YgTGljZW5zZWUsIG9yIGFueSB0aGlyZCBwYXJ0eS5cblxuICAgOC4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgUHl0aG9uLCBMaWNlbnNlZSBhZ3JlZXMgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIl0sImxpY2Vuc2VJZHMiOlsiUFNGLTIuMCJdLCJrZXl3b3JkcyI6bnVsbH0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIFBhcml0eSBQdWJsaWMgTGljZW5zZSA2LjAuMFxuXG5Db250cmlidXRvcjogY29udHJpYnV0b3IgbmFtZVxuXG5Tb3VyY2UgQ29kZTogc291cmNlXG5cblRoaXMgbGljZW5zZSBsZXRzIHlvdSB1c2UgYW5kIHNoYXJlIHRoaXMgc29mdHdhcmUgZm9yIGZyZWUsIGFzIGxvbmcgYXMgeW91IGNvbnRyaWJ1dGUgc29mdHdhcmUgeW91IG1ha2Ugd2l0aCBpdC4gU3BlY2lmaWNhbGx5OlxuXG5JZiB5b3UgZm9sbG93IHRoZSBydWxlcyBiZWxvdywgeW91IG1heSBkbyBldmVyeXRoaW5nIHdpdGggdGhpcyBzb2Z0d2FyZSB0aGF0IHdvdWxkIG90aGVyd2lzZSBpbmZyaW5nZSBlaXRoZXIgdGhlIGNvbnRyaWJ1dG9yJ3MgY29weXJpZ2h0IGluIGl0LCBhbnkgcGF0ZW50IGNsYWltIHRoZSBjb250cmlidXRvciBjYW4gbGljZW5zZSwgb3IgYm90aC5cblxuICAgMS4gQ29udHJpYnV0ZSBjaGFuZ2VzIGFuZCBhZGRpdGlvbnMgeW91IG1ha2UgdG8gdGhpcyBzb2Z0d2FyZS5cblxuICAgMi4gSWYgeW91IGNvbWJpbmUgdGhpcyBzb2Z0d2FyZSB3aXRoIG90aGVyIHNvZnR3YXJlLCBjb250cmlidXRlIHRoYXQgb3RoZXIgc29mdHdhcmUuXG5cbiAgIDMuIENvbnRyaWJ1dGUgc29mdHdhcmUgeW91IGRldmVsb3AsIGRlcGxveSwgbW9uaXRvciwgb3IgcnVuIHdpdGggdGhpcyBzb2Z0d2FyZS5cblxuICAgNC4gRW5zdXJlIGV2ZXJ5b25lIHdobyBnZXRzIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGZyb20geW91LCBpbiBzb3VyY2UgY29kZSBvciBhbnkgb3RoZXIgZm9ybSwgZ2V0cyB0aGUgdGV4dCBvZiB0aGlzIGxpY2Vuc2UgYW5kIHRoZSBjb250cmlidXRvciBhbmQgc291cmNlIGNvZGUgbGluZXMgYWJvdmUuXG5cbiAgIDUuIERvIG5vdCBtYWtlIGFueSBsZWdhbCBjbGFpbSBhZ2FpbnN0IGFueW9uZSBhY2N1c2luZyB0aGlzIHNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgY2hhbmdlcywgYWxvbmUgb3Igd2l0aCBvdGhlciBzb2Z0d2FyZSwgb2YgaW5mcmluZ2luZyBhbnkgcGF0ZW50IGNsYWltLlxuXG5UbyBjb250cmlidXRlIHNvZnR3YXJlLCBwdWJsaXNoIGFsbCBpdHMgc291cmNlIGNvZGUsIGluIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIGNoYW5nZXMsIHRocm91Z2ggYSBmcmVlbHkgYWNjZXNzaWJsZSBkaXN0cmlidXRpb24gc3lzdGVtIHdpZGVseSB1c2VkIGZvciBzaW1pbGFyIHNvdXJjZSBjb2RlLCBhbmQgbGljZW5zZSBjb250cmlidXRpb25zIG5vdCBhbHJlYWR5IGxpY2Vuc2VkIHRvIHRoZSBwdWJsaWMgb24gdGVybXMgYXMgcGVybWlzc2l2ZSBhcyB0aGlzIGxpY2Vuc2UgYWNjb3JkaW5nbHkuXG5cbllvdSBhcmUgZXhjdXNlZCBmb3IgdW5rbm93aW5nbHkgYnJlYWtpbmcgMSwgMiwgb3IgMyBpZiB5b3UgY29udHJpYnV0ZSBhcyByZXF1aXJlZCwgb3Igc3RvcCBkb2luZyBhbnl0aGluZyByZXF1aXJpbmcgdGhpcyBsaWNlbnNlLCB3aXRoaW4gMzAgZGF5cyBvZiBsZWFybmluZyB5b3UgYnJva2UgdGhlIHJ1bGUuXG5cbioqQXMgZmFyIGFzIHRoZSBsYXcgYWxsb3dzLCB0aGlzIHNvZnR3YXJlIGNvbWVzIGFzIGlzLCB3aXRob3V0IGFueSB3YXJyYW50eSwgYW5kIHRoZSBjb250cmlidXRvciB3aWxsIG5vdCBiZSBsaWFibGUgdG8gYW55b25lIGZvciBhbnkgZGFtYWdlcyByZWxhdGVkIHRvIHRoaXMgc29mdHdhcmUgb3IgdGhpcyBsaWNlbnNlLCBmb3IgYW55IGtpbmQgb2YgbGVnYWwgY2xhaW0uKioiXSwibGljZW5zZUlkcyI6WyJQYXJpdHktNi4wLjAiXSwia2V5d29yZHMiOlsicHVibGljIGxpY2Vuc2UgNiIsImxpY2Vuc2UgNiAwIiwiNiAwIDAiLCIwIGNvbnRyaWJ1dG9yIGNvbnRyaWJ1dG9yIiwiY29udHJpYnV0b3IgY29udHJpYnV0b3IgbmFtZSIsInNvdXJjZSBjb2RlIHNvdXJjZSIsImNvZGUgc291cmNlIHRoaXMiLCJzb3VyY2UgdGhpcyBsaWNlbnNlIiwidGhpcyBsaWNlbnNlIGxldHMiLCJsaWNlbnNlIGxldHMgeW91IiwibGV0cyB5b3UgdXNlIiwieW91IHVzZSBhbmQiLCJmb3IgZnJlZSBhcyIsImZyZWUgYXMgbG9uZyIsImFzIHlvdSBjb250cmlidXRlIiwieW91IGNvbnRyaWJ1dGUgc29mdHdhcmUiLCJzb2Z0d2FyZSB5b3UgbWFrZSIsInlvdSBtYWtlIHdpdGgiLCJtYWtlIHdpdGggaXQiLCJ3aXRoIGl0IHNwZWNpZmljYWxseSIsIml0IHNwZWNpZmljYWxseSBpZiIsInNwZWNpZmljYWxseSBpZiB5b3UiLCJ0aGUgcnVsZXMgYmVsb3ciLCJydWxlcyBiZWxvdyB5b3UiLCJtYXkgZG8gZXZlcnl0aGluZyIsIm90aGVyd2lzZSBpbmZyaW5nZSBlaXRoZXIiLCJpbmZyaW5nZSBlaXRoZXIgdGhlIiwiZWl0aGVyIHRoZSBjb250cmlidXRvciIsImluIGl0IGFueSIsIml0IGFueSBwYXRlbnQiLCJwYXRlbnQgY2xhaW0gdGhlIiwiY2xhaW0gdGhlIGNvbnRyaWJ1dG9yIiwiY29udHJpYnV0b3IgY2FuIGxpY2Vuc2UiLCJsaWNlbnNlIG9yIGJvdGgiLCJvciBib3RoIDEiLCJib3RoIDEgY29udHJpYnV0ZSIsIjEgY29udHJpYnV0ZSBjaGFuZ2VzIiwiY29udHJpYnV0ZSBjaGFuZ2VzIGFuZCIsImFuZCBhZGRpdGlvbnMgeW91IiwiYWRkaXRpb25zIHlvdSBtYWtlIiwibWFrZSB0byB0aGlzIiwic29mdHdhcmUgMiBpZiIsImlmIHlvdSBjb21iaW5lIiwieW91IGNvbWJpbmUgdGhpcyIsImNvbWJpbmUgdGhpcyBzb2Z0d2FyZSIsIm90aGVyIHNvZnR3YXJlIGNvbnRyaWJ1dGUiLCJzb2Z0d2FyZSBjb250cmlidXRlIHRoYXQiLCJjb250cmlidXRlIHRoYXQgb3RoZXIiLCJ0aGF0IG90aGVyIHNvZnR3YXJlIiwib3RoZXIgc29mdHdhcmUgMyIsInNvZnR3YXJlIDMgY29udHJpYnV0ZSIsIjMgY29udHJpYnV0ZSBzb2Z0d2FyZSIsInlvdSBkZXZlbG9wIGRlcGxveSIsImRldmVsb3AgZGVwbG95IG1vbml0b3IiLCJkZXBsb3kgbW9uaXRvciBvciIsIm1vbml0b3Igb3IgcnVuIiwib3IgcnVuIHdpdGgiLCJydW4gd2l0aCB0aGlzIiwidGhpcyBzb2Z0d2FyZSA0Iiwic29mdHdhcmUgNCBlbnN1cmUiLCI0IGVuc3VyZSBldmVyeW9uZSIsImVuc3VyZSBldmVyeW9uZSB3aG8iLCJ5b3UgaW4gc291cmNlIiwib3RoZXIgZm9ybSBnZXRzIiwiZm9ybSBnZXRzIHRoZSIsImxpbmVzIGFib3ZlIDUiLCJhYm92ZSA1IGRvIiwiNSBkbyBub3QiLCJvdGhlciBzb2Z0d2FyZSBvZiIsInNvZnR3YXJlIG9mIGluZnJpbmdpbmciLCJwYXRlbnQgY2xhaW0gdG8iLCJjbGFpbSB0byBjb250cmlidXRlIiwidG8gY29udHJpYnV0ZSBzb2Z0d2FyZSIsImNvbnRyaWJ1dGUgc29mdHdhcmUgcHVibGlzaCIsInNvZnR3YXJlIHB1Ymxpc2ggYWxsIiwicHVibGlzaCBhbGwgaXRzIiwiYWxsIGl0cyBzb3VyY2UiLCJjb2RlIGFuZCBsaWNlbnNlIiwiYW5kIGxpY2Vuc2UgY29udHJpYnV0aW9ucyIsImxpY2Vuc2UgY29udHJpYnV0aW9ucyBub3QiLCJjb250cmlidXRpb25zIG5vdCBhbHJlYWR5IiwiYWxyZWFkeSBsaWNlbnNlZCB0byIsInRoZSBwdWJsaWMgb24iLCJwdWJsaWMgb24gdGVybXMiLCJvbiB0ZXJtcyBhcyIsInRlcm1zIGFzIHBlcm1pc3NpdmUiLCJhcyBwZXJtaXNzaXZlIGFzIiwicGVybWlzc2l2ZSBhcyB0aGlzIiwidGhpcyBsaWNlbnNlIGFjY29yZGluZ2x5IiwibGljZW5zZSBhY2NvcmRpbmdseSB5b3UiLCJhY2NvcmRpbmdseSB5b3UgYXJlIiwieW91IGFyZSBleGN1c2VkIiwiYXJlIGV4Y3VzZWQgZm9yIiwidW5rbm93aW5nbHkgYnJlYWtpbmcgMSIsImJyZWFraW5nIDEgMiIsIjIgb3IgMyIsIm9yIDMgaWYiLCJ5b3UgY29udHJpYnV0ZSBhcyIsImxpY2Vuc2Ugd2l0aGluIDMwIiwidGhlIHJ1bGUgYXMiLCJydWxlIGFzIGZhciIsInRoZSBjb250cmlidXRvciB3aWxsIiwiY29udHJpYnV0b3Igd2lsbCBub3QiLCJwYXJpdHkgcHVibGljIGxpY2Vuc2UgNiIsInB1YmxpYyBsaWNlbnNlIDYgMCIsImxpY2Vuc2UgNiAwIDAiLCI2IDAgMCBjb250cmlidXRvciIsIjAgMCBjb250cmlidXRvciBjb250cmlidXRvciIsIjAgY29udHJpYnV0b3IgY29udHJpYnV0b3IgbmFtZSIsImNvbnRyaWJ1dG9yIGNvbnRyaWJ1dG9yIG5hbWUgc291cmNlIiwibmFtZSBzb3VyY2UgY29kZSBzb3VyY2UiLCJzb3VyY2UgY29kZSBzb3VyY2UgdGhpcyIsImNvZGUgc291cmNlIHRoaXMgbGljZW5zZSIsInNvdXJjZSB0aGlzIGxpY2Vuc2UgbGV0cyIsInRoaXMgbGljZW5zZSBsZXRzIHlvdSIsImxpY2Vuc2UgbGV0cyB5b3UgdXNlIiwibGV0cyB5b3UgdXNlIGFuZCIsInlvdSB1c2UgYW5kIHNoYXJlIiwic29mdHdhcmUgZm9yIGZyZWUgYXMiLCJmb3IgZnJlZSBhcyBsb25nIiwiZnJlZSBhcyBsb25nIGFzIiwibG9uZyBhcyB5b3UgY29udHJpYnV0ZSIsImFzIHlvdSBjb250cmlidXRlIHNvZnR3YXJlIiwieW91IGNvbnRyaWJ1dGUgc29mdHdhcmUgeW91IiwiY29udHJpYnV0ZSBzb2Z0d2FyZSB5b3UgbWFrZSIsInNvZnR3YXJlIHlvdSBtYWtlIHdpdGgiLCJ5b3UgbWFrZSB3aXRoIGl0IiwibWFrZSB3aXRoIGl0IHNwZWNpZmljYWxseSIsIndpdGggaXQgc3BlY2lmaWNhbGx5IGlmIiwiaXQgc3BlY2lmaWNhbGx5IGlmIHlvdSIsInNwZWNpZmljYWxseSBpZiB5b3UgZm9sbG93IiwiZm9sbG93IHRoZSBydWxlcyBiZWxvdyIsInRoZSBydWxlcyBiZWxvdyB5b3UiLCJydWxlcyBiZWxvdyB5b3UgbWF5IiwiYmVsb3cgeW91IG1heSBkbyIsInlvdSBtYXkgZG8gZXZlcnl0aGluZyIsIm1heSBkbyBldmVyeXRoaW5nIHdpdGgiLCJ3b3VsZCBvdGhlcndpc2UgaW5mcmluZ2UgZWl0aGVyIiwib3RoZXJ3aXNlIGluZnJpbmdlIGVpdGhlciB0aGUiLCJpbmZyaW5nZSBlaXRoZXIgdGhlIGNvbnRyaWJ1dG9yIiwiZWl0aGVyIHRoZSBjb250cmlidXRvciBzIiwidGhlIGNvbnRyaWJ1dG9yIHMgY29weXJpZ2h0IiwiY29weXJpZ2h0IGluIGl0IGFueSIsImluIGl0IGFueSBwYXRlbnQiLCJpdCBhbnkgcGF0ZW50IGNsYWltIiwiYW55IHBhdGVudCBjbGFpbSB0aGUiLCJwYXRlbnQgY2xhaW0gdGhlIGNvbnRyaWJ1dG9yIiwiY2xhaW0gdGhlIGNvbnRyaWJ1dG9yIGNhbiIsInRoZSBjb250cmlidXRvciBjYW4gbGljZW5zZSIsImNvbnRyaWJ1dG9yIGNhbiBsaWNlbnNlIG9yIiwiY2FuIGxpY2Vuc2Ugb3IgYm90aCIsImxpY2Vuc2Ugb3IgYm90aCAxIiwib3IgYm90aCAxIGNvbnRyaWJ1dGUiLCJib3RoIDEgY29udHJpYnV0ZSBjaGFuZ2VzIiwiMSBjb250cmlidXRlIGNoYW5nZXMgYW5kIiwiY29udHJpYnV0ZSBjaGFuZ2VzIGFuZCBhZGRpdGlvbnMiLCJjaGFuZ2VzIGFuZCBhZGRpdGlvbnMgeW91IiwiYW5kIGFkZGl0aW9ucyB5b3UgbWFrZSIsImFkZGl0aW9ucyB5b3UgbWFrZSB0byIsInlvdSBtYWtlIHRvIHRoaXMiLCJtYWtlIHRvIHRoaXMgc29mdHdhcmUiLCJ0byB0aGlzIHNvZnR3YXJlIDIiLCJ0aGlzIHNvZnR3YXJlIDIgaWYiLCJzb2Z0d2FyZSAyIGlmIHlvdSIsIjIgaWYgeW91IGNvbWJpbmUiLCJpZiB5b3UgY29tYmluZSB0aGlzIiwieW91IGNvbWJpbmUgdGhpcyBzb2Z0d2FyZSIsImNvbWJpbmUgdGhpcyBzb2Z0d2FyZSB3aXRoIiwidGhpcyBzb2Z0d2FyZSB3aXRoIG90aGVyIiwid2l0aCBvdGhlciBzb2Z0d2FyZSBjb250cmlidXRlIiwib3RoZXIgc29mdHdhcmUgY29udHJpYnV0ZSB0aGF0Iiwic29mdHdhcmUgY29udHJpYnV0ZSB0aGF0IG90aGVyIiwiY29udHJpYnV0ZSB0aGF0IG90aGVyIHNvZnR3YXJlIiwidGhhdCBvdGhlciBzb2Z0d2FyZSAzIiwib3RoZXIgc29mdHdhcmUgMyBjb250cmlidXRlIiwic29mdHdhcmUgMyBjb250cmlidXRlIHNvZnR3YXJlIiwiMyBjb250cmlidXRlIHNvZnR3YXJlIHlvdSIsInNvZnR3YXJlIHlvdSBkZXZlbG9wIGRlcGxveSIsInlvdSBkZXZlbG9wIGRlcGxveSBtb25pdG9yIiwiZGV2ZWxvcCBkZXBsb3kgbW9uaXRvciBvciIsImRlcGxveSBtb25pdG9yIG9yIHJ1biIsIm1vbml0b3Igb3IgcnVuIHdpdGgiLCJvciBydW4gd2l0aCB0aGlzIiwicnVuIHdpdGggdGhpcyBzb2Z0d2FyZSIsIndpdGggdGhpcyBzb2Z0d2FyZSA0IiwidGhpcyBzb2Z0d2FyZSA0IGVuc3VyZSIsInNvZnR3YXJlIDQgZW5zdXJlIGV2ZXJ5b25lIiwiNCBlbnN1cmUgZXZlcnlvbmUgd2hvIiwiZW5zdXJlIGV2ZXJ5b25lIHdobyBnZXRzIiwic29mdHdhcmUgZnJvbSB5b3UgaW4iLCJmcm9tIHlvdSBpbiBzb3VyY2UiLCJ5b3UgaW4gc291cmNlIGNvZGUiLCJjb2RlIG9yIGFueSBvdGhlciIsImFueSBvdGhlciBmb3JtIGdldHMiLCJvdGhlciBmb3JtIGdldHMgdGhlIiwiZm9ybSBnZXRzIHRoZSB0ZXh0IiwiY29kZSBsaW5lcyBhYm92ZSA1IiwibGluZXMgYWJvdmUgNSBkbyIsImFib3ZlIDUgZG8gbm90IiwiNSBkbyBub3QgbWFrZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyIjIFRoZSBQYXJpdHkgUHVibGljIExpY2Vuc2UgNy4wLjBcblxuQ29udHJpYnV0b3I6IG5hbWVcblxuU291cmNlIENvZGU6IGFkZHJlc3NcblxuIyMgUHVycG9zZVxuXG5UaGlzIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgYW5kIHNoYXJlIHRoaXMgc29mdHdhcmUgZm9yIGZyZWUsIGJ1dCB5b3UgaGF2ZSB0byBzaGFyZSBzb2Z0d2FyZSB0aGF0IGJ1aWxkcyBvbiBpdCBhbGlrZS5cblxuIyMgQWdyZWVtZW50XG5cbkluIG9yZGVyIHRvIHJlY2VpdmUgdGhpcyBsaWNlbnNlLCB5b3UgaGF2ZSB0byBhZ3JlZSB0byBpdHMgcnVsZXMuIFRob3NlIHJ1bGVzIGFyZSBib3RoIG9ibGlnYXRpb25zIHVuZGVyIHRoYXQgYWdyZWVtZW50IGFuZCBjb25kaXRpb25zIHRvIHlvdXIgbGljZW5zZS4gRG9uJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGlzIHNvZnR3YXJlIHRoYXQgdHJpZ2dlcnMgYSBydWxlIHlvdSBjYW4ndCBvciB3b24ndCBmb2xsb3cuXG5cbiMjIE5vdGljZXNcblxuTWFrZSBzdXJlIGV2ZXJ5b25lIHdobyBnZXRzIGEgY29weSBvZiBhbnkgcGFydCBvZiB0aGlzIHNvZnR3YXJlIGZyb20geW91LCB3aXRoIG9yIHdpdGhvdXQgY2hhbmdlcywgYWxzbyBnZXRzIHRoZSB0ZXh0IG9mIHRoaXMgbGljZW5zZSBhbmQgdGhlIGNvbnRyaWJ1dG9yIGFuZCBzb3VyY2UgY29kZSBsaW5lcyBhYm92ZS5cblxuIyMgQ29weWxlZnRcblxuW0NvbnRyaWJ1dGVdKCNjb250cmlidXRlKSBzb2Z0d2FyZSB5b3UgZGV2ZWxvcCwgb3BlcmF0ZSwgb3IgYW5hbHl6ZSB3aXRoIHRoaXMgc29mdHdhcmUsIGluY2x1ZGluZyBjaGFuZ2VzIG9yIGFkZGl0aW9ucyB0byB0aGlzIHNvZnR3YXJlLiBXaGVuIGluIGRvdWJ0LCBbY29udHJpYnV0ZV0oI2NvbnRyaWJ1dGUpIC5cblxuIyMgUHJvdG90eXBlc1xuXG5Zb3UgZG9uJ3QgaGF2ZSB0byBbY29udHJpYnV0ZV0oI2NvbnRyaWJ1dGUpIGFueSBjaGFuZ2UsIGFkZGl0aW9uLCBvciBvdGhlciBzb2Z0d2FyZSB0aGF0IG1lZXRzIGFsbCB0aGVzZSBjcml0ZXJpYTpcblxuICAgMS4gWW91IGRvbid0IHVzZSBpdCBmb3IgbW9yZSB0aGFuIHRoaXJ0eSBkYXlzLlxuXG4gICAyLiBZb3UgZG9uJ3Qgc2hhcmUgaXQgb3V0c2lkZSB0aGUgdGVhbSBkZXZlbG9waW5nIGl0LCBvdGhlciB0aGFuIGZvciBub24tcHJvZHVjdGlvbiB1c2VyIHRlc3RpbmcuXG5cbiAgIDMuIFlvdSBkb24ndCBkZXZlbG9wLCBvcGVyYXRlLCBvciBhbmFseXplIG90aGVyIHNvZnR3YXJlIHdpdGggaXQgZm9yIGFueW9uZSBvdXRzaWRlIHRoZSB0ZWFtIGRldmVsb3BpbmcgaXQuXG5cbiMjIFJldmVyc2UgRW5naW5lZXJpbmdcblxuWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSB0byBvcGVyYXRlIGFuZCBhbmFseXplIHNvZnR3YXJlIHlvdSBjYW4ndCBbY29udHJpYnV0ZV0oI2NvbnRyaWJ1dGUpIGluIG9yZGVyIHRvIGRldmVsb3AgYWx0ZXJuYXRpdmVzIHlvdSBjYW4gYW5kIGRvIFtjb250cmlidXRlXSgjY29udHJpYnV0ZSkgLlxuXG4jIyBDb250cmlidXRlXG5cblRvIFtjb250cmlidXRlXSgjY29udHJpYnV0ZSkgc29mdHdhcmU6XG5cbiAgIDEuIFB1Ymxpc2ggYWxsIHNvdXJjZSBjb2RlIGZvciB0aGUgc29mdHdhcmUgaW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgY2hhbmdlcyB0aHJvdWdoIGEgZnJlZWx5IGFjY2Vzc2libGUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aWRlbHkgdXNlZCBmb3Igc2ltaWxhciBzb3VyY2UgY29kZSBzbyB0aGUgY29udHJpYnV0b3IgYW5kIG90aGVycyBjYW4gZmluZCBhbmQgY29weSBpdC5cblxuICAgMi4gTWFrZSBzdXJlIGV2ZXJ5IHBhcnQgb2YgdGhlIHNvdXJjZSBjb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGlzIGxpY2Vuc2Ugb3IgYW5vdGhlciBsaWNlbnNlIHRoYXQgYWxsb3dzIGV2ZXJ5dGhpbmcgdGhpcyBsaWNlbnNlIGRvZXMsIHN1Y2ggYXMgW3RoZSBCbHVlIE9hayBNb2RlbCBMaWNlbnNlIDEuMC4wXShodHRwczovL2JsdWVvYWtjb3VuY2lsLm9yZy9saWNlbnNlLzEuMC4wKSwgW3RoZSBBcGFjaGUgTGljZW5zZSAyLjBdKGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAuaHRtbCksIFt0aGUgTUlUIGxpY2Vuc2VdKGh0dHBzOi8vc3BkeC5vcmcvbGljZW5zZXMvTUlULmh0bWwpLCBvciBbdGhlIHR3by1jbGF1c2UgQlNEIGxpY2Vuc2VdKGh0dHBzOi8vc3BkeC5vcmcvbGljZW5zZXMvQlNELTItQ2xhdXNlLmh0bWwpLlxuXG4gICAzLiBUYWtlIHRoZXNlIHN0ZXBzIHdpdGhpbiB0aGlydHkgZGF5cy5cblxuICAgNC4gTm90ZSB0aGF0IHRoaXMgbGljZW5zZSBkb2VzIF9ub3RfIGFsbG93IHlvdSB0byBjaGFuZ2UgdGhlIGxpY2Vuc2UgdGVybXMgZm9yIHRoaXMgc29mdHdhcmUuIFlvdSBtdXN0IGZvbGxvdyBbTm90aWNlc10oI25vdGljZXMpIC5cblxuIyMgRXhjdXNlXG5cbllvdSdyZSBleGN1c2VkIGZvciB1bmtub3dpbmdseSBicmVha2luZyBbQ29weWxlZnRdKCNjb3B5bGVmdCkgaWYgeW91IFtjb250cmlidXRlXSgjY29udHJpYnV0ZSkgYXMgcmVxdWlyZWQsIG9yIHN0b3AgZG9pbmcgYW55dGhpbmcgcmVxdWlyaW5nIHRoaXMgbGljZW5zZSwgd2l0aGluIHRoaXJ0eSBkYXlzIG9mIGxlYXJuaW5nIHlvdSBicm9rZSB0aGUgcnVsZS4gWW91J3JlIGV4Y3VzZWQgZm9yIHVua25vd2luZ2x5IGJyZWFraW5nIFtOb3RpY2VzXSgjbm90aWNlcykgaWYgeW91IHRha2UgYWxsIHByYWN0aWNhbCBzdGVwcyB0byBjb21wbHkgd2l0aGluIHRoaXJ0eSBkYXlzIG9mIGxlYXJuaW5nIHlvdSBicm9rZSB0aGUgcnVsZS5cblxuIyMgRGVmZW5zZVxuXG5Eb24ndCBtYWtlIGFueSBsZWdhbCBjbGFpbSBhZ2FpbnN0IGFueW9uZSBhY2N1c2luZyB0aGlzIHNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgY2hhbmdlcywgYWxvbmUgb3Igd2l0aCBvdGhlciB0ZWNobm9sb2d5LCBvZiBpbmZyaW5naW5nIGFueSBwYXRlbnQuXG5cbiMjIENvcHlyaWdodFxuXG5UaGUgY29udHJpYnV0b3IgbGljZW5zZXMgeW91IHRvIGRvIGV2ZXJ5dGhpbmcgd2l0aCB0aGlzIHNvZnR3YXJlIHRoYXQgd291bGQgb3RoZXJ3aXNlIGluZnJpbmdlIHRoZWlyIGNvcHlyaWdodCBpbiBpdC5cblxuIyMgUGF0ZW50XG5cblRoZSBjb250cmlidXRvciBsaWNlbnNlcyB5b3UgdG8gZG8gZXZlcnl0aGluZyB3aXRoIHRoaXMgc29mdHdhcmUgdGhhdCB3b3VsZCBvdGhlcndpc2UgaW5mcmluZ2UgYW55IHBhdGVudHMgdGhleSBjYW4gbGljZW5zZSBvciBiZWNvbWUgYWJsZSB0byBsaWNlbnNlLlxuXG4jIyBSZWxpYWJpbGl0eVxuXG5UaGUgY29udHJpYnV0b3IgY2FuJ3QgcmV2b2tlIHRoaXMgbGljZW5zZS5cblxuIyMgTm8gTGlhYmlsaXR5XG5cbioqKkFzIGZhciBhcyB0aGUgbGF3IGFsbG93cywgdGhpcyBzb2Z0d2FyZSBjb21lcyBhcyBpcywgd2l0aG91dCBhbnkgd2FycmFudHkgb3IgY29uZGl0aW9uLCBhbmQgdGhlIGNvbnRyaWJ1dG9yIHdvbid0IGJlIGxpYWJsZSB0byBhbnlvbmUgZm9yIGFueSBkYW1hZ2VzIHJlbGF0ZWQgdG8gdGhpcyBzb2Z0d2FyZSBvciB0aGlzIGxpY2Vuc2UsIHVuZGVyIGFueSBraW5kIG9mIGxlZ2FsIGNsYWltLioqKiJdLCJsaWNlbnNlSWRzIjpbIlBhcml0eS03LjAuMCJdLCJrZXl3b3JkcyI6WyJwdWJsaWMgbGljZW5zZSA3IiwibGljZW5zZSA3IDAiLCI3IDAgMCIsIjAgY29udHJpYnV0b3IgbmFtZSIsInNvdXJjZSBjb2RlIGFkZHJlc3MiLCJjb2RlIGFkZHJlc3MgcHVycG9zZSIsImFkZHJlc3MgcHVycG9zZSB0aGlzIiwidGhpcyBsaWNlbnNlIGFsbG93cyIsImxpY2Vuc2UgYWxsb3dzIHlvdSIsImZvciBmcmVlIGJ1dCIsImZyZWUgYnV0IHlvdSIsImJ1dCB5b3UgaGF2ZSIsInRvIHNoYXJlIHNvZnR3YXJlIiwic2hhcmUgc29mdHdhcmUgdGhhdCIsInNvZnR3YXJlIHRoYXQgYnVpbGRzIiwidGhhdCBidWlsZHMgb24iLCJidWlsZHMgb24gaXQiLCJvbiBpdCBhbGlrZSIsIml0IGFsaWtlIGFncmVlbWVudCIsImFsaWtlIGFncmVlbWVudCBpbiIsImFncmVlbWVudCBpbiBvcmRlciIsImhhdmUgdG8gYWdyZWUiLCJ0byBhZ3JlZSB0byIsIml0cyBydWxlcyB0aG9zZSIsInJ1bGVzIHRob3NlIHJ1bGVzIiwidGhvc2UgcnVsZXMgYXJlIiwicnVsZXMgYXJlIGJvdGgiLCJ5b3VyIGxpY2Vuc2UgZG9uIiwibGljZW5zZSBkb24gdCIsImRvbiB0IGRvIiwidCBkbyBhbnl0aGluZyIsInJ1bGUgeW91IGNhbiIsImNhbiB0IG9yIiwidCBvciB3b24iLCJvciB3b24gdCIsIndvbiB0IGZvbGxvdyIsInQgZm9sbG93IG5vdGljZXMiLCJmb2xsb3cgbm90aWNlcyBtYWtlIiwibm90aWNlcyBtYWtlIHN1cmUiLCJtYWtlIHN1cmUgZXZlcnlvbmUiLCJzdXJlIGV2ZXJ5b25lIHdobyIsImxpbmVzIGFib3ZlIGNvcHlsZWZ0IiwiYWJvdmUgY29weWxlZnQgY29udHJpYnV0ZSIsImNvcHlsZWZ0IGNvbnRyaWJ1dGUgY29udHJpYnV0ZSIsInlvdSBkZXZlbG9wIG9wZXJhdGUiLCJvciBhbmFseXplIHdpdGgiLCJhbmFseXplIHdpdGggdGhpcyIsInNvZnR3YXJlIGluY2x1ZGluZyBjaGFuZ2VzIiwiaW5jbHVkaW5nIGNoYW5nZXMgb3IiLCJ0aGlzIHNvZnR3YXJlIHdoZW4iLCJzb2Z0d2FyZSB3aGVuIGluIiwid2hlbiBpbiBkb3VidCIsImluIGRvdWJ0IGNvbnRyaWJ1dGUiLCJkb3VidCBjb250cmlidXRlIGNvbnRyaWJ1dGUiLCJjb250cmlidXRlIGNvbnRyaWJ1dGUgcHJvdG90eXBlcyIsImNvbnRyaWJ1dGUgcHJvdG90eXBlcyB5b3UiLCJwcm90b3R5cGVzIHlvdSBkb24iLCJoYXZlIHRvIGNvbnRyaWJ1dGUiLCJjb250cmlidXRlIGNvbnRyaWJ1dGUgYW55IiwiY29udHJpYnV0ZSBhbnkgY2hhbmdlIiwiYW55IGNoYW5nZSBhZGRpdGlvbiIsImNoYW5nZSBhZGRpdGlvbiBvciIsImFkZGl0aW9uIG9yIG90aGVyIiwic29mdHdhcmUgdGhhdCBtZWV0cyIsInRoYXQgbWVldHMgYWxsIiwibWVldHMgYWxsIHRoZXNlIiwiYWxsIHRoZXNlIGNyaXRlcmlhIiwidGhlc2UgY3JpdGVyaWEgMSIsImNyaXRlcmlhIDEgeW91IiwiMSB5b3UgZG9uIiwiZG9uIHQgdXNlIiwidCB1c2UgaXQiLCJpdCBmb3IgbW9yZSIsImZvciBtb3JlIHRoYW4iLCJtb3JlIHRoYW4gdGhpcnR5IiwidGhhbiB0aGlydHkgZGF5cyIsInRoaXJ0eSBkYXlzIDIiLCJkYXlzIDIgeW91IiwiMiB5b3UgZG9uIiwiZG9uIHQgc2hhcmUiLCJ0IHNoYXJlIGl0Iiwic2hhcmUgaXQgb3V0c2lkZSIsIml0IG91dHNpZGUgdGhlIiwiZGV2ZWxvcGluZyBpdCBvdGhlciIsImZvciBub24gcHJvZHVjdGlvbiIsIm5vbiBwcm9kdWN0aW9uIHVzZXIiLCJwcm9kdWN0aW9uIHVzZXIgdGVzdGluZyIsInVzZXIgdGVzdGluZyAzIiwidGVzdGluZyAzIHlvdSIsIjMgeW91IGRvbiIsImRvbiB0IGRldmVsb3AiLCJ0IGRldmVsb3Agb3BlcmF0ZSIsIm9yIGFuYWx5emUgb3RoZXIiLCJhbmFseXplIG90aGVyIHNvZnR3YXJlIiwib3RoZXIgc29mdHdhcmUgd2l0aCIsInNvZnR3YXJlIHdpdGggaXQiLCJ3aXRoIGl0IGZvciIsIml0IGZvciBhbnlvbmUiLCJmb3IgYW55b25lIG91dHNpZGUiLCJhbnlvbmUgb3V0c2lkZSB0aGUiLCJkZXZlbG9waW5nIGl0IHJldmVyc2UiLCJpdCByZXZlcnNlIGVuZ2luZWVyaW5nIiwicmV2ZXJzZSBlbmdpbmVlcmluZyB5b3UiLCJlbmdpbmVlcmluZyB5b3UgbWF5IiwidGhpcyBzb2Z0d2FyZSB0byIsInNvZnR3YXJlIHRvIG9wZXJhdGUiLCJ0byBvcGVyYXRlIGFuZCIsIm9wZXJhdGUgYW5kIGFuYWx5emUiLCJhbmQgYW5hbHl6ZSBzb2Z0d2FyZSIsImFuYWx5emUgc29mdHdhcmUgeW91IiwiY2FuIHQgY29udHJpYnV0ZSIsInQgY29udHJpYnV0ZSBjb250cmlidXRlIiwiY29udHJpYnV0ZSBjb250cmlidXRlIGluIiwiY29udHJpYnV0ZSBpbiBvcmRlciIsIm9yZGVyIHRvIGRldmVsb3AiLCJ0byBkZXZlbG9wIGFsdGVybmF0aXZlcyIsImRldmVsb3AgYWx0ZXJuYXRpdmVzIHlvdSIsImFsdGVybmF0aXZlcyB5b3UgY2FuIiwieW91IGNhbiBhbmQiLCJjYW4gYW5kIGRvIiwiYW5kIGRvIGNvbnRyaWJ1dGUiLCJkbyBjb250cmlidXRlIGNvbnRyaWJ1dGUiLCJjb250cmlidXRlIGNvbnRyaWJ1dGUgY29udHJpYnV0ZSIsImNvbnRyaWJ1dGUgY29udHJpYnV0ZSB0byIsImNvbnRyaWJ1dGUgdG8gY29udHJpYnV0ZSIsImNvbnRyaWJ1dGUgc29mdHdhcmUgMSIsInNvZnR3YXJlIDEgcHVibGlzaCIsIjEgcHVibGlzaCBhbGwiLCJwdWJsaXNoIGFsbCBzb3VyY2UiLCJjb2RlIHNvIHRoZSIsInNvIHRoZSBjb250cmlidXRvciIsImNvbnRyaWJ1dG9yIGFuZCBvdGhlcnMiLCJhbmQgb3RoZXJzIGNhbiIsIm90aGVycyBjYW4gZmluZCIsImNhbiBmaW5kIGFuZCIsImZpbmQgYW5kIGNvcHkiLCJhbmQgY29weSBpdCIsImNvcHkgaXQgMiIsIml0IDIgbWFrZSIsIjIgbWFrZSBzdXJlIiwibWFrZSBzdXJlIGV2ZXJ5Iiwic3VyZSBldmVyeSBwYXJ0IiwiZXZlcnkgcGFydCBvZiIsImFub3RoZXIgbGljZW5zZSB0aGF0IiwibGljZW5zZSB0aGF0IGFsbG93cyIsInRoYXQgYWxsb3dzIGV2ZXJ5dGhpbmciLCJhbGxvd3MgZXZlcnl0aGluZyB0aGlzIiwiZXZlcnl0aGluZyB0aGlzIGxpY2Vuc2UiLCJsaWNlbnNlIGRvZXMgc3VjaCIsImRvZXMgc3VjaCBhcyIsImFzIHRoZSBibHVlIiwidGhlIGJsdWUgb2FrIiwibW9kZWwgbGljZW5zZSAxIiwiMCBodHRwcyBibHVlb2FrY291bmNpbCIsIjAgMCB0aGUiLCIwIHRoZSBhcGFjaGUiLCIyIDAgaHR0cHMiLCIwIGh0dHBzIHd3dyIsImh0dHBzIHd3dyBhcGFjaGUiLCIyIDAgaHRtbCIsIjAgaHRtbCB0aGUiLCJodG1sIHRoZSBtaXQiLCJtaXQgbGljZW5zZSBodHRwcyIsIm9yZyBsaWNlbnNlcyBtaXQiLCJsaWNlbnNlcyBtaXQgaHRtbCIsIm1pdCBodG1sIG9yIiwiaHRtbCBvciB0aGUiLCJvciB0aGUgdHdvIiwidGhlIHR3byBjbGF1c2UiLCJ0d28gY2xhdXNlIGJzZCIsImNsYXVzZSBic2QgbGljZW5zZSIsImJzZCBsaWNlbnNlIGh0dHBzIiwib3JnIGxpY2Vuc2VzIGJzZCIsImxpY2Vuc2VzIGJzZCAyIiwiYnNkIDIgY2xhdXNlIiwiMiBjbGF1c2UgaHRtbCIsImNsYXVzZSBodG1sIDMiLCJodG1sIDMgdGFrZSIsIjMgdGFrZSB0aGVzZSIsInRha2UgdGhlc2Ugc3RlcHMiLCJ0aGVzZSBzdGVwcyB3aXRoaW4iLCJzdGVwcyB3aXRoaW4gdGhpcnR5IiwidGhpcnR5IGRheXMgNCIsImRheXMgNCBub3RlIiwiNCBub3RlIHRoYXQiLCJ5b3UgdG8gY2hhbmdlIiwibGljZW5zZSB0ZXJtcyBmb3IiLCJ0ZXJtcyBmb3IgdGhpcyIsInlvdSBtdXN0IGZvbGxvdyIsIm11c3QgZm9sbG93IG5vdGljZXMiLCJmb2xsb3cgbm90aWNlcyBub3RpY2VzIiwibm90aWNlcyBub3RpY2VzIGV4Y3VzZSIsIm5vdGljZXMgZXhjdXNlIHlvdSIsImV4Y3VzZSB5b3UgcmUiLCJ1bmtub3dpbmdseSBicmVha2luZyBjb3B5bGVmdCIsImJyZWFraW5nIGNvcHlsZWZ0IGNvcHlsZWZ0IiwiY29weWxlZnQgY29weWxlZnQgaWYiLCJjb3B5bGVmdCBpZiB5b3UiLCJ5b3UgY29udHJpYnV0ZSBjb250cmlidXRlIiwiY29udHJpYnV0ZSBjb250cmlidXRlIGFzIl19LHsibGljZW5zZVRleHRzIjpbIkNvcHlyaWdodCAyMDAyIChDKSBUaGUgQ29kZWhhdXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIChcIlNvZnR3YXJlXCIpLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiBjb3B5cmlnaHQgc3RhdGVtZW50cyBhbmQgbm90aWNlcy4gUmVkaXN0cmlidXRpb25zIG11c3QgYWxzbyBjb250YWluIGEgY29weSBvZiB0aGlzIGRvY3VtZW50LlxuXG4gICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgIDMuIFRoZSBuYW1lIFwiY2xhc3N3b3JsZHNcIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBUaGUgQ29kZWhhdXMgLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBib2JAY29kZWhhdXMub3JnIC5cblxuICAgNC4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgXCJjbGFzc3dvcmxkc1wiIG5vciBtYXkgXCJjbGFzc3dvcmxkc1wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBUaGUgQ29kZWhhdXMgLiBcImNsYXNzd29ybGRzXCIgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBUaGUgQ29kZWhhdXMgLlxuXG4gICA1LiBEdWUgY3JlZGl0IHNob3VsZCBiZSBnaXZlbiB0byBUaGUgQ29kZWhhdXMuIChodHRwOi8vY2xhc3N3b3JsZHMuY29kZWhhdXMub3JnLykgLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT0RFSEFVUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT0RFSEFVUyBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiJdLCJsaWNlbnNlSWRzIjpbIlBsZXh1cyJdLCJrZXl3b3JkcyI6WyJjb3B5cmlnaHQgMjAwMiBjIiwiMjAwMiBjIHRoZSIsImMgdGhlIGNvZGVoYXVzIiwidGhlIGNvZGVoYXVzIGFsbCIsImNvZGVoYXVzIGFsbCByaWdodHMiLCJ0aGUgbmFtZSBjbGFzc3dvcmxkcyIsIm5hbWUgY2xhc3N3b3JsZHMgbXVzdCIsImNsYXNzd29ybGRzIG11c3Qgbm90IiwidGhlIGNvZGVoYXVzIGZvciIsImNvZGVoYXVzIGZvciB3cml0dGVuIiwicGxlYXNlIGNvbnRhY3QgYm9iIiwiY29udGFjdCBib2IgY29kZWhhdXMiLCJib2IgY29kZWhhdXMgb3JnIiwiY29kZWhhdXMgb3JnIDQiLCJiZSBjYWxsZWQgY2xhc3N3b3JsZHMiLCJjYWxsZWQgY2xhc3N3b3JsZHMgbm9yIiwiY2xhc3N3b3JsZHMgbm9yIG1heSIsIm5vciBtYXkgY2xhc3N3b3JsZHMiLCJtYXkgY2xhc3N3b3JsZHMgYXBwZWFyIiwiY2xhc3N3b3JsZHMgYXBwZWFyIGluIiwidGhlIGNvZGVoYXVzIGNsYXNzd29ybGRzIiwiY29kZWhhdXMgY2xhc3N3b3JsZHMgaXMiLCJjbGFzc3dvcmxkcyBpcyBhIiwidGhlIGNvZGVoYXVzIDUiLCJjb2RlaGF1cyA1IGR1ZSIsInRvIHRoZSBjb2RlaGF1cyIsInRoZSBjb2RlaGF1cyBodHRwIiwiY29kZWhhdXMgaHR0cCBjbGFzc3dvcmxkcyIsImh0dHAgY2xhc3N3b3JsZHMgY29kZWhhdXMiLCJjbGFzc3dvcmxkcyBjb2RlaGF1cyBvcmciLCJjb2RlaGF1cyBvcmcgdGhpcyIsImJ5IHRoZSBjb2RlaGF1cyIsInRoZSBjb2RlaGF1cyBhbmQiLCJjb2RlaGF1cyBhbmQgY29udHJpYnV0b3JzIiwic2hhbGwgdGhlIGNvZGVoYXVzIiwidGhlIGNvZGVoYXVzIG9yIiwiY29kZWhhdXMgb3IgaXRzIiwiY29weXJpZ2h0IDIwMDIgYyB0aGUiLCIyMDAyIGMgdGhlIGNvZGVoYXVzIiwiYyB0aGUgY29kZWhhdXMgYWxsIiwidGhlIGNvZGVoYXVzIGFsbCByaWdodHMiLCJjb2RlaGF1cyBhbGwgcmlnaHRzIHJlc2VydmVkIiwiMyB0aGUgbmFtZSBjbGFzc3dvcmxkcyIsInRoZSBuYW1lIGNsYXNzd29ybGRzIG11c3QiLCJuYW1lIGNsYXNzd29ybGRzIG11c3Qgbm90IiwiY2xhc3N3b3JsZHMgbXVzdCBub3QgYmUiLCJvZiB0aGUgY29kZWhhdXMgZm9yIiwidGhlIGNvZGVoYXVzIGZvciB3cml0dGVuIiwiY29kZWhhdXMgZm9yIHdyaXR0ZW4gcGVybWlzc2lvbiIsInBlcm1pc3Npb24gcGxlYXNlIGNvbnRhY3QgYm9iIiwicGxlYXNlIGNvbnRhY3QgYm9iIGNvZGVoYXVzIiwiY29udGFjdCBib2IgY29kZWhhdXMgb3JnIiwiYm9iIGNvZGVoYXVzIG9yZyA0IiwiY29kZWhhdXMgb3JnIDQgcHJvZHVjdHMiLCJub3QgYmUgY2FsbGVkIGNsYXNzd29ybGRzIiwiYmUgY2FsbGVkIGNsYXNzd29ybGRzIG5vciIsImNhbGxlZCBjbGFzc3dvcmxkcyBub3IgbWF5IiwiY2xhc3N3b3JsZHMgbm9yIG1heSBjbGFzc3dvcmxkcyIsIm5vciBtYXkgY2xhc3N3b3JsZHMgYXBwZWFyIiwibWF5IGNsYXNzd29ybGRzIGFwcGVhciBpbiIsImNsYXNzd29ybGRzIGFwcGVhciBpbiB0aGVpciIsIm9mIHRoZSBjb2RlaGF1cyBjbGFzc3dvcmxkcyIsInRoZSBjb2RlaGF1cyBjbGFzc3dvcmxkcyBpcyIsImNvZGVoYXVzIGNsYXNzd29ybGRzIGlzIGEiLCJjbGFzc3dvcmxkcyBpcyBhIHJlZ2lzdGVyZWQiLCJ0cmFkZW1hcmsgb2YgdGhlIGNvZGVoYXVzIiwib2YgdGhlIGNvZGVoYXVzIDUiLCJ0aGUgY29kZWhhdXMgNSBkdWUiLCJjb2RlaGF1cyA1IGR1ZSBjcmVkaXQiLCJnaXZlbiB0byB0aGUgY29kZWhhdXMiLCJ0byB0aGUgY29kZWhhdXMgaHR0cCIsInRoZSBjb2RlaGF1cyBodHRwIGNsYXNzd29ybGRzIiwiY29kZWhhdXMgaHR0cCBjbGFzc3dvcmxkcyBjb2RlaGF1cyIsImh0dHAgY2xhc3N3b3JsZHMgY29kZWhhdXMgb3JnIiwiY2xhc3N3b3JsZHMgY29kZWhhdXMgb3JnIHRoaXMiLCJjb2RlaGF1cyBvcmcgdGhpcyBzb2Z0d2FyZSIsInByb3ZpZGVkIGJ5IHRoZSBjb2RlaGF1cyIsImJ5IHRoZSBjb2RlaGF1cyBhbmQiLCJ0aGUgY29kZWhhdXMgYW5kIGNvbnRyaWJ1dG9ycyIsImNvZGVoYXVzIGFuZCBjb250cmlidXRvcnMgYXMiLCJldmVudCBzaGFsbCB0aGUgY29kZWhhdXMiLCJzaGFsbCB0aGUgY29kZWhhdXMgb3IiLCJ0aGUgY29kZWhhdXMgb3IgaXRzIiwiY29kZWhhdXMgb3IgaXRzIGNvbnRyaWJ1dG9ycyIsImNvcHlyaWdodCAyMDAyIGMgdGhlIGNvZGVoYXVzIiwiMjAwMiBjIHRoZSBjb2RlaGF1cyBhbGwiLCJjIHRoZSBjb2RlaGF1cyBhbGwgcmlnaHRzIiwidGhlIGNvZGVoYXVzIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJjb2RlaGF1cyBhbGwgcmlnaHRzIHJlc2VydmVkIHJlZGlzdHJpYnV0aW9uIiwiZGlzdHJpYnV0aW9uIDMgdGhlIG5hbWUgY2xhc3N3b3JsZHMiLCIzIHRoZSBuYW1lIGNsYXNzd29ybGRzIG11c3QiLCJ0aGUgbmFtZSBjbGFzc3dvcmxkcyBtdXN0IG5vdCIsIm5hbWUgY2xhc3N3b3JsZHMgbXVzdCBub3QgYmUiLCJjbGFzc3dvcmxkcyBtdXN0IG5vdCBiZSB1c2VkIiwicGVybWlzc2lvbiBvZiB0aGUgY29kZWhhdXMgZm9yIiwib2YgdGhlIGNvZGVoYXVzIGZvciB3cml0dGVuIiwidGhlIGNvZGVoYXVzIGZvciB3cml0dGVuIHBlcm1pc3Npb24iLCJjb2RlaGF1cyBmb3Igd3JpdHRlbiBwZXJtaXNzaW9uIHBsZWFzZSIsIndyaXR0ZW4gcGVybWlzc2lvbiBwbGVhc2UgY29udGFjdCBib2IiLCJwZXJtaXNzaW9uIHBsZWFzZSBjb250YWN0IGJvYiBjb2RlaGF1cyIsInBsZWFzZSBjb250YWN0IGJvYiBjb2RlaGF1cyBvcmciLCJjb250YWN0IGJvYiBjb2RlaGF1cyBvcmcgNCIsImJvYiBjb2RlaGF1cyBvcmcgNCBwcm9kdWN0cyIsImNvZGVoYXVzIG9yZyA0IHByb2R1Y3RzIGRlcml2ZWQiLCJtYXkgbm90IGJlIGNhbGxlZCBjbGFzc3dvcmxkcyIsIm5vdCBiZSBjYWxsZWQgY2xhc3N3b3JsZHMgbm9yIiwiYmUgY2FsbGVkIGNsYXNzd29ybGRzIG5vciBtYXkiLCJjYWxsZWQgY2xhc3N3b3JsZHMgbm9yIG1heSBjbGFzc3dvcmxkcyIsImNsYXNzd29ybGRzIG5vciBtYXkgY2xhc3N3b3JsZHMgYXBwZWFyIiwibm9yIG1heSBjbGFzc3dvcmxkcyBhcHBlYXIgaW4iLCJtYXkgY2xhc3N3b3JsZHMgYXBwZWFyIGluIHRoZWlyIiwiY2xhc3N3b3JsZHMgYXBwZWFyIGluIHRoZWlyIG5hbWVzIiwicGVybWlzc2lvbiBvZiB0aGUgY29kZWhhdXMgY2xhc3N3b3JsZHMiLCJvZiB0aGUgY29kZWhhdXMgY2xhc3N3b3JsZHMgaXMiLCJ0aGUgY29kZWhhdXMgY2xhc3N3b3JsZHMgaXMgYSIsImNvZGVoYXVzIGNsYXNzd29ybGRzIGlzIGEgcmVnaXN0ZXJlZCIsImNsYXNzd29ybGRzIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsiLCJyZWdpc3RlcmVkIHRyYWRlbWFyayBvZiB0aGUgY29kZWhhdXMiLCJ0cmFkZW1hcmsgb2YgdGhlIGNvZGVoYXVzIDUiLCJvZiB0aGUgY29kZWhhdXMgNSBkdWUiLCJ0aGUgY29kZWhhdXMgNSBkdWUgY3JlZGl0IiwiY29kZWhhdXMgNSBkdWUgY3JlZGl0IHNob3VsZCIsImJlIGdpdmVuIHRvIHRoZSBjb2RlaGF1cyIsImdpdmVuIHRvIHRoZSBjb2RlaGF1cyBodHRwIiwidG8gdGhlIGNvZGVoYXVzIGh0dHAgY2xhc3N3b3JsZHMiLCJ0aGUgY29kZWhhdXMgaHR0cCBjbGFzc3dvcmxkcyBjb2RlaGF1cyIsImNvZGVoYXVzIGh0dHAgY2xhc3N3b3JsZHMgY29kZWhhdXMgb3JnIiwiaHR0cCBjbGFzc3dvcmxkcyBjb2RlaGF1cyBvcmcgdGhpcyIsImNsYXNzd29ybGRzIGNvZGVoYXVzIG9yZyB0aGlzIHNvZnR3YXJlIiwiY29kZWhhdXMgb3JnIHRoaXMgc29mdHdhcmUgaXMiLCJpcyBwcm92aWRlZCBieSB0aGUgY29kZWhhdXMiLCJwcm92aWRlZCBieSB0aGUgY29kZWhhdXMgYW5kIiwiYnkgdGhlIGNvZGVoYXVzIGFuZCBjb250cmlidXRvcnMiLCJ0aGUgY29kZWhhdXMgYW5kIGNvbnRyaWJ1dG9ycyBhcyIsImNvZGVoYXVzIGFuZCBjb250cmlidXRvcnMgYXMgaXMiLCJubyBldmVudCBzaGFsbCB0aGUgY29kZWhhdXMiLCJldmVudCBzaGFsbCB0aGUgY29kZWhhdXMgb3IiLCJzaGFsbCB0aGUgY29kZWhhdXMgb3IgaXRzIiwidGhlIGNvZGVoYXVzIG9yIGl0cyBjb250cmlidXRvcnMiLCJjb2RlaGF1cyBvciBpdHMgY29udHJpYnV0b3JzIGJlIl19LHsibGljZW5zZVRleHRzIjpbIiMgUG9seUZvcm0gTm9uY29tbWVyY2lhbCBMaWNlbnNlIDEuMC4wXG5cblx1MDAzY2h0dHBzOi8vcG9seWZvcm1wcm9qZWN0Lm9yZy9saWNlbnNlcy9ub25jb21tZXJjaWFsLzEuMC4wXHUwMDNlXG5cbiMjIEFjY2VwdGFuY2VcblxuSW4gb3JkZXIgdG8gZ2V0IGFueSBsaWNlbnNlIHVuZGVyIHRoZXNlIHRlcm1zLCB5b3UgbXVzdCBhZ3JlZSB0byB0aGVtIGFzIGJvdGggc3RyaWN0IG9ibGlnYXRpb25zIGFuZCBjb25kaXRpb25zIHRvIGFsbCB5b3VyIGxpY2Vuc2VzLlxuXG4jIyBDb3B5cmlnaHQgTGljZW5zZVxuXG5UaGUgbGljZW5zb3IgZ3JhbnRzIHlvdSBhIGNvcHlyaWdodCBsaWNlbnNlIGZvciB0aGUgc29mdHdhcmUgdG8gZG8gZXZlcnl0aGluZyB5b3UgbWlnaHQgZG8gd2l0aCB0aGUgc29mdHdhcmUgdGhhdCB3b3VsZCBvdGhlcndpc2UgaW5mcmluZ2UgdGhlIGxpY2Vuc29yJ3MgY29weXJpZ2h0IGluIGl0IGZvciBhbnkgcGVybWl0dGVkIHB1cnBvc2UuIEhvd2V2ZXIsIHlvdSBtYXkgb25seSBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBhY2NvcmRpbmcgdG8gW0Rpc3RyaWJ1dGlvbiBMaWNlbnNlXSgjZGlzdHJpYnV0aW9uLWxpY2Vuc2UpIGFuZCBtYWtlIGNoYW5nZXMgb3IgbmV3IHdvcmtzIGJhc2VkIG9uIHRoZSBzb2Z0d2FyZSBhY2NvcmRpbmcgdG8gW0NoYW5nZXMgYW5kIE5ldyBXb3JrcyBMaWNlbnNlXSgjY2hhbmdlcy1hbmQtbmV3LXdvcmtzLWxpY2Vuc2UpLlxuXG4jIyBEaXN0cmlidXRpb24gTGljZW5zZVxuXG5UaGUgbGljZW5zb3IgZ3JhbnRzIHlvdSBhbiBhZGRpdGlvbmFsIGNvcHlyaWdodCBsaWNlbnNlIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZS4gWW91ciBsaWNlbnNlIHRvIGRpc3RyaWJ1dGUgY292ZXJzIGRpc3RyaWJ1dGluZyB0aGUgc29mdHdhcmUgd2l0aCBjaGFuZ2VzIGFuZCBuZXcgd29ya3MgcGVybWl0dGVkIGJ5IFtDaGFuZ2VzIGFuZCBOZXcgV29ya3MgTGljZW5zZV0oI2NoYW5nZXMtYW5kLW5ldy13b3Jrcy1saWNlbnNlKS5cblxuIyMgTm90aWNlc1xuXG5Zb3UgbXVzdCBlbnN1cmUgdGhhdCBhbnlvbmUgd2hvIGdldHMgYSBjb3B5IG9mIGFueSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBmcm9tIHlvdSBhbHNvIGdldHMgYSBjb3B5IG9mIHRoZXNlIHRlcm1zIG9yIHRoZSBVUkwgZm9yIHRoZW0gYWJvdmUsIGFzIHdlbGwgYXMgY29waWVzIG9mIGFueSBwbGFpbi10ZXh0IGxpbmVzIGJlZ2lubmluZyB3aXRoIGBSZXF1aXJlZCBOb3RpY2U6YCB0aGF0IHRoZSBsaWNlbnNvciBwcm92aWRlZCB3aXRoIHRoZSBzb2Z0d2FyZS4gRm9yIGV4YW1wbGU6XG5cblx1MDAzZSBSZXF1aXJlZCBOb3RpY2U6IENvcHlyaWdodCBZb3lvZHluZSwgSW5jLiAoaHR0cDovL2V4YW1wbGUuY29tKVxuXG4jIyBDaGFuZ2VzIGFuZCBOZXcgV29ya3MgTGljZW5zZVxuXG5UaGUgbGljZW5zb3IgZ3JhbnRzIHlvdSBhbiBhZGRpdGlvbmFsIGNvcHlyaWdodCBsaWNlbnNlIHRvIG1ha2UgY2hhbmdlcyBhbmQgbmV3IHdvcmtzIGJhc2VkIG9uIHRoZSBzb2Z0d2FyZSBmb3IgYW55IHBlcm1pdHRlZCBwdXJwb3NlLlxuXG4jIyBQYXRlbnQgTGljZW5zZVxuXG5UaGUgbGljZW5zb3IgZ3JhbnRzIHlvdSBhIHBhdGVudCBsaWNlbnNlIGZvciB0aGUgc29mdHdhcmUgdGhhdCBjb3ZlcnMgcGF0ZW50IGNsYWltcyB0aGUgbGljZW5zb3IgY2FuIGxpY2Vuc2UsIG9yIGJlY29tZXMgYWJsZSB0byBsaWNlbnNlLCB0aGF0IHlvdSB3b3VsZCBpbmZyaW5nZSBieSB1c2luZyB0aGUgc29mdHdhcmUuXG5cbiMjIE5vbmNvbW1lcmNpYWwgUHVycG9zZXNcblxuQW55IG5vbmNvbW1lcmNpYWwgcHVycG9zZSBpcyBhIHBlcm1pdHRlZCBwdXJwb3NlLlxuXG4jIyBQZXJzb25hbCBVc2VzXG5cblBlcnNvbmFsIHVzZSBmb3IgcmVzZWFyY2gsIGV4cGVyaW1lbnQsIGFuZCB0ZXN0aW5nIGZvciB0aGUgYmVuZWZpdCBvZiBwdWJsaWMga25vd2xlZGdlLCBwZXJzb25hbCBzdHVkeSwgcHJpdmF0ZSBlbnRlcnRhaW5tZW50LCBob2JieSBwcm9qZWN0cywgYW1hdGV1ciBwdXJzdWl0cywgb3IgcmVsaWdpb3VzIG9ic2VydmFuY2UsIHdpdGhvdXQgYW55IGFudGljaXBhdGVkIGNvbW1lcmNpYWwgYXBwbGljYXRpb24sIGlzIHVzZSBmb3IgYSBwZXJtaXR0ZWQgcHVycG9zZS5cblxuIyMgTm9uY29tbWVyY2lhbCBPcmdhbml6YXRpb25zXG5cblVzZSBieSBhbnkgY2hhcml0YWJsZSBvcmdhbml6YXRpb24sIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uLCBwdWJsaWMgcmVzZWFyY2ggb3JnYW5pemF0aW9uLCBwdWJsaWMgc2FmZXR5IG9yIGhlYWx0aCBvcmdhbml6YXRpb24sIGVudmlyb25tZW50YWwgcHJvdGVjdGlvbiBvcmdhbml6YXRpb24sIG9yIGdvdmVybm1lbnQgaW5zdGl0dXRpb24gaXMgdXNlIGZvciBhIHBlcm1pdHRlZCBwdXJwb3NlIHJlZ2FyZGxlc3Mgb2YgdGhlIHNvdXJjZSBvZiBmdW5kaW5nIG9yIG9ibGlnYXRpb25zIHJlc3VsdGluZyBmcm9tIHRoZSBmdW5kaW5nLlxuXG4jIyBGYWlyIFVzZVxuXG5Zb3UgbWF5IGhhdmUgXCJmYWlyIHVzZVwiIHJpZ2h0cyBmb3IgdGhlIHNvZnR3YXJlIHVuZGVyIHRoZSBsYXcuIFRoZXNlIHRlcm1zIGRvIG5vdCBsaW1pdCB0aGVtLlxuXG4jIyBObyBPdGhlciBSaWdodHNcblxuVGhlc2UgdGVybXMgZG8gbm90IGFsbG93IHlvdSB0byBzdWJsaWNlbnNlIG9yIHRyYW5zZmVyIGFueSBvZiB5b3VyIGxpY2Vuc2VzIHRvIGFueW9uZSBlbHNlLCBvciBwcmV2ZW50IHRoZSBsaWNlbnNvciBmcm9tIGdyYW50aW5nIGxpY2Vuc2VzIHRvIGFueW9uZSBlbHNlLiBUaGVzZSB0ZXJtcyBkbyBub3QgaW1wbHkgYW55IG90aGVyIGxpY2Vuc2VzLlxuXG4jIyBQYXRlbnQgRGVmZW5zZVxuXG5JZiB5b3UgbWFrZSBhbnkgd3JpdHRlbiBjbGFpbSB0aGF0IHRoZSBzb2Z0d2FyZSBpbmZyaW5nZXMgb3IgY29udHJpYnV0ZXMgdG8gaW5mcmluZ2VtZW50IG9mIGFueSBwYXRlbnQsIHlvdXIgcGF0ZW50IGxpY2Vuc2UgZm9yIHRoZSBzb2Z0d2FyZSBncmFudGVkIHVuZGVyIHRoZXNlIHRlcm1zIGVuZHMgaW1tZWRpYXRlbHkuIElmIHlvdXIgY29tcGFueSBtYWtlcyBzdWNoIGEgY2xhaW0sIHlvdXIgcGF0ZW50IGxpY2Vuc2UgZW5kcyBpbW1lZGlhdGVseSBmb3Igd29yayBvbiBiZWhhbGYgb2YgeW91ciBjb21wYW55LlxuXG4jIyBWaW9sYXRpb25zXG5cblRoZSBmaXJzdCB0aW1lIHlvdSBhcmUgbm90aWZpZWQgaW4gd3JpdGluZyB0aGF0IHlvdSBoYXZlIHZpb2xhdGVkIGFueSBvZiB0aGVzZSB0ZXJtcywgb3IgZG9uZSBhbnl0aGluZyB3aXRoIHRoZSBzb2Z0d2FyZSBub3QgY292ZXJlZCBieSB5b3VyIGxpY2Vuc2VzLCB5b3VyIGxpY2Vuc2VzIGNhbiBub25ldGhlbGVzcyBjb250aW51ZSBpZiB5b3UgY29tZSBpbnRvIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRoZXNlIHRlcm1zLCBhbmQgdGFrZSBwcmFjdGljYWwgc3RlcHMgdG8gY29ycmVjdCBwYXN0IHZpb2xhdGlvbnMsIHdpdGhpbiAzMiBkYXlzIG9mIHJlY2VpdmluZyBub3RpY2UuIE90aGVyd2lzZSwgYWxsIHlvdXIgbGljZW5zZXMgZW5kIGltbWVkaWF0ZWx5LlxuXG4jIyBObyBMaWFiaWxpdHlcblxuKioqQXMgZmFyIGFzIHRoZSBsYXcgYWxsb3dzLCB0aGUgc29mdHdhcmUgY29tZXMgYXMgaXMsIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9yIGNvbmRpdGlvbiwgYW5kIHRoZSBsaWNlbnNvciB3aWxsIG5vdCBiZSBsaWFibGUgdG8geW91IGZvciBhbnkgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiB0aGVzZSB0ZXJtcyBvciB0aGUgdXNlIG9yIG5hdHVyZSBvZiB0aGUgc29mdHdhcmUsIHVuZGVyIGFueSBraW5kIG9mIGxlZ2FsIGNsYWltLioqKlxuXG4jIyBEZWZpbml0aW9uc1xuXG5UaGUgKipsaWNlbnNvcioqIGlzIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBvZmZlcmluZyB0aGVzZSB0ZXJtcywgYW5kIHRoZSAqKnNvZnR3YXJlKiogaXMgdGhlIHNvZnR3YXJlIHRoZSBsaWNlbnNvciBtYWtlcyBhdmFpbGFibGUgdW5kZXIgdGhlc2UgdGVybXMuXG5cbioqWW91KiogcmVmZXJzIHRvIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBhZ3JlZWluZyB0byB0aGVzZSB0ZXJtcy5cblxuKipZb3VyIGNvbXBhbnkqKiBpcyBhbnkgbGVnYWwgZW50aXR5LCBzb2xlIHByb3ByaWV0b3JzaGlwLCBvciBvdGhlciBraW5kIG9mIG9yZ2FuaXphdGlvbiB0aGF0IHlvdSB3b3JrIGZvciwgcGx1cyBhbGwgb3JnYW5pemF0aW9ucyB0aGF0IGhhdmUgY29udHJvbCBvdmVyLCBhcmUgdW5kZXIgdGhlIGNvbnRyb2wgb2YsIG9yIGFyZSB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHRoYXQgb3JnYW5pemF0aW9uLiAqKkNvbnRyb2wqKiBtZWFucyBvd25lcnNoaXAgb2Ygc3Vic3RhbnRpYWxseSBhbGwgdGhlIGFzc2V0cyBvZiBhbiBlbnRpdHksIG9yIHRoZSBwb3dlciB0byBkaXJlY3QgaXRzIG1hbmFnZW1lbnQgYW5kIHBvbGljaWVzIGJ5IHZvdGUsIGNvbnRyYWN0LCBvciBvdGhlcndpc2UuIENvbnRyb2wgY2FuIGJlIGRpcmVjdCBvciBpbmRpcmVjdC5cblxuKipZb3VyIGxpY2Vuc2VzKiogYXJlIGFsbCB0aGUgbGljZW5zZXMgZ3JhbnRlZCB0byB5b3UgZm9yIHRoZSBzb2Z0d2FyZSB1bmRlciB0aGVzZSB0ZXJtcy5cblxuKipVc2UqKiBtZWFucyBhbnl0aGluZyB5b3UgZG8gd2l0aCB0aGUgc29mdHdhcmUgcmVxdWlyaW5nIG9uZSBvZiB5b3VyIGxpY2Vuc2VzLiJdLCJsaWNlbnNlSWRzIjpbIlBvbHlGb3JtLU5vbmNvbW1lcmNpYWwtMS4wLjAiXSwia2V5d29yZHMiOlsicG9seWZvcm0gbm9uY29tbWVyY2lhbCBsaWNlbnNlIiwibm9uY29tbWVyY2lhbCBsaWNlbnNlIDEiLCJvcmcgbGljZW5zZXMgbm9uY29tbWVyY2lhbCIsImxpY2Vuc2VzIG5vbmNvbW1lcmNpYWwgMSIsInRoZSBzb2Z0d2FyZSBub25jb21tZXJjaWFsIiwic29mdHdhcmUgbm9uY29tbWVyY2lhbCBwdXJwb3NlcyIsIm5vbmNvbW1lcmNpYWwgcHVycG9zZXMgYW55IiwicHVycG9zZXMgYW55IG5vbmNvbW1lcmNpYWwiLCJhbnkgbm9uY29tbWVyY2lhbCBwdXJwb3NlIiwibm9uY29tbWVyY2lhbCBwdXJwb3NlIGlzIiwicHVycG9zZSBpcyBhIiwiaXMgYSBwZXJtaXR0ZWQiLCJwZXJtaXR0ZWQgcHVycG9zZSBwZXJzb25hbCIsInB1cnBvc2UgcGVyc29uYWwgdXNlcyIsInBlcnNvbmFsIHVzZXMgcGVyc29uYWwiLCJ1c2VzIHBlcnNvbmFsIHVzZSIsInBlcnNvbmFsIHVzZSBmb3IiLCJ1c2UgZm9yIHJlc2VhcmNoIiwiZm9yIHJlc2VhcmNoIGV4cGVyaW1lbnQiLCJyZXNlYXJjaCBleHBlcmltZW50IGFuZCIsImV4cGVyaW1lbnQgYW5kIHRlc3RpbmciLCJhbmQgdGVzdGluZyBmb3IiLCJ0ZXN0aW5nIGZvciB0aGUiLCJiZW5lZml0IG9mIHB1YmxpYyIsIm9mIHB1YmxpYyBrbm93bGVkZ2UiLCJwdWJsaWMga25vd2xlZGdlIHBlcnNvbmFsIiwia25vd2xlZGdlIHBlcnNvbmFsIHN0dWR5IiwicGVyc29uYWwgc3R1ZHkgcHJpdmF0ZSIsInN0dWR5IHByaXZhdGUgZW50ZXJ0YWlubWVudCIsInByaXZhdGUgZW50ZXJ0YWlubWVudCBob2JieSIsImVudGVydGFpbm1lbnQgaG9iYnkgcHJvamVjdHMiLCJob2JieSBwcm9qZWN0cyBhbWF0ZXVyIiwicHJvamVjdHMgYW1hdGV1ciBwdXJzdWl0cyIsImFtYXRldXIgcHVyc3VpdHMgb3IiLCJwdXJzdWl0cyBvciByZWxpZ2lvdXMiLCJvciByZWxpZ2lvdXMgb2JzZXJ2YW5jZSIsInJlbGlnaW91cyBvYnNlcnZhbmNlIHdpdGhvdXQiLCJvYnNlcnZhbmNlIHdpdGhvdXQgYW55Iiwid2l0aG91dCBhbnkgYW50aWNpcGF0ZWQiLCJhbnkgYW50aWNpcGF0ZWQgY29tbWVyY2lhbCIsImFudGljaXBhdGVkIGNvbW1lcmNpYWwgYXBwbGljYXRpb24iLCJjb21tZXJjaWFsIGFwcGxpY2F0aW9uIGlzIiwiYXBwbGljYXRpb24gaXMgdXNlIiwicGVybWl0dGVkIHB1cnBvc2Ugbm9uY29tbWVyY2lhbCIsInB1cnBvc2Ugbm9uY29tbWVyY2lhbCBvcmdhbml6YXRpb25zIiwibm9uY29tbWVyY2lhbCBvcmdhbml6YXRpb25zIHVzZSIsIm9yZ2FuaXphdGlvbnMgdXNlIGJ5IiwiYnkgYW55IGNoYXJpdGFibGUiLCJhbnkgY2hhcml0YWJsZSBvcmdhbml6YXRpb24iLCJjaGFyaXRhYmxlIG9yZ2FuaXphdGlvbiBlZHVjYXRpb25hbCIsIm9yZ2FuaXphdGlvbiBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbiIsImVkdWNhdGlvbmFsIGluc3RpdHV0aW9uIHB1YmxpYyIsImluc3RpdHV0aW9uIHB1YmxpYyByZXNlYXJjaCIsInB1YmxpYyByZXNlYXJjaCBvcmdhbml6YXRpb24iLCJyZXNlYXJjaCBvcmdhbml6YXRpb24gcHVibGljIiwib3JnYW5pemF0aW9uIHB1YmxpYyBzYWZldHkiLCJwdWJsaWMgc2FmZXR5IG9yIiwic2FmZXR5IG9yIGhlYWx0aCIsIm9yIGhlYWx0aCBvcmdhbml6YXRpb24iLCJoZWFsdGggb3JnYW5pemF0aW9uIGVudmlyb25tZW50YWwiLCJvcmdhbml6YXRpb24gZW52aXJvbm1lbnRhbCBwcm90ZWN0aW9uIiwiZW52aXJvbm1lbnRhbCBwcm90ZWN0aW9uIG9yZ2FuaXphdGlvbiIsInByb3RlY3Rpb24gb3JnYW5pemF0aW9uIG9yIiwib3JnYW5pemF0aW9uIG9yIGdvdmVybm1lbnQiLCJvciBnb3Zlcm5tZW50IGluc3RpdHV0aW9uIiwiZ292ZXJubWVudCBpbnN0aXR1dGlvbiBpcyIsImluc3RpdHV0aW9uIGlzIHVzZSIsInBlcm1pdHRlZCBwdXJwb3NlIHJlZ2FyZGxlc3MiLCJwdXJwb3NlIHJlZ2FyZGxlc3Mgb2YiLCJzb3VyY2Ugb2YgZnVuZGluZyIsIm9mIGZ1bmRpbmcgb3IiLCJmdW5kaW5nIG9yIG9ibGlnYXRpb25zIiwib3Igb2JsaWdhdGlvbnMgcmVzdWx0aW5nIiwib2JsaWdhdGlvbnMgcmVzdWx0aW5nIGZyb20iLCJmcm9tIHRoZSBmdW5kaW5nIiwidGhlIGZ1bmRpbmcgZmFpciIsImZ1bmRpbmcgZmFpciB1c2UiLCJsaW1pdCB0aGVtIG5vIiwidGhlbSBubyBvdGhlciIsInBvbHlmb3JtIG5vbmNvbW1lcmNpYWwgbGljZW5zZSAxIiwibm9uY29tbWVyY2lhbCBsaWNlbnNlIDEgMCIsInBvbHlmb3JtcHJvamVjdCBvcmcgbGljZW5zZXMgbm9uY29tbWVyY2lhbCIsIm9yZyBsaWNlbnNlcyBub25jb21tZXJjaWFsIDEiLCJsaWNlbnNlcyBub25jb21tZXJjaWFsIDEgMCIsIm5vbmNvbW1lcmNpYWwgMSAwIDAiLCJ1c2luZyB0aGUgc29mdHdhcmUgbm9uY29tbWVyY2lhbCIsInRoZSBzb2Z0d2FyZSBub25jb21tZXJjaWFsIHB1cnBvc2VzIiwic29mdHdhcmUgbm9uY29tbWVyY2lhbCBwdXJwb3NlcyBhbnkiLCJub25jb21tZXJjaWFsIHB1cnBvc2VzIGFueSBub25jb21tZXJjaWFsIiwicHVycG9zZXMgYW55IG5vbmNvbW1lcmNpYWwgcHVycG9zZSIsImFueSBub25jb21tZXJjaWFsIHB1cnBvc2UgaXMiLCJub25jb21tZXJjaWFsIHB1cnBvc2UgaXMgYSIsInB1cnBvc2UgaXMgYSBwZXJtaXR0ZWQiLCJpcyBhIHBlcm1pdHRlZCBwdXJwb3NlIiwiYSBwZXJtaXR0ZWQgcHVycG9zZSBwZXJzb25hbCIsInBlcm1pdHRlZCBwdXJwb3NlIHBlcnNvbmFsIHVzZXMiLCJwdXJwb3NlIHBlcnNvbmFsIHVzZXMgcGVyc29uYWwiLCJwZXJzb25hbCB1c2VzIHBlcnNvbmFsIHVzZSIsInVzZXMgcGVyc29uYWwgdXNlIGZvciIsInBlcnNvbmFsIHVzZSBmb3IgcmVzZWFyY2giLCJ1c2UgZm9yIHJlc2VhcmNoIGV4cGVyaW1lbnQiLCJmb3IgcmVzZWFyY2ggZXhwZXJpbWVudCBhbmQiLCJyZXNlYXJjaCBleHBlcmltZW50IGFuZCB0ZXN0aW5nIiwiZXhwZXJpbWVudCBhbmQgdGVzdGluZyBmb3IiLCJhbmQgdGVzdGluZyBmb3IgdGhlIiwidGVzdGluZyBmb3IgdGhlIGJlbmVmaXQiLCJ0aGUgYmVuZWZpdCBvZiBwdWJsaWMiLCJiZW5lZml0IG9mIHB1YmxpYyBrbm93bGVkZ2UiLCJvZiBwdWJsaWMga25vd2xlZGdlIHBlcnNvbmFsIiwicHVibGljIGtub3dsZWRnZSBwZXJzb25hbCBzdHVkeSIsImtub3dsZWRnZSBwZXJzb25hbCBzdHVkeSBwcml2YXRlIiwicGVyc29uYWwgc3R1ZHkgcHJpdmF0ZSBlbnRlcnRhaW5tZW50Iiwic3R1ZHkgcHJpdmF0ZSBlbnRlcnRhaW5tZW50IGhvYmJ5IiwicHJpdmF0ZSBlbnRlcnRhaW5tZW50IGhvYmJ5IHByb2plY3RzIiwiZW50ZXJ0YWlubWVudCBob2JieSBwcm9qZWN0cyBhbWF0ZXVyIiwiaG9iYnkgcHJvamVjdHMgYW1hdGV1ciBwdXJzdWl0cyIsInByb2plY3RzIGFtYXRldXIgcHVyc3VpdHMgb3IiLCJhbWF0ZXVyIHB1cnN1aXRzIG9yIHJlbGlnaW91cyIsInB1cnN1aXRzIG9yIHJlbGlnaW91cyBvYnNlcnZhbmNlIiwib3IgcmVsaWdpb3VzIG9ic2VydmFuY2Ugd2l0aG91dCIsInJlbGlnaW91cyBvYnNlcnZhbmNlIHdpdGhvdXQgYW55Iiwib2JzZXJ2YW5jZSB3aXRob3V0IGFueSBhbnRpY2lwYXRlZCIsIndpdGhvdXQgYW55IGFudGljaXBhdGVkIGNvbW1lcmNpYWwiLCJhbnkgYW50aWNpcGF0ZWQgY29tbWVyY2lhbCBhcHBsaWNhdGlvbiIsImFudGljaXBhdGVkIGNvbW1lcmNpYWwgYXBwbGljYXRpb24gaXMiLCJjb21tZXJjaWFsIGFwcGxpY2F0aW9uIGlzIHVzZSIsImFwcGxpY2F0aW9uIGlzIHVzZSBmb3IiLCJhIHBlcm1pdHRlZCBwdXJwb3NlIG5vbmNvbW1lcmNpYWwiLCJwZXJtaXR0ZWQgcHVycG9zZSBub25jb21tZXJjaWFsIG9yZ2FuaXphdGlvbnMiLCJwdXJwb3NlIG5vbmNvbW1lcmNpYWwgb3JnYW5pemF0aW9ucyB1c2UiLCJub25jb21tZXJjaWFsIG9yZ2FuaXphdGlvbnMgdXNlIGJ5Iiwib3JnYW5pemF0aW9ucyB1c2UgYnkgYW55IiwidXNlIGJ5IGFueSBjaGFyaXRhYmxlIiwiYnkgYW55IGNoYXJpdGFibGUgb3JnYW5pemF0aW9uIiwiYW55IGNoYXJpdGFibGUgb3JnYW5pemF0aW9uIGVkdWNhdGlvbmFsIiwiY2hhcml0YWJsZSBvcmdhbml6YXRpb24gZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24iLCJvcmdhbml6YXRpb24gZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24gcHVibGljIiwiZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24gcHVibGljIHJlc2VhcmNoIiwiaW5zdGl0dXRpb24gcHVibGljIHJlc2VhcmNoIG9yZ2FuaXphdGlvbiIsInB1YmxpYyByZXNlYXJjaCBvcmdhbml6YXRpb24gcHVibGljIiwicmVzZWFyY2ggb3JnYW5pemF0aW9uIHB1YmxpYyBzYWZldHkiLCJvcmdhbml6YXRpb24gcHVibGljIHNhZmV0eSBvciIsInB1YmxpYyBzYWZldHkgb3IgaGVhbHRoIiwic2FmZXR5IG9yIGhlYWx0aCBvcmdhbml6YXRpb24iLCJvciBoZWFsdGggb3JnYW5pemF0aW9uIGVudmlyb25tZW50YWwiLCJoZWFsdGggb3JnYW5pemF0aW9uIGVudmlyb25tZW50YWwgcHJvdGVjdGlvbiIsIm9yZ2FuaXphdGlvbiBlbnZpcm9ubWVudGFsIHByb3RlY3Rpb24gb3JnYW5pemF0aW9uIiwiZW52aXJvbm1lbnRhbCBwcm90ZWN0aW9uIG9yZ2FuaXphdGlvbiBvciIsInByb3RlY3Rpb24gb3JnYW5pemF0aW9uIG9yIGdvdmVybm1lbnQiLCJvcmdhbml6YXRpb24gb3IgZ292ZXJubWVudCBpbnN0aXR1dGlvbiIsIm9yIGdvdmVybm1lbnQgaW5zdGl0dXRpb24gaXMiLCJnb3Zlcm5tZW50IGluc3RpdHV0aW9uIGlzIHVzZSIsImluc3RpdHV0aW9uIGlzIHVzZSBmb3IiLCJhIHBlcm1pdHRlZCBwdXJwb3NlIHJlZ2FyZGxlc3MiLCJwZXJtaXR0ZWQgcHVycG9zZSByZWdhcmRsZXNzIG9mIiwicHVycG9zZSByZWdhcmRsZXNzIG9mIHRoZSIsInJlZ2FyZGxlc3Mgb2YgdGhlIHNvdXJjZSIsIm9mIHRoZSBzb3VyY2Ugb2YiLCJ0aGUgc291cmNlIG9mIGZ1bmRpbmciLCJzb3VyY2Ugb2YgZnVuZGluZyBvciIsIm9mIGZ1bmRpbmcgb3Igb2JsaWdhdGlvbnMiLCJmdW5kaW5nIG9yIG9ibGlnYXRpb25zIHJlc3VsdGluZyIsIm9yIG9ibGlnYXRpb25zIHJlc3VsdGluZyBmcm9tIiwib2JsaWdhdGlvbnMgcmVzdWx0aW5nIGZyb20gdGhlIiwicmVzdWx0aW5nIGZyb20gdGhlIGZ1bmRpbmciLCJmcm9tIHRoZSBmdW5kaW5nIGZhaXIiLCJ0aGUgZnVuZGluZyBmYWlyIHVzZSIsImZ1bmRpbmcgZmFpciB1c2UgeW91Iiwibm90IGxpbWl0IHRoZW0gbm8iLCJsaW1pdCB0aGVtIG5vIG90aGVyIiwidGhlbSBubyBvdGhlciByaWdodHMiLCJwb2x5Zm9ybSBub25jb21tZXJjaWFsIGxpY2Vuc2UgMSAwIiwibm9uY29tbWVyY2lhbCBsaWNlbnNlIDEgMCAwIiwiaHR0cHMgcG9seWZvcm1wcm9qZWN0IG9yZyBsaWNlbnNlcyBub25jb21tZXJjaWFsIiwicG9seWZvcm1wcm9qZWN0IG9yZyBsaWNlbnNlcyBub25jb21tZXJjaWFsIDEiLCJvcmcgbGljZW5zZXMgbm9uY29tbWVyY2lhbCAxIDAiLCJsaWNlbnNlcyBub25jb21tZXJjaWFsIDEgMCAwIiwibm9uY29tbWVyY2lhbCAxIDAgMCBhY2NlcHRhbmNlIiwiYnkgdXNpbmcgdGhlIHNvZnR3YXJlIG5vbmNvbW1lcmNpYWwiLCJ1c2luZyB0aGUgc29mdHdhcmUgbm9uY29tbWVyY2lhbCBwdXJwb3NlcyIsInRoZSBzb2Z0d2FyZSBub25jb21tZXJjaWFsIHB1cnBvc2VzIGFueSIsInNvZnR3YXJlIG5vbmNvbW1lcmNpYWwgcHVycG9zZXMgYW55IG5vbmNvbW1lcmNpYWwiLCJub25jb21tZXJjaWFsIHB1cnBvc2VzIGFueSBub25jb21tZXJjaWFsIHB1cnBvc2UiLCJwdXJwb3NlcyBhbnkgbm9uY29tbWVyY2lhbCBwdXJwb3NlIGlzIiwiYW55IG5vbmNvbW1lcmNpYWwgcHVycG9zZSBpcyBhIiwibm9uY29tbWVyY2lhbCBwdXJwb3NlIGlzIGEgcGVybWl0dGVkIiwicHVycG9zZSBpcyBhIHBlcm1pdHRlZCBwdXJwb3NlIiwiaXMgYSBwZXJtaXR0ZWQgcHVycG9zZSBwZXJzb25hbCIsImEgcGVybWl0dGVkIHB1cnBvc2UgcGVyc29uYWwgdXNlcyIsInBlcm1pdHRlZCBwdXJwb3NlIHBlcnNvbmFsIHVzZXMgcGVyc29uYWwiLCJwdXJwb3NlIHBlcnNvbmFsIHVzZXMgcGVyc29uYWwgdXNlIiwicGVyc29uYWwgdXNlcyBwZXJzb25hbCB1c2UgZm9yIiwidXNlcyBwZXJzb25hbCB1c2UgZm9yIHJlc2VhcmNoIiwicGVyc29uYWwgdXNlIGZvciByZXNlYXJjaCBleHBlcmltZW50IiwidXNlIGZvciByZXNlYXJjaCBleHBlcmltZW50IGFuZCIsImZvciByZXNlYXJjaCBleHBlcmltZW50IGFuZCB0ZXN0aW5nIiwicmVzZWFyY2ggZXhwZXJpbWVudCBhbmQgdGVzdGluZyBmb3IiLCJleHBlcmltZW50IGFuZCB0ZXN0aW5nIGZvciB0aGUiLCJhbmQgdGVzdGluZyBmb3IgdGhlIGJlbmVmaXQiLCJ0ZXN0aW5nIGZvciB0aGUgYmVuZWZpdCBvZiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyIjIFBvbHlGb3JtIFNtYWxsIEJ1c2luZXNzIExpY2Vuc2UgMS4wLjBcblxuXHUwMDNjaHR0cHM6Ly9wb2x5Zm9ybXByb2plY3Qub3JnL2xpY2Vuc2VzL3NtYWxsLWJ1c2luZXNzLzEuMC4wXHUwMDNlXG5cbiMjIEFjY2VwdGFuY2VcblxuSW4gb3JkZXIgdG8gZ2V0IGFueSBsaWNlbnNlIHVuZGVyIHRoZXNlIHRlcm1zLCB5b3UgbXVzdCBhZ3JlZSB0byB0aGVtIGFzIGJvdGggc3RyaWN0IG9ibGlnYXRpb25zIGFuZCBjb25kaXRpb25zIHRvIGFsbCB5b3VyIGxpY2Vuc2VzLlxuXG4jIyBDb3B5cmlnaHQgTGljZW5zZVxuXG5UaGUgbGljZW5zb3IgZ3JhbnRzIHlvdSBhIGNvcHlyaWdodCBsaWNlbnNlIGZvciB0aGUgc29mdHdhcmUgdG8gZG8gZXZlcnl0aGluZyB5b3UgbWlnaHQgZG8gd2l0aCB0aGUgc29mdHdhcmUgdGhhdCB3b3VsZCBvdGhlcndpc2UgaW5mcmluZ2UgdGhlIGxpY2Vuc29yJ3MgY29weXJpZ2h0IGluIGl0IGZvciBhbnkgcGVybWl0dGVkIHB1cnBvc2UuIEhvd2V2ZXIsIHlvdSBtYXkgb25seSBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBhY2NvcmRpbmcgdG8gW0Rpc3RyaWJ1dGlvbiBMaWNlbnNlXSgjZGlzdHJpYnV0aW9uLWxpY2Vuc2UpIGFuZCBtYWtlIGNoYW5nZXMgb3IgbmV3IHdvcmtzIGJhc2VkIG9uIHRoZSBzb2Z0d2FyZSBhY2NvcmRpbmcgdG8gW0NoYW5nZXMgYW5kIE5ldyBXb3JrcyBMaWNlbnNlXSgjY2hhbmdlcy1hbmQtbmV3LXdvcmtzLWxpY2Vuc2UpLlxuXG4jIyBEaXN0cmlidXRpb24gTGljZW5zZVxuXG5UaGUgbGljZW5zb3IgZ3JhbnRzIHlvdSBhbiBhZGRpdGlvbmFsIGNvcHlyaWdodCBsaWNlbnNlIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZS4gWW91ciBsaWNlbnNlIHRvIGRpc3RyaWJ1dGUgY292ZXJzIGRpc3RyaWJ1dGluZyB0aGUgc29mdHdhcmUgd2l0aCBjaGFuZ2VzIGFuZCBuZXcgd29ya3MgcGVybWl0dGVkIGJ5IFtDaGFuZ2VzIGFuZCBOZXcgV29ya3MgTGljZW5zZV0oI2NoYW5nZXMtYW5kLW5ldy13b3Jrcy1saWNlbnNlKS5cblxuIyMgTm90aWNlc1xuXG5Zb3UgbXVzdCBlbnN1cmUgdGhhdCBhbnlvbmUgd2hvIGdldHMgYSBjb3B5IG9mIGFueSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBmcm9tIHlvdSBhbHNvIGdldHMgYSBjb3B5IG9mIHRoZXNlIHRlcm1zIG9yIHRoZSBVUkwgZm9yIHRoZW0gYWJvdmUsIGFzIHdlbGwgYXMgY29waWVzIG9mIGFueSBwbGFpbi10ZXh0IGxpbmVzIGJlZ2lubmluZyB3aXRoIGBSZXF1aXJlZCBOb3RpY2U6YCB0aGF0IHRoZSBsaWNlbnNvciBwcm92aWRlZCB3aXRoIHRoZSBzb2Z0d2FyZS4gRm9yIGV4YW1wbGU6XG5cblx1MDAzZSBSZXF1aXJlZCBOb3RpY2U6IENvcHlyaWdodCBZb3lvZHluZSwgSW5jLiAoaHR0cDovL2V4YW1wbGUuY29tKVxuXG4jIyBDaGFuZ2VzIGFuZCBOZXcgV29ya3MgTGljZW5zZVxuXG5UaGUgbGljZW5zb3IgZ3JhbnRzIHlvdSBhbiBhZGRpdGlvbmFsIGNvcHlyaWdodCBsaWNlbnNlIHRvIG1ha2UgY2hhbmdlcyBhbmQgbmV3IHdvcmtzIGJhc2VkIG9uIHRoZSBzb2Z0d2FyZSBmb3IgYW55IHBlcm1pdHRlZCBwdXJwb3NlLlxuXG4jIyBQYXRlbnQgTGljZW5zZVxuXG5UaGUgbGljZW5zb3IgZ3JhbnRzIHlvdSBhIHBhdGVudCBsaWNlbnNlIGZvciB0aGUgc29mdHdhcmUgdGhhdCBjb3ZlcnMgcGF0ZW50IGNsYWltcyB0aGUgbGljZW5zb3IgY2FuIGxpY2Vuc2UsIG9yIGJlY29tZXMgYWJsZSB0byBsaWNlbnNlLCB0aGF0IHlvdSB3b3VsZCBpbmZyaW5nZSBieSB1c2luZyB0aGUgc29mdHdhcmUuXG5cbiMjIEZhaXIgVXNlXG5cbllvdSBtYXkgaGF2ZSBcImZhaXIgdXNlXCIgcmlnaHRzIGZvciB0aGUgc29mdHdhcmUgdW5kZXIgdGhlIGxhdy4gVGhlc2UgdGVybXMgZG8gbm90IGxpbWl0IHRoZW0uXG5cbiMjIFNtYWxsIEJ1c2luZXNzXG5cblVzZSBvZiB0aGUgc29mdHdhcmUgZm9yIHRoZSBiZW5lZml0IG9mIHlvdXIgY29tcGFueSBpcyB1c2UgZm9yIGEgcGVybWl0dGVkIHB1cnBvc2UgaWYgeW91ciBjb21wYW55IGhhcyBmZXdlciB0aGFuIDEwMCB0b3RhbCBpbmRpdmlkdWFscyB3b3JraW5nIGFzIGVtcGxveWVlcyBhbmQgaW5kZXBlbmRlbnQgY29udHJhY3RvcnMsIGFuZCBsZXNzIHRoYW4gMSwwMDAsMDAwIFVTRCAoMjAxOSkgdG90YWwgcmV2ZW51ZSBpbiB0aGUgcHJpb3IgdGF4IHllYXIuIEFkanVzdCB0aGlzIHJldmVudWUgdGhyZXNob2xkIGZvciBpbmZsYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBVbml0ZWQgU3RhdGVzIEJ1cmVhdSBvZiBMYWJvciBTdGF0aXN0aWNzJyBjb25zdW1lciBwcmljZSBpbmRleCBmb3IgYWxsIHVyYmFuIGNvbnN1bWVycywgVS5TLiBjaXR5IGF2ZXJhZ2UsIGZvciBhbGwgaXRlbXMsIG5vdCBzZWFzb25hbGx5IGFkanVzdGVkLCB3aXRoIDE5ODLigJMxOTg0PTEwMCByZWZlcmVuY2UgYmFzZS5cblxuIyMgTm8gT3RoZXIgUmlnaHRzXG5cblRoZXNlIHRlcm1zIGRvIG5vdCBhbGxvdyB5b3UgdG8gc3VibGljZW5zZSBvciB0cmFuc2ZlciBhbnkgb2YgeW91ciBsaWNlbnNlcyB0byBhbnlvbmUgZWxzZSwgb3IgcHJldmVudCB0aGUgbGljZW5zb3IgZnJvbSBncmFudGluZyBsaWNlbnNlcyB0byBhbnlvbmUgZWxzZS4gVGhlc2UgdGVybXMgZG8gbm90IGltcGx5IGFueSBvdGhlciBsaWNlbnNlcy5cblxuIyMgUGF0ZW50IERlZmVuc2VcblxuSWYgeW91IG1ha2UgYW55IHdyaXR0ZW4gY2xhaW0gdGhhdCB0aGUgc29mdHdhcmUgaW5mcmluZ2VzIG9yIGNvbnRyaWJ1dGVzIHRvIGluZnJpbmdlbWVudCBvZiBhbnkgcGF0ZW50LCB5b3VyIHBhdGVudCBsaWNlbnNlIGZvciB0aGUgc29mdHdhcmUgZ3JhbnRlZCB1bmRlciB0aGVzZSB0ZXJtcyBlbmRzIGltbWVkaWF0ZWx5LiBJZiB5b3VyIGNvbXBhbnkgbWFrZXMgc3VjaCBhIGNsYWltLCB5b3VyIHBhdGVudCBsaWNlbnNlIGVuZHMgaW1tZWRpYXRlbHkgZm9yIHdvcmsgb24gYmVoYWxmIG9mIHlvdXIgY29tcGFueS5cblxuIyMgVmlvbGF0aW9uc1xuXG5UaGUgZmlyc3QgdGltZSB5b3UgYXJlIG5vdGlmaWVkIGluIHdyaXRpbmcgdGhhdCB5b3UgaGF2ZSB2aW9sYXRlZCBhbnkgb2YgdGhlc2UgdGVybXMsIG9yIGRvbmUgYW55dGhpbmcgd2l0aCB0aGUgc29mdHdhcmUgbm90IGNvdmVyZWQgYnkgeW91ciBsaWNlbnNlcywgeW91ciBsaWNlbnNlcyBjYW4gbm9uZXRoZWxlc3MgY29udGludWUgaWYgeW91IGNvbWUgaW50byBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aGVzZSB0ZXJtcywgYW5kIHRha2UgcHJhY3RpY2FsIHN0ZXBzIHRvIGNvcnJlY3QgcGFzdCB2aW9sYXRpb25zLCB3aXRoaW4gMzIgZGF5cyBvZiByZWNlaXZpbmcgbm90aWNlLiBPdGhlcndpc2UsIGFsbCB5b3VyIGxpY2Vuc2VzIGVuZCBpbW1lZGlhdGVseS5cblxuIyMgTm8gTGlhYmlsaXR5XG5cbioqKkFzIGZhciBhcyB0aGUgbGF3IGFsbG93cywgdGhlIHNvZnR3YXJlIGNvbWVzIGFzIGlzLCB3aXRob3V0IGFueSB3YXJyYW50eSBvciBjb25kaXRpb24sIGFuZCB0aGUgbGljZW5zb3Igd2lsbCBub3QgYmUgbGlhYmxlIHRvIHlvdSBmb3IgYW55IGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgdGhlc2UgdGVybXMgb3IgdGhlIHVzZSBvciBuYXR1cmUgb2YgdGhlIHNvZnR3YXJlLCB1bmRlciBhbnkga2luZCBvZiBsZWdhbCBjbGFpbS4qKipcblxuIyMgRGVmaW5pdGlvbnNcblxuVGhlICoqbGljZW5zb3IqKiBpcyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgb2ZmZXJpbmcgdGhlc2UgdGVybXMsIGFuZCB0aGUgKipzb2Z0d2FyZSoqIGlzIHRoZSBzb2Z0d2FyZSB0aGUgbGljZW5zb3IgbWFrZXMgYXZhaWxhYmxlIHVuZGVyIHRoZXNlIHRlcm1zLlxuXG4qKllvdSoqIHJlZmVycyB0byB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgYWdyZWVpbmcgdG8gdGhlc2UgdGVybXMuXG5cbioqWW91ciBjb21wYW55KiogaXMgYW55IGxlZ2FsIGVudGl0eSwgc29sZSBwcm9wcmlldG9yc2hpcCwgb3Igb3RoZXIga2luZCBvZiBvcmdhbml6YXRpb24gdGhhdCB5b3Ugd29yayBmb3IsIHBsdXMgYWxsIG9yZ2FuaXphdGlvbnMgdGhhdCBoYXZlIGNvbnRyb2wgb3ZlciwgYXJlIHVuZGVyIHRoZSBjb250cm9sIG9mLCBvciBhcmUgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB0aGF0IG9yZ2FuaXphdGlvbi4gKipDb250cm9sKiogbWVhbnMgb3duZXJzaGlwIG9mIHN1YnN0YW50aWFsbHkgYWxsIHRoZSBhc3NldHMgb2YgYW4gZW50aXR5LCBvciB0aGUgcG93ZXIgdG8gZGlyZWN0IGl0cyBtYW5hZ2VtZW50IGFuZCBwb2xpY2llcyBieSB2b3RlLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLiBDb250cm9sIGNhbiBiZSBkaXJlY3Qgb3IgaW5kaXJlY3QuXG5cbioqWW91ciBsaWNlbnNlcyoqIGFyZSBhbGwgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8geW91IGZvciB0aGUgc29mdHdhcmUgdW5kZXIgdGhlc2UgdGVybXMuXG5cbioqVXNlKiogbWVhbnMgYW55dGhpbmcgeW91IGRvIHdpdGggdGhlIHNvZnR3YXJlIHJlcXVpcmluZyBvbmUgb2YgeW91ciBsaWNlbnNlcy4iXSwibGljZW5zZUlkcyI6WyJQb2x5Rm9ybS1TbWFsbC1CdXNpbmVzcy0xLjAuMCJdLCJrZXl3b3JkcyI6WyJwb2x5Zm9ybSBzbWFsbCBidXNpbmVzcyIsInNtYWxsIGJ1c2luZXNzIGxpY2Vuc2UiLCJidXNpbmVzcyBsaWNlbnNlIDEiLCJvcmcgbGljZW5zZXMgc21hbGwiLCJsaWNlbnNlcyBzbWFsbCBidXNpbmVzcyIsInNtYWxsIGJ1c2luZXNzIDEiLCJidXNpbmVzcyAxIDAiLCJ0aGUgc29mdHdhcmUgZmFpciIsInNvZnR3YXJlIGZhaXIgdXNlIiwibGltaXQgdGhlbSBzbWFsbCIsInRoZW0gc21hbGwgYnVzaW5lc3MiLCJzbWFsbCBidXNpbmVzcyB1c2UiLCJidXNpbmVzcyB1c2Ugb2YiLCJiZW5lZml0IG9mIHlvdXIiLCJjb21wYW55IGlzIHVzZSIsInBlcm1pdHRlZCBwdXJwb3NlIGlmIiwicHVycG9zZSBpZiB5b3VyIiwieW91ciBjb21wYW55IGhhcyIsImNvbXBhbnkgaGFzIGZld2VyIiwiZmV3ZXIgdGhhbiAxMDAiLCJ0aGFuIDEwMCB0b3RhbCIsIjEwMCB0b3RhbCBpbmRpdmlkdWFscyIsInRvdGFsIGluZGl2aWR1YWxzIHdvcmtpbmciLCJpbmRpdmlkdWFscyB3b3JraW5nIGFzIiwid29ya2luZyBhcyBlbXBsb3llZXMiLCJhcyBlbXBsb3llZXMgYW5kIiwiZW1wbG95ZWVzIGFuZCBpbmRlcGVuZGVudCIsImFuZCBpbmRlcGVuZGVudCBjb250cmFjdG9ycyIsImNvbnRyYWN0b3JzIGFuZCBsZXNzIiwiYW5kIGxlc3MgdGhhbiIsImxlc3MgdGhhbiAxIiwidGhhbiAxIDAwMCIsIjEgMDAwIDAwMCIsIjAwMCAwMDAgdXNkIiwiMDAwIHVzZCAyMDE5IiwidXNkIDIwMTkgdG90YWwiLCIyMDE5IHRvdGFsIHJldmVudWUiLCJ0b3RhbCByZXZlbnVlIGluIiwicmV2ZW51ZSBpbiB0aGUiLCJpbiB0aGUgcHJpb3IiLCJ0aGUgcHJpb3IgdGF4IiwicHJpb3IgdGF4IHllYXIiLCJ0YXggeWVhciBhZGp1c3QiLCJ5ZWFyIGFkanVzdCB0aGlzIiwiYWRqdXN0IHRoaXMgcmV2ZW51ZSIsInRoaXMgcmV2ZW51ZSB0aHJlc2hvbGQiLCJyZXZlbnVlIHRocmVzaG9sZCBmb3IiLCJ0aHJlc2hvbGQgZm9yIGluZmxhdGlvbiIsImZvciBpbmZsYXRpb24gYWNjb3JkaW5nIiwiaW5mbGF0aW9uIGFjY29yZGluZyB0byIsInVuaXRlZCBzdGF0ZXMgYnVyZWF1Iiwic3RhdGVzIGJ1cmVhdSBvZiIsImJ1cmVhdSBvZiBsYWJvciIsIm9mIGxhYm9yIHN0YXRpc3RpY3MiLCJsYWJvciBzdGF0aXN0aWNzIGNvbnN1bWVyIiwic3RhdGlzdGljcyBjb25zdW1lciBwcmljZSIsImNvbnN1bWVyIHByaWNlIGluZGV4IiwicHJpY2UgaW5kZXggZm9yIiwiaW5kZXggZm9yIGFsbCIsImZvciBhbGwgdXJiYW4iLCJhbGwgdXJiYW4gY29uc3VtZXJzIiwidXJiYW4gY29uc3VtZXJzIHUiLCJjb25zdW1lcnMgdSBzIiwidSBzIGNpdHkiLCJzIGNpdHkgYXZlcmFnZSIsImNpdHkgYXZlcmFnZSBmb3IiLCJhdmVyYWdlIGZvciBhbGwiLCJmb3IgYWxsIGl0ZW1zIiwiYWxsIGl0ZW1zIG5vdCIsIml0ZW1zIG5vdCBzZWFzb25hbGx5Iiwibm90IHNlYXNvbmFsbHkgYWRqdXN0ZWQiLCJzZWFzb25hbGx5IGFkanVzdGVkIHdpdGgiLCJhZGp1c3RlZCB3aXRoIDE5ODIiLCJ3aXRoIDE5ODIgMTk4NCIsIjE5ODIgMTk4NCAxMDAiLCIxOTg0IDEwMCByZWZlcmVuY2UiLCIxMDAgcmVmZXJlbmNlIGJhc2UiLCJyZWZlcmVuY2UgYmFzZSBubyIsImJhc2Ugbm8gb3RoZXIiLCJwb2x5Zm9ybSBzbWFsbCBidXNpbmVzcyBsaWNlbnNlIiwic21hbGwgYnVzaW5lc3MgbGljZW5zZSAxIiwiYnVzaW5lc3MgbGljZW5zZSAxIDAiLCJwb2x5Zm9ybXByb2plY3Qgb3JnIGxpY2Vuc2VzIHNtYWxsIiwib3JnIGxpY2Vuc2VzIHNtYWxsIGJ1c2luZXNzIiwibGljZW5zZXMgc21hbGwgYnVzaW5lc3MgMSIsInNtYWxsIGJ1c2luZXNzIDEgMCIsImJ1c2luZXNzIDEgMCAwIiwidXNpbmcgdGhlIHNvZnR3YXJlIGZhaXIiLCJ0aGUgc29mdHdhcmUgZmFpciB1c2UiLCJzb2Z0d2FyZSBmYWlyIHVzZSB5b3UiLCJub3QgbGltaXQgdGhlbSBzbWFsbCIsImxpbWl0IHRoZW0gc21hbGwgYnVzaW5lc3MiLCJ0aGVtIHNtYWxsIGJ1c2luZXNzIHVzZSIsInNtYWxsIGJ1c2luZXNzIHVzZSBvZiIsImJ1c2luZXNzIHVzZSBvZiB0aGUiLCJzb2Z0d2FyZSBmb3IgdGhlIGJlbmVmaXQiLCJ0aGUgYmVuZWZpdCBvZiB5b3VyIiwiYmVuZWZpdCBvZiB5b3VyIGNvbXBhbnkiLCJvZiB5b3VyIGNvbXBhbnkgaXMiLCJ5b3VyIGNvbXBhbnkgaXMgdXNlIiwiY29tcGFueSBpcyB1c2UgZm9yIiwiYSBwZXJtaXR0ZWQgcHVycG9zZSBpZiIsInBlcm1pdHRlZCBwdXJwb3NlIGlmIHlvdXIiLCJwdXJwb3NlIGlmIHlvdXIgY29tcGFueSIsImlmIHlvdXIgY29tcGFueSBoYXMiLCJ5b3VyIGNvbXBhbnkgaGFzIGZld2VyIiwiY29tcGFueSBoYXMgZmV3ZXIgdGhhbiIsImhhcyBmZXdlciB0aGFuIDEwMCIsImZld2VyIHRoYW4gMTAwIHRvdGFsIiwidGhhbiAxMDAgdG90YWwgaW5kaXZpZHVhbHMiLCIxMDAgdG90YWwgaW5kaXZpZHVhbHMgd29ya2luZyIsInRvdGFsIGluZGl2aWR1YWxzIHdvcmtpbmcgYXMiLCJpbmRpdmlkdWFscyB3b3JraW5nIGFzIGVtcGxveWVlcyIsIndvcmtpbmcgYXMgZW1wbG95ZWVzIGFuZCIsImFzIGVtcGxveWVlcyBhbmQgaW5kZXBlbmRlbnQiLCJlbXBsb3llZXMgYW5kIGluZGVwZW5kZW50IGNvbnRyYWN0b3JzIiwiYW5kIGluZGVwZW5kZW50IGNvbnRyYWN0b3JzIGFuZCIsImluZGVwZW5kZW50IGNvbnRyYWN0b3JzIGFuZCBsZXNzIiwiY29udHJhY3RvcnMgYW5kIGxlc3MgdGhhbiIsImFuZCBsZXNzIHRoYW4gMSIsImxlc3MgdGhhbiAxIDAwMCIsInRoYW4gMSAwMDAgMDAwIiwiMSAwMDAgMDAwIHVzZCIsIjAwMCAwMDAgdXNkIDIwMTkiLCIwMDAgdXNkIDIwMTkgdG90YWwiLCJ1c2QgMjAxOSB0b3RhbCByZXZlbnVlIiwiMjAxOSB0b3RhbCByZXZlbnVlIGluIiwidG90YWwgcmV2ZW51ZSBpbiB0aGUiLCJyZXZlbnVlIGluIHRoZSBwcmlvciIsImluIHRoZSBwcmlvciB0YXgiLCJ0aGUgcHJpb3IgdGF4IHllYXIiLCJwcmlvciB0YXggeWVhciBhZGp1c3QiLCJ0YXggeWVhciBhZGp1c3QgdGhpcyIsInllYXIgYWRqdXN0IHRoaXMgcmV2ZW51ZSIsImFkanVzdCB0aGlzIHJldmVudWUgdGhyZXNob2xkIiwidGhpcyByZXZlbnVlIHRocmVzaG9sZCBmb3IiLCJyZXZlbnVlIHRocmVzaG9sZCBmb3IgaW5mbGF0aW9uIiwidGhyZXNob2xkIGZvciBpbmZsYXRpb24gYWNjb3JkaW5nIiwiZm9yIGluZmxhdGlvbiBhY2NvcmRpbmcgdG8iLCJpbmZsYXRpb24gYWNjb3JkaW5nIHRvIHRoZSIsImFjY29yZGluZyB0byB0aGUgdW5pdGVkIiwidGhlIHVuaXRlZCBzdGF0ZXMgYnVyZWF1IiwidW5pdGVkIHN0YXRlcyBidXJlYXUgb2YiLCJzdGF0ZXMgYnVyZWF1IG9mIGxhYm9yIiwiYnVyZWF1IG9mIGxhYm9yIHN0YXRpc3RpY3MiLCJvZiBsYWJvciBzdGF0aXN0aWNzIGNvbnN1bWVyIiwibGFib3Igc3RhdGlzdGljcyBjb25zdW1lciBwcmljZSIsInN0YXRpc3RpY3MgY29uc3VtZXIgcHJpY2UgaW5kZXgiLCJjb25zdW1lciBwcmljZSBpbmRleCBmb3IiLCJwcmljZSBpbmRleCBmb3IgYWxsIiwiaW5kZXggZm9yIGFsbCB1cmJhbiIsImZvciBhbGwgdXJiYW4gY29uc3VtZXJzIiwiYWxsIHVyYmFuIGNvbnN1bWVycyB1IiwidXJiYW4gY29uc3VtZXJzIHUgcyIsImNvbnN1bWVycyB1IHMgY2l0eSIsInUgcyBjaXR5IGF2ZXJhZ2UiLCJzIGNpdHkgYXZlcmFnZSBmb3IiLCJjaXR5IGF2ZXJhZ2UgZm9yIGFsbCIsImF2ZXJhZ2UgZm9yIGFsbCBpdGVtcyIsImZvciBhbGwgaXRlbXMgbm90IiwiYWxsIGl0ZW1zIG5vdCBzZWFzb25hbGx5IiwiaXRlbXMgbm90IHNlYXNvbmFsbHkgYWRqdXN0ZWQiLCJub3Qgc2Vhc29uYWxseSBhZGp1c3RlZCB3aXRoIiwic2Vhc29uYWxseSBhZGp1c3RlZCB3aXRoIDE5ODIiLCJhZGp1c3RlZCB3aXRoIDE5ODIgMTk4NCIsIndpdGggMTk4MiAxOTg0IDEwMCIsIjE5ODIgMTk4NCAxMDAgcmVmZXJlbmNlIiwiMTk4NCAxMDAgcmVmZXJlbmNlIGJhc2UiLCIxMDAgcmVmZXJlbmNlIGJhc2Ugbm8iLCJyZWZlcmVuY2UgYmFzZSBubyBvdGhlciIsImJhc2Ugbm8gb3RoZXIgcmlnaHRzIiwicG9seWZvcm0gc21hbGwgYnVzaW5lc3MgbGljZW5zZSAxIiwic21hbGwgYnVzaW5lc3MgbGljZW5zZSAxIDAiLCJidXNpbmVzcyBsaWNlbnNlIDEgMCAwIiwiaHR0cHMgcG9seWZvcm1wcm9qZWN0IG9yZyBsaWNlbnNlcyBzbWFsbCIsInBvbHlmb3JtcHJvamVjdCBvcmcgbGljZW5zZXMgc21hbGwgYnVzaW5lc3MiLCJvcmcgbGljZW5zZXMgc21hbGwgYnVzaW5lc3MgMSIsImxpY2Vuc2VzIHNtYWxsIGJ1c2luZXNzIDEgMCIsInNtYWxsIGJ1c2luZXNzIDEgMCAwIiwiYnVzaW5lc3MgMSAwIDAgYWNjZXB0YW5jZSIsImJ5IHVzaW5nIHRoZSBzb2Z0d2FyZSBmYWlyIiwidXNpbmcgdGhlIHNvZnR3YXJlIGZhaXIgdXNlIiwidGhlIHNvZnR3YXJlIGZhaXIgdXNlIHlvdSIsInNvZnR3YXJlIGZhaXIgdXNlIHlvdSBtYXkiLCJkbyBub3QgbGltaXQgdGhlbSBzbWFsbCIsIm5vdCBsaW1pdCB0aGVtIHNtYWxsIGJ1c2luZXNzIiwibGltaXQgdGhlbSBzbWFsbCBidXNpbmVzcyB1c2UiLCJ0aGVtIHNtYWxsIGJ1c2luZXNzIHVzZSBvZiIsInNtYWxsIGJ1c2luZXNzIHVzZSBvZiB0aGUiLCJidXNpbmVzcyB1c2Ugb2YgdGhlIHNvZnR3YXJlIiwidXNlIG9mIHRoZSBzb2Z0d2FyZSBmb3IiLCJvZiB0aGUgc29mdHdhcmUgZm9yIHRoZSIsInRoZSBzb2Z0d2FyZSBmb3IgdGhlIGJlbmVmaXQiLCJzb2Z0d2FyZSBmb3IgdGhlIGJlbmVmaXQgb2YiLCJmb3IgdGhlIGJlbmVmaXQgb2YgeW91ciIsInRoZSBiZW5lZml0IG9mIHlvdXIgY29tcGFueSIsImJlbmVmaXQgb2YgeW91ciBjb21wYW55IGlzIiwib2YgeW91ciBjb21wYW55IGlzIHVzZSIsInlvdXIgY29tcGFueSBpcyB1c2UgZm9yIiwiY29tcGFueSBpcyB1c2UgZm9yIGEiXX0seyJsaWNlbnNlVGV4dHMiOlsiUG9zdGdyZVNRTCBEYXRhYmFzZSBNYW5hZ2VtZW50IFN5c3RlbVxuXG4oZm9ybWVybHkga25vd24gYXMgUG9zdGdyZXMsIHRoZW4gYXMgUG9zdGdyZXM5NSkgUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMTAsIFRoZSBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cFxuXG5Qb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWFcblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCB3aXRob3V0IGZlZSwgYW5kIHdpdGhvdXQgYSB3cml0dGVuIGFncmVlbWVudCBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMgYXBwZWFyIGluIGFsbCBjb3BpZXMuXG5cbklOIE5PIEVWRU5UIFNIQUxMIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBJTkNMVURJTkcgTE9TVCBQUk9GSVRTLCBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOIElGIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cblRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUyBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIEFORCBUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIEhBUyBOTyBPQkxJR0FUSU9OUyBUTyBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuIl0sImxpY2Vuc2VJZHMiOlsiUG9zdGdyZVNRTCJdLCJrZXl3b3JkcyI6WyJwb3N0Z3Jlc3FsIGRhdGFiYXNlIG1hbmFnZW1lbnQiLCJkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSIsIm1hbmFnZW1lbnQgc3lzdGVtIGZvcm1lcmx5Iiwic3lzdGVtIGZvcm1lcmx5IGtub3duIiwia25vd24gYXMgcG9zdGdyZXMiLCJhcyBwb3N0Z3JlcyB0aGVuIiwicG9zdGdyZXMgdGhlbiBhcyIsInRoZW4gYXMgcG9zdGdyZXM5NSIsImFzIHBvc3RncmVzOTUgcG9ydGlvbnMiLCJwb3N0Z3Jlczk1IHBvcnRpb25zIGNvcHlyaWdodCIsIjE5OTYgMjAxMCB0aGUiLCIyMDEwIHRoZSBwb3N0Z3Jlc3FsIiwidGhlIHBvc3RncmVzcWwgZ2xvYmFsIiwicG9zdGdyZXNxbCBnbG9iYWwgZGV2ZWxvcG1lbnQiLCJnbG9iYWwgZGV2ZWxvcG1lbnQgZ3JvdXAiLCJkZXZlbG9wbWVudCBncm91cCBwb3J0aW9ucyIsImdyb3VwIHBvcnRpb25zIGNvcHlyaWdodCIsImMgMTk5NCB0aGUiLCIxOTk0IHRoZSByZWdlbnRzIiwiY2FsaWZvcm5pYSBwZXJtaXNzaW9uIHRvIiwiZmVlIGFuZCB3aXRob3V0Iiwid2l0aG91dCBhIHdyaXR0ZW4iLCJ3cml0dGVuIGFncmVlbWVudCBpcyIsImFncmVlbWVudCBpcyBoZXJlYnkiLCJmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMiLCJ0d28gcGFyYWdyYXBocyBhcHBlYXIiLCJwYXJhZ3JhcGhzIGFwcGVhciBpbiIsImFsbCBjb3BpZXMgaW4iLCJjb3BpZXMgaW4gbm8iLCJzaGFsbCB0aGUgdW5pdmVyc2l0eSIsImxvc3QgcHJvZml0cyBhcmlzaW5nIiwicHJvZml0cyBhcmlzaW5nIG91dCIsIml0cyBkb2N1bWVudGF0aW9uIGV2ZW4iLCJpZiB0aGUgdW5pdmVyc2l0eSIsImNhbGlmb3JuaWEgaGFzIGJlZW4iLCJkYW1hZ2UgdGhlIHVuaXZlcnNpdHkiLCJvZiBjYWxpZm9ybmlhIHNwZWNpZmljYWxseSIsImNhbGlmb3JuaWEgc3BlY2lmaWNhbGx5IGRpc2NsYWltcyIsImRpc2NsYWltcyBhbnkgd2FycmFudGllcyIsInB1cnBvc2UgdGhlIHNvZnR3YXJlIiwic29mdHdhcmUgcHJvdmlkZWQgaGVyZXVuZGVyIiwicHJvdmlkZWQgaGVyZXVuZGVyIGlzIiwiaGVyZXVuZGVyIGlzIG9uIiwiaXMgb24gYW4iLCJjYWxpZm9ybmlhIGhhcyBubyIsImhhcyBubyBvYmxpZ2F0aW9ucyIsIm5vIG9ibGlnYXRpb25zIHRvIiwib2JsaWdhdGlvbnMgdG8gcHJvdmlkZSIsInBvc3RncmVzcWwgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0iLCJkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSBmb3JtZXJseSIsIm1hbmFnZW1lbnQgc3lzdGVtIGZvcm1lcmx5IGtub3duIiwic3lzdGVtIGZvcm1lcmx5IGtub3duIGFzIiwiZm9ybWVybHkga25vd24gYXMgcG9zdGdyZXMiLCJrbm93biBhcyBwb3N0Z3JlcyB0aGVuIiwiYXMgcG9zdGdyZXMgdGhlbiBhcyIsInBvc3RncmVzIHRoZW4gYXMgcG9zdGdyZXM5NSIsInRoZW4gYXMgcG9zdGdyZXM5NSBwb3J0aW9ucyIsImFzIHBvc3RncmVzOTUgcG9ydGlvbnMgY29weXJpZ2h0IiwicG9zdGdyZXM5NSBwb3J0aW9ucyBjb3B5cmlnaHQgYyIsInBvcnRpb25zIGNvcHlyaWdodCBjIDE5OTYiLCJjIDE5OTYgMjAxMCB0aGUiLCIxOTk2IDIwMTAgdGhlIHBvc3RncmVzcWwiLCIyMDEwIHRoZSBwb3N0Z3Jlc3FsIGdsb2JhbCIsInRoZSBwb3N0Z3Jlc3FsIGdsb2JhbCBkZXZlbG9wbWVudCIsInBvc3RncmVzcWwgZ2xvYmFsIGRldmVsb3BtZW50IGdyb3VwIiwiZ2xvYmFsIGRldmVsb3BtZW50IGdyb3VwIHBvcnRpb25zIiwiZGV2ZWxvcG1lbnQgZ3JvdXAgcG9ydGlvbnMgY29weXJpZ2h0IiwiZ3JvdXAgcG9ydGlvbnMgY29weXJpZ2h0IGMiLCJwb3J0aW9ucyBjb3B5cmlnaHQgYyAxOTk0IiwiY29weXJpZ2h0IGMgMTk5NCB0aGUiLCJjIDE5OTQgdGhlIHJlZ2VudHMiLCIxOTk0IHRoZSByZWdlbnRzIG9mIiwib2YgY2FsaWZvcm5pYSBwZXJtaXNzaW9uIHRvIiwiY2FsaWZvcm5pYSBwZXJtaXNzaW9uIHRvIHVzZSIsInB1cnBvc2Ugd2l0aG91dCBmZWUgYW5kIiwid2l0aG91dCBmZWUgYW5kIHdpdGhvdXQiLCJmZWUgYW5kIHdpdGhvdXQgYSIsImFuZCB3aXRob3V0IGEgd3JpdHRlbiIsIndpdGhvdXQgYSB3cml0dGVuIGFncmVlbWVudCIsImEgd3JpdHRlbiBhZ3JlZW1lbnQgaXMiLCJ3cml0dGVuIGFncmVlbWVudCBpcyBoZXJlYnkiLCJhZ3JlZW1lbnQgaXMgaGVyZWJ5IGdyYW50ZWQiLCJub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIiwiYW5kIHRoaXMgcGFyYWdyYXBoIGFuZCIsInBhcmFncmFwaCBhbmQgdGhlIGZvbGxvd2luZyIsImFuZCB0aGUgZm9sbG93aW5nIHR3byIsInRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMiLCJmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMgYXBwZWFyIiwidHdvIHBhcmFncmFwaHMgYXBwZWFyIGluIiwicGFyYWdyYXBocyBhcHBlYXIgaW4gYWxsIiwiaW4gYWxsIGNvcGllcyBpbiIsImFsbCBjb3BpZXMgaW4gbm8iLCJjb3BpZXMgaW4gbm8gZXZlbnQiLCJldmVudCBzaGFsbCB0aGUgdW5pdmVyc2l0eSIsInNoYWxsIHRoZSB1bml2ZXJzaXR5IG9mIiwiY2FsaWZvcm5pYSBiZSBsaWFibGUgdG8iLCJjb25zZXF1ZW50aWFsIGRhbWFnZXMgaW5jbHVkaW5nIGxvc3QiLCJpbmNsdWRpbmcgbG9zdCBwcm9maXRzIGFyaXNpbmciLCJsb3N0IHByb2ZpdHMgYXJpc2luZyBvdXQiLCJwcm9maXRzIGFyaXNpbmcgb3V0IG9mIiwiYW5kIGl0cyBkb2N1bWVudGF0aW9uIGV2ZW4iLCJpdHMgZG9jdW1lbnRhdGlvbiBldmVuIGlmIiwiZXZlbiBpZiB0aGUgdW5pdmVyc2l0eSIsImlmIHRoZSB1bml2ZXJzaXR5IG9mIiwib2YgY2FsaWZvcm5pYSBoYXMgYmVlbiIsImNhbGlmb3JuaWEgaGFzIGJlZW4gYWR2aXNlZCIsInN1Y2ggZGFtYWdlIHRoZSB1bml2ZXJzaXR5IiwiZGFtYWdlIHRoZSB1bml2ZXJzaXR5IG9mIiwidW5pdmVyc2l0eSBvZiBjYWxpZm9ybmlhIHNwZWNpZmljYWxseSIsIm9mIGNhbGlmb3JuaWEgc3BlY2lmaWNhbGx5IGRpc2NsYWltcyIsImNhbGlmb3JuaWEgc3BlY2lmaWNhbGx5IGRpc2NsYWltcyBhbnkiLCJzcGVjaWZpY2FsbHkgZGlzY2xhaW1zIGFueSB3YXJyYW50aWVzIiwiZGlzY2xhaW1zIGFueSB3YXJyYW50aWVzIGluY2x1ZGluZyIsInBhcnRpY3VsYXIgcHVycG9zZSB0aGUgc29mdHdhcmUiLCJwdXJwb3NlIHRoZSBzb2Z0d2FyZSBwcm92aWRlZCIsInRoZSBzb2Z0d2FyZSBwcm92aWRlZCBoZXJldW5kZXIiLCJzb2Z0d2FyZSBwcm92aWRlZCBoZXJldW5kZXIgaXMiLCJwcm92aWRlZCBoZXJldW5kZXIgaXMgb24iLCJoZXJldW5kZXIgaXMgb24gYW4iLCJpcyBvbiBhbiBhcyIsImJhc2lzIGFuZCB0aGUgdW5pdmVyc2l0eSIsImFuZCB0aGUgdW5pdmVyc2l0eSBvZiIsIm9mIGNhbGlmb3JuaWEgaGFzIG5vIiwiY2FsaWZvcm5pYSBoYXMgbm8gb2JsaWdhdGlvbnMiLCJoYXMgbm8gb2JsaWdhdGlvbnMgdG8iLCJubyBvYmxpZ2F0aW9ucyB0byBwcm92aWRlIiwib2JsaWdhdGlvbnMgdG8gcHJvdmlkZSBtYWludGVuYW5jZSIsInBvc3RncmVzcWwgZGF0YWJhc2UgbWFuYWdlbWVudCBzeXN0ZW0gZm9ybWVybHkiLCJkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSBmb3JtZXJseSBrbm93biIsIm1hbmFnZW1lbnQgc3lzdGVtIGZvcm1lcmx5IGtub3duIGFzIiwic3lzdGVtIGZvcm1lcmx5IGtub3duIGFzIHBvc3RncmVzIiwiZm9ybWVybHkga25vd24gYXMgcG9zdGdyZXMgdGhlbiIsImtub3duIGFzIHBvc3RncmVzIHRoZW4gYXMiLCJhcyBwb3N0Z3JlcyB0aGVuIGFzIHBvc3RncmVzOTUiLCJwb3N0Z3JlcyB0aGVuIGFzIHBvc3RncmVzOTUgcG9ydGlvbnMiLCJ0aGVuIGFzIHBvc3RncmVzOTUgcG9ydGlvbnMgY29weXJpZ2h0IiwiYXMgcG9zdGdyZXM5NSBwb3J0aW9ucyBjb3B5cmlnaHQgYyIsInBvc3RncmVzOTUgcG9ydGlvbnMgY29weXJpZ2h0IGMgMTk5NiIsInBvcnRpb25zIGNvcHlyaWdodCBjIDE5OTYgMjAxMCIsImNvcHlyaWdodCBjIDE5OTYgMjAxMCB0aGUiLCJjIDE5OTYgMjAxMCB0aGUgcG9zdGdyZXNxbCIsIjE5OTYgMjAxMCB0aGUgcG9zdGdyZXNxbCBnbG9iYWwiLCIyMDEwIHRoZSBwb3N0Z3Jlc3FsIGdsb2JhbCBkZXZlbG9wbWVudCIsInRoZSBwb3N0Z3Jlc3FsIGdsb2JhbCBkZXZlbG9wbWVudCBncm91cCIsInBvc3RncmVzcWwgZ2xvYmFsIGRldmVsb3BtZW50IGdyb3VwIHBvcnRpb25zIiwiZ2xvYmFsIGRldmVsb3BtZW50IGdyb3VwIHBvcnRpb25zIGNvcHlyaWdodCIsImRldmVsb3BtZW50IGdyb3VwIHBvcnRpb25zIGNvcHlyaWdodCBjIiwiZ3JvdXAgcG9ydGlvbnMgY29weXJpZ2h0IGMgMTk5NCIsInBvcnRpb25zIGNvcHlyaWdodCBjIDE5OTQgdGhlIiwiY29weXJpZ2h0IGMgMTk5NCB0aGUgcmVnZW50cyIsImMgMTk5NCB0aGUgcmVnZW50cyBvZiIsIjE5OTQgdGhlIHJlZ2VudHMgb2YgdGhlIiwidW5pdmVyc2l0eSBvZiBjYWxpZm9ybmlhIHBlcm1pc3Npb24gdG8iLCJvZiBjYWxpZm9ybmlhIHBlcm1pc3Npb24gdG8gdXNlIiwiY2FsaWZvcm5pYSBwZXJtaXNzaW9uIHRvIHVzZSBjb3B5IiwiZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aG91dCIsImFueSBwdXJwb3NlIHdpdGhvdXQgZmVlIGFuZCIsInB1cnBvc2Ugd2l0aG91dCBmZWUgYW5kIHdpdGhvdXQiLCJ3aXRob3V0IGZlZSBhbmQgd2l0aG91dCBhIiwiZmVlIGFuZCB3aXRob3V0IGEgd3JpdHRlbiIsImFuZCB3aXRob3V0IGEgd3JpdHRlbiBhZ3JlZW1lbnQiLCJ3aXRob3V0IGEgd3JpdHRlbiBhZ3JlZW1lbnQgaXMiLCJhIHdyaXR0ZW4gYWdyZWVtZW50IGlzIGhlcmVieSIsIndyaXR0ZW4gYWdyZWVtZW50IGlzIGhlcmVieSBncmFudGVkIiwiYWdyZWVtZW50IGlzIGhlcmVieSBncmFudGVkIHByb3ZpZGVkIiwiY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGgiLCJub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFuZCIsImFuZCB0aGlzIHBhcmFncmFwaCBhbmQgdGhlIiwidGhpcyBwYXJhZ3JhcGggYW5kIHRoZSBmb2xsb3dpbmciLCJwYXJhZ3JhcGggYW5kIHRoZSBmb2xsb3dpbmcgdHdvIiwiYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMiLCJ0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciIsImZvbGxvd2luZyB0d28gcGFyYWdyYXBocyBhcHBlYXIgaW4iLCJ0d28gcGFyYWdyYXBocyBhcHBlYXIgaW4gYWxsIiwicGFyYWdyYXBocyBhcHBlYXIgaW4gYWxsIGNvcGllcyIsImFwcGVhciBpbiBhbGwgY29waWVzIGluIiwiaW4gYWxsIGNvcGllcyBpbiBubyIsImFsbCBjb3BpZXMgaW4gbm8gZXZlbnQiLCJjb3BpZXMgaW4gbm8gZXZlbnQgc2hhbGwiLCJubyBldmVudCBzaGFsbCB0aGUgdW5pdmVyc2l0eSIsImV2ZW50IHNoYWxsIHRoZSB1bml2ZXJzaXR5IG9mIiwic2hhbGwgdGhlIHVuaXZlcnNpdHkgb2YgY2FsaWZvcm5pYSIsIm9mIGNhbGlmb3JuaWEgYmUgbGlhYmxlIHRvIiwiY2FsaWZvcm5pYSBiZSBsaWFibGUgdG8gYW55Iiwib3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGluY2x1ZGluZyBsb3N0IiwiY29uc2VxdWVudGlhbCBkYW1hZ2VzIGluY2x1ZGluZyBsb3N0IHByb2ZpdHMiLCJkYW1hZ2VzIGluY2x1ZGluZyBsb3N0IHByb2ZpdHMgYXJpc2luZyIsImluY2x1ZGluZyBsb3N0IHByb2ZpdHMgYXJpc2luZyBvdXQiLCJsb3N0IHByb2ZpdHMgYXJpc2luZyBvdXQgb2YiLCJwcm9maXRzIGFyaXNpbmcgb3V0IG9mIHRoZSIsIm9mIHRoaXMgc29mdHdhcmUgYW5kIGl0cyIsInNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBldmVuIiwiYW5kIGl0cyBkb2N1bWVudGF0aW9uIGV2ZW4gaWYiLCJpdHMgZG9jdW1lbnRhdGlvbiBldmVuIGlmIHRoZSIsImRvY3VtZW50YXRpb24gZXZlbiBpZiB0aGUgdW5pdmVyc2l0eSIsImV2ZW4gaWYgdGhlIHVuaXZlcnNpdHkgb2YiLCJpZiB0aGUgdW5pdmVyc2l0eSBvZiBjYWxpZm9ybmlhIiwidW5pdmVyc2l0eSBvZiBjYWxpZm9ybmlhIGhhcyBiZWVuIiwib2YgY2FsaWZvcm5pYSBoYXMgYmVlbiBhZHZpc2VkIiwiY2FsaWZvcm5pYSBoYXMgYmVlbiBhZHZpc2VkIG9mIl19LHsibGljZW5zZVRleHRzIjpbIlBZVEhPTiBTT0ZUV0FSRSBGT1VOREFUSU9OIExJQ0VOU0UgVkVSU0lPTiAyXG5cbiAgIDEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiB0aGUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gKFwiUFNGXCIpLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uIChcIkxpY2Vuc2VlXCIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nIHRoaXMgc29mdHdhcmUgKFwiUHl0aG9uXCIpIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi5cblxuICAgMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgUFNGIGhlcmVieSBncmFudHMgTGljZW5zZWUgYSBub25leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgd29ybGQtd2lkZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24gYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgUFNGJ3MgTGljZW5zZSBBZ3JlZW1lbnQgYW5kIFBTRidzIG5vdGljZSBvZiBjb3B5cmlnaHQsIGkuZS4sIFwiQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBBbGwgUmlnaHRzIFJlc2VydmVkXCIgYXJlIHJldGFpbmVkIGluIFB5dGhvbiBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2VlLlxuXG4gICAzLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZlIHdvcmsgdGhhdCBpcyBiYXNlZCBvbiBvciBpbmNvcnBvcmF0ZXMgUHl0aG9uIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGFuZCB3YW50cyB0byBtYWtlIHRoZSBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4gTGljZW5zZWUgaGVyZWJ5IGFncmVlcyB0byBpbmNsdWRlIGluIGFueSBzdWNoIHdvcmsgYSBicmllZiBzdW1tYXJ5IG9mIHRoZSBjaGFuZ2VzIG1hZGUgdG8gUHl0aG9uLlxuXG4gICA0LiBQU0YgaXMgbWFraW5nIFB5dGhvbiBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gXCJBUyBJU1wiIGJhc2lzLiBQU0YgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRC4gQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgUFNGIE1BS0VTIE5PIEFORCBESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBQWVRIT04gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy5cblxuICAgNS4gUFNGIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhPTiBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTIEEgUkVTVUxUIE9GIE1PRElGWUlORywgRElTVFJJQlVUSU5HLCBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OLCBPUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuXG5cbiAgIDYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwgYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgNy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gUFNGIGFuZCBMaWNlbnNlZS4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBQU0YgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55IHRoaXJkIHBhcnR5LlxuXG4gICA4LiBCeSBjb3B5aW5nLCBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyBQeXRob24sIExpY2Vuc2VlIGFncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gQkVPUEVOLkNPTSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDIuMFxuXG5CRU9QRU4gUFlUSE9OIE9QRU4gU09VUkNFIExJQ0VOU0UgQUdSRUVNRU5UIFZFUlNJT04gMVxuXG4gICAxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gQmVPcGVuLmNvbSAoXCJCZU9wZW5cIiksIGhhdmluZyBhbiBvZmZpY2UgYXQgMTYwIFNhcmF0b2dhIEF2ZW51ZSwgU2FudGEgQ2xhcmEsIENBIDk1MDUxLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uIChcIkxpY2Vuc2VlXCIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nIHRoaXMgc29mdHdhcmUgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIChcInRoZSBTb2Z0d2FyZVwiKS5cblxuICAgMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBCZU9wZW4gUHl0aG9uIExpY2Vuc2UgQWdyZWVtZW50LCBCZU9wZW4gaGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgd29ybGQtd2lkZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSB0aGUgU29mdHdhcmUgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgdGhlIEJlT3BlbiBQeXRob24gTGljZW5zZSBpcyByZXRhaW5lZCBpbiB0aGUgU29mdHdhcmUsIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuXG5cbiAgIDMuIEJlT3BlbiBpcyBtYWtpbmcgdGhlIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiBcIkFTIElTXCIgYmFzaXMuIEJFT1BFTiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELiBCWSBXQVkgT0YgRVhBTVBMRSwgQlVUIE5PVCBMSU1JVEFUSU9OLCBCRU9QRU4gTUFLRVMgTk8gQU5EIERJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLlxuXG4gICA0LiBCRU9QRU4gU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgVEhFIFNPRlRXQVJFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMgQSBSRVNVTFQgT0YgVVNJTkcsIE1PRElGWUlORyBPUiBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFLCBPUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuXG5cbiAgIDUuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwgYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgaW50ZXJwcmV0ZWQgaW4gYWxsIHJlc3BlY3RzIGJ5IHRoZSBsYXcgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2x1ZGluZyBjb25mbGljdCBvZiBsYXcgcHJvdmlzaW9ucy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gQmVPcGVuIGFuZCBMaWNlbnNlZS4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBCZU9wZW4gdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBpbiBhIHRyYWRlbWFyayBzZW5zZSB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgb3Igc2VydmljZXMgb2YgTGljZW5zZWUsIG9yIGFueSB0aGlyZCBwYXJ0eS4gQXMgYW4gZXhjZXB0aW9uLCB0aGUgXCJCZU9wZW4gUHl0aG9uXCIgbG9nb3MgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cucHl0aG9ubGFicy5jb20vbG9nb3MuaHRtbCBtYXkgYmUgdXNlZCBhY2NvcmRpbmcgdG8gdGhlIHBlcm1pc3Npb25zIGdyYW50ZWQgb24gdGhhdCB3ZWIgcGFnZS5cblxuICAgNy4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIHNvZnR3YXJlLCBMaWNlbnNlZSBhZ3JlZXMgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIENOUkkgT1BFTiBTT1VSQ0UgTElDRU5TRSBBR1JFRU1FTlQgKGZvciBQeXRob24gMS42YjEpIElNUE9SVEFOVDogUExFQVNFIFJFQUQgVEhFIEZPTExPV0lORyBBR1JFRU1FTlQgQ0FSRUZVTExZLlxuXG5CWSBDTElDS0lORyBPTiBcIkFDQ0VQVFwiIFdIRVJFIElORElDQVRFRCBCRUxPVywgT1IgQlkgQ09QWUlORywgSU5TVEFMTElORyBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OIDEuNiwgYmV0YSAxIFNPRlRXQVJFLCBZT1UgQVJFIERFRU1FRCBUTyBIQVZFIEFHUkVFRCBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBMSUNFTlNFIEFHUkVFTUVOVC5cblxuICAgMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMsIGhhdmluZyBhbiBvZmZpY2UgYXQgMTg5NSBQcmVzdG9uIFdoaXRlIERyaXZlLCBSZXN0b24sIFZBIDIwMTkxIChcIkNOUklcIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKFwiTGljZW5zZWVcIikgYWNjZXNzaW5nIGFuZCBvdGhlcndpc2UgdXNpbmcgUHl0aG9uIDEuNiwgYmV0YSAxIHNvZnR3YXJlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgYXMgcmVsZWFzZWQgYXQgdGhlIHd3dy5weXRob24ub3JnIEludGVybmV0IHNpdGUgb24gQXVndXN0IDQsIDIwMDAgKFwiUHl0aG9uIDEuNmIxXCIpLlxuXG4gICAyLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBDTlJJIGhlcmVieSBncmFudHMgTGljZW5zZWUgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uIDEuNmIxIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IENOUklzIExpY2Vuc2UgQWdyZWVtZW50IGlzIHJldGFpbmVkIGluIFB5dGhvbiAxLjZiMSwgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS5cblxuICAgQWx0ZXJuYXRlbHksIGluIGxpZXUgb2YgQ05SSXMgTGljZW5zZSBBZ3JlZW1lbnQsIExpY2Vuc2VlIG1heSBzdWJzdGl0dXRlIHRoZSBmb2xsb3dpbmcgdGV4dCAob21pdHRpbmcgdGhlIHF1b3Rlcyk6IFwiUHl0aG9uIDEuNiwgYmV0YSAxLCBpcyBtYWRlIGF2YWlsYWJsZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpbiBDTlJJcyBMaWNlbnNlIEFncmVlbWVudC4gVGhpcyBBZ3JlZW1lbnQgbWF5IGJlIGxvY2F0ZWQgb24gdGhlIEludGVybmV0IHVzaW5nIHRoZSBmb2xsb3dpbmcgdW5pcXVlLCBwZXJzaXN0ZW50IGlkZW50aWZpZXIgKGtub3duIGFzIGEgaGFuZGxlKTogMTg5NS4yMi8xMDExLiBUaGlzIEFncmVlbWVudCBtYXkgYWxzbyBiZSBvYnRhaW5lZCBmcm9tIGEgcHJveHkgc2VydmVyIG9uIHRoZSBJbnRlcm5ldCB1c2luZyB0aGUgVVJMOmh0dHA6Ly9oZGwuaGFuZGxlLm5ldC8xODk1LjIyLzEwMTFcIi5cblxuICAgMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24gb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiAxLjZiMSBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZSB0aGUgZGVyaXZhdGl2ZSB3b3JrIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGFzIHByb3ZpZGVkIGhlcmVpbiwgdGhlbiBMaWNlbnNlZSBoZXJlYnkgYWdyZWVzIHRvIGluZGljYXRlIGluIGFueSBzdWNoIHdvcmsgdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyBtYWRlIHRvIFB5dGhvbiAxLjZiMS5cblxuICAgNC4gQ05SSSBpcyBtYWtpbmcgUHl0aG9uIDEuNmIxIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiBcIkFTIElTXCIgYmFzaXMuIENOUkkgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRC4gQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQ05SSSBNQUtFUyBOTyBBTkQgRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIDEuNmIxIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuXG5cbiAgIDUuIENOUkkgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgVEhFIFNPRlRXQVJFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMgQSBSRVNVTFQgT0YgVVNJTkcsIE1PRElGWUlORyBPUiBESVNUUklCVVRJTkcgUFlUSE9OIDEuNmIxLCBPUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuXG5cbiAgIDYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwgYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuICAgNy4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgaW50ZXJwcmV0ZWQgaW4gYWxsIHJlc3BlY3RzIGJ5IHRoZSBsYXcgb2YgdGhlIFN0YXRlIG9mIFZpcmdpbmlhLCBleGNsdWRpbmcgY29uZmxpY3Qgb2YgbGF3IHByb3Zpc2lvbnMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIENOUkkgYW5kIExpY2Vuc2VlLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIENOUkkgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55IHRoaXJkIHBhcnR5LlxuXG4gICA4LiBCeSBjbGlja2luZyBvbiB0aGUgXCJBQ0NFUFRcIiBidXR0b24gd2hlcmUgaW5kaWNhdGVkLCBvciBieSBjb3B5aW5nLCBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42YjEsIExpY2Vuc2VlIGFncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gQUNDRVBUIENXSSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDAuOS4wIFRIUk9VR0ggMS4yIENvcHlyaWdodCAoYykgMTk5MSAtIDE5OTUsIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSBBbXN0ZXJkYW0sIFRoZSBOZXRoZXJsYW5kcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0gb3IgQ1dJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLlxuXG5TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4iXSwibGljZW5zZUlkcyI6WyJQeXRob24tMi4wIl0sImtleXdvcmRzIjpbImFncmVlbWVudCBiZW9wZW4gY29tIiwiYmVvcGVuIGNvbSBsaWNlbnNlIiwiY29tIGxpY2Vuc2UgYWdyZWVtZW50IiwiZm9yIHB5dGhvbiAyIiwicHl0aG9uIDIgMCIsIjIgMCBiZW9wZW4iLCIwIGJlb3BlbiBweXRob24iLCJiZW9wZW4gcHl0aG9uIG9wZW4iLCJweXRob24gb3BlbiBzb3VyY2UiLCJpcyBiZXR3ZWVuIGJlb3BlbiIsImJldHdlZW4gYmVvcGVuIGNvbSIsImJlb3BlbiBjb20gYmVvcGVuIiwiY29tIGJlb3BlbiBoYXZpbmciLCJiZW9wZW4gaGF2aW5nIGFuIiwib2ZmaWNlIGF0IDE2MCIsImF0IDE2MCBzYXJhdG9nYSIsIjE2MCBzYXJhdG9nYSBhdmVudWUiLCJzYXJhdG9nYSBhdmVudWUgc2FudGEiLCJhdmVudWUgc2FudGEgY2xhcmEiLCJzYW50YSBjbGFyYSBjYSIsImNsYXJhIGNhIDk1MDUxIiwiY2EgOTUwNTEgYW5kIiwiOTUwNTEgYW5kIHRoZSIsIm9mIHRoaXMgYmVvcGVuIiwidGhpcyBiZW9wZW4gcHl0aG9uIiwicHl0aG9uIGxpY2Vuc2UgYWdyZWVtZW50IiwiYWdyZWVtZW50IGJlb3BlbiBoZXJlYnkiLCJiZW9wZW4gaGVyZWJ5IGdyYW50cyIsInRoYXQgdGhlIGJlb3BlbiIsInB5dGhvbiBsaWNlbnNlIGlzIiwibGljZW5zZWUgMyBiZW9wZW4iLCIzIGJlb3BlbiBpcyIsImJlb3BlbiBpcyBtYWtpbmciLCJpcyBiYXNpcyBiZW9wZW4iLCJiYXNpcyBiZW9wZW4gbWFrZXMiLCJub3QgbGltaXRhdGlvbiBiZW9wZW4iLCJsaW1pdGF0aW9uIGJlb3BlbiBtYWtlcyIsInJpZ2h0cyA0IGJlb3BlbiIsIjQgYmVvcGVuIHNoYWxsIiwiYmVvcGVuIHNoYWxsIG5vdCIsInBvc3NpYmlsaXR5IHRoZXJlb2YgNSIsInRoZXJlb2YgNSB0aGlzIiwiY29uZGl0aW9ucyA2IHRoaXMiLCJ2ZW50dXJlIGJldHdlZW4gYmVvcGVuIiwiYmV0d2VlbiBiZW9wZW4gYW5kIiwiYmVvcGVuIGFuZCBsaWNlbnNlZSIsInRvIHVzZSBiZW9wZW4iLCJ1c2UgYmVvcGVuIHRyYWRlbWFya3MiLCJiZW9wZW4gdHJhZGVtYXJrcyBvciIsInRoaXJkIHBhcnR5IGFzIiwicGFydHkgYXMgYW4iLCJhbiBleGNlcHRpb24gdGhlIiwiZXhjZXB0aW9uIHRoZSBiZW9wZW4iLCJiZW9wZW4gcHl0aG9uIGxvZ29zIiwicHl0aG9uIGxvZ29zIGF2YWlsYWJsZSIsImh0dHAgd3d3IHB5dGhvbmxhYnMiLCJ3d3cgcHl0aG9ubGFicyBjb20iLCJweXRob25sYWJzIGNvbSBsb2dvcyIsImNvbSBsb2dvcyBodG1sIiwibG9nb3MgaHRtbCBtYXkiLCJodG1sIG1heSBiZSIsImJlIHVzZWQgYWNjb3JkaW5nIiwidXNlZCBhY2NvcmRpbmcgdG8iLCJwZXJtaXNzaW9ucyBncmFudGVkIG9uIiwiZ3JhbnRlZCBvbiB0aGF0Iiwib24gdGhhdCB3ZWIiLCJ0aGF0IHdlYiBwYWdlIiwid2ViIHBhZ2UgNyIsInBhZ2UgNyBieSIsIjcgYnkgY29weWluZyIsImFncmVlbWVudCBjbnJpIG9wZW4iLCJmb3IgcHl0aG9uIDEiLCIxIDZiMSBpbXBvcnRhbnQiLCI2YjEgaW1wb3J0YW50IHBsZWFzZSIsImFncmVlbWVudCBhY2NlcHQgY3dpIiwiYWNjZXB0IGN3aSBsaWNlbnNlIiwiY3dpIGxpY2Vuc2UgYWdyZWVtZW50IiwiZm9yIHB5dGhvbiAwIiwicHl0aG9uIDAgOSIsIjAgOSAwIiwiOSAwIHRocm91Z2giLCIwIHRocm91Z2ggMSIsIjEgMiBjb3B5cmlnaHQiLCIxOTkxIDE5OTUgc3RpY2h0aW5nIiwiMTk5NSBzdGljaHRpbmcgbWF0aGVtYXRpc2NoIiwibWF0aGVtYXRpc2NoIGNlbnRydW0gYW1zdGVyZGFtIiwiY2VudHJ1bSBhbXN0ZXJkYW0gdGhlIiwiYW1zdGVyZGFtIHRoZSBuZXRoZXJsYW5kcyIsInRoZSBuZXRoZXJsYW5kcyBhbGwiLCJuZXRoZXJsYW5kcyBhbGwgcmlnaHRzIiwibmFtZSBvZiBzdGljaHRpbmciLCJvZiBzdGljaHRpbmcgbWF0aGVtYXRpc2NoIiwibWF0aGVtYXRpc2NoIGNlbnRydW0gb3IiLCJjZW50cnVtIG9yIGN3aSIsIm9yIGN3aSBub3QiLCJjd2kgbm90IGJlIiwicHJpb3IgcGVybWlzc2lvbiBzdGljaHRpbmciLCJwZXJtaXNzaW9uIHN0aWNodGluZyBtYXRoZW1hdGlzY2giLCJtYXRoZW1hdGlzY2ggY2VudHJ1bSBkaXNjbGFpbXMiLCJjZW50cnVtIGRpc2NsYWltcyBhbGwiLCJldmVudCBzaGFsbCBzdGljaHRpbmciLCJzaGFsbCBzdGljaHRpbmcgbWF0aGVtYXRpc2NoIiwibWF0aGVtYXRpc2NoIGNlbnRydW0gYmUiLCJjZW50cnVtIGJlIGxpYWJsZSIsInRoaXMgbGljZW5zZSBhZ3JlZW1lbnQgYmVvcGVuIiwibGljZW5zZSBhZ3JlZW1lbnQgYmVvcGVuIGNvbSIsImFncmVlbWVudCBiZW9wZW4gY29tIGxpY2Vuc2UiLCJiZW9wZW4gY29tIGxpY2Vuc2UgYWdyZWVtZW50IiwiY29tIGxpY2Vuc2UgYWdyZWVtZW50IGZvciIsImFncmVlbWVudCBmb3IgcHl0aG9uIDIiLCJmb3IgcHl0aG9uIDIgMCIsInB5dGhvbiAyIDAgYmVvcGVuIiwiMiAwIGJlb3BlbiBweXRob24iLCIwIGJlb3BlbiBweXRob24gb3BlbiIsImJlb3BlbiBweXRob24gb3BlbiBzb3VyY2UiLCJweXRob24gb3BlbiBzb3VyY2UgbGljZW5zZSIsInNvdXJjZSBsaWNlbnNlIGFncmVlbWVudCB2ZXJzaW9uIiwiYWdyZWVtZW50IGlzIGJldHdlZW4gYmVvcGVuIiwiaXMgYmV0d2VlbiBiZW9wZW4gY29tIiwiYmV0d2VlbiBiZW9wZW4gY29tIGJlb3BlbiIsImJlb3BlbiBjb20gYmVvcGVuIGhhdmluZyIsImNvbSBiZW9wZW4gaGF2aW5nIGFuIiwiYmVvcGVuIGhhdmluZyBhbiBvZmZpY2UiLCJhbiBvZmZpY2UgYXQgMTYwIiwib2ZmaWNlIGF0IDE2MCBzYXJhdG9nYSIsImF0IDE2MCBzYXJhdG9nYSBhdmVudWUiLCIxNjAgc2FyYXRvZ2EgYXZlbnVlIHNhbnRhIiwic2FyYXRvZ2EgYXZlbnVlIHNhbnRhIGNsYXJhIiwiYXZlbnVlIHNhbnRhIGNsYXJhIGNhIiwic2FudGEgY2xhcmEgY2EgOTUwNTEiLCJjbGFyYSBjYSA5NTA1MSBhbmQiLCJjYSA5NTA1MSBhbmQgdGhlIiwiOTUwNTEgYW5kIHRoZSBpbmRpdmlkdWFsIiwidGhlIHNvZnR3YXJlIDIgc3ViamVjdCIsImNvbmRpdGlvbnMgb2YgdGhpcyBiZW9wZW4iLCJvZiB0aGlzIGJlb3BlbiBweXRob24iLCJ0aGlzIGJlb3BlbiBweXRob24gbGljZW5zZSIsImJlb3BlbiBweXRob24gbGljZW5zZSBhZ3JlZW1lbnQiLCJweXRob24gbGljZW5zZSBhZ3JlZW1lbnQgYmVvcGVuIiwibGljZW5zZSBhZ3JlZW1lbnQgYmVvcGVuIGhlcmVieSIsImFncmVlbWVudCBiZW9wZW4gaGVyZWJ5IGdyYW50cyIsImJlb3BlbiBoZXJlYnkgZ3JhbnRzIGxpY2Vuc2VlIiwiaG93ZXZlciB0aGF0IHRoZSBiZW9wZW4iLCJ0aGF0IHRoZSBiZW9wZW4gcHl0aG9uIiwidGhlIGJlb3BlbiBweXRob24gbGljZW5zZSIsImJlb3BlbiBweXRob24gbGljZW5zZSBpcyIsInB5dGhvbiBsaWNlbnNlIGlzIHJldGFpbmVkIiwibGljZW5zZSBpcyByZXRhaW5lZCBpbiIsImJ5IGxpY2Vuc2VlIDMgYmVvcGVuIiwibGljZW5zZWUgMyBiZW9wZW4gaXMiLCIzIGJlb3BlbiBpcyBtYWtpbmciLCJiZW9wZW4gaXMgbWFraW5nIHRoZSIsImFzIGlzIGJhc2lzIGJlb3BlbiIsImlzIGJhc2lzIGJlb3BlbiBtYWtlcyIsImJhc2lzIGJlb3BlbiBtYWtlcyBubyIsImJlb3BlbiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMiLCJidXQgbm90IGxpbWl0YXRpb24gYmVvcGVuIiwibm90IGxpbWl0YXRpb24gYmVvcGVuIG1ha2VzIiwibGltaXRhdGlvbiBiZW9wZW4gbWFrZXMgbm8iLCJiZW9wZW4gbWFrZXMgbm8gYW5kIiwicGFydHkgcmlnaHRzIDQgYmVvcGVuIiwicmlnaHRzIDQgYmVvcGVuIHNoYWxsIiwiNCBiZW9wZW4gc2hhbGwgbm90IiwiYmVvcGVuIHNoYWxsIG5vdCBiZSIsInRoZSBwb3NzaWJpbGl0eSB0aGVyZW9mIDUiLCJwb3NzaWJpbGl0eSB0aGVyZW9mIDUgdGhpcyIsInRoZXJlb2YgNSB0aGlzIGxpY2Vuc2UiLCI1IHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQiLCJhbmQgY29uZGl0aW9ucyA2IHRoaXMiLCJjb25kaXRpb25zIDYgdGhpcyBsaWNlbnNlIiwiam9pbnQgdmVudHVyZSBiZXR3ZWVuIGJlb3BlbiIsInZlbnR1cmUgYmV0d2VlbiBiZW9wZW4gYW5kIiwiYmV0d2VlbiBiZW9wZW4gYW5kIGxpY2Vuc2VlIiwiYmVvcGVuIGFuZCBsaWNlbnNlZSB0aGlzIiwicGVybWlzc2lvbiB0byB1c2UgYmVvcGVuIiwidG8gdXNlIGJlb3BlbiB0cmFkZW1hcmtzIiwidXNlIGJlb3BlbiB0cmFkZW1hcmtzIG9yIiwiYmVvcGVuIHRyYWRlbWFya3Mgb3IgdHJhZGUiLCJhbnkgdGhpcmQgcGFydHkgYXMiLCJ0aGlyZCBwYXJ0eSBhcyBhbiIsInBhcnR5IGFzIGFuIGV4Y2VwdGlvbiIsImFzIGFuIGV4Y2VwdGlvbiB0aGUiLCJhbiBleGNlcHRpb24gdGhlIGJlb3BlbiIsImV4Y2VwdGlvbiB0aGUgYmVvcGVuIHB5dGhvbiIsInRoZSBiZW9wZW4gcHl0aG9uIGxvZ29zIiwiYmVvcGVuIHB5dGhvbiBsb2dvcyBhdmFpbGFibGUiLCJweXRob24gbG9nb3MgYXZhaWxhYmxlIGF0IiwiYXQgaHR0cCB3d3cgcHl0aG9ubGFicyIsImh0dHAgd3d3IHB5dGhvbmxhYnMgY29tIiwid3d3IHB5dGhvbmxhYnMgY29tIGxvZ29zIiwicHl0aG9ubGFicyBjb20gbG9nb3MgaHRtbCIsImNvbSBsb2dvcyBodG1sIG1heSIsImxvZ29zIGh0bWwgbWF5IGJlIiwiaHRtbCBtYXkgYmUgdXNlZCIsIm1heSBiZSB1c2VkIGFjY29yZGluZyIsImJlIHVzZWQgYWNjb3JkaW5nIHRvIiwidXNlZCBhY2NvcmRpbmcgdG8gdGhlIiwiYWNjb3JkaW5nIHRvIHRoZSBwZXJtaXNzaW9ucyIsInRoZSBwZXJtaXNzaW9ucyBncmFudGVkIG9uIiwicGVybWlzc2lvbnMgZ3JhbnRlZCBvbiB0aGF0Il19LHsibGljZW5zZVRleHRzIjpbIlRIRSBRIFBVQkxJQyBMSUNFTlNFIHZlcnNpb24gMS4wIENvcHlyaWdodCAoQykgMTk5OS0yMDA1IFRyb2xsdGVjaCBBUywgTm9yd2F5LlxuXG5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQuXG5cblRoZSBpbnRlbnQgb2YgdGhpcyBsaWNlbnNlIGlzIHRvIGVzdGFibGlzaCBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHNvZnR3YXJlIHJlZ3VsYXRlZCBieSB0aGlzIGxpY2Vuc2UgdW5kZXIgdGhlIG9wZW4gc291cmNlIG1vZGVsLlxuXG5UaGlzIGxpY2Vuc2UgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgY29udGFpbmluZyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIHRoYXQgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgUSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDEuMC4gU3VjaCBzb2Z0d2FyZSBpcyBoZXJlaW4gcmVmZXJyZWQgdG8gYXMgdGhlIFNvZnR3YXJlLiBUaGlzIGxpY2Vuc2UgY292ZXJzIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSwgdXNlIG9mIHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9uIHByb2dyYW1zIGJhc2VkIG9uIHRoZSBTb2Z0d2FyZSwgYW5kIGRldmVsb3BtZW50IG9mIGZyZWUgc29mdHdhcmUgd2hpY2ggdXNlcyB0aGUgU29mdHdhcmUuXG5cbkdyYW50ZWQgUmlnaHRzXG5cbiAgIDEuIFlvdSBhcmUgZ3JhbnRlZCB0aGUgbm9uLWV4Y2x1c2l2ZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgbGljZW5zZSBwcm92aWRlZCB5b3UgYWdyZWUgdG8gYW5kIGNvbXBseSB3aXRoIGFueSBhbmQgYWxsIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLiBXaG9sZSBvciBwYXJ0aWFsIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUsIG9yIHNvZnR3YXJlIGl0ZW1zIHRoYXQgbGluayB3aXRoIHRoZSBTb2Z0d2FyZSwgaW4gYW55IGZvcm0gc2lnbmlmaWVzIGFjY2VwdGFuY2Ugb2YgdGhpcyBsaWNlbnNlLlxuXG4gICAyLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGluIHVubW9kaWZpZWQgZm9ybSBwcm92aWRlZCB0aGF0IHRoZSBlbnRpcmUgcGFja2FnZSwgaW5jbHVkaW5nIC0gYnV0IG5vdCByZXN0cmljdGVkIHRvIC0gY29weXJpZ2h0LCB0cmFkZW1hcmsgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMsIGFzIHJlbGVhc2VkIGJ5IHRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgU29mdHdhcmUsIGlzIGRpc3RyaWJ1dGVkLlxuXG4gICAzLiBZb3UgbWF5IG1ha2UgbW9kaWZpY2F0aW9ucyB0byB0aGUgU29mdHdhcmUgYW5kIGRpc3RyaWJ1dGUgeW91ciBtb2RpZmljYXRpb25zLCBpbiBhIGZvcm0gdGhhdCBpcyBzZXBhcmF0ZSBmcm9tIHRoZSBTb2Z0d2FyZSwgc3VjaCBhcyBwYXRjaGVzLiBUaGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBhcHBseSB0byBtb2RpZmljYXRpb25zOlxuXG4gICAgICBhLiBNb2RpZmljYXRpb25zIG11c3Qgbm90IGFsdGVyIG9yIHJlbW92ZSBhbnkgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlLlxuXG4gICAgICBiLiBXaGVuIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFNvZnR3YXJlIGFyZSByZWxlYXNlZCB1bmRlciB0aGlzIGxpY2Vuc2UsIGEgbm9uLWV4Y2x1c2l2ZSByb3lhbHR5LWZyZWUgcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIFNvZnR3YXJlIHRvIGRpc3RyaWJ1dGUgeW91ciBtb2RpZmljYXRpb24gaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSBwcm92aWRlZCBzdWNoIHZlcnNpb25zIHJlbWFpbiBhdmFpbGFibGUgdW5kZXIgdGhlc2UgdGVybXMgaW4gYWRkaXRpb24gdG8gYW55IG90aGVyIGxpY2Vuc2Uocykgb2YgdGhlIGluaXRpYWwgZGV2ZWxvcGVyLlxuXG4gICA0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mIHRoZSBTb2Z0d2FyZSBvciBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IHlvdSBtZWV0IHRoZXNlIHJlc3RyaWN0aW9uczpcblxuICAgICAgYS4gWW91IG11c3QgaW5jbHVkZSB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgaW4gdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgICAgYi4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlY2lwaWVudHMgb2YgdGhlIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcyBhcmUgYWxzbyBhYmxlIHRvIHJlY2VpdmUgdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgdG8gdGhlIGRpc3RyaWJ1dGVkIFNvZnR3YXJlLCBpbmNsdWRpbmcgYWxsIG1vZGlmaWNhdGlvbnMsIHdpdGhvdXQgYW55IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIGRhdGEgdHJhbnNmZXIsIGFuZCBwbGFjZSBwcm9taW5lbnQgbm90aWNlcyBpbiB0aGUgZGlzdHJpYnV0aW9uIGV4cGxhaW5pbmcgdGhpcy5cblxuICAgICAgYy4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIG1vZGlmaWNhdGlvbnMgaW5jbHVkZWQgaW4gdGhlIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuXG5cbiAgIDUuIFlvdSBtYXkgdXNlIHRoZSBvcmlnaW5hbCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUgdG8gY29tcGlsZSwgbGluayBhbmQgcnVuIGFwcGxpY2F0aW9uIHByb2dyYW1zIGxlZ2FsbHkgZGV2ZWxvcGVkIGJ5IHlvdSBvciBieSBvdGhlcnMuXG5cbiAgIDYuIFlvdSBtYXkgZGV2ZWxvcCBhcHBsaWNhdGlvbiBwcm9ncmFtcywgcmV1c2FibGUgY29tcG9uZW50cyBhbmQgb3RoZXIgc29mdHdhcmUgaXRlbXMgdGhhdCBsaW5rIHdpdGggdGhlIG9yaWdpbmFsIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZS4gVGhlc2UgaXRlbXMsIHdoZW4gZGlzdHJpYnV0ZWQsIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzOlxuXG4gICAgICBhLiBZb3UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgcmVjaXBpZW50cyBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgb2YgdGhlc2UgaXRlbXMgYXJlIGFsc28gYWJsZSB0byByZWNlaXZlIGFuZCB1c2UgdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgdG8gdGhlIGl0ZW1zIHdpdGhvdXQgYW55IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIGRhdGEgdHJhbnNmZXIuXG5cbiAgICAgIGIuIFlvdSBtdXN0IGV4cGxpY2l0bHkgbGljZW5zZSBhbGwgcmVjaXBpZW50cyBvZiB5b3VyIGl0ZW1zIHRvIHVzZSBhbmQgcmUtZGlzdHJpYnV0ZSBvcmlnaW5hbCBhbmQgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIGl0ZW1zIGluIGJvdGggbWFjaGluZS1leGVjdXRhYmxlIGFuZCBzb3VyY2UgY29kZSBmb3Jtcy4gVGhlIHJlY2lwaWVudHMgbXVzdCBiZSBhYmxlIHRvIGRvIHNvIHdpdGhvdXQgYW55IGNoYXJnZXMgd2hhdHNvZXZlciwgYW5kIHRoZXkgbXVzdCBiZSBhYmxlIHRvIHJlLWRpc3RyaWJ1dGUgdG8gYW55b25lIHRoZXkgY2hvb3NlLlxuXG4gICAgICBjLiBJZiB0aGUgaXRlbXMgYXJlIG5vdCBhdmFpbGFibGUgdG8gdGhlIGdlbmVyYWwgcHVibGljLCBhbmQgdGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBTb2Z0d2FyZSByZXF1ZXN0cyBhIGNvcHkgb2YgdGhlIGl0ZW1zLCB0aGVuIHlvdSBtdXN0IHN1cHBseSBvbmUuXG5cbkxpbWl0YXRpb25zIG9mIExpYWJpbGl0eVxuXG5JbiBubyBldmVudCBzaGFsbCB0aGUgaW5pdGlhbCBkZXZlbG9wZXJzIG9yIGNvcHlyaWdodCBob2xkZXJzIGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIC0gYnV0IG5vdCByZXN0cmljdGVkIHRvIC0gbG9zdCByZXZlbnVlIG9yIHByb2ZpdHMgb3Igb3RoZXIgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYgdGhleSBoYXZlIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLCBleGNlcHQgdG8gdGhlIGV4dGVudCBpbnZhcmlhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UuXG5cbk5vIFdhcnJhbnR5XG5cblRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBsaWNlbnNlIGRvY3VtZW50IGFyZSBwcm92aWRlZCBBUyBJUyB3aXRoIE5PIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBJTkNMVURJTkcgVEhFIFdBUlJBTlRZIE9GIERFU0lHTiwgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cblxuQ2hvaWNlIG9mIExhd1xuXG5UaGlzIGxpY2Vuc2UgaXMgZ292ZXJuZWQgYnkgdGhlIExhd3Mgb2YgTm9yd2F5LiBEaXNwdXRlcyBzaGFsbCBiZSBzZXR0bGVkIGJ5IE9zbG8gQ2l0eSBDb3VydC4iXSwibGljZW5zZUlkcyI6WyJRUEwtMS4wIl0sImtleXdvcmRzIjpbImMgMTk5OSAyMDA1IiwiMTk5OSAyMDA1IHRyb2xsdGVjaCIsIjIwMDUgdHJvbGx0ZWNoIGFzIiwidHJvbGx0ZWNoIGFzIG5vcndheSIsImFzIG5vcndheSBldmVyeW9uZSIsIm5vcndheSBldmVyeW9uZSBpcyIsImRvY3VtZW50IHRoZSBpbnRlbnQiLCJpcyB0byBlc3RhYmxpc2giLCJ0byBlc3RhYmxpc2ggZnJlZWRvbSIsImVzdGFibGlzaCBmcmVlZG9tIHRvIiwidGhlIHNvZnR3YXJlIHJlZ3VsYXRlZCIsInNvZnR3YXJlIHJlZ3VsYXRlZCBieSIsInJlZ3VsYXRlZCBieSB0aGlzIiwib3BlbiBzb3VyY2UgbW9kZWwiLCJzb3VyY2UgbW9kZWwgdGhpcyIsIm1vZGVsIHRoaXMgbGljZW5zZSIsImFueSBzb2Z0d2FyZSBjb250YWluaW5nIiwic29mdHdhcmUgY29udGFpbmluZyBhIiwiaG9sZGVyIHNheWluZyB0aGF0Iiwic2F5aW5nIHRoYXQgaXQiLCJvZiB0aGUgcSIsIjEgMCBzdWNoIiwiMCBzdWNoIHNvZnR3YXJlIiwic29mdHdhcmUgaXMgaGVyZWluIiwiaXMgaGVyZWluIHJlZmVycmVkIiwiaGVyZWluIHJlZmVycmVkIHRvIiwibGljZW5zZSBjb3ZlcnMgbW9kaWZpY2F0aW9uIiwiY292ZXJzIG1vZGlmaWNhdGlvbiBhbmQiLCJ0aGUgc29mdHdhcmUgdXNlIiwic29mdHdhcmUgdXNlIG9mIiwidXNlIG9mIHRoaXJkIiwidGhpcmQgcGFydHkgYXBwbGljYXRpb24iLCJwYXJ0eSBhcHBsaWNhdGlvbiBwcm9ncmFtcyIsImFwcGxpY2F0aW9uIHByb2dyYW1zIGJhc2VkIiwicHJvZ3JhbXMgYmFzZWQgb24iLCJzb2Z0d2FyZSBhbmQgZGV2ZWxvcG1lbnQiLCJhbmQgZGV2ZWxvcG1lbnQgb2YiLCJ3aGljaCB1c2VzIHRoZSIsInNvZnR3YXJlIGdyYW50ZWQgcmlnaHRzIiwiZ3JhbnRlZCByaWdodHMgMSIsInJpZ2h0cyAxIHlvdSIsImdyYW50ZWQgdGhlIG5vbiIsIm5vbiBleGNsdXNpdmUgcmlnaHRzIiwiZXhjbHVzaXZlIHJpZ2h0cyBzZXQiLCJwcm92aWRlZCB5b3UgYWdyZWUiLCJhZ3JlZSB0byBhbmQiLCJ0byBhbmQgY29tcGx5IiwiYW5kIGFsbCBjb25kaXRpb25zIiwiYWxsIGNvbmRpdGlvbnMgaW4iLCJ0aGlzIGxpY2Vuc2Ugd2hvbGUiLCJsaWNlbnNlIHdob2xlIG9yIiwid2hvbGUgb3IgcGFydGlhbCIsIm9yIHBhcnRpYWwgZGlzdHJpYnV0aW9uIiwicGFydGlhbCBkaXN0cmlidXRpb24gb2YiLCJzb2Z0d2FyZSBvciBzb2Z0d2FyZSIsIm9yIHNvZnR3YXJlIGl0ZW1zIiwiYW55IGZvcm0gc2lnbmlmaWVzIiwiZm9ybSBzaWduaWZpZXMgYWNjZXB0YW5jZSIsInNpZ25pZmllcyBhY2NlcHRhbmNlIG9mIiwic29mdHdhcmUgaW4gdW5tb2RpZmllZCIsInVubW9kaWZpZWQgZm9ybSBwcm92aWRlZCIsImVudGlyZSBwYWNrYWdlIGluY2x1ZGluZyIsInBhY2thZ2UgaW5jbHVkaW5nIGJ1dCIsInJlc3RyaWN0ZWQgdG8gY29weXJpZ2h0IiwidG8gY29weXJpZ2h0IHRyYWRlbWFyayIsImNvcHlyaWdodCB0cmFkZW1hcmsgbm90aWNlcyIsInRyYWRlbWFyayBub3RpY2VzIGFuZCIsImFuZCBkaXNjbGFpbWVycyBhcyIsImRpc2NsYWltZXJzIGFzIHJlbGVhc2VkIiwiZGlzdHJpYnV0ZWQgMyB5b3UiLCJ0aGUgc29mdHdhcmUgc3VjaCIsInN1Y2ggYXMgcGF0Y2hlcyIsImFzIHBhdGNoZXMgdGhlIiwicGF0Y2hlcyB0aGUgZm9sbG93aW5nIiwiZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBhcHBseSIsInJlc3RyaWN0aW9ucyBhcHBseSB0byIsImFwcGx5IHRvIG1vZGlmaWNhdGlvbnMiLCJ0byBtb2RpZmljYXRpb25zIGEiLCJtb2RpZmljYXRpb25zIGEgbW9kaWZpY2F0aW9ucyIsImEgbW9kaWZpY2F0aW9ucyBtdXN0IiwibW9kaWZpY2F0aW9ucyBtdXN0IG5vdCIsIm11c3Qgbm90IGFsdGVyIiwiYWx0ZXIgb3IgcmVtb3ZlIiwib3IgcmVtb3ZlIGFueSIsInJlbW92ZSBhbnkgY29weXJpZ2h0Iiwic29mdHdhcmUgYiB3aGVuIiwiYiB3aGVuIG1vZGlmaWNhdGlvbnMiLCJ3aGVuIG1vZGlmaWNhdGlvbnMgdG8iLCJzb2Z0d2FyZSBhcmUgcmVsZWFzZWQiLCJhcmUgcmVsZWFzZWQgdW5kZXIiLCJmcmVlIHJpZ2h0IGlzIiwic29mdHdhcmUgdG8gZGlzdHJpYnV0ZSIsImRpc3RyaWJ1dGUgeW91ciBtb2RpZmljYXRpb24iLCJ5b3VyIG1vZGlmaWNhdGlvbiBpbiIsIm1vZGlmaWNhdGlvbiBpbiBmdXR1cmUiLCJzb2Z0d2FyZSBwcm92aWRlZCBzdWNoIiwicHJvdmlkZWQgc3VjaCB2ZXJzaW9ucyIsInN1Y2ggdmVyc2lvbnMgcmVtYWluIiwidmVyc2lvbnMgcmVtYWluIGF2YWlsYWJsZSIsInJlbWFpbiBhdmFpbGFibGUgdW5kZXIiLCJ0aGVzZSB0ZXJtcyBpbiIsInRlcm1zIGluIGFkZGl0aW9uIiwib3RoZXIgbGljZW5zZSBzIiwibGljZW5zZSBzIG9mIiwiaW5pdGlhbCBkZXZlbG9wZXIgNCIsImRldmVsb3BlciA0IHlvdSIsIm1heSBkaXN0cmlidXRlIG1hY2hpbmUiLCJkaXN0cmlidXRlIG1hY2hpbmUgZXhlY3V0YWJsZSIsInNvZnR3YXJlIG9yIG1hY2hpbmUiLCJvciBtYWNoaW5lIGV4ZWN1dGFibGUiLCJmb3JtcyBvZiBtb2RpZmllZCIsInlvdSBtZWV0IHRoZXNlIiwibWVldCB0aGVzZSByZXN0cmljdGlvbnMiLCJ0aGVzZSByZXN0cmljdGlvbnMgYSIsImxpY2Vuc2UgZG9jdW1lbnQgaW4iLCJkb2N1bWVudCBpbiB0aGUiLCJ0aGUgZGlzdHJpYnV0aW9uIGIiLCJkaXN0cmlidXRpb24gYiB5b3UiLCJvZiB0aGUgbWFjaGluZSIsImZvcm1zIGFyZSBhbHNvIiwicmVjZWl2ZSB0aGUgY29tcGxldGUiLCJ0byB0aGUgZGlzdHJpYnV0ZWQiLCJ0aGUgZGlzdHJpYnV0ZWQgc29mdHdhcmUiLCJkaXN0cmlidXRlZCBzb2Z0d2FyZSBpbmNsdWRpbmciLCJhbGwgbW9kaWZpY2F0aW9ucyB3aXRob3V0IiwibW9kaWZpY2F0aW9ucyB3aXRob3V0IGFueSIsImRhdGEgdHJhbnNmZXIgYW5kIiwidHJhbnNmZXIgYW5kIHBsYWNlIiwiYW5kIHBsYWNlIHByb21pbmVudCIsInBsYWNlIHByb21pbmVudCBub3RpY2VzIiwicHJvbWluZW50IG5vdGljZXMgaW4iLCJ0aGUgZGlzdHJpYnV0aW9uIGV4cGxhaW5pbmciLCJkaXN0cmlidXRpb24gZXhwbGFpbmluZyB0aGlzIiwiZXhwbGFpbmluZyB0aGlzIGMiLCJ0aGlzIGMgeW91IiwiYWxsIG1vZGlmaWNhdGlvbnMgaW5jbHVkZWQiLCJtb2RpZmljYXRpb25zIGluY2x1ZGVkIGluIiwiaW4gdGhlIG1hY2hpbmUiLCJmb3JtcyBhcmUgYXZhaWxhYmxlIiwiYXJlIGF2YWlsYWJsZSB1bmRlciIsImxpY2Vuc2UgNSB5b3UiLCJzb2Z0d2FyZSB0byBjb21waWxlIiwidG8gY29tcGlsZSBsaW5rIiwiY29tcGlsZSBsaW5rIGFuZCIsImxpbmsgYW5kIHJ1biIsImFuZCBydW4gYXBwbGljYXRpb24iLCJydW4gYXBwbGljYXRpb24gcHJvZ3JhbXMiLCJhcHBsaWNhdGlvbiBwcm9ncmFtcyBsZWdhbGx5IiwicHJvZ3JhbXMgbGVnYWxseSBkZXZlbG9wZWQiLCJsZWdhbGx5IGRldmVsb3BlZCBieSIsImJ5IG90aGVycyA2Iiwib3RoZXJzIDYgeW91IiwibWF5IGRldmVsb3AgYXBwbGljYXRpb24iLCJkZXZlbG9wIGFwcGxpY2F0aW9uIHByb2dyYW1zIiwiYXBwbGljYXRpb24gcHJvZ3JhbXMgcmV1c2FibGUiLCJwcm9ncmFtcyByZXVzYWJsZSBjb21wb25lbnRzIiwicmV1c2FibGUgY29tcG9uZW50cyBhbmQiLCJjb21wb25lbnRzIGFuZCBvdGhlciIsImFuZCBvdGhlciBzb2Z0d2FyZSIsIm90aGVyIHNvZnR3YXJlIGl0ZW1zIiwidGhlIHNvZnR3YXJlIHRoZXNlIiwic29mdHdhcmUgdGhlc2UgaXRlbXMiLCJ0aGVzZSBpdGVtcyB3aGVuIiwiaXRlbXMgd2hlbiBkaXN0cmlidXRlZCIsIndoZW4gZGlzdHJpYnV0ZWQgYXJlIiwiZGlzdHJpYnV0ZWQgYXJlIHN1YmplY3QiLCJ0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50cyIsImZvbGxvd2luZyByZXF1aXJlbWVudHMgYSIsInJlcXVpcmVtZW50cyBhIHlvdSIsInJlY2lwaWVudHMgb2YgbWFjaGluZSIsImZvcm1zIG9mIHRoZXNlIiwib2YgdGhlc2UgaXRlbXMiLCJ0aGVzZSBpdGVtcyBhcmUiLCJpdGVtcyBhcmUgYWxzbyIsInRvIHJlY2VpdmUgYW5kIiwicmVjZWl2ZSBhbmQgdXNlIiwidXNlIHRoZSBjb21wbGV0ZSIsInRvIHRoZSBpdGVtcyIsInRoZSBpdGVtcyB3aXRob3V0IiwiaXRlbXMgd2l0aG91dCBhbnkiLCJkYXRhIHRyYW5zZmVyIGIiLCJ0cmFuc2ZlciBiIHlvdSIsInlvdSBtdXN0IGV4cGxpY2l0bHkiLCJtdXN0IGV4cGxpY2l0bHkgbGljZW5zZSIsImV4cGxpY2l0bHkgbGljZW5zZSBhbGwiLCJsaWNlbnNlIGFsbCByZWNpcGllbnRzIiwib2YgeW91ciBpdGVtcyIsInlvdXIgaXRlbXMgdG8iLCJpdGVtcyB0byB1c2UiLCJhbmQgcmUgZGlzdHJpYnV0ZSIsInJlIGRpc3RyaWJ1dGUgb3JpZ2luYWwiLCJkaXN0cmlidXRlIG9yaWdpbmFsIGFuZCIsInRoZSBpdGVtcyBpbiIsIml0ZW1zIGluIGJvdGgiLCJpbiBib3RoIG1hY2hpbmUiLCJib3RoIG1hY2hpbmUgZXhlY3V0YWJsZSIsIm1hY2hpbmUgZXhlY3V0YWJsZSBhbmQiLCJzb3VyY2UgY29kZSBmb3JtcyIsImNvZGUgZm9ybXMgdGhlIiwiZm9ybXMgdGhlIHJlY2lwaWVudHMiXX0seyJsaWNlbnNlVGV4dHMiOlsiUWh1bGwsIENvcHlyaWdodCAoYykgMTk5My0yMDAzXG5cblRoZSBOYXRpb25hbCBTY2llbmNlIGFuZCBUZWNobm9sb2d5IFJlc2VhcmNoIENlbnRlciBmb3IgQ29tcHV0YXRpb24gYW5kIFZpc3VhbGl6YXRpb24gb2YgR2VvbWV0cmljIFN0cnVjdHVyZXMgKFRoZSBHZW9tZXRyeSBDZW50ZXIpIFVuaXZlcnNpdHkgb2YgTWlubmVzb3RhXG5cbmVtYWlsOiBxaHVsbEBxaHVsbC5vcmdcblxuVGhpcyBzb2Z0d2FyZSBpbmNsdWRlcyBRaHVsbCBmcm9tIFRoZSBHZW9tZXRyeSBDZW50ZXIuIFFodWxsIGlzIGNvcHlyaWdodGVkIGFzIG5vdGVkIGFib3ZlLiBRaHVsbCBpcyBmcmVlIHNvZnR3YXJlIGFuZCBtYXkgYmUgb2J0YWluZWQgdmlhIGh0dHAgZnJvbSB3d3cucWh1bGwub3JnLiBJdCBtYXkgYmUgZnJlZWx5IGNvcGllZCwgbW9kaWZpZWQsIGFuZCByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgMS4gQWxsIGNvcHlyaWdodCBub3RpY2VzIG11c3QgcmVtYWluIGludGFjdCBpbiBhbGwgZmlsZXMuXG5cbiAgIDIuIEEgY29weSBvZiB0aGlzIHRleHQgZmlsZSBtdXN0IGJlIGRpc3RyaWJ1dGVkIGFsb25nIHdpdGggYW55IGNvcGllcyBvZiBRaHVsbCB0aGF0IHlvdSByZWRpc3RyaWJ1dGU7IHRoaXMgaW5jbHVkZXMgY29waWVzIHRoYXQgeW91IGhhdmUgbW9kaWZpZWQsIG9yIGNvcGllcyBvZiBwcm9ncmFtcyBvciBvdGhlciBzb2Z0d2FyZSBwcm9kdWN0cyB0aGF0IGluY2x1ZGUgUWh1bGwuXG5cbiAgIDMuIElmIHlvdSBtb2RpZnkgUWh1bGwsIHlvdSBtdXN0IGluY2x1ZGUgYSBub3RpY2UgZ2l2aW5nIHRoZSBuYW1lIG9mIHRoZSBwZXJzb24gcGVyZm9ybWluZyB0aGUgbW9kaWZpY2F0aW9uLCB0aGUgZGF0ZSBvZiBtb2RpZmljYXRpb24sIGFuZCB0aGUgcmVhc29uIGZvciBzdWNoIG1vZGlmaWNhdGlvbi5cblxuICAgNC4gV2hlbiBkaXN0cmlidXRpbmcgbW9kaWZpZWQgdmVyc2lvbnMgb2YgUWh1bGwsIG9yIG90aGVyIHNvZnR3YXJlIHByb2R1Y3RzIHRoYXQgaW5jbHVkZSBRaHVsbCwgeW91IG11c3QgcHJvdmlkZSBub3RpY2UgdGhhdCB0aGUgb3JpZ2luYWwgc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGFzIG5vdGVkIGFib3ZlLlxuXG4gICA1LiBUaGVyZSBpcyBubyB3YXJyYW50eSBvciBvdGhlciBndWFyYW50ZWUgb2YgZml0bmVzcyBmb3IgUWh1bGwsIGl0IGlzIHByb3ZpZGVkIHNvbGVseSBcImFzIGlzXCIuIEJ1ZyByZXBvcnRzIG9yIGZpeGVzIG1heSBiZSBzZW50IHRvIHFodWxsX2J1Z0BxaHVsbC5vcmc7IHRoZSBhdXRob3JzIG1heSBvciBtYXkgbm90IGFjdCBvbiB0aGVtIGFzIHRoZXkgZGVzaXJlLiJdLCJsaWNlbnNlSWRzIjpbIlFodWxsIl0sImtleXdvcmRzIjpbInFodWxsIGNvcHlyaWdodCBjIiwiYyAxOTkzIDIwMDMiLCIxOTkzIDIwMDMgdGhlIiwiMjAwMyB0aGUgbmF0aW9uYWwiLCJ0aGUgbmF0aW9uYWwgc2NpZW5jZSIsIm5hdGlvbmFsIHNjaWVuY2UgYW5kIiwic2NpZW5jZSBhbmQgdGVjaG5vbG9neSIsImFuZCB0ZWNobm9sb2d5IHJlc2VhcmNoIiwidGVjaG5vbG9neSByZXNlYXJjaCBjZW50ZXIiLCJyZXNlYXJjaCBjZW50ZXIgZm9yIiwiY2VudGVyIGZvciBjb21wdXRhdGlvbiIsImZvciBjb21wdXRhdGlvbiBhbmQiLCJjb21wdXRhdGlvbiBhbmQgdmlzdWFsaXphdGlvbiIsImFuZCB2aXN1YWxpemF0aW9uIG9mIiwidmlzdWFsaXphdGlvbiBvZiBnZW9tZXRyaWMiLCJvZiBnZW9tZXRyaWMgc3RydWN0dXJlcyIsImdlb21ldHJpYyBzdHJ1Y3R1cmVzIHRoZSIsInN0cnVjdHVyZXMgdGhlIGdlb21ldHJ5IiwiZ2VvbWV0cnkgY2VudGVyIHVuaXZlcnNpdHkiLCJjZW50ZXIgdW5pdmVyc2l0eSBvZiIsInVuaXZlcnNpdHkgb2YgbWlubmVzb3RhIiwib2YgbWlubmVzb3RhIGVtYWlsIiwibWlubmVzb3RhIGVtYWlsIHFodWxsIiwiZW1haWwgcWh1bGwgcWh1bGwiLCJxaHVsbCBxaHVsbCBvcmciLCJxaHVsbCBvcmcgdGhpcyIsInNvZnR3YXJlIGluY2x1ZGVzIHFodWxsIiwiaW5jbHVkZXMgcWh1bGwgZnJvbSIsInFodWxsIGZyb20gdGhlIiwiZnJvbSB0aGUgZ2VvbWV0cnkiLCJnZW9tZXRyeSBjZW50ZXIgcWh1bGwiLCJjZW50ZXIgcWh1bGwgaXMiLCJxaHVsbCBpcyBjb3B5cmlnaHRlZCIsImlzIGNvcHlyaWdodGVkIGFzIiwiY29weXJpZ2h0ZWQgYXMgbm90ZWQiLCJub3RlZCBhYm92ZSBxaHVsbCIsImFib3ZlIHFodWxsIGlzIiwicWh1bGwgaXMgZnJlZSIsImJlIG9idGFpbmVkIHZpYSIsIm9idGFpbmVkIHZpYSBodHRwIiwidmlhIGh0dHAgZnJvbSIsImh0dHAgZnJvbSB3d3ciLCJmcm9tIHd3dyBxaHVsbCIsInd3dyBxaHVsbCBvcmciLCJxaHVsbCBvcmcgaXQiLCJvcmcgaXQgbWF5IiwiZnJlZWx5IGNvcGllZCBtb2RpZmllZCIsImNvcGllZCBtb2RpZmllZCBhbmQiLCJhbmQgcmVkaXN0cmlidXRlZCB1bmRlciIsInJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIiwiY29uZGl0aW9ucyAxIGFsbCIsImNvcHlyaWdodCBub3RpY2VzIG11c3QiLCJub3RpY2VzIG11c3QgcmVtYWluIiwibXVzdCByZW1haW4gaW50YWN0IiwiaW50YWN0IGluIGFsbCIsImluIGFsbCBmaWxlcyIsImFsbCBmaWxlcyAyIiwiZmlsZXMgMiBhIiwiMiBhIGNvcHkiLCJvZiB0aGlzIHRleHQiLCJ0aGlzIHRleHQgZmlsZSIsInRleHQgZmlsZSBtdXN0IiwiYmUgZGlzdHJpYnV0ZWQgYWxvbmciLCJkaXN0cmlidXRlZCBhbG9uZyB3aXRoIiwid2l0aCBhbnkgY29waWVzIiwiY29waWVzIG9mIHFodWxsIiwib2YgcWh1bGwgdGhhdCIsInFodWxsIHRoYXQgeW91IiwidGhhdCB5b3UgcmVkaXN0cmlidXRlIiwieW91IHJlZGlzdHJpYnV0ZSB0aGlzIiwicmVkaXN0cmlidXRlIHRoaXMgaW5jbHVkZXMiLCJ0aGlzIGluY2x1ZGVzIGNvcGllcyIsImluY2x1ZGVzIGNvcGllcyB0aGF0IiwiY29waWVzIHRoYXQgeW91IiwiaGF2ZSBtb2RpZmllZCBvciIsIm1vZGlmaWVkIG9yIGNvcGllcyIsImNvcGllcyBvZiBwcm9ncmFtcyIsIm9mIHByb2dyYW1zIG9yIiwiaW5jbHVkZSBxaHVsbCAzIiwicWh1bGwgMyBpZiIsInlvdSBtb2RpZnkgcWh1bGwiLCJtb2RpZnkgcWh1bGwgeW91IiwiYSBub3RpY2UgZ2l2aW5nIiwiZ2l2aW5nIHRoZSBuYW1lIiwidGhlIHBlcnNvbiBwZXJmb3JtaW5nIiwicGVyc29uIHBlcmZvcm1pbmcgdGhlIiwicGVyZm9ybWluZyB0aGUgbW9kaWZpY2F0aW9uIiwidGhlIG1vZGlmaWNhdGlvbiB0aGUiLCJtb2RpZmljYXRpb24gdGhlIGRhdGUiLCJvZiBtb2RpZmljYXRpb24gYW5kIiwiYW5kIHRoZSByZWFzb24iLCJ0aGUgcmVhc29uIGZvciIsInJlYXNvbiBmb3Igc3VjaCIsImZvciBzdWNoIG1vZGlmaWNhdGlvbiIsInN1Y2ggbW9kaWZpY2F0aW9uIDQiLCJtb2RpZmljYXRpb24gNCB3aGVuIiwiNCB3aGVuIGRpc3RyaWJ1dGluZyIsIndoZW4gZGlzdHJpYnV0aW5nIG1vZGlmaWVkIiwiZGlzdHJpYnV0aW5nIG1vZGlmaWVkIHZlcnNpb25zIiwidmVyc2lvbnMgb2YgcWh1bGwiLCJvZiBxaHVsbCBvciIsInFodWxsIG9yIG90aGVyIiwiaW5jbHVkZSBxaHVsbCB5b3UiLCJtdXN0IHByb3ZpZGUgbm90aWNlIiwicHJvdmlkZSBub3RpY2UgdGhhdCIsImJlIG9idGFpbmVkIGFzIiwib2J0YWluZWQgYXMgbm90ZWQiLCJub3RlZCBhYm92ZSA1IiwiYWJvdmUgNSB0aGVyZSIsIjUgdGhlcmUgaXMiLCJ3YXJyYW50eSBvciBvdGhlciIsIm9yIG90aGVyIGd1YXJhbnRlZSIsIm90aGVyIGd1YXJhbnRlZSBvZiIsImZpdG5lc3MgZm9yIHFodWxsIiwiZm9yIHFodWxsIGl0IiwicWh1bGwgaXQgaXMiLCJpcyBwcm92aWRlZCBzb2xlbHkiLCJwcm92aWRlZCBzb2xlbHkgYXMiLCJzb2xlbHkgYXMgaXMiLCJhcyBpcyBidWciLCJpcyBidWcgcmVwb3J0cyIsImJ1ZyByZXBvcnRzIG9yIiwicmVwb3J0cyBvciBmaXhlcyIsIm9yIGZpeGVzIG1heSIsImZpeGVzIG1heSBiZSIsIm1heSBiZSBzZW50IiwiYmUgc2VudCB0byIsInNlbnQgdG8gcWh1bGwiLCJ0byBxaHVsbCBidWciLCJxaHVsbCBidWcgcWh1bGwiLCJidWcgcWh1bGwgb3JnIiwicWh1bGwgb3JnIHRoZSIsIm9yZyB0aGUgYXV0aG9ycyIsInRoZSBhdXRob3JzIG1heSIsImF1dGhvcnMgbWF5IG9yIiwibWF5IG5vdCBhY3QiLCJub3QgYWN0IG9uIiwiYWN0IG9uIHRoZW0iLCJvbiB0aGVtIGFzIiwidGhlbSBhcyB0aGV5IiwiYXMgdGhleSBkZXNpcmUiLCJxaHVsbCBjb3B5cmlnaHQgYyAxOTkzIiwiY29weXJpZ2h0IGMgMTk5MyAyMDAzIiwiYyAxOTkzIDIwMDMgdGhlIiwiMTk5MyAyMDAzIHRoZSBuYXRpb25hbCIsIjIwMDMgdGhlIG5hdGlvbmFsIHNjaWVuY2UiLCJ0aGUgbmF0aW9uYWwgc2NpZW5jZSBhbmQiLCJuYXRpb25hbCBzY2llbmNlIGFuZCB0ZWNobm9sb2d5Iiwic2NpZW5jZSBhbmQgdGVjaG5vbG9neSByZXNlYXJjaCIsImFuZCB0ZWNobm9sb2d5IHJlc2VhcmNoIGNlbnRlciIsInRlY2hub2xvZ3kgcmVzZWFyY2ggY2VudGVyIGZvciIsInJlc2VhcmNoIGNlbnRlciBmb3IgY29tcHV0YXRpb24iLCJjZW50ZXIgZm9yIGNvbXB1dGF0aW9uIGFuZCIsImZvciBjb21wdXRhdGlvbiBhbmQgdmlzdWFsaXphdGlvbiIsImNvbXB1dGF0aW9uIGFuZCB2aXN1YWxpemF0aW9uIG9mIiwiYW5kIHZpc3VhbGl6YXRpb24gb2YgZ2VvbWV0cmljIiwidmlzdWFsaXphdGlvbiBvZiBnZW9tZXRyaWMgc3RydWN0dXJlcyIsIm9mIGdlb21ldHJpYyBzdHJ1Y3R1cmVzIHRoZSIsImdlb21ldHJpYyBzdHJ1Y3R1cmVzIHRoZSBnZW9tZXRyeSIsInN0cnVjdHVyZXMgdGhlIGdlb21ldHJ5IGNlbnRlciIsInRoZSBnZW9tZXRyeSBjZW50ZXIgdW5pdmVyc2l0eSIsImdlb21ldHJ5IGNlbnRlciB1bml2ZXJzaXR5IG9mIiwiY2VudGVyIHVuaXZlcnNpdHkgb2YgbWlubmVzb3RhIiwidW5pdmVyc2l0eSBvZiBtaW5uZXNvdGEgZW1haWwiLCJvZiBtaW5uZXNvdGEgZW1haWwgcWh1bGwiLCJtaW5uZXNvdGEgZW1haWwgcWh1bGwgcWh1bGwiLCJlbWFpbCBxaHVsbCBxaHVsbCBvcmciLCJxaHVsbCBxaHVsbCBvcmcgdGhpcyIsInFodWxsIG9yZyB0aGlzIHNvZnR3YXJlIiwib3JnIHRoaXMgc29mdHdhcmUgaW5jbHVkZXMiLCJ0aGlzIHNvZnR3YXJlIGluY2x1ZGVzIHFodWxsIiwic29mdHdhcmUgaW5jbHVkZXMgcWh1bGwgZnJvbSIsImluY2x1ZGVzIHFodWxsIGZyb20gdGhlIiwicWh1bGwgZnJvbSB0aGUgZ2VvbWV0cnkiLCJmcm9tIHRoZSBnZW9tZXRyeSBjZW50ZXIiLCJ0aGUgZ2VvbWV0cnkgY2VudGVyIHFodWxsIiwiZ2VvbWV0cnkgY2VudGVyIHFodWxsIGlzIiwiY2VudGVyIHFodWxsIGlzIGNvcHlyaWdodGVkIiwicWh1bGwgaXMgY29weXJpZ2h0ZWQgYXMiLCJpcyBjb3B5cmlnaHRlZCBhcyBub3RlZCIsImNvcHlyaWdodGVkIGFzIG5vdGVkIGFib3ZlIiwiYXMgbm90ZWQgYWJvdmUgcWh1bGwiLCJub3RlZCBhYm92ZSBxaHVsbCBpcyIsImFib3ZlIHFodWxsIGlzIGZyZWUiLCJxaHVsbCBpcyBmcmVlIHNvZnR3YXJlIiwiZnJlZSBzb2Z0d2FyZSBhbmQgbWF5Iiwic29mdHdhcmUgYW5kIG1heSBiZSIsImFuZCBtYXkgYmUgb2J0YWluZWQiLCJtYXkgYmUgb2J0YWluZWQgdmlhIiwiYmUgb2J0YWluZWQgdmlhIGh0dHAiLCJvYnRhaW5lZCB2aWEgaHR0cCBmcm9tIiwidmlhIGh0dHAgZnJvbSB3d3ciLCJodHRwIGZyb20gd3d3IHFodWxsIiwiZnJvbSB3d3cgcWh1bGwgb3JnIiwid3d3IHFodWxsIG9yZyBpdCIsInFodWxsIG9yZyBpdCBtYXkiLCJvcmcgaXQgbWF5IGJlIiwiYmUgZnJlZWx5IGNvcGllZCBtb2RpZmllZCIsImZyZWVseSBjb3BpZWQgbW9kaWZpZWQgYW5kIiwiY29waWVkIG1vZGlmaWVkIGFuZCByZWRpc3RyaWJ1dGVkIl19LHsibGljZW5zZVRleHRzIjpbIlJlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZSB2MS4xXG5cbiAgIDEuIERFRklOSVRJT05TXG5cbiAgICAgIDEuMS4gXCJDb250cmlidXRvclwiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4yLiBcIkNvbnRyaWJ1dG9yIFZlcnNpb25cIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuXG5cbiAgICAgIDEuMy4gXCJDb3ZlcmVkIENvZGVcIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLlxuXG4gICAgICAxLjQuIFwiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtXCIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuXG5cbiAgICAgIDEuNS4gXCJFeGVjdXRhYmxlXCIgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuXG5cbiAgICAgIDEuNi4gXCJJbml0aWFsIERldmVsb3BlclwiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS5cblxuICAgICAgMS43LiBcIkxhcmdlciBXb3JrXCIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS44LiBcIkxpY2Vuc2VcIiBtZWFucyB0aGlzIGRvY3VtZW50LlxuXG4gICAgICAxLjkuIFwiTW9kaWZpY2F0aW9uc1wiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOlxuXG4gICAgICAgICBBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICAgICAgICBCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICAgICAxLjEwLiBcIk9yaWdpbmFsIENvZGVcIiBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjExLiBcIlNvdXJjZSBDb2RlXCIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3IgYSBsaXN0IG9mIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yJ3MgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLlxuXG4gICAgICAxLjEyLiBcIllvdVwiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbFwiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgICAgMS4xMy4gXCJSZWQgSGF0IEJyYW5kZWQgQ29kZVwiIGlzIGNvZGUgdGhhdCBSZWQgSGF0IGRpc3RyaWJ1dGVzIGFuZC9vciBwZXJtaXRzIG90aGVycyB0byBkaXN0cmlidXRlIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyB0aGFuIHRoZSBSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UuIFJlZCBIYXQncyBCcmFuZGVkIENvZGUgbWF5IGNvbnRhaW4gcGFydCBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZS5cblxuICAgMi4gU09VUkNFIENPREUgTElDRU5TRVxuXG4gICAgICAyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgICAgKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZFxuXG4gICAgICAgICAoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsIChcIlV0aWxpemVcIikgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLlxuXG4gICAgICAyLjIuIENvbnRyaWJ1dG9yIEdyYW50LiBFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgICAgKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuXG5cbiAgIDMuIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OU1xuXG4gICAgICAzLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuIFRoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LlxuXG4gICAgICAzLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZSBhbmQgdG8gdGhlIEluaXRpYWwgRGV2ZWxvcGVyOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIG5vdGlmeWluZyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE1vZGlmaWNhdGlvbiBhbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBTb3VyY2UgaWYgYSBjb250YWN0IG1lYW5zIGlzIHByb3ZpZGVkLiBSZWQgSGF0IHdpbGwgYmUgYWN0aW5nIGFzIG1haW50YWluZXIgb2YgdGhlIFNvdXJjZSBhbmQgbWF5IHByb3ZpZGUgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gbWVjaGFuaXNtIGZvciB0aGUgTW9kaWZpY2F0aW9uIHRvIGJlIG1hZGUgYXZhaWxhYmxlLiBZb3UgY2FuIGNvbnRhY3QgUmVkIEhhdCB0byBtYWtlIHRoZSBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFuZCB0byBub3RpZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiAoaHR0cDovL3NvdXJjZXdhcmUuY3lnbnVzLmNvbS9lY29zLylcblxuICAgICAgMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiBZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgICAgIDMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnNcblxuICAgICAgICAgKGEpIFRoaXJkIFBhcnR5IENsYWltcy4gSWYgWW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBwYXJ0eSBjbGFpbXMgYW4gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGluIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBjb2RlIChvciBpdHMgdXRpbGl6YXRpb24gdW5kZXIgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkIFwiTEVHQUxcIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgWW91IG1ha2UgWW91ciBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgWW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLlxuXG4gICAgICAgICAoYikgQ29udHJpYnV0b3IgQVBJcy4gSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBZb3Ugb3duIG9yIGNvbnRyb2wgcGF0ZW50cyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS5cblxuICAgICAgMy41LiBSZXF1aXJlZCBOb3RpY2VzLiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS5cblxuICAgICAgSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci5cblxuICAgICAgSWYgeW91IGRpc3RyaWJ1dGUgZXhlY3V0YWJsZSB2ZXJzaW9ucyBjb250YWluaW5nIENvdmVyZWQgQ29kZSwgeW91IG11c3QgcmVwcm9kdWNlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBCIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgcHJvZHVjdC5cblxuICAgICAgMy43LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS5cblxuICAgNC4gSU5BQklMSVRZIFRPIENPTVBMWSBEVUUgVE8gU1RBVFVURSBPUiBSRUdVTEFUSU9OXG5cbiAgIElmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgKGIpIGNpdGUgdGhlIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGF0IHByb2hpYml0cyB5b3UgZnJvbSBhZGhlcmluZyB0byB0aGUgbGljZW5zZTsgYW5kIChjKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LiBZb3UgbXVzdCBzdWJtaXQgdGhpcyBMRUdBTCBmaWxlIHRvIFJlZCBIYXQgZm9yIHJldmlldywgYW5kIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHVzZSB0aGUgY292ZXJlZCBjb2RlIGluIGFueSBtZWFucyB1bnRpbCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgZnJvbSBSZWQgSGF0IHRvIGFsbG93IGZvciB0aGUgaW5hYmlsaXR5IHRvIGNvbXBseSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uLlxuXG4gICA1LiBBUFBMSUNBVElPTiBPRiBUSElTIExJQ0VOU0VcblxuICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBLCBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuXG5cbiAgIFJlZCBIYXQgbWF5IGluY2x1ZGUgQ292ZXJlZCBDb2RlIGluIHByb2R1Y3RzIHdpdGhvdXQgc3VjaCBhZGRpdGlvbmFsIHByb2R1Y3RzIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIHN1Y2ggYWRkaXRpb25hbCBwcm9kdWN0cyBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlLlxuXG4gICBSZWQgSGF0IG1heSBsaWNlbnNlIHRoZSBTb3VyY2UgQ29kZSBvZiBSZWQgSGF0IEJyYW5kZWQgQ29kZSB3aXRob3V0IFJlZCBIYXQgQnJhbmRlZCBDb2RlIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIFJlZCBIYXQgQnJhbmRlZCBDb2RlIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UuIENvbnRhY3QgUmVkIEhhdCBmb3IgZGV0YWlscyBvZiBhbHRlcm5hdGUgbGljZW5zaW5nIHRlcm1zIGF2YWlsYWJsZS5cblxuICAgNi4gVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0VcblxuICAgICAgNi4xLiBOZXcgVmVyc2lvbnMuIFJlZCBIYXQgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLlxuXG4gICAgICA2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIE9uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBSZWQgSGF0LiBObyBvbmUgb3RoZXIgdGhhbiBSZWQgSGF0IGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBiZXlvbmQgd2hhdCBpcyBncmFudGVkIHVuZGVyIHRoaXMgYW5kIHN1YnNlcXVlbnQgTGljZW5zZXMuXG5cbiAgICAgIDYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4gSWYgeW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgXCJFQ09TXCIsIFwiZUNvc1wiLCBcIlJlZCBIYXRcIiwgXCJSSEVQTFwiIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGFueXdoZXJlIGluIHlvdXIgbGljZW5zZSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgeW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLilcblxuICAgNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWVxuXG4gICBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLlxuXG4gICA4LiBURVJNSU5BVElPTlxuXG4gICBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuXG5cbiAgIDkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZXG5cbiAgIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIQVQgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICAxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSU1xuXG4gICBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgXCJjb21tZXJjaWFsIGl0ZW0sXCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mIFwiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZVwiIGFuZCBcImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbixcIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uXG5cbiAgIDExLiBNSVNDRUxMQU5FT1VTXG5cbiAgIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiwgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYTogKGEpIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcsIGFsbCBkaXNwdXRlcyByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgKGV4Y2VwdGluZyBhbnkgZGlzcHV0ZSByZWxhdGluZyB0byBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzKSBzaGFsbCBiZSBzdWJqZWN0IHRvIGZpbmFsIGFuZCBiaW5kaW5nIGFyYml0cmF0aW9uLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcGF5aW5nIGFsbCBjb3N0cyBvZiBhcmJpdHJhdGlvbjsgKGIpIGFueSBhcmJpdHJhdGlvbiByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBoZWxkIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgdW5kZXIgdGhlIGF1c3BpY2VzIG9mIEpBTVMvRW5kRGlzcHV0ZTsgYW5kIChjKSBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS5cblxuICAgMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVNcblxuICAgRXhjZXB0IGluIGNhc2VzIHdoZXJlIGFub3RoZXIgQ29udHJpYnV0b3IgaGFzIGZhaWxlZCB0byBjb21wbHkgd2l0aCBTZWN0aW9uIDMuNCwgWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgWW91ciB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiBDb3ZlcmVkIENvZGUgeW91IG1hZGUgYXZhaWxhYmxlLCB0aGUgcmV2ZW51ZXMgeW91IHJlY2VpdmVkIGZyb20gdXRpbGl6aW5nIHN1Y2ggcmlnaHRzLCBhbmQgb3RoZXIgcmVsZXZhbnQgZmFjdG9ycy4gWW91IGFncmVlIHRvIHdvcmsgd2l0aCBhZmZlY3RlZCBwYXJ0aWVzIHRvIGRpc3RyaWJ1dGUgcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLlxuXG4gICAxMy4gQURESVRJT05BTCBURVJNUyBBUFBMSUNBQkxFIFRPIFRIRSBSRUQgSEFUIEVDT1MgUFVCTElDIExJQ0VOU0VcblxuICAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgUmVkIEhhdCBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgdGhhbiB0aGlzIExpY2Vuc2UgYW55IGNvZGUgd2hpY2ggUmVkIEhhdCBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuXG5cbiAgIFJlZCBIYXQgYW5kIGxvZ28gLSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFyayBSZWQgSGF0LCB0aGUgUmVkIEhhdCBsb2dvLCBlQ29zIGxvZ28sIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBtYXkgY29udGFjdCBSZWQgSGF0IGZvciBwZXJtaXNzaW9uIHRvIGRpc3BsYXkgdGhlIFJlZCBIYXQgYW5kIGVDb3MgbWFya3MgaW4gZWl0aGVyIHRoZSBkb2N1bWVudGF0aW9uIG9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gYmV5b25kIHRoYXQgcmVxdWlyZWQgaW4gRXhoaWJpdCBCLlxuXG4gICBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBDb250cmFjdHVhbCBPYmxpZ2F0aW9uIC0gVG8gdGhlIGV4dGVudCB0aGF0IFJlZCBIYXQgaXMgbGltaXRlZCBjb250cmFjdHVhbGx5IGZyb20gbWFraW5nIHRoaXJkIHBhcnR5IGNvZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZSwgUmVkIEhhdCBtYXkgY2hvb3NlIHRvIGludGVncmF0ZSBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgaW50byBDb3ZlcmVkIENvZGUgd2l0aG91dCBiZWluZyByZXF1aXJlZCB0byBkaXN0cmlidXRlIHN1Y2ggdGhpcmQgcGFydHkgY29kZSBpbiBTb3VyY2UgQ29kZSBmb3JtLCBldmVuIGlmIHN1Y2ggdGhpcmQgcGFydHkgY29kZSB3b3VsZCBvdGhlcndpc2UgYmUgY29uc2lkZXJlZCBcIk1vZGlmaWNhdGlvbnNcIiB1bmRlciB0aGlzIExpY2Vuc2UuIEVYSElCSVQgQVxuXG5cIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFJlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5yZWRoYXQuY29tL1xuXG5Tb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG5UaGUgT3JpZ2luYWwgQ29kZSBpcyBlQ29zIC0gRW1iZWRkZWQgQ29uZmlndXJhYmxlIE9wZXJhdGluZyBTeXN0ZW0sIHJlbGVhc2VkIFNlcHRlbWJlciAzMCwgMTk5OC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFJlZCBIYXQuIFBvcnRpb25zIGNyZWF0ZWQgYnkgUmVkIEhhdCBhcmUgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cIlxuXG5FWEhJQklUIEJcblxuUGFydCBvZiB0aGUgc29mdHdhcmUgZW1iZWRkZWQgaW4gdGhpcyBwcm9kdWN0IGlzIGVDb3MgLSBFbWJlZGRlZCBDb25maWd1cmFibGUgT3BlcmF0aW5nIFN5c3RlbSwgYSB0cmFkZW1hcmsgb2YgUmVkIEhhdC4gUG9ydGlvbnMgY3JlYXRlZCBieSBSZWQgSGF0IGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgUmVkIEhhdCwgSW5jLiAoaHR0cDovL3d3dy5yZWRoYXQuY29tLykuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cblRIRSBTT0ZUV0FSRSBJTiBUSElTIFBST0RVQ1QgV0FTIElOIFBBUlQgUFJPVklERUQgQlkgUkVEIEhBVCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiJdLCJsaWNlbnNlSWRzIjpbIlJIZUNvcy0xLjEiXSwia2V5d29yZHMiOlsiMSAxMyByZWQiLCIxMyByZWQgaGF0IiwiYnJhbmRlZCBjb2RlIGlzIiwiY29kZSBpcyBjb2RlIiwiaXMgY29kZSB0aGF0IiwiY29kZSB0aGF0IHJlZCIsInJlZCBoYXQgZGlzdHJpYnV0ZXMiLCJoYXQgZGlzdHJpYnV0ZXMgYW5kIiwiZGlzdHJpYnV0ZSB1bmRlciBkaWZmZXJlbnQiLCJ0ZXJtcyB0aGFuIHRoZSIsInRoYW4gdGhlIHJlZCIsInB1YmxpYyBsaWNlbnNlIHJlZCIsInJlZCBoYXQgcyIsImhhdCBzIGJyYW5kZWQiLCJicmFuZGVkIGNvZGUgbWF5IiwibWF5IGNvbnRhaW4gcGFydCIsImNvbnRhaW4gcGFydCBvciIsImNvdmVyZWQgY29kZSAyIiwiY29kZSAyIHNvdXJjZSIsImxpY2Vuc2UgdmlhIGFuIiwiZGV2ZWxvcGVyIGFuZCBpZiIsInBhcnR5IHlvdSBhcmUiLCJyZXNwb25zaWJsZSBmb3Igbm90aWZ5aW5nIiwiZm9yIG5vdGlmeWluZyB0aGUiLCJub3RpZnlpbmcgdGhlIGluaXRpYWwiLCJ0aGUgc291cmNlIGlmIiwic291cmNlIGlmIGEiLCJpZiBhIGNvbnRhY3QiLCJhIGNvbnRhY3QgbWVhbnMiLCJjb250YWN0IG1lYW5zIGlzIiwibWVhbnMgaXMgcHJvdmlkZWQiLCJpcyBwcm92aWRlZCByZWQiLCJwcm92aWRlZCByZWQgaGF0IiwicmVkIGhhdCB3aWxsIiwiaGF0IHdpbGwgYmUiLCJzb3VyY2UgYW5kIG1heSIsImF2YWlsYWJsZSB5b3UgY2FuIiwieW91IGNhbiBjb250YWN0IiwiY2FuIGNvbnRhY3QgcmVkIiwiaGF0IHRvIG1ha2UiLCJtYWtlIHRoZSBtb2RpZmljYXRpb24iLCJ0aGUgbW9kaWZpY2F0aW9uIGF2YWlsYWJsZSIsIm1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYW5kIiwiYW5kIHRvIG5vdGlmeSIsInRvIG5vdGlmeSB0aGUiLCJpbml0aWFsIGRldmVsb3BlciBodHRwIiwiZGV2ZWxvcGVyIGh0dHAgc291cmNld2FyZSIsImh0dHAgc291cmNld2FyZSBjeWdudXMiLCJzb3VyY2V3YXJlIGN5Z251cyBjb20iLCJjeWdudXMgY29tIGVjb3MiLCJjb20gZWNvcyAzIiwiZWNvcyAzIDMiLCJleHRlbnQgcG9zc2libGUgYiIsInBvc3NpYmxlIGIgY2l0ZSIsImIgY2l0ZSB0aGUiLCJhbmQgYyBkZXNjcmliZSIsInVuZGVyc3RhbmQgaXQgeW91IiwieW91IG11c3Qgc3VibWl0IiwibXVzdCBzdWJtaXQgdGhpcyIsInN1Ym1pdCB0aGlzIGxlZ2FsIiwidGhpcyBsZWdhbCBmaWxlIiwibGVnYWwgZmlsZSB0byIsImZpbGUgdG8gcmVkIiwidG8gcmVkIGhhdCIsImhhdCBmb3IgcmV2aWV3IiwiZm9yIHJldmlldyBhbmQiLCJyZXZpZXcgYW5kIHlvdSIsImJlIGFibGUgdXNlIiwiYWJsZSB1c2UgdGhlIiwiaW4gYW55IG1lYW5zIiwiYW55IG1lYW5zIHVudGlsIiwibWVhbnMgdW50aWwgcGVybWlzc2lvbiIsInVudGlsIHBlcm1pc3Npb24gaXMiLCJpcyBncmFudGVkIGZyb20iLCJncmFudGVkIGZyb20gcmVkIiwiZnJvbSByZWQgaGF0IiwiaGF0IHRvIGFsbG93IiwidG8gYWxsb3cgZm9yIiwiZm9yIHRoZSBpbmFiaWxpdHkiLCJvciByZWd1bGF0aW9uIDUiLCJyZWd1bGF0aW9uIDUgYXBwbGljYXRpb24iLCJjb3ZlcmVkIGNvZGUgcmVkIiwiY29kZSByZWQgaGF0IiwiaGF0IG1heSBpbmNsdWRlIiwiaW4gcHJvZHVjdHMgd2l0aG91dCIsInByb2R1Y3RzIHdpdGhvdXQgc3VjaCIsImhhdCBtYXkgbGljZW5zZSIsImNvZGUgb2YgcmVkIiwiYnJhbmRlZCBjb2RlIHdpdGhvdXQiLCJjb2RlIHdpdGhvdXQgcmVkIiwid2l0aG91dCByZWQgaGF0IiwibWF5IGxpY2Vuc2UgcmVkIiwidGhpcyBsaWNlbnNlIGNvbnRhY3QiLCJsaWNlbnNlIGNvbnRhY3QgcmVkIiwiaGF0IGZvciBkZXRhaWxzIiwiZm9yIGRldGFpbHMgb2YiLCJkZXRhaWxzIG9mIGFsdGVybmF0ZSIsIm9mIGFsdGVybmF0ZSBsaWNlbnNpbmciLCJhbHRlcm5hdGUgbGljZW5zaW5nIHRlcm1zIiwibGljZW5zaW5nIHRlcm1zIGF2YWlsYWJsZSIsInRlcm1zIGF2YWlsYWJsZSA2IiwiYXZhaWxhYmxlIDYgdmVyc2lvbnMiLCJuZXcgdmVyc2lvbnMgcmVkIiwidmVyc2lvbnMgcmVkIGhhdCIsImhhdCBtYXkgcHVibGlzaCIsInB1Ymxpc2hlZCBieSByZWQiLCJyZWQgaGF0IG5vIiwiaGF0IG5vIG9uZSIsIm90aGVyIHRoYW4gcmVkIiwidGhhbiByZWQgaGF0IiwicmVkIGhhdCBoYXMiLCJoYXQgaGFzIHRoZSIsImNvdmVyZWQgY29kZSBiZXlvbmQiLCJjb2RlIGJleW9uZCB3aGF0IiwiYmV5b25kIHdoYXQgaXMiLCJ3aGF0IGlzIGdyYW50ZWQiLCJ1bmRlciB0aGlzIGFuZCIsInRoaXMgYW5kIHN1YnNlcXVlbnQiLCJhbmQgc3Vic2VxdWVudCBsaWNlbnNlcyIsInN1YnNlcXVlbnQgbGljZW5zZXMgNiIsImxpY2Vuc2VzIDYgMyIsInRoZSBwaHJhc2VzIGVjb3MiLCJwaHJhc2VzIGVjb3MgZWNvcyIsImVjb3MgZWNvcyByZWQiLCJlY29zIHJlZCBoYXQiLCJyZWQgaGF0IHJoZXBsIiwiaGF0IHJoZXBsIG9yIiwicmhlcGwgb3IgYW55IiwiZnJvbSB0aGUgcmVkIiwiZXF1aXRhYmxlIGJhc2lzIDEzIiwiYmFzaXMgMTMgYWRkaXRpb25hbCIsIjEzIGFkZGl0aW9uYWwgdGVybXMiLCJwdWJsaWMgbGljZW5zZSBub3RoaW5nIiwibGljZW5zZSBub3RoaW5nIGluIiwidG8gcHJvaGliaXQgcmVkIiwicHJvaGliaXQgcmVkIGhhdCIsInJlZCBoYXQgZnJvbSIsImhhdCBmcm9tIGxpY2Vuc2luZyIsInRlcm1zIHRoYW4gdGhpcyIsImNvZGUgd2hpY2ggcmVkIiwid2hpY2ggcmVkIGhhdCIsInJlZCBoYXQgb3RoZXJ3aXNlIiwiaGF0IG90aGVyd2lzZSB3b3VsZCIsInRvIGxpY2Vuc2UgcmVkIiwiaGF0IGFuZCBsb2dvIiwidGhlIHRyYWRlbWFyayByZWQiLCJ0cmFkZW1hcmsgcmVkIGhhdCIsInJlZCBoYXQgdGhlIiwiaGF0IHRoZSByZWQiLCJyZWQgaGF0IGxvZ28iLCJoYXQgbG9nbyBlY29zIiwibG9nbyBlY29zIGxvZ28iLCJlY29zIGxvZ28gZXZlbiIsInlvdSBtYXkgY29udGFjdCIsIm1heSBjb250YWN0IHJlZCIsImhhdCBmb3IgcGVybWlzc2lvbiIsInBlcm1pc3Npb24gdG8gZGlzcGxheSIsImRpc3BsYXkgdGhlIHJlZCIsImhhdCBhbmQgZWNvcyIsImFuZCBlY29zIG1hcmtzIiwiZWNvcyBtYXJrcyBpbiIsIm1hcmtzIGluIGVpdGhlciIsImluIGVpdGhlciB0aGUiLCJlaXRoZXIgdGhlIGRvY3VtZW50YXRpb24iLCJvciB0aGUgZXhlY3V0YWJsZSIsImV4ZWN1dGFibGUgdmVyc2lvbiBiZXlvbmQiLCJ2ZXJzaW9uIGJleW9uZCB0aGF0IiwiYmV5b25kIHRoYXQgcmVxdWlyZWQiLCJ0aGF0IHJlcXVpcmVkIGluIiwicmVxdWlyZWQgaW4gZXhoaWJpdCIsImV4aGliaXQgYiBpbmFiaWxpdHkiLCJiIGluYWJpbGl0eSB0byIsImNvbnRyYWN0dWFsIG9ibGlnYXRpb24gdG8iLCJvYmxpZ2F0aW9uIHRvIHRoZSIsImV4dGVudCB0aGF0IHJlZCIsInJlZCBoYXQgaXMiLCJoYXQgaXMgbGltaXRlZCIsImZyb20gbWFraW5nIHRoaXJkIiwibWFraW5nIHRoaXJkIHBhcnR5IiwiaGF0IG1heSBjaG9vc2UiLCJjaG9vc2UgdG8gaW50ZWdyYXRlIiwidG8gaW50ZWdyYXRlIHN1Y2giLCJpbnRlZ3JhdGUgc3VjaCB0aGlyZCIsInBhcnR5IGNvZGUgaW50byIsImRpc3RyaWJ1dGUgc3VjaCB0aGlyZCIsInBhcnR5IGNvZGUgaW4iLCJpZiBzdWNoIHRoaXJkIiwicGFydHkgY29kZSB3b3VsZCIsInJlZGhhdCBjb20gc29mdHdhcmUiLCJjb20gc29mdHdhcmUgZGlzdHJpYnV0ZWQiLCJjb2RlIGlzIGVjb3MiLCJvcGVyYXRpbmcgc3lzdGVtIHJlbGVhc2VkIiwic3lzdGVtIHJlbGVhc2VkIHNlcHRlbWJlciIsInJlbGVhc2VkIHNlcHRlbWJlciAzMCIsInNlcHRlbWJlciAzMCAxOTk4IiwiMzAgMTk5OCB0aGUiLCJjb2RlIGlzIHJlZCIsImlzIHJlZCBoYXQiLCJoYXQgaW5jIGFsbCIsInByb2R1Y3QgaXMgZWNvcyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDEuMSBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBUZWNobmljYWwgUHVyc3VpdCBJbmMuLCBBbGwgUmlnaHRzIFJlc2VydmVkLiBQUkVBTUJMRVxuXG5UaGlzIFByZWFtYmxlIGlzIGludGVuZGVkIHRvIGRlc2NyaWJlLCBpbiBwbGFpbiBFbmdsaXNoLCB0aGUgbmF0dXJlLCBpbnRlbnQsIGFuZCBzY29wZSBvZiB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHRoaXMgUHJlYW1ibGUgaXMgbm90IGEgcGFydCBvZiB0aGlzIExpY2Vuc2UuIFRoZSBsZWdhbCBlZmZlY3Qgb2YgdGhpcyBMaWNlbnNlIGlzIGRlcGVuZGVudCBvbmx5IHVwb24gdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlIGFuZCBub3QgdGhpcyBQcmVhbWJsZS5cblxuVGhpcyBMaWNlbnNlIGlzIGJhc2VkIG9uIHRoZSBjb25jZXB0IG9mIHJlY2lwcm9jaXR5LiBJbiBleGNoYW5nZSBmb3IgYmVpbmcgZ3JhbnRlZCBjZXJ0YWluIHJpZ2h0cyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIExpY2Vuc29yJ3MgU29mdHdhcmUsIHdob3NlIFNvdXJjZSBDb2RlIFlvdSBoYXZlIGFjY2VzcyB0bywgWW91IGFyZSByZXF1aXJlZCB0byByZWNpcHJvY2F0ZSBieSBwcm92aWRpbmcgZXF1YWwgYWNjZXNzIGFuZCByaWdodHMgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdG8gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBNb2RpZmljYXRpb25zLCBEZXJpdmF0aXZlIFdvcmtzLCBhbmQgUmVxdWlyZWQgQ29tcG9uZW50cyBmb3IgZXhlY3V0aW9uIG9mIHNhbWUgKGNvbGxlY3RpdmVseSBkZWZpbmVkIGFzIEV4dGVuc2lvbnMpIHRoYXQgWW91IERlcGxveSBieSBEZXBsb3lpbmcgWW91ciBFeHRlbnNpb25zIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluIHRoaXMgZmFzaGlvbiB0aGUgYXZhaWxhYmxlIFNvdXJjZSBDb2RlIHJlbGF0ZWQgdG8gdGhlIG9yaWdpbmFsIExpY2Vuc2VkIFNvZnR3YXJlIGlzIGVubGFyZ2VkIGZvciB0aGUgYmVuZWZpdCBvZiBldmVyeW9uZS5cblxuVW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBZb3UgbWF5OlxuXG4gICBhLiBEaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBleGFjdGx5IGFzIFlvdSByZWNlaXZlZCBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBhbG9uZSBvciBhcyBhIGNvbXBvbmVudCBvZiBhbiBhZ2dyZWdhdGUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIGNvbnRhaW5pbmcgcHJvZ3JhbXMgZnJvbSBzZXZlcmFsIGRpZmZlcmVudCBzb3VyY2VzIHdpdGhvdXQgcGF5bWVudCBvZiBhIHJveWFsdHkgb3Igb3RoZXIgZmVlLlxuXG4gICBiLiBVc2UgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSBjb25zaXN0ZW50IHdpdGggdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSwgYnV0IHRoZSBMaWNlbnNvciBpcyBub3QgcHJvdmlkaW5nIFlvdSBhbnkgd2FycmFudHkgd2hhdHNvZXZlciwgbm9yIGlzIHRoZSBMaWNlbnNvciBhY2NlcHRpbmcgYW55IGxpYWJpbGl0eSBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zZWQgU29mdHdhcmUgZG9lc24ndCB3b3JrIHByb3Blcmx5IG9yIGNhdXNlcyBZb3UgYW55IGluanVyeSBvciBkYW1hZ2VzLlxuXG4gICBjLiBDcmVhdGUgRXh0ZW5zaW9ucyB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgY29uc2lzdGVudCB3aXRoIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IG1ha2UgdGhlIFNvdXJjZSBDb2RlIHRvIGFueSBFeHRlbnNpb25zIFlvdSBEZXBsb3kgYXZhaWxhYmxlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGRvY3VtZW50IFlvdXIgTW9kaWZpY2F0aW9ucyBjbGVhcmx5LCBhbmQgdGl0bGUgYWxsIEV4dGVuc2lvbnMgZGlzdGluY3RseSBmcm9tIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZS5cblxuICAgZC4gQ2hhcmdlIGEgZmVlIGZvciB3YXJyYW50eSBvciBzdXBwb3J0LCBvciBmb3IgYWNjZXB0aW5nIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgZm9yIFlvdXIgY3VzdG9tZXJzLlxuXG5VbmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIFlvdSBtYXkgbm90OlxuXG4gICBhLiBDaGFyZ2UgZm9yIHRoZSBTb3VyY2UgQ29kZSB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUsIG9yIFlvdXIgRXh0ZW5zaW9ucywgb3RoZXIgdGhhbiBhIG5vbWluYWwgZmVlIG5vdCB0byBleGNlZWQgWW91ciBjb3N0IGZvciByZXByb2R1Y3Rpb24gYW5kIGRpc3RyaWJ1dGlvbiB3aGVyZSBzdWNoIHJlcHJvZHVjdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGludm9sdmUgcGh5c2ljYWwgbWVkaWEuXG5cbiAgIGIuIE1vZGlmeSBvciBkZWxldGUgYW55IHByZS1leGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcywgY2hhbmdlIG5vdGljZXMsIG9yIExpY2Vuc2UgdGV4dCBpbiB0aGUgTGljZW5zZWQgU29mdHdhcmUuXG5cbiAgIGMuIEFzc2VydCBhbnkgcGF0ZW50IGNsYWltcyBhZ2FpbnN0IHRoZSBMaWNlbnNvciBvciBDb250cmlidXRvcnMsIG9yIHdoaWNoIHdvdWxkIGluIGFueSB3YXkgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYW55IHRoaXJkIHBhcnR5IHRvIHVzZSB0aGUgTGljZW5zZWQgU29mdHdhcmUgb3IgcG9ydGlvbnMgdGhlcmVvZiBpbiBhbnkgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBvciBZb3VyIHJpZ2h0cyB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgdW5kZXIgdGhpcyBMaWNlbnNlIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlLlxuXG4gICBkLiBSZXByZXNlbnQgZWl0aGVyIGV4cHJlc3NseSBvciBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSwgb3Igb3RoZXJ3aXNlIHRoYXQgWW91IHJlcHJlc2VudCBMaWNlbnNvciBvclxuXG4gICBDb250cmlidXRvcnMgaW4gYW55IGNhcGFjaXR5IG9yIHRoYXQgWW91IGhhdmUgYW55IGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYnkgdmlydHVlIG9mIHRoaXMgTGljZW5zZS5cblxuVW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBZb3UgbXVzdDpcblxuICAgYS4gRG9jdW1lbnQgYW55IE1vZGlmaWNhdGlvbnMgWW91IG1ha2UgdG8gdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGluY2x1ZGluZyB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIHRoZSBhdXRob3JzIG9mIHRoZSBjaGFuZ2UsIGFuZCB0aGUgZGF0ZSBvZiB0aGUgY2hhbmdlLiBUaGlzIGRvY3VtZW50YXRpb24gbXVzdCBhcHBlYXIgYm90aCBpbiB0aGUgU291cmNlIENvZGUgYW5kIGluIGEgdGV4dCBmaWxlIHRpdGxlZCBcIkNIQU5HRVNcIiBkaXN0cmlidXRlZCB3aXRoIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgWW91ciBFeHRlbnNpb25zLlxuXG4gICBiLiBNYWtlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IEV4dGVuc2lvbnMgWW91IERlcGxveSBhdmFpbGFibGUgaW4gYSB0aW1lbHkgZmFzaGlvbiB2aWEgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHN1Y2ggYXMgRlRQIG9yIEhUVFAgZG93bmxvYWQuXG5cbiAgIGMuIE5vdGlmeSB0aGUgTGljZW5zb3Igb2YgdGhlIGF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZSB0byBZb3VyIEV4dGVuc2lvbnMgaW4gYSB0aW1lbHkgZmFzaGlvbiBhbmQgaW5jbHVkZSBpbiBzdWNoIG5vdGljZSBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBFeHRlbnNpb25zLCB0aGUgZGlzdGluY3RpdmUgdGl0bGUgdXNlZCwgYW5kIGluc3RydWN0aW9ucyBvbiBob3cgdG8gYWNxdWlyZSB0aGUgU291cmNlIENvZGUgYW5kIGZ1dHVyZSB1cGRhdGVzLlxuXG4gICBkLiBHcmFudCBMaWNlbnNvciBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSB3b3JsZC13aWRlLCBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB1bmRlciBhbnkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBZb3VyIEV4dGVuc2lvbnMsIGluIGFueSBmb3JtLCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG5MSUNFTlNFIFRFUk1TXG5cbiAgIDEuMCBHZW5lcmFsOyBBcHBsaWNhYmlsaXR5IFx1MDAyNiBEZWZpbml0aW9ucy4gVGhpcyBSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChcIkxpY2Vuc2VcIikgYXBwbGllcyB0byBhbnkgcHJvZ3JhbXMgb3Igb3RoZXIgd29ya3MgYXMgd2VsbCBhcyBhbnkgYW5kIGFsbCB1cGRhdGVzIG9yIG1haW50ZW5hbmNlIHJlbGVhc2VzIG9mIHNhaWQgcHJvZ3JhbXMgb3Igd29ya3MgKFwiU29mdHdhcmVcIikgbm90IGFscmVhZHkgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugd2hpY2ggdGhlIFNvZnR3YXJlIGNvcHlyaWdodCBob2xkZXIgKFwiTGljZW5zb3JcIikgbWFrZXMgcHVibGljbHkgYXZhaWxhYmxlIGNvbnRhaW5pbmcgYSBOb3RpY2UgKGhlcmVpbmFmdGVyIGRlZmluZWQpIGZyb20gdGhlIExpY2Vuc29yIHNwZWNpZnlpbmcgb3IgYWxsb3dpbmcgdXNlIG9yIGRpc3RyaWJ1dGlvbiB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBBcyB1c2VkIGluIHRoaXMgTGljZW5zZSBhbmQgUHJlYW1ibGU6XG5cbiAgICAgIDEuMSBcIkNvbnRyaWJ1dG9yXCIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgb3IgY29udHJpYnV0ZWQgdG8gdGhlIGNyZWF0aW9uIG9mIGFuIEV4dGVuc2lvbi5cblxuICAgICAgMS4yIFwiRGVwbG95XCIgbWVhbnMgdG8gdXNlLCBTZXJ2ZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIExpY2Vuc2VkIFNvZnR3YXJlIG90aGVyIHRoYW4gZm9yIFlvdXIgaW50ZXJuYWwgUmVzZWFyY2ggYW5kL29yIFBlcnNvbmFsIFVzZSwgYW5kIGluY2x1ZGVzIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBMaWNlbnNlZCBTb2Z0d2FyZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gb3RoZXIgdGhhbiBmb3IgUmVzZWFyY2ggYW5kL29yIFBlcnNvbmFsIFVzZSwgYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBieSBZb3UgdG8gYW55IHRoaXJkIHBhcnR5IGluIGFueSBmb3JtIG9yIG1hbm5lci5cblxuICAgICAgMS4zIFwiRGVyaXZhdGl2ZSBXb3Jrc1wiIGFzIHVzZWQgaW4gdGhpcyBMaWNlbnNlIGlzIGRlZmluZWQgdW5kZXIgVS5TLiBjb3B5cmlnaHQgbGF3LlxuXG4gICAgICAxLjQgXCJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc21cIiBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YSBzdWNoIGFzIGRvd25sb2FkIGZyb20gYW4gRlRQIG9yIHdlYiBzaXRlLCB3aGVyZSBzdWNoIG1lY2hhbmlzbSBpcyBwdWJsaWNseSBhY2Nlc3NpYmxlLlxuXG4gICAgICAxLjUgXCJFeHRlbnNpb25zXCIgbWVhbnMgYW55IE1vZGlmaWNhdGlvbnMsIERlcml2YXRpdmUgV29ya3MsIG9yIFJlcXVpcmVkIENvbXBvbmVudHMgYXMgdGhvc2UgdGVybXMgYXJlIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjYgXCJMaWNlbnNlXCIgbWVhbnMgdGhpcyBSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlLlxuXG4gICAgICAxLjcgXCJMaWNlbnNlZCBTb2Z0d2FyZVwiIG1lYW5zIGFueSBTb2Z0d2FyZSBsaWNlbnNlZCBwdXJzdWFudCB0byB0aGlzIExpY2Vuc2UuIExpY2Vuc2VkIFNvZnR3YXJlIGFsc28gaW5jbHVkZXMgYWxsIHByZXZpb3VzIEV4dGVuc2lvbnMgZnJvbSBhbnkgQ29udHJpYnV0b3IgdGhhdCBZb3UgcmVjZWl2ZS5cblxuICAgICAgMS44IFwiTGljZW5zb3JcIiBtZWFucyB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiBhbnkgU29mdHdhcmUgcHJldmlvdXNseSB1bmNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIHdobyByZWxlYXNlcyB0aGUgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS45IFwiTW9kaWZpY2F0aW9uc1wiIG1lYW5zIGFueSBhZGRpdGlvbnMgdG8gb3IgZGVsZXRpb25zIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgKGkpIGEgZmlsZSBvciBvdGhlciBzdG9yYWdlIGNvbnRhaW5pbmcgTGljZW5zZWQgU29mdHdhcmUsIG9yIChpaSkgYW55IG5ldyBmaWxlIG9yIHN0b3JhZ2UgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBMaWNlbnNlZCBTb2Z0d2FyZSwgb3IgKGlpaSkgYW55IGZpbGUgb3Igc3RvcmFnZSB3aGljaCByZXBsYWNlcyBvciBvdGhlcndpc2UgYWx0ZXJzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbmFsaXR5IG9mIExpY2Vuc2VkIFNvZnR3YXJlIGF0IHJ1bnRpbWUuXG5cbiAgICAgIDEuMTAgXCJOb3RpY2VcIiBtZWFucyB0aGUgbm90aWNlIGNvbnRhaW5lZCBpbiBFWEhJQklUIEEuXG5cbiAgICAgIDEuMTEgXCJQZXJzb25hbCBVc2VcIiBtZWFucyB1c2Ugb2YgTGljZW5zZWQgU29mdHdhcmUgYnkgYW4gaW5kaXZpZHVhbCBzb2xlbHkgZm9yIGhpcyBvciBoZXIgcGVyc29uYWwsIHByaXZhdGUgYW5kIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLiBBbiBpbmRpdmlkdWFsJ3MgdXNlIG9mIExpY2Vuc2VkIFNvZnR3YXJlIGluIGhpcyBvciBoZXIgY2FwYWNpdHkgYXMgYW4gb2ZmaWNlciwgZW1wbG95ZWUsIG1lbWJlciwgaW5kZXBlbmRlbnQgY29udHJhY3RvciBvciBhZ2VudCBvZiBhIGNvcnBvcmF0aW9uLCBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gKGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwpIGRvZXMgbm90IHF1YWxpZnkgYXMgUGVyc29uYWwgVXNlLlxuXG4gICAgICAxLjEyIFwiUmVxdWlyZWQgQ29tcG9uZW50c1wiIG1lYW5zIGFueSB0ZXh0LCBwcm9ncmFtcywgc2NyaXB0cywgc2NoZW1hLCBpbnRlcmZhY2UgZGVmaW5pdGlvbnMsIGNvbnRyb2wgZmlsZXMsIG9yIG90aGVyIHdvcmtzIGNyZWF0ZWQgYnkgWW91IHdoaWNoIGFyZSByZXF1aXJlZCBieSBhIHRoaXJkIHBhcnR5IG9mIGF2ZXJhZ2Ugc2tpbGwgdG8gc3VjY2Vzc2Z1bGx5IGluc3RhbGwgYW5kIHJ1biBMaWNlbnNlZCBTb2Z0d2FyZSBjb250YWluaW5nIFlvdXIgTW9kaWZpY2F0aW9ucywgb3IgdG8gaW5zdGFsbCBhbmQgcnVuIFlvdXIgRGVyaXZhdGl2ZSBXb3Jrcy5cblxuICAgICAgMS4xMyBcIlJlc2VhcmNoXCIgbWVhbnMgaW52ZXN0aWdhdGlvbiBvciBleHBlcmltZW50YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHVuZGVyc3RhbmRpbmcgdGhlIG5hdHVyZSBhbmQgbGltaXRzIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgaXRzIHBvdGVudGlhbCB1c2VzLlxuXG4gICAgICAxLjE0IFwiU2VydmVcIiBtZWFucyB0byBkZWxpdmVyIExpY2Vuc2VkIFNvZnR3YXJlIGFuZC9vciBZb3VyIEV4dGVuc2lvbnMgYnkgbWVhbnMgb2YgYSBjb21wdXRlciBuZXR3b3JrIHRvIG9uZSBvciBtb3JlIGNvbXB1dGVycyBmb3IgcHVycG9zZXMgb2YgZXhlY3V0aW9uIG9mIExpY2Vuc2VkIFNvZnR3YXJlIGFuZC9vciBZb3VyIEV4dGVuc2lvbnMuXG5cbiAgICAgIDEuMTUgXCJTb2Z0d2FyZVwiIG1lYW5zIGFueSBjb21wdXRlciBwcm9ncmFtcyBvciBvdGhlciB3b3JrcyBhcyB3ZWxsIGFzIGFueSB1cGRhdGVzIG9yIG1haW50ZW5hbmNlIHJlbGVhc2VzIG9mIHRob3NlIHByb2dyYW1zIG9yIHdvcmtzIHdoaWNoIGFyZSBkaXN0cmlidXRlZCBwdWJsaWNseSBieSBMaWNlbnNvci5cblxuICAgICAgMS4xNiBcIlNvdXJjZSBDb2RlXCIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kL29yIFlvdXIgRXh0ZW5zaW9ucywgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGNvbnRhaW5lZCB0aGVyZWluLCBwbHVzIGFueSBhc3NvY2lhdGVkIHRleHQsIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBvciBvdGhlciBjb21wb25lbnRzIHJlcXVpcmVkIGJ5IGEgdGhpcmQgcGFydHkgb2YgYXZlcmFnZSBza2lsbCB0byBidWlsZCBhIHJ1bm5pbmcgdmVyc2lvbiBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgb3IgWW91ciBFeHRlbnNpb25zLlxuXG4gICAgICAxLjE3IFwiWW91XCIgb3IgXCJZb3VyXCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgXCJZb3VcIiBvciBcIllvdXJcIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlIFwiY29udHJvbFwiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgMi4wIEFjY2VwdGFuY2UgT2YgTGljZW5zZS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LCBob3dldmVyIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBkaXN0cmlidXRlLCBtb2RpZnksIG9yIGNyZWF0ZSBkZXJpdmF0aXZlcyBvZiBlaXRoZXIgdGhlIFNvZnR3YXJlIG9yIGFueSBFeHRlbnNpb25zIGNyZWF0ZWQgYnkgYSBDb250cmlidXRvci4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IHBlcmZvcm1pbmcgYW55IG9mIHRoZXNlIGFjdGlvbnMgWW91IGluZGljYXRlIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIFlvdXIgYWdyZWVtZW50IHRvIGJlIGJvdW5kIGJ5IGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElGIFlPVSBETyBOT1QgQUdSRUUgV0lUSCBBTEwgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRSBETyBOT1QgVVNFLCBNT0RJRlksIENSRUFURSBERVJJVkFUSVZFUywgT1IgRElTVFJJQlVURSBUSEUgU09GVFdBUkUuIElGIElUIElTIElNUE9TU0lCTEUgRk9SIFlPVSBUTyBDT01QTFkgV0lUSCBBTEwgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRSBUSEVOIFlPVSBDQU4gTk9UIFVTRSwgTU9ESUZZLCBDUkVBVEUgREVSSVZBVElWRVMsIE9SIERJU1RSSUJVVEUgVEhFIFNPRlRXQVJFLlxuXG4gICAzLjAgR3JhbnQgb2YgTGljZW5zZSBGcm9tIExpY2Vuc29yLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gTGljZW5zb3IncyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLCBhbmQgYW55IHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSB1bmRlciB0aGlzIExpY2Vuc2UsIHRvIGRvIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIDMuMSBVc2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIExpY2Vuc2VkIFNvZnR3YXJlIGFuZCBZb3VyIEV4dGVuc2lvbnMgaW4gYm90aCBTb3VyY2UgQ29kZSBmb3JtIG9yIGFzIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbS5cblxuICAgICAgMy4yIENyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIChhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCB1bmRlciBVLlMuIGNvcHlyaWdodCBsYXcpIG9mIExpY2Vuc2VkIFNvZnR3YXJlIGJ5IGFkZGluZyB0byBvciBkZWxldGluZyBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIHNhaWQgTGljZW5zZWQgU29mdHdhcmUuXG5cbiAgICAgIDMuMyBVbmRlciBjbGFpbXMgb2YgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTGljZW5zZWQgU29mdHdhcmUgb3IgcG9ydGlvbnMgdGhlcmVvZiwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggY2xhaW0gaXMgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gbWFrZSwgdXNlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBvciBwb3J0aW9ucyB0aGVyZW9mLlxuXG4gICAgICAzLjQgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgbmV3IHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSB3aXRoIGRpZmZlcmVudCBmZWF0dXJlcywgc3BlY2lmaWNhdGlvbnMsIGNhcGFiaWxpdGllcywgZnVuY3Rpb25zLCBsaWNlbnNpbmcgdGVybXMsIGdlbmVyYWwgYXZhaWxhYmlsaXR5IG9yIG90aGVyIGNoYXJhY3RlcmlzdGljcy4gVGl0bGUsIG93bmVyc2hpcCByaWdodHMsIGFuZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGluIGFuZCB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgc2hhbGwgcmVtYWluIGluIExpY2Vuc29yIGFuZC9vciBpdHMgQ29udHJpYnV0b3JzLlxuXG4gICA0LjAgR3JhbnQgb2YgTGljZW5zZSBGcm9tIENvbnRyaWJ1dG9yLiBCeSBhcHBsaWNhdGlvbiBvZiB0aGUgcHJvdmlzaW9ucyBpbiBTZWN0aW9uIDYgYmVsb3csIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byBzYWlkIENvbnRyaWJ1dG9yJ3MgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgYW5kIGFueSB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgTGljZW5zZWQgU29mdHdhcmUgdW5kZXIgdGhpcyBMaWNlbnNlLCB0byBkbyB0aGUgZm9sbG93aW5nOlxuXG4gICAgICA0LjEgVXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBhbnkgRXh0ZW5zaW9ucyBEZXBsb3llZCBieSBzdWNoIENvbnRyaWJ1dG9yIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluIGJvdGggU291cmNlIENvZGUgZm9ybSBvciBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0sIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzIG9yIGFzIHBhcnQgb2YgRGVyaXZhdGl2ZSBXb3Jrcy5cblxuICAgICAgNC4yIFVuZGVyIGNsYWltcyBvZiBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8gbWFrZSwgdXNlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBFeHRlbnNpb25zIG9yIHBvcnRpb25zIHRoZXJlb2YsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIGNsYWltIGlzIG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIG1ha2UsIHVzZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgQ29udHJpYnV0b3IncyBFeHRlbnNpb25zIG9yIHBvcnRpb25zIHRoZXJlb2YuXG5cbiAgIDUuMCBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvIGdyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDMgYW5kIDQsIG5vIG90aGVyIHBhdGVudCByaWdodHMsIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgaGVyZWluLiBZb3VyIEV4dGVuc2lvbnMgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBMaWNlbnNvciBvciBDb250cmlidXRvcnMgd2hpY2ggZWFjaCBtYXkgZ3JhbnQgaW4gaXRzIHNvbGUgZGlzY3JldGlvbi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZWQgU29mdHdhcmUuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgY29kZSB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS5cblxuICAgICAgNS4xIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgYWx0aG91Z2ggTGljZW5zb3IgYW5kIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byB0aGVpciByZXNwZWN0aXZlIHBvcnRpb25zIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgTGljZW5zZWQgU29mdHdhcmUgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIExpY2Vuc29yIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltIGFueSBsaWFiaWxpdHkgdG8gWW91IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgWW91IGhlcmVieSBhc3N1bWUgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFlvdSB0byBkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSwgaXQgaXMgWW91ciByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZS5cblxuICAgNi4wIFlvdXIgT2JsaWdhdGlvbnMgQW5kIEdyYW50cy4gSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIHRvLCB0aGUgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIFlvdSBoZXJlYnkgYWdyZWUgdGhhdCBhbnkgTW9kaWZpY2F0aW9ucywgRGVyaXZhdGl2ZSBXb3Jrcywgb3IgUmVxdWlyZWQgQ29tcG9uZW50cyAoY29sbGVjdGl2ZWx5IEV4dGVuc2lvbnMpIHRoYXQgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgU2VjdGlvbiA0LiBBbnkgRXh0ZW5zaW9ucyB0aGF0IFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBEZXBsb3llZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNy4gWW91IGhlcmVieSBncmFudCB0byBMaWNlbnNvciBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSB3b3JsZC13aWRlLCBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB1bmRlciB0aG9zZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIFlvdSBvd24gb3IgY29udHJvbCB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBjcmVhdGUgZGVyaXZhdGl2ZXMsIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIFlvdXIgRXh0ZW5zaW9ucywgaW4gYW55IGZvcm0uIEFueSBFeHRlbnNpb25zIFlvdSBtYWtlIGFuZCBEZXBsb3kgbXVzdCBoYXZlIGEgZGlzdGluY3QgdGl0bGUgc28gYXMgdG8gcmVhZGlseSB0ZWxsIGFueSBzdWJzZXF1ZW50IHVzZXIgb3IgQ29udHJpYnV0b3IgdGhhdCB0aGUgRXh0ZW5zaW9ucyBhcmUgYnkgWW91LiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBFeHRlbnNpb25zIFlvdSBkaXN0cmlidXRlLiBZb3UgYWdyZWUgbm90IHRvIG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIG9yIGV4ZWN1dGFibGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUsIG9yIGl0cyBFeHRlbnNpb25zIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuXG5cbiAgICAgIDYuMSBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIFlvdSBtdXN0IG1ha2UgYXZhaWxhYmxlLCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgU291cmNlIENvZGUgb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGFuZCBhbnkgRXh0ZW5zaW9ucyB0aGF0IFlvdSBEZXBsb3ksIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBZb3UgZGlzdHJpYnV0ZSBhbnkgZXhlY3V0YWJsZSBvciBvdGhlciBmb3JtIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSwgb3IgdmlhIGFuIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbS4gVGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgdmVyc2lvbiBvZiBMaWNlbnNlZCBTb2Z0d2FyZSwgb3IgaXRzIEV4dGVuc2lvbnMgdGhhdCBZb3UgRGVwbG95IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgYXQgdGhlIHRpbWUgb2YgRGVwbG95bWVudCBhbmQgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIFlvdSBEZXBsb3kgdGhlIEV4dGVuc2lvbnMgb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIFlvdSBEZXBsb3ksIHdoaWNoZXZlciBpcyBsb25nZXIuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4gWW91IG1heSBub3QgY2hhcmdlIGEgZmVlIGZvciB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBTZWN0aW9uIGluIGV4Y2VzcyBvZiBZb3VyIGFjdHVhbCBjb3N0IG9mIGR1cGxpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gd2hlcmUgc3VjaCBkdXBsaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGludm9sdmUgcGh5c2ljYWwgbWVkaWEuXG5cbiAgICAgIDYuMiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiBZb3UgbXVzdCBjYXVzZSBhbnkgTW9kaWZpY2F0aW9ucyB0aGF0IFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUsIHRvIHVwZGF0ZSB0aGUgZmlsZSB0aXRsZWQgXCJDSEFOR0VTXCIgZGlzdHJpYnV0ZWQgd2l0aCBMaWNlbnNlZCBTb2Z0d2FyZSBkb2N1bWVudGluZyB0aGUgYWRkaXRpb25zLCBjaGFuZ2VzIG9yIGRlbGV0aW9ucyBZb3UgbWFkZSwgdGhlIGF1dGhvcnMgb2Ygc3VjaCBNb2RpZmljYXRpb25zLCBhbmQgdGhlIGRhdGVzIG9mIGFueSBzdWNoIGFkZGl0aW9ucywgY2hhbmdlcyBvciBkZWxldGlvbnMuIFlvdSBtdXN0IGFsc28gY2F1c2UgYSBjcm9zcy1yZWZlcmVuY2UgdG8gYXBwZWFyIGluIHRoZSBTb3VyY2UgQ29kZSBhdCB0aGUgbG9jYXRpb24gb2YgZWFjaCBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbnMgYXJlIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGFuZCBpbmNsdWRlIHRoZSBuYW1lcyBvZiB0aGUgTGljZW5zb3IgYW5kIGFueSBDb250cmlidXRvciB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgaW4gKGkpIHRoZSBTb3VyY2UgQ29kZSBhbmQgKGlpKSBpbiBhbnkgbm90aWNlIGRpc3BsYXllZCBieSB0aGUgTGljZW5zZWQgU29mdHdhcmUgWW91IGRpc3RyaWJ1dGUgb3IgaW4gcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUuIFlvdSBtYXkgbm90IG1vZGlmeSBvciBkZWxldGUgYW55IHByZS1leGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcywgY2hhbmdlIG5vdGljZXMgb3IgTGljZW5zZSB0ZXh0IGluIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZS5cblxuICAgICAgNi4zIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLlxuXG4gICAgICAgICBhLiBUaGlyZCBQYXJ0eSBDbGFpbXMuIElmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB0byBhIHRoaXJkIHBhcnR5J3MgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UsIFlvdSBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCBcIkxFR0FMXCIgdGhhdCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIFlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgWW91IG1ha2UgYW55IEV4dGVuc2lvbnMgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDYuMSwgWW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBmcm9tIFlvdSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuXG5cbiAgICAgICAgIGIuIENvbnRyaWJ1dG9yIEFQSXMuIElmIFlvdXIgRXh0ZW5zaW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSAoXCJBUElcIikgYW5kIFlvdSBoYXZlIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgdGhhdCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBZb3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS5cblxuICAgICAgICAgYy4gUmVwcmVzZW50YXRpb25zLiBZb3UgcmVwcmVzZW50IHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gNi4zKGEpIGFib3ZlLCBZb3UgYmVsaWV2ZSB0aGF0IGFueSBFeHRlbnNpb25zIFlvdSBkaXN0cmlidXRlIGFyZSBZb3VyIG9yaWdpbmFsIGNyZWF0aW9ucyBhbmQgdGhhdCBZb3UgaGF2ZSBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgNi40IFJlcXVpcmVkIE5vdGljZXMuXG5cbiAgICAgICAgIGEuIExpY2Vuc2UgVGV4dC4gWW91IG11c3QgZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBZb3UgcHJvdmlkZSBhbG9uZyB3aXRoIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRXh0ZW5zaW9ucyBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlLCB3aGVyZXZlciBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIExpY2Vuc2VkIFNvZnR3YXJlLiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBjb250YWluZWQgaW4gRVhISUJJVCBBICh0aGUgXCJOb3RpY2VcIikgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgY29weSBZb3UgZGlzdHJpYnV0ZSBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIFlvdXIgRXh0ZW5zaW9ucy4gSWYgWW91IGNyZWF0ZSBhbiBFeHRlbnNpb24sIFlvdSBtYXkgYWRkIFlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSB0ZXh0IGZpbGUgdGl0bGVkIFwiQ09OVFJJQlwiIGRpc3RyaWJ1dGVkIHdpdGggdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGFsb25nIHdpdGggYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29udHJpYnV0aW9uLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHRoZSBOb3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIE5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS5cblxuICAgICAgICAgYi4gU291cmNlIENvZGUgQXZhaWxhYmlsaXR5LiBZb3UgbXVzdCBub3RpZnkgTGljZW5zb3Igd2l0aGluIG9uZSAoMSkgbW9udGggb2YgdGhlIGRhdGUgWW91IGluaXRpYWxseSBEZXBsb3kgb2YgdGhlIGF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZSB0byBZb3VyIEV4dGVuc2lvbnMgYW5kIGluY2x1ZGUgaW4gc3VjaCBub3RpZmljYXRpb24gdGhlIG5hbWUgdW5kZXIgd2hpY2ggeW91IERlcGxveWVkIFlvdXIgRXh0ZW5zaW9ucywgYSBkZXNjcmlwdGlvbiBvZiB0aGUgRXh0ZW5zaW9ucywgYW5kIGluc3RydWN0aW9ucyBvbiBob3cgdG8gYWNxdWlyZSB0aGUgU291cmNlIENvZGUsIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGFjcXVpcmUgdXBkYXRlcyBvdmVyIHRpbWUuIFNob3VsZCBzdWNoIGluc3RydWN0aW9ucyBjaGFuZ2UgeW91IG11c3QgcHJvdmlkZSBMaWNlbnNvciB3aXRoIHJldmlzZWQgaW5zdHJ1Y3Rpb25zIHdpdGhpbiBvbmUgKDEpIG1vbnRoIG9mIHRoZSBkYXRlIG9mIGNoYW5nZS4gU2hvdWxkIHlvdSBiZSB1bmFibGUgdG8gbm90aWZ5IExpY2Vuc29yIGRpcmVjdGx5LCB5b3UgbXVzdCBwcm92aWRlIG5vdGlmaWNhdGlvbiBieSBwb3N0aW5nIHRvIGFwcHJvcHJpYXRlIG5ld3MgZ3JvdXBzLCBtYWlsaW5nIGxpc3RzLCBvciB3ZWIgc2l0ZXMgd2hlcmUgYSBzZWFyY2ggZW5naW5lIHdvdWxkIHJlYXNvbmFibHkgYmUgZXhwZWN0ZWQgdG8gaW5kZXggdGhlbS5cblxuICAgICAgNi41IEFkZGl0aW9uYWwgVGVybXMuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBMaWNlbnNlZCBTb2Z0d2FyZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgTGljZW5zb3IgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IHBsdXMgYXR0b3JuZXkgZmVlcywgY29zdHMsIGFuZCByZWxhdGVkIGV4cGVuc2VzIGR1ZSB0byBhbnkgc3VjaCBhY3Rpb24gb3IgY2xhaW0gaW5jdXJyZWQgYnkgdGhlIExpY2Vuc29yIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICA2LjYgQ29uZmxpY3RzIFdpdGggT3RoZXIgTGljZW5zZXMuIFdoZXJlIGFueSBwb3J0aW9uIG9mIFlvdXIgRXh0ZW5zaW9ucywgYnkgdmlydHVlIG9mIGJlaW5nIERlcml2YXRpdmUgV29ya3Mgb2YgYW5vdGhlciBwcm9kdWN0IG9yIHNpbWlsYXIgY2lyY3Vtc3RhbmNlLCBmYWxsIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbm90aGVyIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZiB0aGF0IGxpY2Vuc2Ugc2hvdWxkIGJlIGhvbm9yZWQgaG93ZXZlciBZb3UgbXVzdCBhbHNvIG1ha2UgWW91ciBFeHRlbnNpb25zIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UuIElmIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgY29udGludWUgdG8gY29uZmxpY3Qgd2l0aCB0aGUgdGVybXMgb2YgdGhlIG90aGVyIGxpY2Vuc2UgeW91IG1heSB3cml0ZSB0aGUgTGljZW5zb3IgZm9yIHBlcm1pc3Npb24gdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgaW4gYSBmYXNoaW9uIHRoYXQgcmVtYWlucyBjb25zaXN0ZW50IHdpdGggdGhlIGludGVudCBvZiB0aGlzIExpY2Vuc2UuIFN1Y2ggcGVybWlzc2lvbiB3aWxsIGJlIGdyYW50ZWQgYXQgdGhlIHNvbGUgZGlzY3JldGlvbiBvZiB0aGUgTGljZW5zb3IuXG5cbiAgIDcuMCBWZXJzaW9ucyBvZiBUaGlzIExpY2Vuc2UuIExpY2Vuc29yIG1heSBwdWJsaXNoIGZyb20gdGltZSB0byB0aW1lIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gT25jZSBMaWNlbnNlZCBTb2Z0d2FyZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIExpY2Vuc2VkIFNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBMaWNlbnNvci4gTm8gb25lIG90aGVyIHRoYW4gTGljZW5zb3IgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gTGljZW5zZWQgU29mdHdhcmUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDcuMSBJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCB3aGljaCBZb3UgbWF5IGRvIG9ubHkgaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gc29mdHdhcmUgdGhhdCBpcyBub3QgYWxyZWFkeSBMaWNlbnNlZCBTb2Z0d2FyZSB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtdXN0IHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCBpdCBpcyBub3QgY29uZnVzaW5nbHkgc2ltaWxhciB0byB0aGlzIExpY2Vuc2UsIGFuZCBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgdGhhdCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UuIEluIHNvIG5hbWluZyBZb3VyIGxpY2Vuc2UsIFlvdSBtYXkgbm90IHVzZSBhbnkgdHJhZGVtYXJrIG9mIExpY2Vuc29yIG9yIG9mIGFueSBDb250cmlidXRvci4gU2hvdWxkIFlvdXIgbW9kaWZpY2F0aW9ucyB0byB0aGlzIExpY2Vuc2UgYmUgbGltaXRlZCB0byBhbHRlcmF0aW9uIG9mIEVYSElCSVQgQSBwdXJlbHkgZm9yIHB1cnBvc2VzIG9mIGFkanVzdGluZyB0aGUgTm90aWNlIFlvdSByZXF1aXJlIG9mIGxpY2Vuc2VlcywgWW91IG1heSBjb250aW51ZSB0byByZWZlciB0byBZb3VyIExpY2Vuc2UgYXMgdGhlIFJlY2lwcm9jYWwgUHVibGljIExpY2Vuc2Ugb3Igc2ltcGx5IHRoZSBSUEwuXG5cbiAgIDguMCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gRlVSVEhFUiBUSEVSRSBJUyBOTyBXQVJSQU5UWSBNQURFIEFORCBBTEwgSU1QTElFRCBXQVJSQU5USUVTIEFSRSBESVNDTEFJTUVEIFRIQVQgVEhFIExJQ0VOU0VEIFNPRlRXQVJFIE1FRVRTIE9SIENPTVBMSUVTIFdJVEggQU5ZIERFU0NSSVBUSU9OIE9GIFBFUkZPUk1BTkNFIE9SIE9QRVJBVElPTiwgU0FJRCBDT01QQVRJQklMSVRZIEFORCBTVUlUQUJJTElUWSBCRUlORyBZT1VSIFJFU1BPTlNJQklMSVRZLiBMSUNFTlNPUiBESVNDTEFJTVMgQU5ZIFdBUlJBTlRZLCBJTVBMSUVEIE9SIEVYUFJFU1NFRCwgVEhBVCBBTlkgQ09OVFJJQlVUT1InUyBFWFRFTlNJT05TIE1FRVQgQU5ZIFNUQU5EQVJEIE9GIENPTVBBVElCSUxJVFkgT1IgREVTQ1JJUFRJT04gT0YgUEVSRk9STUFOQ0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIExJQ0VOU0VEIFNPRlRXQVJFIElTIFdJVEggWU9VLiBTSE9VTEQgTElDRU5TRUQgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKEFORCBOT1QgVEhFIExJQ0VOU09SIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TT1IgV0lMTCBOT1QgU1VQUE9SVCBUSElTIFNPRlRXQVJFIEFORCBJUyBVTkRFUiBOTyBPQkxJR0FUSU9OIFRPIElTU1VFIFVQREFURVMgVE8gVEhJUyBTT0ZUV0FSRS4gTElDRU5TT1IgSEFTIE5PIEtOT1dMRURHRSBPRiBFUlJBTlQgQ09ERSBPUiBWSVJVUyBJTiBUSElTIFNPRlRXQVJFLCBCVVQgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBTT0ZUV0FSRSBJUyBGUkVFIEZST00gU1VDSCBFUlJPUlMgT1IgVklSVVNFUy4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIExJQ0VOU0VEIFNPRlRXQVJFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuXG5cbiAgIDkuMCBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFIExJQ0VOU09SLCBBTlkgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBMSUNFTlNFRCBTT0ZUV0FSRSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICAxMC4wIEhpZ2ggUmlzayBBY3Rpdml0aWVzLiBUSEUgTElDRU5TRUQgU09GVFdBUkUgSVMgTk9UIEZBVUxULVRPTEVSQU5UIEFORCBJUyBOT1QgREVTSUdORUQsIE1BTlVGQUNUVVJFRCwgT1IgSU5URU5ERUQgRk9SIFVTRSBPUiBESVNUUklCVVRJT04gQVMgT04tTElORSBDT05UUk9MIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMgRU5WSVJPTk1FTlRTIFJFUVVJUklORyBGQUlMLVNBRkUgUEVSRk9STUFOQ0UsIFNVQ0ggQVMgSU4gVEhFIE9QRVJBVElPTiBPRiBOVUNMRUFSIEZBQ0lMSVRJRVMsIEFJUkNSQUZUIE5BVklHQVRJT04gT1IgQ09NTVVOSUNBVElPTlMgU1lTVEVNUywgQUlSIFRSQUZGSUMgQ09OVFJPTCwgRElSRUNUIExJRkUgU1VQUE9SVCBNQUNISU5FUywgT1IgV0VBUE9OUyBTWVNURU1TLCBJTiBXSElDSCBUSEUgRkFJTFVSRSBPRiBUSEUgTElDRU5TRUQgU09GVFdBUkUgQ09VTEQgTEVBRCBESVJFQ1RMWSBUTyBERUFUSCwgUEVSU09OQUwgSU5KVVJZLCBPUiBTRVZFUkUgUEhZU0lDQUwgT1IgRU5WSVJPTk1FTlRBTCBEQU1BR0UgKFwiSElHSCBSSVNLIEFDVElWSVRJRVNcIikuIExJQ0VOU09SIEFORCBDT05UUklCVVRPUlMgU1BFQ0lGSUNBTExZIERJU0NMQUlNIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVFkgT0YgRklUTkVTUyBGT1IgSElHSCBSSVNLIEFDVElWSVRJRVMuXG5cbiAgIDExLjAgUmVzcG9uc2liaWxpdHkgZm9yIENsYWltcy4gQXMgYmV0d2VlbiBMaWNlbnNvciBhbmQgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdoaWNoIHNwZWNpZmljYWxseSBkaXNjbGFpbXMgd2FycmFudGllcyBhbmQgbGltaXRzIGFueSBsaWFiaWxpdHkgb2YgdGhlIExpY2Vuc29yLiBUaGlzIHBhcmFncmFwaCBpcyB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYW5kIGNvbnRyb2xsZWQgYnkgdGhlIERpc2NsYWltZXIgT2YgV2FycmFudGllcyBvZiBTZWN0aW9uIDgsIHRoZSBMaW1pdGF0aW9uIE9mIERhbWFnZXMgaW4gU2VjdGlvbiA5LCBhbmQgdGhlIGRpc2NsYWltZXIgYWdhaW5zdCB1c2UgZm9yIEhpZ2ggUmlzayBBY3Rpdml0aWVzIGluIFNlY3Rpb24gMTAuIFRoZSBMaWNlbnNvciBoYXMgdGhlcmVieSBkaXNjbGFpbWVkIGFsbCB3YXJyYW50aWVzIGFuZCBsaW1pdGVkIGFueSBkYW1hZ2VzIHRoYXQgaXQgaXMgb3IgbWF5IGJlIGxpYWJsZSBmb3IuIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggTGljZW5zb3IgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzIGNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyBTZWN0aW9ucyA4LCA5LCBhbmQgMTAuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LlxuXG4gICAxMi4wIFRlcm1pbmF0aW9uLiBUaGlzIExpY2Vuc2UgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEzLjYgb3IgaWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQgb3Igc3BlY2lmaWNhbGx5IGNvbXBseWluZyB3aXRoIFNlY3Rpb25zIDMsIDQgYW5kL29yIDYsIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBhbnkgb2YgdGhvc2UgU2VjdGlvbnMsIGFuZCBZb3UgbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mIExpY2Vuc2VkIFNvZnR3YXJlLlxuXG4gICAgICAxMi4xIEF1dG9tYXRpYyBUZXJtaW5hdGlvbiBVcG9uIEJyZWFjaC4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhlIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiB0aGlydHkgKDMwKSBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgdGhhdCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgdGhhdCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHNoYWxsIHN1cnZpdmUuXG5cbiAgICAgIDEyLjIgVGVybWluYXRpb24gVXBvbiBBc3NlcnRpb24gb2YgUGF0ZW50IEluZnJpbmdlbWVudC4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhcmF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgTGljZW5zb3Igb3IgYSBDb250cmlidXRvciAoTGljZW5zb3Igb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYW4gYWN0aW9uIGlzIHJlZmVycmVkIHRvIGhlcmVpbiBhcyBcIlJlc3BvbmRlbnRcIikgYWxsZWdpbmcgdGhhdCBMaWNlbnNlZCBTb2Z0d2FyZSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUmVzcG9uZGVudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMyBvciA0IG9mIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSB1cG9uIHNpeHR5ICg2MCkgZGF5cyBub3RpY2UgZnJvbSBSZXNwb25kZW50ICh0aGUgXCJOb3RpY2UgUGVyaW9kXCIpIHVubGVzcyB3aXRoaW4gdGhhdCBOb3RpY2UgUGVyaW9kIFlvdSBlaXRoZXIgYWdyZWUgaW4gd3JpdGluZyAoaSkgdG8gcGF5IFJlc3BvbmRlbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJseSByb3lhbHR5IGZvciBZb3VyIHBhc3Qgb3IgZnV0dXJlIHVzZSBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBtYWRlIGJ5IHN1Y2ggUmVzcG9uZGVudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIExpY2Vuc2VkIFNvZnR3YXJlIGFnYWluc3Qgc3VjaCBSZXNwb25kZW50LiBJZiB3aXRoaW4gc2FpZCBOb3RpY2UgUGVyaW9kIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgTGljZW5zb3IgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDMgYW5kIDQgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2Ygc2FpZCBOb3RpY2UgUGVyaW9kLlxuXG4gICAgICAxMi4zIFJlYXNvbmFibGUgVmFsdWUgb2YgVGhpcyBMaWNlbnNlLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFJlc3BvbmRlbnQgYWxsZWdpbmcgdGhhdCBMaWNlbnNlZCBTb2Z0d2FyZSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc2FpZCBSZXNwb25kZW50IHVuZGVyIFNlY3Rpb25zIDMgYW5kIDQgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS5cblxuICAgICAgMTIuNCBObyBSZXRyb2FjdGl2ZSBFZmZlY3Qgb2YgVGVybWluYXRpb24uIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciB0aGlzIFNlY3Rpb24gYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGxpY2Vuc2VzIHRvIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB0aGF0IGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi5cblxuICAgMTMuMCBNaXNjZWxsYW5lb3VzLlxuXG4gICAgICAxMy4xIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBpcyBhIFwiY29tbWVyY2lhbCBpdGVtLFwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiBcImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmVcIiBhbmQgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sXCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBMaWNlbnNlZCBTb2Z0d2FyZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uXG5cbiAgICAgIDEzLjIgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMuIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSwgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBvciBhbW9uZyBZb3UsIExpY2Vuc29yLCBvciBhbnkgQ29udHJpYnV0b3IsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50IHRvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlLCBvciBvdGhlcndpc2UuXG5cbiAgICAgIDEzLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIExpY2Vuc29yJ3MgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgc3ViY29udHJhY3QsIG1hcmtldCwgb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgRXh0ZW5zaW9ucyB0aGF0IFlvdSBtYXkgZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0LCBvciBkaXN0cmlidXRlLlxuXG4gICAgICAxMy40IENvbnNlbnQgVG8gQnJlYWNoIE5vdCBXYWl2ZXIuIEZhaWx1cmUgYnkgTGljZW5zb3Igb3IgQ29udHJpYnV0b3IgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50IG9mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi5cblxuICAgICAgMTMuNSBTZXZlcmFiaWxpdHkuIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS5cblxuICAgICAgMTMuNiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uIElmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiwgdGhlbiBZb3UgY2Fubm90IHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZS5cblxuICAgICAgMTMuNyBFeHBvcnQgUmVzdHJpY3Rpb25zLiBZb3UgbWF5IGJlIHJlc3RyaWN0ZWQgd2l0aCByZXNwZWN0IHRvIGRvd25sb2FkaW5nIG9yIG90aGVyd2lzZSBhY3F1aXJpbmcsIGV4cG9ydGluZywgb3IgcmVleHBvcnRpbmcgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIG9yIGFueSB1bmRlcmx5aW5nIGluZm9ybWF0aW9uIG9yIHRlY2hub2xvZ3kgYnkgVW5pdGVkIFN0YXRlcyBhbmQgb3RoZXIgYXBwbGljYWJsZSBsYXdzIGFuZCByZWd1bGF0aW9ucy4gQnkgZG93bmxvYWRpbmcgb3IgYnkgb3RoZXJ3aXNlIG9idGFpbmluZyB0aGUgTGljZW5zZWQgU29mdHdhcmUsIFlvdSBhcmUgYWdyZWVpbmcgdG8gYmUgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2Ugd2l0aCBhbGwgYXBwbGljYWJsZSBsYXdzIGFuZCByZWd1bGF0aW9ucy5cblxuICAgICAgMTMuOCBBcmJpdHJhdGlvbiwgSnVyaXNkaWN0aW9uIFx1MDAyNiBWZW51ZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENvbG9yYWRvIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBZb3UgZXhwcmVzc2x5IGFncmVlIHRoYXQgYW55IGRpc3B1dGUgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1Ym1pdHRlZCB0byBiaW5kaW5nIGFyYml0cmF0aW9uIHVuZGVyIHRoZSBydWxlcyB0aGVuIHByZXZhaWxpbmcgb2YgdGhlIEFtZXJpY2FuIEFyYml0cmF0aW9uIEFzc29jaWF0aW9uLiBZb3UgZnVydGhlciBhZ3JlZSB0aGF0IEFkYW1zIENvdW50eSwgQ29sb3JhZG8gVVNBIGlzIHByb3BlciB2ZW51ZSBhbmQgZ3JhbnQgc3VjaCBhcmJpdHJhdGlvbiBwcm9jZWVkaW5nIGp1cmlzZGljdGlvbiBhcyBtYXkgYmUgYXBwcm9wcmlhdGUgZm9yIHB1cnBvc2VzIG9mIHJlc29sdmluZyBhbnkgZGlzcHV0ZSB1bmRlciB0aGlzIExpY2Vuc2UuIEp1ZGdlbWVudCB1cG9uIGFueSBhd2FyZCBtYWRlIGluIGFyYml0cmF0aW9uIG1heSBiZSBlbnRlcmVkIGFuZCBlbmZvcmNlZCBpbiBhbnkgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbi4gVGhlIGFyYml0cmF0b3Igc2hhbGwgYXdhcmQgYXR0b3JuZXkncyBmZWVzIGFuZCBjb3N0cyBvZiBhcmJpdHJhdGlvbiB0byB0aGUgcHJldmFpbGluZyBwYXJ0eS4gU2hvdWxkIGVpdGhlciBwYXJ0eSBmaW5kIGl0IG5lY2Vzc2FyeSB0byBlbmZvcmNlIGl0cyBhcmJpdHJhdGlvbiBhd2FyZCBvciBzZWVrIHNwZWNpZmljIHBlcmZvcm1hbmNlIG9mIHN1Y2ggYXdhcmQgaW4gYSBjaXZpbCBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWFzb25hYmxlIGF0dG9ybmV5J3MgZmVlcyBhbmQgY29zdHMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBZb3UgYW5kIExpY2Vuc29yIGV4cHJlc3NseSB3YWl2ZSBhbnkgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgbGl0aWdhdGlvbiBjb25jZXJuaW5nIExpY2Vuc2VkIFNvZnR3YXJlIG9yIHRoaXMgTGljZW5zZS4gQW55IGxhdyBvciByZWd1bGF0aW9uIHRoYXQgcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxMy45IEVudGlyZSBBZ3JlZW1lbnQuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBFWEhJQklUIEFcblxuVGhlIE5vdGljZSBiZWxvdyBtdXN0IGFwcGVhciBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBjb3B5IFlvdSBkaXN0cmlidXRlIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBvciBhbnkgRXh0ZW5zaW9ucyB0aGVyZXRvLCBleGNlcHQgYXMgbWF5IGJlIG1vZGlmaWVkIGFzIGFsbG93ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNy4xXG5cbkNvcHlyaWdodCAoQykgMTk5OS0yMDAyIFRlY2huaWNhbCBQdXJzdWl0IEluYy4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIFBhdGVudCBQZW5kaW5nLCBUZWNobmljYWwgUHVyc3VpdCBJbmMuXG5cblVubGVzcyBleHBsaWNpdGx5IGFjcXVpcmVkIGFuZCBsaWNlbnNlZCBmcm9tIExpY2Vuc29yIHVuZGVyIHRoZSBUZWNobmljYWwgUHVyc3VpdCBMaWNlbnNlIChcIlRQTFwiKSBWZXJzaW9uIDEuMCBvciBncmVhdGVyLCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIChcIlJQTFwiKSBWZXJzaW9uIDEuMSwgb3Igc3Vic2VxdWVudCB2ZXJzaW9ucyBhcyBhbGxvd2VkIGJ5IHRoZSBSUEwsIGFuZCBZb3UgbWF5IG5vdCBjb3B5IG9yIHVzZSB0aGlzIGZpbGUgaW4gZWl0aGVyIHNvdXJjZSBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSwgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIFJQTC5cblxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIGJvdGggdGhlIFRQTCBhbmQgdGhlIFJQTCAodGhlIFwiTGljZW5zZXNcIikgZnJvbSBUZWNobmljYWwgUHVyc3VpdCBJbmMuIGF0IGh0dHA6Ly93d3cudGVjaG5pY2FscHVyc3VpdC5jb20uXG5cbkFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZXMgaXMgcHJvdmlkZWQgc3RyaWN0bHkgb24gYW4gXCJBUyBJU1wiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgVEVDSE5JQ0FMIFBVUlNVSVQgSU5DLiBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCwgT1IgTk9OLUlORlJJTkdFTUVOVC4gU2VlIHRoZSBMaWNlbnNlcyBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2VzLiJdLCJsaWNlbnNlSWRzIjpbIlJQTC0xLjEiXSwia2V5d29yZHMiOlsiMjAwMSAyMDAyIHRlY2huaWNhbCIsInJlc2VydmVkIHByZWFtYmxlIHRoaXMiLCJ0aGUgbmF0dXJlIGludGVudCIsIm5hdHVyZSBpbnRlbnQgYW5kIiwiaW50ZW50IGFuZCBzY29wZSIsIm9mIHJlY2lwcm9jaXR5IGluIiwicmVjaXByb2NpdHkgaW4gZXhjaGFuZ2UiLCJleGNoYW5nZSBmb3IgYmVpbmciLCJmb3IgYmVpbmcgZ3JhbnRlZCIsImJlaW5nIGdyYW50ZWQgY2VydGFpbiIsImdyYW50ZWQgY2VydGFpbiByaWdodHMiLCJjZXJ0YWluIHJpZ2h0cyB1bmRlciIsImxpY2Vuc29yIHMgc29mdHdhcmUiLCJzIHNvZnR3YXJlIHdob3NlIiwic29mdHdhcmUgd2hvc2Ugc291cmNlIiwiY29kZSB5b3UgaGF2ZSIsInlvdSBoYXZlIGFjY2VzcyIsImFjY2VzcyB0byB5b3UiLCJ0byB5b3UgYXJlIiwicmVxdWlyZWQgdG8gcmVjaXByb2NhdGUiLCJ0byByZWNpcHJvY2F0ZSBieSIsInJlY2lwcm9jYXRlIGJ5IHByb3ZpZGluZyIsImJ5IHByb3ZpZGluZyBlcXVhbCIsInByb3ZpZGluZyBlcXVhbCBhY2Nlc3MiLCJlcXVhbCBhY2Nlc3MgYW5kIiwiYWNjZXNzIGFuZCByaWdodHMiLCJyaWdodHMgdG8gYWxsIiwicGFydGllcyB0byB0aGUiLCJ3b3JrcyBhbmQgcmVxdWlyZWQiLCJyZXF1aXJlZCBjb21wb25lbnRzIGZvciIsImNvbXBvbmVudHMgZm9yIGV4ZWN1dGlvbiIsImZvciBleGVjdXRpb24gb2YiLCJleGVjdXRpb24gb2Ygc2FtZSIsIm9mIHNhbWUgY29sbGVjdGl2ZWx5Iiwic2FtZSBjb2xsZWN0aXZlbHkgZGVmaW5lZCIsImNvbGxlY3RpdmVseSBkZWZpbmVkIGFzIiwiZGVmaW5lZCBhcyBleHRlbnNpb25zIiwiYXMgZXh0ZW5zaW9ucyB0aGF0IiwieW91IGRlcGxveSBieSIsImRlcGxveSBieSBkZXBsb3lpbmciLCJieSBkZXBsb3lpbmcgeW91ciIsImRlcGxveWluZyB5b3VyIGV4dGVuc2lvbnMiLCJ5b3VyIGV4dGVuc2lvbnMgdW5kZXIiLCJleHRlbnNpb25zIHVuZGVyIHRoZSIsImluIHRoaXMgZmFzaGlvbiIsInRoaXMgZmFzaGlvbiB0aGUiLCJmYXNoaW9uIHRoZSBhdmFpbGFibGUiLCJ0aGUgYXZhaWxhYmxlIHNvdXJjZSIsInNvdXJjZSBjb2RlIHJlbGF0ZWQiLCJjb2RlIHJlbGF0ZWQgdG8iLCJvcmlnaW5hbCBsaWNlbnNlZCBzb2Z0d2FyZSIsInNvZnR3YXJlIGlzIGVubGFyZ2VkIiwiaXMgZW5sYXJnZWQgZm9yIiwiZW5sYXJnZWQgZm9yIHRoZSIsImJlbmVmaXQgb2YgZXZlcnlvbmUiLCJvZiBldmVyeW9uZSB1bmRlciIsImV2ZXJ5b25lIHVuZGVyIHRoZSIsInlvdSBtYXkgYSIsIm1heSBhIGRpc3RyaWJ1dGUiLCJsaWNlbnNlZCBzb2Z0d2FyZSBleGFjdGx5Iiwic29mdHdhcmUgZXhhY3RseSBhcyIsImV4YWN0bHkgYXMgeW91IiwicmVjZWl2ZWQgaXQgdW5kZXIiLCJsaWNlbnNlIGVpdGhlciBhbG9uZSIsImRpZmZlcmVudCBzb3VyY2VzIHdpdGhvdXQiLCJzb3VyY2VzIHdpdGhvdXQgcGF5bWVudCIsIndpdGhvdXQgcGF5bWVudCBvZiIsIm9mIGEgcm95YWx0eSIsIm90aGVyIGZlZSBiIiwiZmVlIGIgdXNlIiwibGljZW5zZWQgc29mdHdhcmUgZm9yIiwiYW55IHB1cnBvc2UgY29uc2lzdGVudCIsInB1cnBvc2UgY29uc2lzdGVudCB3aXRoIiwibGljZW5zZWQgc29mdHdhcmUgZG9lc24iLCJzb2Z0d2FyZSBkb2VzbiB0Iiwib3IgZGFtYWdlcyBjIiwiZGFtYWdlcyBjIGNyZWF0ZSIsImMgY3JlYXRlIGV4dGVuc2lvbnMiLCJjcmVhdGUgZXh0ZW5zaW9ucyB0byIsImV4dGVuc2lvbnMgdG8gdGhlIiwibGljZW5zZWQgc29mdHdhcmUgY29uc2lzdGVudCIsInNvZnR3YXJlIGNvbnNpc3RlbnQgd2l0aCIsInRvIGFueSBleHRlbnNpb25zIiwiZGVwbG95IGF2YWlsYWJsZSB0byIsImxpY2Vuc2UgZG9jdW1lbnQgeW91ciIsImRvY3VtZW50IHlvdXIgbW9kaWZpY2F0aW9ucyIsInlvdXIgbW9kaWZpY2F0aW9ucyBjbGVhcmx5IiwibW9kaWZpY2F0aW9ucyBjbGVhcmx5IGFuZCIsImNsZWFybHkgYW5kIHRpdGxlIiwiYW5kIHRpdGxlIGFsbCIsInRpdGxlIGFsbCBleHRlbnNpb25zIiwiYWxsIGV4dGVuc2lvbnMgZGlzdGluY3RseSIsImV4dGVuc2lvbnMgZGlzdGluY3RseSBmcm9tIiwiZGlzdGluY3RseSBmcm9tIHRoZSIsImxpY2Vuc2VkIHNvZnR3YXJlIGQiLCJzb2Z0d2FyZSBkIGNoYXJnZSIsImQgY2hhcmdlIGEiLCJsaWFiaWxpdHkgb2JsaWdhdGlvbnMgZm9yIiwib2JsaWdhdGlvbnMgZm9yIHlvdXIiLCJmb3IgeW91ciBjdXN0b21lcnMiLCJ5b3VyIGN1c3RvbWVycyB1bmRlciIsImN1c3RvbWVycyB1bmRlciB0aGUiLCJtYXkgbm90IGEiLCJub3QgYSBjaGFyZ2UiLCJhIGNoYXJnZSBmb3IiLCJ5b3VyIGV4dGVuc2lvbnMgb3RoZXIiLCJleHRlbnNpb25zIG90aGVyIHRoYW4iLCJub21pbmFsIGZlZSBub3QiLCJmZWUgbm90IHRvIiwibm90IHRvIGV4Y2VlZCIsInRvIGV4Y2VlZCB5b3VyIiwiZXhjZWVkIHlvdXIgY29zdCIsInlvdXIgY29zdCBmb3IiLCJjb3N0IGZvciByZXByb2R1Y3Rpb24iLCJmb3IgcmVwcm9kdWN0aW9uIGFuZCIsIndoZXJlIHN1Y2ggcmVwcm9kdWN0aW9uIiwic3VjaCByZXByb2R1Y3Rpb24gYW5kIiwicGh5c2ljYWwgbWVkaWEgYiIsIm1lZGlhIGIgbW9kaWZ5IiwiYiBtb2RpZnkgb3IiLCJsaWNlbnNlZCBzb2Z0d2FyZSBjIiwic29mdHdhcmUgYyBhc3NlcnQiLCJjIGFzc2VydCBhbnkiLCJvciBjb250cmlidXRvcnMgb3IiLCJjb250cmlidXRvcnMgb3Igd2hpY2giLCJvciB3aGljaCB3b3VsZCIsIndoaWNoIHdvdWxkIGluIiwid291bGQgaW4gYW55IiwiYW55IHdheSByZXN0cmljdCIsIndheSByZXN0cmljdCB0aGUiLCJwYXJ0eSB0byB1c2UiLCJvciB5b3VyIHJpZ2h0cyIsImF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGQiLCJ0ZXJtaW5hdGUgZCByZXByZXNlbnQiLCJkIHJlcHJlc2VudCBlaXRoZXIiLCJyZXByZXNlbnQgZWl0aGVyIGV4cHJlc3NseSIsImV4cHJlc3NseSBvciBieSIsInRoYXQgeW91IHJlcHJlc2VudCIsInlvdSByZXByZXNlbnQgbGljZW5zb3IiLCJyZXByZXNlbnQgbGljZW5zb3Igb3IiLCJvciBjb250cmlidXRvcnMgaW4iLCJjb250cmlidXRvcnMgaW4gYW55IiwiaW4gYW55IGNhcGFjaXR5IiwiYW55IGNhcGFjaXR5IG9yIiwiY2FwYWNpdHkgb3IgdGhhdCIsImhhdmUgYW55IGZvcm0iLCJsZWdhbCBhc3NvY2lhdGlvbiBieSIsImFzc29jaWF0aW9uIGJ5IHZpcnR1ZSIsInZpcnR1ZSBvZiB0aGlzIiwibXVzdCBhIGRvY3VtZW50IiwiYSBkb2N1bWVudCBhbnkiLCJkb2N1bWVudCBhbnkgbW9kaWZpY2F0aW9ucyIsImxpY2Vuc2VkIHNvZnR3YXJlIGluY2x1ZGluZyIsInNvZnR3YXJlIGluY2x1ZGluZyB0aGUiLCJpbmNsdWRpbmcgdGhlIG5hdHVyZSIsInRoZSBjaGFuZ2UgdGhlIiwiY2hhbmdlIHRoZSBhdXRob3JzIiwidGhlIGNoYW5nZSBhbmQiLCJjaGFuZ2UgYW5kIHRoZSIsInRoZSBjaGFuZ2UgdGhpcyIsImNoYW5nZSB0aGlzIGRvY3VtZW50YXRpb24iLCJ0aGlzIGRvY3VtZW50YXRpb24gbXVzdCIsImRvY3VtZW50YXRpb24gbXVzdCBhcHBlYXIiLCJtdXN0IGFwcGVhciBib3RoIiwiYXBwZWFyIGJvdGggaW4iLCJ5b3VyIGV4dGVuc2lvbnMgYiIsImV4dGVuc2lvbnMgYiBtYWtlIiwiYiBtYWtlIHRoZSIsImZvciBhbnkgZXh0ZW5zaW9ucyIsImRlcGxveSBhdmFpbGFibGUgaW4iLCJ0aW1lbHkgZmFzaGlvbiB2aWEiLCJmYXNoaW9uIHZpYSBhbiIsImRpc3RyaWJ1dGlvbiBtZWNoYW5pc20gc3VjaCIsIm1lY2hhbmlzbSBzdWNoIGFzIiwib3IgaHR0cCBkb3dubG9hZCIsImh0dHAgZG93bmxvYWQgYyIsImRvd25sb2FkIGMgbm90aWZ5IiwiYyBub3RpZnkgdGhlIiwibm90aWZ5IHRoZSBsaWNlbnNvciIsImV4dGVuc2lvbnMgaW4gYSIsInRpbWVseSBmYXNoaW9uIGFuZCIsImZhc2hpb24gYW5kIGluY2x1ZGUiLCJpbiBzdWNoIG5vdGljZSIsInN1Y2ggbm90aWNlIGEiLCJhIGJyaWVmIGRlc2NyaXB0aW9uIiwidGhlIGV4dGVuc2lvbnMgdGhlIiwiZXh0ZW5zaW9ucyB0aGUgZGlzdGluY3RpdmUiLCJ0aGUgZGlzdGluY3RpdmUgdGl0bGUiLCJkaXN0aW5jdGl2ZSB0aXRsZSB1c2VkIiwidGl0bGUgdXNlZCBhbmQiLCJ1c2VkIGFuZCBpbnN0cnVjdGlvbnMiLCJjb2RlIGFuZCBmdXR1cmUiLCJhbmQgZnV0dXJlIHVwZGF0ZXMiLCJmdXR1cmUgdXBkYXRlcyBkIiwidXBkYXRlcyBkIGdyYW50IiwiZCBncmFudCBsaWNlbnNvciIsImdyYW50IGxpY2Vuc29yIGFuZCIsInVuZGVyIGFueSBpbnRlbGxlY3R1YWwiLCIxIDEgbGljZW5zZSIsIjEgbGljZW5zZSBhcHBsaWVzIl19LHsibGljZW5zZVRleHRzIjpbIlJlY2lwcm9jYWwgUHVibGljIExpY2Vuc2UgMS41IChSUEwxLjUpXG5cblZlcnNpb24gMS41LCBKdWx5IDE1LCAyMDA3IENvcHlyaWdodCAoQykgMjAwMS0yMDA3IFRlY2huaWNhbCBQdXJzdWl0IEluYy4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cblBSRUFNQkxFXG5cblRoZSBSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIChSUEwpIGlzIGJhc2VkIG9uIHRoZSBjb25jZXB0IG9mIHJlY2lwcm9jaXR5IG9yLCBpZiB5b3UgcHJlZmVyLCBmYWlybmVzcy5cblxuSW4gc2hvcnQsIHRoaXMgbGljZW5zZSBncmV3IG91dCBvZiBhIGRlc2lyZSB0byBjbG9zZSBsb29waG9sZXMgaW4gcHJldmlvdXMgb3BlbiBzb3VyY2UgbGljZW5zZXMsIGxvb3Bob2xlcyB0aGF0IGFsbG93ZWQgcGFydGllcyB0byBhY3F1aXJlIG9wZW4gc291cmNlIHNvZnR3YXJlIGFuZCBkZXJpdmUgZmluYW5jaWFsIGJlbmVmaXQgZnJvbSBpdCB3aXRob3V0IGhhdmluZyB0byByZWxlYXNlIHRoZWlyIGltcHJvdmVtZW50cyBvciBkZXJpdmF0aXZlcyB0byB0aGUgY29tbXVuaXR5IHdoaWNoIGVuYWJsZWQgdGhlbS4gVGhpcyBvY2N1cnJlZCBhbnkgdGltZSBhbiBlbnRpdHkgZGlkIG5vdCByZWxlYXNlIHRoZWlyIGFwcGxpY2F0aW9uIHRvIGEgXCJ0aGlyZCBwYXJ0eVwiLlxuXG5XaGlsZSB0aGVyZSBpcyBhIGNlcnRhaW4gZnJlZWRvbSBpbiB0aGlzIG1vZGVsIG9mIGxpY2Vuc2luZywgaXQgc3RydWNrIHRoZSBhdXRob3JzIG9mIHRoZSBSUEwgYXMgYmVpbmcgdW5mYWlyIHRvIHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYXQgbGFyZ2UgYW5kIHRvIHRoZSBvcmlnaW5hbCBhdXRob3JzIG9mIHRoZSB3b3JrcyBpbiBwYXJ0aWN1bGFyLiBBZnRlciBhbGwsIGJ1ZyBmaXhlcywgZXh0ZW5zaW9ucywgYW5kIG1lYW5pbmdmdWwgYW5kIHZhbHVhYmxlIGRlcml2YXRpdmVzIHdlcmUgbm90IGNvbnNpc3RlbnRseSBmaW5kaW5nIHRoZWlyIHdheSBiYWNrIGludG8gdGhlIGNvbW11bml0eSB3aGVyZSB0aGV5IGNvdWxkIGZ1ZWwgZnVydGhlciwgYW5kIGZhc3RlciwgZ3Jvd3RoIGFuZCBleHBhbnNpb24gb2YgdGhlIG92ZXJhbGwgb3BlbiBzb3VyY2Ugc29mdHdhcmUgYmFzZS5cblxuV2hpbGUgeW91IHNob3VsZCBjbGVhcmx5IHJlYWQgYW5kIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBsaWNlbnNlLCB0aGUgZXNzZW5jZSBvZiB0aGUgUlBMIGlzIGZvdW5kIGluIHR3byBkZWZpbml0aW9uczogXCJEZXBsb3lcIiBhbmQgXCJSZXF1aXJlZCBDb21wb25lbnRzXCIuXG5cblJlZ2FyZGluZyBkZXBsb3ltZW50LCB1bmRlciB0aGUgUlBMIHlvdXIgY2hhbmdlcywgYnVnIGZpeGVzLCBleHRlbnNpb25zLCBldGMuIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdG8gdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBhdCBsYXJnZSB3aGVuIHlvdSBEZXBsb3kgaW4gYW55IGZvcm0gLS0gZWl0aGVyIGludGVybmFsbHkgb3IgdG8gYW4gb3V0c2lkZSBwYXJ0eS4gT25jZSB5b3Ugc3RhcnQgcnVubmluZyB0aGUgc29mdHdhcmUgeW91IGhhdmUgdG8gc3RhcnQgc2hhcmluZyB0aGUgc29mdHdhcmUuXG5cbkZ1cnRoZXIsIHVuZGVyIHRoZSBSUEwgYWxsIGNvbXBvbmVudHMgeW91IGF1dGhvciBpbmNsdWRpbmcgc2NoZW1hcywgc2NyaXB0cywgc291cmNlIGNvZGUsIGV0Yy4gLS0gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkncmUgY29tcGlsZWQgaW50byBhIHNpbmdsZSBiaW5hcnkgb3IgdXNlZCBhcyB0d28gaGFsdmVzIG9mIGNsaWVudC9zZXJ2ZXIgYXBwbGljYXRpb24gLS0gbXVzdCBiZSBzaGFyZWQuIFlvdSBoYXZlIHRvIHNoYXJlIHRoZSB3aG9sZSBwaWUsIG5vdCBhbiBpc29sYXRlZCBzbGljZSBvZiBpdC5cblxuSW4gYWRkaXRpb24gdG8gdGhlc2UgZ29hbHMsIHRoZSBSUEwgd2FzIGF1dGhvcmVkIHRvIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbiBhcyBtYWludGFpbmVkIGJ5IHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIChPU0kpLlxuXG5UaGUgc3BlY2lmaWMgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2UgYXJlIGRlZmluZWQgaW4gdGhlIHJlbWFpbmRlciBvZiB0aGlzIGRvY3VtZW50LlxuXG5MSUNFTlNFIFRFUk1TXG5cbiAgIDEuMCBHZW5lcmFsOyBBcHBsaWNhYmlsaXR5IFx1MDAyNiBEZWZpbml0aW9ucy4gVGhpcyBSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS41IChcIkxpY2Vuc2VcIikgYXBwbGllcyB0byBhbnkgcHJvZ3JhbXMgb3Igb3RoZXIgd29ya3MgYXMgd2VsbCBhcyBhbnkgYW5kIGFsbCB1cGRhdGVzIG9yIG1haW50ZW5hbmNlIHJlbGVhc2VzIG9mIHNhaWQgcHJvZ3JhbXMgb3Igd29ya3MgKFwiU29mdHdhcmVcIikgbm90IGFscmVhZHkgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugd2hpY2ggdGhlIFNvZnR3YXJlIGNvcHlyaWdodCBob2xkZXIgKFwiTGljZW5zb3JcIikgbWFrZXMgYXZhaWxhYmxlIGNvbnRhaW5pbmcgYSBMaWNlbnNlIE5vdGljZSAoaGVyZWluYWZ0ZXIgZGVmaW5lZCkgZnJvbSB0aGUgTGljZW5zb3Igc3BlY2lmeWluZyBvciBhbGxvd2luZyB1c2Ugb3IgZGlzdHJpYnV0aW9uIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEFzIHVzZWQgaW4gdGhpcyBMaWNlbnNlOlxuXG4gICAgICAxLjEgXCJDb250cmlidXRvclwiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHdobyBjcmVhdGVkIG9yIGNvbnRyaWJ1dGVkIHRvIHRoZSBjcmVhdGlvbiBvZiBhbiBFeHRlbnNpb24uXG5cbiAgICAgIDEuMiBcIkRlcGxveVwiIG1lYW5zIHRvIHVzZSwgU2VydmUsIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBMaWNlbnNlZCBTb2Z0d2FyZSBvdGhlciB0aGFuIGZvciBZb3VyIGludGVybmFsIFJlc2VhcmNoIGFuZC9vciBQZXJzb25hbCBVc2UsIGFuZCBpbmNsdWRlcyB3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YgTGljZW5zZWQgU29mdHdhcmUgd2l0aGluIFlvdXIgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIG90aGVyIHRoYW4gZm9yIFJlc2VhcmNoIGFuZC9vciBQZXJzb25hbCBVc2UsIGFzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgTGljZW5zZWQgU29mdHdhcmUgYnkgWW91IHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgZm9ybSBvciBtYW5uZXIuXG5cbiAgICAgIDEuMyBcIkRlcml2YXRpdmUgV29ya3NcIiBhcyB1c2VkIGluIHRoaXMgTGljZW5zZSBpcyBkZWZpbmVkIHVuZGVyIFUuUy4gY29weXJpZ2h0IGxhdy5cblxuICAgICAgMS40IFwiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtXCIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEgc3VjaCBhcyBkb3dubG9hZCBmcm9tIGFuIEZUUCBzZXJ2ZXIgb3Igd2ViIHNpdGUsIHdoZXJlIHN1Y2ggbWVjaGFuaXNtIGlzIHB1YmxpY2x5IGFjY2Vzc2libGUuXG5cbiAgICAgIDEuNSBcIkV4dGVuc2lvbnNcIiBtZWFucyBhbnkgTW9kaWZpY2F0aW9ucywgRGVyaXZhdGl2ZSBXb3Jrcywgb3IgUmVxdWlyZWQgQ29tcG9uZW50cyBhcyB0aG9zZSB0ZXJtcyBhcmUgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuNiBcIkxpY2Vuc2VcIiBtZWFucyB0aGlzIFJlY2lwcm9jYWwgUHVibGljIExpY2Vuc2UuXG5cbiAgICAgIDEuNyBcIkxpY2Vuc2UgTm90aWNlXCIgbWVhbnMgYW55IG5vdGljZSBjb250YWluZWQgaW4gRVhISUJJVCBBLlxuXG4gICAgICAxLjggXCJMaWNlbnNlZCBTb2Z0d2FyZVwiIG1lYW5zIGFueSBTb2Z0d2FyZSBsaWNlbnNlZCBwdXJzdWFudCB0byB0aGlzIExpY2Vuc2UuIExpY2Vuc2VkIFNvZnR3YXJlIGFsc28gaW5jbHVkZXMgYWxsIHByZXZpb3VzIEV4dGVuc2lvbnMgZnJvbSBhbnkgQ29udHJpYnV0b3IgdGhhdCBZb3UgcmVjZWl2ZS5cblxuICAgICAgMS45IFwiTGljZW5zb3JcIiBtZWFucyB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiBhbnkgU29mdHdhcmUgcHJldmlvdXNseSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugd2hvIHJlbGVhc2VzIHRoZSBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjEwIFwiTW9kaWZpY2F0aW9uc1wiIG1lYW5zIGFueSBhZGRpdGlvbnMgdG8gb3IgZGVsZXRpb25zIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgKGkpIGEgZmlsZSBvciBvdGhlciBzdG9yYWdlIGNvbnRhaW5pbmcgTGljZW5zZWQgU29mdHdhcmUsIG9yIChpaSkgYW55IG5ldyBmaWxlIG9yIHN0b3JhZ2UgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBMaWNlbnNlZCBTb2Z0d2FyZSwgb3IgKGlpaSkgYW55IGZpbGUgb3Igc3RvcmFnZSB3aGljaCByZXBsYWNlcyBvciBvdGhlcndpc2UgYWx0ZXJzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbmFsaXR5IG9mIExpY2Vuc2VkIFNvZnR3YXJlIGF0IHJ1bnRpbWUuXG5cbiAgICAgIDEuMTEgXCJQZXJzb25hbCBVc2VcIiBtZWFucyB1c2Ugb2YgTGljZW5zZWQgU29mdHdhcmUgYnkgYW4gaW5kaXZpZHVhbCBzb2xlbHkgZm9yIGhpcyBvciBoZXIgcGVyc29uYWwsIHByaXZhdGUgYW5kIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLiBBbiBpbmRpdmlkdWFsJ3MgdXNlIG9mIExpY2Vuc2VkIFNvZnR3YXJlIGluIGhpcyBvciBoZXIgY2FwYWNpdHkgYXMgYW4gb2ZmaWNlciwgZW1wbG95ZWUsIG1lbWJlciwgaW5kZXBlbmRlbnQgY29udHJhY3RvciBvciBhZ2VudCBvZiBhIGNvcnBvcmF0aW9uLCBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gKGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwpIGRvZXMgbm90IHF1YWxpZnkgYXMgUGVyc29uYWwgVXNlLlxuXG4gICAgICAxLjEyIFwiUmVxdWlyZWQgQ29tcG9uZW50c1wiIG1lYW5zIGFueSB0ZXh0LCBwcm9ncmFtcywgc2NyaXB0cywgc2NoZW1hLCBpbnRlcmZhY2UgZGVmaW5pdGlvbnMsIGNvbnRyb2wgZmlsZXMsIG9yIG90aGVyIHdvcmtzIGNyZWF0ZWQgYnkgWW91IHdoaWNoIGFyZSByZXF1aXJlZCBieSBhIHRoaXJkIHBhcnR5IG9mIGF2ZXJhZ2Ugc2tpbGwgdG8gc3VjY2Vzc2Z1bGx5IGluc3RhbGwgYW5kIHJ1biBMaWNlbnNlZCBTb2Z0d2FyZSBjb250YWluaW5nIFlvdXIgTW9kaWZpY2F0aW9ucywgb3IgdG8gaW5zdGFsbCBhbmQgcnVuIFlvdXIgRGVyaXZhdGl2ZSBXb3Jrcy5cblxuICAgICAgMS4xMyBcIlJlc2VhcmNoXCIgbWVhbnMgaW52ZXN0aWdhdGlvbiBvciBleHBlcmltZW50YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHVuZGVyc3RhbmRpbmcgdGhlIG5hdHVyZSBhbmQgbGltaXRzIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgaXRzIHBvdGVudGlhbCB1c2VzLlxuXG4gICAgICAxLjE0IFwiU2VydmVcIiBtZWFucyB0byBkZWxpdmVyIExpY2Vuc2VkIFNvZnR3YXJlIGFuZC9vciBZb3VyIEV4dGVuc2lvbnMgYnkgbWVhbnMgb2YgYSBjb21wdXRlciBuZXR3b3JrIHRvIG9uZSBvciBtb3JlIGNvbXB1dGVycyBmb3IgcHVycG9zZXMgb2YgZXhlY3V0aW9uIG9mIExpY2Vuc2VkIFNvZnR3YXJlIGFuZC9vciBZb3VyIEV4dGVuc2lvbnMuXG5cbiAgICAgIDEuMTUgXCJTb2Z0d2FyZVwiIG1lYW5zIGFueSBjb21wdXRlciBwcm9ncmFtcyBvciBvdGhlciB3b3JrcyBhcyB3ZWxsIGFzIGFueSB1cGRhdGVzIG9yIG1haW50ZW5hbmNlIHJlbGVhc2VzIG9mIHRob3NlIHByb2dyYW1zIG9yIHdvcmtzIHdoaWNoIGFyZSBkaXN0cmlidXRlZCBwdWJsaWNseSBieSBMaWNlbnNvci5cblxuICAgICAgMS4xNiBcIlNvdXJjZSBDb2RlXCIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kL29yIFlvdXIgRXh0ZW5zaW9ucywgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGNvbnRhaW5lZCB0aGVyZWluLCBwbHVzIGFueSBhc3NvY2lhdGVkIHRleHQsIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBvciBvdGhlciBjb21wb25lbnRzIHJlcXVpcmVkIGJ5IGEgdGhpcmQgcGFydHkgb2YgYXZlcmFnZSBza2lsbCB0byBidWlsZCBhIHJ1bm5pbmcgdmVyc2lvbiBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgb3IgWW91ciBFeHRlbnNpb25zLlxuXG4gICAgICAxLjE3IFwiVXNlci1WaXNpYmxlIEF0dHJpYnV0aW9uIE5vdGljZVwiIG1lYW5zIGFueSBub3RpY2UgY29udGFpbmVkIGluIEVYSElCSVQgQi5cblxuICAgICAgMS4xOCBcIllvdVwiIG9yIFwiWW91clwiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgb3IgXCJZb3VyXCIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCwgWW91LCB3aGVyZSBcImNvbnRyb2xcIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgIDIuMCBBY2NlcHRhbmNlIE9mIExpY2Vuc2UuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2Ugc2luY2UgeW91IGhhdmUgbm90IHNpZ25lZCBpdCwgaG93ZXZlciBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgZGlzdHJpYnV0ZSwgbW9kaWZ5LCBvciBjcmVhdGUgZGVyaXZhdGl2ZXMgb2YgZWl0aGVyIHRoZSBTb2Z0d2FyZSBvciBhbnkgRXh0ZW5zaW9ucyBjcmVhdGVkIGJ5IGEgQ29udHJpYnV0b3IuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBwZXJmb3JtaW5nIGFueSBvZiB0aGVzZSBhY3Rpb25zIFlvdSBpbmRpY2F0ZSBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBZb3VyIGFncmVlbWVudCB0byBiZSBib3VuZCBieSBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFdJVEggQUxMIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIExJQ0VOU0UgRE8gTk9UIFVTRSwgTU9ESUZZLCBDUkVBVEUgREVSSVZBVElWRVMsIE9SIERJU1RSSUJVVEUgVEhFIFNPRlRXQVJFLiBJRiBJVCBJUyBJTVBPU1NJQkxFIEZPUiBZT1UgVE8gQ09NUExZIFdJVEggQUxMIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIExJQ0VOU0UgVEhFTiBZT1UgQ0FOIE5PVCBVU0UsIE1PRElGWSwgQ1JFQVRFIERFUklWQVRJVkVTLCBPUiBESVNUUklCVVRFIFRIRSBTT0ZUV0FSRS5cblxuICAgMy4wIEdyYW50IG9mIExpY2Vuc2UgRnJvbSBMaWNlbnNvci4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIExpY2Vuc29yJ3MgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgYW5kIGFueSB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgTGljZW5zZWQgU29mdHdhcmUgdW5kZXIgdGhpcyBMaWNlbnNlLCB0byBkbyB0aGUgZm9sbG93aW5nOlxuXG4gICAgICAzLjEgVXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgWW91ciBFeHRlbnNpb25zIGluIGJvdGggU291cmNlIENvZGUgZm9ybSBvciBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0uXG5cbiAgICAgIDMuMiBDcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyAoYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgdW5kZXIgVS5TLiBjb3B5cmlnaHQgbGF3KSBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBieSBhZGRpbmcgdG8gb3IgZGVsZXRpbmcgZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBzYWlkIExpY2Vuc2VkIFNvZnR3YXJlLlxuXG4gICAgICAzLjMgVW5kZXIgY2xhaW1zIG9mIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IExpY2Vuc29yLCB0byBtYWtlLCB1c2UsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIExpY2Vuc2VkIFNvZnR3YXJlIG9yIHBvcnRpb25zIHRoZXJlb2YsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIGNsYWltIGlzIG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIG1ha2UsIHVzZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTGljZW5zZWQgU29mdHdhcmUgb3IgcG9ydGlvbnMgdGhlcmVvZi5cblxuICAgICAgMy40IExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIG5ldyB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUgd2l0aCBkaWZmZXJlbnQgZmVhdHVyZXMsIHNwZWNpZmljYXRpb25zLCBjYXBhYmlsaXRpZXMsIGZ1bmN0aW9ucywgbGljZW5zaW5nIHRlcm1zLCBnZW5lcmFsIGF2YWlsYWJpbGl0eSBvciBvdGhlciBjaGFyYWN0ZXJpc3RpY3MuIFRpdGxlLCBvd25lcnNoaXAgcmlnaHRzLCBhbmQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpbiBhbmQgdG8gdGhlIExpY2Vuc2VkIFNvZnR3YXJlIHNoYWxsIHJlbWFpbiBpbiBMaWNlbnNvciBhbmQvb3IgaXRzIENvbnRyaWJ1dG9ycy5cblxuICAgNC4wIEdyYW50IG9mIExpY2Vuc2UgRnJvbSBDb250cmlidXRvci4gQnkgYXBwbGljYXRpb24gb2YgdGhlIHByb3Zpc2lvbnMgaW4gU2VjdGlvbiA2IGJlbG93LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlICwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHNhaWQgQ29udHJpYnV0b3IncyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLCBhbmQgYW55IHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSB1bmRlciB0aGlzIExpY2Vuc2UsIHRvIGRvIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgIDQuMSBVc2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIGFueSBFeHRlbnNpb25zIERlcGxveWVkIGJ5IHN1Y2ggQ29udHJpYnV0b3Igb3IgcG9ydGlvbnMgdGhlcmVvZiwgaW4gYm90aCBTb3VyY2UgQ29kZSBmb3JtIG9yIGFzIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSwgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMgb3IgYXMgcGFydCBvZiBEZXJpdmF0aXZlIFdvcmtzLlxuXG4gICAgICA0LjIgVW5kZXIgY2xhaW1zIG9mIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0byBtYWtlLCB1c2UsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIEV4dGVuc2lvbnMgb3IgcG9ydGlvbnMgdGhlcmVvZiwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggY2xhaW0gaXMgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gbWFrZSwgdXNlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBvciBwb3J0aW9ucyB0aGVyZW9mLlxuXG4gICA1LjAgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAzIGFuZCA0LCBubyBvdGhlciBwYXRlbnQgcmlnaHRzLCBleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGhlcmVpbi4gWW91ciBFeHRlbnNpb25zIG1heSByZXF1aXJlIGFkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gTGljZW5zb3Igb3IgQ29udHJpYnV0b3JzIHdoaWNoIGVhY2ggbWF5IGdyYW50IGluIGl0cyBzb2xlIGRpc2NyZXRpb24uIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2VkIFNvZnR3YXJlLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IGNvZGUgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuXG5cbiAgICAgIDUuMSBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IGFsdGhvdWdoIExpY2Vuc29yIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwb3J0aW9ucyBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBMaWNlbnNvciBhbmQgZWFjaCBDb250cmlidXRvciBkaXNjbGFpbSBhbnkgbGlhYmlsaXR5IHRvIFlvdSBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIFlvdSBoZXJlYnkgYXNzdW1lIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBZb3UgdG8gZGlzdHJpYnV0ZSB0aGUgTGljZW5zZWQgU29mdHdhcmUsIGl0IGlzIFlvdXIgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQgU29mdHdhcmUuXG5cbiAgIDYuMCBZb3VyIE9ibGlnYXRpb25zIEFuZCBHcmFudHMuIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhbiBleHByZXNzIGNvbmRpdGlvbiB0bywgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBZb3UgaGVyZWJ5IGFncmVlIHRoYXQgYW55IE1vZGlmaWNhdGlvbnMsIERlcml2YXRpdmUgV29ya3MsIG9yIFJlcXVpcmVkIENvbXBvbmVudHMgKGNvbGxlY3RpdmVseSBFeHRlbnNpb25zKSB0aGF0IFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIFNlY3Rpb24gNC4gQW55IEV4dGVuc2lvbnMgdGhhdCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgRGVwbG95ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDcuIFlvdSBoZXJlYnkgZ3JhbnQgdG8gTGljZW5zb3IgYW5kIGFsbCB0aGlyZCBwYXJ0aWVzIGEgd29ybGQtd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdW5kZXIgdGhvc2UgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBZb3Ugb3duIG9yIGNvbnRyb2wgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSwgY3JlYXRlIGRlcml2YXRpdmVzLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBMaWNlbnNlZCBTb2Z0d2FyZSwgaW4gYW55IGZvcm0uIEFueSBFeHRlbnNpb25zIFlvdSBtYWtlIGFuZCBEZXBsb3kgbXVzdCBoYXZlIGEgZGlzdGluY3QgdGl0bGUgc28gYXMgdG8gcmVhZGlseSB0ZWxsIGFueSBzdWJzZXF1ZW50IHVzZXIgb3IgQ29udHJpYnV0b3IgdGhhdCB0aGUgRXh0ZW5zaW9ucyBhcmUgYnkgWW91LiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugb3IgZGlyZWN0aW9ucyBvbiBob3cgdG8gb2J0YWluIGEgY29weSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIEV4dGVuc2lvbnMgWW91IGRpc3RyaWJ1dGUuIFlvdSBhZ3JlZSBub3QgdG8gb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgb3IgZXhlY3V0YWJsZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSwgb3IgaXRzIEV4dGVuc2lvbnMgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci5cblxuICAgICAgNi4xIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gWW91IG11c3QgbWFrZSBhdmFpbGFibGUsIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRXh0ZW5zaW9ucyB0aGF0IFlvdSBEZXBsb3ksIHZpYSBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20uIFRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IHZlcnNpb24gdGhhdCBZb3UgRGVwbG95IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgd2l0aGluIG9uZSAoMSkgbW9udGggb2Ygd2hlbiB5b3UgRGVwbG95IGFuZCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIG5vIGxlc3MgdGhhbiB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgWW91IGNlYXNlIHRvIERlcGxveS4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdG8gZWFjaCB2ZXJzaW9uIFlvdSBEZXBsb3kgcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4gWW91IG1heSBub3QgY2hhcmdlIGEgZmVlIGZvciBhbnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBTZWN0aW9uIGluIGV4Y2VzcyBvZiBZb3VyIGFjdHVhbCBjb3N0IG9mIGR1cGxpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gb2Ygc2FpZCBjb3B5LlxuXG4gICAgICA2LjIgRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gWW91IG11c3QgY2F1c2UgYW55IE1vZGlmaWNhdGlvbnMgdGhhdCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGJlIGRvY3VtZW50ZWQgaW4gdGhlIFNvdXJjZSBDb2RlLCBjbGVhcmx5IGRlc2NyaWJpbmcgdGhlIGFkZGl0aW9ucywgY2hhbmdlcyBvciBkZWxldGlvbnMgWW91IG1hZGUuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbnMgYXJlIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGFuZCBpbmNsdWRlIHRoZSBuYW1lcyBvZiB0aGUgTGljZW5zb3IgYW5kIGFueSBDb250cmlidXRvciB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgaW4gKGkpIHRoZSBTb3VyY2UgQ29kZSBhbmQgKGlpKSBpbiBhbnkgbm90aWNlIGRpc3BsYXllZCBieSB0aGUgTGljZW5zZWQgU29mdHdhcmUgWW91IGRpc3RyaWJ1dGUgb3IgaW4gcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUuIFlvdSBtYXkgbm90IG1vZGlmeSBvciBkZWxldGUgYW55IHByZS1leGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcywgY2hhbmdlIG5vdGljZXMgb3IgTGljZW5zZSB0ZXh0IGluIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSB3aXRob3V0IHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgcmVzcGVjdGl2ZSBMaWNlbnNvciBvciBDb250cmlidXRvci5cblxuICAgICAgNi4zIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLlxuXG4gICAgICAgICBhLiBUaGlyZCBQYXJ0eSBDbGFpbXMuIElmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB0byBhIHRoaXJkIHBhcnR5J3MgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UsIFlvdSBtdXN0IGluY2x1ZGUgYSBodW1hbi1yZWFkYWJsZSBmaWxlIHdpdGggWW91ciBkaXN0cmlidXRpb24gdGhhdCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuXG5cbiAgICAgICAgIGIuIENvbnRyaWJ1dG9yIEFQSXMuIElmIFlvdXIgRXh0ZW5zaW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSAoXCJBUElcIikgYW5kIFlvdSBoYXZlIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgdGhhdCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBZb3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiBhIGh1bWFuLXJlYWRhYmxlIGZpbGUgc3VwcGxpZWQgd2l0aCBZb3VyIGRpc3RyaWJ1dGlvbi5cblxuICAgICAgICAgYy4gUmVwcmVzZW50YXRpb25zLiBZb3UgcmVwcmVzZW50IHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gNi4zKGEpIGFib3ZlLCBZb3UgYmVsaWV2ZSB0aGF0IGFueSBFeHRlbnNpb25zIFlvdSBkaXN0cmlidXRlIGFyZSBZb3VyIG9yaWdpbmFsIGNyZWF0aW9ucyBhbmQgdGhhdCBZb3UgaGF2ZSBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgNi40IFJlcXVpcmVkIE5vdGljZXMuXG5cbiAgICAgICAgIGEuIExpY2Vuc2UgVGV4dC4gWW91IG11c3QgZHVwbGljYXRlIHRoaXMgTGljZW5zZSBvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGFjcXVpcmUgYSBjb3B5IGluIGFueSBkb2N1bWVudGF0aW9uIFlvdSBwcm92aWRlIGFsb25nIHdpdGggdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBFeHRlbnNpb25zIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUsIHdoZXJldmVyIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gTGljZW5zZWQgU29mdHdhcmUuXG5cbiAgICAgICAgIGIuIExpY2Vuc2UgTm90aWNlLiBZb3UgbXVzdCBkdXBsaWNhdGUgYW55IG5vdGljZSBjb250YWluZWQgaW4gRVhISUJJVCBBICh0aGUgXCJMaWNlbnNlIE5vdGljZVwiKSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBjb3B5IFlvdSBkaXN0cmlidXRlIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgWW91ciBFeHRlbnNpb25zLiBJZiBZb3UgY3JlYXRlIGFuIEV4dGVuc2lvbiwgWW91IG1heSBhZGQgWW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIFNvdXJjZSBDb2RlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBhbG9uZyB3aXRoIGEgZGVzY3JpcHRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbi4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCB0aGUgTGljZW5zZSBOb3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIExpY2Vuc2UgTm90aWNlIGluIGEgbG9jYXRpb24gd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLlxuXG4gICAgICAgICBjLiBTb3VyY2UgQ29kZSBBdmFpbGFiaWxpdHkuIFlvdSBtdXN0IG5vdGlmeSB0aGUgc29mdHdhcmUgY29tbXVuaXR5IG9mIHRoZSBhdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUgdG8gWW91ciBFeHRlbnNpb25zIHdpdGhpbiBvbmUgKDEpIG1vbnRoIG9mIHRoZSBkYXRlIFlvdSBpbml0aWFsbHkgRGVwbG95IGFuZCBpbmNsdWRlIGluIHN1Y2ggbm90aWZpY2F0aW9uIGEgZGVzY3JpcHRpb24gb2YgdGhlIEV4dGVuc2lvbnMsIGFuZCBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGFjcXVpcmUgdGhlIFNvdXJjZSBDb2RlLiBTaG91bGQgc3VjaCBpbnN0cnVjdGlvbnMgY2hhbmdlIHlvdSBtdXN0IG5vdGlmeSB0aGUgc29mdHdhcmUgY29tbXVuaXR5IG9mIHJldmlzZWQgaW5zdHJ1Y3Rpb25zIHdpdGhpbiBvbmUgKDEpIG1vbnRoIG9mIHRoZSBkYXRlIG9mIGNoYW5nZS4gWW91IG11c3QgcHJvdmlkZSBub3RpZmljYXRpb24gYnkgcG9zdGluZyB0byBhcHByb3ByaWF0ZSBuZXdzIGdyb3VwcywgbWFpbGluZyBsaXN0cywgd2VibG9ncywgb3Igb3RoZXIgc2l0ZXMgd2hlcmUgYSBwdWJsaWNseSBhY2Nlc3NpYmxlIHNlYXJjaCBlbmdpbmUgd291bGQgcmVhc29uYWJseSBiZSBleHBlY3RlZCB0byBpbmRleCB5b3VyIHBvc3QgaW4gcmVsYXRpb25zaGlwIHRvIHF1ZXJpZXMgcmVnYXJkaW5nIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQvb3IgWW91ciBFeHRlbnNpb25zLlxuXG4gICAgICAgICBkLiBVc2VyLVZpc2libGUgQXR0cmlidXRpb24uIFlvdSBtdXN0IGR1cGxpY2F0ZSBhbnkgbm90aWNlIGNvbnRhaW5lZCBpbiBFWEhJQklUIEIgKHRoZSBcIlVzZXItVmlzaWJsZSBBdHRyaWJ1dGlvbiBOb3RpY2VcIikgaW4gZWFjaCB1c2VyLXZpc2libGUgZGlzcGxheSBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIFlvdXIgRXh0ZW5zaW9ucyB3aGljaCBkZWxpbmVhdGVzIGNvcHlyaWdodCwgb3duZXJzaGlwLCBvciBzaW1pbGFyIGF0dHJpYnV0aW9uIGluZm9ybWF0aW9uLiBJZiBZb3UgY3JlYXRlIGFuIEV4dGVuc2lvbiwgWW91IG1heSBhZGQgWW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IsIGFuZCBhZGQgWW91ciBhdHRyaWJ1dGlvbiBub3RpY2UsIGFzIGFuIGVxdWFsbHkgdmlzaWJsZSBhbmQgZnVuY3Rpb25hbCBlbGVtZW50IG9mIGFueSBVc2VyLVZpc2libGUgQXR0cmlidXRpb24gTm90aWNlIGNvbnRlbnQuIFRvIGVuc3VyZSBwcm9wZXIgYXR0cmlidXRpb24sIFlvdSBtdXN0IGFsc28gaW5jbHVkZSBzdWNoIFVzZXItVmlzaWJsZSBBdHRyaWJ1dGlvbiBOb3RpY2UgaW4gYXQgbGVhc3Qgb25lIGxvY2F0aW9uIGluIHRoZSBTb2Z0d2FyZSBkb2N1bWVudGF0aW9uIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBub3RpY2UuXG5cbiAgICAgIDYuNSBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgTGljZW5zZWQgU29mdHdhcmUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlciBvdGhlciBhZ3JlZW1lbnRzIGJldHdlZW4geW91IGFuZCBMaWNlbnNvciBvciBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgTGljZW5zb3IgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IHBsdXMgYXR0b3JuZXkgZmVlcywgY29zdHMsIGFuZCByZWxhdGVkIGV4cGVuc2VzIGR1ZSB0byBhbnkgc3VjaCBhY3Rpb24gb3IgY2xhaW0gaW5jdXJyZWQgYnkgdGhlIExpY2Vuc29yIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICA2LjYgQ29uZmxpY3RzIFdpdGggT3RoZXIgTGljZW5zZXMuIFdoZXJlIGFueSBwb3J0aW9uIG9mIFlvdXIgRXh0ZW5zaW9ucywgYnkgdmlydHVlIG9mIGJlaW5nIERlcml2YXRpdmUgV29ya3Mgb2YgYW5vdGhlciBwcm9kdWN0IG9yIHNpbWlsYXIgY2lyY3Vtc3RhbmNlLCBmYWxsIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbm90aGVyIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZiB0aGF0IGxpY2Vuc2Ugc2hvdWxkIGJlIGhvbm9yZWQgaG93ZXZlciBZb3UgbXVzdCBhbHNvIG1ha2UgWW91ciBFeHRlbnNpb25zIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UuIElmIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgY29udGludWUgdG8gY29uZmxpY3Qgd2l0aCB0aGUgdGVybXMgb2YgdGhlIG90aGVyIGxpY2Vuc2UgeW91IG1heSB3cml0ZSB0aGUgTGljZW5zb3IgZm9yIHBlcm1pc3Npb24gdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QgaW4gYSBmYXNoaW9uIHRoYXQgcmVtYWlucyBjb25zaXN0ZW50IHdpdGggdGhlIGludGVudCBvZiB0aGlzIExpY2Vuc2UuIFN1Y2ggcGVybWlzc2lvbiB3aWxsIGJlIGdyYW50ZWQgYXQgdGhlIHNvbGUgZGlzY3JldGlvbiBvZiB0aGUgTGljZW5zb3IuXG5cbiAgIDcuMCBWZXJzaW9ucyBvZiBUaGlzIExpY2Vuc2UuIExpY2Vuc29yIG1heSBwdWJsaXNoIGZyb20gdGltZSB0byB0aW1lIHJldmlzZWQgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIE9uY2UgTGljZW5zZWQgU29mdHdhcmUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBMaWNlbnNlZCBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTGljZW5zb3IuIE5vIG9uZSBvdGhlciB0aGFuIExpY2Vuc29yIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIExpY2Vuc2VkIFNvZnR3YXJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICA3LjEgSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgd2hpY2ggWW91IG1heSBkbyBvbmx5IGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIHNvZnR3YXJlIHRoYXQgaXMgbm90IGFscmVhZHkgTGljZW5zZWQgU29mdHdhcmUgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbXVzdCByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgaXQgaXMgbm90IGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbXVzdCBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHRoYXQgZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlLiBJbiBzbyBuYW1pbmcgWW91ciBsaWNlbnNlLCBZb3UgbWF5IG5vdCB1c2UgYW55IHRyYWRlbWFyayBvZiBMaWNlbnNvciBvciBvZiBhbnkgQ29udHJpYnV0b3IuIFNob3VsZCBZb3VyIG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBMaWNlbnNlIGJlIGxpbWl0ZWQgdG8gYWx0ZXJhdGlvbiBvZiBhKSBTZWN0aW9uIDEzLjggc29sZWx5IHRvIG1vZGlmeSB0aGUgbGVnYWwgSnVyaXNkaWN0aW9uIG9yIFZlbnVlIGZvciBkaXNwdXRlcywgYikgRVhISUJJVCBBIHNvbGVseSB0byBkZWZpbmUgTGljZW5zZSBOb3RpY2UgdGV4dCwgb3IgYykgdG8gRVhISUJJVCBCIHNvbGVseSB0byBkZWZpbmUgYSBVc2VyLVZpc2libGUgQXR0cmlidXRpb24gTm90aWNlLCBZb3UgbWF5IGNvbnRpbnVlIHRvIHJlZmVyIHRvIFlvdXIgTGljZW5zZSBhcyB0aGUgUmVjaXByb2NhbCBQdWJsaWMgTGljZW5zZSBvciBzaW1wbHkgdGhlIFJQTC5cblxuICAgOC4wIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExJQ0VOU0VEIFNPRlRXQVJFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIExJQ0VOU0VEIFNPRlRXQVJFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBGVVJUSEVSIFRIRVJFIElTIE5PIFdBUlJBTlRZIE1BREUgQU5EIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgQVJFIERJU0NMQUlNRUQgVEhBVCBUSEUgTElDRU5TRUQgU09GVFdBUkUgTUVFVFMgT1IgQ09NUExJRVMgV0lUSCBBTlkgREVTQ1JJUFRJT04gT0YgUEVSRk9STUFOQ0UgT1IgT1BFUkFUSU9OLCBTQUlEIENPTVBBVElCSUxJVFkgQU5EIFNVSVRBQklMSVRZIEJFSU5HIFlPVVIgUkVTUE9OU0lCSUxJVFkuIExJQ0VOU09SIERJU0NMQUlNUyBBTlkgV0FSUkFOVFksIElNUExJRUQgT1IgRVhQUkVTU0VELCBUSEFUIEFOWSBDT05UUklCVVRPUidTIEVYVEVOU0lPTlMgTUVFVCBBTlkgU1RBTkRBUkQgT0YgQ09NUEFUSUJJTElUWSBPUiBERVNDUklQVElPTiBPRiBQRVJGT1JNQU5DRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgTElDRU5TRUQgU09GVFdBUkUgSVMgV0lUSCBZT1UuIFNIT1VMRCBMSUNFTlNFRCBTT0ZUV0FSRSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoQU5EIE5PVCBUSEUgTElDRU5TT1IgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNPUiBXSUxMIE5PVCBTVVBQT1JUIFRISVMgU09GVFdBUkUgQU5EIElTIFVOREVSIE5PIE9CTElHQVRJT04gVE8gSVNTVUUgVVBEQVRFUyBUTyBUSElTIFNPRlRXQVJFLiBMSUNFTlNPUiBIQVMgTk8gS05PV0xFREdFIE9GIEVSUkFOVCBDT0RFIE9SIFZJUlVTIElOIFRISVMgU09GVFdBUkUsIEJVVCBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIElTIEZSRUUgRlJPTSBTVUNIIEVSUk9SUyBPUiBWSVJVU0VTLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgTElDRU5TRUQgU09GVFdBUkUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi5cblxuICAgOS4wIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgTElDRU5TT1IsIEFOWSBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIExJQ0VOU0VEIFNPRlRXQVJFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDEwLjAgSGlnaCBSaXNrIEFjdGl2aXRpZXMuIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBOT1QgRkFVTFQtVE9MRVJBTlQgQU5EIElTIE5PVCBERVNJR05FRCwgTUFOVUZBQ1RVUkVELCBPUiBJTlRFTkRFRCBGT1IgVVNFIE9SIERJU1RSSUJVVElPTiBBUyBPTi1MSU5FIENPTlRST0wgRVFVSVBNRU5UIElOIEhBWkFSRE9VUyBFTlZJUk9OTUVOVFMgUkVRVUlSSU5HIEZBSUwtU0FGRSBQRVJGT1JNQU5DRSwgU1VDSCBBUyBJTiBUSEUgT1BFUkFUSU9OIE9GIE5VQ0xFQVIgRkFDSUxJVElFUywgQUlSQ1JBRlQgTkFWSUdBVElPTiBPUiBDT01NVU5JQ0FUSU9OUyBTWVNURU1TLCBBSVIgVFJBRkZJQyBDT05UUk9MLCBESVJFQ1QgTElGRSBTVVBQT1JUIE1BQ0hJTkVTLCBPUiBXRUFQT05TIFNZU1RFTVMsIElOIFdISUNIIFRIRSBGQUlMVVJFIE9GIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBDT1VMRCBMRUFEIERJUkVDVExZIFRPIERFQVRILCBQRVJTT05BTCBJTkpVUlksIE9SIFNFVkVSRSBQSFlTSUNBTCBPUiBFTlZJUk9OTUVOVEFMIERBTUFHRSAoXCJISUdIIFJJU0sgQUNUSVZJVElFU1wiKS4gTElDRU5TT1IgQU5EIENPTlRSSUJVVE9SUyBTUEVDSUZJQ0FMTFkgRElTQ0xBSU0gQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWSBPRiBGSVRORVNTIEZPUiBISUdIIFJJU0sgQUNUSVZJVElFUy5cblxuICAgMTEuMCBSZXNwb25zaWJpbGl0eSBmb3IgQ2xhaW1zLiBBcyBiZXR3ZWVuIExpY2Vuc29yIGFuZCBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hpY2ggc3BlY2lmaWNhbGx5IGRpc2NsYWltcyB3YXJyYW50aWVzIGFuZCBsaW1pdHMgYW55IGxpYWJpbGl0eSBvZiB0aGUgTGljZW5zb3IuIFRoaXMgcGFyYWdyYXBoIGlzIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhbmQgY29udHJvbGxlZCBieSB0aGUgRGlzY2xhaW1lciBPZiBXYXJyYW50aWVzIG9mIFNlY3Rpb24gOCwgdGhlIExpbWl0YXRpb24gT2YgRGFtYWdlcyBpbiBTZWN0aW9uIDksIGFuZCB0aGUgZGlzY2xhaW1lciBhZ2FpbnN0IHVzZSBmb3IgSGlnaCBSaXNrIEFjdGl2aXRpZXMgaW4gU2VjdGlvbiAxMC4gVGhlIExpY2Vuc29yIGhhcyB0aGVyZWJ5IGRpc2NsYWltZWQgYWxsIHdhcnJhbnRpZXMgYW5kIGxpbWl0ZWQgYW55IGRhbWFnZXMgdGhhdCBpdCBpcyBvciBtYXkgYmUgbGlhYmxlIGZvci4gWW91IGFncmVlIHRvIHdvcmsgd2l0aCBMaWNlbnNvciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMgY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIFNlY3Rpb25zIDgsIDksIGFuZCAxMC4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuXG5cbiAgIDEyLjAgVGVybWluYXRpb24uIFRoaXMgTGljZW5zZSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YgdGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTMuNiBvciBpZiBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IgcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZCBvciBzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGggU2VjdGlvbnMgMywgNCBhbmQvb3IgNiwgb3IgcHJldmVudHMgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGFueSBvZiB0aG9zZSBTZWN0aW9ucywgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgTGljZW5zZWQgU29mdHdhcmUuXG5cbiAgICAgIDEyLjEgQXV0b21hdGljIFRlcm1pbmF0aW9uIFVwb24gQnJlYWNoLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0aGUgdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSB0aGF0IGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB0aGF0LCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSwgc2hhbGwgc3Vydml2ZS5cblxuICAgICAgMTIuMiBUZXJtaW5hdGlvbiBVcG9uIEFzc2VydGlvbiBvZiBQYXRlbnQgSW5mcmluZ2VtZW50LiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBMaWNlbnNvciBvciBhIENvbnRyaWJ1dG9yIChMaWNlbnNvciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhbiBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gaGVyZWluIGFzIFwiUmVzcG9uZGVudFwiKSBhbGxlZ2luZyB0aGF0IExpY2Vuc2VkIFNvZnR3YXJlIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBSZXNwb25kZW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAzIG9yIDQgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5IHVwb24gc2l4dHkgKDYwKSBkYXlzIG5vdGljZSBmcm9tIFJlc3BvbmRlbnQgKHRoZSBcIk5vdGljZSBQZXJpb2RcIikgdW5sZXNzIHdpdGhpbiB0aGF0IE5vdGljZSBQZXJpb2QgWW91IGVpdGhlciBhZ3JlZSBpbiB3cml0aW5nIChpKSB0byBwYXkgUmVzcG9uZGVudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmx5IHJveWFsdHkgZm9yIFlvdXIgcGFzdCBvciBmdXR1cmUgdXNlIG9mIExpY2Vuc2VkIFNvZnR3YXJlIG1hZGUgYnkgc3VjaCBSZXNwb25kZW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gTGljZW5zZWQgU29mdHdhcmUgYWdhaW5zdCBzdWNoIFJlc3BvbmRlbnQuIElmIHdpdGhpbiBzYWlkIE5vdGljZSBQZXJpb2QgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieSBMaWNlbnNvciB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMyBhbmQgNCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiBzYWlkIE5vdGljZSBQZXJpb2QuXG5cbiAgICAgIDEyLjMgUmVhc29uYWJsZSBWYWx1ZSBvZiBUaGlzIExpY2Vuc2UuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUmVzcG9uZGVudCBhbGxlZ2luZyB0aGF0IExpY2Vuc2VkIFNvZnR3YXJlIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzYWlkIFJlc3BvbmRlbnQgdW5kZXIgU2VjdGlvbnMgMyBhbmQgNCBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLlxuXG4gICAgICAxMi40IE5vIFJldHJvYWN0aXZlIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIHRoaXMgU2VjdGlvbiBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgbGljZW5zZXMgdG8gZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHRoYXQgaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLlxuXG4gICAxMy4wIE1pc2NlbGxhbmVvdXMuXG5cbiAgICAgIDEzLjEgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIExpY2Vuc2VkIFNvZnR3YXJlIGlzIGEgXCJjb21tZXJjaWFsIGl0ZW0sXCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mIFwiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZVwiIGFuZCBcImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbixcIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIExpY2Vuc2VkIFNvZnR3YXJlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi5cblxuICAgICAgMTMuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlLCBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIG9yIGFtb25nIFlvdSwgTGljZW5zb3IsIG9yIGFueSBDb250cmlidXRvciwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQgdG8gdGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGFwcGVhcmFuY2UsIG9yIG90aGVyd2lzZS5cblxuICAgICAgMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIgTGljZW5zb3IncyByaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBzdWJjb250cmFjdCwgbWFya2V0LCBvciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtIHRoZSBzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvciBvdGhlcndpc2UgY29tcGV0ZSB3aXRoLCBFeHRlbnNpb25zIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQsIG9yIGRpc3RyaWJ1dGUuXG5cbiAgICAgIDEzLjQgQ29uc2VudCBUbyBCcmVhY2ggTm90IFdhaXZlci4gRmFpbHVyZSBieSBMaWNlbnNvciBvciBDb250cmlidXRvciB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQgb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLlxuXG4gICAgICAxMy41IFNldmVyYWJpbGl0eS4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLlxuXG4gICAgICAxMy42IEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4gSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uLCB0aGVuIFlvdSBjYW5ub3QgdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlLlxuXG4gICAgICAxMy43IEV4cG9ydCBSZXN0cmljdGlvbnMuIFlvdSBtYXkgYmUgcmVzdHJpY3RlZCB3aXRoIHJlc3BlY3QgdG8gZG93bmxvYWRpbmcgb3Igb3RoZXJ3aXNlIGFjcXVpcmluZywgZXhwb3J0aW5nLCBvciByZWV4cG9ydGluZyB0aGUgTGljZW5zZWQgU29mdHdhcmUgb3IgYW55IHVuZGVybHlpbmcgaW5mb3JtYXRpb24gb3IgdGVjaG5vbG9neSBieSBVbml0ZWQgU3RhdGVzIGFuZCBvdGhlciBhcHBsaWNhYmxlIGxhd3MgYW5kIHJlZ3VsYXRpb25zLiBCeSBkb3dubG9hZGluZyBvciBieSBvdGhlcndpc2Ugb2J0YWluaW5nIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSwgWW91IGFyZSBhZ3JlZWluZyB0byBiZSByZXNwb25zaWJsZSBmb3IgY29tcGxpYW5jZSB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MgYW5kIHJlZ3VsYXRpb25zLlxuXG4gICAgICAxMy44IEFyYml0cmF0aW9uLCBKdXJpc2RpY3Rpb24gXHUwMDI2IFZlbnVlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ29sb3JhZG8gbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFlvdSBleHByZXNzbHkgYWdyZWUgdGhhdCBhbnkgZGlzcHV0ZSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3VibWl0dGVkIHRvIGJpbmRpbmcgYXJiaXRyYXRpb24gdW5kZXIgdGhlIHJ1bGVzIHRoZW4gcHJldmFpbGluZyBvZiB0aGUgQW1lcmljYW4gQXJiaXRyYXRpb24gQXNzb2NpYXRpb24uIFlvdSBmdXJ0aGVyIGFncmVlIHRoYXQgQWRhbXMgQ291bnR5LCBDb2xvcmFkbyBVU0EgaXMgcHJvcGVyIHZlbnVlIGFuZCBncmFudCBzdWNoIGFyYml0cmF0aW9uIHByb2NlZWRpbmcganVyaXNkaWN0aW9uIGFzIG1heSBiZSBhcHByb3ByaWF0ZSBmb3IgcHVycG9zZXMgb2YgcmVzb2x2aW5nIGFueSBkaXNwdXRlIHVuZGVyIHRoaXMgTGljZW5zZS4gSnVkZ2VtZW50IHVwb24gYW55IGF3YXJkIG1hZGUgaW4gYXJiaXRyYXRpb24gbWF5IGJlIGVudGVyZWQgYW5kIGVuZm9yY2VkIGluIGFueSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLiBUaGUgYXJiaXRyYXRvciBzaGFsbCBhd2FyZCBhdHRvcm5leSdzIGZlZXMgYW5kIGNvc3RzIG9mIGFyYml0cmF0aW9uIHRvIHRoZSBwcmV2YWlsaW5nIHBhcnR5LiBTaG91bGQgZWl0aGVyIHBhcnR5IGZpbmQgaXQgbmVjZXNzYXJ5IHRvIGVuZm9yY2UgaXRzIGFyYml0cmF0aW9uIGF3YXJkIG9yIHNlZWsgc3BlY2lmaWMgcGVyZm9ybWFuY2Ugb2Ygc3VjaCBhd2FyZCBpbiBhIGNpdmlsIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlYXNvbmFibGUgYXR0b3JuZXkncyBmZWVzIGFuZCBjb3N0cy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIFlvdSBhbmQgTGljZW5zb3IgZXhwcmVzc2x5IHdhaXZlIGFueSByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSBsaXRpZ2F0aW9uIGNvbmNlcm5pbmcgTGljZW5zZWQgU29mdHdhcmUgb3IgdGhpcyBMaWNlbnNlLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gdGhhdCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEzLjkgRW50aXJlIEFncmVlbWVudC4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIEVYSElCSVQgQVxuXG5UaGUgTGljZW5zZSBOb3RpY2UgYmVsb3cgbXVzdCBhcHBlYXIgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgY29weSBZb3UgZGlzdHJpYnV0ZSBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgb3IgYW55IEV4dGVuc2lvbnMgdGhlcmV0bzpcblxuVW5sZXNzIGV4cGxpY2l0bHkgYWNxdWlyZWQgYW5kIGxpY2Vuc2VkIGZyb20gTGljZW5zb3IgdW5kZXIgYW5vdGhlciBsaWNlbnNlLCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIChcIlJQTFwiKSBWZXJzaW9uIDEuNSwgb3Igc3Vic2VxdWVudCB2ZXJzaW9ucyBhcyBhbGxvd2VkIGJ5IHRoZSBSUEwsIGFuZCBZb3UgbWF5IG5vdCBjb3B5IG9yIHVzZSB0aGlzIGZpbGUgaW4gZWl0aGVyIHNvdXJjZSBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSwgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIFJQTC5cblxuQWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBSUEwgaXMgcHJvdmlkZWQgc3RyaWN0bHkgb24gYW4gXCJBUyBJU1wiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgTElDRU5TT1IgSEVSRUJZIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBRVUlFVCBFTkpPWU1FTlQsIE9SIE5PTi1JTkZSSU5HRU1FTlQuIFNlZSB0aGUgUlBMIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgUlBMLlxuXG5FWEhJQklUIEJcblxuVGhlIFVzZXItVmlzaWJsZSBBdHRyaWJ1dGlvbiBOb3RpY2UgYmVsb3csIHdoZW4gcHJvdmlkZWQsIG11c3QgYXBwZWFyIGluIGVhY2ggdXNlci12aXNpYmxlIGRpc3BsYXkgYXMgZGVmaW5lZCBpbiBTZWN0aW9uIDYuNCAoZCk6Il0sImxpY2Vuc2VJZHMiOlsiUlBMLTEuNSJdLCJrZXl3b3JkcyI6WyIxIDUgcnBsMSIsIjUgcnBsMSA1IiwicnBsMSA1IHZlcnNpb24iLCI1IHZlcnNpb24gMSIsIjEgNSBqdWx5IiwiNSBqdWx5IDE1IiwianVseSAxNSAyMDA3IiwiMTUgMjAwNyBjb3B5cmlnaHQiLCJjIDIwMDEgMjAwNyIsIjIwMDEgMjAwNyB0ZWNobmljYWwiLCIyMDA3IHRlY2huaWNhbCBwdXJzdWl0IiwicmVzZXJ2ZWQgcHJlYW1ibGUgdGhlIiwicHJlYW1ibGUgdGhlIHJlY2lwcm9jYWwiLCJsaWNlbnNlIHJwbCBpcyIsInJwbCBpcyBiYXNlZCIsIm9mIHJlY2lwcm9jaXR5IG9yIiwicmVjaXByb2NpdHkgb3IgaWYiLCJpZiB5b3UgcHJlZmVyIiwieW91IHByZWZlciBmYWlybmVzcyIsInByZWZlciBmYWlybmVzcyBpbiIsImZhaXJuZXNzIGluIHNob3J0IiwiaW4gc2hvcnQgdGhpcyIsInNob3J0IHRoaXMgbGljZW5zZSIsInRoaXMgbGljZW5zZSBncmV3IiwibGljZW5zZSBncmV3IG91dCIsImdyZXcgb3V0IG9mIiwib3V0IG9mIGEiLCJvZiBhIGRlc2lyZSIsImEgZGVzaXJlIHRvIiwiZGVzaXJlIHRvIGNsb3NlIiwidG8gY2xvc2UgbG9vcGhvbGVzIiwiY2xvc2UgbG9vcGhvbGVzIGluIiwibG9vcGhvbGVzIGluIHByZXZpb3VzIiwiaW4gcHJldmlvdXMgb3BlbiIsInByZXZpb3VzIG9wZW4gc291cmNlIiwic291cmNlIGxpY2Vuc2VzIGxvb3Bob2xlcyIsImxpY2Vuc2VzIGxvb3Bob2xlcyB0aGF0IiwibG9vcGhvbGVzIHRoYXQgYWxsb3dlZCIsInRoYXQgYWxsb3dlZCBwYXJ0aWVzIiwiYWxsb3dlZCBwYXJ0aWVzIHRvIiwicGFydGllcyB0byBhY3F1aXJlIiwidG8gYWNxdWlyZSBvcGVuIiwiYWNxdWlyZSBvcGVuIHNvdXJjZSIsInNvdXJjZSBzb2Z0d2FyZSBhbmQiLCJzb2Z0d2FyZSBhbmQgZGVyaXZlIiwiYW5kIGRlcml2ZSBmaW5hbmNpYWwiLCJkZXJpdmUgZmluYW5jaWFsIGJlbmVmaXQiLCJmaW5hbmNpYWwgYmVuZWZpdCBmcm9tIiwiYmVuZWZpdCBmcm9tIGl0IiwiZnJvbSBpdCB3aXRob3V0IiwiaXQgd2l0aG91dCBoYXZpbmciLCJoYXZpbmcgdG8gcmVsZWFzZSIsInRvIHJlbGVhc2UgdGhlaXIiLCJyZWxlYXNlIHRoZWlyIGltcHJvdmVtZW50cyIsInRoZWlyIGltcHJvdmVtZW50cyBvciIsImltcHJvdmVtZW50cyBvciBkZXJpdmF0aXZlcyIsIm9yIGRlcml2YXRpdmVzIHRvIiwiZGVyaXZhdGl2ZXMgdG8gdGhlIiwidGhlIGNvbW11bml0eSB3aGljaCIsImNvbW11bml0eSB3aGljaCBlbmFibGVkIiwid2hpY2ggZW5hYmxlZCB0aGVtIiwiZW5hYmxlZCB0aGVtIHRoaXMiLCJ0aGVtIHRoaXMgb2NjdXJyZWQiLCJ0aGlzIG9jY3VycmVkIGFueSIsIm9jY3VycmVkIGFueSB0aW1lIiwiYW55IHRpbWUgYW4iLCJ0aW1lIGFuIGVudGl0eSIsImFuIGVudGl0eSBkaWQiLCJlbnRpdHkgZGlkIG5vdCIsImRpZCBub3QgcmVsZWFzZSIsIm5vdCByZWxlYXNlIHRoZWlyIiwicmVsZWFzZSB0aGVpciBhcHBsaWNhdGlvbiIsInRoZWlyIGFwcGxpY2F0aW9uIHRvIiwiYXBwbGljYXRpb24gdG8gYSIsInRoaXJkIHBhcnR5IHdoaWxlIiwicGFydHkgd2hpbGUgdGhlcmUiLCJ3aGlsZSB0aGVyZSBpcyIsImlzIGEgY2VydGFpbiIsImEgY2VydGFpbiBmcmVlZG9tIiwiY2VydGFpbiBmcmVlZG9tIGluIiwiZnJlZWRvbSBpbiB0aGlzIiwiaW4gdGhpcyBtb2RlbCIsInRoaXMgbW9kZWwgb2YiLCJtb2RlbCBvZiBsaWNlbnNpbmciLCJvZiBsaWNlbnNpbmcgaXQiLCJsaWNlbnNpbmcgaXQgc3RydWNrIiwiaXQgc3RydWNrIHRoZSIsInN0cnVjayB0aGUgYXV0aG9ycyIsInRoZSBycGwgYXMiLCJycGwgYXMgYmVpbmciLCJhcyBiZWluZyB1bmZhaXIiLCJiZWluZyB1bmZhaXIgdG8iLCJ1bmZhaXIgdG8gdGhlIiwib3JpZ2luYWwgYXV0aG9ycyBvZiIsInRoZSB3b3JrcyBpbiIsIndvcmtzIGluIHBhcnRpY3VsYXIiLCJpbiBwYXJ0aWN1bGFyIGFmdGVyIiwicGFydGljdWxhciBhZnRlciBhbGwiLCJhZnRlciBhbGwgYnVnIiwiYWxsIGJ1ZyBmaXhlcyIsImZpeGVzIGV4dGVuc2lvbnMgYW5kIiwiZXh0ZW5zaW9ucyBhbmQgbWVhbmluZ2Z1bCIsImFuZCBtZWFuaW5nZnVsIGFuZCIsIm1lYW5pbmdmdWwgYW5kIHZhbHVhYmxlIiwiYW5kIHZhbHVhYmxlIGRlcml2YXRpdmVzIiwidmFsdWFibGUgZGVyaXZhdGl2ZXMgd2VyZSIsImRlcml2YXRpdmVzIHdlcmUgbm90Iiwid2VyZSBub3QgY29uc2lzdGVudGx5Iiwibm90IGNvbnNpc3RlbnRseSBmaW5kaW5nIiwiY29uc2lzdGVudGx5IGZpbmRpbmcgdGhlaXIiLCJmaW5kaW5nIHRoZWlyIHdheSIsInRoZWlyIHdheSBiYWNrIiwid2F5IGJhY2sgaW50byIsImludG8gdGhlIGNvbW11bml0eSIsInRoZSBjb21tdW5pdHkgd2hlcmUiLCJjb21tdW5pdHkgd2hlcmUgdGhleSIsIndoZXJlIHRoZXkgY291bGQiLCJ0aGV5IGNvdWxkIGZ1ZWwiLCJjb3VsZCBmdWVsIGZ1cnRoZXIiLCJmdWVsIGZ1cnRoZXIgYW5kIiwiZnVydGhlciBhbmQgZmFzdGVyIiwiYW5kIGZhc3RlciBncm93dGgiLCJmYXN0ZXIgZ3Jvd3RoIGFuZCIsImdyb3d0aCBhbmQgZXhwYW5zaW9uIiwiYW5kIGV4cGFuc2lvbiBvZiIsImV4cGFuc2lvbiBvZiB0aGUiLCJvZiB0aGUgb3ZlcmFsbCIsInRoZSBvdmVyYWxsIG9wZW4iLCJvdmVyYWxsIG9wZW4gc291cmNlIiwic291cmNlIHNvZnR3YXJlIGJhc2UiLCJzb2Z0d2FyZSBiYXNlIHdoaWxlIiwiYmFzZSB3aGlsZSB5b3UiLCJ3aGlsZSB5b3Ugc2hvdWxkIiwieW91IHNob3VsZCBjbGVhcmx5Iiwic2hvdWxkIGNsZWFybHkgcmVhZCIsImNsZWFybHkgcmVhZCBhbmQiLCJ1bmRlcnN0YW5kIHRoZSBlbnRpcmUiLCJlbnRpcmUgbGljZW5zZSB0aGUiLCJsaWNlbnNlIHRoZSBlc3NlbmNlIiwidGhlIGVzc2VuY2Ugb2YiLCJlc3NlbmNlIG9mIHRoZSIsInJwbCBpcyBmb3VuZCIsImZvdW5kIGluIHR3byIsImluIHR3byBkZWZpbml0aW9ucyIsInR3byBkZWZpbml0aW9ucyBkZXBsb3kiLCJkZWZpbml0aW9ucyBkZXBsb3kgYW5kIiwiZGVwbG95IGFuZCByZXF1aXJlZCIsInJlcXVpcmVkIGNvbXBvbmVudHMgcmVnYXJkaW5nIiwiY29tcG9uZW50cyByZWdhcmRpbmcgZGVwbG95bWVudCIsInJlZ2FyZGluZyBkZXBsb3ltZW50IHVuZGVyIiwiZGVwbG95bWVudCB1bmRlciB0aGUiLCJ0aGUgcnBsIHlvdXIiLCJycGwgeW91ciBjaGFuZ2VzIiwieW91ciBjaGFuZ2VzIGJ1ZyIsImNoYW5nZXMgYnVnIGZpeGVzIiwiZml4ZXMgZXh0ZW5zaW9ucyBldGMiLCJleHRlbnNpb25zIGV0YyBtdXN0IiwiZXRjIG11c3QgYmUiLCJhdCBsYXJnZSB3aGVuIiwibGFyZ2Ugd2hlbiB5b3UiLCJ5b3UgZGVwbG95IGluIiwiZGVwbG95IGluIGFueSIsImFueSBmb3JtIGVpdGhlciIsImZvcm0gZWl0aGVyIGludGVybmFsbHkiLCJlaXRoZXIgaW50ZXJuYWxseSBvciIsImludGVybmFsbHkgb3IgdG8iLCJvciB0byBhbiIsInRvIGFuIG91dHNpZGUiLCJhbiBvdXRzaWRlIHBhcnR5Iiwib3V0c2lkZSBwYXJ0eSBvbmNlIiwicGFydHkgb25jZSB5b3UiLCJvbmNlIHlvdSBzdGFydCIsInlvdSBzdGFydCBydW5uaW5nIiwic3RhcnQgcnVubmluZyB0aGUiLCJydW5uaW5nIHRoZSBzb2Z0d2FyZSIsInNvZnR3YXJlIHlvdSBoYXZlIiwiaGF2ZSB0byBzdGFydCIsInRvIHN0YXJ0IHNoYXJpbmciLCJzdGFydCBzaGFyaW5nIHRoZSIsInNoYXJpbmcgdGhlIHNvZnR3YXJlIiwidGhlIHNvZnR3YXJlIGZ1cnRoZXIiLCJzb2Z0d2FyZSBmdXJ0aGVyIHVuZGVyIiwiZnVydGhlciB1bmRlciB0aGUiLCJycGwgYWxsIGNvbXBvbmVudHMiLCJhbGwgY29tcG9uZW50cyB5b3UiLCJjb21wb25lbnRzIHlvdSBhdXRob3IiLCJ5b3UgYXV0aG9yIGluY2x1ZGluZyIsImF1dGhvciBpbmNsdWRpbmcgc2NoZW1hcyIsImluY2x1ZGluZyBzY2hlbWFzIHNjcmlwdHMiLCJzY2hlbWFzIHNjcmlwdHMgc291cmNlIiwic2NyaXB0cyBzb3VyY2UgY29kZSIsInNvdXJjZSBjb2RlIGV0YyIsImNvZGUgZXRjIHJlZ2FyZGxlc3MiLCJldGMgcmVnYXJkbGVzcyBvZiIsIm9mIHdoZXRoZXIgdGhleSIsIndoZXRoZXIgdGhleSByZSIsInRoZXkgcmUgY29tcGlsZWQiLCJyZSBjb21waWxlZCBpbnRvIiwiY29tcGlsZWQgaW50byBhIiwiYSBzaW5nbGUgYmluYXJ5Il19LHsibGljZW5zZVRleHRzIjpbIlJlYWxOZXR3b3JrcyBQdWJsaWMgU291cmNlIExpY2Vuc2UgVmVyc2lvbiAxLjBcblxuKFJldi4gRGF0ZSBPY3RvYmVyIDI4LCAyMDAyKVxuXG4gICAxLiBHZW5lcmFsIERlZmluaXRpb25zLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIFJlYWxOZXR3b3JrcywgSW5jLiwgb3IgYW55IG90aGVyIGVudGl0eSB0aGF0IGVsZWN0cyB0byB1c2UgdGhpcyBsaWNlbnNlLCAoXCJMaWNlbnNvclwiKSBtYWtlcyBwdWJsaWNseSBhdmFpbGFibGUgYW5kIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSBMaWNlbnNvciBpZGVudGlmeWluZyBzdWNoIHByb2dyYW0gb3Igd29yayBhcyBcIk9yaWdpbmFsIENvZGVcIiBhbmQgc3RhdGluZyB0aGF0IGl0IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgUmVhbE5ldHdvcmtzIFB1YmxpYyBTb3VyY2UgTGljZW5zZSB2ZXJzaW9uIDEuMCAob3Igc3Vic2VxdWVudCB2ZXJzaW9uIHRoZXJlb2YpIChcIkxpY2Vuc2VcIikuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIFlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcsIGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBzb2Z0d2FyZSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIHNvZnR3YXJlKSwgWW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJbiBhZGRpdGlvbiwgeW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYnkgY2xpY2tpbmcgdGhlIEFjY2VwdCBidXR0b24gb3IgZG93bmxvYWRpbmcgdGhlIHNvZnR3YXJlLiBBcyB1c2VkIGluIHRoaXMgTGljZW5zZTpcblxuICAgICAgMS4xIFwiQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzXCIgbWVhbjogKGEpIGluIHRoZSBjYXNlIHdoZXJlIExpY2Vuc29yIGlzIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCAoaSkgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIExpY2Vuc29yIGFuZCAoaWkpIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdXNpbmcgb3IgbWFraW5nIHRoZSBPcmlnaW5hbCBDb2RlIGFsb25lIGFuZCBub3QgaW4gY29tYmluYXRpb24gd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZTsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCAoaSkgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFlvdSBhbmQgKGlpKSBhcmUgaW5mcmluZ2VkIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBieSB1c2luZyBvciBtYWtpbmcgWW91ciBNb2RpZmljYXRpb25zLCB0YWtlbiBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIE9yaWdpbmFsIENvZGUuXG5cbiAgICAgIDEuMiBcIkNvbXBhdGlibGUgU291cmNlIExpY2Vuc2VcIiBtZWFucyBhbnkgb25lIG9mIHRoZSBsaWNlbnNlcyBsaXN0ZWQgb24gRXhoaWJpdCBCIG9yIGF0IGh0dHBzOi8vd3d3LmhlbGl4Y29tbXVuaXR5Lm9yZy9jb250ZW50L2NvbXBsaWNlbnNlIG9yIG90aGVyIGxpY2Vuc2VzIHNwZWNpZmljYWxseSBpZGVudGlmaWVkIGJ5IExpY2Vuc29yIGluIHdyaXRpbmcuIE5vdHdpdGhzdGFuZGluZyBhbnkgdGVybSB0byB0aGUgY29udHJhcnkgaW4gYW55IENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UsIGFueSBjb2RlIGNvdmVyZWQgYnkgYW55IENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UgdGhhdCBpcyB1c2VkIHdpdGggQ292ZXJlZCBDb2RlIG11c3QgYmUgbWFkZSByZWFkaWx5IGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtYXQgZm9yIHJveWFsdHktZnJlZSB1c2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlIG9yIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS4zIFwiQ29udHJpYnV0b3JcIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIDEuNCBcIkNvdmVyZWQgQ29kZVwiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLlxuXG4gICAgICAxLjUgXCJEZXBsb3lcIiBtZWFucyB0byB1c2UsIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgb3RoZXIgdGhhbiBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgKFJcdTAwMjZEKSBhbmQvb3IgUGVyc29uYWwgVXNlLCBhbmQgaW5jbHVkZXMgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgYW5kIGFsbCBpbnRlcm5hbCB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgQ29kZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gZXhjZXB0IGZvciBSXHUwMDI2RCB1c2UgYW5kL29yIFBlcnNvbmFsIFVzZSwgYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgYnkgWW91IHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgZm9ybSBvciBtYW5uZXIuXG5cbiAgICAgIDEuNiBcIkRlcml2YXRpdmUgV29ya1wiIG1lYW5zIGVpdGhlciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgVW5pdGVkIFN0YXRlcyBjb3B5cmlnaHQgbGF3LCBhbmQgaW5jbHVkaW5nIGFueSB3b3JrIGNvbnRhaW5pbmcgb3IgaW5jbHVkaW5nIGFueSBwb3J0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgb3IgTW9kaWZpY2F0aW9ucywgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuIERlcml2YXRpdmUgV29yayBhbHNvIGluY2x1ZGVzIGFueSB3b3JrIHdoaWNoIGNvbWJpbmVzIGFueSBwb3J0aW9uIG9mIENvdmVyZWQgQ29kZSBvciBNb2RpZmljYXRpb25zIHdpdGggY29kZSBub3Qgb3RoZXJ3aXNlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuNyBcIkV4dGVybmFsbHkgRGVwbG95XCIgbWVhbnMgdG8gRGVwbG95IHRoZSBDb3ZlcmVkIENvZGUgaW4gYW55IHdheSB0aGF0IG1heSBiZSBhY2Nlc3NlZCBvciB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgdXNlZCB0byBwcm92aWRlIGFueSBzZXJ2aWNlcyB0byBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIG9yIHVzZWQgaW4gYW55IHdheSB0byBkZWxpdmVyIGFueSBjb250ZW50IHRvIGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aGUgQ292ZXJlZCBDb2RlIGlzIGRpc3RyaWJ1dGVkIHRvIHRob3NlIHBhcnRpZXMsIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIGNvbXB1dGVyIG5ldHdvcmssIG9yIHVzZWQgdG8gcHJvdmlkZSBzZXJ2aWNlcyBvciBvdGhlcndpc2UgZGVsaXZlciBjb250ZW50IHRvIGFueW9uZSBvdGhlciB0aGFuIFlvdS5cblxuICAgICAgMS44LiBcIkludGVyZmFjZVwiIG1lYW5zIGludGVyZmFjZXMsIGZ1bmN0aW9ucywgcHJvcGVydGllcywgY2xhc3MgZGVmaW5pdGlvbnMsIEFQSXMsIGhlYWRlciBmaWxlcywgR1VJRHMsIFYtVGFibGVzLCBhbmQvb3IgcHJvdG9jb2xzIGFsbG93aW5nIG9uZSBwaWVjZSBvZiBzb2Z0d2FyZSwgZmlybXdhcmUgb3IgaGFyZHdhcmUgdG8gY29tbXVuaWNhdGUgb3IgaW50ZXJvcGVyYXRlIHdpdGggYW5vdGhlciBwaWVjZSBvZiBzb2Z0d2FyZSwgZmlybXdhcmUgb3IgaGFyZHdhcmUuXG5cbiAgICAgIDEuOSBcIk1vZGlmaWNhdGlvbnNcIiBtZWFuIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgYW5kL29yIGNoYW5nZSB0bywgdGhlIHN1YnN0YW5jZSBhbmQvb3Igc3RydWN0dXJlIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4gV2hlbiBjb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogKGEpIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBDb3ZlcmVkIENvZGU7IGFuZC9vciAoYikgYW55IG5ldyBmaWxlIG9yIG90aGVyIHJlcHJlc2VudGF0aW9uIG9mIGNvbXB1dGVyIHByb2dyYW0gc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS5cblxuICAgICAgMS4xMCBcIk9yaWdpbmFsIENvZGVcIiBtZWFucyAoYSkgdGhlIFNvdXJjZSBDb2RlIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIGFzIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSB1cGRhdGVzIG9yIHVwZ3JhZGVzIHRvIHN1Y2ggcHJvZ3JhbXMgb3Igd29ya3MgbWFkZSBhdmFpbGFibGUgYnkgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgdGhhdCBoYXMgYmVlbiBleHByZXNzbHkgaWRlbnRpZmllZCBieSBMaWNlbnNvciBhcyBzdWNoIGluIHRoZSBoZWFkZXIgZmlsZShzKSBvZiBzdWNoIHdvcms7IGFuZCAoYikgdGhlIG9iamVjdCBjb2RlIGNvbXBpbGVkIGZyb20gc3VjaCBTb3VyY2UgQ29kZSBhbmQgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBMaWNlbnNvciB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuMTEgXCJQZXJzb25hbCBVc2VcIiBtZWFucyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGJ5IGFuIGluZGl2aWR1YWwgc29sZWx5IGZvciBoaXMgb3IgaGVyIHBlcnNvbmFsLCBwcml2YXRlIGFuZCBub24tY29tbWVyY2lhbCBwdXJwb3Nlcy4gQW4gaW5kaXZpZHVhbCdzIHVzZSBvZiBDb3ZlcmVkIENvZGUgaW4gaGlzIG9yIGhlciBjYXBhY2l0eSBhcyBhbiBvZmZpY2VyLCBlbXBsb3llZSwgbWVtYmVyLCBpbmRlcGVuZGVudCBjb250cmFjdG9yIG9yIGFnZW50IG9mIGEgY29ycG9yYXRpb24sIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiAoY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCkgZG9lcyBub3QgcXVhbGlmeSBhcyBQZXJzb25hbCBVc2UuXG5cbiAgICAgIDEuMTIgXCJTb3VyY2UgQ29kZVwiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHRoYXQgaXMgc3VpdGFibGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSAob2JqZWN0IGNvZGUpLlxuXG4gICAgICAxLjEzIFwiWW91XCIgb3IgXCJZb3VyXCIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgXCJZb3VcIiBvciBcIllvdXJcIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlIFwiY29udHJvbFwiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgXHUwMDI2IFJlc3RyaWN0aW9ucy4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlICh2aWEgZG93bmxvYWRpbmcgb3IgdXNpbmcgQ292ZXJlZCBDb2RlIG9yIG90aGVyd2lzZSBpbmRpY2F0aW5nIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UpLCBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGNvcHlyaWdodCBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIExpY2Vuc29yJ3MgY29weXJpZ2h0cyBjb3ZlciB0aGUgT3JpZ2luYWwgQ29kZSwgdG8gZG8gdGhlIGZvbGxvd2luZzpcblxuICAgICAgMi4xIFlvdSBtYXkgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnkgYW5kIERlcGxveSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZTpcblxuICAgICAgICAgKGEpIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBMaWNlbnNvciBhcyB0aGV5IGFwcGVhciBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlO1xuXG4gICAgICAgICAoYikgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZiBDb3ZlcmVkIENvZGUgYW5kIGRvY3VtZW50YXRpb24gWW91IGRpc3RyaWJ1dGUsIGFuZCBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHN1Y2ggU291cmNlIENvZGUgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA2O1xuXG4gICAgICAgICAoYykgWW91IG11c3QgZHVwbGljYXRlLCB0byB0aGUgZXh0ZW50IGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QsIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgTW9kaWZpY2F0aW9ucywgYW5kIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlO1xuXG4gICAgICAgICAoZCkgWW91IG11c3QgbWFrZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBFeHRlcm5hbGx5IERlcGxveWVkIE1vZGlmaWNhdGlvbnMgcHVibGljbHkgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBncmFudHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gMyBiZWxvdywgZm9yIGFzIGxvbmcgYXMgeW91IERlcGxveSB0aGUgQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwgRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlci4gWW91IHNob3VsZCBwcmVmZXJhYmx5IGRpc3RyaWJ1dGUgdGhlIFNvdXJjZSBDb2RlIG9mIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBlbGVjdHJvbmljYWxseSAoZS5nLiBkb3dubG9hZCBmcm9tIGEgd2ViIHNpdGUpOyBhbmRcblxuICAgICAgICAgKGUpIGlmIFlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwgWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kIHdoZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlLiBZb3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhlIE9iamVjdCBDb2RlIE5vdGljZSBzZXQgZm9ydGggaW4gRXhoaWJpdCBBIGluIHRoZSBcImFib3V0XCIgYm94IG9yIG90aGVyIGFwcHJvcHJpYXRlIHBsYWNlIHdoZXJlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzIGFyZSBwbGFjZWQsIGluY2x1ZGluZyBhbnkgcGFja2FnaW5nIG1hdGVyaWFscy5cblxuICAgICAgMi4yIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgYWx0aG91Z2ggTGljZW5zb3IgYW5kIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byB0aGVpciByZXNwZWN0aXZlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gTGljZW5zb3IgYW5kIGVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW0gYW55IGxpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBZb3UgaGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgWW91IHRvIG1ha2UsIHVzZSwgc2VsbCwgaW1wb3J0IG9yIG9mZmVyIGZvciBzYWxlIHRoZSBDb3ZlcmVkIENvZGUsIGl0IGlzIFlvdXIgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSBzdWNoIGxpY2Vuc2UocykuXG5cbiAgICAgIDIuMyBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgKHZpYSBkb3dubG9hZGluZyBvciB1c2luZyBDb3ZlcmVkIENvZGUgb3Igb3RoZXJ3aXNlIGluZGljYXRpbmcgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSksIGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCwgbm9uLWV4Y2x1c2l2ZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNvcidzIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlIGFuZCBpbXBvcnQgdGhlIENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlIHlvdSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAzLiBZb3VyIEdyYW50cy4gSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGEgY29uZGl0aW9uIHRvLCB0aGUgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlOlxuXG4gICAgICAoYSkgWW91IGdyYW50IHRvIExpY2Vuc29yIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgaXJyZXZvY2FibGUsIHJveWFsdHkgZnJlZSBsaWNlbnNlIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byBtYWtlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgdXNlLCBpbXBvcnQsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgTGljZW5zb3IncyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMjsgYW5kXG5cbiAgICAgIChiKSBZb3UgZ3JhbnQgdG8gTGljZW5zb3IgYW5kIGl0cyBzdWJzaWRpYXJpZXMgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsIGFuZCBpcnJldm9jYWJsZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIGRpc3RyaWJ1dGUsIG1vZGlmeSBvciBoYXZlIG1vZGlmaWVkIChmb3IgTGljZW5zb3IgYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMpLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIFlvdXIgTW9kaWZpY2F0aW9ucywgaW4gYW55IGZvcm0gYW5kIGZvciBhbnkgcHVycG9zZSwgdGhyb3VnaCBtdWx0aXBsZSB0aWVycyBvZiBkaXN0cmlidXRpb24uXG5cbiAgICAgIChjKSBZb3UgYWdyZWUgbm90IHVzZSBhbnkgaW5mb3JtYXRpb24gZGVyaXZlZCBmcm9tIFlvdXIgdXNlIGFuZCByZXZpZXcgb2YgdGhlIENvdmVyZWQgQ29kZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBhbnkgYWxnb3JpdGhtcyBvciBpbnZlbnRpb25zIHRoYXQgbWF5IGJlIGNvbnRhaW5lZCBpbiB0aGUgQ292ZXJlZCBDb2RlLCBmb3IgdGhlIHB1cnBvc2Ugb2YgYXNzZXJ0aW5nIGFueSBvZiBZb3VyIHBhdGVudCByaWdodHMsIG9yIGFzc2lzdGluZyBhIHRoaXJkIHBhcnR5IHRvIGFzc2VydCBhbnkgb2YgaXRzIHBhdGVudCByaWdodHMsIGFnYWluc3QgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yLlxuXG4gICA0LiBEZXJpdmF0aXZlIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3Qgb3RoZXJ3aXNlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIERlcml2YXRpdmUgV29yayBhcyBhbiBpbnRlZ3JhdGVkIHByb2R1Y3QuIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaW5jbHVkaW5nIGFsbCBNb2RpZmljYXRpb25zLlxuXG4gICAgICA0LjEgWW91IG11c3QgY2F1c2UgYW55IERlcml2YXRpdmUgV29yayB0aGF0IHlvdSBkaXN0cmlidXRlLCBwdWJsaXNoIG9yIEV4dGVybmFsbHkgRGVwbG95LCB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgbm8gb3RoZXIgbGljZW5zZSBleGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiA0LjIuIFlvdSBhbHNvIG11c3QgbWFrZSBTb3VyY2UgQ29kZSBhdmFpbGFibGUgZm9yIHRoZSBEZXJpdmF0aXZlIFdvcmsgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgTW9kaWZpY2F0aW9ucywgZGVzY3JpYmVkIGluIFNlY3Rpb25zIDIgYW5kIDMsIGFib3ZlLlxuXG4gICAgICA0LjIgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZXMuIFNvZnR3YXJlIG1vZHVsZXMgdGhhdCBoYXZlIGJlZW4gaW5kZXBlbmRlbnRseSBkZXZlbG9wZWQgd2l0aG91dCBhbnkgdXNlIG9mIENvdmVyZWQgQ29kZSBhbmQgd2hpY2ggY29udGFpbiBubyBwb3J0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUsIE1vZGlmaWNhdGlvbnMgb3Igb3RoZXIgRGVyaXZhdGl2ZSBXb3JrcywgYnV0IGFyZSB1c2VkIG9yIGNvbWJpbmVkIGluIGFueSB3YXkgd2l0aCB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBEZXJpdmF0aXZlIFdvcmsgdG8gZm9ybSBhIGxhcmdlciBEZXJpdmF0aXZlIFdvcmssIGFyZSBleGVtcHQgZnJvbSB0aGUgY29uZGl0aW9ucyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0LjEgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCB0aGF0OiB0aGUgc29mdHdhcmUgbW9kdWxlLCBpbmNsdWRpbmcgYW55IHNvZnR3YXJlIHRoYXQgaXMgbGlua2VkIHRvLCBpbnRlZ3JhdGVkIHdpdGgsIG9yIHBhcnQgb2YgdGhlIHNhbWUgYXBwbGljYXRpb25zIGFzLCB0aGUgc29mdHdhcmUgbW9kdWxlIGJ5IGFueSBtZXRob2QgbXVzdCBiZSB3aG9sbHkgc3ViamVjdCB0byBvbmUgb2YgdGhlIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2VzLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgYWxsIENvdmVyZWQgQ29kZSBtdXN0IGJlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVGh1cywgdGhlIGVudGlyZSBEZXJpdmF0aXZlIFdvcmsgbXVzdCBiZSBsaWNlbnNlZCB1bmRlciBhIGNvbWJpbmF0aW9uIG9mIHRoZSBSUFNMIChmb3IgQ292ZXJlZCBDb2RlKSBhbmQgYSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlIGZvciBhbnkgaW5kZXBlbmRlbnRseSBkZXZlbG9wZWQgc29mdHdhcmUgbW9kdWxlcyB3aXRoaW4gdGhlIERlcml2YXRpdmUgV29yay4gVGhlIGZvcmVnb2luZyByZXF1aXJlbWVudCBhcHBsaWVzIGV2ZW4gaWYgdGhlIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2Ugd291bGQgb3JkaW5hcmlseSBhbGxvdyB0aGUgc29mdHdhcmUgbW9kdWxlIHRvIGxpbmsgd2l0aCwgb3IgZm9ybSBsYXJnZXIgd29ya3Mgd2l0aCwgb3RoZXIgc29mdHdhcmUgdGhhdCBpcyBub3Qgc3ViamVjdCB0byB0aGUgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZS4gRm9yIGV4YW1wbGUsIGFsdGhvdWdoIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIHYxLjEgYWxsb3dzIE1vemlsbGEgY29kZSB0byBiZSBjb21iaW5lZCB3aXRoIHByb3ByaWV0YXJ5IHNvZnR3YXJlIHRoYXQgaXMgbm90IHN1YmplY3QgdG8gdGhlIE1QTCwgaWYgTVBMLWxpY2Vuc2VkIGNvZGUgaXMgdXNlZCB3aXRoIENvdmVyZWQgQ29kZSB0aGUgTVBMLWxpY2Vuc2VkIGNvZGUgY291bGQgbm90IGJlIGNvbWJpbmVkIG9yIGxpbmtlZCB3aXRoIGFueSBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgTVBMLiBUaGUgZ2VuZXJhbCBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIDQuMiBpcyB0byBlbmFibGUgdXNlIG9mIENvdmVyZWQgQ29kZSB3aXRoIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSB3aG9sbHkgc3ViamVjdCB0byBhbiBhY2NlcHRhYmxlIG9wZW4gc291cmNlIGxpY2Vuc2UuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgeW91ciB1c2Ugb2Ygc29mdHdhcmUgd2l0aCBDb3ZlcmVkIENvZGUgaXMgYWxsb3dlZCB1bmRlciBZb3VyIGxpY2Vuc2UgdG8gc3VjaCBzb2Z0d2FyZS5cblxuICAgICAgNC4zIE1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgQ292ZXJlZCBDb2RlIHdpdGggdGhlIENvdmVyZWQgQ29kZSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIENvdmVyZWQgQ29kZSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGRlbGl2ZXIgdGhlIENvdmVyZWQgQ29kZSBmb3IgY29tYmluYXRpb24gYW5kL29yIGludGVncmF0aW9uIHdpdGggYW4gYXBwbGljYXRpb24gcHJldmlvdXNseSBwcm92aWRlZCBieSBZb3UgKGZvciBleGFtcGxlLCB2aWEgYXV0b21hdGljIHVwZGF0aW5nIHRlY2hub2xvZ3kpLCBzdWNoIGNvbWJpbmF0aW9uIGFuZC9vciBpbnRlZ3JhdGlvbiBjb25zdGl0dXRlcyBhIERlcml2YXRpdmUgV29yayBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDUuIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgQ292ZXJlZCBDb2RlLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IGNvZGUgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuIE1vZGlmaWNhdGlvbnMsIERlcml2YXRpdmUgV29ya3MgYW5kL29yIGFueSB1c2Ugb3IgY29tYmluYXRpb24gb2YgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgdGVjaG5vbG9neSBwcm92aWRlZCBieSBMaWNlbnNvciBvciB0aGlyZCBwYXJ0aWVzIG1heSByZXF1aXJlIGFkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gTGljZW5zb3Igd2hpY2ggTGljZW5zb3IgbWF5IGdyYW50IGluIGl0cyBzb2xlIGRpc2NyZXRpb24uIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvciBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS5cblxuICAgICAgNS4xLiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgb3duZWQgYnkgTGljZW5zb3IgKFwiTGljZW5zb3IgTWFya3NcIiBkZWZpbmVkIGluIEV4aGliaXQgQykgb3IgdG8gYW55IHRyYWRlbWFyayBvciB0cmFkZSBuYW1lIGJlbG9uZ2luZyB0byBhbnkgQ29udHJpYnV0b3IuIE5vIExpY2Vuc29yIE1hcmtzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3RoZXIgdGhhbiBhcyBwZXJtaXR0ZWQgYnkgdGhlIExpY2Vuc29yIFRyYWRlbWFyayBQb2xpY3kgZGVmaW5lZCBpbiBFeGhpYml0IEMuXG5cbiAgIDYuIEFkZGl0aW9uYWwgVGVybXMuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIG90aGVyIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhlIHNjb3BlIG9mIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZWluIChcIkFkZGl0aW9uYWwgVGVybXNcIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIGFzIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBvYnRhaW4gdGhlIHJlY2lwaWVudCdzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBMaWNlbnNvciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QgTGljZW5zb3Igb3Igc3VjaCBDb250cmlidXRvciBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy5cblxuICAgNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIExpY2Vuc29yIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHB1Ymxpc2hlZCBieSBMaWNlbnNvci4gTm8gb25lIG90aGVyIHRoYW4gTGljZW5zb3IgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICA4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGluIHdob2xlIG9yIGluIHBhcnQgcHJlLXJlbGVhc2UsIHVudGVzdGVkLCBvciBub3QgZnVsbHkgdGVzdGVkIHdvcmtzLiBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGVycm9ycyB0aGF0IGNvdWxkIGNhdXNlIGZhaWx1cmVzIG9yIGxvc3Mgb2YgZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBpcyBhdCBZb3VyIHNvbGUgYW5kIGVudGlyZSByaXNrLiBUSEUgQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORCBBTkQgTElDRU5TT1IgQU5EIExJQ0VOU09SJ1MgTElDRU5TT1IoUykgKENPTExFQ1RJVkVMWSBSRUZFUlJFRCBUTyBBUyBcIkxJQ0VOU09SXCIgRk9SIFRIRSBQVVJQT1NFUyBPRiBTRUNUSU9OUyA4IEFORCA5KSBBTkQgQUxMIENPTlRSSUJVVE9SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBPRiBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgT0YgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9GIEFDQ1VSQUNZLCBPRiBRVUlFVCBFTkpPWU1FTlQsIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBMSUNFTlNPUiBBTkQgRUFDSCBDT05UUklCVVRPUiBET0VTIE5PVCBXQVJSQU5UIEFHQUlOU1QgSU5URVJGRVJFTkNFIFdJVEggWU9VUiBFTkpPWU1FTlQgT0YgVEhFIENPVkVSRUQgQ09ERSwgVEhBVCBUSEUgRlVOQ1RJT05TIENPTlRBSU5FRCBJTiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgTUVFVCBZT1VSIFJFUVVJUkVNRU5UUywgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBVTklOVEVSUlVQVEVEIE9SIEVSUk9SLUZSRUUsIE9SIFRIQVQgREVGRUNUUyBJTiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgQ09SUkVDVEVELiBOTyBPUkFMIE9SIFdSSVRURU4gRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOIEJZIExJQ0VOU09SLCBBIExJQ0VOU09SIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkUgT1IgQU5ZIENPTlRSSUJVVE9SIFNIQUxMIENSRUFURSBBIFdBUlJBTlRZLiBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGlzIG5vdCBpbnRlbmRlZCBmb3IgdXNlIGluIGhpZ2ggcmlzayBhY3Rpdml0aWVzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIGRlc2lnbiwgY29uc3RydWN0aW9uLCBvcGVyYXRpb24gb3IgbWFpbnRlbmFuY2Ugb2YgbnVjbGVhciBmYWNpbGl0aWVzLCBhaXJjcmFmdCBuYXZpZ2F0aW9uLCBhaXJjcmFmdCBjb21tdW5pY2F0aW9uIHN5c3RlbXMsIG9yIGFpciB0cmFmZmljIGNvbnRyb2wgbWFjaGluZXMgaW4gd2hpY2ggY2FzZSB0aGUgZmFpbHVyZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGNvdWxkIGxlYWQgdG8gZGVhdGgsIHBlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlIHBoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLiBMaWNlbnNvciBkaXNjbGFpbXMgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSBvZiBmaXRuZXNzIGZvciBzdWNoIHVzZXMuXG5cbiAgIDkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgTElDRU5TT1IgT1IgQU5ZIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSElTIExJQ0VOU0UgT1IgWU9VUiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgQ09WRVJFRCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSIFVOREVSIEEgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgU1RSSUNUIExJQUJJTElUWSksIFBST0RVQ1RTIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYgTElDRU5TT1IgT1IgU1VDSCBDT05UUklCVVRPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgUkVNRURZLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiBJbiBubyBldmVudCBzaGFsbCBMaWNlbnNvcidzIHRvdGFsIGxpYWJpbGl0eSB0byBZb3UgZm9yIGFsbCBkYW1hZ2VzIChvdGhlciB0aGFuIGFzIG1heSBiZSByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdykgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUgYW1vdW50IG9mIHRlbiBkb2xsYXJzICgkMTAuMDApLlxuXG4gICAxMC4gT3duZXJzaGlwLiBTdWJqZWN0IHRvIHRoZSBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIENvbnRyaWJ1dG9yLiBMaWNlbnNvciByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIExpY2Vuc29yIChcIkxpY2Vuc29yIE1vZGlmaWNhdGlvbnNcIiksIGFuZCBzdWNoIExpY2Vuc29yIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gTGljZW5zb3IgbWF5LCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIExpY2Vuc29yIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuXG5cbiAgIDExLiBUZXJtaW5hdGlvbi5cblxuICAgICAgMTEuMSBUZXJtIGFuZCBUZXJtaW5hdGlvbi4gVGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlIGlzIHBlcnBldHVhbCB1bmxlc3MgdGVybWluYXRlZCBhcyBwcm92aWRlZCBiZWxvdy4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlOlxuXG4gICAgICAgICAoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIExpY2Vuc29yIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoO1xuXG4gICAgICAgICAoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEyLjUoYik7IG9yXG5cbiAgICAgICAgIChjKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gTGljZW5zb3IgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBMaWNlbnNvciAoaW5jbHVkaW5nIGJ5IGNyb3NzLWNsYWltIG9yIGNvdW50ZXIgY2xhaW0gaW4gYSBsYXdzdWl0KTtcblxuICAgICAgICAgKGQpIHVwb24gd3JpdHRlbiBub3RpY2UgZnJvbSBMaWNlbnNvciBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIExpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IGFueSB0aGlyZCBwYXJ0eSBhbGxlZ2luZyB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBhbnkgcGF0ZW50IChpbmNsdWRpbmcgYnkgY3Jvc3MtY2xhaW0gb3IgY291bnRlciBjbGFpbSBpbiBhIGxhd3N1aXQpLlxuXG4gICAgICAxMS4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgdG8gZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIFNlY3Rpb25zIDMsIDUsIDgsIDksIDEwLCAxMSwgMTIuMiBhbmQgMTMuIE5vIHBhcnR5IHdpbGwgYmUgbGlhYmxlIHRvIGFueSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLCBpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydCBzb2xlbHkgYXMgYSByZXN1bHQgb2YgdGVybWluYXRpbmcgdGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMsIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBiZSB3aXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mIGFueSBwYXJ0eS5cblxuICAgMTIuIE1pc2NlbGxhbmVvdXMuXG5cbiAgICAgIDEyLjEgR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSBcImNvbW1lcmNpYWwgaXRlbVwiIGFzIGRlZmluZWQgaW4gRkFSIDIuMTAxLiBHb3Zlcm5tZW50IHNvZnR3YXJlIGFuZCB0ZWNobmljYWwgZGF0YSByaWdodHMgaW4gdGhlIENvdmVyZWQgQ29kZSBpbmNsdWRlIG9ubHkgdGhvc2UgcmlnaHRzIGN1c3RvbWFyaWx5IHByb3ZpZGVkIHRvIHRoZSBwdWJsaWMgYXMgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgY3VzdG9tYXJ5IGNvbW1lcmNpYWwgbGljZW5zZSBpbiB0ZWNobmljYWwgZGF0YSBhbmQgc29mdHdhcmUgaXMgcHJvdmlkZWQgaW4gYWNjb3JkYW5jZSB3aXRoIEZBUiAxMi4yMTEgKFRlY2huaWNhbCBEYXRhKSBhbmQgMTIuMjEyIChDb21wdXRlciBTb2Z0d2FyZSkgYW5kLCBmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIHB1cmNoYXNlcywgREZBUiAyNTIuMjI3LTcwMTUgKFRlY2huaWNhbCBEYXRhIC0tIENvbW1lcmNpYWwgSXRlbXMpIGFuZCAyMjcuNzIwMi0zIChSaWdodHMgaW4gQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSBvciBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uKS4gQWNjb3JkaW5nbHksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi5cblxuICAgICAgMTIuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gb3IgYW1vbmcgWW91LCBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50IHRvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yIG90aGVyd2lzZS5cblxuICAgICAgMTIuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIgTGljZW5zb3IncyByaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBoYXZlIG90aGVycyBkZXZlbG9wIGZvciBpdCwgbWFya2V0IGFuZC9vciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtIHRoZSBzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvciBvdGhlcndpc2UgY29tcGV0ZSB3aXRoLCBNb2RpZmljYXRpb25zLCBEZXJpdmF0aXZlIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS5cblxuICAgICAgMTIuNCBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gRmFpbHVyZSBieSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50IG9mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgd2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxMi41IFNldmVyYWJpbGl0eS4gKGEpIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbiB0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZSB3aWxsIGJlIGVuZm9yY2VkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBzbyBhcyB0byBlZmZlY3QgdGhlIGVjb25vbWljIGJlbmVmaXRzIGFuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gKGIpIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBpZiBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IgcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZC9vciBzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGggU2VjdGlvbnMgMiBhbmQvb3IgMyBvciBwcmV2ZW50cyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgZWl0aGVyIG9mIHRob3NlIFNlY3Rpb25zLCB0aGlzIExpY2Vuc2Ugd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgZGVzdHJveSBhbGwgY29waWVzIG9mIGl0IHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLlxuXG4gICAgICAxMi42IERpc3B1dGUgUmVzb2x1dGlvbi4gQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGJldHdlZW4gWW91IGFuZCBMaWNlbnNvciByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgU2VhdHRsZSwgV2FzaGluZ3RvbiwgYW5kIFlvdSBhbmQgTGljZW5zb3IgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLlxuXG4gICAgICAxMi43IEV4cG9ydC9JbXBvcnQgTGF3cy4gVGhpcyBzb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIGFsbCBleHBvcnQgYW5kIGltcG9ydCBsYXdzIGFuZCByZXN0cmljdGlvbnMgYW5kIHJlZ3VsYXRpb25zIG9mIHRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSByZWNlaXZlIHRoZSBDb3ZlcmVkIENvZGUgYW5kIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IFlvdSBkbyBub3QgZXhwb3J0LCByZS1leHBvcnQgb3IgaW1wb3J0IHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IGRpcmVjdCBwcm9kdWN0IHRoZXJlb2YgaW4gdmlvbGF0aW9uIG9mIGFueSBzdWNoIHJlc3RyaWN0aW9ucywgbGF3cyBvciByZWd1bGF0aW9ucywgb3Igd2l0aG91dCBhbGwgbmVjZXNzYXJ5IGF1dGhvcml6YXRpb25zLlxuXG4gICAgICAxMi44IEVudGlyZSBBZ3JlZW1lbnQ7IEdvdmVybmluZyBMYXcuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIHRoZSBTdGF0ZSBvZiBXYXNoaW5ndG9uLlxuXG4gICAgICBXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nIGNsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcyBwYXJ0aWVzIG9udCBleGlnw6kgcXVlIGxlIHByw6lzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzIGNvbm5leGVzIHNvaWVudCByw6lkaWfDqXMgZW4gYW5nbGFpcy4gRVhISUJJVCBBLlxuXG5cIkNvcHlyaWdodCAoYykgMTk5NS0yMDAyIFJlYWxOZXR3b3JrcywgSW5jLiBhbmQvb3IgaXRzIGxpY2Vuc29ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSwgYW5kIHRoZSBmaWxlcyBpbmNsdWRlZCB3aXRoIHRoaXMgZmlsZSwgYXJlIHN1YmplY3QgdG8gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgUmVhbE5ldHdvcmtzIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlIFwiUlBTTFwiKSBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuaGVsaXhjb21tdW5pdHkub3JnL2NvbnRlbnQvcnBzbCB1bmxlc3MgeW91IGhhdmUgbGljZW5zZWQgdGhlIGZpbGUgdW5kZXIgdGhlIFJlYWxOZXR3b3JrcyBDb21tdW5pdHkgU291cmNlIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSBcIlJDU0xcIikgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmhlbGl4Y29tbXVuaXR5Lm9yZy9jb250ZW50L3Jjc2wsIGluIHdoaWNoIGNhc2UgdGhlIFJDU0wgd2lsbCBhcHBseS4gWW91IG1heSBhbHNvIG9idGFpbiB0aGUgbGljZW5zZSB0ZXJtcyBkaXJlY3RseSBmcm9tIFJlYWxOZXR3b3Jrcy4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBSUFNMIG9yLCBpZiB5b3UgaGF2ZSBhIHZhbGlkIFJDU0wgd2l0aCBSZWFsTmV0d29ya3MgYXBwbGljYWJsZSB0byB0aGlzIGZpbGUsIHRoZSBSQ1NMLiBQbGVhc2Ugc2VlIHRoZSBhcHBsaWNhYmxlIFJQU0wgb3IgUkNTTCBmb3IgdGhlIHJpZ2h0cywgb2JsaWdhdGlvbnMgYW5kIGxpbWl0YXRpb25zIGdvdmVybmluZyB1c2Ugb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLlxuXG5UaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSGVsaXggRE5BIFRlY2hub2xvZ3kuIFJlYWxOZXR3b3JrcyBpcyB0aGUgZGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBjb2RlIGFuZCBvd25zIHRoZSBjb3B5cmlnaHRzIGluIHRoZSBwb3J0aW9ucyBpdCBjcmVhdGVkLlxuXG5UaGlzIGZpbGUsIGFuZCB0aGUgZmlsZXMgaW5jbHVkZWQgd2l0aCB0aGlzIGZpbGUsIGlzIGRpc3RyaWJ1dGVkIGFuZCBtYWRlIGF2YWlsYWJsZSBvbiBhbiAnQVMgSVMnIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgUkVBTE5FVFdPUktTIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgUVVJRVQgRU5KT1lNRU5UIE9SIE5PTi1JTkZSSU5HRU1FTlQuXG5cbkNvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19cblxuVGVjaG5vbG9neSBDb21wYXRpYmlsaXR5IEtpdCBUZXN0IFN1aXRlKHMpIExvY2F0aW9uIChpZiBsaWNlbnNlZCB1bmRlciB0aGUgUkNTTCk6IF9fX19fXCJcblxuT2JqZWN0IENvZGUgTm90aWNlOiBIZWxpeCBETkEgQ2xpZW50IHRlY2hub2xvZ3kgaW5jbHVkZWQuIENvcHlyaWdodCAoYykgUmVhbE5ldHdvcmtzLCBJbmMuLCAxOTk1LTIwMDIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbkVYSElCSVQgQlxuXG5Db21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlcyBmb3IgdGhlIFJlYWxOZXR3b3JrcyBQdWJsaWMgU291cmNlIExpY2Vuc2UuIFRoZSBmb2xsb3dpbmcgbGlzdCBhcHBsaWVzIHRvIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGFzIG9mIE9jdG9iZXIgMjUsIDIwMDIsIHVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLlxuXG5BY2FkZW1pYyBGcmVlIExpY2Vuc2VcblxuQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2VcblxuQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlXG5cbkFydGlzdGljIGxpY2Vuc2VcblxuQXR0cmlidXRpb24gQXNzdXJhbmNlIExpY2Vuc2VzXG5cbkJTRCBsaWNlbnNlXG5cbkNvbW1vbiBQdWJsaWMgTGljZW5zZTFcblxuRWlmZmVsIEZvcnVtIExpY2Vuc2VcblxuR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkxXG5cbkdOVSBMaWJyYXJ5IG9yIFwiTGVzc2VyXCIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoTEdQTCkxXG5cbklCTSBQdWJsaWMgTGljZW5zZVxuXG5JbnRlbCBPcGVuIFNvdXJjZSBMaWNlbnNlXG5cbkphYmJlciBPcGVuIFNvdXJjZSBMaWNlbnNlXG5cbk1JVCBsaWNlbnNlXG5cbk1JVFJFIENvbGxhYm9yYXRpdmUgVmlydHVhbCBXb3Jrc3BhY2UgTGljZW5zZSAoQ1ZXIExpY2Vuc2UpXG5cbk1vdG9zb3RvIExpY2Vuc2VcblxuTW96aWxsYSBQdWJsaWMgTGljZW5zZSAxLjAgKE1QTClcblxuTW96aWxsYSBQdWJsaWMgTGljZW5zZSAxLjEgKE1QTClcblxuTm9raWEgT3BlbiBTb3VyY2UgTGljZW5zZVxuXG5PcGVuIEdyb3VwIFRlc3QgU3VpdGUgTGljZW5zZVxuXG5QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBMaWNlbnNlXG5cblJpY29oIFNvdXJjZSBDb2RlIFB1YmxpYyBMaWNlbnNlXG5cblN1biBJbmR1c3RyeSBTdGFuZGFyZHMgU291cmNlIExpY2Vuc2UgKFNJU1NMKVxuXG5TdW4gUHVibGljIExpY2Vuc2VcblxuVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBIE9wZW4gU291cmNlIExpY2Vuc2VcblxuVm92aWRhIFNvZnR3YXJlIExpY2Vuc2Ugdi4gMS4wXG5cblczQyBMaWNlbnNlXG5cblguTmV0IExpY2Vuc2VcblxuWm9wZSBQdWJsaWMgTGljZW5zZVxuXG56bGliL2xpYnBuZyBsaWNlbnNlXG5cbjFOb3RlOiBiZWNhdXNlIHRoaXMgbGljZW5zZSBjb250YWlucyBjZXJ0YWluIHJlY2lwcm9jYWwgbGljZW5zaW5nIHRlcm1zIHRoYXQgcHVycG9ydCB0byBleHRlbmQgdG8gaW5kZXBlbmRlbnRseSBkZXZlbG9wZWQgY29kZSwgWW91IG1heSBiZSBwcm9oaWJpdGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIG90aGVyd2lzZSBjb21wYXRpYmxlIGxpY2Vuc2UgZnJvbSB1c2luZyBjb2RlIGxpY2Vuc2VkIHVuZGVyIGl0cyB0ZXJtcyB3aXRoIENvdmVyZWQgQ29kZSBiZWNhdXNlIENvdmVyZWQgQ29kZSBtYXkgb25seSBiZSBsaWNlbnNlZCB1bmRlciB0aGUgUmVhbE5ldHdvcmtzIFB1YmxpYyBTb3VyY2UgTGljZW5zZS4gQW55IGF0dGVtcHQgdG8gYXBwbHkgbm9uIFJQU0wgbGljZW5zZSB0ZXJtcywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgR1BMLCB0byBDb3ZlcmVkIENvZGUgaXMgZXhwcmVzc2x5IGZvcmJpZGRlbi4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCBZb3VyIHVzZSBvZiBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlZCBjb2RlIGRvZXMgbm90IHZpb2xhdGUgZWl0aGVyIHRoZSBSUFNMIG9yIHRoZSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlLlxuXG5UaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBsaXN0IGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuaGVsaXhjb21tdW5pdHkub3JnL2NvbnRlbnQvY29tcGxpY2Vuc2VcblxuRVhISUJJVCBDXG5cblJlYWxOZXR3b3JrcycgVHJhZGVtYXJrIHBvbGljeS5cblxuUmVhbE5ldHdvcmtzIGRlZmluZXMgdGhlIGZvbGxvd2luZyB0cmFkZW1hcmtzIGNvbGxlY3RpdmVseSBhcyBcIkxpY2Vuc29yIFRyYWRlbWFya3NcIjogXCJSZWFsTmV0d29ya3NcIiwgXCJSZWFsUGxheWVyXCIsIFwiUmVhbEp1a2Vib3hcIiwgXCJSZWFsU3lzdGVtXCIsIFwiUmVhbEF1ZGlvXCIsIFwiUmVhbFZpZGVvXCIsIFwiUmVhbE9uZSBQbGF5ZXJcIiwgXCJSZWFsTWVkaWFcIiwgXCJIZWxpeFwiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZyB0byBSZWFsTmV0d29ya3MuXG5cblJlYWxOZXR3b3JrcyBcIkxpY2Vuc29yIFRyYWRlbWFyayBQb2xpY3lcIiBmb3JiaWRzIGFueSB1c2Ugb2YgTGljZW5zb3IgVHJhZGVtYXJrcyBleGNlcHQgYXMgcGVybWl0dGVkIGJ5IGFuZCBpbiBzdHJpY3QgY29tcGxpYW5jZSBhdCBhbGwgdGltZXMgd2l0aCBSZWFsTmV0d29ya3MnIHRoaXJkIHBhcnR5IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzIHdoaWNoIGFyZSBwb3N0ZWQgYXQgd3d3LnJlYWxuZXR3b3Jrcy5jb20vaW5mby9oZWxpeGxvZ28uaHRtbC4iXSwibGljZW5zZUlkcyI6WyJSUFNMLTEuMCJdLCJrZXl3b3JkcyI6WyIxIDAgcmV2IiwiMCByZXYgZGF0ZSIsInJldiBkYXRlIG9jdG9iZXIiLCJkYXRlIG9jdG9iZXIgMjgiLCJvY3RvYmVyIDI4IDIwMDIiLCIyOCAyMDAyIDEiLCIyMDAyIDEgZ2VuZXJhbCIsIndvcmsgd2hpY2ggcmVhbG5ldHdvcmtzIiwid2hpY2ggcmVhbG5ldHdvcmtzIGluYyIsInJlYWxuZXR3b3JrcyBpbmMgb3IiLCJlbnRpdHkgdGhhdCBlbGVjdHMiLCJ0aGF0IGVsZWN0cyB0byIsImxpY2Vuc2UgbGljZW5zb3IgbWFrZXMiLCJwbGFjZWQgYnkgbGljZW5zb3IiLCJieSBsaWNlbnNvciBpZGVudGlmeWluZyIsImxpY2Vuc29yIGlkZW50aWZ5aW5nIHN1Y2giLCJvZiB0aGlzIHJlYWxuZXR3b3JrcyIsInRoaXMgcmVhbG5ldHdvcmtzIHB1YmxpYyIsInRoZXJlb2YgbGljZW5zZSB5b3UiLCJsaWNlbnNlIGhvd2V2ZXIgbm90aGluZyIsImJ5IG1vZGlmeWluZyBjb3B5aW5nIiwibW9kaWZ5aW5nIGNvcHlpbmcgb3IiLCJjb25kaXRpb25zIGluIGFkZGl0aW9uIiwiYWRkaXRpb24geW91IGFncmVlIiwibGljZW5zZSBieSBjbGlja2luZyIsImJ5IGNsaWNraW5nIHRoZSIsImNsaWNraW5nIHRoZSBhY2NlcHQiLCJidXR0b24gb3IgZG93bmxvYWRpbmciLCJvciBkb3dubG9hZGluZyB0aGUiLCJkb3dubG9hZGluZyB0aGUgc29mdHdhcmUiLCJzb2Z0d2FyZSBhcyB1c2VkIiwiY2FzZSB3aGVyZSBsaWNlbnNvciIsIndoZXJlIGxpY2Vuc29yIGlzIiwiYXNzaWduZWQgdG8gbGljZW5zb3IiLCJsaWNlbnNvciBhbmQgaWkiLCJpaSBhcmUgbmVjZXNzYXJpbHkiLCJpbmZyaW5nZWQgYnkgdXNpbmciLCJvciBtYWtpbmcgdGhlIiwibm90IGluIGNvbWJpbmF0aW9uIiwib3IgaGFyZHdhcmUgYW5kIiwiaGFyZHdhcmUgYW5kIGIiLCJpaSBhcmUgaW5mcmluZ2VkIiwiYXJlIGluZnJpbmdlZCBkaXJlY3RseSIsImluZnJpbmdlZCBkaXJlY3RseSBvciIsIm9yIGluZGlyZWN0bHkgYnkiLCJpbmRpcmVjdGx5IGJ5IHVzaW5nIiwib3IgbWFraW5nIHlvdXIiLCJtYWtpbmcgeW91ciBtb2RpZmljYXRpb25zIiwic291cmNlIGxpY2Vuc2UgbWVhbnMiLCJsaWNlbnNlIG1lYW5zIGFueSIsIm1lYW5zIGFueSBvbmUiLCJhbnkgb25lIG9mIiwidGhlIGxpY2Vuc2VzIGxpc3RlZCIsImxpY2Vuc2VzIGxpc3RlZCBvbiIsImxpc3RlZCBvbiBleGhpYml0Iiwib24gZXhoaWJpdCBiIiwiZXhoaWJpdCBiIG9yIiwiYiBvciBhdCIsIm9yIGF0IGh0dHBzIiwiY29udGVudCBjb21wbGljZW5zZSBvciIsImNvbXBsaWNlbnNlIG9yIG90aGVyIiwib3RoZXIgbGljZW5zZXMgc3BlY2lmaWNhbGx5IiwibGljZW5zZXMgc3BlY2lmaWNhbGx5IGlkZW50aWZpZWQiLCJzcGVjaWZpY2FsbHkgaWRlbnRpZmllZCBieSIsImluIHdyaXRpbmcgbm90d2l0aHN0YW5kaW5nIiwid3JpdGluZyBub3R3aXRoc3RhbmRpbmcgYW55Iiwibm90d2l0aHN0YW5kaW5nIGFueSB0ZXJtIiwiYW55IHRlcm0gdG8iLCJ0ZXJtIHRvIHRoZSIsImNvbnRyYXJ5IGluIGFueSIsImluIGFueSBjb21wYXRpYmxlIiwiYW55IGNvZGUgY292ZXJlZCIsImNvZGUgY292ZXJlZCBieSIsImNvdmVyZWQgYnkgYW55IiwiYnkgYW55IGNvbXBhdGlibGUiLCJzb3VyY2UgbGljZW5zZSB0aGF0IiwiYmUgbWFkZSByZWFkaWx5IiwibWFkZSByZWFkaWx5IGF2YWlsYWJsZSIsInJlYWRpbHkgYXZhaWxhYmxlIGluIiwiY29kZSBmb3JtYXQgZm9yIiwiZm9ybWF0IGZvciByb3lhbHR5IiwiZm9yIHJveWFsdHkgZnJlZSIsImZyZWUgdXNlIHVuZGVyIiwibGljZW5zZSBvciB0aGlzIiwibGljZW5zZSAxIDMiLCIzIGNvbnRyaWJ1dG9yIG1lYW5zIiwibW9kaWZpY2F0aW9ucyAxIDQiLCIxIDUgZGVwbG95IiwiNSBkZXBsb3kgbWVhbnMiLCJtYW5uZXIgMSA2IiwiMSA2IGRlcml2YXRpdmUiLCI2IGRlcml2YXRpdmUgd29yayIsImVpdGhlciB0aGUgY292ZXJlZCIsIndvcmsgdW5kZXIgdW5pdGVkIiwidW5kZXIgdW5pdGVkIHN0YXRlcyIsInN0YXRlcyBjb3B5cmlnaHQgbGF3IiwibGF3IGFuZCBpbmNsdWRpbmciLCJhbmQgaW5jbHVkaW5nIGFueSIsImluY2x1ZGluZyBhbnkgd29yayIsIndvcmsgY29udGFpbmluZyBvciIsImNvbnRhaW5pbmcgb3IgaW5jbHVkaW5nIiwib3IgaW5jbHVkaW5nIGFueSIsImluY2x1ZGluZyBhbnkgcG9ydGlvbiIsIm9yIG1vZGlmaWNhdGlvbnMgZWl0aGVyIiwibW9kaWZpY2F0aW9ucyBlaXRoZXIgdmVyYmF0aW0iLCJhbm90aGVyIGxhbmd1YWdlIGRlcml2YXRpdmUiLCJsYW5ndWFnZSBkZXJpdmF0aXZlIHdvcmsiLCJkZXJpdmF0aXZlIHdvcmsgYWxzbyIsIndvcmsgYWxzbyBpbmNsdWRlcyIsImFsc28gaW5jbHVkZXMgYW55IiwiaW5jbHVkZXMgYW55IHdvcmsiLCJ3aGljaCBjb21iaW5lcyBhbnkiLCJjb21iaW5lcyBhbnkgcG9ydGlvbiIsInBvcnRpb24gb2YgY292ZXJlZCIsIm9yIG1vZGlmaWNhdGlvbnMgd2l0aCIsIm1vZGlmaWNhdGlvbnMgd2l0aCBjb2RlIiwiMSA3IGV4dGVybmFsbHkiLCI3IGV4dGVybmFsbHkgZGVwbG95IiwibWVhbnMgdG8gZGVwbG95IiwidG8gZGVwbG95IHRoZSIsIndheSB0aGF0IG1heSIsInRoYW4geW91IHVzZWQiLCJ5b3UgdXNlZCB0byIsInByb3ZpZGUgYW55IHNlcnZpY2VzIiwic2VydmljZXMgdG8gYW55b25lIiwieW91IG9yIHVzZWQiLCJvciB1c2VkIGluIiwid2F5IHRvIGRlbGl2ZXIiLCJ0byBkZWxpdmVyIGFueSIsImRlbGl2ZXIgYW55IGNvbnRlbnQiLCJhbnkgY29udGVudCB0byIsIndoZXRoZXIgdGhlIGNvdmVyZWQiLCJ0byB0aG9zZSBwYXJ0aWVzIiwidGhvc2UgcGFydGllcyBtYWRlIiwicGFydGllcyBtYWRlIGF2YWlsYWJsZSIsInlvdSAxIDgiLCIxIDggaW50ZXJmYWNlIiwiOCBpbnRlcmZhY2UgbWVhbnMiLCJpbnRlcmZhY2UgbWVhbnMgaW50ZXJmYWNlcyIsIm1lYW5zIGludGVyZmFjZXMgZnVuY3Rpb25zIiwiaW50ZXJmYWNlcyBmdW5jdGlvbnMgcHJvcGVydGllcyIsImZ1bmN0aW9ucyBwcm9wZXJ0aWVzIGNsYXNzIiwicHJvcGVydGllcyBjbGFzcyBkZWZpbml0aW9ucyIsImNsYXNzIGRlZmluaXRpb25zIGFwaXMiLCJkZWZpbml0aW9ucyBhcGlzIGhlYWRlciIsImFwaXMgaGVhZGVyIGZpbGVzIiwiaGVhZGVyIGZpbGVzIGd1aWRzIiwiZmlsZXMgZ3VpZHMgdiIsImd1aWRzIHYgdGFibGVzIiwidiB0YWJsZXMgYW5kIiwidGFibGVzIGFuZCBvciIsImFuZCBvciBwcm90b2NvbHMiLCJvciBwcm90b2NvbHMgYWxsb3dpbmciLCJwcm90b2NvbHMgYWxsb3dpbmcgb25lIiwiYWxsb3dpbmcgb25lIHBpZWNlIiwib25lIHBpZWNlIG9mIiwib3IgaGFyZHdhcmUgdG8iLCJoYXJkd2FyZSB0byBjb21tdW5pY2F0ZSIsInRvIGNvbW11bmljYXRlIG9yIiwiY29tbXVuaWNhdGUgb3IgaW50ZXJvcGVyYXRlIiwiaW50ZXJvcGVyYXRlIHdpdGggYW5vdGhlciIsIndpdGggYW5vdGhlciBwaWVjZSIsImFub3RoZXIgcGllY2Ugb2YiLCJvciBoYXJkd2FyZSAxIiwiaGFyZHdhcmUgMSA5IiwiOSBtb2RpZmljYXRpb25zIG1lYW4iLCJieSBsaWNlbnNvciBhcyIsImxpY2Vuc29yIGFzIHN1Y2giLCJsaWNlbnNvciBzIGNvcHlyaWdodHMiLCJzIGNvcHlyaWdodHMgY292ZXIiLCJjb3B5cmlnaHRzIGNvdmVyIHRoZSIsImNvdmVyIHRoZSBvcmlnaW5hbCIsIm1heSByZXByb2R1Y2UgZGlzcGxheSIsImRpc2NsYWltZXJzIG9mIGxpY2Vuc29yIiwib2YgbGljZW5zb3IgYXMiLCJsaWNlbnNvciBhcyB0aGV5IiwibGljZW5zZSBiIHlvdSIsIjYgYyB5b3UiLCJhbnkgY2hhbmdlIGQiLCJjaGFuZ2UgZCB5b3UiLCJzaXRlIGFuZCBlIiwiYW5kIGUgaWYiLCJpbmNsdWRlIHRoZSBvYmplY3QiLCJjb2RlIG5vdGljZSBzZXQiLCJpbiB0aGUgYWJvdXQiLCJ0aGUgYWJvdXQgYm94IiwiYWJvdXQgYm94IG9yIiwiYm94IG9yIG90aGVyIiwib3Igb3RoZXIgYXBwcm9wcmlhdGUiLCJvdGhlciBhcHByb3ByaWF0ZSBwbGFjZSIsImFwcHJvcHJpYXRlIHBsYWNlIHdoZXJlIiwicGxhY2Ugd2hlcmUgb3RoZXIiLCJ3aGVyZSBvdGhlciBjb3B5cmlnaHQiLCJub3RpY2VzIGFyZSBwbGFjZWQiLCJhcmUgcGxhY2VkIGluY2x1ZGluZyIsInBsYWNlZCBpbmNsdWRpbmcgYW55IiwiaW5jbHVkaW5nIGFueSBwYWNrYWdpbmciLCJhbnkgcGFja2FnaW5nIG1hdGVyaWFscyIsInBhY2thZ2luZyBtYXRlcmlhbHMgMiIsIm1hdGVyaWFscyAyIDIiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChDKSAxOTkxLTIsIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIENyZWF0ZWQgMTk5MS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuTGljZW5zZSB0byBjb3B5IGFuZCB1c2UgdGhpcyBzb2Z0d2FyZSBpcyBncmFudGVkIHByb3ZpZGVkIHRoYXQgaXQgaXMgaWRlbnRpZmllZCBhcyB0aGUgXCJSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDUgTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtXCIgaW4gYWxsIG1hdGVyaWFsIG1lbnRpb25pbmcgb3IgcmVmZXJlbmNpbmcgdGhpcyBzb2Z0d2FyZSBvciB0aGlzIGZ1bmN0aW9uLlxuXG5MaWNlbnNlIGlzIGFsc28gZ3JhbnRlZCB0byBtYWtlIGFuZCB1c2UgZGVyaXZhdGl2ZSB3b3JrcyBwcm92aWRlZCB0aGF0IHN1Y2ggd29ya3MgYXJlIGlkZW50aWZpZWQgYXMgXCJkZXJpdmVkIGZyb20gdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIE1ENSBNZXNzYWdlLURpZ2VzdCBBbGdvcml0aG1cIiBpbiBhbGwgbWF0ZXJpYWwgbWVudGlvbmluZyBvciByZWZlcmVuY2luZyB0aGUgZGVyaXZlZCB3b3JrLlxuXG5SU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgY29uY2VybmluZyBlaXRoZXIgdGhlIG1lcmNoYW50YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIG9yIHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcGFydGljdWxhciBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCBcImFzIGlzXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkgb2YgYW55IGtpbmQuXG5cblRoZXNlIG5vdGljZXMgbXVzdCBiZSByZXRhaW5lZCBpbiBhbnkgY29waWVzIG9mIGFueSBwYXJ0IG9mIHRoaXMgZG9jdW1lbnRhdGlvbiBhbmQvb3Igc29mdHdhcmUuIl0sImxpY2Vuc2VJZHMiOlsiUlNBLU1EIl0sImtleXdvcmRzIjpbImMgMTk5MSAyIiwiMTk5MSAyIHJzYSIsIjIgcnNhIGRhdGEiLCJzZWN1cml0eSBpbmMgY3JlYXRlZCIsImluYyBjcmVhdGVkIDE5OTEiLCJjcmVhdGVkIDE5OTEgYWxsIiwiMTk5MSBhbGwgcmlnaHRzIiwicmlnaHRzIHJlc2VydmVkIGxpY2Vuc2UiLCJyZXNlcnZlZCBsaWNlbnNlIHRvIiwiY29weSBhbmQgdXNlIiwiaXQgaXMgaWRlbnRpZmllZCIsImlzIGlkZW50aWZpZWQgYXMiLCJhcyB0aGUgcnNhIiwib3IgcmVmZXJlbmNpbmcgdGhpcyIsInJlZmVyZW5jaW5nIHRoaXMgc29mdHdhcmUiLCJvciB0aGlzIGZ1bmN0aW9uIiwidGhpcyBmdW5jdGlvbiBsaWNlbnNlIiwiZnVuY3Rpb24gbGljZW5zZSBpcyIsImxpY2Vuc2UgaXMgYWxzbyIsImlzIGFsc28gZ3JhbnRlZCIsIm1ha2UgYW5kIHVzZSIsImFuZCB1c2UgZGVyaXZhdGl2ZSIsInVzZSBkZXJpdmF0aXZlIHdvcmtzIiwidGhhdCBzdWNoIHdvcmtzIiwid29ya3MgYXJlIGlkZW50aWZpZWQiLCJhcmUgaWRlbnRpZmllZCBhcyIsImlkZW50aWZpZWQgYXMgZGVyaXZlZCIsImFzIGRlcml2ZWQgZnJvbSIsImZyb20gdGhlIHJzYSIsIm9yIHJlZmVyZW5jaW5nIHRoZSIsInJlZmVyZW5jaW5nIHRoZSBkZXJpdmVkIiwiZGVyaXZlZCB3b3JrIHJzYSIsIndvcmsgcnNhIGRhdGEiLCJzZWN1cml0eSBpbmMgbWFrZXMiLCJubyByZXByZXNlbnRhdGlvbnMgY29uY2VybmluZyIsInJlcHJlc2VudGF0aW9ucyBjb25jZXJuaW5nIGVpdGhlciIsImNvbmNlcm5pbmcgZWl0aGVyIHRoZSIsImVpdGhlciB0aGUgbWVyY2hhbnRhYmlsaXR5IiwidGhlIG1lcmNoYW50YWJpbGl0eSBvZiIsIm1lcmNoYW50YWJpbGl0eSBvZiB0aGlzIiwib3IgdGhlIHN1aXRhYmlsaXR5IiwicGFydGljdWxhciBwdXJwb3NlIGl0Iiwia2luZCB0aGVzZSBub3RpY2VzIiwidGhlc2Ugbm90aWNlcyBtdXN0IiwiaW4gYW55IGNvcGllcyIsInRoaXMgZG9jdW1lbnRhdGlvbiBhbmQiLCJjb3B5cmlnaHQgYyAxOTkxIDIiLCJjIDE5OTEgMiByc2EiLCIxOTkxIDIgcnNhIGRhdGEiLCIyIHJzYSBkYXRhIHNlY3VyaXR5IiwiZGF0YSBzZWN1cml0eSBpbmMgY3JlYXRlZCIsInNlY3VyaXR5IGluYyBjcmVhdGVkIDE5OTEiLCJpbmMgY3JlYXRlZCAxOTkxIGFsbCIsImNyZWF0ZWQgMTk5MSBhbGwgcmlnaHRzIiwiMTk5MSBhbGwgcmlnaHRzIHJlc2VydmVkIiwiYWxsIHJpZ2h0cyByZXNlcnZlZCBsaWNlbnNlIiwicmlnaHRzIHJlc2VydmVkIGxpY2Vuc2UgdG8iLCJyZXNlcnZlZCBsaWNlbnNlIHRvIGNvcHkiLCJsaWNlbnNlIHRvIGNvcHkgYW5kIiwidG8gY29weSBhbmQgdXNlIiwiY29weSBhbmQgdXNlIHRoaXMiLCJhbmQgdXNlIHRoaXMgc29mdHdhcmUiLCJ1c2UgdGhpcyBzb2Z0d2FyZSBpcyIsImdyYW50ZWQgcHJvdmlkZWQgdGhhdCBpdCIsInRoYXQgaXQgaXMgaWRlbnRpZmllZCIsIml0IGlzIGlkZW50aWZpZWQgYXMiLCJpcyBpZGVudGlmaWVkIGFzIHRoZSIsImlkZW50aWZpZWQgYXMgdGhlIHJzYSIsImFzIHRoZSByc2EgZGF0YSIsIm1lbnRpb25pbmcgb3IgcmVmZXJlbmNpbmcgdGhpcyIsIm9yIHJlZmVyZW5jaW5nIHRoaXMgc29mdHdhcmUiLCJyZWZlcmVuY2luZyB0aGlzIHNvZnR3YXJlIG9yIiwic29mdHdhcmUgb3IgdGhpcyBmdW5jdGlvbiIsIm9yIHRoaXMgZnVuY3Rpb24gbGljZW5zZSIsInRoaXMgZnVuY3Rpb24gbGljZW5zZSBpcyIsImZ1bmN0aW9uIGxpY2Vuc2UgaXMgYWxzbyIsImxpY2Vuc2UgaXMgYWxzbyBncmFudGVkIiwiaXMgYWxzbyBncmFudGVkIHRvIiwiYWxzbyBncmFudGVkIHRvIG1ha2UiLCJ0byBtYWtlIGFuZCB1c2UiLCJtYWtlIGFuZCB1c2UgZGVyaXZhdGl2ZSIsImFuZCB1c2UgZGVyaXZhdGl2ZSB3b3JrcyIsInVzZSBkZXJpdmF0aXZlIHdvcmtzIHByb3ZpZGVkIiwid29ya3MgcHJvdmlkZWQgdGhhdCBzdWNoIiwicHJvdmlkZWQgdGhhdCBzdWNoIHdvcmtzIiwidGhhdCBzdWNoIHdvcmtzIGFyZSIsInN1Y2ggd29ya3MgYXJlIGlkZW50aWZpZWQiLCJ3b3JrcyBhcmUgaWRlbnRpZmllZCBhcyIsImFyZSBpZGVudGlmaWVkIGFzIGRlcml2ZWQiLCJpZGVudGlmaWVkIGFzIGRlcml2ZWQgZnJvbSIsImFzIGRlcml2ZWQgZnJvbSB0aGUiLCJkZXJpdmVkIGZyb20gdGhlIHJzYSIsImZyb20gdGhlIHJzYSBkYXRhIiwibWVudGlvbmluZyBvciByZWZlcmVuY2luZyB0aGUiLCJvciByZWZlcmVuY2luZyB0aGUgZGVyaXZlZCIsInJlZmVyZW5jaW5nIHRoZSBkZXJpdmVkIHdvcmsiLCJ0aGUgZGVyaXZlZCB3b3JrIHJzYSIsImRlcml2ZWQgd29yayByc2EgZGF0YSIsIndvcmsgcnNhIGRhdGEgc2VjdXJpdHkiLCJkYXRhIHNlY3VyaXR5IGluYyBtYWtlcyIsInNlY3VyaXR5IGluYyBtYWtlcyBubyIsImluYyBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMiLCJtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgY29uY2VybmluZyIsIm5vIHJlcHJlc2VudGF0aW9ucyBjb25jZXJuaW5nIGVpdGhlciIsInJlcHJlc2VudGF0aW9ucyBjb25jZXJuaW5nIGVpdGhlciB0aGUiLCJjb25jZXJuaW5nIGVpdGhlciB0aGUgbWVyY2hhbnRhYmlsaXR5IiwiZWl0aGVyIHRoZSBtZXJjaGFudGFiaWxpdHkgb2YiLCJ0aGUgbWVyY2hhbnRhYmlsaXR5IG9mIHRoaXMiLCJtZXJjaGFudGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSIsInNvZnR3YXJlIG9yIHRoZSBzdWl0YWJpbGl0eSIsIm9yIHRoZSBzdWl0YWJpbGl0eSBvZiIsInNvZnR3YXJlIGZvciBhbnkgcGFydGljdWxhciIsImFueSBwYXJ0aWN1bGFyIHB1cnBvc2UgaXQiLCJwYXJ0aWN1bGFyIHB1cnBvc2UgaXQgaXMiLCJpbXBsaWVkIHdhcnJhbnR5IG9mIGFueSIsImFueSBraW5kIHRoZXNlIG5vdGljZXMiLCJraW5kIHRoZXNlIG5vdGljZXMgbXVzdCIsInRoZXNlIG5vdGljZXMgbXVzdCBiZSIsInJldGFpbmVkIGluIGFueSBjb3BpZXMiLCJpbiBhbnkgY29waWVzIG9mIiwiY29waWVzIG9mIGFueSBwYXJ0IiwicGFydCBvZiB0aGlzIGRvY3VtZW50YXRpb24iLCJvZiB0aGlzIGRvY3VtZW50YXRpb24gYW5kIiwidGhpcyBkb2N1bWVudGF0aW9uIGFuZCBvciIsImRvY3VtZW50YXRpb24gYW5kIG9yIHNvZnR3YXJlIiwiY29weXJpZ2h0IGMgMTk5MSAyIHJzYSIsImMgMTk5MSAyIHJzYSBkYXRhIiwiMTk5MSAyIHJzYSBkYXRhIHNlY3VyaXR5IiwiMiByc2EgZGF0YSBzZWN1cml0eSBpbmMiLCJyc2EgZGF0YSBzZWN1cml0eSBpbmMgY3JlYXRlZCIsImRhdGEgc2VjdXJpdHkgaW5jIGNyZWF0ZWQgMTk5MSIsInNlY3VyaXR5IGluYyBjcmVhdGVkIDE5OTEgYWxsIiwiaW5jIGNyZWF0ZWQgMTk5MSBhbGwgcmlnaHRzIiwiY3JlYXRlZCAxOTkxIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCIxOTkxIGFsbCByaWdodHMgcmVzZXJ2ZWQgbGljZW5zZSIsImFsbCByaWdodHMgcmVzZXJ2ZWQgbGljZW5zZSB0byIsInJpZ2h0cyByZXNlcnZlZCBsaWNlbnNlIHRvIGNvcHkiLCJyZXNlcnZlZCBsaWNlbnNlIHRvIGNvcHkgYW5kIiwibGljZW5zZSB0byBjb3B5IGFuZCB1c2UiLCJ0byBjb3B5IGFuZCB1c2UgdGhpcyIsImNvcHkgYW5kIHVzZSB0aGlzIHNvZnR3YXJlIiwiYW5kIHVzZSB0aGlzIHNvZnR3YXJlIGlzIiwidXNlIHRoaXMgc29mdHdhcmUgaXMgZ3JhbnRlZCIsImlzIGdyYW50ZWQgcHJvdmlkZWQgdGhhdCBpdCIsImdyYW50ZWQgcHJvdmlkZWQgdGhhdCBpdCBpcyIsInByb3ZpZGVkIHRoYXQgaXQgaXMgaWRlbnRpZmllZCIsInRoYXQgaXQgaXMgaWRlbnRpZmllZCBhcyIsIml0IGlzIGlkZW50aWZpZWQgYXMgdGhlIiwiaXMgaWRlbnRpZmllZCBhcyB0aGUgcnNhIiwiaWRlbnRpZmllZCBhcyB0aGUgcnNhIGRhdGEiLCJhcyB0aGUgcnNhIGRhdGEgc2VjdXJpdHkiLCJtYXRlcmlhbCBtZW50aW9uaW5nIG9yIHJlZmVyZW5jaW5nIHRoaXMiLCJtZW50aW9uaW5nIG9yIHJlZmVyZW5jaW5nIHRoaXMgc29mdHdhcmUiLCJvciByZWZlcmVuY2luZyB0aGlzIHNvZnR3YXJlIG9yIiwicmVmZXJlbmNpbmcgdGhpcyBzb2Z0d2FyZSBvciB0aGlzIiwidGhpcyBzb2Z0d2FyZSBvciB0aGlzIGZ1bmN0aW9uIiwic29mdHdhcmUgb3IgdGhpcyBmdW5jdGlvbiBsaWNlbnNlIiwib3IgdGhpcyBmdW5jdGlvbiBsaWNlbnNlIGlzIiwidGhpcyBmdW5jdGlvbiBsaWNlbnNlIGlzIGFsc28iLCJmdW5jdGlvbiBsaWNlbnNlIGlzIGFsc28gZ3JhbnRlZCIsImxpY2Vuc2UgaXMgYWxzbyBncmFudGVkIHRvIiwiaXMgYWxzbyBncmFudGVkIHRvIG1ha2UiLCJhbHNvIGdyYW50ZWQgdG8gbWFrZSBhbmQiLCJncmFudGVkIHRvIG1ha2UgYW5kIHVzZSIsInRvIG1ha2UgYW5kIHVzZSBkZXJpdmF0aXZlIiwibWFrZSBhbmQgdXNlIGRlcml2YXRpdmUgd29ya3MiLCJhbmQgdXNlIGRlcml2YXRpdmUgd29ya3MgcHJvdmlkZWQiLCJ1c2UgZGVyaXZhdGl2ZSB3b3JrcyBwcm92aWRlZCB0aGF0IiwiZGVyaXZhdGl2ZSB3b3JrcyBwcm92aWRlZCB0aGF0IHN1Y2giLCJ3b3JrcyBwcm92aWRlZCB0aGF0IHN1Y2ggd29ya3MiLCJwcm92aWRlZCB0aGF0IHN1Y2ggd29ya3MgYXJlIiwidGhhdCBzdWNoIHdvcmtzIGFyZSBpZGVudGlmaWVkIiwic3VjaCB3b3JrcyBhcmUgaWRlbnRpZmllZCBhcyIsIndvcmtzIGFyZSBpZGVudGlmaWVkIGFzIGRlcml2ZWQiLCJhcmUgaWRlbnRpZmllZCBhcyBkZXJpdmVkIGZyb20iLCJpZGVudGlmaWVkIGFzIGRlcml2ZWQgZnJvbSB0aGUiLCJhcyBkZXJpdmVkIGZyb20gdGhlIHJzYSIsImRlcml2ZWQgZnJvbSB0aGUgcnNhIGRhdGEiLCJmcm9tIHRoZSByc2EgZGF0YSBzZWN1cml0eSIsIm1hdGVyaWFsIG1lbnRpb25pbmcgb3IgcmVmZXJlbmNpbmcgdGhlIiwibWVudGlvbmluZyBvciByZWZlcmVuY2luZyB0aGUgZGVyaXZlZCIsIm9yIHJlZmVyZW5jaW5nIHRoZSBkZXJpdmVkIHdvcmsiLCJyZWZlcmVuY2luZyB0aGUgZGVyaXZlZCB3b3JrIHJzYSIsInRoZSBkZXJpdmVkIHdvcmsgcnNhIGRhdGEiLCJkZXJpdmVkIHdvcmsgcnNhIGRhdGEgc2VjdXJpdHkiLCJ3b3JrIHJzYSBkYXRhIHNlY3VyaXR5IGluYyIsInJzYSBkYXRhIHNlY3VyaXR5IGluYyBtYWtlcyIsImRhdGEgc2VjdXJpdHkgaW5jIG1ha2VzIG5vIiwic2VjdXJpdHkgaW5jIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyIsImluYyBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgY29uY2VybmluZyIsIm1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBjb25jZXJuaW5nIGVpdGhlciIsIm5vIHJlcHJlc2VudGF0aW9ucyBjb25jZXJuaW5nIGVpdGhlciB0aGUiLCJyZXByZXNlbnRhdGlvbnMgY29uY2VybmluZyBlaXRoZXIgdGhlIG1lcmNoYW50YWJpbGl0eSIsImNvbmNlcm5pbmcgZWl0aGVyIHRoZSBtZXJjaGFudGFiaWxpdHkgb2YiLCJlaXRoZXIgdGhlIG1lcmNoYW50YWJpbGl0eSBvZiB0aGlzIiwidGhlIG1lcmNoYW50YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIiwibWVyY2hhbnRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgb3IiLCJ0aGlzIHNvZnR3YXJlIG9yIHRoZSBzdWl0YWJpbGl0eSIsInNvZnR3YXJlIG9yIHRoZSBzdWl0YWJpbGl0eSBvZiIsIm9yIHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIl19LHsibGljZW5zZVRleHRzIjpbIlJpY29oIFNvdXJjZSBDb2RlIFB1YmxpYyBMaWNlbnNlXG5cblZlcnNpb24gMS4wXG5cbiAgIDEuIERlZmluaXRpb25zLlxuXG4gICAgICAxLjEuIFwiQ29udHJpYnV0b3JcIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIDEuMi4gXCJDb250cmlidXRvciBWZXJzaW9uXCIgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLlxuXG4gICAgICAxLjMuIFwiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtXCIgbWVhbnMgYSB3ZWJzaXRlIG9yIGFueSBvdGhlciBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuXG5cbiAgICAgIDEuNC4gXCJFeGVjdXRhYmxlIENvZGVcIiBtZWFucyBHb3Zlcm5lZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuXG5cbiAgICAgIDEuNS4gXCJHb3Zlcm5lZCBDb2RlXCIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi5cblxuICAgICAgMS42LiBcIkxhcmdlciBXb3JrXCIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIEdvdmVybmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuNy4gXCJMaWNlbnNhYmxlXCIgbWVhbnMgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi5cblxuICAgICAgMS44LiBcIkxpY2Vuc2VcIiBtZWFucyB0aGlzIGRvY3VtZW50LlxuXG4gICAgICAxLjkuIFwiTW9kaWZpY2F0aW9uc1wiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBHb3Zlcm5lZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczpcblxuICAgICAgICAgKGEpIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgICAgIChiKSBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICAgICAxLjEwLiBcIk9yaWdpbmFsIENvZGVcIiBtZWFucyB0aGUgXCJQbGF0Zm9ybSBmb3IgSW5mb3JtYXRpb24gQXBwbGljYXRpb25zXCIgU291cmNlIENvZGUgYXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGJ5IFJTVi5cblxuICAgICAgMS4xMSBcIlBhdGVudCBDbGFpbXNcIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgdGhlIGdyYW50b3Igb2YgYSBsaWNlbnNlIHRoZXJldG8uXG5cbiAgICAgIDEuMTIuIFwiUlNWXCIgbWVhbnMgUmljb2ggU2lsaWNvbiBWYWxsZXksIEluYy4sIGEgQ2FsaWZvcm5pYSBjb3Jwb3JhdGlvbiB3aXRoIG9mZmljZXMgYXQgMjg4MiBTYW5kIEhpbGwgUm9hZCwgU3VpdGUgMTE1LCBNZW5sbyBQYXJrLCBDQSA5NDAyNS03MDIyLlxuXG4gICAgICAxLjEzLiBcIlNvdXJjZSBDb2RlXCIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBHb3Zlcm5lZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIEV4ZWN1dGFibGUgQ29kZSwgb3IgYSBsaXN0IG9mIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBHb3Zlcm5lZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS5cblxuICAgICAgMS4xNC4gXCJZb3VcIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBcIllvdVwiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcImNvbnRyb2xcIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgIDIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuXG5cbiAgICAgIDIuMS4gR3JhbnQgZnJvbSBSU1YuIFJTViBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgICAgKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuXG5cbiAgICAgIDIuMi4gQ29udHJpYnV0b3IgR3JhbnQuIEVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6XG5cbiAgICAgICAgIChhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIEdvdmVybmVkIENvZGUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAoaSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgKGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuXG5cbiAgIDMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy5cblxuICAgICAgMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLiBUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBHb3Zlcm5lZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuXG5cbiAgICAgIDMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLiBBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uIG9yIHZpYSBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSBDb2RlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIGFuIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuXG5cbiAgICAgIDMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gWW91IG11c3QgY2F1c2UgYWxsIEdvdmVybmVkIENvZGUgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgR292ZXJuZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSBSU1YgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiBSU1YgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIEdvdmVybmVkIENvZGUuXG5cbiAgICAgIDMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuXG5cbiAgICAgICAgIDMuNC4xLiBUaGlyZCBQYXJ0eSBDbGFpbXMuIElmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgcGFydHkgY2xhaW1zIGFuIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBpbiBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgb3IgY29kZSAob3IgaXRzIHV0aWxpemF0aW9uIHVuZGVyIHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCBcIkxFR0FMXCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluIHN1Y2gga25vd2xlZGdlIGFmdGVyIFlvdSBtYWtlIFlvdXIgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIFlvdSBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBZb3UgbWFrZSBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgUlNWIGFuZCBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBHb3Zlcm5lZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4gSW4gdGhlIGV2ZW50IHRoYXQgWW91IGFyZSBhIENvbnRyaWJ1dG9yLCBZb3UgcmVwcmVzZW50IHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgaW4gdGhlIExFR0FMIGZpbGUsIHlvdXIgTW9kaWZpY2F0aW9ucyBhcmUgeW91ciBvcmlnaW5hbCBjcmVhdGlvbnMgYW5kLCB0byB0aGUgYmVzdCBvZiB5b3VyIGtub3dsZWRnZSwgbm8gdGhpcmQgcGFydHkgaGFzIGFueSBjbGFpbSAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zKSByZWxhdGluZyB0byB5b3VyIE1vZGlmaWNhdGlvbnMuIFlvdSByZXByZXNlbnQgdGhhdCB0aGUgTEVHQUwgZmlsZSBpbmNsdWRlcyBjb21wbGV0ZSBkZXRhaWxzIG9mIGFueSBsaWNlbnNlIG9yIG90aGVyIHJlc3RyaWN0aW9uIGFzc29jaWF0ZWQgd2l0aCBhbnkgcGFydCBvZiB5b3VyIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgICAgIDMuNC4yLiBDb250cmlidXRvciBBUElzLiBJZiBZb3VyIE1vZGlmaWNhdGlvbiBpcyBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIFlvdSBvd24gb3IgY29udHJvbCBwYXRlbnRzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIHlvdSBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLlxuXG4gICAgICAzLjUuIFJlcXVpcmVkIE5vdGljZXMuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLCBhbmQgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUsIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gR292ZXJuZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIEdvdmVybmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIFJTViBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSBSU1YgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IFJTViBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci5cblxuICAgICAgMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBDb2RlIFZlcnNpb25zLiBZb3UgbWF5IGRpc3RyaWJ1dGUgR292ZXJuZWQgQ29kZSBpbiBFeGVjdXRhYmxlIENvZGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgR292ZXJuZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgcHJvbWluZW50IG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIEdvdmVybmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgR292ZXJuZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiBvZiBHb3Zlcm5lZCBDb2RlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgUlNWIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgUlNWIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBSU1Ygb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuXG5cbiAgICAgIDMuNy4gTGFyZ2VyIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBHb3Zlcm5lZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgR292ZXJuZWQgQ29kZS5cblxuICAgNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLlxuXG4gICBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZXRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIEdvdmVybmVkIENvZGUgZHVlIHRvIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC5cblxuICAgNS4gVHJhZGVtYXJrIFVzYWdlLlxuXG4gICAgICA1LjEuIEFkdmVydGlzaW5nIE1hdGVyaWFscy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGUgR292ZXJuZWQgQ29kZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6IFwiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBSaWNvaCBTaWxpY29uIFZhbGxleSwgSW5jLlwiXG5cbiAgICAgIDUuMi4gRW5kb3JzZW1lbnRzLiBUaGUgbmFtZXMgXCJSaWNvaCxcIiBcIlJpY29oIFNpbGljb24gVmFsbGV5LFwiIGFuZCBcIlJTVlwiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIENvbnRyaWJ1dG9yIFZlcnNpb25zIG9yIExhcmdlciBXb3JrcyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgUlNWLlxuXG4gICAgICA1LjMuIFByb2R1Y3QgTmFtZXMuIENvbnRyaWJ1dG9yIFZlcnNpb25zIGFuZCBMYXJnZXIgV29ya3MgbWF5IG5vdCBiZSBjYWxsZWQgXCJSaWNvaFwiIG5vciBtYXkgdGhlIHdvcmQgXCJSaWNvaFwiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgUlNWLlxuXG4gICA2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS5cblxuICAgICAgNi4xLiBOZXcgVmVyc2lvbnMuIFJTViBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuXG5cbiAgICAgIDYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4gT25jZSBHb3Zlcm5lZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggR292ZXJuZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgUlNWLiBObyBvbmUgb3RoZXIgdGhhbiBSU1YgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gR292ZXJuZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS5cblxuICAgR09WRVJORUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIEdPVkVSTkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIEdPVkVSTkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgR09WRVJORUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFJTViBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgR09WRVJORUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLlxuXG4gICA4LiBUZXJtaW5hdGlvbi5cblxuICAgICAgOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIEdvdmVybmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLlxuXG4gICAgICA4LjIuIElmIFlvdSBpbml0aWF0ZSBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24gYWdhaW5zdCBSU1Ygb3IgYSBDb250cmlidXRvciAoUlNWIG9yIHRoZSBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgXCJQYXJ0aWNpcGFudFwiKSBhbGxlZ2luZyB0aGF0OlxuXG4gICAgICAgICAoYSkgc3VjaCBQYXJ0aWNpcGFudCdzIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLlxuXG4gICAgICAgICAoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlIHByb3ZpZGVkIHRvIFlvdSBieSB0aGUgUGFydGljaXBhbnQsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE9yaWdpbmFsIENvZGUgb3IgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LlxuXG4gICAgICA4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50J3MgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS5cblxuICAgICAgOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uXG5cbiAgIDkuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LlxuXG4gICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBSU1YsIEFOWSBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIEdPVkVSTkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWSBPVEhFUiBQRVJTT04gRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEFUIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gVE8gVEhFIEVYVEVOVCBUSEFUIEFOWSBFWENMVVNJT04gT0YgREFNQUdFUyBBQk9WRSBJUyBOT1QgVkFMSUQsIFlPVSBBR1JFRSBUSEFUIElOIE5PIEVWRU5UIFdJTEwgUlNWJ1MgTElBQklMSVRZIFVOREVSIE9SIFJFTEFURUQgVE8gVEhJUyBBR1JFRU1FTlQgRVhDRUVEIEZJVkUgVEhPVVNBTkQgRE9MTEFSUyAoJDUsMDAwKS4gVEhFIEdPVkVSTkVEIENPREUgSVMgTk9UIElOVEVOREVEIEZPUiBVU0UgSU4gQ09OTkVDVElPTiBXSVRIIEFOWSBOVUNMRVIsIEFWSUFUSU9OLCBNQVNTIFRSQU5TSVQgT1IgTUVESUNBTCBBUFBMSUNBVElPTiBPUiBBTlkgT1RIRVIgSU5IRVJFTlRMWSBEQU5HRVJPVVMgQVBQTElDQVRJT04gVEhBVCBDT1VMRCBSRVNVTFQgSU4gREVBVEgsIFBFUlNPTkFMIElOSlVSWSwgQ0FUQVNUUk9QSElDIERBTUFHRSBPUiBNQVNTIERFU1RSVUNUSU9OLCBBTkQgWU9VIEFHUkVFIFRIQVQgTkVJVEhFUiBSU1YgTk9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgT0YgQU5ZIE5BVFVSRSBBUyBBIFJFU1VMVCBPRiBBTlkgU1VDSCBVU0UgT0YgVEhFIEdPVkVSTkVEIENPREUuXG5cbiAgIDEwLiBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzLlxuXG4gICBUaGUgR292ZXJuZWQgQ29kZSBpcyBhIFwiY29tbWVyY2lhbCBpdGVtLFwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiBcImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmVcIiBhbmQgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sXCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBHb3Zlcm5lZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi5cblxuICAgMTEuIE1pc2NlbGxhbmVvdXMuXG5cbiAgIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIHBhcnRpZXMgc3VibWl0IHRvIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBpbiBDYWxpZm9ybmlhIGFuZCBmdXJ0aGVyIGFncmVlIHRoYXQgYW55IGNhdXNlIG9mIGFjdGlvbiBhcmlzaW5nIHVuZGVyIG9yIHJlbGF0ZWQgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgYnJvdWdodCBpbiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLiBUaGUgbG9zaW5nIHBhcnR5IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXkncyBmZWVzIGFuZCBleHBlbnNlcy4gTm90d2l0aHN0YW5kaW5nIGFueXRoaW5nIHRvIHRoZSBjb250cmFyeSBoZXJlaW4sIFJTViBtYXkgc2VlayBpbmp1bmN0aXZlIHJlbGllZiByZWxhdGVkIHRvIGEgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50IGluIGFueSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS5cblxuICAgMTIuIFJlc3BvbnNpYmlsaXR5IGZvciBDbGFpbXMuXG5cbiAgIEV4Y2VwdCBpbiBjYXNlcyB3aGVyZSBhbm90aGVyIENvbnRyaWJ1dG9yIGhhcyBmYWlsZWQgdG8gY29tcGx5IHdpdGggU2VjdGlvbiAzLjQsIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIFlvdXIgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgR292ZXJuZWQgQ29kZSB5b3UgbWFkZSBhdmFpbGFibGUsIHRoZSByZXZlbnVlcyB5b3UgcmVjZWl2ZWQgZnJvbSB1dGlsaXppbmcgc3VjaCByaWdodHMsIGFuZCBvdGhlciByZWxldmFudCBmYWN0b3JzLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIGFmZmVjdGVkIHBhcnRpZXMgdG8gZGlzdHJpYnV0ZSByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIEVYSElCSVQgQVxuXG5cIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFJpY29oIFNvdXJjZSBDb2RlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LnJpc291cmNlLm9yZy9SUExcblxuU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuVGhpcyBjb2RlIHdhcyBpbml0aWFsbHkgZGV2ZWxvcGVkIGJ5IFJpY29oIFNpbGljb24gVmFsbGV5LCBJbmMuIFBvcnRpb25zIGNyZWF0ZWQgYnkgUmljb2ggU2lsaWNvbiBWYWxsZXksIEluYy4gYXJlIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuXG5Db250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uXCIiXSwibGljZW5zZUlkcyI6WyJSU0NQTCJdLCJrZXl3b3JkcyI6WyJtZWFucyBhIHdlYnNpdGUiLCJhIHdlYnNpdGUgb3IiLCJ3ZWJzaXRlIG9yIGFueSIsImFueSBvdGhlciBtZWNoYW5pc20iLCJvdGhlciBtZWNoYW5pc20gZ2VuZXJhbGx5IiwiNCBleGVjdXRhYmxlIGNvZGUiLCJleGVjdXRhYmxlIGNvZGUgbWVhbnMiLCJjb2RlIG1lYW5zIGdvdmVybmVkIiwibWVhbnMgZ292ZXJuZWQgY29kZSIsIjEgNSBnb3Zlcm5lZCIsIjUgZ292ZXJuZWQgY29kZSIsImdvdmVybmVkIGNvZGUgbWVhbnMiLCJ0aGVyZW9mIDEgNiIsIndoaWNoIGNvbWJpbmVzIGdvdmVybmVkIiwiY29tYmluZXMgZ292ZXJuZWQgY29kZSIsIjEgNyBsaWNlbnNhYmxlIiwiNyBsaWNlbnNhYmxlIG1lYW5zIiwibGljZW5zYWJsZSBtZWFucyB0aGUiLCJtZWFucyB0aGUgcmlnaHQiLCJoZXJlaW4gMSA4IiwibW9kaWZpY2F0aW9ucyB3aGVuIGdvdmVybmVkIiwid2hlbiBnb3Zlcm5lZCBjb2RlIiwibWVhbnMgdGhlIHBsYXRmb3JtIiwidGhlIHBsYXRmb3JtIGZvciIsInBsYXRmb3JtIGZvciBpbmZvcm1hdGlvbiIsImZvciBpbmZvcm1hdGlvbiBhcHBsaWNhdGlvbnMiLCJpbmZvcm1hdGlvbiBhcHBsaWNhdGlvbnMgc291cmNlIiwiY29kZSBhcyByZWxlYXNlZCIsImFzIHJlbGVhc2VkIHVuZGVyIiwibGljZW5zZSBieSByc3YiLCJieSByc3YgMSIsInJzdiAxIDExIiwiYnkgdGhlIGdyYW50b3IiLCJncmFudG9yIG9mIGEiLCJhIGxpY2Vuc2UgdGhlcmV0byIsImxpY2Vuc2UgdGhlcmV0byAxIiwidGhlcmV0byAxIDEyIiwiMSAxMiByc3YiLCIxMiByc3YgbWVhbnMiLCJyc3YgbWVhbnMgcmljb2giLCJtZWFucyByaWNvaCBzaWxpY29uIiwidmFsbGV5IGluYyBhIiwiaW5jIGEgY2FsaWZvcm5pYSIsImEgY2FsaWZvcm5pYSBjb3Jwb3JhdGlvbiIsImNhbGlmb3JuaWEgY29ycG9yYXRpb24gd2l0aCIsImNvcnBvcmF0aW9uIHdpdGggb2ZmaWNlcyIsIndpdGggb2ZmaWNlcyBhdCIsIm9mZmljZXMgYXQgMjg4MiIsImF0IDI4ODIgc2FuZCIsIjI4ODIgc2FuZCBoaWxsIiwic2FuZCBoaWxsIHJvYWQiLCJoaWxsIHJvYWQgc3VpdGUiLCJyb2FkIHN1aXRlIDExNSIsInN1aXRlIDExNSBtZW5sbyIsIjExNSBtZW5sbyBwYXJrIiwicGFyayBjYSA5NDAyNSIsImNhIDk0MDI1IDcwMjIiLCI5NDAyNSA3MDIyIDEiLCI3MDIyIDEgMTMiLCJnb3Zlcm5lZCBjb2RlIGZvciIsImluc3RhbGxhdGlvbiBvZiBleGVjdXRhYmxlIiwia25vd24gYXZhaWxhYmxlIGdvdmVybmVkIiwiYXZhaWxhYmxlIGdvdmVybmVkIGNvZGUiLCJnb3Zlcm5lZCBjb2RlIG9mIiwiY2hhcmdlIDEgMTQiLCIxNCB5b3UgbWVhbnMiLCIyIDEgZ3JhbnQiLCIxIGdyYW50IGZyb20iLCJncmFudCBmcm9tIHJzdiIsImZyb20gcnN2IHJzdiIsInJzdiByc3YgaGVyZWJ5IiwicnN2IGhlcmVieSBncmFudHMiLCJwb3J0aW9ucyB0aGVyZW9mIDIiLCJ0aGVyZW9mIDIgMiIsIm1vZGlmaWNhdGlvbnMgYXMgZ292ZXJuZWQiLCJhcyBnb3Zlcm5lZCBjb2RlIiwiZGlzcG9zZSBvZiBpIiwib2YgaSBtb2RpZmljYXRpb25zIiwiaSBtb2RpZmljYXRpb25zIG1hZGUiLCJzdWNoIGNvbWJpbmF0aW9uIDMiLCJjb21iaW5hdGlvbiAzIGRpc3RyaWJ1dGlvbiIsImdvdmVybmVkIGNvZGUgbWF5IiwiY29kZSB2ZXJzaW9uIGF2YWlsYWJsZSIsImF2YWlsYWJsZSB2aWEgYW4iLCJjYXVzZSBhbGwgZ292ZXJuZWQiLCJhbGwgZ292ZXJuZWQgY29kZSIsImdvdmVybmVkIGNvZGUgdG8iLCJjcmVhdGUgdGhhdCBnb3Zlcm5lZCIsInByb3ZpZGVkIGJ5IHJzdiIsImJ5IHJzdiBhbmQiLCJyc3YgYW5kIGluY2x1ZGluZyIsIm5hbWUgb2YgcnN2Iiwib2YgcnN2IGluIiwicnN2IGluIGEiLCJnb3Zlcm5lZCBjb2RlIDMiLCJwcm9wZXJ0eSBtYXR0ZXJzIDMiLCJtYXR0ZXJzIDMgNCIsIjMgNCAxIiwiNCAxIHRoaXJkIiwiMSB0aGlyZCBwYXJ0eSIsImFzIG5vdGlmeWluZyByc3YiLCJub3RpZnlpbmcgcnN2IGFuZCIsInJzdiBhbmQgYXBwcm9wcmlhdGUiLCJhbmQgYXBwcm9wcmlhdGUgbWFpbGluZyIsInJlY2VpdmVkIHRoZSBnb3Zlcm5lZCIsImdvdmVybmVkIGNvZGUgdGhhdCIsImJlZW4gb2J0YWluZWQgaW4iLCJvYnRhaW5lZCBpbiB0aGUiLCJldmVudCB0aGF0IHlvdSIsImFzIGRpc2Nsb3NlZCBpbiIsImRpc2Nsb3NlZCBpbiB0aGUiLCJsZWdhbCBmaWxlIHlvdXIiLCJmaWxlIHlvdXIgbW9kaWZpY2F0aW9ucyIsImNyZWF0aW9ucyBhbmQgdG8iLCJtb2RpZmljYXRpb25zIHlvdSByZXByZXNlbnQiLCJyZXByZXNlbnQgdGhhdCB0aGUiLCJ0aGF0IHRoZSBsZWdhbCIsImxlZ2FsIGZpbGUgaW5jbHVkZXMiLCJmaWxlIGluY2x1ZGVzIGNvbXBsZXRlIiwib3RoZXIgcmVzdHJpY3Rpb24gYXNzb2NpYXRlZCIsIm1vZGlmaWNhdGlvbnMgMyA0IiwiNCAyIGNvbnRyaWJ1dG9yIiwiMiBjb250cmlidXRvciBhcGlzIiwicmVsYXRpbmcgdG8gZ292ZXJuZWQiLCJnb3Zlcm5lZCBjb2RlIGlmIiwicmVjaXBpZW50cyBvZiBnb3Zlcm5lZCIsImdvdmVybmVkIGNvZGUgaG93ZXZlciIsImJlaGFsZiBvZiByc3YiLCJvZiByc3Ygb3IiLCJleGVjdXRhYmxlIGNvZGUgdmVyc2lvbnMiLCJjb2RlIHZlcnNpb25zIHlvdSIsIm1heSBkaXN0cmlidXRlIGdvdmVybmVkIiwiZGlzdHJpYnV0ZSBnb3Zlcm5lZCBjb2RlIiwiaW4gZXhlY3V0YWJsZSBjb2RlIiwiZXhlY3V0YWJsZSBjb2RlIGZvcm0iLCJjb2RlIGZvcm0gb25seSIsImZvciB0aGF0IGdvdmVybmVkIiwicHJvbWluZW50IG5vdGljZSBzdGF0aW5nIiwiY29kZSB2ZXJzaW9uIHJlbGF0ZWQiLCJjb2RlIHZlcnNpb24gZG9lcyIsImNvZGUgdmVyc2lvbiB1bmRlciIsIm5vdCBieSByc3YiLCJieSBjb21iaW5pbmcgZ292ZXJuZWQiLCJjb21iaW5pbmcgZ292ZXJuZWQgY29kZSIsImZvciB0aGUgZ292ZXJuZWQiLCJnb3Zlcm5lZCBjb2RlIDQiLCJhbnkgb2YgdGhldGVybXMiLCJvZiB0aGV0ZXJtcyBvZiIsInRoZXRlcm1zIG9mIHRoaXMiLCJnb3Zlcm5lZCBjb2RlIGR1ZSIsIml0IDUgdHJhZGVtYXJrIiwiNSB0cmFkZW1hcmsgdXNhZ2UiLCJ0cmFkZW1hcmsgdXNhZ2UgNSIsInVzYWdlIDUgMSIsIjUgMSBhZHZlcnRpc2luZyIsImdvdmVybmVkIGNvZGUgbXVzdCIsInZhbGxleSBpbmMgNSIsImluYyA1IDIiLCI1IDIgZW5kb3JzZW1lbnRzIiwidGhlIG5hbWVzIHJpY29oIiwibmFtZXMgcmljb2ggcmljb2giLCJyaWNvaCByaWNvaCBzaWxpY29uIiwic2lsaWNvbiB2YWxsZXkgYW5kIiwidmFsbGV5IGFuZCByc3YiLCJhbmQgcnN2IG11c3QiLCJyc3YgbXVzdCBub3QiLCJvZiByc3YgNSIsInJzdiA1IDMiLCI1IDMgcHJvZHVjdCIsImJlIGNhbGxlZCByaWNvaCIsImNhbGxlZCByaWNvaCBub3IiLCJyaWNvaCBub3IgbWF5IiwidGhlIHdvcmQgcmljb2giLCJ3b3JkIHJpY29oIGFwcGVhciIsInJpY29oIGFwcGVhciBpbiIsIm9mIHJzdiA2IiwicnN2IDYgdmVyc2lvbnMiLCJuZXcgdmVyc2lvbnMgcnN2IiwidmVyc2lvbnMgcnN2IG1heSIsInJzdiBtYXkgcHVibGlzaCIsInZlcnNpb25zIG9uY2UgZ292ZXJuZWQiLCJvbmNlIGdvdmVybmVkIGNvZGUiLCJnb3Zlcm5lZCBjb2RlIGhhcyIsInVzZSBzdWNoIGdvdmVybmVkIiwic3VjaCBnb3Zlcm5lZCBjb2RlIiwicHVibGlzaGVkIGJ5IHJzdiIsImJ5IHJzdiBubyIsInJzdiBubyBvbmUiLCJvdGhlciB0aGFuIHJzdiIsInRoYW4gcnN2IGhhcyIsInJzdiBoYXMgdGhlIiwiYXBwbGljYWJsZSB0byBnb3Zlcm5lZCIsImdvdmVybmVkIGNvZGUgY3JlYXRlZCIsIm9mIHdhcnJhbnR5IGdvdmVybmVkIiwid2FycmFudHkgZ292ZXJuZWQgY29kZSIsInRoYXQgdGhlIGdvdmVybmVkIiwic2hvdWxkIGFueSBnb3Zlcm5lZCIsImdvdmVybmVkIGNvZGUgcHJvdmUiLCJ5b3Ugbm90IHJzdiIsIm5vdCByc3Ygb3IiXX0seyJsaWNlbnNlVGV4dHMiOlsiUmRpc2MgKHRoaXMgcHJvZ3JhbSkgd2FzIGRldmVsb3BlZCBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGFuZCBpcyBwcm92aWRlZCBmb3IgdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIG9uIGFsbCB0YXBlIG1lZGlhIGFuZCBhcyBhIHBhcnQgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IgcGFydC4gVXNlcnMgbWF5IGNvcHkgb3IgbW9kaWZ5IFJkaXNjIHdpdGhvdXQgY2hhcmdlLCBhbmQgdGhleSBtYXkgZnJlZWx5IGRpc3RyaWJ1dGUgaXQuXG5cblJESVNDIElTIFBST1ZJREVEIEFTIElTIFdJVEggTk8gV0FSUkFOVElFUyBPRiBBTlkgS0lORCBJTkNMVURJTkcgVEhFIFdBUlJBTlRJRVMgT0YgREVTSUdOLCBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBBUklTSU5HIEZST00gQSBDT1VSU0UgT0YgREVBTElORywgVVNBR0UgT1IgVFJBREUgUFJBQ1RJQ0UuXG5cblJkaXNjIGlzIHByb3ZpZGVkIHdpdGggbm8gc3VwcG9ydCBhbmQgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiBvbiB0aGUgcGFydCBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLCBtb2RpZmljYXRpb24gb3IgZW5oYW5jZW1lbnQuXG5cblNVTiBNSUNST1NZU1RFTVMsIElOQy4gU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBJTkZSSU5HRU1FTlQgT0YgQ09QWVJJR0hUUywgVFJBREUgU0VDUkVUUyBPUiBBTlkgUEFURU5UUyBCWSBSRElTQyBPUiBBTlkgUEFSVCBUSEVSRU9GLlxuXG5JbiBubyBldmVudCB3aWxsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYmUgbGlhYmxlIGZvciBhbnkgbG9zdCByZXZlbnVlIG9yIHByb2ZpdHMgb3Igb3RoZXIgc3BlY2lhbCwgaW5kaXJlY3QgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgZXZlbiBpZiBTdW4gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLlxuXG5TdW4gTWljcm9zeXN0ZW1zLCBJbmMuXG5cbjI1NTAgR2FyY2lhIEF2ZW51ZVxuXG5Nb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhIDk0MDQzIl0sImxpY2Vuc2VJZHMiOlsiUmRpc2MiXSwia2V5d29yZHMiOlsicmRpc2MgdGhpcyBwcm9ncmFtIiwicHJvZ3JhbSB3YXMgZGV2ZWxvcGVkIiwiZGV2ZWxvcGVkIGJ5IHN1biIsImluYyBhbmQgaXMiLCJhbmQgaXMgcHJvdmlkZWQiLCJwcm92aWRlZCBmb3IgdW5yZXN0cmljdGVkIiwiZm9yIHVucmVzdHJpY3RlZCB1c2UiLCJ1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIiwidGhhdCB0aGlzIGxlZ2VuZCIsInRoaXMgbGVnZW5kIGlzIiwibGVnZW5kIGlzIGluY2x1ZGVkIiwiaXMgaW5jbHVkZWQgb24iLCJpbmNsdWRlZCBvbiBhbGwiLCJvbiBhbGwgdGFwZSIsImFsbCB0YXBlIG1lZGlhIiwidGFwZSBtZWRpYSBhbmQiLCJtZWRpYSBhbmQgYXMiLCJ0aGUgc29mdHdhcmUgcHJvZ3JhbSIsInNvZnR3YXJlIHByb2dyYW0gaW4iLCJwcm9ncmFtIGluIHdob2xlIiwib3IgcGFydCB1c2VycyIsInBhcnQgdXNlcnMgbWF5IiwidXNlcnMgbWF5IGNvcHkiLCJtYXkgY29weSBvciIsImNvcHkgb3IgbW9kaWZ5Iiwib3IgbW9kaWZ5IHJkaXNjIiwibW9kaWZ5IHJkaXNjIHdpdGhvdXQiLCJyZGlzYyB3aXRob3V0IGNoYXJnZSIsImNoYXJnZSBhbmQgdGhleSIsImFuZCB0aGV5IG1heSIsInRoZXkgbWF5IGZyZWVseSIsImZyZWVseSBkaXN0cmlidXRlIGl0IiwiZGlzdHJpYnV0ZSBpdCByZGlzYyIsIml0IHJkaXNjIGlzIiwib2YgZGVzaWduIG1lcmNoYW50aWJpbGl0eSIsImRlc2lnbiBtZXJjaGFudGliaWxpdHkgYW5kIiwicHVycG9zZSBvciBhcmlzaW5nIiwidHJhZGUgcHJhY3RpY2UgcmRpc2MiLCJwcmFjdGljZSByZGlzYyBpcyIsInBhcnQgb2Ygc3VuIiwibWljcm9zeXN0ZW1zIGluYyB0byIsImluYyB0byBhc3Npc3QiLCJvciBlbmhhbmNlbWVudCBzdW4iLCJlbmhhbmNlbWVudCBzdW4gbWljcm9zeXN0ZW1zIiwibWljcm9zeXN0ZW1zIGluYyBzaGFsbCIsImluYyBzaGFsbCBoYXZlIiwicGF0ZW50cyBieSByZGlzYyIsImJ5IHJkaXNjIG9yIiwicmRpc2Mgb3IgYW55IiwicGFydCB0aGVyZW9mIGluIiwidGhlcmVvZiBpbiBubyIsIndpbGwgc3VuIG1pY3Jvc3lzdGVtcyIsIm1pY3Jvc3lzdGVtcyBpbmMgYmUiLCJzdWNoIGRhbWFnZXMgc3VuIiwiZGFtYWdlcyBzdW4gbWljcm9zeXN0ZW1zIiwibWljcm9zeXN0ZW1zIGluYyAyNTUwIiwiaW5jIDI1NTAgZ2FyY2lhIiwiMjU1MCBnYXJjaWEgYXZlbnVlIiwiZ2FyY2lhIGF2ZW51ZSBtb3VudGFpbiIsImF2ZW51ZSBtb3VudGFpbiB2aWV3IiwibW91bnRhaW4gdmlldyBjYWxpZm9ybmlhIiwidmlldyBjYWxpZm9ybmlhIDk0MDQzIiwicmRpc2MgdGhpcyBwcm9ncmFtIHdhcyIsInRoaXMgcHJvZ3JhbSB3YXMgZGV2ZWxvcGVkIiwicHJvZ3JhbSB3YXMgZGV2ZWxvcGVkIGJ5Iiwid2FzIGRldmVsb3BlZCBieSBzdW4iLCJkZXZlbG9wZWQgYnkgc3VuIG1pY3Jvc3lzdGVtcyIsIm1pY3Jvc3lzdGVtcyBpbmMgYW5kIGlzIiwiaW5jIGFuZCBpcyBwcm92aWRlZCIsImFuZCBpcyBwcm92aWRlZCBmb3IiLCJpcyBwcm92aWRlZCBmb3IgdW5yZXN0cmljdGVkIiwicHJvdmlkZWQgZm9yIHVucmVzdHJpY3RlZCB1c2UiLCJmb3IgdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCIsInVucmVzdHJpY3RlZCB1c2UgcHJvdmlkZWQgdGhhdCIsInVzZSBwcm92aWRlZCB0aGF0IHRoaXMiLCJwcm92aWRlZCB0aGF0IHRoaXMgbGVnZW5kIiwidGhhdCB0aGlzIGxlZ2VuZCBpcyIsInRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIiwibGVnZW5kIGlzIGluY2x1ZGVkIG9uIiwiaXMgaW5jbHVkZWQgb24gYWxsIiwiaW5jbHVkZWQgb24gYWxsIHRhcGUiLCJvbiBhbGwgdGFwZSBtZWRpYSIsImFsbCB0YXBlIG1lZGlhIGFuZCIsInRhcGUgbWVkaWEgYW5kIGFzIiwibWVkaWEgYW5kIGFzIGEiLCJhbmQgYXMgYSBwYXJ0Iiwib2YgdGhlIHNvZnR3YXJlIHByb2dyYW0iLCJ0aGUgc29mdHdhcmUgcHJvZ3JhbSBpbiIsInNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUiLCJwcm9ncmFtIGluIHdob2xlIG9yIiwid2hvbGUgb3IgcGFydCB1c2VycyIsIm9yIHBhcnQgdXNlcnMgbWF5IiwicGFydCB1c2VycyBtYXkgY29weSIsInVzZXJzIG1heSBjb3B5IG9yIiwibWF5IGNvcHkgb3IgbW9kaWZ5IiwiY29weSBvciBtb2RpZnkgcmRpc2MiLCJvciBtb2RpZnkgcmRpc2Mgd2l0aG91dCIsIm1vZGlmeSByZGlzYyB3aXRob3V0IGNoYXJnZSIsInJkaXNjIHdpdGhvdXQgY2hhcmdlIGFuZCIsIndpdGhvdXQgY2hhcmdlIGFuZCB0aGV5IiwiY2hhcmdlIGFuZCB0aGV5IG1heSIsImFuZCB0aGV5IG1heSBmcmVlbHkiLCJ0aGV5IG1heSBmcmVlbHkgZGlzdHJpYnV0ZSIsIm1heSBmcmVlbHkgZGlzdHJpYnV0ZSBpdCIsImZyZWVseSBkaXN0cmlidXRlIGl0IHJkaXNjIiwiZGlzdHJpYnV0ZSBpdCByZGlzYyBpcyIsIml0IHJkaXNjIGlzIHByb3ZpZGVkIiwicmRpc2MgaXMgcHJvdmlkZWQgYXMiLCJ3YXJyYW50aWVzIG9mIGRlc2lnbiBtZXJjaGFudGliaWxpdHkiLCJvZiBkZXNpZ24gbWVyY2hhbnRpYmlsaXR5IGFuZCIsImRlc2lnbiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MiLCJwYXJ0aWN1bGFyIHB1cnBvc2Ugb3IgYXJpc2luZyIsInB1cnBvc2Ugb3IgYXJpc2luZyBmcm9tIiwib3IgdHJhZGUgcHJhY3RpY2UgcmRpc2MiLCJ0cmFkZSBwcmFjdGljZSByZGlzYyBpcyIsInByYWN0aWNlIHJkaXNjIGlzIHByb3ZpZGVkIiwicmRpc2MgaXMgcHJvdmlkZWQgd2l0aCIsInRoZSBwYXJ0IG9mIHN1biIsInBhcnQgb2Ygc3VuIG1pY3Jvc3lzdGVtcyIsInN1biBtaWNyb3N5c3RlbXMgaW5jIHRvIiwibWljcm9zeXN0ZW1zIGluYyB0byBhc3Npc3QiLCJpbmMgdG8gYXNzaXN0IGluIiwibW9kaWZpY2F0aW9uIG9yIGVuaGFuY2VtZW50IHN1biIsIm9yIGVuaGFuY2VtZW50IHN1biBtaWNyb3N5c3RlbXMiLCJlbmhhbmNlbWVudCBzdW4gbWljcm9zeXN0ZW1zIGluYyIsInN1biBtaWNyb3N5c3RlbXMgaW5jIHNoYWxsIiwibWljcm9zeXN0ZW1zIGluYyBzaGFsbCBoYXZlIiwiaW5jIHNoYWxsIGhhdmUgbm8iLCJhbnkgcGF0ZW50cyBieSByZGlzYyIsInBhdGVudHMgYnkgcmRpc2Mgb3IiLCJieSByZGlzYyBvciBhbnkiLCJyZGlzYyBvciBhbnkgcGFydCIsImFueSBwYXJ0IHRoZXJlb2YgaW4iLCJwYXJ0IHRoZXJlb2YgaW4gbm8iLCJ0aGVyZW9mIGluIG5vIGV2ZW50IiwiZXZlbnQgd2lsbCBzdW4gbWljcm9zeXN0ZW1zIiwid2lsbCBzdW4gbWljcm9zeXN0ZW1zIGluYyIsInN1biBtaWNyb3N5c3RlbXMgaW5jIGJlIiwibWljcm9zeXN0ZW1zIGluYyBiZSBsaWFibGUiLCJhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGV2ZW4iLCJkYW1hZ2VzIGV2ZW4gaWYgc3VuIiwib2Ygc3VjaCBkYW1hZ2VzIHN1biIsInN1Y2ggZGFtYWdlcyBzdW4gbWljcm9zeXN0ZW1zIiwiZGFtYWdlcyBzdW4gbWljcm9zeXN0ZW1zIGluYyIsInN1biBtaWNyb3N5c3RlbXMgaW5jIDI1NTAiLCJtaWNyb3N5c3RlbXMgaW5jIDI1NTAgZ2FyY2lhIiwiaW5jIDI1NTAgZ2FyY2lhIGF2ZW51ZSIsIjI1NTAgZ2FyY2lhIGF2ZW51ZSBtb3VudGFpbiIsImdhcmNpYSBhdmVudWUgbW91bnRhaW4gdmlldyIsImF2ZW51ZSBtb3VudGFpbiB2aWV3IGNhbGlmb3JuaWEiLCJtb3VudGFpbiB2aWV3IGNhbGlmb3JuaWEgOTQwNDMiLCJyZGlzYyB0aGlzIHByb2dyYW0gd2FzIGRldmVsb3BlZCIsInRoaXMgcHJvZ3JhbSB3YXMgZGV2ZWxvcGVkIGJ5IiwicHJvZ3JhbSB3YXMgZGV2ZWxvcGVkIGJ5IHN1biIsIndhcyBkZXZlbG9wZWQgYnkgc3VuIG1pY3Jvc3lzdGVtcyIsImRldmVsb3BlZCBieSBzdW4gbWljcm9zeXN0ZW1zIGluYyIsImJ5IHN1biBtaWNyb3N5c3RlbXMgaW5jIGFuZCIsInN1biBtaWNyb3N5c3RlbXMgaW5jIGFuZCBpcyIsIm1pY3Jvc3lzdGVtcyBpbmMgYW5kIGlzIHByb3ZpZGVkIiwiaW5jIGFuZCBpcyBwcm92aWRlZCBmb3IiLCJhbmQgaXMgcHJvdmlkZWQgZm9yIHVucmVzdHJpY3RlZCIsImlzIHByb3ZpZGVkIGZvciB1bnJlc3RyaWN0ZWQgdXNlIiwicHJvdmlkZWQgZm9yIHVucmVzdHJpY3RlZCB1c2UgcHJvdmlkZWQiLCJmb3IgdW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IiwidW5yZXN0cmljdGVkIHVzZSBwcm92aWRlZCB0aGF0IHRoaXMiLCJ1c2UgcHJvdmlkZWQgdGhhdCB0aGlzIGxlZ2VuZCIsInByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMiLCJ0aGF0IHRoaXMgbGVnZW5kIGlzIGluY2x1ZGVkIiwidGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24iLCJsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIiwiaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUiLCJpbmNsdWRlZCBvbiBhbGwgdGFwZSBtZWRpYSIsIm9uIGFsbCB0YXBlIG1lZGlhIGFuZCIsImFsbCB0YXBlIG1lZGlhIGFuZCBhcyIsInRhcGUgbWVkaWEgYW5kIGFzIGEiLCJtZWRpYSBhbmQgYXMgYSBwYXJ0IiwiYW5kIGFzIGEgcGFydCBvZiIsImEgcGFydCBvZiB0aGUgc29mdHdhcmUiLCJwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIiwib2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4iLCJ0aGUgc29mdHdhcmUgcHJvZ3JhbSBpbiB3aG9sZSIsInNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IiLCJwcm9ncmFtIGluIHdob2xlIG9yIHBhcnQiLCJpbiB3aG9sZSBvciBwYXJ0IHVzZXJzIiwid2hvbGUgb3IgcGFydCB1c2VycyBtYXkiLCJvciBwYXJ0IHVzZXJzIG1heSBjb3B5IiwicGFydCB1c2VycyBtYXkgY29weSBvciIsInVzZXJzIG1heSBjb3B5IG9yIG1vZGlmeSIsIm1heSBjb3B5IG9yIG1vZGlmeSByZGlzYyIsImNvcHkgb3IgbW9kaWZ5IHJkaXNjIHdpdGhvdXQiLCJvciBtb2RpZnkgcmRpc2Mgd2l0aG91dCBjaGFyZ2UiLCJtb2RpZnkgcmRpc2Mgd2l0aG91dCBjaGFyZ2UgYW5kIiwicmRpc2Mgd2l0aG91dCBjaGFyZ2UgYW5kIHRoZXkiLCJ3aXRob3V0IGNoYXJnZSBhbmQgdGhleSBtYXkiLCJjaGFyZ2UgYW5kIHRoZXkgbWF5IGZyZWVseSIsImFuZCB0aGV5IG1heSBmcmVlbHkgZGlzdHJpYnV0ZSIsInRoZXkgbWF5IGZyZWVseSBkaXN0cmlidXRlIGl0IiwibWF5IGZyZWVseSBkaXN0cmlidXRlIGl0IHJkaXNjIiwiZnJlZWx5IGRpc3RyaWJ1dGUgaXQgcmRpc2MgaXMiLCJkaXN0cmlidXRlIGl0IHJkaXNjIGlzIHByb3ZpZGVkIl19LHsibGljZW5zZVRleHRzIjpbIlxuXG4gICAxLiBZb3UgbWF5IG1ha2UgYW5kIGdpdmUgYXdheSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIHNvdXJjZSBmb3JtIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBkdXBsaWNhdGUgYWxsIG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgYXNzb2NpYXRlZCBkaXNjbGFpbWVycy5cblxuICAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBpbiBhbnkgd2F5LCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzpcblxuICAgYSkgcGxhY2UgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBQdWJsaWMgRG9tYWluIG9yIG90aGVyd2lzZSBtYWtlIHRoZW0gRnJlZWx5IEF2YWlsYWJsZSwgc3VjaCBhcyBieSBwb3N0aW5nIHNhaWQgbW9kaWZpY2F0aW9ucyB0byBVc2VuZXQgb3IgYW4gZXF1aXZhbGVudCBtZWRpdW0sIG9yIGJ5IGFsbG93aW5nIHRoZSBhdXRob3IgdG8gaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHNvZnR3YXJlLlxuXG4gICBiKSB1c2UgdGhlIG1vZGlmaWVkIHNvZnR3YXJlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uLlxuXG4gICBjKSBnaXZlIG5vbi1zdGFuZGFyZCBiaW5hcmllcyBub24tc3RhbmRhcmQgbmFtZXMsIHdpdGggaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgb3JpZ2luYWwgc29mdHdhcmUgZGlzdHJpYnV0aW9uLlxuXG4gICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgYXV0aG9yLlxuXG4gICAzLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIGluIG9iamVjdCBjb2RlIG9yIGJpbmFyeSBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzpcblxuICAgYSkgZGlzdHJpYnV0ZSB0aGUgYmluYXJpZXMgYW5kIGxpYnJhcnkgZmlsZXMgb2YgdGhlIHNvZnR3YXJlLCB0b2dldGhlciB3aXRoIGluc3RydWN0aW9ucyAoaW4gdGhlIG1hbnVhbCBwYWdlIG9yIGVxdWl2YWxlbnQpIG9uIHdoZXJlIHRvIGdldCB0aGUgb3JpZ2luYWwgZGlzdHJpYnV0aW9uLlxuXG4gICBiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZiB0aGUgc29mdHdhcmUuXG5cbiAgIGMpIGdpdmUgbm9uLXN0YW5kYXJkIGJpbmFyaWVzIG5vbi1zdGFuZGFyZCBuYW1lcywgd2l0aCBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSBkaXN0cmlidXRpb24uXG5cbiAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBhdXRob3IuXG5cbiAgIDQuIFlvdSBtYXkgbW9kaWZ5IGFuZCBpbmNsdWRlIHRoZSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBpbnRvIGFueSBvdGhlciBzb2Z0d2FyZSAocG9zc2libHkgY29tbWVyY2lhbCkuIEJ1dCBzb21lIGZpbGVzIGluIHRoZSBkaXN0cmlidXRpb24gYXJlIG5vdCB3cml0dGVuIGJ5IHRoZSBhdXRob3IsIHNvIHRoYXQgdGhleSBhcmUgbm90IHVuZGVyIHRoZXNlIHRlcm1zLlxuXG4gICBGb3IgdGhlIGxpc3Qgb2YgdGhvc2UgZmlsZXMgYW5kIHRoZWlyIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIExFR0FMLlxuXG4gICA1LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZCBhcyBvdXRwdXQgZnJvbSB0aGUgc29mdHdhcmUgZG8gbm90IGF1dG9tYXRpY2FsbHkgZmFsbCB1bmRlciB0aGUgY29weXJpZ2h0IG9mIHRoZSBzb2Z0d2FyZSwgYnV0IGJlbG9uZyB0byB3aG9tZXZlciBnZW5lcmF0ZWQgdGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcyBzb2Z0d2FyZS5cblxuICAgNi4gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiJdLCJsaWNlbnNlSWRzIjpbIlJ1YnkiXSwia2V5d29yZHMiOlsibWVkaXVtIG9yIGJ5IiwiYWxsb3dpbmcgdGhlIGF1dGhvciIsImF1dGhvciB0byBpbmNsdWRlIiwic29mdHdhcmUgYiB1c2UiLCJtb2RpZmllZCBzb2Z0d2FyZSBvbmx5Iiwic29mdHdhcmUgb25seSB3aXRoaW4iLCJvcmdhbml6YXRpb24gYyBnaXZlIiwidGhlIGF1dGhvciAzIiwiYXV0aG9yIDMgeW91IiwiZGlzdHJpYnV0ZSB0aGUgYmluYXJpZXMiLCJ0aGUgYmluYXJpZXMgYW5kIiwiYmluYXJpZXMgYW5kIGxpYnJhcnkiLCJsaWJyYXJ5IGZpbGVzIG9mIiwidGhlIHNvZnR3YXJlIHRvZ2V0aGVyIiwic29mdHdhcmUgdG9nZXRoZXIgd2l0aCIsIm9yaWdpbmFsIGRpc3RyaWJ1dGlvbiBiIiwiZGlzdHJpYnV0aW9uIGIgYWNjb21wYW55Iiwic29mdHdhcmUgYyBnaXZlIiwidGhlIGF1dGhvciA0IiwiYXV0aG9yIDQgeW91IiwibW9kaWZ5IGFuZCBpbmNsdWRlIiwiaW5jbHVkZSB0aGUgcGFydCIsInRoZSBzb2Z0d2FyZSBpbnRvIiwic29mdHdhcmUgaW50byBhbnkiLCJpbnRvIGFueSBvdGhlciIsIm90aGVyIHNvZnR3YXJlIHBvc3NpYmx5Iiwic29mdHdhcmUgcG9zc2libHkgY29tbWVyY2lhbCIsInBvc3NpYmx5IGNvbW1lcmNpYWwgYnV0IiwiY29tbWVyY2lhbCBidXQgc29tZSIsImJ1dCBzb21lIGZpbGVzIiwic29tZSBmaWxlcyBpbiIsImRpc3RyaWJ1dGlvbiBhcmUgbm90IiwiYXJlIG5vdCB3cml0dGVuIiwibm90IHdyaXR0ZW4gYnkiLCJ3cml0dGVuIGJ5IHRoZSIsInRoZSBhdXRob3Igc28iLCJhdXRob3Igc28gdGhhdCIsIm5vdCB1bmRlciB0aGVzZSIsInRoZXNlIHRlcm1zIGZvciIsImZvciB0aGUgbGlzdCIsImxpc3Qgb2YgdGhvc2UiLCJmaWxlcyBhbmQgdGhlaXIiLCJhbmQgdGhlaXIgY29weWluZyIsInRoZWlyIGNvcHlpbmcgY29uZGl0aW9ucyIsImNvcHlpbmcgY29uZGl0aW9ucyBzZWUiLCJjb25kaXRpb25zIHNlZSB0aGUiLCJmaWxlIGxlZ2FsIDUiLCJsZWdhbCA1IHRoZSIsIjUgdGhlIHNjcmlwdHMiLCJ0aGUgc29mdHdhcmUgZG8iLCJzb2Z0d2FyZSBkbyBub3QiLCJjb3B5cmlnaHQgb2YgdGhlIiwic29mdHdhcmUgYnV0IGJlbG9uZyIsInRoaXMgc29mdHdhcmUgNiIsInNvZnR3YXJlIDYgdGhpcyIsIjYgdGhpcyBzb2Z0d2FyZSIsImZvcm0gb2YgdGhlIHNvZnR3YXJlIiwic29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiBwcm92aWRlZCIsInNvZnR3YXJlIGluIGFueSB3YXkiLCJlcXVpdmFsZW50IG1lZGl1bSBvciBieSIsIm1lZGl1bSBvciBieSBhbGxvd2luZyIsImJ5IGFsbG93aW5nIHRoZSBhdXRob3IiLCJhbGxvd2luZyB0aGUgYXV0aG9yIHRvIiwidGhlIGF1dGhvciB0byBpbmNsdWRlIiwiYXV0aG9yIHRvIGluY2x1ZGUgeW91ciIsIm1vZGlmaWNhdGlvbnMgaW4gdGhlIHNvZnR3YXJlIiwidGhlIHNvZnR3YXJlIGIgdXNlIiwic29mdHdhcmUgYiB1c2UgdGhlIiwidXNlIHRoZSBtb2RpZmllZCBzb2Z0d2FyZSIsInRoZSBtb2RpZmllZCBzb2Z0d2FyZSBvbmx5IiwibW9kaWZpZWQgc29mdHdhcmUgb25seSB3aXRoaW4iLCJzb2Z0d2FyZSBvbmx5IHdpdGhpbiB5b3VyIiwib3Igb3JnYW5pemF0aW9uIGMgZ2l2ZSIsIm9yZ2FuaXphdGlvbiBjIGdpdmUgbm9uIiwid2l0aCB0aGUgYXV0aG9yIDMiLCJ0aGUgYXV0aG9yIDMgeW91IiwiYXV0aG9yIDMgeW91IG1heSIsInNvZnR3YXJlIGluIG9iamVjdCBjb2RlIiwib2JqZWN0IGNvZGUgb3IgYmluYXJ5IiwiYmluYXJ5IGZvcm0gcHJvdmlkZWQgdGhhdCIsImZvbGxvd2luZyBhIGRpc3RyaWJ1dGUgdGhlIiwiYSBkaXN0cmlidXRlIHRoZSBiaW5hcmllcyIsImRpc3RyaWJ1dGUgdGhlIGJpbmFyaWVzIGFuZCIsInRoZSBiaW5hcmllcyBhbmQgbGlicmFyeSIsImJpbmFyaWVzIGFuZCBsaWJyYXJ5IGZpbGVzIiwiYW5kIGxpYnJhcnkgZmlsZXMgb2YiLCJsaWJyYXJ5IGZpbGVzIG9mIHRoZSIsImZpbGVzIG9mIHRoZSBzb2Z0d2FyZSIsIm9mIHRoZSBzb2Z0d2FyZSB0b2dldGhlciIsInRoZSBzb2Z0d2FyZSB0b2dldGhlciB3aXRoIiwic29mdHdhcmUgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMiLCJnZXQgdGhlIG9yaWdpbmFsIGRpc3RyaWJ1dGlvbiIsInRoZSBvcmlnaW5hbCBkaXN0cmlidXRpb24gYiIsIm9yaWdpbmFsIGRpc3RyaWJ1dGlvbiBiIGFjY29tcGFueSIsImRpc3RyaWJ1dGlvbiBiIGFjY29tcGFueSB0aGUiLCJzb3VyY2Ugb2YgdGhlIHNvZnR3YXJlIiwib2YgdGhlIHNvZnR3YXJlIGMiLCJ0aGUgc29mdHdhcmUgYyBnaXZlIiwic29mdHdhcmUgYyBnaXZlIG5vbiIsIndpdGggdGhlIGF1dGhvciA0IiwidGhlIGF1dGhvciA0IHlvdSIsImF1dGhvciA0IHlvdSBtYXkiLCI0IHlvdSBtYXkgbW9kaWZ5IiwieW91IG1heSBtb2RpZnkgYW5kIiwibWF5IG1vZGlmeSBhbmQgaW5jbHVkZSIsIm1vZGlmeSBhbmQgaW5jbHVkZSB0aGUiLCJhbmQgaW5jbHVkZSB0aGUgcGFydCIsImluY2x1ZGUgdGhlIHBhcnQgb2YiLCJvZiB0aGUgc29mdHdhcmUgaW50byIsInRoZSBzb2Z0d2FyZSBpbnRvIGFueSIsInNvZnR3YXJlIGludG8gYW55IG90aGVyIiwiaW50byBhbnkgb3RoZXIgc29mdHdhcmUiLCJhbnkgb3RoZXIgc29mdHdhcmUgcG9zc2libHkiLCJvdGhlciBzb2Z0d2FyZSBwb3NzaWJseSBjb21tZXJjaWFsIiwic29mdHdhcmUgcG9zc2libHkgY29tbWVyY2lhbCBidXQiLCJwb3NzaWJseSBjb21tZXJjaWFsIGJ1dCBzb21lIiwiY29tbWVyY2lhbCBidXQgc29tZSBmaWxlcyIsImJ1dCBzb21lIGZpbGVzIGluIiwic29tZSBmaWxlcyBpbiB0aGUiLCJ0aGUgZGlzdHJpYnV0aW9uIGFyZSBub3QiLCJkaXN0cmlidXRpb24gYXJlIG5vdCB3cml0dGVuIiwiYXJlIG5vdCB3cml0dGVuIGJ5Iiwibm90IHdyaXR0ZW4gYnkgdGhlIiwid3JpdHRlbiBieSB0aGUgYXV0aG9yIiwiYnkgdGhlIGF1dGhvciBzbyIsInRoZSBhdXRob3Igc28gdGhhdCIsImF1dGhvciBzbyB0aGF0IHRoZXkiLCJzbyB0aGF0IHRoZXkgYXJlIiwidGhhdCB0aGV5IGFyZSBub3QiLCJ0aGV5IGFyZSBub3QgdW5kZXIiLCJhcmUgbm90IHVuZGVyIHRoZXNlIiwibm90IHVuZGVyIHRoZXNlIHRlcm1zIiwidW5kZXIgdGhlc2UgdGVybXMgZm9yIiwidGhlc2UgdGVybXMgZm9yIHRoZSIsInRlcm1zIGZvciB0aGUgbGlzdCIsImZvciB0aGUgbGlzdCBvZiIsInRoZSBsaXN0IG9mIHRob3NlIiwibGlzdCBvZiB0aG9zZSBmaWxlcyIsInRob3NlIGZpbGVzIGFuZCB0aGVpciIsImZpbGVzIGFuZCB0aGVpciBjb3B5aW5nIiwiYW5kIHRoZWlyIGNvcHlpbmcgY29uZGl0aW9ucyIsInRoZWlyIGNvcHlpbmcgY29uZGl0aW9ucyBzZWUiLCJjb3B5aW5nIGNvbmRpdGlvbnMgc2VlIHRoZSIsImNvbmRpdGlvbnMgc2VlIHRoZSBmaWxlIiwidGhlIGZpbGUgbGVnYWwgNSIsImZpbGUgbGVnYWwgNSB0aGUiLCJsZWdhbCA1IHRoZSBzY3JpcHRzIiwiNSB0aGUgc2NyaXB0cyBhbmQiLCJvdXRwdXQgZnJvbSB0aGUgc29mdHdhcmUiLCJmcm9tIHRoZSBzb2Z0d2FyZSBkbyIsInRoZSBzb2Z0d2FyZSBkbyBub3QiLCJzb2Z0d2FyZSBkbyBub3QgYXV0b21hdGljYWxseSIsInRoZSBjb3B5cmlnaHQgb2YgdGhlIiwiY29weXJpZ2h0IG9mIHRoZSBzb2Z0d2FyZSIsIm9mIHRoZSBzb2Z0d2FyZSBidXQiLCJ0aGUgc29mdHdhcmUgYnV0IGJlbG9uZyIsInNvZnR3YXJlIGJ1dCBiZWxvbmcgdG8iLCJhZ2dyZWdhdGVkIHdpdGggdGhpcyBzb2Z0d2FyZSIsIndpdGggdGhpcyBzb2Z0d2FyZSA2IiwidGhpcyBzb2Z0d2FyZSA2IHRoaXMiLCJzb2Z0d2FyZSA2IHRoaXMgc29mdHdhcmUiLCI2IHRoaXMgc29mdHdhcmUgaXMiLCJzb3VyY2UgZm9ybSBvZiB0aGUgc29mdHdhcmUiLCJmb3JtIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0Iiwib2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24iLCJ0aGUgc29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiBwcm92aWRlZCIsInNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCIsImRpc2NsYWltZXJzIDIgeW91IG1heSBtb2RpZnkiLCJ5b3VyIGNvcHkgb2YgdGhlIHNvZnR3YXJlIiwiY29weSBvZiB0aGUgc29mdHdhcmUgaW4iLCJ0aGUgc29mdHdhcmUgaW4gYW55IHdheSIsInNvZnR3YXJlIGluIGFueSB3YXkgcHJvdmlkZWQiLCJ3YXkgcHJvdmlkZWQgdGhhdCB5b3UgZG8iLCJhbiBlcXVpdmFsZW50IG1lZGl1bSBvciBieSIsImVxdWl2YWxlbnQgbWVkaXVtIG9yIGJ5IGFsbG93aW5nIiwibWVkaXVtIG9yIGJ5IGFsbG93aW5nIHRoZSIsIm9yIGJ5IGFsbG93aW5nIHRoZSBhdXRob3IiLCJieSBhbGxvd2luZyB0aGUgYXV0aG9yIHRvIiwiYWxsb3dpbmcgdGhlIGF1dGhvciB0byBpbmNsdWRlIiwidGhlIGF1dGhvciB0byBpbmNsdWRlIHlvdXIiLCJhdXRob3IgdG8gaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMiLCJ5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHNvZnR3YXJlIiwibW9kaWZpY2F0aW9ucyBpbiB0aGUgc29mdHdhcmUgYiIsImluIHRoZSBzb2Z0d2FyZSBiIHVzZSIsInRoZSBzb2Z0d2FyZSBiIHVzZSB0aGUiLCJzb2Z0d2FyZSBiIHVzZSB0aGUgbW9kaWZpZWQiLCJiIHVzZSB0aGUgbW9kaWZpZWQgc29mdHdhcmUiLCJ1c2UgdGhlIG1vZGlmaWVkIHNvZnR3YXJlIG9ubHkiLCJ0aGUgbW9kaWZpZWQgc29mdHdhcmUgb25seSB3aXRoaW4iLCJtb2RpZmllZCBzb2Z0d2FyZSBvbmx5IHdpdGhpbiB5b3VyIiwic29mdHdhcmUgb25seSB3aXRoaW4geW91ciBjb3Jwb3JhdGlvbiIsImNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbiBjIGdpdmUiLCJvciBvcmdhbml6YXRpb24gYyBnaXZlIG5vbiIsIm9yZ2FuaXphdGlvbiBjIGdpdmUgbm9uIHN0YW5kYXJkIiwiYXJyYW5nZW1lbnRzIHdpdGggdGhlIGF1dGhvciAzIiwid2l0aCB0aGUgYXV0aG9yIDMgeW91IiwidGhlIGF1dGhvciAzIHlvdSBtYXkiLCJhdXRob3IgMyB5b3UgbWF5IGRpc3RyaWJ1dGUiLCIzIHlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUiLCJkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBpbiBvYmplY3QiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IFN0YXR1c1xuXG5TQVggaXMgZnJlZSFcblxuSW4gZmFjdCwgaXQncyBub3QgcG9zc2libGUgdG8gb3duIGEgbGljZW5zZSB0byBTQVgsIHNpbmNlIGl0J3MgYmVlbiBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uXG5cbk5vIFdhcnJhbnR5XG5cbkJlY2F1c2UgU0FYIGlzIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9tYWluLCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIGRlc2lnbiBvciBmb3IgdGhlIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdy4gRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCBpbiB3cml0aW5nIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBhbmQvb3Igb3RoZXIgcGFydGllcyBwcm92aWRlIFNBWCBcImFzIGlzXCIgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIFNBWCBpcyB3aXRoIHlvdS4gU2hvdWxkIFNBWCBwcm92ZSBkZWZlY3RpdmUsIHlvdSBhc3N1bWUgdGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciBvciBjb3JyZWN0aW9uLlxuXG5JbiBubyBldmVudCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcgd2lsbCBhbnkgY29weXJpZ2h0IGhvbGRlciwgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkgbW9kaWZ5IGFuZC9vciByZWRpc3RyaWJ1dGUgU0FYLCBiZSBsaWFibGUgdG8geW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSBTQVggKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbG9zcyBvZiBkYXRhIG9yIGRhdGEgYmVpbmcgcmVuZGVyZWQgaW5hY2N1cmF0ZSBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5IHlvdSBvciB0aGlyZCBwYXJ0aWVzIG9yIGEgZmFpbHVyZSBvZiB0aGUgU0FYIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIgcHJvZ3JhbXMpLCBldmVuIGlmIHN1Y2ggaG9sZGVyIG9yIG90aGVyIHBhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy5cblxuQ29weXJpZ2h0IERpc2NsYWltZXJzXG5cblRoaXMgcGFnZSBpbmNsdWRlcyBzdGF0ZW1lbnRzIHRvIHRoYXQgZWZmZWN0IGJ5IERhdmlkIE1lZ2dpbnNvbiwgd2hvIHdvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIGNsYWltIGNvcHlyaWdodCBmb3IgdGhlIG9yaWdpbmFsIHdvcmsuXG5cblNBWCAxLjBcblxuVmVyc2lvbiAxLjAgb2YgdGhlIFNpbXBsZSBBUEkgZm9yIFhNTCAoU0FYKSwgY3JlYXRlZCBjb2xsZWN0aXZlbHkgYnkgdGhlIG1lbWJlcnNoaXAgb2YgdGhlIFhNTC1ERVYgbWFpbGluZyBsaXN0LCBpcyBoZXJlYnkgcmVsZWFzZWQgaW50byB0aGUgcHVibGljIGRvbWFpbi5cblxuTm8gb25lIG93bnMgU0FYOiB5b3UgbWF5IHVzZSBpdCBmcmVlbHkgaW4gYm90aCBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGJ1bmRsZSBpdCB3aXRoIHlvdXIgc29mdHdhcmUgZGlzdHJpYnV0aW9uLCBpbmNsdWRlIGl0IG9uIGEgQ0QtUk9NLCBsaXN0IHRoZSBzb3VyY2UgY29kZSBpbiBhIGJvb2ssIG1pcnJvciB0aGUgZG9jdW1lbnRhdGlvbiBhdCB5b3VyIG93biB3ZWIgc2l0ZSwgb3IgdXNlIGl0IGluIGFueSBvdGhlciB3YXkgeW91IHNlZSBmaXQuXG5cbkRhdmlkIE1lZ2dpbnNvbiwgTWVnZ2luc29uIFRlY2hub2xvZ2llcyBMdGQuXG5cbjE5OTgtMDUtMTFcblxuU0FYIDIuMFxuXG5JIGhlcmVieSBhYmFuZG9uIGFueSBwcm9wZXJ0eSByaWdodHMgdG8gU0FYIDIuMCAodGhlIFNpbXBsZSBBUEkgZm9yIFhNTCksIGFuZCByZWxlYXNlIGFsbCBvZiB0aGUgU0FYIDIuMCBzb3VyY2UgY29kZSwgY29tcGlsZWQgY29kZSwgYW5kIGRvY3VtZW50YXRpb24gY29udGFpbmVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGludG8gdGhlIFB1YmxpYyBEb21haW4uIFNBWCBjb21lcyB3aXRoIE5PIFdBUlJBTlRZIG9yIGd1YXJhbnRlZSBvZiBmaXRuZXNzIGZvciBhbnkgcHVycG9zZS5cblxuRGF2aWQgTWVnZ2luc29uLCBNZWdnaW5zb24gVGVjaG5vbG9naWVzIEx0ZC5cblxuMjAwMC0wNS0wNSJdLCJsaWNlbnNlSWRzIjpbIlNBWC1QRCJdLCJrZXl3b3JkcyI6WyJjb3B5cmlnaHQgc3RhdHVzIHNheCIsInN0YXR1cyBzYXggaXMiLCJzYXggaXMgZnJlZSIsImlzIGZyZWUgaW4iLCJmcmVlIGluIGZhY3QiLCJpbiBmYWN0IGl0IiwiZmFjdCBpdCBzIiwiaXQgcyBub3QiLCJzIG5vdCBwb3NzaWJsZSIsInBvc3NpYmxlIHRvIG93biIsInRvIG93biBhIiwib3duIGEgbGljZW5zZSIsImxpY2Vuc2UgdG8gc2F4IiwidG8gc2F4IHNpbmNlIiwic2F4IHNpbmNlIGl0Iiwic2luY2UgaXQgcyIsIml0IHMgYmVlbiIsInMgYmVlbiBwbGFjZWQiLCJiZWVuIHBsYWNlZCBpbiIsImRvbWFpbiBubyB3YXJyYW50eSIsIndhcnJhbnR5IGJlY2F1c2Ugc2F4IiwiYmVjYXVzZSBzYXggaXMiLCJzYXggaXMgcmVsZWFzZWQiLCJpcyByZWxlYXNlZCB0byIsInJlbGVhc2VkIHRvIHRoZSIsImRvbWFpbiB0aGVyZSBpcyIsImZvciB0aGUgZGVzaWduIiwidGhlIGRlc2lnbiBvciIsImRlc2lnbiBvciBmb3IiLCJ0aGUgc29mdHdhcmUgaW1wbGVtZW50YXRpb24iLCJzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbiB0byIsImltcGxlbWVudGF0aW9uIHRvIHRoZSIsInBhcnRpZXMgcHJvdmlkZSBzYXgiLCJwcm92aWRlIHNheCBhcyIsInNheCBhcyBpcyIsInBlcmZvcm1hbmNlIG9mIHNheCIsIm9mIHNheCBpcyIsInNheCBpcyB3aXRoIiwieW91IHNob3VsZCBzYXgiLCJzaG91bGQgc2F4IHByb3ZlIiwic2F4IHByb3ZlIGRlZmVjdGl2ZSIsIm9yIHJlZGlzdHJpYnV0ZSBzYXgiLCJyZWRpc3RyaWJ1dGUgc2F4IGJlIiwic2F4IGJlIGxpYWJsZSIsInRvIHVzZSBzYXgiLCJ1c2Ugc2F4IGluY2x1ZGluZyIsInNheCBpbmNsdWRpbmcgYnV0IiwidGhlIHNheCB0byIsInNheCB0byBvcGVyYXRlIiwic3VjaCBkYW1hZ2VzIGNvcHlyaWdodCIsImRhbWFnZXMgY29weXJpZ2h0IGRpc2NsYWltZXJzIiwiY29weXJpZ2h0IGRpc2NsYWltZXJzIHRoaXMiLCJkaXNjbGFpbWVycyB0aGlzIHBhZ2UiLCJ0aGlzIHBhZ2UgaW5jbHVkZXMiLCJwYWdlIGluY2x1ZGVzIHN0YXRlbWVudHMiLCJpbmNsdWRlcyBzdGF0ZW1lbnRzIHRvIiwic3RhdGVtZW50cyB0byB0aGF0IiwidG8gdGhhdCBlZmZlY3QiLCJ0aGF0IGVmZmVjdCBieSIsImVmZmVjdCBieSBkYXZpZCIsImJ5IGRhdmlkIG1lZ2dpbnNvbiIsImRhdmlkIG1lZ2dpbnNvbiB3aG8iLCJtZWdnaW5zb24gd2hvIHdvdWxkIiwid2hvIHdvdWxkIGhhdmUiLCJoYXZlIGJlZW4gYWJsZSIsImJlZW4gYWJsZSB0byIsImFibGUgdG8gY2xhaW0iLCJ0byBjbGFpbSBjb3B5cmlnaHQiLCJjbGFpbSBjb3B5cmlnaHQgZm9yIiwiY29weXJpZ2h0IGZvciB0aGUiLCJvcmlnaW5hbCB3b3JrIHNheCIsIndvcmsgc2F4IDEiLCJzYXggMSAwIiwiMSAwIHZlcnNpb24iLCIwIHZlcnNpb24gMSIsIm9mIHRoZSBzaW1wbGUiLCJmb3IgeG1sIHNheCIsInhtbCBzYXggY3JlYXRlZCIsInNheCBjcmVhdGVkIGNvbGxlY3RpdmVseSIsImNyZWF0ZWQgY29sbGVjdGl2ZWx5IGJ5IiwiY29sbGVjdGl2ZWx5IGJ5IHRoZSIsImJ5IHRoZSBtZW1iZXJzaGlwIiwidGhlIG1lbWJlcnNoaXAgb2YiLCJtZW1iZXJzaGlwIG9mIHRoZSIsIm9mIHRoZSB4bWwiLCJ0aGUgeG1sIGRldiIsInhtbCBkZXYgbWFpbGluZyIsImRldiBtYWlsaW5nIGxpc3QiLCJtYWlsaW5nIGxpc3QgaXMiLCJsaXN0IGlzIGhlcmVieSIsImlzIGhlcmVieSByZWxlYXNlZCIsImhlcmVieSByZWxlYXNlZCBpbnRvIiwiZG9tYWluIG5vIG9uZSIsIm5vIG9uZSBvd25zIiwib25lIG93bnMgc2F4Iiwib3ducyBzYXggeW91Iiwic2F4IHlvdSBtYXkiLCJ1c2UgaXQgZnJlZWx5IiwiaXQgZnJlZWx5IGluIiwiZnJlZWx5IGluIGJvdGgiLCJpbiBib3RoIGNvbW1lcmNpYWwiLCJub24gY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMiLCJjb21tZXJjaWFsIGFwcGxpY2F0aW9ucyBidW5kbGUiLCJhcHBsaWNhdGlvbnMgYnVuZGxlIGl0IiwiYnVuZGxlIGl0IHdpdGgiLCJpdCB3aXRoIHlvdXIiLCJ3aXRoIHlvdXIgc29mdHdhcmUiLCJ5b3VyIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiIsInNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBpbmNsdWRlIiwiZGlzdHJpYnV0aW9uIGluY2x1ZGUgaXQiLCJpbmNsdWRlIGl0IG9uIiwib24gYSBjZCIsImNkIHJvbSBsaXN0Iiwicm9tIGxpc3QgdGhlIiwibGlzdCB0aGUgc291cmNlIiwiYSBib29rIG1pcnJvciIsImJvb2sgbWlycm9yIHRoZSIsIm1pcnJvciB0aGUgZG9jdW1lbnRhdGlvbiIsInRoZSBkb2N1bWVudGF0aW9uIGF0IiwiZG9jdW1lbnRhdGlvbiBhdCB5b3VyIiwieW91ciBvd24gd2ViIiwib3duIHdlYiBzaXRlIiwid2ViIHNpdGUgb3IiLCJzaXRlIG9yIHVzZSIsIm9yIHVzZSBpdCIsIm90aGVyIHdheSB5b3UiLCJ3YXkgeW91IHNlZSIsInlvdSBzZWUgZml0Iiwic2VlIGZpdCBkYXZpZCIsImZpdCBkYXZpZCBtZWdnaW5zb24iLCJ0ZWNobm9sb2dpZXMgbHRkIDE5OTgiLCJsdGQgMTk5OCAwNSIsIjE5OTggMDUgMTEiLCIwNSAxMSBzYXgiLCIxMSBzYXggMiIsIjIgMCBpIiwiMCBpIGhlcmVieSIsImkgaGVyZWJ5IGFiYW5kb24iLCJoZXJlYnkgYWJhbmRvbiBhbnkiLCJhYmFuZG9uIGFueSBwcm9wZXJ0eSIsImFueSBwcm9wZXJ0eSByaWdodHMiLCJyaWdodHMgdG8gc2F4IiwidG8gc2F4IDIiLCIwIHRoZSBzaW1wbGUiLCJmb3IgeG1sIGFuZCIsInhtbCBhbmQgcmVsZWFzZSIsImFuZCByZWxlYXNlIGFsbCIsInJlbGVhc2UgYWxsIG9mIiwidGhlIHNheCAyIiwic291cmNlIGNvZGUgY29tcGlsZWQiLCJjb2RlIGNvbXBpbGVkIGNvZGUiLCJjb21waWxlZCBjb2RlIGFuZCIsImFuZCBkb2N1bWVudGF0aW9uIGNvbnRhaW5lZCIsImRvY3VtZW50YXRpb24gY29udGFpbmVkIGluIiwidGhpcyBkaXN0cmlidXRpb24gaW50byIsImRpc3RyaWJ1dGlvbiBpbnRvIHRoZSIsInB1YmxpYyBkb21haW4gc2F4IiwiZG9tYWluIHNheCBjb21lcyIsInNheCBjb21lcyB3aXRoIiwiY29tZXMgd2l0aCBubyIsImFueSBwdXJwb3NlIGRhdmlkIiwicHVycG9zZSBkYXZpZCBtZWdnaW5zb24iLCJ0ZWNobm9sb2dpZXMgbHRkIDIwMDAiLCJsdGQgMjAwMCAwNSIsIjIwMDAgMDUgMDUiLCJjb3B5cmlnaHQgc3RhdHVzIHNheCBpcyIsInN0YXR1cyBzYXggaXMgZnJlZSIsInNheCBpcyBmcmVlIGluIiwiaXMgZnJlZSBpbiBmYWN0IiwiZnJlZSBpbiBmYWN0IGl0IiwiaW4gZmFjdCBpdCBzIiwiZmFjdCBpdCBzIG5vdCIsIml0IHMgbm90IHBvc3NpYmxlIiwicyBub3QgcG9zc2libGUgdG8iLCJub3QgcG9zc2libGUgdG8gb3duIiwicG9zc2libGUgdG8gb3duIGEiLCJ0byBvd24gYSBsaWNlbnNlIiwib3duIGEgbGljZW5zZSB0byIsImEgbGljZW5zZSB0byBzYXgiLCJsaWNlbnNlIHRvIHNheCBzaW5jZSIsInRvIHNheCBzaW5jZSBpdCIsInNheCBzaW5jZSBpdCBzIiwic2luY2UgaXQgcyBiZWVuIiwiaXQgcyBiZWVuIHBsYWNlZCIsInMgYmVlbiBwbGFjZWQgaW4iLCJiZWVuIHBsYWNlZCBpbiB0aGUiLCJwdWJsaWMgZG9tYWluIG5vIHdhcnJhbnR5IiwiZG9tYWluIG5vIHdhcnJhbnR5IGJlY2F1c2UiLCJubyB3YXJyYW50eSBiZWNhdXNlIHNheCIsIndhcnJhbnR5IGJlY2F1c2Ugc2F4IGlzIiwiYmVjYXVzZSBzYXggaXMgcmVsZWFzZWQiLCJzYXggaXMgcmVsZWFzZWQgdG8iLCJpcyByZWxlYXNlZCB0byB0aGUiLCJyZWxlYXNlZCB0byB0aGUgcHVibGljIiwicHVibGljIGRvbWFpbiB0aGVyZSBpcyIsImRvbWFpbiB0aGVyZSBpcyBubyIsIndhcnJhbnR5IGZvciB0aGUgZGVzaWduIiwiZm9yIHRoZSBkZXNpZ24gb3IiLCJ0aGUgZGVzaWduIG9yIGZvciIsImRlc2lnbiBvciBmb3IgdGhlIl19LHsibGljZW5zZVRleHRzIjpbIlNDRUEgU2hhcmVkIFNvdXJjZSBMaWNlbnNlIDEuMFxuXG5UZXJtcyBhbmQgQ29uZGl0aW9uczpcblxuICAgMS4gRGVmaW5pdGlvbnM6XG5cbiAgIFwiU29mdHdhcmVcIiBzaGFsbCBtZWFuIHRoZSBzb2Z0d2FyZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QgRm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBTQ0VBIFNoYXJlZCBTb3VyY2UgbGljZW5zZSAoXCJMaWNlbnNlXCIpLCB0aGF0IGlzIGluZGljYXRlZCBieSBhIGNvcHlyaWdodCBub3RpY2UgZmlsZSBpbmNsdWRlZCBpbiB0aGUgc291cmNlIGZpbGVzIG9yIGF0dGFjaGVkIG9yIGFjY29tcGFueWluZyB0aGUgc291cmNlIGZpbGVzLlxuXG4gICBcIkxpY2Vuc29yXCIgc2hhbGwgbWVhbiBTb255IENvbXB1dGVyIEVudGVydGFpbm1lbnQgQW1lcmljYSwgSW5jLiAoaGVyZWluIFwiU0NFQVwiKVxuXG4gICBcIk9iamVjdCBDb2RlXCIgb3IgXCJPYmplY3QgRm9ybVwiIHNoYWxsIG1lYW4gYW55IGZvcm0gdGhhdCByZXN1bHRzIGZyb20gdHJhbnNsYXRpb24gb3IgdHJhbnNmb3JtYXRpb24gb2YgU291cmNlIENvZGUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUgb3IgY29udmVyc2lvbnMgdG8gb3RoZXIgZm9ybXMgaW50ZW5kZWQgZm9yIG1hY2hpbmUgZXhlY3V0aW9uLlxuXG4gICBcIlNvdXJjZSBDb2RlXCIgb3IgXCJTb3VyY2UgRm9ybVwiIHNoYWxsIGhhdmUgdGhlIHBsYWluIG1lYW5pbmcgZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBpbmR1c3RyeSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbiBzb3VyY2UsIGhlYWRlciBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy5cblxuICAgXCJZb3VcIiBvciBcIllvdXJcIiBzaGFsbCBtZWFuIHlvdSBhcyBhbiBpbmRpdmlkdWFsIG9yIGFzIGEgY29tcGFueSwgb3Igd2hpY2hldmVyIGZvcm0gdW5kZXIgd2hpY2ggeW91IGFyZSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgIDIuIExpY2Vuc2UgR3JhbnQuXG5cbiAgIExpY2Vuc29yIGhlcmVieSBncmFudHMgdG8gWW91LCBmcmVlIG9mIGNoYXJnZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIGFuIGlycmV2b2NhYmxlLCBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHBlcnBldHVhbCwgYW5kIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCByZXByb2R1Y2UsIGRpc3RyaWJ1dGUsIHB1YmxpY2x5IHBlcmZvcm0gb3IgZGlzcGxheSB0aGUgU29mdHdhcmUgaW4gT2JqZWN0IG9yIFNvdXJjZSBGb3JtIC5cblxuICAgMy4gTm8gUmlnaHQgdG8gRmlsZSBmb3IgUGF0ZW50LlxuXG4gICBJbiBleGNoYW5nZSBmb3IgdGhlIHJpZ2h0cyB0aGF0IGFyZSBncmFudGVkIHRvIFlvdSBmcmVlIG9mIGNoYXJnZSB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBhZ3JlZSB0aGF0IFlvdSB3aWxsIG5vdCBmaWxlIGZvciBhbnkgcGF0ZW50IGFwcGxpY2F0aW9uLCBzZWVrIGNvcHlyaWdodCBwcm90ZWN0aW9uIG9yIHRha2UgYW55IG90aGVyIGFjdGlvbiB0aGF0IG1pZ2h0IG90aGVyd2lzZSBpbXBhaXIgdGhlIG93bmVyc2hpcCByaWdodHMgaW4gYW5kIHRvIHRoZSBTb2Z0d2FyZSB0aGF0IG1heSBiZWxvbmcgdG8gU0NFQSBvciBhbnkgb2YgdGhlIG90aGVyIGNvbnRyaWJ1dG9ycy9hdXRob3JzIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgNC4gQ29udHJpYnV0aW9ucy5cblxuICAgU0NFQSB3ZWxjb21lcyBjb250cmlidXRpb25zIGluIGZvcm0gb2YgbW9kaWZpY2F0aW9ucywgb3B0aW1pemF0aW9ucywgdG9vbHMgb3IgZG9jdW1lbnRhdGlvbiBkZXNpZ25lZCB0byBpbXByb3ZlIG9yIGV4cGFuZCB0aGUgcGVyZm9ybWFuY2UgYW5kIHNjb3BlIG9mIHRoZSBTb2Z0d2FyZSAoY29sbGVjdGl2ZWx5IFwiQ29udHJpYnV0aW9uc1wiKS4gUGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgWW91IGFyZSBmcmVlIHRvIG1vZGlmeSB0aGUgU29mdHdhcmUgYW5kIHRob3NlIG1vZGlmaWNhdGlvbnMgd291bGQgYmVsb25nIHRvIFlvdS4gWW91IG1heSBob3dldmVyIHdpc2ggdG8gZG9uYXRlIFlvdXIgQ29udHJpYnV0aW9ucyB0byBTQ0VBIGZvciBjb25zaWRlcmF0aW9uIGZvciBpbmNsdXNpb24gaW50byB0aGUgU29mdHdhcmUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBpZiBZb3UgZWxlY3QgdG8gc2VuZCBZb3VyIENvbnRyaWJ1dGlvbnMgdG8gU0NFQSwgWW91IGFyZSBkb2luZyBzbyB2b2x1bnRhcmlseSBhbmQgYXJlIGdpdmluZyB0aGUgQ29udHJpYnV0aW9ucyB0byBTQ0VBIGFuZCBpdHMgcGFyZW50IGNvbXBhbnkgU29ueSBDb21wdXRlciBFbnRlcnRhaW5tZW50LCBJbmMuLCBmcmVlIG9mIGNoYXJnZSwgdG8gdXNlLCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSBpbiBhbnkgZm9ybSBvciBpbiBhbnkgbWFubmVyLiBTQ0VBIGFja25vd2xlZGdlcyB0aGF0IGlmIFlvdSBtYWtlIGEgZG9uYXRpb24gb2YgWW91ciBDb250cmlidXRpb25zIHRvIFNDRUEsIHN1Y2ggQ29udHJpYnV0aW9ucyBzaGFsbCBub3QgZXhjbHVzaXZlbHkgYmVsb25nIHRvIFNDRUEgb3IgaXRzIHBhcmVudCBjb21wYW55IGFuZCBzdWNoIGRvbmF0aW9uIHNoYWxsIG5vdCBiZSB0byBZb3VyIGV4Y2x1c2lvbi4gU0NFQSwgaW4gaXRzIHNvbGUgZGlzY3JldGlvbiwgc2hhbGwgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgWW91ciBkb25hdGVkIENvbnRyaWJ1dGlvbnMgaW50byB0aGUgU29mdHdhcmUsIGluIHdob2xlLCBpbiBwYXJ0LCBvciBhcyBtb2RpZmllZCBieSBTQ0VBLiBTaG91bGQgU0NFQSBlbGVjdCB0byBpbmNsdWRlIGFueSBzdWNoIENvbnRyaWJ1dGlvbnMgaW50byB0aGUgU29mdHdhcmUsIGl0IHNoYWxsIGRvIHNvIGF0IGl0cyBvd24gcmlzayBhbmQgbWF5IGVsZWN0IHRvIGdpdmUgY3JlZGl0IG9yIHNwZWNpYWwgdGhhbmtzIHRvIGFueSBzdWNoIGNvbnRyaWJ1dG9ycyBpbiB0aGUgYXR0YWNoZWQgY29weXJpZ2h0IG5vdGljZS4gSG93ZXZlciwgaWYgYW55IG9mIFlvdXIgY29udHJpYnV0aW9ucyBhcmUgaW5jbHVkZWQgaW50byB0aGUgU29mdHdhcmUsIHRoZXkgd2lsbCBiZWNvbWUgcGFydCBvZiB0aGUgU29mdHdhcmUgYW5kIHdpbGwgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gRnVydGhlciwgaWYgWW91ciBkb25hdGVkIENvbnRyaWJ1dGlvbnMgYXJlIGludGVncmF0ZWQgaW50byB0aGUgU29mdHdhcmUgdGhlbiBTb255IENvbXB1dGVyIEVudGVydGFpbm1lbnQsIEluYy4gc2hhbGwgYmVjb21lIHRoZSBjb3B5cmlnaHQgb3duZXIgb2YgdGhlIFNvZnR3YXJlIG5vdyBjb250YWluaW5nIFlvdXIgY29udHJpYnV0aW9ucyBhbmQgU0NFQSB3b3VsZCBiZSB0aGUgTGljZW5zb3IuXG5cbiAgIDUuIFJlZGlzdHJpYnV0aW9uIGluIFNvdXJjZSBGb3JtXG5cbiAgIFlvdSBtYXkgcmVkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIG1vZGlmaWNhdGlvbnMgb3IgZGVyaXZhdGl2ZXMgdGhlcmVvZiBpbiBTb3VyY2UgQ29kZSBGb3JtLCBwcm92aWRlZCB0aGF0IFlvdTpcblxuICAgICAgYS4gSW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29weXJpZ2h0IG5vdGljZXMgd2l0aCBzb3VyY2VcblxuICAgICAgYi4gSWRlbnRpZnkgbW9kaWZpY2F0aW9ucyBpZiBhbnkgd2VyZSBtYWRlIHRvIHRoZSBTb2Z0d2FyZVxuXG4gICAgICBjLiBJbmNsdWRlIGEgY29weSBvZiBhbGwgZG9jdW1lbnRhdGlvbiBhY2NvbXBhbnlpbmcgdGhlIFNvZnR3YXJlIGFuZCBtb2RpZmljYXRpb25zIG1hZGUgYnkgWW91XG5cbiAgIDYuIFJlZGlzdHJpYnV0aW9uIGluIE9iamVjdCBGb3JtXG5cbiAgIElmIFlvdSByZWRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgbW9kaWZpY2F0aW9ucyBvciBkZXJpdmF0aXZlcyB0aGVyZW9mIGluIE9iamVjdCBGb3JtIG9ubHkgKGFzIGluY29ycG9yYXRlZCBpbnRvIGZpbmlzaGVkIGdvb2RzLCBpLmUuIGVuZCB1c2VyIGFwcGxpY2F0aW9ucykgdGhlbiBZb3Ugd2lsbCBub3QgaGF2ZSBhIGR1dHkgdG8gaW5jbHVkZSBhbnkgY29waWVzIG9mIHRoZSBjb2RlLCB0aGlzIExpY2Vuc2UsIGNvcHlyaWdodCBub3RpY2VzLCBvdGhlciBhdHRyaWJ1dGlvbnMgb3IgZG9jdW1lbnRhdGlvbi5cblxuICAgNy4gTm8gV2FycmFudHlcblxuICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBBTlkgUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWU9VIEFSRSBTT0xFTFkgUkVTUE9OU0lCTEUgRk9SIERFVEVSTUlOSU5HIFRIRSBBUFBST1BSSUFURU5FU1MgT0YgVVNJTkcsIE1PRElGWUlORyBPUiBSRURJU1RSSUJVVElORyBUSEUgU09GVFdBUkUgQU5EIEFTU1VNRSBBTlkgUklTS1MgQVNTT0NJQVRFRCBXSVRIIFlPVVIgRVhFUkNJU0UgT0YgUEVSTUlTU0lPTlMgVU5ERVIgVEhJUyBMSUNFTlNFLlxuXG4gICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eVxuXG4gICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlkgV0lMTCBFSVRIRVIgUEFSVFkgQkUgTElBQkxFIFRPIFRIRSBPVEhFUiBQQVJUWSBPUiBBTlkgVEhJUkQgUEFSVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBDT05TRVFVRU5USUFMLCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBFWEVNUExBUlkgREFNQUdFUyBXSVRIIFJFU1BFQ1QgVE8gQU5ZIElOSlVSWSwgTE9TUywgT1IgREFNQUdFLCBBUklTSU5HIFVOREVSIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSElTIExFVFRFUiBBR1JFRU1FTlQsIFdIRVRIRVIgRk9SRVNFRUFCTEUgT1IgVU5GT1JFU0VFQUJMRSwgRVZFTiBJRiBTVUNIIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggSU5KVVJZLCBMT1NTLCBPUiBEQU1BR0UuIFRIRSBMSU1JVEFUSU9OUyBPRiBMSUFCSUxJVFkgU0VUIEZPUlRIIElOIFRISVMgU0VDVElPTiBTSEFMTCBBUFBMWSBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgUEVSTUlTU0lCTEUgQVQgTEFXIE9SIEFOWSBHT1ZFUk1FTlRBTCBSRUdVTEFUSU9OUy5cblxuICAgOS4gR292ZXJuaW5nIExhdyBhbmQgQ29uc2VudCB0byBKdXJpc2RpY3Rpb25cblxuICAgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGludGVycHJldGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjbHVkaW5nIHRoYXQgYm9keSBvZiBsYXcgcmVsYXRlZCB0byBjaG9pY2Ugb2YgbGF3cywgYW5kIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIEFueSBhY3Rpb24gb3IgcHJvY2VlZGluZyBicm91Z2h0IHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50IG9yIHRvIGFkanVkaWNhdGUgYW55IGRpc3B1dGUgYXJpc2luZyBoZXJldW5kZXIgc2hhbGwgYmUgYnJvdWdodCBpbiB0aGUgU3VwZXJpb3IgQ291cnQgb2YgdGhlIENvdW50eSBvZiBTYW4gTWF0ZW8sIFN0YXRlIG9mIENhbGlmb3JuaWEgb3IgdGhlIFVuaXRlZCBTdGF0ZXMgRGlzdHJpY3QgQ291cnQgZm9yIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLiBFYWNoIG9mIHRoZSBwYXJ0aWVzIGhlcmVieSBzdWJtaXRzIGl0c2VsZiB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBhbmQgdmVudWUgb2Ygc3VjaCBjb3VydHMgZm9yIHB1cnBvc2VzIG9mIGFueSBzdWNoIGFjdGlvbi4gSW4gYWRkaXRpb24sIGVhY2ggcGFydHkgaGVyZWJ5IHdhaXZlcyB0aGUgcmlnaHQgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSBhY3Rpb24gb3IgcHJvY2VlZGluZyByZWxhdGVkIHRvIHRoaXMgQWdyZWVtZW50LlxuXG4gICAxMC4gQ29weXJpZ2h0IE5vdGljZSBmb3IgUmVkaXN0cmlidXRpb24gb2YgU291cmNlIENvZGVcblxuQ29weXJpZ2h0IDIwMDUgU29ueSBDb21wdXRlciBFbnRlcnRhaW5tZW50IEluYy5cblxuTGljZW5zZWQgdW5kZXIgdGhlIFNDRUEgU2hhcmVkIFNvdXJjZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6XG5cbmh0dHA6Ly9yZXNlYXJjaC5zY2VhLmNvbS9zY2VhX3NoYXJlZF9zb3VyY2VfbGljZW5zZS5odG1sXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4iXSwibGljZW5zZUlkcyI6WyJTQ0VBIl0sImtleXdvcmRzIjpbIjEgMCB0ZXJtcyIsIjEgZGVmaW5pdGlvbnMgc29mdHdhcmUiLCJkZWZpbml0aW9ucyBzb2Z0d2FyZSBzaGFsbCIsIm1lYW4gdGhlIHNvZnR3YXJlIiwicmVsYXRlZCBkb2N1bWVudGF0aW9uIHdoZXRoZXIiLCJ1bmRlciB0aGlzIHNjZWEiLCJ0aGlzIHNjZWEgc2hhcmVkIiwibGljZW5zZSBsaWNlbnNlIHRoYXQiLCJ0aGF0IGlzIGluZGljYXRlZCIsImlzIGluZGljYXRlZCBieSIsImNvcHlyaWdodCBub3RpY2UgZmlsZSIsIm5vdGljZSBmaWxlIGluY2x1ZGVkIiwiZmlsZSBpbmNsdWRlZCBpbiIsInNvdXJjZSBmaWxlcyBvciIsImZpbGVzIG9yIGF0dGFjaGVkIiwib3IgYXR0YWNoZWQgb3IiLCJhdHRhY2hlZCBvciBhY2NvbXBhbnlpbmciLCJvciBhY2NvbXBhbnlpbmcgdGhlIiwiYWNjb21wYW55aW5nIHRoZSBzb3VyY2UiLCJzb3VyY2UgZmlsZXMgbGljZW5zb3IiLCJmaWxlcyBsaWNlbnNvciBzaGFsbCIsInNoYWxsIG1lYW4gc29ueSIsIm1lYW4gc29ueSBjb21wdXRlciIsImNvbXB1dGVyIGVudGVydGFpbm1lbnQgYW1lcmljYSIsImVudGVydGFpbm1lbnQgYW1lcmljYSBpbmMiLCJhbWVyaWNhIGluYyBoZXJlaW4iLCJpbmMgaGVyZWluIHNjZWEiLCJoZXJlaW4gc2NlYSBvYmplY3QiLCJzY2VhIG9iamVjdCBjb2RlIiwiYW55IGZvcm0gdGhhdCIsInJlc3VsdHMgZnJvbSB0cmFuc2xhdGlvbiIsImZyb20gdHJhbnNsYXRpb24gb3IiLCJ0cmFuc2xhdGlvbiBvciB0cmFuc2Zvcm1hdGlvbiIsIm9yIHRyYW5zZm9ybWF0aW9uIG9mIiwidHJhbnNmb3JtYXRpb24gb2Ygc291cmNlIiwiY29kZSBvciBjb252ZXJzaW9ucyIsIm9yIGNvbnZlcnNpb25zIHRvIiwidG8gb3RoZXIgZm9ybXMiLCJvdGhlciBmb3JtcyBpbnRlbmRlZCIsImZvcm1zIGludGVuZGVkIGZvciIsImludGVuZGVkIGZvciBtYWNoaW5lIiwiZm9yIG1hY2hpbmUgZXhlY3V0aW9uIiwibWFjaGluZSBleGVjdXRpb24gc291cmNlIiwiZXhlY3V0aW9uIHNvdXJjZSBjb2RlIiwiY29kZSBvciBzb3VyY2UiLCJmb3JtIHNoYWxsIGhhdmUiLCJoYXZlIHRoZSBwbGFpbiIsInRoZSBwbGFpbiBtZWFuaW5nIiwicGxhaW4gbWVhbmluZyBnZW5lcmFsbHkiLCJtZWFuaW5nIGdlbmVyYWxseSBhY2NlcHRlZCIsInRoZSBzb2Z0d2FyZSBpbmR1c3RyeSIsInNvZnR3YXJlIGluZHVzdHJ5IGluY2x1ZGluZyIsImluZHVzdHJ5IGluY2x1ZGluZyBidXQiLCJkb2N1bWVudGF0aW9uIHNvdXJjZSBoZWFkZXIiLCJzb3VyY2UgaGVhZGVyIGFuZCIsImhlYWRlciBhbmQgY29uZmlndXJhdGlvbiIsImNvbmZpZ3VyYXRpb24gZmlsZXMgeW91IiwiZmlsZXMgeW91IG9yIiwic2hhbGwgbWVhbiB5b3UiLCJtZWFuIHlvdSBhcyIsImFzIGFuIGluZGl2aWR1YWwiLCJpbmRpdmlkdWFsIG9yIGFzIiwiYXMgYSBjb21wYW55IiwiY29tcGFueSBvciB3aGljaGV2ZXIiLCJvciB3aGljaGV2ZXIgZm9ybSIsIndoaWNoZXZlciBmb3JtIHVuZGVyIiwiZm9ybSB1bmRlciB3aGljaCIsInlvdSBhcmUgZXhlcmNpc2luZyIsImFyZSBleGVyY2lzaW5nIHJpZ2h0cyIsImxpY2Vuc2UgMiBsaWNlbnNlIiwib2YgY2hhcmdlIHN1YmplY3QiLCJjaGFyZ2Ugc3ViamVjdCB0byIsImxpY2Vuc2UgYW4gaXJyZXZvY2FibGUiLCJ3b3JsZHdpZGUgcGVycGV0dWFsIGFuZCIsInBlcnBldHVhbCBhbmQgcm95YWx0eSIsInVzZSBtb2RpZnkgcmVwcm9kdWNlIiwibW9kaWZ5IHJlcHJvZHVjZSBkaXN0cmlidXRlIiwicmVwcm9kdWNlIGRpc3RyaWJ1dGUgcHVibGljbHkiLCJkaXN0cmlidXRlIHB1YmxpY2x5IHBlcmZvcm0iLCJwZXJmb3JtIG9yIGRpc3BsYXkiLCJpbiBvYmplY3Qgb3IiLCJvYmplY3Qgb3Igc291cmNlIiwic291cmNlIGZvcm0gMyIsImZvcm0gMyBubyIsIjMgbm8gcmlnaHQiLCJyaWdodCB0byBmaWxlIiwidG8gZmlsZSBmb3IiLCJmaWxlIGZvciBwYXRlbnQiLCJmb3IgcGF0ZW50IGluIiwicGF0ZW50IGluIGV4Y2hhbmdlIiwiZXhjaGFuZ2UgZm9yIHRoZSIsInRoYXQgYXJlIGdyYW50ZWQiLCJvZiBjaGFyZ2UgdW5kZXIiLCJjaGFyZ2UgdW5kZXIgdGhpcyIsIndpbGwgbm90IGZpbGUiLCJub3QgZmlsZSBmb3IiLCJmaWxlIGZvciBhbnkiLCJmb3IgYW55IHBhdGVudCIsImFueSBwYXRlbnQgYXBwbGljYXRpb24iLCJwYXRlbnQgYXBwbGljYXRpb24gc2VlayIsImFwcGxpY2F0aW9uIHNlZWsgY29weXJpZ2h0Iiwic2VlayBjb3B5cmlnaHQgcHJvdGVjdGlvbiIsImNvcHlyaWdodCBwcm90ZWN0aW9uIG9yIiwicHJvdGVjdGlvbiBvciB0YWtlIiwib3IgdGFrZSBhbnkiLCJ0YWtlIGFueSBvdGhlciIsImFueSBvdGhlciBhY3Rpb24iLCJvdGhlciBhY3Rpb24gdGhhdCIsImFjdGlvbiB0aGF0IG1pZ2h0IiwidGhhdCBtaWdodCBvdGhlcndpc2UiLCJtaWdodCBvdGhlcndpc2UgaW1wYWlyIiwib3RoZXJ3aXNlIGltcGFpciB0aGUiLCJpbXBhaXIgdGhlIG93bmVyc2hpcCIsInRoZSBvd25lcnNoaXAgcmlnaHRzIiwib3duZXJzaGlwIHJpZ2h0cyBpbiIsInRoYXQgbWF5IGJlbG9uZyIsIm1heSBiZWxvbmcgdG8iLCJzY2VhIG9yIGFueSIsIm90aGVyIGNvbnRyaWJ1dG9ycyBhdXRob3JzIiwiY29udHJpYnV0b3JzIGF1dGhvcnMgb2YiLCJ0aGUgc29mdHdhcmUgNCIsInNvZnR3YXJlIDQgY29udHJpYnV0aW9ucyIsIjQgY29udHJpYnV0aW9ucyBzY2VhIiwiY29udHJpYnV0aW9ucyBzY2VhIHdlbGNvbWVzIiwic2NlYSB3ZWxjb21lcyBjb250cmlidXRpb25zIiwid2VsY29tZXMgY29udHJpYnV0aW9ucyBpbiIsImNvbnRyaWJ1dGlvbnMgaW4gZm9ybSIsImluIGZvcm0gb2YiLCJmb3JtIG9mIG1vZGlmaWNhdGlvbnMiLCJvZiBtb2RpZmljYXRpb25zIG9wdGltaXphdGlvbnMiLCJtb2RpZmljYXRpb25zIG9wdGltaXphdGlvbnMgdG9vbHMiLCJvcHRpbWl6YXRpb25zIHRvb2xzIG9yIiwidG9vbHMgb3IgZG9jdW1lbnRhdGlvbiIsIm9yIGRvY3VtZW50YXRpb24gZGVzaWduZWQiLCJkb2N1bWVudGF0aW9uIGRlc2lnbmVkIHRvIiwiZGVzaWduZWQgdG8gaW1wcm92ZSIsInRvIGltcHJvdmUgb3IiLCJpbXByb3ZlIG9yIGV4cGFuZCIsIm9yIGV4cGFuZCB0aGUiLCJleHBhbmQgdGhlIHBlcmZvcm1hbmNlIiwicGVyZm9ybWFuY2UgYW5kIHNjb3BlIiwidGhlIHNvZnR3YXJlIGNvbGxlY3RpdmVseSIsInNvZnR3YXJlIGNvbGxlY3RpdmVseSBjb250cmlidXRpb25zIiwiY29sbGVjdGl2ZWx5IGNvbnRyaWJ1dGlvbnMgcGVyIiwiY29udHJpYnV0aW9ucyBwZXIgdGhlIiwicGVyIHRoZSB0ZXJtcyIsImZyZWUgdG8gbW9kaWZ5Iiwic29mdHdhcmUgYW5kIHRob3NlIiwidGhvc2UgbW9kaWZpY2F0aW9ucyB3b3VsZCIsIm1vZGlmaWNhdGlvbnMgd291bGQgYmVsb25nIiwid291bGQgYmVsb25nIHRvIiwiYmVsb25nIHRvIHlvdSIsInRvIHlvdSB5b3UiLCJ5b3UgeW91IG1heSIsInlvdSBtYXkgaG93ZXZlciIsIm1heSBob3dldmVyIHdpc2giLCJob3dldmVyIHdpc2ggdG8iLCJ3aXNoIHRvIGRvbmF0ZSIsInRvIGRvbmF0ZSB5b3VyIiwiZG9uYXRlIHlvdXIgY29udHJpYnV0aW9ucyIsInRvIHNjZWEgZm9yIiwic2NlYSBmb3IgY29uc2lkZXJhdGlvbiIsImZvciBjb25zaWRlcmF0aW9uIGZvciIsImNvbnNpZGVyYXRpb24gZm9yIGluY2x1c2lvbiIsImZvciBpbmNsdXNpb24gaW50byIsImluY2x1c2lvbiBpbnRvIHRoZSIsIm9mIGRvdWJ0IGlmIiwiZG91YnQgaWYgeW91IiwiaWYgeW91IGVsZWN0IiwieW91IGVsZWN0IHRvIiwiZWxlY3QgdG8gc2VuZCIsInRvIHNlbmQgeW91ciIsInNlbmQgeW91ciBjb250cmlidXRpb25zIiwidG8gc2NlYSB5b3UiLCJzY2VhIHlvdSBhcmUiLCJ5b3UgYXJlIGRvaW5nIiwiYXJlIGRvaW5nIHNvIiwiZG9pbmcgc28gdm9sdW50YXJpbHkiLCJzbyB2b2x1bnRhcmlseSBhbmQiLCJ2b2x1bnRhcmlseSBhbmQgYXJlIiwiYW5kIGFyZSBnaXZpbmciLCJhcmUgZ2l2aW5nIHRoZSIsImdpdmluZyB0aGUgY29udHJpYnV0aW9ucyIsInRoZSBjb250cmlidXRpb25zIHRvIiwidG8gc2NlYSBhbmQiLCJzY2VhIGFuZCBpdHMiLCJhbmQgaXRzIHBhcmVudCIsInBhcmVudCBjb21wYW55IHNvbnkiLCJjb21wYW55IHNvbnkgY29tcHV0ZXIiLCJlbnRlcnRhaW5tZW50IGluYyBmcmVlIiwiaW5jIGZyZWUgb2YiLCJjaGFyZ2UgdG8gdXNlIiwib3IgZGlzdHJpYnV0ZSBpbiIsImRpc3RyaWJ1dGUgaW4gYW55IiwiZm9ybSBvciBpbiIsImFueSBtYW5uZXIgc2NlYSIsIm1hbm5lciBzY2VhIGFja25vd2xlZGdlcyIsInNjZWEgYWNrbm93bGVkZ2VzIHRoYXQiLCJhY2tub3dsZWRnZXMgdGhhdCBpZiIsIm1ha2UgYSBkb25hdGlvbiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJTR0kgRlJFRSBTT0ZUV0FSRSBMSUNFTlNFIEJcblxuKFZlcnNpb24gMS4wIDEvMjUvMjAwMClcblxuICAgMS4gRGVmaW5pdGlvbnMuXG5cbiAgICAgIDEuMSBcIkFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnNcIiBtZWFucyBzdWNoIGFkZGl0aW9uYWwgcHJvdmlzaW9ucyBhcyBhcHBlYXIgaW4gdGhlIE5vdGljZSBpbiBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSBoZWFkaW5nIFwiQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9ucy5cIlxuXG4gICAgICAxLjIgXCJBUElcIiBtZWFucyBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUuXG5cbiAgICAgIDEuMyBcIkNvdmVyZWQgQ29kZVwiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuXG5cbiAgICAgIDEuNCBcIkhhcmR3YXJlXCIgbWVhbnMgYW55IHBoeXNpY2FsIGRldmljZSB0aGF0IGFjY2VwdHMgaW5wdXQsIHByb2Nlc3NlcyBpbnB1dCwgc3RvcmVzIHRoZSByZXN1bHRzIG9mIHByb2Nlc3NpbmcsIGFuZC9vciBwcm92aWRlcyBvdXRwdXQuXG5cbiAgICAgIDEuNSBcIkxhcmdlciBXb3JrXCIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS42IFwiTGljZW5zYWJsZVwiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLlxuXG4gICAgICAxLjcgXCJMaWNlbnNlXCIgbWVhbnMgdGhpcyBkb2N1bWVudC5cblxuICAgICAgMS44IFwiTW9kaWZpY2F0aW9uc1wiIG1lYW5zIGFueSBhZGRpdGlvbiB0byB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQvb3IgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOlxuXG4gICAgICAgICBBLiBBbnkgYWRkaXRpb24gdG8gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgYW5kL29yIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgICAgIEIuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIDEuOSBcIk5vdGljZVwiIG1lYW5zIGFueSBub3RpY2UgaW4gT3JpZ2luYWwgQ29kZSBvciBDb3ZlcmVkIENvZGUsIGFzIHJlcXVpcmVkIGJ5IGFuZCBpbiBjb21wbGlhbmNlIHdpdGggdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjEwIFwiT3JpZ2luYWwgQ29kZVwiIG1lYW5zIHNvdXJjZSBjb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBzb3VyY2UgY29kZSBOb3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB1cGRhdGVzIGFuZCBlcnJvciBjb3JyZWN0aW9ucyBzcGVjaWZpY2FsbHkgdGhlcmV0by5cblxuICAgICAgMS4xMSBcIlJlY2lwaWVudFwiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gOC4gRm9yIGxlZ2FsIGVudGl0aWVzLCBcIlJlY2lwaWVudFwiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggUmVjaXBpZW50LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcImNvbnRyb2xcIiBvZiBhbiBlbnRpdHkgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBkaXJlY3Qgb3IgbWFuYWdlIHN1Y2ggZW50aXR5LCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAgICAxLjEyIFNHSVwiIG1lYW5zIFNpbGljb24gR3JhcGhpY3MsIEluYy5cblxuICAgMi4gTGljZW5zZSBHcmFudCBhbmQgUmVzdHJpY3Rpb25zLlxuXG4gICAgICAyLjEgTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UgYW5kIGFueSB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBmb3IgdGhlIGR1cmF0aW9uIG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBwcm90ZWN0aW9ucyBpbmhlcmVudCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgU0dJIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgdG8gZG8gdGhlIGZvbGxvd2luZzogKGkpIHVuZGVyIGNvcHlyaWdodHMgTGljZW5zYWJsZSBieSBTR0ksIHRvIHJlcHJvZHVjZSwgZGlzdHJpYnV0ZSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgZnJvbSwgYW5kLCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUsIGRpc3BsYXkgYW5kIHBlcmZvcm0gdGhlIE9yaWdpbmFsIENvZGUgYWxvbmUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kIChpaSkgdW5kZXIgYW55IHBhdGVudCBjbGFpbXMgTGljZW5zYWJsZSBieSBTR0kgYW5kIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBSZWNpcGllbnQgYWNjZXB0cyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIGJ5IHVuZGVydGFraW5nIGFueSBvZiB0aGUgYWZvcmVtZW50aW9uZWQgYWN0aW9ucy5cblxuICAgICAgMi4yIFJlc3RyaWN0aW9uIG9uIFBhdGVudCBMaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIHByb3Zpc2lvbnMgb2YgU2VjdGlvbiAyLjEoaWkpLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyBub3IgMikgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5IChpKSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgSGFyZHdhcmUuXG5cbiAgICAgIDIuMyBObyBMaWNlbnNlIEZvciBIYXJkd2FyZSBJbXBsZW1lbnRhdGlvbnMuIFRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb24gMi4xIGFyZSBub3QgYXBwbGljYWJsZSB0byBpbXBsZW1lbnRhdGlvbiBpbiBIYXJkd2FyZSBvZiB0aGUgYWxnb3JpdGhtcyBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgQ29kZS5cblxuICAgICAgMi40IE1vZGlmaWNhdGlvbnMgTGljZW5zZSBhbmQgQVBJIENvbXBsaWFuY2UuIE1vZGlmaWNhdGlvbnMgYXJlIG9ubHkgbGljZW5zZWQgdW5kZXIgU2VjdGlvbiAyLjEoaSkgdG8gdGhlIGV4dGVudCBzdWNoIE1vZGlmaWNhdGlvbnMgYXJlIGZ1bGx5IGNvbXBsaWFudCB3aXRoIGFueSBBUEkgYXMgbWF5IGJlIGlkZW50aWZpZWQgaW4gQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9ucyBhcyBhcHBlYXIgaW4gdGhlIE9yaWdpbmFsIENvZGUuXG5cbiAgIDMuIFJlZGlzdHJpYnV0aW9ucy5cblxuICAgICAgQS4gUmV0ZW50aW9uIG9mIE5vdGljZS9Db3B5IG9mIExpY2Vuc2UuIFRoZSBOb3RpY2Ugc2V0IGZvcnRoIGluIEV4aGliaXQgQSwgYmVsb3csIG11c3QgYmUgY29uc3BpY3VvdXNseSByZXRhaW5lZCBvciBpbmNsdWRlZCBpbiBhbnkgYW5kIGFsbCByZWRpc3RyaWJ1dGlvbnMgb2YgQ292ZXJlZCBDb2RlLiBGb3IgZGlzdHJpYnV0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGluIHNvdXJjZSBjb2RlIGZvcm0sIHRoZSBOb3RpY2UgbXVzdCBhcHBlYXIgaW4gZXZlcnkgZmlsZSB0aGF0IGNhbiBpbmNsdWRlIGEgdGV4dCBjb21tZW50cyBmaWVsZDsgaW4gZXhlY3V0YWJsZSBmb3JtLCB0aGUgTm90aWNlIGFuZCBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIG11c3QgYXBwZWFyIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIHdoZXJlIHRoZSBSZWNpcGllbnQncyByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlIGFyZSBkZXNjcmliZWQuIEFueSBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zIHdoaWNoIGFjdHVhbGx5IGFwcGVhcnMgaW4gdGhlIE9yaWdpbmFsIENvZGUgbXVzdCBhbHNvIGJlIHJldGFpbmVkIG9yIGluY2x1ZGVkIGluIGFueSBhbmQgYWxsIHJlZGlzdHJpYnV0aW9ucyBvZiBDb3ZlcmVkIENvZGUuXG5cbiAgICAgIEIuIEFsdGVybmF0aXZlIExpY2Vuc2UuIFByb3ZpZGVkIHRoYXQgUmVjaXBpZW50IGlzIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBSZWNpcGllbnQgbWF5IGRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlIGFuZC9vciBleGVjdXRhYmxlIHZlcnNpb24ocykgb2YgQ292ZXJlZCBDb2RlIHVuZGVyICgxKSB0aGlzIExpY2Vuc2U7ICgyKSBhIGxpY2Vuc2UgaWRlbnRpY2FsIHRvIHRoaXMgTGljZW5zZSBidXQgZm9yIG9ubHkgc3VjaCBjaGFuZ2VzIGFzIGFyZSBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gY2xhcmlmeSBSZWNpcGllbnQncyByb2xlIGFzIGxpY2Vuc29yIG9mIE1vZGlmaWNhdGlvbnMsIHdpdGhvdXQgZGVyb2dhdGlvbiBvZiBhbnkgb2YgU0dJJ3MgcmlnaHRzOyBhbmQvb3IgKDMpIGEgbGljZW5zZSBvZiBSZWNpcGllbnQncyBjaG9vc2luZywgY29udGFpbmluZyB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgdGhlIGxpY2Vuc2UgdGVybXMgaW5jbHVkZSB0aGlzIFNlY3Rpb24gMyBhbmQgU2VjdGlvbnMgNCwgNiwgNywgMTAsIDEyLCBhbmQgMTMsIHdoaWNoIHRlcm1zIG1heSBub3QgYmUgbW9kaWZpZWQgb3Igc3VwZXJzZWRlZCBieSBhbnkgb3RoZXIgdGVybXMgb2Ygc3VjaCBsaWNlbnNlLiBJZiBSZWNpcGllbnQgZWxlY3RzIHRvIHVzZSBhbnkgbGljZW5zZSBvdGhlciB0aGFuIHRoaXMgTGljZW5zZSwgUmVjaXBpZW50IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IG9mIGl0cyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgUmVjaXBpZW50IGFsb25lLCBhbmQgbm90IGJ5IFNHSS5cblxuICAgICAgQy4gSW5kZW1uaXR5LiBSZWNpcGllbnQgaGVyZWJ5IGFncmVlcyB0byBpbmRlbW5pZnkgU0dJIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IFNHSSBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCBhbHRlcm5hdGl2ZSBsaWNlbnNlIHRlcm1zIFJlY2lwaWVudCBvZmZlcnMuXG5cbiAgIDQuIFRlcm1pbmF0aW9uLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBSZWNpcGllbnQgYnJlYWNoZXMgYW55IHRlcm0gaGVyZWluIGFuZCBmYWlscyB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIHRoZXJlb2YuIEFueSBzdWJsaWNlbnNlIHRvIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBpcyBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSwgYWJzZW50IHRlcm1pbmF0aW9uIGJ5IHRoZSB0ZXJtcyBvZiBzdWNoIHN1YmxpY2Vuc2UuIFByb3Zpc2lvbnMgdGhhdCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHNoYWxsIHN1cnZpdmUuXG5cbiAgIDUuIE5vIFRyYWRlbWFyayBPciBPdGhlciBSaWdodHMuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvOiAoaSkgYW55IHNvZnR3YXJlIGFwYXJ0IGZyb20gdGhlIENvdmVyZWQgQ29kZSwgbm9yIHNoYWxsIGFueSBvdGhlciByaWdodHMgb3IgbGljZW5zZXMgbm90IGV4cHJlc3NseSBncmFudGVkIGhlcmV1bmRlciBhcmlzZSBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIHdpdGggcmVzcGVjdCB0byB0aGUgQ292ZXJlZCBDb2RlOyAoaWkpIGFueSB0cmFkZSBuYW1lLCB0cmFkZW1hcmsgb3Igc2VydmljZSBtYXJrIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHJlbGF0ZWQgcmlnaHQgZm9yIHB1cnBvc2VzIG9mIGVuZG9yc2VtZW50IG9yIHByb21vdGlvbiBvZiBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIENvdmVyZWQgQ29kZSwgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgU0dJOyBvciAoaWlpKSBhbnkgdGl0bGUgdG8gb3Igb3duZXJzaGlwIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCB3aGljaCBzaGFsbCBhdCBhbGwgdGltZXMgcmVtYWlucyB3aXRoIFNHSS4gQWxsIHJpZ2h0cyBpbiB0aGUgT3JpZ2luYWwgQ29kZSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSByZXNlcnZlZC5cblxuICAgNi4gQ29tcGxpYW5jZSB3aXRoIExhd3M7IE5vbi1JbmZyaW5nZW1lbnQuIFJlY2lwaWVudCBoZXJlYnkgYXNzdXJlcyB0aGF0IGl0IHNoYWxsIGNvbXBseSB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MsIHJlZ3VsYXRpb25zLCBhbmQgZXhlY3V0aXZlIG9yZGVycywgaW4gY29ubmVjdGlvbiB3aXRoIGFueSBhbmQgYWxsIGRpc3Bvc2l0aW9ucyBvZiBDb3ZlcmVkIENvZGUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8sIGFsbCBleHBvcnQsIHJlLWV4cG9ydCwgYW5kIGltcG9ydCBjb250cm9sIGxhd3MsIHJlZ3VsYXRpb25zLCBhbmQgZXhlY3V0aXZlIG9yZGVycywgb2YgdGhlIFUuUy4gZ292ZXJubWVudCBhbmQgb3RoZXIgY291bnRyaWVzLiBSZWNpcGllbnQgbWF5IG5vdCBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSB0aGF0IChpKSBpbiBhbnkgd2F5IGluZnJpbmdlcyAoZGlyZWN0bHkgb3IgY29udHJpYnV0b3JpbHkpIHRoZSByaWdodHMgKGluY2x1ZGluZyBwYXRlbnQsIGNvcHlyaWdodCwgdHJhZGUgc2VjcmV0LCB0cmFkZW1hcmsgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkga2luZCkgb2YgYW55IG90aGVyIHBlcnNvbiBvciBlbnRpdHkgb3IgKGlpKSBicmVhY2hlcyBhbnkgcmVwcmVzZW50YXRpb24gb3Igd2FycmFudHksIGV4cHJlc3MsIGltcGxpZWQgb3Igc3RhdHV0b3J5LCB0byB3aGljaCwgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3LCBpdCBtaWdodCBiZSBkZWVtZWQgdG8gaGF2ZSBiZWVuIHN1YmplY3QuXG5cbiAgIDcuIENsYWltcyBvZiBJbmZyaW5nZW1lbnQuIElmIFJlY2lwaWVudCBsZWFybnMgb2YgYW55IHRoaXJkIHBhcnR5IGNsYWltIHRoYXQgYW55IGRpc3Bvc2l0aW9uIG9mIENvdmVyZWQgQ29kZSBhbmQvb3IgZnVuY3Rpb25hbGl0eSB3aG9sbHkgb3IgcGFydGlhbGx5IGluZnJpbmdlcyB0aGUgdGhpcmQgcGFydHkncyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLCBSZWNpcGllbnQgd2lsbCBwcm9tcHRseSBub3RpZnkgU0dJIG9mIHN1Y2ggY2xhaW0uXG5cbiAgIDguIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiBTR0kgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLCBlYWNoIHdpdGggYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBSZWNpcGllbnQgbWF5LCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBsaWNlbnNlLCBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbiwgb3IgY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBwdWJsaXNoZWQgYnkgU0dJLiBTdWJqZWN0IHRvIHRoZSBwcm92aXNpb25zIG9mIFNlY3Rpb25zIDMgYW5kIDQgb2YgdGhpcyBMaWNlbnNlLCBvbmx5IFNHSSBtYXkgbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgOS4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4gQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFwiQVMgSVMuXCIgQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUyBBUkUgRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULiBTR0kgQVNTVU1FUyBOTyBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgU09GVFdBUkUuIFNIT1VMRCBUSEUgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBTR0kgQVNTVU1FUyBOTyBDT1NUIE9SIExJQUJJTElUWSBGT1IgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIElTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFNVQkpFQ1QgVE8gVEhJUyBESVNDTEFJTUVSLlxuXG4gICAxMC4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgTk9SIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgTkVHTElHRU5DRSBPUiBTVFJJQ1QgTElBQklMSVRZKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgU0dJIE9SIEFOWSBTR0kgTElDRU5TT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIExPU1MgT0YgREFUQSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTR0kncyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIQVQgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gUkVDSVBJRU5ULlxuXG4gICAxMS4gSW5kZW1uaXR5LiBSZWNpcGllbnQgc2hhbGwgYmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gUmVjaXBpZW50IHdpbGwgZGVmZW5kLCBpbmRlbW5pZnkgYW5kIGhvbGQgaGFybWxlc3MgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBmcm9tIGFuZCBhZ2FpbnN0IGFueSBsb3NzLCBsaWFiaWxpdHksIGRhbWFnZXMsIGNvc3RzIG9yIGV4cGVuc2VzIChpbmNsdWRpbmcgdGhlIHBheW1lbnQgb2YgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcykgYXJpc2luZyBvdXQgb2YgUmVjaXBpZW50J3MgdXNlLCBtb2RpZmljYXRpb24sIHJlcHJvZHVjdGlvbiBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgb3Igb3V0IG9mIGFueSByZXByZXNlbnRhdGlvbiBvciB3YXJyYW50eSBtYWRlIGJ5IFJlY2lwaWVudC5cblxuICAgMTIuIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSBcImNvbW1lcmNpYWwgaXRlbVwiIGNvbnNpc3Rpbmcgb2YgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlXCIgYXMgc3VjaCB0ZXJtcyBhcmUgZGVmaW5lZCBpbiB0aXRsZSA0OCBvZiB0aGUgQ29kZSBvZiBGZWRlcmFsIFJlZ3VsYXRpb25zIGFuZCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIG9ubHkgdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlIGFuZCBhcmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAxMy4gTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBpdHMgc3ViamVjdCBtYXR0ZXIuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgc28gYXMgdG8gYWNoaWV2ZSBhcyBuZWFybHkgYXMgcG9zc2libGUgdGhlIHNhbWUgbGVnYWwgYW5kIGVjb25vbWljIGVmZmVjdCBhcyB0aGUgb3JpZ2luYWwgcHJvdmlzaW9uIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsIHJlbWFpbiBpbiBlZmZlY3QuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEgYXMgYXBwbGllZCB0byBhZ3JlZW1lbnRzIGVudGVyZWQgaW50byBhbmQgdG8gYmUgcGVyZm9ybWVkIGVudGlyZWx5IHdpdGhpbiBDYWxpZm9ybmlhIGJldHdlZW4gQ2FsaWZvcm5pYSByZXNpZGVudHMuIEFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBleGNsdXNpdmUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSAob3IsIGFic2VudCBzdWJqZWN0IG1hdHRlciBqdXJpc2RpY3Rpb24gaW4gc3VjaCBjb3VydHMsIHRoZSBjb3VydHMgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEpLCB3aXRoIHZlbnVlIGx5aW5nIGV4Y2x1c2l2ZWx5IGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4gRXhoaWJpdCBBXG5cbkxpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjAgKHRoZSBcIkxpY2Vuc2VcIiksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAgQW1waXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6XG5cbmh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQlxuXG5Ob3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMgRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULlxuXG5PcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogWyBuYW1lIG9mIHNvZnR3YXJlICwgdmVyc2lvbiBudW1iZXIgLCBhbmQgcmVsZWFzZSBkYXRlXSwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSBbIGRhdGVzIG9mIGZpcnN0IHB1YmxpY2F0aW9uLCBhcyBhcHBlYXJpbmcgaW4gdGhlIE5vdGljZSBpbiB0aGUgT3JpZ2luYWwgQ29kZV0gU2lsaWNvbiBHcmFwaGljcywgSW5jLiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQgZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogWyBzdWNoIGFkZGl0aW9uYWwgcHJvdmlzaW9ucywgaWYgYW55LCBhcyBhcHBlYXIgaW4gdGhlIE5vdGljZSBpbiB0aGUgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgaGVhZGluZyBcIkFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnNcIl0iXSwibGljZW5zZUlkcyI6WyJTR0ktQi0xLjAiXSwia2V5d29yZHMiOlsiMCAxIDI1IiwiMSAyNSAyMDAwIiwiMjUgMjAwMCAxIiwiMSAyIGFwaSIsIjIgYXBpIG1lYW5zIiwiYXBpIG1lYW5zIGFuIiwicHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGVzdGFibGlzaGVkIiwiaW50ZXJmYWNlIGVzdGFibGlzaGVkIGJ5IiwiZXN0YWJsaXNoZWQgYnkgc2dpIiwic2dpIGluIGNvbmp1bmN0aW9uIiwiMSA0IGhhcmR3YXJlIiwiNCBoYXJkd2FyZSBtZWFucyIsIm91dHB1dCAxIDUiLCIxIDYgbGljZW5zYWJsZSIsIjYgbGljZW5zYWJsZSBtZWFucyIsImhlcmVpbiAxIDciLCIxIDEyIHNnaSIsIjEyIHNnaSBtZWFucyIsImdyYXBoaWNzIGluYyAyIiwiaW5jIDIgbGljZW5zZSIsIjIgMSBsaWNlbnNlIiwiMSBsaWNlbnNlIGdyYW50IiwiYnkgc2dpIGFuZCIsInNnaSBhbmQgZW1ib2RpZWQiLCJhbmQgZW1ib2RpZWQgaW4iLCJvcmlnaW5hbCBjb2RlIHJlY2lwaWVudCIsImNvZGUgcmVjaXBpZW50IGFjY2VwdHMiLCJhZm9yZW1lbnRpb25lZCBhY3Rpb25zIDIiLCJhY3Rpb25zIDIgMiIsIjIgMiByZXN0cmljdGlvbiIsIjIgcmVzdHJpY3Rpb24gb24iLCJyZXN0cmljdGlvbiBvbiBwYXRlbnQiLCJwYXRlbnQgbGljZW5zZSBub3R3aXRoc3RhbmRpbmciLCJub3R3aXRoc3RhbmRpbmcgdGhlIHByb3Zpc2lvbnMiLCIxIGlpIG5vIiwiaWkgbm8gcGF0ZW50IiwiZ3JhbnRlZCAxIHNlcGFyYXRlIiwiMSBzZXBhcmF0ZSBmcm9tIiwib3JpZ2luYWwgY29kZSBub3IiLCJjb2RlIG5vciAyIiwibm9yIDIgZm9yIiwiYnkgaSBtb2RpZmljYXRpb24iLCJpIG1vZGlmaWNhdGlvbiBvZiIsIm9yIGhhcmR3YXJlIDIiLCJoYXJkd2FyZSAyIDMiLCIyIDEgYXJlIiwiMSBhcmUgbm90IiwiNCBtb2RpZmljYXRpb25zIGxpY2Vuc2UiLCJtb2RpZmljYXRpb25zIGxpY2Vuc2UgYW5kIiwibGljZW5zZSBhbmQgYXBpIiwiYW5kIGFwaSBjb21wbGlhbmNlIiwiYXBpIGNvbXBsaWFuY2UgbW9kaWZpY2F0aW9ucyIsImNvbXBsaWFuY2UgbW9kaWZpY2F0aW9ucyBhcmUiLCJtb2RpZmljYXRpb25zIGFyZSBvbmx5IiwiYXJlIG9ubHkgbGljZW5zZWQiLCJvbmx5IGxpY2Vuc2VkIHVuZGVyIiwibGljZW5zZWQgdW5kZXIgc2VjdGlvbiIsIjIgMSBpIiwiMSBpIHRvIiwiaSB0byB0aGUiLCJleHRlbnQgc3VjaCBtb2RpZmljYXRpb25zIiwic3VjaCBtb2RpZmljYXRpb25zIGFyZSIsIm1vZGlmaWNhdGlvbnMgYXJlIGZ1bGx5IiwiYXJlIGZ1bGx5IGNvbXBsaWFudCIsImZ1bGx5IGNvbXBsaWFudCB3aXRoIiwiY29tcGxpYW50IHdpdGggYW55Iiwid2l0aCBhbnkgYXBpIiwiYW55IGFwaSBhcyIsImFwaSBhcyBtYXkiLCJtYXkgYmUgaWRlbnRpZmllZCIsImJlIGlkZW50aWZpZWQgaW4iLCJpZGVudGlmaWVkIGluIGFkZGl0aW9uYWwiLCJpbiBhZGRpdGlvbmFsIG5vdGljZSIsIm5vdGljZSBwcm92aXNpb25zIGFzIiwib3JpZ2luYWwgY29kZSAzIiwiY29kZSAzIHJlZGlzdHJpYnV0aW9ucyIsIjMgcmVkaXN0cmlidXRpb25zIGEiLCJyZWRpc3RyaWJ1dGlvbnMgYSByZXRlbnRpb24iLCJhIHJldGVudGlvbiBvZiIsImNvZGUgYiBhbHRlcm5hdGl2ZSIsImIgYWx0ZXJuYXRpdmUgbGljZW5zZSIsInJlY2lwaWVudCBtYXkgZGlzdHJpYnV0ZSIsIm9mIG1vZGlmaWNhdGlvbnMgd2l0aG91dCIsIm1vZGlmaWNhdGlvbnMgd2l0aG91dCBkZXJvZ2F0aW9uIiwicyByaWdodHMgYW5kIiwicmlnaHRzIGFuZCBvciIsImJ5IHNnaSBjIiwic2dpIGMgaW5kZW1uaXR5IiwiYyBpbmRlbW5pdHkgcmVjaXBpZW50Iiwibm9uIGluZnJpbmdlbWVudCByZWNpcGllbnQiLCJpbmZyaW5nZW1lbnQgcmVjaXBpZW50IGhlcmVieSIsInJlY2lwaWVudCBoZXJlYnkgYXNzdXJlcyIsImhlcmVieSBhc3N1cmVzIHRoYXQiLCJhc3N1cmVzIHRoYXQgaXQiLCJpdCBzaGFsbCBjb21wbHkiLCJzaGFsbCBjb21wbHkgd2l0aCIsImV4ZWN1dGl2ZSBvcmRlcnMgaW4iLCJvcmRlcnMgaW4gY29ubmVjdGlvbiIsImFuZCBhbGwgZGlzcG9zaXRpb25zIiwiYWxsIGRpc3Bvc2l0aW9ucyBvZiIsImFsbCBleHBvcnQgcmUiLCJvdGhlciBjb3VudHJpZXMgcmVjaXBpZW50IiwiY291bnRyaWVzIHJlY2lwaWVudCBtYXkiLCJvciBjb250cmlidXRvcmlseSB0aGUiLCJjb250cmlidXRvcmlseSB0aGUgcmlnaHRzIiwidGhlIHJpZ2h0cyBpbmNsdWRpbmciLCJyaWdodHMgaW5jbHVkaW5nIHBhdGVudCIsImluY2x1ZGluZyBwYXRlbnQgY29weXJpZ2h0IiwidHJhZGUgc2VjcmV0IHRyYWRlbWFyayIsInNlY3JldCB0cmFkZW1hcmsgb3IiLCJzZXJ2aWNlcyAxNjAwIGFtcGl0aGVhdHJlIiwiMTYwMCBhbXBpdGhlYXRyZSBwYXJrd2F5IiwiYW1waXRoZWF0cmUgcGFya3dheSBtb3VudGFpbiIsIjEgMCAxIDI1IiwiMCAxIDI1IDIwMDAiLCIxIDI1IDIwMDAgMSIsIjI1IDIwMDAgMSBkZWZpbml0aW9ucyIsInByb3Zpc2lvbnMgMSAyIGFwaSIsIjEgMiBhcGkgbWVhbnMiLCIyIGFwaSBtZWFucyBhbiIsImFwaSBtZWFucyBhbiBhcHBsaWNhdGlvbiIsIm1lYW5zIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIiwiYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGVzdGFibGlzaGVkIiwicHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGVzdGFibGlzaGVkIGJ5IiwiaW50ZXJmYWNlIGVzdGFibGlzaGVkIGJ5IHNnaSIsImVzdGFibGlzaGVkIGJ5IHNnaSBpbiIsImJ5IHNnaSBpbiBjb25qdW5jdGlvbiIsInNnaSBpbiBjb25qdW5jdGlvbiB3aXRoIiwiY29uanVuY3Rpb24gd2l0aCB0aGUgb3JpZ2luYWwiLCJ0aGUgb3JpZ2luYWwgY29kZSAxIiwidGhlcmVvZiAxIDQgaGFyZHdhcmUiLCIxIDQgaGFyZHdhcmUgbWVhbnMiLCI0IGhhcmR3YXJlIG1lYW5zIGFueSIsInByb3ZpZGVzIG91dHB1dCAxIDUiLCJvdXRwdXQgMSA1IGxhcmdlciIsImxpY2Vuc2UgMSA2IGxpY2Vuc2FibGUiLCIxIDYgbGljZW5zYWJsZSBtZWFucyIsIjYgbGljZW5zYWJsZSBtZWFucyBoYXZpbmciLCJjb252ZXllZCBoZXJlaW4gMSA3IiwiaGVyZWluIDEgNyBsaWNlbnNlIiwiZG9jdW1lbnQgMSA4IG1vZGlmaWNhdGlvbnMiLCJhZGRpdGlvbiB0byB0aGUgc3Vic3RhbmNlIiwiZnJvbSBwcmV2aW91cyBtb2RpZmljYXRpb25zIHdoZW4iLCJmcm9tIHByZXZpb3VzIG1vZGlmaWNhdGlvbnMgYiIsImVudGl0eSAxIDEyIHNnaSIsIjEgMTIgc2dpIG1lYW5zIiwiMTIgc2dpIG1lYW5zIHNpbGljb24iLCJzaWxpY29uIGdyYXBoaWNzIGluYyAyIiwiZ3JhcGhpY3MgaW5jIDIgbGljZW5zZSIsImluYyAyIGxpY2Vuc2UgZ3JhbnQiLCJyZXN0cmljdGlvbnMgMiAxIGxpY2Vuc2UiLCIyIDEgbGljZW5zZSBncmFudCIsIjEgbGljZW5zZSBncmFudCBzdWJqZWN0IiwiY29kZSBhbG9uZSBhbmQgb3IiLCJpaSB1bmRlciBhbnkgcGF0ZW50IiwidW5kZXIgYW55IHBhdGVudCBjbGFpbXMiLCJsaWNlbnNhYmxlIGJ5IHNnaSBhbmQiLCJieSBzZ2kgYW5kIGVtYm9kaWVkIiwic2dpIGFuZCBlbWJvZGllZCBpbiIsImFuZCBlbWJvZGllZCBpbiB0aGUiLCJ0aGUgb3JpZ2luYWwgY29kZSByZWNpcGllbnQiLCJvcmlnaW5hbCBjb2RlIHJlY2lwaWVudCBhY2NlcHRzIiwiY29kZSByZWNpcGllbnQgYWNjZXB0cyB0aGUiLCJ0aGUgYWZvcmVtZW50aW9uZWQgYWN0aW9ucyAyIiwiYWZvcmVtZW50aW9uZWQgYWN0aW9ucyAyIDIiLCJhY3Rpb25zIDIgMiByZXN0cmljdGlvbiIsIjIgMiByZXN0cmljdGlvbiBvbiIsIjIgcmVzdHJpY3Rpb24gb24gcGF0ZW50IiwicmVzdHJpY3Rpb24gb24gcGF0ZW50IGxpY2Vuc2UiLCJvbiBwYXRlbnQgbGljZW5zZSBub3R3aXRoc3RhbmRpbmciLCJwYXRlbnQgbGljZW5zZSBub3R3aXRoc3RhbmRpbmcgdGhlIiwibGljZW5zZSBub3R3aXRoc3RhbmRpbmcgdGhlIHByb3Zpc2lvbnMiLCJub3R3aXRoc3RhbmRpbmcgdGhlIHByb3Zpc2lvbnMgb2YiLCJwcm92aXNpb25zIG9mIHNlY3Rpb24gMiIsIjIgMSBpaSBubyIsIjEgaWkgbm8gcGF0ZW50IiwiaWkgbm8gcGF0ZW50IGxpY2Vuc2UiLCJpcyBncmFudGVkIDEgc2VwYXJhdGUiLCJncmFudGVkIDEgc2VwYXJhdGUgZnJvbSIsIjEgc2VwYXJhdGUgZnJvbSB0aGUiLCJ0aGUgb3JpZ2luYWwgY29kZSBub3IiLCJvcmlnaW5hbCBjb2RlIG5vciAyIiwiY29kZSBub3IgMiBmb3IiLCJub3IgMiBmb3IgaW5mcmluZ2VtZW50cyIsImNhdXNlZCBieSBpIG1vZGlmaWNhdGlvbiIsImJ5IGkgbW9kaWZpY2F0aW9uIG9mIiwiaSBtb2RpZmljYXRpb24gb2YgdGhlIiwic29mdHdhcmUgb3IgaGFyZHdhcmUgMiIsIm9yIGhhcmR3YXJlIDIgMyIsImhhcmR3YXJlIDIgMyBubyIsInNlY3Rpb24gMiAxIGFyZSIsIjIgMSBhcmUgbm90IiwiMSBhcmUgbm90IGFwcGxpY2FibGUiLCJvcmlnaW5hbCBjb2RlIDIgNCIsImNvZGUgMiA0IG1vZGlmaWNhdGlvbnMiLCIyIDQgbW9kaWZpY2F0aW9ucyBsaWNlbnNlIiwiNCBtb2RpZmljYXRpb25zIGxpY2Vuc2UgYW5kIiwibW9kaWZpY2F0aW9ucyBsaWNlbnNlIGFuZCBhcGkiLCJsaWNlbnNlIGFuZCBhcGkgY29tcGxpYW5jZSIsImFuZCBhcGkgY29tcGxpYW5jZSBtb2RpZmljYXRpb25zIl19LHsibGljZW5zZVRleHRzIjpbIlNHSSBGUkVFIFNPRlRXQVJFIExJQ0VOU0UgQlxuXG4oVmVyc2lvbiAxLjEgMDIvMjIvMjAwMClcblxuICAgMS4gRGVmaW5pdGlvbnMuXG5cbiAgICAgIDEuMSBcIkFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnNcIiBtZWFucyBzdWNoIGFkZGl0aW9uYWwgcHJvdmlzaW9ucyBhcyBhcHBlYXIgaW4gdGhlIE5vdGljZSBpbiBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSBoZWFkaW5nIFwiQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9ucy5cIlxuXG4gICAgICAxLjIgXCJDb3ZlcmVkIENvZGVcIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zLCBvciBhbnkgY29tYmluYXRpb24gdGhlcmVvZi5cblxuICAgICAgMS4zIFwiSGFyZHdhcmVcIiBtZWFucyBhbnkgcGh5c2ljYWwgZGV2aWNlIHRoYXQgYWNjZXB0cyBpbnB1dCwgcHJvY2Vzc2VzIGlucHV0LCBzdG9yZXMgdGhlIHJlc3VsdHMgb2YgcHJvY2Vzc2luZywgYW5kL29yIHByb3ZpZGVzIG91dHB1dC5cblxuICAgICAgMS40IFwiTGFyZ2VyIFdvcmtcIiBtZWFucyBhIHdvcmsgdGhhdCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuNSBcIkxpY2Vuc2FibGVcIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi5cblxuICAgICAgMS42IFwiTGljZW5zZVwiIG1lYW5zIHRoaXMgZG9jdW1lbnQuXG5cbiAgICAgIDEuNyBcIkxpY2Vuc2VkIFBhdGVudHNcIiBtZWFucyBwYXRlbnQgY2xhaW1zIExpY2Vuc2FibGUgYnkgU0dJIHRoYXQgYXJlIGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgT3JpZ2luYWwgQ29kZSBvciBhbnkgTW9kaWZpY2F0aW9ucyBwcm92aWRlZCBieSBTR0ksIG9yIGFueSBjb21iaW5hdGlvbiB0aGVyZW9mLlxuXG4gICAgICAxLjggXCJNb2RpZmljYXRpb25zXCIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczpcblxuICAgICAgICAgQS4gQW55IGFkZGl0aW9uIHRvIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIGFuZC9vciBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICAgICAgICBCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICAgICAxLjkgXCJOb3RpY2VcIiBtZWFucyBhbnkgbm90aWNlIGluIE9yaWdpbmFsIENvZGUgb3IgQ292ZXJlZCBDb2RlLCBhcyByZXF1aXJlZCBieSBhbmQgaW4gY29tcGxpYW5jZSB3aXRoIHRoaXMgTGljZW5zZS5cblxuICAgICAgMS4xMCBcIk9yaWdpbmFsIENvZGVcIiBtZWFucyBzb3VyY2UgY29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHRoYXQgaXMgZGVzY3JpYmVkIGluIHRoZSBzb3VyY2UgY29kZSBOb3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB1cGRhdGVzIGFuZCBlcnJvciBjb3JyZWN0aW9ucyBzcGVjaWZpY2FsbHkgdGhlcmV0by5cblxuICAgICAgMS4xMSBcIlJlY2lwaWVudFwiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gOC4gRm9yIGxlZ2FsIGVudGl0aWVzLCBcIlJlY2lwaWVudFwiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBSZWNpcGllbnQuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbFwiIG9mIGFuIGVudGl0eSBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGRpcmVjdCBvciBtYW5hZ2Ugc3VjaCBlbnRpdHksIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgICAgIDEuMTIgXCJSZWNpcGllbnQgUGF0ZW50c1wiIG1lYW5zIHBhdGVudCBjbGFpbXMgTGljZW5zYWJsZSBieSBhIFJlY2lwaWVudCB0aGF0IGFyZSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIE9yaWdpbmFsIENvZGUgb3IgYW55IE1vZGlmaWNhdGlvbnMgcHJvdmlkZWQgYnkgU0dJLCBvciBhbnkgY29tYmluYXRpb24gdGhlcmVvZi5cblxuICAgICAgMS4xMyBcIlNHSVwiIG1lYW5zIFNpbGljb24gR3JhcGhpY3MsIEluYy5cblxuICAgICAgMS4xNCBcIlNHSSBQYXRlbnRzXCIgbWVhbnMgcGF0ZW50IGNsYWltcyBMaWNlbnNhYmxlIGJ5IFNHSSBvdGhlciB0aGFuIHRoZSBMaWNlbnNlZCBQYXRlbnRzLlxuXG4gICAyLiBMaWNlbnNlIEdyYW50IGFuZCBSZXN0cmljdGlvbnMuXG5cbiAgICAgIDIuMSBTR0kgTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBhbnkgdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZm9yIHRoZSBkdXJhdGlvbiBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcHJvdGVjdGlvbnMgaW5oZXJlbnQgaW4gdGhlIE9yaWdpbmFsIENvZGUsIFNHSSBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHRvIGRvIHRoZSBmb2xsb3dpbmc6IChpKSB1bmRlciBjb3B5cmlnaHRzIExpY2Vuc2FibGUgYnkgU0dJLCB0byByZXByb2R1Y2UsIGRpc3RyaWJ1dGUsIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIGZyb20sIGFuZCwgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlLCBkaXNwbGF5IGFuZCBwZXJmb3JtIHRoZSBPcmlnaW5hbCBDb2RlIGFuZC9vciBhbnkgTW9kaWZpY2F0aW9ucyBwcm92aWRlZCBieSBTR0kgYWxvbmUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kIChpaSkgdW5kZXIgYW55IExpY2Vuc2FibGUgUGF0ZW50cywgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQgYW5kL29yIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgT3JpZ2luYWwgQ29kZSBhbmQvb3IgYW55IE1vZGlmaWNhdGlvbnMgcHJvdmlkZWQgYnkgU0dJLiBSZWNpcGllbnQgYWNjZXB0cyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIGJ5IHVuZGVydGFraW5nIGFueSBvZiB0aGUgYWZvcmVtZW50aW9uZWQgYWN0aW9ucy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBDb3ZlcmVkIENvZGUgaWYsIGF0IHRoZSB0aW1lIGFueSByZWxhdGVkIE1vZGlmaWNhdGlvbiBpcyBhZGRlZCwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgTW9kaWZpY2F0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBpbiBTZWN0aW9uIDIuMShpaSkgc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgdGhhdCBpbmNsdWRlIHRoZSBNb2RpZmljYXRpb24uIE5vIHBhdGVudCBsaWNlbnNlIGlzIHByb3ZpZGVkIHVuZGVyIFNHSSBQYXRlbnRzIGZvciBpbmZyaW5nZW1lbnRzIG9mIFNHSSBQYXRlbnRzIGJ5IE1vZGlmaWNhdGlvbnMgbm90IHByb3ZpZGVkIGJ5IFNHSSBvciBjb21iaW5hdGlvbnMgb2YgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucyBub3QgcHJvdmlkZWQgYnkgU0dJLlxuXG4gICAgICAyLjIgUmVjaXBpZW50IExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgYW55IHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIFJlY2lwaWVudCBoZXJlYnkgZ3JhbnRzIFNHSSBhbmQgYW55IG90aGVyIFJlY2lwaWVudHMgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB1bmRlciBhbnkgUmVjaXBpZW50IFBhdGVudHMsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZC9vciBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIE9yaWdpbmFsIENvZGUgYW5kL29yIGFueSBNb2RpZmljYXRpb25zIHByb3ZpZGVkIGJ5IFNHSS5cblxuICAgICAgMi4zIE5vIExpY2Vuc2UgRm9yIEhhcmR3YXJlIEltcGxlbWVudGF0aW9ucy4gVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbiAyLjEgYW5kIDIuMiBhcmUgbm90IGFwcGxpY2FibGUgdG8gaW1wbGVtZW50YXRpb24gaW4gSGFyZHdhcmUgb2YgdGhlIGFsZ29yaXRobXMgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IE1vZGlmaWNhdGlvbnMgcHJvdmlkZWQgYnkgU0dJIC5cblxuICAgMy4gUmVkaXN0cmlidXRpb25zLlxuXG4gICAgICAzLjEgUmV0ZW50aW9uIG9mIE5vdGljZS9Db3B5IG9mIExpY2Vuc2UuIFRoZSBOb3RpY2Ugc2V0IGZvcnRoIGluIEV4aGliaXQgQSwgYmVsb3csIG11c3QgYmUgY29uc3BpY3VvdXNseSByZXRhaW5lZCBvciBpbmNsdWRlZCBpbiBhbnkgYW5kIGFsbCByZWRpc3RyaWJ1dGlvbnMgb2YgQ292ZXJlZCBDb2RlLiBGb3IgZGlzdHJpYnV0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGluIHNvdXJjZSBjb2RlIGZvcm0sIHRoZSBOb3RpY2UgbXVzdCBhcHBlYXIgaW4gZXZlcnkgZmlsZSB0aGF0IGNhbiBpbmNsdWRlIGEgdGV4dCBjb21tZW50cyBmaWVsZDsgaW4gZXhlY3V0YWJsZSBmb3JtLCB0aGUgTm90aWNlIGFuZCBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIG11c3QgYXBwZWFyIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIHdoZXJlIHRoZSBSZWNpcGllbnQncyByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlIGFyZSBkZXNjcmliZWQuIEFueSBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zIHdoaWNoIGFjdHVhbGx5IGFwcGVhcnMgaW4gdGhlIE9yaWdpbmFsIENvZGUgbXVzdCBhbHNvIGJlIHJldGFpbmVkIG9yIGluY2x1ZGVkIGluIGFueSBhbmQgYWxsIHJlZGlzdHJpYnV0aW9ucyBvZiBDb3ZlcmVkIENvZGUuXG5cbiAgICAgIDMuMiBBbHRlcm5hdGl2ZSBMaWNlbnNlLiBQcm92aWRlZCB0aGF0IFJlY2lwaWVudCBpcyBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgUmVjaXBpZW50IG1heSwgc28gbG9uZyBhcyB3aXRob3V0IGRlcm9nYXRpb24gb2YgYW55IG9mIFNHSSdzIHJpZ2h0cyBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIENvZGUsIGRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlIGFuZC9vciBleGVjdXRhYmxlIHZlcnNpb24ocykgb2YgQ292ZXJlZCBDb2RlIHVuZGVyICgxKSB0aGlzIExpY2Vuc2U7ICgyKSBhIGxpY2Vuc2UgaWRlbnRpY2FsIHRvIHRoaXMgTGljZW5zZSBidXQgZm9yIG9ubHkgc3VjaCBjaGFuZ2VzIGFzIGFyZSBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gY2xhcmlmeSBSZWNpcGllbnQncyByb2xlIGFzIGxpY2Vuc29yIG9mIE1vZGlmaWNhdGlvbnM7IGFuZC9vciAoMykgYSBsaWNlbnNlIG9mIFJlY2lwaWVudCdzIGNob29zaW5nLCBjb250YWluaW5nIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCB0aGUgbGljZW5zZSB0ZXJtcyBpbmNsdWRlIHRoaXMgU2VjdGlvbiAzIGFuZCBTZWN0aW9ucyA0LCA2LCA3LCAxMCwgMTIsIGFuZCAxMywgd2hpY2ggdGVybXMgbWF5IG5vdCBiZSBtb2RpZmllZCBvciBzdXBlcnNlZGVkIGJ5IGFueSBvdGhlciB0ZXJtcyBvZiBzdWNoIGxpY2Vuc2UuIElmIFJlY2lwaWVudCBlbGVjdHMgdG8gdXNlIGFueSBsaWNlbnNlIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlLCBSZWNpcGllbnQgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgb2YgaXRzIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBSZWNpcGllbnQgYWxvbmUsIGFuZCBub3QgYnkgU0dJLiBJdCBpcyBlbXBoYXNpemVkIHRoYXQgdGhpcyBMaWNlbnNlIGlzIGEgbGltaXRlZCBsaWNlbnNlLCBhbmQsIHJlZ2FyZGxlc3Mgb2YgdGhlIGxpY2Vuc2UgZm9ybSBlbXBsb3llZCBieSBSZWNpcGllbnQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgU2VjdGlvbiAzLjIsIFJlY2lwaWVudCBtYXkgcmVsaWNlbnNlIG9ubHkgc3VjaCByaWdodHMsIGluIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMgYnkgU0dJLCBhcyBpdCBoYXMgYWN0dWFsbHkgYmVlbiBncmFudGVkIGJ5IFNHSSBpbiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDMuMyBJbmRlbW5pdHkuIFJlY2lwaWVudCBoZXJlYnkgYWdyZWVzIHRvIGluZGVtbmlmeSBTR0kgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgU0dJIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIGFsdGVybmF0aXZlIGxpY2Vuc2UgdGVybXMgUmVjaXBpZW50IG9mZmVycy5cblxuICAgNC4gVGVybWluYXRpb24uIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFJlY2lwaWVudCBicmVhY2hlcyBhbnkgdGVybSBoZXJlaW4gYW5kIGZhaWxzIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgdGhlcmVvZi4gQW55IHN1YmxpY2Vuc2UgdG8gdGhlIENvdmVyZWQgQ29kZSB0aGF0IGlzIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhYnNlbnQgdGVybWluYXRpb24gYnkgdGhlIHRlcm1zIG9mIHN1Y2ggc3VibGljZW5zZS4gUHJvdmlzaW9ucyB0aGF0LCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSwgc2hhbGwgc3Vydml2ZS5cblxuICAgNS4gTm8gVHJhZGVtYXJrIE9yIE90aGVyIFJpZ2h0cy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG86IChpKSBhbnkgc29mdHdhcmUgYXBhcnQgZnJvbSB0aGUgQ292ZXJlZCBDb2RlLCBub3Igc2hhbGwgYW55IG90aGVyIHJpZ2h0cyBvciBsaWNlbnNlcyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgaGVyZXVuZGVyIGFyaXNlIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBDb3ZlcmVkIENvZGU7IChpaSkgYW55IHRyYWRlIG5hbWUsIHRyYWRlbWFyayBvciBzZXJ2aWNlIG1hcmsgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcmVsYXRlZCByaWdodCBmb3IgcHVycG9zZXMgb2YgZW5kb3JzZW1lbnQgb3IgcHJvbW90aW9uIG9mIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgQ292ZXJlZCBDb2RlLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBTR0k7IG9yIChpaWkpIGFueSB0aXRsZSB0byBvciBvd25lcnNoaXAgb2YgdGhlIE9yaWdpbmFsIENvZGUsIHdoaWNoIHNoYWxsIGF0IGFsbCB0aW1lcyByZW1haW5zIHdpdGggU0dJLiBBbGwgcmlnaHRzIGluIHRoZSBPcmlnaW5hbCBDb2RlIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYXJlIHJlc2VydmVkLlxuXG4gICA2LiBDb21wbGlhbmNlIHdpdGggTGF3czsgTm9uLUluZnJpbmdlbWVudC4gVGhlcmUgYXJlIHZhcmlvdXMgd29ybGR3aWRlIGxhd3MsIHJlZ3VsYXRpb25zLCBhbmQgZXhlY3V0aXZlIG9yZGVycyBhcHBsaWNhYmxlIHRvIGRpc3Bvc2l0aW9ucyBvZiBDb3ZlcmVkIENvZGUsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gZXhwb3J0LCByZS1leHBvcnQsIGFuZCBpbXBvcnQgY29udHJvbCBsYXdzLCByZWd1bGF0aW9ucywgYW5kIGV4ZWN1dGl2ZSBvcmRlcnMsIG9mIHRoZSBVLlMuIGdvdmVybm1lbnQgYW5kIG90aGVyIGNvdW50cmllcywgYW5kIFJlY2lwaWVudCBpcyByZW1pbmRlZCBpdCBpcyBvYmxpZ2VkIHRvIG9iZXkgc3VjaCBsYXdzLCByZWd1bGF0aW9ucywgYW5kIGV4ZWN1dGl2ZSBvcmRlcnMuIFJlY2lwaWVudCBtYXkgbm90IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIHRoYXQgKGkpIGluIGFueSB3YXkgaW5mcmluZ2VzIChkaXJlY3RseSBvciBjb250cmlidXRvcmlseSkgYW55IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IGtpbmQgb2YgYW55IG90aGVyIHBlcnNvbiBvciBlbnRpdHkgb3IgKGlpKSBicmVhY2hlcyBhbnkgcmVwcmVzZW50YXRpb24gb3Igd2FycmFudHksIGV4cHJlc3MsIGltcGxpZWQgb3Igc3RhdHV0b3J5LCB0byB3aGljaCwgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3LCBpdCBtaWdodCBiZSBkZWVtZWQgdG8gaGF2ZSBiZWVuIHN1YmplY3QuXG5cbiAgIDcuIENsYWltcyBvZiBJbmZyaW5nZW1lbnQuIElmIFJlY2lwaWVudCBsZWFybnMgb2YgYW55IHRoaXJkIHBhcnR5IGNsYWltIHRoYXQgYW55IGRpc3Bvc2l0aW9uIG9mIENvdmVyZWQgQ29kZSBhbmQvb3IgZnVuY3Rpb25hbGl0eSB3aG9sbHkgb3IgcGFydGlhbGx5IGluZnJpbmdlcyB0aGUgdGhpcmQgcGFydHkncyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLCBSZWNpcGllbnQgd2lsbCBwcm9tcHRseSBub3RpZnkgU0dJIG9mIHN1Y2ggY2xhaW0uXG5cbiAgIDguIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiBTR0kgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLCBlYWNoIHdpdGggYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBSZWNpcGllbnQgbWF5LCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBsaWNlbnNlLCBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbiwgb3IgY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBwdWJsaXNoZWQgYnkgU0dJLiBTdWJqZWN0IHRvIHRoZSBwcm92aXNpb25zIG9mIFNlY3Rpb25zIDMgYW5kIDQgb2YgdGhpcyBMaWNlbnNlLCBvbmx5IFNHSSBtYXkgbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgOS4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4gQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFwiQVMgSVMuXCIgQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUyBBUkUgRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULiBTR0kgQVNTVU1FUyBOTyBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgU09GVFdBUkUuIFNIT1VMRCBUSEUgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBTR0kgQVNTVU1FUyBOTyBDT1NUIE9SIExJQUJJTElUWSBGT1IgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIElTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFNVQkpFQ1QgVE8gVEhJUyBESVNDTEFJTUVSLlxuXG4gICAxMC4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgTk9SIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgTkVHTElHRU5DRSBPUiBTVFJJQ1QgTElBQklMSVRZKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgU0dJIE9SIEFOWSBTR0kgTElDRU5TT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIExPU1MgT0YgREFUQSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTR0kncyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIQVQgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gUkVDSVBJRU5ULlxuXG4gICAxMS4gSW5kZW1uaXR5LiBSZWNpcGllbnQgc2hhbGwgYmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gUmVjaXBpZW50IHdpbGwgZGVmZW5kLCBpbmRlbW5pZnkgYW5kIGhvbGQgaGFybWxlc3MgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBmcm9tIGFuZCBhZ2FpbnN0IGFueSBsb3NzLCBsaWFiaWxpdHksIGRhbWFnZXMsIGNvc3RzIG9yIGV4cGVuc2VzIChpbmNsdWRpbmcgdGhlIHBheW1lbnQgb2YgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcykgYXJpc2luZyBvdXQgb2YgUmVjaXBpZW50J3MgdXNlLCBtb2RpZmljYXRpb24sIHJlcHJvZHVjdGlvbiBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgb3Igb3V0IG9mIGFueSByZXByZXNlbnRhdGlvbiBvciB3YXJyYW50eSBtYWRlIGJ5IFJlY2lwaWVudC5cblxuICAgMTIuIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSBcImNvbW1lcmNpYWwgaXRlbVwiIGNvbnNpc3Rpbmcgb2YgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlXCIgYXMgc3VjaCB0ZXJtcyBhcmUgZGVmaW5lZCBpbiB0aXRsZSA0OCBvZiB0aGUgQ29kZSBvZiBGZWRlcmFsIFJlZ3VsYXRpb25zIGFuZCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIG9ubHkgdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlIGFuZCBhcmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAxMy4gTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBpdHMgc3ViamVjdCBtYXR0ZXIuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgc28gYXMgdG8gYWNoaWV2ZSBhcyBuZWFybHkgYXMgcG9zc2libGUgdGhlIHNhbWUgbGVnYWwgYW5kIGVjb25vbWljIGVmZmVjdCBhcyB0aGUgb3JpZ2luYWwgcHJvdmlzaW9uIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsIHJlbWFpbiBpbiBlZmZlY3QuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEgYXMgYXBwbGllZCB0byBhZ3JlZW1lbnRzIGVudGVyZWQgaW50byBhbmQgdG8gYmUgcGVyZm9ybWVkIGVudGlyZWx5IHdpdGhpbiBDYWxpZm9ybmlhIGJldHdlZW4gQ2FsaWZvcm5pYSByZXNpZGVudHMuIEFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBleGNsdXNpdmUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSAob3IsIGFic2VudCBzdWJqZWN0IG1hdHRlciBqdXJpc2RpY3Rpb24gaW4gc3VjaCBjb3VydHMsIHRoZSBjb3VydHMgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEpLCB3aXRoIHZlbnVlIGx5aW5nIGV4Y2x1c2l2ZWx5IGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHRoYXQgcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLiBFeGhpYml0IEFcblxuTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUgU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlIFwiTGljZW5zZVwiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMCBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6XG5cbmh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQlxuXG5Ob3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMgRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULlxuXG5PcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogWyBuYW1lIG9mIHNvZnR3YXJlICwgdmVyc2lvbiBudW1iZXIgLCBhbmQgcmVsZWFzZSBkYXRlXSAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgWyBkYXRlcyBvZiBmaXJzdCBwdWJsaWNhdGlvbiwgYXMgYXBwZWFyaW5nIGluIHRoZSBOb3RpY2UgaW4gdGhlIE9yaWdpbmFsIENvZGVdIFNpbGljb24gR3JhcGhpY3MsIEluYy4gQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFsgc3VjaCBhZGRpdGlvbmFsIHByb3Zpc2lvbnMsIGlmIGFueSwgYXMgYXBwZWFyIGluIHRoZSBOb3RpY2UgaW4gdGhlIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIGhlYWRpbmcgXCJBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zXCJdICJdLCJsaWNlbnNlSWRzIjpbIlNHSS1CLTEuMSJdLCJrZXl3b3JkcyI6WyIxIDEgMDIiLCIxIDAyIDIyIiwiMDIgMjIgMjAwMCIsIjIyIDIwMDAgMSIsIjEgMyBoYXJkd2FyZSIsIjMgaGFyZHdhcmUgbWVhbnMiLCJvdXRwdXQgMSA0IiwiMSA1IGxpY2Vuc2FibGUiLCI1IGxpY2Vuc2FibGUgbWVhbnMiLCJoZXJlaW4gMSA2IiwiZG9jdW1lbnQgMSA3IiwiNyBsaWNlbnNlZCBwYXRlbnRzIiwiYnkgc2dpIHRoYXQiLCJzZ2kgdGhhdCBhcmUiLCJ0aGVyZW9mIDEgOCIsImZpbGUgY29udGFpbmluZyBwcmV2aW91cyIsImNvbnRhaW5pbmcgcHJldmlvdXMgbW9kaWZpY2F0aW9ucyIsInRoYXQgaXMgZGVzY3JpYmVkIiwiMSAxMiByZWNpcGllbnQiLCIxMiByZWNpcGllbnQgcGF0ZW50cyIsInJlY2lwaWVudCBwYXRlbnRzIG1lYW5zIiwicmVjaXBpZW50IHRoYXQgYXJlIiwidGhlcmVvZiAxIDEzIiwiMSAxMyBzZ2kiLCIxMyBzZ2kgbWVhbnMiLCJncmFwaGljcyBpbmMgMSIsImluYyAxIDE0IiwiMSAxNCBzZ2kiLCIxNCBzZ2kgcGF0ZW50cyIsInNnaSBwYXRlbnRzIG1lYW5zIiwiYnkgc2dpIG90aGVyIiwic2dpIG90aGVyIHRoYW4iLCJsaWNlbnNlZCBwYXRlbnRzIDIiLCJwYXRlbnRzIDIgbGljZW5zZSIsIjIgMSBzZ2kiLCIxIHNnaSBsaWNlbnNlIiwic2dpIGxpY2Vuc2UgZ3JhbnQiLCJieSBzZ2kgYWxvbmUiLCJzZ2kgYWxvbmUgYW5kIiwidW5kZXIgYW55IGxpY2Vuc2FibGUiLCJhbnkgbGljZW5zYWJsZSBwYXRlbnRzIiwibGljZW5zYWJsZSBwYXRlbnRzIHRvIiwiYnkgc2dpIHJlY2lwaWVudCIsInNnaSByZWNpcGllbnQgYWNjZXB0cyIsImFmb3JlbWVudGlvbmVkIGFjdGlvbnMgdGhlIiwiYWN0aW9ucyB0aGUgcGF0ZW50IiwiY29kZSBpZiBhdCIsInRoZSB0aW1lIGFueSIsInRpbWUgYW55IHJlbGF0ZWQiLCJhbnkgcmVsYXRlZCBtb2RpZmljYXRpb24iLCJyZWxhdGVkIG1vZGlmaWNhdGlvbiBpcyIsInRoZSBtb2RpZmljYXRpb24gY2F1c2VzIiwibW9kaWZpY2F0aW9uIGNhdXNlcyBzdWNoIiwicGF0ZW50IGxpY2Vuc2UgaW4iLCJsaWNlbnNlIGluIHNlY3Rpb24iLCIxIGlpIHNoYWxsIiwiaWkgc2hhbGwgbm90IiwiaW5jbHVkZSB0aGUgbW9kaWZpY2F0aW9uIiwidGhlIG1vZGlmaWNhdGlvbiBubyIsIm1vZGlmaWNhdGlvbiBubyBwYXRlbnQiLCJwcm92aWRlZCB1bmRlciBzZ2kiLCJ1bmRlciBzZ2kgcGF0ZW50cyIsInNnaSBwYXRlbnRzIGZvciIsInBhdGVudHMgZm9yIGluZnJpbmdlbWVudHMiLCJmb3IgaW5mcmluZ2VtZW50cyBvZiIsImluZnJpbmdlbWVudHMgb2Ygc2dpIiwib2Ygc2dpIHBhdGVudHMiLCJzZ2kgcGF0ZW50cyBieSIsInBhdGVudHMgYnkgbW9kaWZpY2F0aW9ucyIsImJ5IG1vZGlmaWNhdGlvbnMgbm90Iiwic2dpIG9yIGNvbWJpbmF0aW9ucyIsImNvbWJpbmF0aW9ucyBvZiBvcmlnaW5hbCIsImFuZCBtb2RpZmljYXRpb25zIG5vdCIsInNnaSAyIDIiLCIyIDIgcmVjaXBpZW50IiwiMiByZWNpcGllbnQgbGljZW5zZSIsInJlY2lwaWVudCBsaWNlbnNlIGdyYW50IiwicHJvcGVydHkgY2xhaW1zIHJlY2lwaWVudCIsImNsYWltcyByZWNpcGllbnQgaGVyZWJ5IiwicmVjaXBpZW50IGhlcmVieSBncmFudHMiLCJoZXJlYnkgZ3JhbnRzIHNnaSIsImdyYW50cyBzZ2kgYW5kIiwic2dpIGFuZCBhbnkiLCJvdGhlciByZWNpcGllbnRzIGEiLCJyZWNpcGllbnRzIGEgd29ybGR3aWRlIiwidW5kZXIgYW55IHJlY2lwaWVudCIsImFueSByZWNpcGllbnQgcGF0ZW50cyIsInJlY2lwaWVudCBwYXRlbnRzIHRvIiwic2dpIDIgMyIsIjIgMiBhcmUiLCJieSBzZ2kgMyIsInNnaSAzIHJlZGlzdHJpYnV0aW9ucyIsIjMgcmVkaXN0cmlidXRpb25zIDMiLCJyZWRpc3RyaWJ1dGlvbnMgMyAxIiwiMyAxIHJldGVudGlvbiIsIjEgcmV0ZW50aW9uIG9mIiwiMyAyIGFsdGVybmF0aXZlIiwiMiBhbHRlcm5hdGl2ZSBsaWNlbnNlIiwicmVjaXBpZW50IG1heSBzbyIsIm1heSBzbyBsb25nIiwibG9uZyBhcyB3aXRob3V0IiwiYXMgd2l0aG91dCBkZXJvZ2F0aW9uIiwib3JpZ2luYWwgY29kZSBkaXN0cmlidXRlIiwiY29kZSBkaXN0cmlidXRlIHRoZSIsImJ5IHNnaSBpdCIsInNnaSBpdCBpcyIsIml0IGlzIGVtcGhhc2l6ZWQiLCJpcyBlbXBoYXNpemVkIHRoYXQiLCJlbXBoYXNpemVkIHRoYXQgdGhpcyIsImlzIGEgbGltaXRlZCIsImEgbGltaXRlZCBsaWNlbnNlIiwibGltaXRlZCBsaWNlbnNlIGFuZCIsImxpY2Vuc2UgYW5kIHJlZ2FyZGxlc3MiLCJ0aGUgbGljZW5zZSBmb3JtIiwibGljZW5zZSBmb3JtIGVtcGxveWVkIiwiZm9ybSBlbXBsb3llZCBieSIsImVtcGxveWVkIGJ5IHJlY2lwaWVudCIsInJlY2lwaWVudCBpbiBhY2NvcmRhbmNlIiwiMyAyIHJlY2lwaWVudCIsInJlY2lwaWVudCBtYXkgcmVsaWNlbnNlIiwibWF5IHJlbGljZW5zZSBvbmx5IiwicmVsaWNlbnNlIG9ubHkgc3VjaCIsIm9ubHkgc3VjaCByaWdodHMiLCJyaWdodHMgaW4gb3JpZ2luYWwiLCJhbmQgbW9kaWZpY2F0aW9ucyBieSIsIm1vZGlmaWNhdGlvbnMgYnkgc2dpIiwic2dpIGFzIGl0IiwiYXMgaXQgaGFzIiwiaXQgaGFzIGFjdHVhbGx5IiwiaGFzIGFjdHVhbGx5IGJlZW4iLCJhY3R1YWxseSBiZWVuIGdyYW50ZWQiLCJiZWVuIGdyYW50ZWQgYnkiLCJncmFudGVkIGJ5IHNnaSIsInNnaSBpbiB0aGlzIiwiMyAzIGluZGVtbml0eSIsIjMgaW5kZW1uaXR5IHJlY2lwaWVudCIsIm5vbiBpbmZyaW5nZW1lbnQgdGhlcmUiLCJpbmZyaW5nZW1lbnQgdGhlcmUgYXJlIiwidGhlcmUgYXJlIHZhcmlvdXMiLCJhcmUgdmFyaW91cyB3b3JsZHdpZGUiLCJ2YXJpb3VzIHdvcmxkd2lkZSBsYXdzIiwid29ybGR3aWRlIGxhd3MgcmVndWxhdGlvbnMiLCJleGVjdXRpdmUgb3JkZXJzIGFwcGxpY2FibGUiLCJvcmRlcnMgYXBwbGljYWJsZSB0byIsImFwcGxpY2FibGUgdG8gZGlzcG9zaXRpb25zIiwidG8gZGlzcG9zaXRpb25zIG9mIiwiY29kZSBpbmNsdWRpbmcgd2l0aG91dCIsIndpdGhvdXQgbGltaXRhdGlvbiBleHBvcnQiLCJsaW1pdGF0aW9uIGV4cG9ydCByZSIsImNvdW50cmllcyBhbmQgcmVjaXBpZW50IiwiYW5kIHJlY2lwaWVudCBpcyIsInJlY2lwaWVudCBpcyByZW1pbmRlZCIsImlzIHJlbWluZGVkIGl0IiwicmVtaW5kZWQgaXQgaXMiLCJpdCBpcyBvYmxpZ2VkIiwiaXMgb2JsaWdlZCB0byIsIm9ibGlnZWQgdG8gb2JleSIsInRvIG9iZXkgc3VjaCIsIm9iZXkgc3VjaCBsYXdzIiwic3VjaCBsYXdzIHJlZ3VsYXRpb25zIiwiZXhlY3V0aXZlIG9yZGVycyByZWNpcGllbnQiLCJvcmRlcnMgcmVjaXBpZW50IG1heSIsIm9yIGNvbnRyaWJ1dG9yaWx5IGFueSIsImNvbnRyaWJ1dG9yaWx5IGFueSBpbnRlbGxlY3R1YWwiLCJzZXJ2aWNlcyAxNjAwIGFtcGhpdGhlYXRyZSIsIjE2MDAgYW1waGl0aGVhdHJlIHBhcmt3YXkiLCJhbXBoaXRoZWF0cmUgcGFya3dheSBtb3VudGFpbiIsInZlcnNpb24gMSAxIDAyIiwiMSAxIDAyIDIyIiwiMSAwMiAyMiAyMDAwIiwiMDIgMjIgMjAwMCAxIiwiMjIgMjAwMCAxIGRlZmluaXRpb25zIiwicHJvdmlzaW9ucyAxIDIgY292ZXJlZCIsIm9yIG1vZGlmaWNhdGlvbnMgb3IgYW55IiwiY29tYmluYXRpb24gdGhlcmVvZiAxIDMiLCJ0aGVyZW9mIDEgMyBoYXJkd2FyZSIsIjEgMyBoYXJkd2FyZSBtZWFucyIsIjMgaGFyZHdhcmUgbWVhbnMgYW55IiwicHJvdmlkZXMgb3V0cHV0IDEgNCIsIm91dHB1dCAxIDQgbGFyZ2VyIiwidGhhdCBjb21iaW5lcyBjb3ZlcmVkIGNvZGUiLCJsaWNlbnNlIDEgNSBsaWNlbnNhYmxlIiwiMSA1IGxpY2Vuc2FibGUgbWVhbnMiLCI1IGxpY2Vuc2FibGUgbWVhbnMgaGF2aW5nIiwiY29udmV5ZWQgaGVyZWluIDEgNiIsImhlcmVpbiAxIDYgbGljZW5zZSIsInRoaXMgZG9jdW1lbnQgMSA3IiwiZG9jdW1lbnQgMSA3IGxpY2Vuc2VkIiwiMSA3IGxpY2Vuc2VkIHBhdGVudHMiLCI3IGxpY2Vuc2VkIHBhdGVudHMgbWVhbnMiLCJsaWNlbnNlZCBwYXRlbnRzIG1lYW5zIHBhdGVudCIsImxpY2Vuc2FibGUgYnkgc2dpIHRoYXQiLCJieSBzZ2kgdGhhdCBhcmUiLCJzZ2kgdGhhdCBhcmUgaW5mcmluZ2VkIiwiY29tYmluYXRpb24gdGhlcmVvZiAxIDgiLCJ0aGVyZW9mIDEgOCBtb2RpZmljYXRpb25zIiwiY29kZSBhbmQgb3IgYWRkaXRpb24iLCJvciBhZGRpdGlvbiB0byBvciIsImEgZmlsZSBjb250YWluaW5nIHByZXZpb3VzIiwiZmlsZSBjb250YWluaW5nIHByZXZpb3VzIG1vZGlmaWNhdGlvbnMiXX0seyJsaWNlbnNlVGV4dHMiOlsiU0dJIEZSRUUgU09GVFdBUkUgTElDRU5TRSBCXG5cbihWZXJzaW9uIDIuMCwgU2VwdC4gMTgsIDIwMDgpIENvcHlyaWdodCAoQykgW2RhdGVzIG9mIGZpcnN0IHB1YmxpY2F0aW9uXSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB0aGUgZGF0ZXMgb2YgZmlyc3QgcHVibGljYXRpb24gYW5kIGVpdGhlciB0aGlzIHBlcm1pc3Npb24gbm90aWNlIG9yIGEgcmVmZXJlbmNlIHRvIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQi8gc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFNJTElDT04gR1JBUEhJQ1MsIElOQy4gQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbkV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIFNpbGljb24gR3JhcGhpY3MsIEluYy4gc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gU2lsaWNvbiBHcmFwaGljcywgSW5jLiJdLCJsaWNlbnNlSWRzIjpbIlNHSS1CLTIuMCJdLCJrZXl3b3JkcyI6WyJiIHZlcnNpb24gMiIsIjIgMCBzZXB0IiwiMCBzZXB0IDE4Iiwic2VwdCAxOCAyMDA4IiwiMTggMjAwOCBjb3B5cmlnaHQiLCJmaXJzdCBwdWJsaWNhdGlvbiBzaWxpY29uIiwicHVibGljYXRpb24gc2lsaWNvbiBncmFwaGljcyIsImdyYXBoaWNzIGluYyBhbGwiLCJpbmNsdWRpbmcgdGhlIGRhdGVzIiwiZmlyc3QgcHVibGljYXRpb24gYW5kIiwicHVibGljYXRpb24gYW5kIGVpdGhlciIsImVpdGhlciB0aGlzIHBlcm1pc3Npb24iLCJub3RpY2Ugb3IgYSIsIm9yIGEgcmVmZXJlbmNlIiwicmVmZXJlbmNlIHRvIGh0dHAiLCJ0byBodHRwIG9zcyIsInByb2plY3RzIGZyZWViIHNoYWxsIiwiZnJlZWIgc2hhbGwgYmUiLCJldmVudCBzaGFsbCBzaWxpY29uIiwic2hhbGwgc2lsaWNvbiBncmFwaGljcyIsImdyYXBoaWNzIGluYyBiZSIsIm5hbWUgb2Ygc2lsaWNvbiIsIm9mIHNpbGljb24gZ3JhcGhpY3MiLCJncmFwaGljcyBpbmMgc2hhbGwiLCJhdXRob3JpemF0aW9uIGZyb20gc2lsaWNvbiIsImZyb20gc2lsaWNvbiBncmFwaGljcyIsImxpY2Vuc2UgYiB2ZXJzaW9uIDIiLCJiIHZlcnNpb24gMiAwIiwidmVyc2lvbiAyIDAgc2VwdCIsIjIgMCBzZXB0IDE4IiwiMCBzZXB0IDE4IDIwMDgiLCJzZXB0IDE4IDIwMDggY29weXJpZ2h0IiwiMTggMjAwOCBjb3B5cmlnaHQgYyIsIjIwMDggY29weXJpZ2h0IGMgZGF0ZXMiLCJvZiBmaXJzdCBwdWJsaWNhdGlvbiBzaWxpY29uIiwiZmlyc3QgcHVibGljYXRpb24gc2lsaWNvbiBncmFwaGljcyIsInB1YmxpY2F0aW9uIHNpbGljb24gZ3JhcGhpY3MgaW5jIiwic2lsaWNvbiBncmFwaGljcyBpbmMgYWxsIiwiZ3JhcGhpY3MgaW5jIGFsbCByaWdodHMiLCJhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyIsIm5vdGljZSBpbmNsdWRpbmcgdGhlIGRhdGVzIiwiaW5jbHVkaW5nIHRoZSBkYXRlcyBvZiIsInRoZSBkYXRlcyBvZiBmaXJzdCIsIm9mIGZpcnN0IHB1YmxpY2F0aW9uIGFuZCIsImZpcnN0IHB1YmxpY2F0aW9uIGFuZCBlaXRoZXIiLCJwdWJsaWNhdGlvbiBhbmQgZWl0aGVyIHRoaXMiLCJhbmQgZWl0aGVyIHRoaXMgcGVybWlzc2lvbiIsImVpdGhlciB0aGlzIHBlcm1pc3Npb24gbm90aWNlIiwidGhpcyBwZXJtaXNzaW9uIG5vdGljZSBvciIsInBlcm1pc3Npb24gbm90aWNlIG9yIGEiLCJub3RpY2Ugb3IgYSByZWZlcmVuY2UiLCJvciBhIHJlZmVyZW5jZSB0byIsImEgcmVmZXJlbmNlIHRvIGh0dHAiLCJyZWZlcmVuY2UgdG8gaHR0cCBvc3MiLCJ0byBodHRwIG9zcyBzZ2kiLCJjb20gcHJvamVjdHMgZnJlZWIgc2hhbGwiLCJwcm9qZWN0cyBmcmVlYiBzaGFsbCBiZSIsImZyZWViIHNoYWxsIGJlIGluY2x1ZGVkIiwibm8gZXZlbnQgc2hhbGwgc2lsaWNvbiIsImV2ZW50IHNoYWxsIHNpbGljb24gZ3JhcGhpY3MiLCJzaGFsbCBzaWxpY29uIGdyYXBoaWNzIGluYyIsInNpbGljb24gZ3JhcGhpY3MgaW5jIGJlIiwiZ3JhcGhpY3MgaW5jIGJlIGxpYWJsZSIsInRoZSBuYW1lIG9mIHNpbGljb24iLCJuYW1lIG9mIHNpbGljb24gZ3JhcGhpY3MiLCJvZiBzaWxpY29uIGdyYXBoaWNzIGluYyIsInNpbGljb24gZ3JhcGhpY3MgaW5jIHNoYWxsIiwiZ3JhcGhpY3MgaW5jIHNoYWxsIG5vdCIsIndyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHNpbGljb24iLCJhdXRob3JpemF0aW9uIGZyb20gc2lsaWNvbiBncmFwaGljcyIsImZyb20gc2lsaWNvbiBncmFwaGljcyBpbmMiLCJzb2Z0d2FyZSBsaWNlbnNlIGIgdmVyc2lvbiAyIiwibGljZW5zZSBiIHZlcnNpb24gMiAwIiwiYiB2ZXJzaW9uIDIgMCBzZXB0IiwidmVyc2lvbiAyIDAgc2VwdCAxOCIsIjIgMCBzZXB0IDE4IDIwMDgiLCIwIHNlcHQgMTggMjAwOCBjb3B5cmlnaHQiLCJzZXB0IDE4IDIwMDggY29weXJpZ2h0IGMiLCIxOCAyMDA4IGNvcHlyaWdodCBjIGRhdGVzIiwiMjAwOCBjb3B5cmlnaHQgYyBkYXRlcyBvZiIsImRhdGVzIG9mIGZpcnN0IHB1YmxpY2F0aW9uIHNpbGljb24iLCJvZiBmaXJzdCBwdWJsaWNhdGlvbiBzaWxpY29uIGdyYXBoaWNzIiwiZmlyc3QgcHVibGljYXRpb24gc2lsaWNvbiBncmFwaGljcyBpbmMiLCJwdWJsaWNhdGlvbiBzaWxpY29uIGdyYXBoaWNzIGluYyBhbGwiLCJzaWxpY29uIGdyYXBoaWNzIGluYyBhbGwgcmlnaHRzIiwiZ3JhcGhpY3MgaW5jIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJ0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmciLCJhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB0aGUiLCJjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB0aGUgZGF0ZXMiLCJub3RpY2UgaW5jbHVkaW5nIHRoZSBkYXRlcyBvZiIsImluY2x1ZGluZyB0aGUgZGF0ZXMgb2YgZmlyc3QiLCJ0aGUgZGF0ZXMgb2YgZmlyc3QgcHVibGljYXRpb24iLCJkYXRlcyBvZiBmaXJzdCBwdWJsaWNhdGlvbiBhbmQiLCJvZiBmaXJzdCBwdWJsaWNhdGlvbiBhbmQgZWl0aGVyIiwiZmlyc3QgcHVibGljYXRpb24gYW5kIGVpdGhlciB0aGlzIiwicHVibGljYXRpb24gYW5kIGVpdGhlciB0aGlzIHBlcm1pc3Npb24iLCJhbmQgZWl0aGVyIHRoaXMgcGVybWlzc2lvbiBub3RpY2UiLCJlaXRoZXIgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBvciIsInRoaXMgcGVybWlzc2lvbiBub3RpY2Ugb3IgYSIsInBlcm1pc3Npb24gbm90aWNlIG9yIGEgcmVmZXJlbmNlIiwibm90aWNlIG9yIGEgcmVmZXJlbmNlIHRvIiwib3IgYSByZWZlcmVuY2UgdG8gaHR0cCIsImEgcmVmZXJlbmNlIHRvIGh0dHAgb3NzIiwicmVmZXJlbmNlIHRvIGh0dHAgb3NzIHNnaSIsInRvIGh0dHAgb3NzIHNnaSBjb20iLCJzZ2kgY29tIHByb2plY3RzIGZyZWViIHNoYWxsIiwiY29tIHByb2plY3RzIGZyZWViIHNoYWxsIGJlIiwicHJvamVjdHMgZnJlZWIgc2hhbGwgYmUgaW5jbHVkZWQiLCJmcmVlYiBzaGFsbCBiZSBpbmNsdWRlZCBpbiIsImluIG5vIGV2ZW50IHNoYWxsIHNpbGljb24iLCJubyBldmVudCBzaGFsbCBzaWxpY29uIGdyYXBoaWNzIiwiZXZlbnQgc2hhbGwgc2lsaWNvbiBncmFwaGljcyBpbmMiLCJzaGFsbCBzaWxpY29uIGdyYXBoaWNzIGluYyBiZSIsInNpbGljb24gZ3JhcGhpY3MgaW5jIGJlIGxpYWJsZSIsImdyYXBoaWNzIGluYyBiZSBsaWFibGUgZm9yIiwibm90aWNlIHRoZSBuYW1lIG9mIHNpbGljb24iLCJ0aGUgbmFtZSBvZiBzaWxpY29uIGdyYXBoaWNzIiwibmFtZSBvZiBzaWxpY29uIGdyYXBoaWNzIGluYyIsIm9mIHNpbGljb24gZ3JhcGhpY3MgaW5jIHNoYWxsIiwic2lsaWNvbiBncmFwaGljcyBpbmMgc2hhbGwgbm90IiwiZ3JhcGhpY3MgaW5jIHNoYWxsIG5vdCBiZSIsInByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHNpbGljb24iLCJ3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSBzaWxpY29uIGdyYXBoaWNzIiwiYXV0aG9yaXphdGlvbiBmcm9tIHNpbGljb24gZ3JhcGhpY3MgaW5jIl19LHsibGljZW5zZVRleHRzIjpbIlNPTERFUlBBRCBIQVJEV0FSRSBMSUNFTlNFIHZlcnNpb24gMC41XG5cblRoaXMgbGljZW5zZSBpcyBiYXNlZCBjbG9zZWx5IG9uIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCwgYnV0IGlzIG5vdCBhcHByb3ZlZCBvciBlbmRvcnNlZCBieSB0aGUgQXBhY2hlIEZvdW5kYXRpb24uIEEgY29weSBvZiB0aGUgbm9uLW1vZGlmaWVkIEFwYWNoZSBMaWNlbnNlIDIuMCBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLlxuXG5cblxuQXMgdGhpcyBsaWNlbnNlIGlzIG5vdCBjdXJyZW50bHkgT1NJIG9yIEZTRiBhcHByb3ZlZCwgdGhlIExpY2Vuc29yIHBlcm1pdHMgYW55IFdvcmsgbGljZW5zZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhdCB0aGUgb3B0aW9uIG9mIHRoZSBMaWNlbnNlZSwgdG8gYmUgdHJlYXRlZCBhcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgKHdoaWNoIGlzIHNvIGFwcHJvdmVkKS5cblxuXG5cblRoaXMgTGljZW5zZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBpbiBwYXJ0aWN1bGFyIGNsYXVzZSA3IGJlbG93IChEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXMpIGFwcGxpZXMgaW4gcmVsYXRpb24gdG8gaXRzIHVzZS5cblxuXG5cblRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTlxuXG5cblxuMS4gRGVmaW5pdGlvbnMuXG5cblxuXG5cIkxpY2Vuc2VcIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LlxuXG5cblxuXCJMaWNlbnNvclwiIHNoYWxsIG1lYW4gdGhlIFJpZ2h0cyBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieSB0aGUgUmlnaHRzIG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuXG5cblxuXG5cIkxlZ2FsIEVudGl0eVwiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcImNvbnRyb2xcIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuXG5cblwiWW91XCIgKG9yIFwiWW91clwiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuXG5cblxuXG5cIlJpZ2h0c1wiIG1lYW5zIGNvcHlyaWdodCBhbmQgYW55IHNpbWlsYXIgcmlnaHQgaW5jbHVkaW5nIGRlc2lnbiByaWdodCAod2hldGhlciByZWdpc3RlcmVkIG9yIHVucmVnaXN0ZXJlZCksIHNlbWljb25kdWN0b3IgdG9wb2dyYXBoeSAobWFzaykgcmlnaHRzIGFuZCBkYXRhYmFzZSBleHRyYWN0aW9uIHJpZ2h0cyAoYnV0IGV4Y2x1ZGluZyBQYXRlbnRzIGFuZCBUcmFkZW1hcmtzKS5cblxuXG5cblwiU291cmNlXCIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc291cmNlIGNvZGUsIG5ldCBsaXN0cywgYm9hcmQgbGF5b3V0cywgQ0FEIGZpbGVzLCBkb2N1bWVudGF0aW9uIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuXG5cblxuXG5cIk9iamVjdFwiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLCB0aGUgaW5zdGFudGlhdGlvbiBvZiBhIGhhcmR3YXJlIGRlc2lnbiBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMsIGluY2x1ZGluZyBpbnRlcm1lZGlhdGUgZm9ybXMgc3VjaCBhcyBieXRlY29kZXMsIEZQR0EgYml0c3RyZWFtcywgYXJ0d29yayBhbmQgc2VtaWNvbmR1Y3RvciB0b3BvZ3JhcGhpZXMgKG1hc2sgd29ya3MpLlxuXG5cblxuXCJXb3JrXCIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBmb3JtIG9yIG90aGVyIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEgUmlnaHRzIG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuXG5cblxuXG5cIkRlcml2YXRpdmUgV29ya3NcIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZSBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbiBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgb3IgcGh5c2ljYWxseSBjb25uZWN0IHRvIG9yIGludGVyb3BlcmF0ZSB3aXRoIHRoZSBpbnRlcmZhY2VzIG9mLCB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLlxuXG5cblxuXCJDb250cmlidXRpb25cIiBzaGFsbCBtZWFuIGFueSBkZXNpZ24gb3Igd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucyB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIFJpZ2h0cyBvd25lciBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YgdGhlIFJpZ2h0cyBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwic3VibWl0dGVkXCIgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudCB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLCBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZSBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBSaWdodHMgb3duZXIgYXMgXCJOb3QgYSBDb250cmlidXRpb24uXCJcblxuXG5cblwiQ29udHJpYnV0b3JcIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLlxuXG5cblxuMi4gR3JhbnQgb2YgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSBsaWNlbnNlIHVuZGVyIHRoZSBSaWdodHMgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZSBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtIGFuZCBkbyBhbnl0aGluZyBpbiByZWxhdGlvbiB0byB0aGUgV29yayBhcyBpZiB0aGUgUmlnaHRzIGRpZCBub3QgZXhpc3QuXG5cblxuXG4zLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yayBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuXG5cblxuXG40LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblxuXG5Zb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kXG5cblxuXG5Zb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kXG5cblxuXG5Zb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZFxuXG5cblxuSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSBcIk5PVElDRVwiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cyBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0IGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24gbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZCBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZCBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aCB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLlxuXG5cblxuNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLCBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLlxuXG5cblxuNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZSBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS5cblxuXG5cbjcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG5cblxuOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseSBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZSBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuXG5cblxuXG45LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24gb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuXG5cblxuXG5FTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlNcblxuXG5cbkFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhpcyBsaWNlbnNlIHRvIHlvdXIgd29ya1xuXG5UbyBhcHBseSB0aGlzIGxpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyBcIltdXCIgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUgdGhlIGJyYWNrZXRzISkgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZSBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZSBzYW1lIFwicHJpbnRlZCBwYWdlXCIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llciBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuXG5cblxuXG5Db3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0gQ29weXJpZ2h0IGFuZCByZWxhdGVkIHJpZ2h0cyBhcmUgbGljZW5zZWQgdW5kZXIgdGhlIFNvbGRlcnBhZCBIYXJkd2FyZSBMaWNlbnNlLCBWZXJzaW9uIDAuNSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3NvbGRlcnBhZC5vcmcvbGljZW5zZXMvU0hMLTAuNS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSwgaGFyZHdhcmUgYW5kIG1hdGVyaWFscyBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4iXSwibGljZW5zZUlkcyI6WyJTSEwtMC41Il0sImtleXdvcmRzIjpbIjAgNSB0aGlzIiwiYW5kIGRhdGFiYXNlIGV4dHJhY3Rpb24iLCJkYXRhYmFzZSBleHRyYWN0aW9uIHJpZ2h0cyIsImV4dHJhY3Rpb24gcmlnaHRzIGJ1dCIsImZvbGxvd2luZyBjb25kaXRpb25zIHlvdSIsImNvbmRpdGlvbnMgeW91IG11c3QiLCJmaWxlcyBhbmQgeW91Iiwid29ya3MgYW5kIGlmIiwiMCA1IHRoZSIsIjUgdGhlIGxpY2Vuc2UiLCJzaGwgMCA1IiwiMCA1IHVubGVzcyIsIjUgdW5sZXNzIHJlcXVpcmVkIiwidmVyc2lvbiAwIDUgdGhpcyIsIjAgNSB0aGlzIGxpY2Vuc2UiLCI1IHRoaXMgbGljZW5zZSBpcyIsInJpZ2h0cyBhbmQgZGF0YWJhc2UgZXh0cmFjdGlvbiIsImFuZCBkYXRhYmFzZSBleHRyYWN0aW9uIHJpZ2h0cyIsImRhdGFiYXNlIGV4dHJhY3Rpb24gcmlnaHRzIGJ1dCIsImV4dHJhY3Rpb24gcmlnaHRzIGJ1dCBleGNsdWRpbmciLCJ0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgeW91IiwiZm9sbG93aW5nIGNvbmRpdGlvbnMgeW91IG11c3QiLCJjb25kaXRpb25zIHlvdSBtdXN0IGdpdmUiLCJhbmQgeW91IG11c3QgY2F1c2UiLCJ0aGUgZmlsZXMgYW5kIHlvdSIsImZpbGVzIGFuZCB5b3UgbXVzdCIsImFuZCB5b3UgbXVzdCByZXRhaW4iLCJkZXJpdmF0aXZlIHdvcmtzIGFuZCBpZiIsIndvcmtzIGFuZCBpZiB0aGUiLCJ2ZXJzaW9uIDAgNSB0aGUiLCIwIDUgdGhlIGxpY2Vuc2UiLCI1IHRoZSBsaWNlbnNlIHlvdSIsImxpY2Vuc2VzIHNobCAwIDUiLCJzaGwgMCA1IHVubGVzcyIsIjAgNSB1bmxlc3MgcmVxdWlyZWQiLCI1IHVubGVzcyByZXF1aXJlZCBieSIsImxpY2Vuc2UgdmVyc2lvbiAwIDUgdGhpcyIsInZlcnNpb24gMCA1IHRoaXMgbGljZW5zZSIsIjAgNSB0aGlzIGxpY2Vuc2UgaXMiLCI1IHRoaXMgbGljZW5zZSBpcyBiYXNlZCIsIm1hc2sgcmlnaHRzIGFuZCBkYXRhYmFzZSBleHRyYWN0aW9uIiwicmlnaHRzIGFuZCBkYXRhYmFzZSBleHRyYWN0aW9uIHJpZ2h0cyIsImFuZCBkYXRhYmFzZSBleHRyYWN0aW9uIHJpZ2h0cyBidXQiLCJkYXRhYmFzZSBleHRyYWN0aW9uIHJpZ2h0cyBidXQgZXhjbHVkaW5nIiwiZXh0cmFjdGlvbiByaWdodHMgYnV0IGV4Y2x1ZGluZyBwYXRlbnRzIiwibWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgeW91IiwidGhlIGZvbGxvd2luZyBjb25kaXRpb25zIHlvdSBtdXN0IiwiZm9sbG93aW5nIGNvbmRpdGlvbnMgeW91IG11c3QgZ2l2ZSIsImNvbmRpdGlvbnMgeW91IG11c3QgZ2l2ZSBhbnkiLCJsaWNlbnNlIGFuZCB5b3UgbXVzdCBjYXVzZSIsImFuZCB5b3UgbXVzdCBjYXVzZSBhbnkiLCJjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgeW91IiwidGhlIGZpbGVzIGFuZCB5b3UgbXVzdCIsImZpbGVzIGFuZCB5b3UgbXVzdCByZXRhaW4iLCJhbmQgeW91IG11c3QgcmV0YWluIGluIiwidGhlIGRlcml2YXRpdmUgd29ya3MgYW5kIGlmIiwiZGVyaXZhdGl2ZSB3b3JrcyBhbmQgaWYgdGhlIiwid29ya3MgYW5kIGlmIHRoZSB3b3JrIiwiYW5kIGlmIHRoZSB3b3JrIGluY2x1ZGVzIiwibGljZW5zZSB2ZXJzaW9uIDAgNSB0aGUiLCJ2ZXJzaW9uIDAgNSB0aGUgbGljZW5zZSIsIjAgNSB0aGUgbGljZW5zZSB5b3UiLCI1IHRoZSBsaWNlbnNlIHlvdSBtYXkiLCJvcmcgbGljZW5zZXMgc2hsIDAgNSIsImxpY2Vuc2VzIHNobCAwIDUgdW5sZXNzIiwic2hsIDAgNSB1bmxlc3MgcmVxdWlyZWQiLCIwIDUgdW5sZXNzIHJlcXVpcmVkIGJ5IiwiNSB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJTT0xERVJQQUQgSEFSRFdBUkUgTElDRU5TRSB2ZXJzaW9uIDAuNTFcblxuVGhpcyBsaWNlbnNlIGlzIGJhc2VkIGNsb3NlbHkgb24gdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBidXQgaXMgbm90IGFwcHJvdmVkIG9yIGVuZG9yc2VkIGJ5IHRoZSBBcGFjaGUgRm91bmRhdGlvbi4gQSBjb3B5IG9mIHRoZSBub24tbW9kaWZpZWQgQXBhY2hlIExpY2Vuc2UgMi4wIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAuXG5cbkFzIHRoaXMgbGljZW5zZSBpcyBub3QgY3VycmVudGx5IE9TSSBvciBGU0YgYXBwcm92ZWQsIHRoZSBMaWNlbnNvciBwZXJtaXRzIGFueSBXb3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMgTGljZW5zZSwgYXQgdGhlIG9wdGlvbiBvZiB0aGUgTGljZW5zZWUsIHRvIGJlIHRyZWF0ZWQgYXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wICh3aGljaCBpcyBzbyBhcHByb3ZlZCkuXG5cblRoaXMgTGljZW5zZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBpbiBwYXJ0aWN1bGFyIGNsYXVzZSA3IGJlbG93IChEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXMpIGFwcGxpZXMgaW4gcmVsYXRpb24gdG8gaXRzIHVzZS4gVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OXG5cbiAgIDEuIERlZmluaXRpb25zLlxuXG4gICAgICBcblxuICAgICAgXCJMaWNlbnNlXCIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC5cblxuICAgICAgXG5cbiAgICAgIFwiTGljZW5zb3JcIiBzaGFsbCBtZWFuIHRoZSBSaWdodHMgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkgdGhlIFJpZ2h0cyBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLlxuXG4gICAgICBcblxuICAgICAgXCJMZWdhbCBFbnRpdHlcIiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJjb250cm9sXCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgICAgIFxuXG4gICAgICBcIllvdVwiIChvciBcIllvdXJcIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLlxuXG4gICAgICBcblxuICAgICAgXCJSaWdodHNcIiBtZWFucyBjb3B5cmlnaHQgYW5kIGFueSBzaW1pbGFyIHJpZ2h0IGluY2x1ZGluZyBkZXNpZ24gcmlnaHQgKHdoZXRoZXIgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQpLCBzZW1pY29uZHVjdG9yIHRvcG9ncmFwaHkgKG1hc2spIHJpZ2h0cyBhbmQgZGF0YWJhc2UgcmlnaHRzIChidXQgZXhjbHVkaW5nIFBhdGVudHMgYW5kIFRyYWRlbWFya3MpLlxuXG4gICAgICBcblxuICAgICAgXCJTb3VyY2VcIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb3VyY2UgY29kZSwgbmV0IGxpc3RzLCBib2FyZCBsYXlvdXRzLCBDQUQgZmlsZXMsIGRvY3VtZW50YXRpb24gc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy5cblxuICAgICAgXG5cbiAgICAgIFwiT2JqZWN0XCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sIHRoZSBpbnN0YW50aWF0aW9uIG9mIGEgaGFyZHdhcmUgZGVzaWduIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcywgaW5jbHVkaW5nIGludGVybWVkaWF0ZSBmb3JtcyBzdWNoIGFzIGJ5dGVjb2RlcywgRlBHQSBiaXRzdHJlYW1zLCBhcnR3b3JrIGFuZCBzZW1pY29uZHVjdG9yIHRvcG9ncmFwaGllcyAobWFzayB3b3JrcykuXG5cbiAgICAgIFxuXG4gICAgICBcIldvcmtcIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIGZvcm0gb3Igb3RoZXIgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYSBSaWdodHMgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS5cblxuICAgICAgXG5cbiAgICAgIFwiRGVyaXZhdGl2ZSBXb3Jrc1wiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSBvciBwaHlzaWNhbGx5IGNvbm5lY3QgdG8gb3IgaW50ZXJvcGVyYXRlIHdpdGggdGhlIGludGVyZmFjZXMgb2YsIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuXG5cbiAgICAgIFxuXG4gICAgICBcIkNvbnRyaWJ1dGlvblwiIHNoYWxsIG1lYW4gYW55IGRlc2lnbiBvciB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZyB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgUmlnaHRzIG93bmVyIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZiB0aGUgUmlnaHRzIG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJzdWJtaXR0ZWRcIiBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50IHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dCBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZSBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIFJpZ2h0cyBvd25lciBhcyBcIk5vdCBhIENvbnRyaWJ1dGlvbi5cIlxuXG4gICAgICBcblxuICAgICAgXCJDb250cmlidXRvclwiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuXG5cbiAgIDIuIEdyYW50IG9mIExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgbGljZW5zZSB1bmRlciB0aGUgUmlnaHRzIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSBhbmQgZG8gYW55dGhpbmcgaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgYXMgaWYgdGhlIFJpZ2h0cyBkaWQgbm90IGV4aXN0LlxuXG4gICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yayBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuXG5cbiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdSBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgICAgMS4gWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZFxuXG4gICAgICAyLiBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kXG5cbiAgICAgIDMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kXG5cbiAgICAgIDQuIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgXCJOT1RJQ0VcIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdCBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLCB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cyBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZCB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLCByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGggdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS5cblxuICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLCBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLlxuXG4gICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLlxuXG4gICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaCBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseSBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZSBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuXG5cbiAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbiBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4gRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TXG5cbkFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhpcyBsaWNlbnNlIHRvIHlvdXIgd29ya1xuXG5UbyBhcHBseSB0aGlzIGxpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyBcIltdXCIgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUgdGhlIGJyYWNrZXRzISkgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZSBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZSBzYW1lIFwicHJpbnRlZCBwYWdlXCIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llciBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuXG5cbkNvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXSBDb3B5cmlnaHQgYW5kIHJlbGF0ZWQgcmlnaHRzIGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgU29sZGVycGFkIEhhcmR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMC41MSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3NvbGRlcnBhZC5vcmcvbGljZW5zZXMvU0hMLTAuNTEuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUsIGhhcmR3YXJlIGFuZCBtYXRlcmlhbHMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIl0sImxpY2Vuc2VJZHMiOlsiU0hMLTAuNTEiXSwia2V5d29yZHMiOlsiMCA1MSB0aGlzIiwiNTEgdGhpcyBsaWNlbnNlIiwiY29uZGl0aW9ucyAxIHlvdSIsImxpY2Vuc2UgYW5kIDIiLCJhbmQgMiB5b3UiLCJmaWxlcyBhbmQgMyIsImFuZCAzIHlvdSIsIndvcmtzIGFuZCA0IiwiYW5kIDQgaWYiLCI0IGlmIHRoZSIsIjAgNTEgdGhlIiwiNTEgdGhlIGxpY2Vuc2UiLCJzaGwgMCA1MSIsIjAgNTEgdW5sZXNzIiwiNTEgdW5sZXNzIHJlcXVpcmVkIiwidmVyc2lvbiAwIDUxIHRoaXMiLCIwIDUxIHRoaXMgbGljZW5zZSIsIjUxIHRoaXMgbGljZW5zZSBpcyIsInJpZ2h0cyBhbmQgZGF0YWJhc2UgcmlnaHRzIiwiYW5kIGRhdGFiYXNlIHJpZ2h0cyBidXQiLCJkYXRhYmFzZSByaWdodHMgYnV0IGV4Y2x1ZGluZyIsImZvbGxvd2luZyBjb25kaXRpb25zIDEgeW91IiwiY29uZGl0aW9ucyAxIHlvdSBtdXN0IiwiMSB5b3UgbXVzdCBnaXZlIiwidGhpcyBsaWNlbnNlIGFuZCAyIiwibGljZW5zZSBhbmQgMiB5b3UiLCJhbmQgMiB5b3UgbXVzdCIsIjIgeW91IG11c3QgY2F1c2UiLCJ0aGUgZmlsZXMgYW5kIDMiLCJmaWxlcyBhbmQgMyB5b3UiLCJhbmQgMyB5b3UgbXVzdCIsIjMgeW91IG11c3QgcmV0YWluIiwiZGVyaXZhdGl2ZSB3b3JrcyBhbmQgNCIsIndvcmtzIGFuZCA0IGlmIiwiYW5kIDQgaWYgdGhlIiwiNCBpZiB0aGUgd29yayIsInZlcnNpb24gMCA1MSB0aGUiLCIwIDUxIHRoZSBsaWNlbnNlIiwiNTEgdGhlIGxpY2Vuc2UgeW91IiwibGljZW5zZXMgc2hsIDAgNTEiLCJzaGwgMCA1MSB1bmxlc3MiLCIwIDUxIHVubGVzcyByZXF1aXJlZCIsIjUxIHVubGVzcyByZXF1aXJlZCBieSIsImxpY2Vuc2UgdmVyc2lvbiAwIDUxIHRoaXMiLCJ2ZXJzaW9uIDAgNTEgdGhpcyBsaWNlbnNlIiwiMCA1MSB0aGlzIGxpY2Vuc2UgaXMiLCI1MSB0aGlzIGxpY2Vuc2UgaXMgYmFzZWQiLCJtYXNrIHJpZ2h0cyBhbmQgZGF0YWJhc2UgcmlnaHRzIiwicmlnaHRzIGFuZCBkYXRhYmFzZSByaWdodHMgYnV0IiwiYW5kIGRhdGFiYXNlIHJpZ2h0cyBidXQgZXhjbHVkaW5nIiwiZGF0YWJhc2UgcmlnaHRzIGJ1dCBleGNsdWRpbmcgcGF0ZW50cyIsIm1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIDEiLCJ0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgMSB5b3UiLCJmb2xsb3dpbmcgY29uZGl0aW9ucyAxIHlvdSBtdXN0IiwiY29uZGl0aW9ucyAxIHlvdSBtdXN0IGdpdmUiLCIxIHlvdSBtdXN0IGdpdmUgYW55Iiwib2YgdGhpcyBsaWNlbnNlIGFuZCAyIiwidGhpcyBsaWNlbnNlIGFuZCAyIHlvdSIsImxpY2Vuc2UgYW5kIDIgeW91IG11c3QiLCJhbmQgMiB5b3UgbXVzdCBjYXVzZSIsIjIgeW91IG11c3QgY2F1c2UgYW55IiwiY2hhbmdlZCB0aGUgZmlsZXMgYW5kIDMiLCJ0aGUgZmlsZXMgYW5kIDMgeW91IiwiZmlsZXMgYW5kIDMgeW91IG11c3QiLCJhbmQgMyB5b3UgbXVzdCByZXRhaW4iLCIzIHlvdSBtdXN0IHJldGFpbiBpbiIsInRoZSBkZXJpdmF0aXZlIHdvcmtzIGFuZCA0IiwiZGVyaXZhdGl2ZSB3b3JrcyBhbmQgNCBpZiIsIndvcmtzIGFuZCA0IGlmIHRoZSIsImFuZCA0IGlmIHRoZSB3b3JrIiwiNCBpZiB0aGUgd29yayBpbmNsdWRlcyIsImxpY2Vuc2UgdmVyc2lvbiAwIDUxIHRoZSIsInZlcnNpb24gMCA1MSB0aGUgbGljZW5zZSIsIjAgNTEgdGhlIGxpY2Vuc2UgeW91IiwiNTEgdGhlIGxpY2Vuc2UgeW91IG1heSIsIm9yZyBsaWNlbnNlcyBzaGwgMCA1MSIsImxpY2Vuc2VzIHNobCAwIDUxIHVubGVzcyIsInNobCAwIDUxIHVubGVzcyByZXF1aXJlZCIsIjAgNTEgdW5sZXNzIHJlcXVpcmVkIGJ5IiwiNTEgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUiXX0seyJsaWNlbnNlVGV4dHMiOlsiXG5cblNVTiBJTkRVU1RSWSBTVEFOREFSRFMgU09VUkNFIExJQ0VOU0VcblxuVmVyc2lvbiAxLjJcblxuICAgMS4wIERFRklOSVRJT05TXG5cbiAgICAgIDEuMSBDb21tZXJjaWFsIFVzZSBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUgT3JpZ2luYWwgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS5cblxuICAgICAgMS4yIENvbnRyaWJ1dG9yIFZlcnNpb24gbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuXG5cbiAgICAgIDEuMyBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuXG5cbiAgICAgIDEuNCBFeGVjdXRhYmxlIG1lYW5zIE9yaWdpbmFsIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS5cblxuICAgICAgMS41IEluaXRpYWwgRGV2ZWxvcGVyIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS5cblxuICAgICAgMS42IExhcmdlciBXb3JrIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBPcmlnaW5hbCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjcgTGljZW5zZSBtZWFucyB0aGlzIGRvY3VtZW50LlxuXG4gICAgICAxLjggTGljZW5zYWJsZSBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi5cblxuICAgICAgMS45IE1vZGlmaWNhdGlvbnMgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBBIE1vZGlmaWNhdGlvbiBpczpcblxuICAgICAgICAgQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgICAgQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4xMCBPcmlnaW5hbCBDb2RlIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUuXG5cbiAgICAgIDEuMTEgUGF0ZW50IENsYWltcyBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci5cblxuICAgICAgMS4xMiBTb3VyY2UgQ29kZSBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIG9yIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZS5cblxuICAgICAgMS4xMyBTdGFuZGFyZHMgbWVhbnMgdGhlIHN0YW5kYXJkcyBpZGVudGlmaWVkIGluIEV4aGliaXQgQi5cblxuICAgICAgMS4xNCBZb3UgKG9yIFlvdXIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsIFlvdSBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgY29udHJvbCBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgMi4wIFNPVVJDRSBDT0RFIExJQ0VOU0VcblxuICAgICAgMi4xIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudCBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOlxuXG4gICAgICAgICBcblxuICAgICAgICAgKGEpdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgKGIpIHVuZGVyIFBhdGVudHMgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLlxuXG4gICAgICAgICAoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAgICAoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIE1vZGlmaWNhdGlvbnMuXG5cbiAgIDMuMCBESVNUUklCVVRJT04gT0JMSUdBVElPTlNcblxuICAgICAgMy4xIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIE9yaWdpbmFsIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cyByaWdodHMgaGVyZXVuZGVyLiBZb3VyIGxpY2Vuc2UgZm9yIHNoaXBtZW50IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGlzIGNvbmRpdGlvbmVkIHVwb24gWW91ciBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIFNlY3Rpb24uIFRoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgbXVzdCBjb21wbHkgd2l0aCBhbGwgcmVxdWlyZW1lbnRzIHNldCBvdXQgYnkgdGhlIFN0YW5kYXJkcyBib2R5IGluIGVmZmVjdCBvbmUgaHVuZHJlZCB0d2VudHkgKDEyMCkgZGF5cyBiZWZvcmUgWW91IHNoaXAgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24uIEluIHRoZSBldmVudCB0aGF0IHRoZSBNb2RpZmljYXRpb25zIGRvIG5vdCBtZWV0IHN1Y2ggcmVxdWlyZW1lbnRzLCBZb3UgYWdyZWUgdG8gcHVibGlzaCBlaXRoZXIgKGkpIGFueSBkZXZpYXRpb24gZnJvbSB0aGUgU3RhbmRhcmRzIHByb3RvY29sIHJlc3VsdGluZyBmcm9tIGltcGxlbWVudGF0aW9uIG9mIFlvdXIgTW9kaWZpY2F0aW9ucyBhbmQgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgWW91ciBNb2RpZmljYXRpb25zIG9yIChpaSkgWW91ciBNb2RpZmljYXRpb25zIGluIFNvdXJjZSBDb2RlIGZvcm0sIGFuZCB0byBtYWtlIGFueSBzdWNoIGRldmlhdGlvbiBhbmQgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9yIE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGEgdGhpcyBsaWNlbnNlIG9uIGEgcm95YWx0eSBmcmVlIGJhc2lzIHdpdGhpbiB0aGlydHkgKDMwKSBkYXlzIG9mIFlvdXIgZmlyc3QgY3VzdG9tZXIgc2hpcG1lbnQgb2YgWW91ciBNb2RpZmljYXRpb25zLiBBZGRpdGlvbmFsbHksIGluIHRoZSBldmVudCB0aGF0IHRoZSBNb2RpZmljYXRpb25zIHlvdSBjcmVhdGUgZG8gbm90IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBzZXQgb3V0IGluIHRoaXMgU2VjdGlvbiwgWW91IGFncmVlIHRvIGNvbXBseSB3aXRoIHRoZSBTdGFuZGFyZHMgcmVxdWlyZW1lbnRzIHNldCBvdXQgaW4gRXhoaWJpdCBCLlxuXG4gICAgICAzLjIgUmVxdWlyZWQgTm90aWNlcy4gWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCBZb3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIEluaXRpYWwgQ29kZS5cblxuICAgICAgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIFlvdXIgdmVyc2lvbiBvZiB0aGUgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuXG5cbiAgICAgIDMuMyBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4gWW91IG1heSBkaXN0cmlidXRlIE9yaWdpbmFsIENvZGUgaW4gRXhlY3V0YWJsZSBhbmQgU291cmNlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb25zIDMuMSBhbmQgMy4yIGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgT3JpZ2luYWwgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIG9yIFNvdXJjZSB2ZXJzaW9ucywgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHMgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSB2ZXJzaW9ucyBvZiBZb3VyIHZlcnNpb24gb2YgdGhlIENvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSBhbmQgU291cmNlIHZlcnNpb25zIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjQgTGFyZ2VyIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgT3JpZ2luYWwgQ29kZS5cblxuICAgNC4wIElOQUJJTElUWSBUTyBDT01QTFkgRFVFIFRPIFNUQVRVVEUgT1IgUkVHVUxBVElPTlxuXG4gICBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC5cblxuICAgNS4wIEFQUExJQ0FUSU9OIE9GIFRISVMgTElDRU5TRVxuXG4gICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgTW9kaWZpY2F0aW9ucyBhcyBzZXQgb3V0IGluIFNlY3Rpb24gMy4xLlxuXG4gICA2LjAgVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0VcblxuICAgICAgNi4xIE5ldyBWZXJzaW9ucy4gU3VuIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci5cblxuICAgICAgNi4yIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFN1bi4gTm8gb25lIG90aGVyIHRoYW4gU3VuIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIE9yaWdpbmFsIENvZGUuXG5cbiAgIDcuMCBESVNDTEFJTUVSIE9GIFdBUlJBTlRZXG5cbiAgIE9SSUdJTkFMIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIEFTIElTIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIE9SSUdJTkFMIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIE9SSUdJTkFMIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgT1JJR0lOQUwgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBPUklHSU5BTCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuXG5cbiAgIDguMCBURVJNSU5BVElPTlxuXG4gICAgICA4LjEgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBPcmlnaW5hbCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4gOC4yIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9uIDguMSBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uIEVYSElCSVQgQSAtIFN1biBJbmR1c3RyeSBTdGFuZGFyZHMgU291cmNlIExpY2Vuc2VcblxuXCJUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBTdW4gSW5kdXN0cnkgU3RhbmRhcmRzIFNvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4yICh0aGUgTGljZW5zZSk7IFlvdVxuXG5tYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cIlxuXG5cIllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBncmlkZW5naW5lLnN1bnNvdXJjZS5uZXQvbGljZW5zZS5odG1sXCJcblxuXCJTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3JcblxuaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXCJcblxuXCJUaGUgT3JpZ2luYWwgQ29kZSBpcyBHcmlkIEVuZ2luZS5cIlxuXG5cIlRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpczpcblxuU3VuIE1pY3Jvc3lzdGVtcywgSW5jLlwiXG5cblwiUG9ydGlvbnMgY3JlYXRlZCBieTogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhcmUgQ29weXJpZ2h0IChDKSAyMDAxIFN1biBNaWNyb3N5c3RlbXMsIEluYy5cIlxuXG5cIkFsbCBSaWdodHMgUmVzZXJ2ZWQuXCJcblxuXCJDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1wiXG5cbkVYSElCSVQgQiAtIFN0YW5kYXJkc1xuXG4gICAxLjAgUmVxdWlyZW1lbnRzIGZvciBwcm9qZWN0IFN0YW5kYXJkcy4gVGhlIHJlcXVpcmVtZW50cyBmb3IgcHJvamVjdCBTdGFuZGFyZHMgYXJlIHZlcnNpb24tZGVwZW5kZW50IGFuZCBhcmUgZGVmaW5lZCBhdDogR3JpZCBFbmdpbmUgc3RhbmRhcmRzLlxuXG4gICAyLjAgQWRkaXRpb25hbCByZXF1aXJlbWVudHMuIFRoZSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyBwdXJzdWFudCB0byBTZWN0aW9uIDMuMSBhcmUgZGVmaW5lZCBhczpcblxuICAgICAgMi4xIE5hbWluZyBDb252ZW50aW9ucy4gSWYgYW55IG9mIHlvdXIgTW9kaWZpY2F0aW9ucyBkbyBub3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBTdGFuZGFyZCwgdGhlbiB5b3UgbXVzdCBjaGFuZ2UgdGhlIHByb2R1Y3QgbmFtZSBzbyB0aGF0IEdyaWQgRW5naW5lLCBncmlkZW5naW5lLCBncmlkZW5naW5lLnN1bnNvdXJjZSwgYW5kIHNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBub3QgdXNlZC5cblxuICAgICAgMi4yIENvbXBsaWFuY2UgQ2xhaW1zLiBJZiBhbnkgb2YgeW91ciBNb2RpZmljYXRpb25zIGRvIG5vdCBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIFN0YW5kYXJkcyB5b3UgbWF5IG5vdCBjbGFpbSwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgdGhhdCB5b3VyIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTdGFuZGFyZHMgaXMgY29tcGxpYW50LiJdLCJsaWNlbnNlSWRzIjpbIlNJU1NMLTEuMiJdLCJrZXl3b3JkcyI6WyIyIDEgMCIsInNhbWUgdGVybXMgYSIsInlvdXIgbW9kaWZpY2F0aW9ucyBhZGRpdGlvbmFsbHkiLCJtb2RpZmljYXRpb25zIGFkZGl0aW9uYWxseSBpbiIsImFkZGl0aW9uYWxseSBpbiB0aGUiLCJ5b3UgY3JlYXRlIGRvIiwiY3JlYXRlIGRvIG5vdCIsInRoZSByZXF1aXJlbWVudHMgc2V0Iiwic2VjdGlvbiB5b3UgYWdyZWUiLCJ3aXRoIHRoZSBzdGFuZGFyZHMiLCJ0aGUgc3RhbmRhcmRzIHJlcXVpcmVtZW50cyIsInN0YW5kYXJkcyByZXF1aXJlbWVudHMgc2V0IiwiZXhoaWJpdCBiIDMiLCJzdXJ2aXZlIHRlcm1pbmF0aW9uIGV4aGliaXQiLCJ0ZXJtaW5hdGlvbiBleGhpYml0IGEiLCJhIHN1biBpbmR1c3RyeSIsInRoZSBzdW4gaW5kdXN0cnkiLCJsaWNlbnNlIGF0IGdyaWRlbmdpbmUiLCJhdCBncmlkZW5naW5lIHN1bnNvdXJjZSIsImdyaWRlbmdpbmUgc3Vuc291cmNlIG5ldCIsInN1bnNvdXJjZSBuZXQgbGljZW5zZSIsIm5ldCBsaWNlbnNlIGh0bWwiLCJsaWNlbnNlIGh0bWwgc29mdHdhcmUiLCJjb2RlIGlzIGdyaWQiLCJpcyBncmlkIGVuZ2luZSIsImdyaWQgZW5naW5lIHRoZSIsImVuZ2luZSB0aGUgaW5pdGlhbCIsImNyZWF0ZWQgYnkgc3VuIiwibWljcm9zeXN0ZW1zIGluYyBhcmUiLCJjIDIwMDEgc3VuIiwiMjAwMSBzdW4gbWljcm9zeXN0ZW1zIiwiYiBzdGFuZGFyZHMgMSIsInN0YW5kYXJkcyAxIDAiLCIxIDAgcmVxdWlyZW1lbnRzIiwiMCByZXF1aXJlbWVudHMgZm9yIiwicHJvamVjdCBzdGFuZGFyZHMgdGhlIiwic3RhbmRhcmRzIHRoZSByZXF1aXJlbWVudHMiLCJwcm9qZWN0IHN0YW5kYXJkcyBhcmUiLCJzdGFuZGFyZHMgYXJlIHZlcnNpb24iLCJhcmUgdmVyc2lvbiBkZXBlbmRlbnQiLCJ2ZXJzaW9uIGRlcGVuZGVudCBhbmQiLCJkZXBlbmRlbnQgYW5kIGFyZSIsImFuZCBhcmUgZGVmaW5lZCIsImRlZmluZWQgYXQgZ3JpZCIsImF0IGdyaWQgZW5naW5lIiwiZ3JpZCBlbmdpbmUgc3RhbmRhcmRzIiwiZW5naW5lIHN0YW5kYXJkcyAyIiwic3RhbmRhcmRzIDIgMCIsIjIgMCBhZGRpdGlvbmFsIiwiMCBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyIsImFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzIHRoZSIsInJlcXVpcmVtZW50cyB0aGUgYWRkaXRpb25hbCIsInRoZSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyIsImFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzIHB1cnN1YW50IiwicmVxdWlyZW1lbnRzIHB1cnN1YW50IHRvIiwiMyAxIGFyZSIsIjEgYXJlIGRlZmluZWQiLCJhcmUgZGVmaW5lZCBhcyIsImRlZmluZWQgYXMgMiIsImFzIDIgMSIsIjIgMSBuYW1pbmciLCIxIG5hbWluZyBjb252ZW50aW9ucyIsIm5hbWluZyBjb252ZW50aW9ucyBpZiIsImNvbnZlbnRpb25zIGlmIGFueSIsInRoZSBzdGFuZGFyZCB0aGVuIiwic3RhbmRhcmQgdGhlbiB5b3UiLCJtdXN0IGNoYW5nZSB0aGUiLCJjaGFuZ2UgdGhlIHByb2R1Y3QiLCJ0aGUgcHJvZHVjdCBuYW1lIiwicHJvZHVjdCBuYW1lIHNvIiwibmFtZSBzbyB0aGF0Iiwic28gdGhhdCBncmlkIiwidGhhdCBncmlkIGVuZ2luZSIsImdyaWQgZW5naW5lIGdyaWRlbmdpbmUiLCJlbmdpbmUgZ3JpZGVuZ2luZSBncmlkZW5naW5lIiwiZ3JpZGVuZ2luZSBncmlkZW5naW5lIHN1bnNvdXJjZSIsImdyaWRlbmdpbmUgc3Vuc291cmNlIGFuZCIsInN1bnNvdXJjZSBhbmQgc2ltaWxhciIsImFuZCBzaW1pbGFyIG5hbWluZyIsInNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb25zIiwibmFtaW5nIGNvbnZlbnRpb25zIGFyZSIsImNvbnZlbnRpb25zIGFyZSBub3QiLCJub3QgdXNlZCAyIiwidXNlZCAyIDIiLCIyIDIgY29tcGxpYW5jZSIsIjIgY29tcGxpYW5jZSBjbGFpbXMiLCJjb21wbGlhbmNlIGNsYWltcyBpZiIsImNsYWltcyBpZiBhbnkiLCJ0aGUgc3RhbmRhcmRzIHlvdSIsInN0YW5kYXJkcyB5b3UgbWF5Iiwibm90IGNsYWltIGRpcmVjdGx5IiwiY2xhaW0gZGlyZWN0bHkgb3IiLCJvciBpbmRpcmVjdGx5IHRoYXQiLCJpbmRpcmVjdGx5IHRoYXQgeW91ciIsInRoYXQgeW91ciBpbXBsZW1lbnRhdGlvbiIsInlvdXIgaW1wbGVtZW50YXRpb24gb2YiLCJpbXBsZW1lbnRhdGlvbiBvZiB0aGUiLCJ0aGUgc3RhbmRhcmRzIGlzIiwic3RhbmRhcmRzIGlzIGNvbXBsaWFudCIsIjEgMiAxIDAiLCIyIDEgMCBkZWZpbml0aW9ucyIsInRoZSBzYW1lIHRlcm1zIGEiLCJzYW1lIHRlcm1zIGEgdGhpcyIsImEgdGhpcyBsaWNlbnNlIG9uIiwib2YgeW91ciBtb2RpZmljYXRpb25zIGFkZGl0aW9uYWxseSIsInlvdXIgbW9kaWZpY2F0aW9ucyBhZGRpdGlvbmFsbHkgaW4iLCJtb2RpZmljYXRpb25zIGFkZGl0aW9uYWxseSBpbiB0aGUiLCJhZGRpdGlvbmFsbHkgaW4gdGhlIGV2ZW50IiwidGhhdCB0aGUgbW9kaWZpY2F0aW9ucyB5b3UiLCJ0aGUgbW9kaWZpY2F0aW9ucyB5b3UgY3JlYXRlIiwibW9kaWZpY2F0aW9ucyB5b3UgY3JlYXRlIGRvIiwieW91IGNyZWF0ZSBkbyBub3QiLCJjcmVhdGUgZG8gbm90IG1lZXQiLCJtZWV0IHRoZSByZXF1aXJlbWVudHMgc2V0IiwidGhlIHJlcXVpcmVtZW50cyBzZXQgb3V0Iiwib3V0IGluIHRoaXMgc2VjdGlvbiIsImluIHRoaXMgc2VjdGlvbiB5b3UiLCJ0aGlzIHNlY3Rpb24geW91IGFncmVlIiwic2VjdGlvbiB5b3UgYWdyZWUgdG8iLCJjb21wbHkgd2l0aCB0aGUgc3RhbmRhcmRzIiwid2l0aCB0aGUgc3RhbmRhcmRzIHJlcXVpcmVtZW50cyIsInRoZSBzdGFuZGFyZHMgcmVxdWlyZW1lbnRzIHNldCIsInN0YW5kYXJkcyByZXF1aXJlbWVudHMgc2V0IG91dCIsIm91dCBpbiBleGhpYml0IGIiLCJpbiBleGhpYml0IGIgMyIsImV4aGliaXQgYiAzIDIiLCJiIDMgMiByZXF1aXJlZCIsInNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24gZXhoaWJpdCIsInN1cnZpdmUgdGVybWluYXRpb24gZXhoaWJpdCBhIiwidGVybWluYXRpb24gZXhoaWJpdCBhIHN1biIsImV4aGliaXQgYSBzdW4gaW5kdXN0cnkiLCJhIHN1biBpbmR1c3RyeSBzdGFuZGFyZHMiLCJzdGFuZGFyZHMgc291cmNlIGxpY2Vuc2UgdGhlIiwidG8gdGhlIHN1biBpbmR1c3RyeSIsInRoZSBzdW4gaW5kdXN0cnkgc3RhbmRhcmRzIiwidGhlIGxpY2Vuc2UgYXQgZ3JpZGVuZ2luZSIsImxpY2Vuc2UgYXQgZ3JpZGVuZ2luZSBzdW5zb3VyY2UiLCJhdCBncmlkZW5naW5lIHN1bnNvdXJjZSBuZXQiLCJncmlkZW5naW5lIHN1bnNvdXJjZSBuZXQgbGljZW5zZSIsInN1bnNvdXJjZSBuZXQgbGljZW5zZSBodG1sIiwibmV0IGxpY2Vuc2UgaHRtbCBzb2Z0d2FyZSIsImxpY2Vuc2UgaHRtbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCIsIm9yaWdpbmFsIGNvZGUgaXMgZ3JpZCIsImNvZGUgaXMgZ3JpZCBlbmdpbmUiLCJpcyBncmlkIGVuZ2luZSB0aGUiLCJncmlkIGVuZ2luZSB0aGUgaW5pdGlhbCIsImVuZ2luZSB0aGUgaW5pdGlhbCBkZXZlbG9wZXIiLCJwb3J0aW9ucyBjcmVhdGVkIGJ5IHN1biIsImNyZWF0ZWQgYnkgc3VuIG1pY3Jvc3lzdGVtcyIsInN1biBtaWNyb3N5c3RlbXMgaW5jIGFyZSIsIm1pY3Jvc3lzdGVtcyBpbmMgYXJlIGNvcHlyaWdodCIsImNvcHlyaWdodCBjIDIwMDEgc3VuIiwiYyAyMDAxIHN1biBtaWNyb3N5c3RlbXMiLCIyMDAxIHN1biBtaWNyb3N5c3RlbXMgaW5jIiwiZXhoaWJpdCBiIHN0YW5kYXJkcyAxIiwiYiBzdGFuZGFyZHMgMSAwIiwic3RhbmRhcmRzIDEgMCByZXF1aXJlbWVudHMiLCIxIDAgcmVxdWlyZW1lbnRzIGZvciIsIjAgcmVxdWlyZW1lbnRzIGZvciBwcm9qZWN0IiwiZm9yIHByb2plY3Qgc3RhbmRhcmRzIHRoZSIsInByb2plY3Qgc3RhbmRhcmRzIHRoZSByZXF1aXJlbWVudHMiLCJzdGFuZGFyZHMgdGhlIHJlcXVpcmVtZW50cyBmb3IiLCJ0aGUgcmVxdWlyZW1lbnRzIGZvciBwcm9qZWN0IiwiZm9yIHByb2plY3Qgc3RhbmRhcmRzIGFyZSIsInByb2plY3Qgc3RhbmRhcmRzIGFyZSB2ZXJzaW9uIiwic3RhbmRhcmRzIGFyZSB2ZXJzaW9uIGRlcGVuZGVudCIsImFyZSB2ZXJzaW9uIGRlcGVuZGVudCBhbmQiLCJ2ZXJzaW9uIGRlcGVuZGVudCBhbmQgYXJlIiwiZGVwZW5kZW50IGFuZCBhcmUgZGVmaW5lZCIsImFuZCBhcmUgZGVmaW5lZCBhdCIsImFyZSBkZWZpbmVkIGF0IGdyaWQiLCJkZWZpbmVkIGF0IGdyaWQgZW5naW5lIiwiYXQgZ3JpZCBlbmdpbmUgc3RhbmRhcmRzIiwiZ3JpZCBlbmdpbmUgc3RhbmRhcmRzIDIiLCJlbmdpbmUgc3RhbmRhcmRzIDIgMCIsInN0YW5kYXJkcyAyIDAgYWRkaXRpb25hbCIsIjIgMCBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyIsIjAgYWRkaXRpb25hbCByZXF1aXJlbWVudHMgdGhlIiwiYWRkaXRpb25hbCByZXF1aXJlbWVudHMgdGhlIGFkZGl0aW9uYWwiLCJyZXF1aXJlbWVudHMgdGhlIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzIiwidGhlIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzIHB1cnN1YW50IiwiYWRkaXRpb25hbCByZXF1aXJlbWVudHMgcHVyc3VhbnQgdG8iLCJyZXF1aXJlbWVudHMgcHVyc3VhbnQgdG8gc2VjdGlvbiIsInRvIHNlY3Rpb24gMyAxIiwic2VjdGlvbiAzIDEgYXJlIiwiMyAxIGFyZSBkZWZpbmVkIiwiMSBhcmUgZGVmaW5lZCBhcyIsImFyZSBkZWZpbmVkIGFzIDIiLCJkZWZpbmVkIGFzIDIgMSIsImFzIDIgMSBuYW1pbmciLCIyIDEgbmFtaW5nIGNvbnZlbnRpb25zIiwiMSBuYW1pbmcgY29udmVudGlvbnMgaWYiLCJuYW1pbmcgY29udmVudGlvbnMgaWYgYW55IiwiY29udmVudGlvbnMgaWYgYW55IG9mIiwicmVxdWlyZW1lbnRzIG9mIHRoZSBzdGFuZGFyZCIsIm9mIHRoZSBzdGFuZGFyZCB0aGVuIiwidGhlIHN0YW5kYXJkIHRoZW4geW91Iiwic3RhbmRhcmQgdGhlbiB5b3UgbXVzdCIsInRoZW4geW91IG11c3QgY2hhbmdlIiwieW91IG11c3QgY2hhbmdlIHRoZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJTdW4gSW5kdXN0cnkgU3RhbmRhcmRzIFNvdXJjZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjFcblxuICAgMS4wIERFRklOSVRJT05TXG5cbiAgICAgIDEuMSBcIkNvbW1lcmNpYWwgVXNlXCIgbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlIE9yaWdpbmFsIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuXG5cbiAgICAgIDEuMiBcIkNvbnRyaWJ1dG9yIFZlcnNpb25cIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci5cblxuICAgICAgMS4zIFwiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtXCIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuXG5cbiAgICAgIDEuNCBcIkV4ZWN1dGFibGVcIiBtZWFucyBPcmlnaW5hbCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuXG5cbiAgICAgIDEuNSBcIkluaXRpYWwgRGV2ZWxvcGVyXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLlxuXG4gICAgICAxLjYgXCJMYXJnZXIgV29ya1wiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBPcmlnaW5hbCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjcgXCJMaWNlbnNlXCIgbWVhbnMgdGhpcyBkb2N1bWVudC5cblxuICAgICAgMS44IFwiTGljZW5zYWJsZVwiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLlxuXG4gICAgICAxLjkgXCJNb2RpZmljYXRpb25zXCIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBBIE1vZGlmaWNhdGlvbiBpczpcblxuICAgICAgICAgQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgICAgQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4xMCBcIk9yaWdpbmFsIENvZGVcIiBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLlxuXG4gICAgICAxLjExIFwiUGF0ZW50IENsYWltc1wiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLlxuXG4gICAgICAxLjEyIFwiU291cmNlIENvZGVcIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIG9yIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZS5cblxuICAgICAgMS4xMyBcIlN0YW5kYXJkc1wiIG1lYW5zIHRoZSBzdGFuZGFyZHMgaWRlbnRpZmllZCBpbiBFeGhpYml0IEIuXG5cbiAgICAgIDEuMTQgXCJZb3VcIiAob3IgXCJZb3VyXCIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91JycgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbCcnIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAyLjAgU09VUkNFIENPREUgTElDRU5TRVxuXG4gICAgICAyLjEgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50IFRoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6XG5cbiAgICAgICAgIChhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZFxuXG4gICAgICAgICAoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuXG5cbiAgICAgICAgIChjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgICAgIChkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gTW9kaWZpY2F0aW9ucy5cblxuICAgMy4wIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OU1xuXG4gICAgICAzLjEgQXBwbGljYXRpb24gb2YgTGljZW5zZS4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgT3JpZ2luYWwgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBZb3VyIGxpY2Vuc2UgZm9yIHNoaXBtZW50IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGlzIGNvbmRpdGlvbmVkIHVwb24gWW91ciBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIFNlY3Rpb24uIFRoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgbXVzdCBjb21wbHkgd2l0aCBhbGwgcmVxdWlyZW1lbnRzIHNldCBvdXQgYnkgdGhlIFN0YW5kYXJkcyBib2R5IGluIGVmZmVjdCBvbmUgaHVuZHJlZCB0d2VudHkgKDEyMCkgZGF5cyBiZWZvcmUgWW91IHNoaXAgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24uIEluIHRoZSBldmVudCB0aGF0IHRoZSBNb2RpZmljYXRpb25zIGRvIG5vdCBtZWV0IHN1Y2ggcmVxdWlyZW1lbnRzLCBZb3UgYWdyZWUgdG8gcHVibGlzaCBlaXRoZXIgKGkpIGFueSBkZXZpYXRpb24gZnJvbSB0aGUgU3RhbmRhcmRzIHByb3RvY29sIHJlc3VsdGluZyBmcm9tIGltcGxlbWVudGF0aW9uIG9mIFlvdXIgTW9kaWZpY2F0aW9ucyBhbmQgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgWW91ciBNb2RpZmljYXRpb25zIG9yIChpaSkgWW91ciBNb2RpZmljYXRpb25zIGluIFNvdXJjZSBDb2RlIGZvcm0sIGFuZCB0byBtYWtlIGFueSBzdWNoIGRldmlhdGlvbiBhbmQgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9yIE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIHRoaXMgbGljZW5zZSBvbiBhIHJveWFsdHkgZnJlZSBiYXNpcyB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBvZiBZb3VyIGZpcnN0IGN1c3RvbWVyIHNoaXBtZW50IG9mIFlvdXIgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMy4yIFJlcXVpcmVkIE5vdGljZXMuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgWW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gSW5pdGlhbCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgWW91ciB2ZXJzaW9uIG9mIHRoZSBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci5cblxuICAgICAgMy4zIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiBZb3UgbWF5IGRpc3RyaWJ1dGUgT3JpZ2luYWwgQ29kZSBpbiBFeGVjdXRhYmxlIGFuZCBTb3VyY2UgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbnMgMy4xIGFuZCAzLjIgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBPcmlnaW5hbCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgb3IgU291cmNlIHZlcnNpb25zLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSB2ZXJzaW9ucyBvZiBZb3VyIHZlcnNpb24gb2YgdGhlIENvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSBhbmQgU291cmNlIHZlcnNpb25zIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjQgTGFyZ2VyIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgT3JpZ2luYWwgQ29kZS5cblxuICAgNC4wIElOQUJJTElUWSBUTyBDT01QTFkgRFVFIFRPIFNUQVRVVEUgT1IgUkVHVUxBVElPTlxuXG4gICBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC5cblxuICAgNS4wIEFQUExJQ0FUSU9OIE9GIFRISVMgTElDRU5TRVxuXG4gICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgTW9kaWZpY2F0aW9ucyBhcyBzZXQgb3V0IGluIFNlY3Rpb24gMy4xLlxuXG4gICA2LjAgVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0VcblxuICAgICAgNi4xIE5ldyBWZXJzaW9ucy4gU3VuIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci5cblxuICAgICAgNi4yIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFN1bi4gTm8gb25lIG90aGVyIHRoYW4gU3VuIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIE9yaWdpbmFsIENvZGUuXG5cbiAgIDcuMCBESVNDTEFJTUVSIE9GIFdBUlJBTlRZXG5cbiAgIE9SSUdJTkFMIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBPUklHSU5BTCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBPUklHSU5BTCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIE9SSUdJTkFMIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgT1JJR0lOQUwgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLlxuXG4gICA4LjAgVEVSTUlOQVRJT05cblxuICAgICAgOC4xIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgT3JpZ2luYWwgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuXG5cbiAgICAgIDguMiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbiA4LjEgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLlxuXG4gICA5LjAgTElNSVQgT0YgTElBQklMSVRZXG5cbiAgIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBPUklHSU5BTCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuXG5cbiAgIDEwLjAgVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSU1xuXG4gICBVLlMuIEdvdmVybm1lbnQ6IElmIHRoaXMgU29mdHdhcmUgaXMgYmVpbmcgYWNxdWlyZWQgYnkgb3Igb24gYmVoYWxmIG9mIHRoZSBVLlMuIEdvdmVybm1lbnQgb3IgYnkgYSBVLlMuIEdvdmVybm1lbnQgcHJpbWUgY29udHJhY3RvciBvciBzdWJjb250cmFjdG9yIChhdCBhbnkgdGllciksIHRoZW4gdGhlIEdvdmVybm1lbnQncyByaWdodHMgaW4gdGhlIFNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBzaGFsbCBiZSBvbmx5IGFzIHNldCBmb3J0aCBpbiB0aGlzIGxpY2Vuc2U7IHRoaXMgaXMgaW4gYWNjb3JkYW5jZSB3aXRoIDQ4IEMuRi5SLiAyMjcuNzIwMSB0aHJvdWdoIDIyNy43MjAyLTQgKGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgKERvRCkgYWNxdWlzaXRpb25zKSBhbmQgd2l0aCA0OCBDLkYuUi4gMi4xMDEgYW5kIDEyLjIxMiAoZm9yIG5vbi1Eb0QgYWNxdWlzaXRpb25zKS5cblxuICAgMTEuMCBNSVNDRUxMQU5FT1VTXG5cbiAgIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLiBFWEhJQklUIEEgLSBTdW4gU3RhbmRhcmRzIExpY2Vuc2VcblxuXCJUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBTdW4gU3RhbmRhcmRzIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSBcIkxpY2Vuc2VcIik7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gLlxuXG5Tb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlclxuXG5leHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG5UaGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAuXG5cblRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpczogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAuXG5cblBvcnRpb25zIGNyZWF0ZWQgYnk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1xuXG5hcmUgQ29weXJpZ2h0IChDKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXG5cbkFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbkNvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19cblxuRVhISUJJVCBCIC0gU3RhbmRhcmRzXG5cblRoZSBTdGFuZGFyZCBpcyBkZWZpbmVkIGFzIHRoZSBmb2xsb3dpbmc6XG5cbk9wZW5PZmZpY2Uub3JnIFhNTCBGaWxlIEZvcm1hdCBTcGVjaWZpY2F0aW9uLCBsb2NhdGVkIGF0IGh0dHA6Ly94bWwub3Blbm9mZmljZS5vcmdcblxuT3Blbk9mZmljZS5vcmcgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIFNwZWNpZmljYXRpb24sIGxvY2F0ZWQgYXRcblxuaHR0cDovL2FwaS5vcGVub2ZmaWNlLm9yZyJdLCJsaWNlbnNlSWRzIjpbIlNJU1NMIl0sImtleXdvcmRzIjpbIm1vZGlmaWNhdGlvbnMgMyAyIiwidGVybWluYXRpb24gOSAwIiwiOSAwIGxpbWl0IiwiMCBsaW1pdCBvZiIsImxpbWl0IG9mIGxpYWJpbGl0eSIsImRpc3RyaWJ1dG9yIG9mIG9yaWdpbmFsIiwiMTAgMCB1IiwiMCB1IHMiLCJlbmQgdXNlcnMgdSIsInVzZXJzIHUgcyIsInMgZ292ZXJubWVudCBpZiIsImdvdmVybm1lbnQgaWYgdGhpcyIsImlmIHRoaXMgc29mdHdhcmUiLCJzb2Z0d2FyZSBpcyBiZWluZyIsImlzIGJlaW5nIGFjcXVpcmVkIiwiYmVpbmcgYWNxdWlyZWQgYnkiLCJhY3F1aXJlZCBieSBvciIsImdvdmVybm1lbnQgb3IgYnkiLCJieSBhIHUiLCJzIGdvdmVybm1lbnQgcHJpbWUiLCJnb3Zlcm5tZW50IHByaW1lIGNvbnRyYWN0b3IiLCJwcmltZSBjb250cmFjdG9yIG9yIiwiY29udHJhY3RvciBvciBzdWJjb250cmFjdG9yIiwib3Igc3ViY29udHJhY3RvciBhdCIsInN1YmNvbnRyYWN0b3IgYXQgYW55IiwiYXQgYW55IHRpZXIiLCJhbnkgdGllciB0aGVuIiwidGllciB0aGVuIHRoZSIsInRoZW4gdGhlIGdvdmVybm1lbnQiLCJ0aGUgZ292ZXJubWVudCBzIiwiZ292ZXJubWVudCBzIHJpZ2h0cyIsImFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIHNoYWxsIiwiZG9jdW1lbnRhdGlvbiBzaGFsbCBiZSIsInNoYWxsIGJlIG9ubHkiLCJiZSBvbmx5IGFzIiwib25seSBhcyBzZXQiLCJsaWNlbnNlIHRoaXMgaXMiLCJ0aGlzIGlzIGluIiwiaXMgaW4gYWNjb3JkYW5jZSIsImFjY29yZGFuY2Ugd2l0aCA0OCIsInIgMjI3IDcyMDEiLCIyMjcgNzIwMSB0aHJvdWdoIiwiNzIwMSB0aHJvdWdoIDIyNyIsIjcyMDIgNCBmb3IiLCI0IGZvciBkZXBhcnRtZW50IiwiZGVmZW5zZSBkb2QgYWNxdWlzaXRpb25zIiwiZG9kIGFjcXVpc2l0aW9ucyBhbmQiLCJhY3F1aXNpdGlvbnMgYW5kIHdpdGgiLCJhbmQgd2l0aCA0OCIsIjIgMTAxIGFuZCIsIjEwMSBhbmQgMTIiLCIxMiAyMTIgZm9yIiwiMjEyIGZvciBub24iLCJmb3Igbm9uIGRvZCIsIm5vbiBkb2QgYWNxdWlzaXRpb25zIiwiZG9kIGFjcXVpc2l0aW9ucyAxMSIsImFjcXVpc2l0aW9ucyAxMSAwIiwiMTEgMCBtaXNjZWxsYW5lb3VzIiwiMCBtaXNjZWxsYW5lb3VzIHRoaXMiLCJhIHN1biBzdGFuZGFyZHMiLCJzdGFuZGFyZHMgbGljZW5zZSB0aGUiLCJ0aGUgc3VuIHN0YW5kYXJkcyIsInN0YW5kYXJkcyBsaWNlbnNlIHZlcnNpb24iLCJsaWNlbnNlIGF0IHNvZnR3YXJlIiwiYXQgc29mdHdhcmUgZGlzdHJpYnV0ZWQiLCJiIHN0YW5kYXJkcyB0aGUiLCJzdGFuZGFyZHMgdGhlIHN0YW5kYXJkIiwidGhlIHN0YW5kYXJkIGlzIiwic3RhbmRhcmQgaXMgZGVmaW5lZCIsInRoZSBmb2xsb3dpbmcgb3Blbm9mZmljZSIsImZvbGxvd2luZyBvcGVub2ZmaWNlIG9yZyIsIm9wZW5vZmZpY2Ugb3JnIHhtbCIsIm9yZyB4bWwgZmlsZSIsInhtbCBmaWxlIGZvcm1hdCIsImZpbGUgZm9ybWF0IHNwZWNpZmljYXRpb24iLCJmb3JtYXQgc3BlY2lmaWNhdGlvbiBsb2NhdGVkIiwiYXQgaHR0cCB4bWwiLCJodHRwIHhtbCBvcGVub2ZmaWNlIiwieG1sIG9wZW5vZmZpY2Ugb3JnIiwib3Blbm9mZmljZSBvcmcgb3Blbm9mZmljZSIsIm9yZyBvcGVub2ZmaWNlIG9yZyIsIm9wZW5vZmZpY2Ugb3JnIGFwcGxpY2F0aW9uIiwib3JnIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIiwicHJvZ3JhbW1pbmcgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24iLCJpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiBsb2NhdGVkIiwiYXQgaHR0cCBhcGkiLCJodHRwIGFwaSBvcGVub2ZmaWNlIiwiYXBpIG9wZW5vZmZpY2Ugb3JnIiwiMSAxIDEgMCIsIjEgMSAwIGRlZmluaXRpb25zIiwiYXMgdGhpcyBsaWNlbnNlIG9uIiwieW91ciBtb2RpZmljYXRpb25zIDMgMiIsIm1vZGlmaWNhdGlvbnMgMyAyIHJlcXVpcmVkIiwic3Vydml2ZSB0ZXJtaW5hdGlvbiA5IDAiLCJ0ZXJtaW5hdGlvbiA5IDAgbGltaXQiLCI5IDAgbGltaXQgb2YiLCIwIGxpbWl0IG9mIGxpYWJpbGl0eSIsImxpbWl0IG9mIGxpYWJpbGl0eSB1bmRlciIsImFueSBkaXN0cmlidXRvciBvZiBvcmlnaW5hbCIsImRpc3RyaWJ1dG9yIG9mIG9yaWdpbmFsIGNvZGUiLCJ5b3UgMTAgMCB1IiwiMTAgMCB1IHMiLCIwIHUgcyBnb3Zlcm5tZW50IiwiZ292ZXJubWVudCBlbmQgdXNlcnMgdSIsImVuZCB1c2VycyB1IHMiLCJ1c2VycyB1IHMgZ292ZXJubWVudCIsInUgcyBnb3Zlcm5tZW50IGlmIiwicyBnb3Zlcm5tZW50IGlmIHRoaXMiLCJnb3Zlcm5tZW50IGlmIHRoaXMgc29mdHdhcmUiLCJpZiB0aGlzIHNvZnR3YXJlIGlzIiwidGhpcyBzb2Z0d2FyZSBpcyBiZWluZyIsInNvZnR3YXJlIGlzIGJlaW5nIGFjcXVpcmVkIiwiaXMgYmVpbmcgYWNxdWlyZWQgYnkiLCJiZWluZyBhY3F1aXJlZCBieSBvciIsImFjcXVpcmVkIGJ5IG9yIG9uIiwicyBnb3Zlcm5tZW50IG9yIGJ5IiwiZ292ZXJubWVudCBvciBieSBhIiwib3IgYnkgYSB1IiwiYnkgYSB1IHMiLCJ1IHMgZ292ZXJubWVudCBwcmltZSIsInMgZ292ZXJubWVudCBwcmltZSBjb250cmFjdG9yIiwiZ292ZXJubWVudCBwcmltZSBjb250cmFjdG9yIG9yIiwicHJpbWUgY29udHJhY3RvciBvciBzdWJjb250cmFjdG9yIiwiY29udHJhY3RvciBvciBzdWJjb250cmFjdG9yIGF0Iiwib3Igc3ViY29udHJhY3RvciBhdCBhbnkiLCJzdWJjb250cmFjdG9yIGF0IGFueSB0aWVyIiwiYXQgYW55IHRpZXIgdGhlbiIsImFueSB0aWVyIHRoZW4gdGhlIiwidGllciB0aGVuIHRoZSBnb3Zlcm5tZW50IiwidGhlbiB0aGUgZ292ZXJubWVudCBzIiwidGhlIGdvdmVybm1lbnQgcyByaWdodHMiLCJnb3Zlcm5tZW50IHMgcmlnaHRzIGluIiwiYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIHNoYWxsIiwiYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gc2hhbGwgYmUiLCJkb2N1bWVudGF0aW9uIHNoYWxsIGJlIG9ubHkiLCJzaGFsbCBiZSBvbmx5IGFzIiwiYmUgb25seSBhcyBzZXQiLCJvbmx5IGFzIHNldCBmb3J0aCIsInRoaXMgbGljZW5zZSB0aGlzIGlzIiwibGljZW5zZSB0aGlzIGlzIGluIiwidGhpcyBpcyBpbiBhY2NvcmRhbmNlIiwiaXMgaW4gYWNjb3JkYW5jZSB3aXRoIiwiaW4gYWNjb3JkYW5jZSB3aXRoIDQ4IiwiYWNjb3JkYW5jZSB3aXRoIDQ4IGMiLCJmIHIgMjI3IDcyMDEiLCJyIDIyNyA3MjAxIHRocm91Z2giLCIyMjcgNzIwMSB0aHJvdWdoIDIyNyIsIjcyMDEgdGhyb3VnaCAyMjcgNzIwMiIsIjIyNyA3MjAyIDQgZm9yIiwiNzIwMiA0IGZvciBkZXBhcnRtZW50IiwiNCBmb3IgZGVwYXJ0bWVudCBvZiIsIm9mIGRlZmVuc2UgZG9kIGFjcXVpc2l0aW9ucyIsImRlZmVuc2UgZG9kIGFjcXVpc2l0aW9ucyBhbmQiLCJkb2QgYWNxdWlzaXRpb25zIGFuZCB3aXRoIiwiYWNxdWlzaXRpb25zIGFuZCB3aXRoIDQ4IiwiYW5kIHdpdGggNDggYyIsInIgMiAxMDEgYW5kIiwiMiAxMDEgYW5kIDEyIiwiMTAxIGFuZCAxMiAyMTIiLCJhbmQgMTIgMjEyIGZvciIsIjEyIDIxMiBmb3Igbm9uIiwiMjEyIGZvciBub24gZG9kIiwiZm9yIG5vbiBkb2QgYWNxdWlzaXRpb25zIiwibm9uIGRvZCBhY3F1aXNpdGlvbnMgMTEiLCJkb2QgYWNxdWlzaXRpb25zIDExIDAiLCJhY3F1aXNpdGlvbnMgMTEgMCBtaXNjZWxsYW5lb3VzIiwiMTEgMCBtaXNjZWxsYW5lb3VzIHRoaXMiLCIwIG1pc2NlbGxhbmVvdXMgdGhpcyBsaWNlbnNlIiwibGljZW5zZSBleGhpYml0IGEgc3VuIiwiZXhoaWJpdCBhIHN1biBzdGFuZGFyZHMiLCJhIHN1biBzdGFuZGFyZHMgbGljZW5zZSIsInN1biBzdGFuZGFyZHMgbGljZW5zZSB0aGUiLCJzdGFuZGFyZHMgbGljZW5zZSB0aGUgY29udGVudHMiLCJ0byB0aGUgc3VuIHN0YW5kYXJkcyIsInRoZSBzdW4gc3RhbmRhcmRzIGxpY2Vuc2UiLCJzdW4gc3RhbmRhcmRzIGxpY2Vuc2UgdmVyc2lvbiIsInN0YW5kYXJkcyBsaWNlbnNlIHZlcnNpb24gMSIsInRoZSBsaWNlbnNlIGF0IHNvZnR3YXJlIiwibGljZW5zZSBhdCBzb2Z0d2FyZSBkaXN0cmlidXRlZCIsImF0IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIiwiZXhoaWJpdCBiIHN0YW5kYXJkcyB0aGUiLCJiIHN0YW5kYXJkcyB0aGUgc3RhbmRhcmQiLCJzdGFuZGFyZHMgdGhlIHN0YW5kYXJkIGlzIiwidGhlIHN0YW5kYXJkIGlzIGRlZmluZWQiLCJzdGFuZGFyZCBpcyBkZWZpbmVkIGFzIiwiYXMgdGhlIGZvbGxvd2luZyBvcGVub2ZmaWNlIiwidGhlIGZvbGxvd2luZyBvcGVub2ZmaWNlIG9yZyIsImZvbGxvd2luZyBvcGVub2ZmaWNlIG9yZyB4bWwiLCJvcGVub2ZmaWNlIG9yZyB4bWwgZmlsZSIsIm9yZyB4bWwgZmlsZSBmb3JtYXQiLCJ4bWwgZmlsZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiIsImZpbGUgZm9ybWF0IHNwZWNpZmljYXRpb24gbG9jYXRlZCIsImZvcm1hdCBzcGVjaWZpY2F0aW9uIGxvY2F0ZWQgYXQiLCJsb2NhdGVkIGF0IGh0dHAgeG1sIiwiYXQgaHR0cCB4bWwgb3Blbm9mZmljZSIsImh0dHAgeG1sIG9wZW5vZmZpY2Ugb3JnIiwieG1sIG9wZW5vZmZpY2Ugb3JnIG9wZW5vZmZpY2UiLCJvcGVub2ZmaWNlIG9yZyBvcGVub2ZmaWNlIG9yZyIsIm9yZyBvcGVub2ZmaWNlIG9yZyBhcHBsaWNhdGlvbiIsIm9wZW5vZmZpY2Ugb3JnIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIl19LHsibGljZW5zZVRleHRzIjpbIlNUQU5EQVJEIE1MIE9GIE5FVyBKRVJTRVkgQ09QWVJJR0hUIE5PVElDRSwgTElDRU5TRSBBTkQgRElTQ0xBSU1FUi4gQ29weXJpZ2h0IChjKSAyMDAxLTIwMTEgYnkgVGhlIEZlbGxvd3NoaXAgb2YgU01ML05KXG5cbkNvcHlyaWdodCAoYykgMTk4OS0yMDAxIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXNcblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBUZWNobm9sb2dpZXMsIEJlbGwgTGFicyBvciBhbnkgTHVjZW50IGVudGl0eSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi5cblxuTHVjZW50IGRpc2NsYWltcyBhbGwgd2FycmFudGllcyB3aXRoIHJlZ2FyZCB0byB0aGlzIHNvZnR3YXJlLCBpbmNsdWRpbmcgYWxsIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MuIEluIG5vIGV2ZW50IHNoYWxsIEx1Y2VudCBiZSBsaWFibGUgZm9yIGFueSBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciByZXN1bHRpbmcgZnJvbSBsb3NzIG9mIHVzZSwgZGF0YSBvciBwcm9maXRzLCB3aGV0aGVyIGluIGFuIGFjdGlvbiBvZiBjb250cmFjdCwgbmVnbGlnZW5jZSBvciBvdGhlciB0b3J0aW91cyBhY3Rpb24sIGFyaXNpbmcgb3V0IG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgdXNlIG9yIHBlcmZvcm1hbmNlIG9mIHRoaXMgc29mdHdhcmUuIl0sImxpY2Vuc2VJZHMiOlsiU3RhbmRhcmRNTC1OSiIsIlNNTE5KIl0sImtleXdvcmRzIjpbInN0YW5kYXJkIG1sIG9mIiwibWwgb2YgbmV3Iiwib2YgbmV3IGplcnNleSIsIm5ldyBqZXJzZXkgY29weXJpZ2h0IiwiamVyc2V5IGNvcHlyaWdodCBub3RpY2UiLCJjb3B5cmlnaHQgbm90aWNlIGxpY2Vuc2UiLCJub3RpY2UgbGljZW5zZSBhbmQiLCJkaXNjbGFpbWVyIGNvcHlyaWdodCBjIiwiYyAyMDAxIDIwMTEiLCIyMDAxIDIwMTEgYnkiLCIyMDExIGJ5IHRoZSIsImJ5IHRoZSBmZWxsb3dzaGlwIiwidGhlIGZlbGxvd3NoaXAgb2YiLCJmZWxsb3dzaGlwIG9mIHNtbCIsIm9mIHNtbCBuaiIsInNtbCBuaiBjb3B5cmlnaHQiLCJuaiBjb3B5cmlnaHQgYyIsImMgMTk4OSAyMDAxIiwiMTk4OSAyMDAxIGJ5IiwiMjAwMSBieSBsdWNlbnQiLCJieSBsdWNlbnQgdGVjaG5vbG9naWVzIiwibHVjZW50IHRlY2hub2xvZ2llcyBwZXJtaXNzaW9uIiwidGVjaG5vbG9naWVzIHBlcm1pc3Npb24gdG8iLCJub3RpY2UgYW5kIHdhcnJhbnR5IiwiYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIiLCJ3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciIsImRpc2NsYWltZXIgYXBwZWFyIGluIiwibmFtZSBvZiBsdWNlbnQiLCJsdWNlbnQgdGVjaG5vbG9naWVzIGJlbGwiLCJ0ZWNobm9sb2dpZXMgYmVsbCBsYWJzIiwiYmVsbCBsYWJzIG9yIiwibGFicyBvciBhbnkiLCJvciBhbnkgbHVjZW50IiwiYW55IGx1Y2VudCBlbnRpdHkiLCJsdWNlbnQgZW50aXR5IG5vdCIsImVudGl0eSBub3QgYmUiLCJwcmlvciBwZXJtaXNzaW9uIGx1Y2VudCIsInBlcm1pc3Npb24gbHVjZW50IGRpc2NsYWltcyIsImx1Y2VudCBkaXNjbGFpbXMgYWxsIiwiZXZlbnQgc2hhbGwgbHVjZW50Iiwic2hhbGwgbHVjZW50IGJlIiwibHVjZW50IGJlIGxpYWJsZSIsInN0YW5kYXJkIG1sIG9mIG5ldyIsIm1sIG9mIG5ldyBqZXJzZXkiLCJvZiBuZXcgamVyc2V5IGNvcHlyaWdodCIsIm5ldyBqZXJzZXkgY29weXJpZ2h0IG5vdGljZSIsImplcnNleSBjb3B5cmlnaHQgbm90aWNlIGxpY2Vuc2UiLCJjb3B5cmlnaHQgbm90aWNlIGxpY2Vuc2UgYW5kIiwibm90aWNlIGxpY2Vuc2UgYW5kIGRpc2NsYWltZXIiLCJsaWNlbnNlIGFuZCBkaXNjbGFpbWVyIGNvcHlyaWdodCIsImFuZCBkaXNjbGFpbWVyIGNvcHlyaWdodCBjIiwiZGlzY2xhaW1lciBjb3B5cmlnaHQgYyAyMDAxIiwiY29weXJpZ2h0IGMgMjAwMSAyMDExIiwiYyAyMDAxIDIwMTEgYnkiLCIyMDAxIDIwMTEgYnkgdGhlIiwiMjAxMSBieSB0aGUgZmVsbG93c2hpcCIsImJ5IHRoZSBmZWxsb3dzaGlwIG9mIiwidGhlIGZlbGxvd3NoaXAgb2Ygc21sIiwiZmVsbG93c2hpcCBvZiBzbWwgbmoiLCJvZiBzbWwgbmogY29weXJpZ2h0Iiwic21sIG5qIGNvcHlyaWdodCBjIiwibmogY29weXJpZ2h0IGMgMTk4OSIsImNvcHlyaWdodCBjIDE5ODkgMjAwMSIsImMgMTk4OSAyMDAxIGJ5IiwiMTk4OSAyMDAxIGJ5IGx1Y2VudCIsIjIwMDEgYnkgbHVjZW50IHRlY2hub2xvZ2llcyIsImJ5IGx1Y2VudCB0ZWNobm9sb2dpZXMgcGVybWlzc2lvbiIsImx1Y2VudCB0ZWNobm9sb2dpZXMgcGVybWlzc2lvbiB0byIsInRlY2hub2xvZ2llcyBwZXJtaXNzaW9uIHRvIHVzZSIsInBlcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSIsIm5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciIsImFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciIsIndhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIiwiZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZyIsInRoZSBuYW1lIG9mIGx1Y2VudCIsIm5hbWUgb2YgbHVjZW50IHRlY2hub2xvZ2llcyIsIm9mIGx1Y2VudCB0ZWNobm9sb2dpZXMgYmVsbCIsImx1Y2VudCB0ZWNobm9sb2dpZXMgYmVsbCBsYWJzIiwidGVjaG5vbG9naWVzIGJlbGwgbGFicyBvciIsImJlbGwgbGFicyBvciBhbnkiLCJsYWJzIG9yIGFueSBsdWNlbnQiLCJvciBhbnkgbHVjZW50IGVudGl0eSIsImFueSBsdWNlbnQgZW50aXR5IG5vdCIsImx1Y2VudCBlbnRpdHkgbm90IGJlIiwiZW50aXR5IG5vdCBiZSB1c2VkIiwid3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uIGx1Y2VudCIsInByaW9yIHBlcm1pc3Npb24gbHVjZW50IGRpc2NsYWltcyIsInBlcm1pc3Npb24gbHVjZW50IGRpc2NsYWltcyBhbGwiLCJsdWNlbnQgZGlzY2xhaW1zIGFsbCB3YXJyYW50aWVzIiwibm8gZXZlbnQgc2hhbGwgbHVjZW50IiwiZXZlbnQgc2hhbGwgbHVjZW50IGJlIiwic2hhbGwgbHVjZW50IGJlIGxpYWJsZSIsImx1Y2VudCBiZSBsaWFibGUgZm9yIiwic3RhbmRhcmQgbWwgb2YgbmV3IGplcnNleSIsIm1sIG9mIG5ldyBqZXJzZXkgY29weXJpZ2h0Iiwib2YgbmV3IGplcnNleSBjb3B5cmlnaHQgbm90aWNlIiwibmV3IGplcnNleSBjb3B5cmlnaHQgbm90aWNlIGxpY2Vuc2UiLCJqZXJzZXkgY29weXJpZ2h0IG5vdGljZSBsaWNlbnNlIGFuZCIsImNvcHlyaWdodCBub3RpY2UgbGljZW5zZSBhbmQgZGlzY2xhaW1lciIsIm5vdGljZSBsaWNlbnNlIGFuZCBkaXNjbGFpbWVyIGNvcHlyaWdodCIsImxpY2Vuc2UgYW5kIGRpc2NsYWltZXIgY29weXJpZ2h0IGMiLCJhbmQgZGlzY2xhaW1lciBjb3B5cmlnaHQgYyAyMDAxIiwiZGlzY2xhaW1lciBjb3B5cmlnaHQgYyAyMDAxIDIwMTEiLCJjb3B5cmlnaHQgYyAyMDAxIDIwMTEgYnkiLCJjIDIwMDEgMjAxMSBieSB0aGUiLCIyMDAxIDIwMTEgYnkgdGhlIGZlbGxvd3NoaXAiLCIyMDExIGJ5IHRoZSBmZWxsb3dzaGlwIG9mIiwiYnkgdGhlIGZlbGxvd3NoaXAgb2Ygc21sIiwidGhlIGZlbGxvd3NoaXAgb2Ygc21sIG5qIiwiZmVsbG93c2hpcCBvZiBzbWwgbmogY29weXJpZ2h0Iiwib2Ygc21sIG5qIGNvcHlyaWdodCBjIiwic21sIG5qIGNvcHlyaWdodCBjIDE5ODkiLCJuaiBjb3B5cmlnaHQgYyAxOTg5IDIwMDEiLCJjb3B5cmlnaHQgYyAxOTg5IDIwMDEgYnkiLCJjIDE5ODkgMjAwMSBieSBsdWNlbnQiLCIxOTg5IDIwMDEgYnkgbHVjZW50IHRlY2hub2xvZ2llcyIsIjIwMDEgYnkgbHVjZW50IHRlY2hub2xvZ2llcyBwZXJtaXNzaW9uIiwiYnkgbHVjZW50IHRlY2hub2xvZ2llcyBwZXJtaXNzaW9uIHRvIiwibHVjZW50IHRlY2hub2xvZ2llcyBwZXJtaXNzaW9uIHRvIHVzZSIsInRlY2hub2xvZ2llcyBwZXJtaXNzaW9uIHRvIHVzZSBjb3B5IiwiYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYW5kIiwidGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkiLCJwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciIsIm5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIiLCJhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4iLCJ3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nIiwiZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIiwidGhhdCB0aGUgbmFtZSBvZiBsdWNlbnQiLCJ0aGUgbmFtZSBvZiBsdWNlbnQgdGVjaG5vbG9naWVzIiwibmFtZSBvZiBsdWNlbnQgdGVjaG5vbG9naWVzIGJlbGwiLCJvZiBsdWNlbnQgdGVjaG5vbG9naWVzIGJlbGwgbGFicyIsImx1Y2VudCB0ZWNobm9sb2dpZXMgYmVsbCBsYWJzIG9yIiwidGVjaG5vbG9naWVzIGJlbGwgbGFicyBvciBhbnkiLCJiZWxsIGxhYnMgb3IgYW55IGx1Y2VudCIsImxhYnMgb3IgYW55IGx1Y2VudCBlbnRpdHkiLCJvciBhbnkgbHVjZW50IGVudGl0eSBub3QiLCJhbnkgbHVjZW50IGVudGl0eSBub3QgYmUiLCJsdWNlbnQgZW50aXR5IG5vdCBiZSB1c2VkIiwiZW50aXR5IG5vdCBiZSB1c2VkIGluIiwic3BlY2lmaWMgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uIGx1Y2VudCIsIndyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbiBsdWNlbnQgZGlzY2xhaW1zIiwicHJpb3IgcGVybWlzc2lvbiBsdWNlbnQgZGlzY2xhaW1zIGFsbCIsInBlcm1pc3Npb24gbHVjZW50IGRpc2NsYWltcyBhbGwgd2FycmFudGllcyIsImx1Y2VudCBkaXNjbGFpbXMgYWxsIHdhcnJhbnRpZXMgd2l0aCIsImluIG5vIGV2ZW50IHNoYWxsIGx1Y2VudCIsIm5vIGV2ZW50IHNoYWxsIGx1Y2VudCBiZSIsImV2ZW50IHNoYWxsIGx1Y2VudCBiZSBsaWFibGUiLCJzaGFsbCBsdWNlbnQgYmUgbGlhYmxlIGZvciIsImx1Y2VudCBiZSBsaWFibGUgZm9yIGFueSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJTZWN1cmUgTWVzc2FnaW5nIFByb3RvY29sIChTTVApIExpYnJhcmllcyBbQUNMLCBDTUwsIFNGTF1cblxuRGlzdHJpYnV0aW9uIFJpZ2h0c1xuXG5BbGwgc291cmNlIGNvZGUgZm9yIHRoZSBTTVAgaXMgYmVpbmcgcHJvdmlkZWQgYXQgbm8gY29zdCBhbmQgd2l0aCBubyBmaW5hbmNpYWwgbGltaXRhdGlvbnMgcmVnYXJkaW5nIGl0cyB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gT3JnYW5pemF0aW9ucyBjYW4gdXNlIHRoZSBTTVAgd2l0aG91dCBwYXlpbmcgYW55IHJveWFsdGllcyBvciBsaWNlbnNpbmcgZmVlcy4gVGhlIFNNUCB3YXMgb3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgdGhlIFUuUy4gR292ZXJubWVudC4gQkFFIFN5c3RlbXMgaXMgZW5oYW5jaW5nIGFuZCBzdXBwb3J0aW5nIHRoZSBTTVAgdW5kZXIgY29udHJhY3QgdG8gdGhlIFUuUy4gR292ZXJubWVudC4gVGhlIFUuUy4gR292ZXJubWVudCBpcyBmdXJuaXNoaW5nIHRoZSBTTVAgc29mdHdhcmUgYXQgbm8gY29zdCB0byB0aGUgdmVuZG9yIHN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbnMgb2YgdGhlIFNNUCBQdWJsaWMgTGljZW5zZSBwcm92aWRlZCB3aXRoIHRoZSBTTVAgc29mdHdhcmUuXG5cbjI5IE1heSAyMDAyXG5cblNlY3VyZSBNZXNzYWdpbmcgUHJvdG9jb2wgKFNNUCkgUHVibGljIExpY2Vuc2VcblxuVGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudC9EZXBhcnRtZW50IG9mIERlZmVuc2UvTmF0aW9uYWwgU2VjdXJpdHkgQWdlbmN5L09mZmljZSBvZiBOZXR3b3JrIFNlY3VyaXR5IChjb2xsZWN0aXZlbHkgXCJ0aGUgVS5TLiBHb3Zlcm5tZW50XCIpIGhlcmVieSBncmFudHMgcGVybWlzc2lvbiB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhlIFNNUCBzb3VyY2UgYW5kIG9iamVjdCBmaWxlcyAodGhlIFwiU01QIFNvZnR3YXJlXCIpIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNNUCBEb2N1bWVudGF0aW9uXCIpLCBvciBhbnkgcG9ydGlvbnMgdGhlcmVvZiwgdG8gZG8gdGhlIGZvbGxvd2luZywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgY29uZGl0aW9uczpcblxuWW91IG1heSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHdpdGhvdXQgYWRkaXRpb25hbCBwZXJtaXNzaW9uIGZyb20gdGhlIFUuUy4gR292ZXJubWVudCwgdXNlLCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UgYW5kIG90aGVyd2lzZSBkaXN0cmlidXRlIHRoZSBTTVAgU29mdHdhcmUgb3IgY29tcG9uZW50cyBvZiB0aGUgU01QIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucyBkZXZlbG9wZWQgYnkgeW91IGFuZC9vciBieSBvdGhlcnMuXG5cbllvdSBtYXksIGZyZWUgb2YgY2hhcmdlIGFuZCB3aXRob3V0IGFkZGl0aW9uYWwgcGVybWlzc2lvbiBmcm9tIHRoZSBVLlMuIEdvdmVybm1lbnQsIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBTTVAgRG9jdW1lbnRhdGlvbiwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMgZGV2ZWxvcGVkIGJ5IHlvdSBhbmQvb3IgYnkgb3RoZXJzLCBhdCBubyBjaGFyZ2Ugb3IgYXQgYSBjaGFyZ2UgdGhhdCBjb3ZlcnMgdGhlIGNvc3Qgb2YgcmVwcm9kdWNpbmcgc3VjaCBjb3BpZXMsIHByb3ZpZGVkIHRoYXQgdGhpcyBTTVAgUHVibGljIExpY2Vuc2UgaXMgcmV0YWluZWQuXG5cbkZ1cnRoZXJtb3JlLCBpZiB5b3UgZGlzdHJpYnV0ZSB0aGUgU01QIFNvZnR3YXJlIG9yIHBhcnRzIG9mIHRoZSBTTVAgU29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zIGRldmVsb3BlZCBieSB5b3UgYW5kL29yIG90aGVycywgdGhlbiB5b3UgbXVzdCBlaXRoZXIgbWFrZSBhdmFpbGFibGUgdGhlIHNvdXJjZSBjb2RlIHRvIGFsbCBwb3J0aW9ucyBvZiB0aGUgU01QIFNvZnR3YXJlIChleGNsdXNpdmUgb2YgYW55IG1vZGlmaWNhdGlvbnMgbWFkZSBieSB5b3UgYW5kL29yIGJ5IG90aGVycykgdXBvbiByZXF1ZXN0LCBvciBpbnN0ZWFkIHlvdSBtYXkgbm90aWZ5IGFueW9uZSByZXF1ZXN0aW5nIHRoZSBTTVAgU29mdHdhcmUgc291cmNlIGNvZGUgdGhhdCBpdCBpcyBmcmVlbHkgYXZhaWxhYmxlIGZyb20gdGhlIFUuUy4gR292ZXJubWVudC5cblxuVHJhbnNtaXNzaW9uIG9mIHRoaXMgU01QIFB1YmxpYyBMaWNlbnNlIG11c3QgYWNjb21wYW55IHdoYXRldmVyIHBvcnRpb25zIG9mIHRoZSBTTVAgU29mdHdhcmUgeW91IHJlZGlzdHJpYnV0ZS5cblxuVGhlIFNNUCBTb2Z0d2FyZSBpcyBwcm92aWRlZCB3aXRob3V0IHdhcnJhbnR5IG9yIGd1YXJhbnRlZSBvZiBhbnkgbmF0dXJlLCBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS5cblxuVGhlIFUuUy4gR292ZXJubWVudCBjYW5ub3QgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGNhdXNlZCBieSB0aGUgdXNlIG9mIHRoZSBTTVAgU29mdHdhcmUuXG5cbkl0IGlzIG5vdCBwZXJtaXR0ZWQgdG8gY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBhbnkgb2YgdGhlIFNNUCBTb2Z0d2FyZSBleGNlcHQgYXMgZXhwcmVzc2x5IGluZGljYXRlZCBoZXJlaW4uIEFueSBhdHRlbXB0cyB0byBkbyBvdGhlcndpc2Ugd2lsbCBiZSBjb25zaWRlcmVkIGEgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSBhbmQgeW91ciByaWdodHMgdG8gdGhlIFNNUCBTb2Z0d2FyZSB3aWxsIGJlIHZvaWRlZC5cblxuVGhlIFNNUCB1c2VzIHRoZSBFbmhhbmNlZCBTTkFDQyAoZVNOQUNDKSBBYnN0cmFjdCBTeW50YXggTm90YXRpb24gT25lIChBU04uMSkgQysrIExpYnJhcnkgdG8gQVNOLjEgZW5jb2RlIGFuZCBkZWNvZGUgc2VjdXJpdHktcmVsYXRlZCBkYXRhIG9iamVjdHMuIFRoZSBlU05BQ0MgQVNOLjEgQysrIExpYnJhcnkgaXMgY292ZXJlZCBieSB0aGUgRU5IQU5DRUQgU05BQ0MgU09GVFdBUkUgUFVCTElDIExJQ0VOU0UuIE5vbmUgb2YgdGhlIEdOVSBwdWJsaWMgbGljZW5zZXMgYXBwbHkgdG8gdGhlIGVTTkFDQyBBU04uMSBDKysgTGlicmFyeS4gVGhlIGVTTkFDQyBDb21waWxlciBpcyBub3QgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgU01QLiBDb3B5cmlnaHQgwqkgMTk5Ny0yMDAyIE5hdGlvbmFsIFNlY3VyaXR5IEFnZW5jeSJdLCJsaWNlbnNlSWRzIjpbIlNNUFBMIl0sImtleXdvcmRzIjpbInByb3RvY29sIHNtcCBsaWJyYXJpZXMiLCJzbXAgbGlicmFyaWVzIGFjbCIsImxpYnJhcmllcyBhY2wgY21sIiwiYWNsIGNtbCBzZmwiLCJjbWwgc2ZsIGRpc3RyaWJ1dGlvbiIsInNmbCBkaXN0cmlidXRpb24gcmlnaHRzIiwiZGlzdHJpYnV0aW9uIHJpZ2h0cyBhbGwiLCJyaWdodHMgYWxsIHNvdXJjZSIsImZvciB0aGUgc21wIiwidGhlIHNtcCBpcyIsInNtcCBpcyBiZWluZyIsImJlaW5nIHByb3ZpZGVkIGF0IiwicHJvdmlkZWQgYXQgbm8iLCJubyBjb3N0IGFuZCIsImNvc3QgYW5kIHdpdGgiLCJ3aXRoIG5vIGZpbmFuY2lhbCIsIm5vIGZpbmFuY2lhbCBsaW1pdGF0aW9ucyIsImZpbmFuY2lhbCBsaW1pdGF0aW9ucyByZWdhcmRpbmciLCJsaW1pdGF0aW9ucyByZWdhcmRpbmcgaXRzIiwicmVnYXJkaW5nIGl0cyB1c2UiLCJhbmQgZGlzdHJpYnV0aW9uIG9yZ2FuaXphdGlvbnMiLCJkaXN0cmlidXRpb24gb3JnYW5pemF0aW9ucyBjYW4iLCJvcmdhbml6YXRpb25zIGNhbiB1c2UiLCJjYW4gdXNlIHRoZSIsInVzZSB0aGUgc21wIiwidGhlIHNtcCB3aXRob3V0Iiwic21wIHdpdGhvdXQgcGF5aW5nIiwid2l0aG91dCBwYXlpbmcgYW55IiwicGF5aW5nIGFueSByb3lhbHRpZXMiLCJhbnkgcm95YWx0aWVzIG9yIiwicm95YWx0aWVzIG9yIGxpY2Vuc2luZyIsIm9yIGxpY2Vuc2luZyBmZWVzIiwibGljZW5zaW5nIGZlZXMgdGhlIiwiZmVlcyB0aGUgc21wIiwidGhlIHNtcCB3YXMiLCJzbXAgd2FzIG9yaWdpbmFsbHkiLCJ3YXMgb3JpZ2luYWxseSBkZXZlbG9wZWQiLCJvcmlnaW5hbGx5IGRldmVsb3BlZCBieSIsInMgZ292ZXJubWVudCBiYWUiLCJnb3Zlcm5tZW50IGJhZSBzeXN0ZW1zIiwiYmFlIHN5c3RlbXMgaXMiLCJzeXN0ZW1zIGlzIGVuaGFuY2luZyIsImlzIGVuaGFuY2luZyBhbmQiLCJlbmhhbmNpbmcgYW5kIHN1cHBvcnRpbmciLCJhbmQgc3VwcG9ydGluZyB0aGUiLCJzdXBwb3J0aW5nIHRoZSBzbXAiLCJ0aGUgc21wIHVuZGVyIiwic21wIHVuZGVyIGNvbnRyYWN0IiwidW5kZXIgY29udHJhY3QgdG8iLCJjb250cmFjdCB0byB0aGUiLCJ0byB0aGUgdSIsImdvdmVybm1lbnQgdGhlIHUiLCJnb3Zlcm5tZW50IGlzIGZ1cm5pc2hpbmciLCJpcyBmdXJuaXNoaW5nIHRoZSIsImZ1cm5pc2hpbmcgdGhlIHNtcCIsInNtcCBzb2Z0d2FyZSBhdCIsInNvZnR3YXJlIGF0IG5vIiwibm8gY29zdCB0byIsInRvIHRoZSB2ZW5kb3IiLCJ0aGUgdmVuZG9yIHN1YmplY3QiLCJ2ZW5kb3Igc3ViamVjdCB0byIsInRoZSBzbXAgcHVibGljIiwicHVibGljIGxpY2Vuc2UgcHJvdmlkZWQiLCJ3aXRoIHRoZSBzbXAiLCJzbXAgc29mdHdhcmUgMjkiLCJzb2Z0d2FyZSAyOSBtYXkiLCIyOSBtYXkgMjAwMiIsIm1heSAyMDAyIHNlY3VyZSIsIjIwMDIgc2VjdXJlIG1lc3NhZ2luZyIsInByb3RvY29sIHNtcCBwdWJsaWMiLCJsaWNlbnNlIHRoZSB1bml0ZWQiLCJzdGF0ZXMgZ292ZXJubWVudCBkZXBhcnRtZW50IiwiZ292ZXJubWVudCBkZXBhcnRtZW50IG9mIiwib2YgZGVmZW5zZSBuYXRpb25hbCIsImRlZmVuc2UgbmF0aW9uYWwgc2VjdXJpdHkiLCJzZWN1cml0eSBhZ2VuY3kgb2ZmaWNlIiwiYWdlbmN5IG9mZmljZSBvZiIsIm9mZmljZSBvZiBuZXR3b3JrIiwib2YgbmV0d29yayBzZWN1cml0eSIsIm5ldHdvcmsgc2VjdXJpdHkgY29sbGVjdGl2ZWx5Iiwic2VjdXJpdHkgY29sbGVjdGl2ZWx5IHRoZSIsImNvbGxlY3RpdmVseSB0aGUgdSIsInMgZ292ZXJubWVudCBoZXJlYnkiLCJnb3Zlcm5tZW50IGhlcmVieSBncmFudHMiLCJoZXJlYnkgZ3JhbnRzIHBlcm1pc3Npb24iLCJ0aGUgc21wIHNvdXJjZSIsInNtcCBzb3VyY2UgYW5kIiwiYW5kIG9iamVjdCBmaWxlcyIsIm9iamVjdCBmaWxlcyB0aGUiLCJzbXAgc29mdHdhcmUgYW5kIiwic21wIGRvY3VtZW50YXRpb24gb3IiLCJvciBhbnkgcG9ydGlvbnMiLCJhbnkgcG9ydGlvbnMgdGhlcmVvZiIsInBvcnRpb25zIHRoZXJlb2YgdG8iLCJ0aGVyZW9mIHRvIGRvIiwidGhlIGZvbGxvd2luZyBzdWJqZWN0IiwiZm9sbG93aW5nIHN1YmplY3QgdG8iLCJmb2xsb3dpbmcgbGljZW5zZSBjb25kaXRpb25zIiwibGljZW5zZSBjb25kaXRpb25zIHlvdSIsInMgZ292ZXJubWVudCB1c2UiLCJnb3Zlcm5tZW50IHVzZSBjb3B5Iiwic3VibGljZW5zZSBhbmQgb3RoZXJ3aXNlIiwiYW5kIG90aGVyd2lzZSBkaXN0cmlidXRlIiwib3RoZXJ3aXNlIGRpc3RyaWJ1dGUgdGhlIiwic29mdHdhcmUgb3IgY29tcG9uZW50cyIsIm9yIGNvbXBvbmVudHMgb2YiLCJieSBvdGhlcnMgeW91IiwicyBnb3Zlcm5tZW50IGRpc3RyaWJ1dGUiLCJnb3Zlcm5tZW50IGRpc3RyaWJ1dGUgY29waWVzIiwic21wIGRvY3VtZW50YXRpb24gd2l0aCIsImJ5IG90aGVycyBhdCIsIm90aGVycyBhdCBubyIsIm5vIGNoYXJnZSBvciIsImNoYXJnZSBvciBhdCIsImEgY2hhcmdlIHRoYXQiLCJjaGFyZ2UgdGhhdCBjb3ZlcnMiLCJ0aGF0IGNvdmVycyB0aGUiLCJjb3ZlcnMgdGhlIGNvc3QiLCJjb3N0IG9mIHJlcHJvZHVjaW5nIiwib2YgcmVwcm9kdWNpbmcgc3VjaCIsInJlcHJvZHVjaW5nIHN1Y2ggY29waWVzIiwic3VjaCBjb3BpZXMgcHJvdmlkZWQiLCJjb3BpZXMgcHJvdmlkZWQgdGhhdCIsInRoYXQgdGhpcyBzbXAiLCJpcyByZXRhaW5lZCBmdXJ0aGVybW9yZSIsInJldGFpbmVkIGZ1cnRoZXJtb3JlIGlmIiwiZnVydGhlcm1vcmUgaWYgeW91Iiwic29mdHdhcmUgb3IgcGFydHMiLCJhbmQgb3Igb3RoZXJzIiwib3Igb3RoZXJzIHRoZW4iLCJvdGhlcnMgdGhlbiB5b3UiLCJtdXN0IGVpdGhlciBtYWtlIiwiZWl0aGVyIG1ha2UgYXZhaWxhYmxlIiwiY29kZSB0byBhbGwiLCJzbXAgc29mdHdhcmUgZXhjbHVzaXZlIiwic29mdHdhcmUgZXhjbHVzaXZlIG9mIiwiZXhjbHVzaXZlIG9mIGFueSIsImJ5IG90aGVycyB1cG9uIiwib3RoZXJzIHVwb24gcmVxdWVzdCIsInVwb24gcmVxdWVzdCBvciIsInJlcXVlc3Qgb3IgaW5zdGVhZCIsIm9yIGluc3RlYWQgeW91IiwiaW5zdGVhZCB5b3UgbWF5IiwieW91IG1heSBub3RpZnkiLCJtYXkgbm90aWZ5IGFueW9uZSIsIm5vdGlmeSBhbnlvbmUgcmVxdWVzdGluZyIsImFueW9uZSByZXF1ZXN0aW5nIHRoZSIsInJlcXVlc3RpbmcgdGhlIHNtcCIsInNtcCBzb2Z0d2FyZSBzb3VyY2UiLCJjb2RlIHRoYXQgaXQiLCJpdCBpcyBmcmVlbHkiLCJzIGdvdmVybm1lbnQgdHJhbnNtaXNzaW9uIiwiZ292ZXJubWVudCB0cmFuc21pc3Npb24gb2YiLCJ0cmFuc21pc3Npb24gb2YgdGhpcyIsIm9mIHRoaXMgc21wIiwicHVibGljIGxpY2Vuc2UgbXVzdCIsImxpY2Vuc2UgbXVzdCBhY2NvbXBhbnkiLCJtdXN0IGFjY29tcGFueSB3aGF0ZXZlciIsImFjY29tcGFueSB3aGF0ZXZlciBwb3J0aW9ucyIsIndoYXRldmVyIHBvcnRpb25zIG9mIiwic21wIHNvZnR3YXJlIHlvdSIsInNvZnR3YXJlIHlvdSByZWRpc3RyaWJ1dGUiLCJyZWRpc3RyaWJ1dGUgdGhlIHNtcCIsInNtcCBzb2Z0d2FyZSBpcyIsImlzIHByb3ZpZGVkIHdpdGhvdXQiLCJwcm92aWRlZCB3aXRob3V0IHdhcnJhbnR5IiwiZ3VhcmFudGVlIG9mIGFueSIsImFueSBuYXR1cmUgZXhwcmVzcyIsIm5hdHVyZSBleHByZXNzIG9yIiwicHVycG9zZSB0aGUgdSIsInMgZ292ZXJubWVudCBjYW5ub3QiLCJnb3Zlcm5tZW50IGNhbm5vdCBiZSIsImNhbm5vdCBiZSBoZWxkIiwiYW55IGRhbWFnZXMgZWl0aGVyIiwiZGFtYWdlcyBlaXRoZXIgZGlyZWN0bHkiLCJvciBpbmRpcmVjdGx5IGNhdXNlZCIsImluZGlyZWN0bHkgY2F1c2VkIGJ5Iiwic21wIHNvZnR3YXJlIGl0Iiwic21wIHNvZnR3YXJlIGV4Y2VwdCIsImFzIGV4cHJlc3NseSBpbmRpY2F0ZWQiLCJleHByZXNzbHkgaW5kaWNhdGVkIGhlcmVpbiIsImluZGljYXRlZCBoZXJlaW4gYW55IiwiaGVyZWluIGFueSBhdHRlbXB0cyIsImFueSBhdHRlbXB0cyB0byIsImF0dGVtcHRzIHRvIGRvIiwidG8gZG8gb3RoZXJ3aXNlIiwiZG8gb3RoZXJ3aXNlIHdpbGwiLCJvdGhlcndpc2Ugd2lsbCBiZSIsImNvbnNpZGVyZWQgYSB2aW9sYXRpb24iLCJ0byB0aGUgc21wIiwic21wIHNvZnR3YXJlIHdpbGwiLCJ3aWxsIGJlIHZvaWRlZCIsImJlIHZvaWRlZCB0aGUiLCJ2b2lkZWQgdGhlIHNtcCIsInRoZSBzbXAgdXNlcyIsInNtcCB1c2VzIHRoZSIsInVzZXMgdGhlIGVuaGFuY2VkIiwiZW5oYW5jZWQgc25hY2MgZXNuYWNjIiwic25hY2MgZXNuYWNjIGFic3RyYWN0IiwiZXNuYWNjIGFic3RyYWN0IHN5bnRheCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJTVE9SQUdFIE5FVFdPUktJTkcgSU5EVVNUUlkgQVNTT0NJQVRJT05cblxuUFVCTElDIExJQ0VOU0VcblxuVmVyc2lvbiAxLjFcblxuICAgMS4gRGVmaW5pdGlvbnMuXG5cbiAgIDEuMSBcIkNvbW1lcmNpYWwgVXNlXCIgbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlIENvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS5cblxuICAgMS4yIFwiQ29udHJpYnV0b3JcIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuXG5cbiAgIDEuMyBcIkNvbnRyaWJ1dG9yIFZlcnNpb25cIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuXG5cbiAgIDEuNCBcIkNvdmVyZWQgQ29kZVwiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuXG5cbiAgIDEuNSBcIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbVwiIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLlxuXG4gICAxLjYgXCJFeGVjdXRhYmxlXCIgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuXG5cbiAgIDEuNyBcIkluaXRpYWwgRGV2ZWxvcGVyXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLlxuXG4gICAxLjggXCJMYXJnZXIgV29ya1wiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDEuOSBcIkxpY2Vuc2VcIiBtZWFucyB0aGlzIGRvY3VtZW50LlxuXG4gICAxLjEwIFwiTGljZW5zYWJsZVwiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLlxuXG4gICAxLjExIFwiTW9kaWZpY2F0aW9uc1wiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOlxuXG4gICBBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICBCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICAxLjEyIFwiT3JpZ2luYWwgQ29kZVwiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgIDEuMTMgXCJQYXRlbnQgQ2xhaW1zXCIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuXG5cbiAgIDEuMTQgXCJTb3VyY2UgQ29kZVwiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yJ3MgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLlxuXG4gICAxLjE1IFwiWW91XCIgKG9yIFwiWW91clwiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBcIllvdVwiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcImNvbnRyb2xcIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eVxuXG4gICAyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLlxuXG4gICAyLjEgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOlxuXG4gICAoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgKGIpIHVuZGVyIFBhdGVudHMgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLlxuXG4gICAoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLlxuXG4gICAyLjIgQ29udHJpYnV0b3IgR3JhbnQuIFN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlXG5cbiAgIChhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kXG5cbiAgIChiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLlxuXG4gICAoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICAoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuXG5cbiAgIDMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy5cblxuICAgMy4xIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuIFRoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LlxuXG4gICAzLjIgQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLiBBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS5cblxuICAgMy4zIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIFlvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS5cblxuICAgMy40IEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLlxuXG4gICAoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLiBJZiBDb250cmlidXRvciBoYXMgYWN0dWFsIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5J3MgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvciB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCBcIkxFR0FMXCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlci5cblxuICAgKGIpIENvbnRyaWJ1dG9yIEFQSSdzLiBJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBhY3R1YWwga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLlxuXG4gICAoYykgUmVwcmVzZW50YXRpb25zLiBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcidzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgIDMuNSBSZXF1aXJlZCBOb3RpY2VzLiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBtb3N0IGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSAoZXhjbHVkaW5nIGFueSBsaWFiaWxpdHkgYXJpc2luZyBmcm9tIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZSkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLlxuXG4gICAzLjYgRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuIFlvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb24gb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IChleGNsdWRpbmcgYW55IGxpYWJpbGl0eSBhcmlzaW5nIGZyb20gaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlKSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuXG5cbiAgIDMuNyBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS5cblxuICAgNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLiBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LlxuXG4gICA1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuXG5cbiAgIDYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLlxuXG4gICA2LjEgTmV3IFZlcnNpb25zLiBUaGUgU3RvcmFnZSBOZXR3b3JraW5nIEluZHVzdHJ5IEFzc29jaWF0aW9uICh0aGUgXCJTTklBXCIpIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci5cblxuICAgNi4yIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIE9uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSB0aGUgU05JQS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIFNOSUEgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICA2LjMgRGVyaXZhdGl2ZSBXb3Jrcy4gSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgXCJTdG9yYWdlIE5ldHdvcmtpbmcgSW5kdXN0cnkgQXNzb2NpYXRpb24sXCIgXCJTTklBLFwiIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIgbGljZW5zZSAoZXhjZXB0IHRvIG5vdGUgdGhhdCB5b3VyIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IFlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgU05JQSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKVxuXG4gICA3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLiBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLlxuXG4gICA4LiBURVJNSU5BVElPTi5cblxuICAgOC4xIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiBhIHJlYXNvbmFibGUgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuXG5cbiAgIDguMiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3BlciBvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzIFwiUGFydGljaXBhbnRcIikgYWxsZWdpbmcgdGhhdDogbyAoYSkgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLlxuXG4gICA4LjMgSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS5cblxuICAgOC40IEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi5cblxuICAgOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS5cblxuICAgMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSBcImNvbW1lcmNpYWwgaXRlbSxcIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlXCIgYW5kIFwiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLFwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi5cblxuICAgMTEuIE1JU0NFTExBTkVPVVMgVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS5cblxuICAgMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuIEFzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS5cblxuICAgMTMuIE1VTFRJUExFLUxJQ0VOU0VEIENPREUuIEluaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcyBcIk11bHRpcGxlLUxpY2Vuc2VkXCIuIFwiTXVsdGlwbGUtTGljZW5zZWRcIiBtZWFucyB0aGF0IHRoZSBJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgWW91ciBjaG9pY2Ugb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuXG5cbiAgIDE0LiBBQ0NFUFRBTkNFLiBUaGlzIExpY2Vuc2UgaXMgYWNjZXB0ZWQgYnkgWW91IGlmIFlvdSByZXRhaW4sIHVzZSwgb3IgZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBDb2RlIGZvciBhbnkgcHVycG9zZS4gRVhISUJJVCBBIFRoZSBTTklBIFB1YmxpYyBMaWNlbnNlLlxuXG5UaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBTTklBIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG53d3cuc25pYS5vcmcvc21pL2RldmVsb3BlcnMvY2ltL1xuXG5Tb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG5UaGUgT3JpZ2luYWwgQ29kZSBpcyAuXG5cblRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBbQ09NUExFVEUgVEhJU10gLlxuXG5Db250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uXG5cblJlYWQgbW9yZSBhYm91dCB0aGlzIGxpY2Vuc2UgYXQgaHR0cDovL3d3dy5zbmlhLm9yZy9zbWkvZGV2ZWxvcGVycy9vcGVuX3NvdXJjZS8iXSwibGljZW5zZUlkcyI6WyJTTklBIl0sImtleXdvcmRzIjpbImluZHVzdHJ5IGFzc29jaWF0aW9uIHB1YmxpYyIsImFzc29jaWF0aW9uIHB1YmxpYyBsaWNlbnNlIiwiMSA1IGVsZWN0cm9uaWMiLCI1IGVsZWN0cm9uaWMgZGlzdHJpYnV0aW9uIiwiZGF0YSAxIDYiLCI2IGV4ZWN1dGFibGUgbWVhbnMiLCIxIDcgaW5pdGlhbCIsIjcgaW5pdGlhbCBkZXZlbG9wZXIiLCIxIDggbGFyZ2VyIiwiOCBsYXJnZXIgd29yayIsIjEgOSBsaWNlbnNlIiwiOSBsaWNlbnNlIG1lYW5zIiwiZG9jdW1lbnQgMSAxMCIsIjEgMTAgbGljZW5zYWJsZSIsIjEwIGxpY2Vuc2FibGUgbWVhbnMiLCJoZXJlaW4gMSAxMSIsIjEgMTEgbW9kaWZpY2F0aW9ucyIsIjExIG1vZGlmaWNhdGlvbnMgbWVhbnMiLCJtb2RpZmljYXRpb25zIDEgMTIiLCIxIDEyIG9yaWdpbmFsIiwiMTIgb3JpZ2luYWwgY29kZSIsImxpY2Vuc2UgMSAxMyIsIjEgMTMgcGF0ZW50IiwiMTMgcGF0ZW50IGNsYWltcyIsImdyYW50b3IgMSAxNCIsIjEgMTQgc291cmNlIiwiMTQgc291cmNlIGNvZGUiLCJjaGFyZ2UgMSAxNSIsIjEgMTUgeW91IiwiMTUgeW91IG9yIiwiYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYiIsInRoZXJlYWZ0ZXIgYiBjb250cmlidXRvciIsImIgY29udHJpYnV0b3IgYXBpIiwiY29udHJpYnV0b3IgYXBpIHMiLCJhcGkgcyBpZiIsInMgaWYgY29udHJpYnV0b3IiLCJhY3R1YWwga25vd2xlZGdlIG9mIiwid291bGQgYmUgbW9zdCIsImJlIG1vc3QgbGlrZWx5IiwibW9zdCBsaWtlbHkgdG8iLCJmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb24iLCJvYmxpZ2F0aW9uIG9mIHNlY3Rpb24iLCJ2ZXJzaW9ucyB0aGUgc3RvcmFnZSIsInRoZSBzdG9yYWdlIG5ldHdvcmtpbmciLCJpbmR1c3RyeSBhc3NvY2lhdGlvbiB0aGUiLCJhc3NvY2lhdGlvbiB0aGUgc25pYSIsInRoZSBzbmlhIG1heSIsInNuaWEgbWF5IHB1Ymxpc2giLCJieSB0aGUgc25pYSIsInRoZSBzbmlhIG5vIiwic25pYSBubyBvbmUiLCJ0aGFuIHRoZSBzbmlhIiwidGhlIHNuaWEgaGFzIiwic25pYSBoYXMgdGhlIiwidGhlIHBocmFzZXMgc3RvcmFnZSIsInBocmFzZXMgc3RvcmFnZSBuZXR3b3JraW5nIiwiaW5kdXN0cnkgYXNzb2NpYXRpb24gc25pYSIsImFzc29jaWF0aW9uIHNuaWEgb3IiLCJzbmlhIG9yIGFueSIsImZyb20gdGhlIHNuaWEiLCJicmVhY2ggd2l0aGluIGEiLCJhbGxlZ2luZyB0aGF0IG8iLCJ0aGF0IG8gYSIsIm8gYSBzdWNoIiwic3BlY2lmaWVkIGFib3ZlIDgiLCJhYm92ZSA4IDMiLCJjaG9pY2Ugb2YgdGhpcyIsImEgMTQgYWNjZXB0YW5jZSIsIjE0IGFjY2VwdGFuY2UgdGhpcyIsImxpY2Vuc2UgaXMgYWNjZXB0ZWQiLCJhY2NlcHRlZCBieSB5b3UiLCJieSB5b3UgaWYiLCJpZiB5b3UgcmV0YWluIiwieW91IHJldGFpbiB1c2UiLCJyZXRhaW4gdXNlIG9yIiwiYW55IHB1cnBvc2UgZXhoaWJpdCIsInB1cnBvc2UgZXhoaWJpdCBhIiwiYSB0aGUgc25pYSIsInRvIHRoZSBzbmlhIiwibGljZW5zZSBhdCB3d3ciLCJhdCB3d3cgc25pYSIsInNtaSBkZXZlbG9wZXJzIGNpbSIsImRldmVsb3BlcnMgY2ltIHNvZnR3YXJlIiwiY2ltIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIiwiY29kZSBpcyBjb21wbGV0ZSIsImlzIGNvbXBsZXRlIHRoaXMiLCJjb21wbGV0ZSB0aGlzIGNvbnRyaWJ1dG9yIiwidGhpcyBjb250cmlidXRvciBzIiwiY29udHJpYnV0b3IgcyByZWFkIiwicyByZWFkIG1vcmUiLCJyZWFkIG1vcmUgYWJvdXQiLCJtb3JlIGFib3V0IHRoaXMiLCJhYm91dCB0aGlzIGxpY2Vuc2UiLCJodHRwIHd3dyBzbmlhIiwic21pIGRldmVsb3BlcnMgb3BlbiIsImRldmVsb3BlcnMgb3BlbiBzb3VyY2UiLCJuZXR3b3JraW5nIGluZHVzdHJ5IGFzc29jaWF0aW9uIHB1YmxpYyIsImluZHVzdHJ5IGFzc29jaWF0aW9uIHB1YmxpYyBsaWNlbnNlIiwiYXNzb2NpYXRpb24gcHVibGljIGxpY2Vuc2UgdmVyc2lvbiIsIjIgY29udHJpYnV0b3IgbWVhbnMgZWFjaCIsIm1vZGlmaWNhdGlvbnMgMSAzIGNvbnRyaWJ1dG9yIiwidGhlcmVvZiAxIDUgZWxlY3Ryb25pYyIsIjEgNSBlbGVjdHJvbmljIGRpc3RyaWJ1dGlvbiIsIjUgZWxlY3Ryb25pYyBkaXN0cmlidXRpb24gbWVjaGFuaXNtIiwib2YgZGF0YSAxIDYiLCJkYXRhIDEgNiBleGVjdXRhYmxlIiwiMSA2IGV4ZWN1dGFibGUgbWVhbnMiLCI2IGV4ZWN1dGFibGUgbWVhbnMgY292ZXJlZCIsInNvdXJjZSBjb2RlIDEgNyIsImNvZGUgMSA3IGluaXRpYWwiLCIxIDcgaW5pdGlhbCBkZXZlbG9wZXIiLCI3IGluaXRpYWwgZGV2ZWxvcGVyIG1lYW5zIiwiYSAxIDggbGFyZ2VyIiwiMSA4IGxhcmdlciB3b3JrIiwiOCBsYXJnZXIgd29yayBtZWFucyIsImxpY2Vuc2UgMSA5IGxpY2Vuc2UiLCIxIDkgbGljZW5zZSBtZWFucyIsIjkgbGljZW5zZSBtZWFucyB0aGlzIiwidGhpcyBkb2N1bWVudCAxIDEwIiwiZG9jdW1lbnQgMSAxMCBsaWNlbnNhYmxlIiwiMSAxMCBsaWNlbnNhYmxlIG1lYW5zIiwiMTAgbGljZW5zYWJsZSBtZWFucyBoYXZpbmciLCJjb252ZXllZCBoZXJlaW4gMSAxMSIsImhlcmVpbiAxIDExIG1vZGlmaWNhdGlvbnMiLCIxIDExIG1vZGlmaWNhdGlvbnMgbWVhbnMiLCIxMSBtb2RpZmljYXRpb25zIG1lYW5zIGFueSIsInByZXZpb3VzIG1vZGlmaWNhdGlvbnMgMSAxMiIsIm1vZGlmaWNhdGlvbnMgMSAxMiBvcmlnaW5hbCIsIjEgMTIgb3JpZ2luYWwgY29kZSIsIjEyIG9yaWdpbmFsIGNvZGUgbWVhbnMiLCJ0aGlzIGxpY2Vuc2UgMSAxMyIsImxpY2Vuc2UgMSAxMyBwYXRlbnQiLCIxIDEzIHBhdGVudCBjbGFpbXMiLCIxMyBwYXRlbnQgY2xhaW1zIG1lYW5zIiwiYnkgZ3JhbnRvciAxIDE0IiwiZ3JhbnRvciAxIDE0IHNvdXJjZSIsIjEgMTQgc291cmNlIGNvZGUiLCIxNCBzb3VyY2UgY29kZSBtZWFucyIsIm5vIGNoYXJnZSAxIDE1IiwiY2hhcmdlIDEgMTUgeW91IiwiMSAxNSB5b3Ugb3IiLCIxNSB5b3Ugb3IgeW91ciIsImlmIGNvbnRyaWJ1dG9yIGhhcyBhY3R1YWwiLCJoYXMgYWN0dWFsIGtub3dsZWRnZSB0aGF0IiwiYWN0dWFsIGtub3dsZWRnZSB0aGF0IGEiLCJtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBiIiwiYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYiBjb250cmlidXRvciIsInRoZXJlYWZ0ZXIgYiBjb250cmlidXRvciBhcGkiLCJiIGNvbnRyaWJ1dG9yIGFwaSBzIiwiY29udHJpYnV0b3IgYXBpIHMgaWYiLCJhcGkgcyBpZiBjb250cmlidXRvciIsInMgaWYgY29udHJpYnV0b3IgcyIsImFuZCBjb250cmlidXRvciBoYXMgYWN0dWFsIiwiaGFzIGFjdHVhbCBrbm93bGVkZ2Ugb2YiLCJhY3R1YWwga25vd2xlZGdlIG9mIHBhdGVudCIsInVzZXIgd291bGQgYmUgbW9zdCIsIndvdWxkIGJlIG1vc3QgbGlrZWx5IiwiYmUgbW9zdCBsaWtlbHkgdG8iLCJtb3N0IGxpa2VseSB0byBsb29rIiwiaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb24iLCJmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb24gb2YiLCJ0aGUgb2JsaWdhdGlvbiBvZiBzZWN0aW9uIiwib2JsaWdhdGlvbiBvZiBzZWN0aW9uIDMiLCJuZXcgdmVyc2lvbnMgdGhlIHN0b3JhZ2UiLCJ2ZXJzaW9ucyB0aGUgc3RvcmFnZSBuZXR3b3JraW5nIiwidGhlIHN0b3JhZ2UgbmV0d29ya2luZyBpbmR1c3RyeSIsIm5ldHdvcmtpbmcgaW5kdXN0cnkgYXNzb2NpYXRpb24gdGhlIiwiaW5kdXN0cnkgYXNzb2NpYXRpb24gdGhlIHNuaWEiLCJhc3NvY2lhdGlvbiB0aGUgc25pYSBtYXkiLCJ0aGUgc25pYSBtYXkgcHVibGlzaCIsInNuaWEgbWF5IHB1Ymxpc2ggcmV2aXNlZCIsInB1Ymxpc2hlZCBieSB0aGUgc25pYSIsImJ5IHRoZSBzbmlhIG5vIiwidGhlIHNuaWEgbm8gb25lIiwic25pYSBubyBvbmUgb3RoZXIiLCJvdGhlciB0aGFuIHRoZSBzbmlhIiwidGhhbiB0aGUgc25pYSBoYXMiLCJ0aGUgc25pYSBoYXMgdGhlIiwic25pYSBoYXMgdGhlIHJpZ2h0IiwidGhhdCB0aGUgcGhyYXNlcyBzdG9yYWdlIiwidGhlIHBocmFzZXMgc3RvcmFnZSBuZXR3b3JraW5nIiwicGhyYXNlcyBzdG9yYWdlIG5ldHdvcmtpbmcgaW5kdXN0cnkiLCJuZXR3b3JraW5nIGluZHVzdHJ5IGFzc29jaWF0aW9uIHNuaWEiLCJpbmR1c3RyeSBhc3NvY2lhdGlvbiBzbmlhIG9yIiwiYXNzb2NpYXRpb24gc25pYSBvciBhbnkiLCJzbmlhIG9yIGFueSBjb25mdXNpbmdseSIsImRpZmZlciBmcm9tIHRoZSBzbmlhIiwiZnJvbSB0aGUgc25pYSBwdWJsaWMiLCJzbmlhIHB1YmxpYyBsaWNlbnNlIGZpbGxpbmciLCJzdWNoIGJyZWFjaCB3aXRoaW4gYSIsImJyZWFjaCB3aXRoaW4gYSByZWFzb25hYmxlIiwicmVhc29uYWJsZSB0aW1lIGFmdGVyIGJlY29taW5nIiwicGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBvIiwiYWxsZWdpbmcgdGhhdCBvIGEiLCJ0aGF0IG8gYSBzdWNoIiwibyBhIHN1Y2ggcGFydGljaXBhbnQiLCJwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlIDgiLCJzcGVjaWZpZWQgYWJvdmUgOCAzIiwiYWJvdmUgOCAzIGlmIiwieW91ciBjaG9pY2Ugb2YgdGhpcyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJTVU4gUFVCTElDIExJQ0VOU0UgVmVyc2lvbiAxLjBcblxuICAgMS4gRGVmaW5pdGlvbnMuXG5cbiAgICAgIDEuMC4xLiBcIkNvbW1lcmNpYWwgVXNlXCIgbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlIENvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS5cblxuICAgICAgMS4xLiBcIkNvbnRyaWJ1dG9yXCIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLlxuXG4gICAgICAxLjIuIFwiQ29udHJpYnV0b3IgVmVyc2lvblwiIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci5cblxuICAgICAgMS4zLiBcIkNvdmVyZWQgQ29kZVwiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YgYW5kIGNvcnJlc3BvbmRpbmcgZG9jdW1lbnRhdGlvbiByZWxlYXNlZCB3aXRoIHRoZSBzb3VyY2UgY29kZS5cblxuICAgICAgMS40LiBcIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbVwiIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLlxuXG4gICAgICAxLjUuIFwiRXhlY3V0YWJsZVwiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLlxuXG4gICAgICAxLjYuIFwiSW5pdGlhbCBEZXZlbG9wZXJcIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuXG5cbiAgICAgIDEuNy4gXCJMYXJnZXIgV29ya1wiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuOC4gXCJMaWNlbnNlXCIgbWVhbnMgdGhpcyBkb2N1bWVudC5cblxuICAgICAgMS44LjEuIFwiTGljZW5zYWJsZVwiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLlxuXG4gICAgICAxLjkuIFwiTW9kaWZpY2F0aW9uc1wiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOlxuXG4gICAgICAgICBBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICAgICAgICBCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLlxuXG4gICAgICAxLjEwLiBcIk9yaWdpbmFsIENvZGVcIi4uLyBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjEwLjEuIFwiUGF0ZW50IENsYWltc1wiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLlxuXG4gICAgICAxLjExLiBcIlNvdXJjZSBDb2RlXCIuLi8gbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3IncyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuXG5cbiAgICAgIDEuMTIuIFwiWW91XCIgKG9yIFwiWW91clwiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBcIllvdVwiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcImNvbnRyb2xcIi4uLyBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS5cblxuICAgMi4gU291cmNlIENvZGUgTGljZW5zZS5cblxuICAgICAgMi4xIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczpcblxuICAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kXG5cbiAgICAgICAgIChiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLlxuXG4gICAgICAgICAoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAgICAoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OlxuXG4gICAgICAgICAgICBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yXG5cbiAgICAgICAgICAgIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLlxuXG4gICAgICAyLjIuIENvbnRyaWJ1dG9yIEdyYW50LiBTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZVxuXG4gICAgICAgICAoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZFxuXG4gICAgICAgICBiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLlxuXG4gICAgICAgICAoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICAgICAgICAoZCkgbm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuXG5cbiAgIDMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy5cblxuICAgICAgMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLiBUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS5cblxuICAgICAgMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIEFueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LlxuXG4gICAgICAzLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIFlvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS5cblxuICAgICAgMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycy5cblxuICAgICAgICAgKGEpIFRoaXJkIFBhcnR5IENsYWltcy4gSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5J3MgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvciB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCBcIi4uL0xFR0FMJycgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC5cblxuICAgICAgICAgKGIpIENvbnRyaWJ1dG9yIEFQSXMuIElmIENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSAoXCJBUElcIi4uLykgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuXG5cbiAgICAgICAgIChjKSBSZXByZXNlbnRhdGlvbnMuIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3Mgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgMy41LiBSZXF1aXJlZCBOb3RpY2VzLiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLlxuXG4gICAgICAzLjcuIExhcmdlciBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICA0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uXG5cbiAgIElmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuXG5cbiAgIDUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS5cblxuICAgNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuXG5cbiAgICAgIDYuMS4gTmV3IFZlcnNpb25zLiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIChcIlN1blwiKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuXG5cbiAgICAgIDYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4gT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFN1bi4gTm8gb25lIG90aGVyIHRoYW4gU3VuIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgICAgNi4zLiBEZXJpdmF0aXZlIFdvcmtzLiBJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3Q6IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgXCJTdW4sXCIgXCJTdW4gUHVibGljIExpY2Vuc2UsXCIgb3IgXCJTUExcIi4uLyBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIFN1biBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKVxuXG4gICA3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLlxuXG4gICBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIFwiLi4vQVMgSVMnJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLlxuXG4gICA4LiBURVJNSU5BVElPTi5cblxuICAgICAgOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuXG5cbiAgICAgIDguMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhcmF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyBcIlBhcnRpY2lwYW50XCIpIGFsbGVnaW5nIHRoYXQ6XG5cbiAgICAgICAgIChhKSBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuXG5cbiAgICAgICAgIChiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC5cblxuICAgICAgOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLlxuXG4gICAgICA4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi5cblxuICAgOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuXG5cbiAgIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS5cblxuICAgMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuXG5cbiAgIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSBcImNvbW1lcmNpYWwgaXRlbSxcIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlXCIgYW5kIFwiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLFwiLi4vIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi5cblxuICAgMTEuIE1JU0NFTExBTkVPVVMuXG5cbiAgIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLlxuXG4gICAxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy5cblxuICAgQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LlxuXG4gICAxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS5cblxuICAgSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzID9NdWx0aXBsZS1MaWNlbnNlZD8uID9NdWx0aXBsZS1MaWNlbnNlZD8gbWVhbnMgdGhhdCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyIFlvdXIgY2hvaWNlIG9mIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIEV4aGliaXQgQSAtU3VuIFB1YmxpYyBMaWNlbnNlIE5vdGljZS5cblxuVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgU3VuIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgTGljZW5zZSk7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vXG5cblRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fIC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fIC4gUG9ydGlvbnMgY3JlYXRlZCBieSBfX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fX19fIC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIC5cblxuQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSA/W19fX10gTGljZW5zZT8gKSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiBbX19fX19fXSBMaWNlbnNlIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBbX19fX10gTGljZW5zZSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgU1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXSBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGVpdGhlciB0aGUgU1BMIG9yIHRoZSBbX19fXSBMaWNlbnNlLlxuXG5bTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dIl0sImxpY2Vuc2VJZHMiOlsiU1BMLTEuMCJdLCJrZXl3b3JkcyI6WyJ0aGVyZW9mIGFuZCBjb3JyZXNwb25kaW5nIiwiYW5kIGNvcnJlc3BvbmRpbmcgZG9jdW1lbnRhdGlvbiIsImNvcnJlc3BvbmRpbmcgZG9jdW1lbnRhdGlvbiByZWxlYXNlZCIsImRvY3VtZW50YXRpb24gcmVsZWFzZWQgd2l0aCIsInJlbGVhc2VkIHdpdGggdGhlIiwiY29kZSAxIDQiLCJhcGkgYW5kIGNvbnRyaWJ1dG9yIiwiaW5jIHN1biBtYXkiLCJ0aGUgcGhyYXNlcyBzdW4iLCJwaHJhc2VzIHN1biBzdW4iLCJzdW4gc3VuIHB1YmxpYyIsImxpY2Vuc2Ugb3Igc3BsIiwib3Igc3BsIG9yIiwiZnJvbSB0aGUgc3VuIiwib2YgdGhlIGFsdGVybmF0aXZlIiwiYSBzdW4gcHVibGljIiwicHVibGljIGxpY2Vuc2Ugbm90aWNlIiwibm90aWNlIHRoZSBjb250ZW50cyIsImxpY2Vuc2UgaXMgYXZhaWxhYmxlIiwiaHR0cCB3d3cgc3VuIiwid3d3IHN1biBjb20iLCJzdW4gY29tIHRoZSIsImNvbSB0aGUgb3JpZ2luYWwiLCJ1bmRlciB0aGUgc3BsIiwidGhlIHNwbCBpbmRpY2F0ZSIsInNwbCBpbmRpY2F0ZSB5b3VyIiwiZWl0aGVyIHRoZSBzcGwiLCJpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZiBhbmQiLCJwb3J0aW9ucyB0aGVyZW9mIGFuZCBjb3JyZXNwb25kaW5nIiwidGhlcmVvZiBhbmQgY29ycmVzcG9uZGluZyBkb2N1bWVudGF0aW9uIiwiYW5kIGNvcnJlc3BvbmRpbmcgZG9jdW1lbnRhdGlvbiByZWxlYXNlZCIsImNvcnJlc3BvbmRpbmcgZG9jdW1lbnRhdGlvbiByZWxlYXNlZCB3aXRoIiwiZG9jdW1lbnRhdGlvbiByZWxlYXNlZCB3aXRoIHRoZSIsInJlbGVhc2VkIHdpdGggdGhlIHNvdXJjZSIsInRoZSBzb3VyY2UgY29kZSAxIiwic291cmNlIGNvZGUgMSA0IiwiY29kZSAxIDQgZWxlY3Ryb25pYyIsInBsdXMgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiIsImludGVyZmFjZSBhcGkgYW5kIGNvbnRyaWJ1dG9yIiwiYXBpIGFuZCBjb250cmlidXRvciBoYXMiLCJtaWNyb3N5c3RlbXMgaW5jIHN1biBtYXkiLCJpbmMgc3VuIG1heSBwdWJsaXNoIiwidGhhdCB0aGUgcGhyYXNlcyBzdW4iLCJ0aGUgcGhyYXNlcyBzdW4gc3VuIiwicGhyYXNlcyBzdW4gc3VuIHB1YmxpYyIsInN1biBzdW4gcHVibGljIGxpY2Vuc2UiLCJzdW4gcHVibGljIGxpY2Vuc2Ugb3IiLCJwdWJsaWMgbGljZW5zZSBvciBzcGwiLCJsaWNlbnNlIG9yIHNwbCBvciIsIm9yIHNwbCBvciBhbnkiLCJkaWZmZXIgZnJvbSB0aGUgc3VuIiwiZnJvbSB0aGUgc3VuIHB1YmxpYyIsInN1biBwdWJsaWMgbGljZW5zZSBmaWxsaW5nIiwiY2hvaWNlIG9mIHRoZSBhbHRlcm5hdGl2ZSIsIm9mIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcyIsImEgZXhoaWJpdCBhIHN1biIsImV4aGliaXQgYSBzdW4gcHVibGljIiwiYSBzdW4gcHVibGljIGxpY2Vuc2UiLCJzdW4gcHVibGljIGxpY2Vuc2Ugbm90aWNlIiwicHVibGljIGxpY2Vuc2Ugbm90aWNlIHRoZSIsImxpY2Vuc2Ugbm90aWNlIHRoZSBjb250ZW50cyIsIm5vdGljZSB0aGUgY29udGVudHMgb2YiLCJ0byB0aGUgc3VuIHB1YmxpYyIsIndpdGggdGhlIGxpY2Vuc2UgYSIsInRoZSBsaWNlbnNlIGlzIGF2YWlsYWJsZSIsImxpY2Vuc2UgaXMgYXZhaWxhYmxlIGF0IiwiaXMgYXZhaWxhYmxlIGF0IGh0dHAiLCJhdCBodHRwIHd3dyBzdW4iLCJodHRwIHd3dyBzdW4gY29tIiwid3d3IHN1biBjb20gdGhlIiwic3VuIGNvbSB0aGUgb3JpZ2luYWwiLCJjb20gdGhlIG9yaWdpbmFsIGNvZGUiLCJmaWxlIHVuZGVyIHRoZSBzcGwiLCJ1bmRlciB0aGUgc3BsIGluZGljYXRlIiwidGhlIHNwbCBpbmRpY2F0ZSB5b3VyIiwic3BsIGluZGljYXRlIHlvdXIgZGVjaXNpb24iLCJ1bmRlciBlaXRoZXIgdGhlIHNwbCIsImVpdGhlciB0aGUgc3BsIG9yIiwic3BsIG9yIHRoZSBsaWNlbnNlIiwiY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZiBhbmQiLCJpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZiBhbmQgY29ycmVzcG9uZGluZyIsInBvcnRpb25zIHRoZXJlb2YgYW5kIGNvcnJlc3BvbmRpbmcgZG9jdW1lbnRhdGlvbiIsInRoZXJlb2YgYW5kIGNvcnJlc3BvbmRpbmcgZG9jdW1lbnRhdGlvbiByZWxlYXNlZCIsImFuZCBjb3JyZXNwb25kaW5nIGRvY3VtZW50YXRpb24gcmVsZWFzZWQgd2l0aCIsImNvcnJlc3BvbmRpbmcgZG9jdW1lbnRhdGlvbiByZWxlYXNlZCB3aXRoIHRoZSIsImRvY3VtZW50YXRpb24gcmVsZWFzZWQgd2l0aCB0aGUgc291cmNlIiwicmVsZWFzZWQgd2l0aCB0aGUgc291cmNlIGNvZGUiLCJ3aXRoIHRoZSBzb3VyY2UgY29kZSAxIiwidGhlIHNvdXJjZSBjb2RlIDEgNCIsInNvdXJjZSBjb2RlIDEgNCBlbGVjdHJvbmljIiwiY29kZSAxIDQgZWxlY3Ryb25pYyBkaXN0cmlidXRpb24iLCJjb250YWlucyBwbHVzIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24iLCJwbHVzIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gaW50ZXJmYWNlIiwiZG9jdW1lbnRhdGlvbiBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBzY3JpcHRzIiwicHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFwaSBhbmQgY29udHJpYnV0b3IiLCJpbnRlcmZhY2UgYXBpIGFuZCBjb250cmlidXRvciBoYXMiLCJhcGkgYW5kIGNvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UiLCJ2ZXJzaW9ucyBzdW4gbWljcm9zeXN0ZW1zIGluYyBzdW4iLCJzdW4gbWljcm9zeXN0ZW1zIGluYyBzdW4gbWF5IiwibWljcm9zeXN0ZW1zIGluYyBzdW4gbWF5IHB1Ymxpc2giLCJpbmMgc3VuIG1heSBwdWJsaXNoIHJldmlzZWQiLCJzbyB0aGF0IHRoZSBwaHJhc2VzIHN1biIsInRoYXQgdGhlIHBocmFzZXMgc3VuIHN1biIsInRoZSBwaHJhc2VzIHN1biBzdW4gcHVibGljIiwicGhyYXNlcyBzdW4gc3VuIHB1YmxpYyBsaWNlbnNlIiwic3VuIHN1biBwdWJsaWMgbGljZW5zZSBvciIsInN1biBwdWJsaWMgbGljZW5zZSBvciBzcGwiLCJwdWJsaWMgbGljZW5zZSBvciBzcGwgb3IiLCJsaWNlbnNlIG9yIHNwbCBvciBhbnkiLCJvciBzcGwgb3IgYW55IGNvbmZ1c2luZ2x5Iiwid2hpY2ggZGlmZmVyIGZyb20gdGhlIHN1biIsImRpZmZlciBmcm9tIHRoZSBzdW4gcHVibGljIiwiZnJvbSB0aGUgc3VuIHB1YmxpYyBsaWNlbnNlIiwidGhlIHN1biBwdWJsaWMgbGljZW5zZSBmaWxsaW5nIiwic3VuIHB1YmxpYyBsaWNlbnNlIGZpbGxpbmcgaW4iLCJ5b3VyIGNob2ljZSBvZiB0aGUgYWx0ZXJuYXRpdmUiLCJjaG9pY2Ugb2YgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzIiwib2YgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzIGlmIiwiZXhoaWJpdCBhIGV4aGliaXQgYSBzdW4iLCJhIGV4aGliaXQgYSBzdW4gcHVibGljIiwiZXhoaWJpdCBhIHN1biBwdWJsaWMgbGljZW5zZSIsImEgc3VuIHB1YmxpYyBsaWNlbnNlIG5vdGljZSIsInN1biBwdWJsaWMgbGljZW5zZSBub3RpY2UgdGhlIiwicHVibGljIGxpY2Vuc2Ugbm90aWNlIHRoZSBjb250ZW50cyIsImxpY2Vuc2Ugbm90aWNlIHRoZSBjb250ZW50cyBvZiIsIm5vdGljZSB0aGUgY29udGVudHMgb2YgdGhpcyIsInN1YmplY3QgdG8gdGhlIHN1biBwdWJsaWMiLCJ0byB0aGUgc3VuIHB1YmxpYyBsaWNlbnNlIiwidGhlIHN1biBwdWJsaWMgbGljZW5zZSB2ZXJzaW9uIiwiY29tcGxpYW5jZSB3aXRoIHRoZSBsaWNlbnNlIGEiLCJ3aXRoIHRoZSBsaWNlbnNlIGEgY29weSIsIm9mIHRoZSBsaWNlbnNlIGlzIGF2YWlsYWJsZSIsInRoZSBsaWNlbnNlIGlzIGF2YWlsYWJsZSBhdCIsImxpY2Vuc2UgaXMgYXZhaWxhYmxlIGF0IGh0dHAiLCJpcyBhdmFpbGFibGUgYXQgaHR0cCB3d3ciLCJhdmFpbGFibGUgYXQgaHR0cCB3d3cgc3VuIiwiYXQgaHR0cCB3d3cgc3VuIGNvbSIsImh0dHAgd3d3IHN1biBjb20gdGhlIiwid3d3IHN1biBjb20gdGhlIG9yaWdpbmFsIiwic3VuIGNvbSB0aGUgb3JpZ2luYWwgY29kZSIsImNvbSB0aGUgb3JpZ2luYWwgY29kZSBpcyIsInRoaXMgZmlsZSB1bmRlciB0aGUgc3BsIiwiZmlsZSB1bmRlciB0aGUgc3BsIGluZGljYXRlIiwidW5kZXIgdGhlIHNwbCBpbmRpY2F0ZSB5b3VyIiwidGhlIHNwbCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIiwic3BsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkiLCJmaWxlIHVuZGVyIGVpdGhlciB0aGUgc3BsIiwidW5kZXIgZWl0aGVyIHRoZSBzcGwgb3IiLCJlaXRoZXIgdGhlIHNwbCBvciB0aGUiLCJ0aGUgc3BsIG9yIHRoZSBsaWNlbnNlIiwic3BsIG9yIHRoZSBsaWNlbnNlIG5vdGUiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChjKSAxOTk1IFRhdHUgWWxvbmVuIFx1MDAzY3lsb0Bjcy5odXQuZmlcdTAwM2UsIEVzcG9vLCBGaW5sYW5kIEFsbCByaWdodHMgcmVzZXJ2ZWRcblxuQXMgZmFyIGFzIEkgYW0gY29uY2VybmVkLCB0aGUgY29kZSBJIGhhdmUgd3JpdHRlbiBmb3IgdGhpcyBzb2Z0d2FyZSBjYW4gYmUgdXNlZCBmcmVlbHkgZm9yIGFueSBwdXJwb3NlLiBBbnkgZGVyaXZlZCB2ZXJzaW9ucyBvZiB0aGlzIHNvZnR3YXJlIG11c3QgYmUgY2xlYXJseSBtYXJrZWQgYXMgc3VjaCwgYW5kIGlmIHRoZSBkZXJpdmVkIHdvcmsgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIHByb3RvY29sIGRlc2NyaXB0aW9uIGluIHRoZSBSRkMgZmlsZSwgaXQgbXVzdCBiZSBjYWxsZWQgYnkgYSBuYW1lIG90aGVyIHRoYW4gXCJzc2hcIiBvciBcIlNlY3VyZSBTaGVsbFwiLlxuXG5bVGF0dSBjb250aW51ZXNdXG5cbkhvd2V2ZXIsIEkgYW0gbm90IGltcGx5aW5nIHRvIGdpdmUgYW55IGxpY2Vuc2VzIHRvIGFueSBwYXRlbnRzIG9yIGNvcHlyaWdodHMgaGVsZCBieSB0aGlyZCBwYXJ0aWVzLCBhbmQgdGhlIHNvZnR3YXJlIGluY2x1ZGVzIHBhcnRzIHRoYXQgYXJlIG5vdCB1bmRlciBteSBkaXJlY3QgY29udHJvbC4gQXMgZmFyIGFzIEkga25vdywgYWxsIGluY2x1ZGVkIHNvdXJjZSBjb2RlIGlzIHVzZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSByZWxldmFudCBsaWNlbnNlIGFncmVlbWVudHMgYW5kIGNhbiBiZSB1c2VkIGZyZWVseSBmb3IgYW55IHB1cnBvc2UgKHRoZSBHTlUgbGljZW5zZSBiZWluZyB0aGUgbW9zdCByZXN0cmljdGl2ZSk7IHNlZSBiZWxvdyBmb3IgZGV0YWlscy5cblxuW0hvd2V2ZXIsIG5vbmUgb2YgdGhhdCB0ZXJtIGlzIHJlbGV2YW50IGF0IHRoaXMgcG9pbnQgaW4gdGltZS4gQWxsIG9mIHRoZXNlIHJlc3RyaWN0aXZlbHkgbGljZW5jZWQgc29mdHdhcmUgY29tcG9uZW50cyB3aGljaCBoZSB0YWxrcyBhYm91dCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIE9wZW5TU0gsIGkuZS4sXG5cbiAgIC0gUlNBIGlzIG5vIGxvbmdlciBpbmNsdWRlZCwgZm91bmQgaW4gdGhlIE9wZW5TU0wgbGlicmFyeVxuXG4gICAtIElERUEgaXMgbm8gbG9uZ2VyIGluY2x1ZGVkLCBpdHMgdXNlIGlzIGRlcHJlY2F0ZWRcblxuICAgLSBERVMgaXMgbm93IGV4dGVybmFsLCBpbiB0aGUgT3BlblNTTCBsaWJyYXJ5XG5cbiAgIC0gR01QIGlzIG5vIGxvbmdlciB1c2VkLCBhbmQgaW5zdGVhZCB3ZSBjYWxsIEJOIGNvZGUgZnJvbSBPcGVuU1NMXG5cbiAgIC0gWmxpYiBpcyBub3cgZXh0ZXJuYWwsIGluIGEgbGlicmFyeVxuXG4gICAtIFRoZSBtYWtlLXNzaC1rbm93bi1ob3N0cyBzY3JpcHQgaXMgbm8gbG9uZ2VyIGluY2x1ZGVkXG5cbiAgIC0gVFNTIGhhcyBiZWVuIHJlbW92ZWRcblxuICAgLSBNRDUgaXMgbm93IGV4dGVybmFsLCBpbiB0aGUgT3BlblNTTCBsaWJyYXJ5XG5cbiAgIC0gUkM0IHN1cHBvcnQgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBBUkM0IHN1cHBvcnQgZnJvbSBPcGVuU1NMXG5cbiAgIC0gQmxvd2Zpc2ggaXMgbm93IGV4dGVybmFsLCBpbiB0aGUgT3BlblNTTCBsaWJyYXJ5XG5cbltUaGUgbGljZW5jZSBjb250aW51ZXNdXG5cbk5vdGUgdGhhdCBhbnkgaW5mb3JtYXRpb24gYW5kIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtcyB1c2VkIGluIHRoaXMgc29mdHdhcmUgYXJlIHB1YmxpY2x5IGF2YWlsYWJsZSBvbiB0aGUgSW50ZXJuZXQgYW5kIGF0IGFueSBtYWpvciBib29rc3RvcmUsIHNjaWVudGlmaWMgbGlicmFyeSwgYW5kIHBhdGVudCBvZmZpY2Ugd29ybGR3aWRlLiBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBlLmcuIGF0IFwiaHR0cDovL3d3dy5jcy5odXQuZmkvY3J5cHRvXCIuXG5cblRoZSBsZWdhbCBzdGF0dXMgb2YgdGhpcyBwcm9ncmFtIGlzIHNvbWUgY29tYmluYXRpb24gb2YgYWxsIHRoZXNlIHBlcm1pc3Npb25zIGFuZCByZXN0cmljdGlvbnMuIFVzZSBvbmx5IGF0IHlvdXIgb3duIHJlc3BvbnNpYmlsaXR5LiBZb3Ugd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgYW55IGxlZ2FsIGNvbnNlcXVlbmNlcyB5b3Vyc2VsZjsgSSBhbSBub3QgbWFraW5nIGFueSBjbGFpbXMgd2hldGhlciBwb3NzZXNzaW5nIG9yIHVzaW5nIHRoaXMgaXMgbGVnYWwgb3Igbm90IGluIHlvdXIgY291bnRyeSwgYW5kIEkgYW0gbm90IHRha2luZyBhbnkgcmVzcG9uc2liaWxpdHkgb24geW91ciBiZWhhbGYuXG5cbk5PIFdBUlJBTlRZXG5cbkJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSBcIkFTIElTXCIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi5cblxuSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIl0sImxpY2Vuc2VJZHMiOlsiU1NILU9wZW5TU0giXSwia2V5d29yZHMiOlsiYyAxOTk1IHRhdHUiLCIxOTk1IHRhdHUgeWxvbmVuIiwidGF0dSB5bG9uZW4geWxvIiwieWxvbmVuIHlsbyBjcyIsInlsbyBjcyBodXQiLCJodXQgZmkgZXNwb28iLCJmaSBlc3BvbyBmaW5sYW5kIiwiZXNwb28gZmlubGFuZCBhbGwiLCJmaW5sYW5kIGFsbCByaWdodHMiLCJyaWdodHMgcmVzZXJ2ZWQgYXMiLCJyZXNlcnZlZCBhcyBmYXIiLCJzZWN1cmUgc2hlbGwgdGF0dSIsInNoZWxsIHRhdHUgY29udGludWVzIiwidGF0dSBjb250aW51ZXMgaG93ZXZlciIsImNvbnRpbnVlcyBob3dldmVyIGkiLCJob3dldmVyIGkgYW0iLCJhbSBub3QgaW1wbHlpbmciLCJub3QgaW1wbHlpbmcgdG8iLCJpbXBseWluZyB0byBnaXZlIiwiZ2l2ZSBhbnkgbGljZW5zZXMiLCJhbnkgbGljZW5zZXMgdG8iLCJwYXRlbnRzIG9yIGNvcHlyaWdodHMiLCJvciBjb3B5cmlnaHRzIGhlbGQiLCJjb3B5cmlnaHRzIGhlbGQgYnkiLCJoZWxkIGJ5IHRoaXJkIiwidGhpcmQgcGFydGllcyBhbmQiLCJ0aGUgc29mdHdhcmUgaW5jbHVkZXMiLCJzb2Z0d2FyZSBpbmNsdWRlcyBwYXJ0cyIsImluY2x1ZGVzIHBhcnRzIHRoYXQiLCJwYXJ0cyB0aGF0IGFyZSIsIm5vdCB1bmRlciBteSIsInVuZGVyIG15IGRpcmVjdCIsIm15IGRpcmVjdCBjb250cm9sIiwiZGlyZWN0IGNvbnRyb2wgYXMiLCJjb250cm9sIGFzIGZhciIsImFzIGkga25vdyIsImkga25vdyBhbGwiLCJrbm93IGFsbCBpbmNsdWRlZCIsImFsbCBpbmNsdWRlZCBzb3VyY2UiLCJpbmNsdWRlZCBzb3VyY2UgY29kZSIsIndpdGggdGhlIHJlbGV2YW50IiwidGhlIHJlbGV2YW50IGxpY2Vuc2UiLCJyZWxldmFudCBsaWNlbnNlIGFncmVlbWVudHMiLCJsaWNlbnNlIGFncmVlbWVudHMgYW5kIiwiYWdyZWVtZW50cyBhbmQgY2FuIiwicHVycG9zZSB0aGUgZ251IiwidGhlIGdudSBsaWNlbnNlIiwiZ251IGxpY2Vuc2UgYmVpbmciLCJsaWNlbnNlIGJlaW5nIHRoZSIsImJlaW5nIHRoZSBtb3N0IiwidGhlIG1vc3QgcmVzdHJpY3RpdmUiLCJtb3N0IHJlc3RyaWN0aXZlIHNlZSIsInJlc3RyaWN0aXZlIHNlZSBiZWxvdyIsInNlZSBiZWxvdyBmb3IiLCJiZWxvdyBmb3IgZGV0YWlscyIsImZvciBkZXRhaWxzIGhvd2V2ZXIiLCJkZXRhaWxzIGhvd2V2ZXIgbm9uZSIsImhvd2V2ZXIgbm9uZSBvZiIsIm5vbmUgb2YgdGhhdCIsIm9mIHRoYXQgdGVybSIsInRlcm0gaXMgcmVsZXZhbnQiLCJpcyByZWxldmFudCBhdCIsInJlbGV2YW50IGF0IHRoaXMiLCJhdCB0aGlzIHBvaW50IiwidGhpcyBwb2ludCBpbiIsInBvaW50IGluIHRpbWUiLCJpbiB0aW1lIGFsbCIsInRpbWUgYWxsIG9mIiwib2YgdGhlc2UgcmVzdHJpY3RpdmVseSIsInRoZXNlIHJlc3RyaWN0aXZlbHkgbGljZW5jZWQiLCJyZXN0cmljdGl2ZWx5IGxpY2VuY2VkIHNvZnR3YXJlIiwibGljZW5jZWQgc29mdHdhcmUgY29tcG9uZW50cyIsInNvZnR3YXJlIGNvbXBvbmVudHMgd2hpY2giLCJjb21wb25lbnRzIHdoaWNoIGhlIiwid2hpY2ggaGUgdGFsa3MiLCJoZSB0YWxrcyBhYm91dCIsInRhbGtzIGFib3V0IGhhdmUiLCJhYm91dCBoYXZlIGJlZW4iLCJoYXZlIGJlZW4gcmVtb3ZlZCIsInJlbW92ZWQgZnJvbSBvcGVuc3NoIiwiZnJvbSBvcGVuc3NoIGkiLCJvcGVuc3NoIGkgZSIsImkgZSByc2EiLCJlIHJzYSBpcyIsInJzYSBpcyBubyIsImxvbmdlciBpbmNsdWRlZCBmb3VuZCIsImluY2x1ZGVkIGZvdW5kIGluIiwib3BlbnNzbCBsaWJyYXJ5IGlkZWEiLCJsaWJyYXJ5IGlkZWEgaXMiLCJpZGVhIGlzIG5vIiwibG9uZ2VyIGluY2x1ZGVkIGl0cyIsImluY2x1ZGVkIGl0cyB1c2UiLCJ1c2UgaXMgZGVwcmVjYXRlZCIsImlzIGRlcHJlY2F0ZWQgZGVzIiwiZGVwcmVjYXRlZCBkZXMgaXMiLCJkZXMgaXMgbm93Iiwib3BlbnNzbCBsaWJyYXJ5IGdtcCIsImxpYnJhcnkgZ21wIGlzIiwiZ21wIGlzIG5vIiwibm8gbG9uZ2VyIHVzZWQiLCJsb25nZXIgdXNlZCBhbmQiLCJ1c2VkIGFuZCBpbnN0ZWFkIiwiYW5kIGluc3RlYWQgd2UiLCJpbnN0ZWFkIHdlIGNhbGwiLCJ3ZSBjYWxsIGJuIiwiY2FsbCBibiBjb2RlIiwiYm4gY29kZSBmcm9tIiwiY29kZSBmcm9tIG9wZW5zc2wiLCJmcm9tIG9wZW5zc2wgemxpYiIsIm9wZW5zc2wgemxpYiBpcyIsInpsaWIgaXMgbm93IiwiZXh0ZXJuYWwgaW4gYSIsImxpYnJhcnkgdGhlIG1ha2UiLCJ0aGUgbWFrZSBzc2giLCJtYWtlIHNzaCBrbm93biIsInNzaCBrbm93biBob3N0cyIsImtub3duIGhvc3RzIHNjcmlwdCIsImhvc3RzIHNjcmlwdCBpcyIsInNjcmlwdCBpcyBubyIsImxvbmdlciBpbmNsdWRlZCB0c3MiLCJpbmNsdWRlZCB0c3MgaGFzIiwidHNzIGhhcyBiZWVuIiwiYmVlbiByZW1vdmVkIG1kNSIsInJlbW92ZWQgbWQ1IGlzIiwibWQ1IGlzIG5vdyIsIm9wZW5zc2wgbGlicmFyeSByYzQiLCJsaWJyYXJ5IHJjNCBzdXBwb3J0IiwicmM0IHN1cHBvcnQgaGFzIiwiaGFzIGJlZW4gcmVwbGFjZWQiLCJiZWVuIHJlcGxhY2VkIHdpdGgiLCJyZXBsYWNlZCB3aXRoIGFyYzQiLCJ3aXRoIGFyYzQgc3VwcG9ydCIsImFyYzQgc3VwcG9ydCBmcm9tIiwic3VwcG9ydCBmcm9tIG9wZW5zc2wiLCJmcm9tIG9wZW5zc2wgYmxvd2Zpc2giLCJvcGVuc3NsIGJsb3dmaXNoIGlzIiwiYmxvd2Zpc2ggaXMgbm93Iiwib3BlbnNzbCBsaWJyYXJ5IHRoZSIsImxpYnJhcnkgdGhlIGxpY2VuY2UiLCJ0aGUgbGljZW5jZSBjb250aW51ZXMiLCJsaWNlbmNlIGNvbnRpbnVlcyBub3RlIiwiY29udGludWVzIG5vdGUgdGhhdCIsIm5vdGUgdGhhdCBhbnkiLCJ0aGF0IGFueSBpbmZvcm1hdGlvbiIsImFueSBpbmZvcm1hdGlvbiBhbmQiLCJpbmZvcm1hdGlvbiBhbmQgY3J5cHRvZ3JhcGhpYyIsImFuZCBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMiLCJjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgdXNlZCIsImFsZ29yaXRobXMgdXNlZCBpbiIsInNvZnR3YXJlIGFyZSBwdWJsaWNseSIsImFyZSBwdWJsaWNseSBhdmFpbGFibGUiLCJwdWJsaWNseSBhdmFpbGFibGUgb24iLCJhdmFpbGFibGUgb24gdGhlIiwiaW50ZXJuZXQgYW5kIGF0IiwiYW5kIGF0IGFueSIsImF0IGFueSBtYWpvciIsImFueSBtYWpvciBib29rc3RvcmUiLCJtYWpvciBib29rc3RvcmUgc2NpZW50aWZpYyIsImJvb2tzdG9yZSBzY2llbnRpZmljIGxpYnJhcnkiLCJzY2llbnRpZmljIGxpYnJhcnkgYW5kIiwibGlicmFyeSBhbmQgcGF0ZW50IiwiYW5kIHBhdGVudCBvZmZpY2UiLCJwYXRlbnQgb2ZmaWNlIHdvcmxkd2lkZSIsIm9mZmljZSB3b3JsZHdpZGUgbW9yZSIsIndvcmxkd2lkZSBtb3JlIGluZm9ybWF0aW9uIiwibW9yZSBpbmZvcm1hdGlvbiBjYW4iLCJpbmZvcm1hdGlvbiBjYW4gYmUiLCJiZSBmb3VuZCBlIiwiZm91bmQgZSBnIiwiZSBnIGF0IiwiZyBhdCBodHRwIiwid3d3IGNzIGh1dCIsImh1dCBmaSBjcnlwdG8iLCJmaSBjcnlwdG8gdGhlIiwiY3J5cHRvIHRoZSBsZWdhbCIsInRoZSBsZWdhbCBzdGF0dXMiLCJsZWdhbCBzdGF0dXMgb2YiLCJwcm9ncmFtIGlzIHNvbWUiLCJpcyBzb21lIGNvbWJpbmF0aW9uIiwic29tZSBjb21iaW5hdGlvbiBvZiIsImNvbWJpbmF0aW9uIG9mIGFsbCIsIm9mIGFsbCB0aGVzZSIsImFsbCB0aGVzZSBwZXJtaXNzaW9ucyIsInRoZXNlIHBlcm1pc3Npb25zIGFuZCIsInBlcm1pc3Npb25zIGFuZCByZXN0cmljdGlvbnMiLCJhbmQgcmVzdHJpY3Rpb25zIHVzZSIsInJlc3RyaWN0aW9ucyB1c2Ugb25seSIsInVzZSBvbmx5IGF0Iiwib25seSBhdCB5b3VyIiwieW91ciBvd24gcmVzcG9uc2liaWxpdHkiLCJvd24gcmVzcG9uc2liaWxpdHkgeW91IiwicmVzcG9uc2liaWxpdHkgeW91IHdpbGwiLCJhbnkgbGVnYWwgY29uc2VxdWVuY2VzIiwibGVnYWwgY29uc2VxdWVuY2VzIHlvdXJzZWxmIiwiY29uc2VxdWVuY2VzIHlvdXJzZWxmIGkiLCJ5b3Vyc2VsZiBpIGFtIiwiYW0gbm90IG1ha2luZyIsIm5vdCBtYWtpbmcgYW55IiwibWFraW5nIGFueSBjbGFpbXMiLCJhbnkgY2xhaW1zIHdoZXRoZXIiXX0seyJsaWNlbnNlVGV4dHMiOlsiQXMgZmFyIGFzIEkgYW0gY29uY2VybmVkLCB0aGUgY29kZSBJIGhhdmUgd3JpdHRlbiBmb3IgdGhpcyBzb2Z0d2FyZSBjYW4gYmUgdXNlZCBmcmVlbHkgZm9yIGFueSBwdXJwb3NlLiBBbnkgZGVyaXZlZCB2ZXJzaW9ucyBvZiB0aGlzIHNvZnR3YXJlIG11c3QgYmUgY2xlYXJseSBtYXJrZWQgYXMgc3VjaCwgYW5kIGlmIHRoZSBkZXJpdmVkIHdvcmsgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIHByb3RvY29sIGRlc2NyaXB0aW9uIGluIHRoZSBSRkMgZmlsZSwgaXQgbXVzdCBiZSBjYWxsZWQgYnkgYSBuYW1lIG90aGVyIHRoYW4gXCJzc2hcIiBvciBcIlNlY3VyZSBTaGVsbFwiLiJdLCJsaWNlbnNlSWRzIjpbIlNTSC1zaG9ydCJdLCJrZXl3b3JkcyI6bnVsbH0seyJsaWNlbnNlVGV4dHMiOlsiU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2VcblxuVkVSU0lPTiAxLCBPQ1RPQkVSIDE2LCAyMDE4XG5cbkNvcHlyaWdodCDCqSAyMDE4IE1vbmdvREIsIEluYy5cblxuRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLlxuXG5URVJNUyBBTkQgQ09ORElUSU9OU1xuXG4gICAwLiBEZWZpbml0aW9ucy5cblxuICAgXCJUaGlzIExpY2Vuc2VcIiByZWZlcnMgdG8gU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UuXG5cbiAgIFwiQ29weXJpZ2h0XCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2Ygd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy5cblxuICAgXCJUaGUgUHJvZ3JhbVwiIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgXCJ5b3VcIi4gXCJMaWNlbnNlZXNcIiBhbmQgXCJyZWNpcGllbnRzXCIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuXG5cbiAgIFRvIFwibW9kaWZ5XCIgYSB3b3JrIG1lYW5zIHRvIGNvcHkgZnJvbSBvciBhZGFwdCBhbGwgb3IgcGFydCBvZiB0aGUgd29yayBpbiBhIGZhc2hpb24gcmVxdWlyaW5nIGNvcHlyaWdodCBwZXJtaXNzaW9uLCBvdGhlciB0aGFuIHRoZSBtYWtpbmcgb2YgYW4gZXhhY3QgY29weS4gVGhlIHJlc3VsdGluZyB3b3JrIGlzIGNhbGxlZCBhIFwibW9kaWZpZWQgdmVyc2lvblwiIG9mIHRoZSBlYXJsaWVyIHdvcmsgb3IgYSB3b3JrIFwiYmFzZWQgb25cIiB0aGUgZWFybGllciB3b3JrLlxuXG4gICBBIFwiY292ZXJlZCB3b3JrXCIgbWVhbnMgZWl0aGVyIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0gb3IgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLlxuXG4gICBUbyBcInByb3BhZ2F0ZVwiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQgcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvciBpbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEgY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiBQcm9wYWdhdGlvbiBpbmNsdWRlcyBjb3B5aW5nLCBkaXN0cmlidXRpb24gKHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24pLCBtYWtpbmcgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMsIGFuZCBpbiBzb21lIGNvdW50cmllcyBvdGhlciBhY3Rpdml0aWVzIGFzIHdlbGwuXG5cbiAgIFRvIFwiY29udmV5XCIgYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlciBwYXJ0aWVzIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMuIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaCBhIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLlxuXG4gICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyBcIkFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXNcIiB0byB0aGUgZXh0ZW50IHRoYXQgaXQgaW5jbHVkZXMgYSBjb252ZW5pZW50IGFuZCBwcm9taW5lbnRseSB2aXNpYmxlIGZlYXR1cmUgdGhhdCAoMSkgZGlzcGxheXMgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSwgYW5kICgyKSB0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRoZSBleHRlbnQgdGhhdCB3YXJyYW50aWVzIGFyZSBwcm92aWRlZCksIHRoYXQgbGljZW5zZWVzIG1heSBjb252ZXkgdGhlIHdvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gSWYgdGhlIGludGVyZmFjZSBwcmVzZW50cyBhIGxpc3Qgb2YgdXNlciBjb21tYW5kcyBvciBvcHRpb25zLCBzdWNoIGFzIGEgbWVudSwgYSBwcm9taW5lbnQgaXRlbSBpbiB0aGUgbGlzdCBtZWV0cyB0aGlzIGNyaXRlcmlvbi5cblxuICAgMS4gU291cmNlIENvZGUuXG5cbiAgIFRoZSBcInNvdXJjZSBjb2RlXCIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiBcIk9iamVjdCBjb2RlXCIgbWVhbnMgYW55IG5vbi1zb3VyY2UgZm9ybSBvZiBhIHdvcmsuXG5cbiAgIEEgXCJTdGFuZGFyZCBJbnRlcmZhY2VcIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwgc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZiBpbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdCBpcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS5cblxuICAgVGhlIFwiU3lzdGVtIExpYnJhcmllc1wiIG9mIGFuIGV4ZWN1dGFibGUgd29yayBpbmNsdWRlIGFueXRoaW5nLCBvdGhlciB0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZiBwYWNrYWdpbmcgYSBNYWpvciBDb21wb25lbnQsIGJ1dCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGF0IE1ham9yIENvbXBvbmVudCwgYW5kIChiKSBzZXJ2ZXMgb25seSB0byBlbmFibGUgdXNlIG9mIHRoZSB3b3JrIHdpdGggdGhhdCBNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4gc291cmNlIGNvZGUgZm9ybS4gQSBcIk1ham9yIENvbXBvbmVudFwiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudCAoa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtIChpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvIHByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LlxuXG4gICBUaGUgXCJDb3JyZXNwb25kaW5nIFNvdXJjZVwiIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIG5lZWRlZCB0byBnZW5lcmF0ZSwgaW5zdGFsbCwgYW5kIChmb3IgYW4gZXhlY3V0YWJsZSB3b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvIGNvbnRyb2wgdGhvc2UgYWN0aXZpdGllcy4gSG93ZXZlciwgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgd29yaydzIFN5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUgcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBpbiBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0IHdoaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgd29yay4gRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlIGluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yIHRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseSBsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwgc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2Ugc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLlxuXG4gICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzIGNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuXG5cbiAgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdCBzYW1lIHdvcmsuXG5cbiAgIDIuIEJhc2ljIFBlcm1pc3Npb25zLlxuXG4gICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZiBjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZCBjb25kaXRpb25zIGFyZSBtZXQuIFRoaXMgTGljZW5zZSBleHBsaWNpdGx5IGFmZmlybXMgeW91ciB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBydW4gdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSwgc3ViamVjdCB0byBzZWN0aW9uIDEzLiBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhIGNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cyBjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gVGhpcyBMaWNlbnNlIGFja25vd2xlZGdlcyB5b3VyIHJpZ2h0cyBvZiBmYWlyIHVzZSBvciBvdGhlciBlcXVpdmFsZW50LCBhcyBwcm92aWRlZCBieSBjb3B5cmlnaHQgbGF3LlxuXG4gICBTdWJqZWN0IHRvIHNlY3Rpb24gMTMsIHlvdSBtYXkgbWFrZSwgcnVuIGFuZCBwcm9wYWdhdGUgY292ZXJlZCB3b3JrcyB0aGF0IHlvdSBkbyBub3QgY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMgaW4gZm9yY2UuIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdSB3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvIG5vdCBjb250cm9sIGNvcHlyaWdodC4gVGhvc2UgdGh1cyBtYWtpbmcgb3IgcnVubmluZyB0aGUgY292ZXJlZCB3b3JrcyBmb3IgeW91IG11c3QgZG8gc28gZXhjbHVzaXZlbHkgb24geW91ciBiZWhhbGYsIHVuZGVyIHlvdXIgZGlyZWN0aW9uIGFuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZiB5b3VyIGNvcHlyaWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggeW91LlxuXG4gICBDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuIFN1YmxpY2Vuc2luZyBpcyBub3QgYWxsb3dlZDsgc2VjdGlvbiAxMCBtYWtlcyBpdCB1bm5lY2Vzc2FyeS5cblxuICAgMy4gUHJvdGVjdGluZyBVc2VycycgTGVnYWwgUmlnaHRzIEZyb20gQW50aS1DaXJjdW12ZW50aW9uIExhdy5cblxuICAgTm8gY292ZXJlZCB3b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgYXJ0aWNsZSAxMSBvZiB0aGUgV0lQTyBjb3B5cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3Igc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2Ygc3VjaCBtZWFzdXJlcy5cblxuICAgV2hlbiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB5b3Ugd2FpdmUgYW55IGxlZ2FsIHBvd2VyIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdG8gdGhlIGV4dGVudCBzdWNoIGNpcmN1bXZlbnRpb24gaXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgY292ZXJlZCB3b3JrLCBhbmQgeW91IGRpc2NsYWltIGFueSBpbnRlbnRpb24gdG8gbGltaXQgb3BlcmF0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBhcyBhIG1lYW5zIG9mIGVuZm9yY2luZywgYWdhaW5zdCB0aGUgd29yaydzIHVzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzLlxuXG4gICA0LiBDb252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLlxuXG4gICBZb3UgbWF5IGNvbnZleSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncyBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOyBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBzdGF0aW5nIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbnkgbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOyBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFsbCByZWNpcGllbnRzIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS5cblxuICAgWW91IG1heSBjaGFyZ2UgYW55IHByaWNlIG9yIG5vIHByaWNlIGZvciBlYWNoIGNvcHkgdGhhdCB5b3UgY29udmV5LCBhbmQgeW91IG1heSBvZmZlciBzdXBwb3J0IG9yIHdhcnJhbnR5IHByb3RlY3Rpb24gZm9yIGEgZmVlLlxuXG4gICA1LiBDb252ZXlpbmcgTW9kaWZpZWQgU291cmNlIFZlcnNpb25zLlxuXG4gICBZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvIHByb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHNlY3Rpb24gNCwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOlxuXG4gICAgICBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQgaXQsIGFuZCBnaXZpbmcgYSByZWxldmFudCBkYXRlLlxuXG4gICAgICBiKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBjb25kaXRpb25zIGFkZGVkIHVuZGVyIHNlY3Rpb24gNy4gVGhpcyByZXF1aXJlbWVudCBtb2RpZmllcyB0aGUgcmVxdWlyZW1lbnQgaW4gc2VjdGlvbiA0IHRvIFwia2VlcCBpbnRhY3QgYWxsIG5vdGljZXNcIi5cblxuICAgICAgYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuIFRoaXMgTGljZW5zZSB3aWxsIHRoZXJlZm9yZSBhcHBseSwgYWxvbmcgd2l0aCBhbnkgYXBwbGljYWJsZSBzZWN0aW9uIDcgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuIFRoaXMgTGljZW5zZSBnaXZlcyBubyBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90IGludmFsaWRhdGUgc3VjaCBwZXJtaXNzaW9uIGlmIHlvdSBoYXZlIHNlcGFyYXRlbHkgcmVjZWl2ZWQgaXQuXG5cbiAgICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXM7IGhvd2V2ZXIsIGlmIHRoZSBQcm9ncmFtIGhhcyBpbnRlcmFjdGl2ZSBpbnRlcmZhY2VzIHRoYXQgZG8gbm90IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcywgeW91ciB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby5cblxuICAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLCBhbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLCBpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuIFwiYWdncmVnYXRlXCIgaWYgdGhlIGNvbXBpbGF0aW9uIGFuZCBpdHMgcmVzdWx0aW5nIGNvcHlyaWdodCBhcmUgbm90IHVzZWQgdG8gbGltaXQgdGhlIGFjY2VzcyBvciBsZWdhbCByaWdodHMgb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMgYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiBJbmNsdXNpb24gb2YgYSBjb3ZlcmVkIHdvcmsgaW4gYW4gYWdncmVnYXRlIGRvZXMgbm90IGNhdXNlIHRoaXMgTGljZW5zZSB0byBhcHBseSB0byB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS5cblxuICAgNi4gQ29udmV5aW5nIE5vbi1Tb3VyY2UgRm9ybXMuXG5cbiAgIFlvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHNlY3Rpb25zIDQgYW5kIDUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gY29udmV5IHRoZSBtYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIG9uZSBvZiB0aGVzZSB3YXlzOlxuXG4gICAgICBhKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0IChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuXG5cbiAgICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhbmQgdmFsaWQgZm9yIGFzIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdCBtb2RlbCwgdG8gZ2l2ZSBhbnlvbmUgd2hvIHBvc3Nlc3NlcyB0aGUgb2JqZWN0IGNvZGUgZWl0aGVyICgxKSBhIGNvcHkgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZSBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UsIGZvciBhIHByaWNlIG5vIG1vcmUgdGhhbiB5b3VyIHJlYXNvbmFibGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcyBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UuXG5cbiAgICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlIHdyaXR0ZW4gb2ZmZXIgdG8gcHJvdmlkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuIFRoaXMgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIG9iamVjdCBjb2RlIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggc3Vic2VjdGlvbiA2Yi5cblxuICAgICAgZCkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBieSBvZmZlcmluZyBhY2Nlc3MgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UgKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vIGZ1cnRoZXIgY2hhcmdlLiBZb3UgbmVlZCBub3QgcmVxdWlyZSByZWNpcGllbnRzIHRvIGNvcHkgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiBJZiB0aGUgcGxhY2UgdG8gY29weSB0aGUgb2JqZWN0IGNvZGUgaXMgYSBuZXR3b3JrIHNlcnZlciwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KSB0aGF0IHN1cHBvcnRzIGVxdWl2YWxlbnQgY29weWluZyBmYWNpbGl0aWVzLCBwcm92aWRlZCB5b3UgbWFpbnRhaW4gY2xlYXIgZGlyZWN0aW9ucyBuZXh0IHRvIHRoZSBvYmplY3QgY29kZSBzYXlpbmcgd2hlcmUgdG8gZmluZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuIFJlZ2FyZGxlc3Mgb2Ygd2hhdCBzZXJ2ZXIgaG9zdHMgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBpdCBpcyBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLlxuXG4gICAgICBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8gY2hhcmdlIHVuZGVyIHN1YnNlY3Rpb24gNmQuXG5cbiAgIEEgc2VwYXJhYmxlIHBvcnRpb24gb2YgdGhlIG9iamVjdCBjb2RlLCB3aG9zZSBzb3VyY2UgY29kZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZSBpbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2RlIHdvcmsuXG5cbiAgIEEgXCJVc2VyIFByb2R1Y3RcIiBpcyBlaXRoZXIgKDEpIGEgXCJjb25zdW1lciBwcm9kdWN0XCIsIHdoaWNoIG1lYW5zIGFueSB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwgZmFtaWx5LCBvciBob3VzZWhvbGQgcHVycG9zZXMsIG9yICgyKSBhbnl0aGluZyBkZXNpZ25lZCBvciBzb2xkIGZvciBpbmNvcnBvcmF0aW9uIGludG8gYSBkd2VsbGluZy4gSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0LCBkb3VidGZ1bCBjYXNlcyBzaGFsbCBiZSByZXNvbHZlZCBpbiBmYXZvciBvZiBjb3ZlcmFnZS4gRm9yIGEgcGFydGljdWxhciBwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCBcIm5vcm1hbGx5IHVzZWRcIiByZWZlcnMgdG8gYSB0eXBpY2FsIG9yIGNvbW1vbiB1c2Ugb2YgdGhhdCBjbGFzcyBvZiBwcm9kdWN0LCByZWdhcmRsZXNzIG9mIHRoZSBzdGF0dXMgb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIgYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZSBwcm9kdWN0LiBBIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwgY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvciBub24tY29uc3VtZXIgdXNlcywgdW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQgdGhlIG9ubHkgc2lnbmlmaWNhbnQgbW9kZSBvZiB1c2Ugb2YgdGhlIHByb2R1Y3QuXG5cbiAgIFwiSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uXCIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLCBwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwgYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiBUaGUgaW5mb3JtYXRpb24gbXVzdCBzdWZmaWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250aW51ZWQgZnVuY3Rpb25pbmcgb2YgdGhlIG1vZGlmaWVkIG9iamVjdCBjb2RlIGlzIGluIG5vIGNhc2UgcHJldmVudGVkIG9yIGludGVyZmVyZWQgd2l0aCBzb2xlbHkgYmVjYXVzZSBtb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS5cblxuICAgSWYgeW91IGNvbnZleSBhbiBvYmplY3QgY29kZSB3b3JrIHVuZGVyIHRoaXMgc2VjdGlvbiBpbiwgb3Igd2l0aCwgb3Igc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMgcGFydCBvZiBhIHRyYW5zYWN0aW9uIGluIHdoaWNoIHRoZSByaWdodCBvZiBwb3NzZXNzaW9uIGFuZCB1c2Ugb2YgdGhlIFVzZXIgUHJvZHVjdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcmVjaXBpZW50IGluIHBlcnBldHVpdHkgb3IgZm9yIGEgZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQgdW5kZXIgdGhpcyBzZWN0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbi4gQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkgaWYgbmVpdGhlciB5b3Ugbm9yIGFueSB0aGlyZCBwYXJ0eSByZXRhaW5zIHRoZSBhYmlsaXR5IHRvIGluc3RhbGwgbW9kaWZpZWQgb2JqZWN0IGNvZGUgb24gdGhlIFVzZXIgUHJvZHVjdCAoZm9yIGV4YW1wbGUsIHRoZSB3b3JrIGhhcyBiZWVuIGluc3RhbGxlZCBpbiBST00pLlxuXG4gICBUaGUgcmVxdWlyZW1lbnQgdG8gcHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhIHJlcXVpcmVtZW50IHRvIGNvbnRpbnVlIHRvIHByb3ZpZGUgc3VwcG9ydCBzZXJ2aWNlLCB3YXJyYW50eSwgb3IgdXBkYXRlcyBmb3IgYSB3b3JrIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkIGJ5IHRoZSByZWNpcGllbnQsIG9yIGZvciB0aGUgVXNlciBQcm9kdWN0IGluIHdoaWNoIGl0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZC4gQWNjZXNzIHRvIGEgbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQgYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kIHByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuXG5cbiAgIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLCBpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5IGRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvciB1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy5cblxuICAgNy4gQWRkaXRpb25hbCBUZXJtcy5cblxuICAgXCJBZGRpdGlvbmFsIHBlcm1pc3Npb25zXCIgYXJlIHRlcm1zIHRoYXQgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGJ5IG1ha2luZyBleGNlcHRpb25zIGZyb20gb25lIG9yIG1vcmUgb2YgaXRzIGNvbmRpdGlvbnMuIEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgZW50aXJlIFByb2dyYW0gc2hhbGwgYmUgdHJlYXRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIGluY2x1ZGVkIGluIHRoaXMgTGljZW5zZSwgdG8gdGhlIGV4dGVudCB0aGF0IHRoZXkgYXJlIHZhbGlkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiBJZiBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGFwcGx5IG9ubHkgdG8gcGFydCBvZiB0aGUgUHJvZ3JhbSwgdGhhdCBwYXJ0IG1heSBiZSB1c2VkIHNlcGFyYXRlbHkgdW5kZXIgdGhvc2UgcGVybWlzc2lvbnMsIGJ1dCB0aGUgZW50aXJlIFByb2dyYW0gcmVtYWlucyBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2Ugd2l0aG91dCByZWdhcmQgdG8gdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMuXG5cbiAgIFdoZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gcmVtb3ZlIGFueSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGZyb20gdGhhdCBjb3B5LCBvciBmcm9tIGFueSBwYXJ0IG9mIGl0LiAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93biByZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgWW91IG1heSBwbGFjZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssIGZvciB3aGljaCB5b3UgaGF2ZSBvciBjYW4gZ2l2ZSBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgcGVybWlzc2lvbi5cblxuICAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91IGFkZCB0byBhIGNvdmVyZWQgd29yaywgeW91IG1heSAoaWYgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YgdGhhdCBtYXRlcmlhbCkgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGVybXM6XG5cbiAgICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZSB0ZXJtcyBvZiBzZWN0aW9ucyAxNSBhbmQgMTYgb2YgdGhpcyBMaWNlbnNlOyBvclxuXG4gICAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IgYXV0aG9yIGF0dHJpYnV0aW9ucyBpbiB0aGF0IG1hdGVyaWFsIG9yIGluIHRoZSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIGRpc3BsYXllZCBieSB3b3JrcyBjb250YWluaW5nIGl0OyBvclxuXG4gICAgICBjKSBQcm9oaWJpdGluZyBtaXNyZXByZXNlbnRhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoYXQgbWF0ZXJpYWwsIG9yIHJlcXVpcmluZyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkIGluIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3JcblxuICAgICAgZCkgTGltaXRpbmcgdGhlIHVzZSBmb3IgcHVibGljaXR5IHB1cnBvc2VzIG9mIG5hbWVzIG9mIGxpY2Vuc29ycyBvciBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3JcblxuICAgICAgZSkgRGVjbGluaW5nIHRvIGdyYW50IHJpZ2h0cyB1bmRlciB0cmFkZW1hcmsgbGF3IGZvciB1c2Ugb2Ygc29tZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3JcblxuICAgICAgZikgUmVxdWlyaW5nIGluZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2YgdGhhdCBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiBpdCkgd2l0aCBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBvZiBsaWFiaWxpdHkgdG8gdGhlIHJlY2lwaWVudCwgZm9yIGFueSBsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBkaXJlY3RseSBpbXBvc2Ugb24gdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLlxuXG4gICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCBcImZ1cnRoZXIgcmVzdHJpY3Rpb25zXCIgd2l0aGluIHRoZSBtZWFuaW5nIG9mIHNlY3Rpb24gMTAuIElmIHRoZSBQcm9ncmFtIGFzIHlvdSByZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcyBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXIgcmVzdHJpY3Rpb24sIHlvdSBtYXkgcmVtb3ZlIHRoYXQgdGVybS4gSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zIGEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMgbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuXG5cbiAgIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UgbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlIGFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZyB3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLlxuXG4gICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZSBmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOyB0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuXG5cbiAgIDguIFRlcm1pbmF0aW9uLlxuXG4gICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yIG1vZGlmeSBpdCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkIHBhcmFncmFwaCBvZiBzZWN0aW9uIDExKS5cblxuICAgSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQgZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucyBwcmlvciB0byA2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uXG5cbiAgIE1vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZSByZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQgY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlciB5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS5cblxuICAgVGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUgbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZS4gSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseSByZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lIG1hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuXG5cbiAgIDkuIEFjY2VwdGFuY2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLlxuXG4gICBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHJlY2VpdmUgb3IgcnVuIGEgY29weSBvZiB0aGUgUHJvZ3JhbS4gQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrIG9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uIHRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gSG93ZXZlciwgbm90aGluZyBvdGhlciB0aGFuIHRoaXMgTGljZW5zZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gcHJvcGFnYXRlIG9yIG1vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiBUaGVzZSBhY3Rpb25zIGluZnJpbmdlIGNvcHlyaWdodCBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEgY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby5cblxuICAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLlxuXG4gICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZCBwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuXG5cbiAgIEFuIFwiZW50aXR5IHRyYW5zYWN0aW9uXCIgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbiBvcmdhbml6YXRpb24sIG9yIHN1YnN0YW50aWFsbHkgYWxsIGFzc2V0cyBvZiBvbmUsIG9yIHN1YmRpdmlkaW5nIGFuIG9yZ2FuaXphdGlvbiwgb3IgbWVyZ2luZyBvcmdhbml6YXRpb25zLiBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQgdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyIGxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZCBnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYgdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLlxuXG4gICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgZXhhbXBsZSwgeW91IG1heSBub3QgaW1wb3NlIGEgbGljZW5zZSBmZWUsIHJveWFsdHksIG9yIG90aGVyIGNoYXJnZSBmb3IgZXhlcmNpc2Ugb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbiAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCBhbnkgcGF0ZW50IGNsYWltIGlzIGluZnJpbmdlZCBieSBtYWtpbmcsIHVzaW5nLCBzZWxsaW5nLCBvZmZlcmluZyBmb3Igc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LlxuXG4gICAxMS4gUGF0ZW50cy5cblxuICAgQSBcImNvbnRyaWJ1dG9yXCIgaXMgYSBjb3B5cmlnaHQgaG9sZGVyIHdobyBhdXRob3JpemVzIHVzZSB1bmRlciB0aGlzIExpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLiBUaGUgd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyBcImNvbnRyaWJ1dG9yIHZlcnNpb25cIi5cblxuICAgQSBjb250cmlidXRvcidzIFwiZXNzZW50aWFsIHBhdGVudCBjbGFpbXNcIiBhcmUgYWxsIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgY29udHJpYnV0b3IsIHdoZXRoZXIgYWxyZWFkeSBhY3F1aXJlZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIGJ5IHNvbWUgbWFubmVyLCBwZXJtaXR0ZWQgYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLCBidXQgZG8gbm90IGluY2x1ZGUgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYSBjb25zZXF1ZW5jZSBvZiBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udHJpYnV0b3IgdmVyc2lvbi4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJjb250cm9sXCIgaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIGdyYW50IHBhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIEVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudCBsaWNlbnNlIHVuZGVyIHRoZSBjb250cmlidXRvcidzIGVzc2VudGlhbCBwYXRlbnQgY2xhaW1zLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQgYW5kIG90aGVyd2lzZSBydW4sIG1vZGlmeSBhbmQgcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi5cblxuICAgSW4gdGhlIGZvbGxvd2luZyB0aHJlZSBwYXJhZ3JhcGhzLCBhIFwicGF0ZW50IGxpY2Vuc2VcIiBpcyBhbnkgZXhwcmVzcyBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCwgaG93ZXZlciBkZW5vbWluYXRlZCwgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQgKHN1Y2ggYXMgYW4gZXhwcmVzcyBwZXJtaXNzaW9uIHRvIHByYWN0aWNlIGEgcGF0ZW50IG9yIGNvdmVuYW50IG5vdCB0byBzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiBUbyBcImdyYW50XCIgc3VjaCBhIHBhdGVudCBsaWNlbnNlIHRvIGEgcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LlxuXG4gICBJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLCBhbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZSB0byBjb3B5LCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhyb3VnaCBhIHB1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsIHRoZW4geW91IG11c3QgZWl0aGVyICgxKSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28gYXZhaWxhYmxlLCBvciAoMikgYXJyYW5nZSB0byBkZXByaXZlIHlvdXJzZWxmIG9mIHRoZSBiZW5lZml0IG9mIHRoZSBwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4dGVuZCB0aGUgcGF0ZW50IGxpY2Vuc2UgdG8gZG93bnN0cmVhbSByZWNpcGllbnRzLiBcIktub3dpbmdseSByZWx5aW5nXCIgbWVhbnMgeW91IGhhdmUgYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlIGNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsgaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0IGNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuXG5cbiAgIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IgYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYSBjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMgcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5IG9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UgeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQgd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuXG5cbiAgIEEgcGF0ZW50IGxpY2Vuc2UgaXMgXCJkaXNjcmltaW5hdG9yeVwiIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgd2l0aGluIHRoZSBzY29wZSBvZiBpdHMgY292ZXJhZ2UsIHByb2hpYml0cyB0aGUgZXhlcmNpc2Ugb2YsIG9yIGlzIGNvbmRpdGlvbmVkIG9uIHRoZSBub24tZXhlcmNpc2Ugb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIFlvdSBtYXkgbm90IGNvbnZleSBhIGNvdmVyZWQgd29yayBpZiB5b3UgYXJlIGEgcGFydHkgdG8gYW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMgaW4gdGhlIGJ1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudCB0byB0aGUgdGhpcmQgcGFydHkgYmFzZWQgb24gdGhlIGV4dGVudCBvZiB5b3VyIGFjdGl2aXR5IG9mIGNvbnZleWluZyB0aGUgd29yaywgYW5kIHVuZGVyIHdoaWNoIHRoZSB0aGlyZCBwYXJ0eSBncmFudHMsIHRvIGFueSBvZiB0aGUgcGFydGllcyB3aG8gd291bGQgcmVjZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5IHBhdGVudCBsaWNlbnNlIChhKSBpbiBjb25uZWN0aW9uIHdpdGggY29waWVzIG9mIHRoZSBjb3ZlcmVkIHdvcmsgY29udmV5ZWQgYnkgeW91IChvciBjb3BpZXMgbWFkZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkgZm9yIGFuZCBpbiBjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQgY29udGFpbiB0aGUgY292ZXJlZCB3b3JrLCB1bmxlc3MgeW91IGVudGVyZWQgaW50byB0aGF0IGFycmFuZ2VtZW50LCBvciB0aGF0IHBhdGVudCBsaWNlbnNlIHdhcyBncmFudGVkLCBwcmlvciB0byAyOCBNYXJjaCAyMDA3LlxuXG4gICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgZXhjbHVkaW5nIG9yIGxpbWl0aW5nIGFueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVmZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5IG90aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy5cblxuICAgMTIuIE5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uXG5cbiAgIElmIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IHVzZSwgcHJvcGFnYXRlIG9yIGNvbnZleSBhIGNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heSBub3QgdXNlLCBwcm9wYWdhdGUgb3IgY29udmV5IGl0IGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIHlvdSBhZ3JlZSB0byB0ZXJtcyB0aGF0IG9ibGlnYXRlIHlvdSB0byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBjb252ZXlpbmcgZnJvbSB0aG9zZSB0byB3aG9tIHlvdSBjb252ZXkgdGhlIFByb2dyYW0sIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIHRob3NlIHRlcm1zIGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGNvbnZleWluZyB0aGUgUHJvZ3JhbS5cblxuICAgMTMuIE9mZmVyaW5nIHRoZSBQcm9ncmFtIGFzIGEgU2VydmljZS5cblxuICAgSWYgeW91IG1ha2UgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFByb2dyYW0gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIGF2YWlsYWJsZSB0byB0aGlyZCBwYXJ0aWVzIGFzIGEgc2VydmljZSwgeW91IG11c3QgbWFrZSB0aGUgU2VydmljZSBTb3VyY2UgQ29kZSBhdmFpbGFibGUgdmlhIG5ldHdvcmsgZG93bmxvYWQgdG8gZXZlcnlvbmUgYXQgbm8gY2hhcmdlLCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBNYWtpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFByb2dyYW0gb3IgbW9kaWZpZWQgdmVyc2lvbiBhdmFpbGFibGUgdG8gdGhpcmQgcGFydGllcyBhcyBhIHNlcnZpY2UgaW5jbHVkZXMsIHdpdGhvdXQgbGltaXRhdGlvbiwgZW5hYmxpbmcgdGhpcmQgcGFydGllcyB0byBpbnRlcmFjdCB3aXRoIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBQcm9ncmFtIG9yIG1vZGlmaWVkIHZlcnNpb24gcmVtb3RlbHkgdGhyb3VnaCBhIGNvbXB1dGVyIG5ldHdvcmssIG9mZmVyaW5nIGEgc2VydmljZSB0aGUgdmFsdWUgb2Ygd2hpY2ggZW50aXJlbHkgb3IgcHJpbWFyaWx5IGRlcml2ZXMgZnJvbSB0aGUgdmFsdWUgb2YgdGhlIFByb2dyYW0gb3IgbW9kaWZpZWQgdmVyc2lvbiwgb3Igb2ZmZXJpbmcgYSBzZXJ2aWNlIHRoYXQgYWNjb21wbGlzaGVzIGZvciB1c2VycyB0aGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoZSBQcm9ncmFtIG9yIG1vZGlmaWVkIHZlcnNpb24uXG5cbiAgIFwiU2VydmljZSBTb3VyY2UgQ29kZVwiIG1lYW5zIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgdGhlIFByb2dyYW0gb3IgdGhlIG1vZGlmaWVkIHZlcnNpb24sIGFuZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCBwcm9ncmFtcyB0aGF0IHlvdSB1c2UgdG8gbWFrZSB0aGUgUHJvZ3JhbSBvciBtb2RpZmllZCB2ZXJzaW9uIGF2YWlsYWJsZSBhcyBhIHNlcnZpY2UsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBtYW5hZ2VtZW50IHNvZnR3YXJlLCB1c2VyIGludGVyZmFjZXMsIGFwcGxpY2F0aW9uIHByb2dyYW0gaW50ZXJmYWNlcywgYXV0b21hdGlvbiBzb2Z0d2FyZSwgbW9uaXRvcmluZyBzb2Z0d2FyZSwgYmFja3VwIHNvZnR3YXJlLCBzdG9yYWdlIHNvZnR3YXJlIGFuZCBob3N0aW5nIHNvZnR3YXJlLCBhbGwgc3VjaCB0aGF0IGEgdXNlciBjb3VsZCBydW4gYW4gaW5zdGFuY2Ugb2YgdGhlIHNlcnZpY2UgdXNpbmcgdGhlIFNlcnZpY2UgU291cmNlIENvZGUgeW91IG1ha2UgYXZhaWxhYmxlLlxuXG4gICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIE1vbmdvREIsIEluYy4gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuXG5cbiAgIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UgXCJvciBhbnkgbGF0ZXIgdmVyc2lvblwiIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBudW1iZXJlZCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSBNb25nb0RCLCBJbmMuIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IE1vbmdvREIsIEluYy5cblxuICAgSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91IHRvIGNob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZSBQcm9ncmFtLlxuXG4gICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBwZXJtaXNzaW9ucy4gSG93ZXZlciwgbm8gYWRkaXRpb25hbCBvYmxpZ2F0aW9ucyBhcmUgaW1wb3NlZCBvbiBhbnkgYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYSBsYXRlciB2ZXJzaW9uLlxuXG4gICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS5cblxuICAgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNIFwiQVMgSVNcIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLlxuXG4gICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuXG5cbiAgIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuXG5cbiAgIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZCBhYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywgcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzIGFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYSBjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuIl0sImxpY2Vuc2VJZHMiOlsiU1NQTC0xLjAiXSwia2V5d29yZHMiOlsidmVyc2lvbiAxIG9jdG9iZXIiLCIxIG9jdG9iZXIgMTYiLCJvY3RvYmVyIDE2IDIwMTgiLCIxNiAyMDE4IGNvcHlyaWdodCIsIjIwMTggY29weXJpZ2h0IDIwMTgiLCJjb3B5cmlnaHQgMjAxOCBtb25nb2RiIiwiMjAxOCBtb25nb2RiIGluYyIsIm1vbmdvZGIgaW5jIGV2ZXJ5b25lIiwiaW5jIGV2ZXJ5b25lIGlzIiwibm90IGFsbG93ZWQgdGVybXMiLCJhbGxvd2VkIHRlcm1zIGFuZCIsInJlZmVycyB0byBzZXJ2ZXIiLCJ0byBzZXJ2ZXIgc2lkZSIsInVubW9kaWZpZWQgcHJvZ3JhbSBzdWJqZWN0Iiwic2VjdGlvbiAxMyB0aGUiLCIxMyB0aGUgb3V0cHV0IiwiY29weXJpZ2h0IGxhdyBzdWJqZWN0IiwibGF3IHN1YmplY3QgdG8iLCJzZWN0aW9uIDEzIHlvdSIsIjEzIHlvdSBtYXkiLCJjYW5ub3QgdXNlIHByb3BhZ2F0ZSIsIm5vdCB1c2UgcHJvcGFnYXRlIiwib3IgY29udmV5IGl0IiwicHJvZ3JhbSAxMyBvZmZlcmluZyIsIjEzIG9mZmVyaW5nIHRoZSIsIm9mZmVyaW5nIHRoZSBwcm9ncmFtIiwiYSBzZXJ2aWNlIGlmIiwibWFrZSB0aGUgZnVuY3Rpb25hbGl0eSIsImEgc2VydmljZSB5b3UiLCJzZXJ2aWNlIHlvdSBtdXN0IiwibWFrZSB0aGUgc2VydmljZSIsImNvZGUgYXZhaWxhYmxlIHZpYSIsImF2YWlsYWJsZSB2aWEgbmV0d29yayIsInZpYSBuZXR3b3JrIGRvd25sb2FkIiwibmV0d29yayBkb3dubG9hZCB0byIsImRvd25sb2FkIHRvIGV2ZXJ5b25lIiwidG8gZXZlcnlvbmUgYXQiLCJldmVyeW9uZSBhdCBubyIsInRoaXMgbGljZW5zZSBtYWtpbmciLCJsaWNlbnNlIG1ha2luZyB0aGUiLCJtYWtpbmcgdGhlIGZ1bmN0aW9uYWxpdHkiLCJhIHNlcnZpY2UgaW5jbHVkZXMiLCJzZXJ2aWNlIGluY2x1ZGVzIHdpdGhvdXQiLCJ3aXRob3V0IGxpbWl0YXRpb24gZW5hYmxpbmciLCJsaW1pdGF0aW9uIGVuYWJsaW5nIHRoaXJkIiwiZW5hYmxpbmcgdGhpcmQgcGFydGllcyIsInBhcnRpZXMgdG8gaW50ZXJhY3QiLCJpbnRlcmFjdCB3aXRoIHRoZSIsIndpdGggdGhlIGZ1bmN0aW9uYWxpdHkiLCJtb2RpZmllZCB2ZXJzaW9uIHJlbW90ZWx5IiwidmVyc2lvbiByZW1vdGVseSB0aHJvdWdoIiwiY29tcHV0ZXIgbmV0d29yayBvZmZlcmluZyIsIm5ldHdvcmsgb2ZmZXJpbmcgYSIsImEgc2VydmljZSB0aGUiLCJzZXJ2aWNlIHRoZSB2YWx1ZSIsInZhbHVlIG9mIHdoaWNoIiwib2Ygd2hpY2ggZW50aXJlbHkiLCJ3aGljaCBlbnRpcmVseSBvciIsImVudGlyZWx5IG9yIHByaW1hcmlseSIsIm9yIHByaW1hcmlseSBkZXJpdmVzIiwicHJpbWFyaWx5IGRlcml2ZXMgZnJvbSIsImRlcml2ZXMgZnJvbSB0aGUiLCJmcm9tIHRoZSB2YWx1ZSIsInZlcnNpb24gb3Igb2ZmZXJpbmciLCJvciBvZmZlcmluZyBhIiwic2VydmljZSB0aGF0IGFjY29tcGxpc2hlcyIsInRoYXQgYWNjb21wbGlzaGVzIGZvciIsImFjY29tcGxpc2hlcyBmb3IgdXNlcnMiLCJmb3IgdXNlcnMgdGhlIiwidXNlcnMgdGhlIHByaW1hcnkiLCJ0aGUgcHJpbWFyeSBwdXJwb3NlIiwicHJpbWFyeSBwdXJwb3NlIG9mIiwibW9kaWZpZWQgdmVyc2lvbiBzZXJ2aWNlIiwidmVyc2lvbiBzZXJ2aWNlIHNvdXJjZSIsInZlcnNpb24gYW5kIHRoZSIsImZvciBhbGwgcHJvZ3JhbXMiLCJhbGwgcHJvZ3JhbXMgdGhhdCIsInByb2dyYW1zIHRoYXQgeW91IiwieW91IHVzZSB0byIsInVzZSB0byBtYWtlIiwibWFrZSB0aGUgcHJvZ3JhbSIsInZlcnNpb24gYXZhaWxhYmxlIGFzIiwiYXZhaWxhYmxlIGFzIGEiLCJ3aXRob3V0IGxpbWl0YXRpb24gbWFuYWdlbWVudCIsImxpbWl0YXRpb24gbWFuYWdlbWVudCBzb2Z0d2FyZSIsIm1hbmFnZW1lbnQgc29mdHdhcmUgdXNlciIsInNvZnR3YXJlIHVzZXIgaW50ZXJmYWNlcyIsInVzZXIgaW50ZXJmYWNlcyBhcHBsaWNhdGlvbiIsImludGVyZmFjZXMgYXBwbGljYXRpb24gcHJvZ3JhbSIsImFwcGxpY2F0aW9uIHByb2dyYW0gaW50ZXJmYWNlcyIsInByb2dyYW0gaW50ZXJmYWNlcyBhdXRvbWF0aW9uIiwiaW50ZXJmYWNlcyBhdXRvbWF0aW9uIHNvZnR3YXJlIiwiYXV0b21hdGlvbiBzb2Z0d2FyZSBtb25pdG9yaW5nIiwic29mdHdhcmUgbW9uaXRvcmluZyBzb2Z0d2FyZSIsIm1vbml0b3Jpbmcgc29mdHdhcmUgYmFja3VwIiwic29mdHdhcmUgYmFja3VwIHNvZnR3YXJlIiwiYmFja3VwIHNvZnR3YXJlIHN0b3JhZ2UiLCJzb2Z0d2FyZSBzdG9yYWdlIHNvZnR3YXJlIiwic3RvcmFnZSBzb2Z0d2FyZSBhbmQiLCJzb2Z0d2FyZSBhbmQgaG9zdGluZyIsImFuZCBob3N0aW5nIHNvZnR3YXJlIiwiaG9zdGluZyBzb2Z0d2FyZSBhbGwiLCJzb2Z0d2FyZSBhbGwgc3VjaCIsImFsbCBzdWNoIHRoYXQiLCJzdWNoIHRoYXQgYSIsInRoYXQgYSB1c2VyIiwiYSB1c2VyIGNvdWxkIiwidXNlciBjb3VsZCBydW4iLCJjb3VsZCBydW4gYW4iLCJydW4gYW4gaW5zdGFuY2UiLCJhbiBpbnN0YW5jZSBvZiIsImluc3RhbmNlIG9mIHRoZSIsIm9mIHRoZSBzZXJ2aWNlIiwidGhlIHNlcnZpY2UgdXNpbmciLCJzZXJ2aWNlIHVzaW5nIHRoZSIsInVzaW5nIHRoZSBzZXJ2aWNlIiwiY29kZSB5b3UgbWFrZSIsIm1ha2UgYXZhaWxhYmxlIDE0IiwiYXZhaWxhYmxlIDE0IHJldmlzZWQiLCJ0aGlzIGxpY2Vuc2UgbW9uZ29kYiIsImxpY2Vuc2UgbW9uZ29kYiBpbmMiLCJtb25nb2RiIGluYyBtYXkiLCJzaWRlIHB1YmxpYyBsaWNlbnNlIHZlcnNpb24iLCJsaWNlbnNlIHZlcnNpb24gMSBvY3RvYmVyIiwidmVyc2lvbiAxIG9jdG9iZXIgMTYiLCIxIG9jdG9iZXIgMTYgMjAxOCIsIm9jdG9iZXIgMTYgMjAxOCBjb3B5cmlnaHQiLCIxNiAyMDE4IGNvcHlyaWdodCAyMDE4IiwiMjAxOCBjb3B5cmlnaHQgMjAxOCBtb25nb2RiIiwiY29weXJpZ2h0IDIwMTggbW9uZ29kYiBpbmMiLCIyMDE4IG1vbmdvZGIgaW5jIGV2ZXJ5b25lIiwibW9uZ29kYiBpbmMgZXZlcnlvbmUgaXMiLCJpbmMgZXZlcnlvbmUgaXMgcGVybWl0dGVkIiwiaXMgbm90IGFsbG93ZWQgdGVybXMiLCJub3QgYWxsb3dlZCB0ZXJtcyBhbmQiLCJhbGxvd2VkIHRlcm1zIGFuZCBjb25kaXRpb25zIiwibGljZW5zZSByZWZlcnMgdG8gc2VydmVyIiwicmVmZXJzIHRvIHNlcnZlciBzaWRlIiwidG8gc2VydmVyIHNpZGUgcHVibGljIiwic2lkZSBwdWJsaWMgbGljZW5zZSBjb3B5cmlnaHQiLCJ0aGUgdW5tb2RpZmllZCBwcm9ncmFtIHN1YmplY3QiLCJ1bm1vZGlmaWVkIHByb2dyYW0gc3ViamVjdCB0byIsInByb2dyYW0gc3ViamVjdCB0byBzZWN0aW9uIiwidG8gc2VjdGlvbiAxMyB0aGUiLCJzZWN0aW9uIDEzIHRoZSBvdXRwdXQiLCIxMyB0aGUgb3V0cHV0IGZyb20iLCJieSBjb3B5cmlnaHQgbGF3IHN1YmplY3QiLCJjb3B5cmlnaHQgbGF3IHN1YmplY3QgdG8iLCJsYXcgc3ViamVjdCB0byBzZWN0aW9uIiwidG8gc2VjdGlvbiAxMyB5b3UiLCJzZWN0aW9uIDEzIHlvdSBtYXkiLCIxMyB5b3UgbWF5IG1ha2UiLCJpZiB5b3UgY2Fubm90IHVzZSIsInlvdSBjYW5ub3QgdXNlIHByb3BhZ2F0ZSIsImNhbm5vdCB1c2UgcHJvcGFnYXRlIG9yIiwicHJvcGFnYXRlIG9yIGNvbnZleSBhIiwib3IgY29udmV5IGEgY292ZXJlZCIsIm1heSBub3QgdXNlIHByb3BhZ2F0ZSIsIm5vdCB1c2UgcHJvcGFnYXRlIG9yIiwicHJvcGFnYXRlIG9yIGNvbnZleSBpdCIsIm9yIGNvbnZleSBpdCBhdCIsInRoZSBwcm9ncmFtIDEzIG9mZmVyaW5nIiwicHJvZ3JhbSAxMyBvZmZlcmluZyB0aGUiLCIxMyBvZmZlcmluZyB0aGUgcHJvZ3JhbSIsIm9mZmVyaW5nIHRoZSBwcm9ncmFtIGFzIiwidGhlIHByb2dyYW0gYXMgYSIsInByb2dyYW0gYXMgYSBzZXJ2aWNlIiwiYXMgYSBzZXJ2aWNlIGlmIiwiYSBzZXJ2aWNlIGlmIHlvdSIsInNlcnZpY2UgaWYgeW91IG1ha2UiLCJ5b3UgbWFrZSB0aGUgZnVuY3Rpb25hbGl0eSIsIm1ha2UgdGhlIGZ1bmN0aW9uYWxpdHkgb2YiLCJwcm9ncmFtIG9yIGEgbW9kaWZpZWQiLCJhIG1vZGlmaWVkIHZlcnNpb24gYXZhaWxhYmxlIiwiYXMgYSBzZXJ2aWNlIHlvdSIsImEgc2VydmljZSB5b3UgbXVzdCIsInNlcnZpY2UgeW91IG11c3QgbWFrZSIsIm11c3QgbWFrZSB0aGUgc2VydmljZSIsIm1ha2UgdGhlIHNlcnZpY2Ugc291cmNlIiwic2VydmljZSBzb3VyY2UgY29kZSBhdmFpbGFibGUiLCJzb3VyY2UgY29kZSBhdmFpbGFibGUgdmlhIiwiY29kZSBhdmFpbGFibGUgdmlhIG5ldHdvcmsiLCJhdmFpbGFibGUgdmlhIG5ldHdvcmsgZG93bmxvYWQiLCJ2aWEgbmV0d29yayBkb3dubG9hZCB0byIsIm5ldHdvcmsgZG93bmxvYWQgdG8gZXZlcnlvbmUiLCJkb3dubG9hZCB0byBldmVyeW9uZSBhdCIsInRvIGV2ZXJ5b25lIGF0IG5vIiwiZXZlcnlvbmUgYXQgbm8gY2hhcmdlIiwibm8gY2hhcmdlIHVuZGVyIHRoZSIsIm9mIHRoaXMgbGljZW5zZSBtYWtpbmciLCJ0aGlzIGxpY2Vuc2UgbWFraW5nIHRoZSIsImxpY2Vuc2UgbWFraW5nIHRoZSBmdW5jdGlvbmFsaXR5IiwibWFraW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIiwiYXMgYSBzZXJ2aWNlIGluY2x1ZGVzIiwiYSBzZXJ2aWNlIGluY2x1ZGVzIHdpdGhvdXQiLCJzZXJ2aWNlIGluY2x1ZGVzIHdpdGhvdXQgbGltaXRhdGlvbiIsImluY2x1ZGVzIHdpdGhvdXQgbGltaXRhdGlvbiBlbmFibGluZyIsIndpdGhvdXQgbGltaXRhdGlvbiBlbmFibGluZyB0aGlyZCIsImxpbWl0YXRpb24gZW5hYmxpbmcgdGhpcmQgcGFydGllcyIsImVuYWJsaW5nIHRoaXJkIHBhcnRpZXMgdG8iXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIGF1dGhvcnMgaGVyZWJ5IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBsaWNlbnNlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhhdCBleGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcyBhcmUgcmV0YWluZWQgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCB0aGlzIG5vdGljZSBpcyBpbmNsdWRlZCB2ZXJiYXRpbSBpbiBhbnkgZGlzdHJpYnV0aW9ucy4gTm8gd3JpdHRlbiBhZ3JlZW1lbnQsIGxpY2Vuc2UsIG9yIHJveWFsdHkgZmVlIGlzIHJlcXVpcmVkIGZvciBhbnkgb2YgdGhlIGF1dGhvcml6ZWQgdXNlcy4gTW9kaWZpY2F0aW9ucyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSBjb3B5cmlnaHRlZCBieSB0aGVpciBhdXRob3JzIGFuZCBuZWVkIG5vdCBmb2xsb3cgdGhlIGxpY2Vuc2luZyB0ZXJtcyBkZXNjcmliZWQgaGVyZSwgcHJvdmlkZWQgdGhhdCB0aGUgbmV3IHRlcm1zIGFyZSBjbGVhcmx5IGluZGljYXRlZCBvbiB0aGUgZmlyc3QgcGFnZSBvZiBlYWNoIGZpbGUgd2hlcmUgdGhleSBhcHBseS5cblxuSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgRElTVFJJQlVUT1JTIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIElUUyBET0NVTUVOVEFUSU9OLCBPUiBBTlkgREVSSVZBVElWRVMgVEhFUkVPRiwgRVZFTiBJRiBUSEUgQVVUSE9SUyBIQVZFIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIFRIRSBBVVRIT1JTIEFORCBESVNUUklCVVRPUlMgU1BFQ0lGSUNBTExZIERJU0NMQUlNIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIEFORCBUSEUgQVVUSE9SUyBBTkQgRElTVFJJQlVUT1JTIEhBVkUgTk8gT0JMSUdBVElPTiBUTyBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuXG5cbkdPVkVSTk1FTlQgVVNFOiBJZiB5b3UgYXJlIGFjcXVpcmluZyB0aGlzIHNvZnR3YXJlIG9uIGJlaGFsZiBvZiB0aGUgVS5TLiBnb3Zlcm5tZW50LCB0aGUgR292ZXJubWVudCBzaGFsbCBoYXZlIG9ubHkgXCJSZXN0cmljdGVkIFJpZ2h0c1wiIGluIHRoZSBzb2Z0d2FyZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFzIGRlZmluZWQgaW4gdGhlIEZlZGVyYWwgQWNxdWlzaXRpb24gUmVndWxhdGlvbnMgKEZBUnMpIGluIENsYXVzZSA1Mi4yMjcuMTkgKGMpICgyKS4gSWYgeW91IGFyZSBhY3F1aXJpbmcgdGhlIHNvZnR3YXJlIG9uIGJlaGFsZiBvZiB0aGUgRGVwYXJ0bWVudCBvZiBEZWZlbnNlLCB0aGUgc29mdHdhcmUgc2hhbGwgYmUgY2xhc3NpZmllZCBhcyBcIkNvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmVcIiBhbmQgdGhlIEdvdmVybm1lbnQgc2hhbGwgaGF2ZSBvbmx5IFwiUmVzdHJpY3RlZCBSaWdodHNcIiBhcyBkZWZpbmVkIGluIENsYXVzZSAyNTIuMjI3LTcwMTMgKGMpICgxKSBvZiBERkFScy4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHRoZSBhdXRob3JzIGdyYW50IHRoZSBVLlMuIEdvdmVybm1lbnQgYW5kIG90aGVycyBhY3RpbmcgaW4gaXRzIGJlaGFsZiBwZXJtaXNzaW9uIHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLlxuXG5CWSBJTlNUQUxMSU5HIFRISVMgU09GVFdBUkUsIFlPVSBBQ0tOT1dMRURHRSBUSEFUIFlPVSBIQVZFIFJFQUQgVEhJUyBBR1JFRU1FTlQsIFRIQVQgWU9VIFVOREVSU1RBTkQgSVQsIEFORCBUSEFUIFlPVSBBR1JFRSBUTyBCRSBCT1VORCBCWSBJVFMgVEVSTVMgQU5EIENPTkRJVElPTlMuIl0sImxpY2Vuc2VJZHMiOlsiU1dMIl0sImtleXdvcmRzIjpbImxpY2Vuc2UgYnkgaW5zdGFsbGluZyIsImJ5IGluc3RhbGxpbmcgdGhpcyIsImluc3RhbGxpbmcgdGhpcyBzb2Z0d2FyZSIsInNvZnR3YXJlIHlvdSBhY2tub3dsZWRnZSIsImFja25vd2xlZGdlIHRoYXQgeW91IiwiaGF2ZSByZWFkIHRoaXMiLCJyZWFkIHRoaXMgYWdyZWVtZW50IiwidGhpcyBhZ3JlZW1lbnQgdGhhdCIsImFncmVlbWVudCB0aGF0IHlvdSIsInlvdSB1bmRlcnN0YW5kIGl0IiwidW5kZXJzdGFuZCBpdCBhbmQiLCJ0aGF0IHlvdSBhZ3JlZSIsImJvdW5kIGJ5IGl0cyIsImJ5IGl0cyB0ZXJtcyIsImluIHRoaXMgbGljZW5zZSBieSIsInRoaXMgbGljZW5zZSBieSBpbnN0YWxsaW5nIiwibGljZW5zZSBieSBpbnN0YWxsaW5nIHRoaXMiLCJieSBpbnN0YWxsaW5nIHRoaXMgc29mdHdhcmUiLCJpbnN0YWxsaW5nIHRoaXMgc29mdHdhcmUgeW91IiwidGhpcyBzb2Z0d2FyZSB5b3UgYWNrbm93bGVkZ2UiLCJzb2Z0d2FyZSB5b3UgYWNrbm93bGVkZ2UgdGhhdCIsInlvdSBhY2tub3dsZWRnZSB0aGF0IHlvdSIsImFja25vd2xlZGdlIHRoYXQgeW91IGhhdmUiLCJ5b3UgaGF2ZSByZWFkIHRoaXMiLCJoYXZlIHJlYWQgdGhpcyBhZ3JlZW1lbnQiLCJyZWFkIHRoaXMgYWdyZWVtZW50IHRoYXQiLCJ0aGlzIGFncmVlbWVudCB0aGF0IHlvdSIsImFncmVlbWVudCB0aGF0IHlvdSB1bmRlcnN0YW5kIiwidGhhdCB5b3UgdW5kZXJzdGFuZCBpdCIsInlvdSB1bmRlcnN0YW5kIGl0IGFuZCIsInVuZGVyc3RhbmQgaXQgYW5kIHRoYXQiLCJpdCBhbmQgdGhhdCB5b3UiLCJhbmQgdGhhdCB5b3UgYWdyZWUiLCJ0aGF0IHlvdSBhZ3JlZSB0byIsInlvdSBhZ3JlZSB0byBiZSIsImJlIGJvdW5kIGJ5IGl0cyIsImJvdW5kIGJ5IGl0cyB0ZXJtcyIsImJ5IGl0cyB0ZXJtcyBhbmQiLCJzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlIGJ5IiwiaW4gdGhpcyBsaWNlbnNlIGJ5IGluc3RhbGxpbmciLCJ0aGlzIGxpY2Vuc2UgYnkgaW5zdGFsbGluZyB0aGlzIiwibGljZW5zZSBieSBpbnN0YWxsaW5nIHRoaXMgc29mdHdhcmUiLCJieSBpbnN0YWxsaW5nIHRoaXMgc29mdHdhcmUgeW91IiwiaW5zdGFsbGluZyB0aGlzIHNvZnR3YXJlIHlvdSBhY2tub3dsZWRnZSIsInRoaXMgc29mdHdhcmUgeW91IGFja25vd2xlZGdlIHRoYXQiLCJzb2Z0d2FyZSB5b3UgYWNrbm93bGVkZ2UgdGhhdCB5b3UiLCJ5b3UgYWNrbm93bGVkZ2UgdGhhdCB5b3UgaGF2ZSIsImFja25vd2xlZGdlIHRoYXQgeW91IGhhdmUgcmVhZCIsInRoYXQgeW91IGhhdmUgcmVhZCB0aGlzIiwieW91IGhhdmUgcmVhZCB0aGlzIGFncmVlbWVudCIsImhhdmUgcmVhZCB0aGlzIGFncmVlbWVudCB0aGF0IiwicmVhZCB0aGlzIGFncmVlbWVudCB0aGF0IHlvdSIsInRoaXMgYWdyZWVtZW50IHRoYXQgeW91IHVuZGVyc3RhbmQiLCJhZ3JlZW1lbnQgdGhhdCB5b3UgdW5kZXJzdGFuZCBpdCIsInRoYXQgeW91IHVuZGVyc3RhbmQgaXQgYW5kIiwieW91IHVuZGVyc3RhbmQgaXQgYW5kIHRoYXQiLCJ1bmRlcnN0YW5kIGl0IGFuZCB0aGF0IHlvdSIsIml0IGFuZCB0aGF0IHlvdSBhZ3JlZSIsImFuZCB0aGF0IHlvdSBhZ3JlZSB0byIsInRoYXQgeW91IGFncmVlIHRvIGJlIiwieW91IGFncmVlIHRvIGJlIGJvdW5kIiwidG8gYmUgYm91bmQgYnkgaXRzIiwiYmUgYm91bmQgYnkgaXRzIHRlcm1zIiwiYm91bmQgYnkgaXRzIHRlcm1zIGFuZCIsImJ5IGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiB3ZXJrZW4gZGlnaXRhbC5cblxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGRpc2NsYWltZXIgdGhhdCBmb2xsb3dzIHRoZXNlIGNvbmRpdGlvbnMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgIDMuIFRoZSBuYW1lIFwiU0FYUGF0aFwiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBsaWNlbnNlQHNheHBhdGgub3JnLlxuXG4gICA0LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCBcIlNBWFBhdGhcIiwgbm9yIG1heSBcIlNBWFBhdGhcIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSB0aGUgU0FYUGF0aCBQcm9qZWN0IE1hbmFnZW1lbnQgKHBtQHNheHBhdGgub3JnKS5cblxuSW4gYWRkaXRpb24sIHdlIHJlcXVlc3QgKGJ1dCBkbyBub3QgcmVxdWlyZSkgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBwcm92aWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiBhbmQvb3IgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiBhbiBhY2tub3dsZWRnZW1lbnQgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nOlxuXG5cIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFNBWFBhdGggUHJvamVjdCAoaHR0cDovL3d3dy5zYXhwYXRoLm9yZy8pLlwiXG5cbkFsdGVybmF0aXZlbHksIHRoZSBhY2tub3dsZWRnbWVudCBtYXkgYmUgZ3JhcGhpY2FsIHVzaW5nIHRoZSBsb2dvcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zYXhwYXRoLm9yZy9cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgU0FYUGF0aCBBVVRIT1JTIE9SIFRIRSBQUk9KRUNUIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iXSwibGljZW5zZUlkcyI6WyJTYXhwYXRoIl0sImtleXdvcmRzIjpbIjIwMDAgMjAwMiB3ZXJrZW4iLCIyMDAyIHdlcmtlbiBkaWdpdGFsIiwid2Vya2VuIGRpZ2l0YWwgYWxsIiwiZGlnaXRhbCBhbGwgcmlnaHRzIiwidGhlIGRpc2NsYWltZXIgdGhhdCIsImRpc2NsYWltZXIgdGhhdCBmb2xsb3dzIiwidGhhdCBmb2xsb3dzIHRoZXNlIiwiZm9sbG93cyB0aGVzZSBjb25kaXRpb25zIiwidGhlc2UgY29uZGl0aW9ucyBpbiIsInRoZSBuYW1lIHNheHBhdGgiLCJuYW1lIHNheHBhdGggbXVzdCIsInNheHBhdGggbXVzdCBub3QiLCJjb250YWN0IGxpY2Vuc2Ugc2F4cGF0aCIsImxpY2Vuc2Ugc2F4cGF0aCBvcmciLCJzYXhwYXRoIG9yZyA0IiwiYmUgY2FsbGVkIHNheHBhdGgiLCJjYWxsZWQgc2F4cGF0aCBub3IiLCJzYXhwYXRoIG5vciBtYXkiLCJub3IgbWF5IHNheHBhdGgiLCJtYXkgc2F4cGF0aCBhcHBlYXIiLCJzYXhwYXRoIGFwcGVhciBpbiIsImZyb20gdGhlIHNheHBhdGgiLCJzYXhwYXRoIHByb2plY3QgbWFuYWdlbWVudCIsInByb2plY3QgbWFuYWdlbWVudCBwbSIsIm1hbmFnZW1lbnQgcG0gc2F4cGF0aCIsInBtIHNheHBhdGggb3JnIiwic2F4cGF0aCBvcmcgaW4iLCJhZGRpdGlvbiB3ZSByZXF1ZXN0Iiwid2UgcmVxdWVzdCBidXQiLCJyZXF1ZXN0IGJ1dCBkbyIsImluIHRoZSBlbmQiLCJ1c2VyIGRvY3VtZW50YXRpb24gcHJvdmlkZWQiLCJ0aGUgcmVkaXN0cmlidXRpb24gYW5kIiwicmVkaXN0cmlidXRpb24gYW5kIG9yIiwic29mdHdhcmUgaXRzZWxmIGFuIiwiaXRzZWxmIGFuIGFja25vd2xlZGdlbWVudCIsImFuIGFja25vd2xlZGdlbWVudCBlcXVpdmFsZW50IiwiYWNrbm93bGVkZ2VtZW50IGVxdWl2YWxlbnQgdG8iLCJlcXVpdmFsZW50IHRvIHRoZSIsInRoZSBmb2xsb3dpbmcgdGhpcyIsImZvbGxvd2luZyB0aGlzIHByb2R1Y3QiLCJieSB0aGUgc2F4cGF0aCIsInNheHBhdGggcHJvamVjdCBodHRwIiwic2F4cGF0aCBvcmcgYWx0ZXJuYXRpdmVseSIsIm9yZyBhbHRlcm5hdGl2ZWx5IHRoZSIsImFsdGVybmF0aXZlbHkgdGhlIGFja25vd2xlZGdtZW50IiwidGhlIGFja25vd2xlZGdtZW50IG1heSIsImFja25vd2xlZGdtZW50IG1heSBiZSIsIm1heSBiZSBncmFwaGljYWwiLCJiZSBncmFwaGljYWwgdXNpbmciLCJncmFwaGljYWwgdXNpbmcgdGhlIiwidXNpbmcgdGhlIGxvZ29zIiwidGhlIGxvZ29zIGF2YWlsYWJsZSIsInNheHBhdGggb3JnIHRoaXMiLCJzaGFsbCB0aGUgc2F4cGF0aCIsInRoZSBzYXhwYXRoIGF1dGhvcnMiLCJzYXhwYXRoIGF1dGhvcnMgb3IiLCJhdXRob3JzIG9yIHRoZSIsIm9yIHRoZSBwcm9qZWN0IiwidGhlIHByb2plY3QgY29udHJpYnV0b3JzIiwicHJvamVjdCBjb250cmlidXRvcnMgYmUiLCJjIDIwMDAgMjAwMiB3ZXJrZW4iLCIyMDAwIDIwMDIgd2Vya2VuIGRpZ2l0YWwiLCIyMDAyIHdlcmtlbiBkaWdpdGFsIGFsbCIsIndlcmtlbiBkaWdpdGFsIGFsbCByaWdodHMiLCJkaWdpdGFsIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJhbmQgdGhlIGRpc2NsYWltZXIgdGhhdCIsInRoZSBkaXNjbGFpbWVyIHRoYXQgZm9sbG93cyIsImRpc2NsYWltZXIgdGhhdCBmb2xsb3dzIHRoZXNlIiwidGhhdCBmb2xsb3dzIHRoZXNlIGNvbmRpdGlvbnMiLCJmb2xsb3dzIHRoZXNlIGNvbmRpdGlvbnMgaW4iLCJ0aGVzZSBjb25kaXRpb25zIGluIHRoZSIsIjMgdGhlIG5hbWUgc2F4cGF0aCIsInRoZSBuYW1lIHNheHBhdGggbXVzdCIsIm5hbWUgc2F4cGF0aCBtdXN0IG5vdCIsInNheHBhdGggbXVzdCBub3QgYmUiLCJwbGVhc2UgY29udGFjdCBsaWNlbnNlIHNheHBhdGgiLCJjb250YWN0IGxpY2Vuc2Ugc2F4cGF0aCBvcmciLCJsaWNlbnNlIHNheHBhdGggb3JnIDQiLCJzYXhwYXRoIG9yZyA0IHByb2R1Y3RzIiwibm90IGJlIGNhbGxlZCBzYXhwYXRoIiwiYmUgY2FsbGVkIHNheHBhdGggbm9yIiwiY2FsbGVkIHNheHBhdGggbm9yIG1heSIsInNheHBhdGggbm9yIG1heSBzYXhwYXRoIiwibm9yIG1heSBzYXhwYXRoIGFwcGVhciIsIm1heSBzYXhwYXRoIGFwcGVhciBpbiIsInNheHBhdGggYXBwZWFyIGluIHRoZWlyIiwicGVybWlzc2lvbiBmcm9tIHRoZSBzYXhwYXRoIiwiZnJvbSB0aGUgc2F4cGF0aCBwcm9qZWN0IiwidGhlIHNheHBhdGggcHJvamVjdCBtYW5hZ2VtZW50Iiwic2F4cGF0aCBwcm9qZWN0IG1hbmFnZW1lbnQgcG0iLCJwcm9qZWN0IG1hbmFnZW1lbnQgcG0gc2F4cGF0aCIsIm1hbmFnZW1lbnQgcG0gc2F4cGF0aCBvcmciLCJwbSBzYXhwYXRoIG9yZyBpbiIsInNheHBhdGggb3JnIGluIGFkZGl0aW9uIiwib3JnIGluIGFkZGl0aW9uIHdlIiwiaW4gYWRkaXRpb24gd2UgcmVxdWVzdCIsImFkZGl0aW9uIHdlIHJlcXVlc3QgYnV0Iiwid2UgcmVxdWVzdCBidXQgZG8iLCJyZXF1ZXN0IGJ1dCBkbyBub3QiLCJyZXF1aXJlIHRoYXQgeW91IGluY2x1ZGUiLCJpbmNsdWRlIGluIHRoZSBlbmQiLCJpbiB0aGUgZW5kIHVzZXIiLCJlbmQgdXNlciBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIiwidXNlciBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIHdpdGgiLCJkb2N1bWVudGF0aW9uIHByb3ZpZGVkIHdpdGggdGhlIiwicHJvdmlkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24iLCJ3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiBhbmQiLCJ0aGUgcmVkaXN0cmlidXRpb24gYW5kIG9yIiwicmVkaXN0cmlidXRpb24gYW5kIG9yIGluIiwiYW5kIG9yIGluIHRoZSIsInRoZSBzb2Z0d2FyZSBpdHNlbGYgYW4iLCJzb2Z0d2FyZSBpdHNlbGYgYW4gYWNrbm93bGVkZ2VtZW50IiwiaXRzZWxmIGFuIGFja25vd2xlZGdlbWVudCBlcXVpdmFsZW50IiwiYW4gYWNrbm93bGVkZ2VtZW50IGVxdWl2YWxlbnQgdG8iLCJhY2tub3dsZWRnZW1lbnQgZXF1aXZhbGVudCB0byB0aGUiLCJlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmciLCJ0byB0aGUgZm9sbG93aW5nIHRoaXMiLCJ0aGUgZm9sbG93aW5nIHRoaXMgcHJvZHVjdCIsImZvbGxvd2luZyB0aGlzIHByb2R1Y3QgaW5jbHVkZXMiLCJkZXZlbG9wZWQgYnkgdGhlIHNheHBhdGgiLCJieSB0aGUgc2F4cGF0aCBwcm9qZWN0IiwidGhlIHNheHBhdGggcHJvamVjdCBodHRwIiwic2F4cGF0aCBwcm9qZWN0IGh0dHAgd3d3IiwicHJvamVjdCBodHRwIHd3dyBzYXhwYXRoIiwid3d3IHNheHBhdGggb3JnIGFsdGVybmF0aXZlbHkiLCJzYXhwYXRoIG9yZyBhbHRlcm5hdGl2ZWx5IHRoZSIsIm9yZyBhbHRlcm5hdGl2ZWx5IHRoZSBhY2tub3dsZWRnbWVudCIsImFsdGVybmF0aXZlbHkgdGhlIGFja25vd2xlZGdtZW50IG1heSIsInRoZSBhY2tub3dsZWRnbWVudCBtYXkgYmUiLCJhY2tub3dsZWRnbWVudCBtYXkgYmUgZ3JhcGhpY2FsIiwibWF5IGJlIGdyYXBoaWNhbCB1c2luZyIsImJlIGdyYXBoaWNhbCB1c2luZyB0aGUiLCJncmFwaGljYWwgdXNpbmcgdGhlIGxvZ29zIiwidXNpbmcgdGhlIGxvZ29zIGF2YWlsYWJsZSIsInRoZSBsb2dvcyBhdmFpbGFibGUgYXQiLCJhdCBodHRwIHd3dyBzYXhwYXRoIiwid3d3IHNheHBhdGggb3JnIHRoaXMiLCJzYXhwYXRoIG9yZyB0aGlzIHNvZnR3YXJlIiwiZXZlbnQgc2hhbGwgdGhlIHNheHBhdGgiLCJzaGFsbCB0aGUgc2F4cGF0aCBhdXRob3JzIiwidGhlIHNheHBhdGggYXV0aG9ycyBvciIsInNheHBhdGggYXV0aG9ycyBvciB0aGUiLCJhdXRob3JzIG9yIHRoZSBwcm9qZWN0Iiwib3IgdGhlIHByb2plY3QgY29udHJpYnV0b3JzIiwidGhlIHByb2plY3QgY29udHJpYnV0b3JzIGJlIiwicHJvamVjdCBjb250cmlidXRvcnMgYmUgbGlhYmxlIiwiY29weXJpZ2h0IGMgMjAwMCAyMDAyIHdlcmtlbiIsImMgMjAwMCAyMDAyIHdlcmtlbiBkaWdpdGFsIiwiMjAwMCAyMDAyIHdlcmtlbiBkaWdpdGFsIGFsbCIsIjIwMDIgd2Vya2VuIGRpZ2l0YWwgYWxsIHJpZ2h0cyIsIndlcmtlbiBkaWdpdGFsIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJkaWdpdGFsIGFsbCByaWdodHMgcmVzZXJ2ZWQgcmVkaXN0cmlidXRpb24iLCJjb25kaXRpb25zIGFuZCB0aGUgZGlzY2xhaW1lciB0aGF0IiwiYW5kIHRoZSBkaXNjbGFpbWVyIHRoYXQgZm9sbG93cyIsInRoZSBkaXNjbGFpbWVyIHRoYXQgZm9sbG93cyB0aGVzZSIsImRpc2NsYWltZXIgdGhhdCBmb2xsb3dzIHRoZXNlIGNvbmRpdGlvbnMiLCJ0aGF0IGZvbGxvd3MgdGhlc2UgY29uZGl0aW9ucyBpbiIsImZvbGxvd3MgdGhlc2UgY29uZGl0aW9ucyBpbiB0aGUiLCJ0aGVzZSBjb25kaXRpb25zIGluIHRoZSBkb2N1bWVudGF0aW9uIiwiZGlzdHJpYnV0aW9uIDMgdGhlIG5hbWUgc2F4cGF0aCIsIjMgdGhlIG5hbWUgc2F4cGF0aCBtdXN0IiwidGhlIG5hbWUgc2F4cGF0aCBtdXN0IG5vdCIsIm5hbWUgc2F4cGF0aCBtdXN0IG5vdCBiZSIsInNheHBhdGggbXVzdCBub3QgYmUgdXNlZCIsInBlcm1pc3Npb24gcGxlYXNlIGNvbnRhY3QgbGljZW5zZSBzYXhwYXRoIiwicGxlYXNlIGNvbnRhY3QgbGljZW5zZSBzYXhwYXRoIG9yZyIsImNvbnRhY3QgbGljZW5zZSBzYXhwYXRoIG9yZyA0IiwibGljZW5zZSBzYXhwYXRoIG9yZyA0IHByb2R1Y3RzIiwic2F4cGF0aCBvcmcgNCBwcm9kdWN0cyBkZXJpdmVkIiwibWF5IG5vdCBiZSBjYWxsZWQgc2F4cGF0aCIsIm5vdCBiZSBjYWxsZWQgc2F4cGF0aCBub3IiLCJiZSBjYWxsZWQgc2F4cGF0aCBub3IgbWF5IiwiY2FsbGVkIHNheHBhdGggbm9yIG1heSBzYXhwYXRoIiwic2F4cGF0aCBub3IgbWF5IHNheHBhdGggYXBwZWFyIiwibm9yIG1heSBzYXhwYXRoIGFwcGVhciBpbiIsIm1heSBzYXhwYXRoIGFwcGVhciBpbiB0aGVpciIsInNheHBhdGggYXBwZWFyIGluIHRoZWlyIG5hbWUiLCJ3cml0dGVuIHBlcm1pc3Npb24gZnJvbSB0aGUgc2F4cGF0aCIsInBlcm1pc3Npb24gZnJvbSB0aGUgc2F4cGF0aCBwcm9qZWN0IiwiZnJvbSB0aGUgc2F4cGF0aCBwcm9qZWN0IG1hbmFnZW1lbnQiLCJ0aGUgc2F4cGF0aCBwcm9qZWN0IG1hbmFnZW1lbnQgcG0iLCJzYXhwYXRoIHByb2plY3QgbWFuYWdlbWVudCBwbSBzYXhwYXRoIiwicHJvamVjdCBtYW5hZ2VtZW50IHBtIHNheHBhdGggb3JnIiwibWFuYWdlbWVudCBwbSBzYXhwYXRoIG9yZyBpbiIsInBtIHNheHBhdGggb3JnIGluIGFkZGl0aW9uIiwic2F4cGF0aCBvcmcgaW4gYWRkaXRpb24gd2UiLCJvcmcgaW4gYWRkaXRpb24gd2UgcmVxdWVzdCIsImluIGFkZGl0aW9uIHdlIHJlcXVlc3QgYnV0IiwiYWRkaXRpb24gd2UgcmVxdWVzdCBidXQgZG8iLCJ3ZSByZXF1ZXN0IGJ1dCBkbyBub3QiLCJyZXF1ZXN0IGJ1dCBkbyBub3QgcmVxdWlyZSIsIm5vdCByZXF1aXJlIHRoYXQgeW91IGluY2x1ZGUiLCJyZXF1aXJlIHRoYXQgeW91IGluY2x1ZGUgaW4iLCJ5b3UgaW5jbHVkZSBpbiB0aGUgZW5kIiwiaW5jbHVkZSBpbiB0aGUgZW5kIHVzZXIiLCJpbiB0aGUgZW5kIHVzZXIgZG9jdW1lbnRhdGlvbiIsInRoZSBlbmQgdXNlciBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIiwiZW5kIHVzZXIgZG9jdW1lbnRhdGlvbiBwcm92aWRlZCB3aXRoIiwidXNlciBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIHdpdGggdGhlIl19LHsibGljZW5zZVRleHRzIjpbIlNFTkRNQUlMIExJQ0VOU0UgVGhlIGZvbGxvd2luZyBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGFwcGx5LCB1bmxlc3MgYSByZWRpc3RyaWJ1dGlvbiBhZ3JlZW1lbnQgb3Igb3RoZXIgbGljZW5zZSBpcyBvYnRhaW5lZCBmcm9tIFByb29mcG9pbnQsIEluYy4sIDg5MiBSb3NzIFN0cmVldCwgU3Vubnl2YWxlLCBDQSwgOTQwODksIFVTQSwgb3IgYnkgZWxlY3Ryb25pYyBtYWlsIGF0IHNlbmRtYWlsLWxpY2Vuc2VAcHJvb2Zwb2ludC5jb20uXG5cbkxpY2Vuc2UgVGVybXM6XG5cblVzZSwgTW9kaWZpY2F0aW9uIGFuZCBSZWRpc3RyaWJ1dGlvbiAoaW5jbHVkaW5nIGRpc3RyaWJ1dGlvbiBvZiBhbnkgbW9kaWZpZWQgb3IgZGVyaXZlZCB3b3JrKSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBpcyBwZXJtaXR0ZWQgb25seSBpZiBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBxdWFsaWZ5IGFzIFwiZnJlZXdhcmVcIiBvciBcIk9wZW4gU291cmNlIFNvZnR3YXJlXCIgdW5kZXIgb25lIG9mIHRoZSBmb2xsb3dpbmcgdGVybXM6XG5cbiAgIChhKSBSZWRpc3RyaWJ1dGlvbnMgYXJlIG1hZGUgYXQgbm8gY2hhcmdlIGJleW9uZCB0aGUgcmVhc29uYWJsZSBjb3N0IG9mIG1hdGVyaWFscyBhbmQgZGVsaXZlcnkuXG5cbiAgIChiKSBSZWRpc3RyaWJ1dGlvbnMgYXJlIGFjY29tcGFuaWVkIGJ5IGEgY29weSBvZiB0aGUgU291cmNlIENvZGUgb3IgYnkgYW4gaXJyZXZvY2FibGUgb2ZmZXIgdG8gcHJvdmlkZSBhIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGZvciB1cCB0byB0aHJlZSB5ZWFycyBhdCB0aGUgY29zdCBvZiBtYXRlcmlhbHMgYW5kIGRlbGl2ZXJ5LiBTdWNoIHJlZGlzdHJpYnV0aW9ucyBtdXN0IGFsbG93IGZ1cnRoZXIgdXNlLCBtb2RpZmljYXRpb24sIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU291cmNlIENvZGUgdW5kZXIgc3Vic3RhbnRpYWxseSB0aGUgc2FtZSB0ZXJtcyBhcyB0aGlzIGxpY2Vuc2UuIEZvciB0aGUgcHVycG9zZXMgb2YgcmVkaXN0cmlidXRpb24gXCJTb3VyY2UgQ29kZVwiIG1lYW5zIHRoZSBjb21wbGV0ZSBjb21waWxhYmxlIGFuZCBsaW5rYWJsZSBzb3VyY2UgY29kZSBvZiBzZW5kbWFpbCBhbmQgYXNzb2NpYXRlZCBsaWJyYXJpZXMgYW5kIHV0aWxpdGllcyBpbiB0aGUgc2VuZG1haWwgZGlzdHJpYnV0aW9uIGluY2x1ZGluZyBhbGwgbW9kaWZpY2F0aW9ucy5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIG9mIFNvdXJjZSBDb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBhcyB0aGV5IGFwcGVhciBpbiBlYWNoIFNvdXJjZSBDb2RlIGZpbGUsIHRoZXNlIGxpY2Vuc2UgdGVybXMsIGFuZCB0aGUgZGlzY2xhaW1lci9saW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzZXQgZm9ydGggYXMgcGFyYWdyYXBoIDYgYmVsb3cuXG5cbiAgIDMuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgQ29weXJpZ2h0IE5vdGljZSwgdGhlc2UgbGljZW5zZSB0ZXJtcywgYW5kIHRoZSBkaXNjbGFpbWVyL2xpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNldCBmb3J0aCBhcyBwYXJhZ3JhcGggNiBiZWxvdywgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIEZvciB0aGUgcHVycG9zZXMgb2YgYmluYXJ5IGRpc3RyaWJ1dGlvbiB0aGUgXCJDb3B5cmlnaHQgTm90aWNlXCIgcmVmZXJzIHRvIHRoZSBmb2xsb3dpbmcgbGFuZ3VhZ2U6XG5cbiAgIFwiQ29weXJpZ2h0IChjKSAxOTk4LTIwMTQgUHJvb2Zwb2ludCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlwiXG5cbiAgIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgUHJvb2Zwb2ludCwgSW5jLiBub3IgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBub3IgbmFtZXMgb2YgdGhlaXIgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gVGhlIG5hbWUgXCJzZW5kbWFpbFwiIGlzIGEgdHJhZGVtYXJrIG9mIFByb29mcG9pbnQsIEluYy5cblxuICAgNS4gQWxsIHJlZGlzdHJpYnV0aW9ucyBtdXN0IGNvbXBseSB3aXRoIHRoZSBjb25kaXRpb25zIGltcG9zZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBvbiBjZXJ0YWluIGVtYmVkZGVkIGNvZGUsIHdoaWNoIGNvcHlyaWdodCBOb3RpY2UgYW5kIGNvbmRpdGlvbnMgZm9yIHJlZGlzdHJpYnV0aW9uIGFyZSBhcyBmb2xsb3dzOlxuXG4gICAoYSkgQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbiAgIChiKSBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIChpKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgIChpaSkgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAoaWlpKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cbiAgIDYuIERpc2NsYWltZXIvTGltaXRhdGlvbiBvZiBMaWFiaWxpdHk6IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgU0VORE1BSUwsIElOQy4gQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgU0VORE1BSUwsIElOQy4sIFRIRSBSRUdFTlRTIE9GIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gJFJldmlzaW9uOiA4LjIzICQsIExhc3QgdXBkYXRlZCAkRGF0ZTogMjAxNC0wMS0yNiAyMDoxMDowMSAkLCBEb2N1bWVudCAxMzk4NDguMSJdLCJsaWNlbnNlSWRzIjpbIlNlbmRtYWlsLTguMjMiXSwia2V5d29yZHMiOlsib2J0YWluZWQgZnJvbSBwcm9vZnBvaW50IiwiZnJvbSBwcm9vZnBvaW50IGluYyIsInByb29mcG9pbnQgaW5jIDg5MiIsImluYyA4OTIgcm9zcyIsIjg5MiByb3NzIHN0cmVldCIsInJvc3Mgc3RyZWV0IHN1bm55dmFsZSIsInN0cmVldCBzdW5ueXZhbGUgY2EiLCJzdW5ueXZhbGUgY2EgOTQwODkiLCJjYSA5NDA4OSB1c2EiLCI5NDA4OSB1c2Egb3IiLCJtYWlsIGF0IHNlbmRtYWlsIiwiYXQgc2VuZG1haWwgbGljZW5zZSIsInNlbmRtYWlsIGxpY2Vuc2UgcHJvb2Zwb2ludCIsImxpY2Vuc2UgcHJvb2Zwb2ludCBjb20iLCJwcm9vZnBvaW50IGNvbSBsaWNlbnNlIiwib2Ygc2VuZG1haWwgYW5kIiwic2VuZG1haWwgYW5kIGFzc29jaWF0ZWQiLCJhbmQgYXNzb2NpYXRlZCBsaWJyYXJpZXMiLCJhc3NvY2lhdGVkIGxpYnJhcmllcyBhbmQiLCJsaWJyYXJpZXMgYW5kIHV0aWxpdGllcyIsImFuZCB1dGlsaXRpZXMgaW4iLCJ1dGlsaXRpZXMgaW4gdGhlIiwiaW4gdGhlIHNlbmRtYWlsIiwidGhlIHNlbmRtYWlsIGRpc3RyaWJ1dGlvbiIsInNlbmRtYWlsIGRpc3RyaWJ1dGlvbiBpbmNsdWRpbmciLCJkaXN0cmlidXRpb24gaW5jbHVkaW5nIGFsbCIsImMgMTk5OCAyMDE0IiwiMTk5OCAyMDE0IHByb29mcG9pbnQiLCIyMDE0IHByb29mcG9pbnQgaW5jIiwicHJvb2Zwb2ludCBpbmMgYWxsIiwibmFtZSBvZiBwcm9vZnBvaW50IiwicHJvb2Zwb2ludCBpbmMgbm9yIiwidHJhZGVtYXJrIG9mIHByb29mcG9pbnQiLCJwcm9vZnBvaW50IGluYyA1IiwicmV2aXNpb24gOCAyMyIsIjggMjMgbGFzdCIsIjIzIGxhc3QgdXBkYXRlZCIsInVwZGF0ZWQgZGF0ZSAyMDE0IiwiZGF0ZSAyMDE0IDAxIiwiMjAxNCAwMSAyNiIsIjAxIDI2IDIwIiwiMjYgMjAgMTAiLCIyMCAxMCAwMSIsIjEwIDAxIGRvY3VtZW50IiwiMDEgZG9jdW1lbnQgMTM5ODQ4IiwiaXMgb2J0YWluZWQgZnJvbSBwcm9vZnBvaW50Iiwib2J0YWluZWQgZnJvbSBwcm9vZnBvaW50IGluYyIsImZyb20gcHJvb2Zwb2ludCBpbmMgODkyIiwicHJvb2Zwb2ludCBpbmMgODkyIHJvc3MiLCJpbmMgODkyIHJvc3Mgc3RyZWV0IiwiODkyIHJvc3Mgc3RyZWV0IHN1bm55dmFsZSIsInJvc3Mgc3RyZWV0IHN1bm55dmFsZSBjYSIsInN0cmVldCBzdW5ueXZhbGUgY2EgOTQwODkiLCJzdW5ueXZhbGUgY2EgOTQwODkgdXNhIiwiY2EgOTQwODkgdXNhIG9yIiwiOTQwODkgdXNhIG9yIGJ5IiwiZWxlY3Ryb25pYyBtYWlsIGF0IHNlbmRtYWlsIiwibWFpbCBhdCBzZW5kbWFpbCBsaWNlbnNlIiwiYXQgc2VuZG1haWwgbGljZW5zZSBwcm9vZnBvaW50Iiwic2VuZG1haWwgbGljZW5zZSBwcm9vZnBvaW50IGNvbSIsImxpY2Vuc2UgcHJvb2Zwb2ludCBjb20gbGljZW5zZSIsInByb29mcG9pbnQgY29tIGxpY2Vuc2UgdGVybXMiLCJjb2RlIG9mIHNlbmRtYWlsIGFuZCIsIm9mIHNlbmRtYWlsIGFuZCBhc3NvY2lhdGVkIiwic2VuZG1haWwgYW5kIGFzc29jaWF0ZWQgbGlicmFyaWVzIiwiYW5kIGFzc29jaWF0ZWQgbGlicmFyaWVzIGFuZCIsImFzc29jaWF0ZWQgbGlicmFyaWVzIGFuZCB1dGlsaXRpZXMiLCJsaWJyYXJpZXMgYW5kIHV0aWxpdGllcyBpbiIsImFuZCB1dGlsaXRpZXMgaW4gdGhlIiwidXRpbGl0aWVzIGluIHRoZSBzZW5kbWFpbCIsImluIHRoZSBzZW5kbWFpbCBkaXN0cmlidXRpb24iLCJ0aGUgc2VuZG1haWwgZGlzdHJpYnV0aW9uIGluY2x1ZGluZyIsInNlbmRtYWlsIGRpc3RyaWJ1dGlvbiBpbmNsdWRpbmcgYWxsIiwiZGlzdHJpYnV0aW9uIGluY2x1ZGluZyBhbGwgbW9kaWZpY2F0aW9ucyIsImNvcHlyaWdodCBjIDE5OTggMjAxNCIsImMgMTk5OCAyMDE0IHByb29mcG9pbnQiLCIxOTk4IDIwMTQgcHJvb2Zwb2ludCBpbmMiLCIyMDE0IHByb29mcG9pbnQgaW5jIGFsbCIsInByb29mcG9pbnQgaW5jIGFsbCByaWdodHMiLCJ0aGUgbmFtZSBvZiBwcm9vZnBvaW50IiwibmFtZSBvZiBwcm9vZnBvaW50IGluYyIsIm9mIHByb29mcG9pbnQgaW5jIG5vciIsInByb29mcG9pbnQgaW5jIG5vciB0aGUiLCJhIHRyYWRlbWFyayBvZiBwcm9vZnBvaW50IiwidHJhZGVtYXJrIG9mIHByb29mcG9pbnQgaW5jIiwib2YgcHJvb2Zwb2ludCBpbmMgNSIsInByb29mcG9pbnQgaW5jIDUgYWxsIiwiZGFtYWdlcyByZXZpc2lvbiA4IDIzIiwicmV2aXNpb24gOCAyMyBsYXN0IiwiOCAyMyBsYXN0IHVwZGF0ZWQiLCIyMyBsYXN0IHVwZGF0ZWQgZGF0ZSIsImxhc3QgdXBkYXRlZCBkYXRlIDIwMTQiLCJ1cGRhdGVkIGRhdGUgMjAxNCAwMSIsImRhdGUgMjAxNCAwMSAyNiIsIjIwMTQgMDEgMjYgMjAiLCIwMSAyNiAyMCAxMCIsIjI2IDIwIDEwIDAxIiwiMjAgMTAgMDEgZG9jdW1lbnQiLCIxMCAwMSBkb2N1bWVudCAxMzk4NDgiLCIwMSBkb2N1bWVudCAxMzk4NDggMSIsImxpY2Vuc2UgaXMgb2J0YWluZWQgZnJvbSBwcm9vZnBvaW50IiwiaXMgb2J0YWluZWQgZnJvbSBwcm9vZnBvaW50IGluYyIsIm9idGFpbmVkIGZyb20gcHJvb2Zwb2ludCBpbmMgODkyIiwiZnJvbSBwcm9vZnBvaW50IGluYyA4OTIgcm9zcyIsInByb29mcG9pbnQgaW5jIDg5MiByb3NzIHN0cmVldCIsImluYyA4OTIgcm9zcyBzdHJlZXQgc3Vubnl2YWxlIiwiODkyIHJvc3Mgc3RyZWV0IHN1bm55dmFsZSBjYSIsInJvc3Mgc3RyZWV0IHN1bm55dmFsZSBjYSA5NDA4OSIsInN0cmVldCBzdW5ueXZhbGUgY2EgOTQwODkgdXNhIiwic3Vubnl2YWxlIGNhIDk0MDg5IHVzYSBvciIsImNhIDk0MDg5IHVzYSBvciBieSIsIjk0MDg5IHVzYSBvciBieSBlbGVjdHJvbmljIiwiYnkgZWxlY3Ryb25pYyBtYWlsIGF0IHNlbmRtYWlsIiwiZWxlY3Ryb25pYyBtYWlsIGF0IHNlbmRtYWlsIGxpY2Vuc2UiLCJtYWlsIGF0IHNlbmRtYWlsIGxpY2Vuc2UgcHJvb2Zwb2ludCIsImF0IHNlbmRtYWlsIGxpY2Vuc2UgcHJvb2Zwb2ludCBjb20iLCJzZW5kbWFpbCBsaWNlbnNlIHByb29mcG9pbnQgY29tIGxpY2Vuc2UiLCJsaWNlbnNlIHByb29mcG9pbnQgY29tIGxpY2Vuc2UgdGVybXMiLCJwcm9vZnBvaW50IGNvbSBsaWNlbnNlIHRlcm1zIHVzZSIsInNvdXJjZSBjb2RlIG9mIHNlbmRtYWlsIGFuZCIsImNvZGUgb2Ygc2VuZG1haWwgYW5kIGFzc29jaWF0ZWQiLCJvZiBzZW5kbWFpbCBhbmQgYXNzb2NpYXRlZCBsaWJyYXJpZXMiLCJzZW5kbWFpbCBhbmQgYXNzb2NpYXRlZCBsaWJyYXJpZXMgYW5kIiwiYW5kIGFzc29jaWF0ZWQgbGlicmFyaWVzIGFuZCB1dGlsaXRpZXMiLCJhc3NvY2lhdGVkIGxpYnJhcmllcyBhbmQgdXRpbGl0aWVzIGluIiwibGlicmFyaWVzIGFuZCB1dGlsaXRpZXMgaW4gdGhlIiwiYW5kIHV0aWxpdGllcyBpbiB0aGUgc2VuZG1haWwiLCJ1dGlsaXRpZXMgaW4gdGhlIHNlbmRtYWlsIGRpc3RyaWJ1dGlvbiIsImluIHRoZSBzZW5kbWFpbCBkaXN0cmlidXRpb24gaW5jbHVkaW5nIiwidGhlIHNlbmRtYWlsIGRpc3RyaWJ1dGlvbiBpbmNsdWRpbmcgYWxsIiwic2VuZG1haWwgZGlzdHJpYnV0aW9uIGluY2x1ZGluZyBhbGwgbW9kaWZpY2F0aW9ucyIsImRpc3RyaWJ1dGlvbiBpbmNsdWRpbmcgYWxsIG1vZGlmaWNhdGlvbnMgMiIsImxhbmd1YWdlIGNvcHlyaWdodCBjIDE5OTggMjAxNCIsImNvcHlyaWdodCBjIDE5OTggMjAxNCBwcm9vZnBvaW50IiwiYyAxOTk4IDIwMTQgcHJvb2Zwb2ludCBpbmMiLCIxOTk4IDIwMTQgcHJvb2Zwb2ludCBpbmMgYWxsIiwiMjAxNCBwcm9vZnBvaW50IGluYyBhbGwgcmlnaHRzIiwicHJvb2Zwb2ludCBpbmMgYWxsIHJpZ2h0cyByZXNlcnZlZCIsIm5laXRoZXIgdGhlIG5hbWUgb2YgcHJvb2Zwb2ludCIsInRoZSBuYW1lIG9mIHByb29mcG9pbnQgaW5jIiwibmFtZSBvZiBwcm9vZnBvaW50IGluYyBub3IiLCJvZiBwcm9vZnBvaW50IGluYyBub3IgdGhlIiwicHJvb2Zwb2ludCBpbmMgbm9yIHRoZSB1bml2ZXJzaXR5IiwiaXMgYSB0cmFkZW1hcmsgb2YgcHJvb2Zwb2ludCIsImEgdHJhZGVtYXJrIG9mIHByb29mcG9pbnQgaW5jIiwidHJhZGVtYXJrIG9mIHByb29mcG9pbnQgaW5jIDUiLCJvZiBwcm9vZnBvaW50IGluYyA1IGFsbCIsInByb29mcG9pbnQgaW5jIDUgYWxsIHJlZGlzdHJpYnV0aW9ucyIsInN1Y2ggZGFtYWdlcyByZXZpc2lvbiA4IDIzIiwiZGFtYWdlcyByZXZpc2lvbiA4IDIzIGxhc3QiLCJyZXZpc2lvbiA4IDIzIGxhc3QgdXBkYXRlZCIsIjggMjMgbGFzdCB1cGRhdGVkIGRhdGUiLCIyMyBsYXN0IHVwZGF0ZWQgZGF0ZSAyMDE0IiwibGFzdCB1cGRhdGVkIGRhdGUgMjAxNCAwMSIsInVwZGF0ZWQgZGF0ZSAyMDE0IDAxIDI2IiwiZGF0ZSAyMDE0IDAxIDI2IDIwIiwiMjAxNCAwMSAyNiAyMCAxMCIsIjAxIDI2IDIwIDEwIDAxIiwiMjYgMjAgMTAgMDEgZG9jdW1lbnQiLCIyMCAxMCAwMSBkb2N1bWVudCAxMzk4NDgiLCIxMCAwMSBkb2N1bWVudCAxMzk4NDggMSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJTRU5ETUFJTCBMSUNFTlNFIFRoZSBmb2xsb3dpbmcgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcHBseSwgdW5sZXNzIGEgcmVkaXN0cmlidXRpb24gYWdyZWVtZW50IG9yIG90aGVyIGxpY2Vuc2UgaXMgb2J0YWluZWQgZnJvbSBTZW5kbWFpbCwgSW5jLiwgNjQ3NSBDaHJpc3RpZSBBdmUsIFRoaXJkIEZsb29yLCBFbWVyeXZpbGxlLCBDQSA5NDYwOCwgVVNBLCBvciBieSBlbGVjdHJvbmljIG1haWwgYXQgbGljZW5zZUBzZW5kbWFpbC5jb20uXG5cbkxpY2Vuc2UgVGVybXM6XG5cblVzZSwgTW9kaWZpY2F0aW9uIGFuZCBSZWRpc3RyaWJ1dGlvbiAoaW5jbHVkaW5nIGRpc3RyaWJ1dGlvbiBvZiBhbnkgbW9kaWZpZWQgb3IgZGVyaXZlZCB3b3JrKSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBpcyBwZXJtaXR0ZWQgb25seSBpZiBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBxdWFsaWZ5IGFzIFwiZnJlZXdhcmVcIiBvciBcIk9wZW4gU291cmNlIFNvZnR3YXJlXCIgdW5kZXIgb25lIG9mIHRoZSBmb2xsb3dpbmcgdGVybXM6XG5cbiAgIChhKSBSZWRpc3RyaWJ1dGlvbnMgYXJlIG1hZGUgYXQgbm8gY2hhcmdlIGJleW9uZCB0aGUgcmVhc29uYWJsZSBjb3N0IG9mIG1hdGVyaWFscyBhbmQgZGVsaXZlcnkuXG5cbiAgIChiKSBSZWRpc3RyaWJ1dGlvbnMgYXJlIGFjY29tcGFuaWVkIGJ5IGEgY29weSBvZiB0aGUgU291cmNlIENvZGUgb3IgYnkgYW4gaXJyZXZvY2FibGUgb2ZmZXIgdG8gcHJvdmlkZSBhIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGZvciB1cCB0byB0aHJlZSB5ZWFycyBhdCB0aGUgY29zdCBvZiBtYXRlcmlhbHMgYW5kIGRlbGl2ZXJ5LiBTdWNoIHJlZGlzdHJpYnV0aW9ucyBtdXN0IGFsbG93IGZ1cnRoZXIgdXNlLCBtb2RpZmljYXRpb24sIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU291cmNlIENvZGUgdW5kZXIgc3Vic3RhbnRpYWxseSB0aGUgc2FtZSB0ZXJtcyBhcyB0aGlzIGxpY2Vuc2UuIEZvciB0aGUgcHVycG9zZXMgb2YgcmVkaXN0cmlidXRpb24gXCJTb3VyY2UgQ29kZVwiIG1lYW5zIHRoZSBjb21wbGV0ZSBjb21waWxhYmxlIGFuZCBsaW5rYWJsZSBzb3VyY2UgY29kZSBvZiBzZW5kbWFpbCBpbmNsdWRpbmcgYWxsIG1vZGlmaWNhdGlvbnMuXG5cbiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBvZiBTb3VyY2UgQ29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZXMgYXMgdGhleSBhcHBlYXIgaW4gZWFjaCBTb3VyY2UgQ29kZSBmaWxlLCB0aGVzZSBsaWNlbnNlIHRlcm1zLCBhbmQgdGhlIGRpc2NsYWltZXIvbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2V0IGZvcnRoIGFzIHBhcmFncmFwaCA2IGJlbG93LlxuXG4gICAzLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIENvcHlyaWdodCBOb3RpY2UsIHRoZXNlIGxpY2Vuc2UgdGVybXMsIGFuZCB0aGUgZGlzY2xhaW1lci9saW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzZXQgZm9ydGggYXMgcGFyYWdyYXBoIDYgYmVsb3csIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiBGb3IgdGhlIHB1cnBvc2VzIG9mIGJpbmFyeSBkaXN0cmlidXRpb24gdGhlIFwiQ29weXJpZ2h0IE5vdGljZVwiIHJlZmVycyB0byB0aGUgZm9sbG93aW5nIGxhbmd1YWdlOlxuXG4gICBcIkNvcHlyaWdodCAoYykgMTk5OC0yMDEwIFNlbmRtYWlsLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXCJcblxuICAgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBTZW5kbWFpbCwgSW5jLiBub3IgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBub3IgbmFtZXMgb2YgdGhlaXIgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gVGhlIG5hbWUgXCJzZW5kbWFpbFwiIGlzIGEgdHJhZGVtYXJrIG9mIFNlbmRtYWlsLCBJbmMuXG5cbiAgIDUuIEFsbCByZWRpc3RyaWJ1dGlvbnMgbXVzdCBjb21wbHkgd2l0aCB0aGUgY29uZGl0aW9ucyBpbXBvc2VkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgb24gY2VydGFpbiBlbWJlZGRlZCBjb2RlLCB3aGljaCBjb3B5cmlnaHQgTm90aWNlIGFuZCBjb25kaXRpb25zIGZvciByZWRpc3RyaWJ1dGlvbiBhcmUgYXMgZm9sbG93czpcblxuICAgKGEpIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MyBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG4gICAoYikgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAoaSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAoaWkpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgKGlpaSkgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG4gICA2LiBEaXNjbGFpbWVyL0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5OiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFNFTkRNQUlMLCBJTkMuIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFNFTkRNQUlMLCBJTkMuLCBUSEUgUkVHRU5UUyBPRiBUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuICRSZXZpc2lvbjogOC4xNiAkLCBMYXN0IHVwZGF0ZWQgJERhdGU6IDIwMTAvMTAvMjUgMjM6MTE6MTkgJCwgRG9jdW1lbnQgMTM5ODQ4LjEiXSwibGljZW5zZUlkcyI6WyJTZW5kbWFpbCJdLCJrZXl3b3JkcyI6WyJvYnRhaW5lZCBmcm9tIHNlbmRtYWlsIiwiZnJvbSBzZW5kbWFpbCBpbmMiLCJzZW5kbWFpbCBpbmMgNjQ3NSIsImluYyA2NDc1IGNocmlzdGllIiwiNjQ3NSBjaHJpc3RpZSBhdmUiLCJjaHJpc3RpZSBhdmUgdGhpcmQiLCJhdmUgdGhpcmQgZmxvb3IiLCJ0aGlyZCBmbG9vciBlbWVyeXZpbGxlIiwiZmxvb3IgZW1lcnl2aWxsZSBjYSIsImVtZXJ5dmlsbGUgY2EgOTQ2MDgiLCJjYSA5NDYwOCB1c2EiLCI5NDYwOCB1c2Egb3IiLCJtYWlsIGF0IGxpY2Vuc2UiLCJhdCBsaWNlbnNlIHNlbmRtYWlsIiwibGljZW5zZSBzZW5kbWFpbCBjb20iLCJzZW5kbWFpbCBjb20gbGljZW5zZSIsIm9mIHNlbmRtYWlsIGluY2x1ZGluZyIsInNlbmRtYWlsIGluY2x1ZGluZyBhbGwiLCJjIDE5OTggMjAxMCIsIjE5OTggMjAxMCBzZW5kbWFpbCIsIjIwMTAgc2VuZG1haWwgaW5jIiwic2VuZG1haWwgaW5jIGFsbCIsIm5hbWUgb2Ygc2VuZG1haWwiLCJzZW5kbWFpbCBpbmMgbm9yIiwidHJhZGVtYXJrIG9mIHNlbmRtYWlsIiwic2VuZG1haWwgaW5jIDUiLCJyZXZpc2lvbiA4IDE2IiwiOCAxNiBsYXN0IiwiMTYgbGFzdCB1cGRhdGVkIiwidXBkYXRlZCBkYXRlIDIwMTAiLCJkYXRlIDIwMTAgMTAiLCIyMDEwIDEwIDI1IiwiMTAgMjUgMjMiLCIyNSAyMyAxMSIsIjIzIDExIDE5IiwiMTEgMTkgZG9jdW1lbnQiLCIxOSBkb2N1bWVudCAxMzk4NDgiLCJpcyBvYnRhaW5lZCBmcm9tIHNlbmRtYWlsIiwib2J0YWluZWQgZnJvbSBzZW5kbWFpbCBpbmMiLCJmcm9tIHNlbmRtYWlsIGluYyA2NDc1Iiwic2VuZG1haWwgaW5jIDY0NzUgY2hyaXN0aWUiLCJpbmMgNjQ3NSBjaHJpc3RpZSBhdmUiLCI2NDc1IGNocmlzdGllIGF2ZSB0aGlyZCIsImNocmlzdGllIGF2ZSB0aGlyZCBmbG9vciIsImF2ZSB0aGlyZCBmbG9vciBlbWVyeXZpbGxlIiwidGhpcmQgZmxvb3IgZW1lcnl2aWxsZSBjYSIsImZsb29yIGVtZXJ5dmlsbGUgY2EgOTQ2MDgiLCJlbWVyeXZpbGxlIGNhIDk0NjA4IHVzYSIsImNhIDk0NjA4IHVzYSBvciIsIjk0NjA4IHVzYSBvciBieSIsImVsZWN0cm9uaWMgbWFpbCBhdCBsaWNlbnNlIiwibWFpbCBhdCBsaWNlbnNlIHNlbmRtYWlsIiwiYXQgbGljZW5zZSBzZW5kbWFpbCBjb20iLCJsaWNlbnNlIHNlbmRtYWlsIGNvbSBsaWNlbnNlIiwic2VuZG1haWwgY29tIGxpY2Vuc2UgdGVybXMiLCJjb2RlIG9mIHNlbmRtYWlsIGluY2x1ZGluZyIsIm9mIHNlbmRtYWlsIGluY2x1ZGluZyBhbGwiLCJzZW5kbWFpbCBpbmNsdWRpbmcgYWxsIG1vZGlmaWNhdGlvbnMiLCJjb3B5cmlnaHQgYyAxOTk4IDIwMTAiLCJjIDE5OTggMjAxMCBzZW5kbWFpbCIsIjE5OTggMjAxMCBzZW5kbWFpbCBpbmMiLCIyMDEwIHNlbmRtYWlsIGluYyBhbGwiLCJzZW5kbWFpbCBpbmMgYWxsIHJpZ2h0cyIsInRoZSBuYW1lIG9mIHNlbmRtYWlsIiwibmFtZSBvZiBzZW5kbWFpbCBpbmMiLCJvZiBzZW5kbWFpbCBpbmMgbm9yIiwic2VuZG1haWwgaW5jIG5vciB0aGUiLCJhIHRyYWRlbWFyayBvZiBzZW5kbWFpbCIsInRyYWRlbWFyayBvZiBzZW5kbWFpbCBpbmMiLCJvZiBzZW5kbWFpbCBpbmMgNSIsInNlbmRtYWlsIGluYyA1IGFsbCIsImRhbWFnZXMgcmV2aXNpb24gOCAxNiIsInJldmlzaW9uIDggMTYgbGFzdCIsIjggMTYgbGFzdCB1cGRhdGVkIiwiMTYgbGFzdCB1cGRhdGVkIGRhdGUiLCJsYXN0IHVwZGF0ZWQgZGF0ZSAyMDEwIiwidXBkYXRlZCBkYXRlIDIwMTAgMTAiLCJkYXRlIDIwMTAgMTAgMjUiLCIyMDEwIDEwIDI1IDIzIiwiMTAgMjUgMjMgMTEiLCIyNSAyMyAxMSAxOSIsIjIzIDExIDE5IGRvY3VtZW50IiwiMTEgMTkgZG9jdW1lbnQgMTM5ODQ4IiwiMTkgZG9jdW1lbnQgMTM5ODQ4IDEiLCJsaWNlbnNlIGlzIG9idGFpbmVkIGZyb20gc2VuZG1haWwiLCJpcyBvYnRhaW5lZCBmcm9tIHNlbmRtYWlsIGluYyIsIm9idGFpbmVkIGZyb20gc2VuZG1haWwgaW5jIDY0NzUiLCJmcm9tIHNlbmRtYWlsIGluYyA2NDc1IGNocmlzdGllIiwic2VuZG1haWwgaW5jIDY0NzUgY2hyaXN0aWUgYXZlIiwiaW5jIDY0NzUgY2hyaXN0aWUgYXZlIHRoaXJkIiwiNjQ3NSBjaHJpc3RpZSBhdmUgdGhpcmQgZmxvb3IiLCJjaHJpc3RpZSBhdmUgdGhpcmQgZmxvb3IgZW1lcnl2aWxsZSIsImF2ZSB0aGlyZCBmbG9vciBlbWVyeXZpbGxlIGNhIiwidGhpcmQgZmxvb3IgZW1lcnl2aWxsZSBjYSA5NDYwOCIsImZsb29yIGVtZXJ5dmlsbGUgY2EgOTQ2MDggdXNhIiwiZW1lcnl2aWxsZSBjYSA5NDYwOCB1c2Egb3IiLCJjYSA5NDYwOCB1c2Egb3IgYnkiLCI5NDYwOCB1c2Egb3IgYnkgZWxlY3Ryb25pYyIsImJ5IGVsZWN0cm9uaWMgbWFpbCBhdCBsaWNlbnNlIiwiZWxlY3Ryb25pYyBtYWlsIGF0IGxpY2Vuc2Ugc2VuZG1haWwiLCJtYWlsIGF0IGxpY2Vuc2Ugc2VuZG1haWwgY29tIiwiYXQgbGljZW5zZSBzZW5kbWFpbCBjb20gbGljZW5zZSIsImxpY2Vuc2Ugc2VuZG1haWwgY29tIGxpY2Vuc2UgdGVybXMiLCJzZW5kbWFpbCBjb20gbGljZW5zZSB0ZXJtcyB1c2UiLCJzb3VyY2UgY29kZSBvZiBzZW5kbWFpbCBpbmNsdWRpbmciLCJjb2RlIG9mIHNlbmRtYWlsIGluY2x1ZGluZyBhbGwiLCJvZiBzZW5kbWFpbCBpbmNsdWRpbmcgYWxsIG1vZGlmaWNhdGlvbnMiLCJzZW5kbWFpbCBpbmNsdWRpbmcgYWxsIG1vZGlmaWNhdGlvbnMgMiIsImxhbmd1YWdlIGNvcHlyaWdodCBjIDE5OTggMjAxMCIsImNvcHlyaWdodCBjIDE5OTggMjAxMCBzZW5kbWFpbCIsImMgMTk5OCAyMDEwIHNlbmRtYWlsIGluYyIsIjE5OTggMjAxMCBzZW5kbWFpbCBpbmMgYWxsIiwiMjAxMCBzZW5kbWFpbCBpbmMgYWxsIHJpZ2h0cyIsInNlbmRtYWlsIGluYyBhbGwgcmlnaHRzIHJlc2VydmVkIiwibmVpdGhlciB0aGUgbmFtZSBvZiBzZW5kbWFpbCIsInRoZSBuYW1lIG9mIHNlbmRtYWlsIGluYyIsIm5hbWUgb2Ygc2VuZG1haWwgaW5jIG5vciIsIm9mIHNlbmRtYWlsIGluYyBub3IgdGhlIiwic2VuZG1haWwgaW5jIG5vciB0aGUgdW5pdmVyc2l0eSIsImlzIGEgdHJhZGVtYXJrIG9mIHNlbmRtYWlsIiwiYSB0cmFkZW1hcmsgb2Ygc2VuZG1haWwgaW5jIiwidHJhZGVtYXJrIG9mIHNlbmRtYWlsIGluYyA1Iiwib2Ygc2VuZG1haWwgaW5jIDUgYWxsIiwic2VuZG1haWwgaW5jIDUgYWxsIHJlZGlzdHJpYnV0aW9ucyIsInN1Y2ggZGFtYWdlcyByZXZpc2lvbiA4IDE2IiwiZGFtYWdlcyByZXZpc2lvbiA4IDE2IGxhc3QiLCJyZXZpc2lvbiA4IDE2IGxhc3QgdXBkYXRlZCIsIjggMTYgbGFzdCB1cGRhdGVkIGRhdGUiLCIxNiBsYXN0IHVwZGF0ZWQgZGF0ZSAyMDEwIiwibGFzdCB1cGRhdGVkIGRhdGUgMjAxMCAxMCIsInVwZGF0ZWQgZGF0ZSAyMDEwIDEwIDI1IiwiZGF0ZSAyMDEwIDEwIDI1IDIzIiwiMjAxMCAxMCAyNSAyMyAxMSIsIjEwIDI1IDIzIDExIDE5IiwiMjUgMjMgMTEgMTkgZG9jdW1lbnQiLCIyMyAxMSAxOSBkb2N1bWVudCAxMzk4NDgiLCIxMSAxOSBkb2N1bWVudCAxMzk4NDggMSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJTaW1wbGUgUHVibGljIExpY2Vuc2UgKFNpbVBMKSBQcmVhbWJsZVxuXG5UaGlzIFNpbXBsZSBQdWJsaWMgTGljZW5zZSAyLjAgKFNpbVBMIDIuMCBmb3Igc2hvcnQpIGlzIGEgcGxhaW4gbGFuZ3VhZ2UgaW1wbGVtZW50YXRpb24gb2YgR1BMIDIuMC4gVGhlIHdvcmRzIGFyZSBkaWZmZXJlbnQsIGJ1dCB0aGUgZ29hbCBpcyB0aGUgc2FtZSAtIHRvIGd1YXJhbnRlZSBmb3IgYWxsIHVzZXJzIHRoZSBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2Ugc29mdHdhcmUuIElmIGFueW9uZSB3b25kZXJzIGFib3V0IHRoZSBtZWFuaW5nIG9mIHRoZSBTaW1QTCwgdGhleSBzaG91bGQgaW50ZXJwcmV0IGl0IGFzIGNvbnNpc3RlbnQgd2l0aCBHUEwgMi4wLiBTaW1wbGUgUHVibGljIExpY2Vuc2UgKFNpbVBMKSAyLjBcblxuVGhlIFNpbVBMIGFwcGxpZXMgdG8gdGhlIHNvZnR3YXJlJ3Mgc291cmNlIGFuZCBvYmplY3QgY29kZSBhbmQgY29tZXMgd2l0aCBhbnkgcmlnaHRzIHRoYXQgSSBoYXZlIGluIGl0IChvdGhlciB0aGFuIHRyYWRlbWFya3MpLiBZb3UgYWdyZWUgdG8gdGhlIFNpbVBMIGJ5IGNvcHlpbmcsIGRpc3RyaWJ1dGluZywgb3IgbWFraW5nIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBzb2Z0d2FyZS5cblxuWW91IGdldCB0aGUgcm95YWx0eSBmcmVlIHJpZ2h0IHRvOlxuXG4gICAtIFVzZSB0aGUgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlO1xuXG4gICAtIE1ha2UgZGVyaXZhdGl2ZSB3b3JrcyBvZiBpdCAodGhpcyBpcyBjYWxsZWQgYSBcIkRlcml2ZWQgV29ya1wiKTtcblxuICAgLSBDb3B5IGFuZCBkaXN0cmlidXRlIGl0IGFuZCBhbnkgRGVyaXZlZCBXb3JrLlxuXG5JZiB5b3UgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgb3IgYSBEZXJpdmVkIFdvcmssIHlvdSBtdXN0IGdpdmUgYmFjayB0byB0aGUgY29tbXVuaXR5IGJ5OlxuXG4gICAtIFByb21pbmVudGx5IG5vdGluZyB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlcyB5b3UgbWFrZTtcblxuICAgLSBMZWF2aW5nIG90aGVyIHBlb3BsZSdzIGNvcHlyaWdodCBub3RpY2VzLCB3YXJyYW50eSBkaXNjbGFpbWVycywgYW5kIGxpY2Vuc2UgdGVybXMgaW4gcGxhY2U7XG5cbiAgIC0gUHJvdmlkaW5nIHRoZSBzb3VyY2UgY29kZSwgYnVpbGQgc2NyaXB0cywgaW5zdGFsbGF0aW9uIHNjcmlwdHMsIGFuZCBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgaW4gYSBmb3JtIHRoYXQgaXMgZWFzeSB0byBnZXQgYW5kIGJlc3QgdG8gbW9kaWZ5O1xuXG4gICAtIExpY2Vuc2luZyBpdCB0byBldmVyeW9uZSB1bmRlciBTaW1QTCwgb3Igc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRlcm1zIChzdWNoIGFzIEdQTCAyLjApLCB3aXRob3V0IGFkZGluZyBmdXJ0aGVyIHJlc3RyaWN0aW9ucyB0byB0aGUgcmlnaHRzIHByb3ZpZGVkO1xuXG4gICAtIENvbnNwaWN1b3VzbHkgYW5ub3VuY2luZyB0aGF0IGl0IGlzIGF2YWlsYWJsZSB1bmRlciB0aGF0IGxpY2Vuc2UuXG5cblRoZXJlIGFyZSBzb21lIHRoaW5ncyB0aGF0IHlvdSBtdXN0IHNob3VsZGVyOlxuXG4gICAtIFlvdSBnZXQgTk8gV0FSUkFOVElFUy4gTm9uZSBvZiBhbnkga2luZDtcblxuICAgLSBJZiB0aGUgc29mdHdhcmUgZGFtYWdlcyB5b3UgaW4gYW55IHdheSwgeW91IG1heSBvbmx5IHJlY292ZXIgZGlyZWN0IGRhbWFnZXMgdXAgdG8gdGhlIGFtb3VudCB5b3UgcGFpZCBmb3IgaXQgKHRoYXQgaXMgemVybyBpZiB5b3UgZGlkIG5vdCBwYXkgYW55dGhpbmcpLiBZb3UgbWF5IG5vdCByZWNvdmVyIGFueSBvdGhlciBkYW1hZ2VzLCBpbmNsdWRpbmcgdGhvc2UgY2FsbGVkIFwiY29uc2VxdWVudGlhbCBkYW1hZ2VzLlwiIChUaGUgc3RhdGUgb3IgY291bnRyeSB3aGVyZSB5b3UgbGl2ZSBtYXkgbm90IGFsbG93IHlvdSB0byBsaW1pdCB5b3VyIGxpYWJpbGl0eSBpbiB0aGlzIHdheSwgc28gdGhpcyBtYXkgbm90IGFwcGx5IHRvIHlvdSk7XG5cblRoZSBTaW1QTCBjb250aW51ZXMgcGVycGV0dWFsbHksIGV4Y2VwdCB0aGF0IHlvdXIgbGljZW5zZSByaWdodHMgZW5kIGF1dG9tYXRpY2FsbHkgaWY6XG5cbiAgIC0gWW91IGRvIG5vdCBhYmlkZSBieSB0aGUgXCJnaXZlIGJhY2sgdG8gdGhlIGNvbW11bml0eVwiIHRlcm1zICh5b3VyIGxpY2Vuc2VlcyBnZXQgdG8ga2VlcCB0aGVpciByaWdodHMgaWYgdGhleSBhYmlkZSk7XG5cbiAgIC0gQW55b25lIHByZXZlbnRzIHlvdSBmcm9tIGRpc3RyaWJ1dGluZyB0aGUgc29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBTaW1QTC5cblxuTGljZW5zZSBmb3IgdGhlIExpY2Vuc2VcblxuWW91IG1heSBkbyBhbnl0aGluZyB0aGF0IHlvdSB3YW50IHdpdGggdGhlIFNpbVBMIHRleHQ7IGl0J3MgYSBsaWNlbnNlIGZvcm0gdG8gdXNlIGluIGFueSB3YXkgdGhhdCB5b3UgZmluZCBoZWxwZnVsLiBUbyBhdm9pZCBjb25mdXNpb24sIGhvd2V2ZXIsIGlmIHlvdSBjaGFuZ2UgdGhlIHRlcm1zIGluIGFueSB3YXkgdGhlbiB5b3UgbWF5IG5vdCBjYWxsIHlvdXIgbGljZW5zZSB0aGUgU2ltcGxlIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBTaW1QTCAoYnV0IGZlZWwgZnJlZSB0byBhY2tub3dsZWRnZSB0aGF0IHlvdXIgbGljZW5zZSBpcyBcImJhc2VkIG9uIHRoZSBTaW1wbGUgUHVibGljIExpY2Vuc2VcIikuIl0sImxpY2Vuc2VJZHMiOlsiU2ltUEwtMi4wIl0sImtleXdvcmRzIjpbImxpY2Vuc2Ugc2ltcGwgcHJlYW1ibGUiLCJzaW1wbCBwcmVhbWJsZSB0aGlzIiwicHJlYW1ibGUgdGhpcyBzaW1wbGUiLCJ0aGlzIHNpbXBsZSBwdWJsaWMiLCIyIDAgc2ltcGwiLCIwIHNpbXBsIDIiLCIwIGZvciBzaG9ydCIsImZvciBzaG9ydCBpcyIsInNob3J0IGlzIGEiLCJpcyBhIHBsYWluIiwiYSBwbGFpbiBsYW5ndWFnZSIsInBsYWluIGxhbmd1YWdlIGltcGxlbWVudGF0aW9uIiwibGFuZ3VhZ2UgaW1wbGVtZW50YXRpb24gb2YiLCJpbXBsZW1lbnRhdGlvbiBvZiBncGwiLCJvZiBncGwgMiIsIjAgdGhlIHdvcmRzIiwidGhlIHdvcmRzIGFyZSIsIndvcmRzIGFyZSBkaWZmZXJlbnQiLCJhcmUgZGlmZmVyZW50IGJ1dCIsImRpZmZlcmVudCBidXQgdGhlIiwiYnV0IHRoZSBnb2FsIiwiZ29hbCBpcyB0aGUiLCJ0aGUgc2FtZSB0byIsInNhbWUgdG8gZ3VhcmFudGVlIiwidG8gZ3VhcmFudGVlIGZvciIsImd1YXJhbnRlZSBmb3IgYWxsIiwiYWxsIHVzZXJzIHRoZSIsInVzZXJzIHRoZSBmcmVlZG9tIiwiYW5kIGNoYW5nZSBzb2Z0d2FyZSIsImNoYW5nZSBzb2Z0d2FyZSBpZiIsInNvZnR3YXJlIGlmIGFueW9uZSIsImlmIGFueW9uZSB3b25kZXJzIiwiYW55b25lIHdvbmRlcnMgYWJvdXQiLCJ3b25kZXJzIGFib3V0IHRoZSIsImFib3V0IHRoZSBtZWFuaW5nIiwibWVhbmluZyBvZiB0aGUiLCJ0aGUgc2ltcGwgdGhleSIsInNpbXBsIHRoZXkgc2hvdWxkIiwidGhleSBzaG91bGQgaW50ZXJwcmV0Iiwic2hvdWxkIGludGVycHJldCBpdCIsImludGVycHJldCBpdCBhcyIsIml0IGFzIGNvbnNpc3RlbnQiLCJhcyBjb25zaXN0ZW50IHdpdGgiLCJjb25zaXN0ZW50IHdpdGggZ3BsIiwid2l0aCBncGwgMiIsIjIgMCBzaW1wbGUiLCIwIHNpbXBsZSBwdWJsaWMiLCJsaWNlbnNlIHNpbXBsIDIiLCIwIHRoZSBzaW1wbCIsInRoZSBzaW1wbCBhcHBsaWVzIiwic2ltcGwgYXBwbGllcyB0byIsInNvZnR3YXJlIHMgc291cmNlIiwicyBzb3VyY2UgYW5kIiwiY29kZSBhbmQgY29tZXMiLCJhbmQgY29tZXMgd2l0aCIsImNvbWVzIHdpdGggYW55Iiwid2l0aCBhbnkgcmlnaHRzIiwicmlnaHRzIHRoYXQgaSIsInRoYXQgaSBoYXZlIiwiaSBoYXZlIGluIiwiaGF2ZSBpbiBpdCIsImluIGl0IG90aGVyIiwib3RoZXIgdGhhbiB0cmFkZW1hcmtzIiwidGhhbiB0cmFkZW1hcmtzIHlvdSIsInRyYWRlbWFya3MgeW91IGFncmVlIiwidG8gdGhlIHNpbXBsIiwidGhlIHNpbXBsIGJ5Iiwic2ltcGwgYnkgY29weWluZyIsIm9yIG1ha2luZyBhIiwibWFraW5nIGEgZGVyaXZhdGl2ZSIsInNvZnR3YXJlIHlvdSBnZXQiLCJnZXQgdGhlIHJveWFsdHkiLCJ0aGUgcm95YWx0eSBmcmVlIiwiZnJlZSByaWdodCB0byIsImFueSBwdXJwb3NlIG1ha2UiLCJwdXJwb3NlIG1ha2UgZGVyaXZhdGl2ZSIsIndvcmtzIG9mIGl0Iiwib2YgaXQgdGhpcyIsIml0IHRoaXMgaXMiLCJ0aGlzIGlzIGNhbGxlZCIsImNhbGxlZCBhIGRlcml2ZWQiLCJkZXJpdmVkIHdvcmsgY29weSIsIndvcmsgY29weSBhbmQiLCJkaXN0cmlidXRlIGl0IGFuZCIsImFuZCBhbnkgZGVyaXZlZCIsInNvZnR3YXJlIG9yIGEiLCJtdXN0IGdpdmUgYmFjayIsInRoZSBjb21tdW5pdHkgYnkiLCJjb21tdW5pdHkgYnkgcHJvbWluZW50bHkiLCJieSBwcm9taW5lbnRseSBub3RpbmciLCJwcm9taW5lbnRseSBub3RpbmcgdGhlIiwibm90aW5nIHRoZSBkYXRlIiwiYW55IGNoYW5nZXMgeW91IiwiY2hhbmdlcyB5b3UgbWFrZSIsInlvdSBtYWtlIGxlYXZpbmciLCJtYWtlIGxlYXZpbmcgb3RoZXIiLCJsZWF2aW5nIG90aGVyIHBlb3BsZSIsIm90aGVyIHBlb3BsZSBzIiwicGVvcGxlIHMgY29weXJpZ2h0IiwicyBjb3B5cmlnaHQgbm90aWNlcyIsImNvcHlyaWdodCBub3RpY2VzIHdhcnJhbnR5Iiwibm90aWNlcyB3YXJyYW50eSBkaXNjbGFpbWVycyIsIndhcnJhbnR5IGRpc2NsYWltZXJzIGFuZCIsImRpc2NsYWltZXJzIGFuZCBsaWNlbnNlIiwiYW5kIGxpY2Vuc2UgdGVybXMiLCJ0ZXJtcyBpbiBwbGFjZSIsImluIHBsYWNlIHByb3ZpZGluZyIsInBsYWNlIHByb3ZpZGluZyB0aGUiLCJidWlsZCBzY3JpcHRzIGluc3RhbGxhdGlvbiIsInNjcmlwdHMgaW5zdGFsbGF0aW9uIHNjcmlwdHMiLCJpbnN0YWxsYXRpb24gc2NyaXB0cyBhbmQiLCJzY3JpcHRzIGFuZCBpbnRlcmZhY2UiLCJhbmQgaW50ZXJmYWNlIGRlZmluaXRpb25zIiwiaW50ZXJmYWNlIGRlZmluaXRpb25zIGluIiwiZGVmaW5pdGlvbnMgaW4gYSIsInRoYXQgaXMgZWFzeSIsImlzIGVhc3kgdG8iLCJlYXN5IHRvIGdldCIsInRvIGdldCBhbmQiLCJnZXQgYW5kIGJlc3QiLCJhbmQgYmVzdCB0byIsImJlc3QgdG8gbW9kaWZ5IiwidG8gbW9kaWZ5IGxpY2Vuc2luZyIsIm1vZGlmeSBsaWNlbnNpbmcgaXQiLCJsaWNlbnNpbmcgaXQgdG8iLCJpdCB0byBldmVyeW9uZSIsInRvIGV2ZXJ5b25lIHVuZGVyIiwiZXZlcnlvbmUgdW5kZXIgc2ltcGwiLCJ1bmRlciBzaW1wbCBvciIsInNpbXBsIG9yIHN1YnN0YW50aWFsbHkiLCJvciBzdWJzdGFudGlhbGx5IHNpbWlsYXIiLCJzdWJzdGFudGlhbGx5IHNpbWlsYXIgdGVybXMiLCJzaW1pbGFyIHRlcm1zIHN1Y2giLCJ0ZXJtcyBzdWNoIGFzIiwic3VjaCBhcyBncGwiLCJhcyBncGwgMiIsIjIgMCB3aXRob3V0IiwiMCB3aXRob3V0IGFkZGluZyIsIndpdGhvdXQgYWRkaW5nIGZ1cnRoZXIiLCJhZGRpbmcgZnVydGhlciByZXN0cmljdGlvbnMiLCJmdXJ0aGVyIHJlc3RyaWN0aW9ucyB0byIsInRoZSByaWdodHMgcHJvdmlkZWQiLCJyaWdodHMgcHJvdmlkZWQgY29uc3BpY3VvdXNseSIsInByb3ZpZGVkIGNvbnNwaWN1b3VzbHkgYW5ub3VuY2luZyIsImNvbnNwaWN1b3VzbHkgYW5ub3VuY2luZyB0aGF0IiwiYW5ub3VuY2luZyB0aGF0IGl0IiwidGhhdCBsaWNlbnNlIHRoZXJlIiwibGljZW5zZSB0aGVyZSBhcmUiLCJ0aGVyZSBhcmUgc29tZSIsImFyZSBzb21lIHRoaW5ncyIsInNvbWUgdGhpbmdzIHRoYXQiLCJ0aGluZ3MgdGhhdCB5b3UiLCJ5b3UgbXVzdCBzaG91bGRlciIsIm11c3Qgc2hvdWxkZXIgeW91Iiwic2hvdWxkZXIgeW91IGdldCIsInlvdSBnZXQgbm8iLCJnZXQgbm8gd2FycmFudGllcyIsIm5vIHdhcnJhbnRpZXMgbm9uZSIsIndhcnJhbnRpZXMgbm9uZSBvZiIsIm5vbmUgb2YgYW55IiwiYW55IGtpbmQgaWYiLCJraW5kIGlmIHRoZSIsInRoZSBzb2Z0d2FyZSBkYW1hZ2VzIiwic29mdHdhcmUgZGFtYWdlcyB5b3UiLCJkYW1hZ2VzIHlvdSBpbiIsIndheSB5b3UgbWF5IiwibWF5IG9ubHkgcmVjb3ZlciIsIm9ubHkgcmVjb3ZlciBkaXJlY3QiLCJyZWNvdmVyIGRpcmVjdCBkYW1hZ2VzIiwiZGlyZWN0IGRhbWFnZXMgdXAiLCJkYW1hZ2VzIHVwIHRvIiwidG8gdGhlIGFtb3VudCIsInRoZSBhbW91bnQgeW91IiwiYW1vdW50IHlvdSBwYWlkIiwieW91IHBhaWQgZm9yIiwicGFpZCBmb3IgaXQiLCJmb3IgaXQgdGhhdCIsIml0IHRoYXQgaXMiLCJ0aGF0IGlzIHplcm8iLCJpcyB6ZXJvIGlmIiwiemVybyBpZiB5b3UiLCJpZiB5b3UgZGlkIiwieW91IGRpZCBub3QiLCJkaWQgbm90IHBheSIsIm5vdCBwYXkgYW55dGhpbmciLCJwYXkgYW55dGhpbmcgeW91IiwiYW55dGhpbmcgeW91IG1heSIsIm1heSBub3QgcmVjb3ZlciIsIm5vdCByZWNvdmVyIGFueSIsInJlY292ZXIgYW55IG90aGVyIiwiZGFtYWdlcyBpbmNsdWRpbmcgdGhvc2UiLCJpbmNsdWRpbmcgdGhvc2UgY2FsbGVkIiwidGhvc2UgY2FsbGVkIGNvbnNlcXVlbnRpYWwiLCJjYWxsZWQgY29uc2VxdWVudGlhbCBkYW1hZ2VzIiwiY29uc2VxdWVudGlhbCBkYW1hZ2VzIHRoZSIsImRhbWFnZXMgdGhlIHN0YXRlIiwidGhlIHN0YXRlIG9yIiwic3RhdGUgb3IgY291bnRyeSIsIm9yIGNvdW50cnkgd2hlcmUiLCJjb3VudHJ5IHdoZXJlIHlvdSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgU2xlZXB5Y2F0IExpY2Vuc2UgQ29weXJpZ2h0IChjKSAxOTkwLTE5OTkgU2xlZXB5Y2F0IFNvZnR3YXJlLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYW55IGZvcm0gbXVzdCBiZSBhY2NvbXBhbmllZCBieSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gb2J0YWluIGNvbXBsZXRlIHNvdXJjZSBjb2RlIGZvciB0aGUgREIgc29mdHdhcmUgYW5kIGFueSBhY2NvbXBhbnlpbmcgc29mdHdhcmUgdGhhdCB1c2VzIHRoZSBEQiBzb2Z0d2FyZS4gVGhlIHNvdXJjZSBjb2RlIG11c3QgZWl0aGVyIGJlIGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24gb3IgYmUgYXZhaWxhYmxlIGZvciBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uIHBsdXMgYSBub21pbmFsIGZlZSwgYW5kIG11c3QgYmUgZnJlZWx5IHJlZGlzdHJpYnV0YWJsZSB1bmRlciByZWFzb25hYmxlIGNvbmRpdGlvbnMuIEZvciBhbiBleGVjdXRhYmxlIGZpbGUsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMuIEl0IGRvZXMgbm90IGluY2x1ZGUgc291cmNlIGNvZGUgZm9yIG1vZHVsZXMgb3IgZmlsZXMgdGhhdCB0eXBpY2FsbHkgYWNjb21wYW55IHRoZSBtYWpvciBjb21wb25lbnRzIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIGZpbGUgcnVucy5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBTTEVFUFlDQVQgU09GVFdBUkUgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIE5PTi1JTkZSSU5HRU1FTlQsIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBTTEVFUFlDQVQgU09GVFdBUkUgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MywgMTk5NCwgMTk5NSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiBDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYgVGhlIFByZXNpZGVudCBhbmQgRmVsbG93cyBvZiBIYXJ2YXJkIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBIQVJWQVJEIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBIQVJWQVJEIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIl0sImxpY2Vuc2VJZHMiOlsiU2xlZXB5Y2F0Il0sImtleXdvcmRzIjpbInRoZSBzbGVlcHljYXQgbGljZW5zZSIsInNsZWVweWNhdCBsaWNlbnNlIGNvcHlyaWdodCIsImMgMTk5MCAxOTk5IiwiMTk5MCAxOTk5IHNsZWVweWNhdCIsIjE5OTkgc2xlZXB5Y2F0IHNvZnR3YXJlIiwic2xlZXB5Y2F0IHNvZnR3YXJlIGFsbCIsImZvciB0aGUgZGIiLCJkYiBzb2Z0d2FyZSBhbmQiLCJ1c2VzIHRoZSBkYiIsImRiIHNvZnR3YXJlIHRoZSIsInByb3ZpZGVkIGJ5IHNsZWVweWNhdCIsImJ5IHNsZWVweWNhdCBzb2Z0d2FyZSIsInNsZWVweWNhdCBzb2Z0d2FyZSBhcyIsImV2ZW50IHNoYWxsIHNsZWVweWNhdCIsInNoYWxsIHNsZWVweWNhdCBzb2Z0d2FyZSIsInNsZWVweWNhdCBzb2Z0d2FyZSBiZSIsImMgMTk5MCAxOTkzIiwiMTk5MCAxOTkzIDE5OTQiLCIxOTkzIDE5OTQgMTk5NSIsIjE5OTQgMTk5NSB0aGUiLCIxOTk1IHRoZSByZWdlbnRzIiwiMTk5NSAxOTk2IHRoZSIsIjE5OTYgdGhlIHByZXNpZGVudCIsInRoZSBwcmVzaWRlbnQgYW5kIiwicHJlc2lkZW50IGFuZCBmZWxsb3dzIiwiYW5kIGZlbGxvd3Mgb2YiLCJmZWxsb3dzIG9mIGhhcnZhcmQiLCJvZiBoYXJ2YXJkIHVuaXZlcnNpdHkiLCJoYXJ2YXJkIHVuaXZlcnNpdHkgYWxsIiwicHJvdmlkZWQgYnkgaGFydmFyZCIsImJ5IGhhcnZhcmQgYW5kIiwiaGFydmFyZCBhbmQgaXRzIiwiZXZlbnQgc2hhbGwgaGFydmFyZCIsInNoYWxsIGhhcnZhcmQgb3IiLCJoYXJ2YXJkIG9yIGl0cyIsInRoZSBzbGVlcHljYXQgbGljZW5zZSBjb3B5cmlnaHQiLCJzbGVlcHljYXQgbGljZW5zZSBjb3B5cmlnaHQgYyIsImNvcHlyaWdodCBjIDE5OTAgMTk5OSIsImMgMTk5MCAxOTk5IHNsZWVweWNhdCIsIjE5OTAgMTk5OSBzbGVlcHljYXQgc29mdHdhcmUiLCIxOTk5IHNsZWVweWNhdCBzb2Z0d2FyZSBhbGwiLCJzbGVlcHljYXQgc29mdHdhcmUgYWxsIHJpZ2h0cyIsImNvZGUgZm9yIHRoZSBkYiIsImZvciB0aGUgZGIgc29mdHdhcmUiLCJ0aGUgZGIgc29mdHdhcmUgYW5kIiwiZGIgc29mdHdhcmUgYW5kIGFueSIsInRoYXQgdXNlcyB0aGUgZGIiLCJ1c2VzIHRoZSBkYiBzb2Z0d2FyZSIsInRoZSBkYiBzb2Z0d2FyZSB0aGUiLCJkYiBzb2Z0d2FyZSB0aGUgc291cmNlIiwiaXMgcHJvdmlkZWQgYnkgc2xlZXB5Y2F0IiwicHJvdmlkZWQgYnkgc2xlZXB5Y2F0IHNvZnR3YXJlIiwiYnkgc2xlZXB5Y2F0IHNvZnR3YXJlIGFzIiwic2xlZXB5Y2F0IHNvZnR3YXJlIGFzIGlzIiwibm8gZXZlbnQgc2hhbGwgc2xlZXB5Y2F0IiwiZXZlbnQgc2hhbGwgc2xlZXB5Y2F0IHNvZnR3YXJlIiwic2hhbGwgc2xlZXB5Y2F0IHNvZnR3YXJlIGJlIiwic2xlZXB5Y2F0IHNvZnR3YXJlIGJlIGxpYWJsZSIsImRhbWFnZSBjb3B5cmlnaHQgYyAxOTkwIiwiY29weXJpZ2h0IGMgMTk5MCAxOTkzIiwiYyAxOTkwIDE5OTMgMTk5NCIsIjE5OTAgMTk5MyAxOTk0IDE5OTUiLCIxOTkzIDE5OTQgMTk5NSB0aGUiLCIxOTk0IDE5OTUgdGhlIHJlZ2VudHMiLCIxOTk1IHRoZSByZWdlbnRzIG9mIiwiZGFtYWdlIGNvcHlyaWdodCBjIDE5OTUiLCJjIDE5OTUgMTk5NiB0aGUiLCIxOTk1IDE5OTYgdGhlIHByZXNpZGVudCIsIjE5OTYgdGhlIHByZXNpZGVudCBhbmQiLCJ0aGUgcHJlc2lkZW50IGFuZCBmZWxsb3dzIiwicHJlc2lkZW50IGFuZCBmZWxsb3dzIG9mIiwiYW5kIGZlbGxvd3Mgb2YgaGFydmFyZCIsImZlbGxvd3Mgb2YgaGFydmFyZCB1bml2ZXJzaXR5Iiwib2YgaGFydmFyZCB1bml2ZXJzaXR5IGFsbCIsImhhcnZhcmQgdW5pdmVyc2l0eSBhbGwgcmlnaHRzIiwiaXMgcHJvdmlkZWQgYnkgaGFydmFyZCIsInByb3ZpZGVkIGJ5IGhhcnZhcmQgYW5kIiwiYnkgaGFydmFyZCBhbmQgaXRzIiwiaGFydmFyZCBhbmQgaXRzIGNvbnRyaWJ1dG9ycyIsIm5vIGV2ZW50IHNoYWxsIGhhcnZhcmQiLCJldmVudCBzaGFsbCBoYXJ2YXJkIG9yIiwic2hhbGwgaGFydmFyZCBvciBpdHMiLCJoYXJ2YXJkIG9yIGl0cyBjb250cmlidXRvcnMiLCJ0aGUgc2xlZXB5Y2F0IGxpY2Vuc2UgY29weXJpZ2h0IGMiLCJzbGVlcHljYXQgbGljZW5zZSBjb3B5cmlnaHQgYyAxOTkwIiwibGljZW5zZSBjb3B5cmlnaHQgYyAxOTkwIDE5OTkiLCJjb3B5cmlnaHQgYyAxOTkwIDE5OTkgc2xlZXB5Y2F0IiwiYyAxOTkwIDE5OTkgc2xlZXB5Y2F0IHNvZnR3YXJlIiwiMTk5MCAxOTk5IHNsZWVweWNhdCBzb2Z0d2FyZSBhbGwiLCIxOTk5IHNsZWVweWNhdCBzb2Z0d2FyZSBhbGwgcmlnaHRzIiwic2xlZXB5Y2F0IHNvZnR3YXJlIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJzb3VyY2UgY29kZSBmb3IgdGhlIGRiIiwiY29kZSBmb3IgdGhlIGRiIHNvZnR3YXJlIiwiZm9yIHRoZSBkYiBzb2Z0d2FyZSBhbmQiLCJ0aGUgZGIgc29mdHdhcmUgYW5kIGFueSIsImRiIHNvZnR3YXJlIGFuZCBhbnkgYWNjb21wYW55aW5nIiwic29mdHdhcmUgdGhhdCB1c2VzIHRoZSBkYiIsInRoYXQgdXNlcyB0aGUgZGIgc29mdHdhcmUiLCJ1c2VzIHRoZSBkYiBzb2Z0d2FyZSB0aGUiLCJ0aGUgZGIgc29mdHdhcmUgdGhlIHNvdXJjZSIsImRiIHNvZnR3YXJlIHRoZSBzb3VyY2UgY29kZSIsInNvZnR3YXJlIGlzIHByb3ZpZGVkIGJ5IHNsZWVweWNhdCIsImlzIHByb3ZpZGVkIGJ5IHNsZWVweWNhdCBzb2Z0d2FyZSIsInByb3ZpZGVkIGJ5IHNsZWVweWNhdCBzb2Z0d2FyZSBhcyIsImJ5IHNsZWVweWNhdCBzb2Z0d2FyZSBhcyBpcyIsInNsZWVweWNhdCBzb2Z0d2FyZSBhcyBpcyBhbmQiLCJpbiBubyBldmVudCBzaGFsbCBzbGVlcHljYXQiLCJubyBldmVudCBzaGFsbCBzbGVlcHljYXQgc29mdHdhcmUiLCJldmVudCBzaGFsbCBzbGVlcHljYXQgc29mdHdhcmUgYmUiLCJzaGFsbCBzbGVlcHljYXQgc29mdHdhcmUgYmUgbGlhYmxlIiwic2xlZXB5Y2F0IHNvZnR3YXJlIGJlIGxpYWJsZSBmb3IiLCJzdWNoIGRhbWFnZSBjb3B5cmlnaHQgYyAxOTkwIiwiZGFtYWdlIGNvcHlyaWdodCBjIDE5OTAgMTk5MyIsImNvcHlyaWdodCBjIDE5OTAgMTk5MyAxOTk0IiwiYyAxOTkwIDE5OTMgMTk5NCAxOTk1IiwiMTk5MCAxOTkzIDE5OTQgMTk5NSB0aGUiLCIxOTkzIDE5OTQgMTk5NSB0aGUgcmVnZW50cyIsIjE5OTQgMTk5NSB0aGUgcmVnZW50cyBvZiIsIjE5OTUgdGhlIHJlZ2VudHMgb2YgdGhlIiwic3VjaCBkYW1hZ2UgY29weXJpZ2h0IGMgMTk5NSIsImRhbWFnZSBjb3B5cmlnaHQgYyAxOTk1IDE5OTYiLCJjb3B5cmlnaHQgYyAxOTk1IDE5OTYgdGhlIiwiYyAxOTk1IDE5OTYgdGhlIHByZXNpZGVudCIsIjE5OTUgMTk5NiB0aGUgcHJlc2lkZW50IGFuZCIsIjE5OTYgdGhlIHByZXNpZGVudCBhbmQgZmVsbG93cyIsInRoZSBwcmVzaWRlbnQgYW5kIGZlbGxvd3Mgb2YiLCJwcmVzaWRlbnQgYW5kIGZlbGxvd3Mgb2YgaGFydmFyZCIsImFuZCBmZWxsb3dzIG9mIGhhcnZhcmQgdW5pdmVyc2l0eSIsImZlbGxvd3Mgb2YgaGFydmFyZCB1bml2ZXJzaXR5IGFsbCIsIm9mIGhhcnZhcmQgdW5pdmVyc2l0eSBhbGwgcmlnaHRzIiwiaGFydmFyZCB1bml2ZXJzaXR5IGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJzb2Z0d2FyZSBpcyBwcm92aWRlZCBieSBoYXJ2YXJkIiwiaXMgcHJvdmlkZWQgYnkgaGFydmFyZCBhbmQiLCJwcm92aWRlZCBieSBoYXJ2YXJkIGFuZCBpdHMiLCJieSBoYXJ2YXJkIGFuZCBpdHMgY29udHJpYnV0b3JzIiwiaGFydmFyZCBhbmQgaXRzIGNvbnRyaWJ1dG9ycyBhcyIsImluIG5vIGV2ZW50IHNoYWxsIGhhcnZhcmQiLCJubyBldmVudCBzaGFsbCBoYXJ2YXJkIG9yIiwiZXZlbnQgc2hhbGwgaGFydmFyZCBvciBpdHMiLCJzaGFsbCBoYXJ2YXJkIG9yIGl0cyBjb250cmlidXRvcnMiLCJoYXJ2YXJkIG9yIGl0cyBjb250cmlidXRvcnMgYmUiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChjKSAxOTg2IGJ5IFVuaXZlcnNpdHkgb2YgVG9yb250by4gV3JpdHRlbiBieSBIZW5yeSBTcGVuY2VyLiBOb3QgZGVyaXZlZCBmcm9tIGxpY2Vuc2VkIHNvZnR3YXJlLlxuXG5QZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSBvbiBhbnkgY29tcHV0ZXIgc3lzdGVtLCBhbmQgdG8gcmVkaXN0cmlidXRlIGl0IGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcblxuICAgMS4gVGhlIGF1dGhvciBpcyBub3QgcmVzcG9uc2libGUgZm9yIHRoZSBjb25zZXF1ZW5jZXMgb2YgdXNlIG9mIHRoaXMgc29mdHdhcmUsIG5vIG1hdHRlciBob3cgYXdmdWwsIGV2ZW4gaWYgdGhleSBhcmlzZSBmcm9tIGRlZmVjdHMgaW4gaXQuXG5cbiAgIDIuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZCwgZWl0aGVyIGJ5IGV4cGxpY2l0IGNsYWltIG9yIGJ5IG9taXNzaW9uLlxuXG4gICAzLiBBbHRlcmVkIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4iXSwibGljZW5zZUlkcyI6WyJTcGVuY2VyLTg2Il0sImtleXdvcmRzIjpbImNvcHlyaWdodCBjIDE5ODYiLCJjIDE5ODYgYnkiLCIxOTg2IGJ5IHVuaXZlcnNpdHkiLCJieSB1bml2ZXJzaXR5IG9mIiwidW5pdmVyc2l0eSBvZiB0b3JvbnRvIiwib2YgdG9yb250byB3cml0dGVuIiwidG9yb250byB3cml0dGVuIGJ5Iiwid3JpdHRlbiBieSBoZW5yeSIsImJ5IGhlbnJ5IHNwZW5jZXIiLCJoZW5yeSBzcGVuY2VyIG5vdCIsInNwZW5jZXIgbm90IGRlcml2ZWQiLCJkZXJpdmVkIGZyb20gbGljZW5zZWQiLCJmcm9tIGxpY2Vuc2VkIHNvZnR3YXJlIiwibGljZW5zZWQgc29mdHdhcmUgcGVybWlzc2lvbiIsImFyaXNlIGZyb20gZGVmZWN0cyIsImZyb20gZGVmZWN0cyBpbiIsImRlZmVjdHMgaW4gaXQiLCJieSBvbWlzc2lvbiAzIiwib21pc3Npb24gMyBhbHRlcmVkIiwiY29weXJpZ2h0IGMgMTk4NiBieSIsImMgMTk4NiBieSB1bml2ZXJzaXR5IiwiMTk4NiBieSB1bml2ZXJzaXR5IG9mIiwiYnkgdW5pdmVyc2l0eSBvZiB0b3JvbnRvIiwidW5pdmVyc2l0eSBvZiB0b3JvbnRvIHdyaXR0ZW4iLCJvZiB0b3JvbnRvIHdyaXR0ZW4gYnkiLCJ0b3JvbnRvIHdyaXR0ZW4gYnkgaGVucnkiLCJ3cml0dGVuIGJ5IGhlbnJ5IHNwZW5jZXIiLCJieSBoZW5yeSBzcGVuY2VyIG5vdCIsImhlbnJ5IHNwZW5jZXIgbm90IGRlcml2ZWQiLCJzcGVuY2VyIG5vdCBkZXJpdmVkIGZyb20iLCJub3QgZGVyaXZlZCBmcm9tIGxpY2Vuc2VkIiwiZGVyaXZlZCBmcm9tIGxpY2Vuc2VkIHNvZnR3YXJlIiwiZnJvbSBsaWNlbnNlZCBzb2Z0d2FyZSBwZXJtaXNzaW9uIiwibGljZW5zZWQgc29mdHdhcmUgcGVybWlzc2lvbiBpcyIsInRoZXkgYXJpc2UgZnJvbSBkZWZlY3RzIiwiYXJpc2UgZnJvbSBkZWZlY3RzIGluIiwiZnJvbSBkZWZlY3RzIGluIGl0IiwiZGVmZWN0cyBpbiBpdCAyIiwib3IgYnkgb21pc3Npb24gMyIsImJ5IG9taXNzaW9uIDMgYWx0ZXJlZCIsIm9taXNzaW9uIDMgYWx0ZXJlZCB2ZXJzaW9ucyIsImNvcHlyaWdodCBjIDE5ODYgYnkgdW5pdmVyc2l0eSIsImMgMTk4NiBieSB1bml2ZXJzaXR5IG9mIiwiMTk4NiBieSB1bml2ZXJzaXR5IG9mIHRvcm9udG8iLCJieSB1bml2ZXJzaXR5IG9mIHRvcm9udG8gd3JpdHRlbiIsInVuaXZlcnNpdHkgb2YgdG9yb250byB3cml0dGVuIGJ5Iiwib2YgdG9yb250byB3cml0dGVuIGJ5IGhlbnJ5IiwidG9yb250byB3cml0dGVuIGJ5IGhlbnJ5IHNwZW5jZXIiLCJ3cml0dGVuIGJ5IGhlbnJ5IHNwZW5jZXIgbm90IiwiYnkgaGVucnkgc3BlbmNlciBub3QgZGVyaXZlZCIsImhlbnJ5IHNwZW5jZXIgbm90IGRlcml2ZWQgZnJvbSIsInNwZW5jZXIgbm90IGRlcml2ZWQgZnJvbSBsaWNlbnNlZCIsIm5vdCBkZXJpdmVkIGZyb20gbGljZW5zZWQgc29mdHdhcmUiLCJkZXJpdmVkIGZyb20gbGljZW5zZWQgc29mdHdhcmUgcGVybWlzc2lvbiIsImZyb20gbGljZW5zZWQgc29mdHdhcmUgcGVybWlzc2lvbiBpcyIsImxpY2Vuc2VkIHNvZnR3YXJlIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCIsImlmIHRoZXkgYXJpc2UgZnJvbSBkZWZlY3RzIiwidGhleSBhcmlzZSBmcm9tIGRlZmVjdHMgaW4iLCJhcmlzZSBmcm9tIGRlZmVjdHMgaW4gaXQiLCJmcm9tIGRlZmVjdHMgaW4gaXQgMiIsImRlZmVjdHMgaW4gaXQgMiB0aGUiLCJjbGFpbSBvciBieSBvbWlzc2lvbiAzIiwib3IgYnkgb21pc3Npb24gMyBhbHRlcmVkIiwiYnkgb21pc3Npb24gMyBhbHRlcmVkIHZlcnNpb25zIiwib21pc3Npb24gMyBhbHRlcmVkIHZlcnNpb25zIG11c3QiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IDE5OTIsIDE5OTMsIDE5OTQgSGVucnkgU3BlbmNlci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuVGhpcyBzb2Z0d2FyZSBpcyBub3Qgc3ViamVjdCB0byBhbnkgbGljZW5zZSBvZiB0aGUgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGggQ29tcGFueSBvciBvZiB0aGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLlxuXG5QZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSBvbiBhbnkgY29tcHV0ZXIgc3lzdGVtLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdCwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcblxuICAgMS4gVGhlIGF1dGhvciBpcyBub3QgcmVzcG9uc2libGUgZm9yIHRoZSBjb25zZXF1ZW5jZXMgb2YgdXNlIG9mIHRoaXMgc29mdHdhcmUsIG5vIG1hdHRlciBob3cgYXdmdWwsIGV2ZW4gaWYgdGhleSBhcmlzZSBmcm9tIGZsYXdzIGluIGl0LlxuXG4gICAyLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQsIGVpdGhlciBieSBleHBsaWNpdCBjbGFpbSBvciBieSBvbWlzc2lvbi4gU2luY2UgZmV3IHVzZXJzIGV2ZXIgcmVhZCBzb3VyY2VzLCBjcmVkaXRzIG11c3QgYXBwZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uLlxuXG4gICAzLiBBbHRlcmVkIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gU2luY2UgZmV3IHVzZXJzIGV2ZXIgcmVhZCBzb3VyY2VzLCBjcmVkaXRzIG11c3QgYXBwZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uLlxuXG4gICA0LiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZC4iXSwibGljZW5zZUlkcyI6WyJTcGVuY2VyLTk0Il0sImtleXdvcmRzIjpbIjE5OTMgMTk5NCBoZW5yeSIsIjE5OTQgaGVucnkgc3BlbmNlciIsInRvIGFueSBsaWNlbnNlIiwidGhlIGFtZXJpY2FuIHRlbGVwaG9uZSIsImFtZXJpY2FuIHRlbGVwaG9uZSBhbmQiLCJ0ZWxlcGhvbmUgYW5kIHRlbGVncmFwaCIsImFuZCB0ZWxlZ3JhcGggY29tcGFueSIsInRlbGVncmFwaCBjb21wYW55IG9yIiwiY29tcGFueSBvciBvZiIsIm9mIHRoZSByZWdlbnRzIiwiY2FsaWZvcm5pYSBwZXJtaXNzaW9uIGlzIiwicmVkaXN0cmlidXRlIGl0IHN1YmplY3QiLCJpdCBzdWJqZWN0IHRvIiwiYXJpc2UgZnJvbSBmbGF3cyIsImZyb20gZmxhd3MgaW4iLCJmbGF3cyBpbiBpdCIsImJ5IG9taXNzaW9uIHNpbmNlIiwib21pc3Npb24gc2luY2UgZmV3IiwiZG9jdW1lbnRhdGlvbiAzIGFsdGVyZWQiLCJvcmlnaW5hbCBzb2Z0d2FyZSBzaW5jZSIsInNvZnR3YXJlIHNpbmNlIGZldyIsInRoZSBkb2N1bWVudGF0aW9uIDQiLCJkb2N1bWVudGF0aW9uIDQgdGhpcyIsIjQgdGhpcyBub3RpY2UiLCIxOTkyIDE5OTMgMTk5NCBoZW5yeSIsIjE5OTMgMTk5NCBoZW5yeSBzcGVuY2VyIiwiMTk5NCBoZW5yeSBzcGVuY2VyIGFsbCIsInNvZnR3YXJlIGlzIG5vdCBzdWJqZWN0Iiwibm90IHN1YmplY3QgdG8gYW55Iiwic3ViamVjdCB0byBhbnkgbGljZW5zZSIsInRvIGFueSBsaWNlbnNlIG9mIiwiYW55IGxpY2Vuc2Ugb2YgdGhlIiwibGljZW5zZSBvZiB0aGUgYW1lcmljYW4iLCJvZiB0aGUgYW1lcmljYW4gdGVsZXBob25lIiwidGhlIGFtZXJpY2FuIHRlbGVwaG9uZSBhbmQiLCJhbWVyaWNhbiB0ZWxlcGhvbmUgYW5kIHRlbGVncmFwaCIsInRlbGVwaG9uZSBhbmQgdGVsZWdyYXBoIGNvbXBhbnkiLCJhbmQgdGVsZWdyYXBoIGNvbXBhbnkgb3IiLCJ0ZWxlZ3JhcGggY29tcGFueSBvciBvZiIsImNvbXBhbnkgb3Igb2YgdGhlIiwib3Igb2YgdGhlIHJlZ2VudHMiLCJvZiB0aGUgcmVnZW50cyBvZiIsIm9mIGNhbGlmb3JuaWEgcGVybWlzc2lvbiBpcyIsImNhbGlmb3JuaWEgcGVybWlzc2lvbiBpcyBncmFudGVkIiwic3lzdGVtIGFuZCB0byBhbHRlciIsImFuZCByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCIsInJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIiwiaXQgc3ViamVjdCB0byB0aGUiLCJ0aGV5IGFyaXNlIGZyb20gZmxhd3MiLCJhcmlzZSBmcm9tIGZsYXdzIGluIiwiZnJvbSBmbGF3cyBpbiBpdCIsImZsYXdzIGluIGl0IDIiLCJvciBieSBvbWlzc2lvbiBzaW5jZSIsImJ5IG9taXNzaW9uIHNpbmNlIGZldyIsIm9taXNzaW9uIHNpbmNlIGZldyB1c2VycyIsImluIHRoZSBkb2N1bWVudGF0aW9uIDMiLCJ0aGUgZG9jdW1lbnRhdGlvbiAzIGFsdGVyZWQiLCJkb2N1bWVudGF0aW9uIDMgYWx0ZXJlZCB2ZXJzaW9ucyIsInRoZSBvcmlnaW5hbCBzb2Z0d2FyZSBzaW5jZSIsIm9yaWdpbmFsIHNvZnR3YXJlIHNpbmNlIGZldyIsInNvZnR3YXJlIHNpbmNlIGZldyB1c2VycyIsImluIHRoZSBkb2N1bWVudGF0aW9uIDQiLCJ0aGUgZG9jdW1lbnRhdGlvbiA0IHRoaXMiLCJkb2N1bWVudGF0aW9uIDQgdGhpcyBub3RpY2UiLCI0IHRoaXMgbm90aWNlIG1heSIsImNvcHlyaWdodCAxOTkyIDE5OTMgMTk5NCBoZW5yeSIsIjE5OTIgMTk5MyAxOTk0IGhlbnJ5IHNwZW5jZXIiLCIxOTkzIDE5OTQgaGVucnkgc3BlbmNlciBhbGwiLCIxOTk0IGhlbnJ5IHNwZW5jZXIgYWxsIHJpZ2h0cyIsInNwZW5jZXIgYWxsIHJpZ2h0cyByZXNlcnZlZCB0aGlzIiwicmVzZXJ2ZWQgdGhpcyBzb2Z0d2FyZSBpcyBub3QiLCJ0aGlzIHNvZnR3YXJlIGlzIG5vdCBzdWJqZWN0Iiwic29mdHdhcmUgaXMgbm90IHN1YmplY3QgdG8iLCJpcyBub3Qgc3ViamVjdCB0byBhbnkiLCJub3Qgc3ViamVjdCB0byBhbnkgbGljZW5zZSIsInN1YmplY3QgdG8gYW55IGxpY2Vuc2Ugb2YiLCJ0byBhbnkgbGljZW5zZSBvZiB0aGUiLCJhbnkgbGljZW5zZSBvZiB0aGUgYW1lcmljYW4iLCJsaWNlbnNlIG9mIHRoZSBhbWVyaWNhbiB0ZWxlcGhvbmUiLCJvZiB0aGUgYW1lcmljYW4gdGVsZXBob25lIGFuZCIsInRoZSBhbWVyaWNhbiB0ZWxlcGhvbmUgYW5kIHRlbGVncmFwaCIsImFtZXJpY2FuIHRlbGVwaG9uZSBhbmQgdGVsZWdyYXBoIGNvbXBhbnkiLCJ0ZWxlcGhvbmUgYW5kIHRlbGVncmFwaCBjb21wYW55IG9yIiwiYW5kIHRlbGVncmFwaCBjb21wYW55IG9yIG9mIiwidGVsZWdyYXBoIGNvbXBhbnkgb3Igb2YgdGhlIiwiY29tcGFueSBvciBvZiB0aGUgcmVnZW50cyIsIm9yIG9mIHRoZSByZWdlbnRzIG9mIiwib2YgdGhlIHJlZ2VudHMgb2YgdGhlIiwidW5pdmVyc2l0eSBvZiBjYWxpZm9ybmlhIHBlcm1pc3Npb24gaXMiLCJvZiBjYWxpZm9ybmlhIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCIsImNhbGlmb3JuaWEgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIiwiY29tcHV0ZXIgc3lzdGVtIGFuZCB0byBhbHRlciIsInN5c3RlbSBhbmQgdG8gYWx0ZXIgaXQiLCJpdCBhbmQgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QiLCJhbmQgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8iLCJyZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUiLCJpdCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmciLCJpZiB0aGV5IGFyaXNlIGZyb20gZmxhd3MiLCJ0aGV5IGFyaXNlIGZyb20gZmxhd3MgaW4iLCJhcmlzZSBmcm9tIGZsYXdzIGluIGl0IiwiZnJvbSBmbGF3cyBpbiBpdCAyIiwiZmxhd3MgaW4gaXQgMiB0aGUiLCJjbGFpbSBvciBieSBvbWlzc2lvbiBzaW5jZSIsIm9yIGJ5IG9taXNzaW9uIHNpbmNlIGZldyIsImJ5IG9taXNzaW9uIHNpbmNlIGZldyB1c2VycyIsIm9taXNzaW9uIHNpbmNlIGZldyB1c2VycyBldmVyIiwiYXBwZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uIDMiLCJpbiB0aGUgZG9jdW1lbnRhdGlvbiAzIGFsdGVyZWQiLCJ0aGUgZG9jdW1lbnRhdGlvbiAzIGFsdGVyZWQgdmVyc2lvbnMiLCJkb2N1bWVudGF0aW9uIDMgYWx0ZXJlZCB2ZXJzaW9ucyBtdXN0IiwiYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlIHNpbmNlIiwidGhlIG9yaWdpbmFsIHNvZnR3YXJlIHNpbmNlIGZldyIsIm9yaWdpbmFsIHNvZnR3YXJlIHNpbmNlIGZldyB1c2VycyIsInNvZnR3YXJlIHNpbmNlIGZldyB1c2VycyBldmVyIiwiYXBwZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uIDQiLCJpbiB0aGUgZG9jdW1lbnRhdGlvbiA0IHRoaXMiLCJ0aGUgZG9jdW1lbnRhdGlvbiA0IHRoaXMgbm90aWNlIiwiZG9jdW1lbnRhdGlvbiA0IHRoaXMgbm90aWNlIG1heSIsIjQgdGhpcyBub3RpY2UgbWF5IG5vdCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgSGVucnkgU3BlbmNlci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuRGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3YXMgZnVuZGVkLCBpbiBwYXJ0LCBieSBDcmF5IFJlc2VhcmNoIEluYy4sIFVVTkVUIENvbW11bmljYXRpb25zIFNlcnZpY2VzIEluYy4sIFN1biBNaWNyb3N5c3RlbXMgSW5jLiwgYW5kIFNjcmlwdGljcyBDb3Jwb3JhdGlvbiwgbm9uZSBvZiB3aG9tIGFyZSByZXNwb25zaWJsZSBmb3IgdGhlIHJlc3VsdHMuIFRoZSBhdXRob3IgdGhhbmtzIGFsbCBvZiB0aGVtLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIC0gd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiAtIGFyZSBwZXJtaXR0ZWQgZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IHJlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UgZm9ybSByZXRhaW4gdGhpcyBlbnRpcmUgY29weXJpZ2h0IG5vdGljZSBhbmQgaW5kaWNhdGUgdGhlIG9yaWdpbiBhbmQgbmF0dXJlIG9mIGFueSBtb2RpZmljYXRpb25zLlxuXG5JJ2QgYXBwcmVjaWF0ZSBiZWluZyBnaXZlbiBjcmVkaXQgZm9yIHRoaXMgcGFja2FnZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBzb2Z0d2FyZSB3aGljaCB1c2VzIGl0LCBidXQgdGhhdCBpcyBub3QgYSByZXF1aXJlbWVudC5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSEVOUlkgU1BFTkNFUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iXSwibGljZW5zZUlkcyI6WyJTcGVuY2VyLTk5Il0sImtleXdvcmRzIjpbIjE5OTggMTk5OSBoZW5yeSIsIjE5OTkgaGVucnkgc3BlbmNlciIsInJpZ2h0cyByZXNlcnZlZCBkZXZlbG9wbWVudCIsInJlc2VydmVkIGRldmVsb3BtZW50IG9mIiwic29mdHdhcmUgd2FzIGZ1bmRlZCIsIndhcyBmdW5kZWQgaW4iLCJmdW5kZWQgaW4gcGFydCIsImluIHBhcnQgYnkiLCJwYXJ0IGJ5IGNyYXkiLCJieSBjcmF5IHJlc2VhcmNoIiwiY3JheSByZXNlYXJjaCBpbmMiLCJyZXNlYXJjaCBpbmMgdXVuZXQiLCJpbmMgdXVuZXQgY29tbXVuaWNhdGlvbnMiLCJ1dW5ldCBjb21tdW5pY2F0aW9ucyBzZXJ2aWNlcyIsImNvbW11bmljYXRpb25zIHNlcnZpY2VzIGluYyIsInNlcnZpY2VzIGluYyBzdW4iLCJpbmMgc3VuIG1pY3Jvc3lzdGVtcyIsImluYyBhbmQgc2NyaXB0aWNzIiwiYW5kIHNjcmlwdGljcyBjb3Jwb3JhdGlvbiIsInNjcmlwdGljcyBjb3Jwb3JhdGlvbiBub25lIiwiY29ycG9yYXRpb24gbm9uZSBvZiIsIm5vbmUgb2Ygd2hvbSIsIm9mIHdob20gYXJlIiwid2hvbSBhcmUgcmVzcG9uc2libGUiLCJmb3IgdGhlIHJlc3VsdHMiLCJ0aGUgcmVzdWx0cyB0aGUiLCJyZXN1bHRzIHRoZSBhdXRob3IiLCJ0aGUgYXV0aG9yIHRoYW5rcyIsImF1dGhvciB0aGFua3MgYWxsIiwidGhhbmtzIGFsbCBvZiIsImFsbCBvZiB0aGVtIiwib2YgdGhlbSByZWRpc3RyaWJ1dGlvbiIsInRoZW0gcmVkaXN0cmlidXRpb24gYW5kIiwiYXJlIHBlcm1pdHRlZCBmb3IiLCJwZXJtaXR0ZWQgZm9yIGFueSIsInByb3ZpZGVkIHRoYXQgcmVkaXN0cmlidXRpb25zIiwidGhhdCByZWRpc3RyaWJ1dGlvbnMgaW4iLCJzb3VyY2UgZm9ybSByZXRhaW4iLCJmb3JtIHJldGFpbiB0aGlzIiwicmV0YWluIHRoaXMgZW50aXJlIiwibm90aWNlIGFuZCBpbmRpY2F0ZSIsImFuZCBpbmRpY2F0ZSB0aGUiLCJpbmRpY2F0ZSB0aGUgb3JpZ2luIiwidGhlIG9yaWdpbiBhbmQiLCJvcmlnaW4gYW5kIG5hdHVyZSIsImFuZCBuYXR1cmUgb2YiLCJuYXR1cmUgb2YgYW55IiwiYW55IG1vZGlmaWNhdGlvbnMgaSIsIm1vZGlmaWNhdGlvbnMgaSBkIiwiaSBkIGFwcHJlY2lhdGUiLCJkIGFwcHJlY2lhdGUgYmVpbmciLCJhcHByZWNpYXRlIGJlaW5nIGdpdmVuIiwiYmVpbmcgZ2l2ZW4gY3JlZGl0IiwiZ2l2ZW4gY3JlZGl0IGZvciIsImNyZWRpdCBmb3IgdGhpcyIsInBhY2thZ2UgaW4gdGhlIiwiZG9jdW1lbnRhdGlvbiBvZiBzb2Z0d2FyZSIsIm9mIHNvZnR3YXJlIHdoaWNoIiwid2hpY2ggdXNlcyBpdCIsInVzZXMgaXQgYnV0IiwiaXQgYnV0IHRoYXQiLCJidXQgdGhhdCBpcyIsImEgcmVxdWlyZW1lbnQgdGhpcyIsInJlcXVpcmVtZW50IHRoaXMgc29mdHdhcmUiLCJldmVudCBzaGFsbCBoZW5yeSIsInNoYWxsIGhlbnJ5IHNwZW5jZXIiLCJoZW5yeSBzcGVuY2VyIGJlIiwic3BlbmNlciBiZSBsaWFibGUiLCJjIDE5OTggMTk5OSBoZW5yeSIsIjE5OTggMTk5OSBoZW5yeSBzcGVuY2VyIiwiMTk5OSBoZW5yeSBzcGVuY2VyIGFsbCIsImFsbCByaWdodHMgcmVzZXJ2ZWQgZGV2ZWxvcG1lbnQiLCJyaWdodHMgcmVzZXJ2ZWQgZGV2ZWxvcG1lbnQgb2YiLCJyZXNlcnZlZCBkZXZlbG9wbWVudCBvZiB0aGlzIiwiZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSIsIm9mIHRoaXMgc29mdHdhcmUgd2FzIiwidGhpcyBzb2Z0d2FyZSB3YXMgZnVuZGVkIiwic29mdHdhcmUgd2FzIGZ1bmRlZCBpbiIsIndhcyBmdW5kZWQgaW4gcGFydCIsImZ1bmRlZCBpbiBwYXJ0IGJ5IiwiaW4gcGFydCBieSBjcmF5IiwicGFydCBieSBjcmF5IHJlc2VhcmNoIiwiYnkgY3JheSByZXNlYXJjaCBpbmMiLCJjcmF5IHJlc2VhcmNoIGluYyB1dW5ldCIsInJlc2VhcmNoIGluYyB1dW5ldCBjb21tdW5pY2F0aW9ucyIsImluYyB1dW5ldCBjb21tdW5pY2F0aW9ucyBzZXJ2aWNlcyIsInV1bmV0IGNvbW11bmljYXRpb25zIHNlcnZpY2VzIGluYyIsImNvbW11bmljYXRpb25zIHNlcnZpY2VzIGluYyBzdW4iLCJzZXJ2aWNlcyBpbmMgc3VuIG1pY3Jvc3lzdGVtcyIsImluYyBzdW4gbWljcm9zeXN0ZW1zIGluYyIsIm1pY3Jvc3lzdGVtcyBpbmMgYW5kIHNjcmlwdGljcyIsImluYyBhbmQgc2NyaXB0aWNzIGNvcnBvcmF0aW9uIiwiYW5kIHNjcmlwdGljcyBjb3Jwb3JhdGlvbiBub25lIiwic2NyaXB0aWNzIGNvcnBvcmF0aW9uIG5vbmUgb2YiLCJjb3Jwb3JhdGlvbiBub25lIG9mIHdob20iLCJub25lIG9mIHdob20gYXJlIiwib2Ygd2hvbSBhcmUgcmVzcG9uc2libGUiLCJ3aG9tIGFyZSByZXNwb25zaWJsZSBmb3IiLCJhcmUgcmVzcG9uc2libGUgZm9yIHRoZSIsInJlc3BvbnNpYmxlIGZvciB0aGUgcmVzdWx0cyIsImZvciB0aGUgcmVzdWx0cyB0aGUiLCJ0aGUgcmVzdWx0cyB0aGUgYXV0aG9yIiwicmVzdWx0cyB0aGUgYXV0aG9yIHRoYW5rcyIsInRoZSBhdXRob3IgdGhhbmtzIGFsbCIsImF1dGhvciB0aGFua3MgYWxsIG9mIiwidGhhbmtzIGFsbCBvZiB0aGVtIiwiYWxsIG9mIHRoZW0gcmVkaXN0cmlidXRpb24iLCJvZiB0aGVtIHJlZGlzdHJpYnV0aW9uIGFuZCIsInRoZW0gcmVkaXN0cmlidXRpb24gYW5kIHVzZSIsIm1vZGlmaWNhdGlvbiBhcmUgcGVybWl0dGVkIGZvciIsImFyZSBwZXJtaXR0ZWQgZm9yIGFueSIsInBlcm1pdHRlZCBmb3IgYW55IHB1cnBvc2UiLCJwdXJwb3NlIHByb3ZpZGVkIHRoYXQgcmVkaXN0cmlidXRpb25zIiwicHJvdmlkZWQgdGhhdCByZWRpc3RyaWJ1dGlvbnMgaW4iLCJ0aGF0IHJlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UiLCJpbiBzb3VyY2UgZm9ybSByZXRhaW4iLCJzb3VyY2UgZm9ybSByZXRhaW4gdGhpcyIsImZvcm0gcmV0YWluIHRoaXMgZW50aXJlIiwicmV0YWluIHRoaXMgZW50aXJlIGNvcHlyaWdodCIsImVudGlyZSBjb3B5cmlnaHQgbm90aWNlIGFuZCIsImNvcHlyaWdodCBub3RpY2UgYW5kIGluZGljYXRlIiwibm90aWNlIGFuZCBpbmRpY2F0ZSB0aGUiLCJhbmQgaW5kaWNhdGUgdGhlIG9yaWdpbiIsImluZGljYXRlIHRoZSBvcmlnaW4gYW5kIiwidGhlIG9yaWdpbiBhbmQgbmF0dXJlIiwib3JpZ2luIGFuZCBuYXR1cmUgb2YiLCJhbmQgbmF0dXJlIG9mIGFueSIsIm5hdHVyZSBvZiBhbnkgbW9kaWZpY2F0aW9ucyIsIm9mIGFueSBtb2RpZmljYXRpb25zIGkiLCJhbnkgbW9kaWZpY2F0aW9ucyBpIGQiLCJtb2RpZmljYXRpb25zIGkgZCBhcHByZWNpYXRlIiwiaSBkIGFwcHJlY2lhdGUgYmVpbmciLCJkIGFwcHJlY2lhdGUgYmVpbmcgZ2l2ZW4iLCJhcHByZWNpYXRlIGJlaW5nIGdpdmVuIGNyZWRpdCIsImJlaW5nIGdpdmVuIGNyZWRpdCBmb3IiLCJnaXZlbiBjcmVkaXQgZm9yIHRoaXMiLCJjcmVkaXQgZm9yIHRoaXMgcGFja2FnZSIsImZvciB0aGlzIHBhY2thZ2UgaW4iLCJ0aGlzIHBhY2thZ2UgaW4gdGhlIiwicGFja2FnZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiIsImluIHRoZSBkb2N1bWVudGF0aW9uIG9mIiwidGhlIGRvY3VtZW50YXRpb24gb2Ygc29mdHdhcmUiLCJkb2N1bWVudGF0aW9uIG9mIHNvZnR3YXJlIHdoaWNoIiwib2Ygc29mdHdhcmUgd2hpY2ggdXNlcyIsInNvZnR3YXJlIHdoaWNoIHVzZXMgaXQiLCJ3aGljaCB1c2VzIGl0IGJ1dCIsInVzZXMgaXQgYnV0IHRoYXQiLCJpdCBidXQgdGhhdCBpcyIsImJ1dCB0aGF0IGlzIG5vdCIsIm5vdCBhIHJlcXVpcmVtZW50IHRoaXMiLCJhIHJlcXVpcmVtZW50IHRoaXMgc29mdHdhcmUiLCJyZXF1aXJlbWVudCB0aGlzIHNvZnR3YXJlIGlzIiwibm8gZXZlbnQgc2hhbGwgaGVucnkiLCJldmVudCBzaGFsbCBoZW5yeSBzcGVuY2VyIiwic2hhbGwgaGVucnkgc3BlbmNlciBiZSIsImhlbnJ5IHNwZW5jZXIgYmUgbGlhYmxlIiwic3BlbmNlciBiZSBsaWFibGUgZm9yIiwiY29weXJpZ2h0IGMgMTk5OCAxOTk5IGhlbnJ5IiwiYyAxOTk4IDE5OTkgaGVucnkgc3BlbmNlciIsIjE5OTggMTk5OSBoZW5yeSBzcGVuY2VyIGFsbCIsIjE5OTkgaGVucnkgc3BlbmNlciBhbGwgcmlnaHRzIiwic3BlbmNlciBhbGwgcmlnaHRzIHJlc2VydmVkIGRldmVsb3BtZW50IiwiYWxsIHJpZ2h0cyByZXNlcnZlZCBkZXZlbG9wbWVudCBvZiIsInJpZ2h0cyByZXNlcnZlZCBkZXZlbG9wbWVudCBvZiB0aGlzIiwicmVzZXJ2ZWQgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSIsImRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2FzIiwib2YgdGhpcyBzb2Z0d2FyZSB3YXMgZnVuZGVkIiwidGhpcyBzb2Z0d2FyZSB3YXMgZnVuZGVkIGluIiwic29mdHdhcmUgd2FzIGZ1bmRlZCBpbiBwYXJ0Iiwid2FzIGZ1bmRlZCBpbiBwYXJ0IGJ5IiwiZnVuZGVkIGluIHBhcnQgYnkgY3JheSIsImluIHBhcnQgYnkgY3JheSByZXNlYXJjaCIsInBhcnQgYnkgY3JheSByZXNlYXJjaCBpbmMiLCJieSBjcmF5IHJlc2VhcmNoIGluYyB1dW5ldCIsImNyYXkgcmVzZWFyY2ggaW5jIHV1bmV0IGNvbW11bmljYXRpb25zIiwicmVzZWFyY2ggaW5jIHV1bmV0IGNvbW11bmljYXRpb25zIHNlcnZpY2VzIiwiaW5jIHV1bmV0IGNvbW11bmljYXRpb25zIHNlcnZpY2VzIGluYyIsInV1bmV0IGNvbW11bmljYXRpb25zIHNlcnZpY2VzIGluYyBzdW4iLCJjb21tdW5pY2F0aW9ucyBzZXJ2aWNlcyBpbmMgc3VuIG1pY3Jvc3lzdGVtcyIsInNlcnZpY2VzIGluYyBzdW4gbWljcm9zeXN0ZW1zIGluYyIsImluYyBzdW4gbWljcm9zeXN0ZW1zIGluYyBhbmQiLCJzdW4gbWljcm9zeXN0ZW1zIGluYyBhbmQgc2NyaXB0aWNzIiwibWljcm9zeXN0ZW1zIGluYyBhbmQgc2NyaXB0aWNzIGNvcnBvcmF0aW9uIiwiaW5jIGFuZCBzY3JpcHRpY3MgY29ycG9yYXRpb24gbm9uZSIsImFuZCBzY3JpcHRpY3MgY29ycG9yYXRpb24gbm9uZSBvZiIsInNjcmlwdGljcyBjb3Jwb3JhdGlvbiBub25lIG9mIHdob20iLCJjb3Jwb3JhdGlvbiBub25lIG9mIHdob20gYXJlIiwibm9uZSBvZiB3aG9tIGFyZSByZXNwb25zaWJsZSIsIm9mIHdob20gYXJlIHJlc3BvbnNpYmxlIGZvciIsIndob20gYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUiLCJhcmUgcmVzcG9uc2libGUgZm9yIHRoZSByZXN1bHRzIiwicmVzcG9uc2libGUgZm9yIHRoZSByZXN1bHRzIHRoZSIsImZvciB0aGUgcmVzdWx0cyB0aGUgYXV0aG9yIiwidGhlIHJlc3VsdHMgdGhlIGF1dGhvciB0aGFua3MiLCJyZXN1bHRzIHRoZSBhdXRob3IgdGhhbmtzIGFsbCIsInRoZSBhdXRob3IgdGhhbmtzIGFsbCBvZiIsImF1dGhvciB0aGFua3MgYWxsIG9mIHRoZW0iLCJ0aGFua3MgYWxsIG9mIHRoZW0gcmVkaXN0cmlidXRpb24iLCJhbGwgb2YgdGhlbSByZWRpc3RyaWJ1dGlvbiBhbmQiLCJvZiB0aGVtIHJlZGlzdHJpYnV0aW9uIGFuZCB1c2UiXX0seyJsaWNlbnNlVGV4dHMiOlsiU1VHQVJDUk0gUFVCTElDIExJQ0VOU0UgQXBwbGllcyB0byBTdWdhciBPcGVuIFNvdXJjZSBFZGl0aW9uIHYxIHRocm91Z2ggdjQuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgcmVsZWFzZXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQgb3IgZGlzdHJpYnV0ZWQuXG5cblZlcnNpb24gMS4xLjNcblxuVGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gKFwiU1BMXCIpIGNvbnNpc3RzIG9mIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBtb2RpZmllZCB0byBiZSBzcGVjaWZpYyB0byBTdWdhckNSTSwgd2l0aCB0aGUgQWRkaXRpb25hbCBUZXJtcyBpbiBFeGhpYml0IEIuIFRoZSBvcmlnaW5hbCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDEuMSBjYW4gYmUgZm91bmQgYXQ6IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbFxuXG4gICAxLiBEZWZpbml0aW9ucy5cblxuICAgICAgMS4xLiBcIkNvbnRyaWJ1dG9yXCIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLlxuXG4gICAgICAxLjIuIFwiQ29udHJpYnV0b3IgVmVyc2lvblwiIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci5cblxuICAgICAgMS4zLiBcIkNvdmVyZWQgQ29kZVwiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuXG5cbiAgICAgIDEuNC4gXCJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc21cIiBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS5cblxuICAgICAgMS41LiBcIkV4ZWN1dGFibGVcIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS5cblxuICAgICAgMS42LiBcIkluaXRpYWwgRGV2ZWxvcGVyXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLlxuXG4gICAgICAxLjcuIFwiTGFyZ2VyIFdvcmtcIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjguIFwiTGljZW5zZVwiIG1lYW5zIHRoaXMgZG9jdW1lbnQuXG5cbiAgICAgIDEuOC4xLiBcIkxpY2Vuc2FibGVcIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi5cblxuICAgICAgMS45LiBcIk1vZGlmaWNhdGlvbnNcIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczpcblxuICAgICAgICAgQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgICAgQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4xMC4gXCJPcmlnaW5hbCBDb2RlXCIgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgMS4xMC4xLiBcIlBhdGVudCBDbGFpbXNcIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci5cblxuICAgICAgMS4xMS4gXCJTb3VyY2UgQ29kZVwiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yJ3MgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLlxuXG4gICAgICAxLjEyLiBcIllvdVwiIChvciBcIllvdXJcIikgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgXCJZb3VcIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJjb250cm9sXCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgIDIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuXG5cbiAgICAgIDIuMi4gQ29udHJpYnV0b3IgR3JhbnQuXG5cbiAgICAgIFN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlXG5cbiAgICAgICAgIChiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLlxuXG4gICAgICAgICAoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICAgICAgICAoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuXG5cbiAgICAgICAgIChhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kXG5cbiAgIDMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy5cblxuICAgICAgMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIEFueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LlxuXG4gICAgICAzLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIFlvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS5cblxuICAgICAgMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVyc1xuXG4gICAgICAgICAoYikgQ29udHJpYnV0b3IgQVBJcy4gSWYgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLlxuXG4gICAgICAgICAoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLiBJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHkncyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkIFwiTEVHQUxcIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLlxuXG4gICAgICAgICAoYykgUmVwcmVzZW50YXRpb25zLiBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcidzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDMuNS4gUmVxdWlyZWQgTm90aWNlcy4gWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgb3Igb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci5cblxuICAgICAgMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4gWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci5cblxuICAgICAgMy43LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS5cblxuICAgNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLlxuXG4gICBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LlxuXG4gICA1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuXG5cbiAgIDYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLlxuXG4gICAgICA2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIE9uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBTdWdhckNSTS4gTm8gb25lIG90aGVyIHRoYW4gU3VnYXJDUk0gaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICA2LjMuIERlcml2YXRpdmUgV29ya3MuIElmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzIFwiU3VnYXJDUk1cIiwgXCJTUExcIiBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pXG5cbiAgIDcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuXG5cbiAgIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuXG5cbiAgIDguIFRFUk1JTkFUSU9OLlxuXG4gICAgICA4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3BlciBvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzIFwiUGFydGljaXBhbnRcIikgYWxsZWdpbmcgdGhhdDpcblxuICAgICAgICAgKGEpIHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0byB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzIG9mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YgdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS5cblxuICAgICAgICAgKGIpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LlxuXG4gICAgICA4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuXG5cbiAgICAgIDguNC4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLlxuXG4gICA5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS5cblxuICAgVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICAxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy5cblxuICAgVGhlIENvdmVyZWQgQ29kZSBpcyBhIFwiY29tbWVyY2lhbCBpdGVtLFwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiBcImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmVcIiBhbmQgXCJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sXCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLlxuXG4gICAxMS4gTUlTQ0VMTEFORU9VUy5cblxuICAgVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuXG5cbiAgIDEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLlxuXG4gICBBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuXG5cbiAgIDEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLlxuXG4gICBJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMgXCJNdWx0aXBsZS1MaWNlbnNlZFwiLiBcIk11bHRpcGxlLUxpY2Vuc2VkXCIgbWVhbnMgdGhhdCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyIFlvdXIgY2hvaWNlIG9mIHRoZSBTUEwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgMS4xLjMgLSBFeGhpYml0IEFcblxuVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEuMyAoXCJMaWNlbnNlXCIpOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LnN1Z2FyY3JtLmNvbS9TUEwgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuVGhlIE9yaWdpbmFsIENvZGUgaXM6IFN1Z2FyQ1JNIE9wZW4gU291cmNlXG5cblRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBTdWdhckNSTSwgSW5jLlxuXG5Qb3J0aW9ucyBjcmVhdGVkIGJ5IFN1Z2FyQ1JNIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDQgU3VnYXJDUk0sIEluYy47XG5cbkFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbkNvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy5cblxuW05PVEU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZnJvbSB0aGUgdGV4dCBvZiB0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZSBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlIGZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXVxuXG5TdWdhckNSTSBQdWJsaWMgTGljZW5zZSAxLjEuMyAtIEV4aGliaXQgQlxuXG5BZGRpdGlvbmFsIFRlcm1zIGFwcGxpY2FibGUgdG8gdGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlLlxuXG4gICBJLiBFZmZlY3QuLFxuXG4gICBUaGVzZSBhZGRpdGlvbmFsIHRlcm1zIGRlc2NyaWJlZCBpbiB0aGlzIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIC0gQWRkaXRpb25hbCBUZXJtcyBzaGFsbCBhcHBseSB0byB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgSUkuIFN1Z2FyQ1JNIGFuZCBsb2dvLlxuXG4gICBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3MgXCJTdWdhckNSTVwiIGFuZCB0aGUgXCJTdWdhckNSTVwiIGxvZ29zIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucy5cblxuICAgSG93ZXZlciwgaW4gYWRkaXRpb24gdG8gdGhlIG90aGVyIG5vdGljZSBvYmxpZ2F0aW9ucywgYWxsIGNvcGllcyBvZiB0aGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIGZvcm0gZGlzdHJpYnV0ZWQgbXVzdCwgYXMgYSBmb3JtIG9mIGF0dHJpYnV0aW9uIG9mIHRoZSBvcmlnaW5hbCBhdXRob3IsIGluY2x1ZGUgb24gZWFjaCB1c2VyIGludGVyZmFjZSBzY3JlZW4gKGkpIHRoZSBcIlBvd2VyZWQgYnkgU3VnYXJDUk1cIiBsb2dvIGFuZCAoaWkpIHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIHRoZSBzYW1lIGZvcm0gYXMgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgZGlzdHJpYnV0ZWQgYnkgU3VnYXJDUk0sIEluYy4gYXQgdGhlIHRpbWUgb2YgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY29weS4gSW4gYWRkaXRpb24sIHRoZSBcIlBvd2VyZWQgYnkgU3VnYXJDUk1cIiBsb2dvIG11c3QgYmUgdmlzaWJsZSB0byBhbGwgdXNlcnMgYW5kIGJlIGxvY2F0ZWQgYXQgdGhlIHZlcnkgYm90dG9tIGNlbnRlciBvZiBlYWNoIHVzZXIgaW50ZXJmYWNlIHNjcmVlbi4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFwiUG93ZXJlZCBCeSBTdWdhckNSTVwiIGxvZ28gbXVzdCBiZSBhdCBsZWFzdCAxMDYgeCAyMyBwaXhlbHMuIFdoZW4gdXNlcnMgY2xpY2sgb24gdGhlIFwiUG93ZXJlZCBieSBTdWdhckNSTVwiIGxvZ28gaXQgbXVzdCBkaXJlY3QgdGhlbSBiYWNrIHRvIGh0dHA6Ly93d3cuc3VnYXJmb3JnZS5vcmcuIEluIGFkZGl0aW9uLCB0aGUgY29weXJpZ2h0IG5vdGljZSBtdXN0IHJlbWFpbiB2aXNpYmxlIHRvIGFsbCB1c2VycyBhdCBhbGwgdGltZXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdXNlciBpbnRlcmZhY2Ugc2NyZWVuLiBXaGVuIHVzZXJzIGNsaWNrIG9uIHRoZSBjb3B5cmlnaHQgbm90aWNlLCBpdCBtdXN0IGRpcmVjdCB0aGVtIGJhY2sgdG8gaHR0cDovL3d3dy5zdWdhcmNybS5jb20iXSwibGljZW5zZUlkcyI6WyJTdWdhckNSTS0xLjEuMyJdLCJrZXl3b3JkcyI6WyJhcHBsaWVzIHRvIHN1Z2FyIiwidG8gc3VnYXIgb3BlbiIsInN1Z2FyIG9wZW4gc291cmNlIiwib3BlbiBzb3VyY2UgZWRpdGlvbiIsInNvdXJjZSBlZGl0aW9uIHYxIiwiZWRpdGlvbiB2MSB0aHJvdWdoIiwidjEgdGhyb3VnaCB2NCIsInRocm91Z2ggdjQgcGxlYXNlIiwidjQgcGxlYXNlIG5vdGUiLCJub3RlIHRoYXQgdGhlc2UiLCJ0aGF0IHRoZXNlIHJlbGVhc2VzIiwidGhlc2UgcmVsZWFzZXMgYXJlIiwicmVsZWFzZXMgYXJlIG5vIiwibm8gbG9uZ2VyIHN1cHBvcnRlZCIsImxvbmdlciBzdXBwb3J0ZWQgb3IiLCJzdXBwb3J0ZWQgb3IgZGlzdHJpYnV0ZWQiLCJvciBkaXN0cmlidXRlZCB2ZXJzaW9uIiwiZGlzdHJpYnV0ZWQgdmVyc2lvbiAxIiwiMyB0aGUgc3VnYXJjcm0iLCJsaWNlbnNlIHZlcnNpb24gc3BsIiwidmVyc2lvbiBzcGwgY29uc2lzdHMiLCJzcGwgY29uc2lzdHMgb2YiLCIxIDEgbW9kaWZpZWQiLCIxIG1vZGlmaWVkIHRvIiwic3BlY2lmaWMgdG8gc3VnYXJjcm0iLCJ0byBzdWdhcmNybSB3aXRoIiwic3VnYXJjcm0gd2l0aCB0aGUiLCJhZGRpdGlvbmFsIHRlcm1zIGluIiwidGVybXMgaW4gZXhoaWJpdCIsImIgdGhlIG9yaWdpbmFsIiwidGhlIG9yaWdpbmFsIG1vemlsbGEiLCJvcmlnaW5hbCBtb3ppbGxhIHB1YmxpYyIsIjEgMSBjYW4iLCIxIGNhbiBiZSIsIm9yZyBtcGwgbXBsIiwibXBsIG1wbCAxIiwibXBsIDEgMSIsIjEgMSBodG1sIiwiMSBodG1sIDEiLCJodG1sIDEgZGVmaW5pdGlvbnMiLCJtb2RpZmljYXRpb24gaXMgYiIsImlzIGIgYW55IiwibW9kaWZpY2F0aW9ucyBhIGFueSIsImV4Y2x1c2l2ZSBsaWNlbnNlIGIiLCJsaWNlbnNlIGIgdW5kZXIiLCJ0aGF0IGNvbnRyaWJ1dG9yIGEiLCJjb250cmlidXRvciBhIHVuZGVyIiwid29yayBhbmQgMyIsImFuZCAzIGRpc3RyaWJ1dGlvbiIsIm9ibGlnYXRpb25zIDMgMiIsInByb3BlcnR5IG1hdHRlcnMgYiIsIm1hdHRlcnMgYiBjb250cmlidXRvciIsImxlZ2FsIGZpbGUgYSIsImZpbGUgYSB0aGlyZCIsImJlZW4gb2J0YWluZWQgYyIsIm9idGFpbmVkIGMgcmVwcmVzZW50YXRpb25zIiwibGljZW5zZSA2IDIiLCJwdWJsaXNoZWQgYnkgc3VnYXJjcm0iLCJieSBzdWdhcmNybSBubyIsInN1Z2FyY3JtIG5vIG9uZSIsIm90aGVyIHRoYW4gc3VnYXJjcm0iLCJ0aGFuIHN1Z2FyY3JtIGhhcyIsInN1Z2FyY3JtIGhhcyB0aGUiLCJ0aGUgcGhyYXNlcyBzdWdhcmNybSIsInBocmFzZXMgc3VnYXJjcm0gc3BsIiwic3VnYXJjcm0gc3BsIG9yIiwiZnJvbSB0aGUgc3VnYXJjcm0iLCJ0ZXJtaW5hdGlvbiA4IDIiLCJvZiB0aGUgc3BsIiwiZXhoaWJpdCBhIHN1Z2FyY3JtIiwiYSBzdWdhcmNybSBwdWJsaWMiLCIzIGV4aGliaXQgYSIsIjEgMyBsaWNlbnNlIiwiMyBsaWNlbnNlIHlvdSIsInN1Z2FyY3JtIGNvbSBzcGwiLCJjb20gc3BsIHNvZnR3YXJlIiwic3BsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIiwiaXMgc3VnYXJjcm0gb3BlbiIsInN1Z2FyY3JtIG9wZW4gc291cmNlIiwib3BlbiBzb3VyY2UgdGhlIiwic291cmNlIHRoZSBpbml0aWFsIiwiaXMgc3VnYXJjcm0gaW5jIiwic3VnYXJjcm0gaW5jIHBvcnRpb25zIiwiY3JlYXRlZCBieSBzdWdhcmNybSIsImJ5IHN1Z2FyY3JtIGFyZSIsInN1Z2FyY3JtIGFyZSBjb3B5cmlnaHQiLCJjIDIwMDQgc3VnYXJjcm0iLCIyMDA0IHN1Z2FyY3JtIGluYyIsInN1Z2FyY3JtIGluYyBhbGwiLCJ5b3VyIG1vZGlmaWNhdGlvbnMgc3VnYXJjcm0iLCJtb2RpZmljYXRpb25zIHN1Z2FyY3JtIHB1YmxpYyIsIjMgZXhoaWJpdCBiIiwiZXhoaWJpdCBiIGFkZGl0aW9uYWwiLCJiIGFkZGl0aW9uYWwgdGVybXMiLCJpbiB0aGlzIHN1Z2FyY3JtIiwidGhpcyBzdWdhcmNybSBwdWJsaWMiLCJwdWJsaWMgbGljZW5zZSBhZGRpdGlvbmFsIiwiYWRkaXRpb25hbCB0ZXJtcyBzaGFsbCIsInRlcm1zIHNoYWxsIGFwcGx5IiwibGljZW5zZSBpaSBzdWdhcmNybSIsImlpIHN1Z2FyY3JtIGFuZCIsInN1Z2FyY3JtIGFuZCBsb2dvIiwidGhlIHRyYWRlbWFya3Mgc3VnYXJjcm0iLCJ0cmFkZW1hcmtzIHN1Z2FyY3JtIGFuZCIsInN1Z2FyY3JtIGFuZCB0aGUiLCJhbmQgdGhlIHN1Z2FyY3JtIiwidGhlIHN1Z2FyY3JtIGxvZ29zIiwic3VnYXJjcm0gbG9nb3MgZXZlbiIsImxvZ29zIGV2ZW4gaWYiLCJvciBtb2RpZmljYXRpb25zIGhvd2V2ZXIiLCJtb2RpZmljYXRpb25zIGhvd2V2ZXIgaW4iLCJob3dldmVyIGluIGFkZGl0aW9uIiwidGhlIG90aGVyIG5vdGljZSIsIm90aGVyIG5vdGljZSBvYmxpZ2F0aW9ucyIsIm5vdGljZSBvYmxpZ2F0aW9ucyBhbGwiLCJvYmxpZ2F0aW9ucyBhbGwgY29waWVzIiwiY29kZSBmb3JtIGRpc3RyaWJ1dGVkIiwiZm9ybSBkaXN0cmlidXRlZCBtdXN0IiwiZGlzdHJpYnV0ZWQgbXVzdCBhcyIsIm11c3QgYXMgYSIsImFzIGEgZm9ybSIsImZvcm0gb2YgYXR0cmlidXRpb24iLCJvZiBhdHRyaWJ1dGlvbiBvZiIsIm9yaWdpbmFsIGF1dGhvciBpbmNsdWRlIiwiYXV0aG9yIGluY2x1ZGUgb24iLCJpbmNsdWRlIG9uIGVhY2giLCJvbiBlYWNoIHVzZXIiLCJpbnRlcmZhY2Ugc2NyZWVuIGkiLCJzY3JlZW4gaSB0aGUiLCJpIHRoZSBwb3dlcmVkIiwic3VnYXJjcm0gbG9nbyBhbmQiLCJsb2dvIGFuZCBpaSIsImlpIHRoZSBjb3B5cmlnaHQiLCJmb3JtIGFzIHRoZSIsImFzIHRoZSBsYXRlc3QiLCJjb3ZlcmVkIGNvZGUgZGlzdHJpYnV0ZWQiLCJjb2RlIGRpc3RyaWJ1dGVkIGJ5IiwiZGlzdHJpYnV0ZWQgYnkgc3VnYXJjcm0iLCJieSBzdWdhcmNybSBpbmMiLCJzdWdhcmNybSBpbmMgYXQiLCJpbmMgYXQgdGhlIiwidGltZSBvZiBkaXN0cmlidXRpb24iLCJvZiBzdWNoIGNvcHkiLCJzdWNoIGNvcHkgaW4iLCJjb3B5IGluIGFkZGl0aW9uIiwiYWRkaXRpb24gdGhlIHBvd2VyZWQiLCJtdXN0IGJlIHZpc2libGUiLCJiZSB2aXNpYmxlIHRvIiwiYWxsIHVzZXJzIGFuZCIsInVzZXJzIGFuZCBiZSIsImFuZCBiZSBsb2NhdGVkIiwiYmUgbG9jYXRlZCBhdCIsInRoZSB2ZXJ5IGJvdHRvbSIsInZlcnkgYm90dG9tIGNlbnRlciIsImJvdHRvbSBjZW50ZXIgb2YiLCJjZW50ZXIgb2YgZWFjaCIsIm9mIGVhY2ggdXNlciIsImludGVyZmFjZSBzY3JlZW4gbm90d2l0aHN0YW5kaW5nIiwic2NyZWVuIG5vdHdpdGhzdGFuZGluZyB0aGUiLCJhYm92ZSB0aGUgZGltZW5zaW9ucyIsInRoZSBkaW1lbnNpb25zIG9mIiwiZGltZW5zaW9ucyBvZiB0aGUiLCJvZiB0aGUgcG93ZXJlZCIsIm11c3QgYmUgYXQiLCJiZSBhdCBsZWFzdCIsImF0IGxlYXN0IDEwNiIsImxlYXN0IDEwNiB4IiwiMTA2IHggMjMiLCJ4IDIzIHBpeGVscyIsIjIzIHBpeGVscyB3aGVuIiwicGl4ZWxzIHdoZW4gdXNlcnMiLCJvbiB0aGUgcG93ZXJlZCIsInN1Z2FyY3JtIGxvZ28gaXQiLCJsb2dvIGl0IG11c3QiLCJodHRwIHd3dyBzdWdhcmZvcmdlIiwid3d3IHN1Z2FyZm9yZ2Ugb3JnIiwic3VnYXJmb3JnZSBvcmcgaW4iLCJhZGRpdGlvbiB0aGUgY29weXJpZ2h0IiwiY29weXJpZ2h0IG5vdGljZSBtdXN0Iiwibm90aWNlIG11c3QgcmVtYWluIiwibXVzdCByZW1haW4gdmlzaWJsZSIsInJlbWFpbiB2aXNpYmxlIHRvIiwiYWxsIHVzZXJzIGF0IiwidXNlcnMgYXQgYWxsIiwiYWxsIHRpbWVzIGF0IiwidGltZXMgYXQgdGhlIiwiYXQgdGhlIGJvdHRvbSIsImJvdHRvbSBvZiB0aGUiLCJ0aGUgdXNlciBpbnRlcmZhY2UiLCJpbnRlcmZhY2Ugc2NyZWVuIHdoZW4iLCJzY3JlZW4gd2hlbiB1c2VycyIsIm9uIHRoZSBjb3B5cmlnaHQiLCJjb3B5cmlnaHQgbm90aWNlIGl0Iiwibm90aWNlIGl0IG11c3QiLCJzdWdhcmNybSBwdWJsaWMgbGljZW5zZSBhcHBsaWVzIiwibGljZW5zZSBhcHBsaWVzIHRvIHN1Z2FyIiwiYXBwbGllcyB0byBzdWdhciBvcGVuIiwidG8gc3VnYXIgb3BlbiBzb3VyY2UiLCJzdWdhciBvcGVuIHNvdXJjZSBlZGl0aW9uIiwib3BlbiBzb3VyY2UgZWRpdGlvbiB2MSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgVEFQUiBPcGVuIEhhcmR3YXJlIExpY2Vuc2UgVmVyc2lvbiAxLjAgKE1heSAyNSwgMjAwNykgQ29weXJpZ2h0IDIwMDcgVEFQUiAtIGh0dHA6Ly93d3cudGFwci5vcmcvT0hMXG5cblBSRUFNQkxFXG5cbk9wZW4gSGFyZHdhcmUgaXMgYSB0aGluZyAtIGEgcGh5c2ljYWwgYXJ0aWZhY3QsIGVpdGhlciBlbGVjdHJpY2FsIG9yIG1lY2hhbmljYWwgLSB3aG9zZSBkZXNpZ24gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIHRvLCBhbmQgdXNhYmxlIGJ5LCB0aGUgcHVibGljIGluIGEgd2F5IHRoYXQgYWxsb3dzIGFueW9uZSB0byBtYWtlLCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCB1c2UgdGhhdCB0aGluZy4gSW4gdGhpcyBwcmVmYWNlLCBkZXNpZ24gaW5mb3JtYXRpb24gaXMgY2FsbGVkIFwiZG9jdW1lbnRhdGlvblwiIGFuZCB0aGluZ3MgY3JlYXRlZCBmcm9tIGl0IGFyZSBjYWxsZWQgXCJwcm9kdWN0cy5cIlxuXG5UaGUgVEFQUiBPcGVuIEhhcmR3YXJlIExpY2Vuc2UgKFwiT0hMXCIpIGFncmVlbWVudCBwcm92aWRlcyBhIGxlZ2FsIGZyYW1ld29yayBmb3IgT3BlbiBIYXJkd2FyZSBwcm9qZWN0cy4gSXQgbWF5IGJlIHVzZWQgZm9yIGFueSBraW5kIG9mIHByb2R1Y3QsIGJlIGl0IGEgaGFtbWVyIG9yIGEgY29tcHV0ZXIgbW90aGVyYm9hcmQsIGFuZCBpcyBUQVBSJ3MgY29udHJpYnV0aW9uIHRvIHRoZSBjb21tdW5pdHk7IGFueW9uZSBtYXkgdXNlIHRoZSBPSEwgZm9yIHRoZWlyIE9wZW4gSGFyZHdhcmUgcHJvamVjdC5cblxuTGlrZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHRoZSBPSEwgaXMgZGVzaWduZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgdG8gY3JlYXRlLiBJdCBmb3JiaWRzIGFueW9uZSB3aG8gcmVjZWl2ZXMgcmlnaHRzIHVuZGVyIHRoZSBPSEwgdG8gZGVueSBhbnkgb3RoZXIgbGljZW5zZWUgdGhvc2Ugc2FtZSByaWdodHMgdG8gY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSBkb2N1bWVudGF0aW9uLCBhbmQgdG8gbWFrZSwgdXNlIGFuZCBkaXN0cmlidXRlIHByb2R1Y3RzIGJhc2VkIG9uIHRoYXQgZG9jdW1lbnRhdGlvbi5cblxuVW5saWtlIHRoZSBHUEwsIHRoZSBPSEwgaXMgbm90IHByaW1hcmlseSBhIGNvcHlyaWdodCBsaWNlbnNlLiBXaGlsZSBjb3B5cmlnaHQgcHJvdGVjdHMgZG9jdW1lbnRhdGlvbiBmcm9tIHVuYXV0aG9yaXplZCBjb3B5aW5nLCBtb2RpZmljYXRpb24sIGFuZCBkaXN0cmlidXRpb24sIGl0IGhhcyBsaXR0bGUgdG8gZG8gd2l0aCB5b3VyIHJpZ2h0IHRvIG1ha2UsIGRpc3RyaWJ1dGUsIG9yIHVzZSBhIHByb2R1Y3QgYmFzZWQgb24gdGhhdCBkb2N1bWVudGF0aW9uLiBGb3IgYmV0dGVyIG9yIHdvcnNlLCBwYXRlbnRzIHBsYXkgYSBzaWduaWZpY2FudCByb2xlIGluIHRob3NlIGFjdGl2aXRpZXMuIEFsdGhvdWdoIGl0IGRvZXMgbm90IHByb2hpYml0IGFueW9uZSBmcm9tIHBhdGVudGluZyBpbnZlbnRpb25zIGVtYm9kaWVkIGluIGFuIE9wZW4gSGFyZHdhcmUgZGVzaWduLCBhbmQgb2YgY291cnNlIGNhbm5vdCBwcmV2ZW50IGEgdGhpcmQgcGFydHkgZnJvbSBlbmZvcmNpbmcgdGhlaXIgcGF0ZW50IHJpZ2h0cywgdGhvc2Ugd2hvIGJlbmVmaXQgZnJvbSBhbiBPSEwgZGVzaWduIG1heSBub3QgYnJpbmcgbGF3c3VpdHMgY2xhaW1pbmcgdGhhdCBkZXNpZ24gaW5mcmluZ2VzIHRoZWlyIHBhdGVudHMgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5LlxuXG5UaGUgT0hMIGFkZHJlc3NlcyB1bmlxdWUgaXNzdWVzIGludm9sdmVkIGluIHRoZSBjcmVhdGlvbiBvZiB0YW5naWJsZSwgcGh5c2ljYWwgdGhpbmdzLCBidXQgZG9lcyBub3QgY292ZXIgc29mdHdhcmUsIGZpcm13YXJlLCBvciBjb2RlIGxvYWRlZCBpbnRvIHByb2dyYW1tYWJsZSBkZXZpY2VzLiBBIGNvcHlyaWdodC1vcmllbnRlZCBsaWNlbnNlIHN1Y2ggYXMgdGhlIEdQTCBiZXR0ZXIgc3VpdHMgdGhlc2UgY3JlYXRpb25zLlxuXG5Ib3cgY2FuIHlvdSB1c2UgdGhlIE9ITCwgb3IgYSBkZXNpZ24gYmFzZWQgdXBvbiBpdD8gV2hpbGUgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGJlbG93IHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoaXMgcHJlYW1ibGUsIGhlcmUgaXMgYSBzdW1tYXJ5OlxuXG4gICAqIFlvdSBtYXkgbW9kaWZ5IHRoZSBkb2N1bWVudGF0aW9uIGFuZCBtYWtlIHByb2R1Y3RzIGJhc2VkIHVwb24gaXQuXG5cbiAgICogWW91IG1heSB1c2UgcHJvZHVjdHMgZm9yIGFueSBsZWdhbCBwdXJwb3NlIHdpdGhvdXQgbGltaXRhdGlvbi5cblxuICAgKiBZb3UgbWF5IGRpc3RyaWJ1dGUgdW5tb2RpZmllZCBkb2N1bWVudGF0aW9uLCBidXQgeW91IG11c3QgaW5jbHVkZSB0aGUgY29tcGxldGUgcGFja2FnZSBhcyB5b3UgcmVjZWl2ZWQgaXQuXG5cbiAgICogWW91IG1heSBkaXN0cmlidXRlIHByb2R1Y3RzIHlvdSBtYWtlIHRvIHRoaXJkIHBhcnRpZXMsIGlmIHlvdSBlaXRoZXIgaW5jbHVkZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiB3aGljaCB0aGUgcHJvZHVjdCBpcyBiYXNlZCwgb3IgbWFrZSBpdCBhdmFpbGFibGUgd2l0aG91dCBjaGFyZ2UgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIHRvIGFueW9uZSB3aG8gcmVxdWVzdHMgaXQuXG5cbiAgICogWW91IG1heSBkaXN0cmlidXRlIG1vZGlmaWVkIGRvY3VtZW50YXRpb24gb3IgcHJvZHVjdHMgYmFzZWQgb24gaXQsIGlmIHlvdTpcblxuICAgICAgKiBMaWNlbnNlIHlvdXIgbW9kaWZpY2F0aW9ucyB1bmRlciB0aGUgT0hMLlxuXG4gICAgICAqIEluY2x1ZGUgdGhvc2UgbW9kaWZpY2F0aW9ucywgZm9sbG93aW5nIHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIGJlbG93LlxuXG4gICAgICAqIEF0dGVtcHQgdG8gc2VuZCB0aGUgbW9kaWZpZWQgZG9jdW1lbnRhdGlvbiBieSBlbWFpbCB0byBhbnkgb2YgdGhlIGRldmVsb3BlcnMgd2hvIGhhdmUgcHJvdmlkZWQgdGhlaXIgZW1haWwgYWRkcmVzcy4gVGhpcyBpcyBhIGdvb2QgZmFpdGggb2JsaWdhdGlvbiAtIGlmIHRoZSBlbWFpbCBmYWlscywgeW91IG5lZWQgZG8gbm90aGluZyBtb3JlIGFuZCBtYXkgZ28gb24gd2l0aCB5b3VyIGRpc3RyaWJ1dGlvbi5cblxuICAgKiBJZiB5b3UgY3JlYXRlIGEgZGVzaWduIHRoYXQgeW91IHdhbnQgdG8gbGljZW5zZSB1bmRlciB0aGUgT0hMLCB5b3Ugc2hvdWxkOlxuXG4gICAgICAqIEluY2x1ZGUgdGhpcyBkb2N1bWVudCBpbiBhIGZpbGUgbmFtZWQgTElDRU5TRSAod2l0aCB0aGUgYXBwcm9wcmlhdGUgZXh0ZW5zaW9uKSB0aGF0IGlzIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIHBhY2thZ2UuXG5cbiAgICAgICogSWYgdGhlIGZpbGUgZm9ybWF0IGFsbG93cywgaW5jbHVkZSBhIG5vdGljZSBsaWtlIFwiTGljZW5zZWQgdW5kZXIgdGhlIFRBUFIgT3BlbiBIYXJkd2FyZSBMaWNlbnNlICh3d3cudGFwci5vcmcvT0hMKVwiIGluIGVhY2ggZG9jdW1lbnRhdGlvbiBmaWxlLiBXaGlsZSBub3QgcmVxdWlyZWQsIHlvdSBzaG91bGQgYWxzbyBpbmNsdWRlIHRoaXMgbm90aWNlIG9uIHByaW50ZWQgY2lyY3VpdCBib2FyZCBhcnR3b3JrIGFuZCB0aGUgcHJvZHVjdCBpdHNlbGY7IGlmIHNwYWNlIGlzIGxpbWl0ZWQgdGhlIG5vdGljZSBjYW4gYmUgc2hvcnRlbmVkIG9yIGFiYnJldmlhdGVkLlxuXG4gICAgICAqIEluY2x1ZGUgYSBjb3B5cmlnaHQgbm90aWNlIGluIGVhY2ggZmlsZSBhbmQgb24gcHJpbnRlZCBjaXJjdWl0IGJvYXJkIGFydHdvcmsuXG5cbiAgICAgICogSWYgeW91IHdpc2ggdG8gYmUgbm90aWZpZWQgb2YgbW9kaWZpY2F0aW9ucyB0aGF0IG90aGVycyBtYXkgbWFrZSwgaW5jbHVkZSB5b3VyIGVtYWlsIGFkZHJlc3MgaW4gYSBmaWxlIG5hbWVkIFwiQ09OVFJJQi5UWFRcIiBvciBzb21ldGhpbmcgc2ltaWxhci5cblxuICAgKiBBbnkgdGltZSB0aGUgT0hMIHJlcXVpcmVzIHlvdSB0byBtYWtlIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIHRvIG90aGVycywgeW91IG11c3QgaW5jbHVkZSBhbGwgdGhlIG1hdGVyaWFscyB5b3UgcmVjZWl2ZWQgZnJvbSB0aGUgdXBzdHJlYW0gbGljZW5zb3JzLiBJbiBhZGRpdGlvbiwgaWYgeW91IGhhdmUgbW9kaWZpZWQgdGhlIGRvY3VtZW50YXRpb246XG5cbiAgICAgICogWW91IG11c3QgaWRlbnRpZnkgdGhlIG1vZGlmaWNhdGlvbnMgaW4gYSB0ZXh0IGZpbGUgKHByZWZlcmFibHkgbmFtZWQgXCJDSEFOR0VTLlRYVFwiKSB0aGF0IHlvdSBpbmNsdWRlIHdpdGggdGhlIGRvY3VtZW50YXRpb24uIFRoYXQgZmlsZSBtdXN0IGFsc28gaW5jbHVkZSBhIHN0YXRlbWVudCBsaWtlIFwiVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgbGljZW5zZWQgdW5kZXIgdGhlIFRBUFIgT3BlbiBIYXJkd2FyZSBMaWNlbnNlLlwiXG5cbiAgICAgICogWW91IG11c3QgaW5jbHVkZSBhbnkgbmV3IGZpbGVzIHlvdSBjcmVhdGVkLCBpbmNsdWRpbmcgYW55IG1hbnVmYWN0dXJpbmcgZmlsZXMgKHN1Y2ggYXMgR2VyYmVyIGZpbGVzKSB5b3UgY3JlYXRlIGluIHRoZSBjb3Vyc2Ugb2YgbWFraW5nIHByb2R1Y3RzLlxuXG4gICAgICAqIFlvdSBtdXN0IGluY2x1ZGUgYm90aCBcImJlZm9yZVwiIGFuZCBcImFmdGVyXCIgdmVyc2lvbnMgb2YgYWxsIGZpbGVzIHlvdSBtb2RpZmllZC5cblxuICAgICAgKiBZb3UgbWF5IGluY2x1ZGUgZmlsZXMgaW4gcHJvcHJpZXRhcnkgZm9ybWF0cywgYnV0IHlvdSBtdXN0IGFsc28gaW5jbHVkZSBvcGVuIGZvcm1hdCB2ZXJzaW9ucyAoc3VjaCBhcyBHZXJiZXIsIEFTQ0lJLCBQb3N0c2NyaXB0LCBvciBQREYpIGlmIHlvdXIgdG9vbHMgY2FuIGNyZWF0ZSB0aGVtLlxuXG5URVJNUyBBTkQgQ09ORElUSU9OU1xuXG4xLiBJbnRyb2R1Y3Rpb25cblxuICAgMS4xIFRoaXMgQWdyZWVtZW50IGdvdmVybnMgaG93IHlvdSBtYXkgdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIERvY3VtZW50YXRpb24sIGFuZCBob3cgeW91IG1heSBtYWtlLCBoYXZlIG1hZGUsIGFuZCBkaXN0cmlidXRlIFByb2R1Y3RzIGJhc2VkIG9uIHRoYXQgRG9jdW1lbnRhdGlvbi4gQXMgdXNlZCBpbiB0aGlzIEFncmVlbWVudCwgdG8gXCJkaXN0cmlidXRlXCIgRG9jdW1lbnRhdGlvbiBtZWFucyB0byBkaXJlY3RseSBvciBpbmRpcmVjdGx5IG1ha2UgY29waWVzIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LCBhbmQgdG8gXCJkaXN0cmlidXRlXCIgUHJvZHVjdHMgbWVhbnMgdG8gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBnaXZlLCBsb2FuLCBzZWxsIG9yIG90aGVyd2lzZSB0cmFuc2ZlciB0aGVtIHRvIGEgdGhpcmQgcGFydHkuXG5cbiAgIDEuMiBcIkRvY3VtZW50YXRpb25cIiBpbmNsdWRlczpcblxuICAgICAgKGEpIHNjaGVtYXRpYyBkaWFncmFtcztcblxuICAgICAgKGIpIGNpcmN1aXQgb3IgY2lyY3VpdCBib2FyZCBsYXlvdXRzLCBpbmNsdWRpbmcgR2VyYmVyIGFuZCBvdGhlciBkYXRhIGZpbGVzIHVzZWQgZm9yIG1hbnVmYWN0dXJlO1xuXG4gICAgICAoYykgbWVjaGFuaWNhbCBkcmF3aW5ncywgaW5jbHVkaW5nIENBRCwgQ0FNLCBhbmQgb3RoZXIgZGF0YSBmaWxlcyB1c2VkIGZvciBtYW51ZmFjdHVyZTtcblxuICAgICAgKGQpIGZsb3cgY2hhcnRzIGFuZCBkZXNjcmlwdGl2ZSB0ZXh0OyBhbmRcblxuICAgICAgKGUpIG90aGVyIGV4cGxhbmF0b3J5IG1hdGVyaWFsLlxuXG4gICBEb2N1bWVudGF0aW9uIG1heSBiZSBpbiBhbnkgdGFuZ2libGUgb3IgaW50YW5naWJsZSBmb3JtIG9mIGV4cHJlc3Npb24sIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tcHV0ZXIgZmlsZXMgaW4gb3BlbiBvciBwcm9wcmlldGFyeSBmb3JtYXRzIGFuZCByZXByZXNlbnRhdGlvbnMgb24gcGFwZXIsIGZpbG0sIG9yIG90aGVyIG1lZGlhLlxuXG4gICAxLjMgXCJQcm9kdWN0c1wiIGluY2x1ZGU6XG5cbiAgICAgIChhKSBjaXJjdWl0IGJvYXJkcywgbWVjaGFuaWNhbCBhc3NlbWJsaWVzLCBhbmQgb3RoZXIgcGh5c2ljYWwgcGFydHMgYW5kIGNvbXBvbmVudHM7XG5cbiAgICAgIChiKSBhc3NlbWJsZWQgb3IgcGFydGlhbGx5IGFzc2VtYmxlZCB1bml0cyAoaW5jbHVkaW5nIGNvbXBvbmVudHMgYW5kIHN1YmFzc2VtYmxpZXMpOyBhbmRcblxuICAgICAgKGMpIHBhcnRzIGFuZCBjb21wb25lbnRzIGNvbWJpbmVkIGludG8ga2l0cyBpbnRlbmRlZCBmb3IgYXNzZW1ibHkgYnkgb3RoZXJzOyB3aGljaCBhcmUgYmFzZWQgaW4gd2hvbGUgb3IgaW4gcGFydCBvbiB0aGUgRG9jdW1lbnRhdGlvbi5cblxuICAgMS40IFRoaXMgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IERvY3VtZW50YXRpb24gd2hpY2ggY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyBpdCBpcyBzdWJqZWN0IHRvIHRoZSBUQVBSIE9wZW4gSGFyZHdhcmUgTGljZW5zZSwgYW5kIHRvIGFsbCBQcm9kdWN0cyBiYXNlZCBpbiB3aG9sZSBvciBpbiBwYXJ0IG9uIHRoYXQgRG9jdW1lbnRhdGlvbi4gSWYgRG9jdW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiBhbiBhcmNoaXZlIChzdWNoIGFzIGEgXCJ6aXBcIiBmaWxlKSB3aGljaCBpbmNsdWRlcyB0aGlzIGRvY3VtZW50LCBhbGwgZmlsZXMgaW4gdGhhdCBhcmNoaXZlIGFyZSBzdWJqZWN0IHRvIHRoaXMgQWdyZWVtZW50IHVubGVzcyB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgZXhjbHVkZWQuIEVhY2ggcGVyc29uIHdobyBjb250cmlidXRlcyBjb250ZW50IHRvIHRoZSBEb2N1bWVudGF0aW9uIGlzIHJlZmVycmVkIHRvIGluIHRoaXMgQWdyZWVtZW50IGFzIGEgXCJMaWNlbnNvci5cIlxuXG4gICAxLjUgQnkgKGEpIHVzaW5nLCBjb3B5aW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgRG9jdW1lbnRhdGlvbiwgb3IgKGIpIG1ha2luZyBvciBoYXZpbmcgUHJvZHVjdHMgbWFkZSBvciBkaXN0cmlidXRpbmcgdGhlbSwgeW91IGFjY2VwdCB0aGlzIEFncmVlbWVudCwgYWdyZWUgdG8gY29tcGx5IHdpdGggaXRzIHRlcm1zLCBhbmQgYmVjb21lIGEgXCJMaWNlbnNlZS5cIiBBbnkgYWN0aXZpdHkgaW5jb25zaXN0ZW50IHdpdGggdGhpcyBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciBpdCAoaW5jbHVkaW5nIHRoZSBpbW11bml0aWVzIGZyb20gc3VpdCBncmFudGVkIGluIFNlY3Rpb24gMiksIGJ1dCB0aGUgcmlnaHRzIG9mIG90aGVycyB3aG8gaGF2ZSByZWNlaXZlZCBEb2N1bWVudGF0aW9uLCBvciBoYXZlIG9idGFpbmVkIFByb2R1Y3RzLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGZyb20geW91IHdpbGwgbm90IGJlIGFmZmVjdGVkIHNvIGxvbmcgYXMgdGhleSBmdWxseSBjb21wbHkgd2l0aCBpdCB0aGVtc2VsdmVzLlxuXG4gICAxLjYgVGhpcyBBZ3JlZW1lbnQgZG9lcyBub3QgYXBwbHkgdG8gc29mdHdhcmUsIGZpcm13YXJlLCBvciBjb2RlIGxvYWRlZCBpbnRvIHByb2dyYW1tYWJsZSBkZXZpY2VzIHdoaWNoIG1heSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggRG9jdW1lbnRhdGlvbiBvciBQcm9kdWN0cy4gU3VjaCBzb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIHRoZSBsaWNlbnNlIHRlcm1zIGVzdGFibGlzaGVkIGJ5IGl0cyBjb3B5cmlnaHQgaG9sZGVyKHMpLlxuXG4yLiBQYXRlbnRzXG5cbiAgIDIuMSBFYWNoIExpY2Vuc29yIGdyYW50cyB5b3UsIGV2ZXJ5IG90aGVyIExpY2Vuc2VlLCBhbmQgZXZlcnkgcG9zc2Vzc29yIG9yIHVzZXIgb2YgUHJvZHVjdHMgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgYW5kIHJveWFsdHktZnJlZSBpbW11bml0eSBmcm9tIHN1aXQgdW5kZXIgYW55IHBhdGVudCwgcGF0ZW50IGFwcGxpY2F0aW9uLCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgd2hpY2ggaGUgb3Igc2hlIGNvbnRyb2xzLCB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlLCBoYXZlIG1hZGUsIHBvc3Nlc3MsIHVzZSwgYW5kIGRpc3RyaWJ1dGUgUHJvZHVjdHMuIFRoaXMgaW1tdW5pdHkgZG9lcyBub3QgZXh0ZW5kIHRvIGluZnJpbmdlbWVudCBhcmlzaW5nIGZyb20gbW9kaWZpY2F0aW9ucyBzdWJzZXF1ZW50bHkgbWFkZSBieSBvdGhlcnMuXG5cbiAgIDIuMiBJZiB5b3UgbWFrZSBvciBoYXZlIFByb2R1Y3RzIG1hZGUsIG9yIGRpc3RyaWJ1dGUgRG9jdW1lbnRhdGlvbiB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkLCB5b3UgZ3JhbnQgZXZlcnkgTGljZW5zb3IsIGV2ZXJ5IG90aGVyIExpY2Vuc2VlLCBhbmQgZXZlcnkgcG9zc2Vzc29yIG9yIHVzZXIgb2YgUHJvZHVjdHMgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgYW5kIHJveWFsdHktZnJlZSBpbW11bml0eSBmcm9tIHN1aXQgdW5kZXIgYW55IHBhdGVudCwgcGF0ZW50IGFwcGxpY2F0aW9uLCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgd2hpY2ggeW91IGNvbnRyb2wsIHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UsIGhhdmUgbWFkZSwgcG9zc2VzcywgdXNlLCBhbmQgZGlzdHJpYnV0ZSBQcm9kdWN0cy4gVGhpcyBpbW11bml0eSBkb2VzIG5vdCBleHRlbmQgdG8gaW5mcmluZ2VtZW50IGFyaXNpbmcgZnJvbSBtb2RpZmljYXRpb25zIHN1YnNlcXVlbnRseSBtYWRlIGJ5IG90aGVycy5cblxuICAgMi4zIFRvIGF2b2lkIGRvdWJ0LCBwcm92aWRpbmcgRG9jdW1lbnRhdGlvbiB0byBhIHRoaXJkIHBhcnR5IGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIGhhdmluZyB0aGF0IHBhcnR5IG1ha2UgUHJvZHVjdHMgb24geW91ciBiZWhhbGYgaXMgbm90IGNvbnNpZGVyZWQgXCJkaXN0cmlidXRpb24sXCJcXFwiIGFuZCBhIHRoaXJkIHBhcnR5J3MgYWN0IG9mIG1ha2luZyBQcm9kdWN0cyBzb2xlbHkgb24geW91ciBiZWhhbGYgZG9lcyBub3QgY2F1c2UgdGhhdCBwYXJ0eSB0byBncmFudCB0aGUgaW1tdW5pdHkgZGVzY3JpYmVkIGluIHRoZSBwcmVjZWRpbmcgcGFyYWdyYXBoLlxuXG4gICAyLjQgVGhlc2UgZ3JhbnRzIG9mIGltbXVuaXR5IGFyZSBhIG1hdGVyaWFsIHBhcnQgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCBmb3JtIGEgcG9ydGlvbiBvZiB0aGUgY29uc2lkZXJhdGlvbiBnaXZlbiBieSBlYWNoIHBhcnR5IHRvIHRoZSBvdGhlci4gSWYgYW55IGNvdXJ0IGp1ZGdtZW50IG9yIGxlZ2FsIGFncmVlbWVudCBwcmV2ZW50cyB5b3UgZnJvbSBncmFudGluZyB0aGUgaW1tdW5pdHkgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uLCB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB3aWxsIHRlcm1pbmF0ZSBhbmQgeW91IG1heSBubyBsb25nZXIgdXNlLCBjb3B5LCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnRhdGlvbiwgb3IgbWFrZSwgaGF2ZSBtYWRlLCBvciBkaXN0cmlidXRlIFByb2R1Y3RzLlxuXG4zLiBNb2RpZmljYXRpb25zXG5cbllvdSBtYXkgbW9kaWZ5IHRoZSBEb2N1bWVudGF0aW9uLCBhbmQgdGhvc2UgbW9kaWZpY2F0aW9ucyB3aWxsIGJlY29tZSBwYXJ0IG9mIHRoZSBEb2N1bWVudGF0aW9uLiBUaGV5IGFyZSBzdWJqZWN0IHRvIHRoaXMgQWdyZWVtZW50LCBhcyBhcmUgUHJvZHVjdHMgYmFzZWQgaW4gd2hvbGUgb3IgaW4gcGFydCBvbiB0aGVtLiBJZiB5b3UgZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiwgb3IgUHJvZHVjdHMgYmFzZWQgaW4gd2hvbGUgb3IgaW4gcGFydCB1cG9uIGl0LCB5b3UgbXVzdCBlbWFpbCB0aGUgbW9kaWZpZWQgRG9jdW1lbnRhdGlvbiBpbiBhIGZvcm0gY29tcGxpYW50IHdpdGggU2VjdGlvbiA0IHRvIGVhY2ggTGljZW5zb3Igd2hvIGhhcyBwcm92aWRlZCBhbiBlbWFpbCBhZGRyZXNzIHdpdGggdGhlIERvY3VtZW50YXRpb24uIEF0dGVtcHRpbmcgdG8gc2VuZCB0aGUgZW1haWwgY29tcGxldGVzIHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBTZWN0aW9uIGFuZCB5b3UgbmVlZCB0YWtlIG5vIGZ1cnRoZXIgYWN0aW9uIGlmIGFueSBhZGRyZXNzIGZhaWxzLlxuXG40LiBEaXN0cmlidXRpbmcgRG9jdW1lbnRhdGlvblxuXG4gICA0LjEgWW91IG1heSBkaXN0cmlidXRlIHVubW9kaWZpZWQgY29waWVzIG9mIHRoZSBEb2N1bWVudGF0aW9uIGluIGl0cyBlbnRpcmV0eSBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSByZXRhaW4gYWxsIGNvcHlyaWdodCBhbmQgb3RoZXIgbm90aWNlcyAoaW5jbHVkaW5nIHJlZmVyZW5jZXMgdG8gdGhpcyBBZ3JlZW1lbnQpIGluY2x1ZGVkIGJ5IGVhY2ggTGljZW5zb3IsIGFuZCBpbmNsdWRlIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoaXMgQWdyZWVtZW50LlxuXG4gICA0LjIgWW91IG1heSBkaXN0cmlidXRlIG1vZGlmaWVkIGNvcGllcyBvZiB0aGUgRG9jdW1lbnRhdGlvbiBpZiB5b3UgY29tcGx5IHdpdGggYWxsIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIHByZWNlZGluZyBwYXJhZ3JhcGggYW5kOlxuXG4gICAgICAoYSkgaW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UgaW4gYW4gQVNDSUkgb3Igb3RoZXIgb3BlbiBmb3JtYXQgZmlsZSBpZGVudGlmeWluZyB0aG9zZSBlbGVtZW50cyBvZiB0aGUgRG9jdW1lbnRhdGlvbiB0aGF0IHlvdSBjaGFuZ2VkLCBhbmQgc3RhdGluZyB0aGF0IHRoZSBtb2RpZmljYXRpb25zIGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQ7XG5cbiAgICAgIChiKSBpbmNsdWRlIGFsbCBuZXcgZG9jdW1lbnRhdGlvbiBmaWxlcyB0aGF0IHlvdSBjcmVhdGUsIGFzIHdlbGwgYXMgYm90aCB0aGUgb3JpZ2luYWwgYW5kIG1vZGlmaWVkIHZlcnNpb25zIG9mIGVhY2ggZmlsZSB5b3UgY2hhbmdlIChmaWxlcyBtYXkgYmUgaW4geW91ciBkZXZlbG9wbWVudCB0b29sJ3MgbmF0aXZlIGZpbGUgZm9ybWF0LCBidXQgaWYgcmVhc29uYWJseSBwb3NzaWJsZSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIG9wZW4gZm9ybWF0LCBzdWNoIGFzIEdlcmJlciwgQVNDSUksIFBvc3RzY3JpcHQsIG9yIFBERiwgdmVyc2lvbnMpO1xuXG4gICAgICAoYykgZG8gbm90IGNoYW5nZSB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQgd2l0aCByZXNwZWN0IHRvIHN1YnNlcXVlbnQgbGljZW5zZWVzOyBhbmRcblxuICAgICAgKGQpIGlmIHlvdSBtYWtlIG9yIGhhdmUgUHJvZHVjdHMgbWFkZSwgaW5jbHVkZSBpbiB0aGUgRG9jdW1lbnRhdGlvbiBhbGwgZWxlbWVudHMgcmVhc29uYWJseSByZXF1aXJlZCB0byBwZXJtaXQgb3RoZXJzIHRvIG1ha2UgUHJvZHVjdHMsIGluY2x1ZGluZyBHZXJiZXIsIENBRC9DQU0gYW5kIG90aGVyIGZpbGVzIHVzZWQgZm9yIG1hbnVmYWN0dXJlLlxuXG41LiBNYWtpbmcgUHJvZHVjdHNcblxuICAgNS4xIFlvdSBtYXkgdXNlIHRoZSBEb2N1bWVudGF0aW9uIHRvIG1ha2Ugb3IgaGF2ZSBQcm9kdWN0cyBtYWRlLCBwcm92aWRlZCB0aGF0IGVhY2ggUHJvZHVjdCByZXRhaW5zIGFueSBub3RpY2VzIGluY2x1ZGVkIGJ5IHRoZSBMaWNlbnNvciAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGNvcHlyaWdodCBub3RpY2VzIG9uIGNpcmN1aXQgYm9hcmRzKS5cblxuICAgNS4yIFlvdSBtYXkgZGlzdHJpYnV0ZSBQcm9kdWN0cyB5b3UgbWFrZSBvciBoYXZlIG1hZGUsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgd2l0aCBlYWNoIHVuaXQgYSBjb3B5IG9mIHRoZSBEb2N1bWVudGF0aW9uIGluIGEgZm9ybSBjb25zaXN0ZW50IHdpdGggU2VjdGlvbiA0LiBBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGluY2x1ZGUgZWl0aGVyIChpKSBhbiBvZmZlciB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgdG8gcHJvdmlkZSB0aGF0IERvY3VtZW50YXRpb24sIGF0IG5vIGNoYXJnZSBvdGhlciB0aGFuIHRoZSByZWFzb25hYmxlIGNvc3Qgb2YgbWVkaWEgYW5kIHBvc3RhZ2UsIHRvIGFueSBwZXJzb24gd2hvIHJlcXVlc3RzIGl0OyBvciAoaWkpIGEgVVJMIHdoZXJlIHRoYXQgRG9jdW1lbnRhdGlvbiBtYXkgYmUgZG93bmxvYWRlZCwgYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhZnRlciB5b3UgbGFzdCBkaXN0cmlidXRlIHRoZSBQcm9kdWN0LlxuXG42LiBORVcgTElDRU5TRSBWRVJTSU9OU1xuXG5UQVBSIG1heSBwdWJsaXNoIHVwZGF0ZWQgdmVyc2lvbnMgb2YgdGhlIE9ITCB3aGljaCByZXRhaW4gdGhlIHNhbWUgZ2VuZXJhbCBwcm92aXNpb25zIGFzIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLCBhbmQgY2FycnkgYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIERvY3VtZW50YXRpb24gc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgXCJhbnkgbGF0ZXIgdmVyc2lvblwiLCB5b3UgbWF5IGNob29zZSBlaXRoZXIgdGhhdCB2ZXJzaW9uIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSBUQVBSLiBJZiB0aGUgRG9jdW1lbnRhdGlvbiBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IFRBUFIuIFRBUFIgb3ducyB0aGUgY29weXJpZ2h0IHRvIHRoZSBPSEwsIGJ1dCBncmFudHMgcGVybWlzc2lvbiB0byBhbnkgcGVyc29uIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGFuZCB1c2UgaXQgaW4gdW5tb2RpZmllZCBmb3JtLlxuXG43LiBXQVJSQU5UWSBBTkQgTElBQklMSVRZIExJTUlUQVRJT05TXG5cbiAgIDcuMSBUSEUgRE9DVU1FTlRBVElPTiBJUyBQUk9WSURFRCBPTiBBTlwiQVMtSVNcIiBCQVNJUyBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgVElUTEUsIEFSRSBIRVJFQlkgRVhQUkVTU0xZIERJU0NMQUlNRUQuXG5cbiAgIDcuMiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgV0lMTCBBTlkgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgVEhJUkQgUEFSVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSwgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiwgT1IgSU5BQklMSVRZIFRPIFVTRSwgVEhFIERPQ1VNRU5UQVRJT04gT1IgUFJPRFVDVFMsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQ0xBSU1TIE9GIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBJTkZSSU5HRU1FTlQgT1IgTE9TUyBPRiBEQVRBLCBFVkVOIElGIFRIQVQgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG4gICA3LjMgWW91IGFncmVlIHRoYXQgdGhlIGZvcmVnb2luZyBsaW1pdGF0aW9ucyBhcmUgcmVhc29uYWJsZSBkdWUgdG8gdGhlIG5vbi1maW5hbmNpYWwgbmF0dXJlIG9mIHRoZSB0cmFuc2FjdGlvbiByZXByZXNlbnRlZCBieSB0aGlzIEFncmVlbWVudCwgYW5kIGFja25vd2xlZGdlIHRoYXQgd2VyZSBpdCBub3QgZm9yIHRoZXNlIGxpbWl0YXRpb25zLCB0aGUgTGljZW5zb3Iocykgd291bGQgbm90IGJlIHdpbGxpbmcgdG8gbWFrZSB0aGUgRG9jdW1lbnRhdGlvbiBhdmFpbGFibGUgdG8geW91LlxuXG4gICA3LjQgWW91IGFncmVlIHRvIGRlZmVuZCwgaW5kZW1uaWZ5LCBhbmQgaG9sZCBlYWNoIExpY2Vuc29yIGhhcm1sZXNzIGZyb20gYW55IGNsYWltIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhbGxlZ2luZyBhbnkgZGVmZWN0IGluIHRoZSBkZXNpZ24sIG1hbnVmYWN0dXJlLCBvciBvcGVyYXRpb24gb2YgYW55IFByb2R1Y3Qgd2hpY2ggeW91IG1ha2UsIGhhdmUgbWFkZSwgb3IgZGlzdHJpYnV0ZSBwdXJzdWFudCB0byB0aGlzIEFncmVlbWVudC5cblxuIyMjIyJdLCJsaWNlbnNlSWRzIjpbIlRBUFItT0hMLTEuMCJdLCJrZXl3b3JkcyI6WyIxIDAgbWF5IiwiMCBtYXkgMjUiLCJtYXkgMjUgMjAwNyIsIjI1IDIwMDcgY29weXJpZ2h0IiwiY29weXJpZ2h0IDIwMDcgdGFwciIsIjIwMDcgdGFwciBodHRwIiwidGFwciBodHRwIHd3dyIsImh0dHAgd3d3IHRhcHIiLCJvcmcgb2hsIHByZWFtYmxlIiwib2hsIHByZWFtYmxlIG9wZW4iLCJwcmVhbWJsZSBvcGVuIGhhcmR3YXJlIiwib3BlbiBoYXJkd2FyZSBpcyIsImhhcmR3YXJlIGlzIGEiLCJpcyBhIHRoaW5nIiwiYSB0aGluZyBhIiwidGhpbmcgYSBwaHlzaWNhbCIsImEgcGh5c2ljYWwgYXJ0aWZhY3QiLCJwaHlzaWNhbCBhcnRpZmFjdCBlaXRoZXIiLCJhcnRpZmFjdCBlaXRoZXIgZWxlY3RyaWNhbCIsImVpdGhlciBlbGVjdHJpY2FsIG9yIiwiZWxlY3RyaWNhbCBvciBtZWNoYW5pY2FsIiwib3IgbWVjaGFuaWNhbCB3aG9zZSIsIm1lY2hhbmljYWwgd2hvc2UgZGVzaWduIiwid2hvc2UgZGVzaWduIGluZm9ybWF0aW9uIiwiaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIiwiYXZhaWxhYmxlIHRvIGFuZCIsInRvIGFuZCB1c2FibGUiLCJhbmQgdXNhYmxlIGJ5IiwidXNhYmxlIGJ5IHRoZSIsIndheSB0aGF0IGFsbG93cyIsInRoYXQgYWxsb3dzIGFueW9uZSIsImFsbG93cyBhbnlvbmUgdG8iLCJhbnlvbmUgdG8gbWFrZSIsInRvIG1ha2UgbW9kaWZ5IiwibWFrZSBtb2RpZnkgZGlzdHJpYnV0ZSIsImFuZCB1c2UgdGhhdCIsInVzZSB0aGF0IHRoaW5nIiwidGhhdCB0aGluZyBpbiIsInRoaW5nIGluIHRoaXMiLCJpbiB0aGlzIHByZWZhY2UiLCJ0aGlzIHByZWZhY2UgZGVzaWduIiwicHJlZmFjZSBkZXNpZ24gaW5mb3JtYXRpb24iLCJpbmZvcm1hdGlvbiBpcyBjYWxsZWQiLCJpcyBjYWxsZWQgZG9jdW1lbnRhdGlvbiIsImNhbGxlZCBkb2N1bWVudGF0aW9uIGFuZCIsImRvY3VtZW50YXRpb24gYW5kIHRoaW5ncyIsImFuZCB0aGluZ3MgY3JlYXRlZCIsInRoaW5ncyBjcmVhdGVkIGZyb20iLCJjcmVhdGVkIGZyb20gaXQiLCJmcm9tIGl0IGFyZSIsIml0IGFyZSBjYWxsZWQiLCJhcmUgY2FsbGVkIHByb2R1Y3RzIiwiY2FsbGVkIHByb2R1Y3RzIHRoZSIsInByb2R1Y3RzIHRoZSB0YXByIiwiaGFyZHdhcmUgbGljZW5zZSBvaGwiLCJsaWNlbnNlIG9obCBhZ3JlZW1lbnQiLCJvaGwgYWdyZWVtZW50IHByb3ZpZGVzIiwiYWdyZWVtZW50IHByb3ZpZGVzIGEiLCJwcm92aWRlcyBhIGxlZ2FsIiwiYSBsZWdhbCBmcmFtZXdvcmsiLCJsZWdhbCBmcmFtZXdvcmsgZm9yIiwiZnJhbWV3b3JrIGZvciBvcGVuIiwiZm9yIG9wZW4gaGFyZHdhcmUiLCJvcGVuIGhhcmR3YXJlIHByb2plY3RzIiwiaGFyZHdhcmUgcHJvamVjdHMgaXQiLCJwcm9qZWN0cyBpdCBtYXkiLCJraW5kIG9mIHByb2R1Y3QiLCJvZiBwcm9kdWN0IGJlIiwicHJvZHVjdCBiZSBpdCIsImJlIGl0IGEiLCJpdCBhIGhhbW1lciIsImEgaGFtbWVyIG9yIiwiaGFtbWVyIG9yIGEiLCJvciBhIGNvbXB1dGVyIiwiYSBjb21wdXRlciBtb3RoZXJib2FyZCIsImNvbXB1dGVyIG1vdGhlcmJvYXJkIGFuZCIsIm1vdGhlcmJvYXJkIGFuZCBpcyIsImFuZCBpcyB0YXByIiwiaXMgdGFwciBzIiwidGFwciBzIGNvbnRyaWJ1dGlvbiIsInMgY29udHJpYnV0aW9uIHRvIiwidGhlIGNvbW11bml0eSBhbnlvbmUiLCJjb21tdW5pdHkgYW55b25lIG1heSIsImFueW9uZSBtYXkgdXNlIiwidGhlIG9obCBmb3IiLCJvaGwgZm9yIHRoZWlyIiwiZm9yIHRoZWlyIG9wZW4iLCJ0aGVpciBvcGVuIGhhcmR3YXJlIiwib3BlbiBoYXJkd2FyZSBwcm9qZWN0IiwiaGFyZHdhcmUgcHJvamVjdCBsaWtlIiwicHJvamVjdCBsaWtlIHRoZSIsImxpa2UgdGhlIGdudSIsImxpY2Vuc2UgdGhlIG9obCIsIm9obCBpcyBkZXNpZ25lZCIsImRlc2lnbmVkIHRvIGd1YXJhbnRlZSIsInNoYXJlIGFuZCB0byIsImFuZCB0byBjcmVhdGUiLCJ0byBjcmVhdGUgaXQiLCJjcmVhdGUgaXQgZm9yYmlkcyIsIml0IGZvcmJpZHMgYW55b25lIiwiZm9yYmlkcyBhbnlvbmUgd2hvIiwid2hvIHJlY2VpdmVzIHJpZ2h0cyIsInJlY2VpdmVzIHJpZ2h0cyB1bmRlciIsInRoZSBvaGwgdG8iLCJvaGwgdG8gZGVueSIsImRlbnkgYW55IG90aGVyIiwiYW55IG90aGVyIGxpY2Vuc2VlIiwib3RoZXIgbGljZW5zZWUgdGhvc2UiLCJsaWNlbnNlZSB0aG9zZSBzYW1lIiwic2FtZSByaWdodHMgdG8iLCJtYWtlIHVzZSBhbmQiLCJ0aGF0IGRvY3VtZW50YXRpb24gdW5saWtlIiwiZG9jdW1lbnRhdGlvbiB1bmxpa2UgdGhlIiwidW5saWtlIHRoZSBncGwiLCJ0aGUgZ3BsIHRoZSIsImdwbCB0aGUgb2hsIiwib2hsIGlzIG5vdCIsImlzIG5vdCBwcmltYXJpbHkiLCJub3QgcHJpbWFyaWx5IGEiLCJwcmltYXJpbHkgYSBjb3B5cmlnaHQiLCJjb3B5cmlnaHQgbGljZW5zZSB3aGlsZSIsImxpY2Vuc2Ugd2hpbGUgY29weXJpZ2h0Iiwid2hpbGUgY29weXJpZ2h0IHByb3RlY3RzIiwiY29weXJpZ2h0IHByb3RlY3RzIGRvY3VtZW50YXRpb24iLCJwcm90ZWN0cyBkb2N1bWVudGF0aW9uIGZyb20iLCJkb2N1bWVudGF0aW9uIGZyb20gdW5hdXRob3JpemVkIiwiZnJvbSB1bmF1dGhvcml6ZWQgY29weWluZyIsInVuYXV0aG9yaXplZCBjb3B5aW5nIG1vZGlmaWNhdGlvbiIsImNvcHlpbmcgbW9kaWZpY2F0aW9uIGFuZCIsImFuZCBkaXN0cmlidXRpb24gaXQiLCJkaXN0cmlidXRpb24gaXQgaGFzIiwiaXQgaGFzIGxpdHRsZSIsImhhcyBsaXR0bGUgdG8iLCJsaXR0bGUgdG8gZG8iLCJ0byBkbyB3aXRoIiwid2l0aCB5b3VyIHJpZ2h0IiwidG8gbWFrZSBkaXN0cmlidXRlIiwibWFrZSBkaXN0cmlidXRlIG9yIiwidXNlIGEgcHJvZHVjdCIsImEgcHJvZHVjdCBiYXNlZCIsInByb2R1Y3QgYmFzZWQgb24iLCJ0aGF0IGRvY3VtZW50YXRpb24gZm9yIiwiZG9jdW1lbnRhdGlvbiBmb3IgYmV0dGVyIiwiZm9yIGJldHRlciBvciIsImJldHRlciBvciB3b3JzZSIsIm9yIHdvcnNlIHBhdGVudHMiLCJ3b3JzZSBwYXRlbnRzIHBsYXkiLCJwYXRlbnRzIHBsYXkgYSIsInBsYXkgYSBzaWduaWZpY2FudCIsImEgc2lnbmlmaWNhbnQgcm9sZSIsInNpZ25pZmljYW50IHJvbGUgaW4iLCJyb2xlIGluIHRob3NlIiwiaW4gdGhvc2UgYWN0aXZpdGllcyIsInRob3NlIGFjdGl2aXRpZXMgYWx0aG91Z2giLCJhY3Rpdml0aWVzIGFsdGhvdWdoIGl0IiwiYWx0aG91Z2ggaXQgZG9lcyIsImRvZXMgbm90IHByb2hpYml0Iiwibm90IHByb2hpYml0IGFueW9uZSIsInByb2hpYml0IGFueW9uZSBmcm9tIiwiYW55b25lIGZyb20gcGF0ZW50aW5nIiwiZnJvbSBwYXRlbnRpbmcgaW52ZW50aW9ucyIsInBhdGVudGluZyBpbnZlbnRpb25zIGVtYm9kaWVkIiwiaW52ZW50aW9ucyBlbWJvZGllZCBpbiIsImVtYm9kaWVkIGluIGFuIiwiaW4gYW4gb3BlbiIsImFuIG9wZW4gaGFyZHdhcmUiLCJvcGVuIGhhcmR3YXJlIGRlc2lnbiIsImRlc2lnbiBhbmQgb2YiLCJhbmQgb2YgY291cnNlIiwib2YgY291cnNlIGNhbm5vdCIsImNvdXJzZSBjYW5ub3QgcHJldmVudCIsImNhbm5vdCBwcmV2ZW50IGEiLCJwcmV2ZW50IGEgdGhpcmQiLCJ0aGlyZCBwYXJ0eSBmcm9tIiwicGFydHkgZnJvbSBlbmZvcmNpbmciLCJmcm9tIGVuZm9yY2luZyB0aGVpciIsImVuZm9yY2luZyB0aGVpciBwYXRlbnQiLCJ0aGVpciBwYXRlbnQgcmlnaHRzIiwicGF0ZW50IHJpZ2h0cyB0aG9zZSIsInJpZ2h0cyB0aG9zZSB3aG8iLCJ0aG9zZSB3aG8gYmVuZWZpdCIsIndobyBiZW5lZml0IGZyb20iLCJiZW5lZml0IGZyb20gYW4iLCJmcm9tIGFuIG9obCIsImFuIG9obCBkZXNpZ24iLCJvaGwgZGVzaWduIG1heSIsImRlc2lnbiBtYXkgbm90IiwibWF5IG5vdCBicmluZyIsIm5vdCBicmluZyBsYXdzdWl0cyIsImJyaW5nIGxhd3N1aXRzIGNsYWltaW5nIiwibGF3c3VpdHMgY2xhaW1pbmcgdGhhdCIsImNsYWltaW5nIHRoYXQgZGVzaWduIiwidGhhdCBkZXNpZ24gaW5mcmluZ2VzIiwiZGVzaWduIGluZnJpbmdlcyB0aGVpciIsImluZnJpbmdlcyB0aGVpciBwYXRlbnRzIiwidGhlaXIgcGF0ZW50cyBvciIsImludGVsbGVjdHVhbCBwcm9wZXJ0eSB0aGUiLCJwcm9wZXJ0eSB0aGUgb2hsIiwidGhlIG9obCBhZGRyZXNzZXMiLCJvaGwgYWRkcmVzc2VzIHVuaXF1ZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGlzIHNvZnR3YXJlIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4sIFNjcmlwdGljcyBDb3Jwb3JhdGlvbiwgQWN0aXZlU3RhdGUgQ29ycG9yYXRpb24gYW5kIG90aGVyIHBhcnRpZXMuIFRoZSBmb2xsb3dpbmcgdGVybXMgYXBwbHkgdG8gYWxsIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc29mdHdhcmUgdW5sZXNzIGV4cGxpY2l0bHkgZGlzY2xhaW1lZCBpbiBpbmRpdmlkdWFsIGZpbGVzLlxuXG5UaGUgYXV0aG9ycyBoZXJlYnkgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIGxpY2Vuc2UgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IGV4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCBpbiBhbGwgY29waWVzIGFuZCB0aGF0IHRoaXMgbm90aWNlIGlzIGluY2x1ZGVkIHZlcmJhdGltIGluIGFueSBkaXN0cmlidXRpb25zLiBObyB3cml0dGVuIGFncmVlbWVudCwgbGljZW5zZSwgb3Igcm95YWx0eSBmZWUgaXMgcmVxdWlyZWQgZm9yIGFueSBvZiB0aGUgYXV0aG9yaXplZCB1c2VzLiBNb2RpZmljYXRpb25zIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIGNvcHlyaWdodGVkIGJ5IHRoZWlyIGF1dGhvcnMgYW5kIG5lZWQgbm90IGZvbGxvdyB0aGUgbGljZW5zaW5nIHRlcm1zIGRlc2NyaWJlZCBoZXJlLCBwcm92aWRlZCB0aGF0IHRoZSBuZXcgdGVybXMgYXJlIGNsZWFybHkgaW5kaWNhdGVkIG9uIHRoZSBmaXJzdCBwYWdlIG9mIGVhY2ggZmlsZSB3aGVyZSB0aGV5IGFwcGx5LlxuXG5JTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBESVNUUklCVVRPUlMgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgSVRTIERPQ1VNRU5UQVRJT04sIE9SIEFOWSBERVJJVkFUSVZFUyBUSEVSRU9GLCBFVkVOIElGIFRIRSBBVVRIT1JTIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuVEhFIEFVVEhPUlMgQU5EIERJU1RSSUJVVE9SUyBTUEVDSUZJQ0FMTFkgRElTQ0xBSU0gQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIE9OIEFOIFwiQVMgSVNcIiBCQVNJUywgQU5EIFRIRSBBVVRIT1JTIEFORCBESVNUUklCVVRPUlMgSEFWRSBOTyBPQkxJR0FUSU9OIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy5cblxuR09WRVJOTUVOVCBVU0U6IElmIHlvdSBhcmUgYWNxdWlyaW5nIHRoaXMgc29mdHdhcmUgb24gYmVoYWxmIG9mIHRoZSBVLlMuIGdvdmVybm1lbnQsIHRoZSBHb3Zlcm5tZW50IHNoYWxsIGhhdmUgb25seSBcIlJlc3RyaWN0ZWQgUmlnaHRzXCIgaW4gdGhlIHNvZnR3YXJlIGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24gYXMgZGVmaW5lZCBpbiB0aGUgRmVkZXJhbCBBY3F1aXNpdGlvbiBSZWd1bGF0aW9ucyAoRkFScykgaW4gQ2xhdXNlIDUyLjIyNy4xOSAoYykgKDIpLiBJZiB5b3UgYXJlIGFjcXVpcmluZyB0aGUgc29mdHdhcmUgb24gYmVoYWxmIG9mIHRoZSBEZXBhcnRtZW50IG9mIERlZmVuc2UsIHRoZSBzb2Z0d2FyZSBzaGFsbCBiZSBjbGFzc2lmaWVkIGFzIFwiQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZVwiIGFuZCB0aGUgR292ZXJubWVudCBzaGFsbCBoYXZlIG9ubHkgXCJSZXN0cmljdGVkIFJpZ2h0c1wiIGFzIGRlZmluZWQgaW4gQ2xhdXNlIDI1Mi4yMjctNzAxMyAoYykgKDEpIG9mIERGQVJzLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgdGhlIGF1dGhvcnMgZ3JhbnQgdGhlIFUuUy4gR292ZXJubWVudCBhbmQgb3RoZXJzIGFjdGluZyBpbiBpdHMgYmVoYWxmIHBlcm1pc3Npb24gdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuIl0sImxpY2Vuc2VJZHMiOlsiVENMIl0sImtleXdvcmRzIjpbInNvZnR3YXJlIGlzIGNvcHlyaWdodGVkIiwib2YgY2FsaWZvcm5pYSBzdW4iLCJjYWxpZm9ybmlhIHN1biBtaWNyb3N5c3RlbXMiLCJtaWNyb3N5c3RlbXMgaW5jIHNjcmlwdGljcyIsImluYyBzY3JpcHRpY3MgY29ycG9yYXRpb24iLCJzY3JpcHRpY3MgY29ycG9yYXRpb24gYWN0aXZlc3RhdGUiLCJjb3Jwb3JhdGlvbiBhY3RpdmVzdGF0ZSBjb3Jwb3JhdGlvbiIsImFjdGl2ZXN0YXRlIGNvcnBvcmF0aW9uIGFuZCIsImNvcnBvcmF0aW9uIGFuZCBvdGhlciIsImFuZCBvdGhlciBwYXJ0aWVzIiwib3RoZXIgcGFydGllcyB0aGUiLCJwYXJ0aWVzIHRoZSBmb2xsb3dpbmciLCJzb2Z0d2FyZSB1bmxlc3MgZXhwbGljaXRseSIsImZpbGVzIHRoZSBhdXRob3JzIiwidGhpcyBzb2Z0d2FyZSBpcyBjb3B5cmlnaHRlZCIsInNvZnR3YXJlIGlzIGNvcHlyaWdodGVkIGJ5IiwiY29weXJpZ2h0ZWQgYnkgdGhlIHJlZ2VudHMiLCJ1bml2ZXJzaXR5IG9mIGNhbGlmb3JuaWEgc3VuIiwib2YgY2FsaWZvcm5pYSBzdW4gbWljcm9zeXN0ZW1zIiwiY2FsaWZvcm5pYSBzdW4gbWljcm9zeXN0ZW1zIGluYyIsInN1biBtaWNyb3N5c3RlbXMgaW5jIHNjcmlwdGljcyIsIm1pY3Jvc3lzdGVtcyBpbmMgc2NyaXB0aWNzIGNvcnBvcmF0aW9uIiwiaW5jIHNjcmlwdGljcyBjb3Jwb3JhdGlvbiBhY3RpdmVzdGF0ZSIsInNjcmlwdGljcyBjb3Jwb3JhdGlvbiBhY3RpdmVzdGF0ZSBjb3Jwb3JhdGlvbiIsImNvcnBvcmF0aW9uIGFjdGl2ZXN0YXRlIGNvcnBvcmF0aW9uIGFuZCIsImFjdGl2ZXN0YXRlIGNvcnBvcmF0aW9uIGFuZCBvdGhlciIsImNvcnBvcmF0aW9uIGFuZCBvdGhlciBwYXJ0aWVzIiwiYW5kIG90aGVyIHBhcnRpZXMgdGhlIiwib3RoZXIgcGFydGllcyB0aGUgZm9sbG93aW5nIiwicGFydGllcyB0aGUgZm9sbG93aW5nIHRlcm1zIiwid2l0aCB0aGUgc29mdHdhcmUgdW5sZXNzIiwidGhlIHNvZnR3YXJlIHVubGVzcyBleHBsaWNpdGx5Iiwic29mdHdhcmUgdW5sZXNzIGV4cGxpY2l0bHkgZGlzY2xhaW1lZCIsImluIGluZGl2aWR1YWwgZmlsZXMgdGhlIiwiaW5kaXZpZHVhbCBmaWxlcyB0aGUgYXV0aG9ycyIsImZpbGVzIHRoZSBhdXRob3JzIGhlcmVieSIsInRoaXMgc29mdHdhcmUgaXMgY29weXJpZ2h0ZWQgYnkiLCJzb2Z0d2FyZSBpcyBjb3B5cmlnaHRlZCBieSB0aGUiLCJpcyBjb3B5cmlnaHRlZCBieSB0aGUgcmVnZW50cyIsImNvcHlyaWdodGVkIGJ5IHRoZSByZWdlbnRzIG9mIiwidGhlIHVuaXZlcnNpdHkgb2YgY2FsaWZvcm5pYSBzdW4iLCJ1bml2ZXJzaXR5IG9mIGNhbGlmb3JuaWEgc3VuIG1pY3Jvc3lzdGVtcyIsIm9mIGNhbGlmb3JuaWEgc3VuIG1pY3Jvc3lzdGVtcyBpbmMiLCJjYWxpZm9ybmlhIHN1biBtaWNyb3N5c3RlbXMgaW5jIHNjcmlwdGljcyIsInN1biBtaWNyb3N5c3RlbXMgaW5jIHNjcmlwdGljcyBjb3Jwb3JhdGlvbiIsIm1pY3Jvc3lzdGVtcyBpbmMgc2NyaXB0aWNzIGNvcnBvcmF0aW9uIGFjdGl2ZXN0YXRlIiwiaW5jIHNjcmlwdGljcyBjb3Jwb3JhdGlvbiBhY3RpdmVzdGF0ZSBjb3Jwb3JhdGlvbiIsInNjcmlwdGljcyBjb3Jwb3JhdGlvbiBhY3RpdmVzdGF0ZSBjb3Jwb3JhdGlvbiBhbmQiLCJjb3Jwb3JhdGlvbiBhY3RpdmVzdGF0ZSBjb3Jwb3JhdGlvbiBhbmQgb3RoZXIiLCJhY3RpdmVzdGF0ZSBjb3Jwb3JhdGlvbiBhbmQgb3RoZXIgcGFydGllcyIsImNvcnBvcmF0aW9uIGFuZCBvdGhlciBwYXJ0aWVzIHRoZSIsImFuZCBvdGhlciBwYXJ0aWVzIHRoZSBmb2xsb3dpbmciLCJvdGhlciBwYXJ0aWVzIHRoZSBmb2xsb3dpbmcgdGVybXMiLCJwYXJ0aWVzIHRoZSBmb2xsb3dpbmcgdGVybXMgYXBwbHkiLCJhc3NvY2lhdGVkIHdpdGggdGhlIHNvZnR3YXJlIHVubGVzcyIsIndpdGggdGhlIHNvZnR3YXJlIHVubGVzcyBleHBsaWNpdGx5IiwidGhlIHNvZnR3YXJlIHVubGVzcyBleHBsaWNpdGx5IGRpc2NsYWltZWQiLCJzb2Z0d2FyZSB1bmxlc3MgZXhwbGljaXRseSBkaXNjbGFpbWVkIGluIiwiZGlzY2xhaW1lZCBpbiBpbmRpdmlkdWFsIGZpbGVzIHRoZSIsImluIGluZGl2aWR1YWwgZmlsZXMgdGhlIGF1dGhvcnMiLCJpbmRpdmlkdWFsIGZpbGVzIHRoZSBhdXRob3JzIGhlcmVieSIsImZpbGVzIHRoZSBhdXRob3JzIGhlcmVieSBncmFudCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgMTk5NSBieSBXaWV0c2UgVmVuZW1hLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBTb21lIGluZGl2aWR1YWwgZmlsZXMgbWF5IGJlIGNvdmVyZWQgYnkgb3RoZXIgY29weXJpZ2h0cy5cblxuVGhpcyBtYXRlcmlhbCB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGFuZCBjb21waWxlZCBieSBXaWV0c2UgVmVuZW1hIGF0IEVpbmRob3ZlbiBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3ksIFRoZSBOZXRoZXJsYW5kcywgaW4gMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCBhbmQgMTk5NS5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoaXMgZW50aXJlIGNvcHlyaWdodCBub3RpY2UgaXMgZHVwbGljYXRlZCBpbiBhbGwgc3VjaCBjb3BpZXMuXG5cblRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgXCJhcyBpc1wiIGFuZCB3aXRob3V0IGFueSBleHByZXNzZWQgb3IgaW1wbGllZCB3YXJyYW50aWVzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGFueSBwYXJ0aWN1bGFyIHB1cnBvc2UuIl0sImxpY2Vuc2VJZHMiOlsiVENQLXdyYXBwZXJzIl0sImtleXdvcmRzIjpbImNvcHlyaWdodCAxOTk1IGJ5IiwiMTk5NSBieSB3aWV0c2UiLCJ3aWV0c2UgdmVuZW1hIGFsbCIsInZlbmVtYSBhbGwgcmlnaHRzIiwicmlnaHRzIHJlc2VydmVkIHNvbWUiLCJyZXNlcnZlZCBzb21lIGluZGl2aWR1YWwiLCJzb21lIGluZGl2aWR1YWwgZmlsZXMiLCJieSBvdGhlciBjb3B5cmlnaHRzIiwib3RoZXIgY29weXJpZ2h0cyB0aGlzIiwiY29weXJpZ2h0cyB0aGlzIG1hdGVyaWFsIiwidGhpcyBtYXRlcmlhbCB3YXMiLCJtYXRlcmlhbCB3YXMgb3JpZ2luYWxseSIsIndhcyBvcmlnaW5hbGx5IHdyaXR0ZW4iLCJvcmlnaW5hbGx5IHdyaXR0ZW4gYW5kIiwid3JpdHRlbiBhbmQgY29tcGlsZWQiLCJhbmQgY29tcGlsZWQgYnkiLCJjb21waWxlZCBieSB3aWV0c2UiLCJ3aWV0c2UgdmVuZW1hIGF0IiwidmVuZW1hIGF0IGVpbmRob3ZlbiIsImF0IGVpbmRob3ZlbiB1bml2ZXJzaXR5IiwiZWluZGhvdmVuIHVuaXZlcnNpdHkgb2YiLCJvZiB0ZWNobm9sb2d5IHRoZSIsInRlY2hub2xvZ3kgdGhlIG5ldGhlcmxhbmRzIiwidGhlIG5ldGhlcmxhbmRzIGluIiwibmV0aGVybGFuZHMgaW4gMTk5MCIsImluIDE5OTAgMTk5MSIsIjE5OTMgMTk5NCBhbmQiLCIxOTk0IGFuZCAxOTk1IiwiYW5kIDE5OTUgcmVkaXN0cmlidXRpb24iLCIxOTk1IHJlZGlzdHJpYnV0aW9uIGFuZCIsIm5vdGljZSBpcyBkdXBsaWNhdGVkIiwiaXMgZHVwbGljYXRlZCBpbiIsImR1cGxpY2F0ZWQgaW4gYWxsIiwiYWxsIHN1Y2ggY29waWVzIiwic3VjaCBjb3BpZXMgdGhpcyIsImNvcGllcyB0aGlzIHNvZnR3YXJlIiwid2l0aG91dCBhbnkgZXhwcmVzc2VkIiwiY29weXJpZ2h0IDE5OTUgYnkgd2lldHNlIiwiMTk5NSBieSB3aWV0c2UgdmVuZW1hIiwiYnkgd2lldHNlIHZlbmVtYSBhbGwiLCJ3aWV0c2UgdmVuZW1hIGFsbCByaWdodHMiLCJ2ZW5lbWEgYWxsIHJpZ2h0cyByZXNlcnZlZCIsImFsbCByaWdodHMgcmVzZXJ2ZWQgc29tZSIsInJpZ2h0cyByZXNlcnZlZCBzb21lIGluZGl2aWR1YWwiLCJyZXNlcnZlZCBzb21lIGluZGl2aWR1YWwgZmlsZXMiLCJzb21lIGluZGl2aWR1YWwgZmlsZXMgbWF5IiwiaW5kaXZpZHVhbCBmaWxlcyBtYXkgYmUiLCJmaWxlcyBtYXkgYmUgY292ZXJlZCIsImNvdmVyZWQgYnkgb3RoZXIgY29weXJpZ2h0cyIsImJ5IG90aGVyIGNvcHlyaWdodHMgdGhpcyIsIm90aGVyIGNvcHlyaWdodHMgdGhpcyBtYXRlcmlhbCIsImNvcHlyaWdodHMgdGhpcyBtYXRlcmlhbCB3YXMiLCJ0aGlzIG1hdGVyaWFsIHdhcyBvcmlnaW5hbGx5IiwibWF0ZXJpYWwgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiIsIndhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYW5kIiwib3JpZ2luYWxseSB3cml0dGVuIGFuZCBjb21waWxlZCIsIndyaXR0ZW4gYW5kIGNvbXBpbGVkIGJ5IiwiYW5kIGNvbXBpbGVkIGJ5IHdpZXRzZSIsImNvbXBpbGVkIGJ5IHdpZXRzZSB2ZW5lbWEiLCJieSB3aWV0c2UgdmVuZW1hIGF0Iiwid2lldHNlIHZlbmVtYSBhdCBlaW5kaG92ZW4iLCJ2ZW5lbWEgYXQgZWluZGhvdmVuIHVuaXZlcnNpdHkiLCJhdCBlaW5kaG92ZW4gdW5pdmVyc2l0eSBvZiIsImVpbmRob3ZlbiB1bml2ZXJzaXR5IG9mIHRlY2hub2xvZ3kiLCJ1bml2ZXJzaXR5IG9mIHRlY2hub2xvZ3kgdGhlIiwib2YgdGVjaG5vbG9neSB0aGUgbmV0aGVybGFuZHMiLCJ0ZWNobm9sb2d5IHRoZSBuZXRoZXJsYW5kcyBpbiIsInRoZSBuZXRoZXJsYW5kcyBpbiAxOTkwIiwibmV0aGVybGFuZHMgaW4gMTk5MCAxOTkxIiwiaW4gMTk5MCAxOTkxIDE5OTIiLCIxOTkxIDE5OTIgMTk5MyAxOTk0IiwiMTk5MiAxOTkzIDE5OTQgYW5kIiwiMTk5MyAxOTk0IGFuZCAxOTk1IiwiMTk5NCBhbmQgMTk5NSByZWRpc3RyaWJ1dGlvbiIsImFuZCAxOTk1IHJlZGlzdHJpYnV0aW9uIGFuZCIsIjE5OTUgcmVkaXN0cmlidXRpb24gYW5kIHVzZSIsInRoYXQgdGhpcyBlbnRpcmUgY29weXJpZ2h0IiwiZW50aXJlIGNvcHlyaWdodCBub3RpY2UgaXMiLCJjb3B5cmlnaHQgbm90aWNlIGlzIGR1cGxpY2F0ZWQiLCJub3RpY2UgaXMgZHVwbGljYXRlZCBpbiIsImlzIGR1cGxpY2F0ZWQgaW4gYWxsIiwiZHVwbGljYXRlZCBpbiBhbGwgc3VjaCIsImluIGFsbCBzdWNoIGNvcGllcyIsImFsbCBzdWNoIGNvcGllcyB0aGlzIiwic3VjaCBjb3BpZXMgdGhpcyBzb2Z0d2FyZSIsImNvcGllcyB0aGlzIHNvZnR3YXJlIGlzIiwiYW5kIHdpdGhvdXQgYW55IGV4cHJlc3NlZCIsIndpdGhvdXQgYW55IGV4cHJlc3NlZCBvciIsImNvcHlyaWdodCAxOTk1IGJ5IHdpZXRzZSB2ZW5lbWEiLCIxOTk1IGJ5IHdpZXRzZSB2ZW5lbWEgYWxsIiwiYnkgd2lldHNlIHZlbmVtYSBhbGwgcmlnaHRzIiwid2lldHNlIHZlbmVtYSBhbGwgcmlnaHRzIHJlc2VydmVkIiwidmVuZW1hIGFsbCByaWdodHMgcmVzZXJ2ZWQgc29tZSIsImFsbCByaWdodHMgcmVzZXJ2ZWQgc29tZSBpbmRpdmlkdWFsIiwicmlnaHRzIHJlc2VydmVkIHNvbWUgaW5kaXZpZHVhbCBmaWxlcyIsInJlc2VydmVkIHNvbWUgaW5kaXZpZHVhbCBmaWxlcyBtYXkiLCJzb21lIGluZGl2aWR1YWwgZmlsZXMgbWF5IGJlIiwiaW5kaXZpZHVhbCBmaWxlcyBtYXkgYmUgY292ZXJlZCIsImZpbGVzIG1heSBiZSBjb3ZlcmVkIGJ5IiwiYmUgY292ZXJlZCBieSBvdGhlciBjb3B5cmlnaHRzIiwiY292ZXJlZCBieSBvdGhlciBjb3B5cmlnaHRzIHRoaXMiLCJieSBvdGhlciBjb3B5cmlnaHRzIHRoaXMgbWF0ZXJpYWwiLCJvdGhlciBjb3B5cmlnaHRzIHRoaXMgbWF0ZXJpYWwgd2FzIiwiY29weXJpZ2h0cyB0aGlzIG1hdGVyaWFsIHdhcyBvcmlnaW5hbGx5IiwidGhpcyBtYXRlcmlhbCB3YXMgb3JpZ2luYWxseSB3cml0dGVuIiwibWF0ZXJpYWwgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBhbmQiLCJ3YXMgb3JpZ2luYWxseSB3cml0dGVuIGFuZCBjb21waWxlZCIsIm9yaWdpbmFsbHkgd3JpdHRlbiBhbmQgY29tcGlsZWQgYnkiLCJ3cml0dGVuIGFuZCBjb21waWxlZCBieSB3aWV0c2UiLCJhbmQgY29tcGlsZWQgYnkgd2lldHNlIHZlbmVtYSIsImNvbXBpbGVkIGJ5IHdpZXRzZSB2ZW5lbWEgYXQiLCJieSB3aWV0c2UgdmVuZW1hIGF0IGVpbmRob3ZlbiIsIndpZXRzZSB2ZW5lbWEgYXQgZWluZGhvdmVuIHVuaXZlcnNpdHkiLCJ2ZW5lbWEgYXQgZWluZGhvdmVuIHVuaXZlcnNpdHkgb2YiLCJhdCBlaW5kaG92ZW4gdW5pdmVyc2l0eSBvZiB0ZWNobm9sb2d5IiwiZWluZGhvdmVuIHVuaXZlcnNpdHkgb2YgdGVjaG5vbG9neSB0aGUiLCJ1bml2ZXJzaXR5IG9mIHRlY2hub2xvZ3kgdGhlIG5ldGhlcmxhbmRzIiwib2YgdGVjaG5vbG9neSB0aGUgbmV0aGVybGFuZHMgaW4iLCJ0ZWNobm9sb2d5IHRoZSBuZXRoZXJsYW5kcyBpbiAxOTkwIiwidGhlIG5ldGhlcmxhbmRzIGluIDE5OTAgMTk5MSIsIm5ldGhlcmxhbmRzIGluIDE5OTAgMTk5MSAxOTkyIiwiaW4gMTk5MCAxOTkxIDE5OTIgMTk5MyIsIjE5OTAgMTk5MSAxOTkyIDE5OTMgMTk5NCIsIjE5OTEgMTk5MiAxOTkzIDE5OTQgYW5kIiwiMTk5MiAxOTkzIDE5OTQgYW5kIDE5OTUiLCIxOTkzIDE5OTQgYW5kIDE5OTUgcmVkaXN0cmlidXRpb24iLCIxOTk0IGFuZCAxOTk1IHJlZGlzdHJpYnV0aW9uIGFuZCIsImFuZCAxOTk1IHJlZGlzdHJpYnV0aW9uIGFuZCB1c2UiLCIxOTk1IHJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4iLCJhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhpcyIsInBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoaXMgZW50aXJlIiwicHJvdmlkZWQgdGhhdCB0aGlzIGVudGlyZSBjb3B5cmlnaHQiLCJ0aGF0IHRoaXMgZW50aXJlIGNvcHlyaWdodCBub3RpY2UiLCJ0aGlzIGVudGlyZSBjb3B5cmlnaHQgbm90aWNlIGlzIiwiZW50aXJlIGNvcHlyaWdodCBub3RpY2UgaXMgZHVwbGljYXRlZCIsImNvcHlyaWdodCBub3RpY2UgaXMgZHVwbGljYXRlZCBpbiIsIm5vdGljZSBpcyBkdXBsaWNhdGVkIGluIGFsbCIsImlzIGR1cGxpY2F0ZWQgaW4gYWxsIHN1Y2giLCJkdXBsaWNhdGVkIGluIGFsbCBzdWNoIGNvcGllcyIsImluIGFsbCBzdWNoIGNvcGllcyB0aGlzIiwiYWxsIHN1Y2ggY29waWVzIHRoaXMgc29mdHdhcmUiLCJzdWNoIGNvcGllcyB0aGlzIHNvZnR3YXJlIGlzIiwiY29waWVzIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQiLCJpcyBhbmQgd2l0aG91dCBhbnkgZXhwcmVzc2VkIiwiYW5kIHdpdGhvdXQgYW55IGV4cHJlc3NlZCBvciIsIndpdGhvdXQgYW55IGV4cHJlc3NlZCBvciBpbXBsaWVkIiwibWVyY2hhbnRpYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhbnkiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIFRNYXRlIE9wZW4gU291cmNlIExpY2Vuc2UuIFRoaXMgbGljZW5zZSBhcHBsaWVzIHRvIGFsbCBwb3J0aW9ucyBvZiBUTWF0ZSBTVk5LaXQgbGlicmFyeSwgd2hpY2ggYXJlIG5vdCBleHRlcm5hbGx5LW1haW50YWluZWQgbGlicmFyaWVzIChlLmcuIEdhbnltZWQgU1NIIGxpYnJhcnkpLlxuXG5BbGwgdGhlIHNvdXJjZSBjb2RlIGFuZCBjb21waWxlZCBjbGFzc2VzIGluIHBhY2thZ2Ugb3JnLnRpZ3Jpcy5zdWJ2ZXJzaW9uLmphdmFobCBleGNlcHQgU3ZuQ2xpZW50IGNsYXNzIGFyZSBjb3ZlcmVkIGJ5IHRoZSBsaWNlbnNlIGluIEpBVkFITC1MSUNFTlNFIGZpbGUgQ29weXJpZ2h0IChjKSAyMDA0LTIwMTIgVE1hdGUgU29mdHdhcmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBhbnkgZm9ybSBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IGluZm9ybWF0aW9uIG9uIGhvdyB0byBvYnRhaW4gY29tcGxldGUgc291cmNlIGNvZGUgZm9yIHRoZSBzb2Z0d2FyZSB0aGF0IHVzZXMgU1ZOS2l0IGFuZCBhbnkgYWNjb21wYW55aW5nIHNvZnR3YXJlIHRoYXQgdXNlcyB0aGUgc29mdHdhcmUgdGhhdCB1c2VzIFNWTktpdC4gVGhlIHNvdXJjZSBjb2RlIG11c3QgZWl0aGVyIGJlIGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24gb3IgYmUgYXZhaWxhYmxlIGZvciBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uIHBsdXMgYSBub21pbmFsIGZlZSwgYW5kIG11c3QgYmUgZnJlZWx5IHJlZGlzdHJpYnV0YWJsZSB1bmRlciByZWFzb25hYmxlIGNvbmRpdGlvbnMuIEZvciBhbiBleGVjdXRhYmxlIGZpbGUsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMuIEl0IGRvZXMgbm90IGluY2x1ZGUgc291cmNlIGNvZGUgZm9yIG1vZHVsZXMgb3IgZmlsZXMgdGhhdCB0eXBpY2FsbHkgYWNjb21wYW55IHRoZSBtYWpvciBjb21wb25lbnRzIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIGZpbGUgcnVucy5cblxuICAgKiBSZWRpc3RyaWJ1dGlvbiBpbiBhbnkgZm9ybSB3aXRob3V0IHJlZGlzdHJpYnV0aW5nIHNvdXJjZSBjb2RlIGZvciBzb2Z0d2FyZSB0aGF0IHVzZXMgU1ZOS2l0IGlzIHBvc3NpYmxlIG9ubHkgd2hlbiBzdWNoIHJlZGlzdHJpYnV0aW9uIGlzIGV4cGxpY3RseSBwZXJtaXR0ZWQgYnkgVE1hdGUgU29mdHdhcmUuIFBsZWFzZSwgY29udGFjdCBUTWF0ZSBTb2Z0d2FyZSBhdCBzdXBwb3J0QHN2bmtpdC5jb20gdG8gZ2V0IHN1Y2ggcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUTUFURSBTT0ZUV0FSRSBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgTk9OLUlORlJJTkdFTUVOVCwgQVJFIERJU0NMQUlNRUQuXG5cbklOIE5PIEVWRU5UIFNIQUxMIFRNQVRFIFNPRlRXQVJFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiJdLCJsaWNlbnNlSWRzIjpbIlRNYXRlIl0sImtleXdvcmRzIjpbInRoZSB0bWF0ZSBvcGVuIiwidG1hdGUgb3BlbiBzb3VyY2UiLCJzb3VyY2UgbGljZW5zZSB0aGlzIiwicG9ydGlvbnMgb2YgdG1hdGUiLCJvZiB0bWF0ZSBzdm5raXQiLCJ0bWF0ZSBzdm5raXQgbGlicmFyeSIsInN2bmtpdCBsaWJyYXJ5IHdoaWNoIiwibGlicmFyeSB3aGljaCBhcmUiLCJhcmUgbm90IGV4dGVybmFsbHkiLCJub3QgZXh0ZXJuYWxseSBtYWludGFpbmVkIiwiZXh0ZXJuYWxseSBtYWludGFpbmVkIGxpYnJhcmllcyIsIm1haW50YWluZWQgbGlicmFyaWVzIGUiLCJsaWJyYXJpZXMgZSBnIiwiZSBnIGdhbnltZWQiLCJnIGdhbnltZWQgc3NoIiwiZ2FueW1lZCBzc2ggbGlicmFyeSIsInNzaCBsaWJyYXJ5IGFsbCIsImxpYnJhcnkgYWxsIHRoZSIsImNvZGUgYW5kIGNvbXBpbGVkIiwiYW5kIGNvbXBpbGVkIGNsYXNzZXMiLCJjb21waWxlZCBjbGFzc2VzIGluIiwiY2xhc3NlcyBpbiBwYWNrYWdlIiwiaW4gcGFja2FnZSBvcmciLCJwYWNrYWdlIG9yZyB0aWdyaXMiLCJvcmcgdGlncmlzIHN1YnZlcnNpb24iLCJ0aWdyaXMgc3VidmVyc2lvbiBqYXZhaGwiLCJzdWJ2ZXJzaW9uIGphdmFobCBleGNlcHQiLCJqYXZhaGwgZXhjZXB0IHN2bmNsaWVudCIsImV4Y2VwdCBzdm5jbGllbnQgY2xhc3MiLCJzdm5jbGllbnQgY2xhc3MgYXJlIiwiY2xhc3MgYXJlIGNvdmVyZWQiLCJsaWNlbnNlIGluIGphdmFobCIsImluIGphdmFobCBsaWNlbnNlIiwiamF2YWhsIGxpY2Vuc2UgZmlsZSIsImxpY2Vuc2UgZmlsZSBjb3B5cmlnaHQiLCJjIDIwMDQgMjAxMiIsIjIwMDQgMjAxMiB0bWF0ZSIsIjIwMTIgdG1hdGUgc29mdHdhcmUiLCJ0bWF0ZSBzb2Z0d2FyZSBhbGwiLCJ1c2VzIHN2bmtpdCBhbmQiLCJzdm5raXQgYW5kIGFueSIsInVzZXMgc3Zua2l0IHRoZSIsInN2bmtpdCB0aGUgc291cmNlIiwiZmlsZSBydW5zIHJlZGlzdHJpYnV0aW9uIiwicnVucyByZWRpc3RyaWJ1dGlvbiBpbiIsInJlZGlzdHJpYnV0aW9uIGluIGFueSIsImFueSBmb3JtIHdpdGhvdXQiLCJmb3JtIHdpdGhvdXQgcmVkaXN0cmlidXRpbmciLCJ3aXRob3V0IHJlZGlzdHJpYnV0aW5nIHNvdXJjZSIsInJlZGlzdHJpYnV0aW5nIHNvdXJjZSBjb2RlIiwiY29kZSBmb3Igc29mdHdhcmUiLCJ1c2VzIHN2bmtpdCBpcyIsInN2bmtpdCBpcyBwb3NzaWJsZSIsImlzIHBvc3NpYmxlIG9ubHkiLCJwb3NzaWJsZSBvbmx5IHdoZW4iLCJvbmx5IHdoZW4gc3VjaCIsIndoZW4gc3VjaCByZWRpc3RyaWJ1dGlvbiIsInN1Y2ggcmVkaXN0cmlidXRpb24gaXMiLCJyZWRpc3RyaWJ1dGlvbiBpcyBleHBsaWN0bHkiLCJpcyBleHBsaWN0bHkgcGVybWl0dGVkIiwiZXhwbGljdGx5IHBlcm1pdHRlZCBieSIsInBlcm1pdHRlZCBieSB0bWF0ZSIsInRtYXRlIHNvZnR3YXJlIHBsZWFzZSIsInNvZnR3YXJlIHBsZWFzZSBjb250YWN0IiwicGxlYXNlIGNvbnRhY3QgdG1hdGUiLCJjb250YWN0IHRtYXRlIHNvZnR3YXJlIiwidG1hdGUgc29mdHdhcmUgYXQiLCJzb2Z0d2FyZSBhdCBzdXBwb3J0IiwiYXQgc3VwcG9ydCBzdm5raXQiLCJzdXBwb3J0IHN2bmtpdCBjb20iLCJzdm5raXQgY29tIHRvIiwiY29tIHRvIGdldCIsInRvIGdldCBzdWNoIiwiZ2V0IHN1Y2ggcGVybWlzc2lvbiIsInN1Y2ggcGVybWlzc2lvbiB0aGlzIiwicHJvdmlkZWQgYnkgdG1hdGUiLCJ0bWF0ZSBzb2Z0d2FyZSBhcyIsImV2ZW50IHNoYWxsIHRtYXRlIiwic2hhbGwgdG1hdGUgc29mdHdhcmUiLCJ0bWF0ZSBzb2Z0d2FyZSBiZSIsInRoZSB0bWF0ZSBvcGVuIHNvdXJjZSIsInRtYXRlIG9wZW4gc291cmNlIGxpY2Vuc2UiLCJvcGVuIHNvdXJjZSBsaWNlbnNlIHRoaXMiLCJzb3VyY2UgbGljZW5zZSB0aGlzIGxpY2Vuc2UiLCJhcHBsaWVzIHRvIGFsbCBwb3J0aW9ucyIsImFsbCBwb3J0aW9ucyBvZiB0bWF0ZSIsInBvcnRpb25zIG9mIHRtYXRlIHN2bmtpdCIsIm9mIHRtYXRlIHN2bmtpdCBsaWJyYXJ5IiwidG1hdGUgc3Zua2l0IGxpYnJhcnkgd2hpY2giLCJzdm5raXQgbGlicmFyeSB3aGljaCBhcmUiLCJsaWJyYXJ5IHdoaWNoIGFyZSBub3QiLCJ3aGljaCBhcmUgbm90IGV4dGVybmFsbHkiLCJhcmUgbm90IGV4dGVybmFsbHkgbWFpbnRhaW5lZCIsIm5vdCBleHRlcm5hbGx5IG1haW50YWluZWQgbGlicmFyaWVzIiwiZXh0ZXJuYWxseSBtYWludGFpbmVkIGxpYnJhcmllcyBlIiwibWFpbnRhaW5lZCBsaWJyYXJpZXMgZSBnIiwibGlicmFyaWVzIGUgZyBnYW55bWVkIiwiZSBnIGdhbnltZWQgc3NoIiwiZyBnYW55bWVkIHNzaCBsaWJyYXJ5IiwiZ2FueW1lZCBzc2ggbGlicmFyeSBhbGwiLCJzc2ggbGlicmFyeSBhbGwgdGhlIiwibGlicmFyeSBhbGwgdGhlIHNvdXJjZSIsInNvdXJjZSBjb2RlIGFuZCBjb21waWxlZCIsImNvZGUgYW5kIGNvbXBpbGVkIGNsYXNzZXMiLCJhbmQgY29tcGlsZWQgY2xhc3NlcyBpbiIsImNvbXBpbGVkIGNsYXNzZXMgaW4gcGFja2FnZSIsImNsYXNzZXMgaW4gcGFja2FnZSBvcmciLCJpbiBwYWNrYWdlIG9yZyB0aWdyaXMiLCJwYWNrYWdlIG9yZyB0aWdyaXMgc3VidmVyc2lvbiIsIm9yZyB0aWdyaXMgc3VidmVyc2lvbiBqYXZhaGwiLCJ0aWdyaXMgc3VidmVyc2lvbiBqYXZhaGwgZXhjZXB0Iiwic3VidmVyc2lvbiBqYXZhaGwgZXhjZXB0IHN2bmNsaWVudCIsImphdmFobCBleGNlcHQgc3ZuY2xpZW50IGNsYXNzIiwiZXhjZXB0IHN2bmNsaWVudCBjbGFzcyBhcmUiLCJzdm5jbGllbnQgY2xhc3MgYXJlIGNvdmVyZWQiLCJjbGFzcyBhcmUgY292ZXJlZCBieSIsImFyZSBjb3ZlcmVkIGJ5IHRoZSIsImNvdmVyZWQgYnkgdGhlIGxpY2Vuc2UiLCJieSB0aGUgbGljZW5zZSBpbiIsInRoZSBsaWNlbnNlIGluIGphdmFobCIsImxpY2Vuc2UgaW4gamF2YWhsIGxpY2Vuc2UiLCJpbiBqYXZhaGwgbGljZW5zZSBmaWxlIiwiamF2YWhsIGxpY2Vuc2UgZmlsZSBjb3B5cmlnaHQiLCJsaWNlbnNlIGZpbGUgY29weXJpZ2h0IGMiLCJmaWxlIGNvcHlyaWdodCBjIDIwMDQiLCJjb3B5cmlnaHQgYyAyMDA0IDIwMTIiLCJjIDIwMDQgMjAxMiB0bWF0ZSIsIjIwMDQgMjAxMiB0bWF0ZSBzb2Z0d2FyZSIsIjIwMTIgdG1hdGUgc29mdHdhcmUgYWxsIiwidG1hdGUgc29mdHdhcmUgYWxsIHJpZ2h0cyIsInRoYXQgdXNlcyBzdm5raXQgYW5kIiwidXNlcyBzdm5raXQgYW5kIGFueSIsInN2bmtpdCBhbmQgYW55IGFjY29tcGFueWluZyIsInRoYXQgdXNlcyB0aGUgc29mdHdhcmUiLCJ1c2VzIHRoZSBzb2Z0d2FyZSB0aGF0IiwidGhhdCB1c2VzIHN2bmtpdCB0aGUiLCJ1c2VzIHN2bmtpdCB0aGUgc291cmNlIiwic3Zua2l0IHRoZSBzb3VyY2UgY29kZSIsImV4ZWN1dGFibGUgZmlsZSBydW5zIHJlZGlzdHJpYnV0aW9uIiwiZmlsZSBydW5zIHJlZGlzdHJpYnV0aW9uIGluIiwicnVucyByZWRpc3RyaWJ1dGlvbiBpbiBhbnkiLCJyZWRpc3RyaWJ1dGlvbiBpbiBhbnkgZm9ybSIsImluIGFueSBmb3JtIHdpdGhvdXQiLCJhbnkgZm9ybSB3aXRob3V0IHJlZGlzdHJpYnV0aW5nIiwiZm9ybSB3aXRob3V0IHJlZGlzdHJpYnV0aW5nIHNvdXJjZSIsIndpdGhvdXQgcmVkaXN0cmlidXRpbmcgc291cmNlIGNvZGUiLCJyZWRpc3RyaWJ1dGluZyBzb3VyY2UgY29kZSBmb3IiLCJzb3VyY2UgY29kZSBmb3Igc29mdHdhcmUiLCJjb2RlIGZvciBzb2Z0d2FyZSB0aGF0IiwiZm9yIHNvZnR3YXJlIHRoYXQgdXNlcyIsInRoYXQgdXNlcyBzdm5raXQgaXMiLCJ1c2VzIHN2bmtpdCBpcyBwb3NzaWJsZSIsInN2bmtpdCBpcyBwb3NzaWJsZSBvbmx5IiwiaXMgcG9zc2libGUgb25seSB3aGVuIiwicG9zc2libGUgb25seSB3aGVuIHN1Y2giLCJvbmx5IHdoZW4gc3VjaCByZWRpc3RyaWJ1dGlvbiIsIndoZW4gc3VjaCByZWRpc3RyaWJ1dGlvbiBpcyIsInN1Y2ggcmVkaXN0cmlidXRpb24gaXMgZXhwbGljdGx5IiwicmVkaXN0cmlidXRpb24gaXMgZXhwbGljdGx5IHBlcm1pdHRlZCIsImlzIGV4cGxpY3RseSBwZXJtaXR0ZWQgYnkiLCJleHBsaWN0bHkgcGVybWl0dGVkIGJ5IHRtYXRlIiwicGVybWl0dGVkIGJ5IHRtYXRlIHNvZnR3YXJlIiwiYnkgdG1hdGUgc29mdHdhcmUgcGxlYXNlIiwidG1hdGUgc29mdHdhcmUgcGxlYXNlIGNvbnRhY3QiLCJzb2Z0d2FyZSBwbGVhc2UgY29udGFjdCB0bWF0ZSIsInBsZWFzZSBjb250YWN0IHRtYXRlIHNvZnR3YXJlIiwiY29udGFjdCB0bWF0ZSBzb2Z0d2FyZSBhdCIsInRtYXRlIHNvZnR3YXJlIGF0IHN1cHBvcnQiLCJzb2Z0d2FyZSBhdCBzdXBwb3J0IHN2bmtpdCIsImF0IHN1cHBvcnQgc3Zua2l0IGNvbSIsInN1cHBvcnQgc3Zua2l0IGNvbSB0byIsInN2bmtpdCBjb20gdG8gZ2V0IiwiY29tIHRvIGdldCBzdWNoIiwidG8gZ2V0IHN1Y2ggcGVybWlzc2lvbiIsImdldCBzdWNoIHBlcm1pc3Npb24gdGhpcyIsInN1Y2ggcGVybWlzc2lvbiB0aGlzIHNvZnR3YXJlIiwiaXMgcHJvdmlkZWQgYnkgdG1hdGUiLCJwcm92aWRlZCBieSB0bWF0ZSBzb2Z0d2FyZSIsImJ5IHRtYXRlIHNvZnR3YXJlIGFzIiwidG1hdGUgc29mdHdhcmUgYXMgaXMiLCJubyBldmVudCBzaGFsbCB0bWF0ZSIsImV2ZW50IHNoYWxsIHRtYXRlIHNvZnR3YXJlIiwic2hhbGwgdG1hdGUgc29mdHdhcmUgYmUiLCJ0bWF0ZSBzb2Z0d2FyZSBiZSBsaWFibGUiLCJ0aGUgdG1hdGUgb3BlbiBzb3VyY2UgbGljZW5zZSIsInRtYXRlIG9wZW4gc291cmNlIGxpY2Vuc2UgdGhpcyIsIm9wZW4gc291cmNlIGxpY2Vuc2UgdGhpcyBsaWNlbnNlIiwic291cmNlIGxpY2Vuc2UgdGhpcyBsaWNlbnNlIGFwcGxpZXMiLCJsaWNlbnNlIGFwcGxpZXMgdG8gYWxsIHBvcnRpb25zIiwiYXBwbGllcyB0byBhbGwgcG9ydGlvbnMgb2YiLCJ0byBhbGwgcG9ydGlvbnMgb2YgdG1hdGUiLCJhbGwgcG9ydGlvbnMgb2YgdG1hdGUgc3Zua2l0IiwicG9ydGlvbnMgb2YgdG1hdGUgc3Zua2l0IGxpYnJhcnkiLCJvZiB0bWF0ZSBzdm5raXQgbGlicmFyeSB3aGljaCIsInRtYXRlIHN2bmtpdCBsaWJyYXJ5IHdoaWNoIGFyZSIsInN2bmtpdCBsaWJyYXJ5IHdoaWNoIGFyZSBub3QiLCJsaWJyYXJ5IHdoaWNoIGFyZSBub3QgZXh0ZXJuYWxseSIsIndoaWNoIGFyZSBub3QgZXh0ZXJuYWxseSBtYWludGFpbmVkIiwiYXJlIG5vdCBleHRlcm5hbGx5IG1haW50YWluZWQgbGlicmFyaWVzIiwibm90IGV4dGVybmFsbHkgbWFpbnRhaW5lZCBsaWJyYXJpZXMgZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUT1JRVUUgdjIuNSsgU29mdHdhcmUgTGljZW5zZSB2MS4xIENvcHlyaWdodCAoYykgMjAxMC0yMDExIEFkYXB0aXZlIENvbXB1dGluZyBFbnRlcnByaXNlcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgdGhpcyBsaWNlbnNlIHRvIHVzZSBvciByZWRpc3RyaWJ1dGUgdGhlIFRPUlFVRSBzb2Z0d2FyZSB2Mi41KyBhbmQgbGF0ZXIgdmVyc2lvbnMuIEZvciBmcmVlIHN1cHBvcnQgZm9yIFRPUlFVRSB1c2VycywgcXVlc3Rpb25zIHNob3VsZCBiZSBlbWFpbGVkIHRvIHRoZSBjb21tdW5pdHkgb2YgVE9SUVVFIHVzZXJzIGF0IHRvcnF1ZXVzZXJzQHN1cGVyY2x1c3Rlci5vcmcuIFVzZXJzIGNhbiBhbHNvIHN1YnNjcmliZSB0byB0aGUgdXNlciBtYWlsaW5nIGxpc3QgYXQgaHR0cDovL3d3dy5zdXBlcmNsdXN0ZXIub3JnL21haWxtYW4vbGlzdGluZm8vdG9ycXVldXNlcnMuIEN1c3RvbWVycyB1c2luZyBUT1JRVUUgdGhhdCBhbHNvIGFyZSBsaWNlbnNlZCB1c2VycyBvZiBNb2FiIGJyYW5kZWQgc29mdHdhcmUgZnJvbSBBZGFwdGl2ZSBDb21wdXRpbmcgSW5jLiBjYW4gZ2V0IFRPUlFVRSBzdXBwb3J0IGZyb20gQWRhcHRpdmUgQ29tcHV0aW5nIHZpYTpcblxuRW1haWw6IHRvcnF1ZS1zdXBwb3J0QGFkYXB0aXZlY29tcHV0aW5nLmNvbS5cblxuUGhvbmU6ICg4MDEpIDcxNy0zNzAwXG5cbldlYjogd3d3LmFkYXB0aXZlY29tcHV0aW5nLmNvbSB3d3cuY2x1c3RlcnJlc291cmNlcy5jb21cblxuVGhpcyBsaWNlbnNlIGNvdmVycyB1c2Ugb2YgdGhlIFRPUlFVRSB2Mi41IHNvZnR3YXJlICh0aGUgXCJTb2Z0d2FyZVwiKSBhdCB5b3VyIHNpdGUgb3IgbG9jYXRpb24sIGFuZCwgZm9yIGNlcnRhaW4gdXNlcnMsIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSB0byBvdGhlciBzaXRlcyBhbmQgbG9jYXRpb25zMS4gTGF0ZXIgdmVyc2lvbnMgb2YgVE9SUVVFIGFyZSBhbHNvIGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlLiBVc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIFRPUlFVRSB2Mi41IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0LlxuXG4gICAxLiBBbnkgUmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhY2tub3dsZWRnbWVudCBjb250YWluZWQgaW4gcGFyYWdyYXBoIDUsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZGlzY2xhaW1lciBjb250YWluZWQgaW4gcGFyYWdyYXBoIDUuXG5cbiAgIDIuIEFueSBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFja25vd2xlZGdtZW50IGNvbnRhaW5lZCBpbiBwYXJhZ3JhcGggNCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBkaXNjbGFpbWVyIGNvbnRhaW5lZCBpbiBwYXJhZ3JhcGggNSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgMy4gUmVkaXN0cmlidXRpb25zIGluIGFueSBmb3JtIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgaW5mb3JtYXRpb24gb24gaG93IHRvIG9idGFpbiBjb21wbGV0ZSBzb3VyY2UgY29kZSBmb3IgVE9SUVVFIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBhbmQvb3IgYWRkaXRpb25zIHRvIFRPUlFVRS4gVGhlIHNvdXJjZSBjb2RlIG11c3QgZWl0aGVyIGJlIGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24gb3IgYmUgYXZhaWxhYmxlIGZvciBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uIHBsdXMgYSBub21pbmFsIGZlZSwgYW5kIGFsbCBtb2RpZmljYXRpb25zIGFuZCBhZGRpdGlvbnMgdG8gdGhlIFNvZnR3YXJlIG11c3QgYmUgZnJlZWx5IHJlZGlzdHJpYnV0YWJsZSBieSBhbnkgcGFydHkgKGluY2x1ZGluZyBMaWNlbnNvcikgd2l0aG91dCByZXN0cmljdGlvbi5cblxuICAgNC4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGUgU29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6XG5cbiAgIFwiVE9SUVVFIGlzIGEgbW9kaWZpY2F0aW9uIG9mIE9wZW5QQlMgd2hpY2ggd2FzIGRldmVsb3BlZCBieSBOQVNBIEFtZXMgUmVzZWFyY2ggQ2VudGVyLCBMYXdyZW5jZSBMaXZlcm1vcmUgTmF0aW9uYWwgTGFib3JhdG9yeSwgYW5kIFZlcmlkaWFuIFRPUlFVRSBPcGVuIFNvdXJjZSBMaWNlbnNlIHYxLjEuIDEgSW5mb3JtYXRpb24gU29sdXRpb25zLCBJbmMuIFZpc2l0IHd3dy5jbHVzdGVycmVzb3VyY2VzLmNvbS9wcm9kdWN0cy8gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVE9SUVVFIGFuZCB0byBkb3dubG9hZCBUT1JRVUUuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBNb2FiIGJyYW5kZWQgcHJvZHVjdHMgYW5kIHNvIHJlY2VpdmUgc3VwcG9ydCBmcm9tIEFkYXB0aXZlIENvbXB1dGluZyBmb3IgVE9SUVVFLCBzZWUgd3d3LmFkYXB0aXZlY29tcHV0aW5nLmNvbS5cIlxuXG4gICA1LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBREFQVElWRSBDT01QVVRJTkcgRU5URVJQUklTRVMsIElOQy4gQ09SUE9SQVRJT04sIElUUyBBRkZJTElBVEVEIENPTVBBTklFUywgT1IgVEhFIFUuUy4gR09WRVJOTUVOVCBPUiBBTlkgT0YgSVRTIEFHRU5DSUVTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCBPUiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cblRoaXMgbGljZW5zZSB3aWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIFV0YWgsIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGl0cyBjaG9pY2Ugb2YgbGF3IHJ1bGVzLiBOb3RlIDE6IFRPUlFVRSBpcyBkZXZlbG9wZWQgZnJvbSBhbiBlYXJsaWVyIHZlcnNpb24gdjIuMyBvZiBPcGVuUEJTLiBUT1JRVUUgaGFzIGJlZW4gZGV2ZWxvcGVkIGJleW9uZCBPcGVuUEJTIHYyLjMuIFRoZSBPcGVuUEJTIHYyLjMgbGljZW5zZSBhbmQgT3BlblBCUyBzb2Z0d2FyZSBjYW4gYmUgb2J0YWluZWQgYXQ6XG5cbmh0dHA6Ly93d3cucGJzd29ya3MuY29tL1Jlc0xpYlNlYXJjaFJlc3VsdC5hc3B4P2tleXdvcmRzPW9wZW5wYnNcdTAwMjZpbmR1c3RyeT1BbGxcdTAwMjZwcm8gZHVjdF9zZXJ2aWNlPUFsbFx1MDAyNmNhdGVnb3J5PUZyZWUlMjBTb2Z0d2FyZSUyMERvd25sb2Fkc1x1MDAyNm9yZGVyX2J5PXRpdGxlLiBVc2VycyBvZiBUT1JRVUUgc2hvdWxkIGNvbXBseSB3aXRoIHRoZSBUT1JRVUUgbGljZW5zZSBhcyB3ZWxsIGFzIHRoZSBPcGVuUEJTIGxpY2Vuc2UuIl0sImxpY2Vuc2VJZHMiOlsiVE9SUVVFLTEuMSJdLCJrZXl3b3JkcyI6WyI1IHNvZnR3YXJlIGxpY2Vuc2UiLCJzb2Z0d2FyZSBsaWNlbnNlIHYxIiwidjEgMSBjb3B5cmlnaHQiLCJjIDIwMTAgMjAxMSIsIjIwMTAgMjAxMSBhZGFwdGl2ZSIsIjIwMTEgYWRhcHRpdmUgY29tcHV0aW5nIiwiZW50ZXJwcmlzZXMgaW5jIGFsbCIsInJlc2VydmVkIHVzZSB0aGlzIiwidXNlIG9yIHJlZGlzdHJpYnV0ZSIsInJlZGlzdHJpYnV0ZSB0aGUgdG9ycXVlIiwidGhlIHRvcnF1ZSBzb2Z0d2FyZSIsInRvcnF1ZSBzb2Z0d2FyZSB2MiIsInNvZnR3YXJlIHYyIDUiLCJ2MiA1IGFuZCIsIjUgYW5kIGxhdGVyIiwiYW5kIGxhdGVyIHZlcnNpb25zIiwibGF0ZXIgdmVyc2lvbnMgZm9yIiwidmVyc2lvbnMgZm9yIGZyZWUiLCJmb3IgZnJlZSBzdXBwb3J0IiwiZnJlZSBzdXBwb3J0IGZvciIsInN1cHBvcnQgZm9yIHRvcnF1ZSIsImZvciB0b3JxdWUgdXNlcnMiLCJ0b3JxdWUgdXNlcnMgcXVlc3Rpb25zIiwidXNlcnMgcXVlc3Rpb25zIHNob3VsZCIsInF1ZXN0aW9ucyBzaG91bGQgYmUiLCJzaG91bGQgYmUgZW1haWxlZCIsImJlIGVtYWlsZWQgdG8iLCJlbWFpbGVkIHRvIHRoZSIsInRoZSBjb21tdW5pdHkgb2YiLCJjb21tdW5pdHkgb2YgdG9ycXVlIiwib2YgdG9ycXVlIHVzZXJzIiwidG9ycXVlIHVzZXJzIGF0IiwidXNlcnMgYXQgdG9ycXVldXNlcnMiLCJhdCB0b3JxdWV1c2VycyBzdXBlcmNsdXN0ZXIiLCJ0b3JxdWV1c2VycyBzdXBlcmNsdXN0ZXIgb3JnIiwic3VwZXJjbHVzdGVyIG9yZyB1c2VycyIsIm9yZyB1c2VycyBjYW4iLCJ1c2VycyBjYW4gYWxzbyIsImNhbiBhbHNvIHN1YnNjcmliZSIsImFsc28gc3Vic2NyaWJlIHRvIiwidGhlIHVzZXIgbWFpbGluZyIsInVzZXIgbWFpbGluZyBsaXN0IiwibWFpbGluZyBsaXN0IGF0IiwibGlzdCBhdCBodHRwIiwiaHR0cCB3d3cgc3VwZXJjbHVzdGVyIiwid3d3IHN1cGVyY2x1c3RlciBvcmciLCJzdXBlcmNsdXN0ZXIgb3JnIG1haWxtYW4iLCJvcmcgbWFpbG1hbiBsaXN0aW5mbyIsIm1haWxtYW4gbGlzdGluZm8gdG9ycXVldXNlcnMiLCJsaXN0aW5mbyB0b3JxdWV1c2VycyBjdXN0b21lcnMiLCJ0b3JxdWV1c2VycyBjdXN0b21lcnMgdXNpbmciLCJjdXN0b21lcnMgdXNpbmcgdG9ycXVlIiwidXNpbmcgdG9ycXVlIHRoYXQiLCJ0b3JxdWUgdGhhdCBhbHNvIiwidGhhdCBhbHNvIGFyZSIsImFsc28gYXJlIGxpY2Vuc2VkIiwiYXJlIGxpY2Vuc2VkIHVzZXJzIiwibGljZW5zZWQgdXNlcnMgb2YiLCJ1c2VycyBvZiBtb2FiIiwib2YgbW9hYiBicmFuZGVkIiwibW9hYiBicmFuZGVkIHNvZnR3YXJlIiwiYnJhbmRlZCBzb2Z0d2FyZSBmcm9tIiwic29mdHdhcmUgZnJvbSBhZGFwdGl2ZSIsImFkYXB0aXZlIGNvbXB1dGluZyBpbmMiLCJjb21wdXRpbmcgaW5jIGNhbiIsImluYyBjYW4gZ2V0IiwiY2FuIGdldCB0b3JxdWUiLCJnZXQgdG9ycXVlIHN1cHBvcnQiLCJ0b3JxdWUgc3VwcG9ydCBmcm9tIiwiYWRhcHRpdmUgY29tcHV0aW5nIHZpYSIsImNvbXB1dGluZyB2aWEgZW1haWwiLCJ2aWEgZW1haWwgdG9ycXVlIiwiZW1haWwgdG9ycXVlIHN1cHBvcnQiLCJ0b3JxdWUgc3VwcG9ydCBhZGFwdGl2ZWNvbXB1dGluZyIsInN1cHBvcnQgYWRhcHRpdmVjb21wdXRpbmcgY29tIiwiYWRhcHRpdmVjb21wdXRpbmcgY29tIHBob25lIiwiY29tIHBob25lIDgwMSIsInBob25lIDgwMSA3MTciLCI4MDEgNzE3IDM3MDAiLCI3MTcgMzcwMCB3ZWIiLCIzNzAwIHdlYiB3d3ciLCJ3ZWIgd3d3IGFkYXB0aXZlY29tcHV0aW5nIiwiYWRhcHRpdmVjb21wdXRpbmcgY29tIHd3dyIsImNvbSB3d3cgY2x1c3RlcnJlc291cmNlcyIsImNsdXN0ZXJyZXNvdXJjZXMgY29tIHRoaXMiLCJjb20gdGhpcyBsaWNlbnNlIiwibGljZW5zZSBjb3ZlcnMgdXNlIiwiY292ZXJzIHVzZSBvZiIsIm9mIHRoZSB0b3JxdWUiLCJ0aGUgdG9ycXVlIHYyIiwiNSBzb2Z0d2FyZSB0aGUiLCJzb2Z0d2FyZSBhdCB5b3VyIiwiYXQgeW91ciBzaXRlIiwieW91ciBzaXRlIG9yIiwic2l0ZSBvciBsb2NhdGlvbiIsIm9yIGxvY2F0aW9uIGFuZCIsImxvY2F0aW9uIGFuZCBmb3IiLCJhbmQgZm9yIGNlcnRhaW4iLCJmb3IgY2VydGFpbiB1c2VycyIsImNlcnRhaW4gdXNlcnMgcmVkaXN0cmlidXRpb24iLCJ1c2VycyByZWRpc3RyaWJ1dGlvbiBvZiIsInNvZnR3YXJlIHRvIG90aGVyIiwidG8gb3RoZXIgc2l0ZXMiLCJvdGhlciBzaXRlcyBhbmQiLCJzaXRlcyBhbmQgbG9jYXRpb25zMSIsImFuZCBsb2NhdGlvbnMxIGxhdGVyIiwibG9jYXRpb25zMSBsYXRlciB2ZXJzaW9ucyIsInZlcnNpb25zIG9mIHRvcnF1ZSIsIm9mIHRvcnF1ZSBhcmUiLCJ0b3JxdWUgYXJlIGFsc28iLCJhcmUgYWxzbyBjb3ZlcmVkIiwiYWxzbyBjb3ZlcmVkIGJ5IiwidGhpcyBsaWNlbnNlIHVzZSIsImxpY2Vuc2UgdXNlIGFuZCIsInVzZSBhbmQgcmVkaXN0cmlidXRpb24iLCJyZWRpc3RyaWJ1dGlvbiBvZiB0b3JxdWUiLCJvZiB0b3JxdWUgdjIiLCJ2MiA1IGluIiwiNSBpbiBzb3VyY2UiLCJ0aGF0IGFsbCBvZiIsIm1ldCAxIGFueSIsIjEgYW55IHJlZGlzdHJpYnV0aW9uIiwicGFyYWdyYXBoIDUgdGhpcyIsIjUgdGhpcyBsaXN0IiwicGFyYWdyYXBoIDUgMiIsIjUgMiBhbnkiLCIyIGFueSByZWRpc3RyaWJ1dGlvbiIsImFueSByZWRpc3RyaWJ1dGlvbiBpbiIsInBhcmFncmFwaCA0IHRoaXMiLCI0IHRoaXMgbGlzdCIsInBhcmFncmFwaCA1IGluIiwiNSBpbiB0aGUiLCJjb2RlIGZvciB0b3JxdWUiLCJmb3IgdG9ycXVlIGFuZCIsInRvcnF1ZSBhbmQgYW55IiwiYWRkaXRpb25zIHRvIHRvcnF1ZSIsInRvIHRvcnF1ZSB0aGUiLCJ0b3JxdWUgdGhlIHNvdXJjZSIsImZlZSBhbmQgYWxsIiwiYWxsIG1vZGlmaWNhdGlvbnMgYW5kIiwibW9kaWZpY2F0aW9ucyBhbmQgYWRkaXRpb25zIiwiZnJlZWx5IHJlZGlzdHJpYnV0YWJsZSBieSIsInJlZGlzdHJpYnV0YWJsZSBieSBhbnkiLCJhbnkgcGFydHkgaW5jbHVkaW5nIiwicGFydHkgaW5jbHVkaW5nIGxpY2Vuc29yIiwiaW5jbHVkaW5nIGxpY2Vuc29yIHdpdGhvdXQiLCJsaWNlbnNvciB3aXRob3V0IHJlc3RyaWN0aW9uIiwid2l0aG91dCByZXN0cmljdGlvbiA0IiwicmVzdHJpY3Rpb24gNCBhbGwiLCJmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQgdG9ycXVlIiwiYWNrbm93bGVkZ21lbnQgdG9ycXVlIGlzIiwidG9ycXVlIGlzIGEiLCJtb2RpZmljYXRpb24gb2Ygb3BlbnBicyIsIm9mIG9wZW5wYnMgd2hpY2giLCJvcGVucGJzIHdoaWNoIHdhcyIsIndoaWNoIHdhcyBkZXZlbG9wZWQiLCJkZXZlbG9wZWQgYnkgbmFzYSIsImJ5IG5hc2EgYW1lcyIsIm5hc2EgYW1lcyByZXNlYXJjaCIsImFtZXMgcmVzZWFyY2ggY2VudGVyIiwicmVzZWFyY2ggY2VudGVyIGxhd3JlbmNlIiwiY2VudGVyIGxhd3JlbmNlIGxpdmVybW9yZSIsImxhd3JlbmNlIGxpdmVybW9yZSBuYXRpb25hbCIsImxpdmVybW9yZSBuYXRpb25hbCBsYWJvcmF0b3J5IiwibmF0aW9uYWwgbGFib3JhdG9yeSBhbmQiLCJsYWJvcmF0b3J5IGFuZCB2ZXJpZGlhbiIsImFuZCB2ZXJpZGlhbiB0b3JxdWUiLCJ2ZXJpZGlhbiB0b3JxdWUgb3BlbiIsInRvcnF1ZSBvcGVuIHNvdXJjZSIsInNvdXJjZSBsaWNlbnNlIHYxIiwiMSAxIGluZm9ybWF0aW9uIiwiMSBpbmZvcm1hdGlvbiBzb2x1dGlvbnMiLCJpbmZvcm1hdGlvbiBzb2x1dGlvbnMgaW5jIiwic29sdXRpb25zIGluYyB2aXNpdCIsImluYyB2aXNpdCB3d3ciLCJ2aXNpdCB3d3cgY2x1c3RlcnJlc291cmNlcyIsImNsdXN0ZXJyZXNvdXJjZXMgY29tIHByb2R1Y3RzIiwiY29tIHByb2R1Y3RzIGZvciIsInByb2R1Y3RzIGZvciBtb3JlIiwibW9yZSBpbmZvcm1hdGlvbiBhYm91dCIsImluZm9ybWF0aW9uIGFib3V0IHRvcnF1ZSIsImFib3V0IHRvcnF1ZSBhbmQiLCJ0b3JxdWUgYW5kIHRvIiwiYW5kIHRvIGRvd25sb2FkIiwidG8gZG93bmxvYWQgdG9ycXVlIiwiZG93bmxvYWQgdG9ycXVlIGZvciIsInRvcnF1ZSBmb3IgaW5mb3JtYXRpb24iLCJmb3IgaW5mb3JtYXRpb24gYWJvdXQiLCJpbmZvcm1hdGlvbiBhYm91dCBtb2FiIiwiYWJvdXQgbW9hYiBicmFuZGVkIiwibW9hYiBicmFuZGVkIHByb2R1Y3RzIiwiYnJhbmRlZCBwcm9kdWN0cyBhbmQiLCJwcm9kdWN0cyBhbmQgc28iLCJhbmQgc28gcmVjZWl2ZSIsInNvIHJlY2VpdmUgc3VwcG9ydCIsInJlY2VpdmUgc3VwcG9ydCBmcm9tIiwiYWRhcHRpdmUgY29tcHV0aW5nIGZvciIsImNvbXB1dGluZyBmb3IgdG9ycXVlIiwiZm9yIHRvcnF1ZSBzZWUiLCJ0b3JxdWUgc2VlIHd3dyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUcnVzc3RlciBPcGVuIFNvdXJjZSBMaWNlbnNlIHZlcnNpb24gMS4wYSAoVFJVU1QpIGNvcHlyaWdodCAoYykgMjAwNiBNaWtlIE1pbnR6IGFuZCBSb2JlcnQgRWtlbmRhaGwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBhbnkgZm9ybSBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IGluZm9ybWF0aW9uIG9uIGhvdyB0byBvYnRhaW4gY29tcGxldGUgc291cmNlIGNvZGUgZm9yIHRoaXMgc29mdHdhcmUgYW5kIGFueSBhY2NvbXBhbnlpbmcgc29mdHdhcmUgdGhhdCB1c2VzIHRoaXMgc29mdHdhcmUuIFRoZSBzb3VyY2UgY29kZSBtdXN0IGVpdGhlciBiZSBpbmNsdWRlZCBpbiB0aGUgZGlzdHJpYnV0aW9uIG9yIGJlIGF2YWlsYWJsZSBpbiBhIHRpbWVseSBmYXNoaW9uIGZvciBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uIHBsdXMgYSBub21pbmFsIGZlZSwgYW5kIG11c3QgYmUgZnJlZWx5IHJlZGlzdHJpYnV0YWJsZSB1bmRlciByZWFzb25hYmxlIGFuZCBubyBtb3JlIHJlc3RyaWN0aXZlIGNvbmRpdGlvbnMuIEZvciBhbiBleGVjdXRhYmxlIGZpbGUsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMuIEl0IGRvZXMgbm90IGluY2x1ZGUgc291cmNlIGNvZGUgZm9yIG1vZHVsZXMgb3IgZmlsZXMgdGhhdCB0eXBpY2FsbHkgYWNjb21wYW55IHRoZSBtYWpvciBjb21wb25lbnRzIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIGZpbGUgcnVucy5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBNSUtFIE1JTlRaIEFORCBST0JFUlQgRUtFTkRBSEwgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIE5PTi1JTkZSSU5HRU1FTlQsIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBNSUtFIE1JTlRaIEFORCBST0JFUlQgRUtFTkRBSEwgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iXSwibGljZW5zZUlkcyI6WyJUT1NMIl0sImtleXdvcmRzIjpbInRydXNzdGVyIG9wZW4gc291cmNlIiwiMSAwYSB0cnVzdCIsIjBhIHRydXN0IGNvcHlyaWdodCIsInRydXN0IGNvcHlyaWdodCBjIiwiYyAyMDA2IG1pa2UiLCIyMDA2IG1pa2UgbWludHoiLCJyb2JlcnQgZWtlbmRhaGwgYWxsIiwiZWtlbmRhaGwgYWxsIHJpZ2h0cyIsInRoYXQgdXNlcyB0aGlzIiwidGhpcyBzb2Z0d2FyZSB0aGUiLCJiZSBhdmFpbGFibGUgaW4iLCJ0aW1lbHkgZmFzaGlvbiBmb3IiLCJmYXNoaW9uIGZvciBubyIsInVuZGVyIHJlYXNvbmFibGUgYW5kIiwicmVhc29uYWJsZSBhbmQgbm8iLCJhbmQgbm8gbW9yZSIsInJlc3RyaWN0aXZlIGNvbmRpdGlvbnMgZm9yIiwicHJvdmlkZWQgYnkgbWlrZSIsImJ5IG1pa2UgbWludHoiLCJyb2JlcnQgZWtlbmRhaGwgYXMiLCJla2VuZGFobCBhcyBpcyIsImV2ZW50IHNoYWxsIG1pa2UiLCJzaGFsbCBtaWtlIG1pbnR6Iiwicm9iZXJ0IGVrZW5kYWhsIG9yIiwiZWtlbmRhaGwgb3IgaXRzIiwidHJ1c3N0ZXIgb3BlbiBzb3VyY2UgbGljZW5zZSIsInZlcnNpb24gMSAwYSB0cnVzdCIsIjEgMGEgdHJ1c3QgY29weXJpZ2h0IiwiMGEgdHJ1c3QgY29weXJpZ2h0IGMiLCJ0cnVzdCBjb3B5cmlnaHQgYyAyMDA2IiwiY29weXJpZ2h0IGMgMjAwNiBtaWtlIiwiYyAyMDA2IG1pa2UgbWludHoiLCIyMDA2IG1pa2UgbWludHogYW5kIiwiYW5kIHJvYmVydCBla2VuZGFobCBhbGwiLCJyb2JlcnQgZWtlbmRhaGwgYWxsIHJpZ2h0cyIsImVrZW5kYWhsIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJzb2Z0d2FyZSB0aGF0IHVzZXMgdGhpcyIsInRoYXQgdXNlcyB0aGlzIHNvZnR3YXJlIiwidXNlcyB0aGlzIHNvZnR3YXJlIHRoZSIsInRoaXMgc29mdHdhcmUgdGhlIHNvdXJjZSIsIm9yIGJlIGF2YWlsYWJsZSBpbiIsImJlIGF2YWlsYWJsZSBpbiBhIiwiYSB0aW1lbHkgZmFzaGlvbiBmb3IiLCJ0aW1lbHkgZmFzaGlvbiBmb3Igbm8iLCJmYXNoaW9uIGZvciBubyBtb3JlIiwicmVkaXN0cmlidXRhYmxlIHVuZGVyIHJlYXNvbmFibGUgYW5kIiwidW5kZXIgcmVhc29uYWJsZSBhbmQgbm8iLCJyZWFzb25hYmxlIGFuZCBubyBtb3JlIiwiYW5kIG5vIG1vcmUgcmVzdHJpY3RpdmUiLCJubyBtb3JlIHJlc3RyaWN0aXZlIGNvbmRpdGlvbnMiLCJtb3JlIHJlc3RyaWN0aXZlIGNvbmRpdGlvbnMgZm9yIiwicmVzdHJpY3RpdmUgY29uZGl0aW9ucyBmb3IgYW4iLCJpcyBwcm92aWRlZCBieSBtaWtlIiwicHJvdmlkZWQgYnkgbWlrZSBtaW50eiIsImJ5IG1pa2UgbWludHogYW5kIiwiYW5kIHJvYmVydCBla2VuZGFobCBhcyIsInJvYmVydCBla2VuZGFobCBhcyBpcyIsImVrZW5kYWhsIGFzIGlzIGFuZCIsIm5vIGV2ZW50IHNoYWxsIG1pa2UiLCJldmVudCBzaGFsbCBtaWtlIG1pbnR6Iiwic2hhbGwgbWlrZSBtaW50eiBhbmQiLCJhbmQgcm9iZXJ0IGVrZW5kYWhsIG9yIiwicm9iZXJ0IGVrZW5kYWhsIG9yIGl0cyIsImVrZW5kYWhsIG9yIGl0cyBjb250cmlidXRvcnMiLCJ0cnVzc3RlciBvcGVuIHNvdXJjZSBsaWNlbnNlIHZlcnNpb24iLCJzb3VyY2UgbGljZW5zZSB2ZXJzaW9uIDEgMGEiLCJsaWNlbnNlIHZlcnNpb24gMSAwYSB0cnVzdCIsInZlcnNpb24gMSAwYSB0cnVzdCBjb3B5cmlnaHQiLCIxIDBhIHRydXN0IGNvcHlyaWdodCBjIiwiMGEgdHJ1c3QgY29weXJpZ2h0IGMgMjAwNiIsInRydXN0IGNvcHlyaWdodCBjIDIwMDYgbWlrZSIsImNvcHlyaWdodCBjIDIwMDYgbWlrZSBtaW50eiIsImMgMjAwNiBtaWtlIG1pbnR6IGFuZCIsIjIwMDYgbWlrZSBtaW50eiBhbmQgcm9iZXJ0IiwibWludHogYW5kIHJvYmVydCBla2VuZGFobCBhbGwiLCJhbmQgcm9iZXJ0IGVrZW5kYWhsIGFsbCByaWdodHMiLCJyb2JlcnQgZWtlbmRhaGwgYWxsIHJpZ2h0cyByZXNlcnZlZCIsImVrZW5kYWhsIGFsbCByaWdodHMgcmVzZXJ2ZWQgcmVkaXN0cmlidXRpb24iLCJjb21wbGV0ZSBzb3VyY2UgY29kZSBmb3IgdGhpcyIsImNvZGUgZm9yIHRoaXMgc29mdHdhcmUgYW5kIiwiZm9yIHRoaXMgc29mdHdhcmUgYW5kIGFueSIsInRoaXMgc29mdHdhcmUgYW5kIGFueSBhY2NvbXBhbnlpbmciLCJhY2NvbXBhbnlpbmcgc29mdHdhcmUgdGhhdCB1c2VzIHRoaXMiLCJzb2Z0d2FyZSB0aGF0IHVzZXMgdGhpcyBzb2Z0d2FyZSIsInRoYXQgdXNlcyB0aGlzIHNvZnR3YXJlIHRoZSIsInVzZXMgdGhpcyBzb2Z0d2FyZSB0aGUgc291cmNlIiwidGhpcyBzb2Z0d2FyZSB0aGUgc291cmNlIGNvZGUiLCJkaXN0cmlidXRpb24gb3IgYmUgYXZhaWxhYmxlIGluIiwib3IgYmUgYXZhaWxhYmxlIGluIGEiLCJiZSBhdmFpbGFibGUgaW4gYSB0aW1lbHkiLCJpbiBhIHRpbWVseSBmYXNoaW9uIGZvciIsImEgdGltZWx5IGZhc2hpb24gZm9yIG5vIiwidGltZWx5IGZhc2hpb24gZm9yIG5vIG1vcmUiLCJmYXNoaW9uIGZvciBubyBtb3JlIHRoYW4iLCJmcmVlbHkgcmVkaXN0cmlidXRhYmxlIHVuZGVyIHJlYXNvbmFibGUgYW5kIiwicmVkaXN0cmlidXRhYmxlIHVuZGVyIHJlYXNvbmFibGUgYW5kIG5vIiwidW5kZXIgcmVhc29uYWJsZSBhbmQgbm8gbW9yZSIsInJlYXNvbmFibGUgYW5kIG5vIG1vcmUgcmVzdHJpY3RpdmUiLCJhbmQgbm8gbW9yZSByZXN0cmljdGl2ZSBjb25kaXRpb25zIiwibm8gbW9yZSByZXN0cmljdGl2ZSBjb25kaXRpb25zIGZvciIsIm1vcmUgcmVzdHJpY3RpdmUgY29uZGl0aW9ucyBmb3IgYW4iLCJyZXN0cmljdGl2ZSBjb25kaXRpb25zIGZvciBhbiBleGVjdXRhYmxlIiwic29mdHdhcmUgaXMgcHJvdmlkZWQgYnkgbWlrZSIsImlzIHByb3ZpZGVkIGJ5IG1pa2UgbWludHoiLCJwcm92aWRlZCBieSBtaWtlIG1pbnR6IGFuZCIsImJ5IG1pa2UgbWludHogYW5kIHJvYmVydCIsIm1pbnR6IGFuZCByb2JlcnQgZWtlbmRhaGwgYXMiLCJhbmQgcm9iZXJ0IGVrZW5kYWhsIGFzIGlzIiwicm9iZXJ0IGVrZW5kYWhsIGFzIGlzIGFuZCIsImVrZW5kYWhsIGFzIGlzIGFuZCBhbnkiLCJpbiBubyBldmVudCBzaGFsbCBtaWtlIiwibm8gZXZlbnQgc2hhbGwgbWlrZSBtaW50eiIsImV2ZW50IHNoYWxsIG1pa2UgbWludHogYW5kIiwic2hhbGwgbWlrZSBtaW50eiBhbmQgcm9iZXJ0IiwibWludHogYW5kIHJvYmVydCBla2VuZGFobCBvciIsImFuZCByb2JlcnQgZWtlbmRhaGwgb3IgaXRzIiwicm9iZXJ0IGVrZW5kYWhsIG9yIGl0cyBjb250cmlidXRvcnMiLCJla2VuZGFobCBvciBpdHMgY29udHJpYnV0b3JzIGJlIl19LHsibGljZW5zZVRleHRzIjpbIkNvcHlyaWdodCAxOTkyLCAxOTkzLCAxOTk0IGJ5IEp1dHRhIERlZ2VuZXIgYW5kIENhcnN0ZW4gQm9ybWFubixcblxuVGVjaG5pc2NoZSBVbml2ZXJzaXRhZXQgQmVybGluXG5cbkFueSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcyBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSBpcyBub3QgcmVtb3ZlZCBhbmQgdGhhdCBuZWl0aGVyIHRoZSBhdXRob3JzIG5vciB0aGUgVGVjaG5pc2NoZSBVbml2ZXJzaXRhZXQgQmVybGluIGFyZSBkZWVtZWQgdG8gaGF2ZSBtYWRlIGFueSByZXByZXNlbnRhdGlvbnMgYXMgdG8gdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlIG5vciBhcmUgaGVsZCByZXNwb25zaWJsZSBmb3IgYW55IGRlZmVjdHMgb2YgdGhpcyBzb2Z0d2FyZS4gVEhFUkUgSVMgQUJTT0xVVEVMWSBOTyBXQVJSQU5UWSBGT1IgVEhJUyBTT0ZUV0FSRS5cblxuQXMgYSBtYXR0ZXIgb2YgY291cnRlc3ksIHRoZSBhdXRob3JzIHJlcXVlc3QgdG8gYmUgaW5mb3JtZWQgYWJvdXQgdXNlcyB0aGlzIHNvZnR3YXJlIGhhcyBmb3VuZCwgYWJvdXQgYnVncyBpbiB0aGlzIHNvZnR3YXJlLCBhbmQgYWJvdXQgYW55IGltcHJvdmVtZW50cyB0aGF0IG1heSBiZSBvZiBnZW5lcmFsIGludGVyZXN0LiBCZXJsaW4sIDI4LjExLjE5OTRcblxuSnV0dGEgRGVnZW5lclxuXG5DYXJzdGVuIEJvcm1hbm4iXSwibGljZW5zZUlkcyI6WyJUVS1CZXJsaW4tMS4wIl0sImtleXdvcmRzIjpudWxsfSx7ImxpY2Vuc2VUZXh0cyI6WyJDb3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCBieSBKdXR0YSBEZWdlbmVyIGFuZCBDYXJzdGVuIEJvcm1hbm4sXG5cblRlY2huaXNjaGUgVW5pdmVyc2l0YWV0IEJlcmxpblxuXG5BbnkgdXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgaXMgbm90IHJlbW92ZWQgYW5kIHRoYXQgbmVpdGhlciB0aGUgYXV0aG9ycyBub3IgdGhlIFRlY2huaXNjaGUgVW5pdmVyc2l0YWV0IEJlcmxpbiBhcmUgZGVlbWVkIHRvIGhhdmUgbWFkZSBhbnkgcmVwcmVzZW50YXRpb25zIGFzIHRvIHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSBub3IgYXJlIGhlbGQgcmVzcG9uc2libGUgZm9yIGFueSBkZWZlY3RzIG9mIHRoaXMgc29mdHdhcmUuIFRIRVJFIElTIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkgRk9SIFRISVMgU09GVFdBUkUuXG5cbkFzIGEgbWF0dGVyIG9mIGNvdXJ0ZXN5LCB0aGUgYXV0aG9ycyByZXF1ZXN0IHRvIGJlIGluZm9ybWVkIGFib3V0IHVzZXMgdGhpcyBzb2Z0d2FyZSBoYXMgZm91bmQsIGFib3V0IGJ1Z3MgaW4gdGhpcyBzb2Z0d2FyZSwgYW5kIGFib3V0IGFueSBpbXByb3ZlbWVudHMgdGhhdCBtYXkgYmUgb2YgZ2VuZXJhbCBpbnRlcmVzdC4gQmVybGluLCAyOC4xMS4xOTk0XG5cbkp1dHRhIERlZ2VuZXJcblxuQ2Fyc3RlbiBCb3JtYW5uIG9Pb1xuXG5TaW5jZSB0aGUgb3JpZ2luYWwgdGVybXMgb2YgMTUgeWVhcnMgYWdvIG1heWJlIGRvIG5vdCBtYWtlIG91ciBpbnRlbnRpb25zIGNvbXBsZXRlbHkgY2xlYXIgZ2l2ZW4gdG9kYXkncyByZWZpbmVkIHVzYWdlIG9mIHRoZSBsZWdhbCB0ZXJtcywgd2UgYXBwZW5kIHRoaXMgYWRkaXRpb25hbCBwZXJtaXNzaW9uOlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIGlzIG5vdCByZW1vdmVkIGFuZCB0aGF0IG5laXRoZXIgdGhlIGF1dGhvcnMgbm9yIHRoZSBUZWNobmlzY2hlIFVuaXZlcnNpdGFldCBCZXJsaW4gYXJlIGRlZW1lZCB0byBoYXZlIG1hZGUgYW55IHJlcHJlc2VudGF0aW9ucyBhcyB0byB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2Ugbm9yIGFyZSBoZWxkIHJlc3BvbnNpYmxlIGZvciBhbnkgZGVmZWN0cyBvZiB0aGlzIHNvZnR3YXJlLiBUSEVSRSBJUyBBQlNPTFVURUxZIE5PIFdBUlJBTlRZIEZPUiBUSElTIFNPRlRXQVJFLiBCZXJrZWxleS9CcmVtZW4sIDA1LjA0LjIwMDlcblxuSnV0dGEgRGVnZW5lclxuXG5DYXJzdGVuIEJvcm1hbm4iXSwibGljZW5zZUlkcyI6WyJUVS1CZXJsaW4tMi4wIl0sImtleXdvcmRzIjpbImNhcnN0ZW4gYm9ybWFubiBvb28iLCJib3JtYW5uIG9vbyBzaW5jZSIsIm9vbyBzaW5jZSB0aGUiLCJzaW5jZSB0aGUgb3JpZ2luYWwiLCJ0aGUgb3JpZ2luYWwgdGVybXMiLCJvcmlnaW5hbCB0ZXJtcyBvZiIsInRlcm1zIG9mIDE1Iiwib2YgMTUgeWVhcnMiLCIxNSB5ZWFycyBhZ28iLCJ5ZWFycyBhZ28gbWF5YmUiLCJhZ28gbWF5YmUgZG8iLCJtYXliZSBkbyBub3QiLCJub3QgbWFrZSBvdXIiLCJtYWtlIG91ciBpbnRlbnRpb25zIiwib3VyIGludGVudGlvbnMgY29tcGxldGVseSIsImludGVudGlvbnMgY29tcGxldGVseSBjbGVhciIsImNvbXBsZXRlbHkgY2xlYXIgZ2l2ZW4iLCJjbGVhciBnaXZlbiB0b2RheSIsImdpdmVuIHRvZGF5IHMiLCJ0b2RheSBzIHJlZmluZWQiLCJzIHJlZmluZWQgdXNhZ2UiLCJyZWZpbmVkIHVzYWdlIG9mIiwib2YgdGhlIGxlZ2FsIiwidGhlIGxlZ2FsIHRlcm1zIiwibGVnYWwgdGVybXMgd2UiLCJ0ZXJtcyB3ZSBhcHBlbmQiLCJ3ZSBhcHBlbmQgdGhpcyIsImFwcGVuZCB0aGlzIGFkZGl0aW9uYWwiLCJ0aGlzIGFkZGl0aW9uYWwgcGVybWlzc2lvbiIsImFkZGl0aW9uYWwgcGVybWlzc2lvbiBwZXJtaXNzaW9uIiwicGVybWlzc2lvbiBwZXJtaXNzaW9uIHRvIiwidGhpcyBzb2Z0d2FyZSBiZXJrZWxleSIsInNvZnR3YXJlIGJlcmtlbGV5IGJyZW1lbiIsImJlcmtlbGV5IGJyZW1lbiAwNSIsImJyZW1lbiAwNSAwNCIsIjA1IDA0IDIwMDkiLCIwNCAyMDA5IGp1dHRhIiwiMjAwOSBqdXR0YSBkZWdlbmVyIiwiZGVnZW5lciBjYXJzdGVuIGJvcm1hbm4gb29vIiwiY2Fyc3RlbiBib3JtYW5uIG9vbyBzaW5jZSIsImJvcm1hbm4gb29vIHNpbmNlIHRoZSIsIm9vbyBzaW5jZSB0aGUgb3JpZ2luYWwiLCJzaW5jZSB0aGUgb3JpZ2luYWwgdGVybXMiLCJ0aGUgb3JpZ2luYWwgdGVybXMgb2YiLCJvcmlnaW5hbCB0ZXJtcyBvZiAxNSIsInRlcm1zIG9mIDE1IHllYXJzIiwib2YgMTUgeWVhcnMgYWdvIiwiMTUgeWVhcnMgYWdvIG1heWJlIiwieWVhcnMgYWdvIG1heWJlIGRvIiwiYWdvIG1heWJlIGRvIG5vdCIsIm1heWJlIGRvIG5vdCBtYWtlIiwiZG8gbm90IG1ha2Ugb3VyIiwibm90IG1ha2Ugb3VyIGludGVudGlvbnMiLCJtYWtlIG91ciBpbnRlbnRpb25zIGNvbXBsZXRlbHkiLCJvdXIgaW50ZW50aW9ucyBjb21wbGV0ZWx5IGNsZWFyIiwiaW50ZW50aW9ucyBjb21wbGV0ZWx5IGNsZWFyIGdpdmVuIiwiY29tcGxldGVseSBjbGVhciBnaXZlbiB0b2RheSIsImNsZWFyIGdpdmVuIHRvZGF5IHMiLCJnaXZlbiB0b2RheSBzIHJlZmluZWQiLCJ0b2RheSBzIHJlZmluZWQgdXNhZ2UiLCJzIHJlZmluZWQgdXNhZ2Ugb2YiLCJyZWZpbmVkIHVzYWdlIG9mIHRoZSIsInVzYWdlIG9mIHRoZSBsZWdhbCIsIm9mIHRoZSBsZWdhbCB0ZXJtcyIsInRoZSBsZWdhbCB0ZXJtcyB3ZSIsImxlZ2FsIHRlcm1zIHdlIGFwcGVuZCIsInRlcm1zIHdlIGFwcGVuZCB0aGlzIiwid2UgYXBwZW5kIHRoaXMgYWRkaXRpb25hbCIsImFwcGVuZCB0aGlzIGFkZGl0aW9uYWwgcGVybWlzc2lvbiIsInRoaXMgYWRkaXRpb25hbCBwZXJtaXNzaW9uIHBlcm1pc3Npb24iLCJhZGRpdGlvbmFsIHBlcm1pc3Npb24gcGVybWlzc2lvbiB0byIsInBlcm1pc3Npb24gcGVybWlzc2lvbiB0byB1c2UiLCJmb3IgdGhpcyBzb2Z0d2FyZSBiZXJrZWxleSIsInRoaXMgc29mdHdhcmUgYmVya2VsZXkgYnJlbWVuIiwic29mdHdhcmUgYmVya2VsZXkgYnJlbWVuIDA1IiwiYmVya2VsZXkgYnJlbWVuIDA1IDA0IiwiYnJlbWVuIDA1IDA0IDIwMDkiLCIwNSAwNCAyMDA5IGp1dHRhIiwiMDQgMjAwOSBqdXR0YSBkZWdlbmVyIiwiMjAwOSBqdXR0YSBkZWdlbmVyIGNhcnN0ZW4iLCJqdXR0YSBkZWdlbmVyIGNhcnN0ZW4gYm9ybWFubiBvb28iLCJkZWdlbmVyIGNhcnN0ZW4gYm9ybWFubiBvb28gc2luY2UiLCJjYXJzdGVuIGJvcm1hbm4gb29vIHNpbmNlIHRoZSIsImJvcm1hbm4gb29vIHNpbmNlIHRoZSBvcmlnaW5hbCIsIm9vbyBzaW5jZSB0aGUgb3JpZ2luYWwgdGVybXMiLCJzaW5jZSB0aGUgb3JpZ2luYWwgdGVybXMgb2YiLCJ0aGUgb3JpZ2luYWwgdGVybXMgb2YgMTUiLCJvcmlnaW5hbCB0ZXJtcyBvZiAxNSB5ZWFycyIsInRlcm1zIG9mIDE1IHllYXJzIGFnbyIsIm9mIDE1IHllYXJzIGFnbyBtYXliZSIsIjE1IHllYXJzIGFnbyBtYXliZSBkbyIsInllYXJzIGFnbyBtYXliZSBkbyBub3QiLCJhZ28gbWF5YmUgZG8gbm90IG1ha2UiLCJtYXliZSBkbyBub3QgbWFrZSBvdXIiLCJkbyBub3QgbWFrZSBvdXIgaW50ZW50aW9ucyIsIm5vdCBtYWtlIG91ciBpbnRlbnRpb25zIGNvbXBsZXRlbHkiLCJtYWtlIG91ciBpbnRlbnRpb25zIGNvbXBsZXRlbHkgY2xlYXIiLCJvdXIgaW50ZW50aW9ucyBjb21wbGV0ZWx5IGNsZWFyIGdpdmVuIiwiaW50ZW50aW9ucyBjb21wbGV0ZWx5IGNsZWFyIGdpdmVuIHRvZGF5IiwiY29tcGxldGVseSBjbGVhciBnaXZlbiB0b2RheSBzIiwiY2xlYXIgZ2l2ZW4gdG9kYXkgcyByZWZpbmVkIiwiZ2l2ZW4gdG9kYXkgcyByZWZpbmVkIHVzYWdlIiwidG9kYXkgcyByZWZpbmVkIHVzYWdlIG9mIiwicyByZWZpbmVkIHVzYWdlIG9mIHRoZSIsInJlZmluZWQgdXNhZ2Ugb2YgdGhlIGxlZ2FsIiwidXNhZ2Ugb2YgdGhlIGxlZ2FsIHRlcm1zIiwib2YgdGhlIGxlZ2FsIHRlcm1zIHdlIiwidGhlIGxlZ2FsIHRlcm1zIHdlIGFwcGVuZCIsImxlZ2FsIHRlcm1zIHdlIGFwcGVuZCB0aGlzIiwidGVybXMgd2UgYXBwZW5kIHRoaXMgYWRkaXRpb25hbCIsIndlIGFwcGVuZCB0aGlzIGFkZGl0aW9uYWwgcGVybWlzc2lvbiIsImFwcGVuZCB0aGlzIGFkZGl0aW9uYWwgcGVybWlzc2lvbiBwZXJtaXNzaW9uIiwidGhpcyBhZGRpdGlvbmFsIHBlcm1pc3Npb24gcGVybWlzc2lvbiB0byIsImFkZGl0aW9uYWwgcGVybWlzc2lvbiBwZXJtaXNzaW9uIHRvIHVzZSIsInBlcm1pc3Npb24gcGVybWlzc2lvbiB0byB1c2UgY29weSIsIndhcnJhbnR5IGZvciB0aGlzIHNvZnR3YXJlIGJlcmtlbGV5IiwiZm9yIHRoaXMgc29mdHdhcmUgYmVya2VsZXkgYnJlbWVuIiwidGhpcyBzb2Z0d2FyZSBiZXJrZWxleSBicmVtZW4gMDUiLCJzb2Z0d2FyZSBiZXJrZWxleSBicmVtZW4gMDUgMDQiLCJiZXJrZWxleSBicmVtZW4gMDUgMDQgMjAwOSIsImJyZW1lbiAwNSAwNCAyMDA5IGp1dHRhIiwiMDUgMDQgMjAwOSBqdXR0YSBkZWdlbmVyIiwiMDQgMjAwOSBqdXR0YSBkZWdlbmVyIGNhcnN0ZW4iLCIyMDA5IGp1dHRhIGRlZ2VuZXIgY2Fyc3RlbiBib3JtYW5uIl19LHsibGljZW5zZVRleHRzIjpbIlVwc3RyZWFtIENvbXBhdGliaWxpdHkgTGljZW5zZSB2LiAxLjAgKFVDTC0xLjApXG5cblRoaXMgVXBzdHJlYW0gQ29tcGF0aWJpbGl0eSBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlIFwiT3JpZ2luYWwgV29ya1wiKSB3aG9zZSBvd25lciAodGhlIFwiTGljZW5zb3JcIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIGxpY2Vuc2luZyBub3RpY2UgYWRqYWNlbnQgdG8gdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOlxuXG5MaWNlbnNlZCB1bmRlciB0aGUgVXBzdHJlYW0gQ29tcGF0aWJpbGl0eSBMaWNlbnNlIDEuMFxuXG4gICAxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNvcHlyaWdodCwgdG8gZG8gdGhlIGZvbGxvd2luZzpcblxuICAgICAgYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllcywgZWl0aGVyIGFsb25lIG9yIGFzIHBhcnQgb2YgYSBjb2xsZWN0aXZlIHdvcms7XG5cbiAgICAgIGIpIHRvIHRyYW5zbGF0ZSwgYWRhcHQsIGFsdGVyLCB0cmFuc2Zvcm0sIG1vZGlmeSwgb3IgYXJyYW5nZSB0aGUgT3JpZ2luYWwgV29yaywgdGhlcmVieSBjcmVhdGluZyBkZXJpdmF0aXZlIHdvcmtzIChcIkRlcml2YXRpdmUgV29ya3NcIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaztcblxuICAgICAgYykgdG8gZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYywgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IGNvcGllcyBvZiBPcmlnaW5hbCBXb3JrIFlvdSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHNoYWxsIGJlIGxpY2Vuc2VkIHVuZGVyIHRoaXMgVXBzdHJlYW0gQ29tcGF0aWJpbGl0eSBMaWNlbnNlIGFuZCBhbGwgRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHNoYWxsIGJlIGxpY2Vuc2VkIHVuZGVyIGJvdGggdGhpcyBVcHN0cmVhbSBDb21wYXRpYmlsaXR5IExpY2Vuc2UgYW5kIHRoZSBBcGFjaGUgTGljZW5zZSAyLjAgb3IgbGF0ZXI7XG5cbiAgICAgIGQpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZFxuXG4gICAgICBlKSB0byBkaXNwbGF5IHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5LlxuXG4gICAyKSBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcGF0ZW50cywgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQgaW1wb3J0IHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzLlxuXG4gICAzKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSBcIlNvdXJjZSBDb2RlXCIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yay5cblxuICAgNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3IgcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbiwgbm90aGluZyBpbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIGFueSBsaWNlbnNlIHRvIExpY2Vuc29yJ3MgdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5LiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgb3IgaW1wb3J0IGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gbGljZW5zZSBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS5cblxuICAgNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gXCJFeHRlcm5hbCBEZXBsb3ltZW50XCIgbWVhbnMgdGhlIHVzZSwgZGlzdHJpYnV0aW9uLCBvciBjb21tdW5pY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhvc2Ugd29ya3MgYXJlIGRpc3RyaWJ1dGVkIG9yIGNvbW11bmljYXRlZCB0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIG5ldHdvcmsuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnRzIG9mIGxpY2Vuc2UgaGVyZXVuZGVyLCBZb3UgbXVzdCB0cmVhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmsgYXMgYSBkaXN0cmlidXRpb24gdW5kZXIgc2VjdGlvbiAxKGMpLlxuXG4gICA2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiBcIkF0dHJpYnV0aW9uIE5vdGljZS5cIiBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuXG5cbiAgIDcpIFdhcnJhbnR5IG9mIFByb3ZlbmFuY2UgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgYW5kIHRoZSBwYXRlbnQgcmlnaHRzIGdyYW50ZWQgaGVyZWluIGJ5IExpY2Vuc29yIGFyZSBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgYXJlIHN1YmxpY2Vuc2VkIHRvIFlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbnRyaWJ1dG9yKHMpIG9mIHRob3NlIGNvcHlyaWdodHMgYW5kIHBhdGVudCByaWdodHMuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiBcIkFTIElTXCIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBub24taW5mcmluZ2VtZW50LCBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byB0aGUgT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLlxuXG4gICA4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnlvbmUgZm9yIGFueSBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLlxuXG4gICA5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYsIGF0IGFueSB0aW1lLCBZb3UgZXhwcmVzc2x5IGFzc2VudGVkIHRvIHRoaXMgTGljZW5zZSwgdGhhdCBhc3NlbnQgaW5kaWNhdGVzIHlvdXIgY2xlYXIgYW5kIGlycmV2b2NhYmxlIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiBZb3UgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGNvbmRpdGlvbnMgeW91ciByaWdodHMgdG8gdW5kZXJ0YWtlIHRoZSBhY3Rpdml0aWVzIGxpc3RlZCBpbiBTZWN0aW9uIDEsIGluY2x1ZGluZyB5b3VyIHJpZ2h0IHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBkb2luZyBzbyB3aXRob3V0IGhvbm9yaW5nIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGlzIHByb2hpYml0ZWQgYnkgY29weXJpZ2h0IGxhdyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGFmZmVjdCBjb3B5cmlnaHQgZXhjZXB0aW9ucyBhbmQgbGltaXRhdGlvbnMgKGluY2x1ZGluZyBcImZhaXIgdXNlXCIgb3IgXCJmYWlyIGRlYWxpbmdcIikuIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSB1cG9uIHlvdXIgZmFpbHVyZSB0byBob25vciB0aGUgY29uZGl0aW9ucyBpbiBTZWN0aW9uIDEoYykuXG5cbiAgIDEwKSBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgYXMgb2YgdGhlIGRhdGUgWW91IGNvbW1lbmNlIGFuIGFjdGlvbiwgaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltLCBhZ2FpbnN0IExpY2Vuc29yIG9yIGFueSBsaWNlbnNlZSBhbGxlZ2luZyB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIGluZnJpbmdlcyBhIHBhdGVudC4gVGhpcyB0ZXJtaW5hdGlvbiBwcm92aXNpb24gc2hhbGwgbm90IGFwcGx5IGZvciBhbiBhY3Rpb24gYWxsZWdpbmcgcGF0ZW50IGluZnJpbmdlbWVudCBieSBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS5cblxuICAgMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIGNvcHlyaWdodCBvciBwYXRlbnQgbGF3IGluIHRoZSBhcHByb3ByaWF0ZSBqdXJpc2RpY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDEyKSBBdHRvcm5leXMnIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS5cblxuICAgMTMpIE1pc2NlbGxhbmVvdXMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLlxuXG4gICAxNCkgRGVmaW5pdGlvbiBvZiBcIllvdVwiIGluIFRoaXMgTGljZW5zZS4gXCJZb3VcIiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgXCJjb250cm9sXCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuXG5cbiAgIDE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LlxuXG4gICAxNikgTW9kaWZpY2F0aW9uIG9mIFRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGlzIENvcHlyaWdodCAoYykgMjAwNSBMYXdyZW5jZSBSb3NlbiBhbmQgQ29weXJpZ2h0IChjKSAyMDE3IE5pZ2VsIFR6ZW5nLiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSwgb3IgY29tbXVuaWNhdGUgdGhpcyBMaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBwZXJtaXRzIFlvdSB0byBtb2RpZnkgdGhpcyBMaWNlbnNlIGFzIGFwcGxpZWQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gRGVyaXZhdGl2ZSBXb3Jrcy4gSG93ZXZlciwgWW91IG1heSBtb2RpZnkgdGhlIHRleHQgb2YgdGhpcyBMaWNlbnNlIGFuZCBjb3B5LCBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiAodGhlIFwiTW9kaWZpZWQgTGljZW5zZVwiKSBhbmQgYXBwbHkgaXQgdG8gb3RoZXIgb3JpZ2luYWwgd29ya3Mgb2YgYXV0aG9yc2hpcCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogKGkpIFlvdSBtYXkgbm90IGluZGljYXRlIGluIGFueSB3YXkgdGhhdCB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaXMgdGhlIFwiT3BlbiBTb2Z0d2FyZSBMaWNlbnNlXCIgb3IgXCJPU0xcIiBvciB0aGUgXCJVcHN0cmVhbSBDb21wYXRpYmlsaXR5IExpY2Vuc2VcIiBvciBcIlVDTFwiIGFuZCB5b3UgbWF5IG5vdCB1c2UgdGhvc2UgbmFtZXMgaW4gdGhlIG5hbWUgb2YgeW91ciBNb2RpZmllZCBMaWNlbnNlOyAoaWkpIFlvdSBtdXN0IHJlcGxhY2UgdGhlIG5vdGljZSBzcGVjaWZpZWQgaW4gdGhlIGZpcnN0IHBhcmFncmFwaCBhYm92ZSB3aXRoIHRoZSBub3RpY2UgXCJMaWNlbnNlZCB1bmRlciBcdTAwM2NpbnNlcnQgeW91ciBsaWNlbnNlIG5hbWUgaGVyZVx1MDAzZSBcIiBvciB3aXRoIGEgbm90aWNlIG9mIHlvdXIgb3duIHRoYXQgaXMgbm90IGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhlIG5vdGljZSBpbiB0aGlzIExpY2Vuc2U7IGFuZCAoaWlpKSBZb3UgbWF5IG5vdCBjbGFpbSB0aGF0IHlvdXIgb3JpZ2luYWwgd29ya3MgYXJlIG9wZW4gc291cmNlIHNvZnR3YXJlIHVubGVzcyB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaGFzIGJlZW4gYXBwcm92ZWQgYnkgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKSBhbmQgWW91IGNvbXBseSB3aXRoIGl0cyBsaWNlbnNlIHJldmlldyBhbmQgY2VydGlmaWNhdGlvbiBwcm9jZXNzLiJdLCJsaWNlbnNlSWRzIjpbIlVDTC0xLjAiXSwia2V5d29yZHMiOlsiY29tcGF0aWJpbGl0eSBsaWNlbnNlIHYiLCIxIDAgdWNsIiwiMCB1Y2wgMSIsInVjbCAxIDAiLCIwIHRoaXMgdXBzdHJlYW0iLCJjb21wYXRpYmlsaXR5IGxpY2Vuc2UgdGhlIiwidW5kZXIgdGhlIHVwc3RyZWFtIiwiY29tcGF0aWJpbGl0eSBsaWNlbnNlIDEiLCJ1bmRlciB0aGlzIHVwc3RyZWFtIiwiYWxsIGRlcml2YXRpdmUgd29yayIsImxpY2Vuc2VkIHVuZGVyIGJvdGgiLCJ1bmRlciBib3RoIHRoaXMiLCJib3RoIHRoaXMgdXBzdHJlYW0iLCIwIG9yIGxhdGVyIiwib3IgbGF0ZXIgZCIsImxhdGVyIGQgdG8iLCJsYXdyZW5jZSByb3NlbiBhbmQiLCJyb3NlbiBhbmQgY29weXJpZ2h0IiwiYW5kIGNvcHlyaWdodCBjIiwiY29weXJpZ2h0IGMgMjAxNyIsImMgMjAxNyBuaWdlbCIsIjIwMTcgbmlnZWwgdHplbmciLCJuaWdlbCB0emVuZyBwZXJtaXNzaW9uIiwidHplbmcgcGVybWlzc2lvbiBpcyIsIm9yIG9zbCBvciIsIm9zbCBvciB0aGUiLCJvciB0aGUgdXBzdHJlYW0iLCJjb21wYXRpYmlsaXR5IGxpY2Vuc2Ugb3IiLCJsaWNlbnNlIG9yIHVjbCIsIm9yIHVjbCBhbmQiLCJ1Y2wgYW5kIHlvdSIsInVwc3RyZWFtIGNvbXBhdGliaWxpdHkgbGljZW5zZSB2IiwiY29tcGF0aWJpbGl0eSBsaWNlbnNlIHYgMSIsInYgMSAwIHVjbCIsIjEgMCB1Y2wgMSIsIjAgdWNsIDEgMCIsInVjbCAxIDAgdGhpcyIsIjEgMCB0aGlzIHVwc3RyZWFtIiwiMCB0aGlzIHVwc3RyZWFtIGNvbXBhdGliaWxpdHkiLCJ1cHN0cmVhbSBjb21wYXRpYmlsaXR5IGxpY2Vuc2UgdGhlIiwiY29tcGF0aWJpbGl0eSBsaWNlbnNlIHRoZSBsaWNlbnNlIiwibGljZW5zZWQgdW5kZXIgdGhlIHVwc3RyZWFtIiwidW5kZXIgdGhlIHVwc3RyZWFtIGNvbXBhdGliaWxpdHkiLCJ1cHN0cmVhbSBjb21wYXRpYmlsaXR5IGxpY2Vuc2UgMSIsImNvbXBhdGliaWxpdHkgbGljZW5zZSAxIDAiLCJsaWNlbnNlIDEgMCAxIiwiMSAwIDEgZ3JhbnQiLCJvZiBvcmlnaW5hbCB3b3JrIHlvdSIsIm9yaWdpbmFsIHdvcmsgeW91IGRpc3RyaWJ1dGUiLCJsaWNlbnNlZCB1bmRlciB0aGlzIHVwc3RyZWFtIiwidW5kZXIgdGhpcyB1cHN0cmVhbSBjb21wYXRpYmlsaXR5IiwiY29tcGF0aWJpbGl0eSBsaWNlbnNlIGFuZCBhbGwiLCJsaWNlbnNlIGFuZCBhbGwgZGVyaXZhdGl2ZSIsImFuZCBhbGwgZGVyaXZhdGl2ZSB3b3JrIiwiYWxsIGRlcml2YXRpdmUgd29yayB5b3UiLCJiZSBsaWNlbnNlZCB1bmRlciBib3RoIiwibGljZW5zZWQgdW5kZXIgYm90aCB0aGlzIiwidW5kZXIgYm90aCB0aGlzIHVwc3RyZWFtIiwiYm90aCB0aGlzIHVwc3RyZWFtIGNvbXBhdGliaWxpdHkiLCJjb21wYXRpYmlsaXR5IGxpY2Vuc2UgYW5kIHRoZSIsImxpY2Vuc2UgYW5kIHRoZSBhcGFjaGUiLCJhbmQgdGhlIGFwYWNoZSBsaWNlbnNlIiwibGljZW5zZSAyIDAgb3IiLCIyIDAgb3IgbGF0ZXIiLCIwIG9yIGxhdGVyIGQiLCJvciBsYXRlciBkIHRvIiwibGF0ZXIgZCB0byBwZXJmb3JtIiwiMjAwNSBsYXdyZW5jZSByb3NlbiBhbmQiLCJsYXdyZW5jZSByb3NlbiBhbmQgY29weXJpZ2h0Iiwicm9zZW4gYW5kIGNvcHlyaWdodCBjIiwiYW5kIGNvcHlyaWdodCBjIDIwMTciLCJjb3B5cmlnaHQgYyAyMDE3IG5pZ2VsIiwiYyAyMDE3IG5pZ2VsIHR6ZW5nIiwiMjAxNyBuaWdlbCB0emVuZyBwZXJtaXNzaW9uIiwibmlnZWwgdHplbmcgcGVybWlzc2lvbiBpcyIsInR6ZW5nIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCIsImxpY2Vuc2Ugb3Igb3NsIG9yIiwib3Igb3NsIG9yIHRoZSIsIm9zbCBvciB0aGUgdXBzdHJlYW0iLCJvciB0aGUgdXBzdHJlYW0gY29tcGF0aWJpbGl0eSIsInVwc3RyZWFtIGNvbXBhdGliaWxpdHkgbGljZW5zZSBvciIsImNvbXBhdGliaWxpdHkgbGljZW5zZSBvciB1Y2wiLCJsaWNlbnNlIG9yIHVjbCBhbmQiLCJvciB1Y2wgYW5kIHlvdSIsInVjbCBhbmQgeW91IG1heSIsInVwc3RyZWFtIGNvbXBhdGliaWxpdHkgbGljZW5zZSB2IDEiLCJjb21wYXRpYmlsaXR5IGxpY2Vuc2UgdiAxIDAiLCJsaWNlbnNlIHYgMSAwIHVjbCIsInYgMSAwIHVjbCAxIiwiMSAwIHVjbCAxIDAiLCIwIHVjbCAxIDAgdGhpcyIsInVjbCAxIDAgdGhpcyB1cHN0cmVhbSIsIjEgMCB0aGlzIHVwc3RyZWFtIGNvbXBhdGliaWxpdHkiLCIwIHRoaXMgdXBzdHJlYW0gY29tcGF0aWJpbGl0eSBsaWNlbnNlIiwidGhpcyB1cHN0cmVhbSBjb21wYXRpYmlsaXR5IGxpY2Vuc2UgdGhlIiwidXBzdHJlYW0gY29tcGF0aWJpbGl0eSBsaWNlbnNlIHRoZSBsaWNlbnNlIiwiY29tcGF0aWJpbGl0eSBsaWNlbnNlIHRoZSBsaWNlbnNlIGFwcGxpZXMiLCJ3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoZSB1cHN0cmVhbSIsImxpY2Vuc2VkIHVuZGVyIHRoZSB1cHN0cmVhbSBjb21wYXRpYmlsaXR5IiwidW5kZXIgdGhlIHVwc3RyZWFtIGNvbXBhdGliaWxpdHkgbGljZW5zZSIsInRoZSB1cHN0cmVhbSBjb21wYXRpYmlsaXR5IGxpY2Vuc2UgMSIsInVwc3RyZWFtIGNvbXBhdGliaWxpdHkgbGljZW5zZSAxIDAiLCJjb21wYXRpYmlsaXR5IGxpY2Vuc2UgMSAwIDEiLCJsaWNlbnNlIDEgMCAxIGdyYW50IiwiMSAwIDEgZ3JhbnQgb2YiLCJjb3BpZXMgb2Ygb3JpZ2luYWwgd29yayB5b3UiLCJvZiBvcmlnaW5hbCB3b3JrIHlvdSBkaXN0cmlidXRlIiwib3JpZ2luYWwgd29yayB5b3UgZGlzdHJpYnV0ZSBvciIsImJlIGxpY2Vuc2VkIHVuZGVyIHRoaXMgdXBzdHJlYW0iLCJsaWNlbnNlZCB1bmRlciB0aGlzIHVwc3RyZWFtIGNvbXBhdGliaWxpdHkiLCJ1bmRlciB0aGlzIHVwc3RyZWFtIGNvbXBhdGliaWxpdHkgbGljZW5zZSIsInVwc3RyZWFtIGNvbXBhdGliaWxpdHkgbGljZW5zZSBhbmQgYWxsIiwiY29tcGF0aWJpbGl0eSBsaWNlbnNlIGFuZCBhbGwgZGVyaXZhdGl2ZSIsImxpY2Vuc2UgYW5kIGFsbCBkZXJpdmF0aXZlIHdvcmsiLCJhbmQgYWxsIGRlcml2YXRpdmUgd29yayB5b3UiLCJhbGwgZGVyaXZhdGl2ZSB3b3JrIHlvdSBkaXN0cmlidXRlIiwiZGVyaXZhdGl2ZSB3b3JrIHlvdSBkaXN0cmlidXRlIG9yIiwic2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgYm90aCIsImJlIGxpY2Vuc2VkIHVuZGVyIGJvdGggdGhpcyIsImxpY2Vuc2VkIHVuZGVyIGJvdGggdGhpcyB1cHN0cmVhbSIsInVuZGVyIGJvdGggdGhpcyB1cHN0cmVhbSBjb21wYXRpYmlsaXR5IiwiYm90aCB0aGlzIHVwc3RyZWFtIGNvbXBhdGliaWxpdHkgbGljZW5zZSIsInVwc3RyZWFtIGNvbXBhdGliaWxpdHkgbGljZW5zZSBhbmQgdGhlIiwiY29tcGF0aWJpbGl0eSBsaWNlbnNlIGFuZCB0aGUgYXBhY2hlIiwibGljZW5zZSBhbmQgdGhlIGFwYWNoZSBsaWNlbnNlIiwiYW5kIHRoZSBhcGFjaGUgbGljZW5zZSAyIiwiYXBhY2hlIGxpY2Vuc2UgMiAwIG9yIiwibGljZW5zZSAyIDAgb3IgbGF0ZXIiLCIyIDAgb3IgbGF0ZXIgZCIsIjAgb3IgbGF0ZXIgZCB0byIsIm9yIGxhdGVyIGQgdG8gcGVyZm9ybSIsImxhdGVyIGQgdG8gcGVyZm9ybSB0aGUiLCJjIDIwMDUgbGF3cmVuY2Ugcm9zZW4gYW5kIiwiMjAwNSBsYXdyZW5jZSByb3NlbiBhbmQgY29weXJpZ2h0IiwibGF3cmVuY2Ugcm9zZW4gYW5kIGNvcHlyaWdodCBjIiwicm9zZW4gYW5kIGNvcHlyaWdodCBjIDIwMTciLCJhbmQgY29weXJpZ2h0IGMgMjAxNyBuaWdlbCIsImNvcHlyaWdodCBjIDIwMTcgbmlnZWwgdHplbmciLCJjIDIwMTcgbmlnZWwgdHplbmcgcGVybWlzc2lvbiIsIjIwMTcgbmlnZWwgdHplbmcgcGVybWlzc2lvbiBpcyIsIm5pZ2VsIHR6ZW5nIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCIsInR6ZW5nIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byIsInNvZnR3YXJlIGxpY2Vuc2Ugb3Igb3NsIG9yIiwibGljZW5zZSBvciBvc2wgb3IgdGhlIiwib3Igb3NsIG9yIHRoZSB1cHN0cmVhbSIsIm9zbCBvciB0aGUgdXBzdHJlYW0gY29tcGF0aWJpbGl0eSIsIm9yIHRoZSB1cHN0cmVhbSBjb21wYXRpYmlsaXR5IGxpY2Vuc2UiLCJ0aGUgdXBzdHJlYW0gY29tcGF0aWJpbGl0eSBsaWNlbnNlIG9yIiwidXBzdHJlYW0gY29tcGF0aWJpbGl0eSBsaWNlbnNlIG9yIHVjbCIsImNvbXBhdGliaWxpdHkgbGljZW5zZSBvciB1Y2wgYW5kIiwibGljZW5zZSBvciB1Y2wgYW5kIHlvdSIsIm9yIHVjbCBhbmQgeW91IG1heSIsInVjbCBhbmQgeW91IG1heSBub3QiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChjKSBbeWVhcl0gW2NvcHlyaWdodCBob2xkZXJzXSBUaGUgVW5pdmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjBcblxuU3ViamVjdCB0byB0aGUgY29uZGl0aW9uIHNldCBmb3J0aCBiZWxvdywgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSwgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZC9vciBkYXRhIChjb2xsZWN0aXZlbHkgdGhlIFwiU29mdHdhcmVcIiksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciBhbnkgYW5kIGFsbCBjb3B5cmlnaHQgcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBhbmQgYWxsIHBhdGVudCByaWdodHMgb3duZWQgb3IgZnJlZWx5IGxpY2Vuc2FibGUgYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIChpKSB0aGUgdW5tb2RpZmllZCBTb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byBvciBwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yLCBvciAoaWkpIHRoZSBMYXJnZXIgV29ya3MgKGFzIGRlZmluZWQgYmVsb3cpLCB0byBkZWFsIGluIGJvdGhcblxuICAgKGEpIHRoZSBTb2Z0d2FyZSwgYW5kXG5cbiAgIChiKSBhbnkgcGllY2Ugb2Ygc29mdHdhcmUgYW5kL29yIGhhcmR3YXJlIGxpc3RlZCBpbiB0aGUgbHJncndya3MudHh0IGZpbGUgaWYgb25lIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIChlYWNoIGEgXCJMYXJnZXIgV29ya1wiIHRvIHdoaWNoIHRoZSBTb2Z0d2FyZSBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksXG5cbndpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byBjb3B5LCBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGV4cG9ydCwgaGF2ZSBtYWRlLCBhbmQgaGF2ZSBzb2xkIHRoZSBTb2Z0d2FyZSBhbmQgdGhlIExhcmdlciBXb3JrKHMpLCBhbmQgdG8gc3VibGljZW5zZSB0aGUgZm9yZWdvaW5nIHJpZ2h0cyBvbiBlaXRoZXIgdGhlc2Ugb3Igb3RoZXIgdGVybXMuXG5cblRoaXMgbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ugb3IgYXQgYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuIl0sImxpY2Vuc2VJZHMiOlsiVVBMLTEuMCJdLCJrZXl3b3JkcyI6WyJob2xkZXJzIHRoZSB1bml2ZXJzYWwiLCJ0aGUgdW5pdmVyc2FsIHBlcm1pc3NpdmUiLCJ1bml2ZXJzYWwgcGVybWlzc2l2ZSBsaWNlbnNlIiwicGVybWlzc2l2ZSBsaWNlbnNlIHVwbCIsImxpY2Vuc2UgdXBsIHZlcnNpb24iLCJ1cGwgdmVyc2lvbiAxIiwiMSAwIHN1YmplY3QiLCIwIHN1YmplY3QgdG8iLCJ0aGUgY29uZGl0aW9uIHNldCIsImNvbmRpdGlvbiBzZXQgZm9ydGgiLCJmb3J0aCBiZWxvdyBwZXJtaXNzaW9uIiwiZ3JhbnRlZCB0byBhbnkiLCJ0aGlzIHNvZnR3YXJlIGFzc29jaWF0ZWQiLCJzb2Z0d2FyZSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24iLCJvciBkYXRhIGNvbGxlY3RpdmVseSIsImRhdGEgY29sbGVjdGl2ZWx5IHRoZSIsInRoZSBzb2Z0d2FyZSBmcmVlIiwic29mdHdhcmUgZnJlZSBvZiIsImFsbCBjb3B5cmlnaHQgcmlnaHRzIiwiYW5kIGFueSBhbmQiLCJhbmQgYWxsIHBhdGVudCIsImFsbCBwYXRlbnQgcmlnaHRzIiwicGF0ZW50IHJpZ2h0cyBvd25lZCIsIm93bmVkIG9yIGZyZWVseSIsIm9yIGZyZWVseSBsaWNlbnNhYmxlIiwiZnJlZWx5IGxpY2Vuc2FibGUgYnkiLCJsaWNlbnNhYmxlIGJ5IGVhY2giLCJlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciIsImxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyIsImhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIiLCJjb3ZlcmluZyBlaXRoZXIgaSIsImVpdGhlciBpIHRoZSIsImkgdGhlIHVubW9kaWZpZWQiLCJ1bm1vZGlmaWVkIHNvZnR3YXJlIGFzIiwic29mdHdhcmUgYXMgY29udHJpYnV0ZWQiLCJhcyBjb250cmlidXRlZCB0byIsImNvbnRyaWJ1dGVkIHRvIG9yIiwidG8gb3IgcHJvdmlkZWQiLCJvciBwcm92aWRlZCBieSIsInByb3ZpZGVkIGJ5IHN1Y2giLCJsaWNlbnNvciBvciBpaSIsImlpIHRoZSBsYXJnZXIiLCJ0aGUgbGFyZ2VyIHdvcmtzIiwibGFyZ2VyIHdvcmtzIGFzIiwid29ya3MgYXMgZGVmaW5lZCIsImJlbG93IHRvIGRlYWwiLCJkZWFsIGluIGJvdGgiLCJpbiBib3RoIGEiLCJib3RoIGEgdGhlIiwiYSB0aGUgc29mdHdhcmUiLCJzb2Z0d2FyZSBhbmQgYiIsImIgYW55IHBpZWNlIiwiYW5kIG9yIGhhcmR3YXJlIiwib3IgaGFyZHdhcmUgbGlzdGVkIiwiaGFyZHdhcmUgbGlzdGVkIGluIiwiaW4gdGhlIGxyZ3J3cmtzIiwidGhlIGxyZ3J3cmtzIHR4dCIsImxyZ3J3cmtzIHR4dCBmaWxlIiwidHh0IGZpbGUgaWYiLCJmaWxlIGlmIG9uZSIsImlmIG9uZSBpcyIsIm9uZSBpcyBpbmNsdWRlZCIsInRoZSBzb2Z0d2FyZSBlYWNoIiwic29mdHdhcmUgZWFjaCBhIiwiZWFjaCBhIGxhcmdlciIsImxhcmdlciB3b3JrIHRvIiwic29mdHdhcmUgaXMgY29udHJpYnV0ZWQiLCJjb250cmlidXRlZCBieSBzdWNoIiwiYnkgc3VjaCBsaWNlbnNvcnMiLCJzdWNoIGxpY2Vuc29ycyB3aXRob3V0IiwibGljZW5zb3JzIHdpdGhvdXQgcmVzdHJpY3Rpb24iLCJ0byBjb3B5IGNyZWF0ZSIsImRpc3BsYXkgcGVyZm9ybSBhbmQiLCJzb2Z0d2FyZSBhbmQgbWFrZSIsImFuZCBtYWtlIHVzZSIsInNhbGUgaW1wb3J0IGV4cG9ydCIsImltcG9ydCBleHBvcnQgaGF2ZSIsImV4cG9ydCBoYXZlIG1hZGUiLCJtYWRlIGFuZCBoYXZlIiwiYW5kIGhhdmUgc29sZCIsImhhdmUgc29sZCB0aGUiLCJzb2xkIHRoZSBzb2Z0d2FyZSIsImxhcmdlciB3b3JrIHMiLCJ3b3JrIHMgYW5kIiwiYW5kIHRvIHN1YmxpY2Vuc2UiLCJzdWJsaWNlbnNlIHRoZSBmb3JlZ29pbmciLCJ0aGUgZm9yZWdvaW5nIHJpZ2h0cyIsImZvcmVnb2luZyByaWdodHMgb24iLCJyaWdodHMgb24gZWl0aGVyIiwib24gZWl0aGVyIHRoZXNlIiwiZWl0aGVyIHRoZXNlIG9yIiwidGhlc2Ugb3Igb3RoZXIiLCJvdGhlciB0ZXJtcyB0aGlzIiwidGVybXMgdGhpcyBsaWNlbnNlIiwidGhlIGZvbGxvd2luZyBjb25kaXRpb24iLCJmb2xsb3dpbmcgY29uZGl0aW9uIHRoZSIsImNvbmRpdGlvbiB0aGUgYWJvdmUiLCJub3RpY2UgYW5kIGVpdGhlciIsImVpdGhlciB0aGlzIGNvbXBsZXRlIiwidGhpcyBjb21wbGV0ZSBwZXJtaXNzaW9uIiwiY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2UiLCJub3RpY2Ugb3IgYXQiLCJhIG1pbmltdW0gYSIsIm1pbmltdW0gYSByZWZlcmVuY2UiLCJ0byB0aGUgdXBsIiwidGhlIHVwbCBtdXN0IiwidXBsIG11c3QgYmUiLCJ5ZWFyIGNvcHlyaWdodCBob2xkZXJzIHRoZSIsImNvcHlyaWdodCBob2xkZXJzIHRoZSB1bml2ZXJzYWwiLCJob2xkZXJzIHRoZSB1bml2ZXJzYWwgcGVybWlzc2l2ZSIsInRoZSB1bml2ZXJzYWwgcGVybWlzc2l2ZSBsaWNlbnNlIiwidW5pdmVyc2FsIHBlcm1pc3NpdmUgbGljZW5zZSB1cGwiLCJwZXJtaXNzaXZlIGxpY2Vuc2UgdXBsIHZlcnNpb24iLCJsaWNlbnNlIHVwbCB2ZXJzaW9uIDEiLCJ1cGwgdmVyc2lvbiAxIDAiLCJ2ZXJzaW9uIDEgMCBzdWJqZWN0IiwiMSAwIHN1YmplY3QgdG8iLCIwIHN1YmplY3QgdG8gdGhlIiwic3ViamVjdCB0byB0aGUgY29uZGl0aW9uIiwidG8gdGhlIGNvbmRpdGlvbiBzZXQiLCJ0aGUgY29uZGl0aW9uIHNldCBmb3J0aCIsImNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3ciLCJzZXQgZm9ydGggYmVsb3cgcGVybWlzc2lvbiIsImZvcnRoIGJlbG93IHBlcm1pc3Npb24gaXMiLCJoZXJlYnkgZ3JhbnRlZCB0byBhbnkiLCJncmFudGVkIHRvIGFueSBwZXJzb24iLCJvZiB0aGlzIHNvZnR3YXJlIGFzc29jaWF0ZWQiLCJ0aGlzIHNvZnR3YXJlIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiIsInNvZnR3YXJlIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQiLCJhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kIG9yIiwiZG9jdW1lbnRhdGlvbiBhbmQgb3IgZGF0YSIsImFuZCBvciBkYXRhIGNvbGxlY3RpdmVseSIsIm9yIGRhdGEgY29sbGVjdGl2ZWx5IHRoZSIsImRhdGEgY29sbGVjdGl2ZWx5IHRoZSBzb2Z0d2FyZSIsImNvbGxlY3RpdmVseSB0aGUgc29mdHdhcmUgZnJlZSIsInRoZSBzb2Z0d2FyZSBmcmVlIG9mIiwic29mdHdhcmUgZnJlZSBvZiBjaGFyZ2UiLCJjaGFyZ2UgYW5kIHVuZGVyIGFueSIsImFuZCB1bmRlciBhbnkgYW5kIiwiYW5kIGFsbCBjb3B5cmlnaHQgcmlnaHRzIiwiYWxsIGNvcHlyaWdodCByaWdodHMgaW4iLCJjb3B5cmlnaHQgcmlnaHRzIGluIHRoZSIsInNvZnR3YXJlIGFuZCBhbnkgYW5kIiwiYW5kIGFueSBhbmQgYWxsIiwiYW55IGFuZCBhbGwgcGF0ZW50IiwiYW5kIGFsbCBwYXRlbnQgcmlnaHRzIiwiYWxsIHBhdGVudCByaWdodHMgb3duZWQiLCJwYXRlbnQgcmlnaHRzIG93bmVkIG9yIiwicmlnaHRzIG93bmVkIG9yIGZyZWVseSIsIm93bmVkIG9yIGZyZWVseSBsaWNlbnNhYmxlIiwib3IgZnJlZWx5IGxpY2Vuc2FibGUgYnkiLCJmcmVlbHkgbGljZW5zYWJsZSBieSBlYWNoIiwibGljZW5zYWJsZSBieSBlYWNoIGxpY2Vuc29yIiwiYnkgZWFjaCBsaWNlbnNvciBoZXJldW5kZXIiLCJlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyIsImxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIiLCJoZXJldW5kZXIgY292ZXJpbmcgZWl0aGVyIGkiLCJjb3ZlcmluZyBlaXRoZXIgaSB0aGUiLCJlaXRoZXIgaSB0aGUgdW5tb2RpZmllZCIsImkgdGhlIHVubW9kaWZpZWQgc29mdHdhcmUiLCJ0aGUgdW5tb2RpZmllZCBzb2Z0d2FyZSBhcyIsInVubW9kaWZpZWQgc29mdHdhcmUgYXMgY29udHJpYnV0ZWQiLCJzb2Z0d2FyZSBhcyBjb250cmlidXRlZCB0byIsImFzIGNvbnRyaWJ1dGVkIHRvIG9yIiwiY29udHJpYnV0ZWQgdG8gb3IgcHJvdmlkZWQiLCJ0byBvciBwcm92aWRlZCBieSIsIm9yIHByb3ZpZGVkIGJ5IHN1Y2giLCJwcm92aWRlZCBieSBzdWNoIGxpY2Vuc29yIiwiYnkgc3VjaCBsaWNlbnNvciBvciIsInN1Y2ggbGljZW5zb3Igb3IgaWkiLCJsaWNlbnNvciBvciBpaSB0aGUiLCJvciBpaSB0aGUgbGFyZ2VyIiwiaWkgdGhlIGxhcmdlciB3b3JrcyIsInRoZSBsYXJnZXIgd29ya3MgYXMiLCJsYXJnZXIgd29ya3MgYXMgZGVmaW5lZCIsIndvcmtzIGFzIGRlZmluZWQgYmVsb3ciLCJhcyBkZWZpbmVkIGJlbG93IHRvIiwiZGVmaW5lZCBiZWxvdyB0byBkZWFsIiwiYmVsb3cgdG8gZGVhbCBpbiIsInRvIGRlYWwgaW4gYm90aCIsImRlYWwgaW4gYm90aCBhIiwiaW4gYm90aCBhIHRoZSIsImJvdGggYSB0aGUgc29mdHdhcmUiLCJhIHRoZSBzb2Z0d2FyZSBhbmQiLCJ0aGUgc29mdHdhcmUgYW5kIGIiLCJzb2Z0d2FyZSBhbmQgYiBhbnkiLCJhbmQgYiBhbnkgcGllY2UiLCJiIGFueSBwaWVjZSBvZiIsImFueSBwaWVjZSBvZiBzb2Z0d2FyZSIsInBpZWNlIG9mIHNvZnR3YXJlIGFuZCIsInNvZnR3YXJlIGFuZCBvciBoYXJkd2FyZSIsImFuZCBvciBoYXJkd2FyZSBsaXN0ZWQiLCJvciBoYXJkd2FyZSBsaXN0ZWQgaW4iLCJoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIiwibGlzdGVkIGluIHRoZSBscmdyd3JrcyIsImluIHRoZSBscmdyd3JrcyB0eHQiLCJ0aGUgbHJncndya3MgdHh0IGZpbGUiLCJscmdyd3JrcyB0eHQgZmlsZSBpZiIsInR4dCBmaWxlIGlmIG9uZSIsImZpbGUgaWYgb25lIGlzIl19LHsibGljZW5zZVRleHRzIjpbIlVOSUNPREUsIElOQy4gTElDRU5TRSBBR1JFRU1FTlQgLSBEQVRBIEZJTEVTIEFORCBTT0ZUV0FSRVxuXG5Vbmljb2RlIERhdGEgRmlsZXMgaW5jbHVkZSBhbGwgZGF0YSBmaWxlcyB1bmRlciB0aGUgZGlyZWN0b3JpZXMgaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvLCBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvLCBhbmQgaHR0cDovL3d3dy51bmljb2RlLm9yZy9jbGRyL2RhdGEvLiBVbmljb2RlIERhdGEgRmlsZXMgZG8gbm90IGluY2x1ZGUgUERGIG9ubGluZSBjb2RlIGNoYXJ0cyB1bmRlciB0aGUgZGlyZWN0b3J5IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLy4gU29mdHdhcmUgaW5jbHVkZXMgYW55IHNvdXJjZSBjb2RlIHB1Ymxpc2hlZCBpbiB0aGUgVW5pY29kZSBTdGFuZGFyZCBvciB1bmRlciB0aGUgZGlyZWN0b3JpZXMgaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvLCBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvLCBhbmQgaHR0cDovL3d3dy51bmljb2RlLm9yZy9jbGRyL2RhdGEvLlxuXG5OT1RJQ0UgVE8gVVNFUjogQ2FyZWZ1bGx5IHJlYWQgdGhlIGZvbGxvd2luZyBsZWdhbCBhZ3JlZW1lbnQuIEJZIERPV05MT0FESU5HLCBJTlNUQUxMSU5HLCBDT1BZSU5HIE9SIE9USEVSV0lTRSBVU0lORyBVTklDT0RFIElOQy4nUyBEQVRBIEZJTEVTIChcIkRBVEEgRklMRVNcIiksIEFORC9PUiBTT0ZUV0FSRSAoXCJTT0ZUV0FSRVwiKSwgWU9VIFVORVFVSVZPQ0FMTFkgQUNDRVBULCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlksIEFMTCBPRiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQuIElGIFlPVSBETyBOT1QgQUdSRUUsIERPIE5PVCBET1dOTE9BRCwgSU5TVEFMTCwgQ09QWSwgRElTVFJJQlVURSBPUiBVU0UgVEhFIERBVEEgRklMRVMgT1IgU09GVFdBUkUuXG5cbkNPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0VcblxuQ29weXJpZ2h0IMKpIDE5OTEtMjAxNSBVbmljb2RlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUZXJtcyBvZiBVc2UgaW4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbC5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGUgVW5pY29kZSBkYXRhIGZpbGVzIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uICh0aGUgXCJEYXRhIEZpbGVzXCIpIG9yIFVuaWNvZGUgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gKHRoZSBcIlNvZnR3YXJlXCIpIHRvIGRlYWwgaW4gdGhlIERhdGEgRmlsZXMgb3IgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBEYXRhIEZpbGVzIG9yIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgRGF0YSBGaWxlcyBvciBTb2Z0d2FyZSBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBwcm92aWRlZCB0aGF0XG5cbiAgIChhKSB0aGlzIGNvcHlyaWdodCBhbmQgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIHdpdGggYWxsIGNvcGllcyBvZiB0aGUgRGF0YSBGaWxlcyBvciBTb2Z0d2FyZSxcblxuICAgKGIpIHRoaXMgY29weXJpZ2h0IGFuZCBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCBhbmRcblxuICAgKGMpIHRoZXJlIGlzIGNsZWFyIG5vdGljZSBpbiBlYWNoIG1vZGlmaWVkIERhdGEgRmlsZSBvciBpbiB0aGUgU29mdHdhcmUgYXMgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIERhdGEgRmlsZShzKSBvciBTb2Z0d2FyZSB0aGF0IHRoZSBkYXRhIG9yIHNvZnR3YXJlIGhhcyBiZWVuIG1vZGlmaWVkLlxuXG5USEUgREFUQSBGSUxFUyBBTkQgU09GVFdBUkUgQVJFIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIEhPTERFUlMgSU5DTFVERUQgSU4gVEhJUyBOT1RJQ0UgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRIRSBEQVRBIEZJTEVTIE9SIFNPRlRXQVJFLlxuXG5FeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBhIGNvcHlyaWdodCBob2xkZXIgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGVzZSBEYXRhIEZpbGVzIG9yIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyLiJdLCJsaWNlbnNlSWRzIjpbIlVuaWNvZGUtREZTLTIwMTUiXSwia2V5d29yZHMiOlsiY2xkciBkYXRhIHVuaWNvZGUiLCJkYXRhIHVuaWNvZGUgZGF0YSIsImNsZHIgZGF0YSBub3RpY2UiLCJkYXRhIG5vdGljZSB0byIsImNvcHlyaWdodCAxOTkxIDIwMTUiLCIxOTkxIDIwMTUgdW5pY29kZSIsIjIwMTUgdW5pY29kZSBpbmMiLCJ0aGF0IGEgdGhpcyIsIm9yIHNvZnR3YXJlIGIiLCJzb2Z0d2FyZSBiIHRoaXMiLCJhbmQgYyB0aGVyZSIsImMgdGhlcmUgaXMiLCJ0aGVyZSBpcyBjbGVhciIsImlzIGNsZWFyIG5vdGljZSIsImNsZWFyIG5vdGljZSBpbiIsImluIGVhY2ggbW9kaWZpZWQiLCJlYWNoIG1vZGlmaWVkIGRhdGEiLCJtb2RpZmllZCBkYXRhIGZpbGUiLCJkYXRhIGZpbGUgb3IiLCJzb2Z0d2FyZSBhcyB3ZWxsIiwidGhlIGRvY3VtZW50YXRpb24gYXNzb2NpYXRlZCIsImRvY3VtZW50YXRpb24gYXNzb2NpYXRlZCB3aXRoIiwidGhlIGRhdGEgZmlsZSIsImRhdGEgZmlsZSBzIiwiZmlsZSBzIG9yIiwicyBvciBzb2Z0d2FyZSIsIm9yIHNvZnR3YXJlIGhhcyIsImJlZW4gbW9kaWZpZWQgdGhlIiwibW9kaWZpZWQgdGhlIGRhdGEiLCJvcmcgY2xkciBkYXRhIHVuaWNvZGUiLCJjbGRyIGRhdGEgdW5pY29kZSBkYXRhIiwiZGF0YSB1bmljb2RlIGRhdGEgZmlsZXMiLCJvcmcgY2xkciBkYXRhIG5vdGljZSIsImNsZHIgZGF0YSBub3RpY2UgdG8iLCJkYXRhIG5vdGljZSB0byB1c2VyIiwibm90aWNlIGNvcHlyaWdodCAxOTkxIDIwMTUiLCJjb3B5cmlnaHQgMTk5MSAyMDE1IHVuaWNvZGUiLCIxOTkxIDIwMTUgdW5pY29kZSBpbmMiLCIyMDE1IHVuaWNvZGUgaW5jIGFsbCIsInNvIHByb3ZpZGVkIHRoYXQgYSIsInByb3ZpZGVkIHRoYXQgYSB0aGlzIiwidGhhdCBhIHRoaXMgY29weXJpZ2h0IiwiZmlsZXMgb3Igc29mdHdhcmUgYiIsIm9yIHNvZnR3YXJlIGIgdGhpcyIsInNvZnR3YXJlIGIgdGhpcyBjb3B5cmlnaHQiLCJpbiBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYW5kIiwiYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZCBjIiwiZG9jdW1lbnRhdGlvbiBhbmQgYyB0aGVyZSIsImFuZCBjIHRoZXJlIGlzIiwiYyB0aGVyZSBpcyBjbGVhciIsInRoZXJlIGlzIGNsZWFyIG5vdGljZSIsImlzIGNsZWFyIG5vdGljZSBpbiIsImNsZWFyIG5vdGljZSBpbiBlYWNoIiwibm90aWNlIGluIGVhY2ggbW9kaWZpZWQiLCJpbiBlYWNoIG1vZGlmaWVkIGRhdGEiLCJlYWNoIG1vZGlmaWVkIGRhdGEgZmlsZSIsIm1vZGlmaWVkIGRhdGEgZmlsZSBvciIsImRhdGEgZmlsZSBvciBpbiIsImluIHRoZSBzb2Z0d2FyZSBhcyIsInRoZSBzb2Z0d2FyZSBhcyB3ZWxsIiwic29mdHdhcmUgYXMgd2VsbCBhcyIsIndlbGwgYXMgaW4gdGhlIiwiYXMgaW4gdGhlIGRvY3VtZW50YXRpb24iLCJpbiB0aGUgZG9jdW1lbnRhdGlvbiBhc3NvY2lhdGVkIiwidGhlIGRvY3VtZW50YXRpb24gYXNzb2NpYXRlZCB3aXRoIiwiZG9jdW1lbnRhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIiwiYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRhIiwid2l0aCB0aGUgZGF0YSBmaWxlIiwidGhlIGRhdGEgZmlsZSBzIiwiZGF0YSBmaWxlIHMgb3IiLCJmaWxlIHMgb3Igc29mdHdhcmUiLCJzIG9yIHNvZnR3YXJlIHRoYXQiLCJvciBzb2Z0d2FyZSB0aGF0IHRoZSIsInNvZnR3YXJlIHRoYXQgdGhlIGRhdGEiLCJ0aGUgZGF0YSBvciBzb2Z0d2FyZSIsImRhdGEgb3Igc29mdHdhcmUgaGFzIiwib3Igc29mdHdhcmUgaGFzIGJlZW4iLCJzb2Z0d2FyZSBoYXMgYmVlbiBtb2RpZmllZCIsImhhcyBiZWVuIG1vZGlmaWVkIHRoZSIsImJlZW4gbW9kaWZpZWQgdGhlIGRhdGEiLCJtb2RpZmllZCB0aGUgZGF0YSBmaWxlcyIsInVuaWNvZGUgb3JnIGNsZHIgZGF0YSB1bmljb2RlIiwib3JnIGNsZHIgZGF0YSB1bmljb2RlIGRhdGEiLCJjbGRyIGRhdGEgdW5pY29kZSBkYXRhIGZpbGVzIiwiZGF0YSB1bmljb2RlIGRhdGEgZmlsZXMgZG8iLCJ1bmljb2RlIG9yZyBjbGRyIGRhdGEgbm90aWNlIiwib3JnIGNsZHIgZGF0YSBub3RpY2UgdG8iLCJjbGRyIGRhdGEgbm90aWNlIHRvIHVzZXIiLCJkYXRhIG5vdGljZSB0byB1c2VyIGNhcmVmdWxseSIsInBlcm1pc3Npb24gbm90aWNlIGNvcHlyaWdodCAxOTkxIDIwMTUiLCJub3RpY2UgY29weXJpZ2h0IDE5OTEgMjAxNSB1bmljb2RlIiwiY29weXJpZ2h0IDE5OTEgMjAxNSB1bmljb2RlIGluYyIsIjE5OTEgMjAxNSB1bmljb2RlIGluYyBhbGwiLCIyMDE1IHVuaWNvZGUgaW5jIGFsbCByaWdodHMiLCJkbyBzbyBwcm92aWRlZCB0aGF0IGEiLCJzbyBwcm92aWRlZCB0aGF0IGEgdGhpcyIsInByb3ZpZGVkIHRoYXQgYSB0aGlzIGNvcHlyaWdodCIsInRoYXQgYSB0aGlzIGNvcHlyaWdodCBhbmQiLCJkYXRhIGZpbGVzIG9yIHNvZnR3YXJlIGIiLCJmaWxlcyBvciBzb2Z0d2FyZSBiIHRoaXMiLCJvciBzb2Z0d2FyZSBiIHRoaXMgY29weXJpZ2h0Iiwic29mdHdhcmUgYiB0aGlzIGNvcHlyaWdodCBhbmQiLCJhcHBlYXIgaW4gYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGFuZCIsImluIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgYyIsImFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgYyB0aGVyZSIsImRvY3VtZW50YXRpb24gYW5kIGMgdGhlcmUgaXMiLCJhbmQgYyB0aGVyZSBpcyBjbGVhciIsImMgdGhlcmUgaXMgY2xlYXIgbm90aWNlIiwidGhlcmUgaXMgY2xlYXIgbm90aWNlIGluIiwiaXMgY2xlYXIgbm90aWNlIGluIGVhY2giLCJjbGVhciBub3RpY2UgaW4gZWFjaCBtb2RpZmllZCIsIm5vdGljZSBpbiBlYWNoIG1vZGlmaWVkIGRhdGEiLCJpbiBlYWNoIG1vZGlmaWVkIGRhdGEgZmlsZSIsImVhY2ggbW9kaWZpZWQgZGF0YSBmaWxlIG9yIiwibW9kaWZpZWQgZGF0YSBmaWxlIG9yIGluIiwiZGF0YSBmaWxlIG9yIGluIHRoZSIsImZpbGUgb3IgaW4gdGhlIHNvZnR3YXJlIiwib3IgaW4gdGhlIHNvZnR3YXJlIGFzIiwiaW4gdGhlIHNvZnR3YXJlIGFzIHdlbGwiLCJ0aGUgc29mdHdhcmUgYXMgd2VsbCBhcyIsInNvZnR3YXJlIGFzIHdlbGwgYXMgaW4iLCJhcyB3ZWxsIGFzIGluIHRoZSIsIndlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24iLCJhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhc3NvY2lhdGVkIiwiaW4gdGhlIGRvY3VtZW50YXRpb24gYXNzb2NpYXRlZCB3aXRoIiwidGhlIGRvY3VtZW50YXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSIsImRvY3VtZW50YXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRhIiwiYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRhIGZpbGUiLCJ3aXRoIHRoZSBkYXRhIGZpbGUgcyIsInRoZSBkYXRhIGZpbGUgcyBvciIsImRhdGEgZmlsZSBzIG9yIHNvZnR3YXJlIiwiZmlsZSBzIG9yIHNvZnR3YXJlIHRoYXQiLCJzIG9yIHNvZnR3YXJlIHRoYXQgdGhlIiwib3Igc29mdHdhcmUgdGhhdCB0aGUgZGF0YSIsInNvZnR3YXJlIHRoYXQgdGhlIGRhdGEgb3IiLCJ0aGF0IHRoZSBkYXRhIG9yIHNvZnR3YXJlIiwidGhlIGRhdGEgb3Igc29mdHdhcmUgaGFzIiwiZGF0YSBvciBzb2Z0d2FyZSBoYXMgYmVlbiIsIm9yIHNvZnR3YXJlIGhhcyBiZWVuIG1vZGlmaWVkIiwic29mdHdhcmUgaGFzIGJlZW4gbW9kaWZpZWQgdGhlIiwiaGFzIGJlZW4gbW9kaWZpZWQgdGhlIGRhdGEiLCJiZWVuIG1vZGlmaWVkIHRoZSBkYXRhIGZpbGVzIiwibW9kaWZpZWQgdGhlIGRhdGEgZmlsZXMgYW5kIl19LHsibGljZW5zZVRleHRzIjpbIlVOSUNPREUsIElOQy4gTElDRU5TRSBBR1JFRU1FTlQgLSBEQVRBIEZJTEVTIEFORCBTT0ZUV0FSRVxuXG5Vbmljb2RlIERhdGEgRmlsZXMgaW5jbHVkZSBhbGwgZGF0YSBmaWxlcyB1bmRlciB0aGUgZGlyZWN0b3JpZXMgaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvLCBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvLCBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NsZHIvZGF0YS8sIGh0dHA6Ly9zb3VyY2UuaWN1LXByb2plY3Qub3JnL3JlcG9zL2ljdS8sIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvaXZkL2RhdGEvLCBhbmQgaHR0cDovL3d3dy51bmljb2RlLm9yZy91dGlsaXR5L3RyYWMvYnJvd3Nlci8uXG5cblVuaWNvZGUgRGF0YSBGaWxlcyBkbyBub3QgaW5jbHVkZSBQREYgb25saW5lIGNvZGUgY2hhcnRzIHVuZGVyIHRoZSBkaXJlY3RvcnkgaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvLlxuXG5Tb2Z0d2FyZSBpbmNsdWRlcyBhbnkgc291cmNlIGNvZGUgcHVibGlzaGVkIGluIHRoZSBVbmljb2RlIFN0YW5kYXJkIG9yIHVuZGVyIHRoZSBkaXJlY3RvcmllcyBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy8sIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy8sIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvY2xkci9kYXRhLywgaHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1LywgYW5kIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvdXRpbGl0eS90cmFjL2Jyb3dzZXIvLlxuXG5OT1RJQ0UgVE8gVVNFUjogQ2FyZWZ1bGx5IHJlYWQgdGhlIGZvbGxvd2luZyBsZWdhbCBhZ3JlZW1lbnQuIEJZIERPV05MT0FESU5HLCBJTlNUQUxMSU5HLCBDT1BZSU5HIE9SIE9USEVSV0lTRSBVU0lORyBVTklDT0RFIElOQy4nUyBEQVRBIEZJTEVTIChcIkRBVEEgRklMRVNcIiksIEFORC9PUiBTT0ZUV0FSRSAoXCJTT0ZUV0FSRVwiKSwgWU9VIFVORVFVSVZPQ0FMTFkgQUNDRVBULCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlksIEFMTCBPRiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQuIElGIFlPVSBETyBOT1QgQUdSRUUsIERPIE5PVCBET1dOTE9BRCwgSU5TVEFMTCwgQ09QWSwgRElTVFJJQlVURSBPUiBVU0UgVEhFIERBVEEgRklMRVMgT1IgU09GVFdBUkUuXG5cbkNPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0UgQ29weXJpZ2h0IMKpIDE5OTEtMjAxNiBVbmljb2RlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBUZXJtcyBvZiBVc2UgaW4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbC5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGUgVW5pY29kZSBkYXRhIGZpbGVzIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uICh0aGUgXCJEYXRhIEZpbGVzXCIpIG9yIFVuaWNvZGUgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gKHRoZSBcIlNvZnR3YXJlXCIpIHRvIGRlYWwgaW4gdGhlIERhdGEgRmlsZXMgb3IgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBEYXRhIEZpbGVzIG9yIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgRGF0YSBGaWxlcyBvciBTb2Z0d2FyZSBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBwcm92aWRlZCB0aGF0IGVpdGhlclxuXG4gICAoYSkgdGhpcyBjb3B5cmlnaHQgYW5kIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciB3aXRoIGFsbCBjb3BpZXMgb2YgdGhlIERhdGEgRmlsZXMgb3IgU29mdHdhcmUsIG9yXG5cbiAgIChiKSB0aGlzIGNvcHlyaWdodCBhbmQgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFzc29jaWF0ZWQgRG9jdW1lbnRhdGlvbi5cblxuVEhFIERBVEEgRklMRVMgQU5EIFNPRlRXQVJFIEFSRSBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBIT0xERVJTIElOQ0xVREVEIElOIFRISVMgTk9USUNFIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSEUgREFUQSBGSUxFUyBPUiBTT0ZUV0FSRS5cblxuRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVyIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhlc2UgRGF0YSBGaWxlcyBvciBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBvZiB0aGUgY29weXJpZ2h0IGhvbGRlci4iXSwibGljZW5zZUlkcyI6WyJVbmljb2RlLURGUy0yMDE2Il0sImtleXdvcmRzIjpbInJlcG9zIGljdSBodHRwIiwiaWN1IGh0dHAgd3d3IiwidW5pY29kZSBvcmcgaXZkIiwib3JnIGl2ZCBkYXRhIiwiaXZkIGRhdGEgYW5kIiwiZGF0YSBhbmQgaHR0cCIsInRyYWMgYnJvd3NlciB1bmljb2RlIiwiYnJvd3NlciB1bmljb2RlIGRhdGEiLCJyZXBvcyBpY3UgYW5kIiwiaWN1IGFuZCBodHRwIiwidHJhYyBicm93c2VyIG5vdGljZSIsImJyb3dzZXIgbm90aWNlIHRvIiwiY29weXJpZ2h0IDE5OTEgMjAxNiIsIjE5OTEgMjAxNiB1bmljb2RlIiwiMjAxNiB1bmljb2RlIGluYyIsInByb3ZpZGVkIHRoYXQgZWl0aGVyIiwidGhhdCBlaXRoZXIgYSIsImVpdGhlciBhIHRoaXMiLCJvciBiIHRoaXMiLCJvcmcgcmVwb3MgaWN1IGh0dHAiLCJyZXBvcyBpY3UgaHR0cCB3d3ciLCJpY3UgaHR0cCB3d3cgdW5pY29kZSIsInd3dyB1bmljb2RlIG9yZyBpdmQiLCJ1bmljb2RlIG9yZyBpdmQgZGF0YSIsIm9yZyBpdmQgZGF0YSBhbmQiLCJpdmQgZGF0YSBhbmQgaHR0cCIsImRhdGEgYW5kIGh0dHAgd3d3IiwidXRpbGl0eSB0cmFjIGJyb3dzZXIgdW5pY29kZSIsInRyYWMgYnJvd3NlciB1bmljb2RlIGRhdGEiLCJicm93c2VyIHVuaWNvZGUgZGF0YSBmaWxlcyIsIm9yZyByZXBvcyBpY3UgYW5kIiwicmVwb3MgaWN1IGFuZCBodHRwIiwiaWN1IGFuZCBodHRwIHd3dyIsInV0aWxpdHkgdHJhYyBicm93c2VyIG5vdGljZSIsInRyYWMgYnJvd3NlciBub3RpY2UgdG8iLCJicm93c2VyIG5vdGljZSB0byB1c2VyIiwibm90aWNlIGNvcHlyaWdodCAxOTkxIDIwMTYiLCJjb3B5cmlnaHQgMTk5MSAyMDE2IHVuaWNvZGUiLCIxOTkxIDIwMTYgdW5pY29kZSBpbmMiLCIyMDE2IHVuaWNvZGUgaW5jIGFsbCIsInNvIHByb3ZpZGVkIHRoYXQgZWl0aGVyIiwicHJvdmlkZWQgdGhhdCBlaXRoZXIgYSIsInRoYXQgZWl0aGVyIGEgdGhpcyIsImVpdGhlciBhIHRoaXMgY29weXJpZ2h0IiwiZmlsZXMgb3Igc29mdHdhcmUgb3IiLCJvciBzb2Z0d2FyZSBvciBiIiwic29mdHdhcmUgb3IgYiB0aGlzIiwib3IgYiB0aGlzIGNvcHlyaWdodCIsImluIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB0aGUiLCJwcm9qZWN0IG9yZyByZXBvcyBpY3UgaHR0cCIsIm9yZyByZXBvcyBpY3UgaHR0cCB3d3ciLCJyZXBvcyBpY3UgaHR0cCB3d3cgdW5pY29kZSIsImljdSBodHRwIHd3dyB1bmljb2RlIG9yZyIsImh0dHAgd3d3IHVuaWNvZGUgb3JnIGl2ZCIsInd3dyB1bmljb2RlIG9yZyBpdmQgZGF0YSIsInVuaWNvZGUgb3JnIGl2ZCBkYXRhIGFuZCIsIm9yZyBpdmQgZGF0YSBhbmQgaHR0cCIsIml2ZCBkYXRhIGFuZCBodHRwIHd3dyIsImRhdGEgYW5kIGh0dHAgd3d3IHVuaWNvZGUiLCJvcmcgdXRpbGl0eSB0cmFjIGJyb3dzZXIgdW5pY29kZSIsInV0aWxpdHkgdHJhYyBicm93c2VyIHVuaWNvZGUgZGF0YSIsInRyYWMgYnJvd3NlciB1bmljb2RlIGRhdGEgZmlsZXMiLCJicm93c2VyIHVuaWNvZGUgZGF0YSBmaWxlcyBkbyIsInByb2plY3Qgb3JnIHJlcG9zIGljdSBhbmQiLCJvcmcgcmVwb3MgaWN1IGFuZCBodHRwIiwicmVwb3MgaWN1IGFuZCBodHRwIHd3dyIsImljdSBhbmQgaHR0cCB3d3cgdW5pY29kZSIsIm9yZyB1dGlsaXR5IHRyYWMgYnJvd3NlciBub3RpY2UiLCJ1dGlsaXR5IHRyYWMgYnJvd3NlciBub3RpY2UgdG8iLCJ0cmFjIGJyb3dzZXIgbm90aWNlIHRvIHVzZXIiLCJicm93c2VyIG5vdGljZSB0byB1c2VyIGNhcmVmdWxseSIsInBlcm1pc3Npb24gbm90aWNlIGNvcHlyaWdodCAxOTkxIDIwMTYiLCJub3RpY2UgY29weXJpZ2h0IDE5OTEgMjAxNiB1bmljb2RlIiwiY29weXJpZ2h0IDE5OTEgMjAxNiB1bmljb2RlIGluYyIsIjE5OTEgMjAxNiB1bmljb2RlIGluYyBhbGwiLCIyMDE2IHVuaWNvZGUgaW5jIGFsbCByaWdodHMiLCJkbyBzbyBwcm92aWRlZCB0aGF0IGVpdGhlciIsInNvIHByb3ZpZGVkIHRoYXQgZWl0aGVyIGEiLCJwcm92aWRlZCB0aGF0IGVpdGhlciBhIHRoaXMiLCJ0aGF0IGVpdGhlciBhIHRoaXMgY29weXJpZ2h0IiwiZWl0aGVyIGEgdGhpcyBjb3B5cmlnaHQgYW5kIiwiZGF0YSBmaWxlcyBvciBzb2Z0d2FyZSBvciIsImZpbGVzIG9yIHNvZnR3YXJlIG9yIGIiLCJvciBzb2Z0d2FyZSBvciBiIHRoaXMiLCJzb2Z0d2FyZSBvciBiIHRoaXMgY29weXJpZ2h0Iiwib3IgYiB0aGlzIGNvcHlyaWdodCBhbmQiLCJhcHBlYXIgaW4gYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHRoZSIsImluIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB0aGUgZGF0YSIsImRvY3VtZW50YXRpb24gdGhlIGRhdGEgZmlsZXMgYW5kIl19LHsibGljZW5zZVRleHRzIjpbIlVuaWNvZGUgVGVybXMgb2YgVXNlXG5cbkZvciB0aGUgZ2VuZXJhbCBwcml2YWN5IHBvbGljeSBnb3Zlcm5pbmcgYWNjZXNzIHRvIHRoaXMgc2l0ZSwgc2VlIHRoZSBVbmljb2RlIFByaXZhY3kgUG9saWN5LiBGb3IgdHJhZGVtYXJrIHVzYWdlLCBzZWUgdGhlIFVuaWNvZGXCriBDb25zb3J0aXVtIE5hbWUgYW5kIFRyYWRlbWFyayBVc2FnZSBQb2xpY3kuXG5cbiAgIEEuIFVuaWNvZGUgQ29weXJpZ2h0LlxuXG4gICAgICAxLiBDb3B5cmlnaHQgwqkgMTk5MS0yMDE0IFVuaWNvZGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuICAgICAgMi4gQ2VydGFpbiBkb2N1bWVudHMgYW5kIGZpbGVzIG9uIHRoaXMgd2Vic2l0ZSBjb250YWluIGEgbGVnZW5kIGluZGljYXRpbmcgdGhhdCBcIk1vZGlmaWNhdGlvbiBpcyBwZXJtaXR0ZWQuXCIgQW55IHBlcnNvbiBpcyBoZXJlYnkgYXV0aG9yaXplZCwgd2l0aG91dCBmZWUsIHRvIG1vZGlmeSBzdWNoIGRvY3VtZW50cyBhbmQgZmlsZXMgdG8gY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgY29uZm9ybWluZyB0byB0aGUgVW5pY29kZcKuIFN0YW5kYXJkLCBzdWJqZWN0IHRvIFRlcm1zIGFuZCBDb25kaXRpb25zIGhlcmVpbi5cblxuICAgICAgMy4gQW55IHBlcnNvbiBpcyBoZXJlYnkgYXV0aG9yaXplZCwgd2l0aG91dCBmZWUsIHRvIHZpZXcsIHVzZSwgcmVwcm9kdWNlLCBhbmQgZGlzdHJpYnV0ZSBhbGwgZG9jdW1lbnRzIGFuZCBmaWxlcyBzb2xlbHkgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgaW4gdGhlIGNyZWF0aW9uIG9mIHByb2R1Y3RzIHN1cHBvcnRpbmcgdGhlIFVuaWNvZGUgU3RhbmRhcmQsIHN1YmplY3QgdG8gdGhlIFRlcm1zIGFuZCBDb25kaXRpb25zIGhlcmVpbi5cblxuICAgICAgNC4gRnVydGhlciBzcGVjaWZpY2F0aW9ucyBvZiByaWdodHMgYW5kIHJlc3RyaWN0aW9ucyBwZXJ0YWluaW5nIHRvIHRoZSB1c2Ugb2YgdGhlIHBhcnRpY3VsYXIgc2V0IG9mIGRhdGEgZmlsZXMga25vd24gYXMgdGhlIFwiVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2VcIiBjYW4gYmUgZm91bmQgaW4gRXhoaWJpdCAxLlxuXG4gICAgICA1LiBFYWNoIHZlcnNpb24gb2YgdGhlIFVuaWNvZGUgU3RhbmRhcmQgaGFzIGZ1cnRoZXIgc3BlY2lmaWNhdGlvbnMgb2YgcmlnaHRzIGFuZCByZXN0cmljdGlvbnMgb2YgdXNlLiBGb3IgdGhlIGJvb2sgZWRpdGlvbnMgKFVuaWNvZGUgNS4wIGFuZCBlYXJsaWVyKSwgdGhlc2UgYXJlIGZvdW5kIG9uIHRoZSBiYWNrIG9mIHRoZSB0aXRsZSBwYWdlLiBUaGUgb25saW5lIGNvZGUgY2hhcnRzIGNhcnJ5IHNwZWNpZmljIHJlc3RyaWN0aW9ucy4gQWxsIG90aGVyIGZpbGVzLCBpbmNsdWRpbmcgb25saW5lIGRvY3VtZW50YXRpb24gb2YgdGhlIGNvcmUgc3BlY2lmaWNhdGlvbiBmb3IgVW5pY29kZSA2LjAgYW5kIGxhdGVyLCBhcmUgY292ZXJlZCB1bmRlciB0aGVzZSBnZW5lcmFsIFRlcm1zIG9mIFVzZS5cblxuICAgICAgNi4gTm8gbGljZW5zZSBpcyBncmFudGVkIHRvIFwibWlycm9yXCIgdGhlIFVuaWNvZGUgd2Vic2l0ZSB3aGVyZSBhIGZlZSBpcyBjaGFyZ2VkIGZvciBhY2Nlc3MgdG8gdGhlIFwibWlycm9yXCIgc2l0ZS5cblxuICAgICAgNy4gTW9kaWZpY2F0aW9uIGlzIG5vdCBwZXJtaXR0ZWQgd2l0aCByZXNwZWN0IHRvIHRoaXMgZG9jdW1lbnQuIEFsbCBjb3BpZXMgb2YgdGhpcyBkb2N1bWVudCBtdXN0IGJlIHZlcmJhdGltLlxuXG4gICBCLiBSZXN0cmljdGVkIFJpZ2h0cyBMZWdlbmQuIEFueSB0ZWNobmljYWwgZGF0YSBvciBzb2Z0d2FyZSB3aGljaCBpcyBsaWNlbnNlZCB0byB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBpdHMgYWdlbmNpZXMgYW5kL29yIGluc3RydW1lbnRhbGl0aWVzIHVuZGVyIHRoaXMgQWdyZWVtZW50IGlzIGNvbW1lcmNpYWwgdGVjaG5pY2FsIGRhdGEgb3IgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkZXZlbG9wZWQgZXhjbHVzaXZlbHkgYXQgcHJpdmF0ZSBleHBlbnNlIGFzIGRlZmluZWQgaW4gRkFSIDIuMTAxLCBvciBERkFSUyAyNTIuMjI3LTcwMTQgKEp1bmUgMTk5NSksIGFzIGFwcGxpY2FibGUuIEZvciB0ZWNobmljYWwgZGF0YSwgdXNlLCBkdXBsaWNhdGlvbiwgb3IgZGlzY2xvc3VyZSBieSB0aGUgR292ZXJubWVudCBpcyBzdWJqZWN0IHRvIHJlc3RyaWN0aW9ucyBhcyBzZXQgZm9ydGggaW4gREZBUlMgMjAyLjIyNy03MDE1IFRlY2huaWNhbCBEYXRhLCBDb21tZXJjaWFsIGFuZCBJdGVtcyAoTm92IDE5OTUpIGFuZCB0aGlzIEFncmVlbWVudC4gRm9yIFNvZnR3YXJlLCBpbiBhY2NvcmRhbmNlIHdpdGggRkFSIDEyLTIxMiBvciBERkFSUyAyMjctNzIwMiwgYXMgYXBwbGljYWJsZSwgdXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlIGJ5IHRoZSBHb3Zlcm5tZW50IGlzIHN1YmplY3QgdG8gdGhlIHJlc3RyaWN0aW9ucyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuXG5cbiAgIEMuIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXJzLlxuXG4gICAgICAxLiBUaGlzIHB1YmxpY2F0aW9uIGFuZC9vciB3ZWJzaXRlIG1heSBpbmNsdWRlIHRlY2huaWNhbCBvciB0eXBvZ3JhcGhpY2FsIGVycm9ycyBvciBvdGhlciBpbmFjY3VyYWNpZXMgLiBDaGFuZ2VzIGFyZSBwZXJpb2RpY2FsbHkgYWRkZWQgdG8gdGhlIGluZm9ybWF0aW9uIGhlcmVpbjsgdGhlc2UgY2hhbmdlcyB3aWxsIGJlIGluY29ycG9yYXRlZCBpbiBuZXcgZWRpdGlvbnMgb2YgdGhlIHB1YmxpY2F0aW9uIGFuZC9vciB3ZWJzaXRlLiBVbmljb2RlIG1heSBtYWtlIGltcHJvdmVtZW50cyBhbmQvb3IgY2hhbmdlcyBpbiB0aGUgcHJvZHVjdChzKSBhbmQvb3IgcHJvZ3JhbShzKSBkZXNjcmliZWQgaW4gdGhpcyBwdWJsaWNhdGlvbiBhbmQvb3Igd2Vic2l0ZSBhdCBhbnkgdGltZS5cblxuICAgICAgMi4gSWYgdGhpcyBmaWxlIGhhcyBiZWVuIHB1cmNoYXNlZCBvbiBtYWduZXRpYyBvciBvcHRpY2FsIG1lZGlhIGZyb20gVW5pY29kZSwgSW5jLiB0aGUgc29sZSBhbmQgZXhjbHVzaXZlIHJlbWVkeSBmb3IgYW55IGNsYWltIHdpbGwgYmUgZXhjaGFuZ2Ugb2YgdGhlIGRlZmVjdGl2ZSBtZWRpYSB3aXRoaW4gbmluZXR5ICg5MCkgZGF5cyBvZiBvcmlnaW5hbCBwdXJjaGFzZS5cblxuICAgICAgMy4gRVhDRVBUIEFTIFBST1ZJREVEIElOIFNFQ1RJT04gQy4yLCBUSElTIFBVQkxJQ0FUSU9OIEFORC9PUiBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCBFSVRIRVIgRVhQUkVTUywgSU1QTElFRCwgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgTk9OLUlORlJJTkdFTUVOVC4gVU5JQ09ERSBBTkQgSVRTIExJQ0VOU09SUyBBU1NVTUUgTk8gUkVTUE9OU0lCSUxJVFkgRk9SIEVSUk9SUyBPUiBPTUlTU0lPTlMgSU4gVEhJUyBQVUJMSUNBVElPTiBBTkQvT1IgU09GVFdBUkUgT1IgT1RIRVIgRE9DVU1FTlRTIFdISUNIIEFSRSBSRUZFUkVOQ0VEIEJZIE9SIExJTktFRCBUTyBUSElTIFBVQkxJQ0FUSU9OIE9SIFRIRSBVTklDT0RFIFdFQlNJVEUuXG5cbiAgIEQuIFdhaXZlciBvZiBEYW1hZ2VzLiBJbiBubyBldmVudCBzaGFsbCBVbmljb2RlIG9yIGl0cyBsaWNlbnNvcnMgYmUgbGlhYmxlIGZvciBhbnkgc3BlY2lhbCwgaW5jaWRlbnRhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBraW5kLCBvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCB3aGV0aGVyIG9yIG5vdCBVbmljb2RlIHdhcyBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGUgZGFtYWdlLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhvc2UgcmVzdWx0aW5nIGZyb20gdGhlIGZvbGxvd2luZzogbG9zcyBvZiB1c2UsIGRhdGEgb3IgcHJvZml0cywgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSB1c2UsIG1vZGlmaWNhdGlvbiBvciBkaXN0cmlidXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbiBvciBpdHMgZGVyaXZhdGl2ZXMuXG5cbiAgIEUuIFRyYWRlbWFya3MgXHUwMDI2IExvZ29zLlxuXG4gICAgICAxLiBUaGUgVW5pY29kZSBXb3JkIE1hcmsgYW5kIHRoZSBVbmljb2RlIExvZ28gYXJlIHRyYWRlbWFya3Mgb2YgVW5pY29kZSwgSW5jLiBcIlRoZSBVbmljb2RlIENvbnNvcnRpdW1cIiBhbmQgXCJVbmljb2RlLCBJbmMuXCIgYXJlIHRyYWRlIG5hbWVzIG9mIFVuaWNvZGUsIEluYy4gVXNlIG9mIHRoZSBpbmZvcm1hdGlvbiBhbmQgbWF0ZXJpYWxzIGZvdW5kIG9uIHRoaXMgd2Vic2l0ZSBpbmRpY2F0ZXMgeW91ciBhY2tub3dsZWRnZW1lbnQgb2YgVW5pY29kZSwgSW5jLidzIGV4Y2x1c2l2ZSB3b3JsZHdpZGUgcmlnaHRzIGluIHRoZSBVbmljb2RlIFdvcmQgTWFyaywgdGhlIFVuaWNvZGUgTG9nbywgYW5kIHRoZSBVbmljb2RlIHRyYWRlIG5hbWVzLlxuXG4gICAgICAyLiBUaGUgVW5pY29kZSBDb25zb3J0aXVtIE5hbWUgYW5kIFRyYWRlbWFyayBVc2FnZSBQb2xpY3kgKFwiVHJhZGVtYXJrIFBvbGljeVwiKSBhcmUgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UgYW5kIHlvdSBhZ3JlZSB0byBhYmlkZSBieSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgVHJhZGVtYXJrIFBvbGljeSwgd2hpY2ggbWF5IGJlIGNoYW5nZWQgZnJvbSB0aW1lIHRvIHRpbWUgaW4gdGhlIHNvbGUgZGlzY3JldGlvbiBvZiBVbmljb2RlLCBJbmMuXG5cbiAgICAgIDMuIEFsbCB0aGlyZCBwYXJ0eSB0cmFkZW1hcmtzIHJlZmVyZW5jZWQgaGVyZWluIGFyZSB0aGUgcHJvcGVydHkgb2YgdGhlaXIgcmVzcGVjdGl2ZSBvd25lcnMuXG5cbiAgIEYuIE1pc2NlbGxhbmVvdXMuXG5cbiAgICAgIDEuIEp1cmlzZGljdGlvbiBhbmQgVmVudWUuIFRoaXMgc2VydmVyIGlzIG9wZXJhdGVkIGZyb20gYSBsb2NhdGlvbiBpbiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBVbmljb2RlIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9uIHRoYXQgdGhlIG1hdGVyaWFscyBhcmUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBvdGhlciBsb2NhdGlvbnMuIElmIHlvdSBhY2Nlc3MgdGhpcyBzZXJ2ZXIgZnJvbSBvdGhlciBsb2NhdGlvbnMsIHlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2Ugd2l0aCBsb2NhbCBsYXdzLiBUaGlzIEFncmVlbWVudCwgYWxsIHVzZSBvZiB0aGlzIHNpdGUgYW5kIGFueSBjbGFpbXMgYW5kIGRhbWFnZXMgcmVzdWx0aW5nIGZyb20gdXNlIG9mIHRoaXMgc2l0ZSBhcmUgZ292ZXJuZWQgc29sZWx5IGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhIHdpdGhvdXQgcmVnYXJkIHRvIGFueSBwcmluY2lwbGVzIHdoaWNoIHdvdWxkIGFwcGx5IHRoZSBsYXdzIG9mIGEgZGlmZmVyZW50IGp1cmlzZGljdGlvbi4gVGhlIHVzZXIgYWdyZWVzIHRoYXQgYW55IGRpc3B1dGVzIHJlZ2FyZGluZyB0aGlzIHNpdGUgc2hhbGwgYmUgcmVzb2x2ZWQgc29sZWx5IGluIHRoZSBjb3VydHMgbG9jYXRlZCBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEuIFRoZSB1c2VyIGFncmVlcyBzYWlkIGNvdXJ0cyBoYXZlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBhbmQgYWdyZWUgdG8gd2FpdmUgYW55IHJpZ2h0IHRvIHRyYW5zZmVyIHRoZSBkaXNwdXRlIHRvIGFueSBvdGhlciBmb3J1bS5cblxuICAgICAgMi4gTW9kaWZpY2F0aW9uIGJ5IFVuaWNvZGUgVW5pY29kZSBzaGFsbCBoYXZlIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQgYXQgYW55IHRpbWUgYnkgcG9zdGluZyBpdCB0byB0aGlzIHNpdGUuIFRoZSB1c2VyIG1heSBub3QgYXNzaWduIGFueSBwYXJ0IG9mIHRoaXMgQWdyZWVtZW50IHdpdGhvdXQgVW5pY29kZSdzIHByaW9yIHdyaXR0ZW4gY29uc2VudC5cblxuICAgICAgMy4gVGF4ZXMuIFRoZSB1c2VyIGFncmVlcyB0byBwYXkgYW55IHRheGVzIGFyaXNpbmcgZnJvbSBhY2Nlc3MgdG8gdGhpcyB3ZWJzaXRlIG9yIHVzZSBvZiB0aGUgaW5mb3JtYXRpb24gaGVyZWluLCBleGNlcHQgZm9yIHRob3NlIGJhc2VkIG9uIFVuaWNvZGUncyBuZXQgaW5jb21lLlxuXG4gICAgICA0LiBTZXZlcmFiaWxpdHkuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgZGVjbGFyZWQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlLCB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIGluIGVmZmVjdC5cblxuICAgICAgNS4gRW50aXJlIEFncmVlbWVudC4gVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcy4iXSwibGljZW5zZUlkcyI6WyJVbmljb2RlLVRPVSJdLCJrZXl3b3JkcyI6WyJ1bmljb2RlIHRlcm1zIG9mIiwiZm9yIHRoZSBnZW5lcmFsIiwidGhlIGdlbmVyYWwgcHJpdmFjeSIsImdlbmVyYWwgcHJpdmFjeSBwb2xpY3kiLCJwcml2YWN5IHBvbGljeSBnb3Zlcm5pbmciLCJwb2xpY3kgZ292ZXJuaW5nIGFjY2VzcyIsImdvdmVybmluZyBhY2Nlc3MgdG8iLCJ0aGlzIHNpdGUgc2VlIiwic2l0ZSBzZWUgdGhlIiwidGhlIHVuaWNvZGUgcHJpdmFjeSIsInVuaWNvZGUgcHJpdmFjeSBwb2xpY3kiLCJwcml2YWN5IHBvbGljeSBmb3IiLCJwb2xpY3kgZm9yIHRyYWRlbWFyayIsImZvciB0cmFkZW1hcmsgdXNhZ2UiLCJ0cmFkZW1hcmsgdXNhZ2Ugc2VlIiwidXNhZ2Ugc2VlIHRoZSIsInVzYWdlIHBvbGljeSBhIiwicG9saWN5IGEgdW5pY29kZSIsImEgdW5pY29kZSBjb3B5cmlnaHQiLCJ1bmljb2RlIGNvcHlyaWdodCAxIiwiY29weXJpZ2h0IDEgY29weXJpZ2h0IiwiMSBjb3B5cmlnaHQgMTk5MSIsImNvcHlyaWdodCAxOTkxIDIwMTQiLCIxOTkxIDIwMTQgdW5pY29kZSIsIjIwMTQgdW5pY29kZSBpbmMiLCJyZXNlcnZlZCAyIGNlcnRhaW4iLCIyIGNlcnRhaW4gZG9jdW1lbnRzIiwiY2VydGFpbiBkb2N1bWVudHMgYW5kIiwiYW5kIGZpbGVzIG9uIiwiZmlsZXMgb24gdGhpcyIsInRoaXMgd2Vic2l0ZSBjb250YWluIiwid2Vic2l0ZSBjb250YWluIGEiLCJjb250YWluIGEgbGVnZW5kIiwiYSBsZWdlbmQgaW5kaWNhdGluZyIsImxlZ2VuZCBpbmRpY2F0aW5nIHRoYXQiLCJpbmRpY2F0aW5nIHRoYXQgbW9kaWZpY2F0aW9uIiwidGhhdCBtb2RpZmljYXRpb24gaXMiLCJpcyBwZXJtaXR0ZWQgYW55IiwicGVybWl0dGVkIGFueSBwZXJzb24iLCJmZWUgdG8gbW9kaWZ5IiwidG8gbW9kaWZ5IHN1Y2giLCJtb2RpZnkgc3VjaCBkb2N1bWVudHMiLCJzdWNoIGRvY3VtZW50cyBhbmQiLCJhbmQgZmlsZXMgdG8iLCJmaWxlcyB0byBjcmVhdGUiLCJkZXJpdmF0aXZlIHdvcmtzIGNvbmZvcm1pbmciLCJ3b3JrcyBjb25mb3JtaW5nIHRvIiwiY29uZm9ybWluZyB0byB0aGUiLCJ0byB0aGUgdW5pY29kZSIsInN1YmplY3QgdG8gdGVybXMiLCJ0byB0ZXJtcyBhbmQiLCJjb25kaXRpb25zIGhlcmVpbiAzIiwiaGVyZWluIDMgYW55IiwiMyBhbnkgcGVyc29uIiwiZmVlIHRvIHZpZXciLCJ0byB2aWV3IHVzZSIsInZpZXcgdXNlIHJlcHJvZHVjZSIsImFuZCBkaXN0cmlidXRlIGFsbCIsImRpc3RyaWJ1dGUgYWxsIGRvY3VtZW50cyIsImFuZCBmaWxlcyBzb2xlbHkiLCJmaWxlcyBzb2xlbHkgZm9yIiwic29sZWx5IGZvciBpbmZvcm1hdGlvbmFsIiwiaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBpbiIsInB1cnBvc2VzIGluIHRoZSIsImNyZWF0aW9uIG9mIHByb2R1Y3RzIiwib2YgcHJvZHVjdHMgc3VwcG9ydGluZyIsInByb2R1Y3RzIHN1cHBvcnRpbmcgdGhlIiwic3VwcG9ydGluZyB0aGUgdW5pY29kZSIsImNvbmRpdGlvbnMgaGVyZWluIDQiLCJoZXJlaW4gNCBmdXJ0aGVyIiwiNCBmdXJ0aGVyIHNwZWNpZmljYXRpb25zIiwiYW5kIHJlc3RyaWN0aW9ucyBwZXJ0YWluaW5nIiwicmVzdHJpY3Rpb25zIHBlcnRhaW5pbmcgdG8iLCJ0aGUgcGFydGljdWxhciBzZXQiLCJwYXJ0aWN1bGFyIHNldCBvZiIsInNldCBvZiBkYXRhIiwib2YgZGF0YSBmaWxlcyIsImRhdGEgZmlsZXMga25vd24iLCJmaWxlcyBrbm93biBhcyIsImFzIHRoZSB1bmljb2RlIiwidGhlIHVuaWNvZGUgY2hhcmFjdGVyIiwidW5pY29kZSBjaGFyYWN0ZXIgZGF0YWJhc2UiLCJjaGFyYWN0ZXIgZGF0YWJhc2UgY2FuIiwiZGF0YWJhc2UgY2FuIGJlIiwiZm91bmQgaW4gZXhoaWJpdCIsImluIGV4aGliaXQgMSIsImV4aGliaXQgMSA1IiwiMSA1IGVhY2giLCI1IGVhY2ggdmVyc2lvbiIsInVuaWNvZGUgc3RhbmRhcmQgaGFzIiwic3RhbmRhcmQgaGFzIGZ1cnRoZXIiLCJoYXMgZnVydGhlciBzcGVjaWZpY2F0aW9ucyIsImFuZCByZXN0cmljdGlvbnMgb2YiLCJyZXN0cmljdGlvbnMgb2YgdXNlIiwiZm9yIHRoZSBib29rIiwidGhlIGJvb2sgZWRpdGlvbnMiLCJib29rIGVkaXRpb25zIHVuaWNvZGUiLCJlZGl0aW9ucyB1bmljb2RlIDUiLCJ1bmljb2RlIDUgMCIsIjUgMCBhbmQiLCIwIGFuZCBlYXJsaWVyIiwiYW5kIGVhcmxpZXIgdGhlc2UiLCJlYXJsaWVyIHRoZXNlIGFyZSIsInRoZXNlIGFyZSBmb3VuZCIsImFyZSBmb3VuZCBvbiIsInRoZSBiYWNrIG9mIiwiYmFjayBvZiB0aGUiLCJwYWdlIHRoZSBvbmxpbmUiLCJ0aGUgb25saW5lIGNvZGUiLCJjb2RlIGNoYXJ0cyBjYXJyeSIsImNoYXJ0cyBjYXJyeSBzcGVjaWZpYyIsImNhcnJ5IHNwZWNpZmljIHJlc3RyaWN0aW9ucyIsInNwZWNpZmljIHJlc3RyaWN0aW9ucyBhbGwiLCJyZXN0cmljdGlvbnMgYWxsIG90aGVyIiwiYWxsIG90aGVyIGZpbGVzIiwib3RoZXIgZmlsZXMgaW5jbHVkaW5nIiwiZmlsZXMgaW5jbHVkaW5nIG9ubGluZSIsImluY2x1ZGluZyBvbmxpbmUgZG9jdW1lbnRhdGlvbiIsIm9ubGluZSBkb2N1bWVudGF0aW9uIG9mIiwiZG9jdW1lbnRhdGlvbiBvZiB0aGUiLCJvZiB0aGUgY29yZSIsInRoZSBjb3JlIHNwZWNpZmljYXRpb24iLCJjb3JlIHNwZWNpZmljYXRpb24gZm9yIiwic3BlY2lmaWNhdGlvbiBmb3IgdW5pY29kZSIsImZvciB1bmljb2RlIDYiLCJ1bmljb2RlIDYgMCIsIjYgMCBhbmQiLCIwIGFuZCBsYXRlciIsImFuZCBsYXRlciBhcmUiLCJsYXRlciBhcmUgY292ZXJlZCIsImFyZSBjb3ZlcmVkIHVuZGVyIiwiY292ZXJlZCB1bmRlciB0aGVzZSIsInVuZGVyIHRoZXNlIGdlbmVyYWwiLCJ0aGVzZSBnZW5lcmFsIHRlcm1zIiwiZ2VuZXJhbCB0ZXJtcyBvZiIsIm9mIHVzZSA2IiwidXNlIDYgbm8iLCI2IG5vIGxpY2Vuc2UiLCJncmFudGVkIHRvIG1pcnJvciIsInRvIG1pcnJvciB0aGUiLCJtaXJyb3IgdGhlIHVuaWNvZGUiLCJ1bmljb2RlIHdlYnNpdGUgd2hlcmUiLCJ3ZWJzaXRlIHdoZXJlIGEiLCJ3aGVyZSBhIGZlZSIsImNoYXJnZWQgZm9yIGFjY2VzcyIsInRvIHRoZSBtaXJyb3IiLCJ0aGUgbWlycm9yIHNpdGUiLCJtaXJyb3Igc2l0ZSA3Iiwic2l0ZSA3IG1vZGlmaWNhdGlvbiIsIjcgbW9kaWZpY2F0aW9uIGlzIiwibm90IHBlcm1pdHRlZCB3aXRoIiwicGVybWl0dGVkIHdpdGggcmVzcGVjdCIsImRvY3VtZW50IGFsbCBjb3BpZXMiLCJ0aGlzIGRvY3VtZW50IG11c3QiLCJkb2N1bWVudCBtdXN0IGJlIiwibXVzdCBiZSB2ZXJiYXRpbSIsImJlIHZlcmJhdGltIGIiLCJ2ZXJiYXRpbSBiIHJlc3RyaWN0ZWQiLCJiIHJlc3RyaWN0ZWQgcmlnaHRzIiwicmVzdHJpY3RlZCByaWdodHMgbGVnZW5kIiwicmlnaHRzIGxlZ2VuZCBhbnkiLCJsZWdlbmQgYW55IHRlY2huaWNhbCIsIm9yIHNvZnR3YXJlIHdoaWNoIiwid2hpY2ggaXMgbGljZW5zZWQiLCJvZiBhbWVyaWNhIGl0cyIsImFtZXJpY2EgaXRzIGFnZW5jaWVzIiwiaXRzIGFnZW5jaWVzIGFuZCIsImFnZW5jaWVzIGFuZCBvciIsImFuZCBvciBpbnN0cnVtZW50YWxpdGllcyIsIm9yIGluc3RydW1lbnRhbGl0aWVzIHVuZGVyIiwiaW5zdHJ1bWVudGFsaXRpZXMgdW5kZXIgdGhpcyIsImFncmVlbWVudCBpcyBjb21tZXJjaWFsIiwiaXMgY29tbWVyY2lhbCB0ZWNobmljYWwiLCJjb21tZXJjaWFsIHRlY2huaWNhbCBkYXRhIiwiZGF0YSBvciBjb21tZXJjaWFsIiwib3IgY29tbWVyY2lhbCBjb21wdXRlciIsImNvbXB1dGVyIHNvZnR3YXJlIGRldmVsb3BlZCIsInNvZnR3YXJlIGRldmVsb3BlZCBleGNsdXNpdmVseSIsImRldmVsb3BlZCBleGNsdXNpdmVseSBhdCIsImV4Y2x1c2l2ZWx5IGF0IHByaXZhdGUiLCJhdCBwcml2YXRlIGV4cGVuc2UiLCJwcml2YXRlIGV4cGVuc2UgYXMiLCJleHBlbnNlIGFzIGRlZmluZWQiLCIyIDEwMSBvciIsIjEwMSBvciBkZmFycyIsIm9yIGRmYXJzIDI1MiIsIjIyNyA3MDE0IGp1bmUiLCI3MDE0IGp1bmUgMTk5NSIsImp1bmUgMTk5NSBhcyIsIjE5OTUgYXMgYXBwbGljYWJsZSIsImFzIGFwcGxpY2FibGUgZm9yIiwiYXBwbGljYWJsZSBmb3IgdGVjaG5pY2FsIiwiZm9yIHRlY2huaWNhbCBkYXRhIiwidGVjaG5pY2FsIGRhdGEgdXNlIiwiZGF0YSB1c2UgZHVwbGljYXRpb24iLCJmb3J0aCBpbiBkZmFycyIsImluIGRmYXJzIDIwMiIsImRmYXJzIDIwMiAyMjciLCIyMDIgMjI3IDcwMTUiLCJkYXRhIGNvbW1lcmNpYWwgYW5kIl19LHsibGljZW5zZVRleHRzIjpbIlRoaXMgaXMgZnJlZSBhbmQgdW5lbmN1bWJlcmVkIHNvZnR3YXJlIHJlbGVhc2VkIGludG8gdGhlIHB1YmxpYyBkb21haW4uXG5cbkFueW9uZSBpcyBmcmVlIHRvIGNvcHksIG1vZGlmeSwgcHVibGlzaCwgdXNlLCBjb21waWxlLCBzZWxsLCBvciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUsIGVpdGhlciBpbiBzb3VyY2UgY29kZSBmb3JtIG9yIGFzIGEgY29tcGlsZWQgYmluYXJ5LCBmb3IgYW55IHB1cnBvc2UsIGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwsIGFuZCBieSBhbnkgbWVhbnMuXG5cbkluIGp1cmlzZGljdGlvbnMgdGhhdCByZWNvZ25pemUgY29weXJpZ2h0IGxhd3MsIHRoZSBhdXRob3Igb3IgYXV0aG9ycyBvZiB0aGlzIHNvZnR3YXJlIGRlZGljYXRlIGFueSBhbmQgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgc29mdHdhcmUgdG8gdGhlIHB1YmxpYyBkb21haW4uIFdlIG1ha2UgdGhpcyBkZWRpY2F0aW9uIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgcHVibGljIGF0IGxhcmdlIGFuZCB0byB0aGUgZGV0cmltZW50IG9mIG91ciBoZWlycyBhbmQgc3VjY2Vzc29ycy4gV2UgaW50ZW5kIHRoaXMgZGVkaWNhdGlvbiB0byBiZSBhbiBvdmVydCBhY3Qgb2YgcmVsaW5xdWlzaG1lbnQgaW4gcGVycGV0dWl0eSBvZiBhbGwgcHJlc2VudCBhbmQgZnV0dXJlIHJpZ2h0cyB0byB0aGlzIHNvZnR3YXJlIHVuZGVyIGNvcHlyaWdodCBsYXcuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIFx1MDAzY2h0dHBzOi8vdW5saWNlbnNlLm9yZy9cdTAwM2UiXSwibGljZW5zZUlkcyI6WyJVbmxpY2Vuc2UiXSwia2V5d29yZHMiOlsiZnJlZSBhbmQgdW5lbmN1bWJlcmVkIiwiYW5kIHVuZW5jdW1iZXJlZCBzb2Z0d2FyZSIsInVuZW5jdW1iZXJlZCBzb2Z0d2FyZSByZWxlYXNlZCIsInNvZnR3YXJlIHJlbGVhc2VkIGludG8iLCJwdWJsaWMgZG9tYWluIGFueW9uZSIsImRvbWFpbiBhbnlvbmUgaXMiLCJhbnlvbmUgaXMgZnJlZSIsIm1vZGlmeSBwdWJsaXNoIHVzZSIsInB1Ymxpc2ggdXNlIGNvbXBpbGUiLCJ1c2UgY29tcGlsZSBzZWxsIiwiY29tcGlsZSBzZWxsIG9yIiwic2VsbCBvciBkaXN0cmlidXRlIiwidGhpcyBzb2Z0d2FyZSBlaXRoZXIiLCJzb2Z0d2FyZSBlaXRoZXIgaW4iLCJlaXRoZXIgaW4gc291cmNlIiwiYXMgYSBjb21waWxlZCIsImEgY29tcGlsZWQgYmluYXJ5IiwiY29tcGlsZWQgYmluYXJ5IGZvciIsImJpbmFyeSBmb3IgYW55IiwiY29tbWVyY2lhbCBhbmQgYnkiLCJhbnkgbWVhbnMgaW4iLCJtZWFucyBpbiBqdXJpc2RpY3Rpb25zIiwianVyaXNkaWN0aW9ucyB0aGF0IHJlY29nbml6ZSIsInRoYXQgcmVjb2duaXplIGNvcHlyaWdodCIsInJlY29nbml6ZSBjb3B5cmlnaHQgbGF3cyIsImNvcHlyaWdodCBsYXdzIHRoZSIsImxhd3MgdGhlIGF1dGhvciIsImF1dGhvciBvciBhdXRob3JzIiwidGhpcyBzb2Z0d2FyZSBkZWRpY2F0ZSIsInNvZnR3YXJlIGRlZGljYXRlIGFueSIsImRlZGljYXRlIGFueSBhbmQiLCJwdWJsaWMgZG9tYWluIHdlIiwiZG9tYWluIHdlIG1ha2UiLCJ3ZSBtYWtlIHRoaXMiLCJtYWtlIHRoaXMgZGVkaWNhdGlvbiIsImRldHJpbWVudCBvZiBvdXIiLCJvZiBvdXIgaGVpcnMiLCJvdXIgaGVpcnMgYW5kIiwiYW5kIHN1Y2Nlc3NvcnMgd2UiLCJzdWNjZXNzb3JzIHdlIGludGVuZCIsIndlIGludGVuZCB0aGlzIiwiaW50ZW5kIHRoaXMgZGVkaWNhdGlvbiIsImZ1dHVyZSByaWdodHMgdG8iLCJyaWdodHMgdG8gdGhpcyIsInNvZnR3YXJlIHVuZGVyIGNvcHlyaWdodCIsImxhdyB0aGUgc29mdHdhcmUiLCJzb2Z0d2FyZSBmb3IgbW9yZSIsIm1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIiwiaW5mb3JtYXRpb24gcGxlYXNlIHJlZmVyIiwicGxlYXNlIHJlZmVyIHRvIiwicmVmZXIgdG8gaHR0cHMiLCJ0byBodHRwcyB1bmxpY2Vuc2UiLCJodHRwcyB1bmxpY2Vuc2Ugb3JnIiwidGhpcyBpcyBmcmVlIGFuZCIsImlzIGZyZWUgYW5kIHVuZW5jdW1iZXJlZCIsImZyZWUgYW5kIHVuZW5jdW1iZXJlZCBzb2Z0d2FyZSIsImFuZCB1bmVuY3VtYmVyZWQgc29mdHdhcmUgcmVsZWFzZWQiLCJ1bmVuY3VtYmVyZWQgc29mdHdhcmUgcmVsZWFzZWQgaW50byIsInNvZnR3YXJlIHJlbGVhc2VkIGludG8gdGhlIiwidGhlIHB1YmxpYyBkb21haW4gYW55b25lIiwicHVibGljIGRvbWFpbiBhbnlvbmUgaXMiLCJkb21haW4gYW55b25lIGlzIGZyZWUiLCJhbnlvbmUgaXMgZnJlZSB0byIsImlzIGZyZWUgdG8gY29weSIsImNvcHkgbW9kaWZ5IHB1Ymxpc2ggdXNlIiwibW9kaWZ5IHB1Ymxpc2ggdXNlIGNvbXBpbGUiLCJwdWJsaXNoIHVzZSBjb21waWxlIHNlbGwiLCJ1c2UgY29tcGlsZSBzZWxsIG9yIiwiY29tcGlsZSBzZWxsIG9yIGRpc3RyaWJ1dGUiLCJzZWxsIG9yIGRpc3RyaWJ1dGUgdGhpcyIsImRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBlaXRoZXIiLCJ0aGlzIHNvZnR3YXJlIGVpdGhlciBpbiIsInNvZnR3YXJlIGVpdGhlciBpbiBzb3VyY2UiLCJlaXRoZXIgaW4gc291cmNlIGNvZGUiLCJmb3JtIG9yIGFzIGEiLCJvciBhcyBhIGNvbXBpbGVkIiwiYXMgYSBjb21waWxlZCBiaW5hcnkiLCJhIGNvbXBpbGVkIGJpbmFyeSBmb3IiLCJjb21waWxlZCBiaW5hcnkgZm9yIGFueSIsImJpbmFyeSBmb3IgYW55IHB1cnBvc2UiLCJub24gY29tbWVyY2lhbCBhbmQgYnkiLCJjb21tZXJjaWFsIGFuZCBieSBhbnkiLCJhbmQgYnkgYW55IG1lYW5zIiwiYnkgYW55IG1lYW5zIGluIiwiYW55IG1lYW5zIGluIGp1cmlzZGljdGlvbnMiLCJtZWFucyBpbiBqdXJpc2RpY3Rpb25zIHRoYXQiLCJpbiBqdXJpc2RpY3Rpb25zIHRoYXQgcmVjb2duaXplIiwianVyaXNkaWN0aW9ucyB0aGF0IHJlY29nbml6ZSBjb3B5cmlnaHQiLCJ0aGF0IHJlY29nbml6ZSBjb3B5cmlnaHQgbGF3cyIsInJlY29nbml6ZSBjb3B5cmlnaHQgbGF3cyB0aGUiLCJjb3B5cmlnaHQgbGF3cyB0aGUgYXV0aG9yIiwibGF3cyB0aGUgYXV0aG9yIG9yIiwidGhlIGF1dGhvciBvciBhdXRob3JzIiwiYXV0aG9yIG9yIGF1dGhvcnMgb2YiLCJvciBhdXRob3JzIG9mIHRoaXMiLCJhdXRob3JzIG9mIHRoaXMgc29mdHdhcmUiLCJvZiB0aGlzIHNvZnR3YXJlIGRlZGljYXRlIiwidGhpcyBzb2Z0d2FyZSBkZWRpY2F0ZSBhbnkiLCJzb2Z0d2FyZSBkZWRpY2F0ZSBhbnkgYW5kIiwiZGVkaWNhdGUgYW55IGFuZCBhbGwiLCJhbmQgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCIsImludGVyZXN0IGluIHRoZSBzb2Z0d2FyZSIsImluIHRoZSBzb2Z0d2FyZSB0byIsInNvZnR3YXJlIHRvIHRoZSBwdWJsaWMiLCJ0aGUgcHVibGljIGRvbWFpbiB3ZSIsInB1YmxpYyBkb21haW4gd2UgbWFrZSIsImRvbWFpbiB3ZSBtYWtlIHRoaXMiLCJ3ZSBtYWtlIHRoaXMgZGVkaWNhdGlvbiIsIm1ha2UgdGhpcyBkZWRpY2F0aW9uIGZvciIsInRoZSBkZXRyaW1lbnQgb2Ygb3VyIiwiZGV0cmltZW50IG9mIG91ciBoZWlycyIsIm9mIG91ciBoZWlycyBhbmQiLCJvdXIgaGVpcnMgYW5kIHN1Y2Nlc3NvcnMiLCJoZWlycyBhbmQgc3VjY2Vzc29ycyB3ZSIsImFuZCBzdWNjZXNzb3JzIHdlIGludGVuZCIsInN1Y2Nlc3NvcnMgd2UgaW50ZW5kIHRoaXMiLCJ3ZSBpbnRlbmQgdGhpcyBkZWRpY2F0aW9uIiwiaW50ZW5kIHRoaXMgZGVkaWNhdGlvbiB0byIsImFuZCBmdXR1cmUgcmlnaHRzIHRvIiwiZnV0dXJlIHJpZ2h0cyB0byB0aGlzIiwicmlnaHRzIHRvIHRoaXMgc29mdHdhcmUiLCJ0byB0aGlzIHNvZnR3YXJlIHVuZGVyIiwidGhpcyBzb2Z0d2FyZSB1bmRlciBjb3B5cmlnaHQiLCJzb2Z0d2FyZSB1bmRlciBjb3B5cmlnaHQgbGF3IiwidW5kZXIgY29weXJpZ2h0IGxhdyB0aGUiLCJjb3B5cmlnaHQgbGF3IHRoZSBzb2Z0d2FyZSIsImxhdyB0aGUgc29mdHdhcmUgaXMiLCJpbiB0aGUgc29mdHdhcmUgZm9yIiwidGhlIHNvZnR3YXJlIGZvciBtb3JlIiwic29mdHdhcmUgZm9yIG1vcmUgaW5mb3JtYXRpb24iLCJmb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2UiLCJtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSByZWZlciIsImluZm9ybWF0aW9uIHBsZWFzZSByZWZlciB0byIsInBsZWFzZSByZWZlciB0byBodHRwcyIsInJlZmVyIHRvIGh0dHBzIHVubGljZW5zZSIsInRvIGh0dHBzIHVubGljZW5zZSBvcmciLCJ0aGlzIGlzIGZyZWUgYW5kIHVuZW5jdW1iZXJlZCIsImlzIGZyZWUgYW5kIHVuZW5jdW1iZXJlZCBzb2Z0d2FyZSIsImZyZWUgYW5kIHVuZW5jdW1iZXJlZCBzb2Z0d2FyZSByZWxlYXNlZCIsImFuZCB1bmVuY3VtYmVyZWQgc29mdHdhcmUgcmVsZWFzZWQgaW50byIsInVuZW5jdW1iZXJlZCBzb2Z0d2FyZSByZWxlYXNlZCBpbnRvIHRoZSIsInNvZnR3YXJlIHJlbGVhc2VkIGludG8gdGhlIHB1YmxpYyIsImludG8gdGhlIHB1YmxpYyBkb21haW4gYW55b25lIiwidGhlIHB1YmxpYyBkb21haW4gYW55b25lIGlzIiwicHVibGljIGRvbWFpbiBhbnlvbmUgaXMgZnJlZSIsImRvbWFpbiBhbnlvbmUgaXMgZnJlZSB0byIsImFueW9uZSBpcyBmcmVlIHRvIGNvcHkiLCJpcyBmcmVlIHRvIGNvcHkgbW9kaWZ5IiwidG8gY29weSBtb2RpZnkgcHVibGlzaCB1c2UiLCJjb3B5IG1vZGlmeSBwdWJsaXNoIHVzZSBjb21waWxlIiwibW9kaWZ5IHB1Ymxpc2ggdXNlIGNvbXBpbGUgc2VsbCIsInB1Ymxpc2ggdXNlIGNvbXBpbGUgc2VsbCBvciIsInVzZSBjb21waWxlIHNlbGwgb3IgZGlzdHJpYnV0ZSIsImNvbXBpbGUgc2VsbCBvciBkaXN0cmlidXRlIHRoaXMiLCJzZWxsIG9yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSIsIm9yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBlaXRoZXIiLCJkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZWl0aGVyIGluIiwidGhpcyBzb2Z0d2FyZSBlaXRoZXIgaW4gc291cmNlIiwic29mdHdhcmUgZWl0aGVyIGluIHNvdXJjZSBjb2RlIiwiZWl0aGVyIGluIHNvdXJjZSBjb2RlIGZvcm0iLCJpbiBzb3VyY2UgY29kZSBmb3JtIG9yIiwiY29kZSBmb3JtIG9yIGFzIGEiLCJmb3JtIG9yIGFzIGEgY29tcGlsZWQiLCJvciBhcyBhIGNvbXBpbGVkIGJpbmFyeSIsImFzIGEgY29tcGlsZWQgYmluYXJ5IGZvciIsImEgY29tcGlsZWQgYmluYXJ5IGZvciBhbnkiLCJjb21waWxlZCBiaW5hcnkgZm9yIGFueSBwdXJwb3NlIiwiYmluYXJ5IGZvciBhbnkgcHVycG9zZSBjb21tZXJjaWFsIiwib3Igbm9uIGNvbW1lcmNpYWwgYW5kIGJ5Iiwibm9uIGNvbW1lcmNpYWwgYW5kIGJ5IGFueSIsImNvbW1lcmNpYWwgYW5kIGJ5IGFueSBtZWFucyIsImFuZCBieSBhbnkgbWVhbnMgaW4iLCJieSBhbnkgbWVhbnMgaW4ganVyaXNkaWN0aW9ucyIsImFueSBtZWFucyBpbiBqdXJpc2RpY3Rpb25zIHRoYXQiLCJtZWFucyBpbiBqdXJpc2RpY3Rpb25zIHRoYXQgcmVjb2duaXplIiwiaW4ganVyaXNkaWN0aW9ucyB0aGF0IHJlY29nbml6ZSBjb3B5cmlnaHQiLCJqdXJpc2RpY3Rpb25zIHRoYXQgcmVjb2duaXplIGNvcHlyaWdodCBsYXdzIiwidGhhdCByZWNvZ25pemUgY29weXJpZ2h0IGxhd3MgdGhlIiwicmVjb2duaXplIGNvcHlyaWdodCBsYXdzIHRoZSBhdXRob3IiLCJjb3B5cmlnaHQgbGF3cyB0aGUgYXV0aG9yIG9yIiwibGF3cyB0aGUgYXV0aG9yIG9yIGF1dGhvcnMiLCJ0aGUgYXV0aG9yIG9yIGF1dGhvcnMgb2YiLCJhdXRob3Igb3IgYXV0aG9ycyBvZiB0aGlzIiwib3IgYXV0aG9ycyBvZiB0aGlzIHNvZnR3YXJlIiwiYXV0aG9ycyBvZiB0aGlzIHNvZnR3YXJlIGRlZGljYXRlIiwib2YgdGhpcyBzb2Z0d2FyZSBkZWRpY2F0ZSBhbnkiLCJ0aGlzIHNvZnR3YXJlIGRlZGljYXRlIGFueSBhbmQiLCJzb2Z0d2FyZSBkZWRpY2F0ZSBhbnkgYW5kIGFsbCIsImRlZGljYXRlIGFueSBhbmQgYWxsIGNvcHlyaWdodCIsImFueSBhbmQgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCIsImFuZCBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIiwiY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBzb2Z0d2FyZSIsImludGVyZXN0IGluIHRoZSBzb2Z0d2FyZSB0byIsImluIHRoZSBzb2Z0d2FyZSB0byB0aGUiLCJ0aGUgc29mdHdhcmUgdG8gdGhlIHB1YmxpYyIsInNvZnR3YXJlIHRvIHRoZSBwdWJsaWMgZG9tYWluIiwidG8gdGhlIHB1YmxpYyBkb21haW4gd2UiLCJ0aGUgcHVibGljIGRvbWFpbiB3ZSBtYWtlIiwicHVibGljIGRvbWFpbiB3ZSBtYWtlIHRoaXMiLCJkb21haW4gd2UgbWFrZSB0aGlzIGRlZGljYXRpb24iXX0seyJsaWNlbnNlVGV4dHMiOlsiVk9TVFJPTSBQdWJsaWMgTGljZW5zZSBmb3IgT3BlbiBTb3VyY2UgQ29weXJpZ2h0IChjKSAyMDA3IFZPU1RST00gSG9sZGluZ3MsIEluYy5cblxuVGhpcyBWT1NUUk9NIEhvbGRpbmdzLCBJbmMuIChWT1NUUk9NKSBEaXN0cmlidXRpb24gKGNvZGUgYW5kIGRvY3VtZW50YXRpb24pIGlzIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYXMgYSBwdWJsaWMgc2VydmljZSBieSBWT1NUUk9NLiBDb250YWN0IFZPU1RST00gYXQgbGljZW5zZUB2b3N0cm9tLmNvbSBmb3IgaW5mb3JtYXRpb24gb24gb3RoZXIgbGljZW5zaW5nIGFycmFuZ2VtZW50cyAoZS5nLiBmb3IgdXNlIGluIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucykuXG5cblVuZGVyIHRoaXMgbGljZW5zZSwgdGhpcyBEaXN0cmlidXRpb24gbWF5IGJlIG1vZGlmaWVkIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBhbmQgbW9kaWZpZWQgdmVyc2lvbnMgbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIHB1YmxpY2x5IGRpc3BsYXllZCBhbmQgcGVyZm9ybWVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIE1vZGlmaWVkIHZlcnNpb25zIGFyZSBkaXN0cmlidXRlZCB3aXRoIHNvdXJjZSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGFuZCB3aXRoIHBlcm1pc3Npb24gZm9yIG90aGVycyB0byB1c2UgYW55IGNvZGUgYW5kIGRvY3VtZW50YXRpb24gKHdoZXRoZXIgaW4gb3JpZ2luYWwgb3IgbW9kaWZpZWQgdmVyc2lvbnMpIGFzIGdyYW50ZWQgdW5kZXIgdGhpcyBsaWNlbnNlO1xuXG4gICAyLiBpZiBtb2RpZmllZCwgdGhlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uLCBhbmQgdXNlciBydW4tdGltZSBlbGVtZW50cyBzaG91bGQgYmUgY2xlYXJseSBsYWJlbGVkIGJ5IHBsYWNpbmcgYW4gaWRlbnRpZmllciBvZiBvcmlnaW4gKHN1Y2ggYXMgYSBuYW1lLCBpbml0aWFsLCBvciBvdGhlciB0YWcpIGFmdGVyIHRoZSB2ZXJzaW9uIG51bWJlcjtcblxuICAgMy4gdXNlcnMsIG1vZGlmaWVycywgZGlzdHJpYnV0b3JzLCBhbmQgb3RoZXJzIGNvbWluZyBpbnRvIHBvc3Nlc3Npb24gb3IgdXNpbmcgdGhlIERpc3RyaWJ1dGlvbiBpbiBvcmlnaW5hbCBvciBtb2RpZmllZCBmb3JtIGFjY2VwdCB0aGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHBvc3Nlc3Npb24sIHVzZSwgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBEaXN0cmlidXRpb247XG5cbiAgIDQuIHRoaXMgY29weXJpZ2h0IG1hbmFnZW1lbnQgaW5mb3JtYXRpb24gKHNvZnR3YXJlIGlkZW50aWZpZXIgYW5kIHZlcnNpb24gbnVtYmVyLCBjb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlKSBzaGFsbCBiZSByZXRhaW5lZCBpbiBhbGwgdmVyc2lvbnMgb2YgdGhlIERpc3RyaWJ1dGlvbjtcblxuICAgNS4gVk9TVFJPTSBtYXkgbWFrZSBtb2RpZmljYXRpb25zIHRvIHRoZSBEaXN0cmlidXRpb24gdGhhdCBhcmUgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBEaXN0cmlidXRpb24sIGFuZCBtYXkgbWFrZSwgdXNlLCBzZWxsLCBjb3B5LCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBhbmQgcGVyZm9ybSBzdWNoIG1vZGlmaWNhdGlvbnMsIGluY2x1ZGluZyBtYWtpbmcgc3VjaCBtb2RpZmljYXRpb25zIGF2YWlsYWJsZSB1bmRlciB0aGlzIG9yIG90aGVyIGxpY2Vuc2VzLCB3aXRob3V0IG9ibGlnYXRpb24gb3IgcmVzdHJpY3Rpb247XG5cbiAgIDYuIG1vZGlmaWNhdGlvbnMgaW5jb3Jwb3JhdGluZyBjb2RlLCBsaWJyYXJpZXMsIGFuZC9vciBkb2N1bWVudGF0aW9uIHN1YmplY3QgdG8gYW55IG90aGVyIG9wZW4gc291cmNlIGxpY2Vuc2UgbWF5IGJlIG1hZGUsIGFuZCB0aGUgcmVzdWx0aW5nIHdvcmsgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBzdWNoIG9wZW4gc291cmNlIGxpY2Vuc2UgaWYgcmVxdWlyZWQgYnkgdGhhdCBvcGVuIHNvdXJjZSBsaWNlbnNlLCBidXQgZG9pbmcgc28gd2lsbCBub3QgYWZmZWN0IHRoaXMgRGlzdHJpYnV0aW9uLCBvdGhlciBtb2RpZmljYXRpb25zIG1hZGUgdW5kZXIgdGhpcyBsaWNlbnNlIG9yIG1vZGlmaWNhdGlvbnMgbWFkZSB1bmRlciBvdGhlciBWT1NUUk9NIGxpY2Vuc2luZyBhcnJhbmdlbWVudHM7XG5cbiAgIDcuIG5vIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBvciBwdWJsaWNseSBwZXJmb3JtIG1vZGlmaWNhdGlvbnMgdG8gdGhlIERpc3RyaWJ1dGlvbiBtYWRlIHVzaW5nIHByb3ByaWV0YXJ5IG1hdGVyaWFscyB0aGF0IGNhbm5vdCBiZSByZWxlYXNlZCBpbiBzb3VyY2UgZm9ybWF0IHVuZGVyIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlO1xuXG4gICA4LiB0aGUgbmFtZSBvZiBWT1NUUk9NIG1heSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBEaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVGhpcyBzb2Z0d2FyZSBpcyBtYWRlIGF2YWlsYWJsZSBcImFzIGlzXCIsIGFuZFxuXG5WT1NUUk9NIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIElOIE5PIEVWRU5UIFNIQUxMIFZPU1RST00gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSBPUiBTVFJJQ1QgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLiJdLCJsaWNlbnNlSWRzIjpbIlZPU1RST00iXSwia2V5d29yZHMiOlsidm9zdHJvbSBwdWJsaWMgbGljZW5zZSIsImxpY2Vuc2UgZm9yIG9wZW4iLCJmb3Igb3BlbiBzb3VyY2UiLCJvcGVuIHNvdXJjZSBjb3B5cmlnaHQiLCJzb3VyY2UgY29weXJpZ2h0IGMiLCJjIDIwMDcgdm9zdHJvbSIsIjIwMDcgdm9zdHJvbSBob2xkaW5ncyIsImhvbGRpbmdzIGluYyB0aGlzIiwiaW5jIHRoaXMgdm9zdHJvbSIsInRoaXMgdm9zdHJvbSBob2xkaW5ncyIsImhvbGRpbmdzIGluYyB2b3N0cm9tIiwiaW5jIHZvc3Ryb20gZGlzdHJpYnV0aW9uIiwidm9zdHJvbSBkaXN0cmlidXRpb24gY29kZSIsImRpc3RyaWJ1dGlvbiBjb2RlIGFuZCIsImRvY3VtZW50YXRpb24gaXMgbWFkZSIsInNvdXJjZSBjb21tdW5pdHkgYXMiLCJjb21tdW5pdHkgYXMgYSIsImEgcHVibGljIHNlcnZpY2UiLCJwdWJsaWMgc2VydmljZSBieSIsInNlcnZpY2UgYnkgdm9zdHJvbSIsImJ5IHZvc3Ryb20gY29udGFjdCIsInZvc3Ryb20gY29udGFjdCB2b3N0cm9tIiwiY29udGFjdCB2b3N0cm9tIGF0Iiwidm9zdHJvbSBhdCBsaWNlbnNlIiwiYXQgbGljZW5zZSB2b3N0cm9tIiwibGljZW5zZSB2b3N0cm9tIGNvbSIsInZvc3Ryb20gY29tIGZvciIsImNvbSBmb3IgaW5mb3JtYXRpb24iLCJmb3IgaW5mb3JtYXRpb24gb24iLCJpbmZvcm1hdGlvbiBvbiBvdGhlciIsIm9uIG90aGVyIGxpY2Vuc2luZyIsIm90aGVyIGxpY2Vuc2luZyBhcnJhbmdlbWVudHMiLCJsaWNlbnNpbmcgYXJyYW5nZW1lbnRzIGUiLCJhcnJhbmdlbWVudHMgZSBnIiwiZSBnIGZvciIsImcgZm9yIHVzZSIsInVzZSBpbiBwcm9wcmlldGFyeSIsImluIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyIsInByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB1bmRlciIsImFwcGxpY2F0aW9ucyB1bmRlciB0aGlzIiwibGljZW5zZSB0aGlzIGRpc3RyaWJ1dGlvbiIsImJlIG1vZGlmaWVkIGFuZCIsIm9yaWdpbmFsIHZlcnNpb24gYW5kIiwidmVyc2lvbiBhbmQgbW9kaWZpZWQiLCJiZSBjb3BpZWQgZGlzdHJpYnV0ZWQiLCJjb3BpZWQgZGlzdHJpYnV0ZWQgcHVibGljbHkiLCJkaXN0cmlidXRlZCBwdWJsaWNseSBkaXNwbGF5ZWQiLCJwdWJsaWNseSBkaXNwbGF5ZWQgYW5kIiwiZGlzcGxheWVkIGFuZCBwZXJmb3JtZWQiLCJhbmQgcGVyZm9ybWVkIHByb3ZpZGVkIiwicGVyZm9ybWVkIHByb3ZpZGVkIHRoYXQiLCJtZXQgMSBtb2RpZmllZCIsIjEgbW9kaWZpZWQgdmVyc2lvbnMiLCJ2ZXJzaW9ucyBhcmUgZGlzdHJpYnV0ZWQiLCJhcmUgZGlzdHJpYnV0ZWQgd2l0aCIsImRpc3RyaWJ1dGVkIHdpdGggc291cmNlIiwiYW5kIGRvY3VtZW50YXRpb24gYW5kIiwiZG9jdW1lbnRhdGlvbiBhbmQgd2l0aCIsImFuZCB3aXRoIHBlcm1pc3Npb24iLCJ3aXRoIHBlcm1pc3Npb24gZm9yIiwicGVybWlzc2lvbiBmb3Igb3RoZXJzIiwidXNlIGFueSBjb2RlIiwiYW55IGNvZGUgYW5kIiwiYW5kIGRvY3VtZW50YXRpb24gd2hldGhlciIsIndoZXRoZXIgaW4gb3JpZ2luYWwiLCJ2ZXJzaW9ucyBhcyBncmFudGVkIiwiYXMgZ3JhbnRlZCB1bmRlciIsImxpY2Vuc2UgMiBpZiIsIjIgaWYgbW9kaWZpZWQiLCJpZiBtb2RpZmllZCB0aGUiLCJtb2RpZmllZCB0aGUgc291cmNlIiwiZG9jdW1lbnRhdGlvbiBhbmQgdXNlciIsImFuZCB1c2VyIHJ1biIsInVzZXIgcnVuIHRpbWUiLCJydW4gdGltZSBlbGVtZW50cyIsInRpbWUgZWxlbWVudHMgc2hvdWxkIiwiZWxlbWVudHMgc2hvdWxkIGJlIiwic2hvdWxkIGJlIGNsZWFybHkiLCJjbGVhcmx5IGxhYmVsZWQgYnkiLCJsYWJlbGVkIGJ5IHBsYWNpbmciLCJieSBwbGFjaW5nIGFuIiwicGxhY2luZyBhbiBpZGVudGlmaWVyIiwiYW4gaWRlbnRpZmllciBvZiIsImlkZW50aWZpZXIgb2Ygb3JpZ2luIiwib2Ygb3JpZ2luIHN1Y2giLCJvcmlnaW4gc3VjaCBhcyIsImFzIGEgbmFtZSIsImEgbmFtZSBpbml0aWFsIiwibmFtZSBpbml0aWFsIG9yIiwiaW5pdGlhbCBvciBvdGhlciIsIm9yIG90aGVyIHRhZyIsIm90aGVyIHRhZyBhZnRlciIsInRhZyBhZnRlciB0aGUiLCJhZnRlciB0aGUgdmVyc2lvbiIsIm51bWJlciAzIHVzZXJzIiwiMyB1c2VycyBtb2RpZmllcnMiLCJ1c2VycyBtb2RpZmllcnMgZGlzdHJpYnV0b3JzIiwibW9kaWZpZXJzIGRpc3RyaWJ1dG9ycyBhbmQiLCJkaXN0cmlidXRvcnMgYW5kIG90aGVycyIsImFuZCBvdGhlcnMgY29taW5nIiwib3RoZXJzIGNvbWluZyBpbnRvIiwiY29taW5nIGludG8gcG9zc2Vzc2lvbiIsImludG8gcG9zc2Vzc2lvbiBvciIsInBvc3Nlc3Npb24gb3IgdXNpbmciLCJ1c2luZyB0aGUgZGlzdHJpYnV0aW9uIiwidGhlIGRpc3RyaWJ1dGlvbiBpbiIsImRpc3RyaWJ1dGlvbiBpbiBvcmlnaW5hbCIsIm9yIG1vZGlmaWVkIGZvcm0iLCJtb2RpZmllZCBmb3JtIGFjY2VwdCIsImZvcm0gYWNjZXB0IHRoZSIsImFjY2VwdCB0aGUgZW50aXJlIiwidG8gdGhlIHBvc3Nlc3Npb24iLCJ0aGUgcG9zc2Vzc2lvbiB1c2UiLCJwb3NzZXNzaW9uIHVzZSBhbmQiLCJ1c2UgYW5kIHBlcmZvcm1hbmNlIiwiZGlzdHJpYnV0aW9uIDQgdGhpcyIsIjQgdGhpcyBjb3B5cmlnaHQiLCJ0aGlzIGNvcHlyaWdodCBtYW5hZ2VtZW50IiwiY29weXJpZ2h0IG1hbmFnZW1lbnQgaW5mb3JtYXRpb24iLCJtYW5hZ2VtZW50IGluZm9ybWF0aW9uIHNvZnR3YXJlIiwiaW5mb3JtYXRpb24gc29mdHdhcmUgaWRlbnRpZmllciIsInNvZnR3YXJlIGlkZW50aWZpZXIgYW5kIiwiaWRlbnRpZmllciBhbmQgdmVyc2lvbiIsImFuZCB2ZXJzaW9uIG51bWJlciIsInZlcnNpb24gbnVtYmVyIGNvcHlyaWdodCIsIm51bWJlciBjb3B5cmlnaHQgbm90aWNlIiwiYW5kIGxpY2Vuc2Ugc2hhbGwiLCJzaGFsbCBiZSByZXRhaW5lZCIsImluIGFsbCB2ZXJzaW9ucyIsInRoZSBkaXN0cmlidXRpb24gNSIsImRpc3RyaWJ1dGlvbiA1IHZvc3Ryb20iLCI1IHZvc3Ryb20gbWF5Iiwidm9zdHJvbSBtYXkgbWFrZSIsInRoZSBkaXN0cmlidXRpb24gdGhhdCIsImRpc3RyaWJ1dGlvbiB0aGF0IGFyZSIsInRoYXQgYXJlIHN1YnN0YW50aWFsbHkiLCJhcmUgc3Vic3RhbnRpYWxseSBzaW1pbGFyIiwic3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIiwic2ltaWxhciB0byBtb2RpZmllZCIsInRvIG1vZGlmaWVkIHZlcnNpb25zIiwiZGlzdHJpYnV0aW9uIGFuZCBtYXkiLCJhbmQgbWF5IG1ha2UiLCJtYXkgbWFrZSB1c2UiLCJ1c2Ugc2VsbCBjb3B5Iiwic2VsbCBjb3B5IGRpc3RyaWJ1dGUiLCJjb3B5IGRpc3RyaWJ1dGUgcHVibGljbHkiLCJwdWJsaWNseSBkaXNwbGF5IGFuZCIsImFuZCBwZXJmb3JtIHN1Y2giLCJwZXJmb3JtIHN1Y2ggbW9kaWZpY2F0aW9ucyIsInN1Y2ggbW9kaWZpY2F0aW9ucyBpbmNsdWRpbmciLCJtb2RpZmljYXRpb25zIGluY2x1ZGluZyBtYWtpbmciLCJpbmNsdWRpbmcgbWFraW5nIHN1Y2giLCJtYWtpbmcgc3VjaCBtb2RpZmljYXRpb25zIiwic3VjaCBtb2RpZmljYXRpb25zIGF2YWlsYWJsZSIsIm1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIHVuZGVyIiwidW5kZXIgdGhpcyBvciIsInRoaXMgb3Igb3RoZXIiLCJvdGhlciBsaWNlbnNlcyB3aXRob3V0IiwibGljZW5zZXMgd2l0aG91dCBvYmxpZ2F0aW9uIiwid2l0aG91dCBvYmxpZ2F0aW9uIG9yIiwib2JsaWdhdGlvbiBvciByZXN0cmljdGlvbiIsIm9yIHJlc3RyaWN0aW9uIDYiLCJyZXN0cmljdGlvbiA2IG1vZGlmaWNhdGlvbnMiLCI2IG1vZGlmaWNhdGlvbnMgaW5jb3Jwb3JhdGluZyIsIm1vZGlmaWNhdGlvbnMgaW5jb3Jwb3JhdGluZyBjb2RlIiwiaW5jb3Jwb3JhdGluZyBjb2RlIGxpYnJhcmllcyIsImNvZGUgbGlicmFyaWVzIGFuZCIsImxpYnJhcmllcyBhbmQgb3IiLCJvciBkb2N1bWVudGF0aW9uIHN1YmplY3QiLCJkb2N1bWVudGF0aW9uIHN1YmplY3QgdG8iLCJhbnkgb3RoZXIgb3BlbiIsInNvdXJjZSBsaWNlbnNlIG1heSIsImJlIG1hZGUgYW5kIiwicmVzdWx0aW5nIHdvcmsgbWF5Iiwic3VjaCBvcGVuIHNvdXJjZSIsInNvdXJjZSBsaWNlbnNlIGlmIiwibGljZW5zZSBpZiByZXF1aXJlZCIsImlmIHJlcXVpcmVkIGJ5IiwicmVxdWlyZWQgYnkgdGhhdCIsImJ5IHRoYXQgb3BlbiIsInNvdXJjZSBsaWNlbnNlIGJ1dCIsImxpY2Vuc2UgYnV0IGRvaW5nIiwiYnV0IGRvaW5nIHNvIiwibm90IGFmZmVjdCB0aGlzIiwiYWZmZWN0IHRoaXMgZGlzdHJpYnV0aW9uIiwidGhpcyBkaXN0cmlidXRpb24gb3RoZXIiLCJkaXN0cmlidXRpb24gb3RoZXIgbW9kaWZpY2F0aW9ucyIsImxpY2Vuc2Ugb3IgbW9kaWZpY2F0aW9ucyIsIm9yIG1vZGlmaWNhdGlvbnMgbWFkZSIsIm1hZGUgdW5kZXIgb3RoZXIiLCJ1bmRlciBvdGhlciB2b3N0cm9tIiwib3RoZXIgdm9zdHJvbSBsaWNlbnNpbmciLCJ2b3N0cm9tIGxpY2Vuc2luZyBhcnJhbmdlbWVudHMiLCJsaWNlbnNpbmcgYXJyYW5nZW1lbnRzIDciLCJhcnJhbmdlbWVudHMgNyBubyIsIjcgbm8gcGVybWlzc2lvbiIsIm5vIHBlcm1pc3Npb24gaXMiLCJ0byBkaXN0cmlidXRlIHB1YmxpY2x5IiwicHVibGljbHkgZGlzcGxheSBvciIsImRpc3BsYXkgb3IgcHVibGljbHkiXX0seyJsaWNlbnNlVGV4dHMiOlsiVm92aWRhIFNvZnR3YXJlIExpY2Vuc2Ugdi4gMS4wIFRoaXMgbGljZW5zZSBhcHBsaWVzIHRvIGFsbCBzb2Z0d2FyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIFwiVm92aWRhIE9wZW4gQ29tbXVuaWNhdGlvbiBBcHBsaWNhdGlvbiBMaWJyYXJ5XCIgZXhjZXB0IGZvciB0aG9zZSBwb3J0aW9ucyBpbmNvcnBvcmF0aW5nIHRoaXJkIHBhcnR5IHNvZnR3YXJlIHNwZWNpZmljYWxseSBpZGVudGlmaWVkIGFzIGJlaW5nIGxpY2Vuc2VkIHVuZGVyIHNlcGFyYXRlIGxpY2Vuc2UuIFRoZSBWb3ZpZGEgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAgQ29weXJpZ2h0IChjKSAyMDAwIFZvdmlkYSBOZXR3b3JrcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBUaGUgbmFtZXMgXCJWT0NBTFwiLCBcIlZvdmlkYSBPcGVuIENvbW11bmljYXRpb24gQXBwbGljYXRpb24gTGlicmFyeVwiLCBhbmQgXCJWb3ZpZGEgT3BlbiBDb21tdW5pY2F0aW9uIEFwcGxpY2F0aW9uIExpYnJhcnkgKFZPQ0FMKVwiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCB2b2NhbEB2b3ZpZGEub3JnLlxuXG4gICA0LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCBcIlZPQ0FMXCIsIG5vciBtYXkgXCJWT0NBTFwiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVk9WSURBIE5FVFdPUktTLCBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBJTiBFWENFU1MgT0YgJDEsMDAwLCBOT1IgRk9SIEFOWSBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIl0sImxpY2Vuc2VJZHMiOlsiVlNMLTEuMCJdLCJrZXl3b3JkcyI6WyJ0byBhbGwgc29mdHdhcmUiLCJhbGwgc29mdHdhcmUgaW5jb3Jwb3JhdGVkIiwic29mdHdhcmUgaW5jb3Jwb3JhdGVkIGluIiwiaW4gdGhlIHZvdmlkYSIsInRoZSB2b3ZpZGEgb3BlbiIsImFwcGxpY2F0aW9uIGxpYnJhcnkgZXhjZXB0IiwibGlicmFyeSBleGNlcHQgZm9yIiwidGhvc2UgcG9ydGlvbnMgaW5jb3Jwb3JhdGluZyIsInBvcnRpb25zIGluY29ycG9yYXRpbmcgdGhpcmQiLCJpbmNvcnBvcmF0aW5nIHRoaXJkIHBhcnR5IiwicGFydHkgc29mdHdhcmUgc3BlY2lmaWNhbGx5Iiwic29mdHdhcmUgc3BlY2lmaWNhbGx5IGlkZW50aWZpZWQiLCJzcGVjaWZpY2FsbHkgaWRlbnRpZmllZCBhcyIsImlkZW50aWZpZWQgYXMgYmVpbmciLCJsaWNlbnNlZCB1bmRlciBzZXBhcmF0ZSIsInVuZGVyIHNlcGFyYXRlIGxpY2Vuc2UiLCJzZXBhcmF0ZSBsaWNlbnNlIHRoZSIsImxpY2Vuc2UgdGhlIHZvdmlkYSIsInRoZSB2b3ZpZGEgc29mdHdhcmUiLCJjIDIwMDAgdm92aWRhIiwiMjAwMCB2b3ZpZGEgbmV0d29ya3MiLCJuZXR3b3JrcyBpbmMgYWxsIiwidGhlIG5hbWVzIHZvY2FsIiwibmFtZXMgdm9jYWwgdm92aWRhIiwidm9jYWwgdm92aWRhIG9wZW4iLCJhcHBsaWNhdGlvbiBsaWJyYXJ5IGFuZCIsImxpYnJhcnkgYW5kIHZvdmlkYSIsImFuZCB2b3ZpZGEgb3BlbiIsImFwcGxpY2F0aW9uIGxpYnJhcnkgdm9jYWwiLCJsaWJyYXJ5IHZvY2FsIG11c3QiLCJ2b2NhbCBtdXN0IG5vdCIsInBsZWFzZSBjb250YWN0IHZvY2FsIiwiY29udGFjdCB2b2NhbCB2b3ZpZGEiLCJ2b2NhbCB2b3ZpZGEgb3JnIiwidm92aWRhIG9yZyA0IiwiYmUgY2FsbGVkIHZvY2FsIiwiY2FsbGVkIHZvY2FsIG5vciIsInZvY2FsIG5vciBtYXkiLCJub3IgbWF5IHZvY2FsIiwibWF5IHZvY2FsIGFwcGVhciIsInZvY2FsIGFwcGVhciBpbiIsImV2ZW50IHNoYWxsIHZvdmlkYSIsInNoYWxsIHZvdmlkYSBuZXR3b3JrcyIsIm5ldHdvcmtzIGluYyBvciIsImFueSBkYW1hZ2VzIGluIiwiZGFtYWdlcyBpbiBleGNlc3MiLCJleGNlc3Mgb2YgMSIsIm9mIDEgMDAwIiwiMSAwMDAgbm9yIiwiMDAwIG5vciBmb3IiLCJhbnkgaW5kaXJlY3QgaW5jaWRlbnRhbCIsImFwcGxpZXMgdG8gYWxsIHNvZnR3YXJlIiwidG8gYWxsIHNvZnR3YXJlIGluY29ycG9yYXRlZCIsImFsbCBzb2Z0d2FyZSBpbmNvcnBvcmF0ZWQgaW4iLCJzb2Z0d2FyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIiwiaW5jb3Jwb3JhdGVkIGluIHRoZSB2b3ZpZGEiLCJpbiB0aGUgdm92aWRhIG9wZW4iLCJ0aGUgdm92aWRhIG9wZW4gY29tbXVuaWNhdGlvbiIsImNvbW11bmljYXRpb24gYXBwbGljYXRpb24gbGlicmFyeSBleGNlcHQiLCJhcHBsaWNhdGlvbiBsaWJyYXJ5IGV4Y2VwdCBmb3IiLCJsaWJyYXJ5IGV4Y2VwdCBmb3IgdGhvc2UiLCJleGNlcHQgZm9yIHRob3NlIHBvcnRpb25zIiwiZm9yIHRob3NlIHBvcnRpb25zIGluY29ycG9yYXRpbmciLCJ0aG9zZSBwb3J0aW9ucyBpbmNvcnBvcmF0aW5nIHRoaXJkIiwicG9ydGlvbnMgaW5jb3Jwb3JhdGluZyB0aGlyZCBwYXJ0eSIsImluY29ycG9yYXRpbmcgdGhpcmQgcGFydHkgc29mdHdhcmUiLCJ0aGlyZCBwYXJ0eSBzb2Z0d2FyZSBzcGVjaWZpY2FsbHkiLCJwYXJ0eSBzb2Z0d2FyZSBzcGVjaWZpY2FsbHkgaWRlbnRpZmllZCIsInNvZnR3YXJlIHNwZWNpZmljYWxseSBpZGVudGlmaWVkIGFzIiwic3BlY2lmaWNhbGx5IGlkZW50aWZpZWQgYXMgYmVpbmciLCJpZGVudGlmaWVkIGFzIGJlaW5nIGxpY2Vuc2VkIiwiYmVpbmcgbGljZW5zZWQgdW5kZXIgc2VwYXJhdGUiLCJsaWNlbnNlZCB1bmRlciBzZXBhcmF0ZSBsaWNlbnNlIiwidW5kZXIgc2VwYXJhdGUgbGljZW5zZSB0aGUiLCJzZXBhcmF0ZSBsaWNlbnNlIHRoZSB2b3ZpZGEiLCJsaWNlbnNlIHRoZSB2b3ZpZGEgc29mdHdhcmUiLCJ0aGUgdm92aWRhIHNvZnR3YXJlIGxpY2Vuc2UiLCJ2b3ZpZGEgc29mdHdhcmUgbGljZW5zZSB2ZXJzaW9uIiwiY29weXJpZ2h0IGMgMjAwMCB2b3ZpZGEiLCJjIDIwMDAgdm92aWRhIG5ldHdvcmtzIiwiMjAwMCB2b3ZpZGEgbmV0d29ya3MgaW5jIiwidm92aWRhIG5ldHdvcmtzIGluYyBhbGwiLCJuZXR3b3JrcyBpbmMgYWxsIHJpZ2h0cyIsIjMgdGhlIG5hbWVzIHZvY2FsIiwidGhlIG5hbWVzIHZvY2FsIHZvdmlkYSIsIm5hbWVzIHZvY2FsIHZvdmlkYSBvcGVuIiwidm9jYWwgdm92aWRhIG9wZW4gY29tbXVuaWNhdGlvbiIsImNvbW11bmljYXRpb24gYXBwbGljYXRpb24gbGlicmFyeSBhbmQiLCJhcHBsaWNhdGlvbiBsaWJyYXJ5IGFuZCB2b3ZpZGEiLCJsaWJyYXJ5IGFuZCB2b3ZpZGEgb3BlbiIsImFuZCB2b3ZpZGEgb3BlbiBjb21tdW5pY2F0aW9uIiwiY29tbXVuaWNhdGlvbiBhcHBsaWNhdGlvbiBsaWJyYXJ5IHZvY2FsIiwiYXBwbGljYXRpb24gbGlicmFyeSB2b2NhbCBtdXN0IiwibGlicmFyeSB2b2NhbCBtdXN0IG5vdCIsInZvY2FsIG11c3Qgbm90IGJlIiwicGVybWlzc2lvbiBwbGVhc2UgY29udGFjdCB2b2NhbCIsInBsZWFzZSBjb250YWN0IHZvY2FsIHZvdmlkYSIsImNvbnRhY3Qgdm9jYWwgdm92aWRhIG9yZyIsInZvY2FsIHZvdmlkYSBvcmcgNCIsInZvdmlkYSBvcmcgNCBwcm9kdWN0cyIsIm5vdCBiZSBjYWxsZWQgdm9jYWwiLCJiZSBjYWxsZWQgdm9jYWwgbm9yIiwiY2FsbGVkIHZvY2FsIG5vciBtYXkiLCJ2b2NhbCBub3IgbWF5IHZvY2FsIiwibm9yIG1heSB2b2NhbCBhcHBlYXIiLCJtYXkgdm9jYWwgYXBwZWFyIGluIiwidm9jYWwgYXBwZWFyIGluIHRoZWlyIiwibm8gZXZlbnQgc2hhbGwgdm92aWRhIiwiZXZlbnQgc2hhbGwgdm92aWRhIG5ldHdvcmtzIiwic2hhbGwgdm92aWRhIG5ldHdvcmtzIGluYyIsInZvdmlkYSBuZXR3b3JrcyBpbmMgb3IiLCJuZXR3b3JrcyBpbmMgb3IgaXRzIiwiZm9yIGFueSBkYW1hZ2VzIGluIiwiYW55IGRhbWFnZXMgaW4gZXhjZXNzIiwiZGFtYWdlcyBpbiBleGNlc3Mgb2YiLCJpbiBleGNlc3Mgb2YgMSIsImV4Y2VzcyBvZiAxIDAwMCIsIm9mIDEgMDAwIG5vciIsIjEgMDAwIG5vciBmb3IiLCIwMDAgbm9yIGZvciBhbnkiLCJub3IgZm9yIGFueSBpbmRpcmVjdCIsImZvciBhbnkgaW5kaXJlY3QgaW5jaWRlbnRhbCIsImFueSBpbmRpcmVjdCBpbmNpZGVudGFsIHNwZWNpYWwiLCJ2IDEgMCB0aGlzIGxpY2Vuc2UiLCIxIDAgdGhpcyBsaWNlbnNlIGFwcGxpZXMiLCJsaWNlbnNlIGFwcGxpZXMgdG8gYWxsIHNvZnR3YXJlIiwiYXBwbGllcyB0byBhbGwgc29mdHdhcmUgaW5jb3Jwb3JhdGVkIiwidG8gYWxsIHNvZnR3YXJlIGluY29ycG9yYXRlZCBpbiIsImFsbCBzb2Z0d2FyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIiwic29mdHdhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSB2b3ZpZGEiLCJpbmNvcnBvcmF0ZWQgaW4gdGhlIHZvdmlkYSBvcGVuIiwiaW4gdGhlIHZvdmlkYSBvcGVuIGNvbW11bmljYXRpb24iLCJ0aGUgdm92aWRhIG9wZW4gY29tbXVuaWNhdGlvbiBhcHBsaWNhdGlvbiIsIm9wZW4gY29tbXVuaWNhdGlvbiBhcHBsaWNhdGlvbiBsaWJyYXJ5IGV4Y2VwdCIsImNvbW11bmljYXRpb24gYXBwbGljYXRpb24gbGlicmFyeSBleGNlcHQgZm9yIiwiYXBwbGljYXRpb24gbGlicmFyeSBleGNlcHQgZm9yIHRob3NlIiwibGlicmFyeSBleGNlcHQgZm9yIHRob3NlIHBvcnRpb25zIiwiZXhjZXB0IGZvciB0aG9zZSBwb3J0aW9ucyBpbmNvcnBvcmF0aW5nIiwiZm9yIHRob3NlIHBvcnRpb25zIGluY29ycG9yYXRpbmcgdGhpcmQiLCJ0aG9zZSBwb3J0aW9ucyBpbmNvcnBvcmF0aW5nIHRoaXJkIHBhcnR5IiwicG9ydGlvbnMgaW5jb3Jwb3JhdGluZyB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSIsImluY29ycG9yYXRpbmcgdGhpcmQgcGFydHkgc29mdHdhcmUgc3BlY2lmaWNhbGx5IiwidGhpcmQgcGFydHkgc29mdHdhcmUgc3BlY2lmaWNhbGx5IGlkZW50aWZpZWQiLCJwYXJ0eSBzb2Z0d2FyZSBzcGVjaWZpY2FsbHkgaWRlbnRpZmllZCBhcyIsInNvZnR3YXJlIHNwZWNpZmljYWxseSBpZGVudGlmaWVkIGFzIGJlaW5nIiwic3BlY2lmaWNhbGx5IGlkZW50aWZpZWQgYXMgYmVpbmcgbGljZW5zZWQiLCJpZGVudGlmaWVkIGFzIGJlaW5nIGxpY2Vuc2VkIHVuZGVyIiwiYXMgYmVpbmcgbGljZW5zZWQgdW5kZXIgc2VwYXJhdGUiLCJiZWluZyBsaWNlbnNlZCB1bmRlciBzZXBhcmF0ZSBsaWNlbnNlIiwibGljZW5zZWQgdW5kZXIgc2VwYXJhdGUgbGljZW5zZSB0aGUiLCJ1bmRlciBzZXBhcmF0ZSBsaWNlbnNlIHRoZSB2b3ZpZGEiLCJzZXBhcmF0ZSBsaWNlbnNlIHRoZSB2b3ZpZGEgc29mdHdhcmUiLCJsaWNlbnNlIHRoZSB2b3ZpZGEgc29mdHdhcmUgbGljZW5zZSIsInRoZSB2b3ZpZGEgc29mdHdhcmUgbGljZW5zZSB2ZXJzaW9uIiwidm92aWRhIHNvZnR3YXJlIGxpY2Vuc2UgdmVyc2lvbiAxIiwiMSAwIGNvcHlyaWdodCBjIDIwMDAiLCIwIGNvcHlyaWdodCBjIDIwMDAgdm92aWRhIiwiY29weXJpZ2h0IGMgMjAwMCB2b3ZpZGEgbmV0d29ya3MiLCJjIDIwMDAgdm92aWRhIG5ldHdvcmtzIGluYyIsIjIwMDAgdm92aWRhIG5ldHdvcmtzIGluYyBhbGwiLCJ2b3ZpZGEgbmV0d29ya3MgaW5jIGFsbCByaWdodHMiLCJuZXR3b3JrcyBpbmMgYWxsIHJpZ2h0cyByZXNlcnZlZCIsImRpc3RyaWJ1dGlvbiAzIHRoZSBuYW1lcyB2b2NhbCIsIjMgdGhlIG5hbWVzIHZvY2FsIHZvdmlkYSIsInRoZSBuYW1lcyB2b2NhbCB2b3ZpZGEgb3BlbiIsIm5hbWVzIHZvY2FsIHZvdmlkYSBvcGVuIGNvbW11bmljYXRpb24iLCJ2b2NhbCB2b3ZpZGEgb3BlbiBjb21tdW5pY2F0aW9uIGFwcGxpY2F0aW9uIiwib3BlbiBjb21tdW5pY2F0aW9uIGFwcGxpY2F0aW9uIGxpYnJhcnkgYW5kIiwiY29tbXVuaWNhdGlvbiBhcHBsaWNhdGlvbiBsaWJyYXJ5IGFuZCB2b3ZpZGEiLCJhcHBsaWNhdGlvbiBsaWJyYXJ5IGFuZCB2b3ZpZGEgb3BlbiIsImxpYnJhcnkgYW5kIHZvdmlkYSBvcGVuIGNvbW11bmljYXRpb24iLCJhbmQgdm92aWRhIG9wZW4gY29tbXVuaWNhdGlvbiBhcHBsaWNhdGlvbiIsIm9wZW4gY29tbXVuaWNhdGlvbiBhcHBsaWNhdGlvbiBsaWJyYXJ5IHZvY2FsIiwiY29tbXVuaWNhdGlvbiBhcHBsaWNhdGlvbiBsaWJyYXJ5IHZvY2FsIG11c3QiLCJhcHBsaWNhdGlvbiBsaWJyYXJ5IHZvY2FsIG11c3Qgbm90IiwibGlicmFyeSB2b2NhbCBtdXN0IG5vdCBiZSIsInZvY2FsIG11c3Qgbm90IGJlIHVzZWQiLCJ3cml0dGVuIHBlcm1pc3Npb24gcGxlYXNlIGNvbnRhY3Qgdm9jYWwiLCJwZXJtaXNzaW9uIHBsZWFzZSBjb250YWN0IHZvY2FsIHZvdmlkYSIsInBsZWFzZSBjb250YWN0IHZvY2FsIHZvdmlkYSBvcmciLCJjb250YWN0IHZvY2FsIHZvdmlkYSBvcmcgNCIsInZvY2FsIHZvdmlkYSBvcmcgNCBwcm9kdWN0cyIsInZvdmlkYSBvcmcgNCBwcm9kdWN0cyBkZXJpdmVkIiwibWF5IG5vdCBiZSBjYWxsZWQgdm9jYWwiLCJub3QgYmUgY2FsbGVkIHZvY2FsIG5vciIsImJlIGNhbGxlZCB2b2NhbCBub3IgbWF5IiwiY2FsbGVkIHZvY2FsIG5vciBtYXkgdm9jYWwiLCJ2b2NhbCBub3IgbWF5IHZvY2FsIGFwcGVhciIsIm5vciBtYXkgdm9jYWwgYXBwZWFyIGluIiwibWF5IHZvY2FsIGFwcGVhciBpbiB0aGVpciIsInZvY2FsIGFwcGVhciBpbiB0aGVpciBuYW1lIiwid2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gdGhpcyIsInRpdGxlIGFuZCBub24gaW5mcmluZ2VtZW50IGFyZSIsImluIG5vIGV2ZW50IHNoYWxsIHZvdmlkYSIsIm5vIGV2ZW50IHNoYWxsIHZvdmlkYSBuZXR3b3JrcyIsImV2ZW50IHNoYWxsIHZvdmlkYSBuZXR3b3JrcyBpbmMiLCJzaGFsbCB2b3ZpZGEgbmV0d29ya3MgaW5jIG9yIiwidm92aWRhIG5ldHdvcmtzIGluYyBvciBpdHMiLCJuZXR3b3JrcyBpbmMgb3IgaXRzIGNvbnRyaWJ1dG9ycyIsImxpYWJsZSBmb3IgYW55IGRhbWFnZXMgaW4iXX0seyJsaWNlbnNlVGV4dHMiOlsiVklNIExJQ0VOU0VcblxuICAgSSkgVGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiBkaXN0cmlidXRpbmcgdW5tb2RpZmllZCBjb3BpZXMgb2YgVmltIGV4Y2VwdCB0aGF0IHRoZXkgbXVzdCBpbmNsdWRlIHRoaXMgbGljZW5zZSB0ZXh0LiBZb3UgY2FuIGFsc28gZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIHBhcnRzIG9mIFZpbSAsIGxpa2V3aXNlIHVucmVzdHJpY3RlZCBleGNlcHQgdGhhdCB0aGV5IG11c3QgaW5jbHVkZSB0aGlzIGxpY2Vuc2UgdGV4dC4gWW91IGFyZSBhbHNvIGFsbG93ZWQgdG8gaW5jbHVkZSBleGVjdXRhYmxlcyB0aGF0IHlvdSBtYWRlIGZyb20gdGhlIHVubW9kaWZpZWQgVmltIHNvdXJjZXMsIHBsdXMgeW91ciBvd24gdXNhZ2UgZXhhbXBsZXMgYW5kIFZpbSBzY3JpcHRzLlxuXG4gICBJSSkgSXQgaXMgYWxsb3dlZCB0byBkaXN0cmlidXRlIGEgbW9kaWZpZWQgKG9yIGV4dGVuZGVkKSB2ZXJzaW9uIG9mIFZpbSAsIGluY2x1ZGluZyBleGVjdXRhYmxlcyBhbmQvb3Igc291cmNlIGNvZGUsIHdoZW4gdGhlIGZvbGxvd2luZyBmb3VyIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICAgMSkgVGhpcyBsaWNlbnNlIHRleHQgbXVzdCBiZSBpbmNsdWRlZCB1bm1vZGlmaWVkLlxuXG4gICAgICAyKSBUaGUgbW9kaWZpZWQgVmltIG11c3QgYmUgZGlzdHJpYnV0ZWQgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZml2ZSB3YXlzOlxuXG4gICAgICAgICBhKSBJZiB5b3UgbWFrZSBjaGFuZ2VzIHRvIFZpbSB5b3Vyc2VsZiwgeW91IG11c3QgY2xlYXJseSBkZXNjcmliZSBpbiB0aGUgZGlzdHJpYnV0aW9uIGhvdyB0byBjb250YWN0IHlvdS4gV2hlbiB0aGUgbWFpbnRhaW5lciBhc2tzIHlvdSAoaW4gYW55IHdheSkgZm9yIGEgY29weSBvZiB0aGUgbW9kaWZpZWQgVmltIHlvdSBkaXN0cmlidXRlZCwgeW91IG11c3QgbWFrZSB5b3VyIGNoYW5nZXMsIGluY2x1ZGluZyBzb3VyY2UgY29kZSwgYXZhaWxhYmxlIHRvIHRoZSBtYWludGFpbmVyIHdpdGhvdXQgZmVlLiBUaGUgbWFpbnRhaW5lciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gaW5jbHVkZSB5b3VyIGNoYW5nZXMgaW4gdGhlIG9mZmljaWFsIHZlcnNpb24gb2YgVmltIC4gV2hhdCB0aGUgbWFpbnRhaW5lciB3aWxsIGRvIHdpdGggeW91ciBjaGFuZ2VzIGFuZCB1bmRlciB3aGF0IGxpY2Vuc2UgdGhleSB3aWxsIGJlIGRpc3RyaWJ1dGVkIGlzIG5lZ290aWFibGUuIElmIHRoZXJlIGhhcyBiZWVuIG5vIG5lZ290aWF0aW9uIHRoZW4gdGhpcyBsaWNlbnNlLCBvciBhIGxhdGVyIHZlcnNpb24sIGFsc28gYXBwbGllcyB0byB5b3VyIGNoYW5nZXMuIFRoZSBjdXJyZW50IG1haW50YWluZXIgaXMgQnJhbSBNb29sZW5hYXIgXHUwMDNjQnJhbUB2aW0ub3JnXHUwMDNlLiBJZiB0aGlzIGNoYW5nZXMgaXQgd2lsbCBiZSBhbm5vdW5jZWQgaW4gYXBwcm9wcmlhdGUgcGxhY2VzIChtb3N0IGxpa2VseSB2aW0uc2YubmV0LCB3d3cudmltLm9yZyBhbmQvb3IgY29tcC5lZGl0b3JzKS4gV2hlbiBpdCBpcyBjb21wbGV0ZWx5IGltcG9zc2libGUgdG8gY29udGFjdCB0aGUgbWFpbnRhaW5lciwgdGhlIG9ibGlnYXRpb24gdG8gc2VuZCBoaW0geW91ciBjaGFuZ2VzIGNlYXNlcy4gT25jZSB0aGUgbWFpbnRhaW5lciBoYXMgY29uZmlybWVkIHRoYXQgaGUgaGFzIHJlY2VpdmVkIHlvdXIgY2hhbmdlcyB0aGV5IHdpbGwgbm90IGhhdmUgdG8gYmUgc2VudCBhZ2Fpbi5cblxuICAgICAgICAgYikgSWYgeW91IGhhdmUgcmVjZWl2ZWQgYSBtb2RpZmllZCBWaW0gdGhhdCB3YXMgZGlzdHJpYnV0ZWQgYXMgbWVudGlvbmVkIHVuZGVyIGEpIHlvdSBhcmUgYWxsb3dlZCB0byBmdXJ0aGVyIGRpc3RyaWJ1dGUgaXQgdW5tb2RpZmllZCwgYXMgbWVudGlvbmVkIGF0IEkpLiBJZiB5b3UgbWFrZSBhZGRpdGlvbmFsIGNoYW5nZXMgdGhlIHRleHQgdW5kZXIgYSkgYXBwbGllcyB0byB0aG9zZSBjaGFuZ2VzLlxuXG4gICAgICAgICBjKSBQcm92aWRlIGFsbCB0aGUgY2hhbmdlcywgaW5jbHVkaW5nIHNvdXJjZSBjb2RlLCB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIG1vZGlmaWVkIFZpbSB5b3UgZGlzdHJpYnV0ZS4gVGhpcyBtYXkgYmUgZG9uZSBpbiB0aGUgZm9ybSBvZiBhIGNvbnRleHQgZGlmZi4gWW91IGNhbiBjaG9vc2Ugd2hhdCBsaWNlbnNlIHRvIHVzZSBmb3IgbmV3IGNvZGUgeW91IGFkZC4gVGhlIGNoYW5nZXMgYW5kIHRoZWlyIGxpY2Vuc2UgbXVzdCBub3QgcmVzdHJpY3Qgb3RoZXJzIGZyb20gbWFraW5nIHRoZWlyIG93biBjaGFuZ2VzIHRvIHRoZSBvZmZpY2lhbCB2ZXJzaW9uIG9mIFZpbSAuXG5cbiAgICAgICAgIGQpIFdoZW4geW91IGhhdmUgYSBtb2RpZmllZCBWaW0gd2hpY2ggaW5jbHVkZXMgY2hhbmdlcyBhcyBtZW50aW9uZWQgdW5kZXIgYyksIHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCB3aXRob3V0IHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGNoYW5nZXMgaWYgdGhlIGZvbGxvd2luZyB0aHJlZSBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAgICAgICAgIC0gVGhlIGxpY2Vuc2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBjaGFuZ2VzIHBlcm1pdHMgeW91IHRvIGRpc3RyaWJ1dGUgdGhlIGNoYW5nZXMgdG8gdGhlIFZpbSBtYWludGFpbmVyIHdpdGhvdXQgZmVlIG9yIHJlc3RyaWN0aW9uLCBhbmQgcGVybWl0cyB0aGUgVmltIG1haW50YWluZXIgdG8gaW5jbHVkZSB0aGUgY2hhbmdlcyBpbiB0aGUgb2ZmaWNpYWwgdmVyc2lvbiBvZiBWaW0gd2l0aG91dCBmZWUgb3IgcmVzdHJpY3Rpb24uXG5cbiAgICAgICAgICAgIC0gWW91IGtlZXAgdGhlIGNoYW5nZXMgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFmdGVyIGxhc3QgZGlzdHJpYnV0aW5nIHRoZSBjb3JyZXNwb25kaW5nIG1vZGlmaWVkIFZpbSAuIFdoZW4gdGhlIG1haW50YWluZXIgb3Igc29tZW9uZSB3aG8geW91IGRpc3RyaWJ1dGVkIHRoZSBtb2RpZmllZCBWaW0gdG8gYXNrcyB5b3UgKGluIGFueSB3YXkpIGZvciB0aGUgY2hhbmdlcyB3aXRoaW4gdGhpcyBwZXJpb2QsIHlvdSBtdXN0IG1ha2UgdGhlbSBhdmFpbGFibGUgdG8gaGltLlxuXG4gICAgICAgICAgICAtIFlvdSBjbGVhcmx5IGRlc2NyaWJlIGluIHRoZSBkaXN0cmlidXRpb24gaG93IHRvIGNvbnRhY3QgeW91LiBUaGlzIGNvbnRhY3QgaW5mb3JtYXRpb24gbXVzdCByZW1haW4gdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFmdGVyIGxhc3QgZGlzdHJpYnV0aW5nIHRoZSBjb3JyZXNwb25kaW5nIG1vZGlmaWVkIFZpbSAsIG9yIGFzIGxvbmcgYXMgcG9zc2libGUuXG5cbiAgICAgICAgIGUpIFdoZW4gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIGFwcGxpZXMgdG8gdGhlIGNoYW5nZXMsIHlvdSBjYW4gZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgVmltIHVuZGVyIHRoZSBHTlUgR1BMIHZlcnNpb24gMiBvciBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuICAgICAgMykgQSBtZXNzYWdlIG11c3QgYmUgYWRkZWQsIGF0IGxlYXN0IGluIHRoZSBvdXRwdXQgb2YgdGhlIFwiOnZlcnNpb25cIiBjb21tYW5kIGFuZCBpbiB0aGUgaW50cm8gc2NyZWVuLCBzdWNoIHRoYXQgdGhlIHVzZXIgb2YgdGhlIG1vZGlmaWVkIFZpbSBpcyBhYmxlIHRvIHNlZSB0aGF0IGl0IHdhcyBtb2RpZmllZC4gV2hlbiBkaXN0cmlidXRpbmcgYXMgbWVudGlvbmVkIHVuZGVyIDIpZSkgYWRkaW5nIHRoZSBtZXNzYWdlIGlzIG9ubHkgcmVxdWlyZWQgZm9yIGFzIGZhciBhcyB0aGlzIGRvZXMgbm90IGNvbmZsaWN0IHdpdGggdGhlIGxpY2Vuc2UgdXNlZCBmb3IgdGhlIGNoYW5nZXMuXG5cbiAgICAgIDQpIFRoZSBjb250YWN0IGluZm9ybWF0aW9uIGFzIHJlcXVpcmVkIHVuZGVyIDIpYSkgYW5kIDIpZCkgbXVzdCBub3QgYmUgcmVtb3ZlZCBvciBjaGFuZ2VkLCBleGNlcHQgdGhhdCB0aGUgcGVyc29uIGhpbXNlbGYgY2FuIG1ha2UgY29ycmVjdGlvbnMuXG5cbiAgIElJSSkgSWYgeW91IGRpc3RyaWJ1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIFZpbSAsIHlvdSBhcmUgZW5jb3VyYWdlZCB0byB1c2UgdGhlIFZpbSBsaWNlbnNlIGZvciB5b3VyIGNoYW5nZXMgYW5kIG1ha2UgdGhlbSBhdmFpbGFibGUgdG8gdGhlIG1haW50YWluZXIsIGluY2x1ZGluZyB0aGUgc291cmNlIGNvZGUuIFRoZSBwcmVmZXJyZWQgd2F5IHRvIGRvIHRoaXMgaXMgYnkgZS1tYWlsIG9yIGJ5IHVwbG9hZGluZyB0aGUgZmlsZXMgdG8gYSBzZXJ2ZXIgYW5kIGUtbWFpbGluZyB0aGUgVVJMLiBJZiB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgaXMgc21hbGwgKGUuZy4sIGEgbW9kaWZpZWQgTWFrZWZpbGUpIGUtbWFpbGluZyBhIGNvbnRleHQgZGlmZiB3aWxsIGRvLiBUaGUgZS1tYWlsIGFkZHJlc3MgdG8gYmUgdXNlZCBpcyBcdTAwM2NtYWludGFpbmVyQHZpbS5vcmdcdTAwM2VcblxuICAgSVYpIEl0IGlzIG5vdCBhbGxvd2VkIHRvIHJlbW92ZSB0aGlzIGxpY2Vuc2UgZnJvbSB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBWaW0gc291cmNlcywgcGFydHMgb2YgaXQgb3IgZnJvbSBhIG1vZGlmaWVkIHZlcnNpb24uIFlvdSBtYXkgdXNlIHRoaXMgbGljZW5zZSBmb3IgcHJldmlvdXMgVmltIHJlbGVhc2VzIGluc3RlYWQgb2YgdGhlIGxpY2Vuc2UgdGhhdCB0aGV5IGNhbWUgd2l0aCwgYXQgeW91ciBvcHRpb24uIl0sImxpY2Vuc2VJZHMiOlsiVmltIl0sImtleXdvcmRzIjpbInZpbSBsaWNlbnNlIGkiLCJsaWNlbnNlIGkgdGhlcmUiLCJpIHRoZXJlIGFyZSIsInJlc3RyaWN0aW9ucyBvbiBkaXN0cmlidXRpbmciLCJvbiBkaXN0cmlidXRpbmcgdW5tb2RpZmllZCIsImRpc3RyaWJ1dGluZyB1bm1vZGlmaWVkIGNvcGllcyIsImNvcGllcyBvZiB2aW0iLCJvZiB2aW0gZXhjZXB0IiwidmltIGV4Y2VwdCB0aGF0IiwidGV4dCB5b3UgY2FuIiwiY2FuIGFsc28gZGlzdHJpYnV0ZSIsImFsc28gZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIiwiZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIHBhcnRzIiwidW5tb2RpZmllZCBwYXJ0cyBvZiIsInBhcnRzIG9mIHZpbSIsIm9mIHZpbSBsaWtld2lzZSIsInZpbSBsaWtld2lzZSB1bnJlc3RyaWN0ZWQiLCJsaWtld2lzZSB1bnJlc3RyaWN0ZWQgZXhjZXB0IiwidW5yZXN0cmljdGVkIGV4Y2VwdCB0aGF0IiwidGV4dCB5b3UgYXJlIiwieW91IGFyZSBhbHNvIiwiYXJlIGFsc28gYWxsb3dlZCIsImFsc28gYWxsb3dlZCB0byIsImFsbG93ZWQgdG8gaW5jbHVkZSIsInRvIGluY2x1ZGUgZXhlY3V0YWJsZXMiLCJpbmNsdWRlIGV4ZWN1dGFibGVzIHRoYXQiLCJleGVjdXRhYmxlcyB0aGF0IHlvdSIsInRoYXQgeW91IG1hZGUiLCJ5b3UgbWFkZSBmcm9tIiwibWFkZSBmcm9tIHRoZSIsImZyb20gdGhlIHVubW9kaWZpZWQiLCJ0aGUgdW5tb2RpZmllZCB2aW0iLCJ1bm1vZGlmaWVkIHZpbSBzb3VyY2VzIiwidmltIHNvdXJjZXMgcGx1cyIsInNvdXJjZXMgcGx1cyB5b3VyIiwicGx1cyB5b3VyIG93biIsInlvdXIgb3duIHVzYWdlIiwib3duIHVzYWdlIGV4YW1wbGVzIiwidXNhZ2UgZXhhbXBsZXMgYW5kIiwiZXhhbXBsZXMgYW5kIHZpbSIsImFuZCB2aW0gc2NyaXB0cyIsInZpbSBzY3JpcHRzIGlpIiwic2NyaXB0cyBpaSBpdCIsImlpIGl0IGlzIiwiYSBtb2RpZmllZCBvciIsIm1vZGlmaWVkIG9yIGV4dGVuZGVkIiwib3IgZXh0ZW5kZWQgdmVyc2lvbiIsImV4dGVuZGVkIHZlcnNpb24gb2YiLCJvZiB2aW0gaW5jbHVkaW5nIiwidmltIGluY2x1ZGluZyBleGVjdXRhYmxlcyIsImluY2x1ZGluZyBleGVjdXRhYmxlcyBhbmQiLCJleGVjdXRhYmxlcyBhbmQgb3IiLCJjb2RlIHdoZW4gdGhlIiwidGhlIGZvbGxvd2luZyBmb3VyIiwiZm9sbG93aW5nIGZvdXIgY29uZGl0aW9ucyIsImZvdXIgY29uZGl0aW9ucyBhcmUiLCJtZXQgMSB0aGlzIiwibGljZW5zZSB0ZXh0IG11c3QiLCJ0ZXh0IG11c3QgYmUiLCJiZSBpbmNsdWRlZCB1bm1vZGlmaWVkIiwiaW5jbHVkZWQgdW5tb2RpZmllZCAyIiwidW5tb2RpZmllZCAyIHRoZSIsIjIgdGhlIG1vZGlmaWVkIiwibW9kaWZpZWQgdmltIG11c3QiLCJ2aW0gbXVzdCBiZSIsImRpc3RyaWJ1dGVkIGluIG9uZSIsInRoZSBmb2xsb3dpbmcgZml2ZSIsImZvbGxvd2luZyBmaXZlIHdheXMiLCJmaXZlIHdheXMgYSIsIndheXMgYSBpZiIsInlvdSBtYWtlIGNoYW5nZXMiLCJjaGFuZ2VzIHRvIHZpbSIsInRvIHZpbSB5b3Vyc2VsZiIsInZpbSB5b3Vyc2VsZiB5b3UiLCJ5b3Vyc2VsZiB5b3UgbXVzdCIsIm11c3QgY2xlYXJseSBkZXNjcmliZSIsImNvbnRhY3QgeW91IHdoZW4iLCJ5b3Ugd2hlbiB0aGUiLCJ0aGUgbWFpbnRhaW5lciBhc2tzIiwibWFpbnRhaW5lciBhc2tzIHlvdSIsIndheSBmb3IgYSIsInZpbSB5b3UgZGlzdHJpYnV0ZWQiLCJ5b3UgZGlzdHJpYnV0ZWQgeW91IiwiZGlzdHJpYnV0ZWQgeW91IG11c3QiLCJtdXN0IG1ha2UgeW91ciIsIm1ha2UgeW91ciBjaGFuZ2VzIiwieW91ciBjaGFuZ2VzIGluY2x1ZGluZyIsInRoZSBtYWludGFpbmVyIHdpdGhvdXQiLCJ3aXRob3V0IGZlZSB0aGUiLCJmZWUgdGhlIG1haW50YWluZXIiLCJ0aGUgbWFpbnRhaW5lciByZXNlcnZlcyIsIm1haW50YWluZXIgcmVzZXJ2ZXMgdGhlIiwicmlnaHQgdG8gaW5jbHVkZSIsImluY2x1ZGUgeW91ciBjaGFuZ2VzIiwieW91ciBjaGFuZ2VzIGluIiwib2YgdmltIHdoYXQiLCJ2aW0gd2hhdCB0aGUiLCJ3aGF0IHRoZSBtYWludGFpbmVyIiwidGhlIG1haW50YWluZXIgd2lsbCIsIm1haW50YWluZXIgd2lsbCBkbyIsIndpbGwgZG8gd2l0aCIsIndpdGggeW91ciBjaGFuZ2VzIiwiY2hhbmdlcyBhbmQgdW5kZXIiLCJhbmQgdW5kZXIgd2hhdCIsInVuZGVyIHdoYXQgbGljZW5zZSIsIndoYXQgbGljZW5zZSB0aGV5IiwibGljZW5zZSB0aGV5IHdpbGwiLCJ0aGV5IHdpbGwgYmUiLCJiZSBkaXN0cmlidXRlZCBpcyIsImRpc3RyaWJ1dGVkIGlzIG5lZ290aWFibGUiLCJpcyBuZWdvdGlhYmxlIGlmIiwibmVnb3RpYWJsZSBpZiB0aGVyZSIsImlmIHRoZXJlIGhhcyIsInRoZXJlIGhhcyBiZWVuIiwiaGFzIGJlZW4gbm8iLCJiZWVuIG5vIG5lZ290aWF0aW9uIiwibm8gbmVnb3RpYXRpb24gdGhlbiIsIm5lZ290aWF0aW9uIHRoZW4gdGhpcyIsImxhdGVyIHZlcnNpb24gYWxzbyIsInZlcnNpb24gYWxzbyBhcHBsaWVzIiwidG8geW91ciBjaGFuZ2VzIiwieW91ciBjaGFuZ2VzIHRoZSIsImNoYW5nZXMgdGhlIGN1cnJlbnQiLCJtYWludGFpbmVyIGlzIGJyYW0iLCJpcyBicmFtIG1vb2xlbmFhciIsImJyYW0gbW9vbGVuYWFyIGJyYW0iLCJtb29sZW5hYXIgYnJhbSB2aW0iLCJicmFtIHZpbSBvcmciLCJ2aW0gb3JnIGlmIiwib3JnIGlmIHRoaXMiLCJpZiB0aGlzIGNoYW5nZXMiLCJ0aGlzIGNoYW5nZXMgaXQiLCJjaGFuZ2VzIGl0IHdpbGwiLCJ3aWxsIGJlIGFubm91bmNlZCIsImJlIGFubm91bmNlZCBpbiIsImFubm91bmNlZCBpbiBhcHByb3ByaWF0ZSIsImluIGFwcHJvcHJpYXRlIHBsYWNlcyIsImFwcHJvcHJpYXRlIHBsYWNlcyBtb3N0IiwicGxhY2VzIG1vc3QgbGlrZWx5IiwibW9zdCBsaWtlbHkgdmltIiwibGlrZWx5IHZpbSBzZiIsInZpbSBzZiBuZXQiLCJzZiBuZXQgd3d3IiwibmV0IHd3dyB2aW0iLCJ3d3cgdmltIG9yZyIsInZpbSBvcmcgYW5kIiwib3JnIGFuZCBvciIsImFuZCBvciBjb21wIiwib3IgY29tcCBlZGl0b3JzIiwiY29tcCBlZGl0b3JzIHdoZW4iLCJlZGl0b3JzIHdoZW4gaXQiLCJpdCBpcyBjb21wbGV0ZWx5IiwiaXMgY29tcGxldGVseSBpbXBvc3NpYmxlIiwiY29tcGxldGVseSBpbXBvc3NpYmxlIHRvIiwiaW1wb3NzaWJsZSB0byBjb250YWN0IiwidG8gY29udGFjdCB0aGUiLCJjb250YWN0IHRoZSBtYWludGFpbmVyIiwidGhlIG1haW50YWluZXIgdGhlIiwibWFpbnRhaW5lciB0aGUgb2JsaWdhdGlvbiIsIm9ibGlnYXRpb24gdG8gc2VuZCIsInRvIHNlbmQgaGltIiwic2VuZCBoaW0geW91ciIsImhpbSB5b3VyIGNoYW5nZXMiLCJ5b3VyIGNoYW5nZXMgY2Vhc2VzIiwiY2hhbmdlcyBjZWFzZXMgb25jZSIsImNlYXNlcyBvbmNlIHRoZSIsIm9uY2UgdGhlIG1haW50YWluZXIiLCJ0aGUgbWFpbnRhaW5lciBoYXMiLCJtYWludGFpbmVyIGhhcyBjb25maXJtZWQiLCJoYXMgY29uZmlybWVkIHRoYXQiLCJjb25maXJtZWQgdGhhdCBoZSIsInRoYXQgaGUgaGFzIiwiaGUgaGFzIHJlY2VpdmVkIiwiaGFzIHJlY2VpdmVkIHlvdXIiLCJyZWNlaXZlZCB5b3VyIGNoYW5nZXMiLCJ5b3VyIGNoYW5nZXMgdGhleSIsImNoYW5nZXMgdGhleSB3aWxsIiwidGhleSB3aWxsIG5vdCIsInRvIGJlIHNlbnQiLCJiZSBzZW50IGFnYWluIiwic2VudCBhZ2FpbiBiIiwiYWdhaW4gYiBpZiIsInJlY2VpdmVkIGEgbW9kaWZpZWQiLCJtb2RpZmllZCB2aW0gdGhhdCIsInZpbSB0aGF0IHdhcyIsInRoYXQgd2FzIGRpc3RyaWJ1dGVkIiwid2FzIGRpc3RyaWJ1dGVkIGFzIiwiZGlzdHJpYnV0ZWQgYXMgbWVudGlvbmVkIiwibWVudGlvbmVkIHVuZGVyIGEiLCJ1bmRlciBhIHlvdSIsImEgeW91IGFyZSIsImFsbG93ZWQgdG8gZnVydGhlciIsImZ1cnRoZXIgZGlzdHJpYnV0ZSBpdCIsImRpc3RyaWJ1dGUgaXQgdW5tb2RpZmllZCIsIml0IHVubW9kaWZpZWQgYXMiLCJ1bm1vZGlmaWVkIGFzIG1lbnRpb25lZCIsImFzIG1lbnRpb25lZCBhdCIsIm1lbnRpb25lZCBhdCBpIiwiYXQgaSBpZiIsInlvdSBtYWtlIGFkZGl0aW9uYWwiXX0seyJsaWNlbnNlVGV4dHMiOlsiVzNDwq4gU09GVFdBUkUgTk9USUNFIEFORCBMSUNFTlNFIENvcHlyaWdodCAoYykgMTk5NC0yMDAyIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL1xuXG5UaGlzIFczQyB3b3JrIChpbmNsdWRpbmcgc29mdHdhcmUsIGRvY3VtZW50cywgb3Igb3RoZXIgcmVsYXRlZCBpdGVtcykgaXMgYmVpbmcgcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZS4gQnkgb2J0YWluaW5nLCB1c2luZyBhbmQvb3IgY29weWluZyB0aGlzIHdvcmssIHlvdSAodGhlIGxpY2Vuc2VlKSBhZ3JlZSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QsIGFuZCB3aWxsIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnM6XG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIG9yIHJveWFsdHkgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBvbiBBTEwgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucywgdGhhdCB5b3UgbWFrZTpcblxuICAgMS4gVGhlIGZ1bGwgdGV4dCBvZiB0aGlzIE5PVElDRSBpbiBhIGxvY2F0aW9uIHZpZXdhYmxlIHRvIHVzZXJzIG9mIHRoZSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgd29yay5cblxuICAgMi4gQW55IHByZS1leGlzdGluZyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgZGlzY2xhaW1lcnMsIG5vdGljZXMsIG9yIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiBub25lIGV4aXN0LCBhIHNob3J0IG5vdGljZSBvZiB0aGUgZm9sbG93aW5nIGZvcm0gKGh5cGVydGV4dCBpcyBwcmVmZXJyZWQsIHRleHQgaXMgcGVybWl0dGVkKSBzaG91bGQgYmUgdXNlZCB3aXRoaW4gdGhlIGJvZHkgb2YgYW55IHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSBjb2RlOiBcIkNvcHlyaWdodCDCqSBbJGRhdGUtb2Ytc29mdHdhcmVdIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL1wiXG5cbiAgIDMuIE5vdGljZSBvZiBhbnkgY2hhbmdlcyBvciBtb2RpZmljYXRpb25zIHRvIHRoZSBXM0MgZmlsZXMsIGluY2x1ZGluZyB0aGUgZGF0ZSBjaGFuZ2VzIHdlcmUgbWFkZS4gKFdlIHJlY29tbWVuZCB5b3UgcHJvdmlkZSBVUklzIHRvIHRoZSBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBjb2RlIGlzIGRlcml2ZWQuKVxuXG5USElTIFNPRlRXQVJFIEFORCBET0NVTUVOVEFUSU9OIElTIFBST1ZJREVEIFwiQVMgSVMsXCIgQU5EIENPUFlSSUdIVCBIT0xERVJTIE1BS0UgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTywgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFBBVEVOVFMsIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLlxuXG5DT1BZUklHSFQgSE9MREVSUyBXSUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBBTlkgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OLlxuXG5UaGUgbmFtZSBhbmQgdHJhZGVtYXJrcyBvZiBjb3B5cmlnaHQgaG9sZGVycyBtYXkgTk9UIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0IGluIHRoaXMgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBhdCBhbGwgdGltZXMgcmVtYWluIHdpdGggY29weXJpZ2h0IGhvbGRlcnMuIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1xuXG5UaGlzIGZvcm11bGF0aW9uIG9mIFczQydzIG5vdGljZSBhbmQgbGljZW5zZSBiZWNhbWUgYWN0aXZlIG9uIEF1Z3VzdCAxNCAxOTk4IHNvIGFzIHRvIGltcHJvdmUgY29tcGF0aWJpbGl0eSB3aXRoIEdQTC4gVGhpcyB2ZXJzaW9uIGVuc3VyZXMgdGhhdCBXM0Mgc29mdHdhcmUgbGljZW5zaW5nIHRlcm1zIGFyZSBubyBtb3JlIHJlc3RyaWN0aXZlIHRoYW4gR1BMIGFuZCBjb25zZXF1ZW50bHkgVzNDIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCBpbiBHUEwgcGFja2FnZXMuIFNlZSB0aGUgb2xkZXIgZm9ybXVsYXRpb24gZm9yIHRoZSBwb2xpY3kgcHJpb3IgdG8gdGhpcyBkYXRlLiBQbGVhc2Ugc2VlIG91ciBDb3B5cmlnaHQgRkFRIGZvciBjb21tb24gcXVlc3Rpb25zIGFib3V0IHVzaW5nIG1hdGVyaWFscyBmcm9tIG91ciBzaXRlLCBpbmNsdWRpbmcgc3BlY2lmaWMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHBhY2thZ2VzIGxpa2UgbGlid3d3LCBBbWF5YSwgYW5kIEppZ3Nhdy4gT3RoZXIgcXVlc3Rpb25zIGFib3V0IHRoaXMgbm90aWNlIGNhbiBiZSBkaXJlY3RlZCB0byBzaXRlLXBvbGljeUB3My5vcmcuIl0sImxpY2Vuc2VJZHMiOlsiVzNDLTE5OTgwNzIwIl0sImtleXdvcmRzIjpbImFuZCBsaWNlbnNlIGNvcHlyaWdodCIsImMgMTk5NCAyMDAyIiwiMTk5NCAyMDAyIHdvcmxkIiwiMjAwMiB3b3JsZCB3aWRlIiwiY29uc29ydGl1bSBsZWdhbCB0aGlzIiwibGVnYWwgdGhpcyB3M2MiLCJ0aGlzIHczYyB3b3JrIiwidzNjIHdvcmsgaW5jbHVkaW5nIiwiZGF0ZSBvZiBzb2Z0d2FyZSIsIm9mIHNvZnR3YXJlIHdvcmxkIiwic29mdHdhcmUgd29ybGQgd2lkZSIsImNvbnNvcnRpdW0gbGVnYWwgMyIsImxlZ2FsIDMgbm90aWNlIiwidG8gdGhlIHczYyIsInRoZSB3M2MgZmlsZXMiLCJ3M2MgZmlsZXMgaW5jbHVkaW5nIiwiaG9sZGVycyB0aGlzIGZvcm11bGF0aW9uIiwiYWN0aXZlIG9uIGF1Z3VzdCIsIm9uIGF1Z3VzdCAxNCIsImF1Z3VzdCAxNCAxOTk4IiwiMTQgMTk5OCBzbyIsIjE5OTggc28gYXMiLCJhcyB0byBpbXByb3ZlIiwidG8gaW1wcm92ZSBjb21wYXRpYmlsaXR5IiwiaW1wcm92ZSBjb21wYXRpYmlsaXR5IHdpdGgiLCJjb21wYXRpYmlsaXR5IHdpdGggZ3BsIiwid2l0aCBncGwgdGhpcyIsImdwbCB0aGlzIHZlcnNpb24iLCJ0aGlzIHZlcnNpb24gZW5zdXJlcyIsInZlcnNpb24gZW5zdXJlcyB0aGF0IiwiZW5zdXJlcyB0aGF0IHczYyIsInRoYXQgdzNjIHNvZnR3YXJlIiwidzNjIHNvZnR3YXJlIGxpY2Vuc2luZyIsInNvZnR3YXJlIGxpY2Vuc2luZyB0ZXJtcyIsImxpY2Vuc2luZyB0ZXJtcyBhcmUiLCJ0ZXJtcyBhcmUgbm8iLCJhcmUgbm8gbW9yZSIsIm1vcmUgcmVzdHJpY3RpdmUgdGhhbiIsInJlc3RyaWN0aXZlIHRoYW4gZ3BsIiwidGhhbiBncGwgYW5kIiwiZ3BsIGFuZCBjb25zZXF1ZW50bHkiLCJhbmQgY29uc2VxdWVudGx5IHczYyIsImNvbnNlcXVlbnRseSB3M2Mgc29mdHdhcmUiLCJ3M2Mgc29mdHdhcmUgbWF5IiwiZGlzdHJpYnV0ZWQgaW4gZ3BsIiwiaW4gZ3BsIHBhY2thZ2VzIiwiZ3BsIHBhY2thZ2VzIHNlZSIsInBhY2thZ2VzIHNlZSB0aGUiLCJzZWUgdGhlIG9sZGVyIiwidGhlIG9sZGVyIGZvcm11bGF0aW9uIiwib2xkZXIgZm9ybXVsYXRpb24gZm9yIiwiZm9ybXVsYXRpb24gZm9yIHRoZSIsImZvciB0aGUgcG9saWN5IiwidGhlIHBvbGljeSBwcmlvciIsInBvbGljeSBwcmlvciB0byIsInByaW9yIHRvIHRoaXMiLCJ0byB0aGlzIGRhdGUiLCJ0aGlzIGRhdGUgcGxlYXNlIiwiZGF0ZSBwbGVhc2Ugc2VlIiwicGxlYXNlIHNlZSBvdXIiLCJzZWUgb3VyIGNvcHlyaWdodCIsIm91ciBjb3B5cmlnaHQgZmFxIiwiY29weXJpZ2h0IGZhcSBmb3IiLCJmYXEgZm9yIGNvbW1vbiIsImZvciBjb21tb24gcXVlc3Rpb25zIiwiY29tbW9uIHF1ZXN0aW9ucyBhYm91dCIsInF1ZXN0aW9ucyBhYm91dCB1c2luZyIsImFib3V0IHVzaW5nIG1hdGVyaWFscyIsInVzaW5nIG1hdGVyaWFscyBmcm9tIiwibWF0ZXJpYWxzIGZyb20gb3VyIiwiZnJvbSBvdXIgc2l0ZSIsIm91ciBzaXRlIGluY2x1ZGluZyIsInNpdGUgaW5jbHVkaW5nIHNwZWNpZmljIiwiaW5jbHVkaW5nIHNwZWNpZmljIHRlcm1zIiwiY29uZGl0aW9ucyBmb3IgcGFja2FnZXMiLCJmb3IgcGFja2FnZXMgbGlrZSIsInBhY2thZ2VzIGxpa2UgbGlid3d3IiwibGlrZSBsaWJ3d3cgYW1heWEiLCJsaWJ3d3cgYW1heWEgYW5kIiwiYW1heWEgYW5kIGppZ3NhdyIsImFuZCBqaWdzYXcgb3RoZXIiLCJqaWdzYXcgb3RoZXIgcXVlc3Rpb25zIiwib3RoZXIgcXVlc3Rpb25zIGFib3V0IiwicXVlc3Rpb25zIGFib3V0IHRoaXMiLCJhYm91dCB0aGlzIG5vdGljZSIsInRoaXMgbm90aWNlIGNhbiIsImNhbiBiZSBkaXJlY3RlZCIsImRpcmVjdGVkIHRvIHNpdGUiLCJ0byBzaXRlIHBvbGljeSIsInNpdGUgcG9saWN5IHczIiwicG9saWN5IHczIG9yZyIsIm5vdGljZSBhbmQgbGljZW5zZSBjb3B5cmlnaHQiLCJhbmQgbGljZW5zZSBjb3B5cmlnaHQgYyIsImxpY2Vuc2UgY29weXJpZ2h0IGMgMTk5NCIsImNvcHlyaWdodCBjIDE5OTQgMjAwMiIsImMgMTk5NCAyMDAyIHdvcmxkIiwiMTk5NCAyMDAyIHdvcmxkIHdpZGUiLCIyMDAyIHdvcmxkIHdpZGUgd2ViIiwib3JnIGNvbnNvcnRpdW0gbGVnYWwgdGhpcyIsImNvbnNvcnRpdW0gbGVnYWwgdGhpcyB3M2MiLCJsZWdhbCB0aGlzIHczYyB3b3JrIiwidGhpcyB3M2Mgd29yayBpbmNsdWRpbmciLCJ3M2Mgd29yayBpbmNsdWRpbmcgc29mdHdhcmUiLCJjb3B5cmlnaHQgZGF0ZSBvZiBzb2Z0d2FyZSIsImRhdGUgb2Ygc29mdHdhcmUgd29ybGQiLCJvZiBzb2Z0d2FyZSB3b3JsZCB3aWRlIiwic29mdHdhcmUgd29ybGQgd2lkZSB3ZWIiLCJvcmcgY29uc29ydGl1bSBsZWdhbCAzIiwiY29uc29ydGl1bSBsZWdhbCAzIG5vdGljZSIsImxlZ2FsIDMgbm90aWNlIG9mIiwibW9kaWZpY2F0aW9ucyB0byB0aGUgdzNjIiwidG8gdGhlIHczYyBmaWxlcyIsInRoZSB3M2MgZmlsZXMgaW5jbHVkaW5nIiwidzNjIGZpbGVzIGluY2x1ZGluZyB0aGUiLCJ3aXRoIGNvcHlyaWdodCBob2xkZXJzIHRoaXMiLCJjb3B5cmlnaHQgaG9sZGVycyB0aGlzIGZvcm11bGF0aW9uIiwiaG9sZGVycyB0aGlzIGZvcm11bGF0aW9uIG9mIiwiYmVjYW1lIGFjdGl2ZSBvbiBhdWd1c3QiLCJhY3RpdmUgb24gYXVndXN0IDE0Iiwib24gYXVndXN0IDE0IDE5OTgiLCJhdWd1c3QgMTQgMTk5OCBzbyIsIjE0IDE5OTggc28gYXMiLCIxOTk4IHNvIGFzIHRvIiwic28gYXMgdG8gaW1wcm92ZSIsImFzIHRvIGltcHJvdmUgY29tcGF0aWJpbGl0eSIsInRvIGltcHJvdmUgY29tcGF0aWJpbGl0eSB3aXRoIiwiaW1wcm92ZSBjb21wYXRpYmlsaXR5IHdpdGggZ3BsIiwiY29tcGF0aWJpbGl0eSB3aXRoIGdwbCB0aGlzIiwid2l0aCBncGwgdGhpcyB2ZXJzaW9uIiwiZ3BsIHRoaXMgdmVyc2lvbiBlbnN1cmVzIiwidGhpcyB2ZXJzaW9uIGVuc3VyZXMgdGhhdCIsInZlcnNpb24gZW5zdXJlcyB0aGF0IHczYyIsImVuc3VyZXMgdGhhdCB3M2Mgc29mdHdhcmUiLCJ0aGF0IHczYyBzb2Z0d2FyZSBsaWNlbnNpbmciLCJ3M2Mgc29mdHdhcmUgbGljZW5zaW5nIHRlcm1zIiwic29mdHdhcmUgbGljZW5zaW5nIHRlcm1zIGFyZSIsImxpY2Vuc2luZyB0ZXJtcyBhcmUgbm8iLCJ0ZXJtcyBhcmUgbm8gbW9yZSIsImFyZSBubyBtb3JlIHJlc3RyaWN0aXZlIiwibm8gbW9yZSByZXN0cmljdGl2ZSB0aGFuIiwibW9yZSByZXN0cmljdGl2ZSB0aGFuIGdwbCIsInJlc3RyaWN0aXZlIHRoYW4gZ3BsIGFuZCIsInRoYW4gZ3BsIGFuZCBjb25zZXF1ZW50bHkiLCJncGwgYW5kIGNvbnNlcXVlbnRseSB3M2MiLCJhbmQgY29uc2VxdWVudGx5IHczYyBzb2Z0d2FyZSIsImNvbnNlcXVlbnRseSB3M2Mgc29mdHdhcmUgbWF5IiwidzNjIHNvZnR3YXJlIG1heSBiZSIsIm1heSBiZSBkaXN0cmlidXRlZCBpbiIsImJlIGRpc3RyaWJ1dGVkIGluIGdwbCIsImRpc3RyaWJ1dGVkIGluIGdwbCBwYWNrYWdlcyIsImluIGdwbCBwYWNrYWdlcyBzZWUiLCJncGwgcGFja2FnZXMgc2VlIHRoZSIsInBhY2thZ2VzIHNlZSB0aGUgb2xkZXIiLCJzZWUgdGhlIG9sZGVyIGZvcm11bGF0aW9uIiwidGhlIG9sZGVyIGZvcm11bGF0aW9uIGZvciIsIm9sZGVyIGZvcm11bGF0aW9uIGZvciB0aGUiLCJmb3JtdWxhdGlvbiBmb3IgdGhlIHBvbGljeSIsImZvciB0aGUgcG9saWN5IHByaW9yIiwidGhlIHBvbGljeSBwcmlvciB0byIsInBvbGljeSBwcmlvciB0byB0aGlzIiwicHJpb3IgdG8gdGhpcyBkYXRlIiwidG8gdGhpcyBkYXRlIHBsZWFzZSIsInRoaXMgZGF0ZSBwbGVhc2Ugc2VlIiwiZGF0ZSBwbGVhc2Ugc2VlIG91ciIsInBsZWFzZSBzZWUgb3VyIGNvcHlyaWdodCIsInNlZSBvdXIgY29weXJpZ2h0IGZhcSIsIm91ciBjb3B5cmlnaHQgZmFxIGZvciIsImNvcHlyaWdodCBmYXEgZm9yIGNvbW1vbiIsImZhcSBmb3IgY29tbW9uIHF1ZXN0aW9ucyIsImZvciBjb21tb24gcXVlc3Rpb25zIGFib3V0IiwiY29tbW9uIHF1ZXN0aW9ucyBhYm91dCB1c2luZyIsInF1ZXN0aW9ucyBhYm91dCB1c2luZyBtYXRlcmlhbHMiLCJhYm91dCB1c2luZyBtYXRlcmlhbHMgZnJvbSIsInVzaW5nIG1hdGVyaWFscyBmcm9tIG91ciIsIm1hdGVyaWFscyBmcm9tIG91ciBzaXRlIiwiZnJvbSBvdXIgc2l0ZSBpbmNsdWRpbmciLCJvdXIgc2l0ZSBpbmNsdWRpbmcgc3BlY2lmaWMiLCJzaXRlIGluY2x1ZGluZyBzcGVjaWZpYyB0ZXJtcyIsImluY2x1ZGluZyBzcGVjaWZpYyB0ZXJtcyBhbmQiLCJhbmQgY29uZGl0aW9ucyBmb3IgcGFja2FnZXMiLCJjb25kaXRpb25zIGZvciBwYWNrYWdlcyBsaWtlIiwiZm9yIHBhY2thZ2VzIGxpa2UgbGlid3d3IiwicGFja2FnZXMgbGlrZSBsaWJ3d3cgYW1heWEiLCJsaWtlIGxpYnd3dyBhbWF5YSBhbmQiLCJsaWJ3d3cgYW1heWEgYW5kIGppZ3NhdyIsImFtYXlhIGFuZCBqaWdzYXcgb3RoZXIiLCJhbmQgamlnc2F3IG90aGVyIHF1ZXN0aW9ucyIsImppZ3NhdyBvdGhlciBxdWVzdGlvbnMgYWJvdXQiLCJvdGhlciBxdWVzdGlvbnMgYWJvdXQgdGhpcyIsInF1ZXN0aW9ucyBhYm91dCB0aGlzIG5vdGljZSIsImFib3V0IHRoaXMgbm90aWNlIGNhbiIsInRoaXMgbm90aWNlIGNhbiBiZSIsIm5vdGljZSBjYW4gYmUgZGlyZWN0ZWQiLCJjYW4gYmUgZGlyZWN0ZWQgdG8iLCJiZSBkaXJlY3RlZCB0byBzaXRlIiwiZGlyZWN0ZWQgdG8gc2l0ZSBwb2xpY3kiLCJ0byBzaXRlIHBvbGljeSB3MyIsInNpdGUgcG9saWN5IHczIG9yZyIsInNvZnR3YXJlIG5vdGljZSBhbmQgbGljZW5zZSBjb3B5cmlnaHQiLCJub3RpY2UgYW5kIGxpY2Vuc2UgY29weXJpZ2h0IGMiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhpcyB3b3JrIGlzIGJlaW5nIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2UuXG5cbkxpY2Vuc2VcblxuQnkgb2J0YWluaW5nIGFuZC9vciBjb3B5aW5nIHRoaXMgd29yaywgeW91ICh0aGUgbGljZW5zZWUpIGFncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cblxuUGVybWlzc2lvbiB0byBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgd29yaywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBvciByb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgb24gQUxMIGNvcGllcyBvZiB0aGUgd29yayBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9uczpcblxuICAg4oCiIFRoZSBmdWxsIHRleHQgb2YgdGhpcyBOT1RJQ0UgaW4gYSBsb2NhdGlvbiB2aWV3YWJsZSB0byB1c2VycyBvZiB0aGUgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIHdvcmsuXG5cbiAgIOKAoiBBbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIG5vbmUgZXhpc3QsIHRoZSBXM0MgU29mdHdhcmUgYW5kIERvY3VtZW50IFNob3J0IE5vdGljZSBzaG91bGQgYmUgaW5jbHVkZWQuXG5cbiAgIOKAoiBOb3RpY2Ugb2YgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucywgdGhyb3VnaCBhIGNvcHlyaWdodCBzdGF0ZW1lbnQgb24gdGhlIG5ldyBjb2RlIG9yIGRvY3VtZW50IHN1Y2ggYXMgXCJUaGlzIHNvZnR3YXJlIG9yIGRvY3VtZW50IGluY2x1ZGVzIG1hdGVyaWFsIGNvcGllZCBmcm9tIG9yIGRlcml2ZWQgZnJvbSBbdGl0bGUgYW5kIFVSSSBvZiB0aGUgVzNDIGRvY3VtZW50XS4gQ29weXJpZ2h0IChjKSBbWUVBUl0gVzNDwq4gKE1JVCwgRVJDSU0sIEtlaW8sIEJlaWhhbmcpLlwiXG5cbkRpc2NsYWltZXJzXG5cblRISVMgV09SSyBJUyBQUk9WSURFRCBcIkFTIElTLFwiIEFORCBDT1BZUklHSFQgSE9MREVSUyBNQUtFIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVCBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUEFURU5UUywgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMuXG5cbkNPUFlSSUdIVCBIT0xERVJTIFdJTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIEFOWSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5ULlxuXG5UaGUgbmFtZSBhbmQgdHJhZGVtYXJrcyBvZiBjb3B5cmlnaHQgaG9sZGVycyBtYXkgTk9UIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gdGhlIHdvcmsgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBUaXRsZSB0byBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrIHdpbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIGNvcHlyaWdodCBob2xkZXJzLiJdLCJsaWNlbnNlSWRzIjpbIlczQy0yMDE1MDUxMyJdLCJrZXl3b3JkcyI6WyJ3b3JrIGlzIGJlaW5nIiwiYnkgb2J0YWluaW5nIGFuZCIsIm9idGFpbmluZyBhbmQgb3IiLCJkaXN0cmlidXRlIHRoaXMgd29yayIsInRoaXMgd29yayB3aXRoIiwid29yayB3aXRoIG9yIiwidzNjIHNvZnR3YXJlIGFuZCIsInNvZnR3YXJlIGFuZCBkb2N1bWVudCIsImFuZCBkb2N1bWVudCBzaG9ydCIsImRvY3VtZW50IHNob3J0IG5vdGljZSIsImJlIGluY2x1ZGVkIG5vdGljZSIsImluY2x1ZGVkIG5vdGljZSBvZiIsIm9yIG1vZGlmaWNhdGlvbnMgdGhyb3VnaCIsIm1vZGlmaWNhdGlvbnMgdGhyb3VnaCBhIiwidGhyb3VnaCBhIGNvcHlyaWdodCIsImEgY29weXJpZ2h0IHN0YXRlbWVudCIsImNvcHlyaWdodCBzdGF0ZW1lbnQgb24iLCJzdGF0ZW1lbnQgb24gdGhlIiwib24gdGhlIG5ldyIsInRoZSBuZXcgY29kZSIsIm5ldyBjb2RlIG9yIiwiY29kZSBvciBkb2N1bWVudCIsIm9yIGRvY3VtZW50IHN1Y2giLCJkb2N1bWVudCBzdWNoIGFzIiwib3IgZG9jdW1lbnQgaW5jbHVkZXMiLCJkb2N1bWVudCBpbmNsdWRlcyBtYXRlcmlhbCIsImluY2x1ZGVzIG1hdGVyaWFsIGNvcGllZCIsImNvcGllZCBmcm9tIG9yIiwiZnJvbSBvciBkZXJpdmVkIiwiZGVyaXZlZCBmcm9tIHRpdGxlIiwiZnJvbSB0aXRsZSBhbmQiLCJ0aXRsZSBhbmQgdXJpIiwiYW5kIHVyaSBvZiIsInRoZSB3M2MgZG9jdW1lbnQiLCJ3M2MgZG9jdW1lbnQgY29weXJpZ2h0IiwiZG9jdW1lbnQgY29weXJpZ2h0IGMiLCJjIHllYXIgdzNjIiwieWVhciB3M2MgbWl0IiwidzNjIG1pdCBlcmNpbSIsIm1pdCBlcmNpbSBrZWlvIiwiZXJjaW0ga2VpbyBiZWloYW5nIiwia2VpbyBiZWloYW5nIGRpc2NsYWltZXJzIiwiYmVpaGFuZyBkaXNjbGFpbWVycyB0aGlzIiwiZGlzY2xhaW1lcnMgdGhpcyB3b3JrIiwib3IgZG9jdW1lbnQgd2lsbCIsImRvY3VtZW50IHdpbGwgbm90Iiwib3IgZG9jdW1lbnQgdGhlIiwiZG9jdW1lbnQgdGhlIG5hbWUiLCJ3b3JrIHdpdGhvdXQgc3BlY2lmaWMiLCJ0aGlzIHdvcmsgd2lsbCIsIndvcmsgd2lsbCBhdCIsInRoaXMgd29yayBpcyBiZWluZyIsIndvcmsgaXMgYmVpbmcgcHJvdmlkZWQiLCJsaWNlbnNlIGJ5IG9idGFpbmluZyBhbmQiLCJieSBvYnRhaW5pbmcgYW5kIG9yIiwib2J0YWluaW5nIGFuZCBvciBjb3B5aW5nIiwiYW5kIGRpc3RyaWJ1dGUgdGhpcyB3b3JrIiwiZGlzdHJpYnV0ZSB0aGlzIHdvcmsgd2l0aCIsInRoaXMgd29yayB3aXRoIG9yIiwid29yayB3aXRoIG9yIHdpdGhvdXQiLCJ0aGUgd29yayBvciBwb3J0aW9ucyIsInRoZSB3M2Mgc29mdHdhcmUgYW5kIiwidzNjIHNvZnR3YXJlIGFuZCBkb2N1bWVudCIsInNvZnR3YXJlIGFuZCBkb2N1bWVudCBzaG9ydCIsImFuZCBkb2N1bWVudCBzaG9ydCBub3RpY2UiLCJkb2N1bWVudCBzaG9ydCBub3RpY2Ugc2hvdWxkIiwic2hvdWxkIGJlIGluY2x1ZGVkIG5vdGljZSIsImJlIGluY2x1ZGVkIG5vdGljZSBvZiIsImluY2x1ZGVkIG5vdGljZSBvZiBhbnkiLCJjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMgdGhyb3VnaCIsIm9yIG1vZGlmaWNhdGlvbnMgdGhyb3VnaCBhIiwibW9kaWZpY2F0aW9ucyB0aHJvdWdoIGEgY29weXJpZ2h0IiwidGhyb3VnaCBhIGNvcHlyaWdodCBzdGF0ZW1lbnQiLCJhIGNvcHlyaWdodCBzdGF0ZW1lbnQgb24iLCJjb3B5cmlnaHQgc3RhdGVtZW50IG9uIHRoZSIsInN0YXRlbWVudCBvbiB0aGUgbmV3Iiwib24gdGhlIG5ldyBjb2RlIiwidGhlIG5ldyBjb2RlIG9yIiwibmV3IGNvZGUgb3IgZG9jdW1lbnQiLCJjb2RlIG9yIGRvY3VtZW50IHN1Y2giLCJvciBkb2N1bWVudCBzdWNoIGFzIiwiZG9jdW1lbnQgc3VjaCBhcyB0aGlzIiwic3VjaCBhcyB0aGlzIHNvZnR3YXJlIiwiYXMgdGhpcyBzb2Z0d2FyZSBvciIsInRoaXMgc29mdHdhcmUgb3IgZG9jdW1lbnQiLCJzb2Z0d2FyZSBvciBkb2N1bWVudCBpbmNsdWRlcyIsIm9yIGRvY3VtZW50IGluY2x1ZGVzIG1hdGVyaWFsIiwiZG9jdW1lbnQgaW5jbHVkZXMgbWF0ZXJpYWwgY29waWVkIiwiaW5jbHVkZXMgbWF0ZXJpYWwgY29waWVkIGZyb20iLCJtYXRlcmlhbCBjb3BpZWQgZnJvbSBvciIsImNvcGllZCBmcm9tIG9yIGRlcml2ZWQiLCJmcm9tIG9yIGRlcml2ZWQgZnJvbSIsIm9yIGRlcml2ZWQgZnJvbSB0aXRsZSIsImRlcml2ZWQgZnJvbSB0aXRsZSBhbmQiLCJmcm9tIHRpdGxlIGFuZCB1cmkiLCJ0aXRsZSBhbmQgdXJpIG9mIiwiYW5kIHVyaSBvZiB0aGUiLCJ1cmkgb2YgdGhlIHczYyIsIm9mIHRoZSB3M2MgZG9jdW1lbnQiLCJ0aGUgdzNjIGRvY3VtZW50IGNvcHlyaWdodCIsInczYyBkb2N1bWVudCBjb3B5cmlnaHQgYyIsImRvY3VtZW50IGNvcHlyaWdodCBjIHllYXIiLCJjb3B5cmlnaHQgYyB5ZWFyIHczYyIsImMgeWVhciB3M2MgbWl0IiwieWVhciB3M2MgbWl0IGVyY2ltIiwidzNjIG1pdCBlcmNpbSBrZWlvIiwibWl0IGVyY2ltIGtlaW8gYmVpaGFuZyIsImVyY2ltIGtlaW8gYmVpaGFuZyBkaXNjbGFpbWVycyIsImtlaW8gYmVpaGFuZyBkaXNjbGFpbWVycyB0aGlzIiwiYmVpaGFuZyBkaXNjbGFpbWVycyB0aGlzIHdvcmsiLCJkaXNjbGFpbWVycyB0aGlzIHdvcmsgaXMiLCJzb2Z0d2FyZSBvciBkb2N1bWVudCB3aWxsIiwib3IgZG9jdW1lbnQgd2lsbCBub3QiLCJkb2N1bWVudCB3aWxsIG5vdCBpbmZyaW5nZSIsInNvZnR3YXJlIG9yIGRvY3VtZW50IHRoZSIsIm9yIGRvY3VtZW50IHRoZSBuYW1lIiwiZG9jdW1lbnQgdGhlIG5hbWUgYW5kIiwicGVydGFpbmluZyB0byB0aGUgd29yayIsInRvIHRoZSB3b3JrIHdpdGhvdXQiLCJ0aGUgd29yayB3aXRob3V0IHNwZWNpZmljIiwid29yayB3aXRob3V0IHNwZWNpZmljIHdyaXR0ZW4iLCJjb3B5cmlnaHQgaW4gdGhpcyB3b3JrIiwiaW4gdGhpcyB3b3JrIHdpbGwiLCJ0aGlzIHdvcmsgd2lsbCBhdCIsIndvcmsgd2lsbCBhdCBhbGwiLCJ0aGlzIHdvcmsgaXMgYmVpbmcgcHJvdmlkZWQiLCJ3b3JrIGlzIGJlaW5nIHByb3ZpZGVkIGJ5IiwibGljZW5zZSBsaWNlbnNlIGJ5IG9idGFpbmluZyBhbmQiLCJsaWNlbnNlIGJ5IG9idGFpbmluZyBhbmQgb3IiLCJieSBvYnRhaW5pbmcgYW5kIG9yIGNvcHlpbmciLCJvYnRhaW5pbmcgYW5kIG9yIGNvcHlpbmcgdGhpcyIsIm1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGlzIHdvcmsiLCJhbmQgZGlzdHJpYnV0ZSB0aGlzIHdvcmsgd2l0aCIsImRpc3RyaWJ1dGUgdGhpcyB3b3JrIHdpdGggb3IiLCJ0aGlzIHdvcmsgd2l0aCBvciB3aXRob3V0Iiwid29yayB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uIiwiYWxsIGNvcGllcyBvZiB0aGUgd29yayIsIm9mIHRoZSB3b3JrIG9yIHBvcnRpb25zIiwidGhlIHdvcmsgb3IgcG9ydGlvbnMgdGhlcmVvZiIsImV4aXN0IHRoZSB3M2Mgc29mdHdhcmUgYW5kIiwidGhlIHczYyBzb2Z0d2FyZSBhbmQgZG9jdW1lbnQiLCJ3M2Mgc29mdHdhcmUgYW5kIGRvY3VtZW50IHNob3J0Iiwic29mdHdhcmUgYW5kIGRvY3VtZW50IHNob3J0IG5vdGljZSIsImFuZCBkb2N1bWVudCBzaG9ydCBub3RpY2Ugc2hvdWxkIiwiZG9jdW1lbnQgc2hvcnQgbm90aWNlIHNob3VsZCBiZSIsIm5vdGljZSBzaG91bGQgYmUgaW5jbHVkZWQgbm90aWNlIiwic2hvdWxkIGJlIGluY2x1ZGVkIG5vdGljZSBvZiIsImJlIGluY2x1ZGVkIG5vdGljZSBvZiBhbnkiLCJpbmNsdWRlZCBub3RpY2Ugb2YgYW55IGNoYW5nZXMiLCJhbnkgY2hhbmdlcyBvciBtb2RpZmljYXRpb25zIHRocm91Z2giLCJjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMgdGhyb3VnaCBhIiwib3IgbW9kaWZpY2F0aW9ucyB0aHJvdWdoIGEgY29weXJpZ2h0IiwibW9kaWZpY2F0aW9ucyB0aHJvdWdoIGEgY29weXJpZ2h0IHN0YXRlbWVudCIsInRocm91Z2ggYSBjb3B5cmlnaHQgc3RhdGVtZW50IG9uIiwiYSBjb3B5cmlnaHQgc3RhdGVtZW50IG9uIHRoZSIsImNvcHlyaWdodCBzdGF0ZW1lbnQgb24gdGhlIG5ldyIsInN0YXRlbWVudCBvbiB0aGUgbmV3IGNvZGUiLCJvbiB0aGUgbmV3IGNvZGUgb3IiLCJ0aGUgbmV3IGNvZGUgb3IgZG9jdW1lbnQiLCJuZXcgY29kZSBvciBkb2N1bWVudCBzdWNoIiwiY29kZSBvciBkb2N1bWVudCBzdWNoIGFzIiwib3IgZG9jdW1lbnQgc3VjaCBhcyB0aGlzIiwiZG9jdW1lbnQgc3VjaCBhcyB0aGlzIHNvZnR3YXJlIiwic3VjaCBhcyB0aGlzIHNvZnR3YXJlIG9yIiwiYXMgdGhpcyBzb2Z0d2FyZSBvciBkb2N1bWVudCIsInRoaXMgc29mdHdhcmUgb3IgZG9jdW1lbnQgaW5jbHVkZXMiLCJzb2Z0d2FyZSBvciBkb2N1bWVudCBpbmNsdWRlcyBtYXRlcmlhbCIsIm9yIGRvY3VtZW50IGluY2x1ZGVzIG1hdGVyaWFsIGNvcGllZCIsImRvY3VtZW50IGluY2x1ZGVzIG1hdGVyaWFsIGNvcGllZCBmcm9tIiwiaW5jbHVkZXMgbWF0ZXJpYWwgY29waWVkIGZyb20gb3IiLCJtYXRlcmlhbCBjb3BpZWQgZnJvbSBvciBkZXJpdmVkIiwiY29waWVkIGZyb20gb3IgZGVyaXZlZCBmcm9tIiwiZnJvbSBvciBkZXJpdmVkIGZyb20gdGl0bGUiLCJvciBkZXJpdmVkIGZyb20gdGl0bGUgYW5kIiwiZGVyaXZlZCBmcm9tIHRpdGxlIGFuZCB1cmkiLCJmcm9tIHRpdGxlIGFuZCB1cmkgb2YiLCJ0aXRsZSBhbmQgdXJpIG9mIHRoZSIsImFuZCB1cmkgb2YgdGhlIHczYyIsInVyaSBvZiB0aGUgdzNjIGRvY3VtZW50Iiwib2YgdGhlIHczYyBkb2N1bWVudCBjb3B5cmlnaHQiLCJ0aGUgdzNjIGRvY3VtZW50IGNvcHlyaWdodCBjIiwidzNjIGRvY3VtZW50IGNvcHlyaWdodCBjIHllYXIiLCJkb2N1bWVudCBjb3B5cmlnaHQgYyB5ZWFyIHczYyIsImNvcHlyaWdodCBjIHllYXIgdzNjIG1pdCIsImMgeWVhciB3M2MgbWl0IGVyY2ltIiwieWVhciB3M2MgbWl0IGVyY2ltIGtlaW8iLCJ3M2MgbWl0IGVyY2ltIGtlaW8gYmVpaGFuZyIsIm1pdCBlcmNpbSBrZWlvIGJlaWhhbmcgZGlzY2xhaW1lcnMiLCJlcmNpbSBrZWlvIGJlaWhhbmcgZGlzY2xhaW1lcnMgdGhpcyIsImtlaW8gYmVpaGFuZyBkaXNjbGFpbWVycyB0aGlzIHdvcmsiLCJiZWloYW5nIGRpc2NsYWltZXJzIHRoaXMgd29yayBpcyIsImRpc2NsYWltZXJzIHRoaXMgd29yayBpcyBwcm92aWRlZCIsInRoZSBzb2Z0d2FyZSBvciBkb2N1bWVudCB3aWxsIiwic29mdHdhcmUgb3IgZG9jdW1lbnQgd2lsbCBub3QiLCJvciBkb2N1bWVudCB3aWxsIG5vdCBpbmZyaW5nZSIsImRvY3VtZW50IHdpbGwgbm90IGluZnJpbmdlIGFueSIsInRoZSBzb2Z0d2FyZSBvciBkb2N1bWVudCB0aGUiLCJzb2Z0d2FyZSBvciBkb2N1bWVudCB0aGUgbmFtZSIsIm9yIGRvY3VtZW50IHRoZSBuYW1lIGFuZCIsImRvY3VtZW50IHRoZSBuYW1lIGFuZCB0cmFkZW1hcmtzIl19LHsibGljZW5zZVRleHRzIjpbIlczQyBTT0ZUV0FSRSBOT1RJQ0UgQU5EIExJQ0VOU0VcblxuVGhpcyB3b3JrIChhbmQgaW5jbHVkZWQgc29mdHdhcmUsIGRvY3VtZW50YXRpb24gc3VjaCBhcyBSRUFETUVzLCBvciBvdGhlciByZWxhdGVkIGl0ZW1zKSBpcyBiZWluZyBwcm92aWRlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlLlxuXG5MaWNlbnNlXG5cbkJ5IG9idGFpbmluZywgdXNpbmcgYW5kL29yIGNvcHlpbmcgdGhpcyB3b3JrLCB5b3UgKHRoZSBsaWNlbnNlZSkgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgd2lsbCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLlxuXG5QZXJtaXNzaW9uIHRvIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgb3Igcm95YWx0eSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG9uIEFMTCBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluY2x1ZGluZyBtb2RpZmljYXRpb25zOlxuXG5UaGUgZnVsbCB0ZXh0IG9mIHRoaXMgTk9USUNFIGluIGEgbG9jYXRpb24gdmlld2FibGUgdG8gdXNlcnMgb2YgdGhlIHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSB3b3JrLlxuXG5BbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIG5vbmUgZXhpc3QsIHRoZSBXM0MgU29mdHdhcmUgU2hvcnQgTm90aWNlIHNob3VsZCBiZSBpbmNsdWRlZCAoaHlwZXJ0ZXh0IGlzIHByZWZlcnJlZCwgdGV4dCBpcyBwZXJtaXR0ZWQpIHdpdGhpbiB0aGUgYm9keSBvZiBhbnkgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIGNvZGUuXG5cbk5vdGljZSBvZiBhbnkgY2hhbmdlcyBvciBtb2RpZmljYXRpb25zIHRvIHRoZSBmaWxlcywgaW5jbHVkaW5nIHRoZSBkYXRlIGNoYW5nZXMgd2VyZSBtYWRlLiAoV2UgcmVjb21tZW5kIHlvdSBwcm92aWRlIFVSSXMgdG8gdGhlIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGNvZGUgaXMgZGVyaXZlZC4pXG5cbkRpc2NsYWltZXJzXG5cblRISVMgU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04gSVMgUFJPVklERUQgXCJBUyBJUyxcIiBBTkQgQ09QWVJJR0hUIEhPTERFUlMgTUFLRSBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTiBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUEFURU5UUywgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMuXG5cbkNPUFlSSUdIVCBIT0xERVJTIFdJTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIEFOWSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04uXG5cblRoZSBuYW1lIGFuZCB0cmFkZW1hcmtzIG9mIGNvcHlyaWdodCBob2xkZXJzIG1heSBOT1QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBUaXRsZSB0byBjb3B5cmlnaHQgaW4gdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB3aWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQgaG9sZGVycy4gTm90ZXNcblxuVGhpcyB2ZXJzaW9uOiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxXG5cblRoaXMgZm9ybXVsYXRpb24gb2YgVzNDJ3Mgbm90aWNlIGFuZCBsaWNlbnNlIGJlY2FtZSBhY3RpdmUgb24gRGVjZW1iZXIgMzEgMjAwMi4gVGhpcyB2ZXJzaW9uIHJlbW92ZXMgdGhlIGNvcHlyaWdodCBvd25lcnNoaXAgbm90aWNlIHN1Y2ggdGhhdCB0aGlzIGxpY2Vuc2UgY2FuIGJlIHVzZWQgd2l0aCBtYXRlcmlhbHMgb3RoZXIgdGhhbiB0aG9zZSBvd25lZCBieSB0aGUgVzNDLCByZWZsZWN0cyB0aGF0IEVSQ0lNIGlzIG5vdyBhIGhvc3Qgb2YgdGhlIFczQywgaW5jbHVkZXMgcmVmZXJlbmNlcyB0byB0aGlzIHNwZWNpZmljIGRhdGVkIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UsIGFuZCByZW1vdmVzIHRoZSBhbWJpZ3VvdXMgZ3JhbnQgb2YgXCJ1c2VcIi4gT3RoZXJ3aXNlLCB0aGlzIHZlcnNpb24gaXMgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHZlcnNpb24gYW5kIGlzIHdyaXR0ZW4gc28gYXMgdG8gcHJlc2VydmUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbidzIGFzc2Vzc21lbnQgb2YgR1BMIGNvbXBhdGliaWxpdHkgYW5kIE9TSSdzIGNlcnRpZmljYXRpb24gdW5kZXIgdGhlIE9wZW4gU291cmNlIERlZmluaXRpb24uIl0sImxpY2Vuc2VJZHMiOlsiVzNDIl0sImtleXdvcmRzIjpbImxpY2Vuc2UgdGhpcyB3b3JrIiwid29yayBhbmQgaW5jbHVkZWQiLCJhbmQgaW5jbHVkZWQgc29mdHdhcmUiLCJpbmNsdWRlZCBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uIiwic29mdHdhcmUgZG9jdW1lbnRhdGlvbiBzdWNoIiwiZG9jdW1lbnRhdGlvbiBzdWNoIGFzIiwic3VjaCBhcyByZWFkbWVzIiwiYXMgcmVhZG1lcyBvciIsInJlYWRtZXMgb3Igb3RoZXIiLCJ3M2Mgc29mdHdhcmUgc2hvcnQiLCJzb2Z0d2FyZSBzaG9ydCBub3RpY2UiLCJiZSBpbmNsdWRlZCBoeXBlcnRleHQiLCJpbmNsdWRlZCBoeXBlcnRleHQgaXMiLCJpcyBwZXJtaXR0ZWQgd2l0aGluIiwicGVybWl0dGVkIHdpdGhpbiB0aGUiLCJkZXJpdmF0aXZlIGNvZGUgbm90aWNlIiwiY29kZSBub3RpY2Ugb2YiLCJ0byB0aGUgZmlsZXMiLCJ0aGUgZmlsZXMgaW5jbHVkaW5nIiwiaXMgZGVyaXZlZCBkaXNjbGFpbWVycyIsImRlcml2ZWQgZGlzY2xhaW1lcnMgdGhpcyIsImRpc2NsYWltZXJzIHRoaXMgc29mdHdhcmUiLCJjb3B5cmlnaHQgaG9sZGVycyBub3RlcyIsImhvbGRlcnMgbm90ZXMgdGhpcyIsIm5vdGVzIHRoaXMgdmVyc2lvbiIsInRoaXMgdmVyc2lvbiBodHRwIiwidmVyc2lvbiBodHRwIHd3dyIsImNvbnNvcnRpdW0gbGVnYWwgMjAwMiIsImxlZ2FsIDIwMDIgY29weXJpZ2h0IiwiMjAwMiBjb3B5cmlnaHQgc29mdHdhcmUiLCJjb3B5cmlnaHQgc29mdHdhcmUgMjAwMjEyMzEiLCJzb2Z0d2FyZSAyMDAyMTIzMSB0aGlzIiwiMjAwMjEyMzEgdGhpcyBmb3JtdWxhdGlvbiIsImFjdGl2ZSBvbiBkZWNlbWJlciIsIm9uIGRlY2VtYmVyIDMxIiwiZGVjZW1iZXIgMzEgMjAwMiIsIjMxIDIwMDIgdGhpcyIsIjIwMDIgdGhpcyB2ZXJzaW9uIiwidGhpcyB2ZXJzaW9uIHJlbW92ZXMiLCJ2ZXJzaW9uIHJlbW92ZXMgdGhlIiwicmVtb3ZlcyB0aGUgY29weXJpZ2h0IiwidGhlIGNvcHlyaWdodCBvd25lcnNoaXAiLCJjb3B5cmlnaHQgb3duZXJzaGlwIG5vdGljZSIsIm93bmVyc2hpcCBub3RpY2Ugc3VjaCIsIm5vdGljZSBzdWNoIHRoYXQiLCJzdWNoIHRoYXQgdGhpcyIsInVzZWQgd2l0aCBtYXRlcmlhbHMiLCJ3aXRoIG1hdGVyaWFscyBvdGhlciIsIm1hdGVyaWFscyBvdGhlciB0aGFuIiwidGhhbiB0aG9zZSBvd25lZCIsInRob3NlIG93bmVkIGJ5IiwiYnkgdGhlIHczYyIsInRoZSB3M2MgcmVmbGVjdHMiLCJ3M2MgcmVmbGVjdHMgdGhhdCIsInJlZmxlY3RzIHRoYXQgZXJjaW0iLCJ0aGF0IGVyY2ltIGlzIiwiZXJjaW0gaXMgbm93IiwiaXMgbm93IGEiLCJub3cgYSBob3N0IiwiYSBob3N0IG9mIiwiaG9zdCBvZiB0aGUiLCJ0aGUgdzNjIGluY2x1ZGVzIiwidzNjIGluY2x1ZGVzIHJlZmVyZW5jZXMiLCJpbmNsdWRlcyByZWZlcmVuY2VzIHRvIiwidG8gdGhpcyBzcGVjaWZpYyIsInRoaXMgc3BlY2lmaWMgZGF0ZWQiLCJzcGVjaWZpYyBkYXRlZCB2ZXJzaW9uIiwiZGF0ZWQgdmVyc2lvbiBvZiIsImxpY2Vuc2UgYW5kIHJlbW92ZXMiLCJhbmQgcmVtb3ZlcyB0aGUiLCJyZW1vdmVzIHRoZSBhbWJpZ3VvdXMiLCJ0aGUgYW1iaWd1b3VzIGdyYW50IiwiYW1iaWd1b3VzIGdyYW50IG9mIiwiZ3JhbnQgb2YgdXNlIiwib2YgdXNlIG90aGVyd2lzZSIsInVzZSBvdGhlcndpc2UgdGhpcyIsIm90aGVyd2lzZSB0aGlzIHZlcnNpb24iLCJ0aGlzIHZlcnNpb24gaXMiLCJ2ZXJzaW9uIGlzIHRoZSIsInNhbWUgYXMgdGhlIiwiYXMgdGhlIHByZXZpb3VzIiwidGhlIHByZXZpb3VzIHZlcnNpb24iLCJwcmV2aW91cyB2ZXJzaW9uIGFuZCIsInZlcnNpb24gYW5kIGlzIiwiYW5kIGlzIHdyaXR0ZW4iLCJpcyB3cml0dGVuIHNvIiwicHJlc2VydmUgdGhlIGZyZWUiLCJmb3VuZGF0aW9uIHMgYXNzZXNzbWVudCIsInMgYXNzZXNzbWVudCBvZiIsImFzc2Vzc21lbnQgb2YgZ3BsIiwib2YgZ3BsIGNvbXBhdGliaWxpdHkiLCJncGwgY29tcGF0aWJpbGl0eSBhbmQiLCJjb21wYXRpYmlsaXR5IGFuZCBvc2kiLCJhbmQgb3NpIHMiLCJvc2kgcyBjZXJ0aWZpY2F0aW9uIiwicyBjZXJ0aWZpY2F0aW9uIHVuZGVyIiwiY2VydGlmaWNhdGlvbiB1bmRlciB0aGUiLCJub3RpY2UgYW5kIGxpY2Vuc2UgdGhpcyIsImFuZCBsaWNlbnNlIHRoaXMgd29yayIsImxpY2Vuc2UgdGhpcyB3b3JrIGFuZCIsInRoaXMgd29yayBhbmQgaW5jbHVkZWQiLCJ3b3JrIGFuZCBpbmNsdWRlZCBzb2Z0d2FyZSIsImFuZCBpbmNsdWRlZCBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uIiwiaW5jbHVkZWQgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiBzdWNoIiwic29mdHdhcmUgZG9jdW1lbnRhdGlvbiBzdWNoIGFzIiwiZG9jdW1lbnRhdGlvbiBzdWNoIGFzIHJlYWRtZXMiLCJzdWNoIGFzIHJlYWRtZXMgb3IiLCJhcyByZWFkbWVzIG9yIG90aGVyIiwicmVhZG1lcyBvciBvdGhlciByZWxhdGVkIiwidGhlIHczYyBzb2Z0d2FyZSBzaG9ydCIsInczYyBzb2Z0d2FyZSBzaG9ydCBub3RpY2UiLCJzb2Z0d2FyZSBzaG9ydCBub3RpY2Ugc2hvdWxkIiwic2hvdWxkIGJlIGluY2x1ZGVkIGh5cGVydGV4dCIsImJlIGluY2x1ZGVkIGh5cGVydGV4dCBpcyIsImluY2x1ZGVkIGh5cGVydGV4dCBpcyBwcmVmZXJyZWQiLCJ0ZXh0IGlzIHBlcm1pdHRlZCB3aXRoaW4iLCJpcyBwZXJtaXR0ZWQgd2l0aGluIHRoZSIsInBlcm1pdHRlZCB3aXRoaW4gdGhlIGJvZHkiLCJvciBkZXJpdmF0aXZlIGNvZGUgbm90aWNlIiwiZGVyaXZhdGl2ZSBjb2RlIG5vdGljZSBvZiIsImNvZGUgbm90aWNlIG9mIGFueSIsIm1vZGlmaWNhdGlvbnMgdG8gdGhlIGZpbGVzIiwidG8gdGhlIGZpbGVzIGluY2x1ZGluZyIsInRoZSBmaWxlcyBpbmNsdWRpbmcgdGhlIiwiY29kZSBpcyBkZXJpdmVkIGRpc2NsYWltZXJzIiwiaXMgZGVyaXZlZCBkaXNjbGFpbWVycyB0aGlzIiwiZGVyaXZlZCBkaXNjbGFpbWVycyB0aGlzIHNvZnR3YXJlIiwiZGlzY2xhaW1lcnMgdGhpcyBzb2Z0d2FyZSBhbmQiLCJ3aXRoIGNvcHlyaWdodCBob2xkZXJzIG5vdGVzIiwiY29weXJpZ2h0IGhvbGRlcnMgbm90ZXMgdGhpcyIsImhvbGRlcnMgbm90ZXMgdGhpcyB2ZXJzaW9uIiwibm90ZXMgdGhpcyB2ZXJzaW9uIGh0dHAiLCJ0aGlzIHZlcnNpb24gaHR0cCB3d3ciLCJ2ZXJzaW9uIGh0dHAgd3d3IHczIiwib3JnIGNvbnNvcnRpdW0gbGVnYWwgMjAwMiIsImNvbnNvcnRpdW0gbGVnYWwgMjAwMiBjb3B5cmlnaHQiLCJsZWdhbCAyMDAyIGNvcHlyaWdodCBzb2Z0d2FyZSIsIjIwMDIgY29weXJpZ2h0IHNvZnR3YXJlIDIwMDIxMjMxIiwiY29weXJpZ2h0IHNvZnR3YXJlIDIwMDIxMjMxIHRoaXMiLCJzb2Z0d2FyZSAyMDAyMTIzMSB0aGlzIGZvcm11bGF0aW9uIiwiMjAwMjEyMzEgdGhpcyBmb3JtdWxhdGlvbiBvZiIsImJlY2FtZSBhY3RpdmUgb24gZGVjZW1iZXIiLCJhY3RpdmUgb24gZGVjZW1iZXIgMzEiLCJvbiBkZWNlbWJlciAzMSAyMDAyIiwiZGVjZW1iZXIgMzEgMjAwMiB0aGlzIiwiMzEgMjAwMiB0aGlzIHZlcnNpb24iLCIyMDAyIHRoaXMgdmVyc2lvbiByZW1vdmVzIiwidGhpcyB2ZXJzaW9uIHJlbW92ZXMgdGhlIiwidmVyc2lvbiByZW1vdmVzIHRoZSBjb3B5cmlnaHQiLCJyZW1vdmVzIHRoZSBjb3B5cmlnaHQgb3duZXJzaGlwIiwidGhlIGNvcHlyaWdodCBvd25lcnNoaXAgbm90aWNlIiwiY29weXJpZ2h0IG93bmVyc2hpcCBub3RpY2Ugc3VjaCIsIm93bmVyc2hpcCBub3RpY2Ugc3VjaCB0aGF0Iiwibm90aWNlIHN1Y2ggdGhhdCB0aGlzIiwic3VjaCB0aGF0IHRoaXMgbGljZW5zZSIsInRoYXQgdGhpcyBsaWNlbnNlIGNhbiIsImNhbiBiZSB1c2VkIHdpdGgiLCJiZSB1c2VkIHdpdGggbWF0ZXJpYWxzIiwidXNlZCB3aXRoIG1hdGVyaWFscyBvdGhlciIsIndpdGggbWF0ZXJpYWxzIG90aGVyIHRoYW4iLCJtYXRlcmlhbHMgb3RoZXIgdGhhbiB0aG9zZSIsIm90aGVyIHRoYW4gdGhvc2Ugb3duZWQiLCJ0aGFuIHRob3NlIG93bmVkIGJ5IiwidGhvc2Ugb3duZWQgYnkgdGhlIiwib3duZWQgYnkgdGhlIHczYyIsImJ5IHRoZSB3M2MgcmVmbGVjdHMiLCJ0aGUgdzNjIHJlZmxlY3RzIHRoYXQiLCJ3M2MgcmVmbGVjdHMgdGhhdCBlcmNpbSIsInJlZmxlY3RzIHRoYXQgZXJjaW0gaXMiLCJ0aGF0IGVyY2ltIGlzIG5vdyIsImVyY2ltIGlzIG5vdyBhIiwiaXMgbm93IGEgaG9zdCIsIm5vdyBhIGhvc3Qgb2YiLCJhIGhvc3Qgb2YgdGhlIiwiaG9zdCBvZiB0aGUgdzNjIiwib2YgdGhlIHczYyBpbmNsdWRlcyIsInRoZSB3M2MgaW5jbHVkZXMgcmVmZXJlbmNlcyIsInczYyBpbmNsdWRlcyByZWZlcmVuY2VzIHRvIiwiaW5jbHVkZXMgcmVmZXJlbmNlcyB0byB0aGlzIiwicmVmZXJlbmNlcyB0byB0aGlzIHNwZWNpZmljIiwidG8gdGhpcyBzcGVjaWZpYyBkYXRlZCIsInRoaXMgc3BlY2lmaWMgZGF0ZWQgdmVyc2lvbiIsInNwZWNpZmljIGRhdGVkIHZlcnNpb24gb2YiLCJkYXRlZCB2ZXJzaW9uIG9mIHRoZSIsInRoZSBsaWNlbnNlIGFuZCByZW1vdmVzIiwibGljZW5zZSBhbmQgcmVtb3ZlcyB0aGUiLCJhbmQgcmVtb3ZlcyB0aGUgYW1iaWd1b3VzIiwicmVtb3ZlcyB0aGUgYW1iaWd1b3VzIGdyYW50IiwidGhlIGFtYmlndW91cyBncmFudCBvZiIsImFtYmlndW91cyBncmFudCBvZiB1c2UiLCJncmFudCBvZiB1c2Ugb3RoZXJ3aXNlIiwib2YgdXNlIG90aGVyd2lzZSB0aGlzIiwidXNlIG90aGVyd2lzZSB0aGlzIHZlcnNpb24iLCJvdGhlcndpc2UgdGhpcyB2ZXJzaW9uIGlzIiwidGhpcyB2ZXJzaW9uIGlzIHRoZSIsInZlcnNpb24gaXMgdGhlIHNhbWUiLCJ0aGUgc2FtZSBhcyB0aGUiLCJzYW1lIGFzIHRoZSBwcmV2aW91cyIsImFzIHRoZSBwcmV2aW91cyB2ZXJzaW9uIiwidGhlIHByZXZpb3VzIHZlcnNpb24gYW5kIl19LHsibGljZW5zZVRleHRzIjpbIkRPIFdIQVQgVEhFIEZVQ0sgWU9VIFdBTlQgVE8gUFVCTElDIExJQ0VOU0VcblxuVmVyc2lvbiAyLCBEZWNlbWJlciAyMDA0XG5cbkNvcHlyaWdodCAoQykgMjAwNCBTYW0gSG9jZXZhciBcdTAwM2NzYW1AaG9jZXZhci5uZXRcdTAwM2VcblxuRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gb3IgbW9kaWZpZWQgY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYW5kIGNoYW5naW5nIGl0IGlzIGFsbG93ZWQgYXMgbG9uZyBhcyB0aGUgbmFtZSBpcyBjaGFuZ2VkLlxuXG5ETyBXSEFUIFRIRSBGVUNLIFlPVSBXQU5UIFRPIFBVQkxJQyBMSUNFTlNFXG5cblRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTlxuXG4gICAwLiBZb3UganVzdCBETyBXSEFUIFRIRSBGVUNLIFlPVSBXQU5UIFRPLiJdLCJsaWNlbnNlSWRzIjpbIldURlBMIl0sImtleXdvcmRzIjpbInZlcnNpb24gMiBkZWNlbWJlciIsIjIgZGVjZW1iZXIgMjAwNCIsImRlY2VtYmVyIDIwMDQgY29weXJpZ2h0IiwiMjAwNCBjb3B5cmlnaHQgYyIsImMgMjAwNCBzYW0iLCIyMDA0IHNhbSBob2NldmFyIiwic2FtIGhvY2V2YXIgc2FtIiwiaG9jZXZhciBzYW0gaG9jZXZhciIsInNhbSBob2NldmFyIG5ldCIsImhvY2V2YXIgbmV0IGV2ZXJ5b25lIiwibmV0IGV2ZXJ5b25lIGlzIiwiZGlzdHJpYnV0ZSB2ZXJiYXRpbSBvciIsInZlcmJhdGltIG9yIG1vZGlmaWVkIiwib3IgbW9kaWZpZWQgY29waWVzIiwibGljZW5zZSBkb2N1bWVudCBhbmQiLCJkb2N1bWVudCBhbmQgY2hhbmdpbmciLCJhbmQgY2hhbmdpbmcgaXQiLCJpcyBhbGxvd2VkIGFzIiwiYWxsb3dlZCBhcyBsb25nIiwiYXMgdGhlIG5hbWUiLCJpcyBjaGFuZ2VkIGRvIiwiY2hhbmdlZCBkbyB3aGF0IiwibW9kaWZpY2F0aW9uIDAgeW91IiwiMCB5b3UganVzdCIsInlvdSBqdXN0IGRvIiwianVzdCBkbyB3aGF0IiwidG8gcHVibGljIGxpY2Vuc2UgdmVyc2lvbiIsImxpY2Vuc2UgdmVyc2lvbiAyIGRlY2VtYmVyIiwidmVyc2lvbiAyIGRlY2VtYmVyIDIwMDQiLCIyIGRlY2VtYmVyIDIwMDQgY29weXJpZ2h0IiwiZGVjZW1iZXIgMjAwNCBjb3B5cmlnaHQgYyIsIjIwMDQgY29weXJpZ2h0IGMgMjAwNCIsImNvcHlyaWdodCBjIDIwMDQgc2FtIiwiYyAyMDA0IHNhbSBob2NldmFyIiwiMjAwNCBzYW0gaG9jZXZhciBzYW0iLCJzYW0gaG9jZXZhciBzYW0gaG9jZXZhciIsImhvY2V2YXIgc2FtIGhvY2V2YXIgbmV0Iiwic2FtIGhvY2V2YXIgbmV0IGV2ZXJ5b25lIiwiaG9jZXZhciBuZXQgZXZlcnlvbmUgaXMiLCJuZXQgZXZlcnlvbmUgaXMgcGVybWl0dGVkIiwiYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gb3IiLCJkaXN0cmlidXRlIHZlcmJhdGltIG9yIG1vZGlmaWVkIiwidmVyYmF0aW0gb3IgbW9kaWZpZWQgY29waWVzIiwib3IgbW9kaWZpZWQgY29waWVzIG9mIiwibW9kaWZpZWQgY29waWVzIG9mIHRoaXMiLCJ0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgYW5kIiwibGljZW5zZSBkb2N1bWVudCBhbmQgY2hhbmdpbmciLCJkb2N1bWVudCBhbmQgY2hhbmdpbmcgaXQiLCJhbmQgY2hhbmdpbmcgaXQgaXMiLCJjaGFuZ2luZyBpdCBpcyBhbGxvd2VkIiwiaXQgaXMgYWxsb3dlZCBhcyIsImlzIGFsbG93ZWQgYXMgbG9uZyIsImFsbG93ZWQgYXMgbG9uZyBhcyIsImxvbmcgYXMgdGhlIG5hbWUiLCJhcyB0aGUgbmFtZSBpcyIsIm5hbWUgaXMgY2hhbmdlZCBkbyIsImlzIGNoYW5nZWQgZG8gd2hhdCIsImNoYW5nZWQgZG8gd2hhdCB0aGUiLCJ0byBwdWJsaWMgbGljZW5zZSB0ZXJtcyIsImFuZCBtb2RpZmljYXRpb24gMCB5b3UiLCJtb2RpZmljYXRpb24gMCB5b3UganVzdCIsIjAgeW91IGp1c3QgZG8iLCJ5b3UganVzdCBkbyB3aGF0IiwianVzdCBkbyB3aGF0IHRoZSIsIndhbnQgdG8gcHVibGljIGxpY2Vuc2UgdmVyc2lvbiIsInRvIHB1YmxpYyBsaWNlbnNlIHZlcnNpb24gMiIsInB1YmxpYyBsaWNlbnNlIHZlcnNpb24gMiBkZWNlbWJlciIsImxpY2Vuc2UgdmVyc2lvbiAyIGRlY2VtYmVyIDIwMDQiLCJ2ZXJzaW9uIDIgZGVjZW1iZXIgMjAwNCBjb3B5cmlnaHQiLCIyIGRlY2VtYmVyIDIwMDQgY29weXJpZ2h0IGMiLCJkZWNlbWJlciAyMDA0IGNvcHlyaWdodCBjIDIwMDQiLCIyMDA0IGNvcHlyaWdodCBjIDIwMDQgc2FtIiwiY29weXJpZ2h0IGMgMjAwNCBzYW0gaG9jZXZhciIsImMgMjAwNCBzYW0gaG9jZXZhciBzYW0iLCIyMDA0IHNhbSBob2NldmFyIHNhbSBob2NldmFyIiwic2FtIGhvY2V2YXIgc2FtIGhvY2V2YXIgbmV0IiwiaG9jZXZhciBzYW0gaG9jZXZhciBuZXQgZXZlcnlvbmUiLCJzYW0gaG9jZXZhciBuZXQgZXZlcnlvbmUgaXMiLCJob2NldmFyIG5ldCBldmVyeW9uZSBpcyBwZXJtaXR0ZWQiLCJuZXQgZXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIiwiY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBvciIsImFuZCBkaXN0cmlidXRlIHZlcmJhdGltIG9yIG1vZGlmaWVkIiwiZGlzdHJpYnV0ZSB2ZXJiYXRpbSBvciBtb2RpZmllZCBjb3BpZXMiLCJ2ZXJiYXRpbSBvciBtb2RpZmllZCBjb3BpZXMgb2YiLCJvciBtb2RpZmllZCBjb3BpZXMgb2YgdGhpcyIsIm1vZGlmaWVkIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UiLCJvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgYW5kIiwidGhpcyBsaWNlbnNlIGRvY3VtZW50IGFuZCBjaGFuZ2luZyIsImxpY2Vuc2UgZG9jdW1lbnQgYW5kIGNoYW5naW5nIGl0IiwiZG9jdW1lbnQgYW5kIGNoYW5naW5nIGl0IGlzIiwiYW5kIGNoYW5naW5nIGl0IGlzIGFsbG93ZWQiLCJjaGFuZ2luZyBpdCBpcyBhbGxvd2VkIGFzIiwiaXQgaXMgYWxsb3dlZCBhcyBsb25nIiwiaXMgYWxsb3dlZCBhcyBsb25nIGFzIiwiYWxsb3dlZCBhcyBsb25nIGFzIHRoZSIsImFzIGxvbmcgYXMgdGhlIG5hbWUiLCJsb25nIGFzIHRoZSBuYW1lIGlzIiwiYXMgdGhlIG5hbWUgaXMgY2hhbmdlZCIsInRoZSBuYW1lIGlzIGNoYW5nZWQgZG8iLCJuYW1lIGlzIGNoYW5nZWQgZG8gd2hhdCIsImlzIGNoYW5nZWQgZG8gd2hhdCB0aGUiLCJjaGFuZ2VkIGRvIHdoYXQgdGhlIGZ1Y2siLCJ3YW50IHRvIHB1YmxpYyBsaWNlbnNlIHRlcm1zIiwidG8gcHVibGljIGxpY2Vuc2UgdGVybXMgYW5kIiwiZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gMCB5b3UiLCJhbmQgbW9kaWZpY2F0aW9uIDAgeW91IGp1c3QiLCJtb2RpZmljYXRpb24gMCB5b3UganVzdCBkbyIsIjAgeW91IGp1c3QgZG8gd2hhdCIsInlvdSBqdXN0IGRvIHdoYXQgdGhlIiwianVzdCBkbyB3aGF0IHRoZSBmdWNrIl19LHsibGljZW5zZVRleHRzIjpbIkVYQ0VQVElPTiBOT1RJQ0VcblxuICAgMS4gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoaXMgbGlicmFyeSBnaXZlIHBlcm1pc3Npb24gZm9yIGFkZGl0aW9uYWwgdXNlcyBvZiB0aGUgdGV4dCBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIG9mIHRoZSBsaWJyYXJ5IGFzIGxpY2VuY2VkIHVuZGVyIHRoZSB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbmNlLCBhcHBseWluZyBlaXRoZXIgdmVyc2lvbiAzLjEgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24gb2YgdGhlIExpY2VuY2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB2ZXJzaW9uIDMuMSBvZiB0aGUgTGljZW5jZSBkb2N1bWVudC5cblxuICAgMi4gVGhlIGV4Y2VwdGlvbiBpcyB0aGF0IHlvdSBtYXkgdXNlLCBjb3B5LCBsaW5rLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdW5kZXIgeW91ciBvd24gdGVybXMsIGJpbmFyeSBvYmplY3QgY29kZSB2ZXJzaW9ucyBvZiB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS5cblxuICAgMy4gSWYgeW91IGNvcHkgY29kZSBmcm9tIGZpbGVzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2VuY2UgaW50byBhIGNvcHkgb2YgdGhpcyBsaWJyYXJ5LCBhcyB0aGlzIGxpY2VuY2UgcGVybWl0cywgdGhlIGV4Y2VwdGlvbiBkb2VzIG5vdCBhcHBseSB0byB0aGUgY29kZSB0aGF0IHlvdSBhZGQgaW4gdGhpcyB3YXkuIFRvIGF2b2lkIG1pc2xlYWRpbmcgYW55b25lIGFzIHRvIHRoZSBzdGF0dXMgb2Ygc3VjaCBtb2RpZmllZCBmaWxlcywgeW91IG11c3QgZGVsZXRlIHRoaXMgZXhjZXB0aW9uIG5vdGljZSBmcm9tIHN1Y2ggY29kZSBhbmQvb3IgYWRqdXN0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBub3RpY2UgYWNjb3JkaW5nbHkuXG5cbiAgIDQuIElmIHlvdSB3cml0ZSBtb2RpZmljYXRpb25zIG9mIHlvdXIgb3duIGZvciB0aGlzIGxpYnJhcnksIGl0IGlzIHlvdXIgY2hvaWNlIHdoZXRoZXIgdG8gcGVybWl0IHRoaXMgZXhjZXB0aW9uIHRvIGFwcGx5IHRvIHlvdXIgbW9kaWZpY2F0aW9ucy4gSWYgeW91IGRvIG5vdCB3aXNoIHRoYXQsIHlvdSBtdXN0IGRlbGV0ZSB0aGUgZXhjZXB0aW9uIG5vdGljZSBmcm9tIHN1Y2ggY29kZSBhbmQvb3IgYWRqdXN0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBub3RpY2UgYWNjb3JkaW5nbHkuIl0sImxpY2Vuc2VJZHMiOlsid3hXaW5kb3dzIl0sImtleXdvcmRzIjpbImV4Y2VwdGlvbiBub3RpY2UgMSIsIm5vdGljZSAxIGFzIiwiMSBhcyBhIiwibGlicmFyeSBnaXZlIHBlcm1pc3Npb24iLCJnaXZlIHBlcm1pc3Npb24gZm9yIiwicGVybWlzc2lvbiBmb3IgYWRkaXRpb25hbCIsImZvciBhZGRpdGlvbmFsIHVzZXMiLCJhZGRpdGlvbmFsIHVzZXMgb2YiLCJ1c2VzIG9mIHRoZSIsInRoZSB0ZXh0IGNvbnRhaW5lZCIsInRleHQgY29udGFpbmVkIGluIiwiaW4gdGhpcyByZWxlYXNlIiwidGhpcyByZWxlYXNlIG9mIiwibGlicmFyeSBhcyBsaWNlbmNlZCIsImFzIGxpY2VuY2VkIHVuZGVyIiwibGljZW5jZWQgdW5kZXIgdGhlIiwidW5kZXIgdGhlIHd4d2luZG93cyIsInRoZSB3eHdpbmRvd3MgbGlicmFyeSIsInd4d2luZG93cyBsaWJyYXJ5IGxpY2VuY2UiLCJsaWJyYXJ5IGxpY2VuY2UgYXBwbHlpbmciLCJsaWNlbmNlIGFwcGx5aW5nIGVpdGhlciIsImFwcGx5aW5nIGVpdGhlciB2ZXJzaW9uIiwibGljZW5jZSBvciBhdCIsImxpY2VuY2UgYXMgcHVibGlzaGVkIiwiaG9sZGVycyBvZiB2ZXJzaW9uIiwidGhlIGxpY2VuY2UgZG9jdW1lbnQiLCJsaWNlbmNlIGRvY3VtZW50IDIiLCJkb2N1bWVudCAyIHRoZSIsIjIgdGhlIGV4Y2VwdGlvbiIsInRoZSBleGNlcHRpb24gaXMiLCJleGNlcHRpb24gaXMgdGhhdCIsImlzIHRoYXQgeW91IiwidXNlIGNvcHkgbGluayIsImNvcHkgbGluayBtb2RpZnkiLCJsaW5rIG1vZGlmeSBhbmQiLCJhbmQgZGlzdHJpYnV0ZSB1bmRlciIsImRpc3RyaWJ1dGUgdW5kZXIgeW91ciIsInlvdXIgb3duIHRlcm1zIiwib3duIHRlcm1zIGJpbmFyeSIsInRlcm1zIGJpbmFyeSBvYmplY3QiLCJiaW5hcnkgb2JqZWN0IGNvZGUiLCJvYmplY3QgY29kZSB2ZXJzaW9ucyIsImNvZGUgdmVyc2lvbnMgb2YiLCJ2ZXJzaW9ucyBvZiB3b3JrcyIsIm9mIHdvcmtzIGJhc2VkIiwidGhlIGxpYnJhcnkgMyIsImxpYnJhcnkgMyBpZiIsInlvdSBjb3B5IGNvZGUiLCJjb3B5IGNvZGUgZnJvbSIsImNvZGUgZnJvbSBmaWxlcyIsImZyb20gZmlsZXMgZGlzdHJpYnV0ZWQiLCJmaWxlcyBkaXN0cmlidXRlZCB1bmRlciIsInB1YmxpYyBsaWNlbmNlIG9yIiwicHVibGljIGxpY2VuY2UgaW50byIsImxpY2VuY2UgaW50byBhIiwiaW50byBhIGNvcHkiLCJ0aGlzIGxpYnJhcnkgYXMiLCJsaWJyYXJ5IGFzIHRoaXMiLCJhcyB0aGlzIGxpY2VuY2UiLCJ0aGlzIGxpY2VuY2UgcGVybWl0cyIsImxpY2VuY2UgcGVybWl0cyB0aGUiLCJwZXJtaXRzIHRoZSBleGNlcHRpb24iLCJ0aGUgZXhjZXB0aW9uIGRvZXMiLCJ0aGUgY29kZSB0aGF0IiwieW91IGFkZCBpbiIsImFkZCBpbiB0aGlzIiwidGhpcyB3YXkgdG8iLCJ3YXkgdG8gYXZvaWQiLCJ0byBhdm9pZCBtaXNsZWFkaW5nIiwiYXZvaWQgbWlzbGVhZGluZyBhbnlvbmUiLCJtaXNsZWFkaW5nIGFueW9uZSBhcyIsImFueW9uZSBhcyB0byIsInRvIHRoZSBzdGF0dXMiLCJzdGF0dXMgb2Ygc3VjaCIsIm9mIHN1Y2ggbW9kaWZpZWQiLCJtb2RpZmllZCBmaWxlcyB5b3UiLCJmaWxlcyB5b3UgbXVzdCIsIm11c3QgZGVsZXRlIHRoaXMiLCJ0aGlzIGV4Y2VwdGlvbiBub3RpY2UiLCJub3RpY2UgYWNjb3JkaW5nbHkgNCIsImFjY29yZGluZ2x5IDQgaWYiLCJpZiB5b3Ugd3JpdGUiLCJ5b3Ugd3JpdGUgbW9kaWZpY2F0aW9ucyIsIndyaXRlIG1vZGlmaWNhdGlvbnMgb2YiLCJtb2RpZmljYXRpb25zIG9mIHlvdXIiLCJ5b3VyIG93biBmb3IiLCJvd24gZm9yIHRoaXMiLCJmb3IgdGhpcyBsaWJyYXJ5IiwidGhpcyBsaWJyYXJ5IGl0IiwiaXMgeW91ciBjaG9pY2UiLCJ5b3VyIGNob2ljZSB3aGV0aGVyIiwiY2hvaWNlIHdoZXRoZXIgdG8iLCJ3aGV0aGVyIHRvIHBlcm1pdCIsInRvIHBlcm1pdCB0aGlzIiwicGVybWl0IHRoaXMgZXhjZXB0aW9uIiwiZXhjZXB0aW9uIHRvIGFwcGx5IiwieW91ciBtb2RpZmljYXRpb25zIGlmIiwibm90IHdpc2ggdGhhdCIsIm11c3QgZGVsZXRlIHRoZSIsImRlbGV0ZSB0aGUgZXhjZXB0aW9uIiwidGhlIGV4Y2VwdGlvbiBub3RpY2UiLCJleGNlcHRpb24gbm90aWNlIDEgYXMiLCJub3RpY2UgMSBhcyBhIiwiMSBhcyBhIHNwZWNpYWwiLCJ0aGlzIGxpYnJhcnkgZ2l2ZSBwZXJtaXNzaW9uIiwibGlicmFyeSBnaXZlIHBlcm1pc3Npb24gZm9yIiwiZ2l2ZSBwZXJtaXNzaW9uIGZvciBhZGRpdGlvbmFsIiwicGVybWlzc2lvbiBmb3IgYWRkaXRpb25hbCB1c2VzIiwiZm9yIGFkZGl0aW9uYWwgdXNlcyBvZiIsImFkZGl0aW9uYWwgdXNlcyBvZiB0aGUiLCJ1c2VzIG9mIHRoZSB0ZXh0Iiwib2YgdGhlIHRleHQgY29udGFpbmVkIiwidGhlIHRleHQgY29udGFpbmVkIGluIiwidGV4dCBjb250YWluZWQgaW4gdGhpcyIsImNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UiLCJpbiB0aGlzIHJlbGVhc2Ugb2YiLCJ0aGlzIHJlbGVhc2Ugb2YgdGhlIiwicmVsZWFzZSBvZiB0aGUgbGlicmFyeSIsIm9mIHRoZSBsaWJyYXJ5IGFzIiwidGhlIGxpYnJhcnkgYXMgbGljZW5jZWQiLCJsaWJyYXJ5IGFzIGxpY2VuY2VkIHVuZGVyIiwiYXMgbGljZW5jZWQgdW5kZXIgdGhlIiwibGljZW5jZWQgdW5kZXIgdGhlIHd4d2luZG93cyIsInVuZGVyIHRoZSB3eHdpbmRvd3MgbGlicmFyeSIsInRoZSB3eHdpbmRvd3MgbGlicmFyeSBsaWNlbmNlIiwid3h3aW5kb3dzIGxpYnJhcnkgbGljZW5jZSBhcHBseWluZyIsImxpYnJhcnkgbGljZW5jZSBhcHBseWluZyBlaXRoZXIiLCJsaWNlbmNlIGFwcGx5aW5nIGVpdGhlciB2ZXJzaW9uIiwiYXBwbHlpbmcgZWl0aGVyIHZlcnNpb24gMyIsImVpdGhlciB2ZXJzaW9uIDMgMSIsInRoZSBsaWNlbmNlIG9yIGF0IiwibGljZW5jZSBvciBhdCB5b3VyIiwidGhlIGxpY2VuY2UgYXMgcHVibGlzaGVkIiwibGljZW5jZSBhcyBwdWJsaXNoZWQgYnkiLCJwdWJsaXNoZWQgYnkgdGhlIGNvcHlyaWdodCIsImNvcHlyaWdodCBob2xkZXJzIG9mIHZlcnNpb24iLCJob2xkZXJzIG9mIHZlcnNpb24gMyIsIm9mIHZlcnNpb24gMyAxIiwib2YgdGhlIGxpY2VuY2UgZG9jdW1lbnQiLCJ0aGUgbGljZW5jZSBkb2N1bWVudCAyIiwibGljZW5jZSBkb2N1bWVudCAyIHRoZSIsImRvY3VtZW50IDIgdGhlIGV4Y2VwdGlvbiIsIjIgdGhlIGV4Y2VwdGlvbiBpcyIsInRoZSBleGNlcHRpb24gaXMgdGhhdCIsImV4Y2VwdGlvbiBpcyB0aGF0IHlvdSIsImlzIHRoYXQgeW91IG1heSIsInRoYXQgeW91IG1heSB1c2UiLCJtYXkgdXNlIGNvcHkgbGluayIsInVzZSBjb3B5IGxpbmsgbW9kaWZ5IiwiY29weSBsaW5rIG1vZGlmeSBhbmQiLCJsaW5rIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSIsIm1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB1bmRlciIsImFuZCBkaXN0cmlidXRlIHVuZGVyIHlvdXIiLCJkaXN0cmlidXRlIHVuZGVyIHlvdXIgb3duIiwidW5kZXIgeW91ciBvd24gdGVybXMiLCJ5b3VyIG93biB0ZXJtcyBiaW5hcnkiLCJvd24gdGVybXMgYmluYXJ5IG9iamVjdCIsInRlcm1zIGJpbmFyeSBvYmplY3QgY29kZSIsImJpbmFyeSBvYmplY3QgY29kZSB2ZXJzaW9ucyIsIm9iamVjdCBjb2RlIHZlcnNpb25zIG9mIiwiY29kZSB2ZXJzaW9ucyBvZiB3b3JrcyIsInZlcnNpb25zIG9mIHdvcmtzIGJhc2VkIiwib2Ygd29ya3MgYmFzZWQgb24iLCJvbiB0aGUgbGlicmFyeSAzIiwidGhlIGxpYnJhcnkgMyBpZiIsImxpYnJhcnkgMyBpZiB5b3UiLCIzIGlmIHlvdSBjb3B5IiwiaWYgeW91IGNvcHkgY29kZSIsInlvdSBjb3B5IGNvZGUgZnJvbSIsImNvcHkgY29kZSBmcm9tIGZpbGVzIiwiY29kZSBmcm9tIGZpbGVzIGRpc3RyaWJ1dGVkIiwiZnJvbSBmaWxlcyBkaXN0cmlidXRlZCB1bmRlciIsImZpbGVzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSIsImdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbmNlIiwiZ2VuZXJhbCBwdWJsaWMgbGljZW5jZSBvciIsInB1YmxpYyBsaWNlbmNlIG9yIHRoZSIsImxpY2VuY2Ugb3IgdGhlIGdudSIsIm9yIHRoZSBnbnUgbGlicmFyeSIsImxpYnJhcnkgZ2VuZXJhbCBwdWJsaWMgbGljZW5jZSIsImdlbmVyYWwgcHVibGljIGxpY2VuY2UgaW50byIsInB1YmxpYyBsaWNlbmNlIGludG8gYSIsImxpY2VuY2UgaW50byBhIGNvcHkiLCJpbnRvIGEgY29weSBvZiIsImNvcHkgb2YgdGhpcyBsaWJyYXJ5Iiwib2YgdGhpcyBsaWJyYXJ5IGFzIiwidGhpcyBsaWJyYXJ5IGFzIHRoaXMiLCJsaWJyYXJ5IGFzIHRoaXMgbGljZW5jZSIsImFzIHRoaXMgbGljZW5jZSBwZXJtaXRzIiwidGhpcyBsaWNlbmNlIHBlcm1pdHMgdGhlIiwibGljZW5jZSBwZXJtaXRzIHRoZSBleGNlcHRpb24iLCJwZXJtaXRzIHRoZSBleGNlcHRpb24gZG9lcyIsInRoZSBleGNlcHRpb24gZG9lcyBub3QiLCJleGNlcHRpb24gZG9lcyBub3QgYXBwbHkiLCJ0byB0aGUgY29kZSB0aGF0IiwidGhlIGNvZGUgdGhhdCB5b3UiLCJjb2RlIHRoYXQgeW91IGFkZCIsInRoYXQgeW91IGFkZCBpbiIsInlvdSBhZGQgaW4gdGhpcyIsImFkZCBpbiB0aGlzIHdheSIsImluIHRoaXMgd2F5IHRvIl19LHsibGljZW5zZVRleHRzIjpbIlN5YmFzZSBPcGVuIFdhdGNvbSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDEuMFxuXG5VU0UgT0YgVEhFIFNZQkFTRSBPUEVOIFdBVENPTSBTT0ZUV0FSRSBERVNDUklCRUQgQkVMT1cgKFwiU09GVFdBUkVcIikgSVMgU1VCSkVDVCBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgU0VUIEZPUlRIIElOIFRIRSBTWUJBU0UgT1BFTiBXQVRDT00gUFVCTElDIExJQ0VOU0UgU0VUIEZPUlRIIEJFTE9XIChcIkxJQ0VOU0VcIikuIFlPVSBNQVkgTk9UIFVTRSBUSEUgU09GVFdBUkUgSU4gQU5ZIE1BTk5FUiBVTkxFU1MgWU9VIEFDQ0VQVCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhFIExJQ0VOU0UuIFlPVSBJTkRJQ0FURSBZT1VSIEFDQ0VQVEFOQ0UgQlkgSU4gQU5ZIE1BTk5FUiBVU0lORyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBCWSBSRVBST0RVQ0lORywgTU9ESUZZSU5HIE9SIERJU1RSSUJVVElORykgVEhFIFNPRlRXQVJFLiBJRiBZT1UgRE8gTk9UIEFDQ0VQVCBBTEwgT0YgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRIRSBMSUNFTlNFLCBETyBOT1QgVVNFIFRIRSBTT0ZUV0FSRSBJTiBBTlkgTUFOTkVSLlxuXG5TeWJhc2UgT3BlbiBXYXRjb20gUHVibGljIExpY2Vuc2UgdmVyc2lvbiAxLjBcblxuICAgMS4gR2VuZXJhbDsgRGVmaW5pdGlvbnMuIFRoaXMgTGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhlIGZvbGxvd2luZyBzb2Z0d2FyZSBwcm9ncmFtczogdGhlIG9wZW4gc291cmNlIHZlcnNpb25zIG9mIFN5YmFzZSdzIFdhdGNvbSBDL0MrKyBhbmQgRm9ydHJhbiBjb21waWxlciBwcm9kdWN0cyAoXCJTb2Z0d2FyZVwiKSwgd2hpY2ggYXJlIG1vZGlmaWVkIHZlcnNpb25zIG9mLCB3aXRoIHNpZ25pZmljYW50IGNoYW5nZXMgZnJvbSwgdGhlIGxhc3QgdmVyc2lvbnMgbWFkZSBjb21tZXJjaWFsbHkgYXZhaWxhYmxlIGJ5IFN5YmFzZS4gQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6XG5cbiAgICAgIDEuMSBcIkFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0c1wiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBTeWJhc2UgaXMgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gU3liYXNlIGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgY29udGFpbmVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBidXQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSB3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFlvdSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGluIFlvdXIgTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLlxuXG4gICAgICAxLjIgXCJDb250cmlidXRvclwiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4zIFwiQ292ZXJlZCBDb2RlXCIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuXG5cbiAgICAgIDEuNCBcIkRlcGxveVwiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlciB0aGFuIGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCAoUlx1MDAyNkQpIGFuZC9vciBQZXJzb25hbCBVc2UsIGFuZCBpbmNsdWRlcyB3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBleGNlcHQgZm9yIFJcdTAwMjZEIHVzZSBhbmQvb3IgUGVyc29uYWwgVXNlLCBhcyB3ZWxsIGFzIGRpcmVjdCBvciBpbmRpcmVjdCBzdWJsaWNlbnNpbmcgb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgQ29kZSBieSBZb3UgdG8gYW55IHRoaXJkIHBhcnR5IGluIGFueSBmb3JtIG9yIG1hbm5lci5cblxuICAgICAgMS41IFwiTGFyZ2VyIFdvcmtcIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjYgXCJNb2RpZmljYXRpb25zXCIgbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIGFuZC9vciBjaGFuZ2UgdG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuIFdoZW4gY29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6IChhKSBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOyBhbmQvb3IgKGIpIGFueSBuZXcgZmlsZSBvciBvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtIHN0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBDb3ZlcmVkIENvZGUuXG5cbiAgICAgIDEuNyBcIk9yaWdpbmFsIENvZGVcIiBtZWFucyAoYSkgdGhlIFNvdXJjZSBDb2RlIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIGFzIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgU3liYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zIG9yIHdvcmtzIG1hZGUgYXZhaWxhYmxlIGJ5IFN5YmFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuIGV4cHJlc3NseSBpZGVudGlmaWVkIGJ5IFN5YmFzZSBhcyBzdWNoIGluIHRoZSBoZWFkZXIgZmlsZShzKSBvZiBzdWNoIHdvcms7IGFuZCAoYikgdGhlIG9iamVjdCBjb2RlIGNvbXBpbGVkIGZyb20gc3VjaCBTb3VyY2UgQ29kZSBhbmQgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBTeWJhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjggXCJQZXJzb25hbCBVc2VcIiBtZWFucyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGJ5IGFuIGluZGl2aWR1YWwgc29sZWx5IGZvciBoaXMgb3IgaGVyIHBlcnNvbmFsLCBwcml2YXRlIGFuZCBub24tY29tbWVyY2lhbCBwdXJwb3Nlcy4gQW4gaW5kaXZpZHVhbCdzIHVzZSBvZiBDb3ZlcmVkIENvZGUgaW4gaGlzIG9yIGhlciBjYXBhY2l0eSBhcyBhbiBvZmZpY2VyLCBlbXBsb3llZSwgbWVtYmVyLCBpbmRlcGVuZGVudCBjb250cmFjdG9yIG9yIGFnZW50IG9mIGEgY29ycG9yYXRpb24sIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiAoY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCkgZG9lcyBub3QgcXVhbGlmeSBhcyBQZXJzb25hbCBVc2UuXG5cbiAgICAgIDEuOSBcIlNvdXJjZSBDb2RlXCIgbWVhbnMgdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIChvYmplY3QgY29kZSkuXG5cbiAgICAgIDEuMTAgXCJZb3VcIiBvciBcIllvdXJcIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBcIllvdVwiIG9yIFwiWW91clwiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgXCJjb250cm9sXCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAyLiBQZXJtaXR0ZWQgVXNlczsgQ29uZGl0aW9ucyBcdTAwMjYgUmVzdHJpY3Rpb25zLlN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgU3liYXNlIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIFN5YmFzZSdzIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgY29weXJpZ2h0cyBjb3ZlcmluZyB0aGUgT3JpZ2luYWwgQ29kZSwgdG8gZG8gdGhlIGZvbGxvd2luZzpcblxuICAgICAgMi4xIFlvdSBtYXkgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSBPcmlnaW5hbCBDb2RlLCB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgc29sZWx5IGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCBhbmQvb3IgUGVyc29uYWwgVXNlLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2U6XG5cbiAgICAgICAgIChhKSBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSBpbiBhbGwgY29waWVzIG9mIE9yaWdpbmFsIENvZGUgdGhlIGNvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgU3liYXNlIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2U7IGFuZFxuXG4gICAgICAgICAoYikgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YgQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNi5cblxuICAgICAgICAgKGMpIFdoZW5ldmVyIHJlYXNvbmFibHkgZmVhc2libGUgeW91IHNob3VsZCBpbmNsdWRlIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZSBpbiBhIGNsaWNrLXdyYXAgZm9ybWF0LCB3aGljaCByZXF1aXJlcyBhZmZpcm1hdGl2ZSBhY2NlcHRhbmNlIGJ5IGNsaWNraW5nIG9uIGFuIFwiSSBhY2NlcHRcIiBidXR0b24gb3Igc2ltaWxhciBtZWNoYW5pc20uIElmIGEgY2xpY2std3JhcCBmb3JtYXQgaXMgbm90IGluY2x1ZGVkLCB5b3UgbXVzdCBpbmNsdWRlIGEgc3RhdGVtZW50IHRoYXQgYW55IHVzZSAoaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiBvciBkaXN0cmlidXRpb24pIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBvdGhlciBhZmZpcm1hdGl2ZSBhY3QgdGhhdCB5b3UgZGVmaW5lLCBjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZSBMaWNlbnNlLCBhbmQgaW5zdHJ1Y3RpbmcgdGhlIHVzZXIgbm90IHRvIHVzZSB0aGUgQ292ZXJlZCBDb2RlIGluIGFueSBtYW5uZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QgYWNjZXB0IGFsbCBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UuXG5cbiAgICAgIDIuMiBZb3UgbWF5IHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnkgYW5kIERlcGxveSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZTpcblxuICAgICAgICAgKGEpIFlvdSBtdXN0IHNhdGlzZnkgYWxsIHRoZSBjb25kaXRpb25zIG9mIFNlY3Rpb24gMi4xIHdpdGggcmVzcGVjdCB0byB0aGUgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZTtcblxuICAgICAgICAgKGIpIFlvdSBtdXN0IGR1cGxpY2F0ZSwgdG8gdGhlIGV4dGVudCBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIE1vZGlmaWNhdGlvbnMsIGFuZCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTtcblxuICAgICAgICAgKGMpIFlvdSBtdXN0IG1ha2UgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBwdWJsaWNseSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIGdyYW50cyBzZXQgZm9ydGggaW4gU2VjdGlvbiAzIGJlbG93LCBmb3IgYXMgbG9uZyBhcyB5b3UgRGVwbG95IHRoZSBDb3ZlcmVkIENvZGUgb3IgdHdlbHZlICgxMikgbW9udGhzIGZyb20gdGhlIGRhdGUgb2YgaW5pdGlhbCBEZXBsb3ltZW50LCB3aGljaGV2ZXIgaXMgbG9uZ2VyLiBZb3Ugc2hvdWxkIHByZWZlcmFibHkgZGlzdHJpYnV0ZSB0aGUgU291cmNlIENvZGUgb2YgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIGVsZWN0cm9uaWNhbGx5IChlLmcuIGRvd25sb2FkIGZyb20gYSB3ZWIgc2l0ZSk7XG5cbiAgICAgICAgIChkKSBpZiBZb3UgRGVwbG95IENvdmVyZWQgQ29kZSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZTsgYW5kXG5cbiAgICAgICAgIChlKSB0aGUgb2JqZWN0IGNvZGUgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBZb3VyIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdCBzdWNoIGxpY2Vuc2UgYWdyZWVtZW50IGNvbnRhaW5zIHRlcm1zIG5vIGxlc3MgcHJvdGVjdGl2ZSBvZiBTeWJhc2UgYW5kIGVhY2ggQ29udHJpYnV0b3IgdGhhbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgc3RhdGluZyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHkuXG5cbiAgICAgIDIuMyBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IGFsdGhvdWdoIFN5YmFzZSBhbmQgZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIHRoZWlyIHJlc3BlY3RpdmUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBTeWJhc2Ugb3IgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gU3liYXNlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltIGFueSBsaWFiaWxpdHkgdG8gWW91IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgWW91IGhlcmVieSBhc3N1bWUgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFlvdSB0byBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIENvZGUsIGl0IGlzIFlvdXIgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgQ292ZXJlZCBDb2RlLlxuXG4gICAzLiBZb3VyIEdyYW50cy4gSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGEgY29uZGl0aW9uIHRvLCB0aGUgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgaGVyZWJ5IGdyYW50IHRvIFN5YmFzZSBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50KSBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBvZiB0aGUgc2FtZSBzY29wZSBhbmQgZXh0ZW50IGFzIFN5YmFzZSdzIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQgMi4yLlxuXG4gICA0LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi5cblxuICAgNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBTeWJhc2UgaGVyZWluLiBNb2RpZmljYXRpb25zIGFuZC9vciBMYXJnZXIgV29ya3MgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBTeWJhc2Ugd2hpY2ggU3liYXNlIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLlxuXG4gICA2LiBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMgTGljZW5zZSAoXCJBZGRpdGlvbmFsIFRlcm1zXCIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIGFuZCBub3Qgb24gYmVoYWxmIG9mIFN5YmFzZSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG9idGFpbiB0aGUgcmVjaXBpZW50J3MgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIFN5YmFzZSBhbmQgZXZlcnkgQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QgU3liYXNlIG9yIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9mIGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMuXG5cbiAgIDcuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiBTeWJhc2UgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gT25jZSBPcmlnaW5hbCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFN5YmFzZS4gTm8gb25lIG90aGVyIHRoYW4gU3liYXNlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgOC4gTk8gV0FSUkFOVFkgT1IgU1VQUE9SVC4gVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvciBpbiBwYXJ0IHByZS1yZWxlYXNlLCB1bnRlc3RlZCwgb3Igbm90IGZ1bGx5IHRlc3RlZCB3b3Jrcy4gVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBlcnJvcnMgdGhhdCBjb3VsZCBjYXVzZSBmYWlsdXJlcyBvciBsb3NzIG9mIGRhdGEsIGFuZCBtYXkgYmUgaW5jb21wbGV0ZSBvciBjb250YWluIGluYWNjdXJhY2llcy4gWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSwgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaXMgYXQgWW91ciBzb2xlIGFuZCBlbnRpcmUgcmlzay4gVEhFIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFdJVEhPVVQgV0FSUkFOVFksIFVQR1JBREVTIE9SIFNVUFBPUlQgT0YgQU5ZIEtJTkQgQU5EIFNZQkFTRSBBTkQgU1lCQVNFJ1MgTElDRU5TT1IoUykgKENPTExFQ1RJVkVMWSBSRUZFUlJFRCBUTyBBUyBcIlNZQkFTRVwiIEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQgOSkgQU5EIEFMTCBDT05UUklCVVRPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPRiBBQ0NVUkFDWSwgT0YgUVVJRVQgRU5KT1lNRU5ULCBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gU1lCQVNFIEFORCBFQUNIIENPTlRSSUJVVE9SIERPRVMgTk9UIFdBUlJBTlQgQUdBSU5TVCBJTlRFUkZFUkVOQ0UgV0lUSCBZT1VSIEVOSk9ZTUVOVCBPRiBUSEUgQ09WRVJFRCBDT0RFLCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBDT1JSRUNURUQuIE5PIE9SQUwgT1IgV1JJVFRFTiBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgU1lCQVNFLCBBIFNZQkFTRSBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIE9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWS4gWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YgdGhlIENvdmVyZWQgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLCBwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZSBwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS5cblxuICAgOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFRPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBTSEFMTCBTWUJBU0UgT1IgQU5ZIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIENPTlNFUVVFTlRJQUwgT1IgT1RIRVIgREFNQUdFUyBPRiBBTlkgS0lORCBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSElTIExJQ0VOU0UgT1IgWU9VUiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgQ09WRVJFRCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSIFVOREVSIEEgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIFNZQkFTRSBPUiBTVUNIIENPTlRSSUJVVE9SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUywgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgUkVNRURZLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgT1IgT1RIRVIgREFNQUdFUyBPRiBBTlkgS0lORCwgU08gVEhJUyBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiBJbiBubyBldmVudCBzaGFsbCBTeWJhc2UncyBvciBhbnkgQ29udHJpYnV0b3IncyB0b3RhbCBsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwgZGFtYWdlcyAob3RoZXIgdGhhbiBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcpIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlIGFtb3VudCBvZiBmaXZlIGh1bmRyZWQgZG9sbGFycyAoJDUwMC4wMCkuXG5cbiAgIDEwLiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgXCJTeWJhc2VcIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gU3liYXNlIChjb2xsZWN0aXZlbHkgXCJTeWJhc2UgTWFya3NcIikgb3IgdG8gYW55IHRyYWRlbWFyayBvciB0cmFkZSBuYW1lIGJlbG9uZ2luZyB0byBhbnkgQ29udHJpYnV0b3IoXCJDb250cmlidXRvciBNYXJrc1wiKS4gTm8gU3liYXNlIE1hcmtzIG9yIENvbnRyaWJ1dG9yIE1hcmtzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3IgQ292ZXJlZCBDb2RlIG90aGVyIHRoYW4gd2l0aCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIFN5YmFzZSBvciB0aGUgQ29udHJpYnV0b3IsIGFzIGFwcGxpY2FibGUuXG5cbiAgIDExLiBPd25lcnNoaXAuIFN1YmplY3QgdG8gdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggQ29udHJpYnV0b3IuIFN5YmFzZSByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIFN5YmFzZSAoXCJTeWJhc2UgTW9kaWZpY2F0aW9uc1wiKSwgYW5kIHN1Y2ggU3liYXNlIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gU3liYXNlIG1heSwgYXQgaXRzIHNvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBTeWJhc2UgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugb3IgbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC5cblxuICAgMTIuIFRlcm1pbmF0aW9uLlxuXG4gICAgICAxMi4xIFRlcm1pbmF0aW9uLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGU6XG5cbiAgICAgICAgIChhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoO1xuXG4gICAgICAgICAoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEzLjUoYik7IG9yXG5cbiAgICAgICAgIChjKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGlmIFlvdSwgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IChpbmNsdWRpbmcgYXMgYSBjcm9zcyBjbGFpbSBvciBjb3VudGVyY2xhaW0pIGFnYWluc3QgU3liYXNlIG9yIGFueSBDb250cmlidXRvci5cblxuICAgICAgMTIuMiBFZmZlY3Qgb2YgVGVybWluYXRpb24uIFVwb24gdGVybWluYXRpb24sIFlvdSBhZ3JlZSB0byBpbW1lZGlhdGVseSBzdG9wIGFueSBmdXJ0aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIHRvIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB0aGF0IGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIFNlY3Rpb25zIDMsIDUsIDgsIDksIDEwLCAxMSwgMTIuMiBhbmQgMTMuIE5vIHBhcnR5IHdpbGwgYmUgbGlhYmxlIHRvIGFueSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLCBpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydCBzb2xlbHkgYXMgYSByZXN1bHQgb2YgdGVybWluYXRpbmcgdGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMsIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBiZSB3aXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mIGFueSBwYXJ0eS5cblxuICAgMTMuIE1pc2NlbGxhbmVvdXMuXG5cbiAgICAgIDEzLjEgR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSBcImNvbW1lcmNpYWwgaXRlbVwiIGFzIGRlZmluZWQgaW4gRkFSIDIuMTAxLiBHb3Zlcm5tZW50IHNvZnR3YXJlIGFuZCB0ZWNobmljYWwgZGF0YSByaWdodHMgaW4gdGhlIENvdmVyZWQgQ29kZSBpbmNsdWRlIG9ubHkgdGhvc2UgcmlnaHRzIGN1c3RvbWFyaWx5IHByb3ZpZGVkIHRvIHRoZSBwdWJsaWMgYXMgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgY3VzdG9tYXJ5IGNvbW1lcmNpYWwgbGljZW5zZSBpbiB0ZWNobmljYWwgZGF0YSBhbmQgc29mdHdhcmUgaXMgcHJvdmlkZWQgaW4gYWNjb3JkYW5jZSB3aXRoIEZBUiAxMi4yMTEgKFRlY2huaWNhbCBEYXRhKSBhbmQgMTIuMjEyIChDb21wdXRlciBTb2Z0d2FyZSkgYW5kLCBmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIHB1cmNoYXNlcywgREZBUiAyNTIuMjI3LTcwMTUgKFRlY2huaWNhbCBEYXRhIC0tIENvbW1lcmNpYWwgSXRlbXMpIGFuZCAyMjcuNzIwMi0zIChSaWdodHMgaW4gQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSBvciBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uKS4gQWNjb3JkaW5nbHksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi5cblxuICAgICAgMTMuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gb3IgYW1vbmcgeW91LCBTeWJhc2Ugb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvciBvdGhlcndpc2UuXG5cbiAgICAgIDEzLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIFN5YmFzZSdzIG9yIGFueSBDb250cmlidXRvcidzIHJpZ2h0IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIGhhdmUgb3RoZXJzIGRldmVsb3AgZm9yIGl0LCBtYXJrZXQgYW5kL29yIGRpc3RyaWJ1dGUgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0gdGhlIHNhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yIG90aGVyd2lzZSBjb21wZXRlIHdpdGgsIE1vZGlmaWNhdGlvbnMsIExhcmdlciBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkgZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0IG9yIGRpc3RyaWJ1dGUuXG5cbiAgICAgIDEzLjQgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uIEZhaWx1cmUgYnkgU3liYXNlIG9yIGFueSBDb250cmlidXRvciB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQgb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciB3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEzLjUgU2V2ZXJhYmlsaXR5LiAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBvciBwb3J0aW9uIHRoZXJlb2YsIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgZWNvbm9taWMgYmVuZWZpdHMgYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiAoYikgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yIHNwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YgdGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuXG5cbiAgICAgIDEzLjYgRGlzcHV0ZSBSZXNvbHV0aW9uLiBBbnkgbGl0aWdhdGlvbiBvciBvdGhlciBkaXNwdXRlIHJlc29sdXRpb24gYmV0d2VlbiBZb3UgYW5kIFN5YmFzZSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgU3liYXNlIGhlcmVieSBjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyB3aXRoaW4gdGhhdCBEaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBMaWNlbnNlLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC5cblxuICAgICAgMTMuNyBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjZXB0IHRoYXQgYm9keSBvZiBDYWxpZm9ybmlhIGxhdyBjb25jZXJuaW5nIGNvbmZsaWN0cyBvZiBsYXcuXG5cbldoZXJlIFlvdSBhcmUgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZSBmb2xsb3dpbmcgY2xhdXNlIGFwcGxpZXM6IFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZCB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gTGVzIHBhcnRpZXMgb250IGV4aWfDqCBxdWUgbGUgcHLDqHNlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMgY29ubmV4ZXMgc29pZW50IHLDqGRpw6hzIGVuIGFuZ2xhaXMuIEVYSElCSVQgQS5cblxuXCJQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5ODMtMjAwMiBTeWJhc2UsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuVGhpcyBmaWxlIGNvbnRhaW5zIE9yaWdpbmFsIENvZGUgYW5kL29yIE1vZGlmaWNhdGlvbnMgb2YgT3JpZ2luYWwgQ29kZSBhcyBkZWZpbmVkIGluIGFuZCB0aGF0IGFyZSBzdWJqZWN0IHRvIHRoZSBTeWJhc2UgT3BlbiBXYXRjb20gUHVibGljIExpY2Vuc2UgdmVyc2lvbiAxLjAgKHRoZSAnTGljZW5zZScpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIEJZIFVTSU5HIFRISVMgRklMRSBZT1UgQUdSRUUgVE8gQUxMIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRIRSBMSUNFTlNFLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgcHJvdmlkZWQgd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IHd3dy5zeWJhc2UuY29tL2RldmVsb3Blci9vcGVuc291cmNlLlxuXG5UaGUgT3JpZ2luYWwgQ29kZSBhbmQgYWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGFyZSBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgU1lCQVNFIEFORCBBTEwgQ09OVFJJQlVUT1JTIEhFUkVCWSBESVNDTEFJTSBBTEwgU1VDSCBXQVJSQU5USUVTLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBRVUlFVCBFTkpPWU1FTlQgT1IgTk9OLUlORlJJTkdFTUVOVC4gUGxlYXNlIHNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlwiIl0sImxpY2Vuc2VJZHMiOlsiV2F0Y29tLTEuMCJdLCJrZXl3b3JkcyI6WyIwIHVzZSBvZiIsIm9mIHRoZSBzeWJhc2UiLCJvcGVuIHdhdGNvbSBzb2Z0d2FyZSIsIndhdGNvbSBzb2Z0d2FyZSBkZXNjcmliZWQiLCJzb2Z0d2FyZSBkZXNjcmliZWQgYmVsb3ciLCJkZXNjcmliZWQgYmVsb3cgc29mdHdhcmUiLCJiZWxvdyBzb2Z0d2FyZSBpcyIsImluIHRoZSBzeWJhc2UiLCJwdWJsaWMgbGljZW5zZSBzZXQiLCJmb3J0aCBiZWxvdyBsaWNlbnNlIiwiYmVsb3cgbGljZW5zZSB5b3UiLCJhbnkgbWFubmVyIHVubGVzcyIsIm1hbm5lciB1bmxlc3MgeW91IiwidW5sZXNzIHlvdSBhY2NlcHQiLCJsaWNlbnNlIHlvdSBpbmRpY2F0ZSIsInlvdXIgYWNjZXB0YW5jZSBieSIsImFjY2VwdGFuY2UgYnkgaW4iLCJieSBpbiBhbnkiLCJhbnkgbWFubmVyIHVzaW5nIiwibWFubmVyIHVzaW5nIGluY2x1ZGluZyIsInVzaW5nIGluY2x1ZGluZyB3aXRob3V0IiwibGltaXRhdGlvbiBieSByZXByb2R1Y2luZyIsImJ5IHJlcHJvZHVjaW5nIG1vZGlmeWluZyIsInJlcHJvZHVjaW5nIG1vZGlmeWluZyBvciIsImFueSBtYW5uZXIgc3liYXNlIiwibWFubmVyIHN5YmFzZSBvcGVuIiwidGhlIGZvbGxvd2luZyBzb2Z0d2FyZSIsImZvbGxvd2luZyBzb2Z0d2FyZSBwcm9ncmFtcyIsInNvZnR3YXJlIHByb2dyYW1zIHRoZSIsInByb2dyYW1zIHRoZSBvcGVuIiwib3BlbiBzb3VyY2UgdmVyc2lvbnMiLCJ2ZXJzaW9ucyBvZiBzeWJhc2UiLCJzeWJhc2UgcyB3YXRjb20iLCJzIHdhdGNvbSBjIiwid2F0Y29tIGMgYyIsImMgYyBhbmQiLCJjIGFuZCBmb3J0cmFuIiwiYW5kIGZvcnRyYW4gY29tcGlsZXIiLCJmb3J0cmFuIGNvbXBpbGVyIHByb2R1Y3RzIiwiY29tcGlsZXIgcHJvZHVjdHMgc29mdHdhcmUiLCJwcm9kdWN0cyBzb2Z0d2FyZSB3aGljaCIsIndoaWNoIGFyZSBtb2RpZmllZCIsImFyZSBtb2RpZmllZCB2ZXJzaW9ucyIsInZlcnNpb25zIG9mIHdpdGgiLCJvZiB3aXRoIHNpZ25pZmljYW50Iiwid2l0aCBzaWduaWZpY2FudCBjaGFuZ2VzIiwic2lnbmlmaWNhbnQgY2hhbmdlcyBmcm9tIiwiZnJvbSB0aGUgbGFzdCIsInRoZSBsYXN0IHZlcnNpb25zIiwibGFzdCB2ZXJzaW9ucyBtYWRlIiwidmVyc2lvbnMgbWFkZSBjb21tZXJjaWFsbHkiLCJtYWRlIGNvbW1lcmNpYWxseSBhdmFpbGFibGUiLCJjb21tZXJjaWFsbHkgYXZhaWxhYmxlIGJ5Iiwic3liYXNlIGFzIHVzZWQiLCJjYXNlIHdoZXJlIHN5YmFzZSIsIndoZXJlIHN5YmFzZSBpcyIsInN5YmFzZSBpcyB0aGUiLCJhc3NpZ25lZCB0byBzeWJhc2UiLCJzeWJhc2UgYW5kIGlpIiwiaWRlbnRpZmllZCBieSBzeWJhc2UiLCJzeWJhc2UgYXMgc3VjaCIsImxpY2Vuc2Ugc3liYXNlIGhlcmVieSIsInN5YmFzZSBoZXJlYnkgZ3JhbnRzIiwiZXh0ZW50IG9mIHN5YmFzZSIsInN5YmFzZSBzIGFwcGxpY2FibGUiLCJkaXNjbGFpbWVycyBvZiBzeWJhc2UiLCJvZiBzeWJhc2UgYXMiLCJzeWJhc2UgYXMgdGhleSIsImFuZCByZXByb2R1Y2UgYSIsInJlcHJvZHVjZSBhIGNvcHkiLCI2IGMgd2hlbmV2ZXIiLCJjIHdoZW5ldmVyIHJlYXNvbmFibHkiLCJ3aGVuZXZlciByZWFzb25hYmx5IGZlYXNpYmxlIiwicmVhc29uYWJseSBmZWFzaWJsZSB5b3UiLCJmZWFzaWJsZSB5b3Ugc2hvdWxkIiwiaW5jbHVkZSB0aGUgY29weSIsImluIGEgY2xpY2siLCJ3cmFwIGZvcm1hdCB3aGljaCIsImZvcm1hdCB3aGljaCByZXF1aXJlcyIsIndoaWNoIHJlcXVpcmVzIGFmZmlybWF0aXZlIiwicmVxdWlyZXMgYWZmaXJtYXRpdmUgYWNjZXB0YW5jZSIsImFmZmlybWF0aXZlIGFjY2VwdGFuY2UgYnkiLCJhY2NlcHRhbmNlIGJ5IGNsaWNraW5nIiwib24gYW4gaSIsImFuIGkgYWNjZXB0IiwiaSBhY2NlcHQgYnV0dG9uIiwiYnV0dG9uIG9yIHNpbWlsYXIiLCJvciBzaW1pbGFyIG1lY2hhbmlzbSIsInNpbWlsYXIgbWVjaGFuaXNtIGlmIiwibWVjaGFuaXNtIGlmIGEiLCJpZiBhIGNsaWNrIiwid3JhcCBmb3JtYXQgaXMiLCJpcyBub3QgaW5jbHVkZWQiLCJub3QgaW5jbHVkZWQgeW91IiwiaW5jbHVkZWQgeW91IG11c3QiLCJzdGF0ZW1lbnQgdGhhdCBhbnkiLCJ0aGF0IGFueSB1c2UiLCJhbnkgdXNlIGluY2x1ZGluZyIsInVzZSBpbmNsdWRpbmcgd2l0aG91dCIsIndpdGhvdXQgbGltaXRhdGlvbiByZXByb2R1Y3Rpb24iLCJsaW1pdGF0aW9uIHJlcHJvZHVjdGlvbiBtb2RpZmljYXRpb24iLCJhbnkgb3RoZXIgYWZmaXJtYXRpdmUiLCJvdGhlciBhZmZpcm1hdGl2ZSBhY3QiLCJhZmZpcm1hdGl2ZSBhY3QgdGhhdCIsImFjdCB0aGF0IHlvdSIsInRoYXQgeW91IGRlZmluZSIsInlvdSBkZWZpbmUgY29uc3RpdHV0ZXMiLCJkZWZpbmUgY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSIsImxpY2Vuc2UgYW5kIGluc3RydWN0aW5nIiwiYW5kIGluc3RydWN0aW5nIHRoZSIsImluc3RydWN0aW5nIHRoZSB1c2VyIiwidGhlIHVzZXIgbm90IiwidXNlciBub3QgdG8iLCJhbnkgbWFubmVyIGlmIiwibWFubmVyIGlmIHRoZSIsInRoZSB1c2VyIGRvZXMiLCJ1c2VyIGRvZXMgbm90IiwiZG9lcyBub3QgYWNjZXB0IiwidGhlIGxpY2Vuc2UgMiIsIndlYiBzaXRlIGQiLCJzaXRlIGQgaWYiLCJjb2RlIGFuZCBlIiwiYW5kIGUgdGhlIiwiZSB0aGUgb2JqZWN0IiwiZGlzdHJpYnV0ZWQgdW5kZXIgeW91ciIsImxpY2Vuc2UgYWdyZWVtZW50IGNvbnRhaW5zIiwiYWdyZWVtZW50IGNvbnRhaW5zIHRlcm1zIiwiY29udGFpbnMgdGVybXMgbm8iLCJ0ZXJtcyBubyBsZXNzIiwibm8gbGVzcyBwcm90ZWN0aXZlIiwicHJvdGVjdGl2ZSBvZiBzeWJhc2UiLCJvZiBzeWJhc2UgYW5kIiwiZWFjaCBjb250cmlidXRvciB0aGFuIiwiY29udHJpYnV0b3IgdGhhbiB0aGUiLCJ0aGFuIHRoZSB0ZXJtcyIsImxpY2Vuc2UgYW5kIHN0YXRpbmciLCJzdGF0aW5nIHRoYXQgYW55Iiwib3RoZXIgcGFydHkgMiIsInBhcnR5IDIgMyIsInRoYXQgYWx0aG91Z2ggc3liYXNlIiwiYWx0aG91Z2ggc3liYXNlIGFuZCIsInByb3ZpZGVkIGJ5IHN5YmFzZSIsIm90aGVyIGVudGl0eSBzeWJhc2UiLCJlbnRpdHkgc3liYXNlIGFuZCIsImdyYW50IHRvIHN5YmFzZSIsImV4dGVudCBhcyBzeWJhc2UiLCJhcyBzeWJhc2UgcyIsInN5YmFzZSBzIGxpY2Vuc2VzIiwiMiAyIDQiLCIyIDQgbGFyZ2VyIiwiZ3JhbnRlZCBieSBzeWJhc2UiLCJieSBzeWJhc2UgaGVyZWluIiwic3liYXNlIGhlcmVpbiBtb2RpZmljYXRpb25zIiwibGljZW5zZXMgZnJvbSBzeWJhc2UiLCJmcm9tIHN5YmFzZSB3aGljaCIsInN5YmFzZSB3aGljaCBzeWJhc2UiLCJ3aGljaCBzeWJhc2UgbWF5Iiwic3liYXNlIG1heSBncmFudCIsInRoaXMgbGljZW5zZSBhZGRpdGlvbmFsIiwiYW5kIGhvbGQgc3liYXNlIiwiaG9sZCBzeWJhc2UgYW5kIiwic3liYXNlIGFuZCBldmVyeSIsImFzc2VydGVkIGFnYWluc3Qgc3liYXNlIiwidGhlIGxpY2Vuc2Ugc3liYXNlIiwic3liYXNlIG1heSBwdWJsaXNoIiwicHVibGlzaGVkIGJ5IHN5YmFzZSIsImJ5IHN5YmFzZSBubyIsInN5YmFzZSBubyBvbmUiLCJvdGhlciB0aGFuIHN5YmFzZSIsInRoYW4gc3liYXNlIGhhcyIsInN5YmFzZSBoYXMgdGhlIiwia2luZCBhbmQgc3liYXNlIiwic3liYXNlIGFuZCBzeWJhc2UiLCJhbmQgc3liYXNlIHMiLCJzeWJhc2UgcyBsaWNlbnNvciIsInRvIGFzIHN5YmFzZSIsImFzIHN5YmFzZSBmb3IiLCJzeWJhc2UgZm9yIHRoZSIsInBhcnR5IHJpZ2h0cyBzeWJhc2UiLCJyaWdodHMgc3liYXNlIGFuZCIsImdpdmVuIGJ5IHN5YmFzZSIsImJ5IHN5YmFzZSBhIiwic3liYXNlIGEgc3liYXNlIiwiYSBzeWJhc2UgYXV0aG9yaXplZCIsInN5YmFzZSBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlIiwic2hhbGwgc3liYXNlIG9yIiwiYW55IGRpcmVjdCBpbmNpZGVudGFsIiwiZGlyZWN0IGluY2lkZW50YWwgc3BlY2lhbCIsInNwZWNpYWwgaW5kaXJlY3QgY29uc2VxdWVudGlhbCIsImluZGlyZWN0IGNvbnNlcXVlbnRpYWwgb3IiLCJldmVuIGlmIHN5YmFzZSIsImlmIHN5YmFzZSBvciIsIm9yIGNvbnNlcXVlbnRpYWwgb3IiLCJhbnkga2luZCBzbyIsImtpbmQgc28gdGhpcyIsInNoYWxsIHN5YmFzZSBzIiwiY29udHJpYnV0b3IgcyB0b3RhbCIsImFtb3VudCBvZiBmaXZlIiwib2YgZml2ZSBodW5kcmVkIiwiZml2ZSBodW5kcmVkIGRvbGxhcnMiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhpcyBmaWxlIHdhcyBhZGRlZCBieSBDbGVhIEYuIFJlZXMgb24gMjAwOC8xMS8zMCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIERlYW4gR3VlbnRoZXIgYW5kIHBvaW50ZXJzIHRvIHRoaXMgZmlsZSB3ZXJlIGFkZGVkIHRvIGFsbCBzb3VyY2UgZmlsZXMuXG5cblVubGltaXRlZCBjb3B5aW5nIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiBlYWNoIG9mIHRoZSBmaWxlcyBpcyBwZXJtaXR0ZWQgYXMgbG9uZyBhcyB0aGUgZmlsZSBpcyBub3QgbW9kaWZpZWQuIE1vZGlmaWNhdGlvbnMsIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucywgYXJlIGFsc28gcGVybWl0dGVkLCBidXQgb25seSBpZiB0aGUgcmVzdWx0aW5nIGZpbGUgaXMgcmVuYW1lZC4gVGhlIGNvcHlyaWdodCBob2xkZXIgaXMgV2FzaGluZ3RvbiBTdGF0ZSBVbml2ZXJzaXR5LiBUaGUgb3JpZ2luYWwgYXV0aG9yIG9mIHRoZSBmb250cyBpcyBKYW5lbmUgV2ludGVyLiBUaGUgcHJpbWFyeSBjb250YWN0IChhcyBvZiAyMDA4KSBpcyBEZWFuIEd1ZW50aGVyLiJdLCJsaWNlbnNlSWRzIjpbIldzdWlwYSJdLCJrZXl3b3JkcyI6WyJ0aGlzIGZpbGUgd2FzIiwiZmlsZSB3YXMgYWRkZWQiLCJhZGRlZCBieSBjbGVhIiwiYnkgY2xlYSBmIiwiY2xlYSBmIHJlZXMiLCJmIHJlZXMgb24iLCJyZWVzIG9uIDIwMDgiLCJvbiAyMDA4IDExIiwiMjAwOCAxMSAzMCIsIjExIDMwIHdpdGgiLCIzMCB3aXRoIHRoZSIsInBlcm1pc3Npb24gb2YgZGVhbiIsIm9mIGRlYW4gZ3VlbnRoZXIiLCJkZWFuIGd1ZW50aGVyIGFuZCIsImd1ZW50aGVyIGFuZCBwb2ludGVycyIsImFuZCBwb2ludGVycyB0byIsInBvaW50ZXJzIHRvIHRoaXMiLCJ0aGlzIGZpbGUgd2VyZSIsImZpbGUgd2VyZSBhZGRlZCIsImFkZGVkIHRvIGFsbCIsInRvIGFsbCBzb3VyY2UiLCJhbGwgc291cmNlIGZpbGVzIiwic291cmNlIGZpbGVzIHVubGltaXRlZCIsImZpbGVzIHVubGltaXRlZCBjb3B5aW5nIiwidW5saW1pdGVkIGNvcHlpbmcgYW5kIiwiY29weWluZyBhbmQgcmVkaXN0cmlidXRpb24iLCJyZWRpc3RyaWJ1dGlvbiBvZiBlYWNoIiwidGhlIGZpbGVzIGlzIiwiZmlsZXMgaXMgcGVybWl0dGVkIiwiaXMgcGVybWl0dGVkIGFzIiwicGVybWl0dGVkIGFzIGxvbmciLCJhcyB0aGUgZmlsZSIsIm5vdCBtb2RpZmllZCBtb2RpZmljYXRpb25zIiwibW9kaWZpZWQgbW9kaWZpY2F0aW9ucyBhbmQiLCJtb2RpZmljYXRpb25zIGFuZCByZWRpc3RyaWJ1dGlvbiIsInZlcnNpb25zIGFyZSBhbHNvIiwiYXJlIGFsc28gcGVybWl0dGVkIiwicGVybWl0dGVkIGJ1dCBvbmx5IiwiaWYgdGhlIHJlc3VsdGluZyIsInRoZSByZXN1bHRpbmcgZmlsZSIsInJlc3VsdGluZyBmaWxlIGlzIiwiZmlsZSBpcyByZW5hbWVkIiwiaXMgcmVuYW1lZCB0aGUiLCJyZW5hbWVkIHRoZSBjb3B5cmlnaHQiLCJob2xkZXIgaXMgd2FzaGluZ3RvbiIsImlzIHdhc2hpbmd0b24gc3RhdGUiLCJ3YXNoaW5ndG9uIHN0YXRlIHVuaXZlcnNpdHkiLCJzdGF0ZSB1bml2ZXJzaXR5IHRoZSIsInVuaXZlcnNpdHkgdGhlIG9yaWdpbmFsIiwib3JpZ2luYWwgYXV0aG9yIG9mIiwib2YgdGhlIGZvbnRzIiwidGhlIGZvbnRzIGlzIiwiZm9udHMgaXMgamFuZW5lIiwiaXMgamFuZW5lIHdpbnRlciIsImphbmVuZSB3aW50ZXIgdGhlIiwid2ludGVyIHRoZSBwcmltYXJ5IiwicHJpbWFyeSBjb250YWN0IGFzIiwiY29udGFjdCBhcyBvZiIsImFzIG9mIDIwMDgiLCJvZiAyMDA4IGlzIiwiMjAwOCBpcyBkZWFuIiwiaXMgZGVhbiBndWVudGhlciIsInRoaXMgZmlsZSB3YXMgYWRkZWQiLCJmaWxlIHdhcyBhZGRlZCBieSIsIndhcyBhZGRlZCBieSBjbGVhIiwiYWRkZWQgYnkgY2xlYSBmIiwiYnkgY2xlYSBmIHJlZXMiLCJjbGVhIGYgcmVlcyBvbiIsImYgcmVlcyBvbiAyMDA4IiwicmVlcyBvbiAyMDA4IDExIiwib24gMjAwOCAxMSAzMCIsIjIwMDggMTEgMzAgd2l0aCIsIjExIDMwIHdpdGggdGhlIiwiMzAgd2l0aCB0aGUgcGVybWlzc2lvbiIsInRoZSBwZXJtaXNzaW9uIG9mIGRlYW4iLCJwZXJtaXNzaW9uIG9mIGRlYW4gZ3VlbnRoZXIiLCJvZiBkZWFuIGd1ZW50aGVyIGFuZCIsImRlYW4gZ3VlbnRoZXIgYW5kIHBvaW50ZXJzIiwiZ3VlbnRoZXIgYW5kIHBvaW50ZXJzIHRvIiwiYW5kIHBvaW50ZXJzIHRvIHRoaXMiLCJwb2ludGVycyB0byB0aGlzIGZpbGUiLCJ0byB0aGlzIGZpbGUgd2VyZSIsInRoaXMgZmlsZSB3ZXJlIGFkZGVkIiwiZmlsZSB3ZXJlIGFkZGVkIHRvIiwid2VyZSBhZGRlZCB0byBhbGwiLCJhZGRlZCB0byBhbGwgc291cmNlIiwidG8gYWxsIHNvdXJjZSBmaWxlcyIsImFsbCBzb3VyY2UgZmlsZXMgdW5saW1pdGVkIiwic291cmNlIGZpbGVzIHVubGltaXRlZCBjb3B5aW5nIiwiZmlsZXMgdW5saW1pdGVkIGNvcHlpbmcgYW5kIiwidW5saW1pdGVkIGNvcHlpbmcgYW5kIHJlZGlzdHJpYnV0aW9uIiwiY29weWluZyBhbmQgcmVkaXN0cmlidXRpb24gb2YiLCJhbmQgcmVkaXN0cmlidXRpb24gb2YgZWFjaCIsInJlZGlzdHJpYnV0aW9uIG9mIGVhY2ggb2YiLCJvZiB0aGUgZmlsZXMgaXMiLCJ0aGUgZmlsZXMgaXMgcGVybWl0dGVkIiwiZmlsZXMgaXMgcGVybWl0dGVkIGFzIiwiaXMgcGVybWl0dGVkIGFzIGxvbmciLCJwZXJtaXR0ZWQgYXMgbG9uZyBhcyIsImxvbmcgYXMgdGhlIGZpbGUiLCJhcyB0aGUgZmlsZSBpcyIsImZpbGUgaXMgbm90IG1vZGlmaWVkIiwiaXMgbm90IG1vZGlmaWVkIG1vZGlmaWNhdGlvbnMiLCJub3QgbW9kaWZpZWQgbW9kaWZpY2F0aW9ucyBhbmQiLCJtb2RpZmllZCBtb2RpZmljYXRpb25zIGFuZCByZWRpc3RyaWJ1dGlvbiIsIm1vZGlmaWNhdGlvbnMgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIiwiYW5kIHJlZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIiwib2YgbW9kaWZpZWQgdmVyc2lvbnMgYXJlIiwibW9kaWZpZWQgdmVyc2lvbnMgYXJlIGFsc28iLCJ2ZXJzaW9ucyBhcmUgYWxzbyBwZXJtaXR0ZWQiLCJhcmUgYWxzbyBwZXJtaXR0ZWQgYnV0IiwiYWxzbyBwZXJtaXR0ZWQgYnV0IG9ubHkiLCJwZXJtaXR0ZWQgYnV0IG9ubHkgaWYiLCJidXQgb25seSBpZiB0aGUiLCJvbmx5IGlmIHRoZSByZXN1bHRpbmciLCJpZiB0aGUgcmVzdWx0aW5nIGZpbGUiLCJ0aGUgcmVzdWx0aW5nIGZpbGUgaXMiLCJyZXN1bHRpbmcgZmlsZSBpcyByZW5hbWVkIiwiZmlsZSBpcyByZW5hbWVkIHRoZSIsImlzIHJlbmFtZWQgdGhlIGNvcHlyaWdodCIsInJlbmFtZWQgdGhlIGNvcHlyaWdodCBob2xkZXIiLCJ0aGUgY29weXJpZ2h0IGhvbGRlciBpcyIsImNvcHlyaWdodCBob2xkZXIgaXMgd2FzaGluZ3RvbiIsImhvbGRlciBpcyB3YXNoaW5ndG9uIHN0YXRlIiwiaXMgd2FzaGluZ3RvbiBzdGF0ZSB1bml2ZXJzaXR5Iiwid2FzaGluZ3RvbiBzdGF0ZSB1bml2ZXJzaXR5IHRoZSIsInN0YXRlIHVuaXZlcnNpdHkgdGhlIG9yaWdpbmFsIiwidW5pdmVyc2l0eSB0aGUgb3JpZ2luYWwgYXV0aG9yIiwidGhlIG9yaWdpbmFsIGF1dGhvciBvZiIsIm9yaWdpbmFsIGF1dGhvciBvZiB0aGUiLCJhdXRob3Igb2YgdGhlIGZvbnRzIiwib2YgdGhlIGZvbnRzIGlzIiwidGhlIGZvbnRzIGlzIGphbmVuZSIsImZvbnRzIGlzIGphbmVuZSB3aW50ZXIiLCJpcyBqYW5lbmUgd2ludGVyIHRoZSIsImphbmVuZSB3aW50ZXIgdGhlIHByaW1hcnkiLCJ3aW50ZXIgdGhlIHByaW1hcnkgY29udGFjdCIsInRoZSBwcmltYXJ5IGNvbnRhY3QgYXMiLCJwcmltYXJ5IGNvbnRhY3QgYXMgb2YiLCJjb250YWN0IGFzIG9mIDIwMDgiLCJhcyBvZiAyMDA4IGlzIiwib2YgMjAwOCBpcyBkZWFuIiwiMjAwOCBpcyBkZWFuIGd1ZW50aGVyIiwidGhpcyBmaWxlIHdhcyBhZGRlZCBieSIsImZpbGUgd2FzIGFkZGVkIGJ5IGNsZWEiLCJ3YXMgYWRkZWQgYnkgY2xlYSBmIiwiYWRkZWQgYnkgY2xlYSBmIHJlZXMiLCJieSBjbGVhIGYgcmVlcyBvbiIsImNsZWEgZiByZWVzIG9uIDIwMDgiLCJmIHJlZXMgb24gMjAwOCAxMSIsInJlZXMgb24gMjAwOCAxMSAzMCIsIm9uIDIwMDggMTEgMzAgd2l0aCIsIjIwMDggMTEgMzAgd2l0aCB0aGUiLCIxMSAzMCB3aXRoIHRoZSBwZXJtaXNzaW9uIiwiMzAgd2l0aCB0aGUgcGVybWlzc2lvbiBvZiIsIndpdGggdGhlIHBlcm1pc3Npb24gb2YgZGVhbiIsInRoZSBwZXJtaXNzaW9uIG9mIGRlYW4gZ3VlbnRoZXIiLCJwZXJtaXNzaW9uIG9mIGRlYW4gZ3VlbnRoZXIgYW5kIiwib2YgZGVhbiBndWVudGhlciBhbmQgcG9pbnRlcnMiLCJkZWFuIGd1ZW50aGVyIGFuZCBwb2ludGVycyB0byIsImd1ZW50aGVyIGFuZCBwb2ludGVycyB0byB0aGlzIiwiYW5kIHBvaW50ZXJzIHRvIHRoaXMgZmlsZSIsInBvaW50ZXJzIHRvIHRoaXMgZmlsZSB3ZXJlIiwidG8gdGhpcyBmaWxlIHdlcmUgYWRkZWQiLCJ0aGlzIGZpbGUgd2VyZSBhZGRlZCB0byIsImZpbGUgd2VyZSBhZGRlZCB0byBhbGwiLCJ3ZXJlIGFkZGVkIHRvIGFsbCBzb3VyY2UiLCJhZGRlZCB0byBhbGwgc291cmNlIGZpbGVzIiwidG8gYWxsIHNvdXJjZSBmaWxlcyB1bmxpbWl0ZWQiLCJhbGwgc291cmNlIGZpbGVzIHVubGltaXRlZCBjb3B5aW5nIiwic291cmNlIGZpbGVzIHVubGltaXRlZCBjb3B5aW5nIGFuZCIsImZpbGVzIHVubGltaXRlZCBjb3B5aW5nIGFuZCByZWRpc3RyaWJ1dGlvbiIsInVubGltaXRlZCBjb3B5aW5nIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiIsImNvcHlpbmcgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIGVhY2giLCJhbmQgcmVkaXN0cmlidXRpb24gb2YgZWFjaCBvZiIsInJlZGlzdHJpYnV0aW9uIG9mIGVhY2ggb2YgdGhlIiwib2YgZWFjaCBvZiB0aGUgZmlsZXMiLCJlYWNoIG9mIHRoZSBmaWxlcyBpcyIsIm9mIHRoZSBmaWxlcyBpcyBwZXJtaXR0ZWQiLCJ0aGUgZmlsZXMgaXMgcGVybWl0dGVkIGFzIiwiZmlsZXMgaXMgcGVybWl0dGVkIGFzIGxvbmciLCJpcyBwZXJtaXR0ZWQgYXMgbG9uZyBhcyIsInBlcm1pdHRlZCBhcyBsb25nIGFzIHRoZSIsImFzIGxvbmcgYXMgdGhlIGZpbGUiLCJsb25nIGFzIHRoZSBmaWxlIGlzIiwiYXMgdGhlIGZpbGUgaXMgbm90IiwidGhlIGZpbGUgaXMgbm90IG1vZGlmaWVkIiwiZmlsZSBpcyBub3QgbW9kaWZpZWQgbW9kaWZpY2F0aW9ucyIsImlzIG5vdCBtb2RpZmllZCBtb2RpZmljYXRpb25zIGFuZCIsIm5vdCBtb2RpZmllZCBtb2RpZmljYXRpb25zIGFuZCByZWRpc3RyaWJ1dGlvbiIsIm1vZGlmaWVkIG1vZGlmaWNhdGlvbnMgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIiwibW9kaWZpY2F0aW9ucyBhbmQgcmVkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQiLCJhbmQgcmVkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMiLCJyZWRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucyBhcmUiLCJvZiBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgYWxzbyIsIm1vZGlmaWVkIHZlcnNpb25zIGFyZSBhbHNvIHBlcm1pdHRlZCIsInZlcnNpb25zIGFyZSBhbHNvIHBlcm1pdHRlZCBidXQiLCJhcmUgYWxzbyBwZXJtaXR0ZWQgYnV0IG9ubHkiLCJhbHNvIHBlcm1pdHRlZCBidXQgb25seSBpZiIsInBlcm1pdHRlZCBidXQgb25seSBpZiB0aGUiXX0seyJsaWNlbnNlVGV4dHMiOlsiWDExIExpY2Vuc2UgQ29weXJpZ2h0IChDKSAxOTk2IFggQ29uc29ydGl1bVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFggQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgdGhlIFggQ29uc29ydGl1bSBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWCBDb25zb3J0aXVtLlxuXG5YIFdpbmRvdyBTeXN0ZW0gaXMgYSB0cmFkZW1hcmsgb2YgWCBDb25zb3J0aXVtLCBJbmMuIl0sImxpY2Vuc2VJZHMiOlsiWDExIl0sImtleXdvcmRzIjpbIngxMSBsaWNlbnNlIGNvcHlyaWdodCIsImMgMTk5NiB4IiwiMTk5NiB4IGNvbnNvcnRpdW0iLCJ4IGNvbnNvcnRpdW0gcGVybWlzc2lvbiIsImNvbnNvcnRpdW0gcGVybWlzc2lvbiBpcyIsInNoYWxsIHRoZSB4IiwieCBjb25zb3J0aXVtIGJlIiwiY29uc29ydGl1bSBiZSBsaWFibGUiLCJvZiB0aGUgeCIsInggY29uc29ydGl1bSBzaGFsbCIsImNvbnNvcnRpdW0gc2hhbGwgbm90IiwiZnJvbSB0aGUgeCIsInggY29uc29ydGl1bSB4IiwiY29uc29ydGl1bSB4IHdpbmRvdyIsInggd2luZG93IHN5c3RlbSIsIndpbmRvdyBzeXN0ZW0gaXMiLCJzeXN0ZW0gaXMgYSIsInRyYWRlbWFyayBvZiB4Iiwib2YgeCBjb25zb3J0aXVtIiwieCBjb25zb3J0aXVtIGluYyIsIngxMSBsaWNlbnNlIGNvcHlyaWdodCBjIiwiY29weXJpZ2h0IGMgMTk5NiB4IiwiYyAxOTk2IHggY29uc29ydGl1bSIsIjE5OTYgeCBjb25zb3J0aXVtIHBlcm1pc3Npb24iLCJ4IGNvbnNvcnRpdW0gcGVybWlzc2lvbiBpcyIsImNvbnNvcnRpdW0gcGVybWlzc2lvbiBpcyBoZXJlYnkiLCJldmVudCBzaGFsbCB0aGUgeCIsInNoYWxsIHRoZSB4IGNvbnNvcnRpdW0iLCJ0aGUgeCBjb25zb3J0aXVtIGJlIiwieCBjb25zb3J0aXVtIGJlIGxpYWJsZSIsImNvbnNvcnRpdW0gYmUgbGlhYmxlIGZvciIsIm5hbWUgb2YgdGhlIHgiLCJvZiB0aGUgeCBjb25zb3J0aXVtIiwidGhlIHggY29uc29ydGl1bSBzaGFsbCIsInggY29uc29ydGl1bSBzaGFsbCBub3QiLCJjb25zb3J0aXVtIHNoYWxsIG5vdCBiZSIsImF1dGhvcml6YXRpb24gZnJvbSB0aGUgeCIsImZyb20gdGhlIHggY29uc29ydGl1bSIsInRoZSB4IGNvbnNvcnRpdW0geCIsInggY29uc29ydGl1bSB4IHdpbmRvdyIsImNvbnNvcnRpdW0geCB3aW5kb3cgc3lzdGVtIiwieCB3aW5kb3cgc3lzdGVtIGlzIiwid2luZG93IHN5c3RlbSBpcyBhIiwic3lzdGVtIGlzIGEgdHJhZGVtYXJrIiwiYSB0cmFkZW1hcmsgb2YgeCIsInRyYWRlbWFyayBvZiB4IGNvbnNvcnRpdW0iLCJvZiB4IGNvbnNvcnRpdW0gaW5jIiwieDExIGxpY2Vuc2UgY29weXJpZ2h0IGMgMTk5NiIsImxpY2Vuc2UgY29weXJpZ2h0IGMgMTk5NiB4IiwiY29weXJpZ2h0IGMgMTk5NiB4IGNvbnNvcnRpdW0iLCJjIDE5OTYgeCBjb25zb3J0aXVtIHBlcm1pc3Npb24iLCIxOTk2IHggY29uc29ydGl1bSBwZXJtaXNzaW9uIGlzIiwieCBjb25zb3J0aXVtIHBlcm1pc3Npb24gaXMgaGVyZWJ5IiwiY29uc29ydGl1bSBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIiwibm8gZXZlbnQgc2hhbGwgdGhlIHgiLCJldmVudCBzaGFsbCB0aGUgeCBjb25zb3J0aXVtIiwic2hhbGwgdGhlIHggY29uc29ydGl1bSBiZSIsInRoZSB4IGNvbnNvcnRpdW0gYmUgbGlhYmxlIiwieCBjb25zb3J0aXVtIGJlIGxpYWJsZSBmb3IiLCJjb25zb3J0aXVtIGJlIGxpYWJsZSBmb3IgYW55IiwidGhlIG5hbWUgb2YgdGhlIHgiLCJuYW1lIG9mIHRoZSB4IGNvbnNvcnRpdW0iLCJvZiB0aGUgeCBjb25zb3J0aXVtIHNoYWxsIiwidGhlIHggY29uc29ydGl1bSBzaGFsbCBub3QiLCJ4IGNvbnNvcnRpdW0gc2hhbGwgbm90IGJlIiwiY29uc29ydGl1bSBzaGFsbCBub3QgYmUgdXNlZCIsIndyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSB4IiwiYXV0aG9yaXphdGlvbiBmcm9tIHRoZSB4IGNvbnNvcnRpdW0iLCJmcm9tIHRoZSB4IGNvbnNvcnRpdW0geCIsInRoZSB4IGNvbnNvcnRpdW0geCB3aW5kb3ciLCJ4IGNvbnNvcnRpdW0geCB3aW5kb3cgc3lzdGVtIiwiY29uc29ydGl1bSB4IHdpbmRvdyBzeXN0ZW0gaXMiLCJ4IHdpbmRvdyBzeXN0ZW0gaXMgYSIsIndpbmRvdyBzeXN0ZW0gaXMgYSB0cmFkZW1hcmsiLCJzeXN0ZW0gaXMgYSB0cmFkZW1hcmsgb2YiLCJpcyBhIHRyYWRlbWFyayBvZiB4IiwiYSB0cmFkZW1hcmsgb2YgeCBjb25zb3J0aXVtIiwidHJhZGVtYXJrIG9mIHggY29uc29ydGl1bSBpbmMiXX0seyJsaWNlbnNlVGV4dHMiOlsiWEZyZWU4NiBMaWNlbnNlICh2ZXJzaW9uIDEuMSkgQ29weXJpZ2h0IChDKSAxOTk0LTIwMDYgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLlxuXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZCBpbiB0aGUgc2FtZSBwbGFjZSBhbmQgZm9ybSBhcyBvdGhlciBjb3B5cmlnaHQsIGxpY2Vuc2UgYW5kIGRpc2NsYWltZXIgaW5mb3JtYXRpb24uXG5cbiAgIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLCBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiBcIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jIChodHRwOi8vd3d3LnhmcmVlODYub3JnLykgYW5kIGl0cyBjb250cmlidXRvcnNcIiwgaW4gdGhlIHNhbWUgcGxhY2UgYW5kIGZvcm0gYXMgb3RoZXIgdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzLiBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsIGluIHRoZSBzYW1lIGZvcm0gYW5kIGxvY2F0aW9uIGFzIG90aGVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzLlxuXG4gICA0LiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBYRlJFRTg2IFBST0pFQ1QsIElOQyBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiJdLCJsaWNlbnNlSWRzIjpbIlhGcmVlODYtMS4xIl0sImtleXdvcmRzIjpbInhmcmVlODYgbGljZW5zZSB2ZXJzaW9uIiwiYyAxOTk0IDIwMDYiLCIxOTk0IDIwMDYgdGhlIiwiMjAwNiB0aGUgeGZyZWU4NiIsInByb2plY3QgaW5jIGFsbCIsImRpc3RyaWJ1dGlvbiBhbmQgaW4iLCJhcyBvdGhlciBjb3B5cmlnaHQiLCJvdGhlciBjb3B5cmlnaHQgbGljZW5zZSIsImFuZCBkaXNjbGFpbWVyIGluZm9ybWF0aW9uIiwiZGlzY2xhaW1lciBpbmZvcm1hdGlvbiAzIiwiaW5mb3JtYXRpb24gMyB0aGUiLCJieSB0aGUgeGZyZWU4NiIsInByb2plY3QgaW5jIGh0dHAiLCJodHRwIHd3dyB4ZnJlZTg2Iiwid3d3IHhmcmVlODYgb3JnIiwieGZyZWU4NiBvcmcgYW5kIiwib3JnIGFuZCBpdHMiLCJpdHMgY29udHJpYnV0b3JzIGluIiwiYXMgb3RoZXIgdGhpcmQiLCJwYXJ0eSBhY2tub3dsZWRnbWVudHMgYWx0ZXJuYXRlbHkiLCJhY2tub3dsZWRnbWVudHMgYWx0ZXJuYXRlbHkgdGhpcyIsInNvZnR3YXJlIGl0c2VsZiBpbiIsIml0c2VsZiBpbiB0aGUiLCJzYW1lIGZvcm0gYW5kIiwiZm9ybSBhbmQgbG9jYXRpb24iLCJhbmQgbG9jYXRpb24gYXMiLCJsb2NhdGlvbiBhcyBvdGhlciIsImFzIG90aGVyIHN1Y2giLCJvdGhlciBzdWNoIHRoaXJkIiwicGFydHkgYWNrbm93bGVkZ21lbnRzIDQiLCJhY2tub3dsZWRnbWVudHMgNCBleGNlcHQiLCI0IGV4Y2VwdCBhcyIsIm9mIHRoZSB4ZnJlZTg2IiwicHJvamVjdCBpbmMgc2hhbGwiLCJmcm9tIHRoZSB4ZnJlZTg2IiwicHJvamVjdCBpbmMgdGhpcyIsImluYyB0aGlzIHNvZnR3YXJlIiwic2hhbGwgdGhlIHhmcmVlODYiLCJwcm9qZWN0IGluYyBvciIsInhmcmVlODYgbGljZW5zZSB2ZXJzaW9uIDEiLCIxIGNvcHlyaWdodCBjIDE5OTQiLCJjb3B5cmlnaHQgYyAxOTk0IDIwMDYiLCJjIDE5OTQgMjAwNiB0aGUiLCIxOTk0IDIwMDYgdGhlIHhmcmVlODYiLCIyMDA2IHRoZSB4ZnJlZTg2IHByb2plY3QiLCJ4ZnJlZTg2IHByb2plY3QgaW5jIGFsbCIsInByb2plY3QgaW5jIGFsbCByaWdodHMiLCJ0aGUgZGlzdHJpYnV0aW9uIGFuZCBpbiIsImRpc3RyaWJ1dGlvbiBhbmQgaW4gdGhlIiwiYW5kIGluIHRoZSBzYW1lIiwiZm9ybSBhcyBvdGhlciBjb3B5cmlnaHQiLCJhcyBvdGhlciBjb3B5cmlnaHQgbGljZW5zZSIsIm90aGVyIGNvcHlyaWdodCBsaWNlbnNlIGFuZCIsImNvcHlyaWdodCBsaWNlbnNlIGFuZCBkaXNjbGFpbWVyIiwibGljZW5zZSBhbmQgZGlzY2xhaW1lciBpbmZvcm1hdGlvbiIsImFuZCBkaXNjbGFpbWVyIGluZm9ybWF0aW9uIDMiLCJkaXNjbGFpbWVyIGluZm9ybWF0aW9uIDMgdGhlIiwiaW5mb3JtYXRpb24gMyB0aGUgZW5kIiwiZGV2ZWxvcGVkIGJ5IHRoZSB4ZnJlZTg2IiwiYnkgdGhlIHhmcmVlODYgcHJvamVjdCIsInhmcmVlODYgcHJvamVjdCBpbmMgaHR0cCIsInByb2plY3QgaW5jIGh0dHAgd3d3IiwiaW5jIGh0dHAgd3d3IHhmcmVlODYiLCJodHRwIHd3dyB4ZnJlZTg2IG9yZyIsInd3dyB4ZnJlZTg2IG9yZyBhbmQiLCJ4ZnJlZTg2IG9yZyBhbmQgaXRzIiwib3JnIGFuZCBpdHMgY29udHJpYnV0b3JzIiwiYW5kIGl0cyBjb250cmlidXRvcnMgaW4iLCJpdHMgY29udHJpYnV0b3JzIGluIHRoZSIsImNvbnRyaWJ1dG9ycyBpbiB0aGUgc2FtZSIsImZvcm0gYXMgb3RoZXIgdGhpcmQiLCJhcyBvdGhlciB0aGlyZCBwYXJ0eSIsIm90aGVyIHRoaXJkIHBhcnR5IGFja25vd2xlZGdtZW50cyIsInRoaXJkIHBhcnR5IGFja25vd2xlZGdtZW50cyBhbHRlcm5hdGVseSIsInBhcnR5IGFja25vd2xlZGdtZW50cyBhbHRlcm5hdGVseSB0aGlzIiwiYWNrbm93bGVkZ21lbnRzIGFsdGVybmF0ZWx5IHRoaXMgYWNrbm93bGVkZ21lbnQiLCJ0aGUgc29mdHdhcmUgaXRzZWxmIGluIiwic29mdHdhcmUgaXRzZWxmIGluIHRoZSIsIml0c2VsZiBpbiB0aGUgc2FtZSIsInRoZSBzYW1lIGZvcm0gYW5kIiwic2FtZSBmb3JtIGFuZCBsb2NhdGlvbiIsImZvcm0gYW5kIGxvY2F0aW9uIGFzIiwiYW5kIGxvY2F0aW9uIGFzIG90aGVyIiwibG9jYXRpb24gYXMgb3RoZXIgc3VjaCIsImFzIG90aGVyIHN1Y2ggdGhpcmQiLCJvdGhlciBzdWNoIHRoaXJkIHBhcnR5IiwidGhpcmQgcGFydHkgYWNrbm93bGVkZ21lbnRzIDQiLCJwYXJ0eSBhY2tub3dsZWRnbWVudHMgNCBleGNlcHQiLCJhY2tub3dsZWRnbWVudHMgNCBleGNlcHQgYXMiLCI0IGV4Y2VwdCBhcyBjb250YWluZWQiLCJuYW1lIG9mIHRoZSB4ZnJlZTg2Iiwib2YgdGhlIHhmcmVlODYgcHJvamVjdCIsInhmcmVlODYgcHJvamVjdCBpbmMgc2hhbGwiLCJwcm9qZWN0IGluYyBzaGFsbCBub3QiLCJhdXRob3JpemF0aW9uIGZyb20gdGhlIHhmcmVlODYiLCJmcm9tIHRoZSB4ZnJlZTg2IHByb2plY3QiLCJ4ZnJlZTg2IHByb2plY3QgaW5jIHRoaXMiLCJwcm9qZWN0IGluYyB0aGlzIHNvZnR3YXJlIiwiaW5jIHRoaXMgc29mdHdhcmUgaXMiLCJldmVudCBzaGFsbCB0aGUgeGZyZWU4NiIsInNoYWxsIHRoZSB4ZnJlZTg2IHByb2plY3QiLCJ4ZnJlZTg2IHByb2plY3QgaW5jIG9yIiwicHJvamVjdCBpbmMgb3IgaXRzIiwieGZyZWU4NiBsaWNlbnNlIHZlcnNpb24gMSAxIiwiMSAxIGNvcHlyaWdodCBjIDE5OTQiLCIxIGNvcHlyaWdodCBjIDE5OTQgMjAwNiIsImNvcHlyaWdodCBjIDE5OTQgMjAwNiB0aGUiLCJjIDE5OTQgMjAwNiB0aGUgeGZyZWU4NiIsIjE5OTQgMjAwNiB0aGUgeGZyZWU4NiBwcm9qZWN0IiwiMjAwNiB0aGUgeGZyZWU4NiBwcm9qZWN0IGluYyIsInRoZSB4ZnJlZTg2IHByb2plY3QgaW5jIGFsbCIsInhmcmVlODYgcHJvamVjdCBpbmMgYWxsIHJpZ2h0cyIsInByb2plY3QgaW5jIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJjb25kaXRpb25zIDEgcmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSIsIndpdGggdGhlIGRpc3RyaWJ1dGlvbiBhbmQgaW4iLCJ0aGUgZGlzdHJpYnV0aW9uIGFuZCBpbiB0aGUiLCJkaXN0cmlidXRpb24gYW5kIGluIHRoZSBzYW1lIiwiYW5kIGluIHRoZSBzYW1lIHBsYWNlIiwiYW5kIGZvcm0gYXMgb3RoZXIgY29weXJpZ2h0IiwiZm9ybSBhcyBvdGhlciBjb3B5cmlnaHQgbGljZW5zZSIsImFzIG90aGVyIGNvcHlyaWdodCBsaWNlbnNlIGFuZCIsIm90aGVyIGNvcHlyaWdodCBsaWNlbnNlIGFuZCBkaXNjbGFpbWVyIiwiY29weXJpZ2h0IGxpY2Vuc2UgYW5kIGRpc2NsYWltZXIgaW5mb3JtYXRpb24iLCJsaWNlbnNlIGFuZCBkaXNjbGFpbWVyIGluZm9ybWF0aW9uIDMiLCJhbmQgZGlzY2xhaW1lciBpbmZvcm1hdGlvbiAzIHRoZSIsImRpc2NsYWltZXIgaW5mb3JtYXRpb24gMyB0aGUgZW5kIiwiaW5mb3JtYXRpb24gMyB0aGUgZW5kIHVzZXIiLCJzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIHhmcmVlODYiLCJkZXZlbG9wZWQgYnkgdGhlIHhmcmVlODYgcHJvamVjdCIsImJ5IHRoZSB4ZnJlZTg2IHByb2plY3QgaW5jIiwidGhlIHhmcmVlODYgcHJvamVjdCBpbmMgaHR0cCIsInhmcmVlODYgcHJvamVjdCBpbmMgaHR0cCB3d3ciLCJwcm9qZWN0IGluYyBodHRwIHd3dyB4ZnJlZTg2IiwiaW5jIGh0dHAgd3d3IHhmcmVlODYgb3JnIiwiaHR0cCB3d3cgeGZyZWU4NiBvcmcgYW5kIiwid3d3IHhmcmVlODYgb3JnIGFuZCBpdHMiLCJ4ZnJlZTg2IG9yZyBhbmQgaXRzIGNvbnRyaWJ1dG9ycyIsIm9yZyBhbmQgaXRzIGNvbnRyaWJ1dG9ycyBpbiIsImFuZCBpdHMgY29udHJpYnV0b3JzIGluIHRoZSIsIml0cyBjb250cmlidXRvcnMgaW4gdGhlIHNhbWUiLCJjb250cmlidXRvcnMgaW4gdGhlIHNhbWUgcGxhY2UiLCJhbmQgZm9ybSBhcyBvdGhlciB0aGlyZCIsImZvcm0gYXMgb3RoZXIgdGhpcmQgcGFydHkiLCJhcyBvdGhlciB0aGlyZCBwYXJ0eSBhY2tub3dsZWRnbWVudHMiLCJvdGhlciB0aGlyZCBwYXJ0eSBhY2tub3dsZWRnbWVudHMgYWx0ZXJuYXRlbHkiLCJ0aGlyZCBwYXJ0eSBhY2tub3dsZWRnbWVudHMgYWx0ZXJuYXRlbHkgdGhpcyIsInBhcnR5IGFja25vd2xlZGdtZW50cyBhbHRlcm5hdGVseSB0aGlzIGFja25vd2xlZGdtZW50IiwiYWNrbm93bGVkZ21lbnRzIGFsdGVybmF0ZWx5IHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IiwiaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiBpbiIsInRoZSBzb2Z0d2FyZSBpdHNlbGYgaW4gdGhlIiwic29mdHdhcmUgaXRzZWxmIGluIHRoZSBzYW1lIiwiaXRzZWxmIGluIHRoZSBzYW1lIGZvcm0iLCJpbiB0aGUgc2FtZSBmb3JtIGFuZCIsInRoZSBzYW1lIGZvcm0gYW5kIGxvY2F0aW9uIiwic2FtZSBmb3JtIGFuZCBsb2NhdGlvbiBhcyIsImZvcm0gYW5kIGxvY2F0aW9uIGFzIG90aGVyIiwiYW5kIGxvY2F0aW9uIGFzIG90aGVyIHN1Y2giLCJsb2NhdGlvbiBhcyBvdGhlciBzdWNoIHRoaXJkIiwiYXMgb3RoZXIgc3VjaCB0aGlyZCBwYXJ0eSIsIm90aGVyIHN1Y2ggdGhpcmQgcGFydHkgYWNrbm93bGVkZ21lbnRzIiwic3VjaCB0aGlyZCBwYXJ0eSBhY2tub3dsZWRnbWVudHMgNCIsInRoaXJkIHBhcnR5IGFja25vd2xlZGdtZW50cyA0IGV4Y2VwdCIsInBhcnR5IGFja25vd2xlZGdtZW50cyA0IGV4Y2VwdCBhcyIsImFja25vd2xlZGdtZW50cyA0IGV4Y2VwdCBhcyBjb250YWluZWQiLCI0IGV4Y2VwdCBhcyBjb250YWluZWQgaW4iLCJ0aGUgbmFtZSBvZiB0aGUgeGZyZWU4NiIsIm5hbWUgb2YgdGhlIHhmcmVlODYgcHJvamVjdCIsIm9mIHRoZSB4ZnJlZTg2IHByb2plY3QgaW5jIiwidGhlIHhmcmVlODYgcHJvamVjdCBpbmMgc2hhbGwiLCJ4ZnJlZTg2IHByb2plY3QgaW5jIHNoYWxsIG5vdCIsInByb2plY3QgaW5jIHNoYWxsIG5vdCBiZSIsIndyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSB4ZnJlZTg2IiwiYXV0aG9yaXphdGlvbiBmcm9tIHRoZSB4ZnJlZTg2IHByb2plY3QiLCJmcm9tIHRoZSB4ZnJlZTg2IHByb2plY3QgaW5jIiwidGhlIHhmcmVlODYgcHJvamVjdCBpbmMgdGhpcyIsInhmcmVlODYgcHJvamVjdCBpbmMgdGhpcyBzb2Z0d2FyZSIsInByb2plY3QgaW5jIHRoaXMgc29mdHdhcmUgaXMiLCJpbmMgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCIsIm5vIGV2ZW50IHNoYWxsIHRoZSB4ZnJlZTg2IiwiZXZlbnQgc2hhbGwgdGhlIHhmcmVlODYgcHJvamVjdCIsInNoYWxsIHRoZSB4ZnJlZTg2IHByb2plY3QgaW5jIiwidGhlIHhmcmVlODYgcHJvamVjdCBpbmMgb3IiLCJ4ZnJlZTg2IHByb2plY3QgaW5jIG9yIGl0cyIsInByb2plY3QgaW5jIG9yIGl0cyBjb250cmlidXRvcnMiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGZyZWVseS5cblxuVXNlIGl0IGF0IHlvdXIgb3duIHJpc2s7IHRoZXJlIGlzIE5PIFdBUlJBTlRZLlxuXG5SZWRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucyBpcyBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgMS4gQWxsIGNvcHlyaWdodCBcdTAwMjYgcGVybWlzc2lvbiBub3RpY2VzIGFyZSBwcmVzZXJ2ZWQuXG5cbiAgIDIuYSkgT25seSBjaGFuZ2VzIHJlcXVpcmVkIGZvciBwYWNrYWdpbmcgb3IgcG9ydGluZyBhcmUgbWFkZS5cblxuICAgb3JcblxuICAgMi5iKSBJdCBpcyBjbGVhcmx5IHN0YXRlZCB3aG8gbGFzdCBjaGFuZ2VkIHRoZSBwcm9ncmFtLiBUaGUgcHJvZ3JhbSBpcyByZW5hbWVkIG9yIHRoZSB2ZXJzaW9uIG51bWJlciBpcyBvZiB0aGUgZm9ybSB4Lnkueiwgd2hlcmUgeC55IGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSBvcmlnaW5hbCBwcm9ncmFtIGFuZCB6IGlzIGFuIGFyYml0cmFyeSBzdWZmaXguIl0sImxpY2Vuc2VJZHMiOlsiWFNrYXQiXSwia2V5d29yZHMiOlsiaXQgZnJlZWx5IHVzZSIsImZyZWVseSB1c2UgaXQiLCJ1c2UgaXQgYXQiLCJpdCBhdCB5b3VyIiwib3duIHJpc2sgdGhlcmUiLCJyaXNrIHRoZXJlIGlzIiwibm8gd2FycmFudHkgcmVkaXN0cmlidXRpb24iLCJ3YXJyYW50eSByZWRpc3RyaWJ1dGlvbiBvZiIsInZlcnNpb25zIGlzIHBlcm1pdHRlZCIsImFsbCBjb3B5cmlnaHQgcGVybWlzc2lvbiIsImNvcHlyaWdodCBwZXJtaXNzaW9uIG5vdGljZXMiLCJwZXJtaXNzaW9uIG5vdGljZXMgYXJlIiwibm90aWNlcyBhcmUgcHJlc2VydmVkIiwiYXJlIHByZXNlcnZlZCAyIiwicHJlc2VydmVkIDIgYSIsIjIgYSBvbmx5IiwiYSBvbmx5IGNoYW5nZXMiLCJvbmx5IGNoYW5nZXMgcmVxdWlyZWQiLCJjaGFuZ2VzIHJlcXVpcmVkIGZvciIsInJlcXVpcmVkIGZvciBwYWNrYWdpbmciLCJmb3IgcGFja2FnaW5nIG9yIiwicGFja2FnaW5nIG9yIHBvcnRpbmciLCJvciBwb3J0aW5nIGFyZSIsInBvcnRpbmcgYXJlIG1hZGUiLCJhcmUgbWFkZSBvciIsIm1hZGUgb3IgMiIsIm9yIDIgYiIsIjIgYiBpdCIsImIgaXQgaXMiLCJpdCBpcyBjbGVhcmx5IiwiaXMgY2xlYXJseSBzdGF0ZWQiLCJjbGVhcmx5IHN0YXRlZCB3aG8iLCJzdGF0ZWQgd2hvIGxhc3QiLCJ3aG8gbGFzdCBjaGFuZ2VkIiwibGFzdCBjaGFuZ2VkIHRoZSIsImNoYW5nZWQgdGhlIHByb2dyYW0iLCJwcm9ncmFtIGlzIHJlbmFtZWQiLCJpcyByZW5hbWVkIG9yIiwicmVuYW1lZCBvciB0aGUiLCJvciB0aGUgdmVyc2lvbiIsInZlcnNpb24gbnVtYmVyIGlzIiwibnVtYmVyIGlzIG9mIiwiaXMgb2YgdGhlIiwidGhlIGZvcm0geCIsImZvcm0geCB5IiwieCB5IHoiLCJ5IHogd2hlcmUiLCJ6IHdoZXJlIHgiLCJ3aGVyZSB4IHkiLCJ4IHkgaXMiLCJ5IGlzIHRoZSIsImlzIHRoZSB2ZXJzaW9uIiwicHJvZ3JhbSBhbmQgeiIsImFuZCB6IGlzIiwieiBpcyBhbiIsImlzIGFuIGFyYml0cmFyeSIsImFuIGFyYml0cmFyeSBzdWZmaXgiLCJjYW4gcmVkaXN0cmlidXRlIGl0IGZyZWVseSIsInJlZGlzdHJpYnV0ZSBpdCBmcmVlbHkgdXNlIiwiaXQgZnJlZWx5IHVzZSBpdCIsImZyZWVseSB1c2UgaXQgYXQiLCJ1c2UgaXQgYXQgeW91ciIsIml0IGF0IHlvdXIgb3duIiwieW91ciBvd24gcmlzayB0aGVyZSIsIm93biByaXNrIHRoZXJlIGlzIiwicmlzayB0aGVyZSBpcyBubyIsImlzIG5vIHdhcnJhbnR5IHJlZGlzdHJpYnV0aW9uIiwibm8gd2FycmFudHkgcmVkaXN0cmlidXRpb24gb2YiLCJ3YXJyYW50eSByZWRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCIsIm9mIG1vZGlmaWVkIHZlcnNpb25zIGlzIiwibW9kaWZpZWQgdmVyc2lvbnMgaXMgcGVybWl0dGVkIiwidmVyc2lvbnMgaXMgcGVybWl0dGVkIHByb3ZpZGVkIiwibWV0IDEgYWxsIGNvcHlyaWdodCIsIjEgYWxsIGNvcHlyaWdodCBwZXJtaXNzaW9uIiwiYWxsIGNvcHlyaWdodCBwZXJtaXNzaW9uIG5vdGljZXMiLCJjb3B5cmlnaHQgcGVybWlzc2lvbiBub3RpY2VzIGFyZSIsInBlcm1pc3Npb24gbm90aWNlcyBhcmUgcHJlc2VydmVkIiwibm90aWNlcyBhcmUgcHJlc2VydmVkIDIiLCJhcmUgcHJlc2VydmVkIDIgYSIsInByZXNlcnZlZCAyIGEgb25seSIsIjIgYSBvbmx5IGNoYW5nZXMiLCJhIG9ubHkgY2hhbmdlcyByZXF1aXJlZCIsIm9ubHkgY2hhbmdlcyByZXF1aXJlZCBmb3IiLCJjaGFuZ2VzIHJlcXVpcmVkIGZvciBwYWNrYWdpbmciLCJyZXF1aXJlZCBmb3IgcGFja2FnaW5nIG9yIiwiZm9yIHBhY2thZ2luZyBvciBwb3J0aW5nIiwicGFja2FnaW5nIG9yIHBvcnRpbmcgYXJlIiwib3IgcG9ydGluZyBhcmUgbWFkZSIsInBvcnRpbmcgYXJlIG1hZGUgb3IiLCJhcmUgbWFkZSBvciAyIiwibWFkZSBvciAyIGIiLCJvciAyIGIgaXQiLCIyIGIgaXQgaXMiLCJiIGl0IGlzIGNsZWFybHkiLCJpdCBpcyBjbGVhcmx5IHN0YXRlZCIsImlzIGNsZWFybHkgc3RhdGVkIHdobyIsImNsZWFybHkgc3RhdGVkIHdobyBsYXN0Iiwic3RhdGVkIHdobyBsYXN0IGNoYW5nZWQiLCJ3aG8gbGFzdCBjaGFuZ2VkIHRoZSIsImxhc3QgY2hhbmdlZCB0aGUgcHJvZ3JhbSIsImNoYW5nZWQgdGhlIHByb2dyYW0gdGhlIiwidGhlIHByb2dyYW0gdGhlIHByb2dyYW0iLCJ0aGUgcHJvZ3JhbSBpcyByZW5hbWVkIiwicHJvZ3JhbSBpcyByZW5hbWVkIG9yIiwiaXMgcmVuYW1lZCBvciB0aGUiLCJyZW5hbWVkIG9yIHRoZSB2ZXJzaW9uIiwib3IgdGhlIHZlcnNpb24gbnVtYmVyIiwidGhlIHZlcnNpb24gbnVtYmVyIGlzIiwidmVyc2lvbiBudW1iZXIgaXMgb2YiLCJudW1iZXIgaXMgb2YgdGhlIiwiaXMgb2YgdGhlIGZvcm0iLCJvZiB0aGUgZm9ybSB4IiwidGhlIGZvcm0geCB5IiwiZm9ybSB4IHkgeiIsInggeSB6IHdoZXJlIiwieSB6IHdoZXJlIHgiLCJ6IHdoZXJlIHggeSIsIndoZXJlIHggeSBpcyIsInggeSBpcyB0aGUiLCJ5IGlzIHRoZSB2ZXJzaW9uIiwiaXMgdGhlIHZlcnNpb24gb2YiLCJvZiB0aGUgb3JpZ2luYWwgcHJvZ3JhbSIsIm9yaWdpbmFsIHByb2dyYW0gYW5kIHoiLCJwcm9ncmFtIGFuZCB6IGlzIiwiYW5kIHogaXMgYW4iLCJ6IGlzIGFuIGFyYml0cmFyeSIsImlzIGFuIGFyYml0cmFyeSBzdWZmaXgiLCJ5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBmcmVlbHkiLCJjYW4gcmVkaXN0cmlidXRlIGl0IGZyZWVseSB1c2UiLCJyZWRpc3RyaWJ1dGUgaXQgZnJlZWx5IHVzZSBpdCIsIml0IGZyZWVseSB1c2UgaXQgYXQiLCJmcmVlbHkgdXNlIGl0IGF0IHlvdXIiLCJ1c2UgaXQgYXQgeW91ciBvd24iLCJpdCBhdCB5b3VyIG93biByaXNrIiwiYXQgeW91ciBvd24gcmlzayB0aGVyZSIsInlvdXIgb3duIHJpc2sgdGhlcmUgaXMiLCJvd24gcmlzayB0aGVyZSBpcyBubyIsInJpc2sgdGhlcmUgaXMgbm8gd2FycmFudHkiLCJ0aGVyZSBpcyBubyB3YXJyYW50eSByZWRpc3RyaWJ1dGlvbiIsImlzIG5vIHdhcnJhbnR5IHJlZGlzdHJpYnV0aW9uIG9mIiwibm8gd2FycmFudHkgcmVkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQiLCJ3YXJyYW50eSByZWRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucyIsInJlZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zIGlzIiwib2YgbW9kaWZpZWQgdmVyc2lvbnMgaXMgcGVybWl0dGVkIiwibW9kaWZpZWQgdmVyc2lvbnMgaXMgcGVybWl0dGVkIHByb3ZpZGVkIiwidmVyc2lvbnMgaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQiLCJhcmUgbWV0IDEgYWxsIGNvcHlyaWdodCIsIm1ldCAxIGFsbCBjb3B5cmlnaHQgcGVybWlzc2lvbiIsIjEgYWxsIGNvcHlyaWdodCBwZXJtaXNzaW9uIG5vdGljZXMiLCJhbGwgY29weXJpZ2h0IHBlcm1pc3Npb24gbm90aWNlcyBhcmUiLCJjb3B5cmlnaHQgcGVybWlzc2lvbiBub3RpY2VzIGFyZSBwcmVzZXJ2ZWQiLCJwZXJtaXNzaW9uIG5vdGljZXMgYXJlIHByZXNlcnZlZCAyIiwibm90aWNlcyBhcmUgcHJlc2VydmVkIDIgYSIsImFyZSBwcmVzZXJ2ZWQgMiBhIG9ubHkiLCJwcmVzZXJ2ZWQgMiBhIG9ubHkgY2hhbmdlcyIsIjIgYSBvbmx5IGNoYW5nZXMgcmVxdWlyZWQiLCJhIG9ubHkgY2hhbmdlcyByZXF1aXJlZCBmb3IiLCJvbmx5IGNoYW5nZXMgcmVxdWlyZWQgZm9yIHBhY2thZ2luZyIsImNoYW5nZXMgcmVxdWlyZWQgZm9yIHBhY2thZ2luZyBvciIsInJlcXVpcmVkIGZvciBwYWNrYWdpbmcgb3IgcG9ydGluZyIsImZvciBwYWNrYWdpbmcgb3IgcG9ydGluZyBhcmUiLCJwYWNrYWdpbmcgb3IgcG9ydGluZyBhcmUgbWFkZSIsIm9yIHBvcnRpbmcgYXJlIG1hZGUgb3IiLCJwb3J0aW5nIGFyZSBtYWRlIG9yIDIiLCJhcmUgbWFkZSBvciAyIGIiLCJtYWRlIG9yIDIgYiBpdCIsIm9yIDIgYiBpdCBpcyIsIjIgYiBpdCBpcyBjbGVhcmx5IiwiYiBpdCBpcyBjbGVhcmx5IHN0YXRlZCIsIml0IGlzIGNsZWFybHkgc3RhdGVkIHdobyIsImlzIGNsZWFybHkgc3RhdGVkIHdobyBsYXN0IiwiY2xlYXJseSBzdGF0ZWQgd2hvIGxhc3QgY2hhbmdlZCIsInN0YXRlZCB3aG8gbGFzdCBjaGFuZ2VkIHRoZSIsIndobyBsYXN0IGNoYW5nZWQgdGhlIHByb2dyYW0iLCJsYXN0IGNoYW5nZWQgdGhlIHByb2dyYW0gdGhlIiwiY2hhbmdlZCB0aGUgcHJvZ3JhbSB0aGUgcHJvZ3JhbSIsInRoZSBwcm9ncmFtIHRoZSBwcm9ncmFtIGlzIiwicHJvZ3JhbSB0aGUgcHJvZ3JhbSBpcyByZW5hbWVkIiwidGhlIHByb2dyYW0gaXMgcmVuYW1lZCBvciIsInByb2dyYW0gaXMgcmVuYW1lZCBvciB0aGUiLCJpcyByZW5hbWVkIG9yIHRoZSB2ZXJzaW9uIiwicmVuYW1lZCBvciB0aGUgdmVyc2lvbiBudW1iZXIiLCJvciB0aGUgdmVyc2lvbiBudW1iZXIgaXMiLCJ0aGUgdmVyc2lvbiBudW1iZXIgaXMgb2YiLCJ2ZXJzaW9uIG51bWJlciBpcyBvZiB0aGUiLCJudW1iZXIgaXMgb2YgdGhlIGZvcm0iLCJpcyBvZiB0aGUgZm9ybSB4Iiwib2YgdGhlIGZvcm0geCB5IiwidGhlIGZvcm0geCB5IHoiLCJmb3JtIHggeSB6IHdoZXJlIiwieCB5IHogd2hlcmUgeCIsInkgeiB3aGVyZSB4IHkiLCJ6IHdoZXJlIHggeSBpcyIsIndoZXJlIHggeSBpcyB0aGUiLCJ4IHkgaXMgdGhlIHZlcnNpb24iLCJ5IGlzIHRoZSB2ZXJzaW9uIG9mIiwiaXMgdGhlIHZlcnNpb24gb2YgdGhlIiwidmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgcHJvZ3JhbSIsIm9mIHRoZSBvcmlnaW5hbCBwcm9ncmFtIGFuZCIsInRoZSBvcmlnaW5hbCBwcm9ncmFtIGFuZCB6Il19LHsibGljZW5zZVRleHRzIjpbIkNvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBYZXJveCBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuVXNlIGFuZCBjb3B5aW5nIG9mIHRoaXMgc29mdHdhcmUgYW5kIHByZXBhcmF0aW9uIG9mIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgdXBvbiB0aGlzIHNvZnR3YXJlIGFyZSBwZXJtaXR0ZWQuIEFueSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgb3Igb2YgYW55IGRlcml2YXRpdmUgd29yayBtdXN0IGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ugb2YgWGVyb3ggQ29ycG9yYXRpb24sIHRoaXMgcGFyYWdyYXBoIGFuZCB0aGUgb25lIGFmdGVyIGl0LiBBbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgc29mdHdhcmUgb3IgZGVyaXZhdGl2ZSB3b3JrcyBtdXN0IGNvbXBseSB3aXRoIGFsbCBhcHBsaWNhYmxlIFVuaXRlZCBTdGF0ZXMgZXhwb3J0IGNvbnRyb2wgbGF3cy5cblxuVGhpcyBzb2Z0d2FyZSBpcyBtYWRlIGF2YWlsYWJsZSBBUyBJUywgYW5kIFhFUk9YIENPUlBPUkFUSU9OIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PVFdJVEhTVEFORElORyBBTlkgT1RIRVIgUFJPVklTSU9OIENPTlRBSU5FRCBIRVJFSU4sIEFOWSBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gVEhFIFNPRlRXQVJFIE9SIElUUyBVU0UgSVMgRVhQUkVTU0xZIERJU0NMQUlNRUQsIFdIRVRIRVIgQVJJU0lORyBJTiBDT05UUkFDVCwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpIE9SIFNUUklDVCBMSUFCSUxJVFksIEVWRU4gSUYgWEVST1ggQ09SUE9SQVRJT04gSVMgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiJdLCJsaWNlbnNlSWRzIjpbIlhlcm94Il0sImtleXdvcmRzIjpbIjE5OTUgMTk5NiB4ZXJveCIsIjE5OTYgeGVyb3ggY29ycG9yYXRpb24iLCJ4ZXJveCBjb3Jwb3JhdGlvbiBhbGwiLCJyZXNlcnZlZCB1c2UgYW5kIiwidXNlIGFuZCBjb3B5aW5nIiwiYW5kIGNvcHlpbmcgb2YiLCJjb3B5aW5nIG9mIHRoaXMiLCJzb2Z0d2FyZSBhbmQgcHJlcGFyYXRpb24iLCJhbmQgcHJlcGFyYXRpb24gb2YiLCJiYXNlZCB1cG9uIHRoaXMiLCJ1cG9uIHRoaXMgc29mdHdhcmUiLCJzb2Z0d2FyZSBhcmUgcGVybWl0dGVkIiwicGVybWl0dGVkIGFueSBjb3B5Iiwibm90aWNlIG9mIHhlcm94Iiwib2YgeGVyb3ggY29ycG9yYXRpb24iLCJ4ZXJveCBjb3Jwb3JhdGlvbiB0aGlzIiwiY29ycG9yYXRpb24gdGhpcyBwYXJhZ3JhcGgiLCJhbmQgdGhlIG9uZSIsInRoZSBvbmUgYWZ0ZXIiLCJvbmUgYWZ0ZXIgaXQiLCJhZnRlciBpdCBhbnkiLCJpdCBhbnkgZGlzdHJpYnV0aW9uIiwid29ya3MgbXVzdCBjb21wbHkiLCJhbGwgYXBwbGljYWJsZSB1bml0ZWQiLCJhcHBsaWNhYmxlIHVuaXRlZCBzdGF0ZXMiLCJzdGF0ZXMgZXhwb3J0IGNvbnRyb2wiLCJjb250cm9sIGxhd3MgdGhpcyIsImlzIGFuZCB4ZXJveCIsImFuZCB4ZXJveCBjb3Jwb3JhdGlvbiIsInhlcm94IGNvcnBvcmF0aW9uIGRpc2NsYWltcyIsImNvcnBvcmF0aW9uIGRpc2NsYWltcyBhbGwiLCJwdXJwb3NlIGFuZCBub3R3aXRoc3RhbmRpbmciLCJvdGhlciBwcm92aXNpb24gY29udGFpbmVkIiwicHJvdmlzaW9uIGNvbnRhaW5lZCBoZXJlaW4iLCJjb250YWluZWQgaGVyZWluIGFueSIsImhlcmVpbiBhbnkgbGlhYmlsaXR5IiwidXNlIGlzIGV4cHJlc3NseSIsImlzIGV4cHJlc3NseSBkaXNjbGFpbWVkIiwiZXhwcmVzc2x5IGRpc2NsYWltZWQgd2hldGhlciIsImRpc2NsYWltZWQgd2hldGhlciBhcmlzaW5nIiwid2hldGhlciBhcmlzaW5nIGluIiwiYXJpc2luZyBpbiBjb250cmFjdCIsInN0cmljdCBsaWFiaWxpdHkgZXZlbiIsImxpYWJpbGl0eSBldmVuIGlmIiwiZXZlbiBpZiB4ZXJveCIsImlmIHhlcm94IGNvcnBvcmF0aW9uIiwieGVyb3ggY29ycG9yYXRpb24gaXMiLCJjb3Jwb3JhdGlvbiBpcyBhZHZpc2VkIiwiaXMgYWR2aXNlZCBvZiIsImMgMTk5NSAxOTk2IHhlcm94IiwiMTk5NSAxOTk2IHhlcm94IGNvcnBvcmF0aW9uIiwiMTk5NiB4ZXJveCBjb3Jwb3JhdGlvbiBhbGwiLCJ4ZXJveCBjb3Jwb3JhdGlvbiBhbGwgcmlnaHRzIiwicmlnaHRzIHJlc2VydmVkIHVzZSBhbmQiLCJyZXNlcnZlZCB1c2UgYW5kIGNvcHlpbmciLCJ1c2UgYW5kIGNvcHlpbmcgb2YiLCJhbmQgY29weWluZyBvZiB0aGlzIiwiY29weWluZyBvZiB0aGlzIHNvZnR3YXJlIiwidGhpcyBzb2Z0d2FyZSBhbmQgcHJlcGFyYXRpb24iLCJzb2Z0d2FyZSBhbmQgcHJlcGFyYXRpb24gb2YiLCJhbmQgcHJlcGFyYXRpb24gb2YgZGVyaXZhdGl2ZSIsIndvcmtzIGJhc2VkIHVwb24gdGhpcyIsImJhc2VkIHVwb24gdGhpcyBzb2Z0d2FyZSIsInVwb24gdGhpcyBzb2Z0d2FyZSBhcmUiLCJ0aGlzIHNvZnR3YXJlIGFyZSBwZXJtaXR0ZWQiLCJzb2Z0d2FyZSBhcmUgcGVybWl0dGVkIGFueSIsImFyZSBwZXJtaXR0ZWQgYW55IGNvcHkiLCJwZXJtaXR0ZWQgYW55IGNvcHkgb2YiLCJhbnkgY29weSBvZiB0aGlzIiwidGhpcyBzb2Z0d2FyZSBvciBvZiIsInNvZnR3YXJlIG9yIG9mIGFueSIsIm9yIG9mIGFueSBkZXJpdmF0aXZlIiwib2YgYW55IGRlcml2YXRpdmUgd29yayIsImFib3ZlIGNvcHlyaWdodCBub3RpY2Ugb2YiLCJjb3B5cmlnaHQgbm90aWNlIG9mIHhlcm94Iiwibm90aWNlIG9mIHhlcm94IGNvcnBvcmF0aW9uIiwib2YgeGVyb3ggY29ycG9yYXRpb24gdGhpcyIsInhlcm94IGNvcnBvcmF0aW9uIHRoaXMgcGFyYWdyYXBoIiwiY29ycG9yYXRpb24gdGhpcyBwYXJhZ3JhcGggYW5kIiwicGFyYWdyYXBoIGFuZCB0aGUgb25lIiwiYW5kIHRoZSBvbmUgYWZ0ZXIiLCJ0aGUgb25lIGFmdGVyIGl0Iiwib25lIGFmdGVyIGl0IGFueSIsImFmdGVyIGl0IGFueSBkaXN0cmlidXRpb24iLCJpdCBhbnkgZGlzdHJpYnV0aW9uIG9mIiwiZGlzdHJpYnV0aW9uIG9mIHRoaXMgc29mdHdhcmUiLCJ0aGlzIHNvZnR3YXJlIG9yIGRlcml2YXRpdmUiLCJvciBkZXJpdmF0aXZlIHdvcmtzIG11c3QiLCJkZXJpdmF0aXZlIHdvcmtzIG11c3QgY29tcGx5Iiwid29ya3MgbXVzdCBjb21wbHkgd2l0aCIsIndpdGggYWxsIGFwcGxpY2FibGUgdW5pdGVkIiwiYWxsIGFwcGxpY2FibGUgdW5pdGVkIHN0YXRlcyIsImFwcGxpY2FibGUgdW5pdGVkIHN0YXRlcyBleHBvcnQiLCJ1bml0ZWQgc3RhdGVzIGV4cG9ydCBjb250cm9sIiwic3RhdGVzIGV4cG9ydCBjb250cm9sIGxhd3MiLCJleHBvcnQgY29udHJvbCBsYXdzIHRoaXMiLCJjb250cm9sIGxhd3MgdGhpcyBzb2Z0d2FyZSIsImFzIGlzIGFuZCB4ZXJveCIsImlzIGFuZCB4ZXJveCBjb3Jwb3JhdGlvbiIsImFuZCB4ZXJveCBjb3Jwb3JhdGlvbiBkaXNjbGFpbXMiLCJ4ZXJveCBjb3Jwb3JhdGlvbiBkaXNjbGFpbXMgYWxsIiwiY29ycG9yYXRpb24gZGlzY2xhaW1zIGFsbCB3YXJyYW50aWVzIiwicGFydGljdWxhciBwdXJwb3NlIGFuZCBub3R3aXRoc3RhbmRpbmciLCJwdXJwb3NlIGFuZCBub3R3aXRoc3RhbmRpbmcgYW55IiwiYW5kIG5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIiLCJhbnkgb3RoZXIgcHJvdmlzaW9uIGNvbnRhaW5lZCIsIm90aGVyIHByb3Zpc2lvbiBjb250YWluZWQgaGVyZWluIiwicHJvdmlzaW9uIGNvbnRhaW5lZCBoZXJlaW4gYW55IiwiY29udGFpbmVkIGhlcmVpbiBhbnkgbGlhYmlsaXR5IiwiaGVyZWluIGFueSBsaWFiaWxpdHkgZm9yIiwiYW55IGxpYWJpbGl0eSBmb3IgZGFtYWdlcyIsInJlc3VsdGluZyBmcm9tIHRoZSBzb2Z0d2FyZSIsIm9yIGl0cyB1c2UgaXMiLCJpdHMgdXNlIGlzIGV4cHJlc3NseSIsInVzZSBpcyBleHByZXNzbHkgZGlzY2xhaW1lZCIsImlzIGV4cHJlc3NseSBkaXNjbGFpbWVkIHdoZXRoZXIiLCJleHByZXNzbHkgZGlzY2xhaW1lZCB3aGV0aGVyIGFyaXNpbmciLCJkaXNjbGFpbWVkIHdoZXRoZXIgYXJpc2luZyBpbiIsIndoZXRoZXIgYXJpc2luZyBpbiBjb250cmFjdCIsImFyaXNpbmcgaW4gY29udHJhY3QgdG9ydCIsImluIGNvbnRyYWN0IHRvcnQgaW5jbHVkaW5nIiwib3Igc3RyaWN0IGxpYWJpbGl0eSBldmVuIiwic3RyaWN0IGxpYWJpbGl0eSBldmVuIGlmIiwibGlhYmlsaXR5IGV2ZW4gaWYgeGVyb3giLCJldmVuIGlmIHhlcm94IGNvcnBvcmF0aW9uIiwiaWYgeGVyb3ggY29ycG9yYXRpb24gaXMiLCJ4ZXJveCBjb3Jwb3JhdGlvbiBpcyBhZHZpc2VkIiwiY29ycG9yYXRpb24gaXMgYWR2aXNlZCBvZiIsImlzIGFkdmlzZWQgb2YgdGhlIiwiY29weXJpZ2h0IGMgMTk5NSAxOTk2IHhlcm94IiwiYyAxOTk1IDE5OTYgeGVyb3ggY29ycG9yYXRpb24iLCIxOTk1IDE5OTYgeGVyb3ggY29ycG9yYXRpb24gYWxsIiwiMTk5NiB4ZXJveCBjb3Jwb3JhdGlvbiBhbGwgcmlnaHRzIiwieGVyb3ggY29ycG9yYXRpb24gYWxsIHJpZ2h0cyByZXNlcnZlZCIsImNvcnBvcmF0aW9uIGFsbCByaWdodHMgcmVzZXJ2ZWQgdXNlIiwiYWxsIHJpZ2h0cyByZXNlcnZlZCB1c2UgYW5kIiwicmlnaHRzIHJlc2VydmVkIHVzZSBhbmQgY29weWluZyIsInJlc2VydmVkIHVzZSBhbmQgY29weWluZyBvZiIsInVzZSBhbmQgY29weWluZyBvZiB0aGlzIiwiYW5kIGNvcHlpbmcgb2YgdGhpcyBzb2Z0d2FyZSIsImNvcHlpbmcgb2YgdGhpcyBzb2Z0d2FyZSBhbmQiLCJvZiB0aGlzIHNvZnR3YXJlIGFuZCBwcmVwYXJhdGlvbiIsInRoaXMgc29mdHdhcmUgYW5kIHByZXBhcmF0aW9uIG9mIiwic29mdHdhcmUgYW5kIHByZXBhcmF0aW9uIG9mIGRlcml2YXRpdmUiLCJhbmQgcHJlcGFyYXRpb24gb2YgZGVyaXZhdGl2ZSB3b3JrcyIsIm9mIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgdXBvbiIsImRlcml2YXRpdmUgd29ya3MgYmFzZWQgdXBvbiB0aGlzIiwid29ya3MgYmFzZWQgdXBvbiB0aGlzIHNvZnR3YXJlIiwiYmFzZWQgdXBvbiB0aGlzIHNvZnR3YXJlIGFyZSIsInVwb24gdGhpcyBzb2Z0d2FyZSBhcmUgcGVybWl0dGVkIiwidGhpcyBzb2Z0d2FyZSBhcmUgcGVybWl0dGVkIGFueSIsInNvZnR3YXJlIGFyZSBwZXJtaXR0ZWQgYW55IGNvcHkiLCJhcmUgcGVybWl0dGVkIGFueSBjb3B5IG9mIiwicGVybWl0dGVkIGFueSBjb3B5IG9mIHRoaXMiLCJhbnkgY29weSBvZiB0aGlzIHNvZnR3YXJlIiwiY29weSBvZiB0aGlzIHNvZnR3YXJlIG9yIiwib2YgdGhpcyBzb2Z0d2FyZSBvciBvZiIsInRoaXMgc29mdHdhcmUgb3Igb2YgYW55Iiwic29mdHdhcmUgb3Igb2YgYW55IGRlcml2YXRpdmUiLCJvciBvZiBhbnkgZGVyaXZhdGl2ZSB3b3JrIiwib2YgYW55IGRlcml2YXRpdmUgd29yayBtdXN0Iiwid29yayBtdXN0IGluY2x1ZGUgdGhlIGFib3ZlIiwidGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ugb2YiLCJhYm92ZSBjb3B5cmlnaHQgbm90aWNlIG9mIHhlcm94IiwiY29weXJpZ2h0IG5vdGljZSBvZiB4ZXJveCBjb3Jwb3JhdGlvbiIsIm5vdGljZSBvZiB4ZXJveCBjb3Jwb3JhdGlvbiB0aGlzIiwib2YgeGVyb3ggY29ycG9yYXRpb24gdGhpcyBwYXJhZ3JhcGgiLCJ4ZXJveCBjb3Jwb3JhdGlvbiB0aGlzIHBhcmFncmFwaCBhbmQiLCJjb3Jwb3JhdGlvbiB0aGlzIHBhcmFncmFwaCBhbmQgdGhlIiwidGhpcyBwYXJhZ3JhcGggYW5kIHRoZSBvbmUiLCJwYXJhZ3JhcGggYW5kIHRoZSBvbmUgYWZ0ZXIiLCJhbmQgdGhlIG9uZSBhZnRlciBpdCIsInRoZSBvbmUgYWZ0ZXIgaXQgYW55Iiwib25lIGFmdGVyIGl0IGFueSBkaXN0cmlidXRpb24iLCJhZnRlciBpdCBhbnkgZGlzdHJpYnV0aW9uIG9mIiwiaXQgYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIiwiYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIHNvZnR3YXJlIiwiZGlzdHJpYnV0aW9uIG9mIHRoaXMgc29mdHdhcmUgb3IiLCJvZiB0aGlzIHNvZnR3YXJlIG9yIGRlcml2YXRpdmUiLCJ0aGlzIHNvZnR3YXJlIG9yIGRlcml2YXRpdmUgd29ya3MiLCJzb2Z0d2FyZSBvciBkZXJpdmF0aXZlIHdvcmtzIG11c3QiLCJvciBkZXJpdmF0aXZlIHdvcmtzIG11c3QgY29tcGx5IiwiZGVyaXZhdGl2ZSB3b3JrcyBtdXN0IGNvbXBseSB3aXRoIiwid29ya3MgbXVzdCBjb21wbHkgd2l0aCBhbGwiLCJtdXN0IGNvbXBseSB3aXRoIGFsbCBhcHBsaWNhYmxlIiwiY29tcGx5IHdpdGggYWxsIGFwcGxpY2FibGUgdW5pdGVkIiwid2l0aCBhbGwgYXBwbGljYWJsZSB1bml0ZWQgc3RhdGVzIiwiYWxsIGFwcGxpY2FibGUgdW5pdGVkIHN0YXRlcyBleHBvcnQiLCJhcHBsaWNhYmxlIHVuaXRlZCBzdGF0ZXMgZXhwb3J0IGNvbnRyb2wiLCJ1bml0ZWQgc3RhdGVzIGV4cG9ydCBjb250cm9sIGxhd3MiLCJzdGF0ZXMgZXhwb3J0IGNvbnRyb2wgbGF3cyB0aGlzIiwiZXhwb3J0IGNvbnRyb2wgbGF3cyB0aGlzIHNvZnR3YXJlIiwiY29udHJvbCBsYXdzIHRoaXMgc29mdHdhcmUgaXMiLCJsYXdzIHRoaXMgc29mdHdhcmUgaXMgbWFkZSIsImF2YWlsYWJsZSBhcyBpcyBhbmQgeGVyb3giLCJhcyBpcyBhbmQgeGVyb3ggY29ycG9yYXRpb24iLCJpcyBhbmQgeGVyb3ggY29ycG9yYXRpb24gZGlzY2xhaW1zIiwiYW5kIHhlcm94IGNvcnBvcmF0aW9uIGRpc2NsYWltcyBhbGwiLCJ4ZXJveCBjb3Jwb3JhdGlvbiBkaXNjbGFpbXMgYWxsIHdhcnJhbnRpZXMiLCJjb3Jwb3JhdGlvbiBkaXNjbGFpbXMgYWxsIHdhcnJhbnRpZXMgZXhwcmVzcyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgWC5OZXQsIEluYy4gTGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBYLk5ldCwgSW5jLiBMYWZheWV0dGUsIENhbGlmb3JuaWEsIFVTQVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cblRoaXMgYWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGluIGFsbCByZXNwZWN0cyBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSBhbmQgYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4iXSwibGljZW5zZUlkcyI6WyJYbmV0Il0sImtleXdvcmRzIjpbInRoZSB4IG5ldCIsIm5ldCBpbmMgbGljZW5zZSIsImluYyBsaWNlbnNlIGNvcHlyaWdodCIsIjIwMDAgMjAwMSB4IiwiMjAwMSB4IG5ldCIsIm5ldCBpbmMgbGFmYXlldHRlIiwiaW5jIGxhZmF5ZXR0ZSBjYWxpZm9ybmlhIiwibGFmYXlldHRlIGNhbGlmb3JuaWEgdXNhIiwiYmUgZ292ZXJuZWQgaW4iLCJnb3Zlcm5lZCBpbiBhbGwiLCJjYWxpZm9ybmlhIGFuZCBieSIsImFuZCBieSB0aGUiLCJ0aGUgeCBuZXQgaW5jIiwieCBuZXQgaW5jIGxpY2Vuc2UiLCJuZXQgaW5jIGxpY2Vuc2UgY29weXJpZ2h0IiwiaW5jIGxpY2Vuc2UgY29weXJpZ2h0IGMiLCJjIDIwMDAgMjAwMSB4IiwiMjAwMCAyMDAxIHggbmV0IiwiMjAwMSB4IG5ldCBpbmMiLCJ4IG5ldCBpbmMgbGFmYXlldHRlIiwibmV0IGluYyBsYWZheWV0dGUgY2FsaWZvcm5pYSIsImluYyBsYWZheWV0dGUgY2FsaWZvcm5pYSB1c2EiLCJsYWZheWV0dGUgY2FsaWZvcm5pYSB1c2EgcGVybWlzc2lvbiIsInRoZSBzb2Z0d2FyZSB0aGlzIGFncmVlbWVudCIsInNvZnR3YXJlIHRoaXMgYWdyZWVtZW50IHNoYWxsIiwic2hhbGwgYmUgZ292ZXJuZWQgaW4iLCJiZSBnb3Zlcm5lZCBpbiBhbGwiLCJnb3Zlcm5lZCBpbiBhbGwgcmVzcGVjdHMiLCJyZXNwZWN0cyBieSB0aGUgbGF3cyIsIm9mIGNhbGlmb3JuaWEgYW5kIGJ5IiwiY2FsaWZvcm5pYSBhbmQgYnkgdGhlIiwiYW5kIGJ5IHRoZSBsYXdzIiwidGhlIHggbmV0IGluYyBsaWNlbnNlIiwieCBuZXQgaW5jIGxpY2Vuc2UgY29weXJpZ2h0IiwibmV0IGluYyBsaWNlbnNlIGNvcHlyaWdodCBjIiwiaW5jIGxpY2Vuc2UgY29weXJpZ2h0IGMgMjAwMCIsImxpY2Vuc2UgY29weXJpZ2h0IGMgMjAwMCAyMDAxIiwiY29weXJpZ2h0IGMgMjAwMCAyMDAxIHgiLCJjIDIwMDAgMjAwMSB4IG5ldCIsIjIwMDAgMjAwMSB4IG5ldCBpbmMiLCIyMDAxIHggbmV0IGluYyBsYWZheWV0dGUiLCJ4IG5ldCBpbmMgbGFmYXlldHRlIGNhbGlmb3JuaWEiLCJuZXQgaW5jIGxhZmF5ZXR0ZSBjYWxpZm9ybmlhIHVzYSIsImluYyBsYWZheWV0dGUgY2FsaWZvcm5pYSB1c2EgcGVybWlzc2lvbiIsImxhZmF5ZXR0ZSBjYWxpZm9ybmlhIHVzYSBwZXJtaXNzaW9uIGlzIiwiZGVhbGluZ3MgaW4gdGhlIHNvZnR3YXJlIHRoaXMiLCJpbiB0aGUgc29mdHdhcmUgdGhpcyBhZ3JlZW1lbnQiLCJ0aGUgc29mdHdhcmUgdGhpcyBhZ3JlZW1lbnQgc2hhbGwiLCJzb2Z0d2FyZSB0aGlzIGFncmVlbWVudCBzaGFsbCBiZSIsImFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBpbiIsInNoYWxsIGJlIGdvdmVybmVkIGluIGFsbCIsImJlIGdvdmVybmVkIGluIGFsbCByZXNwZWN0cyIsImdvdmVybmVkIGluIGFsbCByZXNwZWN0cyBieSIsImFsbCByZXNwZWN0cyBieSB0aGUgbGF3cyIsInJlc3BlY3RzIGJ5IHRoZSBsYXdzIG9mIiwic3RhdGUgb2YgY2FsaWZvcm5pYSBhbmQgYnkiLCJvZiBjYWxpZm9ybmlhIGFuZCBieSB0aGUiLCJjYWxpZm9ybmlhIGFuZCBieSB0aGUgbGF3cyIsImFuZCBieSB0aGUgbGF3cyBvZiJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJZYWhvbyEgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMS4wIChZUEwpXG5cblRoaXMgWWFob28hIFB1YmxpYyBMaWNlbnNlICh0aGlzIFwiQWdyZWVtZW50XCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IHRoYXQgZGVzY3JpYmVzIHRoZSB0ZXJtcyB1bmRlciB3aGljaCBZYWhvbyEgSW5jLiwgYSBEZWxhd2FyZSBjb3Jwb3JhdGlvbiBoYXZpbmcgaXRzIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBhdCA3MDEgRmlyc3QgQXZlbnVlLCBTdW5ueXZhbGUsIENhbGlmb3JuaWEgOTQwODkgKFwiWWFob28hXCIpIHdpbGwgcHJvdmlkZSBzb2Z0d2FyZSB0byB5b3UgdmlhIGRvd25sb2FkIG9yIG90aGVyd2lzZSAoXCJTb2Z0d2FyZVwiKS4gQnkgdXNpbmcgdGhlIFNvZnR3YXJlLCB5b3UsIGFuIGluZGl2aWR1YWwgb3IgYW4gZW50aXR5IChcIllvdVwiKSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuXG5cbkluIGNvbnNpZGVyYXRpb24gb2YgdGhlIG11dHVhbCBwcm9taXNlcyBhbmQgdXBvbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGJlbG93LCB0aGUgcGFydGllcyBhZ3JlZSBhcyBmb2xsb3dzOlxuXG4gICAxLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZVxuXG4gICAgICAxLjEgLSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgWWFob28hIGhlcmVieSBncmFudHMgdG8gWW91LCB1bmRlciBhbnkgYW5kIGFsbCBvZiBpdHMgY29weXJpZ2h0IGludGVyZXN0IGluIGFuZCB0byB0aGUgU29mdHdhcmUsIGEgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgdG8gY29weSwgbW9kaWZ5LCBjb21waWxlLCBleGVjdXRlLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIE1vZGlmaWNhdGlvbnMuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFueSBjaGFuZ2UgdG8sIGFkZGl0aW9uIHRvLCBvciBhYnJpZGdlbWVudCBvZiB0aGUgU29mdHdhcmUgbWFkZSBieSBZb3UgaXMgYSBcIk1vZGlmaWNhdGlvbjtcIiBob3dldmVyLCBhbnkgZmlsZSBZb3UgYWRkIHRvIHRoZSBTb2Z0d2FyZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IHBhcnQgb2YgdGhlIFNvZnR3YXJlIGlzIG5vdCBhIFwiTW9kaWZpY2F0aW9uLlwiXG5cbiAgICAgIDEuMiAtIElmIFlvdSBhcmUgYW4gaW5kaXZpZHVhbCBhY3Rpbmcgb24gYmVoYWxmIG9mIGEgY29ycG9yYXRpb24gb3Igb3RoZXIgZW50aXR5LCBZb3VyIHVzZSBvZiB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBpcyBzdWJqZWN0IHRvIFlvdXIgaGF2aW5nIHRoZSBhdXRob3JpdHkgdG8gYmluZCBzdWNoIGNvcnBvcmF0aW9uIG9yIGVudGl0eSB0byB0aGlzIEFncmVlbWVudC4gUHJvdmlkaW5nIGNvcGllcyB0byBwZXJzb25zIHdpdGhpbiBzdWNoIGNvcnBvcmF0aW9uIG9yIGVudGl0eSBpcyBub3QgY29uc2lkZXJlZCBkaXN0cmlidXRpb24gZm9yIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50LlxuXG4gICAgICAxLjMgLSBGb3IgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gc291cmNlIGNvZGUgZm9ybWF0LCBZb3UgbXVzdCBkbyBzbyBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb21wbGV0ZSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IHdpdGggWW91ciBkaXN0cmlidXRpb24uIFdpdGggcmVzcGVjdCB0byBhbnkgTW9kaWZpY2F0aW9uIFlvdSBkaXN0cmlidXRlIGluIHNvdXJjZSBjb2RlIGZvcm1hdCwgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgYXBwbHkgdG8gWW91IGluIHRoZSBzYW1lIHdheSB0aG9zZSB0ZXJtcyBhcHBseSB0byBZYWhvbyEgd2l0aCByZXNwZWN0IHRvIHRoZSBTb2Z0d2FyZS4gSW4gb3RoZXIgd29yZHMsIHdoZW4gWW91IGFyZSBkaXN0cmlidXRpbmcgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCwgWW91IFwic3RhbmQgaW4gdGhlIHNob2VzXCIgb2YgWWFob28hIGluIHRlcm1zIG9mIHRoZSByaWdodHMgWW91IGdyYW50IGFuZCBob3cgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGFwcGx5IHRvIFlvdSBhbmQgdGhlIGxpY2Vuc2VlcyBvZiBZb3VyIE1vZGlmaWNhdGlvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB3aGVuIFlvdSBcInN0YW5kIGluIHRoZSBzaG9lc1wiIG9mIFlhaG9vISwgWW91IGFyZSBub3Qgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIHByb3Zpc2lvbiB1bmRlciBTZWN0aW9uIDcsIHdoaWNoIHJlcXVpcmVzIGFsbCBkaXNwdXRlcyB1bmRlciB0aGlzIEFncmVlbWVudCB0byBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgZmVkZXJhbCBvciBzdGF0ZSBjb3VydHMgb2Ygbm9ydGhlcm4gQ2FsaWZvcm5pYS5cblxuICAgICAgMS40IC0gRm9yIHRoZSBTb2Z0d2FyZSBvciBhbnkgTW9kaWZpY2F0aW9uIFlvdSBkaXN0cmlidXRlIGluIGNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm1hdCwgWW91IG11c3QgYWxzbyBwcm92aWRlIHJlY2lwaWVudHMgd2l0aCBhY2Nlc3MgdG8gdGhlIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbiBpbiBzb3VyY2UgY29kZSBmb3JtYXQgYWxvbmcgd2l0aCBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQuIFRoZSBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbnMgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybWF0IG1heSBiZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiBJbiBhZGRpdGlvbiwgWW91IG11c3QgbWFrZSBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IGxpY2Vuc2UgdGVybXMgYXBwbHlpbmcgdG8gc3VjaCBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb24gdGhhdCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUgYW5kIG5vdCBieSBZYWhvbyEsIGFuZCB0aGF0IHN1Y2ggbGljZW5zZSBkb2VzIG5vdCByZXN0cmljdCByZWNpcGllbnRzIGZyb20gZXhlcmNpc2luZyByaWdodHMgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIHRoZSBTb2Z0d2FyZSBncmFudGVkIGJ5IFlhaG9vISB1bmRlciB0aGlzIEFncmVlbWVudCBvciByaWdodHMgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIGFueSBNb2RpZmljYXRpb24gZ3JhbnRlZCBieSBZb3UgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMS4zLlxuXG4gICAgICAxLjUgLSBUaGlzIEFncmVlbWVudCBkb2VzIG5vdCBsaW1pdCBZb3VyIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgZmlsZXMgdGhhdCBhcmUgZW50aXJlbHkgWW91ciBvd24gd29yayAoaS5lLiwgd2hpY2ggZG8gbm90IGluY29ycG9yYXRlIGFueSBwb3J0aW9uIG9mIHRoZSBTb2Z0d2FyZSBhbmQgYXJlIG5vdCBNb2RpZmljYXRpb25zKSB1bmRlciBhbnkgdGVybXMgWW91IGNob29zZS5cblxuICAgMi4gU3VwcG9ydFxuXG4gICBZYWhvbyEgaGFzIG5vIG9ibGlnYXRpb24gdG8gcHJvdmlkZSB0ZWNobmljYWwgc3VwcG9ydCBvciB1cGRhdGVzIHRvIFlvdS4gTm90aGluZyBpbiB0aGlzIEFncmVlbWVudCByZXF1aXJlcyBZYWhvbyEgdG8gZW50ZXIgaW50byBhbnkgbGljZW5zZSB3aXRoIFlvdSBmb3IgYW55IG90aGVyIGVkaXRpb24gb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAzLiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzXG5cbiAgICAgIDMuMSAtIEV4Y2VwdCBmb3IgdGhlIGxpY2Vuc2UgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgY29weXJpZ2h0IGluIFNlY3Rpb24gMS4xLCBubyByaWdodHMsIGxpY2Vuc2VzIG9yIGZvcmJlYXJhbmNlcyBhcmUgZ3JhbnRlZCBvciBtYXkgYXJpc2UgaW4gcmVsYXRpb24gdG8gdGhpcyBBZ3JlZW1lbnQgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBleGhhdXN0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMsIGluY2x1ZGluZyBhbGwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgdGhhdCBhcmUgbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSBoZXJlYnkgcmVzZXJ2ZWQuXG5cbiAgICAgIDMuMiAtIEluIGFueSBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBvciBpbiBhbnkgTW9kaWZpY2F0aW9uIHlvdSBjcmVhdGUsIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlLCBhbnkgYW5kIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgU29mdHdhcmUgaW4gdGhlIHNhbWUgZm9ybSBhcyB0aGV5IGFwcGVhciBpbiB0aGUgU29mdHdhcmUuIFRoaXMgaW5jbHVkZXMgdGhlIHByZXNlcnZhdGlvbiBvZiBhdHRyaWJ1dGlvbiBub3RpY2VzIGluIHRoZSBmb3JtIG9mIHRyYWRlbWFya3Mgb3IgbG9nb3MgdGhhdCBleGlzdCB3aXRoaW4gYSB1c2VyIGludGVyZmFjZSBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICAgIDMuMyAtIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBncmFudCBZb3UgcmlnaHRzIHRvIHVzZSBhbnkgcGFydHkncyBuYW1lLCBsb2dvLCBvciB0cmFkZW1hcmtzLCBleGNlcHQgc29sZWx5IGFzIG5lY2Vzc2FyeSB0byBjb21wbHkgd2l0aCBTZWN0aW9uIDMuMi5cblxuICAgNC4gRGlzY2xhaW1lciBvZiBXYXJyYW50aWVzXG5cbiAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIFlBSE9PISBNQUtFUyBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQsIE9SIFNUQVRVVE9SWSBSRUdBUkRJTkcgT1IgUkVMQVRJTkcgVE8gVEhFIFNPRlRXQVJFLiBTUEVDSUZJQ0FMTFksIFlBSE9PISBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwgQkUgRVJST1IgRlJFRSBPUiBXSUxMIFBFUkZPUk0gSU4gQU4gVU5JTlRFUlJVUFRFRCBNQU5ORVIuIFRPIFRIRSBHUkVBVEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIFlBSE9PISBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSAoRVZFTiBJRiBZQUhPTyEgSEFEIEJFRU4gSU5GT1JNRUQgT0YgU1VDSCBQVVJQT1NFKSwgQU5EIE5PTklORlJJTkdFTUVOVCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFNPRlRXQVJFLCBBTlkgTU9ESUZJQ0FUSU9OUyBUSEVSRVRPIEFORCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFVTRSBPRiBUSEUgRk9SRUdPSU5HLlxuXG4gICA1LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eVxuXG4gICBJTiBOTyBFVkVOVCBXSUxMIFlBSE9PISBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgS0lORCAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NTIE9GIFBST0ZJVFMsIExPU1MgT0YgVVNFLCBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgREFUQSwgQ09TVCBPRiBDT1ZFUikgSU4gQ09OTkVDVElPTiBXSVRIIE9SIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRIRSBGVVJOSVNISU5HLCBQRVJGT1JNQU5DRSBPUiBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIEFOWSBPVEhFUiBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIFdIRVRIRVIgQUxMRUdFRCBBUyBBIEJSRUFDSCBPRiBDT05UUkFDVCBPUiBUT1JUSU9VUyBDT05EVUNULCBJTkNMVURJTkcgTkVHTElHRU5DRSwgQU5EIEVWRU4gSUYgWUFIT08hIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuICAgNi4gVGVybSBhbmQgVGVybWluYXRpb25cblxuICAgICAgNi4xIC0gVGhpcyBBZ3JlZW1lbnQgd2lsbCBjb250aW51ZSBpbiBlZmZlY3QgdW5sZXNzIGFuZCB1bnRpbCB0ZXJtaW5hdGVkIGVhcmxpZXIgcHVyc3VhbnQgdG8gdGhpcyBTZWN0aW9uIDYuXG5cbiAgICAgIDYuMiAtIEluIHRoZSBldmVudCBZYWhvbyEgZGV0ZXJtaW5lcyB0aGF0IFlvdSBoYXZlIGJyZWFjaGVkIHRoaXMgQWdyZWVtZW50LCBZYWhvbyEgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudC5cblxuICAgICAgNi4zIC0gQWxsIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyIHNoYWxsIHRlcm1pbmF0ZSB1cG9uIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4gVGVybWluYXRpb24gd2lsbCBiZSBpbiBhZGRpdGlvbiB0byBhbnkgcmlnaHRzIGFuZCByZW1lZGllcyBhdmFpbGFibGUgdG8gWWFob28hIGF0IGxhdyBvciBlcXVpdHkgb3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgICAgIDYuNCAtIFRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGFmZmVjdCB0aGUgcHJvdmlzaW9ucyByZWdhcmRpbmcgcmVzZXJ2YXRpb24gb2YgcmlnaHRzIChTZWN0aW9uIDMuMSksIHByb3Zpc2lvbnMgZGlzY2xhaW1pbmcgb3IgbGltaXRpbmcgWWFob28hJ3MgbGlhYmlsaXR5IChTZWN0aW9ucyA0IGFuZCA1KSwgVGVybWluYXRpb24gKFNlY3Rpb24gNikgb3IgTWlzY2VsbGFuZW91cyAoU2VjdGlvbiA3KSwgd2hpY2ggcHJvdmlzaW9ucyB3aWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgIDcuIE1pc2NlbGxhbmVvdXNcblxuICAgVGhpcyBBZ3JlZW1lbnQgY29udGFpbnMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgb2YgdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBvZiB0aGlzIEFncmVlbWVudCBhbmQgc3VwZXJzZWRlcyBhbGwgcHJldmlvdXMgY29tbXVuaWNhdGlvbnMsIHJlcHJlc2VudGF0aW9ucywgdW5kZXJzdGFuZGluZ3MgYW5kIGFncmVlbWVudHMsIGVpdGhlciBvcmFsIG9yIHdyaXR0ZW4sIGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHNhaWQgc3ViamVjdCBtYXR0ZXIuIFRoZSByZWxhdGlvbnNoaXAgb2YgdGhlIHBhcnRpZXMgaGVyZXVuZGVyIGlzIHRoYXQgb2YgaW5kZXBlbmRlbnQgY29udHJhY3RvcnMsIGFuZCB0aGlzIEFncmVlbWVudCB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSBwYXJ0aWVzLiBJZiBhbnkgdGVybSwgY29uZGl0aW9uLCBvciBwcm92aXNpb24gaW4gdGhpcyBBZ3JlZW1lbnQgaXMgZm91bmQgdG8gYmUgaW52YWxpZCwgdW5sYXdmdWwgb3IgdW5lbmZvcmNlYWJsZSB0byBhbnkgZXh0ZW50LCB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGNvbnN0cnVlZCBpbiBhIG1hbm5lciB0aGF0IG1vc3QgY2xvc2VseSBlZmZlY3R1YXRlcyB0aGUgaW50ZW50IG9mIHRoaXMgQWdyZWVtZW50LiBTdWNoIGludmFsaWQgdGVybSwgY29uZGl0aW9uIG9yIHByb3Zpc2lvbiB3aWxsIGJlIHNldmVyZWQgZnJvbSB0aGUgcmVtYWluaW5nIHRlcm1zLCBjb25kaXRpb25zIGFuZCBwcm92aXNpb25zLCB3aGljaCB3aWxsIGNvbnRpbnVlIHRvIGJlIHZhbGlkIGFuZCBlbmZvcmNlYWJsZSB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4gVGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBpbnRlcnByZXRlZCBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSBhbmQgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgd2l0aG91dCByZWdhcmQgdG8gY29uZmxpY3Qgb2YgbGF3IHByaW5jaXBsZXMuIFRoZSBVLk4uIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIEFncmVlbWVudC4gQWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIHRoaXMgQWdyZWVtZW50IGludm9sdmluZyBZYWhvbyEgb3IgYW55IG9mIGl0cyBzdWJzaWRpYXJpZXMgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBmZWRlcmFsIG9yIHN0YXRlIGNvdXJ0cyBvZiBub3J0aGVybiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYS4gTm8gcmlnaHRzIG1heSBiZSBhc3NpZ25lZCwgbm8gb2JsaWdhdGlvbnMgbWF5IGJlIGRlbGVnYXRlZCwgYW5kIHRoaXMgQWdyZWVtZW50IG1heSBub3QgYmUgdHJhbnNmZXJyZWQgYnkgWW91LCBpbiB3aG9sZSBvciBpbiBwYXJ0LCB3aGV0aGVyIHZvbHVudGFyeSBvciBieSBvcGVyYXRpb24gb2YgbGF3LCBpbmNsdWRpbmcgYnkgd2F5IG9mIHNhbGUgb2YgYXNzZXRzLCBtZXJnZXIgb3IgY29uc29saWRhdGlvbiwgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIFlhaG9vISwgYW5kIGFueSBwdXJwb3J0ZWQgYXNzaWdubWVudCwgZGVsZWdhdGlvbiBvciB0cmFuc2ZlciB3aXRob3V0IHN1Y2ggY29uc2VudCBzaGFsbCBiZSB2b2lkIGFiIGluaXRpby4gQW55IHdhaXZlciBvZiB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBvciBvZiBhIHBhcnR5J3MgcmlnaHRzIG9yIHJlbWVkaWVzIHVuZGVyIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW4gd3JpdGluZyB0byBiZSBlZmZlY3RpdmUuIEZhaWx1cmUsIG5lZ2xlY3Qgb3IgZGVsYXkgYnkgYSBwYXJ0eSB0byBlbmZvcmNlIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IG9yIGl0cyByaWdodHMgb3IgcmVtZWRpZXMgYXQgYW55IHRpbWUsIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBvciBiZSBkZWVtZWQgdG8gYmUgYSB3YWl2ZXIgb2Ygc3VjaCBwYXJ0eSdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgd2lsbCBub3QgaW4gYW55IHdheSBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHRoZSB3aG9sZSBvciBhbnkgcGFydCBvZiB0aGlzIEFncmVlbWVudCBvciBwcmVqdWRpY2Ugc3VjaCBwYXJ0eSdzIHJpZ2h0IHRvIHRha2Ugc3Vic2VxdWVudCBhY3Rpb24uIl0sImxpY2Vuc2VJZHMiOlsiWVBMLTEuMCJdLCJrZXl3b3JkcyI6WyIxIDAgeXBsIiwiMCB5cGwgdGhpcyIsInRoZSBldmVudCB5YWhvbyIsImV2ZW50IHlhaG9vIGRldGVybWluZXMiLCJ5YWhvbyBkZXRlcm1pbmVzIHRoYXQiLCJkZXRlcm1pbmVzIHRoYXQgeW91IiwieW91IGhhdmUgYnJlYWNoZWQiLCJoYXZlIGJyZWFjaGVkIHRoaXMiLCJ2ZXJzaW9uIDEgMCB5cGwiLCIxIDAgeXBsIHRoaXMiLCIwIHlwbCB0aGlzIHlhaG9vIiwiaW4gdGhlIGV2ZW50IHlhaG9vIiwidGhlIGV2ZW50IHlhaG9vIGRldGVybWluZXMiLCJldmVudCB5YWhvbyBkZXRlcm1pbmVzIHRoYXQiLCJ5YWhvbyBkZXRlcm1pbmVzIHRoYXQgeW91IiwiZGV0ZXJtaW5lcyB0aGF0IHlvdSBoYXZlIiwidGhhdCB5b3UgaGF2ZSBicmVhY2hlZCIsInlvdSBoYXZlIGJyZWFjaGVkIHRoaXMiLCJoYXZlIGJyZWFjaGVkIHRoaXMgYWdyZWVtZW50IiwiYnJlYWNoZWQgdGhpcyBhZ3JlZW1lbnQgeWFob28iLCJsaWNlbnNlIHZlcnNpb24gMSAwIHlwbCIsInZlcnNpb24gMSAwIHlwbCB0aGlzIiwiMSAwIHlwbCB0aGlzIHlhaG9vIiwiMCB5cGwgdGhpcyB5YWhvbyBwdWJsaWMiLCIyIGluIHRoZSBldmVudCB5YWhvbyIsImluIHRoZSBldmVudCB5YWhvbyBkZXRlcm1pbmVzIiwidGhlIGV2ZW50IHlhaG9vIGRldGVybWluZXMgdGhhdCIsImV2ZW50IHlhaG9vIGRldGVybWluZXMgdGhhdCB5b3UiLCJ5YWhvbyBkZXRlcm1pbmVzIHRoYXQgeW91IGhhdmUiLCJkZXRlcm1pbmVzIHRoYXQgeW91IGhhdmUgYnJlYWNoZWQiLCJ0aGF0IHlvdSBoYXZlIGJyZWFjaGVkIHRoaXMiLCJ5b3UgaGF2ZSBicmVhY2hlZCB0aGlzIGFncmVlbWVudCIsImhhdmUgYnJlYWNoZWQgdGhpcyBhZ3JlZW1lbnQgeWFob28iLCJicmVhY2hlZCB0aGlzIGFncmVlbWVudCB5YWhvbyBtYXkiXX0seyJsaWNlbnNlVGV4dHMiOlsiWWFob28hIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDEuMSAoWVBMKVxuXG5UaGlzIFlhaG9vISBQdWJsaWMgTGljZW5zZSAodGhpcyBcIkFncmVlbWVudFwiKSBpcyBhIGxlZ2FsIGFncmVlbWVudCB0aGF0IGRlc2NyaWJlcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggWWFob28hIEluYy4sIGEgRGVsYXdhcmUgY29ycG9yYXRpb24gaGF2aW5nIGl0cyBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MgYXQgNzAxIEZpcnN0IEF2ZW51ZSwgU3Vubnl2YWxlLCBDYWxpZm9ybmlhIDk0MDg5IChcIllhaG9vIVwiKSB3aWxsIHByb3ZpZGUgc29mdHdhcmUgdG8geW91IHZpYSBkb3dubG9hZCBvciBvdGhlcndpc2UgKFwiU29mdHdhcmVcIikuIEJ5IHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91LCBhbiBpbmRpdmlkdWFsIG9yIGFuIGVudGl0eSAoXCJZb3VcIikgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LlxuXG5JbiBjb25zaWRlcmF0aW9uIG9mIHRoZSBtdXR1YWwgcHJvbWlzZXMgYW5kIHVwb24gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBiZWxvdywgdGhlIHBhcnRpZXMgYWdyZWUgYXMgZm9sbG93czpcblxuICAgMS4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2VcblxuICAgICAgMS4xIC0gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIFlhaG9vISBoZXJlYnkgZ3JhbnRzIHRvIFlvdSwgdW5kZXIgYW55IGFuZCBhbGwgb2YgaXRzIGNvcHlyaWdodCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIFNvZnR3YXJlLCBhIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSBsaWNlbnNlIHRvIGNvcHksIG1vZGlmeSwgY29tcGlsZSwgZXhlY3V0ZSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBNb2RpZmljYXRpb25zLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50LCBhbnkgY2hhbmdlIHRvLCBhZGRpdGlvbiB0bywgb3IgYWJyaWRnZW1lbnQgb2YgdGhlIFNvZnR3YXJlIG1hZGUgYnkgWW91IGlzIGEgXCJNb2RpZmljYXRpb247XCIgaG93ZXZlciwgYW55IGZpbGUgWW91IGFkZCB0byB0aGUgU29mdHdhcmUgdGhhdCBkb2VzIG5vdCBjb250YWluIGFueSBwYXJ0IG9mIHRoZSBTb2Z0d2FyZSBpcyBub3QgYSBcIk1vZGlmaWNhdGlvbi5cIlxuXG4gICAgICAxLjIgLSBJZiBZb3UgYXJlIGFuIGluZGl2aWR1YWwgYWN0aW5nIG9uIGJlaGFsZiBvZiBhIGNvcnBvcmF0aW9uIG9yIG90aGVyIGVudGl0eSwgWW91ciB1c2Ugb2YgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gaXMgc3ViamVjdCB0byBZb3VyIGhhdmluZyB0aGUgYXV0aG9yaXR5IHRvIGJpbmQgc3VjaCBjb3Jwb3JhdGlvbiBvciBlbnRpdHkgdG8gdGhpcyBBZ3JlZW1lbnQuIFByb3ZpZGluZyBjb3BpZXMgdG8gcGVyc29ucyB3aXRoaW4gc3VjaCBjb3Jwb3JhdGlvbiBvciBlbnRpdHkgaXMgbm90IGNvbnNpZGVyZWQgZGlzdHJpYnV0aW9uIGZvciBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudC5cblxuICAgICAgMS4zIC0gRm9yIHRoZSBTb2Z0d2FyZSBvciBhbnkgTW9kaWZpY2F0aW9uIFlvdSBkaXN0cmlidXRlIGluIHNvdXJjZSBjb2RlIGZvcm1hdCwgWW91IG11c3QgZG8gc28gb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29tcGxldGUgY29weSBvZiB0aGlzIEFncmVlbWVudCB3aXRoIFlvdXIgZGlzdHJpYnV0aW9uLiBXaXRoIHJlc3BlY3QgdG8gYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBzb3VyY2UgY29kZSBmb3JtYXQsIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCB3aWxsIGFwcGx5IHRvIFlvdSBpbiB0aGUgc2FtZSB3YXkgdGhvc2UgdGVybXMgYXBwbHkgdG8gWWFob28hIHdpdGggcmVzcGVjdCB0byB0aGUgU29mdHdhcmUuIEluIG90aGVyIHdvcmRzLCB3aGVuIFlvdSBhcmUgZGlzdHJpYnV0aW5nIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIFlvdSBcInN0YW5kIGluIHRoZSBzaG9lc1wiIG9mIFlhaG9vISBpbiB0ZXJtcyBvZiB0aGUgcmlnaHRzIFlvdSBncmFudCBhbmQgaG93IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcHBseSB0byBZb3UgYW5kIHRoZSBsaWNlbnNlZXMgb2YgWW91ciBNb2RpZmljYXRpb25zLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgd2hlbiBZb3UgXCJzdGFuZCBpbiB0aGUgc2hvZXNcIiBvZiBZYWhvbyEsIFlvdSBhcmUgbm90IHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBwcm92aXNpb24gdW5kZXIgU2VjdGlvbiA3LCB3aGljaCByZXF1aXJlcyBhbGwgZGlzcHV0ZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdG8gYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIGZlZGVyYWwgb3Igc3RhdGUgY291cnRzIG9mIG5vcnRoZXJuIENhbGlmb3JuaWEuXG5cbiAgICAgIDEuNCAtIEZvciB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtYXQsIFlvdSBtdXN0IGFsc28gcHJvdmlkZSByZWNpcGllbnRzIHdpdGggYWNjZXNzIHRvIHRoZSBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb24gaW4gc291cmNlIGNvZGUgZm9ybWF0IGFsb25nIHdpdGggYSBjb21wbGV0ZSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50LiBUaGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb25zIGluIGNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm1hdCBtYXkgYmUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gSW4gYWRkaXRpb24sIFlvdSBtdXN0IG1ha2UgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBsaWNlbnNlIHRlcm1zIGFwcGx5aW5nIHRvIHN1Y2ggU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9uIHRoYXQgZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lIGFuZCBub3QgYnkgWWFob28hLCBhbmQgdGhhdCBzdWNoIGxpY2Vuc2UgZG9lcyBub3QgcmVzdHJpY3QgcmVjaXBpZW50cyBmcm9tIGV4ZXJjaXNpbmcgcmlnaHRzIGluIHRoZSBzb3VyY2UgY29kZSB0byB0aGUgU29mdHdhcmUgZ3JhbnRlZCBieSBZYWhvbyEgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgb3IgcmlnaHRzIGluIHRoZSBzb3VyY2UgY29kZSB0byBhbnkgTW9kaWZpY2F0aW9uIGdyYW50ZWQgYnkgWW91IGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEuMy5cblxuICAgICAgMS41IC0gVGhpcyBBZ3JlZW1lbnQgZG9lcyBub3QgbGltaXQgWW91ciByaWdodCB0byBkaXN0cmlidXRlIGZpbGVzIHRoYXQgYXJlIGVudGlyZWx5IFlvdXIgb3duIHdvcmsgKGkuZS4sIHdoaWNoIGRvIG5vdCBpbmNvcnBvcmF0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgU29mdHdhcmUgYW5kIGFyZSBub3QgTW9kaWZpY2F0aW9ucykgdW5kZXIgYW55IHRlcm1zIFlvdSBjaG9vc2UuXG5cbiAgIDIuIFN1cHBvcnRcblxuICAgWWFob28hIGhhcyBubyBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgdGVjaG5pY2FsIHN1cHBvcnQgb3IgdXBkYXRlcyB0byBZb3UuIE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgcmVxdWlyZXMgWWFob28hIHRvIGVudGVyIGludG8gYW55IGxpY2Vuc2Ugd2l0aCBZb3UgZm9yIGFueSBvdGhlciBlZGl0aW9uIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgMy4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0c1xuXG4gICAgICAzLjEgLSBFeGNlcHQgZm9yIHRoZSBsaWNlbnNlIGV4cHJlc3NseSBncmFudGVkIHVuZGVyIGNvcHlyaWdodCBpbiBTZWN0aW9uIDEuMSwgbm8gcmlnaHRzLCBsaWNlbnNlcyBvciBmb3JiZWFyYW5jZXMgYXJlIGdyYW50ZWQgb3IgbWF5IGFyaXNlIGluIHJlbGF0aW9uIHRvIHRoaXMgQWdyZWVtZW50IHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXhoYXVzdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzLCBpbmNsdWRpbmcgYWxsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIHRoYXQgYXJlIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgaGVyZWJ5IHJlc2VydmVkLlxuXG4gICAgICAzLjIgLSBJbiBhbnkgY29weSBvZiB0aGUgU29mdHdhcmUgb3IgaW4gYW55IE1vZGlmaWNhdGlvbiB5b3UgY3JlYXRlLCBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSwgYW55IGFuZCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIFNvZnR3YXJlIGluIHRoZSBzYW1lIGZvcm0gYXMgdGhleSBhcHBlYXIgaW4gdGhlIFNvZnR3YXJlLiBUaGlzIGluY2x1ZGVzIHRoZSBwcmVzZXJ2YXRpb24gb2YgYXR0cmlidXRpb24gbm90aWNlcyBpbiB0aGUgZm9ybSBvZiB0cmFkZW1hcmtzIG9yIGxvZ29zIHRoYXQgZXhpc3Qgd2l0aGluIGEgdXNlciBpbnRlcmZhY2Ugb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgICAzLjMgLSBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgWW91IHJpZ2h0cyB0byB1c2UgYW55IHBhcnR5J3MgbmFtZSwgbG9nbywgb3IgdHJhZGVtYXJrcywgZXhjZXB0IHNvbGVseSBhcyBuZWNlc3NhcnkgdG8gY29tcGx5IHdpdGggU2VjdGlvbiAzLjIuXG5cbiAgIDQuIERpc2NsYWltZXIgb2YgV2FycmFudGllc1xuXG4gICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELiBZQUhPTyEgTUFLRVMgTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVELCBPUiBTVEFUVVRPUlkgUkVHQVJESU5HIE9SIFJFTEFUSU5HIFRPIFRIRSBTT0ZUV0FSRS4gU1BFQ0lGSUNBTExZLCBZQUhPTyEgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBTT0ZUV0FSRSBXSUxMIEJFIEVSUk9SIEZSRUUgT1IgV0lMTCBQRVJGT1JNIElOIEFOIFVOSU5URVJSVVBURUQgTUFOTkVSLiBUTyBUSEUgR1JFQVRFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBZQUhPTyEgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgKEVWRU4gSUYgWUFIT08hIEhBRCBCRUVOIElORk9STUVEIE9GIFNVQ0ggUFVSUE9TRSksIEFORCBOT05JTkZSSU5HRU1FTlQgV0lUSCBSRVNQRUNUIFRPIFRIRSBTT0ZUV0FSRSwgQU5ZIE1PRElGSUNBVElPTlMgVEhFUkVUTyBBTkQgV0lUSCBSRVNQRUNUIFRPIFRIRSBVU0UgT0YgVEhFIEZPUkVHT0lORy5cblxuICAgNS4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHlcblxuICAgSU4gTk8gRVZFTlQgV0lMTCBZQUhPTyEgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TUyBPRiBQUk9GSVRTLCBMT1NTIE9GIFVTRSwgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIERBVEEsIENPU1QgT0YgQ09WRVIpIElOIENPTk5FQ1RJT04gV0lUSCBPUiBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSEUgRlVSTklTSElORywgUEVSRk9STUFOQ0UgT1IgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBBTlkgT1RIRVIgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBXSEVUSEVSIEFMTEVHRUQgQVMgQSBCUkVBQ0ggT0YgQ09OVFJBQ1QgT1IgVE9SVElPVVMgQ09ORFVDVCwgSU5DTFVESU5HIE5FR0xJR0VOQ0UsIEFORCBFVkVOIElGIFlBSE9PISBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuXG5cbiAgIDYuIFRlcm0gYW5kIFRlcm1pbmF0aW9uXG5cbiAgICAgIDYuMSAtIFRoaXMgQWdyZWVtZW50IHdpbGwgY29udGludWUgaW4gZWZmZWN0IHVubGVzcyBhbmQgdW50aWwgdGVybWluYXRlZCBlYXJsaWVyIHB1cnN1YW50IHRvIHRoaXMgU2VjdGlvbiA2LlxuXG4gICAgICA2LjIgLSBJbiB0aGUgZXZlbnQgWW91IHZpb2xhdGUgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBZYWhvbyEgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudC5cblxuICAgICAgNi4zIC0gQWxsIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyIHNoYWxsIHRlcm1pbmF0ZSB1cG9uIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4gVGVybWluYXRpb24gd2lsbCBiZSBpbiBhZGRpdGlvbiB0byBhbnkgcmlnaHRzIGFuZCByZW1lZGllcyBhdmFpbGFibGUgdG8gWWFob28hIGF0IGxhdyBvciBlcXVpdHkgb3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgICAgIDYuNCAtIFRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGFmZmVjdCB0aGUgcHJvdmlzaW9ucyByZWdhcmRpbmcgcmVzZXJ2YXRpb24gb2YgcmlnaHRzIChTZWN0aW9uIDMuMSksIHByb3Zpc2lvbnMgZGlzY2xhaW1pbmcgb3IgbGltaXRpbmcgWWFob28hJ3MgbGlhYmlsaXR5IChTZWN0aW9ucyA0IGFuZCA1KSwgVGVybWluYXRpb24gKFNlY3Rpb24gNikgb3IgTWlzY2VsbGFuZW91cyAoU2VjdGlvbiA3KSwgd2hpY2ggcHJvdmlzaW9ucyB3aWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgIDcuIE1pc2NlbGxhbmVvdXNcblxuICAgVGhpcyBBZ3JlZW1lbnQgY29udGFpbnMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgb2YgdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBvZiB0aGlzIEFncmVlbWVudCBhbmQgc3VwZXJzZWRlcyBhbGwgcHJldmlvdXMgY29tbXVuaWNhdGlvbnMsIHJlcHJlc2VudGF0aW9ucywgdW5kZXJzdGFuZGluZ3MgYW5kIGFncmVlbWVudHMsIGVpdGhlciBvcmFsIG9yIHdyaXR0ZW4sIGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHNhaWQgc3ViamVjdCBtYXR0ZXIuIFRoZSByZWxhdGlvbnNoaXAgb2YgdGhlIHBhcnRpZXMgaGVyZXVuZGVyIGlzIHRoYXQgb2YgaW5kZXBlbmRlbnQgY29udHJhY3RvcnMsIGFuZCB0aGlzIEFncmVlbWVudCB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSBwYXJ0aWVzLiBJZiBhbnkgdGVybSwgY29uZGl0aW9uLCBvciBwcm92aXNpb24gaW4gdGhpcyBBZ3JlZW1lbnQgaXMgZm91bmQgdG8gYmUgaW52YWxpZCwgdW5sYXdmdWwgb3IgdW5lbmZvcmNlYWJsZSB0byBhbnkgZXh0ZW50LCB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGNvbnN0cnVlZCBpbiBhIG1hbm5lciB0aGF0IG1vc3QgY2xvc2VseSBlZmZlY3R1YXRlcyB0aGUgaW50ZW50IG9mIHRoaXMgQWdyZWVtZW50LiBTdWNoIGludmFsaWQgdGVybSwgY29uZGl0aW9uIG9yIHByb3Zpc2lvbiB3aWxsIGJlIHNldmVyZWQgZnJvbSB0aGUgcmVtYWluaW5nIHRlcm1zLCBjb25kaXRpb25zIGFuZCBwcm92aXNpb25zLCB3aGljaCB3aWxsIGNvbnRpbnVlIHRvIGJlIHZhbGlkIGFuZCBlbmZvcmNlYWJsZSB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4gVGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBpbnRlcnByZXRlZCBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSBhbmQgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgd2l0aG91dCByZWdhcmQgdG8gY29uZmxpY3Qgb2YgbGF3IHByaW5jaXBsZXMuIFRoZSBVLk4uIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIEFncmVlbWVudC4gQWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIHRoaXMgQWdyZWVtZW50IGludm9sdmluZyBZYWhvbyEgb3IgYW55IG9mIGl0cyBzdWJzaWRpYXJpZXMgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBmZWRlcmFsIG9yIHN0YXRlIGNvdXJ0cyBvZiBub3J0aGVybiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYS4gTm8gcmlnaHRzIG1heSBiZSBhc3NpZ25lZCwgbm8gb2JsaWdhdGlvbnMgbWF5IGJlIGRlbGVnYXRlZCwgYW5kIHRoaXMgQWdyZWVtZW50IG1heSBub3QgYmUgdHJhbnNmZXJyZWQgYnkgWW91LCBpbiB3aG9sZSBvciBpbiBwYXJ0LCB3aGV0aGVyIHZvbHVudGFyeSBvciBieSBvcGVyYXRpb24gb2YgbGF3LCBpbmNsdWRpbmcgYnkgd2F5IG9mIHNhbGUgb2YgYXNzZXRzLCBtZXJnZXIgb3IgY29uc29saWRhdGlvbiwgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIFlhaG9vISwgYW5kIGFueSBwdXJwb3J0ZWQgYXNzaWdubWVudCwgZGVsZWdhdGlvbiBvciB0cmFuc2ZlciB3aXRob3V0IHN1Y2ggY29uc2VudCBzaGFsbCBiZSB2b2lkIGFiIGluaXRpby4gQW55IHdhaXZlciBvZiB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBvciBvZiBhIHBhcnR5J3MgcmlnaHRzIG9yIHJlbWVkaWVzIHVuZGVyIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW4gd3JpdGluZyB0byBiZSBlZmZlY3RpdmUuIEZhaWx1cmUsIG5lZ2xlY3Qgb3IgZGVsYXkgYnkgYSBwYXJ0eSB0byBlbmZvcmNlIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IG9yIGl0cyByaWdodHMgb3IgcmVtZWRpZXMgYXQgYW55IHRpbWUsIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBvciBiZSBkZWVtZWQgdG8gYmUgYSB3YWl2ZXIgb2Ygc3VjaCBwYXJ0eSdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgd2lsbCBub3QgaW4gYW55IHdheSBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHRoZSB3aG9sZSBvciBhbnkgcGFydCBvZiB0aGlzIEFncmVlbWVudCBvciBwcmVqdWRpY2Ugc3VjaCBwYXJ0eSdzIHJpZ2h0IHRvIHRha2Ugc3Vic2VxdWVudCBhY3Rpb24uIl0sImxpY2Vuc2VJZHMiOlsiWVBMLTEuMSJdLCJrZXl3b3JkcyI6WyIxIDEgeXBsIiwiMSB5cGwgdGhpcyIsInZlcnNpb24gMSAxIHlwbCIsIjEgMSB5cGwgdGhpcyIsIjEgeXBsIHRoaXMgeWFob28iLCJsaWNlbnNlIHZlcnNpb24gMSAxIHlwbCIsInZlcnNpb24gMSAxIHlwbCB0aGlzIiwiMSAxIHlwbCB0aGlzIHlhaG9vIiwiMSB5cGwgdGhpcyB5YWhvbyBwdWJsaWMiLCJ0ZXJtcyBvZiB0aGlzIGFncmVlbWVudCB5YWhvbyIsIm9mIHRoaXMgYWdyZWVtZW50IHlhaG9vIG1heSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJab3BlIFB1YmxpYyBMaWNlbnNlIChaUEwpIFZlcnNpb24gMS4xIENvcHlyaWdodCAoYykgWm9wZSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBsaWNlbnNlIGhhcyBiZWVuIGNlcnRpZmllZCBhcyBvcGVuIHNvdXJjZS5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIGFuZCBkb2N1bWVudGF0aW9uIG1lbnRpb25pbmcgZmVhdHVyZXMgZGVyaXZlZCBmcm9tIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDpcblxuICAgXCJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFpvcGUgQ29ycG9yYXRpb24gZm9yIHVzZSBpbiB0aGUgWiBPYmplY3QgUHVibGlzaGluZyBFbnZpcm9ubWVudCAoaHR0cDovL3d3dy56b3BlLmNvbS8pLlwiXG5cbiAgIEluIHRoZSBldmVudCB0aGF0IHRoZSBwcm9kdWN0IGJlaW5nIGFkdmVydGlzZWQgaW5jbHVkZXMgYW4gaW50YWN0IFpvcGUgZGlzdHJpYnV0aW9uICh3aXRoIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmNsdWRlZCkgdGhlbiB0aGlzIGNsYXVzZSBpcyB3YWl2ZWQuXG5cbiAgIDQuIE5hbWVzIGFzc29jaWF0ZWQgd2l0aCBab3BlIG9yIFpvcGUgQ29ycG9yYXRpb24gbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBab3BlIENvcnBvcmF0aW9uLlxuXG4gICA1LiBNb2RpZmllZCByZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OlxuXG4gICBcIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgWm9wZSBDb3Jwb3JhdGlvbiBmb3IgdXNlIGluIHRoZSBaIE9iamVjdCBQdWJsaXNoaW5nIEVudmlyb25tZW50IChodHRwOi8vd3d3LnpvcGUuY29tLykuXCJcblxuICAgSW50YWN0IChyZS0pZGlzdHJpYnV0aW9ucyBvZiBhbnkgb2ZmaWNpYWwgWm9wZSByZWxlYXNlIGRvIG5vdCByZXF1aXJlIGFuIGV4dGVybmFsIGFja25vd2xlZGdlbWVudC5cblxuICAgNi4gTW9kaWZpY2F0aW9ucyBhcmUgZW5jb3VyYWdlZCBidXQgbXVzdCBiZSBwYWNrYWdlZCBzZXBhcmF0ZWx5IGFzIHBhdGNoZXMgdG8gb2ZmaWNpYWwgWm9wZSByZWxlYXNlcy4gRGlzdHJpYnV0aW9ucyB0aGF0IGRvIG5vdCBjbGVhcmx5IHNlcGFyYXRlIHRoZSBwYXRjaGVzIGZyb20gdGhlIG9yaWdpbmFsIHdvcmsgbXVzdCBiZSBjbGVhcmx5IGxhYmVsZWQgYXMgdW5vZmZpY2lhbCBkaXN0cmlidXRpb25zLiBNb2RpZmljYXRpb25zIHdoaWNoIGRvIG5vdCBjYXJyeSB0aGUgbmFtZSBab3BlIG1heSBiZSBwYWNrYWdlZCBpbiBhbnkgZm9ybSwgYXMgbG9uZyBhcyB0aGV5IGNvbmZvcm0gdG8gYWxsIG9mIHRoZSBjbGF1c2VzIGFib3ZlLlxuXG5EaXNjbGFpbWVyXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgWk9QRSBDT1JQT1JBVElPTiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBaT1BFIENPUlBPUkFUSU9OIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2YgY29udHJpYnV0aW9ucyBtYWRlIGJ5IFpvcGUgQ29ycG9yYXRpb24gYW5kIG1hbnkgaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIFpvcGUgQ29ycG9yYXRpb24uIFNwZWNpZmljIGF0dHJpYnV0aW9ucyBhcmUgbGlzdGVkIGluIHRoZSBhY2NvbXBhbnlpbmcgY3JlZGl0cyBmaWxlLiJdLCJsaWNlbnNlSWRzIjpbIlpQTC0xLjEiXSwia2V5d29yZHMiOlsienBsIHZlcnNpb24gMSIsInpvcGUgY29ycG9yYXRpb24gYWxsIiwib3BlbiBzb3VyY2UgcmVkaXN0cmlidXRpb24iLCJzb3VyY2UgcmVkaXN0cmlidXRpb24gYW5kIiwiYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIGFuZCIsImFuZCBkb2N1bWVudGF0aW9uIG1lbnRpb25pbmciLCJkb2N1bWVudGF0aW9uIG1lbnRpb25pbmcgZmVhdHVyZXMiLCJtZW50aW9uaW5nIGZlYXR1cmVzIGRlcml2ZWQiLCJmZWF0dXJlcyBkZXJpdmVkIGZyb20iLCJmcm9tIG9yIHVzZSIsInpvcGUgY29tIGluIiwiY29tIGluIHRoZSIsInRoYXQgdGhlIHByb2R1Y3QiLCJ0aGUgcHJvZHVjdCBiZWluZyIsInByb2R1Y3QgYmVpbmcgYWR2ZXJ0aXNlZCIsImJlaW5nIGFkdmVydGlzZWQgaW5jbHVkZXMiLCJhZHZlcnRpc2VkIGluY2x1ZGVzIGFuIiwiaW5jbHVkZXMgYW4gaW50YWN0IiwiYW4gaW50YWN0IHpvcGUiLCJpbnRhY3Qgem9wZSBkaXN0cmlidXRpb24iLCJ6b3BlIGRpc3RyaWJ1dGlvbiB3aXRoIiwiZGlzdHJpYnV0aW9uIHdpdGggY29weXJpZ2h0Iiwid2l0aCBjb3B5cmlnaHQgYW5kIiwiYW5kIGxpY2Vuc2UgaW5jbHVkZWQiLCJsaWNlbnNlIGluY2x1ZGVkIHRoZW4iLCJpbmNsdWRlZCB0aGVuIHRoaXMiLCJ0aGVuIHRoaXMgY2xhdXNlIiwidGhpcyBjbGF1c2UgaXMiLCJjbGF1c2UgaXMgd2FpdmVkIiwiaXMgd2FpdmVkIDQiLCJ3YWl2ZWQgNCBuYW1lcyIsIjQgbmFtZXMgYXNzb2NpYXRlZCIsIm5hbWVzIGFzc29jaWF0ZWQgd2l0aCIsImFzc29jaWF0ZWQgd2l0aCB6b3BlIiwid2l0aCB6b3BlIG9yIiwiem9wZSBvciB6b3BlIiwib3Igem9wZSBjb3Jwb3JhdGlvbiIsInpvcGUgY29ycG9yYXRpb24gbXVzdCIsImNvcnBvcmF0aW9uIG11c3Qgbm90Iiwiem9wZSBjb3Jwb3JhdGlvbiA1IiwiY29ycG9yYXRpb24gNSBtb2RpZmllZCIsIjUgbW9kaWZpZWQgcmVkaXN0cmlidXRpb25zIiwiem9wZSBjb20gaW50YWN0IiwiY29tIGludGFjdCByZSIsImludGFjdCByZSBkaXN0cmlidXRpb25zIiwicmUgZGlzdHJpYnV0aW9ucyBvZiIsImRpc3RyaWJ1dGlvbnMgb2YgYW55Iiwib2YgYW55IG9mZmljaWFsIiwiYW55IG9mZmljaWFsIHpvcGUiLCJvZmZpY2lhbCB6b3BlIHJlbGVhc2UiLCJ6b3BlIHJlbGVhc2UgZG8iLCJyZWxlYXNlIGRvIG5vdCIsIm5vdCByZXF1aXJlIGFuIiwicmVxdWlyZSBhbiBleHRlcm5hbCIsImFuIGV4dGVybmFsIGFja25vd2xlZGdlbWVudCIsImV4dGVybmFsIGFja25vd2xlZGdlbWVudCA2IiwiYWNrbm93bGVkZ2VtZW50IDYgbW9kaWZpY2F0aW9ucyIsIjYgbW9kaWZpY2F0aW9ucyBhcmUiLCJtb2RpZmljYXRpb25zIGFyZSBlbmNvdXJhZ2VkIiwiYXJlIGVuY291cmFnZWQgYnV0IiwiZW5jb3VyYWdlZCBidXQgbXVzdCIsImJ1dCBtdXN0IGJlIiwibXVzdCBiZSBwYWNrYWdlZCIsImJlIHBhY2thZ2VkIHNlcGFyYXRlbHkiLCJwYWNrYWdlZCBzZXBhcmF0ZWx5IGFzIiwic2VwYXJhdGVseSBhcyBwYXRjaGVzIiwicGF0Y2hlcyB0byBvZmZpY2lhbCIsInRvIG9mZmljaWFsIHpvcGUiLCJvZmZpY2lhbCB6b3BlIHJlbGVhc2VzIiwiem9wZSByZWxlYXNlcyBkaXN0cmlidXRpb25zIiwicmVsZWFzZXMgZGlzdHJpYnV0aW9ucyB0aGF0IiwiZGlzdHJpYnV0aW9ucyB0aGF0IGRvIiwiZG8gbm90IGNsZWFybHkiLCJub3QgY2xlYXJseSBzZXBhcmF0ZSIsImNsZWFybHkgc2VwYXJhdGUgdGhlIiwic2VwYXJhdGUgdGhlIHBhdGNoZXMiLCJ0aGUgcGF0Y2hlcyBmcm9tIiwicGF0Y2hlcyBmcm9tIHRoZSIsImxhYmVsZWQgYXMgdW5vZmZpY2lhbCIsImFzIHVub2ZmaWNpYWwgZGlzdHJpYnV0aW9ucyIsInVub2ZmaWNpYWwgZGlzdHJpYnV0aW9ucyBtb2RpZmljYXRpb25zIiwiZGlzdHJpYnV0aW9ucyBtb2RpZmljYXRpb25zIHdoaWNoIiwibW9kaWZpY2F0aW9ucyB3aGljaCBkbyIsImRvIG5vdCBjYXJyeSIsIm5vdCBjYXJyeSB0aGUiLCJjYXJyeSB0aGUgbmFtZSIsIm5hbWUgem9wZSBtYXkiLCJ6b3BlIG1heSBiZSIsIm1heSBiZSBwYWNrYWdlZCIsImJlIHBhY2thZ2VkIGluIiwicGFja2FnZWQgaW4gYW55IiwiYW55IGZvcm0gYXMiLCJmb3JtIGFzIGxvbmciLCJhcyB0aGV5IGNvbmZvcm0iLCJ0aGV5IGNvbmZvcm0gdG8iLCJjb25mb3JtIHRvIGFsbCIsIm9mIHRoZSBjbGF1c2VzIiwidGhlIGNsYXVzZXMgYWJvdmUiLCJjbGF1c2VzIGFib3ZlIGRpc2NsYWltZXIiLCJhYm92ZSBkaXNjbGFpbWVyIHRoaXMiLCJsaWNlbnNlIHpwbCB2ZXJzaW9uIDEiLCJ6cGwgdmVyc2lvbiAxIDEiLCIxIGNvcHlyaWdodCBjIHpvcGUiLCJjIHpvcGUgY29ycG9yYXRpb24gYWxsIiwiem9wZSBjb3Jwb3JhdGlvbiBhbGwgcmlnaHRzIiwiYXMgb3BlbiBzb3VyY2UgcmVkaXN0cmlidXRpb24iLCJvcGVuIHNvdXJjZSByZWRpc3RyaWJ1dGlvbiBhbmQiLCJzb3VyY2UgcmVkaXN0cmlidXRpb24gYW5kIHVzZSIsImFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgYW5kIiwiYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIGFuZCBkb2N1bWVudGF0aW9uIiwibWF0ZXJpYWxzIGFuZCBkb2N1bWVudGF0aW9uIG1lbnRpb25pbmciLCJhbmQgZG9jdW1lbnRhdGlvbiBtZW50aW9uaW5nIGZlYXR1cmVzIiwiZG9jdW1lbnRhdGlvbiBtZW50aW9uaW5nIGZlYXR1cmVzIGRlcml2ZWQiLCJtZW50aW9uaW5nIGZlYXR1cmVzIGRlcml2ZWQgZnJvbSIsImZlYXR1cmVzIGRlcml2ZWQgZnJvbSBvciIsImRlcml2ZWQgZnJvbSBvciB1c2UiLCJmcm9tIG9yIHVzZSBvZiIsInd3dyB6b3BlIGNvbSBpbiIsInpvcGUgY29tIGluIHRoZSIsImNvbSBpbiB0aGUgZXZlbnQiLCJldmVudCB0aGF0IHRoZSBwcm9kdWN0IiwidGhhdCB0aGUgcHJvZHVjdCBiZWluZyIsInRoZSBwcm9kdWN0IGJlaW5nIGFkdmVydGlzZWQiLCJwcm9kdWN0IGJlaW5nIGFkdmVydGlzZWQgaW5jbHVkZXMiLCJiZWluZyBhZHZlcnRpc2VkIGluY2x1ZGVzIGFuIiwiYWR2ZXJ0aXNlZCBpbmNsdWRlcyBhbiBpbnRhY3QiLCJpbmNsdWRlcyBhbiBpbnRhY3Qgem9wZSIsImFuIGludGFjdCB6b3BlIGRpc3RyaWJ1dGlvbiIsImludGFjdCB6b3BlIGRpc3RyaWJ1dGlvbiB3aXRoIiwiem9wZSBkaXN0cmlidXRpb24gd2l0aCBjb3B5cmlnaHQiLCJkaXN0cmlidXRpb24gd2l0aCBjb3B5cmlnaHQgYW5kIiwid2l0aCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UiLCJjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5jbHVkZWQiLCJhbmQgbGljZW5zZSBpbmNsdWRlZCB0aGVuIiwibGljZW5zZSBpbmNsdWRlZCB0aGVuIHRoaXMiLCJpbmNsdWRlZCB0aGVuIHRoaXMgY2xhdXNlIiwidGhlbiB0aGlzIGNsYXVzZSBpcyIsInRoaXMgY2xhdXNlIGlzIHdhaXZlZCIsImNsYXVzZSBpcyB3YWl2ZWQgNCIsImlzIHdhaXZlZCA0IG5hbWVzIiwid2FpdmVkIDQgbmFtZXMgYXNzb2NpYXRlZCIsIjQgbmFtZXMgYXNzb2NpYXRlZCB3aXRoIiwibmFtZXMgYXNzb2NpYXRlZCB3aXRoIHpvcGUiLCJhc3NvY2lhdGVkIHdpdGggem9wZSBvciIsIndpdGggem9wZSBvciB6b3BlIiwiem9wZSBvciB6b3BlIGNvcnBvcmF0aW9uIiwib3Igem9wZSBjb3Jwb3JhdGlvbiBtdXN0Iiwiem9wZSBjb3Jwb3JhdGlvbiBtdXN0IG5vdCIsImNvcnBvcmF0aW9uIG11c3Qgbm90IGJlIiwiZnJvbSB6b3BlIGNvcnBvcmF0aW9uIDUiLCJ6b3BlIGNvcnBvcmF0aW9uIDUgbW9kaWZpZWQiLCJjb3Jwb3JhdGlvbiA1IG1vZGlmaWVkIHJlZGlzdHJpYnV0aW9ucyIsIjUgbW9kaWZpZWQgcmVkaXN0cmlidXRpb25zIG9mIiwibW9kaWZpZWQgcmVkaXN0cmlidXRpb25zIG9mIGFueSIsInd3dyB6b3BlIGNvbSBpbnRhY3QiLCJ6b3BlIGNvbSBpbnRhY3QgcmUiLCJjb20gaW50YWN0IHJlIGRpc3RyaWJ1dGlvbnMiLCJpbnRhY3QgcmUgZGlzdHJpYnV0aW9ucyBvZiIsInJlIGRpc3RyaWJ1dGlvbnMgb2YgYW55IiwiZGlzdHJpYnV0aW9ucyBvZiBhbnkgb2ZmaWNpYWwiLCJvZiBhbnkgb2ZmaWNpYWwgem9wZSIsImFueSBvZmZpY2lhbCB6b3BlIHJlbGVhc2UiLCJvZmZpY2lhbCB6b3BlIHJlbGVhc2UgZG8iLCJ6b3BlIHJlbGVhc2UgZG8gbm90IiwicmVsZWFzZSBkbyBub3QgcmVxdWlyZSIsImRvIG5vdCByZXF1aXJlIGFuIiwibm90IHJlcXVpcmUgYW4gZXh0ZXJuYWwiLCJyZXF1aXJlIGFuIGV4dGVybmFsIGFja25vd2xlZGdlbWVudCIsImFuIGV4dGVybmFsIGFja25vd2xlZGdlbWVudCA2IiwiZXh0ZXJuYWwgYWNrbm93bGVkZ2VtZW50IDYgbW9kaWZpY2F0aW9ucyIsImFja25vd2xlZGdlbWVudCA2IG1vZGlmaWNhdGlvbnMgYXJlIiwiNiBtb2RpZmljYXRpb25zIGFyZSBlbmNvdXJhZ2VkIiwibW9kaWZpY2F0aW9ucyBhcmUgZW5jb3VyYWdlZCBidXQiLCJhcmUgZW5jb3VyYWdlZCBidXQgbXVzdCIsImVuY291cmFnZWQgYnV0IG11c3QgYmUiLCJidXQgbXVzdCBiZSBwYWNrYWdlZCIsIm11c3QgYmUgcGFja2FnZWQgc2VwYXJhdGVseSIsImJlIHBhY2thZ2VkIHNlcGFyYXRlbHkgYXMiLCJwYWNrYWdlZCBzZXBhcmF0ZWx5IGFzIHBhdGNoZXMiLCJzZXBhcmF0ZWx5IGFzIHBhdGNoZXMgdG8iLCJhcyBwYXRjaGVzIHRvIG9mZmljaWFsIiwicGF0Y2hlcyB0byBvZmZpY2lhbCB6b3BlIiwidG8gb2ZmaWNpYWwgem9wZSByZWxlYXNlcyIsIm9mZmljaWFsIHpvcGUgcmVsZWFzZXMgZGlzdHJpYnV0aW9ucyIsInpvcGUgcmVsZWFzZXMgZGlzdHJpYnV0aW9ucyB0aGF0IiwicmVsZWFzZXMgZGlzdHJpYnV0aW9ucyB0aGF0IGRvIiwiZGlzdHJpYnV0aW9ucyB0aGF0IGRvIG5vdCIsInRoYXQgZG8gbm90IGNsZWFybHkiLCJkbyBub3QgY2xlYXJseSBzZXBhcmF0ZSIsIm5vdCBjbGVhcmx5IHNlcGFyYXRlIHRoZSIsImNsZWFybHkgc2VwYXJhdGUgdGhlIHBhdGNoZXMiLCJzZXBhcmF0ZSB0aGUgcGF0Y2hlcyBmcm9tIiwidGhlIHBhdGNoZXMgZnJvbSB0aGUiLCJwYXRjaGVzIGZyb20gdGhlIG9yaWdpbmFsIiwiZnJvbSB0aGUgb3JpZ2luYWwgd29yayIsIm11c3QgYmUgY2xlYXJseSBsYWJlbGVkIiwiYmUgY2xlYXJseSBsYWJlbGVkIGFzIiwiY2xlYXJseSBsYWJlbGVkIGFzIHVub2ZmaWNpYWwiLCJsYWJlbGVkIGFzIHVub2ZmaWNpYWwgZGlzdHJpYnV0aW9ucyIsImFzIHVub2ZmaWNpYWwgZGlzdHJpYnV0aW9ucyBtb2RpZmljYXRpb25zIl19LHsibGljZW5zZVRleHRzIjpbIlpvcGUgUHVibGljIExpY2Vuc2UgKFpQTCkgVmVyc2lvbiAyLjAgVGhpcyBzb2Z0d2FyZSBpcyBDb3B5cmlnaHQgKGMpIFpvcGUgQ29ycG9yYXRpb24gKHRtKSBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIGxpY2Vuc2UgaGFzIGJlZW4gY2VydGlmaWVkIGFzIG9wZW4gc291cmNlLiBJdCBoYXMgYWxzbyBiZWVuIGRlc2lnbmF0ZWQgYXMgR1BMIGNvbXBhdGlibGUgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiAoRlNGKS5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAzLiBUaGUgbmFtZSBab3BlIENvcnBvcmF0aW9uICh0bSkgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBab3BlIENvcnBvcmF0aW9uLlxuXG4gICA0LiBUaGUgcmlnaHQgdG8gZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIG9yIHRvIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UgZG9lcyBub3QgZ2l2ZSB5b3UgdGhlIHJpZ2h0IHRvIHVzZSBTZXJ2aWNlbWFya3MgKHNtKSBvciBUcmFkZW1hcmtzICh0bSkgb2YgWm9wZSBDb3Jwb3JhdGlvbi4gVXNlIG9mIHRoZW0gaXMgY292ZXJlZCBpbiBhIHNlcGFyYXRlIGFncmVlbWVudCAoc2VlIGh0dHA6Ly93d3cuem9wZS5jb20vTWFya3MpLlxuXG4gICA1LiBJZiBhbnkgZmlsZXMgYXJlIG1vZGlmaWVkLCB5b3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS5cblxuRGlzY2xhaW1lclxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFpPUEUgQ09SUE9SQVRJT04gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgWk9QRSBDT1JQT1JBVElPTiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBab3BlIENvcnBvcmF0aW9uIGFuZCBtYW55IGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiBab3BlIENvcnBvcmF0aW9uLiBTcGVjaWZpYyBhdHRyaWJ1dGlvbnMgYXJlIGxpc3RlZCBpbiB0aGUgYWNjb21wYW55aW5nIGNyZWRpdHMgZmlsZS4iXSwibGljZW5zZUlkcyI6WyJaUEwtMi4wIl0sImtleXdvcmRzIjpbIjAgdGhpcyBzb2Z0d2FyZSIsImNvcnBvcmF0aW9uIHRtIGFuZCIsIm5hbWUgem9wZSBjb3Jwb3JhdGlvbiIsImNvcnBvcmF0aW9uIHRtIG11c3QiLCJ6b3BlIGNvcnBvcmF0aW9uIDQiLCJjb3Jwb3JhdGlvbiA0IHRoZSIsInRtIG9mIHpvcGUiLCJ6b3BlIGNvcnBvcmF0aW9uIHVzZSIsImNvcnBvcmF0aW9uIHVzZSBvZiIsImlzIGNvdmVyZWQgaW4iLCJjb3ZlcmVkIGluIGEiLCJhIHNlcGFyYXRlIGFncmVlbWVudCIsInNlcGFyYXRlIGFncmVlbWVudCBzZWUiLCJhZ3JlZW1lbnQgc2VlIGh0dHAiLCJ6b3BlIGNvbSBtYXJrcyIsImNvbSBtYXJrcyA1IiwibWFya3MgNSBpZiIsInpwbCB2ZXJzaW9uIDIgMCIsIjIgMCB0aGlzIHNvZnR3YXJlIiwiMCB0aGlzIHNvZnR3YXJlIGlzIiwiaXMgY29weXJpZ2h0IGMgem9wZSIsImMgem9wZSBjb3Jwb3JhdGlvbiB0bSIsInpvcGUgY29ycG9yYXRpb24gdG0gYW5kIiwiY29ycG9yYXRpb24gdG0gYW5kIGNvbnRyaWJ1dG9ycyIsIjMgdGhlIG5hbWUgem9wZSIsInRoZSBuYW1lIHpvcGUgY29ycG9yYXRpb24iLCJuYW1lIHpvcGUgY29ycG9yYXRpb24gdG0iLCJ6b3BlIGNvcnBvcmF0aW9uIHRtIG11c3QiLCJjb3Jwb3JhdGlvbiB0bSBtdXN0IG5vdCIsImZyb20gem9wZSBjb3Jwb3JhdGlvbiA0Iiwiem9wZSBjb3Jwb3JhdGlvbiA0IHRoZSIsImNvcnBvcmF0aW9uIDQgdGhlIHJpZ2h0IiwidHJhZGVtYXJrcyB0bSBvZiB6b3BlIiwidG0gb2Ygem9wZSBjb3Jwb3JhdGlvbiIsIm9mIHpvcGUgY29ycG9yYXRpb24gdXNlIiwiem9wZSBjb3Jwb3JhdGlvbiB1c2Ugb2YiLCJjb3Jwb3JhdGlvbiB1c2Ugb2YgdGhlbSIsInRoZW0gaXMgY292ZXJlZCBpbiIsImlzIGNvdmVyZWQgaW4gYSIsImNvdmVyZWQgaW4gYSBzZXBhcmF0ZSIsImluIGEgc2VwYXJhdGUgYWdyZWVtZW50IiwiYSBzZXBhcmF0ZSBhZ3JlZW1lbnQgc2VlIiwic2VwYXJhdGUgYWdyZWVtZW50IHNlZSBodHRwIiwiYWdyZWVtZW50IHNlZSBodHRwIHd3dyIsInNlZSBodHRwIHd3dyB6b3BlIiwid3d3IHpvcGUgY29tIG1hcmtzIiwiem9wZSBjb20gbWFya3MgNSIsImNvbSBtYXJrcyA1IGlmIiwibWFya3MgNSBpZiBhbnkiLCJsaWNlbnNlIHpwbCB2ZXJzaW9uIDIgMCIsInpwbCB2ZXJzaW9uIDIgMCB0aGlzIiwidmVyc2lvbiAyIDAgdGhpcyBzb2Z0d2FyZSIsIjIgMCB0aGlzIHNvZnR3YXJlIGlzIiwiMCB0aGlzIHNvZnR3YXJlIGlzIGNvcHlyaWdodCIsInNvZnR3YXJlIGlzIGNvcHlyaWdodCBjIHpvcGUiLCJpcyBjb3B5cmlnaHQgYyB6b3BlIGNvcnBvcmF0aW9uIiwiY29weXJpZ2h0IGMgem9wZSBjb3Jwb3JhdGlvbiB0bSIsImMgem9wZSBjb3Jwb3JhdGlvbiB0bSBhbmQiLCJ6b3BlIGNvcnBvcmF0aW9uIHRtIGFuZCBjb250cmlidXRvcnMiLCJjb3Jwb3JhdGlvbiB0bSBhbmQgY29udHJpYnV0b3JzIGFsbCIsImNvbnRyaWJ1dG9ycyBhbGwgcmlnaHRzIHJlc2VydmVkIHRoaXMiLCJkaXN0cmlidXRpb24gMyB0aGUgbmFtZSB6b3BlIiwiMyB0aGUgbmFtZSB6b3BlIGNvcnBvcmF0aW9uIiwidGhlIG5hbWUgem9wZSBjb3Jwb3JhdGlvbiB0bSIsIm5hbWUgem9wZSBjb3Jwb3JhdGlvbiB0bSBtdXN0Iiwiem9wZSBjb3Jwb3JhdGlvbiB0bSBtdXN0IG5vdCIsImNvcnBvcmF0aW9uIHRtIG11c3Qgbm90IGJlIiwicGVybWlzc2lvbiBmcm9tIHpvcGUgY29ycG9yYXRpb24gNCIsImZyb20gem9wZSBjb3Jwb3JhdGlvbiA0IHRoZSIsInpvcGUgY29ycG9yYXRpb24gNCB0aGUgcmlnaHQiLCJjb3Jwb3JhdGlvbiA0IHRoZSByaWdodCB0byIsIm9yIHRyYWRlbWFya3MgdG0gb2Ygem9wZSIsInRyYWRlbWFya3MgdG0gb2Ygem9wZSBjb3Jwb3JhdGlvbiIsInRtIG9mIHpvcGUgY29ycG9yYXRpb24gdXNlIiwib2Ygem9wZSBjb3Jwb3JhdGlvbiB1c2Ugb2YiLCJ6b3BlIGNvcnBvcmF0aW9uIHVzZSBvZiB0aGVtIiwiY29ycG9yYXRpb24gdXNlIG9mIHRoZW0gaXMiLCJvZiB0aGVtIGlzIGNvdmVyZWQgaW4iLCJ0aGVtIGlzIGNvdmVyZWQgaW4gYSIsImlzIGNvdmVyZWQgaW4gYSBzZXBhcmF0ZSIsImNvdmVyZWQgaW4gYSBzZXBhcmF0ZSBhZ3JlZW1lbnQiLCJpbiBhIHNlcGFyYXRlIGFncmVlbWVudCBzZWUiLCJhIHNlcGFyYXRlIGFncmVlbWVudCBzZWUgaHR0cCIsInNlcGFyYXRlIGFncmVlbWVudCBzZWUgaHR0cCB3d3ciLCJhZ3JlZW1lbnQgc2VlIGh0dHAgd3d3IHpvcGUiLCJzZWUgaHR0cCB3d3cgem9wZSBjb20iLCJodHRwIHd3dyB6b3BlIGNvbSBtYXJrcyIsInd3dyB6b3BlIGNvbSBtYXJrcyA1Iiwiem9wZSBjb20gbWFya3MgNSBpZiIsImNvbSBtYXJrcyA1IGlmIGFueSIsIm1hcmtzIDUgaWYgYW55IGZpbGVzIl19LHsibGljZW5zZVRleHRzIjpbIlpvcGUgUHVibGljIExpY2Vuc2UgKFpQTCkgVmVyc2lvbiAyLjEgQSBjb3B5cmlnaHQgbm90aWNlIGFjY29tcGFuaWVzIHRoaXMgbGljZW5zZSBkb2N1bWVudCB0aGF0IGlkZW50aWZpZXMgdGhlIGNvcHlyaWdodCBob2xkZXJzLlxuXG5UaGlzIGxpY2Vuc2UgaGFzIGJlZW4gY2VydGlmaWVkIGFzIG9wZW4gc291cmNlLiBJdCBoYXMgYWxzbyBiZWVuIGRlc2lnbmF0ZWQgYXMgR1BMIGNvbXBhdGlibGUgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiAoRlNGKS5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFjY29tcGFueWluZyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhY2NvbXBhbnlpbmcgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgIDMuIE5hbWVzIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIHRoZSBjb3B5cmlnaHQgaG9sZGVycy5cblxuICAgNC4gVGhlIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBvciB0byB1c2UgaXQgZm9yIGFueSBwdXJwb3NlIGRvZXMgbm90IGdpdmUgeW91IHRoZSByaWdodCB0byB1c2UgU2VydmljZW1hcmtzIChzbSkgb3IgVHJhZGVtYXJrcyAodG0pIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4gVXNlIG9mIHRoZW0gaXMgY292ZXJlZCBieSBzZXBhcmF0ZSBhZ3JlZW1lbnQgd2l0aCB0aGUgY29weXJpZ2h0IGhvbGRlcnMuXG5cbiAgIDUuIElmIGFueSBmaWxlcyBhcmUgbW9kaWZpZWQsIHlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLlxuXG5EaXNjbGFpbWVyXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iXSwibGljZW5zZUlkcyI6WyJaUEwtMi4xIl0sImtleXdvcmRzIjpbIjEgYSBjb3B5cmlnaHQiLCJjb3B5cmlnaHQgbm90aWNlIGFjY29tcGFuaWVzIiwibm90aWNlIGFjY29tcGFuaWVzIHRoaXMiLCJhY2NvbXBhbmllcyB0aGlzIGxpY2Vuc2UiLCJsaWNlbnNlIGRvY3VtZW50IHRoYXQiLCJkb2N1bWVudCB0aGF0IGlkZW50aWZpZXMiLCJ0aGF0IGlkZW50aWZpZXMgdGhlIiwiaWRlbnRpZmllcyB0aGUgY29weXJpZ2h0IiwiaG9sZGVycyB0aGlzIGxpY2Vuc2UiLCJyZXRhaW4gdGhlIGFjY29tcGFueWluZyIsInJlcHJvZHVjZSB0aGUgYWNjb21wYW55aW5nIiwiZGlzdHJpYnV0aW9uIDMgbmFtZXMiLCIzIG5hbWVzIG9mIiwiY29weXJpZ2h0IGhvbGRlcnMgNCIsImhvbGRlcnMgNCB0aGUiLCJ0bSBvZiB0aGUiLCJjb3B5cmlnaHQgaG9sZGVycyB1c2UiLCJob2xkZXJzIHVzZSBvZiIsImNvdmVyZWQgYnkgc2VwYXJhdGUiLCJieSBzZXBhcmF0ZSBhZ3JlZW1lbnQiLCJzZXBhcmF0ZSBhZ3JlZW1lbnQgd2l0aCIsImNvcHlyaWdodCBob2xkZXJzIDUiLCJob2xkZXJzIDUgaWYiLCJ6cGwgdmVyc2lvbiAyIDEiLCJ2ZXJzaW9uIDIgMSBhIiwiMiAxIGEgY29weXJpZ2h0IiwiMSBhIGNvcHlyaWdodCBub3RpY2UiLCJhIGNvcHlyaWdodCBub3RpY2UgYWNjb21wYW5pZXMiLCJjb3B5cmlnaHQgbm90aWNlIGFjY29tcGFuaWVzIHRoaXMiLCJub3RpY2UgYWNjb21wYW5pZXMgdGhpcyBsaWNlbnNlIiwiYWNjb21wYW5pZXMgdGhpcyBsaWNlbnNlIGRvY3VtZW50IiwidGhpcyBsaWNlbnNlIGRvY3VtZW50IHRoYXQiLCJsaWNlbnNlIGRvY3VtZW50IHRoYXQgaWRlbnRpZmllcyIsImRvY3VtZW50IHRoYXQgaWRlbnRpZmllcyB0aGUiLCJ0aGF0IGlkZW50aWZpZXMgdGhlIGNvcHlyaWdodCIsImlkZW50aWZpZXMgdGhlIGNvcHlyaWdodCBob2xkZXJzIiwidGhlIGNvcHlyaWdodCBob2xkZXJzIHRoaXMiLCJjb3B5cmlnaHQgaG9sZGVycyB0aGlzIGxpY2Vuc2UiLCJob2xkZXJzIHRoaXMgbGljZW5zZSBoYXMiLCJtdXN0IHJldGFpbiB0aGUgYWNjb21wYW55aW5nIiwicmV0YWluIHRoZSBhY2NvbXBhbnlpbmcgY29weXJpZ2h0IiwibXVzdCByZXByb2R1Y2UgdGhlIGFjY29tcGFueWluZyIsInJlcHJvZHVjZSB0aGUgYWNjb21wYW55aW5nIGNvcHlyaWdodCIsInRoZSBkaXN0cmlidXRpb24gMyBuYW1lcyIsImRpc3RyaWJ1dGlvbiAzIG5hbWVzIG9mIiwiMyBuYW1lcyBvZiB0aGUiLCJuYW1lcyBvZiB0aGUgY29weXJpZ2h0IiwidGhlIGNvcHlyaWdodCBob2xkZXJzIG11c3QiLCJwZXJtaXNzaW9uIGZyb20gdGhlIGNvcHlyaWdodCIsImZyb20gdGhlIGNvcHlyaWdodCBob2xkZXJzIiwidGhlIGNvcHlyaWdodCBob2xkZXJzIDQiLCJjb3B5cmlnaHQgaG9sZGVycyA0IHRoZSIsImhvbGRlcnMgNCB0aGUgcmlnaHQiLCJ0cmFkZW1hcmtzIHRtIG9mIHRoZSIsInRtIG9mIHRoZSBjb3B5cmlnaHQiLCJ0aGUgY29weXJpZ2h0IGhvbGRlcnMgdXNlIiwiY29weXJpZ2h0IGhvbGRlcnMgdXNlIG9mIiwiaG9sZGVycyB1c2Ugb2YgdGhlbSIsInRoZW0gaXMgY292ZXJlZCBieSIsImlzIGNvdmVyZWQgYnkgc2VwYXJhdGUiLCJjb3ZlcmVkIGJ5IHNlcGFyYXRlIGFncmVlbWVudCIsImJ5IHNlcGFyYXRlIGFncmVlbWVudCB3aXRoIiwic2VwYXJhdGUgYWdyZWVtZW50IHdpdGggdGhlIiwiYWdyZWVtZW50IHdpdGggdGhlIGNvcHlyaWdodCIsInRoZSBjb3B5cmlnaHQgaG9sZGVycyA1IiwiY29weXJpZ2h0IGhvbGRlcnMgNSBpZiIsImhvbGRlcnMgNSBpZiBhbnkiLCJob2xkZXJzIGFzIGlzIGFuZCIsImxpY2Vuc2UgenBsIHZlcnNpb24gMiAxIiwienBsIHZlcnNpb24gMiAxIGEiLCJ2ZXJzaW9uIDIgMSBhIGNvcHlyaWdodCIsIjIgMSBhIGNvcHlyaWdodCBub3RpY2UiLCIxIGEgY29weXJpZ2h0IG5vdGljZSBhY2NvbXBhbmllcyIsImEgY29weXJpZ2h0IG5vdGljZSBhY2NvbXBhbmllcyB0aGlzIiwiY29weXJpZ2h0IG5vdGljZSBhY2NvbXBhbmllcyB0aGlzIGxpY2Vuc2UiLCJub3RpY2UgYWNjb21wYW5pZXMgdGhpcyBsaWNlbnNlIGRvY3VtZW50IiwiYWNjb21wYW5pZXMgdGhpcyBsaWNlbnNlIGRvY3VtZW50IHRoYXQiLCJ0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgdGhhdCBpZGVudGlmaWVzIiwibGljZW5zZSBkb2N1bWVudCB0aGF0IGlkZW50aWZpZXMgdGhlIiwiZG9jdW1lbnQgdGhhdCBpZGVudGlmaWVzIHRoZSBjb3B5cmlnaHQiLCJ0aGF0IGlkZW50aWZpZXMgdGhlIGNvcHlyaWdodCBob2xkZXJzIiwiaWRlbnRpZmllcyB0aGUgY29weXJpZ2h0IGhvbGRlcnMgdGhpcyIsInRoZSBjb3B5cmlnaHQgaG9sZGVycyB0aGlzIGxpY2Vuc2UiLCJjb3B5cmlnaHQgaG9sZGVycyB0aGlzIGxpY2Vuc2UgaGFzIiwiaG9sZGVycyB0aGlzIGxpY2Vuc2UgaGFzIGJlZW4iLCJjb2RlIG11c3QgcmV0YWluIHRoZSBhY2NvbXBhbnlpbmciLCJtdXN0IHJldGFpbiB0aGUgYWNjb21wYW55aW5nIGNvcHlyaWdodCIsInJldGFpbiB0aGUgYWNjb21wYW55aW5nIGNvcHlyaWdodCBub3RpY2UiLCJmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhY2NvbXBhbnlpbmciLCJtdXN0IHJlcHJvZHVjZSB0aGUgYWNjb21wYW55aW5nIGNvcHlyaWdodCIsInJlcHJvZHVjZSB0aGUgYWNjb21wYW55aW5nIGNvcHlyaWdodCBub3RpY2UiLCJ3aXRoIHRoZSBkaXN0cmlidXRpb24gMyBuYW1lcyIsInRoZSBkaXN0cmlidXRpb24gMyBuYW1lcyBvZiIsImRpc3RyaWJ1dGlvbiAzIG5hbWVzIG9mIHRoZSIsIjMgbmFtZXMgb2YgdGhlIGNvcHlyaWdodCIsIm5hbWVzIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyIsIm9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBtdXN0IiwidGhlIGNvcHlyaWdodCBob2xkZXJzIG11c3Qgbm90Iiwid3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gdGhlIGNvcHlyaWdodCIsInBlcm1pc3Npb24gZnJvbSB0aGUgY29weXJpZ2h0IGhvbGRlcnMiLCJmcm9tIHRoZSBjb3B5cmlnaHQgaG9sZGVycyA0IiwidGhlIGNvcHlyaWdodCBob2xkZXJzIDQgdGhlIiwiY29weXJpZ2h0IGhvbGRlcnMgNCB0aGUgcmlnaHQiLCJob2xkZXJzIDQgdGhlIHJpZ2h0IHRvIiwib3IgdHJhZGVtYXJrcyB0bSBvZiB0aGUiLCJ0cmFkZW1hcmtzIHRtIG9mIHRoZSBjb3B5cmlnaHQiLCJ0bSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMiLCJvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgdXNlIiwidGhlIGNvcHlyaWdodCBob2xkZXJzIHVzZSBvZiIsImNvcHlyaWdodCBob2xkZXJzIHVzZSBvZiB0aGVtIiwiaG9sZGVycyB1c2Ugb2YgdGhlbSBpcyIsIm9mIHRoZW0gaXMgY292ZXJlZCBieSIsInRoZW0gaXMgY292ZXJlZCBieSBzZXBhcmF0ZSIsImlzIGNvdmVyZWQgYnkgc2VwYXJhdGUgYWdyZWVtZW50IiwiY292ZXJlZCBieSBzZXBhcmF0ZSBhZ3JlZW1lbnQgd2l0aCIsImJ5IHNlcGFyYXRlIGFncmVlbWVudCB3aXRoIHRoZSIsInNlcGFyYXRlIGFncmVlbWVudCB3aXRoIHRoZSBjb3B5cmlnaHQiLCJhZ3JlZW1lbnQgd2l0aCB0aGUgY29weXJpZ2h0IGhvbGRlcnMiLCJ3aXRoIHRoZSBjb3B5cmlnaHQgaG9sZGVycyA1IiwidGhlIGNvcHlyaWdodCBob2xkZXJzIDUgaWYiLCJjb3B5cmlnaHQgaG9sZGVycyA1IGlmIGFueSIsImhvbGRlcnMgNSBpZiBhbnkgZmlsZXMiLCJjb3B5cmlnaHQgaG9sZGVycyBhcyBpcyBhbmQiLCJob2xkZXJzIGFzIGlzIGFuZCBhbnkiXX0seyJsaWNlbnNlVGV4dHMiOlsiKGMpIEppbSBEYXZpZXMsIEphbnVhcnkgMTk5NVxuXG5Zb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGZyZWVseS4gQW55IHF1ZXJpZXMgYW5kIGNvbXBsYWludHMgc2hvdWxkIGJlIGZvcndhcmRlZCB0byBKaW0uRGF2aWVzQGNvbWxhYi5veC5hYy51ay5cblxuSWYgeW91IG1ha2UgYW55IGNoYW5nZXMgdG8gdGhpcyBmaWxlLCBwbGVhc2UgZG8gbm90IGRpc3RyaWJ1dGUgdGhlIHJlc3VsdHMgdW5kZXIgdGhlIG5hbWUgYHplZC1jc3Auc3R5Jy4iXSwibGljZW5zZUlkcyI6WyJaZWQiXSwia2V5d29yZHMiOlsiYyBqaW0gZGF2aWVzIiwiamltIGRhdmllcyBqYW51YXJ5IiwiZGF2aWVzIGphbnVhcnkgMTk5NSIsImphbnVhcnkgMTk5NSB5b3UiLCIxOTk1IHlvdSBtYXkiLCJkaXN0cmlidXRlIHRoaXMgZmlsZSIsInRoaXMgZmlsZSBmcmVlbHkiLCJmaWxlIGZyZWVseSBhbnkiLCJmcmVlbHkgYW55IHF1ZXJpZXMiLCJhbnkgcXVlcmllcyBhbmQiLCJxdWVyaWVzIGFuZCBjb21wbGFpbnRzIiwiYW5kIGNvbXBsYWludHMgc2hvdWxkIiwiY29tcGxhaW50cyBzaG91bGQgYmUiLCJzaG91bGQgYmUgZm9yd2FyZGVkIiwiYmUgZm9yd2FyZGVkIHRvIiwiZm9yd2FyZGVkIHRvIGppbSIsInRvIGppbSBkYXZpZXMiLCJqaW0gZGF2aWVzIGNvbWxhYiIsImRhdmllcyBjb21sYWIgb3giLCJjb21sYWIgb3ggYWMiLCJveCBhYyB1ayIsImFjIHVrIGlmIiwidWsgaWYgeW91IiwiY2hhbmdlcyB0byB0aGlzIiwidGhpcyBmaWxlIHBsZWFzZSIsImZpbGUgcGxlYXNlIGRvIiwiZGlzdHJpYnV0ZSB0aGUgcmVzdWx0cyIsInRoZSByZXN1bHRzIHVuZGVyIiwicmVzdWx0cyB1bmRlciB0aGUiLCJ1bmRlciB0aGUgbmFtZSIsInRoZSBuYW1lIHplZCIsIm5hbWUgemVkIGNzcCIsInplZCBjc3Agc3R5IiwiYyBqaW0gZGF2aWVzIGphbnVhcnkiLCJqaW0gZGF2aWVzIGphbnVhcnkgMTk5NSIsImRhdmllcyBqYW51YXJ5IDE5OTUgeW91IiwiamFudWFyeSAxOTk1IHlvdSBtYXkiLCIxOTk1IHlvdSBtYXkgY29weSIsImFuZCBkaXN0cmlidXRlIHRoaXMgZmlsZSIsImRpc3RyaWJ1dGUgdGhpcyBmaWxlIGZyZWVseSIsInRoaXMgZmlsZSBmcmVlbHkgYW55IiwiZmlsZSBmcmVlbHkgYW55IHF1ZXJpZXMiLCJmcmVlbHkgYW55IHF1ZXJpZXMgYW5kIiwiYW55IHF1ZXJpZXMgYW5kIGNvbXBsYWludHMiLCJxdWVyaWVzIGFuZCBjb21wbGFpbnRzIHNob3VsZCIsImFuZCBjb21wbGFpbnRzIHNob3VsZCBiZSIsImNvbXBsYWludHMgc2hvdWxkIGJlIGZvcndhcmRlZCIsInNob3VsZCBiZSBmb3J3YXJkZWQgdG8iLCJiZSBmb3J3YXJkZWQgdG8gamltIiwiZm9yd2FyZGVkIHRvIGppbSBkYXZpZXMiLCJ0byBqaW0gZGF2aWVzIGNvbWxhYiIsImppbSBkYXZpZXMgY29tbGFiIG94IiwiZGF2aWVzIGNvbWxhYiBveCBhYyIsImNvbWxhYiBveCBhYyB1ayIsIm94IGFjIHVrIGlmIiwiYWMgdWsgaWYgeW91IiwidWsgaWYgeW91IG1ha2UiLCJhbnkgY2hhbmdlcyB0byB0aGlzIiwiY2hhbmdlcyB0byB0aGlzIGZpbGUiLCJ0byB0aGlzIGZpbGUgcGxlYXNlIiwidGhpcyBmaWxlIHBsZWFzZSBkbyIsImZpbGUgcGxlYXNlIGRvIG5vdCIsInBsZWFzZSBkbyBub3QgZGlzdHJpYnV0ZSIsIm5vdCBkaXN0cmlidXRlIHRoZSByZXN1bHRzIiwiZGlzdHJpYnV0ZSB0aGUgcmVzdWx0cyB1bmRlciIsInRoZSByZXN1bHRzIHVuZGVyIHRoZSIsInJlc3VsdHMgdW5kZXIgdGhlIG5hbWUiLCJ1bmRlciB0aGUgbmFtZSB6ZWQiLCJ0aGUgbmFtZSB6ZWQgY3NwIiwibmFtZSB6ZWQgY3NwIHN0eSIsImMgamltIGRhdmllcyBqYW51YXJ5IDE5OTUiLCJqaW0gZGF2aWVzIGphbnVhcnkgMTk5NSB5b3UiLCJkYXZpZXMgamFudWFyeSAxOTk1IHlvdSBtYXkiLCJqYW51YXJ5IDE5OTUgeW91IG1heSBjb3B5IiwiMTk5NSB5b3UgbWF5IGNvcHkgYW5kIiwibWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyIsImNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIiwiYW5kIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGZyZWVseSIsImRpc3RyaWJ1dGUgdGhpcyBmaWxlIGZyZWVseSBhbnkiLCJ0aGlzIGZpbGUgZnJlZWx5IGFueSBxdWVyaWVzIiwiZmlsZSBmcmVlbHkgYW55IHF1ZXJpZXMgYW5kIiwiZnJlZWx5IGFueSBxdWVyaWVzIGFuZCBjb21wbGFpbnRzIiwiYW55IHF1ZXJpZXMgYW5kIGNvbXBsYWludHMgc2hvdWxkIiwicXVlcmllcyBhbmQgY29tcGxhaW50cyBzaG91bGQgYmUiLCJhbmQgY29tcGxhaW50cyBzaG91bGQgYmUgZm9yd2FyZGVkIiwiY29tcGxhaW50cyBzaG91bGQgYmUgZm9yd2FyZGVkIHRvIiwic2hvdWxkIGJlIGZvcndhcmRlZCB0byBqaW0iLCJiZSBmb3J3YXJkZWQgdG8gamltIGRhdmllcyIsImZvcndhcmRlZCB0byBqaW0gZGF2aWVzIGNvbWxhYiIsInRvIGppbSBkYXZpZXMgY29tbGFiIG94IiwiamltIGRhdmllcyBjb21sYWIgb3ggYWMiLCJkYXZpZXMgY29tbGFiIG94IGFjIHVrIiwiY29tbGFiIG94IGFjIHVrIGlmIiwib3ggYWMgdWsgaWYgeW91IiwiYWMgdWsgaWYgeW91IG1ha2UiLCJ1ayBpZiB5b3UgbWFrZSBhbnkiLCJpZiB5b3UgbWFrZSBhbnkgY2hhbmdlcyIsIm1ha2UgYW55IGNoYW5nZXMgdG8gdGhpcyIsImFueSBjaGFuZ2VzIHRvIHRoaXMgZmlsZSIsImNoYW5nZXMgdG8gdGhpcyBmaWxlIHBsZWFzZSIsInRvIHRoaXMgZmlsZSBwbGVhc2UgZG8iLCJ0aGlzIGZpbGUgcGxlYXNlIGRvIG5vdCIsImZpbGUgcGxlYXNlIGRvIG5vdCBkaXN0cmlidXRlIiwicGxlYXNlIGRvIG5vdCBkaXN0cmlidXRlIHRoZSIsImRvIG5vdCBkaXN0cmlidXRlIHRoZSByZXN1bHRzIiwibm90IGRpc3RyaWJ1dGUgdGhlIHJlc3VsdHMgdW5kZXIiLCJkaXN0cmlidXRlIHRoZSByZXN1bHRzIHVuZGVyIHRoZSIsInRoZSByZXN1bHRzIHVuZGVyIHRoZSBuYW1lIiwicmVzdWx0cyB1bmRlciB0aGUgbmFtZSB6ZWQiLCJ1bmRlciB0aGUgbmFtZSB6ZWQgY3NwIiwidGhlIG5hbWUgemVkIGNzcCBzdHkiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhlIFplbmQgRW5naW5lIExpY2Vuc2UsIHZlcnNpb24gMi4wMCBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMiBaZW5kIFRlY2hub2xvZ2llcyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBpcyBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgIDMuIFRoZSBuYW1lcyBcIlplbmRcIiBhbmQgXCJaZW5kIEVuZ2luZVwiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3IgcGVybWlzc2lvbiBmcm9tIFplbmQgVGVjaG5vbG9naWVzIEx0ZC4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgbGljZW5zZUB6ZW5kLmNvbS5cblxuICAgNC4gWmVuZCBUZWNobm9sb2dpZXMgTHRkLiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIGxpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgY292ZXJlZCBjb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSwgeW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggY292ZXJlZCBjb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIHB1Ymxpc2hlZCBieSBaZW5kIFRlY2hub2xvZ2llcyBMdGQuIE5vIG9uZSBvdGhlciB0aGFuIFplbmQgVGVjaG5vbG9naWVzIEx0ZC4gaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gY292ZXJlZCBjb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICA1LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiBcIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyB0aGUgWmVuZCBFbmdpbmUsIGZyZWVseSBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy56ZW5kLmNvbVwiXG5cbiAgIDYuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogXCJUaGUgWmVuZCBFbmdpbmUgaXMgZnJlZWx5IGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnplbmQuY29tXCJcblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBaRU5EIFRFQ0hOT0xPR0lFUyBMVEQuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFpFTkQgVEVDSE5PTE9HSUVTIExURC4gQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIl0sImxpY2Vuc2VJZHMiOlsiWmVuZC0yLjAiXSwia2V5d29yZHMiOlsiemVuZCBlbmdpbmUgbGljZW5zZSIsImVuZ2luZSBsaWNlbnNlIHZlcnNpb24iLCJ2ZXJzaW9uIDIgMDAiLCIyIDAwIGNvcHlyaWdodCIsIjAwIGNvcHlyaWdodCBjIiwiMTk5OSAyMDAyIHplbmQiLCIyMDAyIHplbmQgdGVjaG5vbG9naWVzIiwidGVjaG5vbG9naWVzIGx0ZCBhbGwiLCJ0aGUgbmFtZXMgemVuZCIsIm5hbWVzIHplbmQgYW5kIiwiemVuZCBhbmQgemVuZCIsImFuZCB6ZW5kIGVuZ2luZSIsInplbmQgZW5naW5lIG11c3QiLCJlbmdpbmUgbXVzdCBub3QiLCJ3aXRob3V0IHByaW9yIHBlcm1pc3Npb24iLCJwcmlvciBwZXJtaXNzaW9uIGZyb20iLCJwZXJtaXNzaW9uIGZyb20gemVuZCIsImZyb20gemVuZCB0ZWNobm9sb2dpZXMiLCJ0ZWNobm9sb2dpZXMgbHRkIGZvciIsImx0ZCBmb3Igd3JpdHRlbiIsImNvbnRhY3QgbGljZW5zZSB6ZW5kIiwibGljZW5zZSB6ZW5kIGNvbSIsInplbmQgY29tIDQiLCJjb20gNCB6ZW5kIiwiNCB6ZW5kIHRlY2hub2xvZ2llcyIsInRlY2hub2xvZ2llcyBsdGQgbWF5IiwibHRkIG1heSBwdWJsaXNoIiwicHVibGlzaGVkIGJ5IHplbmQiLCJ0ZWNobm9sb2dpZXMgbHRkIG5vIiwibHRkIG5vIG9uZSIsIm90aGVyIHRoYW4gemVuZCIsInRoYW4gemVuZCB0ZWNobm9sb2dpZXMiLCJ0ZWNobm9sb2dpZXMgbHRkIGhhcyIsImx0ZCBoYXMgdGhlIiwibGljZW5zZSA1IHJlZGlzdHJpYnV0aW9ucyIsIjUgcmVkaXN0cmlidXRpb25zIG9mIiwiemVuZCBjb20gNiIsImNvbSA2IGFsbCIsIjYgYWxsIGFkdmVydGlzaW5nIiwiZm9sbG93aW5nIGFja25vd2xlZGdtZW50IHRoZSIsImFja25vd2xlZGdtZW50IHRoZSB6ZW5kIiwiemVuZCBlbmdpbmUgaXMiLCJlbmdpbmUgaXMgZnJlZWx5IiwiemVuZCBjb20gdGhpcyIsInByb3ZpZGVkIGJ5IHplbmQiLCJ0ZWNobm9sb2dpZXMgbHRkIGFzIiwibHRkIGFzIGlzIiwiZXZlbnQgc2hhbGwgemVuZCIsInNoYWxsIHplbmQgdGVjaG5vbG9naWVzIiwidGVjaG5vbG9naWVzIGx0ZCBiZSIsImx0ZCBiZSBsaWFibGUiLCJ0aGUgemVuZCBlbmdpbmUgbGljZW5zZSIsInplbmQgZW5naW5lIGxpY2Vuc2UgdmVyc2lvbiIsImVuZ2luZSBsaWNlbnNlIHZlcnNpb24gMiIsImxpY2Vuc2UgdmVyc2lvbiAyIDAwIiwidmVyc2lvbiAyIDAwIGNvcHlyaWdodCIsIjIgMDAgY29weXJpZ2h0IGMiLCIwMCBjb3B5cmlnaHQgYyAxOTk5IiwiYyAxOTk5IDIwMDIgemVuZCIsIjE5OTkgMjAwMiB6ZW5kIHRlY2hub2xvZ2llcyIsIjIwMDIgemVuZCB0ZWNobm9sb2dpZXMgbHRkIiwiemVuZCB0ZWNobm9sb2dpZXMgbHRkIGFsbCIsInRlY2hub2xvZ2llcyBsdGQgYWxsIHJpZ2h0cyIsIjMgdGhlIG5hbWVzIHplbmQiLCJ0aGUgbmFtZXMgemVuZCBhbmQiLCJuYW1lcyB6ZW5kIGFuZCB6ZW5kIiwiemVuZCBhbmQgemVuZCBlbmdpbmUiLCJhbmQgemVuZCBlbmdpbmUgbXVzdCIsInplbmQgZW5naW5lIG11c3Qgbm90IiwiZW5naW5lIG11c3Qgbm90IGJlIiwic29mdHdhcmUgd2l0aG91dCBwcmlvciBwZXJtaXNzaW9uIiwid2l0aG91dCBwcmlvciBwZXJtaXNzaW9uIGZyb20iLCJwcmlvciBwZXJtaXNzaW9uIGZyb20gemVuZCIsInBlcm1pc3Npb24gZnJvbSB6ZW5kIHRlY2hub2xvZ2llcyIsImZyb20gemVuZCB0ZWNobm9sb2dpZXMgbHRkIiwiemVuZCB0ZWNobm9sb2dpZXMgbHRkIGZvciIsInRlY2hub2xvZ2llcyBsdGQgZm9yIHdyaXR0ZW4iLCJsdGQgZm9yIHdyaXR0ZW4gcGVybWlzc2lvbiIsInBsZWFzZSBjb250YWN0IGxpY2Vuc2UgemVuZCIsImNvbnRhY3QgbGljZW5zZSB6ZW5kIGNvbSIsImxpY2Vuc2UgemVuZCBjb20gNCIsInplbmQgY29tIDQgemVuZCIsImNvbSA0IHplbmQgdGVjaG5vbG9naWVzIiwiNCB6ZW5kIHRlY2hub2xvZ2llcyBsdGQiLCJ6ZW5kIHRlY2hub2xvZ2llcyBsdGQgbWF5IiwidGVjaG5vbG9naWVzIGx0ZCBtYXkgcHVibGlzaCIsImx0ZCBtYXkgcHVibGlzaCByZXZpc2VkIiwibGljZW5zZSBwdWJsaXNoZWQgYnkgemVuZCIsInB1Ymxpc2hlZCBieSB6ZW5kIHRlY2hub2xvZ2llcyIsInplbmQgdGVjaG5vbG9naWVzIGx0ZCBubyIsInRlY2hub2xvZ2llcyBsdGQgbm8gb25lIiwibHRkIG5vIG9uZSBvdGhlciIsIm9uZSBvdGhlciB0aGFuIHplbmQiLCJvdGhlciB0aGFuIHplbmQgdGVjaG5vbG9naWVzIiwidGhhbiB6ZW5kIHRlY2hub2xvZ2llcyBsdGQiLCJ6ZW5kIHRlY2hub2xvZ2llcyBsdGQgaGFzIiwidGVjaG5vbG9naWVzIGx0ZCBoYXMgdGhlIiwibHRkIGhhcyB0aGUgcmlnaHQiLCJ0aGlzIGxpY2Vuc2UgNSByZWRpc3RyaWJ1dGlvbnMiLCJsaWNlbnNlIDUgcmVkaXN0cmlidXRpb25zIG9mIiwiNSByZWRpc3RyaWJ1dGlvbnMgb2YgYW55Iiwid3d3IHplbmQgY29tIDYiLCJ6ZW5kIGNvbSA2IGFsbCIsImNvbSA2IGFsbCBhZHZlcnRpc2luZyIsIjYgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyIsInRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQgdGhlIiwiZm9sbG93aW5nIGFja25vd2xlZGdtZW50IHRoZSB6ZW5kIiwiYWNrbm93bGVkZ21lbnQgdGhlIHplbmQgZW5naW5lIiwidGhlIHplbmQgZW5naW5lIGlzIiwiemVuZCBlbmdpbmUgaXMgZnJlZWx5IiwiZW5naW5lIGlzIGZyZWVseSBhdmFpbGFibGUiLCJpcyBmcmVlbHkgYXZhaWxhYmxlIGF0Iiwid3d3IHplbmQgY29tIHRoaXMiLCJ6ZW5kIGNvbSB0aGlzIHNvZnR3YXJlIiwiaXMgcHJvdmlkZWQgYnkgemVuZCIsInByb3ZpZGVkIGJ5IHplbmQgdGVjaG5vbG9naWVzIiwiemVuZCB0ZWNobm9sb2dpZXMgbHRkIGFzIiwidGVjaG5vbG9naWVzIGx0ZCBhcyBpcyIsImx0ZCBhcyBpcyBhbmQiLCJubyBldmVudCBzaGFsbCB6ZW5kIiwiZXZlbnQgc2hhbGwgemVuZCB0ZWNobm9sb2dpZXMiLCJzaGFsbCB6ZW5kIHRlY2hub2xvZ2llcyBsdGQiLCJ6ZW5kIHRlY2hub2xvZ2llcyBsdGQgYmUiLCJ0ZWNobm9sb2dpZXMgbHRkIGJlIGxpYWJsZSIsImx0ZCBiZSBsaWFibGUgZm9yIiwidGhlIHplbmQgZW5naW5lIGxpY2Vuc2UgdmVyc2lvbiIsInplbmQgZW5naW5lIGxpY2Vuc2UgdmVyc2lvbiAyIiwiZW5naW5lIGxpY2Vuc2UgdmVyc2lvbiAyIDAwIiwibGljZW5zZSB2ZXJzaW9uIDIgMDAgY29weXJpZ2h0IiwidmVyc2lvbiAyIDAwIGNvcHlyaWdodCBjIiwiMiAwMCBjb3B5cmlnaHQgYyAxOTk5IiwiMDAgY29weXJpZ2h0IGMgMTk5OSAyMDAyIiwiY29weXJpZ2h0IGMgMTk5OSAyMDAyIHplbmQiLCJjIDE5OTkgMjAwMiB6ZW5kIHRlY2hub2xvZ2llcyIsIjE5OTkgMjAwMiB6ZW5kIHRlY2hub2xvZ2llcyBsdGQiLCIyMDAyIHplbmQgdGVjaG5vbG9naWVzIGx0ZCBhbGwiLCJ6ZW5kIHRlY2hub2xvZ2llcyBsdGQgYWxsIHJpZ2h0cyIsInRlY2hub2xvZ2llcyBsdGQgYWxsIHJpZ2h0cyByZXNlcnZlZCIsImRpc3RyaWJ1dGlvbiAzIHRoZSBuYW1lcyB6ZW5kIiwiMyB0aGUgbmFtZXMgemVuZCBhbmQiLCJ0aGUgbmFtZXMgemVuZCBhbmQgemVuZCIsIm5hbWVzIHplbmQgYW5kIHplbmQgZW5naW5lIiwiemVuZCBhbmQgemVuZCBlbmdpbmUgbXVzdCIsImFuZCB6ZW5kIGVuZ2luZSBtdXN0IG5vdCIsInplbmQgZW5naW5lIG11c3Qgbm90IGJlIiwiZW5naW5lIG11c3Qgbm90IGJlIHVzZWQiLCJ0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3IgcGVybWlzc2lvbiIsInNvZnR3YXJlIHdpdGhvdXQgcHJpb3IgcGVybWlzc2lvbiBmcm9tIiwid2l0aG91dCBwcmlvciBwZXJtaXNzaW9uIGZyb20gemVuZCIsInByaW9yIHBlcm1pc3Npb24gZnJvbSB6ZW5kIHRlY2hub2xvZ2llcyIsInBlcm1pc3Npb24gZnJvbSB6ZW5kIHRlY2hub2xvZ2llcyBsdGQiLCJmcm9tIHplbmQgdGVjaG5vbG9naWVzIGx0ZCBmb3IiLCJ6ZW5kIHRlY2hub2xvZ2llcyBsdGQgZm9yIHdyaXR0ZW4iLCJ0ZWNobm9sb2dpZXMgbHRkIGZvciB3cml0dGVuIHBlcm1pc3Npb24iLCJsdGQgZm9yIHdyaXR0ZW4gcGVybWlzc2lvbiBwbGVhc2UiLCJwZXJtaXNzaW9uIHBsZWFzZSBjb250YWN0IGxpY2Vuc2UgemVuZCIsInBsZWFzZSBjb250YWN0IGxpY2Vuc2UgemVuZCBjb20iLCJjb250YWN0IGxpY2Vuc2UgemVuZCBjb20gNCIsImxpY2Vuc2UgemVuZCBjb20gNCB6ZW5kIiwiemVuZCBjb20gNCB6ZW5kIHRlY2hub2xvZ2llcyIsImNvbSA0IHplbmQgdGVjaG5vbG9naWVzIGx0ZCIsIjQgemVuZCB0ZWNobm9sb2dpZXMgbHRkIG1heSIsInplbmQgdGVjaG5vbG9naWVzIGx0ZCBtYXkgcHVibGlzaCIsInRlY2hub2xvZ2llcyBsdGQgbWF5IHB1Ymxpc2ggcmV2aXNlZCIsImx0ZCBtYXkgcHVibGlzaCByZXZpc2VkIGFuZCIsInRoZSBsaWNlbnNlIHB1Ymxpc2hlZCBieSB6ZW5kIiwibGljZW5zZSBwdWJsaXNoZWQgYnkgemVuZCB0ZWNobm9sb2dpZXMiLCJwdWJsaXNoZWQgYnkgemVuZCB0ZWNobm9sb2dpZXMgbHRkIiwiYnkgemVuZCB0ZWNobm9sb2dpZXMgbHRkIG5vIiwiemVuZCB0ZWNobm9sb2dpZXMgbHRkIG5vIG9uZSIsInRlY2hub2xvZ2llcyBsdGQgbm8gb25lIG90aGVyIiwibHRkIG5vIG9uZSBvdGhlciB0aGFuIiwibm8gb25lIG90aGVyIHRoYW4gemVuZCIsIm9uZSBvdGhlciB0aGFuIHplbmQgdGVjaG5vbG9naWVzIiwib3RoZXIgdGhhbiB6ZW5kIHRlY2hub2xvZ2llcyBsdGQiLCJ0aGFuIHplbmQgdGVjaG5vbG9naWVzIGx0ZCBoYXMiLCJ6ZW5kIHRlY2hub2xvZ2llcyBsdGQgaGFzIHRoZSIsInRlY2hub2xvZ2llcyBsdGQgaGFzIHRoZSByaWdodCIsImx0ZCBoYXMgdGhlIHJpZ2h0IHRvIiwiY3JlYXRlZCB1bmRlciB0aGlzIGxpY2Vuc2UgNSIsInVuZGVyIHRoaXMgbGljZW5zZSA1IHJlZGlzdHJpYnV0aW9ucyIsInRoaXMgbGljZW5zZSA1IHJlZGlzdHJpYnV0aW9ucyBvZiIsImxpY2Vuc2UgNSByZWRpc3RyaWJ1dGlvbnMgb2YgYW55IiwiNSByZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0iLCJhY2tub3dsZWRnbWVudCB0aGlzIHByb2R1Y3QgaW5jbHVkZXMgdGhlIiwiaHR0cCB3d3cgemVuZCBjb20gNiIsInd3dyB6ZW5kIGNvbSA2IGFsbCIsInplbmQgY29tIDYgYWxsIGFkdmVydGlzaW5nIiwiY29tIDYgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyIsIjYgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIiwiZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50IHRoZSIsInRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQgdGhlIHplbmQiLCJmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQgdGhlIHplbmQgZW5naW5lIiwiYWNrbm93bGVkZ21lbnQgdGhlIHplbmQgZW5naW5lIGlzIiwidGhlIHplbmQgZW5naW5lIGlzIGZyZWVseSIsInplbmQgZW5naW5lIGlzIGZyZWVseSBhdmFpbGFibGUiLCJlbmdpbmUgaXMgZnJlZWx5IGF2YWlsYWJsZSBhdCIsImlzIGZyZWVseSBhdmFpbGFibGUgYXQgaHR0cCIsImh0dHAgd3d3IHplbmQgY29tIHRoaXMiLCJ3d3cgemVuZCBjb20gdGhpcyBzb2Z0d2FyZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJaaW1icmEgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMS4zIChaUEwpXG5cblRoaXMgWmltYnJhIFB1YmxpYyBMaWNlbnNlICh0aGlzIFwiQWdyZWVtZW50XCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IHRoYXQgZGVzY3JpYmVzIHRoZSB0ZXJtcyB1bmRlciB3aGljaCBWTXdhcmUsIEluYy4sIGEgRGVsYXdhcmUgY29ycG9yYXRpb24gaGF2aW5nIGl0cyBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MgYXQgMzQwMSBIaWxsdmlldyBBdmVudWUsIFBhbG8gQWx0bywgQ2FsaWZvcm5pYSA5NDMwNCAoXCJWTXdhcmVcIikgd2lsbCBwcm92aWRlIHNvZnR3YXJlIHRvIHlvdSB2aWEgZG93bmxvYWQgb3Igb3RoZXJ3aXNlIChcIlNvZnR3YXJlXCIpLiBCeSB1c2luZyB0aGUgU29mdHdhcmUsIHlvdSwgYW4gaW5kaXZpZHVhbCBvciBhbiBlbnRpdHkgKFwiWW91XCIpIGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC5cblxuSW4gY29uc2lkZXJhdGlvbiBvZiB0aGUgbXV0dWFsIHByb21pc2VzIGFuZCB1cG9uIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggYmVsb3csIHRoZSBwYXJ0aWVzIGFncmVlIGFzIGZvbGxvd3M6XG5cbiAgIDEuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlXG5cbiAgICAgIDEuMSAtIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBWTXdhcmUgaGVyZWJ5IGdyYW50cyB0byBZb3UsIHVuZGVyIGFueSBhbmQgYWxsIG9mIGl0cyBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBTb2Z0d2FyZSwgYSByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUgbGljZW5zZSB0byBjb3B5LCBtb2RpZnksIGNvbXBpbGUsIGV4ZWN1dGUsIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgTW9kaWZpY2F0aW9ucy4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudCwgYW55IGNoYW5nZSB0bywgYWRkaXRpb24gdG8sIG9yIGFicmlkZ2VtZW50IG9mIHRoZSBTb2Z0d2FyZSBtYWRlIGJ5IFlvdSBpcyBhIFwiTW9kaWZpY2F0aW9uO1wiIGhvd2V2ZXIsIGFueSBmaWxlIFlvdSBhZGQgdG8gdGhlIFNvZnR3YXJlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgcGFydCBvZiB0aGUgU29mdHdhcmUgaXMgbm90IGEgXCJNb2RpZmljYXRpb24uXCJcblxuICAgICAgMS4yIC0gSWYgWW91IGFyZSBhbiBpbmRpdmlkdWFsIGFjdGluZyBvbiBiZWhhbGYgb2YgYSBjb3Jwb3JhdGlvbiBvciBvdGhlciBlbnRpdHksIFlvdXIgdXNlIG9mIHRoZSBTb2Z0d2FyZSBvciBhbnkgTW9kaWZpY2F0aW9uIGlzIHN1YmplY3QgdG8gWW91ciBoYXZpbmcgdGhlIGF1dGhvcml0eSB0byBiaW5kIHN1Y2ggY29ycG9yYXRpb24gb3IgZW50aXR5IHRvIHRoaXMgQWdyZWVtZW50LiBQcm92aWRpbmcgY29waWVzIHRvIHBlcnNvbnMgd2l0aGluIHN1Y2ggY29ycG9yYXRpb24gb3IgZW50aXR5IGlzIG5vdCBjb25zaWRlcmVkIGRpc3RyaWJ1dGlvbiBmb3IgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgICAgIDEuMyAtIEZvciB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBzb3VyY2UgY29kZSBmb3JtYXQsIFlvdSBtdXN0IGRvIHNvIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgd2l0aCBZb3VyIGRpc3RyaWJ1dGlvbi4gV2l0aCByZXNwZWN0IHRvIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gc291cmNlIGNvZGUgZm9ybWF0LCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBhcHBseSB0byBZb3UgaW4gdGhlIHNhbWUgd2F5IHRob3NlIHRlcm1zIGFwcGx5IHRvIFZNd2FyZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvZnR3YXJlLiBJbiBvdGhlciB3b3Jkcywgd2hlbiBZb3UgYXJlIGRpc3RyaWJ1dGluZyBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBZb3UgXCJzdGFuZCBpbiB0aGUgc2hvZXNcIiBvZiBWTXdhcmUgaW4gdGVybXMgb2YgdGhlIHJpZ2h0cyBZb3UgZ3JhbnQgYW5kIGhvdyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXBwbHkgdG8gWW91IGFuZCB0aGUgbGljZW5zZWVzIG9mIFlvdXIgTW9kaWZpY2F0aW9ucy4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHdoZW4gWW91IFwic3RhbmQgaW4gdGhlIHNob2VzXCIgb2YgVk13YXJlLCBZb3UgYXJlIG5vdCBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gcHJvdmlzaW9uIHVuZGVyIFNlY3Rpb24gNywgd2hpY2ggcmVxdWlyZXMgYWxsIGRpc3B1dGVzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRvIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiBmZWRlcmFsIG9yIHN0YXRlIGNvdXJ0cyBvZiBub3J0aGVybiBDYWxpZm9ybmlhLlxuXG4gICAgICAxLjQgLSBGb3IgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybWF0LCBZb3UgbXVzdCBhbHNvIHByb3ZpZGUgcmVjaXBpZW50cyB3aXRoIGFjY2VzcyB0byB0aGUgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9uIGluIHNvdXJjZSBjb2RlIGZvcm1hdCBhbG9uZyB3aXRoIGEgY29tcGxldGUgY29weSBvZiB0aGlzIEFncmVlbWVudC4gVGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9ucyBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtYXQgbWF5IGJlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIEluIGFkZGl0aW9uLCBZb3UgbXVzdCBtYWtlIGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgbGljZW5zZSB0ZXJtcyBhcHBseWluZyB0byBzdWNoIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbiB0aGF0IGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSBhbmQgbm90IGJ5IFZNd2FyZSwgYW5kIHRoYXQgc3VjaCBsaWNlbnNlIGRvZXMgbm90IHJlc3RyaWN0IHJlY2lwaWVudHMgZnJvbSBleGVyY2lzaW5nIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdG8gdGhlIFNvZnR3YXJlIGdyYW50ZWQgYnkgVk13YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50IG9yIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdG8gYW55IE1vZGlmaWNhdGlvbiBncmFudGVkIGJ5IFlvdSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxLjMuXG5cbiAgICAgIDEuNSAtIFRoaXMgQWdyZWVtZW50IGRvZXMgbm90IGxpbWl0IFlvdXIgcmlnaHQgdG8gZGlzdHJpYnV0ZSBmaWxlcyB0aGF0IGFyZSBlbnRpcmVseSBZb3VyIG93biB3b3JrIChpLmUuLCB3aGljaCBkbyBub3QgaW5jb3Jwb3JhdGUgYW55IHBvcnRpb24gb2YgdGhlIFNvZnR3YXJlIGFuZCBhcmUgbm90IE1vZGlmaWNhdGlvbnMpIHVuZGVyIGFueSB0ZXJtcyBZb3UgY2hvb3NlLlxuXG4gICAyLiBTdXBwb3J0XG5cbiAgIFZNd2FyZSBoYXMgbm8gb2JsaWdhdGlvbiB0byBwcm92aWRlIHRlY2huaWNhbCBzdXBwb3J0IG9yIHVwZGF0ZXMgdG8gWW91LiBOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IHJlcXVpcmVzIFZNd2FyZSB0byBlbnRlciBpbnRvIGFueSBsaWNlbnNlIHdpdGggWW91IGZvciBhbnkgb3RoZXIgZWRpdGlvbiBvZiB0aGUgU29mdHdhcmUuXG5cbiAgIDMuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHNcblxuICAgICAgMy4xIC0gRXhjZXB0IGZvciB0aGUgbGljZW5zZSBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciBjb3B5cmlnaHQgaW4gU2VjdGlvbiAxLjEsIG5vIHJpZ2h0cywgbGljZW5zZXMgb3IgZm9yYmVhcmFuY2VzIGFyZSBncmFudGVkIG9yIG1heSBhcmlzZSBpbiByZWxhdGlvbiB0byB0aGlzIEFncmVlbWVudCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGV4aGF1c3Rpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cywgaW5jbHVkaW5nIGFsbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLCB0aGF0IGFyZSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIGhlcmVieSByZXNlcnZlZC5cblxuICAgICAgMy4yIC0gSW4gYW55IGNvcHkgb2YgdGhlIFNvZnR3YXJlIG9yIGluIGFueSBNb2RpZmljYXRpb24geW91IGNyZWF0ZSwgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UsIGFueSBhbmQgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBTb2Z0d2FyZSBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBTb2Z0d2FyZS4gVGhpcyBpbmNsdWRlcyB0aGUgcHJlc2VydmF0aW9uIG9mIGF0dHJpYnV0aW9uIG5vdGljZXMgaW4gdGhlIGZvcm0gb2YgdHJhZGVtYXJrcyBvciBsb2dvcyB0aGF0IGV4aXN0IHdpdGhpbiBhIHVzZXIgaW50ZXJmYWNlIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgICAgMy4zIC0gVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IFlvdSByaWdodHMgdG8gdXNlIGFueSBwYXJ0eSdzIG5hbWUsIGxvZ28sIG9yIHRyYWRlbWFya3MsIGV4Y2VwdCBzb2xlbHkgYXMgbmVjZXNzYXJ5IHRvIGNvbXBseSB3aXRoIFNlY3Rpb24gMy4yLlxuXG4gICA0LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXNcblxuICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gVk1XQVJFIE1BS0VTIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCwgT1IgU1RBVFVUT1JZIFJFR0FSRElORyBPUiBSRUxBVElORyBUTyBUSEUgU09GVFdBUkUuIFNQRUNJRklDQUxMWSwgVk1XQVJFIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSEUgU09GVFdBUkUgV0lMTCBCRSBFUlJPUiBGUkVFIE9SIFdJTEwgUEVSRk9STSBJTiBBTiBVTklOVEVSUlVQVEVEIE1BTk5FUi4gVE8gVEhFIEdSRUFURVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgVk1XQVJFIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIChFVkVOIElGIFZNV0FSRSBIQUQgQkVFTiBJTkZPUk1FRCBPRiBTVUNIIFBVUlBPU0UpLCBBTkQgTk9OSU5GUklOR0VNRU5UIFdJVEggUkVTUEVDVCBUTyBUSEUgU09GVFdBUkUsIEFOWSBNT0RJRklDQVRJT05TIFRIRVJFVE8gQU5EIFdJVEggUkVTUEVDVCBUTyBUSEUgVVNFIE9GIFRIRSBGT1JFR09JTkcuXG5cbiAgIDUuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5XG5cbiAgIElOIE5PIEVWRU5UIFdJTEwgVk1XQVJFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5EIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1MgT0YgUFJPRklUUywgTE9TUyBPRiBVU0UsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBEQVRBLCBDT1NUIE9GIENPVkVSKSBJTiBDT05ORUNUSU9OIFdJVEggT1IgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhFIEZVUk5JU0hJTkcsIFBFUkZPUk1BTkNFIE9SIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgQU5ZIE9USEVSIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgV0hFVEhFUiBBTExFR0VEIEFTIEEgQlJFQUNIIE9GIENPTlRSQUNUIE9SIFRPUlRJT1VTIENPTkRVQ1QsIElOQ0xVRElORyBORUdMSUdFTkNFLCBBTkQgRVZFTiBJRiBWTVdBUkUgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLlxuXG4gICA2LiBUZXJtIGFuZCBUZXJtaW5hdGlvblxuXG4gICAgICA2LjEgLSBUaGlzIEFncmVlbWVudCB3aWxsIGNvbnRpbnVlIGluIGVmZmVjdCB1bmxlc3MgYW5kIHVudGlsIHRlcm1pbmF0ZWQgZWFybGllciBwdXJzdWFudCB0byB0aGlzIFNlY3Rpb24gNi5cblxuICAgICAgNi4yIC0gSW4gdGhlIGV2ZW50IFlvdSB2aW9sYXRlIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgVk13YXJlIG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgICAgIDYuMyAtIEFsbCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciBzaGFsbCB0ZXJtaW5hdGUgdXBvbiB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuIFRlcm1pbmF0aW9uIHdpbGwgYmUgaW4gYWRkaXRpb24gdG8gYW55IHJpZ2h0cyBhbmQgcmVtZWRpZXMgYXZhaWxhYmxlIHRvIFZNd2FyZSBhdCBsYXcgb3IgZXF1aXR5IG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LlxuXG4gICAgICA2LjQgLSBUZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudCB3aWxsIG5vdCBhZmZlY3QgdGhlIHByb3Zpc2lvbnMgcmVnYXJkaW5nIHJlc2VydmF0aW9uIG9mIHJpZ2h0cyAoU2VjdGlvbiAzLjEpLCBwcm92aXNpb25zIGRpc2NsYWltaW5nIG9yIGxpbWl0aW5nIFZNd2FyZSdzIGxpYWJpbGl0eSAoU2VjdGlvbnMgNCBhbmQgNSksIFRlcm1pbmF0aW9uIChTZWN0aW9uIDYpIG9yIE1pc2NlbGxhbmVvdXMgKFNlY3Rpb24gNyksIHdoaWNoIHByb3Zpc2lvbnMgd2lsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LlxuXG4gICA3LiBNaXNjZWxsYW5lb3VzXG5cbiAgIFRoaXMgQWdyZWVtZW50IGNvbnRhaW5zIHRoZSBlbnRpcmUgYWdyZWVtZW50IG9mIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIHN1cGVyc2VkZXMgYWxsIHByZXZpb3VzIGNvbW11bmljYXRpb25zLCByZXByZXNlbnRhdGlvbnMsIHVuZGVyc3RhbmRpbmdzIGFuZCBhZ3JlZW1lbnRzLCBlaXRoZXIgb3JhbCBvciB3cml0dGVuLCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byBzYWlkIHN1YmplY3QgbWF0dGVyLiBUaGUgcmVsYXRpb25zaGlwIG9mIHRoZSBwYXJ0aWVzIGhlcmV1bmRlciBpcyB0aGF0IG9mIGluZGVwZW5kZW50IGNvbnRyYWN0b3JzLCBhbmQgdGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgcGFydGllcy4gSWYgYW55IHRlcm0sIGNvbmRpdGlvbiwgb3IgcHJvdmlzaW9uIGluIHRoaXMgQWdyZWVtZW50IGlzIGZvdW5kIHRvIGJlIGludmFsaWQsIHVubGF3ZnVsIG9yIHVuZW5mb3JjZWFibGUgdG8gYW55IGV4dGVudCwgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBjb25zdHJ1ZWQgaW4gYSBtYW5uZXIgdGhhdCBtb3N0IGNsb3NlbHkgZWZmZWN0dWF0ZXMgdGhlIGludGVudCBvZiB0aGlzIEFncmVlbWVudC4gU3VjaCBpbnZhbGlkIHRlcm0sIGNvbmRpdGlvbiBvciBwcm92aXNpb24gd2lsbCBiZSBzZXZlcmVkIGZyb20gdGhlIHJlbWFpbmluZyB0ZXJtcywgY29uZGl0aW9ucyBhbmQgcHJvdmlzaW9ucywgd2hpY2ggd2lsbCBjb250aW51ZSB0byBiZSB2YWxpZCBhbmQgZW5mb3JjZWFibGUgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuIFRoaXMgQWdyZWVtZW50IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEgYW5kIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIHdpdGhvdXQgcmVnYXJkIHRvIGNvbmZsaWN0IG9mIGxhdyBwcmluY2lwbGVzLiBUaGUgVS5OLiBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBBZ3JlZW1lbnQuIEFsbCBkaXNwdXRlcyBhcmlzaW5nIG91dCBvZiB0aGlzIEFncmVlbWVudCBpbnZvbHZpbmcgVk13YXJlIG9yIGFueSBvZiBpdHMgc3Vic2lkaWFyaWVzIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgZmVkZXJhbCBvciBzdGF0ZSBjb3VydHMgb2Ygbm9ydGhlcm4gQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEuIE5vIHJpZ2h0cyBtYXkgYmUgYXNzaWduZWQsIG5vIG9ibGlnYXRpb25zIG1heSBiZSBkZWxlZ2F0ZWQsIGFuZCB0aGlzIEFncmVlbWVudCBtYXkgbm90IGJlIHRyYW5zZmVycmVkIGJ5IFlvdSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2hldGhlciB2b2x1bnRhcnkgb3IgYnkgb3BlcmF0aW9uIG9mIGxhdywgaW5jbHVkaW5nIGJ5IHdheSBvZiBzYWxlIG9mIGFzc2V0cywgbWVyZ2VyIG9yIGNvbnNvbGlkYXRpb24sIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBWTXdhcmUsIGFuZCBhbnkgcHVycG9ydGVkIGFzc2lnbm1lbnQsIGRlbGVnYXRpb24gb3IgdHJhbnNmZXIgd2l0aG91dCBzdWNoIGNvbnNlbnQgc2hhbGwgYmUgdm9pZCBhYiBpbml0aW8uIEFueSB3YWl2ZXIgb2YgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgb3Igb2YgYSBwYXJ0eSdzIHJpZ2h0cyBvciByZW1lZGllcyB1bmRlciB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluIHdyaXRpbmcgdG8gYmUgZWZmZWN0aXZlLiBGYWlsdXJlLCBuZWdsZWN0IG9yIGRlbGF5IGJ5IGEgcGFydHkgdG8gZW5mb3JjZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBvciBpdHMgcmlnaHRzIG9yIHJlbWVkaWVzIGF0IGFueSB0aW1lLCB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgb3IgYmUgZGVlbWVkIHRvIGJlIGEgd2FpdmVyIG9mIHN1Y2ggcGFydHkncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIHdpbGwgbm90IGluIGFueSB3YXkgYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGUgd2hvbGUgb3IgYW55IHBhcnQgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgcHJlanVkaWNlIHN1Y2ggcGFydHkncyByaWdodCB0byB0YWtlIHN1YnNlcXVlbnQgYWN0aW9uLiJdLCJsaWNlbnNlSWRzIjpbIlppbWJyYS0xLjMiXSwia2V5d29yZHMiOlsiMSAzIHpwbCIsIjMgenBsIHRoaXMiLCJ1bmRlciB3aGljaCB2bXdhcmUiLCJ3aGljaCB2bXdhcmUgaW5jIiwidm13YXJlIGluYyBhIiwiYnVzaW5lc3MgYXQgMzQwMSIsImF0IDM0MDEgaGlsbHZpZXciLCIzNDAxIGhpbGx2aWV3IGF2ZW51ZSIsImhpbGx2aWV3IGF2ZW51ZSBwYWxvIiwiYXZlbnVlIHBhbG8gYWx0byIsImFsdG8gY2FsaWZvcm5pYSA5NDMwNCIsImNhbGlmb3JuaWEgOTQzMDQgdm13YXJlIiwiOTQzMDQgdm13YXJlIHdpbGwiLCJ2bXdhcmUgd2lsbCBwcm92aWRlIiwiYWdyZWVtZW50IHZtd2FyZSBoZXJlYnkiLCJ2bXdhcmUgaGVyZWJ5IGdyYW50cyIsImFwcGx5IHRvIHZtd2FyZSIsInRvIHZtd2FyZSB3aXRoIiwidm13YXJlIHdpdGggcmVzcGVjdCIsIm9mIHZtd2FyZSBpbiIsInZtd2FyZSBpbiB0ZXJtcyIsIm9mIHZtd2FyZSB5b3UiLCJ2bXdhcmUgeW91IGFyZSIsIm5vdCBieSB2bXdhcmUiLCJieSB2bXdhcmUgYW5kIiwidm13YXJlIGFuZCB0aGF0IiwiZ3JhbnRlZCBieSB2bXdhcmUiLCJieSB2bXdhcmUgdW5kZXIiLCJ2bXdhcmUgdW5kZXIgdGhpcyIsIjIgc3VwcG9ydCB2bXdhcmUiLCJzdXBwb3J0IHZtd2FyZSBoYXMiLCJ2bXdhcmUgaGFzIG5vIiwiYWdyZWVtZW50IHJlcXVpcmVzIHZtd2FyZSIsInJlcXVpcmVzIHZtd2FyZSB0byIsInZtd2FyZSB0byBlbnRlciIsImFueSBraW5kIHZtd2FyZSIsImtpbmQgdm13YXJlIG1ha2VzIiwidm13YXJlIG1ha2VzIG5vIiwic29mdHdhcmUgc3BlY2lmaWNhbGx5IHZtd2FyZSIsInNwZWNpZmljYWxseSB2bXdhcmUgZG9lcyIsInZtd2FyZSBkb2VzIG5vdCIsImJ5IGxhdyB2bXdhcmUiLCJsYXcgdm13YXJlIHNwZWNpZmljYWxseSIsInZtd2FyZSBzcGVjaWZpY2FsbHkgZGlzY2xhaW1zIiwiaWYgdm13YXJlIGhhZCIsInZtd2FyZSBoYWQgYmVlbiIsImV2ZW50IHdpbGwgdm13YXJlIiwid2lsbCB2bXdhcmUgYmUiLCJ2bXdhcmUgYmUgbGlhYmxlIiwiaWYgdm13YXJlIGhhcyIsInZtd2FyZSBoYXMgYmVlbiIsImFncmVlbWVudCB2bXdhcmUgbWF5Iiwidm13YXJlIG1heSB0ZXJtaW5hdGUiLCJhdmFpbGFibGUgdG8gdm13YXJlIiwidG8gdm13YXJlIGF0Iiwidm13YXJlIGF0IGxhdyIsIm9yIGxpbWl0aW5nIHZtd2FyZSIsImxpbWl0aW5nIHZtd2FyZSBzIiwidm13YXJlIHMgbGlhYmlsaXR5IiwiYWdyZWVtZW50IGludm9sdmluZyB2bXdhcmUiLCJpbnZvbHZpbmcgdm13YXJlIG9yIiwidm13YXJlIG9yIGFueSIsImNvbnNlbnQgb2Ygdm13YXJlIiwib2Ygdm13YXJlIGFuZCIsInZtd2FyZSBhbmQgYW55IiwidmVyc2lvbiAxIDMgenBsIiwiMSAzIHpwbCB0aGlzIiwiMyB6cGwgdGhpcyB6aW1icmEiLCJ0ZXJtcyB1bmRlciB3aGljaCB2bXdhcmUiLCJ1bmRlciB3aGljaCB2bXdhcmUgaW5jIiwid2hpY2ggdm13YXJlIGluYyBhIiwidm13YXJlIGluYyBhIGRlbGF3YXJlIiwib2YgYnVzaW5lc3MgYXQgMzQwMSIsImJ1c2luZXNzIGF0IDM0MDEgaGlsbHZpZXciLCJhdCAzNDAxIGhpbGx2aWV3IGF2ZW51ZSIsIjM0MDEgaGlsbHZpZXcgYXZlbnVlIHBhbG8iLCJoaWxsdmlldyBhdmVudWUgcGFsbyBhbHRvIiwiYXZlbnVlIHBhbG8gYWx0byBjYWxpZm9ybmlhIiwicGFsbyBhbHRvIGNhbGlmb3JuaWEgOTQzMDQiLCJhbHRvIGNhbGlmb3JuaWEgOTQzMDQgdm13YXJlIiwiY2FsaWZvcm5pYSA5NDMwNCB2bXdhcmUgd2lsbCIsIjk0MzA0IHZtd2FyZSB3aWxsIHByb3ZpZGUiLCJ2bXdhcmUgd2lsbCBwcm92aWRlIHNvZnR3YXJlIiwidGhpcyBhZ3JlZW1lbnQgdm13YXJlIGhlcmVieSIsImFncmVlbWVudCB2bXdhcmUgaGVyZWJ5IGdyYW50cyIsInZtd2FyZSBoZXJlYnkgZ3JhbnRzIHRvIiwidGVybXMgYXBwbHkgdG8gdm13YXJlIiwiYXBwbHkgdG8gdm13YXJlIHdpdGgiLCJ0byB2bXdhcmUgd2l0aCByZXNwZWN0Iiwidm13YXJlIHdpdGggcmVzcGVjdCB0byIsInNob2VzIG9mIHZtd2FyZSBpbiIsIm9mIHZtd2FyZSBpbiB0ZXJtcyIsInZtd2FyZSBpbiB0ZXJtcyBvZiIsInNob2VzIG9mIHZtd2FyZSB5b3UiLCJvZiB2bXdhcmUgeW91IGFyZSIsInZtd2FyZSB5b3UgYXJlIG5vdCIsImFuZCBub3QgYnkgdm13YXJlIiwibm90IGJ5IHZtd2FyZSBhbmQiLCJieSB2bXdhcmUgYW5kIHRoYXQiLCJ2bXdhcmUgYW5kIHRoYXQgc3VjaCIsInNvZnR3YXJlIGdyYW50ZWQgYnkgdm13YXJlIiwiZ3JhbnRlZCBieSB2bXdhcmUgdW5kZXIiLCJieSB2bXdhcmUgdW5kZXIgdGhpcyIsInZtd2FyZSB1bmRlciB0aGlzIGFncmVlbWVudCIsImNob29zZSAyIHN1cHBvcnQgdm13YXJlIiwiMiBzdXBwb3J0IHZtd2FyZSBoYXMiLCJzdXBwb3J0IHZtd2FyZSBoYXMgbm8iLCJ2bXdhcmUgaGFzIG5vIG9ibGlnYXRpb24iLCJ0aGlzIGFncmVlbWVudCByZXF1aXJlcyB2bXdhcmUiLCJhZ3JlZW1lbnQgcmVxdWlyZXMgdm13YXJlIHRvIiwicmVxdWlyZXMgdm13YXJlIHRvIGVudGVyIiwidm13YXJlIHRvIGVudGVyIGludG8iLCJvZiBhbnkga2luZCB2bXdhcmUiLCJhbnkga2luZCB2bXdhcmUgbWFrZXMiLCJraW5kIHZtd2FyZSBtYWtlcyBubyIsInZtd2FyZSBtYWtlcyBubyB3YXJyYW50aWVzIiwidGhlIHNvZnR3YXJlIHNwZWNpZmljYWxseSB2bXdhcmUiLCJzb2Z0d2FyZSBzcGVjaWZpY2FsbHkgdm13YXJlIGRvZXMiLCJzcGVjaWZpY2FsbHkgdm13YXJlIGRvZXMgbm90Iiwidm13YXJlIGRvZXMgbm90IHdhcnJhbnQiLCJhbGxvd2VkIGJ5IGxhdyB2bXdhcmUiLCJieSBsYXcgdm13YXJlIHNwZWNpZmljYWxseSIsImxhdyB2bXdhcmUgc3BlY2lmaWNhbGx5IGRpc2NsYWltcyIsInZtd2FyZSBzcGVjaWZpY2FsbHkgZGlzY2xhaW1zIGFsbCIsInB1cnBvc2UgZXZlbiBpZiB2bXdhcmUiLCJldmVuIGlmIHZtd2FyZSBoYWQiLCJpZiB2bXdhcmUgaGFkIGJlZW4iLCJ2bXdhcmUgaGFkIGJlZW4gaW5mb3JtZWQiLCJubyBldmVudCB3aWxsIHZtd2FyZSIsImV2ZW50IHdpbGwgdm13YXJlIGJlIiwid2lsbCB2bXdhcmUgYmUgbGlhYmxlIiwidm13YXJlIGJlIGxpYWJsZSBmb3IiLCJhbmQgZXZlbiBpZiB2bXdhcmUiLCJldmVuIGlmIHZtd2FyZSBoYXMiLCJpZiB2bXdhcmUgaGFzIGJlZW4iLCJ2bXdhcmUgaGFzIGJlZW4gYWR2aXNlZCIsInRoaXMgYWdyZWVtZW50IHZtd2FyZSBtYXkiLCJhZ3JlZW1lbnQgdm13YXJlIG1heSB0ZXJtaW5hdGUiLCJ2bXdhcmUgbWF5IHRlcm1pbmF0ZSB0aGlzIiwicmVtZWRpZXMgYXZhaWxhYmxlIHRvIHZtd2FyZSIsImF2YWlsYWJsZSB0byB2bXdhcmUgYXQiLCJ0byB2bXdhcmUgYXQgbGF3Iiwidm13YXJlIGF0IGxhdyBvciIsImRpc2NsYWltaW5nIG9yIGxpbWl0aW5nIHZtd2FyZSIsIm9yIGxpbWl0aW5nIHZtd2FyZSBzIiwibGltaXRpbmcgdm13YXJlIHMgbGlhYmlsaXR5Iiwidm13YXJlIHMgbGlhYmlsaXR5IHNlY3Rpb25zIiwidGhpcyBhZ3JlZW1lbnQgaW52b2x2aW5nIHZtd2FyZSIsImFncmVlbWVudCBpbnZvbHZpbmcgdm13YXJlIG9yIiwiaW52b2x2aW5nIHZtd2FyZSBvciBhbnkiLCJ2bXdhcmUgb3IgYW55IG9mIiwid3JpdHRlbiBjb25zZW50IG9mIHZtd2FyZSIsImNvbnNlbnQgb2Ygdm13YXJlIGFuZCIsIm9mIHZtd2FyZSBhbmQgYW55Iiwidm13YXJlIGFuZCBhbnkgcHVycG9ydGVkIiwibGljZW5zZSB2ZXJzaW9uIDEgMyB6cGwiLCJ2ZXJzaW9uIDEgMyB6cGwgdGhpcyIsIjEgMyB6cGwgdGhpcyB6aW1icmEiLCIzIHpwbCB0aGlzIHppbWJyYSBwdWJsaWMiLCJ0aGUgdGVybXMgdW5kZXIgd2hpY2ggdm13YXJlIiwidGVybXMgdW5kZXIgd2hpY2ggdm13YXJlIGluYyIsInVuZGVyIHdoaWNoIHZtd2FyZSBpbmMgYSIsIndoaWNoIHZtd2FyZSBpbmMgYSBkZWxhd2FyZSIsInZtd2FyZSBpbmMgYSBkZWxhd2FyZSBjb3Jwb3JhdGlvbiIsInBsYWNlIG9mIGJ1c2luZXNzIGF0IDM0MDEiLCJvZiBidXNpbmVzcyBhdCAzNDAxIGhpbGx2aWV3IiwiYnVzaW5lc3MgYXQgMzQwMSBoaWxsdmlldyBhdmVudWUiLCJhdCAzNDAxIGhpbGx2aWV3IGF2ZW51ZSBwYWxvIiwiMzQwMSBoaWxsdmlldyBhdmVudWUgcGFsbyBhbHRvIiwiaGlsbHZpZXcgYXZlbnVlIHBhbG8gYWx0byBjYWxpZm9ybmlhIiwiYXZlbnVlIHBhbG8gYWx0byBjYWxpZm9ybmlhIDk0MzA0IiwicGFsbyBhbHRvIGNhbGlmb3JuaWEgOTQzMDQgdm13YXJlIiwiYWx0byBjYWxpZm9ybmlhIDk0MzA0IHZtd2FyZSB3aWxsIiwiY2FsaWZvcm5pYSA5NDMwNCB2bXdhcmUgd2lsbCBwcm92aWRlIiwiOTQzMDQgdm13YXJlIHdpbGwgcHJvdmlkZSBzb2Z0d2FyZSIsInZtd2FyZSB3aWxsIHByb3ZpZGUgc29mdHdhcmUgdG8iLCJjb25kaXRpb25zIG9mIHRoaXMgYWdyZWVtZW50IHZtd2FyZSIsIm9mIHRoaXMgYWdyZWVtZW50IHZtd2FyZSBoZXJlYnkiLCJ0aGlzIGFncmVlbWVudCB2bXdhcmUgaGVyZWJ5IGdyYW50cyIsImFncmVlbWVudCB2bXdhcmUgaGVyZWJ5IGdyYW50cyB0byIsInZtd2FyZSBoZXJlYnkgZ3JhbnRzIHRvIHlvdSIsInRob3NlIHRlcm1zIGFwcGx5IHRvIHZtd2FyZSIsInRlcm1zIGFwcGx5IHRvIHZtd2FyZSB3aXRoIiwiYXBwbHkgdG8gdm13YXJlIHdpdGggcmVzcGVjdCIsInRvIHZtd2FyZSB3aXRoIHJlc3BlY3QgdG8iLCJ2bXdhcmUgd2l0aCByZXNwZWN0IHRvIHRoZSIsInRoZSBzaG9lcyBvZiB2bXdhcmUgaW4iLCJzaG9lcyBvZiB2bXdhcmUgaW4gdGVybXMiLCJvZiB2bXdhcmUgaW4gdGVybXMgb2YiLCJ2bXdhcmUgaW4gdGVybXMgb2YgdGhlIiwidGhlIHNob2VzIG9mIHZtd2FyZSB5b3UiLCJzaG9lcyBvZiB2bXdhcmUgeW91IGFyZSIsIm9mIHZtd2FyZSB5b3UgYXJlIG5vdCIsInZtd2FyZSB5b3UgYXJlIG5vdCBzdWJqZWN0IiwiYWxvbmUgYW5kIG5vdCBieSB2bXdhcmUiLCJhbmQgbm90IGJ5IHZtd2FyZSBhbmQiLCJub3QgYnkgdm13YXJlIGFuZCB0aGF0IiwiYnkgdm13YXJlIGFuZCB0aGF0IHN1Y2giLCJ2bXdhcmUgYW5kIHRoYXQgc3VjaCBsaWNlbnNlIiwidGhlIHNvZnR3YXJlIGdyYW50ZWQgYnkgdm13YXJlIl19LHsibGljZW5zZVRleHRzIjpbIlppbWJyYSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjQgKFpQTClcblxuVGhpcyBaaW1icmEgUHVibGljIExpY2Vuc2UgKHRoaXMgXCJBZ3JlZW1lbnRcIikgaXMgYSBsZWdhbCBhZ3JlZW1lbnQgdGhhdCBkZXNjcmliZXMgdGhlIHRlcm1zIHVuZGVyIHdoaWNoIFppbWJyYSwgSW5jLiwgYSBUZXhhcyBjb3Jwb3JhdGlvbiAoXCJaaW1icmFcIikgd2lsbCBwcm92aWRlIHNvZnR3YXJlIHRvIHlvdSB2aWEgZG93bmxvYWQgb3Igb3RoZXJ3aXNlIChcIlNvZnR3YXJlXCIpLiBCeSB1c2luZyB0aGUgU29mdHdhcmUsIHlvdSwgYW4gaW5kaXZpZHVhbCBvciBhbiBlbnRpdHkgKFwiWW91XCIpIGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC5cblxuSW4gY29uc2lkZXJhdGlvbiBvZiB0aGUgbXV0dWFsIHByb21pc2VzIGFuZCB1cG9uIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggYmVsb3csIHRoZSBwYXJ0aWVzIGFncmVlIGFzIGZvbGxvd3M6XG5cbiAgIDEuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlXG5cbiAgICAgIDEuMSAtIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBaaW1icmEgaGVyZWJ5IGdyYW50cyB0byBZb3UsIHVuZGVyIGFueSBhbmQgYWxsIG9mIGl0cyBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBTb2Z0d2FyZSwgYSByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUgbGljZW5zZSB0byBjb3B5LCBtb2RpZnksIGNvbXBpbGUsIGV4ZWN1dGUsIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgTW9kaWZpY2F0aW9ucy4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudCwgYW55IGNoYW5nZSB0bywgYWRkaXRpb24gdG8sIG9yIGFicmlkZ2VtZW50IG9mIHRoZSBTb2Z0d2FyZSBtYWRlIGJ5IFlvdSBpcyBhIFwiTW9kaWZpY2F0aW9uO1wiIGhvd2V2ZXIsIGFueSBmaWxlIFlvdSBhZGQgdG8gdGhlIFNvZnR3YXJlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgcGFydCBvZiB0aGUgU29mdHdhcmUgaXMgbm90IGEgXCJNb2RpZmljYXRpb24uXCJcblxuICAgICAgMS4yIC0gSWYgWW91IGFyZSBhbiBpbmRpdmlkdWFsIGFjdGluZyBvbiBiZWhhbGYgb2YgYSBjb3Jwb3JhdGlvbiBvciBvdGhlciBlbnRpdHksIFlvdXIgdXNlIG9mIHRoZSBTb2Z0d2FyZSBvciBhbnkgTW9kaWZpY2F0aW9uIGlzIHN1YmplY3QgdG8gWW91ciBoYXZpbmcgdGhlIGF1dGhvcml0eSB0byBiaW5kIHN1Y2ggY29ycG9yYXRpb24gb3IgZW50aXR5IHRvIHRoaXMgQWdyZWVtZW50LiBQcm92aWRpbmcgY29waWVzIHRvIHBlcnNvbnMgd2l0aGluIHN1Y2ggY29ycG9yYXRpb24gb3IgZW50aXR5IGlzIG5vdCBjb25zaWRlcmVkIGRpc3RyaWJ1dGlvbiBmb3IgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgICAgIDEuMyAtIEZvciB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBzb3VyY2UgY29kZSBmb3JtYXQsIFlvdSBtdXN0IGRvIHNvIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgd2l0aCBZb3VyIGRpc3RyaWJ1dGlvbi4gV2l0aCByZXNwZWN0IHRvIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gc291cmNlIGNvZGUgZm9ybWF0LCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBhcHBseSB0byBZb3UgaW4gdGhlIHNhbWUgd2F5IHRob3NlIHRlcm1zIGFwcGx5IHRvIFppbWJyYSB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvZnR3YXJlLiBJbiBvdGhlciB3b3Jkcywgd2hlbiBZb3UgYXJlIGRpc3RyaWJ1dGluZyBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBZb3UgXCJzdGFuZCBpbiB0aGUgc2hvZXNcIiBvZiBaaW1icmEgaW4gdGVybXMgb2YgdGhlIHJpZ2h0cyBZb3UgZ3JhbnQgYW5kIGhvdyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXBwbHkgdG8gWW91IGFuZCB0aGUgbGljZW5zZWVzIG9mIFlvdXIgTW9kaWZpY2F0aW9ucy4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHdoZW4gWW91IFwic3RhbmQgaW4gdGhlIHNob2VzXCIgb2YgWmltYnJhLCBZb3UgYXJlIG5vdCBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gcHJvdmlzaW9uIHVuZGVyIFNlY3Rpb24gNywgd2hpY2ggcmVxdWlyZXMgYWxsIGRpc3B1dGVzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRvIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiBmZWRlcmFsIG9yIHN0YXRlIGNvdXJ0cyBvZiBOb3J0aGVybiBUZXhhcy5cblxuICAgICAgMS40IC0gRm9yIHRoZSBTb2Z0d2FyZSBvciBhbnkgTW9kaWZpY2F0aW9uIFlvdSBkaXN0cmlidXRlIGluIGNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm1hdCwgWW91IG11c3QgYWxzbyBwcm92aWRlIHJlY2lwaWVudHMgd2l0aCBhY2Nlc3MgdG8gdGhlIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbiBpbiBzb3VyY2UgY29kZSBmb3JtYXQgYWxvbmcgd2l0aCBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQuIFRoZSBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbnMgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybWF0IG1heSBiZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiBJbiBhZGRpdGlvbiwgWW91IG11c3QgbWFrZSBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IGxpY2Vuc2UgdGVybXMgYXBwbHlpbmcgdG8gc3VjaCBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb24gdGhhdCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUgYW5kIG5vdCBieSBaaW1icmEsIGFuZCB0aGF0IHN1Y2ggbGljZW5zZSBkb2VzIG5vdCByZXN0cmljdCByZWNpcGllbnRzIGZyb20gZXhlcmNpc2luZyByaWdodHMgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIHRoZSBTb2Z0d2FyZSBncmFudGVkIGJ5IFppbWJyYSB1bmRlciB0aGlzIEFncmVlbWVudCBvciByaWdodHMgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIGFueSBNb2RpZmljYXRpb24gZ3JhbnRlZCBieSBZb3UgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMS4zLlxuXG4gICAgICAxLjUgLSBUaGlzIEFncmVlbWVudCBkb2VzIG5vdCBsaW1pdCBZb3VyIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgZmlsZXMgdGhhdCBhcmUgZW50aXJlbHkgWW91ciBvd24gd29yayAoaS5lLiwgd2hpY2ggZG8gbm90IGluY29ycG9yYXRlIGFueSBwb3J0aW9uIG9mIHRoZSBTb2Z0d2FyZSBhbmQgYXJlIG5vdCBNb2RpZmljYXRpb25zKSB1bmRlciBhbnkgdGVybXMgWW91IGNob29zZS5cblxuICAgMi4gU3VwcG9ydFxuXG4gICBaaW1icmEgaGFzIG5vIG9ibGlnYXRpb24gdG8gcHJvdmlkZSB0ZWNobmljYWwgc3VwcG9ydCBvciB1cGRhdGVzIHRvIFlvdS4gTm90aGluZyBpbiB0aGlzIEFncmVlbWVudCByZXF1aXJlcyBaaW1icmEgdG8gZW50ZXIgaW50byBhbnkgbGljZW5zZSB3aXRoIFlvdSBmb3IgYW55IG90aGVyIGVkaXRpb24gb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAzLiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzXG5cbiAgICAgIDMuMSAtIEV4Y2VwdCBmb3IgdGhlIGxpY2Vuc2UgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgY29weXJpZ2h0IGluIFNlY3Rpb24gMS4xLCBubyByaWdodHMsIGxpY2Vuc2VzIG9yIGZvcmJlYXJhbmNlcyBhcmUgZ3JhbnRlZCBvciBtYXkgYXJpc2UgaW4gcmVsYXRpb24gdG8gdGhpcyBBZ3JlZW1lbnQgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBleGhhdXN0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMsIGluY2x1ZGluZyBhbGwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgdGhhdCBhcmUgbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSBoZXJlYnkgcmVzZXJ2ZWQuXG5cbiAgICAgIDMuMiAtIEluIGFueSBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBvciBpbiBhbnkgTW9kaWZpY2F0aW9uIHlvdSBjcmVhdGUsIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlIGFueSBhbmQgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBTb2Z0d2FyZSBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBTb2Z0d2FyZS4gVGhpcyBpbmNsdWRlcyB0aGUgcHJlc2VydmF0aW9uIG9mIGF0dHJpYnV0aW9uIG5vdGljZXMgaW4gdGhlIGZvcm0gb2YgdHJhZGVtYXJrcyBvciBsb2dvcyB0aGF0IGV4aXN0IHdpdGhpbiBhIHVzZXIgaW50ZXJmYWNlIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgICAgMy4zIC0gVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IFlvdSByaWdodHMgdG8gdXNlIGFueSBwYXJ0eSdzIG5hbWUsIGxvZ28sIG9yIHRyYWRlbWFya3MsIGV4Y2VwdCBzb2xlbHkgYXMgbmVjZXNzYXJ5IHRvIGNvbXBseSB3aXRoIFNlY3Rpb24gMy4yLlxuXG4gICA0LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXNcblxuICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gWklNQlJBIE1BS0VTIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCwgT1IgU1RBVFVUT1JZLCBSRUdBUkRJTkcgT1IgUkVMQVRJTkcgVE8gVEhFIFNPRlRXQVJFLiBTUEVDSUZJQ0FMTFksIFpJTUJSQSBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwgQkUgRVJST1IgRlJFRSBPUiBXSUxMIFBFUkZPUk0gSU4gQU4gVU5JTlRFUlJVUFRFRCBNQU5ORVIuIFRPIFRIRSBHUkVBVEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIFpJTUJSQSBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSAoRVZFTiBJRiBaSU1CUkEgSEFEIEJFRU4gSU5GT1JNRUQgT0YgU1VDSCBQVVJQT1NFKSwgQU5EIE5PTklORlJJTkdFTUVOVCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFNPRlRXQVJFLCBBTlkgTU9ESUZJQ0FUSU9OUyBUSEVSRVRPLCBBTkQgV0lUSCBSRVNQRUNUIFRPIFRIRSBVU0UgT0YgVEhFIEZPUkVHT0lORy5cblxuICAgNS4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHlcblxuICAgSU4gTk8gRVZFTlQgV0lMTCBaSU1CUkEgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TUyBPRiBQUk9GSVRTLCBMT1NTIE9GIFVTRSwgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIERBVEEsIEFORCBDT1NUIE9GIENPVkVSKSBJTiBDT05ORUNUSU9OIFdJVEggT1IgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhFIEZVUk5JU0hJTkcsIFBFUkZPUk1BTkNFLCBPUiBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIEFOWSBPVEhFUiBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIFdIRVRIRVIgQUxMRUdFRCBBUyBBIEJSRUFDSCBPRiBDT05UUkFDVCBPUiBUT1JUSU9VUyBDT05EVUNULCBJTkNMVURJTkcgTkVHTElHRU5DRSwgQU5EIEVWRU4gSUYgWklNQlJBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy5cblxuICAgNi4gVGVybSBhbmQgVGVybWluYXRpb25cblxuICAgICAgNi4xIC0gVGhpcyBBZ3JlZW1lbnQgd2lsbCBjb250aW51ZSBpbiBlZmZlY3QgdW5sZXNzIGFuZCB1bnRpbCB0ZXJtaW5hdGVkIGVhcmxpZXIgcHVyc3VhbnQgdG8gdGhpcyBTZWN0aW9uIDYuXG5cbiAgICAgIDYuMiAtIEluIHRoZSBldmVudCBZb3UgdmlvbGF0ZSB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIFppbWJyYSBtYXkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50LlxuXG4gICAgICA2LjMgLSBBbGwgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIgc2hhbGwgdGVybWluYXRlIHVwb24gdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LiBUZXJtaW5hdGlvbiB3aWxsIGJlIGluIGFkZGl0aW9uIHRvIGFueSByaWdodHMgYW5kIHJlbWVkaWVzIGF2YWlsYWJsZSB0byBaaW1icmEgYXQgbGF3IG9yIGVxdWl0eSBvciB1bmRlciB0aGlzIEFncmVlbWVudC5cblxuICAgICAgNi40IC0gVGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgYWZmZWN0IHRoZSBwcm92aXNpb25zIHJlZ2FyZGluZyByZXNlcnZhdGlvbiBvZiByaWdodHMgKFNlY3Rpb24gMy4xKSwgcHJvdmlzaW9ucyBkaXNjbGFpbWluZyBvciBsaW1pdGluZyBaaW1icmEncyBsaWFiaWxpdHkgKFNlY3Rpb25zIDQgYW5kIDUpLCBUZXJtaW5hdGlvbiAoU2VjdGlvbiA2KSwgb3IgTWlzY2VsbGFuZW91cyAoU2VjdGlvbiA3KSwgd2hpY2ggcHJvdmlzaW9ucyB3aWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuXG5cbiAgIDcuIE1pc2NlbGxhbmVvdXNcblxuICAgVGhpcyBBZ3JlZW1lbnQgY29udGFpbnMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgb2YgdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBvZiB0aGlzIEFncmVlbWVudCBhbmQgc3VwZXJzZWRlcyBhbGwgcHJldmlvdXMgY29tbXVuaWNhdGlvbnMsIHJlcHJlc2VudGF0aW9ucywgdW5kZXJzdGFuZGluZ3MsIGFuZCBhZ3JlZW1lbnRzLCBlaXRoZXIgb3JhbCBvciB3cml0dGVuLCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byBzYWlkIHN1YmplY3QgbWF0dGVyLiBUaGUgcmVsYXRpb25zaGlwIG9mIHRoZSBwYXJ0aWVzIGhlcmV1bmRlciBpcyB0aGF0IG9mIGluZGVwZW5kZW50IGNvbnRyYWN0b3JzLCBhbmQgdGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUsIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIHBhcnRpZXMuIElmIGFueSB0ZXJtLCBjb25kaXRpb24sIG9yIHByb3Zpc2lvbiBpbiB0aGlzIEFncmVlbWVudCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLCB1bmxhd2Z1bCwgb3IgdW5lbmZvcmNlYWJsZSB0byBhbnkgZXh0ZW50LCB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGNvbnN0cnVlZCBpbiBhIG1hbm5lciB0aGF0IG1vc3QgY2xvc2VseSBlZmZlY3R1YXRlcyB0aGUgaW50ZW50IG9mIHRoaXMgQWdyZWVtZW50LiBTdWNoIGludmFsaWQgdGVybSwgY29uZGl0aW9uIG9yIHByb3Zpc2lvbiB3aWxsIGJlIHNldmVyZWQgZnJvbSB0aGUgcmVtYWluaW5nIHRlcm1zLCBjb25kaXRpb25zLCBhbmQgcHJvdmlzaW9ucywgd2hpY2ggd2lsbCBjb250aW51ZSB0byBiZSB2YWxpZCBhbmQgZW5mb3JjZWFibGUgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuIFRoaXMgQWdyZWVtZW50IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIERlbGF3YXJlIGFuZCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCB3aXRob3V0IHJlZ2FyZCB0byBjb25mbGljdCBvZiBsYXcgcHJpbmNpcGxlcy4gVGhlIFUuTi4gQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgQWdyZWVtZW50LiBBbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBBZ3JlZW1lbnQgaW52b2x2aW5nIFppbWJyYSBvciBhbnkgb2YgaXRzIHBhcmVudHMgb3Igc3Vic2lkaWFyaWVzIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgZmVkZXJhbCBvciBzdGF0ZSBjb3VydHMgb2YgTm9ydGhlcm4gVGV4YXMsIHdpdGggdmVudWUgbHlpbmcgaW4gRGFsbGFzIENvdW50eSwgVGV4YXMuIE5vIHJpZ2h0cyBtYXkgYmUgYXNzaWduZWQsIG5vIG9ibGlnYXRpb25zIG1heSBiZSBkZWxlZ2F0ZWQsIGFuZCB0aGlzIEFncmVlbWVudCBtYXkgbm90IGJlIHRyYW5zZmVycmVkIGJ5IFlvdSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2hldGhlciB2b2x1bnRhcnkgb3IgYnkgb3BlcmF0aW9uIG9mIGxhdywgaW5jbHVkaW5nIGJ5IHdheSBvZiBzYWxlIG9mIGFzc2V0cywgbWVyZ2VyLCBvciBjb25zb2xpZGF0aW9uLCB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgWmltYnJhLCBhbmQgYW55IHB1cnBvcnRlZCBhc3NpZ25tZW50LCBkZWxlZ2F0aW9uLCBvciB0cmFuc2ZlciB3aXRob3V0IHN1Y2ggY29uc2VudCBzaGFsbCBiZSB2b2lkIGFiIGluaXRpby4gQW55IHdhaXZlciBvZiB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBvciBvZiBhIHBhcnR5J3MgcmlnaHRzIG9yIHJlbWVkaWVzIHVuZGVyIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW4gd3JpdGluZyB0byBiZSBlZmZlY3RpdmUuIEZhaWx1cmUsIG5lZ2xlY3QsIG9yIGRlbGF5IGJ5IGEgcGFydHkgdG8gZW5mb3JjZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBvciBpdHMgcmlnaHRzIG9yIHJlbWVkaWVzIGF0IGFueSB0aW1lIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBvciBiZSBkZWVtZWQgdG8gYmUgYSB3YWl2ZXIgb2Ygc3VjaCBwYXJ0eSdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgd2lsbCBub3QgaW4gYW55IHdheSBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHRoZSB3aG9sZSBvciBhbnkgcGFydCBvZiB0aGlzIEFncmVlbWVudCBvciBwcmVqdWRpY2Ugc3VjaCBwYXJ0eSdzIHJpZ2h0IHRvIHRha2Ugc3Vic2VxdWVudCBhY3Rpb24uIl0sImxpY2Vuc2VJZHMiOlsiWmltYnJhLTEuNCJdLCJrZXl3b3JkcyI6WyIxIDQgenBsIiwiNCB6cGwgdGhpcyIsInVuZGVyIHdoaWNoIHppbWJyYSIsIndoaWNoIHppbWJyYSBpbmMiLCJ6aW1icmEgaW5jIGEiLCJpbmMgYSB0ZXhhcyIsImEgdGV4YXMgY29ycG9yYXRpb24iLCJ0ZXhhcyBjb3Jwb3JhdGlvbiB6aW1icmEiLCJjb3Jwb3JhdGlvbiB6aW1icmEgd2lsbCIsInppbWJyYSB3aWxsIHByb3ZpZGUiLCJhZ3JlZW1lbnQgemltYnJhIGhlcmVieSIsInppbWJyYSBoZXJlYnkgZ3JhbnRzIiwiYXBwbHkgdG8gemltYnJhIiwidG8gemltYnJhIHdpdGgiLCJ6aW1icmEgd2l0aCByZXNwZWN0Iiwib2YgemltYnJhIGluIiwiemltYnJhIGluIHRlcm1zIiwib2YgemltYnJhIHlvdSIsInppbWJyYSB5b3UgYXJlIiwibm9ydGhlcm4gdGV4YXMgMSIsInRleGFzIDEgNCIsIm5vdCBieSB6aW1icmEiLCJieSB6aW1icmEgYW5kIiwiemltYnJhIGFuZCB0aGF0IiwiZ3JhbnRlZCBieSB6aW1icmEiLCJieSB6aW1icmEgdW5kZXIiLCJ6aW1icmEgdW5kZXIgdGhpcyIsIjIgc3VwcG9ydCB6aW1icmEiLCJzdXBwb3J0IHppbWJyYSBoYXMiLCJ6aW1icmEgaGFzIG5vIiwiYWdyZWVtZW50IHJlcXVpcmVzIHppbWJyYSIsInJlcXVpcmVzIHppbWJyYSB0byIsInppbWJyYSB0byBlbnRlciIsImFueSBraW5kIHppbWJyYSIsImtpbmQgemltYnJhIG1ha2VzIiwiemltYnJhIG1ha2VzIG5vIiwic29mdHdhcmUgc3BlY2lmaWNhbGx5IHppbWJyYSIsInNwZWNpZmljYWxseSB6aW1icmEgZG9lcyIsInppbWJyYSBkb2VzIG5vdCIsImJ5IGxhdyB6aW1icmEiLCJsYXcgemltYnJhIHNwZWNpZmljYWxseSIsInppbWJyYSBzcGVjaWZpY2FsbHkgZGlzY2xhaW1zIiwiaWYgemltYnJhIGhhZCIsInppbWJyYSBoYWQgYmVlbiIsImV2ZW50IHdpbGwgemltYnJhIiwid2lsbCB6aW1icmEgYmUiLCJ6aW1icmEgYmUgbGlhYmxlIiwiZGF0YSBhbmQgY29zdCIsImFuZCBjb3N0IG9mIiwiaWYgemltYnJhIGhhcyIsInppbWJyYSBoYXMgYmVlbiIsImFncmVlbWVudCB6aW1icmEgbWF5IiwiemltYnJhIG1heSB0ZXJtaW5hdGUiLCJhdmFpbGFibGUgdG8gemltYnJhIiwidG8gemltYnJhIGF0IiwiemltYnJhIGF0IGxhdyIsIm9yIGxpbWl0aW5nIHppbWJyYSIsImxpbWl0aW5nIHppbWJyYSBzIiwiemltYnJhIHMgbGlhYmlsaXR5Iiwic3RhdGUgb2YgZGVsYXdhcmUiLCJvZiBkZWxhd2FyZSBhbmQiLCJkZWxhd2FyZSBhbmQgdGhlIiwiYWdyZWVtZW50IGludm9sdmluZyB6aW1icmEiLCJpbnZvbHZpbmcgemltYnJhIG9yIiwiemltYnJhIG9yIGFueSIsIm9mIGl0cyBwYXJlbnRzIiwiaXRzIHBhcmVudHMgb3IiLCJwYXJlbnRzIG9yIHN1YnNpZGlhcmllcyIsIm9yIHN1YnNpZGlhcmllcyBzaGFsbCIsIm5vcnRoZXJuIHRleGFzIHdpdGgiLCJ0ZXhhcyB3aXRoIHZlbnVlIiwibHlpbmcgaW4gZGFsbGFzIiwiaW4gZGFsbGFzIGNvdW50eSIsImRhbGxhcyBjb3VudHkgdGV4YXMiLCJjb3VudHkgdGV4YXMgbm8iLCJ0ZXhhcyBubyByaWdodHMiLCJjb25zZW50IG9mIHppbWJyYSIsIm9mIHppbWJyYSBhbmQiLCJ6aW1icmEgYW5kIGFueSIsInZlcnNpb24gMSA0IHpwbCIsIjEgNCB6cGwgdGhpcyIsIjQgenBsIHRoaXMgemltYnJhIiwidGVybXMgdW5kZXIgd2hpY2ggemltYnJhIiwidW5kZXIgd2hpY2ggemltYnJhIGluYyIsIndoaWNoIHppbWJyYSBpbmMgYSIsInppbWJyYSBpbmMgYSB0ZXhhcyIsImluYyBhIHRleGFzIGNvcnBvcmF0aW9uIiwiYSB0ZXhhcyBjb3Jwb3JhdGlvbiB6aW1icmEiLCJ0ZXhhcyBjb3Jwb3JhdGlvbiB6aW1icmEgd2lsbCIsImNvcnBvcmF0aW9uIHppbWJyYSB3aWxsIHByb3ZpZGUiLCJ6aW1icmEgd2lsbCBwcm92aWRlIHNvZnR3YXJlIiwidGhpcyBhZ3JlZW1lbnQgemltYnJhIGhlcmVieSIsImFncmVlbWVudCB6aW1icmEgaGVyZWJ5IGdyYW50cyIsInppbWJyYSBoZXJlYnkgZ3JhbnRzIHRvIiwidGVybXMgYXBwbHkgdG8gemltYnJhIiwiYXBwbHkgdG8gemltYnJhIHdpdGgiLCJ0byB6aW1icmEgd2l0aCByZXNwZWN0IiwiemltYnJhIHdpdGggcmVzcGVjdCB0byIsInNob2VzIG9mIHppbWJyYSBpbiIsIm9mIHppbWJyYSBpbiB0ZXJtcyIsInppbWJyYSBpbiB0ZXJtcyBvZiIsInNob2VzIG9mIHppbWJyYSB5b3UiLCJvZiB6aW1icmEgeW91IGFyZSIsInppbWJyYSB5b3UgYXJlIG5vdCIsIm9mIG5vcnRoZXJuIHRleGFzIDEiLCJub3J0aGVybiB0ZXhhcyAxIDQiLCJ0ZXhhcyAxIDQgZm9yIiwiYW5kIG5vdCBieSB6aW1icmEiLCJub3QgYnkgemltYnJhIGFuZCIsImJ5IHppbWJyYSBhbmQgdGhhdCIsInppbWJyYSBhbmQgdGhhdCBzdWNoIiwic29mdHdhcmUgZ3JhbnRlZCBieSB6aW1icmEiLCJncmFudGVkIGJ5IHppbWJyYSB1bmRlciIsImJ5IHppbWJyYSB1bmRlciB0aGlzIiwiemltYnJhIHVuZGVyIHRoaXMgYWdyZWVtZW50IiwiY2hvb3NlIDIgc3VwcG9ydCB6aW1icmEiLCIyIHN1cHBvcnQgemltYnJhIGhhcyIsInN1cHBvcnQgemltYnJhIGhhcyBubyIsInppbWJyYSBoYXMgbm8gb2JsaWdhdGlvbiIsInRoaXMgYWdyZWVtZW50IHJlcXVpcmVzIHppbWJyYSIsImFncmVlbWVudCByZXF1aXJlcyB6aW1icmEgdG8iLCJyZXF1aXJlcyB6aW1icmEgdG8gZW50ZXIiLCJ6aW1icmEgdG8gZW50ZXIgaW50byIsIm9mIGFueSBraW5kIHppbWJyYSIsImFueSBraW5kIHppbWJyYSBtYWtlcyIsImtpbmQgemltYnJhIG1ha2VzIG5vIiwiemltYnJhIG1ha2VzIG5vIHdhcnJhbnRpZXMiLCJ0aGUgc29mdHdhcmUgc3BlY2lmaWNhbGx5IHppbWJyYSIsInNvZnR3YXJlIHNwZWNpZmljYWxseSB6aW1icmEgZG9lcyIsInNwZWNpZmljYWxseSB6aW1icmEgZG9lcyBub3QiLCJ6aW1icmEgZG9lcyBub3Qgd2FycmFudCIsImFsbG93ZWQgYnkgbGF3IHppbWJyYSIsImJ5IGxhdyB6aW1icmEgc3BlY2lmaWNhbGx5IiwibGF3IHppbWJyYSBzcGVjaWZpY2FsbHkgZGlzY2xhaW1zIiwiemltYnJhIHNwZWNpZmljYWxseSBkaXNjbGFpbXMgYWxsIiwicHVycG9zZSBldmVuIGlmIHppbWJyYSIsImV2ZW4gaWYgemltYnJhIGhhZCIsImlmIHppbWJyYSBoYWQgYmVlbiIsInppbWJyYSBoYWQgYmVlbiBpbmZvcm1lZCIsIm5vIGV2ZW50IHdpbGwgemltYnJhIiwiZXZlbnQgd2lsbCB6aW1icmEgYmUiLCJ3aWxsIHppbWJyYSBiZSBsaWFibGUiLCJ6aW1icmEgYmUgbGlhYmxlIGZvciIsIm9mIGRhdGEgYW5kIGNvc3QiLCJkYXRhIGFuZCBjb3N0IG9mIiwiYW5kIGNvc3Qgb2YgY292ZXIiLCJhbmQgZXZlbiBpZiB6aW1icmEiLCJldmVuIGlmIHppbWJyYSBoYXMiLCJpZiB6aW1icmEgaGFzIGJlZW4iLCJ6aW1icmEgaGFzIGJlZW4gYWR2aXNlZCIsInRoaXMgYWdyZWVtZW50IHppbWJyYSBtYXkiLCJhZ3JlZW1lbnQgemltYnJhIG1heSB0ZXJtaW5hdGUiLCJ6aW1icmEgbWF5IHRlcm1pbmF0ZSB0aGlzIiwicmVtZWRpZXMgYXZhaWxhYmxlIHRvIHppbWJyYSIsImF2YWlsYWJsZSB0byB6aW1icmEgYXQiLCJ0byB6aW1icmEgYXQgbGF3IiwiemltYnJhIGF0IGxhdyBvciIsImRpc2NsYWltaW5nIG9yIGxpbWl0aW5nIHppbWJyYSIsIm9yIGxpbWl0aW5nIHppbWJyYSBzIiwibGltaXRpbmcgemltYnJhIHMgbGlhYmlsaXR5IiwiemltYnJhIHMgbGlhYmlsaXR5IHNlY3Rpb25zIiwidGhlIHN0YXRlIG9mIGRlbGF3YXJlIiwic3RhdGUgb2YgZGVsYXdhcmUgYW5kIiwib2YgZGVsYXdhcmUgYW5kIHRoZSIsImRlbGF3YXJlIGFuZCB0aGUgdW5pdGVkIiwidGhpcyBhZ3JlZW1lbnQgaW52b2x2aW5nIHppbWJyYSIsImFncmVlbWVudCBpbnZvbHZpbmcgemltYnJhIG9yIiwiaW52b2x2aW5nIHppbWJyYSBvciBhbnkiLCJ6aW1icmEgb3IgYW55IG9mIiwiYW55IG9mIGl0cyBwYXJlbnRzIiwib2YgaXRzIHBhcmVudHMgb3IiLCJpdHMgcGFyZW50cyBvciBzdWJzaWRpYXJpZXMiLCJwYXJlbnRzIG9yIHN1YnNpZGlhcmllcyBzaGFsbCIsIm9yIHN1YnNpZGlhcmllcyBzaGFsbCBiZSIsIm9mIG5vcnRoZXJuIHRleGFzIHdpdGgiLCJub3J0aGVybiB0ZXhhcyB3aXRoIHZlbnVlIiwidGV4YXMgd2l0aCB2ZW51ZSBseWluZyIsInZlbnVlIGx5aW5nIGluIGRhbGxhcyIsImx5aW5nIGluIGRhbGxhcyBjb3VudHkiLCJpbiBkYWxsYXMgY291bnR5IHRleGFzIiwiZGFsbGFzIGNvdW50eSB0ZXhhcyBubyIsImNvdW50eSB0ZXhhcyBubyByaWdodHMiLCJ0ZXhhcyBubyByaWdodHMgbWF5Iiwid3JpdHRlbiBjb25zZW50IG9mIHppbWJyYSIsImNvbnNlbnQgb2YgemltYnJhIGFuZCIsIm9mIHppbWJyYSBhbmQgYW55IiwiemltYnJhIGFuZCBhbnkgcHVycG9ydGVkIiwibGljZW5zZSB2ZXJzaW9uIDEgNCB6cGwiLCJ2ZXJzaW9uIDEgNCB6cGwgdGhpcyIsIjEgNCB6cGwgdGhpcyB6aW1icmEiLCI0IHpwbCB0aGlzIHppbWJyYSBwdWJsaWMiLCJ0aGUgdGVybXMgdW5kZXIgd2hpY2ggemltYnJhIiwidGVybXMgdW5kZXIgd2hpY2ggemltYnJhIGluYyIsInVuZGVyIHdoaWNoIHppbWJyYSBpbmMgYSIsIndoaWNoIHppbWJyYSBpbmMgYSB0ZXhhcyIsInppbWJyYSBpbmMgYSB0ZXhhcyBjb3Jwb3JhdGlvbiIsImluYyBhIHRleGFzIGNvcnBvcmF0aW9uIHppbWJyYSIsImEgdGV4YXMgY29ycG9yYXRpb24gemltYnJhIHdpbGwiLCJ0ZXhhcyBjb3Jwb3JhdGlvbiB6aW1icmEgd2lsbCBwcm92aWRlIiwiY29ycG9yYXRpb24gemltYnJhIHdpbGwgcHJvdmlkZSBzb2Z0d2FyZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJ6bGliIExpY2Vuc2UgQ29weXJpZ2h0IChjKSBcdTAwM2N5ZWFyXHUwMDNlIFx1MDAzY2NvcHlyaWdodCBob2xkZXJzXHUwMDNlXG5cblRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuXG5QZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdCBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG5cbiAgIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZSBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuXG4gICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuXG5cbiAgIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uIl0sImxpY2Vuc2VJZHMiOlsiWmxpYiJdLCJrZXl3b3JkcyI6WyJ6bGliIGxpY2Vuc2UgY29weXJpZ2h0IiwiaG9sZGVycyB0aGlzIHNvZnR3YXJlIiwiemxpYiBsaWNlbnNlIGNvcHlyaWdodCBjIiwieWVhciBjb3B5cmlnaHQgaG9sZGVycyB0aGlzIiwiY29weXJpZ2h0IGhvbGRlcnMgdGhpcyBzb2Z0d2FyZSIsImhvbGRlcnMgdGhpcyBzb2Z0d2FyZSBpcyIsInpsaWIgbGljZW5zZSBjb3B5cmlnaHQgYyB5ZWFyIiwiYyB5ZWFyIGNvcHlyaWdodCBob2xkZXJzIHRoaXMiLCJ5ZWFyIGNvcHlyaWdodCBob2xkZXJzIHRoaXMgc29mdHdhcmUiLCJjb3B5cmlnaHQgaG9sZGVycyB0aGlzIHNvZnR3YXJlIGlzIiwiaG9sZGVycyB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIl19LHsibGljZW5zZVRleHRzIjpbIlRoZSBhdXRob3IgZGlzY2xhaW1zIGNvcHlyaWdodCB0byB0aGlzIHNvdXJjZSBjb2RlLiBJbiBwbGFjZSBvZiBhIGxlZ2FsIG5vdGljZSwgaGVyZSBpcyBhIGJsZXNzaW5nOlxuXG4gICBcblxuICAgTWF5IHlvdSBkbyBnb29kIGFuZCBub3QgZXZpbC5cblxuICAgXG5cbiAgIE1heSB5b3UgZmluZCBmb3JnaXZlbmVzcyBmb3IgeW91cnNlbGYgYW5kIGZvcmdpdmUgb3RoZXJzLlxuXG4gICBcblxuICAgTWF5IHlvdSBzaGFyZSBmcmVlbHksIG5ldmVyIHRha2luZyBtb3JlIHRoYW4geW91IGdpdmUuIl0sImxpY2Vuc2VJZHMiOlsiYmxlc3NpbmciXSwia2V5d29yZHMiOlsiYXV0aG9yIGRpc2NsYWltcyBjb3B5cmlnaHQiLCJkaXNjbGFpbXMgY29weXJpZ2h0IHRvIiwiY29weXJpZ2h0IHRvIHRoaXMiLCJ0byB0aGlzIHNvdXJjZSIsImNvZGUgaW4gcGxhY2UiLCJwbGFjZSBvZiBhIiwib2YgYSBsZWdhbCIsImxlZ2FsIG5vdGljZSBoZXJlIiwibm90aWNlIGhlcmUgaXMiLCJpcyBhIGJsZXNzaW5nIiwiYSBibGVzc2luZyBtYXkiLCJibGVzc2luZyBtYXkgeW91IiwibWF5IHlvdSBkbyIsInlvdSBkbyBnb29kIiwiZG8gZ29vZCBhbmQiLCJnb29kIGFuZCBub3QiLCJhbmQgbm90IGV2aWwiLCJub3QgZXZpbCBtYXkiLCJldmlsIG1heSB5b3UiLCJtYXkgeW91IGZpbmQiLCJ5b3UgZmluZCBmb3JnaXZlbmVzcyIsImZpbmQgZm9yZ2l2ZW5lc3MgZm9yIiwiZm9yZ2l2ZW5lc3MgZm9yIHlvdXJzZWxmIiwiZm9yIHlvdXJzZWxmIGFuZCIsInlvdXJzZWxmIGFuZCBmb3JnaXZlIiwiYW5kIGZvcmdpdmUgb3RoZXJzIiwiZm9yZ2l2ZSBvdGhlcnMgbWF5Iiwib3RoZXJzIG1heSB5b3UiLCJtYXkgeW91IHNoYXJlIiwieW91IHNoYXJlIGZyZWVseSIsInNoYXJlIGZyZWVseSBuZXZlciIsImZyZWVseSBuZXZlciB0YWtpbmciLCJuZXZlciB0YWtpbmcgbW9yZSIsInRha2luZyBtb3JlIHRoYW4iLCJtb3JlIHRoYW4geW91IiwidGhhbiB5b3UgZ2l2ZSIsInRoZSBhdXRob3IgZGlzY2xhaW1zIGNvcHlyaWdodCIsImF1dGhvciBkaXNjbGFpbXMgY29weXJpZ2h0IHRvIiwiZGlzY2xhaW1zIGNvcHlyaWdodCB0byB0aGlzIiwiY29weXJpZ2h0IHRvIHRoaXMgc291cmNlIiwidG8gdGhpcyBzb3VyY2UgY29kZSIsInNvdXJjZSBjb2RlIGluIHBsYWNlIiwiY29kZSBpbiBwbGFjZSBvZiIsImluIHBsYWNlIG9mIGEiLCJwbGFjZSBvZiBhIGxlZ2FsIiwib2YgYSBsZWdhbCBub3RpY2UiLCJhIGxlZ2FsIG5vdGljZSBoZXJlIiwibGVnYWwgbm90aWNlIGhlcmUgaXMiLCJub3RpY2UgaGVyZSBpcyBhIiwiaGVyZSBpcyBhIGJsZXNzaW5nIiwiaXMgYSBibGVzc2luZyBtYXkiLCJhIGJsZXNzaW5nIG1heSB5b3UiLCJibGVzc2luZyBtYXkgeW91IGRvIiwibWF5IHlvdSBkbyBnb29kIiwieW91IGRvIGdvb2QgYW5kIiwiZG8gZ29vZCBhbmQgbm90IiwiZ29vZCBhbmQgbm90IGV2aWwiLCJhbmQgbm90IGV2aWwgbWF5Iiwibm90IGV2aWwgbWF5IHlvdSIsImV2aWwgbWF5IHlvdSBmaW5kIiwibWF5IHlvdSBmaW5kIGZvcmdpdmVuZXNzIiwieW91IGZpbmQgZm9yZ2l2ZW5lc3MgZm9yIiwiZmluZCBmb3JnaXZlbmVzcyBmb3IgeW91cnNlbGYiLCJmb3JnaXZlbmVzcyBmb3IgeW91cnNlbGYgYW5kIiwiZm9yIHlvdXJzZWxmIGFuZCBmb3JnaXZlIiwieW91cnNlbGYgYW5kIGZvcmdpdmUgb3RoZXJzIiwiYW5kIGZvcmdpdmUgb3RoZXJzIG1heSIsImZvcmdpdmUgb3RoZXJzIG1heSB5b3UiLCJvdGhlcnMgbWF5IHlvdSBzaGFyZSIsIm1heSB5b3Ugc2hhcmUgZnJlZWx5IiwieW91IHNoYXJlIGZyZWVseSBuZXZlciIsInNoYXJlIGZyZWVseSBuZXZlciB0YWtpbmciLCJmcmVlbHkgbmV2ZXIgdGFraW5nIG1vcmUiLCJuZXZlciB0YWtpbmcgbW9yZSB0aGFuIiwidGFraW5nIG1vcmUgdGhhbiB5b3UiLCJtb3JlIHRoYW4geW91IGdpdmUiLCJ0aGUgYXV0aG9yIGRpc2NsYWltcyBjb3B5cmlnaHQgdG8iLCJhdXRob3IgZGlzY2xhaW1zIGNvcHlyaWdodCB0byB0aGlzIiwiZGlzY2xhaW1zIGNvcHlyaWdodCB0byB0aGlzIHNvdXJjZSIsImNvcHlyaWdodCB0byB0aGlzIHNvdXJjZSBjb2RlIiwidG8gdGhpcyBzb3VyY2UgY29kZSBpbiIsInRoaXMgc291cmNlIGNvZGUgaW4gcGxhY2UiLCJzb3VyY2UgY29kZSBpbiBwbGFjZSBvZiIsImNvZGUgaW4gcGxhY2Ugb2YgYSIsImluIHBsYWNlIG9mIGEgbGVnYWwiLCJwbGFjZSBvZiBhIGxlZ2FsIG5vdGljZSIsIm9mIGEgbGVnYWwgbm90aWNlIGhlcmUiLCJhIGxlZ2FsIG5vdGljZSBoZXJlIGlzIiwibGVnYWwgbm90aWNlIGhlcmUgaXMgYSIsIm5vdGljZSBoZXJlIGlzIGEgYmxlc3NpbmciLCJoZXJlIGlzIGEgYmxlc3NpbmcgbWF5IiwiaXMgYSBibGVzc2luZyBtYXkgeW91IiwiYSBibGVzc2luZyBtYXkgeW91IGRvIiwiYmxlc3NpbmcgbWF5IHlvdSBkbyBnb29kIiwibWF5IHlvdSBkbyBnb29kIGFuZCIsInlvdSBkbyBnb29kIGFuZCBub3QiLCJkbyBnb29kIGFuZCBub3QgZXZpbCIsImdvb2QgYW5kIG5vdCBldmlsIG1heSIsImFuZCBub3QgZXZpbCBtYXkgeW91Iiwibm90IGV2aWwgbWF5IHlvdSBmaW5kIiwiZXZpbCBtYXkgeW91IGZpbmQgZm9yZ2l2ZW5lc3MiLCJtYXkgeW91IGZpbmQgZm9yZ2l2ZW5lc3MgZm9yIiwieW91IGZpbmQgZm9yZ2l2ZW5lc3MgZm9yIHlvdXJzZWxmIiwiZmluZCBmb3JnaXZlbmVzcyBmb3IgeW91cnNlbGYgYW5kIiwiZm9yZ2l2ZW5lc3MgZm9yIHlvdXJzZWxmIGFuZCBmb3JnaXZlIiwiZm9yIHlvdXJzZWxmIGFuZCBmb3JnaXZlIG90aGVycyIsInlvdXJzZWxmIGFuZCBmb3JnaXZlIG90aGVycyBtYXkiLCJhbmQgZm9yZ2l2ZSBvdGhlcnMgbWF5IHlvdSIsImZvcmdpdmUgb3RoZXJzIG1heSB5b3Ugc2hhcmUiLCJvdGhlcnMgbWF5IHlvdSBzaGFyZSBmcmVlbHkiLCJtYXkgeW91IHNoYXJlIGZyZWVseSBuZXZlciIsInlvdSBzaGFyZSBmcmVlbHkgbmV2ZXIgdGFraW5nIiwic2hhcmUgZnJlZWx5IG5ldmVyIHRha2luZyBtb3JlIiwiZnJlZWx5IG5ldmVyIHRha2luZyBtb3JlIHRoYW4iLCJuZXZlciB0YWtpbmcgbW9yZSB0aGFuIHlvdSIsInRha2luZyBtb3JlIHRoYW4geW91IGdpdmUiXX0seyJsaWNlbnNlVGV4dHMiOlsiVmVyc2lvbiAxLjAuNSBvZiAxMCBEZWNlbWJlciAyMDA3IENvcHlyaWdodCDCqSAxOTk2LTIwMDcgSnVsaWFuIFNld2FyZFxuXG5UaGlzIHByb2dyYW0sIGJ6aXAyLCB0aGUgYXNzb2NpYXRlZCBsaWJyYXJ5IGxpYmJ6aXAyLCBhbmQgYWxsIGRvY3VtZW50YXRpb24sIGFyZSBjb3B5cmlnaHQgwqkgMTk5Ni0yMDA3IEp1bGlhbiBTZXdhcmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAg4oCiIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cblxuICAg4oCiIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZSBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuXG4gICDigKIgQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuXG4gICDigKIgVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cblBBVEVOVFM6IFRvIHRoZSBiZXN0IG9mIG15IGtub3dsZWRnZSwgYnppcDIgYW5kIGxpYmJ6aXAyIGRvIG5vdCB1c2UgYW55IHBhdGVudGVkIGFsZ29yaXRobXMuIEhvd2V2ZXIsIEkgZG8gbm90IGhhdmUgdGhlIHJlc291cmNlcyB0byBjYXJyeSBvdXQgYSBwYXRlbnQgc2VhcmNoLiBUaGVyZWZvcmUgSSBjYW5ub3QgZ2l2ZSBhbnkgZ3VhcmFudGVlIG9mIHRoZSBhYm92ZSBzdGF0ZW1lbnQuIl0sImxpY2Vuc2VJZHMiOlsiYnppcDItMS4wLjUiXSwia2V5d29yZHMiOlsiMSAwIDUiLCIwIDUgb2YiLCI1IG9mIDEwIiwib2YgMTAgZGVjZW1iZXIiLCIxMCBkZWNlbWJlciAyMDA3IiwiZGVjZW1iZXIgMjAwNyBjb3B5cmlnaHQiLCIyMDA3IGNvcHlyaWdodCAxOTk2IiwianVsaWFuIHNld2FyZCB0aGlzIiwic2V3YXJkIHRoaXMgcHJvZ3JhbSIsImFyZSBjb3B5cmlnaHQgMTk5NiIsImp1bGlhbiBzZXdhcmQgYWxsIiwiZm9sbG93aW5nIGRpc2NsYWltZXIgdGhlIiwiZGlzY2xhaW1lciB0aGUgb3JpZ2luIiwibm90IHJlcXVpcmVkIGFsdGVyZWQiLCJyZXF1aXJlZCBhbHRlcmVkIHNvdXJjZSIsIm9yaWdpbmFsIHNvZnR3YXJlIHRoZSIsInN1Y2ggZGFtYWdlIHBhdGVudHMiLCJkYW1hZ2UgcGF0ZW50cyB0byIsImJlc3Qgb2YgbXkiLCJvZiBteSBrbm93bGVkZ2UiLCJteSBrbm93bGVkZ2UgYnppcDIiLCJrbm93bGVkZ2UgYnppcDIgYW5kIiwiYnppcDIgYW5kIGxpYmJ6aXAyIiwiYW5kIGxpYmJ6aXAyIGRvIiwibGliYnppcDIgZG8gbm90IiwidXNlIGFueSBwYXRlbnRlZCIsImFueSBwYXRlbnRlZCBhbGdvcml0aG1zIiwicGF0ZW50ZWQgYWxnb3JpdGhtcyBob3dldmVyIiwiYWxnb3JpdGhtcyBob3dldmVyIGkiLCJob3dldmVyIGkgZG8iLCJpIGRvIG5vdCIsIm5vdCBoYXZlIHRoZSIsImhhdmUgdGhlIHJlc291cmNlcyIsInRoZSByZXNvdXJjZXMgdG8iLCJyZXNvdXJjZXMgdG8gY2FycnkiLCJjYXJyeSBvdXQgYSIsIm91dCBhIHBhdGVudCIsImEgcGF0ZW50IHNlYXJjaCIsInBhdGVudCBzZWFyY2ggdGhlcmVmb3JlIiwic2VhcmNoIHRoZXJlZm9yZSBpIiwidGhlcmVmb3JlIGkgY2Fubm90IiwiaSBjYW5ub3QgZ2l2ZSIsImNhbm5vdCBnaXZlIGFueSIsImdpdmUgYW55IGd1YXJhbnRlZSIsImFueSBndWFyYW50ZWUgb2YiLCJndWFyYW50ZWUgb2YgdGhlIiwidGhlIGFib3ZlIHN0YXRlbWVudCIsInZlcnNpb24gMSAwIDUiLCIxIDAgNSBvZiIsIjAgNSBvZiAxMCIsIjUgb2YgMTAgZGVjZW1iZXIiLCJvZiAxMCBkZWNlbWJlciAyMDA3IiwiMTAgZGVjZW1iZXIgMjAwNyBjb3B5cmlnaHQiLCJkZWNlbWJlciAyMDA3IGNvcHlyaWdodCAxOTk2IiwiMjAwNyBjb3B5cmlnaHQgMTk5NiAyMDA3IiwiMjAwNyBqdWxpYW4gc2V3YXJkIHRoaXMiLCJqdWxpYW4gc2V3YXJkIHRoaXMgcHJvZ3JhbSIsInNld2FyZCB0aGlzIHByb2dyYW0gYnppcDIiLCJkb2N1bWVudGF0aW9uIGFyZSBjb3B5cmlnaHQgMTk5NiIsImFyZSBjb3B5cmlnaHQgMTk5NiAyMDA3IiwiMjAwNyBqdWxpYW4gc2V3YXJkIGFsbCIsImp1bGlhbiBzZXdhcmQgYWxsIHJpZ2h0cyIsInRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciB0aGUiLCJmb2xsb3dpbmcgZGlzY2xhaW1lciB0aGUgb3JpZ2luIiwiZGlzY2xhaW1lciB0aGUgb3JpZ2luIG9mIiwiaXMgbm90IHJlcXVpcmVkIGFsdGVyZWQiLCJub3QgcmVxdWlyZWQgYWx0ZXJlZCBzb3VyY2UiLCJyZXF1aXJlZCBhbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyIsInRoZSBvcmlnaW5hbCBzb2Z0d2FyZSB0aGUiLCJvcmlnaW5hbCBzb2Z0d2FyZSB0aGUgbmFtZSIsInNvZnR3YXJlIHRoZSBuYW1lIG9mIiwib2Ygc3VjaCBkYW1hZ2UgcGF0ZW50cyIsInN1Y2ggZGFtYWdlIHBhdGVudHMgdG8iLCJkYW1hZ2UgcGF0ZW50cyB0byB0aGUiLCJwYXRlbnRzIHRvIHRoZSBiZXN0IiwidGhlIGJlc3Qgb2YgbXkiLCJiZXN0IG9mIG15IGtub3dsZWRnZSIsIm9mIG15IGtub3dsZWRnZSBiemlwMiIsIm15IGtub3dsZWRnZSBiemlwMiBhbmQiLCJrbm93bGVkZ2UgYnppcDIgYW5kIGxpYmJ6aXAyIiwiYnppcDIgYW5kIGxpYmJ6aXAyIGRvIiwiYW5kIGxpYmJ6aXAyIGRvIG5vdCIsImxpYmJ6aXAyIGRvIG5vdCB1c2UiLCJkbyBub3QgdXNlIGFueSIsIm5vdCB1c2UgYW55IHBhdGVudGVkIiwidXNlIGFueSBwYXRlbnRlZCBhbGdvcml0aG1zIiwiYW55IHBhdGVudGVkIGFsZ29yaXRobXMgaG93ZXZlciIsInBhdGVudGVkIGFsZ29yaXRobXMgaG93ZXZlciBpIiwiYWxnb3JpdGhtcyBob3dldmVyIGkgZG8iLCJob3dldmVyIGkgZG8gbm90IiwiaSBkbyBub3QgaGF2ZSIsImRvIG5vdCBoYXZlIHRoZSIsIm5vdCBoYXZlIHRoZSByZXNvdXJjZXMiLCJoYXZlIHRoZSByZXNvdXJjZXMgdG8iLCJ0aGUgcmVzb3VyY2VzIHRvIGNhcnJ5IiwicmVzb3VyY2VzIHRvIGNhcnJ5IG91dCIsInRvIGNhcnJ5IG91dCBhIiwiY2Fycnkgb3V0IGEgcGF0ZW50Iiwib3V0IGEgcGF0ZW50IHNlYXJjaCIsImEgcGF0ZW50IHNlYXJjaCB0aGVyZWZvcmUiLCJwYXRlbnQgc2VhcmNoIHRoZXJlZm9yZSBpIiwic2VhcmNoIHRoZXJlZm9yZSBpIGNhbm5vdCIsInRoZXJlZm9yZSBpIGNhbm5vdCBnaXZlIiwiaSBjYW5ub3QgZ2l2ZSBhbnkiLCJjYW5ub3QgZ2l2ZSBhbnkgZ3VhcmFudGVlIiwiZ2l2ZSBhbnkgZ3VhcmFudGVlIG9mIiwiYW55IGd1YXJhbnRlZSBvZiB0aGUiLCJndWFyYW50ZWUgb2YgdGhlIGFib3ZlIiwib2YgdGhlIGFib3ZlIHN0YXRlbWVudCIsInZlcnNpb24gMSAwIDUgb2YiLCIxIDAgNSBvZiAxMCIsIjAgNSBvZiAxMCBkZWNlbWJlciIsIjUgb2YgMTAgZGVjZW1iZXIgMjAwNyIsIm9mIDEwIGRlY2VtYmVyIDIwMDcgY29weXJpZ2h0IiwiMTAgZGVjZW1iZXIgMjAwNyBjb3B5cmlnaHQgMTk5NiIsImRlY2VtYmVyIDIwMDcgY29weXJpZ2h0IDE5OTYgMjAwNyIsIjIwMDcgY29weXJpZ2h0IDE5OTYgMjAwNyBqdWxpYW4iLCIxOTk2IDIwMDcganVsaWFuIHNld2FyZCB0aGlzIiwiMjAwNyBqdWxpYW4gc2V3YXJkIHRoaXMgcHJvZ3JhbSIsImp1bGlhbiBzZXdhcmQgdGhpcyBwcm9ncmFtIGJ6aXAyIiwic2V3YXJkIHRoaXMgcHJvZ3JhbSBiemlwMiB0aGUiLCJhbGwgZG9jdW1lbnRhdGlvbiBhcmUgY29weXJpZ2h0IDE5OTYiLCJkb2N1bWVudGF0aW9uIGFyZSBjb3B5cmlnaHQgMTk5NiAyMDA3IiwiYXJlIGNvcHlyaWdodCAxOTk2IDIwMDcganVsaWFuIiwiMTk5NiAyMDA3IGp1bGlhbiBzZXdhcmQgYWxsIiwiMjAwNyBqdWxpYW4gc2V3YXJkIGFsbCByaWdodHMiLCJqdWxpYW4gc2V3YXJkIGFsbCByaWdodHMgcmVzZXJ2ZWQiLCJhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIHRoZSIsInRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciB0aGUgb3JpZ2luIiwiZm9sbG93aW5nIGRpc2NsYWltZXIgdGhlIG9yaWdpbiBvZiIsImRpc2NsYWltZXIgdGhlIG9yaWdpbiBvZiB0aGlzIiwiYnV0IGlzIG5vdCByZXF1aXJlZCBhbHRlcmVkIiwiaXMgbm90IHJlcXVpcmVkIGFsdGVyZWQgc291cmNlIiwibm90IHJlcXVpcmVkIGFsdGVyZWQgc291cmNlIHZlcnNpb25zIiwicmVxdWlyZWQgYWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCIsImJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSB0aGUiLCJ0aGUgb3JpZ2luYWwgc29mdHdhcmUgdGhlIG5hbWUiLCJvcmlnaW5hbCBzb2Z0d2FyZSB0aGUgbmFtZSBvZiIsInNvZnR3YXJlIHRoZSBuYW1lIG9mIHRoZSIsInBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlIHBhdGVudHMiLCJvZiBzdWNoIGRhbWFnZSBwYXRlbnRzIHRvIiwic3VjaCBkYW1hZ2UgcGF0ZW50cyB0byB0aGUiLCJkYW1hZ2UgcGF0ZW50cyB0byB0aGUgYmVzdCIsInBhdGVudHMgdG8gdGhlIGJlc3Qgb2YiLCJ0byB0aGUgYmVzdCBvZiBteSIsInRoZSBiZXN0IG9mIG15IGtub3dsZWRnZSIsImJlc3Qgb2YgbXkga25vd2xlZGdlIGJ6aXAyIiwib2YgbXkga25vd2xlZGdlIGJ6aXAyIGFuZCIsIm15IGtub3dsZWRnZSBiemlwMiBhbmQgbGliYnppcDIiLCJrbm93bGVkZ2UgYnppcDIgYW5kIGxpYmJ6aXAyIGRvIiwiYnppcDIgYW5kIGxpYmJ6aXAyIGRvIG5vdCIsImFuZCBsaWJiemlwMiBkbyBub3QgdXNlIiwibGliYnppcDIgZG8gbm90IHVzZSBhbnkiLCJkbyBub3QgdXNlIGFueSBwYXRlbnRlZCIsIm5vdCB1c2UgYW55IHBhdGVudGVkIGFsZ29yaXRobXMiLCJ1c2UgYW55IHBhdGVudGVkIGFsZ29yaXRobXMgaG93ZXZlciIsImFueSBwYXRlbnRlZCBhbGdvcml0aG1zIGhvd2V2ZXIgaSIsInBhdGVudGVkIGFsZ29yaXRobXMgaG93ZXZlciBpIGRvIiwiYWxnb3JpdGhtcyBob3dldmVyIGkgZG8gbm90IiwiaG93ZXZlciBpIGRvIG5vdCBoYXZlIiwiaSBkbyBub3QgaGF2ZSB0aGUiLCJkbyBub3QgaGF2ZSB0aGUgcmVzb3VyY2VzIiwibm90IGhhdmUgdGhlIHJlc291cmNlcyB0byIsImhhdmUgdGhlIHJlc291cmNlcyB0byBjYXJyeSIsInRoZSByZXNvdXJjZXMgdG8gY2Fycnkgb3V0IiwicmVzb3VyY2VzIHRvIGNhcnJ5IG91dCBhIiwidG8gY2Fycnkgb3V0IGEgcGF0ZW50IiwiY2Fycnkgb3V0IGEgcGF0ZW50IHNlYXJjaCIsIm91dCBhIHBhdGVudCBzZWFyY2ggdGhlcmVmb3JlIiwiYSBwYXRlbnQgc2VhcmNoIHRoZXJlZm9yZSBpIiwicGF0ZW50IHNlYXJjaCB0aGVyZWZvcmUgaSBjYW5ub3QiLCJzZWFyY2ggdGhlcmVmb3JlIGkgY2Fubm90IGdpdmUiLCJ0aGVyZWZvcmUgaSBjYW5ub3QgZ2l2ZSBhbnkiLCJpIGNhbm5vdCBnaXZlIGFueSBndWFyYW50ZWUiLCJjYW5ub3QgZ2l2ZSBhbnkgZ3VhcmFudGVlIG9mIiwiZ2l2ZSBhbnkgZ3VhcmFudGVlIG9mIHRoZSIsImFueSBndWFyYW50ZWUgb2YgdGhlIGFib3ZlIiwiZ3VhcmFudGVlIG9mIHRoZSBhYm92ZSBzdGF0ZW1lbnQiXX0seyJsaWNlbnNlVGV4dHMiOlsiVGhpcyBwcm9ncmFtLCBcImJ6aXAyXCIsIHRoZSBhc3NvY2lhdGVkIGxpYnJhcnkgXCJsaWJiemlwMlwiLCBhbmQgYWxsIGRvY3VtZW50YXRpb24sIGFyZSBjb3B5cmlnaHQgKEMpIDE5OTYtMjAxMCBKdWxpYW4gUiBTZXdhcmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAyLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdCBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cblxuICAgMy4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuXG4gICA0LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cblxuSnVsaWFuIFNld2FyZCwganNld2FyZEBiemlwLm9yZyBiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC42IG9mIDYgU2VwdGVtYmVyIDIwMTAiXSwibGljZW5zZUlkcyI6WyJiemlwMi0xLjAuNiJdLCJrZXl3b3JkcyI6WyIxOTk2IDIwMTAganVsaWFuIiwiMjAxMCBqdWxpYW4gciIsImp1bGlhbiByIHNld2FyZCIsInIgc2V3YXJkIGFsbCIsImRpc2NsYWltZXIgMiB0aGUiLCJub3QgcmVxdWlyZWQgMyIsInJlcXVpcmVkIDMgYWx0ZXJlZCIsIjMgYWx0ZXJlZCBzb3VyY2UiLCJvcmlnaW5hbCBzb2Z0d2FyZSA0Iiwic29mdHdhcmUgNCB0aGUiLCJzdWNoIGRhbWFnZSBqdWxpYW4iLCJkYW1hZ2UganVsaWFuIHNld2FyZCIsImp1bGlhbiBzZXdhcmQganNld2FyZCIsInNld2FyZCBqc2V3YXJkIGJ6aXAiLCJqc2V3YXJkIGJ6aXAgb3JnIiwiYnppcCBvcmcgYnppcDIiLCJvcmcgYnppcDIgbGliYnppcDIiLCJiemlwMiBsaWJiemlwMiB2ZXJzaW9uIiwibGliYnppcDIgdmVyc2lvbiAxIiwiMCA2IG9mIiwiNiBvZiA2Iiwib2YgNiBzZXB0ZW1iZXIiLCI2IHNlcHRlbWJlciAyMDEwIiwiZG9jdW1lbnRhdGlvbiBhcmUgY29weXJpZ2h0IGMiLCJjIDE5OTYgMjAxMCBqdWxpYW4iLCIxOTk2IDIwMTAganVsaWFuIHIiLCIyMDEwIGp1bGlhbiByIHNld2FyZCIsImp1bGlhbiByIHNld2FyZCBhbGwiLCJyIHNld2FyZCBhbGwgcmlnaHRzIiwiZm9sbG93aW5nIGRpc2NsYWltZXIgMiB0aGUiLCJkaXNjbGFpbWVyIDIgdGhlIG9yaWdpbiIsImlzIG5vdCByZXF1aXJlZCAzIiwibm90IHJlcXVpcmVkIDMgYWx0ZXJlZCIsInJlcXVpcmVkIDMgYWx0ZXJlZCBzb3VyY2UiLCIzIGFsdGVyZWQgc291cmNlIHZlcnNpb25zIiwidGhlIG9yaWdpbmFsIHNvZnR3YXJlIDQiLCJvcmlnaW5hbCBzb2Z0d2FyZSA0IHRoZSIsInNvZnR3YXJlIDQgdGhlIG5hbWUiLCJvZiBzdWNoIGRhbWFnZSBqdWxpYW4iLCJzdWNoIGRhbWFnZSBqdWxpYW4gc2V3YXJkIiwiZGFtYWdlIGp1bGlhbiBzZXdhcmQganNld2FyZCIsImp1bGlhbiBzZXdhcmQganNld2FyZCBiemlwIiwic2V3YXJkIGpzZXdhcmQgYnppcCBvcmciLCJqc2V3YXJkIGJ6aXAgb3JnIGJ6aXAyIiwiYnppcCBvcmcgYnppcDIgbGliYnppcDIiLCJvcmcgYnppcDIgbGliYnppcDIgdmVyc2lvbiIsImJ6aXAyIGxpYmJ6aXAyIHZlcnNpb24gMSIsImxpYmJ6aXAyIHZlcnNpb24gMSAwIiwidmVyc2lvbiAxIDAgNiIsIjEgMCA2IG9mIiwiMCA2IG9mIDYiLCI2IG9mIDYgc2VwdGVtYmVyIiwib2YgNiBzZXB0ZW1iZXIgMjAxMCIsImFsbCBkb2N1bWVudGF0aW9uIGFyZSBjb3B5cmlnaHQgYyIsImRvY3VtZW50YXRpb24gYXJlIGNvcHlyaWdodCBjIDE5OTYiLCJhcmUgY29weXJpZ2h0IGMgMTk5NiAyMDEwIiwiY29weXJpZ2h0IGMgMTk5NiAyMDEwIGp1bGlhbiIsImMgMTk5NiAyMDEwIGp1bGlhbiByIiwiMTk5NiAyMDEwIGp1bGlhbiByIHNld2FyZCIsIjIwMTAganVsaWFuIHIgc2V3YXJkIGFsbCIsImp1bGlhbiByIHNld2FyZCBhbGwgcmlnaHRzIiwiciBzZXdhcmQgYWxsIHJpZ2h0cyByZXNlcnZlZCIsInRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciAyIHRoZSIsImZvbGxvd2luZyBkaXNjbGFpbWVyIDIgdGhlIG9yaWdpbiIsImRpc2NsYWltZXIgMiB0aGUgb3JpZ2luIG9mIiwiYnV0IGlzIG5vdCByZXF1aXJlZCAzIiwiaXMgbm90IHJlcXVpcmVkIDMgYWx0ZXJlZCIsIm5vdCByZXF1aXJlZCAzIGFsdGVyZWQgc291cmNlIiwicmVxdWlyZWQgMyBhbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyIsIjMgYWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCIsImJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSA0IiwidGhlIG9yaWdpbmFsIHNvZnR3YXJlIDQgdGhlIiwib3JpZ2luYWwgc29mdHdhcmUgNCB0aGUgbmFtZSIsInNvZnR3YXJlIDQgdGhlIG5hbWUgb2YiLCI0IHRoZSBuYW1lIG9mIHRoZSIsInBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlIGp1bGlhbiIsIm9mIHN1Y2ggZGFtYWdlIGp1bGlhbiBzZXdhcmQiLCJzdWNoIGRhbWFnZSBqdWxpYW4gc2V3YXJkIGpzZXdhcmQiLCJkYW1hZ2UganVsaWFuIHNld2FyZCBqc2V3YXJkIGJ6aXAiLCJqdWxpYW4gc2V3YXJkIGpzZXdhcmQgYnppcCBvcmciLCJzZXdhcmQganNld2FyZCBiemlwIG9yZyBiemlwMiIsImpzZXdhcmQgYnppcCBvcmcgYnppcDIgbGliYnppcDIiLCJiemlwIG9yZyBiemlwMiBsaWJiemlwMiB2ZXJzaW9uIiwib3JnIGJ6aXAyIGxpYmJ6aXAyIHZlcnNpb24gMSIsImJ6aXAyIGxpYmJ6aXAyIHZlcnNpb24gMSAwIiwibGliYnppcDIgdmVyc2lvbiAxIDAgNiIsInZlcnNpb24gMSAwIDYgb2YiLCIxIDAgNiBvZiA2IiwiMCA2IG9mIDYgc2VwdGVtYmVyIiwiNiBvZiA2IHNlcHRlbWJlciAyMDEwIl19LHsibGljZW5zZVRleHRzIjpbImNvcHlsZWZ0LW5leHQgMC4zLjAgKFwidGhpcyBMaWNlbnNlXCIpXG5cblJlbGVhc2UgZGF0ZTogMjAxMy0wNS0xNlxuXG4gICAxLiBMaWNlbnNlIEdyYW50czsgTm8gVHJhZGVtYXJrIExpY2Vuc2VcblxuICAgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBJIGdyYW50IFlvdTpcblxuICAgICAgYSkgQSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHBlcnBldHVhbCwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSBjb3B5cmlnaHQgbGljZW5zZSwgdG8gcmVwcm9kdWNlLCBEaXN0cmlidXRlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IHBlcmZvcm0gYW5kIHB1YmxpY2x5IGRpc3BsYXkgTXkgV29yay5cblxuICAgICAgYikgQSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHBlcnBldHVhbCwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgYW5kIGltcG9ydCBDb3ZlcmVkIFdvcmtzLlxuXG4gICBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyBpbiBNeSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBsb2dvcy5cblxuICAgMi4gRGlzdHJpYnV0aW9uOiBHZW5lcmFsIENvbmRpdGlvbnNcblxuICAgWW91IG1heSBEaXN0cmlidXRlIENvdmVyZWQgV29ya3MsIHByb3ZpZGVkIHRoYXQgWW91IChpKSBpbmZvcm0gcmVjaXBpZW50cyBob3cgdGhleSBjYW4gb2J0YWluIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IChpaSkgc2F0aXNmeSB0aGUgYXBwbGljYWJsZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDMgdGhyb3VnaCA2OyBhbmQgKGlpaSkgcHJlc2VydmUgYWxsIExlZ2FsIE5vdGljZXMgY29udGFpbmVkIGluIE15IFdvcmsgKHRvIHRoZSBleHRlbnQgdGhleSByZW1haW4gcGVydGluZW50KS4gXCJMZWdhbCBOb3RpY2VzXCIgbWVhbnMgY29weXJpZ2h0IG5vdGljZXMsIGxpY2Vuc2Ugbm90aWNlcywgbGljZW5zZSB0ZXh0cywgYW5kIGF1dGhvciBhdHRyaWJ1dGlvbnMsIGJ1dCBkb2VzIG5vdCBpbmNsdWRlIGxvZ29zLCBvdGhlciBncmFwaGljYWwgaW1hZ2VzLCB0cmFkZW1hcmtzIG9yIHRyYWRlbWFyayBsZWdlbmRzLlxuXG4gICAzLiBDb25kaXRpb25zIGZvciBEaXN0cmlidXRpbmcgRGVyaXZlZCBXb3JrczsgT3V0Ym91bmQgR1BMIENvbXBhdGliaWxpdHlcblxuICAgSWYgWW91IERpc3RyaWJ1dGUgYSBEZXJpdmVkIFdvcmssIFlvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSBEZXJpdmVkIFdvcmsgYXMgYSB3aG9sZSB1bmRlciB0aGlzIExpY2Vuc2UsIHdpdGggcHJvbWluZW50IG5vdGljZSBvZiBzdWNoIGxpY2Vuc2luZy4gVGhpcyBjb25kaXRpb24gbWF5IG5vdCBiZSBhdm9pZGVkIHRocm91Z2ggc3VjaCBtZWFucyBhcyBzZXBhcmF0ZSBEaXN0cmlidXRpb24gb2YgcG9ydGlvbnMgb2YgdGhlIERlcml2ZWQgV29yay4gWW91IG1heSBhZGRpdGlvbmFsbHkgbGljZW5zZSB0aGUgRGVyaXZlZCBXb3JrIHVuZGVyIHRoZSBHUEwsIHNvIHRoYXQgdGhlIHJlY2lwaWVudCBtYXkgZnVydGhlciBEaXN0cmlidXRlIHRoZSBEZXJpdmVkIFdvcmsgdW5kZXIgZWl0aGVyIHRoaXMgTGljZW5zZSBvciB0aGUgR1BMLlxuXG4gICA0LiBDb25kaXRpb24gQWdhaW5zdCBGdXJ0aGVyIFJlc3RyaWN0aW9uczsgSW5ib3VuZCBMaWNlbnNlIENvbXBhdGliaWxpdHlcblxuICAgV2hlbiBEaXN0cmlidXRpbmcgYSBDb3ZlcmVkIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgcmlnaHRzIGluIHRoZSBDb3ZlcmVkIFdvcmsgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIFRoaXMgY29uZGl0aW9uIGlzIG5vdCBleGN1c2VkIG1lcmVseSBiZWNhdXNlIHN1Y2ggcmVzdHJpY3Rpb25zIHJlc3VsdCBmcm9tIFlvdXIgY29tcGxpYW5jZSB3aXRoIGNvbmRpdGlvbnMgb3Igb2JsaWdhdGlvbnMgZXh0cmluc2ljIHRvIHRoaXMgTGljZW5zZSAoc3VjaCBhcyBhIGNvdXJ0IG9yZGVyIG9yIGFuIGFncmVlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkpLlxuXG4gICBIb3dldmVyLCBZb3UgbWF5IERpc3RyaWJ1dGUgYSBDb3ZlcmVkIFdvcmsgaW5jb3Jwb3JhdGluZyBtYXRlcmlhbCBnb3Zlcm5lZCBieSBhIGxpY2Vuc2UgdGhhdCBpcyBib3RoIE9TSS1BcHByb3ZlZCBhbmQgRlNGLUZyZWUgYXMgb2YgdGhlIHJlbGVhc2UgZGF0ZSBvZiB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91ciBEaXN0cmlidXRpb24gY29tcGxpZXMgd2l0aCBzdWNoIG90aGVyIGxpY2Vuc2UuXG5cbiAgIDUuIENvbmRpdGlvbnMgZm9yIERpc3RyaWJ1dGluZyBPYmplY3QgQ29kZVxuXG4gICBZb3UgbWF5IERpc3RyaWJ1dGUgYW4gT2JqZWN0IENvZGUgZm9ybSBvZiBhIENvdmVyZWQgV29yaywgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55IHRoZSBPYmplY3QgQ29kZSB3aXRoIGEgVVJMIHRocm91Z2ggd2hpY2ggdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGlzIG1hZGUgYXZhaWxhYmxlLCBhdCBubyBjaGFyZ2UsIGJ5IHNvbWUgc3RhbmRhcmQgb3IgY3VzdG9tYXJ5IG1lYW5zIG9mIHByb3ZpZGluZyBuZXR3b3JrIGFjY2VzcyB0byBzb3VyY2UgY29kZS5cblxuICAgSWYgeW91IERpc3RyaWJ1dGUgdGhlIE9iamVjdCBDb2RlIGluIGEgcGh5c2ljYWwgcHJvZHVjdCBvciB0YW5naWJsZSBzdG9yYWdlIG1lZGl1bSAoXCJQcm9kdWN0XCIpLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbXVzdCBiZSBhdmFpbGFibGUgdGhyb3VnaCBzdWNoIFVSTCBmb3IgdHdvIHllYXJzIGZyb20gdGhlIGRhdGUgb2YgWW91ciBtb3N0IHJlY2VudCBEaXN0cmlidXRpb24gb2YgdGhlIE9iamVjdCBDb2RlIGluIHRoZSBQcm9kdWN0LiBIb3dldmVyLCBpZiB0aGUgUHJvZHVjdCBpdHNlbGYgY29udGFpbnMgb3IgaXMgYWNjb21wYW5pZWQgYnkgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIChtYWRlIGF2YWlsYWJsZSBpbiBhIGN1c3RvbWFyaWx5IGFjY2Vzc2libGUgbWFubmVyKSwgWW91IG5lZWQgbm90IGFsc28gY29tcGx5IHdpdGggdGhlIGZpcnN0IHBhcmFncmFwaCBvZiB0aGlzIHNlY3Rpb24uXG5cbiAgIEVhY2ggcmVjaXBpZW50IG9mIHRoZSBDb3ZlcmVkIFdvcmsgZnJvbSBZb3UgaXMgYW4gaW50ZW5kZWQgdGhpcmQtcGFydHkgYmVuZWZpY2lhcnkgb2YgdGhpcyBMaWNlbnNlIHNvbGVseSBhcyB0byB0aGlzIHNlY3Rpb24gNSwgd2l0aCB0aGUgcmlnaHQgdG8gZW5mb3JjZSBpdHMgdGVybXMuXG5cbiAgIDYuIFN5bW1ldHJpY2FsIExpY2Vuc2luZyBDb25kaXRpb24gZm9yIFVwc3RyZWFtIENvbnRyaWJ1dGlvbnNcblxuICAgSWYgWW91IERpc3RyaWJ1dGUgYSB3b3JrIHRvIE1lIHNwZWNpZmljYWxseSBmb3IgaW5jbHVzaW9uIGluIG9yIG1vZGlmaWNhdGlvbiBvZiBhIENvdmVyZWQgV29yayAoYSBcIlBhdGNoXCIpLCBhbmQgbm8gZXhwbGljaXQgbGljZW5zaW5nIHRlcm1zIGFwcGx5IHRvIHRoZSBQYXRjaCwgWW91IGxpY2Vuc2UgdGhlIFBhdGNoIHVuZGVyIHRoaXMgTGljZW5zZSwgdG8gdGhlIGV4dGVudCBvZiBZb3VyIGNvcHlyaWdodCBpbiB0aGUgUGF0Y2guIFRoaXMgY29uZGl0aW9uIGRvZXMgbm90IG5lZ2F0ZSB0aGUgb3RoZXIgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIGlmIGFwcGxpY2FibGUgdG8gdGhlIFBhdGNoLlxuXG4gICA3LiBOdWxsaWZpY2F0aW9uIG9mIENvcHlsZWZ0L1Byb3ByaWV0YXJ5IER1YWwgTGljZW5zaW5nXG5cbiAgIElmIEkgb2ZmZXIgdG8gbGljZW5zZSwgZm9yIGEgZmVlLCBhIENvdmVyZWQgV29yayB1bmRlciB0ZXJtcyBvdGhlciB0aGFuIGEgbGljZW5zZSB0aGF0IGlzIE9TSS1BcHByb3ZlZCBvciBGU0YtRnJlZSBhcyBvZiB0aGUgcmVsZWFzZSBkYXRlIG9mIHRoaXMgTGljZW5zZSBvciBhIG51bWJlcmVkIHZlcnNpb24gb2YgY29weWxlZnQtbmV4dCByZWxlYXNlZCBieSB0aGUgQ29weWxlZnQtTmV4dCBQcm9qZWN0LCB0aGVuIHRoZSBsaWNlbnNlIEkgZ3JhbnQgWW91IHVuZGVyIHNlY3Rpb24gMSBpcyBubyBsb25nZXIgc3ViamVjdCB0byB0aGUgY29uZGl0aW9ucyBpbiBzZWN0aW9ucyAyIHRocm91Z2ggNS5cblxuICAgOC4gQ29weWxlZnQgU3Vuc2V0XG5cbiAgIFRoZSBjb25kaXRpb25zIGluIHNlY3Rpb25zIDIgdGhyb3VnaCA1IG5vIGxvbmdlciBhcHBseSBvbmNlIGZpZnRlZW4geWVhcnMgaGF2ZSBlbGFwc2VkIGZyb20gdGhlIGRhdGUgb2YgTXkgZmlyc3QgRGlzdHJpYnV0aW9uIG9mIE15IFdvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICA5LiBQYXNzLVRocm91Z2hcblxuICAgV2hlbiBZb3UgRGlzdHJpYnV0ZSBhIENvdmVyZWQgV29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSB0byBNeSBXb3JrIGZyb20gTWUsIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgMTAuIFRlcm1pbmF0aW9uXG5cbiAgIFlvdXIgbGljZW5zZSBncmFudHMgdW5kZXIgc2VjdGlvbiAxIGFyZSBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQgaWYgWW91XG5cbiAgICAgIGEpIGZhaWwgdG8gY29tcGx5IHdpdGggdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB1bmxlc3MgWW91IGN1cmUgc3VjaCBub25jb21wbGlhbmNlIHdpdGhpbiB0aGlydHkgZGF5cyBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBpdCwgb3JcblxuICAgICAgYikgaW5pdGlhdGUgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24gY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zLCBjb3VudGVyY2xhaW1zLCBhbmQgY3Jvc3MtY2xhaW1zKSBhbGxlZ2luZyB0aGF0IGFueSBwYXJ0IG9mIE15IFdvcmsgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudC5cblxuICAgVGVybWluYXRpb24gb2YgWW91ciBsaWNlbnNlIGdyYW50cyBleHRlbmRzIHRvIGFsbCBjb3BpZXMgb2YgQ292ZXJlZCBXb3JrcyBZb3Ugc3Vic2VxdWVudGx5IG9idGFpbi4gVGVybWluYXRpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZSByaWdodHMgb2YgdGhvc2Ugd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIFlvdSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS5cblxuICAgVG8gdGhlIGV4dGVudCBwZXJtaXNzaW9uIHRvIG1ha2UgY29waWVzIG9mIGEgQ292ZXJlZCBXb3JrIGlzIG5lY2Vzc2FyeSBtZXJlbHkgZm9yIHJ1bm5pbmcgaXQsIHN1Y2ggcGVybWlzc2lvbiBpcyBub3QgdGVybWluYWJsZS5cblxuICAgMTEuIExhdGVyIExpY2Vuc2UgVmVyc2lvbnNcblxuICAgVGhlIENvcHlsZWZ0LU5leHQgUHJvamVjdCBtYXkgcmVsZWFzZSBuZXcgdmVyc2lvbnMgb2YgY29weWxlZnQtbmV4dCwgZGVzaWduYXRlZCBieSBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyIChcIkxhdGVyIFZlcnNpb25zXCIpLiBVbmxlc3MgSSBleHBsaWNpdGx5IHJlbW92ZSB0aGUgb3B0aW9uIG9mIERpc3RyaWJ1dGluZyBDb3ZlcmVkIFdvcmtzIHVuZGVyIExhdGVyIFZlcnNpb25zLCBZb3UgbWF5IERpc3RyaWJ1dGUgQ292ZXJlZCBXb3JrcyB1bmRlciBhbnkgTGF0ZXIgVmVyc2lvbi5cblxuICAgMTIuIE5vIFdhcnJhbnR5XG5cbiAgIE15IFdvcmsgaXMgcHJvdmlkZWQgXCJhcy1pc1wiLCB3aXRob3V0IHdhcnJhbnR5LiBZb3UgYmVhciB0aGUgcmlzayBvZiB1c2luZyBpdC4gVG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGVhY2ggRGlzdHJpYnV0b3Igb2YgTXkgV29yayBleGNsdWRlcyB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIHRpdGxlLCBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIGFuZCBub24taW5mcmluZ2VtZW50LlxuXG4gICAxMy4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHlcblxuICAgVG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGluIG5vIGV2ZW50IHdpbGwgYW55IERpc3RyaWJ1dG9yIG9mIE15IFdvcmsgYmUgbGlhYmxlIHRvIFlvdSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgd2hldGhlciBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHdoZXRoZXIgYXJpc2luZyB1bmRlciBjb250cmFjdCwgdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBvciBvdGhlcndpc2UsIGV2ZW4gd2hlcmUgdGhlIERpc3RyaWJ1dG9yIGtuZXcgb3Igc2hvdWxkIGhhdmUga25vd24gYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy5cblxuICAgMTQuIFNldmVyYWJpbGl0eVxuXG4gICBUaGUgaW52YWxpZGl0eSBvciB1bmVuZm9yY2VhYmlsaXR5IG9mIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGRvZXMgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGlzIExpY2Vuc2UuIFN1Y2ggcHJvdmlzaW9uIGlzIHRvIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCB2YWxpZCBhbmQgZW5mb3JjZWFibGUuXG5cbiAgIDE1LiBEZWZpbml0aW9uc1xuXG4gICBcIkNvcHlsZWZ0LU5leHQgUHJvamVjdFwiIG1lYW5zIHRoZSBwcm9qZWN0IHRoYXQgbWFpbnRhaW5zIHRoZSBzb3VyY2UgY29kZSByZXBvc2l0b3J5IGF0IFx1MDAzY2h0dHBzOi8vZ2l0b3Jpb3VzLm9yZy9jb3B5bGVmdC1uZXh0L1x1MDAzZSBhcyBvZiB0aGUgcmVsZWFzZSBkYXRlIG9mIHRoaXMgTGljZW5zZS5cblxuICAgXCJDb3JyZXNwb25kaW5nIFNvdXJjZVwiIG9mIGEgQ292ZXJlZCBXb3JrIGluIE9iamVjdCBDb2RlIGZvcm0gbWVhbnMgKGkpIHRoZSBTb3VyY2UgQ29kZSBmb3JtIG9mIHRoZSBDb3ZlcmVkIFdvcms7IChpaSkgYWxsIHNjcmlwdHMsIGluc3RydWN0aW9ucyBhbmQgc2ltaWxhciBpbmZvcm1hdGlvbiB0aGF0IGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSBmb3IgYSBza2lsbGVkIGRldmVsb3BlciB0byBnZW5lcmF0ZSBzdWNoIE9iamVjdCBDb2RlIGZyb20gdGhlIFNvdXJjZSBDb2RlIHByb3ZpZGVkIHVuZGVyIChpKTsgYW5kIChpaWkpIGEgbGlzdCBjbGVhcmx5IGlkZW50aWZ5aW5nIGFsbCBTZXBhcmF0ZSBXb3JrcyAob3RoZXIgdGhhbiB0aG9zZSBwcm92aWRlZCBpbiBjb21wbGlhbmNlIHdpdGggKGlpKSkgdGhhdCB3ZXJlIHNwZWNpZmljYWxseSB1c2VkIGluIGJ1aWxkaW5nIGFuZCAoaWYgYXBwbGljYWJsZSkgaW5zdGFsbGluZyB0aGUgQ292ZXJlZCBXb3JrIChmb3IgZXhhbXBsZSwgYSBzcGVjaWZpZWQgcHJvcHJpZXRhcnkgY29tcGlsZXIgaW5jbHVkaW5nIGl0cyB2ZXJzaW9uIG51bWJlcikuIENvcnJlc3BvbmRpbmcgU291cmNlIG11c3QgYmUgbWFjaGluZS1yZWFkYWJsZS5cblxuICAgXCJDb3ZlcmVkIFdvcmtcIiBtZWFucyBNeSBXb3JrIG9yIGEgRGVyaXZlZCBXb3JrLlxuXG4gICBcIkRlcml2ZWQgV29ya1wiIG1lYW5zIGEgd29yayBvZiBhdXRob3JzaGlwIHRoYXQgY29waWVzIGZyb20sIG1vZGlmaWVzLCBhZGFwdHMsIGlzIGJhc2VkIG9uLCBpcyBhIGRlcml2YXRpdmUgd29yayBvZiwgdHJhbnNmb3JtcywgdHJhbnNsYXRlcyBvciBjb250YWlucyBhbGwgb3IgcGFydCBvZiBNeSBXb3JrLCBzdWNoIHRoYXQgY29weXJpZ2h0IHBlcm1pc3Npb24gaXMgcmVxdWlyZWQuIFRoZSBmb2xsb3dpbmcgYXJlIG5vdCBEZXJpdmVkIFdvcmtzOiAoaSkgTWVyZSBBZ2dyZWdhdGlvbjsgKGlpKSBhIG1lcmUgcmVwcm9kdWN0aW9uIG9mIE15IFdvcms7IGFuZCAoaWlpKSBpZiBNeSBXb3JrIGZhaWxzIHRvIGV4cGxpY2l0bHkgc3RhdGUgYW4gZXhwZWN0YXRpb24gb3RoZXJ3aXNlLCBhIHdvcmsgdGhhdCBtZXJlbHkgbWFrZXMgcmVmZXJlbmNlIHRvIE15IFdvcmsuXG5cbiAgIFwiRGlzdHJpYnV0ZVwiIG1lYW5zIHRvIGRpc3RyaWJ1dGUsIHRyYW5zZmVyIG9yIG1ha2UgYSBjb3B5IGF2YWlsYWJsZSB0byBzb21lb25lIGVsc2UsIHN1Y2ggdGhhdCBjb3B5cmlnaHQgcGVybWlzc2lvbiBpcyByZXF1aXJlZC5cblxuICAgXCJEaXN0cmlidXRvclwiIG1lYW5zIE1lIGFuZCBhbnlvbmUgZWxzZSB3aG8gRGlzdHJpYnV0ZXMgYSBDb3ZlcmVkIFdvcmsuXG5cbiAgIFwiRlNGLUZyZWVcIiBtZWFucyBjbGFzc2lmaWVkIGFzICdmcmVlJyBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLlxuXG4gICBcIkdQTFwiIG1lYW5zIGEgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZS5cblxuICAgXCJJXCIvXCJNZVwiL1wiTXlcIiByZWZlcnMgdG8gdGhlIGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IHRoYXQgcGxhY2VzIE15IFdvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLiBcIllvdVwiL1wiWW91clwiIHJlZmVycyB0byB0aGUgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgaW4gTXkgV29yayB1bmRlciB0aGlzIExpY2Vuc2UuIEEgbGVnYWwgZW50aXR5IGluY2x1ZGVzIGVhY2ggZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggc3VjaCBsZWdhbCBlbnRpdHkuIFwiQ29udHJvbFwiIG1lYW5zIChhKSB0aGUgcG93ZXIgdG8gZGlyZWN0IHRoZSBhY3Rpb25zIG9mIHN1Y2ggbGVnYWwgZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggbGVnYWwgZW50aXR5LlxuXG4gICBcIkxpY2Vuc2VkIFBhdGVudHNcIiBtZWFucyBhbGwgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIHJveWFsdHktZnJlZSBieSBNZSwgbm93IG9yIGluIHRoZSBmdXR1cmUsIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIE15IFdvcmssIGFuZCBleGNsdWRlcyBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhIGNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIE15IFdvcmsuXG5cbiAgIFwiTWVyZSBBZ2dyZWdhdGlvblwiIG1lYW5zIGFuIGFnZ3JlZ2F0aW9uIG9mIGEgQ292ZXJlZCBXb3JrIHdpdGggYSBTZXBhcmF0ZSBXb3JrLlxuXG4gICBcIk15IFdvcmtcIiBtZWFucyB0aGUgcGFydGljdWxhciB3b3JrIG9mIGF1dGhvcnNoaXAgSSBsaWNlbnNlIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuXG5cbiAgIFwiT2JqZWN0IENvZGVcIiBtZWFucyBhbnkgZm9ybSBvZiBhIHdvcmsgdGhhdCBpcyBub3QgU291cmNlIENvZGUuXG5cbiAgIFwiT1NJLUFwcHJvdmVkXCIgbWVhbnMgYXBwcm92ZWQgYXMgJ09wZW4gU291cmNlJyBieSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZS5cblxuICAgXCJTZXBhcmF0ZSBXb3JrXCIgbWVhbnMgYSB3b3JrIHRoYXQgaXMgc2VwYXJhdGUgZnJvbSBhbmQgaW5kZXBlbmRlbnQgb2YgYSBwYXJ0aWN1bGFyIENvdmVyZWQgV29yayBhbmQgaXMgbm90IGJ5IGl0cyBuYXR1cmUgYW4gZXh0ZW5zaW9uIG9yIGVuaGFuY2VtZW50IG9mIHRoZSBDb3ZlcmVkIFdvcmssIGFuZC9vciBhIHJ1bnRpbWUgbGlicmFyeSwgc3RhbmRhcmQgbGlicmFyeSBvciBzaW1pbGFyIGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gZ2VuZXJhdGUgYW4gT2JqZWN0IENvZGUgZm9ybSBvZiBhIENvdmVyZWQgV29yay5cblxuICAgXCJTb3VyY2UgQ29kZVwiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiBhIHdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiJdLCJsaWNlbnNlSWRzIjpbImNvcHlsZWZ0LW5leHQtMC4zLjAiXSwia2V5d29yZHMiOlsiMCAzIDAiLCJyZWxlYXNlIGRhdGUgMjAxMyIsImRhdGUgMjAxMyAwNSIsIjIwMTMgMDUgMTYiLCIwNSAxNiAxIiwiMTYgMSBsaWNlbnNlIiwieW91IG1heSBhZGRpdGlvbmFsbHkiLCJtYXkgYWRkaXRpb25hbGx5IGxpY2Vuc2UiLCJhZGRpdGlvbmFsbHkgbGljZW5zZSB0aGUiLCJ0aGUgZ3BsIHNvIiwiZ3BsIHNvIHRoYXQiLCJyZWNpcGllbnQgbWF5IGZ1cnRoZXIiLCJtYXkgZnVydGhlciBkaXN0cmlidXRlIiwid29yayB1bmRlciBlaXRoZXIiLCJ1bmRlciBlaXRoZXIgdGhpcyIsIm9yIHRoZSBncGwiLCJ0aGF0IHlvdXIgZGlzdHJpYnV0aW9uIiwieW91ciBkaXN0cmlidXRpb24gY29tcGxpZXMiLCJjb21wbGllcyB3aXRoIHN1Y2giLCJvdGhlciBsaWNlbnNlIDUiLCJzZWN0aW9uIGVhY2ggcmVjaXBpZW50IiwiYXQgaHR0cHMgZ2l0b3Jpb3VzIiwiaHR0cHMgZ2l0b3Jpb3VzIG9yZyIsImdpdG9yaW91cyBvcmcgY29weWxlZnQiLCJvcmcgY29weWxlZnQgbmV4dCIsImNvcHlsZWZ0IG5leHQgYXMiLCJuZXh0IGFzIG9mIiwibmV4dCAwIDMgMCIsIjAgMyAwIHRoaXMiLCIzIDAgdGhpcyBsaWNlbnNlIiwiMCB0aGlzIGxpY2Vuc2UgcmVsZWFzZSIsImxpY2Vuc2UgcmVsZWFzZSBkYXRlIDIwMTMiLCJyZWxlYXNlIGRhdGUgMjAxMyAwNSIsImRhdGUgMjAxMyAwNSAxNiIsIjIwMTMgMDUgMTYgMSIsIjA1IDE2IDEgbGljZW5zZSIsIjE2IDEgbGljZW5zZSBncmFudHMiLCJ0aGUgZGVyaXZlZCB3b3JrIHlvdSIsIndvcmsgeW91IG1heSBhZGRpdGlvbmFsbHkiLCJ5b3UgbWF5IGFkZGl0aW9uYWxseSBsaWNlbnNlIiwibWF5IGFkZGl0aW9uYWxseSBsaWNlbnNlIHRoZSIsImFkZGl0aW9uYWxseSBsaWNlbnNlIHRoZSBkZXJpdmVkIiwidW5kZXIgdGhlIGdwbCBzbyIsInRoZSBncGwgc28gdGhhdCIsImdwbCBzbyB0aGF0IHRoZSIsInRoYXQgdGhlIHJlY2lwaWVudCBtYXkiLCJ0aGUgcmVjaXBpZW50IG1heSBmdXJ0aGVyIiwicmVjaXBpZW50IG1heSBmdXJ0aGVyIGRpc3RyaWJ1dGUiLCJtYXkgZnVydGhlciBkaXN0cmlidXRlIHRoZSIsImZ1cnRoZXIgZGlzdHJpYnV0ZSB0aGUgZGVyaXZlZCIsImRlcml2ZWQgd29yayB1bmRlciBlaXRoZXIiLCJ3b3JrIHVuZGVyIGVpdGhlciB0aGlzIiwidW5kZXIgZWl0aGVyIHRoaXMgbGljZW5zZSIsImxpY2Vuc2Ugb3IgdGhlIGdwbCIsIm9yIHRoZSBncGwgNCIsImxpY2Vuc2UgcHJvdmlkZWQgdGhhdCB5b3VyIiwicHJvdmlkZWQgdGhhdCB5b3VyIGRpc3RyaWJ1dGlvbiIsInRoYXQgeW91ciBkaXN0cmlidXRpb24gY29tcGxpZXMiLCJ5b3VyIGRpc3RyaWJ1dGlvbiBjb21wbGllcyB3aXRoIiwiZGlzdHJpYnV0aW9uIGNvbXBsaWVzIHdpdGggc3VjaCIsImNvbXBsaWVzIHdpdGggc3VjaCBvdGhlciIsInN1Y2ggb3RoZXIgbGljZW5zZSA1Iiwib3RoZXIgbGljZW5zZSA1IGNvbmRpdGlvbnMiLCJ0aGlzIHNlY3Rpb24gZWFjaCByZWNpcGllbnQiLCJzZWN0aW9uIGVhY2ggcmVjaXBpZW50IG9mIiwiMiB0aHJvdWdoIDUgOCIsIjIgdGhyb3VnaCA1IG5vIiwicmVwb3NpdG9yeSBhdCBodHRwcyBnaXRvcmlvdXMiLCJhdCBodHRwcyBnaXRvcmlvdXMgb3JnIiwiaHR0cHMgZ2l0b3Jpb3VzIG9yZyBjb3B5bGVmdCIsImdpdG9yaW91cyBvcmcgY29weWxlZnQgbmV4dCIsIm9yZyBjb3B5bGVmdCBuZXh0IGFzIiwiY29weWxlZnQgbmV4dCBhcyBvZiIsIm5leHQgYXMgb2YgdGhlIiwiY29weWxlZnQgbmV4dCAwIDMgMCIsIm5leHQgMCAzIDAgdGhpcyIsIjAgMyAwIHRoaXMgbGljZW5zZSIsIjMgMCB0aGlzIGxpY2Vuc2UgcmVsZWFzZSIsIjAgdGhpcyBsaWNlbnNlIHJlbGVhc2UgZGF0ZSIsInRoaXMgbGljZW5zZSByZWxlYXNlIGRhdGUgMjAxMyIsImxpY2Vuc2UgcmVsZWFzZSBkYXRlIDIwMTMgMDUiLCJyZWxlYXNlIGRhdGUgMjAxMyAwNSAxNiIsImRhdGUgMjAxMyAwNSAxNiAxIiwiMjAxMyAwNSAxNiAxIGxpY2Vuc2UiLCIwNSAxNiAxIGxpY2Vuc2UgZ3JhbnRzIiwiMTYgMSBsaWNlbnNlIGdyYW50cyBubyIsIm9mIHRoZSBkZXJpdmVkIHdvcmsgeW91IiwidGhlIGRlcml2ZWQgd29yayB5b3UgbWF5IiwiZGVyaXZlZCB3b3JrIHlvdSBtYXkgYWRkaXRpb25hbGx5Iiwid29yayB5b3UgbWF5IGFkZGl0aW9uYWxseSBsaWNlbnNlIiwieW91IG1heSBhZGRpdGlvbmFsbHkgbGljZW5zZSB0aGUiLCJtYXkgYWRkaXRpb25hbGx5IGxpY2Vuc2UgdGhlIGRlcml2ZWQiLCJhZGRpdGlvbmFsbHkgbGljZW5zZSB0aGUgZGVyaXZlZCB3b3JrIiwid29yayB1bmRlciB0aGUgZ3BsIHNvIiwidW5kZXIgdGhlIGdwbCBzbyB0aGF0IiwidGhlIGdwbCBzbyB0aGF0IHRoZSIsImdwbCBzbyB0aGF0IHRoZSByZWNpcGllbnQiLCJzbyB0aGF0IHRoZSByZWNpcGllbnQgbWF5IiwidGhhdCB0aGUgcmVjaXBpZW50IG1heSBmdXJ0aGVyIiwidGhlIHJlY2lwaWVudCBtYXkgZnVydGhlciBkaXN0cmlidXRlIiwicmVjaXBpZW50IG1heSBmdXJ0aGVyIGRpc3RyaWJ1dGUgdGhlIiwibWF5IGZ1cnRoZXIgZGlzdHJpYnV0ZSB0aGUgZGVyaXZlZCIsImZ1cnRoZXIgZGlzdHJpYnV0ZSB0aGUgZGVyaXZlZCB3b3JrIiwiZGlzdHJpYnV0ZSB0aGUgZGVyaXZlZCB3b3JrIHVuZGVyIiwidGhlIGRlcml2ZWQgd29yayB1bmRlciBlaXRoZXIiLCJkZXJpdmVkIHdvcmsgdW5kZXIgZWl0aGVyIHRoaXMiLCJ3b3JrIHVuZGVyIGVpdGhlciB0aGlzIGxpY2Vuc2UiLCJ1bmRlciBlaXRoZXIgdGhpcyBsaWNlbnNlIG9yIiwiZWl0aGVyIHRoaXMgbGljZW5zZSBvciB0aGUiLCJ0aGlzIGxpY2Vuc2Ugb3IgdGhlIGdwbCIsImxpY2Vuc2Ugb3IgdGhlIGdwbCA0Iiwib3IgdGhlIGdwbCA0IGNvbmRpdGlvbiIsInRoaXMgbGljZW5zZSBwcm92aWRlZCB0aGF0IHlvdXIiLCJsaWNlbnNlIHByb3ZpZGVkIHRoYXQgeW91ciBkaXN0cmlidXRpb24iLCJwcm92aWRlZCB0aGF0IHlvdXIgZGlzdHJpYnV0aW9uIGNvbXBsaWVzIiwidGhhdCB5b3VyIGRpc3RyaWJ1dGlvbiBjb21wbGllcyB3aXRoIiwieW91ciBkaXN0cmlidXRpb24gY29tcGxpZXMgd2l0aCBzdWNoIiwiZGlzdHJpYnV0aW9uIGNvbXBsaWVzIHdpdGggc3VjaCBvdGhlciIsImNvbXBsaWVzIHdpdGggc3VjaCBvdGhlciBsaWNlbnNlIiwid2l0aCBzdWNoIG90aGVyIGxpY2Vuc2UgNSIsInN1Y2ggb3RoZXIgbGljZW5zZSA1IGNvbmRpdGlvbnMiLCJvdGhlciBsaWNlbnNlIDUgY29uZGl0aW9ucyBmb3IiLCJvZiB0aGlzIHNlY3Rpb24gZWFjaCByZWNpcGllbnQiLCJ0aGlzIHNlY3Rpb24gZWFjaCByZWNpcGllbnQgb2YiLCJzZWN0aW9uIGVhY2ggcmVjaXBpZW50IG9mIHRoZSIsImVhY2ggcmVjaXBpZW50IG9mIHRoZSBjb3ZlcmVkIiwic2VjdGlvbnMgMiB0aHJvdWdoIDUgOCIsIjIgdGhyb3VnaCA1IDggY29weWxlZnQiLCJzZWN0aW9ucyAyIHRocm91Z2ggNSBubyIsIjIgdGhyb3VnaCA1IG5vIGxvbmdlciIsImNvZGUgcmVwb3NpdG9yeSBhdCBodHRwcyBnaXRvcmlvdXMiLCJyZXBvc2l0b3J5IGF0IGh0dHBzIGdpdG9yaW91cyBvcmciLCJhdCBodHRwcyBnaXRvcmlvdXMgb3JnIGNvcHlsZWZ0IiwiaHR0cHMgZ2l0b3Jpb3VzIG9yZyBjb3B5bGVmdCBuZXh0IiwiZ2l0b3Jpb3VzIG9yZyBjb3B5bGVmdCBuZXh0IGFzIiwib3JnIGNvcHlsZWZ0IG5leHQgYXMgb2YiLCJjb3B5bGVmdCBuZXh0IGFzIG9mIHRoZSIsIm5leHQgYXMgb2YgdGhlIHJlbGVhc2UiXX0seyJsaWNlbnNlVGV4dHMiOlsiY29weWxlZnQtbmV4dCAwLjMuMSAoXCJ0aGlzIExpY2Vuc2VcIilcblxuUmVsZWFzZSBkYXRlOiAyMDE2LTA0LTI5XG5cbiAgIDEuIExpY2Vuc2UgR3JhbnRzOyBObyBUcmFkZW1hcmsgTGljZW5zZVxuXG4gICBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIEkgZ3JhbnQgWW91OlxuXG4gICAgICBhKSBBIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcGVycGV0dWFsLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIGNvcHlyaWdodCBsaWNlbnNlLCB0byByZXByb2R1Y2UsIERpc3RyaWJ1dGUsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgcGVyZm9ybSBhbmQgcHVibGljbHkgZGlzcGxheSBNeSBXb3JrLlxuXG4gICAgICBiKSBBIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcGVycGV0dWFsLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIHBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBhbmQgaW1wb3J0IENvdmVyZWQgV29ya3MuXG5cbiAgIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIGluIE15IG5hbWUsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIGxvZ29zLlxuXG4gICAyLiBEaXN0cmlidXRpb246IEdlbmVyYWwgQ29uZGl0aW9uc1xuXG4gICBZb3UgbWF5IERpc3RyaWJ1dGUgQ292ZXJlZCBXb3JrcywgcHJvdmlkZWQgdGhhdCBZb3UgKGkpIGluZm9ybSByZWNpcGllbnRzIGhvdyB0aGV5IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgKGlpKSBzYXRpc2Z5IHRoZSBhcHBsaWNhYmxlIGNvbmRpdGlvbnMgb2Ygc2VjdGlvbnMgMyB0aHJvdWdoIDY7IGFuZCAoaWlpKSBwcmVzZXJ2ZSBhbGwgTGVnYWwgTm90aWNlcyBjb250YWluZWQgaW4gTXkgV29yayAodG8gdGhlIGV4dGVudCB0aGV5IHJlbWFpbiBwZXJ0aW5lbnQpLiBcIkxlZ2FsIE5vdGljZXNcIiBtZWFucyBjb3B5cmlnaHQgbm90aWNlcywgbGljZW5zZSBub3RpY2VzLCBsaWNlbnNlIHRleHRzLCBhbmQgYXV0aG9yIGF0dHJpYnV0aW9ucywgYnV0IGRvZXMgbm90IGluY2x1ZGUgbG9nb3MsIG90aGVyIGdyYXBoaWNhbCBpbWFnZXMsIHRyYWRlbWFya3Mgb3IgdHJhZGVtYXJrIGxlZ2VuZHMuXG5cbiAgIDMuIENvbmRpdGlvbnMgZm9yIERpc3RyaWJ1dGluZyBEZXJpdmVkIFdvcmtzOyBPdXRib3VuZCBHUEwgQ29tcGF0aWJpbGl0eVxuXG4gICBJZiBZb3UgRGlzdHJpYnV0ZSBhIERlcml2ZWQgV29yaywgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIERlcml2ZWQgV29yayBhcyBhIHdob2xlIHVuZGVyIHRoaXMgTGljZW5zZSwgd2l0aCBwcm9taW5lbnQgbm90aWNlIG9mIHN1Y2ggbGljZW5zaW5nLiBUaGlzIGNvbmRpdGlvbiBtYXkgbm90IGJlIGF2b2lkZWQgdGhyb3VnaCBzdWNoIG1lYW5zIGFzIHNlcGFyYXRlIERpc3RyaWJ1dGlvbiBvZiBwb3J0aW9ucyBvZiB0aGUgRGVyaXZlZCBXb3JrLlxuXG4gICBJZiB0aGUgRGVyaXZlZCBXb3JrIGluY2x1ZGVzIG1hdGVyaWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwsIFlvdSBtYXkgaW5zdGVhZCBsaWNlbnNlIHRoZSBEZXJpdmVkIFdvcmsgdW5kZXIgdGhlIEdQTC5cblxuICAgNC4gQ29uZGl0aW9uIEFnYWluc3QgRnVydGhlciBSZXN0cmljdGlvbnM7IEluYm91bmQgTGljZW5zZSBDb21wYXRpYmlsaXR5XG5cbiAgIFdoZW4gRGlzdHJpYnV0aW5nIGEgQ292ZXJlZCBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHJpZ2h0cyBpbiB0aGUgQ292ZXJlZCBXb3JrIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBUaGlzIGNvbmRpdGlvbiBpcyBub3QgZXhjdXNlZCBtZXJlbHkgYmVjYXVzZSBzdWNoIHJlc3RyaWN0aW9ucyByZXN1bHQgZnJvbSBZb3VyIGNvbXBsaWFuY2Ugd2l0aCBjb25kaXRpb25zIG9yIG9ibGlnYXRpb25zIGV4dHJpbnNpYyB0byB0aGlzIExpY2Vuc2UgKHN1Y2ggYXMgYSBjb3VydCBvcmRlciBvciBhbiBhZ3JlZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5KS5cblxuICAgSG93ZXZlciwgWW91IG1heSBEaXN0cmlidXRlIGEgQ292ZXJlZCBXb3JrIGluY29ycG9yYXRpbmcgbWF0ZXJpYWwgZ292ZXJuZWQgYnkgYSBsaWNlbnNlIHRoYXQgaXMgYm90aCBPU0ktQXBwcm92ZWQgYW5kIEZTRi1GcmVlIGFzIG9mIHRoZSByZWxlYXNlIGRhdGUgb2YgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IGNvbXBsaWFuY2Ugd2l0aCBzdWNoIG90aGVyIGxpY2Vuc2Ugd291bGQgbm90IGNvbmZsaWN0IHdpdGggYW55IGNvbmRpdGlvbnMgc3RhdGVkIGluIG90aGVyIHNlY3Rpb25zIG9mIHRoaXMgTGljZW5zZS5cblxuICAgNS4gQ29uZGl0aW9ucyBmb3IgRGlzdHJpYnV0aW5nIE9iamVjdCBDb2RlXG5cbiAgIFlvdSBtYXkgRGlzdHJpYnV0ZSBhbiBPYmplY3QgQ29kZSBmb3JtIG9mIGEgQ292ZXJlZCBXb3JrLCBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkgdGhlIE9iamVjdCBDb2RlIHdpdGggYSBVUkwgdGhyb3VnaCB3aGljaCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgaXMgbWFkZSBhdmFpbGFibGUsIGF0IG5vIGNoYXJnZSwgYnkgc29tZSBzdGFuZGFyZCBvciBjdXN0b21hcnkgbWVhbnMgb2YgcHJvdmlkaW5nIG5ldHdvcmsgYWNjZXNzIHRvIHNvdXJjZSBjb2RlLlxuXG4gICBJZiB5b3UgRGlzdHJpYnV0ZSB0aGUgT2JqZWN0IENvZGUgaW4gYSBwaHlzaWNhbCBwcm9kdWN0IG9yIHRhbmdpYmxlIHN0b3JhZ2UgbWVkaXVtIChcIlByb2R1Y3RcIiksIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBtdXN0IGJlIGF2YWlsYWJsZSB0aHJvdWdoIHN1Y2ggVVJMIGZvciB0d28geWVhcnMgZnJvbSB0aGUgZGF0ZSBvZiBZb3VyIG1vc3QgcmVjZW50IERpc3RyaWJ1dGlvbiBvZiB0aGUgT2JqZWN0IENvZGUgaW4gdGhlIFByb2R1Y3QuIEhvd2V2ZXIsIGlmIHRoZSBQcm9kdWN0IGl0c2VsZiBjb250YWlucyBvciBpcyBhY2NvbXBhbmllZCBieSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgKG1hZGUgYXZhaWxhYmxlIGluIGEgY3VzdG9tYXJpbHkgYWNjZXNzaWJsZSBtYW5uZXIpLCBZb3UgbmVlZCBub3QgYWxzbyBjb21wbHkgd2l0aCB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIHRoaXMgc2VjdGlvbi5cblxuICAgRWFjaCBkaXJlY3QgYW5kIGluZGlyZWN0IHJlY2lwaWVudCBvZiB0aGUgQ292ZXJlZCBXb3JrIGZyb20gWW91IGlzIGFuIGludGVuZGVkIHRoaXJkLXBhcnR5IGJlbmVmaWNpYXJ5IG9mIHRoaXMgTGljZW5zZSBzb2xlbHkgYXMgdG8gdGhpcyBzZWN0aW9uIDUsIHdpdGggdGhlIHJpZ2h0IHRvIGVuZm9yY2UgaXRzIHRlcm1zLlxuXG4gICA2LiBTeW1tZXRyaWNhbCBMaWNlbnNpbmcgQ29uZGl0aW9uIGZvciBVcHN0cmVhbSBDb250cmlidXRpb25zXG5cbiAgIElmIFlvdSBEaXN0cmlidXRlIGEgd29yayB0byBNZSBzcGVjaWZpY2FsbHkgZm9yIGluY2x1c2lvbiBpbiBvciBtb2RpZmljYXRpb24gb2YgYSBDb3ZlcmVkIFdvcmsgKGEgXCJQYXRjaFwiKSwgYW5kIG5vIGV4cGxpY2l0IGxpY2Vuc2luZyB0ZXJtcyBhcHBseSB0byB0aGUgUGF0Y2gsIFlvdSBsaWNlbnNlIHRoZSBQYXRjaCB1bmRlciB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YgWW91ciBjb3B5cmlnaHQgaW4gdGhlIFBhdGNoLiBUaGlzIGNvbmRpdGlvbiBkb2VzIG5vdCBuZWdhdGUgdGhlIG90aGVyIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBpZiBhcHBsaWNhYmxlIHRvIHRoZSBQYXRjaC5cblxuICAgNy4gTnVsbGlmaWNhdGlvbiBvZiBDb3B5bGVmdC9Qcm9wcmlldGFyeSBEdWFsIExpY2Vuc2luZ1xuXG4gICBJZiBJIG9mZmVyIHRvIGxpY2Vuc2UsIGZvciBhIGZlZSwgYSBDb3ZlcmVkIFdvcmsgdW5kZXIgdGVybXMgb3RoZXIgdGhhbiBhIGxpY2Vuc2UgdGhhdCBpcyBPU0ktQXBwcm92ZWQgb3IgRlNGLUZyZWUgYXMgb2YgdGhlIHJlbGVhc2UgZGF0ZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBudW1iZXJlZCB2ZXJzaW9uIG9mIGNvcHlsZWZ0LW5leHQgcmVsZWFzZWQgYnkgdGhlIENvcHlsZWZ0LU5leHQgUHJvamVjdCwgdGhlbiB0aGUgbGljZW5zZSBJIGdyYW50IFlvdSB1bmRlciBzZWN0aW9uIDEgaXMgbm8gbG9uZ2VyIHN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbnMgMyB0aHJvdWdoIDUuXG5cbiAgIDguIENvcHlsZWZ0IFN1bnNldFxuXG4gICBUaGUgY29uZGl0aW9ucyBpbiBzZWN0aW9ucyAzIHRocm91Z2ggNSBubyBsb25nZXIgYXBwbHkgb25jZSBmaWZ0ZWVuIHllYXJzIGhhdmUgZWxhcHNlZCBmcm9tIHRoZSBkYXRlIG9mIE15IGZpcnN0IERpc3RyaWJ1dGlvbiBvZiBNeSBXb3JrIHVuZGVyIHRoaXMgTGljZW5zZS5cblxuICAgOS4gUGFzcy1UaHJvdWdoXG5cbiAgIFdoZW4gWW91IERpc3RyaWJ1dGUgYSBDb3ZlcmVkIFdvcmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgdG8gTXkgV29yayBmcm9tIE1lLCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIDEwLiBUZXJtaW5hdGlvblxuXG4gICBZb3VyIGxpY2Vuc2UgZ3JhbnRzIHVuZGVyIHNlY3Rpb24gMSBhcmUgYXV0b21hdGljYWxseSB0ZXJtaW5hdGVkIGlmIFlvdVxuXG4gICAgICBhKSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdW5sZXNzIFlvdSBjdXJlIHN1Y2ggbm9uY29tcGxpYW5jZSB3aXRoaW4gdGhpcnR5IGRheXMgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2YgaXQsIG9yXG5cbiAgICAgIGIpIGluaXRpYXRlIGEgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uIGNsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucywgY291bnRlcmNsYWltcywgYW5kIGNyb3NzLWNsYWltcykgYWxsZWdpbmcgdGhhdCBhbnkgcGFydCBvZiBNeSBXb3JrIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQuXG5cbiAgIFRlcm1pbmF0aW9uIG9mIFlvdXIgbGljZW5zZSBncmFudHMgZXh0ZW5kcyB0byBhbGwgY29waWVzIG9mIENvdmVyZWQgV29ya3MgWW91IHN1YnNlcXVlbnRseSBvYnRhaW4uIFRlcm1pbmF0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUgcmlnaHRzIG9mIHRob3NlIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSBZb3Ugc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuXG5cbiAgIFRvIHRoZSBleHRlbnQgcGVybWlzc2lvbiB0byBtYWtlIGNvcGllcyBvZiBhIENvdmVyZWQgV29yayBpcyBuZWNlc3NhcnkgbWVyZWx5IGZvciBydW5uaW5nIGl0LCBzdWNoIHBlcm1pc3Npb24gaXMgbm90IHRlcm1pbmFibGUuXG5cbiAgIDExLiBMYXRlciBMaWNlbnNlIFZlcnNpb25zXG5cbiAgIFRoZSBDb3B5bGVmdC1OZXh0IFByb2plY3QgbWF5IHJlbGVhc2UgbmV3IHZlcnNpb25zIG9mIGNvcHlsZWZ0LW5leHQsIGRlc2lnbmF0ZWQgYnkgYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlciAoXCJMYXRlciBWZXJzaW9uc1wiKS4gVW5sZXNzIEkgZXhwbGljaXRseSByZW1vdmUgdGhlIG9wdGlvbiBvZiBEaXN0cmlidXRpbmcgQ292ZXJlZCBXb3JrcyB1bmRlciBMYXRlciBWZXJzaW9ucywgWW91IG1heSBEaXN0cmlidXRlIENvdmVyZWQgV29ya3MgdW5kZXIgYW55IExhdGVyIFZlcnNpb24uXG5cbiAgIDEyLiBObyBXYXJyYW50eVxuXG4gICBNeSBXb3JrIGlzIHByb3ZpZGVkIFwiYXMtaXNcIiwgd2l0aG91dCB3YXJyYW50eS4gWW91IGJlYXIgdGhlIHJpc2sgb2YgdXNpbmcgaXQuIFRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBlYWNoIERpc3RyaWJ1dG9yIG9mIE15IFdvcmsgZXhjbHVkZXMgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiB0aXRsZSwgbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBhbmQgbm9uLWluZnJpbmdlbWVudC5cblxuICAgMTMuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5XG5cbiAgIFRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpbiBubyBldmVudCB3aWxsIGFueSBEaXN0cmlidXRvciBvZiBNeSBXb3JrIGJlIGxpYWJsZSB0byBZb3UgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIHdoZXRoZXIgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCB3aGV0aGVyIGFyaXNpbmcgdW5kZXIgY29udHJhY3QsIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgb3Igb3RoZXJ3aXNlLCBldmVuIHdoZXJlIHRoZSBEaXN0cmlidXRvciBrbmV3IG9yIHNob3VsZCBoYXZlIGtub3duIGFib3V0IHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuXG5cbiAgIDE0LiBTZXZlcmFiaWxpdHlcblxuICAgVGhlIGludmFsaWRpdHkgb3IgdW5lbmZvcmNlYWJpbGl0eSBvZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBkb2VzIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlLiBTdWNoIHByb3Zpc2lvbiBpcyB0byBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgdmFsaWQgYW5kIGVuZm9yY2VhYmxlLlxuXG4gICAxNS4gRGVmaW5pdGlvbnNcblxuICAgXCJDb3B5bGVmdC1OZXh0IFByb2plY3RcIiBtZWFucyB0aGUgcHJvamVjdCB0aGF0IG1haW50YWlucyB0aGUgc291cmNlIGNvZGUgcmVwb3NpdG9yeSBhdCBcdTAwM2NodHRwczovL2dpdGh1Yi5jb20vY29weWxlZnQtbmV4dC9jb3B5bGVmdC1uZXh0LmdpdC9cdTAwM2UgYXMgb2YgdGhlIHJlbGVhc2UgZGF0ZSBvZiB0aGlzIExpY2Vuc2UuXG5cbiAgIFwiQ29ycmVzcG9uZGluZyBTb3VyY2VcIiBvZiBhIENvdmVyZWQgV29yayBpbiBPYmplY3QgQ29kZSBmb3JtIG1lYW5zIChpKSB0aGUgU291cmNlIENvZGUgZm9ybSBvZiB0aGUgQ292ZXJlZCBXb3JrOyAoaWkpIGFsbCBzY3JpcHRzLCBpbnN0cnVjdGlvbnMgYW5kIHNpbWlsYXIgaW5mb3JtYXRpb24gdGhhdCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgZm9yIGEgc2tpbGxlZCBkZXZlbG9wZXIgdG8gZ2VuZXJhdGUgc3VjaCBPYmplY3QgQ29kZSBmcm9tIHRoZSBTb3VyY2UgQ29kZSBwcm92aWRlZCB1bmRlciAoaSk7IGFuZCAoaWlpKSBhIGxpc3QgY2xlYXJseSBpZGVudGlmeWluZyBhbGwgU2VwYXJhdGUgV29ya3MgKG90aGVyIHRoYW4gdGhvc2UgcHJvdmlkZWQgaW4gY29tcGxpYW5jZSB3aXRoIChpaSkpIHRoYXQgd2VyZSBzcGVjaWZpY2FsbHkgdXNlZCBpbiBidWlsZGluZyBhbmQgKGlmIGFwcGxpY2FibGUpIGluc3RhbGxpbmcgdGhlIENvdmVyZWQgV29yayAoZm9yIGV4YW1wbGUsIGEgc3BlY2lmaWVkIHByb3ByaWV0YXJ5IGNvbXBpbGVyIGluY2x1ZGluZyBpdHMgdmVyc2lvbiBudW1iZXIpLiBDb3JyZXNwb25kaW5nIFNvdXJjZSBtdXN0IGJlIG1hY2hpbmUtcmVhZGFibGUuXG5cbiAgIFwiQ292ZXJlZCBXb3JrXCIgbWVhbnMgTXkgV29yayBvciBhIERlcml2ZWQgV29yay5cblxuICAgXCJEZXJpdmVkIFdvcmtcIiBtZWFucyBhIHdvcmsgb2YgYXV0aG9yc2hpcCB0aGF0IGNvcGllcyBmcm9tLCBtb2RpZmllcywgYWRhcHRzLCBpcyBiYXNlZCBvbiwgaXMgYSBkZXJpdmF0aXZlIHdvcmsgb2YsIHRyYW5zZm9ybXMsIHRyYW5zbGF0ZXMgb3IgY29udGFpbnMgYWxsIG9yIHBhcnQgb2YgTXkgV29yaywgc3VjaCB0aGF0IGNvcHlyaWdodCBwZXJtaXNzaW9uIGlzIHJlcXVpcmVkLiBUaGUgZm9sbG93aW5nIGFyZSBub3QgRGVyaXZlZCBXb3JrczogKGkpIE1lcmUgQWdncmVnYXRpb247IChpaSkgYSBtZXJlIHJlcHJvZHVjdGlvbiBvZiBNeSBXb3JrOyBhbmQgKGlpaSkgaWYgTXkgV29yayBmYWlscyB0byBleHBsaWNpdGx5IHN0YXRlIGFuIGV4cGVjdGF0aW9uIG90aGVyd2lzZSwgYSB3b3JrIHRoYXQgbWVyZWx5IG1ha2VzIHJlZmVyZW5jZSB0byBNeSBXb3JrLlxuXG4gICBcIkRpc3RyaWJ1dGVcIiBtZWFucyB0byBkaXN0cmlidXRlLCB0cmFuc2ZlciBvciBtYWtlIGEgY29weSBhdmFpbGFibGUgdG8gc29tZW9uZSBlbHNlLCBzdWNoIHRoYXQgY29weXJpZ2h0IHBlcm1pc3Npb24gaXMgcmVxdWlyZWQuXG5cbiAgIFwiRGlzdHJpYnV0b3JcIiBtZWFucyBNZSBhbmQgYW55b25lIGVsc2Ugd2hvIERpc3RyaWJ1dGVzIGEgQ292ZXJlZCBXb3JrLlxuXG4gICBcIkZTRi1GcmVlXCIgbWVhbnMgY2xhc3NpZmllZCBhcyAnZnJlZScgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi5cblxuICAgXCJHUExcIiBtZWFucyBhIHZlcnNpb24gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuXG5cbiAgIFwiSVwiL1wiTWVcIi9cIk15XCIgcmVmZXJzIHRvIHRoZSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSB0aGF0IHBsYWNlcyBNeSBXb3JrIHVuZGVyIHRoaXMgTGljZW5zZS4gXCJZb3VcIi9cIllvdXJcIiByZWZlcnMgdG8gdGhlIGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIGluIE15IFdvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLiBBIGxlZ2FsIGVudGl0eSBpbmNsdWRlcyBlYWNoIGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHN1Y2ggbGVnYWwgZW50aXR5LiBcIkNvbnRyb2xcIiBtZWFucyAoYSkgdGhlIHBvd2VyIHRvIGRpcmVjdCB0aGUgYWN0aW9ucyBvZiBzdWNoIGxlZ2FsIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGxlZ2FsIGVudGl0eS5cblxuICAgXCJMaWNlbnNlZCBQYXRlbnRzXCIgbWVhbnMgYWxsIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSByb3lhbHR5LWZyZWUgYnkgTWUsIG5vdyBvciBpbiB0aGUgZnV0dXJlLCB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBNeSBXb3JrLCBhbmQgZXhjbHVkZXMgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYSBjb25zZXF1ZW5jZSBvZiBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiBNeSBXb3JrLlxuXG4gICBcIk1lcmUgQWdncmVnYXRpb25cIiBtZWFucyBhbiBhZ2dyZWdhdGlvbiBvZiBhIENvdmVyZWQgV29yayB3aXRoIGEgU2VwYXJhdGUgV29yay5cblxuICAgXCJNeSBXb3JrXCIgbWVhbnMgdGhlIHBhcnRpY3VsYXIgd29yayBvZiBhdXRob3JzaGlwIEkgbGljZW5zZSB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLlxuXG4gICBcIk9iamVjdCBDb2RlXCIgbWVhbnMgYW55IGZvcm0gb2YgYSB3b3JrIHRoYXQgaXMgbm90IFNvdXJjZSBDb2RlLlxuXG4gICBcIk9TSS1BcHByb3ZlZFwiIG1lYW5zIGFwcHJvdmVkIGFzICdPcGVuIFNvdXJjZScgYnkgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUuXG5cbiAgIFwiU2VwYXJhdGUgV29ya1wiIG1lYW5zIGEgd29yayB0aGF0IGlzIHNlcGFyYXRlIGZyb20gYW5kIGluZGVwZW5kZW50IG9mIGEgcGFydGljdWxhciBDb3ZlcmVkIFdvcmsgYW5kIGlzIG5vdCBieSBpdHMgbmF0dXJlIGFuIGV4dGVuc2lvbiBvciBlbmhhbmNlbWVudCBvZiB0aGUgQ292ZXJlZCBXb3JrLCBhbmQvb3IgYSBydW50aW1lIGxpYnJhcnksIHN0YW5kYXJkIGxpYnJhcnkgb3Igc2ltaWxhciBjb21wb25lbnQgdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRlIGFuIE9iamVjdCBDb2RlIGZvcm0gb2YgYSBDb3ZlcmVkIFdvcmsuXG5cbiAgIFwiU291cmNlIENvZGVcIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgYSB3b3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4iXSwibGljZW5zZUlkcyI6WyJjb3B5bGVmdC1uZXh0LTAuMy4xIl0sImtleXdvcmRzIjpbIjAgMyAxIiwiMyAxIHRoaXMiLCJyZWxlYXNlIGRhdGUgMjAxNiIsImRhdGUgMjAxNiAwNCIsIjIwMTYgMDQgMjkiLCIwNCAyOSAxIiwiMjkgMSBsaWNlbnNlIiwiZGVyaXZlZCB3b3JrIGluY2x1ZGVzIiwid29yayBpbmNsdWRlcyBtYXRlcmlhbCIsImluY2x1ZGVzIG1hdGVyaWFsIGxpY2Vuc2VkIiwidGhlIGdwbCB5b3UiLCJ5b3UgbWF5IGluc3RlYWQiLCJtYXkgaW5zdGVhZCBsaWNlbnNlIiwiaW5zdGVhZCBsaWNlbnNlIHRoZSIsInByb3ZpZGVkIHRoYXQgY29tcGxpYW5jZSIsInRoYXQgY29tcGxpYW5jZSB3aXRoIiwiY29tcGxpYW5jZSB3aXRoIHN1Y2giLCJvdGhlciBsaWNlbnNlIHdvdWxkIiwid291bGQgbm90IGNvbmZsaWN0IiwiY29uZmxpY3Qgd2l0aCBhbnkiLCJ3aXRoIGFueSBjb25kaXRpb25zIiwiYW55IGNvbmRpdGlvbnMgc3RhdGVkIiwic3RhdGVkIGluIG90aGVyIiwiaW4gb3RoZXIgc2VjdGlvbnMiLCJvdGhlciBzZWN0aW9ucyBvZiIsInNlY3Rpb24gZWFjaCBkaXJlY3QiLCJlYWNoIGRpcmVjdCBhbmQiLCJkaXJlY3QgYW5kIGluZGlyZWN0IiwiYW5kIGluZGlyZWN0IHJlY2lwaWVudCIsImluZGlyZWN0IHJlY2lwaWVudCBvZiIsImF0IGh0dHBzIGdpdGh1YiIsImh0dHBzIGdpdGh1YiBjb20iLCJnaXRodWIgY29tIGNvcHlsZWZ0IiwiY29tIGNvcHlsZWZ0IG5leHQiLCJjb3B5bGVmdCBuZXh0IGNvcHlsZWZ0IiwibmV4dCBjb3B5bGVmdCBuZXh0IiwiY29weWxlZnQgbmV4dCBnaXQiLCJuZXh0IGdpdCBhcyIsImdpdCBhcyBvZiIsIm5leHQgMCAzIDEiLCIwIDMgMSB0aGlzIiwiMyAxIHRoaXMgbGljZW5zZSIsIjEgdGhpcyBsaWNlbnNlIHJlbGVhc2UiLCJsaWNlbnNlIHJlbGVhc2UgZGF0ZSAyMDE2IiwicmVsZWFzZSBkYXRlIDIwMTYgMDQiLCJkYXRlIDIwMTYgMDQgMjkiLCIyMDE2IDA0IDI5IDEiLCIwNCAyOSAxIGxpY2Vuc2UiLCIyOSAxIGxpY2Vuc2UgZ3JhbnRzIiwidGhlIGRlcml2ZWQgd29yayBpZiIsImRlcml2ZWQgd29yayBpZiB0aGUiLCJ3b3JrIGlmIHRoZSBkZXJpdmVkIiwidGhlIGRlcml2ZWQgd29yayBpbmNsdWRlcyIsImRlcml2ZWQgd29yayBpbmNsdWRlcyBtYXRlcmlhbCIsIndvcmsgaW5jbHVkZXMgbWF0ZXJpYWwgbGljZW5zZWQiLCJpbmNsdWRlcyBtYXRlcmlhbCBsaWNlbnNlZCB1bmRlciIsIm1hdGVyaWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSIsImxpY2Vuc2VkIHVuZGVyIHRoZSBncGwiLCJ1bmRlciB0aGUgZ3BsIHlvdSIsInRoZSBncGwgeW91IG1heSIsImdwbCB5b3UgbWF5IGluc3RlYWQiLCJ5b3UgbWF5IGluc3RlYWQgbGljZW5zZSIsIm1heSBpbnN0ZWFkIGxpY2Vuc2UgdGhlIiwiaW5zdGVhZCBsaWNlbnNlIHRoZSBkZXJpdmVkIiwidW5kZXIgdGhlIGdwbCA0IiwibGljZW5zZSBwcm92aWRlZCB0aGF0IGNvbXBsaWFuY2UiLCJwcm92aWRlZCB0aGF0IGNvbXBsaWFuY2Ugd2l0aCIsInRoYXQgY29tcGxpYW5jZSB3aXRoIHN1Y2giLCJjb21wbGlhbmNlIHdpdGggc3VjaCBvdGhlciIsInN1Y2ggb3RoZXIgbGljZW5zZSB3b3VsZCIsIm90aGVyIGxpY2Vuc2Ugd291bGQgbm90IiwibGljZW5zZSB3b3VsZCBub3QgY29uZmxpY3QiLCJ3b3VsZCBub3QgY29uZmxpY3Qgd2l0aCIsIm5vdCBjb25mbGljdCB3aXRoIGFueSIsImNvbmZsaWN0IHdpdGggYW55IGNvbmRpdGlvbnMiLCJ3aXRoIGFueSBjb25kaXRpb25zIHN0YXRlZCIsImFueSBjb25kaXRpb25zIHN0YXRlZCBpbiIsImNvbmRpdGlvbnMgc3RhdGVkIGluIG90aGVyIiwic3RhdGVkIGluIG90aGVyIHNlY3Rpb25zIiwiaW4gb3RoZXIgc2VjdGlvbnMgb2YiLCJvdGhlciBzZWN0aW9ucyBvZiB0aGlzIiwidGhpcyBsaWNlbnNlIDUgY29uZGl0aW9ucyIsInRoaXMgc2VjdGlvbiBlYWNoIGRpcmVjdCIsInNlY3Rpb24gZWFjaCBkaXJlY3QgYW5kIiwiZWFjaCBkaXJlY3QgYW5kIGluZGlyZWN0IiwiZGlyZWN0IGFuZCBpbmRpcmVjdCByZWNpcGllbnQiLCJhbmQgaW5kaXJlY3QgcmVjaXBpZW50IG9mIiwiaW5kaXJlY3QgcmVjaXBpZW50IG9mIHRoZSIsIjMgdGhyb3VnaCA1IDgiLCIzIHRocm91Z2ggNSBubyIsInJlcG9zaXRvcnkgYXQgaHR0cHMgZ2l0aHViIiwiYXQgaHR0cHMgZ2l0aHViIGNvbSIsImh0dHBzIGdpdGh1YiBjb20gY29weWxlZnQiLCJnaXRodWIgY29tIGNvcHlsZWZ0IG5leHQiLCJjb20gY29weWxlZnQgbmV4dCBjb3B5bGVmdCIsImNvcHlsZWZ0IG5leHQgY29weWxlZnQgbmV4dCIsIm5leHQgY29weWxlZnQgbmV4dCBnaXQiLCJjb3B5bGVmdCBuZXh0IGdpdCBhcyIsIm5leHQgZ2l0IGFzIG9mIiwiZ2l0IGFzIG9mIHRoZSIsImNvcHlsZWZ0IG5leHQgMCAzIDEiLCJuZXh0IDAgMyAxIHRoaXMiLCIwIDMgMSB0aGlzIGxpY2Vuc2UiLCIzIDEgdGhpcyBsaWNlbnNlIHJlbGVhc2UiLCIxIHRoaXMgbGljZW5zZSByZWxlYXNlIGRhdGUiLCJ0aGlzIGxpY2Vuc2UgcmVsZWFzZSBkYXRlIDIwMTYiLCJsaWNlbnNlIHJlbGVhc2UgZGF0ZSAyMDE2IDA0IiwicmVsZWFzZSBkYXRlIDIwMTYgMDQgMjkiLCJkYXRlIDIwMTYgMDQgMjkgMSIsIjIwMTYgMDQgMjkgMSBsaWNlbnNlIiwiMDQgMjkgMSBsaWNlbnNlIGdyYW50cyIsIjI5IDEgbGljZW5zZSBncmFudHMgbm8iLCJvZiB0aGUgZGVyaXZlZCB3b3JrIGlmIiwidGhlIGRlcml2ZWQgd29yayBpZiB0aGUiLCJkZXJpdmVkIHdvcmsgaWYgdGhlIGRlcml2ZWQiLCJ3b3JrIGlmIHRoZSBkZXJpdmVkIHdvcmsiLCJpZiB0aGUgZGVyaXZlZCB3b3JrIGluY2x1ZGVzIiwidGhlIGRlcml2ZWQgd29yayBpbmNsdWRlcyBtYXRlcmlhbCIsImRlcml2ZWQgd29yayBpbmNsdWRlcyBtYXRlcmlhbCBsaWNlbnNlZCIsIndvcmsgaW5jbHVkZXMgbWF0ZXJpYWwgbGljZW5zZWQgdW5kZXIiLCJpbmNsdWRlcyBtYXRlcmlhbCBsaWNlbnNlZCB1bmRlciB0aGUiLCJtYXRlcmlhbCBsaWNlbnNlZCB1bmRlciB0aGUgZ3BsIiwibGljZW5zZWQgdW5kZXIgdGhlIGdwbCB5b3UiLCJ1bmRlciB0aGUgZ3BsIHlvdSBtYXkiLCJ0aGUgZ3BsIHlvdSBtYXkgaW5zdGVhZCIsImdwbCB5b3UgbWF5IGluc3RlYWQgbGljZW5zZSIsInlvdSBtYXkgaW5zdGVhZCBsaWNlbnNlIHRoZSIsIm1heSBpbnN0ZWFkIGxpY2Vuc2UgdGhlIGRlcml2ZWQiLCJpbnN0ZWFkIGxpY2Vuc2UgdGhlIGRlcml2ZWQgd29yayIsIndvcmsgdW5kZXIgdGhlIGdwbCA0IiwidW5kZXIgdGhlIGdwbCA0IGNvbmRpdGlvbiIsInRoaXMgbGljZW5zZSBwcm92aWRlZCB0aGF0IGNvbXBsaWFuY2UiLCJsaWNlbnNlIHByb3ZpZGVkIHRoYXQgY29tcGxpYW5jZSB3aXRoIiwicHJvdmlkZWQgdGhhdCBjb21wbGlhbmNlIHdpdGggc3VjaCIsInRoYXQgY29tcGxpYW5jZSB3aXRoIHN1Y2ggb3RoZXIiLCJjb21wbGlhbmNlIHdpdGggc3VjaCBvdGhlciBsaWNlbnNlIiwid2l0aCBzdWNoIG90aGVyIGxpY2Vuc2Ugd291bGQiLCJzdWNoIG90aGVyIGxpY2Vuc2Ugd291bGQgbm90Iiwib3RoZXIgbGljZW5zZSB3b3VsZCBub3QgY29uZmxpY3QiLCJsaWNlbnNlIHdvdWxkIG5vdCBjb25mbGljdCB3aXRoIiwid291bGQgbm90IGNvbmZsaWN0IHdpdGggYW55Iiwibm90IGNvbmZsaWN0IHdpdGggYW55IGNvbmRpdGlvbnMiLCJjb25mbGljdCB3aXRoIGFueSBjb25kaXRpb25zIHN0YXRlZCIsIndpdGggYW55IGNvbmRpdGlvbnMgc3RhdGVkIGluIiwiYW55IGNvbmRpdGlvbnMgc3RhdGVkIGluIG90aGVyIiwiY29uZGl0aW9ucyBzdGF0ZWQgaW4gb3RoZXIgc2VjdGlvbnMiLCJzdGF0ZWQgaW4gb3RoZXIgc2VjdGlvbnMgb2YiLCJpbiBvdGhlciBzZWN0aW9ucyBvZiB0aGlzIiwib3RoZXIgc2VjdGlvbnMgb2YgdGhpcyBsaWNlbnNlIiwic2VjdGlvbnMgb2YgdGhpcyBsaWNlbnNlIDUiLCJvZiB0aGlzIGxpY2Vuc2UgNSBjb25kaXRpb25zIiwidGhpcyBsaWNlbnNlIDUgY29uZGl0aW9ucyBmb3IiLCJvZiB0aGlzIHNlY3Rpb24gZWFjaCBkaXJlY3QiLCJ0aGlzIHNlY3Rpb24gZWFjaCBkaXJlY3QgYW5kIiwic2VjdGlvbiBlYWNoIGRpcmVjdCBhbmQgaW5kaXJlY3QiLCJlYWNoIGRpcmVjdCBhbmQgaW5kaXJlY3QgcmVjaXBpZW50IiwiZGlyZWN0IGFuZCBpbmRpcmVjdCByZWNpcGllbnQgb2YiLCJhbmQgaW5kaXJlY3QgcmVjaXBpZW50IG9mIHRoZSIsImluZGlyZWN0IHJlY2lwaWVudCBvZiB0aGUgY292ZXJlZCIsInNlY3Rpb25zIDMgdGhyb3VnaCA1IDgiLCIzIHRocm91Z2ggNSA4IGNvcHlsZWZ0Iiwic2VjdGlvbnMgMyB0aHJvdWdoIDUgbm8iLCIzIHRocm91Z2ggNSBubyBsb25nZXIiLCJjb2RlIHJlcG9zaXRvcnkgYXQgaHR0cHMgZ2l0aHViIiwicmVwb3NpdG9yeSBhdCBodHRwcyBnaXRodWIgY29tIiwiYXQgaHR0cHMgZ2l0aHViIGNvbSBjb3B5bGVmdCIsImh0dHBzIGdpdGh1YiBjb20gY29weWxlZnQgbmV4dCIsImdpdGh1YiBjb20gY29weWxlZnQgbmV4dCBjb3B5bGVmdCIsImNvbSBjb3B5bGVmdCBuZXh0IGNvcHlsZWZ0IG5leHQiLCJjb3B5bGVmdCBuZXh0IGNvcHlsZWZ0IG5leHQgZ2l0IiwibmV4dCBjb3B5bGVmdCBuZXh0IGdpdCBhcyIsImNvcHlsZWZ0IG5leHQgZ2l0IGFzIG9mIiwibmV4dCBnaXQgYXMgb2YgdGhlIiwiZ2l0IGFzIG9mIHRoZSByZWxlYXNlIl19LHsibGljZW5zZVRleHRzIjpbIkNPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0UgQ29weXJpZ2h0IChjKSAxOTk2IC0gMjAxNSwgRGFuaWVsIFN0ZW5iZXJnLCBcdTAwM2NkYW5pZWxAaGF4eC5zZVx1MDAzZS5cblxuQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5FeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBhIGNvcHlyaWdodCBob2xkZXIgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyLiJdLCJsaWNlbnNlSWRzIjpbImN1cmwiXSwia2V5d29yZHMiOlsiYyAxOTk2IDIwMTUiLCIxOTk2IDIwMTUgZGFuaWVsIiwiMjAxNSBkYW5pZWwgc3RlbmJlcmciLCJkYW5pZWwgc3RlbmJlcmcgZGFuaWVsIiwic3RlbmJlcmcgZGFuaWVsIGhheHgiLCJkYW5pZWwgaGF4eCBzZSIsImhheHggc2UgYWxsIiwic2UgYWxsIHJpZ2h0cyIsIm5vdGljZSBjb3B5cmlnaHQgYyAxOTk2IiwiY29weXJpZ2h0IGMgMTk5NiAyMDE1IiwiYyAxOTk2IDIwMTUgZGFuaWVsIiwiMTk5NiAyMDE1IGRhbmllbCBzdGVuYmVyZyIsIjIwMTUgZGFuaWVsIHN0ZW5iZXJnIGRhbmllbCIsImRhbmllbCBzdGVuYmVyZyBkYW5pZWwgaGF4eCIsInN0ZW5iZXJnIGRhbmllbCBoYXh4IHNlIiwiZGFuaWVsIGhheHggc2UgYWxsIiwiaGF4eCBzZSBhbGwgcmlnaHRzIiwic2UgYWxsIHJpZ2h0cyByZXNlcnZlZCIsInBlcm1pc3Npb24gbm90aWNlIGNvcHlyaWdodCBjIDE5OTYiLCJub3RpY2UgY29weXJpZ2h0IGMgMTk5NiAyMDE1IiwiY29weXJpZ2h0IGMgMTk5NiAyMDE1IGRhbmllbCIsImMgMTk5NiAyMDE1IGRhbmllbCBzdGVuYmVyZyIsIjE5OTYgMjAxNSBkYW5pZWwgc3RlbmJlcmcgZGFuaWVsIiwiMjAxNSBkYW5pZWwgc3RlbmJlcmcgZGFuaWVsIGhheHgiLCJkYW5pZWwgc3RlbmJlcmcgZGFuaWVsIGhheHggc2UiLCJzdGVuYmVyZyBkYW5pZWwgaGF4eCBzZSBhbGwiLCJkYW5pZWwgaGF4eCBzZSBhbGwgcmlnaHRzIiwiaGF4eCBzZSBhbGwgcmlnaHRzIHJlc2VydmVkIiwic2UgYWxsIHJpZ2h0cyByZXNlcnZlZCBwZXJtaXNzaW9uIl19LHsibGljZW5zZVRleHRzIjpbIlxuXG4gICAxLiB5b3UgY2FuIGRvIHdoYXQgeW91IHdhbnQgd2l0aCBpdFxuXG4gICAyLiBJIHJlZnVzZSBhbnkgcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBjb25zZXF1ZW5jZXMiXSwibGljZW5zZUlkcyI6WyJkaWZmbWFyayJdLCJrZXl3b3JkcyI6WyIxIHlvdSBjYW4iLCJjYW4gZG8gd2hhdCIsImRvIHdoYXQgeW91Iiwid2FudCB3aXRoIGl0Iiwid2l0aCBpdCAyIiwiaXQgMiBpIiwiMiBpIHJlZnVzZSIsImkgcmVmdXNlIGFueSIsInJlZnVzZSBhbnkgcmVzcG9uc2liaWxpdHkiLCJhbnkgcmVzcG9uc2liaWxpdHkgZm9yIiwiMSB5b3UgY2FuIGRvIiwieW91IGNhbiBkbyB3aGF0IiwiY2FuIGRvIHdoYXQgeW91IiwiZG8gd2hhdCB5b3Ugd2FudCIsIndoYXQgeW91IHdhbnQgd2l0aCIsInlvdSB3YW50IHdpdGggaXQiLCJ3YW50IHdpdGggaXQgMiIsIndpdGggaXQgMiBpIiwiaXQgMiBpIHJlZnVzZSIsIjIgaSByZWZ1c2UgYW55IiwiaSByZWZ1c2UgYW55IHJlc3BvbnNpYmlsaXR5IiwicmVmdXNlIGFueSByZXNwb25zaWJpbGl0eSBmb3IiLCJhbnkgcmVzcG9uc2liaWxpdHkgZm9yIHRoZSIsIjEgeW91IGNhbiBkbyB3aGF0IiwieW91IGNhbiBkbyB3aGF0IHlvdSIsImNhbiBkbyB3aGF0IHlvdSB3YW50IiwiZG8gd2hhdCB5b3Ugd2FudCB3aXRoIiwid2hhdCB5b3Ugd2FudCB3aXRoIGl0IiwieW91IHdhbnQgd2l0aCBpdCAyIiwid2FudCB3aXRoIGl0IDIgaSIsIndpdGggaXQgMiBpIHJlZnVzZSIsIml0IDIgaSByZWZ1c2UgYW55IiwiMiBpIHJlZnVzZSBhbnkgcmVzcG9uc2liaWxpdHkiLCJpIHJlZnVzZSBhbnkgcmVzcG9uc2liaWxpdHkgZm9yIiwicmVmdXNlIGFueSByZXNwb25zaWJpbGl0eSBmb3IgdGhlIiwiYW55IHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgY29uc2VxdWVuY2VzIl19LHsibGljZW5zZVRleHRzIjpbIkEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkLCBidXQgaXQgc2hvdWxkIGJlIGRpc3RyaWJ1dGVkIHdpdGggYSAqZGlmZmVyZW50KiBuYW1lLiBDaGFuZ2VkIGZpbGVzIG11c3QgYmUgZGlzdHJpYnV0ZWQgKnRvZ2V0aGVyIHdpdGggYSBjb21wbGV0ZSBhbmQgdW5jaGFuZ2VkKiBkaXN0cmlidXRpb24gb2YgdGhlc2UgZmlsZXMuIl0sImxpY2Vuc2VJZHMiOlsiZHZpcGRmbSJdLCJrZXl3b3JkcyI6WyJiZSBkaXN0cmlidXRlZCBidXQiLCJkaXN0cmlidXRlZCBidXQgaXQiLCJidXQgaXQgc2hvdWxkIiwiaXQgc2hvdWxkIGJlIiwic2hvdWxkIGJlIGRpc3RyaWJ1dGVkIiwiYmUgZGlzdHJpYnV0ZWQgd2l0aCIsImRpc3RyaWJ1dGVkIHdpdGggYSIsIndpdGggYSBkaWZmZXJlbnQiLCJhIGRpZmZlcmVudCBuYW1lIiwiZGlmZmVyZW50IG5hbWUgY2hhbmdlZCIsIm5hbWUgY2hhbmdlZCBmaWxlcyIsImJlIGRpc3RyaWJ1dGVkIHRvZ2V0aGVyIiwiZGlzdHJpYnV0ZWQgdG9nZXRoZXIgd2l0aCIsImNvbXBsZXRlIGFuZCB1bmNoYW5nZWQiLCJhbmQgdW5jaGFuZ2VkIGRpc3RyaWJ1dGlvbiIsInVuY2hhbmdlZCBkaXN0cmlidXRpb24gb2YiLCJkaXN0cmlidXRpb24gb2YgdGhlc2UiLCJmaWxlIG1heSBiZSBkaXN0cmlidXRlZCIsIm1heSBiZSBkaXN0cmlidXRlZCBidXQiLCJiZSBkaXN0cmlidXRlZCBidXQgaXQiLCJkaXN0cmlidXRlZCBidXQgaXQgc2hvdWxkIiwiYnV0IGl0IHNob3VsZCBiZSIsIml0IHNob3VsZCBiZSBkaXN0cmlidXRlZCIsInNob3VsZCBiZSBkaXN0cmlidXRlZCB3aXRoIiwiYmUgZGlzdHJpYnV0ZWQgd2l0aCBhIiwiZGlzdHJpYnV0ZWQgd2l0aCBhIGRpZmZlcmVudCIsIndpdGggYSBkaWZmZXJlbnQgbmFtZSIsImEgZGlmZmVyZW50IG5hbWUgY2hhbmdlZCIsImRpZmZlcmVudCBuYW1lIGNoYW5nZWQgZmlsZXMiLCJuYW1lIGNoYW5nZWQgZmlsZXMgbXVzdCIsIm11c3QgYmUgZGlzdHJpYnV0ZWQgdG9nZXRoZXIiLCJiZSBkaXN0cmlidXRlZCB0b2dldGhlciB3aXRoIiwiZGlzdHJpYnV0ZWQgdG9nZXRoZXIgd2l0aCBhIiwidG9nZXRoZXIgd2l0aCBhIGNvbXBsZXRlIiwid2l0aCBhIGNvbXBsZXRlIGFuZCIsImEgY29tcGxldGUgYW5kIHVuY2hhbmdlZCIsImNvbXBsZXRlIGFuZCB1bmNoYW5nZWQgZGlzdHJpYnV0aW9uIiwiYW5kIHVuY2hhbmdlZCBkaXN0cmlidXRpb24gb2YiLCJ1bmNoYW5nZWQgZGlzdHJpYnV0aW9uIG9mIHRoZXNlIiwiZGlzdHJpYnV0aW9uIG9mIHRoZXNlIGZpbGVzIiwibW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIGZpbGUiLCJ2ZXJzaW9uIG9mIHRoaXMgZmlsZSBtYXkiLCJ0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIiwiZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYnV0IiwibWF5IGJlIGRpc3RyaWJ1dGVkIGJ1dCBpdCIsImJlIGRpc3RyaWJ1dGVkIGJ1dCBpdCBzaG91bGQiLCJkaXN0cmlidXRlZCBidXQgaXQgc2hvdWxkIGJlIiwiYnV0IGl0IHNob3VsZCBiZSBkaXN0cmlidXRlZCIsIml0IHNob3VsZCBiZSBkaXN0cmlidXRlZCB3aXRoIiwic2hvdWxkIGJlIGRpc3RyaWJ1dGVkIHdpdGggYSIsImJlIGRpc3RyaWJ1dGVkIHdpdGggYSBkaWZmZXJlbnQiLCJkaXN0cmlidXRlZCB3aXRoIGEgZGlmZmVyZW50IG5hbWUiLCJ3aXRoIGEgZGlmZmVyZW50IG5hbWUgY2hhbmdlZCIsImEgZGlmZmVyZW50IG5hbWUgY2hhbmdlZCBmaWxlcyIsImRpZmZlcmVudCBuYW1lIGNoYW5nZWQgZmlsZXMgbXVzdCIsIm5hbWUgY2hhbmdlZCBmaWxlcyBtdXN0IGJlIiwiZmlsZXMgbXVzdCBiZSBkaXN0cmlidXRlZCB0b2dldGhlciIsIm11c3QgYmUgZGlzdHJpYnV0ZWQgdG9nZXRoZXIgd2l0aCIsImJlIGRpc3RyaWJ1dGVkIHRvZ2V0aGVyIHdpdGggYSIsImRpc3RyaWJ1dGVkIHRvZ2V0aGVyIHdpdGggYSBjb21wbGV0ZSIsInRvZ2V0aGVyIHdpdGggYSBjb21wbGV0ZSBhbmQiLCJ3aXRoIGEgY29tcGxldGUgYW5kIHVuY2hhbmdlZCIsImEgY29tcGxldGUgYW5kIHVuY2hhbmdlZCBkaXN0cmlidXRpb24iLCJjb21wbGV0ZSBhbmQgdW5jaGFuZ2VkIGRpc3RyaWJ1dGlvbiBvZiIsImFuZCB1bmNoYW5nZWQgZGlzdHJpYnV0aW9uIG9mIHRoZXNlIiwidW5jaGFuZ2VkIGRpc3RyaWJ1dGlvbiBvZiB0aGVzZSBmaWxlcyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgZUNvcyBsaWNlbnNlIHZlcnNpb24gMi4wXG5cblRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVDb3MsIHRoZSBFbWJlZGRlZCBDb25maWd1cmFibGUgT3BlcmF0aW5nIFN5c3RlbS4gQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy5cblxuZUNvcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuZUNvcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCBlQ29zOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS5cblxuQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgd29ya3MgdG8gcHJvZHVjZSBhIHdvcmsgYmFzZWQgb24gdGhpcyBmaWxlLCB0aGlzIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgd29yayB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gSG93ZXZlciB0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgZmlsZSBtdXN0IHN0aWxsIGJlIG1hZGUgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCBzZWN0aW9uICgzKSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuXG5cblRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IGEgd29yayBiYXNlZCBvbiB0aGlzIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuXG5cbkFsdGVybmF0aXZlIGxpY2Vuc2VzIGZvciBlQ29zIG1heSBiZSBhcnJhbmdlZCBieSBjb250YWN0aW5nIFJlZCBIYXQsIEluYy4gYXQgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9lY29zL2Vjb3MtbGljZW5zZS8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIyMjRUNPU0dQTENPUFlSSUdIVEVORCMjIyMiXSwibGljZW5zZUlkcyI6WyJlQ29zLTIuMCJdLCJrZXl3b3JkcyI6WyJ0aGUgZWNvcyBsaWNlbnNlIiwiZWNvcyBsaWNlbnNlIHZlcnNpb24iLCIwIHRoaXMgZmlsZSIsInBhcnQgb2YgZWNvcyIsIm9mIGVjb3MgdGhlIiwiZWNvcyB0aGUgZW1iZWRkZWQiLCJ0aGUgZW1iZWRkZWQgY29uZmlndXJhYmxlIiwib3BlcmF0aW5nIHN5c3RlbSBjb3B5cmlnaHQiLCJzeXN0ZW0gY29weXJpZ2h0IGMiLCIxOTk5IDIwMDAgMjAwMSIsIjIwMDEgMjAwMiByZWQiLCIyMDAyIHJlZCBoYXQiLCJoYXQgaW5jIGVjb3MiLCJpbmMgZWNvcyBpcyIsImVjb3MgaXMgZnJlZSIsIjIgb3IgYXQiLCJsYXRlciB2ZXJzaW9uIGVjb3MiLCJ2ZXJzaW9uIGVjb3MgaXMiLCJlY29zIGlzIGRpc3RyaWJ1dGVkIiwiYWxvbmcgd2l0aCBlY29zIiwid2l0aCBlY29zIGlmIiwiZWNvcyBpZiBub3QiLCIxMzAxIHVzYSBhcyIsInVzYSBhcyBhIiwiZXhjZXB0aW9uIGlmIG90aGVyIiwiaWYgb3RoZXIgZmlsZXMiLCJvdGhlciBmaWxlcyBpbnN0YW50aWF0ZSIsImZpbGVzIGluc3RhbnRpYXRlIHRlbXBsYXRlcyIsImluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciIsInRlbXBsYXRlcyBvciB1c2UiLCJvciB1c2UgbWFjcm9zIiwidXNlIG1hY3JvcyBvciIsIm1hY3JvcyBvciBpbmxpbmUiLCJvciBpbmxpbmUgZnVuY3Rpb25zIiwiaW5saW5lIGZ1bmN0aW9ucyBmcm9tIiwiZnVuY3Rpb25zIGZyb20gdGhpcyIsImZyb20gdGhpcyBmaWxlIiwiZmlsZSBvciB5b3UiLCJvciB5b3UgY29tcGlsZSIsInlvdSBjb21waWxlIHRoaXMiLCJjb21waWxlIHRoaXMgZmlsZSIsImZpbGUgYW5kIGxpbmsiLCJhbmQgbGluayBpdCIsImxpbmsgaXQgd2l0aCIsIndvcmtzIHRvIHByb2R1Y2UiLCJ0aGlzIGZpbGUgdGhpcyIsInRoaXMgZmlsZSBkb2VzIiwicmVzdWx0aW5nIHdvcmsgdG8iLCJob3dldmVyIHRoZSBzb3VyY2UiLCJmb3IgdGhpcyBmaWxlIiwidGhpcyBmaWxlIG11c3QiLCJmaWxlIG11c3Qgc3RpbGwiLCJtdXN0IHN0aWxsIGJlIiwic3RpbGwgYmUgbWFkZSIsImF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIiwibm90IGludmFsaWRhdGUgYW55IiwicmVhc29ucyB3aHkgYSIsIndoeSBhIHdvcmsiLCJ0aGlzIGZpbGUgbWlnaHQiLCJmaWxlIG1pZ2h0IGJlIiwicHVibGljIGxpY2Vuc2UgYWx0ZXJuYXRpdmUiLCJsaWNlbnNlIGFsdGVybmF0aXZlIGxpY2Vuc2VzIiwibGljZW5zZXMgZm9yIGVjb3MiLCJmb3IgZWNvcyBtYXkiLCJlY29zIG1heSBiZSIsIm1heSBiZSBhcnJhbmdlZCIsImJlIGFycmFuZ2VkIGJ5IiwiYXJyYW5nZWQgYnkgY29udGFjdGluZyIsImJ5IGNvbnRhY3RpbmcgcmVkIiwiY29udGFjdGluZyByZWQgaGF0IiwiaGF0IGluYyBhdCIsImF0IGh0dHAgc291cmNlcyIsImh0dHAgc291cmNlcyByZWRoYXQiLCJzb3VyY2VzIHJlZGhhdCBjb20iLCJyZWRoYXQgY29tIGVjb3MiLCJjb20gZWNvcyBlY29zIiwiZWNvcyBlY29zIGxpY2Vuc2UiLCJlY29zIGxpY2Vuc2UgZWNvc2dwbGNvcHlyaWdodGVuZCIsInRoZSBlY29zIGxpY2Vuc2UgdmVyc2lvbiIsImVjb3MgbGljZW5zZSB2ZXJzaW9uIDIiLCIyIDAgdGhpcyBmaWxlIiwiMCB0aGlzIGZpbGUgaXMiLCJpcyBwYXJ0IG9mIGVjb3MiLCJwYXJ0IG9mIGVjb3MgdGhlIiwib2YgZWNvcyB0aGUgZW1iZWRkZWQiLCJlY29zIHRoZSBlbWJlZGRlZCBjb25maWd1cmFibGUiLCJ0aGUgZW1iZWRkZWQgY29uZmlndXJhYmxlIG9wZXJhdGluZyIsImNvbmZpZ3VyYWJsZSBvcGVyYXRpbmcgc3lzdGVtIGNvcHlyaWdodCIsIm9wZXJhdGluZyBzeXN0ZW0gY29weXJpZ2h0IGMiLCJzeXN0ZW0gY29weXJpZ2h0IGMgMTk5OCIsIjE5OTggMTk5OSAyMDAwIDIwMDEiLCIxOTk5IDIwMDAgMjAwMSAyMDAyIiwiMjAwMCAyMDAxIDIwMDIgcmVkIiwiMjAwMSAyMDAyIHJlZCBoYXQiLCIyMDAyIHJlZCBoYXQgaW5jIiwicmVkIGhhdCBpbmMgZWNvcyIsImhhdCBpbmMgZWNvcyBpcyIsImluYyBlY29zIGlzIGZyZWUiLCJlY29zIGlzIGZyZWUgc29mdHdhcmUiLCJlaXRoZXIgdmVyc2lvbiAyIG9yIiwidmVyc2lvbiAyIG9yIGF0IiwiMiBvciBhdCB5b3VyIiwiYW55IGxhdGVyIHZlcnNpb24gZWNvcyIsImxhdGVyIHZlcnNpb24gZWNvcyBpcyIsInZlcnNpb24gZWNvcyBpcyBkaXN0cmlidXRlZCIsImVjb3MgaXMgZGlzdHJpYnV0ZWQgaW4iLCJsaWNlbnNlIGFsb25nIHdpdGggZWNvcyIsImFsb25nIHdpdGggZWNvcyBpZiIsIndpdGggZWNvcyBpZiBub3QiLCJlY29zIGlmIG5vdCB3cml0ZSIsIjAyMTEwIDEzMDEgdXNhIGFzIiwiMTMwMSB1c2EgYXMgYSIsInVzYSBhcyBhIHNwZWNpYWwiLCJzcGVjaWFsIGV4Y2VwdGlvbiBpZiBvdGhlciIsImV4Y2VwdGlvbiBpZiBvdGhlciBmaWxlcyIsImlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlIiwib3RoZXIgZmlsZXMgaW5zdGFudGlhdGUgdGVtcGxhdGVzIiwiZmlsZXMgaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIiwiaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIHVzZSIsInRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIiwib3IgdXNlIG1hY3JvcyBvciIsInVzZSBtYWNyb3Mgb3IgaW5saW5lIiwibWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMiLCJvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20iLCJpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyIsImZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSIsImZyb20gdGhpcyBmaWxlIG9yIiwidGhpcyBmaWxlIG9yIHlvdSIsImZpbGUgb3IgeW91IGNvbXBpbGUiLCJvciB5b3UgY29tcGlsZSB0aGlzIiwieW91IGNvbXBpbGUgdGhpcyBmaWxlIiwiY29tcGlsZSB0aGlzIGZpbGUgYW5kIiwidGhpcyBmaWxlIGFuZCBsaW5rIiwiZmlsZSBhbmQgbGluayBpdCIsImFuZCBsaW5rIGl0IHdpdGgiLCJsaW5rIGl0IHdpdGggb3RoZXIiLCJpdCB3aXRoIG90aGVyIHdvcmtzIiwib3RoZXIgd29ya3MgdG8gcHJvZHVjZSIsIndvcmtzIHRvIHByb2R1Y2UgYSIsInByb2R1Y2UgYSB3b3JrIGJhc2VkIiwib24gdGhpcyBmaWxlIHRoaXMiLCJ0aGlzIGZpbGUgdGhpcyBmaWxlIiwiZmlsZSB0aGlzIGZpbGUgZG9lcyIsInRoaXMgZmlsZSBkb2VzIG5vdCIsImZpbGUgZG9lcyBub3QgYnkiLCJjYXVzZSB0aGUgcmVzdWx0aW5nIHdvcmsiLCJ0aGUgcmVzdWx0aW5nIHdvcmsgdG8iLCJyZXN1bHRpbmcgd29yayB0byBiZSIsIndvcmsgdG8gYmUgY292ZXJlZCIsImxpY2Vuc2UgaG93ZXZlciB0aGUgc291cmNlIiwiaG93ZXZlciB0aGUgc291cmNlIGNvZGUiLCJjb2RlIGZvciB0aGlzIGZpbGUiLCJmb3IgdGhpcyBmaWxlIG11c3QiLCJ0aGlzIGZpbGUgbXVzdCBzdGlsbCIsImZpbGUgbXVzdCBzdGlsbCBiZSIsIm11c3Qgc3RpbGwgYmUgbWFkZSIsInN0aWxsIGJlIG1hZGUgYXZhaWxhYmxlIiwibWFkZSBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSIsImF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGgiLCJ3aXRoIHNlY3Rpb24gMyBvZiIsImV4Y2VwdGlvbiBkb2VzIG5vdCBpbnZhbGlkYXRlIiwiZG9lcyBub3QgaW52YWxpZGF0ZSBhbnkiLCJub3QgaW52YWxpZGF0ZSBhbnkgb3RoZXIiLCJvdGhlciByZWFzb25zIHdoeSBhIiwicmVhc29ucyB3aHkgYSB3b3JrIiwid2h5IGEgd29yayBiYXNlZCIsIm9uIHRoaXMgZmlsZSBtaWdodCIsInRoaXMgZmlsZSBtaWdodCBiZSIsImZpbGUgbWlnaHQgYmUgY292ZXJlZCIsImdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYWx0ZXJuYXRpdmUiLCJwdWJsaWMgbGljZW5zZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcyIsImxpY2Vuc2UgYWx0ZXJuYXRpdmUgbGljZW5zZXMgZm9yIiwiYWx0ZXJuYXRpdmUgbGljZW5zZXMgZm9yIGVjb3MiLCJsaWNlbnNlcyBmb3IgZWNvcyBtYXkiLCJmb3IgZWNvcyBtYXkgYmUiLCJlY29zIG1heSBiZSBhcnJhbmdlZCIsIm1heSBiZSBhcnJhbmdlZCBieSIsImJlIGFycmFuZ2VkIGJ5IGNvbnRhY3RpbmciLCJhcnJhbmdlZCBieSBjb250YWN0aW5nIHJlZCIsImJ5IGNvbnRhY3RpbmcgcmVkIGhhdCIsImNvbnRhY3RpbmcgcmVkIGhhdCBpbmMiLCJyZWQgaGF0IGluYyBhdCIsImhhdCBpbmMgYXQgaHR0cCIsImluYyBhdCBodHRwIHNvdXJjZXMiLCJhdCBodHRwIHNvdXJjZXMgcmVkaGF0IiwiaHR0cCBzb3VyY2VzIHJlZGhhdCBjb20iLCJzb3VyY2VzIHJlZGhhdCBjb20gZWNvcyIsInJlZGhhdCBjb20gZWNvcyBlY29zIiwiY29tIGVjb3MgZWNvcyBsaWNlbnNlIiwiZWNvcyBlY29zIGxpY2Vuc2UgZWNvc2dwbGNvcHlyaWdodGVuZCIsInRoZSBlY29zIGxpY2Vuc2UgdmVyc2lvbiAyIiwiZWNvcyBsaWNlbnNlIHZlcnNpb24gMiAwIiwibGljZW5zZSB2ZXJzaW9uIDIgMCB0aGlzIiwidmVyc2lvbiAyIDAgdGhpcyBmaWxlIiwiMiAwIHRoaXMgZmlsZSBpcyIsIjAgdGhpcyBmaWxlIGlzIHBhcnQiLCJmaWxlIGlzIHBhcnQgb2YgZWNvcyIsImlzIHBhcnQgb2YgZWNvcyB0aGUiLCJwYXJ0IG9mIGVjb3MgdGhlIGVtYmVkZGVkIiwib2YgZWNvcyB0aGUgZW1iZWRkZWQgY29uZmlndXJhYmxlIl19LHsibGljZW5zZVRleHRzIjpbIkVHRU5JWC5DT00gUFVCTElDIExJQ0VOU0UgQUdSRUVNRU5UXG5cblZlcnNpb24gMS4xLjAgVGhpcyBsaWNlbnNlIGFncmVlbWVudCBpcyBiYXNlZCBvbiB0aGUgUHl0aG9uIENOUkkgTGljZW5zZSBBZ3JlZW1lbnQsIGEgd2lkZWx5IGFjY2VwdGVkIG9wZW4tIHNvdXJjZSBsaWNlbnNlLlxuXG4gICAxLiBJbnRyb2R1Y3Rpb25cblxuICAgVGhpcyBcIkxpY2Vuc2UgQWdyZWVtZW50XCIgaXMgYmV0d2VlbiBlR2VuaXguY29tIFNvZnR3YXJlLCBTa2lsbHMgYW5kIFNlcnZpY2VzIEdtYkggKFwiZUdlbml4LmNvbVwiKSwgaGF2aW5nIGFuIG9mZmljZSBhdCBQYXN0b3ItTG9laC1TdHIuIDQ4LCBELTQwNzY0IExhbmdlbmZlbGQsIEdlcm1hbnksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKFwiTGljZW5zZWVcIikgYWNjZXNzaW5nIGFuZCBvdGhlcndpc2UgdXNpbmcgdGhpcyBzb2Z0d2FyZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gYW5kIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gKFwidGhlIFNvZnR3YXJlXCIpLlxuXG4gICAyLiBMaWNlbnNlXG5cbiAgIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgZUdlbml4LmNvbSBQdWJsaWMgTGljZW5zZSBBZ3JlZW1lbnQsIGVHZW5peC5jb20gaGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgd29ybGQtd2lkZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSB0aGUgU29mdHdhcmUgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgdGhlIGVHZW5peC5jb20gUHVibGljIExpY2Vuc2UgQWdyZWVtZW50IGlzIHJldGFpbmVkIGluIHRoZSBTb2Z0d2FyZSwgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBvZiB0aGUgU29mdHdhcmUgcHJlcGFyZWQgYnkgTGljZW5zZWUuXG5cbiAgIDMuIE5PIFdBUlJBTlRZXG5cbiAgIGVHZW5peC5jb20gaXMgbWFraW5nIHRoZSBTb2Z0d2FyZSBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gXCJBUyBJU1wiIGJhc2lzLiBTVUJKRUNUIFRPIEFOWSBTVEFUVVRPUlkgV0FSUkFOVElFUyBXSElDSCBDQU4gTk9UIEJFIEVYQ0xVREVELCBFR0VOSVguQ09NIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQuIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIEVHRU5JWC5DT00gTUFLRVMgTk8gQU5EIERJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLlxuXG4gICA0LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWVxuXG4gICBFR0VOSVguQ09NIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFRIRSBTT0ZUV0FSRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIChJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLCBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKSBBUyBBIFJFU1VMVCBPRiBVU0lORywgTU9ESUZZSU5HIE9SIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUsIE9SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIRSBBQk9WRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIExJQ0VOU0VFLlxuXG4gICA1LiBUZXJtaW5hdGlvblxuXG4gICBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsIGJyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuXG5cbiAgIDYuIFRoaXJkIFBhcnR5IFJpZ2h0c1xuXG4gICBBbnkgc29mdHdhcmUgb3IgZG9jdW1lbnRhdGlvbiBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgU29mdHdhcmUgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCBpcyBsaWNlbnNlZCB0byBMaWNlbnNlZSB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlIGFncmVlbWVudC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBhcHBseSB0byB0aG9zZSBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuIENvcGllcyBvZiB0aGUgdGhpcmQgcGFydHkgbGljZW5zZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBTb2Z0d2FyZSBEaXN0cmlidXRpb24uXG5cbiAgIDcuIEdlbmVyYWxcblxuICAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IGFmZmVjdHMgYW55IHN0YXR1dG9yeSByaWdodHMgb2YgY29uc3VtZXJzIHRoYXQgY2Fubm90IGJlIHdhaXZlZCBvciBsaW1pdGVkIGJ5IGNvbnRyYWN0LlxuXG4gICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvIGNyZWF0ZSBhbnkgcmVsYXRpb25zaGlwIG9mIGFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUgYmV0d2VlbiBlR2VuaXguY29tIGFuZCBMaWNlbnNlZS5cblxuICAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIHVubGF3ZnVsLCB2b2lkLCBvciBmb3IgYW55IHJlYXNvbiB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSBtb2RpZmllZCB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byByZW5kZXIgaXQgZW5mb3JjZWFibGUgd2l0aG91dCBsb3NpbmcgaXRzIGludGVudCwgb3IsIGlmIG5vIHN1Y2ggbW9kaWZpY2F0aW9uIGlzIHBvc3NpYmxlLCBiZSBzZXZlcmVkIGZyb20gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBhbmQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgYW5kIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5pbmcgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LlxuXG4gICBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBpbnRlcnByZXRlZCBpbiBhbGwgcmVzcGVjdHMgYnkgdGhlIGxhdyBvZiBHZXJtYW55LCBleGNsdWRpbmcgY29uZmxpY3Qgb2YgbGF3IHByb3Zpc2lvbnMuIEl0IHNoYWxsIG5vdCBiZSBnb3Zlcm5lZCBieSB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcy4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBlR2VuaXguY29tIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgaW4gYSB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuXG5cbiAgIFRoZSBjb250cm9sbGluZyBsYW5ndWFnZSBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IGlzIEVuZ2xpc2guIElmIExpY2Vuc2VlIGhhcyByZWNlaXZlZCBhIHRyYW5zbGF0aW9uIGludG8gYW5vdGhlciBsYW5ndWFnZSwgaXQgaGFzIGJlZW4gcHJvdmlkZWQgZm9yIExpY2Vuc2VlJ3MgY29udmVuaWVuY2Ugb25seS5cblxuICAgOC4gQWdyZWVtZW50XG5cbkJ5IGRvd25sb2FkaW5nLCBjb3B5aW5nLCBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyB0aGUgU29mdHdhcmUsIExpY2Vuc2VlIGFncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gRm9yIHF1ZXN0aW9uIHJlZ2FyZGluZyB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBwbGVhc2Ugd3JpdGUgdG86XG5cbmVHZW5peC5jb20gU29mdHdhcmUsIFNraWxscyBhbmQgU2VydmljZXMgR21iSFxuXG5QYXN0b3ItTG9laC1TdHIuIDQ4XG5cbkQtNDA3NjQgTGFuZ2VuZmVsZFxuXG5HZXJtYW55Il0sImxpY2Vuc2VJZHMiOlsiZUdlbml4Il0sImtleXdvcmRzIjpbImFncmVlbWVudCBpcyBiYXNlZCIsIm9uIHRoZSBweXRob24iLCJ0aGUgcHl0aG9uIGNucmkiLCJweXRob24gY25yaSBsaWNlbnNlIiwiY25yaSBsaWNlbnNlIGFncmVlbWVudCIsImFncmVlbWVudCBhIHdpZGVseSIsImEgd2lkZWx5IGFjY2VwdGVkIiwid2lkZWx5IGFjY2VwdGVkIG9wZW4iLCJhY2NlcHRlZCBvcGVuIHNvdXJjZSIsImxpY2Vuc2UgMSBpbnRyb2R1Y3Rpb24iLCIxIGludHJvZHVjdGlvbiB0aGlzIiwiaW50cm9kdWN0aW9uIHRoaXMgbGljZW5zZSIsImlzIGJldHdlZW4gZWdlbml4Iiwic2VydmljZXMgZ21iaCBlZ2VuaXgiLCJnbWJoIGVnZW5peCBjb20iLCJlZ2VuaXggY29tIGhhdmluZyIsImNvbSBoYXZpbmcgYW4iLCJvZmZpY2UgYXQgcGFzdG9yIiwiYXQgcGFzdG9yIGxvZWgiLCJsYW5nZW5mZWxkIGdlcm1hbnkgYW5kIiwiZ2VybWFueSBhbmQgdGhlIiwic29mdHdhcmUgMiBsaWNlbnNlIiwiMiBsaWNlbnNlIHN1YmplY3QiLCJvZiB0aGlzIGVnZW5peCIsInRoaXMgZWdlbml4IGNvbSIsImxpY2Vuc2UgYWdyZWVtZW50IGVnZW5peCIsImFncmVlbWVudCBlZ2VuaXggY29tIiwiZWdlbml4IGNvbSBoZXJlYnkiLCJjb20gaGVyZWJ5IGdyYW50cyIsInRoYXQgdGhlIGVnZW5peCIsInRoZSBlZ2VuaXggY29tIiwiZGVyaXZhdGl2ZSB2ZXJzaW9uIG9mIiwidGhlIHNvZnR3YXJlIHByZXBhcmVkIiwic29mdHdhcmUgcHJlcGFyZWQgYnkiLCJsaWNlbnNlZSAzIG5vIiwiMyBubyB3YXJyYW50eSIsIm5vIHdhcnJhbnR5IGVnZW5peCIsIndhcnJhbnR5IGVnZW5peCBjb20iLCJlZ2VuaXggY29tIGlzIiwiY29tIGlzIG1ha2luZyIsImlzIGJhc2lzIHN1YmplY3QiLCJiYXNpcyBzdWJqZWN0IHRvIiwidG8gYW55IHN0YXR1dG9yeSIsImFueSBzdGF0dXRvcnkgd2FycmFudGllcyIsInN0YXR1dG9yeSB3YXJyYW50aWVzIHdoaWNoIiwid2FycmFudGllcyB3aGljaCBjYW4iLCJ3aGljaCBjYW4gbm90IiwiY2FuIG5vdCBiZSIsImJlIGV4Y2x1ZGVkIGVnZW5peCIsImV4Y2x1ZGVkIGVnZW5peCBjb20iLCJub3QgbGltaXRhdGlvbiBlZ2VuaXgiLCJsaW1pdGF0aW9uIGVnZW5peCBjb20iLCJyaWdodHMgNCBsaW1pdGF0aW9uIiwiNCBsaW1pdGF0aW9uIG9mIiwib2YgbGlhYmlsaXR5IGVnZW5peCIsImxpYWJpbGl0eSBlZ2VuaXggY29tIiwiZWdlbml4IGNvbSBzaGFsbCIsImNvbSBzaGFsbCBub3QiLCJvciBsb3NzIGluY2x1ZGluZyIsImxvc3MgaW5jbHVkaW5nIHdpdGhvdXQiLCJvZiBidXNpbmVzcyBwcm9maXRzIiwiYnVzaW5lc3MgcHJvZml0cyBidXNpbmVzcyIsInByb2ZpdHMgYnVzaW5lc3MgaW50ZXJydXB0aW9uIiwib2YgYnVzaW5lc3MgaW5mb3JtYXRpb24iLCJidXNpbmVzcyBpbmZvcm1hdGlvbiBvciIsImluZm9ybWF0aW9uIG9yIG90aGVyIiwib3Igb3RoZXIgcGVjdW5pYXJ5Iiwib3RoZXIgcGVjdW5pYXJ5IGxvc3MiLCJwZWN1bmlhcnkgbG9zcyBhcyIsInRoZXJlb2Ygc29tZSBqdXJpc2RpY3Rpb25zIiwiZGFtYWdlcyBzbyB0aGUiLCJ0aGUgYWJvdmUgZXhjbHVzaW9uIiwiYWJvdmUgZXhjbHVzaW9uIG9yIiwib3IgbGltaXRhdGlvbiBtYXkiLCJ0byBsaWNlbnNlZSA1IiwibGljZW5zZWUgNSB0ZXJtaW5hdGlvbiIsIjUgdGVybWluYXRpb24gdGhpcyIsImNvbmRpdGlvbnMgNiB0aGlyZCIsIjYgdGhpcmQgcGFydHkiLCJwYXJ0eSByaWdodHMgYW55IiwicmlnaHRzIGFueSBzb2Z0d2FyZSIsImFueSBzb2Z0d2FyZSBvciIsImRvY3VtZW50YXRpb24gaW4gc291cmNlIiwiZm9ybSBwcm92aWRlZCBhbG9uZyIsInRoYXQgaXMgYXNzb2NpYXRlZCIsImlzIGFzc29jaWF0ZWQgd2l0aCIsImFzc29jaWF0ZWQgd2l0aCBhIiwiYWdyZWVtZW50IGlzIGxpY2Vuc2VkIiwibGljZW5zZWQgdG8gbGljZW5zZWUiLCJ0aGF0IGxpY2Vuc2UgYWdyZWVtZW50IiwidGhlIHNvZnR3YXJlIGNvcGllcyIsInNvZnR3YXJlIGNvcGllcyBvZiIsIm9mIHRoZSB0aGlyZCIsInRoaXJkIHBhcnR5IGxpY2Vuc2VzIiwicGFydHkgbGljZW5zZXMgYXJlIiwibGljZW5zZXMgYXJlIGluY2x1ZGVkIiwidGhlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiIsInNvZnR3YXJlIGRpc3RyaWJ1dGlvbiA3IiwiZGlzdHJpYnV0aW9uIDcgZ2VuZXJhbCIsIjcgZ2VuZXJhbCBub3RoaW5nIiwiZ2VuZXJhbCBub3RoaW5nIGluIiwibGljZW5zZSBhZ3JlZW1lbnQgYWZmZWN0cyIsImFncmVlbWVudCBhZmZlY3RzIGFueSIsImFmZmVjdHMgYW55IHN0YXR1dG9yeSIsImFueSBzdGF0dXRvcnkgcmlnaHRzIiwicmlnaHRzIG9mIGNvbnN1bWVycyIsIm9mIGNvbnN1bWVycyB0aGF0IiwiY29uc3VtZXJzIHRoYXQgY2Fubm90IiwiYmUgd2FpdmVkIG9yIiwid2FpdmVkIG9yIGxpbWl0ZWQiLCJsaW1pdGVkIGJ5IGNvbnRyYWN0IiwiYnkgY29udHJhY3Qgbm90aGluZyIsImNvbnRyYWN0IG5vdGhpbmcgaW4iLCJ2ZW50dXJlIGJldHdlZW4gZWdlbml4IiwiZWdlbml4IGNvbSBhbmQiLCJjb20gYW5kIGxpY2Vuc2VlIiwiYW5kIGxpY2Vuc2VlIGlmIiwibGljZW5zZWUgaWYgYW55Iiwic2hhbGwgYmUgdW5sYXdmdWwiLCJiZSB1bmxhd2Z1bCB2b2lkIiwidW5sYXdmdWwgdm9pZCBvciIsInZvaWQgb3IgZm9yIiwiYW55IHJlYXNvbiB1bmVuZm9yY2VhYmxlIiwicmVhc29uIHVuZW5mb3JjZWFibGUgc3VjaCIsIm1vZGlmaWVkIHRvIHRoZSIsIm5lY2Vzc2FyeSB0byByZW5kZXIiLCJ0byByZW5kZXIgaXQiLCJyZW5kZXIgaXQgZW5mb3JjZWFibGUiLCJpdCBlbmZvcmNlYWJsZSB3aXRob3V0IiwiZW5mb3JjZWFibGUgd2l0aG91dCBsb3NpbmciLCJ3aXRob3V0IGxvc2luZyBpdHMiLCJsb3NpbmcgaXRzIGludGVudCIsIml0cyBpbnRlbnQgb3IiLCJpbnRlbnQgb3IgaWYiLCJpZiBubyBzdWNoIiwibm8gc3VjaCBtb2RpZmljYXRpb24iLCJtb2RpZmljYXRpb24gaXMgcG9zc2libGUiLCJpcyBwb3NzaWJsZSBiZSIsInBvc3NpYmxlIGJlIHNldmVyZWQiLCJ0aGUgdmFsaWRpdHkgYW5kIiwidmFsaWRpdHkgYW5kIGVuZm9yY2VhYmlsaXR5IiwibGF3IG9mIGdlcm1hbnkiLCJvZiBnZXJtYW55IGV4Y2x1ZGluZyIsImdlcm1hbnkgZXhjbHVkaW5nIGNvbmZsaWN0IiwibGF3IHByb3Zpc2lvbnMgaXQiLCJwcm92aXNpb25zIGl0IHNoYWxsIiwibm90IGJlIGdvdmVybmVkIiwiY29udHJhY3RzIGZvciBpbnRlcm5hdGlvbmFsIiwiZm9yIGludGVybmF0aW9uYWwgc2FsZSIsIm9mIGdvb2RzIHRoaXMiLCJnb29kcyB0aGlzIGxpY2Vuc2UiLCJ0byB1c2UgZWdlbml4IiwidXNlIGVnZW5peCBjb20iLCJlZ2VuaXggY29tIHRyYWRlbWFya3MiLCJjb20gdHJhZGVtYXJrcyBvciIsInRoaXJkIHBhcnR5IHRoZSIsInBhcnR5IHRoZSBjb250cm9sbGluZyIsInRoZSBjb250cm9sbGluZyBsYW5ndWFnZSIsImNvbnRyb2xsaW5nIGxhbmd1YWdlIG9mIiwibGFuZ3VhZ2Ugb2YgdGhpcyIsImFncmVlbWVudCBpcyBlbmdsaXNoIiwiaXMgZW5nbGlzaCBpZiIsImVuZ2xpc2ggaWYgbGljZW5zZWUiLCJsaWNlbnNlZSBoYXMgcmVjZWl2ZWQiLCJoYXMgcmVjZWl2ZWQgYSIsInJlY2VpdmVkIGEgdHJhbnNsYXRpb24iLCJhIHRyYW5zbGF0aW9uIGludG8iLCJ0cmFuc2xhdGlvbiBpbnRvIGFub3RoZXIiLCJhbm90aGVyIGxhbmd1YWdlIGl0IiwibGFuZ3VhZ2UgaXQgaGFzIiwiYmVlbiBwcm92aWRlZCBmb3IiLCJwcm92aWRlZCBmb3IgbGljZW5zZWUiLCJmb3IgbGljZW5zZWUgcyIsImxpY2Vuc2VlIHMgY29udmVuaWVuY2UiLCJzIGNvbnZlbmllbmNlIG9ubHkiLCJjb252ZW5pZW5jZSBvbmx5IDgiLCJvbmx5IDggYWdyZWVtZW50IiwiOCBhZ3JlZW1lbnQgYnkiLCJieSBkb3dubG9hZGluZyBjb3B5aW5nIiwiZG93bmxvYWRpbmcgY29weWluZyBpbnN0YWxsaW5nIiwiYWdyZWVtZW50IGZvciBxdWVzdGlvbiIsImZvciBxdWVzdGlvbiByZWdhcmRpbmciLCJxdWVzdGlvbiByZWdhcmRpbmcgdGhpcyIsInJlZ2FyZGluZyB0aGlzIGxpY2Vuc2UiLCJsaWNlbnNlIGFncmVlbWVudCBwbGVhc2UiLCJhZ3JlZW1lbnQgcGxlYXNlIHdyaXRlIiwicGxlYXNlIHdyaXRlIHRvIiwid3JpdGUgdG8gZWdlbml4IiwidG8gZWdlbml4IGNvbSIsInNlcnZpY2VzIGdtYmggcGFzdG9yIiwiZ21iaCBwYXN0b3IgbG9laCIsInB1YmxpYyBsaWNlbnNlIGFncmVlbWVudCB2ZXJzaW9uIiwidmVyc2lvbiAxIDEgMCIsIjEgMSAwIHRoaXMiLCJsaWNlbnNlIGFncmVlbWVudCBpcyBiYXNlZCIsImFncmVlbWVudCBpcyBiYXNlZCBvbiIsImJhc2VkIG9uIHRoZSBweXRob24iLCJvbiB0aGUgcHl0aG9uIGNucmkiLCJ0aGUgcHl0aG9uIGNucmkgbGljZW5zZSIsInB5dGhvbiBjbnJpIGxpY2Vuc2UgYWdyZWVtZW50Il19LHsibGljZW5zZVRleHRzIjpbIkxJQ0VOQ0UgT1VWRVJURSAvIE9QRU4gTElDRU5DRSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi0gVmVyc2lvbiAyLjBcblxuLSBBdnJpbCAyMDE3XG5cbsKrIFLDiVVUSUxJU0FUSU9OIMK7IERFIEwnwqsgSU5GT1JNQVRJT04gwrsgU09VUyBDRVRURSBMSUNFTkNFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuTGUgwqsgQ29uY8OpZGFudCDCuyBjb25jw6hkZSBhdSDCqyBSw6l1dGlsaXNhdGV1ciDCuyB1biBkcm9pdCBub24gZXhjbHVzaWYgZXQgZ3JhdHVpdCBkZSBsaWJyZSDCqyBSw6l1dGlsaXNhdGlvbiDCuyBkZSBsJ8KrIEluZm9ybWF0aW9uIMK7IG9iamV0IGRlIGxhIHByw6lzZW50ZSBsaWNlbmNlLCDDoCBkZXMgZmlucyBjb21tZXJjaWFsZXMgb3Ugbm9uLCBkYW5zIGxlIG1vbmRlIGVudGllciBldCBwb3VyIHVuZSBkdXLDqWUgaWxsaW1pdMOpZSwgZGFucyBsZXMgY29uZGl0aW9ucyBleHByaW3DqWVzIGNpLWRlc3NvdXMuXG5cbkxlIMKrIFLDqXV0aWxpc2F0ZXVyIMK7IGVzdCBsaWJyZSBkZSByw6l1dGlsaXNlciBsJ8KrIEluZm9ybWF0aW9uIMK7IDpcblxuICAgLSBkZSBsYSByZXByb2R1aXJlLCBsYSBjb3BpZXIsXG5cbiAgIC0gZGUgbCdhZGFwdGVyLCBsYSBtb2RpZmllciwgbCdleHRyYWlyZSBldCBsYSB0cmFuc2Zvcm1lciwgcG91ciBjcsOpZXIgZGVzIMKrIEluZm9ybWF0aW9ucyBkw6lyaXbDqWVzIMK7LCBkZXMgcHJvZHVpdHMgb3UgZGVzIHNlcnZpY2VzLFxuXG4gICAtIGRlIGxhIGNvbW11bmlxdWVyLCBsYSBkaWZmdXNlciwgbGEgcmVkaXN0cmlidWVyLCBsYSBwdWJsaWVyIGV0IGxhIHRyYW5zbWV0dHJlLFxuXG4gICAtIGRlIGwnZXhwbG9pdGVyIMOgIHRpdHJlIGNvbW1lcmNpYWwsIHBhciBleGVtcGxlIGVuIGxhIGNvbWJpbmFudCBhdmVjIGQnYXV0cmVzIGluZm9ybWF0aW9ucywgb3UgZW4gbCdpbmNsdWFudCBkYW5zIHNvbiBwcm9wcmUgcHJvZHVpdCBvdSBhcHBsaWNhdGlvbi5cblxuU291cyByw6lzZXJ2ZSBkZSA6XG5cbiAgIC0gbWVudGlvbm5lciBsYSBwYXRlcm5pdMOpIGRlIGwnwqsgSW5mb3JtYXRpb24gwrsgOiBzYSBzb3VyY2UgKGF1IG1vaW5zIGxlIG5vbSBkdSDCqyBDb25jw6lkYW50IMK7KSBldCBsYSBkYXRlIGRlIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGUgbCfCqyBJbmZvcm1hdGlvbiDCuyByw6l1dGlsaXPDqWUuXG5cbkxlIMKrIFLDqXV0aWxpc2F0ZXVyIMK7IHBldXQgbm90YW1tZW50IHMnYWNxdWl0dGVyIGRlIGNldHRlIGNvbmRpdGlvbiBlbiByZW52b3lhbnQsIHBhciB1biBsaWVuIGh5cGVydGV4dGUsIHZlcnMgbGEgc291cmNlIGRlIMKrIGwnSW5mb3JtYXRpb24gwrsgZXQgYXNzdXJhbnQgdW5lIG1lbnRpb24gZWZmZWN0aXZlIGRlIHNhIHBhdGVybml0w6kuXG5cblBhciBleGVtcGxlIDpcblxuwqsgTWluaXN0w6hyZSBkZSB4eHggLSBEb25uw6llcyBvcmlnaW5hbGVzIHTDqWzDqWNoYXJnw6llcyBzdXIgaHR0cDovL3d3dy5kYXRhLmdvdXYuZnIvZnIvZGF0YXNldHMveHh4LywgbWlzZSDDoCBqb3VyIGR1IDE0IGbDqXZyaWVyIDIwMTcgwrsuXG5cbkNldHRlIG1lbnRpb24gZGUgcGF0ZXJuaXTDqSBuZSBjb25mw6hyZSBhdWN1biBjYXJhY3TDqHJlIG9mZmljaWVsIMOgIGxhIMKrIFLDqXV0aWxpc2F0aW9uIMK7IGRlIGwnwqsgSW5mb3JtYXRpb24gwrssIGV0IG5lIGRvaXQgcGFzIHN1Z2fDqXJlciB1bmUgcXVlbGNvbnF1ZSByZWNvbm5haXNzYW5jZSBvdSBjYXV0aW9uIHBhciBsZSDCqyBDb25jw6lkYW50IMK7LCBvdSBwYXIgdG91dGUgYXV0cmUgZW50aXTDqSBwdWJsaXF1ZSwgZHUgwqsgUsOpdXRpbGlzYXRldXIgwrsgb3UgZGUgc2EgwqsgUsOpdXRpbGlzYXRpb24gwrsuXG5cbsKrIERPTk7DiUVTIMOAIENBUkFDVMOIUkUgUEVSU09OTkVMIMK7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuTCfCqyBJbmZvcm1hdGlvbiDCuyBtaXNlIMOgIGRpc3Bvc2l0aW9uIHBldXQgY29udGVuaXIgZGVzIMKrIERvbm7DqWVzIMOgIGNhcmFjdMOocmUgcGVyc29ubmVsIMK7IHBvdXZhbnQgZmFpcmUgbCdvYmpldCBkJ3VuZSDCqyBSw6l1dGlsaXNhdGlvbiDCuy4gU2kgdGVsIGVzdCBsZSBjYXMsIGxlIMKrIENvbmPDqWRhbnQgwrsgaW5mb3JtZSBsZSDCqyBSw6l1dGlsaXNhdGV1ciDCuyBkZSBsZXVyIHByw6lzZW5jZS5cblxuTCfCqyBJbmZvcm1hdGlvbiDCuyBwZXV0IMOqdHJlIGxpYnJlbWVudCByw6l1dGlsaXPDqWUsIGRhbnMgbGUgY2FkcmUgZGVzIGRyb2l0cyBhY2NvcmTDqXMgcGFyIGxhIHByw6lzZW50ZSBsaWNlbmNlLCDDoCBjb25kaXRpb24gZGUgcmVzcGVjdGVyIGxlIGNhZHJlIGzDqWdhbCByZWxhdGlmIMOgIGxhIHByb3RlY3Rpb24gZGVzIGRvbm7DqWVzIMOgIGNhcmFjdMOocmUgcGVyc29ubmVsLlxuXG7CqyBEUk9JVFMgREUgUFJPUFJJw4lUw4kgSU5URUxMRUNUVUVMTEUgwrsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JbCBlc3QgZ2FyYW50aSBhdSDCqyBSw6l1dGlsaXNhdGV1ciDCuyBxdWUgbGVzIMOpdmVudHVlbHMgwqsgRHJvaXRzIGRlIHByb3ByacOpdMOpIGludGVsbGVjdHVlbGxlIMK7IGTDqXRlbnVzIHBhciBkZXMgdGllcnMgb3UgcGFyIGxlIMKrIENvbmPDqWRhbnQgwrsgc3VyIGwnwqsgSW5mb3JtYXRpb24gwrsgbmUgZm9udCBwYXMgb2JzdGFjbGUgYXV4IGRyb2l0cyBhY2NvcmTDqXMgcGFyIGxhIHByw6lzZW50ZSBsaWNlbmNlLlxuXG5Mb3JzcXVlIGxlIMKrIENvbmPDqWRhbnQgwrsgZMOpdGllbnQgZGVzIMKrIERyb2l0cyBkZSBwcm9wcmnDqXTDqSBpbnRlbGxlY3R1ZWxsZSDCuyBjZXNzaWJsZXMgc3VyIGwnwqsgSW5mb3JtYXRpb24gwrssIGlsIGxlcyBjw6hkZSBhdSDCqyBSw6l1dGlsaXNhdGV1ciDCuyBkZSBmYcOnb24gbm9uIGV4Y2x1c2l2ZSwgw6AgdGl0cmUgZ3JhY2lldXgsIHBvdXIgbGUgbW9uZGUgZW50aWVyLCBwb3VyIHRvdXRlIGxhIGR1csOpZSBkZXMgwqsgRHJvaXRzIGRlIHByb3ByacOpdMOpIGludGVsbGVjdHVlbGxlIMK7LCBldCBsZSDCqyBSw6l1dGlsaXNhdGV1ciDCuyBwZXV0IGZhaXJlIHRvdXQgdXNhZ2UgZGUgbCfCqyBJbmZvcm1hdGlvbiDCuyBjb25mb3Jtw6ltZW50IGF1eCBsaWJlcnTDqXMgZXQgYXV4IGNvbmRpdGlvbnMgZMOpZmluaWVzIHBhciBsYSBwcsOpc2VudGUgbGljZW5jZS5cblxuUkVTUE9OU0FCSUxJVMOJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuTCfCqyBJbmZvcm1hdGlvbiDCuyBlc3QgbWlzZSDDoCBkaXNwb3NpdGlvbiB0ZWxsZSBxdWUgcHJvZHVpdGUgb3UgcmXDp3VlIHBhciBsZSDCqyBDb25jw6lkYW50IMK7LCBzYW5zIGF1dHJlIGdhcmFudGllIGV4cHJlc3NlIG91IHRhY2l0ZSBxdWUgY2VsbGVzIHByw6l2dWVzIHBhciBsYSBwcsOpc2VudGUgbGljZW5jZS4gTCdhYnNlbmNlIGRlIGTDqWZhdXRzIG91IGQnZXJyZXVycyDDqXZlbnR1ZWxsZW1lbnQgY29udGVudWVzIGRhbnMgbCfCqyBJbmZvcm1hdGlvbiDCuywgY29tbWUgbGEgZm91cm5pdHVyZSBjb250aW51ZSBkZSBsJ8KrIEluZm9ybWF0aW9uIMK7IG4nZXN0IHBhcyBnYXJhbnRpZSBwYXIgbGUgwqsgQ29uY8OpZGFudCDCuy4gSWwgbmUgcGV1dCDDqnRyZSB0ZW51IHBvdXIgcmVzcG9uc2FibGUgZGUgdG91dGUgcGVydGUsIHByw6lqdWRpY2Ugb3UgZG9tbWFnZSBkZSBxdWVscXVlIHNvcnRlIGNhdXPDqSDDoCBkZXMgdGllcnMgZHUgZmFpdCBkZSBsYSDCqyBSw6l1dGlsaXNhdGlvbiDCuy5cblxuTGUgwqsgUsOpdXRpbGlzYXRldXIgwrsgZXN0IHNldWwgcmVzcG9uc2FibGUgZGUgbGEgwqsgUsOpdXRpbGlzYXRpb24gwrsgZGUgbCfCqyBJbmZvcm1hdGlvbiDCuy5cblxuTGEgwqsgUsOpdXRpbGlzYXRpb24gwrsgbmUgZG9pdCBwYXMgaW5kdWlyZSBlbiBlcnJldXIgZGVzIHRpZXJzIHF1YW50IGF1IGNvbnRlbnUgZGUgbCfCqyBJbmZvcm1hdGlvbiDCuywgc2Egc291cmNlIGV0IHNhIGRhdGUgZGUgbWlzZSDDoCBqb3VyLlxuXG5EUk9JVCBBUFBMSUNBQkxFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuTGEgcHLDqXNlbnRlIGxpY2VuY2UgZXN0IHLDqWdpZSBwYXIgbGUgZHJvaXQgZnJhbsOnYWlzLlxuXG5DT01QQVRJQklMSVTDiSBERSBMQSBQUsOJU0VOVEUgTElDRU5DRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkxhIHByw6lzZW50ZSBsaWNlbmNlIGEgw6l0w6kgY29uw6d1ZSBwb3VyIMOqdHJlIGNvbXBhdGlibGUgYXZlYyB0b3V0ZSBsaWNlbmNlIGxpYnJlIHF1aSBleGlnZSBhdSBtb2lucyBsYSBtZW50aW9uIGRlIHBhdGVybml0w6kgZXQgbm90YW1tZW50IGF2ZWMgbGEgdmVyc2lvbiBhbnTDqXJpZXVyZSBkZSBsYSBwcsOpc2VudGUgbGljZW5jZSBhaW5zaSBxdSdhdmVjIGxlcyBsaWNlbmNlcyA6XG5cbiAgIC0gwqsgT3BlbiBHb3Zlcm5tZW50IExpY2VuY2UgwrsgKE9HTCkgZHUgUm95YXVtZS1VbmksXG5cbiAgIC0gwqsgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiDCuyAoQ0MtQlkpIGRlIENyZWF0aXZlIENvbW1vbnMgZXRcblxuICAgLSDCqyBPcGVuIERhdGEgQ29tbW9ucyBBdHRyaWJ1dGlvbiDCuyAoT0RDLUJZKSBkZSBsJ09wZW4gS25vd2xlZGdlIEZvdW5kYXRpb24uXG5cbkTDiUZJTklUSU9OUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblNvbnQgY29uc2lkw6lyw6lzLCBhdSBzZW5zIGRlIGxhIHByw6lzZW50ZSBsaWNlbmNlIGNvbW1lIDpcblxuTGUgwqsgQ29uY8OpZGFudCDCuyA6IHRvdXRlIHBlcnNvbm5lIGNvbmPDqWRhbnQgdW4gZHJvaXQgZGUgwqsgUsOpdXRpbGlzYXRpb24gwrsgc3VyIGwnwqsgSW5mb3JtYXRpb24gwrsgZGFucyBsZXMgbGliZXJ0w6lzIGV0IGxlcyBjb25kaXRpb25zIHByw6l2dWVzIHBhciBsYSBwcsOpc2VudGUgbGljZW5jZVxuXG5MJ8KrIEluZm9ybWF0aW9uIMK7IDpcblxuICAgLSB0b3V0ZSBpbmZvcm1hdGlvbiBwdWJsaXF1ZSBmaWd1cmFudCBkYW5zIGRlcyBkb2N1bWVudHMgY29tbXVuaXF1w6lzIG91IHB1Ymxpw6lzIHBhciB1bmUgYWRtaW5pc3RyYXRpb24gbWVudGlvbm7DqWUgYXUgcHJlbWllciBhbGluw6lhIGRlIGwnYXJ0aWNsZSBMLjMwMC0yIGR1IENSUEE7XG5cbiAgIC0gdG91dGUgaW5mb3JtYXRpb24gbWlzZSDDoCBkaXNwb3NpdGlvbiBwYXIgdG91dGUgcGVyc29ubmUgc2Vsb24gbGVzIHRlcm1lcyBldCBjb25kaXRpb25zIGRlIGxhIHByw6lzZW50ZSBsaWNlbmNlLlxuXG5MYSDCqyBSw6l1dGlsaXNhdGlvbiDCuyA6IGwndXRpbGlzYXRpb24gZGUgbCfCqyBJbmZvcm1hdGlvbiDCuyDDoCBkJ2F1dHJlcyBmaW5zIHF1ZSBjZWxsZXMgcG91ciBsZXNxdWVsbGVzIGVsbGUgYSDDqXTDqSBwcm9kdWl0ZSBvdSByZcOndWUuXG5cbkxlIMKrIFLDqXV0aWxpc2F0ZXVyIMK7OiB0b3V0ZSBwZXJzb25uZSBxdWkgcsOpdXRpbGlzZSBsZXMgwqsgSW5mb3JtYXRpb25zIMK7IGNvbmZvcm3DqW1lbnQgYXV4IGNvbmRpdGlvbnMgZGUgbGEgcHLDqXNlbnRlIGxpY2VuY2UuXG5cbkRlcyDCqyBEb25uw6llcyDDoCBjYXJhY3TDqHJlIHBlcnNvbm5lbCDCuyA6IHRvdXRlIGluZm9ybWF0aW9uIHNlIHJhcHBvcnRhbnQgw6AgdW5lIHBlcnNvbm5lIHBoeXNpcXVlIGlkZW50aWZpw6llIG91IGlkZW50aWZpYWJsZSwgcG91dmFudCDDqnRyZSBpZGVudGlmacOpZSBkaXJlY3RlbWVudCBvdSBpbmRpcmVjdGVtZW50LiBMZXVyIMKrIFLDqXV0aWxpc2F0aW9uIMK7IGVzdCBzdWJvcmRvbm7DqWUgYXUgcmVzcGVjdCBkdSBjYWRyZSBqdXJpZGlxdWUgZW4gdmlndWV1ci5cblxuVW5lIMKrIEluZm9ybWF0aW9uIGTDqXJpdsOpZSDCuyA6IHRvdXRlIG5vdXZlbGxlIGRvbm7DqWUgb3UgaW5mb3JtYXRpb24gY3LDqcOpZXMgZGlyZWN0ZW1lbnQgw6AgcGFydGlyIGRlIGwnwqsgSW5mb3JtYXRpb24gwrsgb3Ugw6AgcGFydGlyIGQndW5lIGNvbWJpbmFpc29uIGRlIGwnwqsgSW5mb3JtYXRpb24gwrsgZXQgZCdhdXRyZXMgZG9ubsOpZXMgb3UgaW5mb3JtYXRpb25zIG5vbiBzb3VtaXNlcyDDoCBjZXR0ZSBsaWNlbmNlLlxuXG5MZXMgwqsgRHJvaXRzIGRlIHByb3ByacOpdMOpIGludGVsbGVjdHVlbGxlIMK7IDogdG91cyBkcm9pdHMgaWRlbnRpZmnDqXMgY29tbWUgdGVscyBwYXIgbGUgQ29kZSBkZSBsYSBwcm9wcmnDqXTDqSBpbnRlbGxlY3R1ZWxsZSAobm90YW1tZW50IGxlIGRyb2l0IGQnYXV0ZXVyLCBkcm9pdHMgdm9pc2lucyBhdSBkcm9pdCBkJ2F1dGV1ciwgZHJvaXQgc3VpIGdlbmVyaXMgZGVzIHByb2R1Y3RldXJzIGRlIGJhc2VzIGRlIGRvbm7DqWVz4oCmKS5cblxuw4AgUFJPUE9TIERFIENFVFRFIExJQ0VOQ0UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5MYSBwcsOpc2VudGUgbGljZW5jZSBhIHZvY2F0aW9uIMOgIMOqdHJlIHV0aWxpc8OpZSBwYXIgbGVzIGFkbWluaXN0cmF0aW9ucyBwb3VyIGxhIHLDqXV0aWxpc2F0aW9uIGRlIGxldXJzIGluZm9ybWF0aW9ucyBwdWJsaXF1ZXMuIEVsbGUgcGV1dCDDqWdhbGVtZW50IMOqdHJlIHV0aWxpc8OpZSBwYXIgdG91dGUgcGVyc29ubmUgc291aGFpdGFudCBtZXR0cmUgw6AgZGlzcG9zaXRpb24gZGUgbCfCqyBJbmZvcm1hdGlvbiDCuyBkYW5zIGxlcyBjb25kaXRpb25zIGTDqWZpbmllcyBwYXIgbGEgcHLDqXNlbnRlIGxpY2VuY2UuXG5cbkxhIEZyYW5jZSBlc3QgZG90w6llIGQndW4gY2FkcmUganVyaWRpcXVlIGdsb2JhbCB2aXNhbnQgw6AgdW5lIGRpZmZ1c2lvbiBzcG9udGFuw6llIHBhciBsZXMgYWRtaW5pc3RyYXRpb25zIGRlIGxldXJzIGluZm9ybWF0aW9ucyBwdWJsaXF1ZXMgYWZpbiBkJ2VuIHBlcm1ldHRyZSBsYSBwbHVzIGxhcmdlIHLDqXV0aWxpc2F0aW9uLlxuXG5MZSBkcm9pdCBkZSBsYSDCqyBSw6l1dGlsaXNhdGlvbiDCuyBkZSBsJ8KrIEluZm9ybWF0aW9uIMK7IGRlcyBhZG1pbmlzdHJhdGlvbnMgZXN0IHLDqWdpIHBhciBsZSBjb2RlIGRlcyByZWxhdGlvbnMgZW50cmUgbGUgcHVibGljIGV0IGwnYWRtaW5pc3RyYXRpb24gKENSUEEpLlxuXG5DZXR0ZSBsaWNlbmNlIGZhY2lsaXRlIGxhIHLDqXV0aWxpc2F0aW9uIGxpYnJlIGV0IGdyYXR1aXRlIGRlcyBpbmZvcm1hdGlvbnMgcHVibGlxdWVzIGV0IGZpZ3VyZSBwYXJtaSBsZXMgbGljZW5jZXMgcXVpIHBldXZlbnQgw6p0cmUgdXRpbGlzw6llcyBwYXIgbCdhZG1pbmlzdHJhdGlvbiBlbiB2ZXJ0dSBkdSBkw6ljcmV0IHByaXMgZW4gYXBwbGljYXRpb24gZGUgbCdhcnRpY2xlIEwuMzIzLTIgZHUgQ1JQQS5cblxuRXRhbGFiIGVzdCBsYSBtaXNzaW9uIGNoYXJnw6llLCBzb3VzIGwnYXV0b3JpdMOpIGR1IFByZW1pZXIgbWluaXN0cmUsIGQnb3V2cmlyIGxlIHBsdXMgZ3JhbmQgbm9tYnJlIGRlIGRvbm7DqWVzIHB1YmxpcXVlcyBkZXMgYWRtaW5pc3RyYXRpb25zIGRlIGwnRXRhdCBldCBkZSBzZXMgw6l0YWJsaXNzZW1lbnRzIHB1YmxpY3MuIEVsbGUgYSByw6lhbGlzw6kgbGEgTGljZW5jZSBPdXZlcnRlIHBvdXIgZmFjaWxpdGVyIGxhIHLDqXV0aWxpc2F0aW9uIGxpYnJlIGV0IGdyYXR1aXRlIGRlIGNlcyBpbmZvcm1hdGlvbnMgcHVibGlxdWVzLCB0ZWxsZXMgcXVlIGTDqWZpbmllcyBwYXIgbCdhcnRpY2xlIEwzMjEtMSBkdSBDUlBBLlxuXG5DZXR0ZSBsaWNlbmNlIGVzdCBsYSB2ZXJzaW9uIDIuMCBkZSBsYSBMaWNlbmNlIE91dmVydGUuXG5cbkV0YWxhYiBzZSByw6lzZXJ2ZSBsYSBmYWN1bHTDqSBkZSBwcm9wb3NlciBkZSBub3V2ZWxsZXMgdmVyc2lvbnMgZGUgbGEgTGljZW5jZSBPdXZlcnRlLiBDZXBlbmRhbnQsIGxlcyDCqyBSw6l1dGlsaXNhdGV1cnMgwrsgcG91cnJvbnQgY29udGludWVyIMOgIHLDqXV0aWxpc2VyIGxlcyBpbmZvcm1hdGlvbnMgcXUnaWxzIG9udCBvYnRlbnVlcyBzb3VzIGNldHRlIGxpY2VuY2UgcydpbHMgbGUgc291aGFpdGVudC4iXSwibGljZW5zZUlkcyI6WyJldGFsYWItMi4wIl0sImtleXdvcmRzIjpbImxpY2VuY2Ugb3V2ZXJ0ZSBvcGVuIiwib3V2ZXJ0ZSBvcGVuIGxpY2VuY2UiLCJvcGVuIGxpY2VuY2UgdmVyc2lvbiIsIjIgMCBhdnJpbCIsIjAgYXZyaWwgMjAxNyIsImF2cmlsIDIwMTcgciIsIjIwMTcgciB1dGlsaXNhdGlvbiIsImwgaW5mb3JtYXRpb24gc291cyIsImluZm9ybWF0aW9uIHNvdXMgY2V0dGUiLCJjZXR0ZSBsaWNlbmNlIGxlIiwiciB1dGlsaXNhdGV1ciB1biIsInV0aWxpc2F0ZXVyIHVuIGRyb2l0IiwidW4gZHJvaXQgbm9uIiwiZHJvaXQgbm9uIGV4Y2x1c2lmIiwibm9uIGV4Y2x1c2lmIGV0IiwiZXhjbHVzaWYgZXQgZ3JhdHVpdCIsImV0IGdyYXR1aXQgZGUiLCJncmF0dWl0IGRlIGxpYnJlIiwiZGUgbGlicmUgciIsImxpYnJlIHIgdXRpbGlzYXRpb24iLCJsIGluZm9ybWF0aW9uIG9iamV0IiwiaW5mb3JtYXRpb24gb2JqZXQgZGUiLCJvYmpldCBkZSBsYSIsImxpY2VuY2UgZGVzIGZpbnMiLCJkZXMgZmlucyBjb21tZXJjaWFsZXMiLCJmaW5zIGNvbW1lcmNpYWxlcyBvdSIsImNvbW1lcmNpYWxlcyBvdSBub24iLCJkYW5zIGxlIG1vbmRlIiwibW9uZGUgZW50aWVyIGV0IiwiZW50aWVyIGV0IHBvdXIiLCJldCBwb3VyIHVuZSIsInBvdXIgdW5lIGR1ciIsImR1ciBlIGlsbGltaXQiLCJlIGlsbGltaXQgZSIsImlsbGltaXQgZSBkYW5zIiwiZSBkYW5zIGxlcyIsImxlcyBjb25kaXRpb25zIGV4cHJpbSIsImNvbmRpdGlvbnMgZXhwcmltIGVzIiwiZXhwcmltIGVzIGNpIiwiZXMgY2kgZGVzc291cyIsImNpIGRlc3NvdXMgbGUiLCJkZXNzb3VzIGxlIHIiLCJ1dGlsaXNhdGV1ciBlc3QgbGlicmUiLCJsaWJyZSBkZSByIiwiZGUgciB1dGlsaXNlciIsInIgdXRpbGlzZXIgbCIsInV0aWxpc2VyIGwgaW5mb3JtYXRpb24iLCJsIGluZm9ybWF0aW9uIGRlIiwiaW5mb3JtYXRpb24gZGUgbGEiLCJkZSBsYSByZXByb2R1aXJlIiwibGEgcmVwcm9kdWlyZSBsYSIsInJlcHJvZHVpcmUgbGEgY29waWVyIiwibGEgY29waWVyIGRlIiwiY29waWVyIGRlIGwiLCJkZSBsIGFkYXB0ZXIiLCJsIGFkYXB0ZXIgbGEiLCJhZGFwdGVyIGxhIG1vZGlmaWVyIiwibGEgbW9kaWZpZXIgbCIsIm1vZGlmaWVyIGwgZXh0cmFpcmUiLCJsIGV4dHJhaXJlIGV0IiwiZXh0cmFpcmUgZXQgbGEiLCJldCBsYSB0cmFuc2Zvcm1lciIsImxhIHRyYW5zZm9ybWVyIHBvdXIiLCJ0cmFuc2Zvcm1lciBwb3VyIGNyIiwicG91ciBjciBlciIsImNyIGVyIGRlcyIsImVyIGRlcyBpbmZvcm1hdGlvbnMiLCJkZXMgaW5mb3JtYXRpb25zIGQiLCJpbmZvcm1hdGlvbnMgZCByaXYiLCJkIHJpdiBlcyIsInJpdiBlcyBkZXMiLCJlcyBkZXMgcHJvZHVpdHMiLCJkZXMgcHJvZHVpdHMgb3UiLCJwcm9kdWl0cyBvdSBkZXMiLCJvdSBkZXMgc2VydmljZXMiLCJkZXMgc2VydmljZXMgZGUiLCJzZXJ2aWNlcyBkZSBsYSIsImRlIGxhIGNvbW11bmlxdWVyIiwibGEgY29tbXVuaXF1ZXIgbGEiLCJjb21tdW5pcXVlciBsYSBkaWZmdXNlciIsImxhIGRpZmZ1c2VyIGxhIiwiZGlmZnVzZXIgbGEgcmVkaXN0cmlidWVyIiwibGEgcmVkaXN0cmlidWVyIGxhIiwicmVkaXN0cmlidWVyIGxhIHB1YmxpZXIiLCJsYSBwdWJsaWVyIGV0IiwicHVibGllciBldCBsYSIsImV0IGxhIHRyYW5zbWV0dHJlIiwibGEgdHJhbnNtZXR0cmUgZGUiLCJ0cmFuc21ldHRyZSBkZSBsIiwiZGUgbCBleHBsb2l0ZXIiLCJsIGV4cGxvaXRlciB0aXRyZSIsImV4cGxvaXRlciB0aXRyZSBjb21tZXJjaWFsIiwidGl0cmUgY29tbWVyY2lhbCBwYXIiLCJwYXIgZXhlbXBsZSBlbiIsImV4ZW1wbGUgZW4gbGEiLCJlbiBsYSBjb21iaW5hbnQiLCJsYSBjb21iaW5hbnQgYXZlYyIsImNvbWJpbmFudCBhdmVjIGQiLCJhdmVjIGQgYXV0cmVzIiwiZCBhdXRyZXMgaW5mb3JtYXRpb25zIiwiYXV0cmVzIGluZm9ybWF0aW9ucyBvdSIsImluZm9ybWF0aW9ucyBvdSBlbiIsIm91IGVuIGwiLCJlbiBsIGluY2x1YW50IiwibCBpbmNsdWFudCBkYW5zIiwiaW5jbHVhbnQgZGFucyBzb24iLCJkYW5zIHNvbiBwcm9wcmUiLCJzb24gcHJvcHJlIHByb2R1aXQiLCJwcm9wcmUgcHJvZHVpdCBvdSIsInByb2R1aXQgb3UgYXBwbGljYXRpb24iLCJvdSBhcHBsaWNhdGlvbiBzb3VzIiwiYXBwbGljYXRpb24gc291cyByIiwiZGUgbWVudGlvbm5lciBsYSIsIm1lbnRpb25uZXIgbGEgcGF0ZXJuaXQiLCJzYSBzb3VyY2UgYXUiLCJzb3VyY2UgYXUgbW9pbnMiLCJhdSBtb2lucyBsZSIsIm1vaW5zIGxlIG5vbSIsIm5vbSBkdSBjb25jIiwiZGFudCBldCBsYSIsImRhdGUgZGUgZGVybmkiLCJkZSBkZXJuaSByZSIsImRlcm5pIHJlIG1pc2UiLCJyZSBtaXNlIGpvdXIiLCJtaXNlIGpvdXIgZGUiLCJqb3VyIGRlIGwiLCJsIGluZm9ybWF0aW9uIHIiLCJpbmZvcm1hdGlvbiByIHV0aWxpcyIsInV0aWxpcyBlIGxlIiwiZSBsZSByIiwidXRpbGlzYXRldXIgcGV1dCBub3RhbW1lbnQiLCJwZXV0IG5vdGFtbWVudCBzIiwibm90YW1tZW50IHMgYWNxdWl0dGVyIiwicyBhY3F1aXR0ZXIgZGUiLCJhY3F1aXR0ZXIgZGUgY2V0dGUiLCJkZSBjZXR0ZSBjb25kaXRpb24iLCJjZXR0ZSBjb25kaXRpb24gZW4iLCJjb25kaXRpb24gZW4gcmVudm95YW50IiwiZW4gcmVudm95YW50IHBhciIsInJlbnZveWFudCBwYXIgdW4iLCJ1biBsaWVuIGh5cGVydGV4dGUiLCJsaWVuIGh5cGVydGV4dGUgdmVycyIsImh5cGVydGV4dGUgdmVycyBsYSIsInZlcnMgbGEgc291cmNlIiwibGEgc291cmNlIGRlIiwic291cmNlIGRlIGwiLCJpbmZvcm1hdGlvbiBldCBhc3N1cmFudCIsImV0IGFzc3VyYW50IHVuZSIsImFzc3VyYW50IHVuZSBtZW50aW9uIiwidW5lIG1lbnRpb24gZWZmZWN0aXZlIiwibWVudGlvbiBlZmZlY3RpdmUgZGUiLCJlZmZlY3RpdmUgZGUgc2EiLCJkZSBzYSBwYXRlcm5pdCIsInNhIHBhdGVybml0IHBhciIsInBhdGVybml0IHBhciBleGVtcGxlIiwicGFyIGV4ZW1wbGUgbWluaXN0IiwiZXhlbXBsZSBtaW5pc3QgcmUiLCJtaW5pc3QgcmUgZGUiLCJyZSBkZSB4eHgiLCJkZSB4eHggZG9ubiIsInh4eCBkb25uIGVzIiwiZG9ubiBlcyBvcmlnaW5hbGVzIiwiZXMgb3JpZ2luYWxlcyB0Iiwib3JpZ2luYWxlcyB0IGwiLCJ0IGwgY2hhcmciLCJsIGNoYXJnIGVzIiwiY2hhcmcgZXMgc3VyIiwiZXMgc3VyIGh0dHAiLCJzdXIgaHR0cCB3d3ciLCJodHRwIHd3dyBkYXRhIiwid3d3IGRhdGEgZ291diIsImRhdGEgZ291diBmciIsImdvdXYgZnIgZnIiLCJmciBmciBkYXRhc2V0cyIsImZyIGRhdGFzZXRzIHh4eCIsImRhdGFzZXRzIHh4eCBtaXNlIiwieHh4IG1pc2Ugam91ciIsIm1pc2Ugam91ciBkdSIsImpvdXIgZHUgMTQiLCJkdSAxNCBmIiwiMTQgZiB2cmllciIsImYgdnJpZXIgMjAxNyIsInZyaWVyIDIwMTcgY2V0dGUiLCIyMDE3IGNldHRlIG1lbnRpb24iLCJjZXR0ZSBtZW50aW9uIGRlIiwiZGUgcGF0ZXJuaXQgbmUiLCJwYXRlcm5pdCBuZSBjb25mIiwibmUgY29uZiByZSIsImNvbmYgcmUgYXVjdW4iLCJyZSBhdWN1biBjYXJhY3QiLCJhdWN1biBjYXJhY3QgcmUiLCJjYXJhY3QgcmUgb2ZmaWNpZWwiLCJyZSBvZmZpY2llbCBsYSIsIm9mZmljaWVsIGxhIHIiLCJpbmZvcm1hdGlvbiBldCBuZSIsImV0IG5lIGRvaXQiLCJkb2l0IHBhcyBzdWdnIiwicGFzIHN1Z2cgcmVyIiwic3VnZyByZXIgdW5lIiwicmVyIHVuZSBxdWVsY29ucXVlIl19LHsibGljZW5zZVRleHRzIjpbImdTT0FQIFB1YmxpYyBMaWNlbnNlXG5cblZlcnNpb24gMS4zYiBUaGUgZ1NPQVAgcHVibGljIGxpY2Vuc2UgaXMgZGVyaXZlZCBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIChNUEwxLjEpLiBUaGUgc2VjdGlvbnMgdGhhdCB3ZXJlIGRlbGV0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgTVBMMS4xIHRleHQgYXJlIDEuMC4xLCAyLjEuKGMpLChkKSwgMi4yLihjKSwoZCksIDguMi4oYiksIDEwLCBhbmQgMTEuIFNlY3Rpb24gMy44IHdhcyBhZGRlZC4gVGhlIG1vZGlmaWVkIHNlY3Rpb25zIGFyZSAyLjEuKGIpLCAyLjIuKGIpLCAzLjIgKHNpbXBsaWZpZWQpLCAzLjUgKGRlbGV0ZWQgdGhlIGxhc3Qgc2VudGVuY2UpLCBhbmQgMy42IChzaW1wbGlmaWVkKS5cblxuVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gdGhlIGdTT0FQIHNvZnR3YXJlIHBhY2thZ2UsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgc29hcGNwcDIgYW5kIHdzZGwyaCBzb3VyY2UgY29kZSBsb2NhdGVkIGluIGdzb2FwL3NyYyBhbmQgZ3NvYXAvd3NkbCwgYWxsIGNvZGUgZ2VuZXJhdGVkIGJ5IHNvYXBjcHAyIGFuZCB3c2RsMmgsIHRoZSBVRERJIHNvdXJjZSBjb2RlIGdzb2FwL3VkZGkyLCBhbmQgdGhlIFdlYiBzZXJ2ZXIgc2FtcGxlIHNvdXJjZSBjb2RlIHNhbXBsZXMvd2Vic2VydmVyLiBUbyB1c2UgYW55IG9mIHRoZXNlIHNvZnR3YXJlIHRvb2xzIGFuZCBjb21wb25lbnRzIGNvbW1lcmNpYWxseSwgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgcmVxdWlyZWQgYW5kIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHd3dy5nZW5pdmlhLmNvbS5cblxuICAgMSBERUZJTklUSU9OUy5cblxuICAgICAgMS4wLjEuXG5cbiAgICAgIDEuMS4gXCJDb250cmlidXRvclwiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgMS4yLiBcIkNvbnRyaWJ1dG9yIFZlcnNpb25cIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuXG5cbiAgICAgIDEuMy4gXCJDb3ZlcmVkIENvZGVcIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuXG5cbiAgICAgIDEuNC4gXCJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc21cIiBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS5cblxuICAgICAgMS41LiBcIkV4ZWN1dGFibGVcIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS5cblxuICAgICAgMS42LiBcIkluaXRpYWwgRGV2ZWxvcGVyXCIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLlxuXG4gICAgICAxLjcuIFwiTGFyZ2VyIFdvcmtcIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlxuXG4gICAgICAxLjguIFwiTGljZW5zZVwiIG1lYW5zIHRoaXMgZG9jdW1lbnQuXG5cbiAgICAgIDEuOC4xLiBcIkxpY2Vuc2FibGVcIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi5cblxuICAgICAgMS45LiBcIk1vZGlmaWNhdGlvbnNcIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczpcblxuICAgICAgICAgQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy5cblxuICAgICAgICAgQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUsIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuXG5cbiAgICAgIDEuMTAuIFwiT3JpZ2luYWwgQ29kZVwiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuXG5cbiAgICAgIDEuMTAuMS4gXCJQYXRlbnQgQ2xhaW1zXCIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuXG5cbiAgICAgIDEuMTEuIFwiU291cmNlIENvZGVcIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS5cblxuICAgICAgMS4xMi4gXCJZb3VcIiAob3IgXCJZb3VyXCIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsIFwiWW91XCIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIFwiY29udHJvbFwiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LlxuXG4gICAyIFNPVVJDRSBDT0RFIExJQ0VOU0UuXG5cbiAgICAgIDIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LlxuXG4gICAgICBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOlxuXG4gICAgICAgICAoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmRcblxuICAgICAgICAgKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoXCJvZmZlciB0byBzZWxsIGFuZCBpbXBvcnRcIikgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIG9yIHBvcnRpb25zIHRoZXJlb2YsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIHV0aWxpemUsIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggb3RoZXIgc29mdHdhcmUsIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCBvciBhbnkgY29tYmluYXRpb24gb3IgcG9ydGlvbnMgdGhlcmVvZi5cblxuICAgICAgICAgKGMpXG5cbiAgICAgICAgIChkKVxuXG4gICAgICAyLjIuIENvbnRyaWJ1dG9yIEdyYW50LlxuXG4gICAgICBTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZVxuXG4gICAgICAgICAoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZFxuXG4gICAgICAgICAoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsIChcIm9mZmVyIHRvIHNlbGwgYW5kIGltcG9ydFwiKSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIHV0aWxpemUsIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggb3RoZXIgc29mdHdhcmUsIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKS5cblxuICAgICAgICAgKGMpXG5cbiAgICAgICAgIChkKVxuXG4gICAzIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUy5cblxuICAgICAgMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLlxuXG4gICAgICBUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS5cblxuICAgICAgMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuXG5cbiAgICAgIEFueSBNb2RpZmljYXRpb24gY3JlYXRlZCBieSBZb3Ugc2hhbGwgYmUgcHJvdmlkZWQgdG8gdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIFNvdXJjZSBDb2RlIGZvcm0gYW5kIGFyZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS5cblxuICAgICAgMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLlxuXG4gICAgICBZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgICAgIDMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuXG5cbiAgICAgICAgIChhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuIElmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSdzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgXCJMRUdBTFwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuXG5cbiAgICAgICAgIChiKSBDb250cmlidXRvciBBUElzLiBJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuXG5cbiAgICAgICAgIChjKSBSZXByZXNlbnRhdGlvbnMuIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3Mgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS5cblxuICAgICAgMy41LiBSZXF1aXJlZCBOb3RpY2VzLlxuXG4gICAgICBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci5cblxuICAgICAgMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy5cblxuICAgICAgWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIElmIHlvdSBkaXN0cmlidXRlIGV4ZWN1dGFibGUgdmVyc2lvbnMgY29udGFpbmluZyBDb3ZlcmVkIENvZGUgYXMgcGFydCBvZiBhIHByb2R1Y3QsIHlvdSBtdXN0IHJlcHJvZHVjZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIHByb2R1Y3QuXG5cbiAgICAgIDMuNy4gTGFyZ2VyIFdvcmtzLlxuXG4gICAgICBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuXG5cbiAgICAgIDMuOC4gUmVzdHJpY3Rpb25zLlxuXG4gICAgICBZb3UgbWF5IG5vdCByZW1vdmUgYW55IHByb2R1Y3QgaWRlbnRpZmljYXRpb24sIGNvcHlyaWdodCwgcHJvcHJpZXRhcnkgbm90aWNlcyBvciBsYWJlbHMgZnJvbSBnU09BUC5cblxuICAgNCBJTkFCSUxJVFkgVE8gQ09NUExZIERVRSBUTyBTVEFUVVRFIE9SIFJFR1VMQVRJT04uXG5cbiAgIElmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuXG5cbiAgIDUgQVBQTElDQVRJT04gT0YgVEhJUyBMSUNFTlNFLlxuXG4gICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLlxuXG4gICA2IFZFUlNJT05TIE9GIFRIRSBMSUNFTlNFLlxuXG4gICAgICA2LjEuIE5ldyBWZXJzaW9ucy5cblxuICAgICAgR3JhbnRvciBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuXG5cbiAgICAgIDYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy5cblxuICAgICAgT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UuXG5cbiAgICAgIDYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy5cblxuICAgICAgSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZSBcImdTT0FQXCIgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdSBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIGdTT0FQIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pXG5cbiAgIDcgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS5cblxuICAgQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTLCBBTkQgQU5ZIFdBUlJBTlRZIFRIQVQgTUFZIEFSSVNFIEJZIFJFQVNPTiBPRiBUUkFERSBVU0FHRSwgQ1VTVE9NLCBPUiBDT1VSU0UgT0YgREVBTElORy4gV0lUSE9VVCBMSU1JVElORyBUSEUgRk9SRUdPSU5HLCBZT1UgQUNLTk9XTEVER0UgVEhBVCBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEFUIFRIRSBBVVRIT1JTIERPIE5PVCBXQVJSQU5UIFRIRSBTT0ZUV0FSRSBXSUxMIFJVTiBVTklOVEVSUlVQVEVEIE9SIEVSUk9SIEZSRUUuIExJTUlURUQgTElBQklMSVRZIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBSRVNVTFRTIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgU09GVFdBUkUgSVMgQVNTVU1FRCBCWSBZT1UuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgV0lMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgRVhFTVBMQVJZIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgS0lORCBPUiBOQVRVUkUgV0hBVFNPRVZFUiwgV0hFVEhFUiBCQVNFRCBPTiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEFSSVNJTkcgT1VUIE9GIE9SIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEVWRU4gSUYgVEhFIEFVVEhPUlMgSEFWRSBCRUVOIEFEVklTRUQgT04gVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFIE9SIElGIFNVQ0ggREFNQUdFIENPVUxEIEhBVkUgQkVFTiBSRUFTT05BQkxZIEZPUkVTRUVOLCBBTkQgTk9UV0lUSFNUQU5ESU5HIEFOWSBGQUlMVVJFIE9GIEVTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBFWENMVVNJVkUgUkVNRURZIFBST1ZJREVELiBTVUNIIExJTUlUQVRJT04gT04gREFNQUdFUyBJTkNMVURFUywgQlVUIElTIE5PVCBMSU1JVEVEIFRPLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBMT1NUIFBST0ZJVFMsIExPU1MgT0YgREFUQSBPUiBTT0ZUV0FSRSwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiBPUiBJTVBBSVJNRU5UIE9GIE9USEVSIEdPT0RTLiBJTiBOTyBFVkVOVCBXSUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgVEhFIENPU1RTIE9GIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgU09GVFdBUkUgT1IgU0VSVklDRVMuIFlPVSBBQ0tOT1dMRURHRSBUSEFUIFRISVMgU09GVFdBUkUgSVMgTk9UIERFU0lHTkVEIEZPUiBVU0UgSU4gT04tTElORSBFUVVJUE1FTlQgSU4gSEFaQVJET1VTIEVOVklST05NRU5UUyBTVUNIIEFTIE9QRVJBVElPTiBPRiBOVUNMRUFSIEZBQ0lMSVRJRVMsIEFJUkNSQUZUIE5BVklHQVRJT04gT1IgQ09OVFJPTCwgT1IgTElGRS1DUklUSUNBTCBBUFBMSUNBVElPTlMuIFRIRSBBVVRIT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTlkgTElBQklMSVRZIFJFU1VMVElORyBGUk9NIFVTRSBPRiBUSEUgU09GVFdBUkUgSU4gQU5ZIFNVQ0ggT04tTElORSBFUVVJUE1FTlQgSU4gSEFaQVJET1VTIEVOVklST05NRU5UUyBBTkQgQUNDRVBUUyBOTyBMSUFCSUxJVFkgSU4gUkVTUEVDVCBPRiBBTlkgQUNUSU9OUyBPUiBDTEFJTVMgQkFTRUQgT04gVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgSU4gQU5ZIFNVQ0ggT04tTElORSBFUVVJUE1FTlQgSU4gSEFaQVJET1VTIEVOVklST05NRU5UUyBCWSBZT1UuIEZPUiBQVVJQT1NFUyBPRiBUSElTIFBBUkFHUkFQSCwgVEhFIFRFUk0gXCJMSUZFLUNSSVRJQ0FMIEFQUExJQ0FUSU9OXCIgTUVBTlMgQU4gQVBQTElDQVRJT04gSU4gV0hJQ0ggVEhFIEZVTkNUSU9OSU5HIE9SIE1BTEZVTkNUSU9OSU5HIE9GIFRIRSBTT0ZUV0FSRSBNQVkgUkVTVUxUIERJUkVDVExZIE9SIElORElSRUNUTFkgSU4gUEhZU0lDQUwgSU5KVVJZIE9SIExPU1MgT0YgSFVNQU4gTElGRS4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi5cblxuICAgOCBURVJNSU5BVElPTi5cblxuICAgICAgOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuXG5cbiAgICAgIDguMi5cblxuICAgICAgOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLlxuXG4gICAgICA4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi5cblxuICAgOSBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS5cblxuICAgVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLlxuXG4gICAxMCBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLlxuXG4gICAxMSBNSVNDRUxMQU5FT1VTLlxuXG4gICAxMiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLlxuXG4gICBBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuIFxuXG4gICBcblxuICAgRVhISUJJVCBBLlxuXG4gICBcIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGdTT0FQIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4zICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICBodHRwOi8vd3d3LmNzLmZzdS5lZHUvIGVuZ2VsZW4vc29hcGxpY2Vuc2UuaHRtbFxuXG4gICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4gICBUaGUgT3JpZ2luYWwgQ29kZSBvZiB0aGUgZ1NPQVAgU29mdHdhcmUgaXM6IHN0ZHNvYXAuaCwgc3Rkc29hcDIuaCwgc3Rkc29hcC5jLCBzdGRzb2FwMi5jLCBzdGRzb2FwLmNwcCwgc3Rkc29hcDIuY3BwLCBzb2FwY3BwMi5oLCBzb2FwY3BwMi5jLCBzb2FwY3BwMl9sZXgubCwgc29hcGNwcDJfeWFjYy55LCBlcnJvcjIuaCwgZXJyb3IyLmMsIHN5bWJvbDIuYywgaW5pdDIuYywgc29hcGRvYzIuaHRtbCwgYW5kIHNvYXBkb2MyLnBkZiwgaHR0cGdldC5oLCBodHRwZ2V0LmMsIHN0bC5oLCBzdGxkZXF1ZS5oLCBzdGxsaXN0LmgsIHN0bHZlY3Rvci5oLCBzdGxzZXQuaC5cblxuICAgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFJvYmVydCBBLiB2YW4gRW5nZWxlbi4gUG9ydGlvbnMgY3JlYXRlZCBieSBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4gYXJlIENvcHlyaWdodCAoQykgMjAwMS0yMDA0IFJvYmVydCBBLiB2YW4gRW5nZWxlbiwgR2VuaXZpYSBpbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbiAgIENvbnRyaWJ1dG9yKHMpOlxuXG4gICBcIl9fX19fX19fX19fX19fX19fX19fX19fXy5cIlxuXG4gICBbTm90ZTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmb3JtIHRoZSB0ZXh0IG9mIHRoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgY29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dXG5cbiAgIFxuXG4gICBFWEhJQklUIEIuXG5cbiAgIFwiUGFydCBvZiB0aGUgc29mdHdhcmUgZW1iZWRkZWQgaW4gdGhpcyBwcm9kdWN0IGlzIGdTT0FQIHNvZnR3YXJlLlxuXG4gICBQb3J0aW9ucyBjcmVhdGVkIGJ5IGdTT0FQIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOSBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4sIEdlbml2aWEgaW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuXG4gICBUSEUgU09GVFdBUkUgSU4gVEhJUyBQUk9EVUNUIFdBUyBJTiBQQVJUIFBST1ZJREVEIEJZIEdFTklWSUEgSU5DIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXCIiXSwibGljZW5zZUlkcyI6WyJnU09BUC0xLjNiIl0sImtleXdvcmRzIjpbInZlcnNpb24gMSAzYiIsIjEgM2IgdGhlIiwiM2IgdGhlIGdzb2FwIiwicHVibGljIGxpY2Vuc2UgbXBsMSIsImxpY2Vuc2UgbXBsMSAxIiwibXBsMSAxIHRoZSIsIjEgdGhlIHNlY3Rpb25zIiwidGhlIHNlY3Rpb25zIHRoYXQiLCJzZWN0aW9ucyB0aGF0IHdlcmUiLCJ0aGF0IHdlcmUgZGVsZXRlZCIsIndlcmUgZGVsZXRlZCBmcm9tIiwidGhlIG9yaWdpbmFsIG1wbDEiLCJvcmlnaW5hbCBtcGwxIDEiLCJtcGwxIDEgdGV4dCIsIjEgdGV4dCBhcmUiLCJ0ZXh0IGFyZSAxIiwiYXJlIDEgMCIsIjAgMSAyIiwiMiAxIGMiLCIxIGMgZCIsIjIgMiBjIiwiMiBjIGQiLCJjIGQgOCIsImQgOCAyIiwiOCAyIGIiLCIyIGIgMTAiLCJiIDEwIGFuZCIsImFuZCAxMSBzZWN0aW9uIiwiMTEgc2VjdGlvbiAzIiwiMyA4IHdhcyIsIjggd2FzIGFkZGVkIiwid2FzIGFkZGVkIHRoZSIsImFkZGVkIHRoZSBtb2RpZmllZCIsInRoZSBtb2RpZmllZCBzZWN0aW9ucyIsIm1vZGlmaWVkIHNlY3Rpb25zIGFyZSIsInNlY3Rpb25zIGFyZSAyIiwiYXJlIDIgMSIsIjEgYiAyIiwiYiAyIDIiLCIyIGIgMyIsIjMgMiBzaW1wbGlmaWVkIiwiMiBzaW1wbGlmaWVkIDMiLCJzaW1wbGlmaWVkIDMgNSIsIjMgNSBkZWxldGVkIiwiNSBkZWxldGVkIHRoZSIsImRlbGV0ZWQgdGhlIGxhc3QiLCJ0aGUgbGFzdCBzZW50ZW5jZSIsImxhc3Qgc2VudGVuY2UgYW5kIiwic2VudGVuY2UgYW5kIDMiLCJhbmQgMyA2IiwiMyA2IHNpbXBsaWZpZWQiLCI2IHNpbXBsaWZpZWQgdGhpcyIsInNpbXBsaWZpZWQgdGhpcyBsaWNlbnNlIiwiZ3NvYXAgc29mdHdhcmUgcGFja2FnZSIsInNvZnR3YXJlIHBhY2thZ2Ugd2l0aCIsIndpdGggdGhlIGV4Y2VwdGlvbiIsInRoZSBleGNlcHRpb24gb2YiLCJleGNlcHRpb24gb2YgdGhlIiwib2YgdGhlIHNvYXBjcHAyIiwidGhlIHNvYXBjcHAyIGFuZCIsImFuZCB3c2RsMmggc291cmNlIiwid3NkbDJoIHNvdXJjZSBjb2RlIiwic291cmNlIGNvZGUgbG9jYXRlZCIsImNvZGUgbG9jYXRlZCBpbiIsImxvY2F0ZWQgaW4gZ3NvYXAiLCJpbiBnc29hcCBzcmMiLCJnc29hcCBzcmMgYW5kIiwic3JjIGFuZCBnc29hcCIsImFuZCBnc29hcCB3c2RsIiwiZ3NvYXAgd3NkbCBhbGwiLCJ3c2RsIGFsbCBjb2RlIiwiYWxsIGNvZGUgZ2VuZXJhdGVkIiwiZ2VuZXJhdGVkIGJ5IHNvYXBjcHAyIiwiYnkgc29hcGNwcDIgYW5kIiwiYW5kIHdzZGwyaCB0aGUiLCJ3c2RsMmggdGhlIHVkZGkiLCJ0aGUgdWRkaSBzb3VyY2UiLCJ1ZGRpIHNvdXJjZSBjb2RlIiwic291cmNlIGNvZGUgZ3NvYXAiLCJjb2RlIGdzb2FwIHVkZGkyIiwiZ3NvYXAgdWRkaTIgYW5kIiwidWRkaTIgYW5kIHRoZSIsImFuZCB0aGUgd2ViIiwidGhlIHdlYiBzZXJ2ZXIiLCJ3ZWIgc2VydmVyIHNhbXBsZSIsInNlcnZlciBzYW1wbGUgc291cmNlIiwic2FtcGxlIHNvdXJjZSBjb2RlIiwic291cmNlIGNvZGUgc2FtcGxlcyIsImNvZGUgc2FtcGxlcyB3ZWJzZXJ2ZXIiLCJzYW1wbGVzIHdlYnNlcnZlciB0byIsIndlYnNlcnZlciB0byB1c2UiLCJvZiB0aGVzZSBzb2Z0d2FyZSIsInRoZXNlIHNvZnR3YXJlIHRvb2xzIiwic29mdHdhcmUgdG9vbHMgYW5kIiwidG9vbHMgYW5kIGNvbXBvbmVudHMiLCJhbmQgY29tcG9uZW50cyBjb21tZXJjaWFsbHkiLCJjb21wb25lbnRzIGNvbW1lcmNpYWxseSBhIiwiY29tbWVyY2lhbGx5IGEgY29tbWVyY2lhbCIsImEgY29tbWVyY2lhbCBsaWNlbnNlIiwiY29tbWVyY2lhbCBsaWNlbnNlIGlzIiwicmVxdWlyZWQgYW5kIGNhbiIsIm9idGFpbmVkIGZyb20gd3d3IiwiZnJvbSB3d3cgZ2VuaXZpYSIsInd3dyBnZW5pdmlhIGNvbSIsImdlbml2aWEgY29tIDEiLCJjb20gMSBkZWZpbml0aW9ucyIsIjAgMSAxIiwic29mdHdhcmUgdGhlIG9yaWdpbmFsIiwiYW55IGNvbWJpbmF0aW9uIG9yIiwiY29tYmluYXRpb24gb3IgcG9ydGlvbnMiLCJzb2Z0d2FyZSB0aGUgY29udHJpYnV0b3IiLCJjIGQgMyIsImQgMyBkaXN0cmlidXRpb24iLCJhbnkgbW9kaWZpY2F0aW9uIGNyZWF0ZWQiLCJtb2RpZmljYXRpb24gY3JlYXRlZCBieSIsImRldmVsb3BlciBpbiBzb3VyY2UiLCJmb3JtIGFuZCBhcmUiLCJhbnkgY29udHJpYnV0b3IgMyIsImNvbnRyaWJ1dG9yIDMgNiIsImFueSBjb250cmlidXRvciBpZiIsImNvbnRyaWJ1dG9yIGlmIHlvdSIsImNvZGUgYXMgcGFydCIsImEgcHJvZHVjdCB5b3UiLCJjb2RlIDMgOCIsIjMgOCByZXN0cmljdGlvbnMiLCI4IHJlc3RyaWN0aW9ucyB5b3UiLCJyZW1vdmUgYW55IHByb2R1Y3QiLCJhbnkgcHJvZHVjdCBpZGVudGlmaWNhdGlvbiIsInByb2R1Y3QgaWRlbnRpZmljYXRpb24gY29weXJpZ2h0IiwiaWRlbnRpZmljYXRpb24gY29weXJpZ2h0IHByb3ByaWV0YXJ5IiwiY29weXJpZ2h0IHByb3ByaWV0YXJ5IG5vdGljZXMiLCJwcm9wcmlldGFyeSBub3RpY2VzIG9yIiwibm90aWNlcyBvciBsYWJlbHMiLCJvciBsYWJlbHMgZnJvbSIsImxhYmVscyBmcm9tIGdzb2FwIiwiZnJvbSBnc29hcCA0IiwiZ3NvYXAgNCBpbmFiaWxpdHkiLCJuZXcgdmVyc2lvbnMgZ3JhbnRvciIsInZlcnNpb25zIGdyYW50b3IgbWF5IiwiZ3JhbnRvciBtYXkgcHVibGlzaCIsInRoYXQgdGhlIHBocmFzZSIsInRoZSBwaHJhc2UgZ3NvYXAiLCJwaHJhc2UgZ3NvYXAgb3IiLCJnc29hcCBvciBhbnkiLCJub3RlIHRoYXQgeW91IiwidGhhdCB5b3UgbGljZW5zZSIsInlvdSBsaWNlbnNlIGRpZmZlcnMiLCJmcm9tIHRoZSBnc29hcCIsImFueSBraW5kIHdoZXRoZXIiLCJraW5kIHdoZXRoZXIgZXhwcmVzcyIsIm1lcmNoYW50YWJpbGl0eSBvZiBmaXRuZXNzIiwicHVycG9zZSBub25pbmZyaW5nZW1lbnQgb2YiLCJ3YXJyYW50eSB0aGF0IG1heSIsIm1heSBhcmlzZSBieSIsImFyaXNlIGJ5IHJlYXNvbiIsInJlYXNvbiBvZiB0cmFkZSIsIm9mIHRyYWRlIHVzYWdlIiwidHJhZGUgdXNhZ2UgY3VzdG9tIiwidXNhZ2UgY3VzdG9tIG9yIiwiY3VzdG9tIG9yIGNvdXJzZSIsIm9yIGNvdXJzZSBvZiIsIm9mIGRlYWxpbmcgd2l0aG91dCIsImRlYWxpbmcgd2l0aG91dCBsaW1pdGluZyIsImZvcmVnb2luZyB5b3UgYWNrbm93bGVkZ2UiLCJpcyBhbmQgdGhhdCIsInRoYXQgdGhlIGF1dGhvcnMiLCJ0aGUgYXV0aG9ycyBkbyIsImF1dGhvcnMgZG8gbm90IiwiZG8gbm90IHdhcnJhbnQiLCJub3Qgd2FycmFudCB0aGUiLCJ3YXJyYW50IHRoZSBzb2Z0d2FyZSIsInNvZnR3YXJlIHdpbGwgcnVuIiwid2lsbCBydW4gdW5pbnRlcnJ1cHRlZCIsInJ1biB1bmludGVycnVwdGVkIG9yIiwiZXJyb3IgZnJlZSBsaW1pdGVkIiwiZnJlZSBsaW1pdGVkIGxpYWJpbGl0eSIsImxpbWl0ZWQgbGlhYmlsaXR5IHRoZSIsImxpYWJpbGl0eSB0aGUgZW50aXJlIiwiYXMgdG8gcmVzdWx0cyIsInRvIHJlc3VsdHMgYW5kIiwicmVzdWx0cyBhbmQgcGVyZm9ybWFuY2UiLCJzb2Z0d2FyZSBpcyBhc3N1bWVkIiwiaXMgYXNzdW1lZCBieSIsImFzc3VtZWQgYnkgeW91IiwieW91IHVuZGVyIG5vIiwibm8gY2lyY3Vtc3RhbmNlcyB3aWxsIiwiY2lyY3Vtc3RhbmNlcyB3aWxsIHRoZSIsImluZGlyZWN0IGluY2lkZW50YWwgZXhlbXBsYXJ5IiwiaW5jaWRlbnRhbCBleGVtcGxhcnkgb3IiLCJraW5kIG9yIG5hdHVyZSIsIm9yIG5hdHVyZSB3aGF0c29ldmVyIiwibmF0dXJlIHdoYXRzb2V2ZXIgd2hldGhlciIsIndoYXRzb2V2ZXIgd2hldGhlciBiYXNlZCIsImJhc2VkIG9uIGNvbnRyYWN0Iiwib24gY29udHJhY3Qgd2FycmFudHkiLCJiZWVuIGFkdmlzZWQgb24iLCJhZHZpc2VkIG9uIHRoZSIsIm9uIHRoZSBwb3NzaWJpbGl0eSIsImRhbWFnZSBvciBpZiIsIm9yIGlmIHN1Y2giXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IDE5ODYgLSAxOTkzLCAxOTk4LCAyMDA0IFRob21hcyBXaWxsaWFtcywgQ29saW4gS2VsbGV5XG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIG1vZGlmeSB0aGUgc29mdHdhcmUgaXMgZ3JhbnRlZCwgYnV0IG5vdCB0aGUgcmlnaHQgdG8gZGlzdHJpYnV0ZSB0aGUgY29tcGxldGUgbW9kaWZpZWQgc291cmNlIGNvZGUuIE1vZGlmaWNhdGlvbnMgYXJlIHRvIGJlIGRpc3RyaWJ1dGVkIGFzIHBhdGNoZXMgdG8gdGhlIHJlbGVhc2VkIHZlcnNpb24uIFBlcm1pc3Npb24gdG8gZGlzdHJpYnV0ZSBiaW5hcmllcyBwcm9kdWNlZCBieSBjb21waWxpbmcgbW9kaWZpZWQgc291cmNlcyBpcyBncmFudGVkLCBwcm92aWRlZCB5b3VcblxuICAgMS4gZGlzdHJpYnV0ZSB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgbW9kaWZpY2F0aW9ucyBmcm9tIHRoZSByZWxlYXNlZCB2ZXJzaW9uIGluIHRoZSBmb3JtIG9mIGEgcGF0Y2ggZmlsZSBhbG9uZyB3aXRoIHRoZSBiaW5hcmllcyxcblxuICAgMi4gYWRkIHNwZWNpYWwgdmVyc2lvbiBpZGVudGlmaWNhdGlvbiB0byBkaXN0aW5ndWlzaCB5b3VyIHZlcnNpb24gaW4gYWRkaXRpb24gdG8gdGhlIGJhc2UgcmVsZWFzZSB2ZXJzaW9uIG51bWJlcixcblxuICAgMy4gcHJvdmlkZSB5b3VyIG5hbWUgYW5kIGFkZHJlc3MgYXMgdGhlIHByaW1hcnkgY29udGFjdCBmb3IgdGhlIHN1cHBvcnQgb2YgeW91ciBtb2RpZmllZCB2ZXJzaW9uLCBhbmRcblxuICAgNC4gcmV0YWluIG91ciBjb250YWN0IGluZm9ybWF0aW9uIGluIHJlZ2FyZCB0byB1c2Ugb2YgdGhlIGJhc2Ugc29mdHdhcmUuXG5cblBlcm1pc3Npb24gdG8gZGlzdHJpYnV0ZSB0aGUgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgc291cmNlIGNvZGUgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIHNvdXJjZSBtb2RpZmljYXRpb25zIGluIHRoZSBmb3JtIG9mIGEgcGF0Y2ggZmlsZSBpcyBncmFudGVkIHdpdGggc2FtZSBwcm92aXNpb25zIDIgdGhyb3VnaCA0IGZvciBiaW5hcnkgZGlzdHJpYnV0aW9ucy5cblxuVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBcImFzIGlzXCIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcuIl0sImxpY2Vuc2VJZHMiOlsiZ251cGxvdCJdLCJrZXl3b3JkcyI6WyJjb3B5cmlnaHQgMTk4NiAxOTkzIiwiMTk4NiAxOTkzIDE5OTgiLCIxOTkzIDE5OTggMjAwNCIsIjE5OTggMjAwNCB0aG9tYXMiLCIyMDA0IHRob21hcyB3aWxsaWFtcyIsInRob21hcyB3aWxsaWFtcyBjb2xpbiIsIndpbGxpYW1zIGNvbGluIGtlbGxleSIsImNvbGluIGtlbGxleSBwZXJtaXNzaW9uIiwia2VsbGV5IHBlcm1pc3Npb24gdG8iLCJpcyBncmFudGVkIGJ1dCIsImdyYW50ZWQgYnV0IG5vdCIsImJ1dCBub3QgdGhlIiwibm90IHRoZSByaWdodCIsImRpc3RyaWJ1dGUgdGhlIGNvbXBsZXRlIiwidGhlIGNvbXBsZXRlIG1vZGlmaWVkIiwiY29tcGxldGUgbW9kaWZpZWQgc291cmNlIiwic291cmNlIGNvZGUgbW9kaWZpY2F0aW9ucyIsImNvZGUgbW9kaWZpY2F0aW9ucyBhcmUiLCJtb2RpZmljYXRpb25zIGFyZSB0byIsImFyZSB0byBiZSIsImRpc3RyaWJ1dGVkIGFzIHBhdGNoZXMiLCJ0byB0aGUgcmVsZWFzZWQiLCJyZWxlYXNlZCB2ZXJzaW9uIHBlcm1pc3Npb24iLCJ2ZXJzaW9uIHBlcm1pc3Npb24gdG8iLCJ0byBkaXN0cmlidXRlIGJpbmFyaWVzIiwiZGlzdHJpYnV0ZSBiaW5hcmllcyBwcm9kdWNlZCIsImJpbmFyaWVzIHByb2R1Y2VkIGJ5IiwicHJvZHVjZWQgYnkgY29tcGlsaW5nIiwiYnkgY29tcGlsaW5nIG1vZGlmaWVkIiwiY29tcGlsaW5nIG1vZGlmaWVkIHNvdXJjZXMiLCJtb2RpZmllZCBzb3VyY2VzIGlzIiwic291cmNlcyBpcyBncmFudGVkIiwiZ3JhbnRlZCBwcm92aWRlZCB5b3UiLCJwcm92aWRlZCB5b3UgMSIsInlvdSAxIGRpc3RyaWJ1dGUiLCIxIGRpc3RyaWJ1dGUgdGhlIiwiZGlzdHJpYnV0ZSB0aGUgY29ycmVzcG9uZGluZyIsInNvdXJjZSBtb2RpZmljYXRpb25zIGZyb20iLCJtb2RpZmljYXRpb25zIGZyb20gdGhlIiwiZnJvbSB0aGUgcmVsZWFzZWQiLCJyZWxlYXNlZCB2ZXJzaW9uIGluIiwicGF0Y2ggZmlsZSBhbG9uZyIsIndpdGggdGhlIGJpbmFyaWVzIiwidGhlIGJpbmFyaWVzIDIiLCJiaW5hcmllcyAyIGFkZCIsIjIgYWRkIHNwZWNpYWwiLCJhZGQgc3BlY2lhbCB2ZXJzaW9uIiwic3BlY2lhbCB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uIiwidmVyc2lvbiBpZGVudGlmaWNhdGlvbiB0byIsImlkZW50aWZpY2F0aW9uIHRvIGRpc3Rpbmd1aXNoIiwidG8gZGlzdGluZ3Vpc2ggeW91ciIsImRpc3Rpbmd1aXNoIHlvdXIgdmVyc2lvbiIsInlvdXIgdmVyc2lvbiBpbiIsInRvIHRoZSBiYXNlIiwidGhlIGJhc2UgcmVsZWFzZSIsImJhc2UgcmVsZWFzZSB2ZXJzaW9uIiwicmVsZWFzZSB2ZXJzaW9uIG51bWJlciIsIm51bWJlciAzIHByb3ZpZGUiLCIzIHByb3ZpZGUgeW91ciIsInByb3ZpZGUgeW91ciBuYW1lIiwibmFtZSBhbmQgYWRkcmVzcyIsImFuZCBhZGRyZXNzIGFzIiwiYWRkcmVzcyBhcyB0aGUiLCJwcmltYXJ5IGNvbnRhY3QgZm9yIiwiY29udGFjdCBmb3IgdGhlIiwiZm9yIHRoZSBzdXBwb3J0IiwidGhlIHN1cHBvcnQgb2YiLCJzdXBwb3J0IG9mIHlvdXIiLCJ2ZXJzaW9uIGFuZCA0IiwiYW5kIDQgcmV0YWluIiwiNCByZXRhaW4gb3VyIiwicmV0YWluIG91ciBjb250YWN0Iiwib3VyIGNvbnRhY3QgaW5mb3JtYXRpb24iLCJjb250YWN0IGluZm9ybWF0aW9uIGluIiwiaW5mb3JtYXRpb24gaW4gcmVnYXJkIiwidGhlIGJhc2Ugc29mdHdhcmUiLCJiYXNlIHNvZnR3YXJlIHBlcm1pc3Npb24iLCJzb2Z0d2FyZSBwZXJtaXNzaW9uIHRvIiwiZGlzdHJpYnV0ZSB0aGUgcmVsZWFzZWQiLCJhbG9uZyB3aXRoIGNvcnJlc3BvbmRpbmciLCJ3aXRoIGNvcnJlc3BvbmRpbmcgc291cmNlIiwic291cmNlIG1vZGlmaWNhdGlvbnMgaW4iLCJwYXRjaCBmaWxlIGlzIiwiZmlsZSBpcyBncmFudGVkIiwiaXMgZ3JhbnRlZCB3aXRoIiwiZ3JhbnRlZCB3aXRoIHNhbWUiLCJ3aXRoIHNhbWUgcHJvdmlzaW9ucyIsInNhbWUgcHJvdmlzaW9ucyAyIiwicHJvdmlzaW9ucyAyIHRocm91Z2giLCIyIHRocm91Z2ggNCIsInRocm91Z2ggNCBmb3IiLCI0IGZvciBiaW5hcnkiLCJmb3IgYmluYXJ5IGRpc3RyaWJ1dGlvbnMiLCJiaW5hcnkgZGlzdHJpYnV0aW9ucyB0aGlzIiwiZGlzdHJpYnV0aW9ucyB0aGlzIHNvZnR3YXJlIiwiaW1wbGllZCB3YXJyYW50eSB0byIsIndhcnJhbnR5IHRvIHRoZSIsImNvcHlyaWdodCAxOTg2IDE5OTMgMTk5OCIsIjE5ODYgMTk5MyAxOTk4IDIwMDQiLCIxOTkzIDE5OTggMjAwNCB0aG9tYXMiLCIxOTk4IDIwMDQgdGhvbWFzIHdpbGxpYW1zIiwiMjAwNCB0aG9tYXMgd2lsbGlhbXMgY29saW4iLCJ0aG9tYXMgd2lsbGlhbXMgY29saW4ga2VsbGV5Iiwid2lsbGlhbXMgY29saW4ga2VsbGV5IHBlcm1pc3Npb24iLCJjb2xpbiBrZWxsZXkgcGVybWlzc2lvbiB0byIsImtlbGxleSBwZXJtaXNzaW9uIHRvIHVzZSIsInBlcm1pc3Npb24gdG8gbW9kaWZ5IHRoZSIsIm1vZGlmeSB0aGUgc29mdHdhcmUgaXMiLCJ0aGUgc29mdHdhcmUgaXMgZ3JhbnRlZCIsInNvZnR3YXJlIGlzIGdyYW50ZWQgYnV0IiwiaXMgZ3JhbnRlZCBidXQgbm90IiwiZ3JhbnRlZCBidXQgbm90IHRoZSIsImJ1dCBub3QgdGhlIHJpZ2h0Iiwibm90IHRoZSByaWdodCB0byIsInJpZ2h0IHRvIGRpc3RyaWJ1dGUgdGhlIiwidG8gZGlzdHJpYnV0ZSB0aGUgY29tcGxldGUiLCJkaXN0cmlidXRlIHRoZSBjb21wbGV0ZSBtb2RpZmllZCIsInRoZSBjb21wbGV0ZSBtb2RpZmllZCBzb3VyY2UiLCJjb21wbGV0ZSBtb2RpZmllZCBzb3VyY2UgY29kZSIsIm1vZGlmaWVkIHNvdXJjZSBjb2RlIG1vZGlmaWNhdGlvbnMiLCJzb3VyY2UgY29kZSBtb2RpZmljYXRpb25zIGFyZSIsImNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgdG8iLCJtb2RpZmljYXRpb25zIGFyZSB0byBiZSIsImFyZSB0byBiZSBkaXN0cmlidXRlZCIsInRvIGJlIGRpc3RyaWJ1dGVkIGFzIiwiYmUgZGlzdHJpYnV0ZWQgYXMgcGF0Y2hlcyIsImRpc3RyaWJ1dGVkIGFzIHBhdGNoZXMgdG8iLCJhcyBwYXRjaGVzIHRvIHRoZSIsInBhdGNoZXMgdG8gdGhlIHJlbGVhc2VkIiwidG8gdGhlIHJlbGVhc2VkIHZlcnNpb24iLCJ0aGUgcmVsZWFzZWQgdmVyc2lvbiBwZXJtaXNzaW9uIiwicmVsZWFzZWQgdmVyc2lvbiBwZXJtaXNzaW9uIHRvIiwidmVyc2lvbiBwZXJtaXNzaW9uIHRvIGRpc3RyaWJ1dGUiLCJwZXJtaXNzaW9uIHRvIGRpc3RyaWJ1dGUgYmluYXJpZXMiLCJ0byBkaXN0cmlidXRlIGJpbmFyaWVzIHByb2R1Y2VkIiwiZGlzdHJpYnV0ZSBiaW5hcmllcyBwcm9kdWNlZCBieSIsImJpbmFyaWVzIHByb2R1Y2VkIGJ5IGNvbXBpbGluZyIsInByb2R1Y2VkIGJ5IGNvbXBpbGluZyBtb2RpZmllZCIsImJ5IGNvbXBpbGluZyBtb2RpZmllZCBzb3VyY2VzIiwiY29tcGlsaW5nIG1vZGlmaWVkIHNvdXJjZXMgaXMiLCJtb2RpZmllZCBzb3VyY2VzIGlzIGdyYW50ZWQiLCJzb3VyY2VzIGlzIGdyYW50ZWQgcHJvdmlkZWQiLCJpcyBncmFudGVkIHByb3ZpZGVkIHlvdSIsImdyYW50ZWQgcHJvdmlkZWQgeW91IDEiLCJwcm92aWRlZCB5b3UgMSBkaXN0cmlidXRlIiwieW91IDEgZGlzdHJpYnV0ZSB0aGUiLCIxIGRpc3RyaWJ1dGUgdGhlIGNvcnJlc3BvbmRpbmciLCJkaXN0cmlidXRlIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSIsInRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBtb2RpZmljYXRpb25zIiwiY29ycmVzcG9uZGluZyBzb3VyY2UgbW9kaWZpY2F0aW9ucyBmcm9tIiwic291cmNlIG1vZGlmaWNhdGlvbnMgZnJvbSB0aGUiLCJtb2RpZmljYXRpb25zIGZyb20gdGhlIHJlbGVhc2VkIiwiZnJvbSB0aGUgcmVsZWFzZWQgdmVyc2lvbiIsInRoZSByZWxlYXNlZCB2ZXJzaW9uIGluIiwicmVsZWFzZWQgdmVyc2lvbiBpbiB0aGUiLCJ2ZXJzaW9uIGluIHRoZSBmb3JtIiwiYSBwYXRjaCBmaWxlIGFsb25nIiwicGF0Y2ggZmlsZSBhbG9uZyB3aXRoIiwiZmlsZSBhbG9uZyB3aXRoIHRoZSIsImFsb25nIHdpdGggdGhlIGJpbmFyaWVzIiwid2l0aCB0aGUgYmluYXJpZXMgMiIsInRoZSBiaW5hcmllcyAyIGFkZCIsImJpbmFyaWVzIDIgYWRkIHNwZWNpYWwiLCIyIGFkZCBzcGVjaWFsIHZlcnNpb24iLCJhZGQgc3BlY2lhbCB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uIiwic3BlY2lhbCB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uIHRvIiwidmVyc2lvbiBpZGVudGlmaWNhdGlvbiB0byBkaXN0aW5ndWlzaCIsImlkZW50aWZpY2F0aW9uIHRvIGRpc3Rpbmd1aXNoIHlvdXIiLCJ0byBkaXN0aW5ndWlzaCB5b3VyIHZlcnNpb24iLCJkaXN0aW5ndWlzaCB5b3VyIHZlcnNpb24gaW4iLCJ5b3VyIHZlcnNpb24gaW4gYWRkaXRpb24iLCJ2ZXJzaW9uIGluIGFkZGl0aW9uIHRvIiwiYWRkaXRpb24gdG8gdGhlIGJhc2UiLCJ0byB0aGUgYmFzZSByZWxlYXNlIiwidGhlIGJhc2UgcmVsZWFzZSB2ZXJzaW9uIiwiYmFzZSByZWxlYXNlIHZlcnNpb24gbnVtYmVyIiwicmVsZWFzZSB2ZXJzaW9uIG51bWJlciAzIiwidmVyc2lvbiBudW1iZXIgMyBwcm92aWRlIiwibnVtYmVyIDMgcHJvdmlkZSB5b3VyIiwiMyBwcm92aWRlIHlvdXIgbmFtZSIsInByb3ZpZGUgeW91ciBuYW1lIGFuZCIsInlvdXIgbmFtZSBhbmQgYWRkcmVzcyIsIm5hbWUgYW5kIGFkZHJlc3MgYXMiLCJhbmQgYWRkcmVzcyBhcyB0aGUiLCJhZGRyZXNzIGFzIHRoZSBwcmltYXJ5IiwiYXMgdGhlIHByaW1hcnkgY29udGFjdCIsInRoZSBwcmltYXJ5IGNvbnRhY3QgZm9yIiwicHJpbWFyeSBjb250YWN0IGZvciB0aGUiLCJjb250YWN0IGZvciB0aGUgc3VwcG9ydCIsImZvciB0aGUgc3VwcG9ydCBvZiIsInRoZSBzdXBwb3J0IG9mIHlvdXIiLCJzdXBwb3J0IG9mIHlvdXIgbW9kaWZpZWQiLCJ5b3VyIG1vZGlmaWVkIHZlcnNpb24gYW5kIiwibW9kaWZpZWQgdmVyc2lvbiBhbmQgNCIsInZlcnNpb24gYW5kIDQgcmV0YWluIiwiYW5kIDQgcmV0YWluIG91ciIsIjQgcmV0YWluIG91ciBjb250YWN0IiwicmV0YWluIG91ciBjb250YWN0IGluZm9ybWF0aW9uIiwib3VyIGNvbnRhY3QgaW5mb3JtYXRpb24gaW4iLCJjb250YWN0IGluZm9ybWF0aW9uIGluIHJlZ2FyZCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGUgU0ZMIExpY2Vuc2UgQWdyZWVtZW50XG5cblRoaXMgbGljZW5zZSBhZ3JlZW1lbnQgY292ZXJzIHlvdXIgdXNlIG9mIHRoZSBpTWF0aXggU1RBTkRBUkQgRlVOQ1RJT04gTElCUkFSWSAoU0ZMKSwgaXRzIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uLCBhbmQgZXhlY3V0YWJsZSBmaWxlcywgaGVyZWluYWZ0ZXIgcmVmZXJyZWQgdG8gYXMgXCJ0aGUgUHJvZHVjdFwiLlxuXG5UaGUgUHJvZHVjdCBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBpTWF0aXggQ29ycG9yYXRpb24uIFlvdSBtYXkgdXNlIGl0IGFuZCBkaXN0cmlidXRlIGl0IGFjY29yZGluZyB0byB0aGlzIGZvbGxvd2luZyBMaWNlbnNlIEFncmVlbWVudC4gSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zLCBwbGVhc2UgcmVtb3ZlIHRoZSBQcm9kdWN0IGZyb20geW91ciBzeXN0ZW0uIEJ5IGluY29ycG9yYXRpbmcgdGhlIFByb2R1Y3QgaW4geW91ciB3b3JrIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZHVjdCB0byBvdGhlcnMgeW91IGltcGxpY2l0bHkgYWdyZWUgdG8gdGhlc2UgbGljZW5zZSB0ZXJtcy5cblxuU3RhdGVtZW50IE9mIENvcHlyaWdodFxuXG5UaGUgUHJvZHVjdCBpcywgYW5kIHJlbWFpbnMsIENvcHlyaWdodCDCqSAxOTkxLTIwMDAgaU1hdGl4IENvcnBvcmF0aW9uLCB3aXRoIGV4Y2VwdGlvbiBvZiBzcGVjaWZpYyBjb3B5cmlnaHRzIGFzIG5vdGVkIGluIHRoZSBpbmRpdmlkdWFsIHNvdXJjZSBmaWxlcy5cblxuQ29uZGl0aW9ucyBPZiBVc2VcblxuICAgWW91IGRvIG5vdCBuZWVkIHRvIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZHVjdCBhcyBwYXJ0IG9mIHlvdXIgcHJvZHVjdC4gSG93ZXZlciwgeW91IG11c3QgZG8gb25lIG9mIHRoZXNlIHRoaW5ncyB0byBjb21wbHkgd2l0aCB0aGUgUHJvZHVjdCBMaWNlbnNlIEFncmVlbWVudDpcblxuICAgICAgMS4gUHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIFByb2R1Y3QgbW9kdWxlcyB0aGF0IHlvdSB1c2UsIG9yXG5cbiAgICAgIDIuIE1ha2UgeW91ciBwcm9kdWN0IGZyZWVseSBhdmFpbGFibGUgYWNjb3JkaW5nIHRvIGEgbGljZW5zZSBzaW1pbGFyIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgb3IgdGhlIFBlcmwgQXJ0aXN0aWMgTGljZW5zZSwgb3JcblxuICAgICAgMy4gQWRkIHRoaXMgcGhyYXNlIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB5b3VyIHByb2R1Y3Q6IFwiVGhpcyBwcm9kdWN0IHVzZXMgcGFydHMgb2YgdGhlIGlNYXRpeCBTRkwsIENvcHlyaWdodCDCqSAxOTkxLTIwMDAgaU1hdGl4IENvcnBvcmF0aW9uIFx1MDAzY2h0dHA6Ly93d3cuaW1hdGl4LmNvbVx1MDAzZVwiLlxuXG5SaWdodHMgT2YgVXNhZ2VcblxuICAgWW91IG1heSBmcmVlbHkgYW5kIGF0IG5vIGNvc3QgdXNlIHRoZSBQcm9kdWN0IGluIGFueSBwcm9qZWN0LCBjb21tZXJjaWFsLCBhY2FkZW1pYywgbWlsaXRhcnksIG9yIHByaXZhdGUsIHNvIGxvbmcgYXMgeW91IHJlc3BlY3QgdGhlIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgYWZmZWN0IGFueSBzb2Z0d2FyZSBleGNlcHQgdGhlIFByb2R1Y3QuIEluIHBhcnRpY3VsYXIsIGFueSBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlIFByb2R1Y3QgZG9lcyBub3QgaXRzZWxmIGZhbGwgdW5kZXIgdGhlIExpY2Vuc2UgQWdyZWVtZW50LlxuXG4gICBZb3UgbWF5IG1vZGlmeSBhbnkgcGFydCBvZiB0aGUgUHJvZHVjdCwgaW5jbHVkaW5nIHNvdXJjZXMgYW5kIGRvY3VtZW50YXRpb24sIGV4Y2VwdCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCB3aGljaCB5b3UgbWF5IG5vdCBtb2RpZnkuXG5cbiAgIFlvdSBtdXN0IGNsZWFybHkgaW5kaWNhdGUgYW55IG1vZGlmaWNhdGlvbnMgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUuIFRoZSB1c2VyIG9mIGFueSBtb2RpZmllZCBQcm9kdWN0IGNvZGUgbXVzdCBrbm93IHRoYXQgdGhlIHNvdXJjZSBmaWxlIGlzIG5vdCBvcmlnaW5hbC5cblxuICAgXG5cbiAgIEF0IHlvdXIgZGlzY3JldGlvbiwgeW91IG1heSByZXdyaXRlIG9yIHJldXNlIGFueSBwYXJ0IG9mIHRoZSBQcm9kdWN0IHNvIHRoYXQgeW91ciBkZXJpdmVkIGNvZGUgaXMgbm90IG9idmlvdXNseSBwYXJ0IG9mIHRoZSBQcm9kdWN0LiBUaGlzIGRlcml2ZWQgY29kZSBkb2VzIG5vdCBmYWxsIHVuZGVyIHRoZSBQcm9kdWN0IExpY2Vuc2UgQWdyZWVtZW50IGRpcmVjdGx5LCBidXQgeW91IG11c3QgaW5jbHVkZSBhIGNyZWRpdCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSBpbmRpY2F0aW5nIHRoZSBvcmlnaW5hbCBhdXRob3JzaGlwIGFuZCBzb3VyY2Ugb2YgdGhlIGNvZGUsIGFuZCBhIHN0YXRlbWVudCBvZiBjb3B5cmlnaHQgYXMgZm9sbG93czpcblxuICAgXCJQYXJ0cyBjb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBpTWF0aXggQ29ycG9yYXRpb24uXCJcblxuUmlnaHRzIE9mIERpc3RyaWJ1dGlvblxuXG4gICBZb3UgbWF5IGZyZWVseSBkaXN0cmlidXRlIHRoZSBQcm9kdWN0LCBvciBhbnkgc3Vic2V0IG9mIHRoZSBQcm9kdWN0LCBieSBhbnkgbWVhbnMuIFRoZSBMaWNlbnNlLCBpbiB0aGUgZm9ybSBvZiB0aGUgZmlsZSBjYWxsZWQgXCJMSUNFTlNFLlRYVFwiIG11c3QgYWNjb21wYW55IGFueSBzdWNoIGRpc3RyaWJ1dGlvbi5cblxuICAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZHVjdCwgZm9yIHByb3ZpZGluZyBhIHdhcnJhbnR5IG9uIHRoZSBQcm9kdWN0LCBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFByb2R1Y3QsIG9yIGZvciBhbnkgb3RoZXIgc2VydmljZSBwcm92aWRlZCBpbiByZWxhdGlvbiB0byB0aGUgUHJvZHVjdC4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYXNrIG91ciBwZXJtaXNzaW9uIGZvciBhbnkgb2YgdGhlc2UgYWN0aXZpdGllcy5cblxuICAgQXQgbm8gdGltZSB3aWxsIGlNYXRpeCBhc3NvY2lhdGUgaXRzZWxmIHdpdGggYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdCBleGNlcHQgdGhhdCBzdXBwbGllZCBmcm9tIHRoZSBJbnRlcm5ldCBzaXRlIGh0dHA6Ly93d3cuaW1hdGl4LmNvbS5cblxuRGlzY2xhaW1lciBPZiBXYXJyYW50eVxuXG4gICBUaGUgUHJvZHVjdCBpcyBwcm92aWRlZCBhcyBmcmVlIHNvZnR3YXJlLCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLiBJdCBpcyBwcm92aWRlZCBcImFzLWlzXCIsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgUHJvZHVjdCBpcyB3aXRoIHlvdS4gU2hvdWxkIHRoZSBQcm9kdWN0IHByb3ZlIGRlZmVjdGl2ZSwgdGhlIGZ1bGwgY29zdCBvZiByZXBhaXIsIHNlcnZpY2luZywgb3IgY29ycmVjdGlvbiBsaWVzIHdpdGggeW91LiJdLCJsaWNlbnNlSWRzIjpbImlNYXRpeCJdLCJrZXl3b3JkcyI6WyJ0aGUgc2ZsIGxpY2Vuc2UiLCJzZmwgbGljZW5zZSBhZ3JlZW1lbnQiLCJsaWNlbnNlIGFncmVlbWVudCBjb3ZlcnMiLCJhZ3JlZW1lbnQgY292ZXJzIHlvdXIiLCJjb3ZlcnMgeW91ciB1c2UiLCJ0aGUgaW1hdGl4IHN0YW5kYXJkIiwiaW1hdGl4IHN0YW5kYXJkIGZ1bmN0aW9uIiwic3RhbmRhcmQgZnVuY3Rpb24gbGlicmFyeSIsImZ1bmN0aW9uIGxpYnJhcnkgc2ZsIiwibGlicmFyeSBzZmwgaXRzIiwic2ZsIGl0cyBzb3VyY2UiLCJkb2N1bWVudGF0aW9uIGFuZCBleGVjdXRhYmxlIiwiZXhlY3V0YWJsZSBmaWxlcyBoZXJlaW5hZnRlciIsImZpbGVzIGhlcmVpbmFmdGVyIHJlZmVycmVkIiwiaGVyZWluYWZ0ZXIgcmVmZXJyZWQgdG8iLCJhcyB0aGUgcHJvZHVjdCIsInRoZSBwcm9kdWN0IHRoZSIsInByb2R1Y3QgdGhlIHByb2R1Y3QiLCJwcm9kdWN0IGlzIGNvcHlyaWdodCIsImltYXRpeCBjb3Jwb3JhdGlvbiB5b3UiLCJjb3Jwb3JhdGlvbiB5b3UgbWF5IiwidXNlIGl0IGFuZCIsIml0IGFuZCBkaXN0cmlidXRlIiwiZGlzdHJpYnV0ZSBpdCBhY2NvcmRpbmciLCJpdCBhY2NvcmRpbmcgdG8iLCJ0byB0aGlzIGZvbGxvd2luZyIsInRoaXMgZm9sbG93aW5nIGxpY2Vuc2UiLCJmb2xsb3dpbmcgbGljZW5zZSBhZ3JlZW1lbnQiLCJsaWNlbnNlIGFncmVlbWVudCBpZiIsInRlcm1zIHBsZWFzZSByZW1vdmUiLCJwbGVhc2UgcmVtb3ZlIHRoZSIsInJlbW92ZSB0aGUgcHJvZHVjdCIsInRoZSBwcm9kdWN0IGZyb20iLCJwcm9kdWN0IGZyb20geW91ciIsImZyb20geW91ciBzeXN0ZW0iLCJ5b3VyIHN5c3RlbSBieSIsInN5c3RlbSBieSBpbmNvcnBvcmF0aW5nIiwiYnkgaW5jb3Jwb3JhdGluZyB0aGUiLCJpbmNvcnBvcmF0aW5nIHRoZSBwcm9kdWN0IiwicHJvZHVjdCBpbiB5b3VyIiwieW91ciB3b3JrIG9yIiwid29yayBvciBkaXN0cmlidXRpbmciLCJ0aGUgcHJvZHVjdCB0byIsInByb2R1Y3QgdG8gb3RoZXJzIiwib3RoZXJzIHlvdSBpbXBsaWNpdGx5IiwieW91IGltcGxpY2l0bHkgYWdyZWUiLCJpbXBsaWNpdGx5IGFncmVlIHRvIiwiYWdyZWUgdG8gdGhlc2UiLCJ0byB0aGVzZSBsaWNlbnNlIiwibGljZW5zZSB0ZXJtcyBzdGF0ZW1lbnQiLCJ0ZXJtcyBzdGF0ZW1lbnQgb2YiLCJvZiBjb3B5cmlnaHQgdGhlIiwiY29weXJpZ2h0IHRoZSBwcm9kdWN0IiwicHJvZHVjdCBpcyBhbmQiLCJpcyBhbmQgcmVtYWlucyIsImFuZCByZW1haW5zIGNvcHlyaWdodCIsInJlbWFpbnMgY29weXJpZ2h0IDE5OTEiLCJpbWF0aXggY29ycG9yYXRpb24gd2l0aCIsImNvcnBvcmF0aW9uIHdpdGggZXhjZXB0aW9uIiwid2l0aCBleGNlcHRpb24gb2YiLCJleGNlcHRpb24gb2Ygc3BlY2lmaWMiLCJvZiBzcGVjaWZpYyBjb3B5cmlnaHRzIiwic3BlY2lmaWMgY29weXJpZ2h0cyBhcyIsImNvcHlyaWdodHMgYXMgbm90ZWQiLCJhcyBub3RlZCBpbiIsInRoZSBpbmRpdmlkdWFsIHNvdXJjZSIsImluZGl2aWR1YWwgc291cmNlIGZpbGVzIiwic291cmNlIGZpbGVzIGNvbmRpdGlvbnMiLCJmaWxlcyBjb25kaXRpb25zIG9mIiwib2YgdXNlIHlvdSIsInVzZSB5b3UgZG8iLCJuZWVkIHRvIHByb3ZpZGUiLCJ0aGUgcHJvZHVjdCBhcyIsInByb2R1Y3QgYXMgcGFydCIsIm9mIHlvdXIgcHJvZHVjdCIsInlvdXIgcHJvZHVjdCBob3dldmVyIiwidGhpbmdzIHRvIGNvbXBseSIsImFncmVlbWVudCAxIHByb3ZpZGUiLCIxIHByb3ZpZGUgdGhlIiwiY29kZSBmb3IgcHJvZHVjdCIsImZvciBwcm9kdWN0IG1vZHVsZXMiLCJwcm9kdWN0IG1vZHVsZXMgdGhhdCIsIm1vZHVsZXMgdGhhdCB5b3UiLCJ5b3UgdXNlIG9yIiwidXNlIG9yIDIiLCJvciAyIG1ha2UiLCIyIG1ha2UgeW91ciIsIm1ha2UgeW91ciBwcm9kdWN0IiwieW91ciBwcm9kdWN0IGZyZWVseSIsInByb2R1Y3QgZnJlZWx5IGF2YWlsYWJsZSIsImZyZWVseSBhdmFpbGFibGUgYWNjb3JkaW5nIiwiYXZhaWxhYmxlIGFjY29yZGluZyB0byIsImFjY29yZGluZyB0byBhIiwiYSBsaWNlbnNlIHNpbWlsYXIiLCJsaWNlbnNlIHNpbWlsYXIgdG8iLCJ0byB0aGUgZ251Iiwib3IgdGhlIHBlcmwiLCJ0aGUgcGVybCBhcnRpc3RpYyIsInBlcmwgYXJ0aXN0aWMgbGljZW5zZSIsImFydGlzdGljIGxpY2Vuc2Ugb3IiLCJsaWNlbnNlIG9yIDMiLCJvciAzIGFkZCIsIjMgYWRkIHRoaXMiLCJhZGQgdGhpcyBwaHJhc2UiLCJ0aGlzIHBocmFzZSB0byIsInBocmFzZSB0byB0aGUiLCJkb2N1bWVudGF0aW9uIGZvciB5b3VyIiwieW91ciBwcm9kdWN0IHRoaXMiLCJwcm9kdWN0IHRoaXMgcHJvZHVjdCIsInRoaXMgcHJvZHVjdCB1c2VzIiwicHJvZHVjdCB1c2VzIHBhcnRzIiwidXNlcyBwYXJ0cyBvZiIsInRoZSBpbWF0aXggc2ZsIiwiaW1hdGl4IHNmbCBjb3B5cmlnaHQiLCJzZmwgY29weXJpZ2h0IDE5OTEiLCJpbWF0aXggY29ycG9yYXRpb24gaHR0cCIsImNvcnBvcmF0aW9uIGh0dHAgd3d3IiwiaW1hdGl4IGNvbSByaWdodHMiLCJjb20gcmlnaHRzIG9mIiwicmlnaHRzIG9mIHVzYWdlIiwib2YgdXNhZ2UgeW91IiwidXNhZ2UgeW91IG1heSIsIm1heSBmcmVlbHkgYW5kIiwiZnJlZWx5IGFuZCBhdCIsIm5vIGNvc3QgdXNlIiwiY29zdCB1c2UgdGhlIiwicHJvZHVjdCBpbiBhbnkiLCJpbiBhbnkgcHJvamVjdCIsImFueSBwcm9qZWN0IGNvbW1lcmNpYWwiLCJwcm9qZWN0IGNvbW1lcmNpYWwgYWNhZGVtaWMiLCJjb21tZXJjaWFsIGFjYWRlbWljIG1pbGl0YXJ5IiwiYWNhZGVtaWMgbWlsaXRhcnkgb3IiLCJtaWxpdGFyeSBvciBwcml2YXRlIiwib3IgcHJpdmF0ZSBzbyIsInByaXZhdGUgc28gbG9uZyIsImFzIHlvdSByZXNwZWN0IiwieW91IHJlc3BlY3QgdGhlIiwicmVzcGVjdCB0aGUgbGljZW5zZSIsImFncmVlbWVudCB0aGUgbGljZW5zZSIsImFmZmVjdCBhbnkgc29mdHdhcmUiLCJhbnkgc29mdHdhcmUgZXhjZXB0Iiwic29mdHdhcmUgZXhjZXB0IHRoZSIsImV4Y2VwdCB0aGUgcHJvZHVjdCIsInByb2R1Y3QgaW4gcGFydGljdWxhciIsImluIHBhcnRpY3VsYXIgYW55IiwicGFydGljdWxhciBhbnkgYXBwbGljYXRpb24iLCJhbnkgYXBwbGljYXRpb24gdGhhdCIsInVzZXMgdGhlIHByb2R1Y3QiLCJ0aGUgcHJvZHVjdCBkb2VzIiwiZG9lcyBub3QgaXRzZWxmIiwibm90IGl0c2VsZiBmYWxsIiwiaXRzZWxmIGZhbGwgdW5kZXIiLCJtYXkgbW9kaWZ5IGFueSIsIm1vZGlmeSBhbnkgcGFydCIsInRoZSBwcm9kdWN0IGluY2x1ZGluZyIsInByb2R1Y3QgaW5jbHVkaW5nIHNvdXJjZXMiLCJpbmNsdWRpbmcgc291cmNlcyBhbmQiLCJzb3VyY2VzIGFuZCBkb2N1bWVudGF0aW9uIiwiYW5kIGRvY3VtZW50YXRpb24gZXhjZXB0IiwiZG9jdW1lbnRhdGlvbiBleGNlcHQgdGhpcyIsImV4Y2VwdCB0aGlzIGxpY2Vuc2UiLCJsaWNlbnNlIGFncmVlbWVudCB3aGljaCIsImFncmVlbWVudCB3aGljaCB5b3UiLCJub3QgbW9kaWZ5IHlvdSIsIm1vZGlmeSB5b3UgbXVzdCIsImNsZWFybHkgaW5kaWNhdGUgYW55IiwiaW5kaWNhdGUgYW55IG1vZGlmaWNhdGlvbnMiLCJhbnkgbW9kaWZpY2F0aW9ucyBhdCIsIm1vZGlmaWNhdGlvbnMgYXQgdGhlIiwic291cmNlIGZpbGUgdGhlIiwiZmlsZSB0aGUgdXNlciIsInVzZXIgb2YgYW55IiwiYW55IG1vZGlmaWVkIHByb2R1Y3QiLCJtb2RpZmllZCBwcm9kdWN0IGNvZGUiLCJwcm9kdWN0IGNvZGUgbXVzdCIsImNvZGUgbXVzdCBrbm93IiwibXVzdCBrbm93IHRoYXQiLCJrbm93IHRoYXQgdGhlIiwidGhlIHNvdXJjZSBmaWxlIiwic291cmNlIGZpbGUgaXMiLCJpcyBub3Qgb3JpZ2luYWwiLCJub3Qgb3JpZ2luYWwgYXQiLCJvcmlnaW5hbCBhdCB5b3VyIiwieW91ciBkaXNjcmV0aW9uIHlvdSIsImRpc2NyZXRpb24geW91IG1heSIsInlvdSBtYXkgcmV3cml0ZSIsIm1heSByZXdyaXRlIG9yIiwicmV3cml0ZSBvciByZXVzZSIsIm9yIHJldXNlIGFueSIsInJldXNlIGFueSBwYXJ0IiwidGhlIHByb2R1Y3Qgc28iLCJwcm9kdWN0IHNvIHRoYXQiLCJzbyB0aGF0IHlvdXIiLCJ0aGF0IHlvdXIgZGVyaXZlZCIsInlvdXIgZGVyaXZlZCBjb2RlIiwiZGVyaXZlZCBjb2RlIGlzIiwiaXMgbm90IG9idmlvdXNseSIsIm5vdCBvYnZpb3VzbHkgcGFydCIsIm9idmlvdXNseSBwYXJ0IG9mIiwidGhlIHByb2R1Y3QgdGhpcyJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJQTkcgUmVmZXJlbmNlIExpYnJhcnkgTGljZW5zZSB2ZXJzaW9uIDIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFxuXG4gICAqIENvcHlyaWdodCAoYykgMTk5NS0yMDE4IFRoZSBQTkcgUmVmZXJlbmNlIExpYnJhcnkgQXV0aG9ycy5cblxuICAgKiBDb3B5cmlnaHQgKGMpIDIwMTggQ29zbWluIFRydXRhLlxuXG4gICAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyLCAyMDA0LCAyMDA2LTIwMTggR2xlbm4gUmFuZGVycy1QZWhyc29uLlxuXG4gICAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk3IEFuZHJlYXMgRGlsZ2VyLlxuXG4gICAqIENvcHlyaWdodCAoYykgMTk5NS0xOTk2IEd1eSBFcmljIFNjaGFsbmF0LCBHcm91cCA0MiwgSW5jLlxuXG5UaGUgc29mdHdhcmUgaXMgc3VwcGxpZWQgXCJhcyBpc1wiLCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCB0aXRsZSwgYW5kIG5vbi1pbmZyaW5nZW1lbnQuIEluIG5vIGV2ZW4gc2hhbGwgdGhlIENvcHlyaWdodCBvd25lcnMsIG9yIGFueW9uZSBkaXN0cmlidXRpbmcgdGhlIHNvZnR3YXJlLCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIG9yIG90aGVyIGxpYWJpbGl0eSwgd2hldGhlciBpbiBjb250cmFjdCwgdG9ydCBvciBvdGhlcndpc2UsIGFyaXNpbmcgZnJvbSwgb3V0IG9mLCBvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIHNvZnR3YXJlLCBvciB0aGUgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoZSBzb2Z0d2FyZSwgZXZlbiBpZiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSwgb3IgcG9ydGlvbnMgaGVyZW9mLCBmb3IgYW55IHB1cnBvc2UsIHdpdGhvdXQgZmVlLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuXG4gICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdCBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUgYXBwcmVjaWF0ZWQsIGJ1dCBpcyBub3QgcmVxdWlyZWQuXG5cbiAgIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cblxuICAgMy4gVGhpcyBDb3B5cmlnaHQgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBvciBhbHRlcmVkIHNvdXJjZSBkaXN0cmlidXRpb24uIl0sImxpY2Vuc2VJZHMiOlsibGlicG5nLTIuMCJdLCJrZXl3b3JkcyI6WyJyZWZlcmVuY2UgbGlicmFyeSBsaWNlbnNlIiwibGlicmFyeSBsaWNlbnNlIHZlcnNpb24iLCJ2ZXJzaW9uIDIgY29weXJpZ2h0IiwiYyAxOTk1IDIwMTgiLCIxOTk1IDIwMTggdGhlIiwiMjAxOCB0aGUgcG5nIiwicmVmZXJlbmNlIGxpYnJhcnkgYXV0aG9ycyIsImxpYnJhcnkgYXV0aG9ycyBjb3B5cmlnaHQiLCJhdXRob3JzIGNvcHlyaWdodCBjIiwiYyAyMDE4IGNvc21pbiIsIjIwMTggY29zbWluIHRydXRhIiwiY29zbWluIHRydXRhIGNvcHlyaWdodCIsInRydXRhIGNvcHlyaWdodCBjIiwiMjAwMCAyMDAyIDIwMDQiLCIyMDAyIDIwMDQgMjAwNiIsIjIwMDQgMjAwNiAyMDE4IiwiMjAwNiAyMDE4IGdsZW5uIiwiMjAxOCBnbGVubiByYW5kZXJzIiwicmFuZGVycyBwZWhyc29uIGNvcHlyaWdodCIsInBlaHJzb24gY29weXJpZ2h0IGMiLCIxOTk3IGFuZHJlYXMgZGlsZ2VyIiwiYW5kcmVhcyBkaWxnZXIgY29weXJpZ2h0IiwiZGlsZ2VyIGNvcHlyaWdodCBjIiwiNDIgaW5jIHRoZSIsImluYyB0aGUgc29mdHdhcmUiLCJpbiBubyBldmVuIiwibm8gZXZlbiBzaGFsbCIsImV2ZW4gc2hhbGwgdGhlIiwidGhlIGNvcHlyaWdodCBvd25lcnMiLCJjb3B5cmlnaHQgb3duZXJzIG9yIiwib3duZXJzIG9yIGFueW9uZSIsInBuZyByZWZlcmVuY2UgbGlicmFyeSBsaWNlbnNlIiwicmVmZXJlbmNlIGxpYnJhcnkgbGljZW5zZSB2ZXJzaW9uIiwibGlicmFyeSBsaWNlbnNlIHZlcnNpb24gMiIsImxpY2Vuc2UgdmVyc2lvbiAyIGNvcHlyaWdodCIsInZlcnNpb24gMiBjb3B5cmlnaHQgYyIsIjIgY29weXJpZ2h0IGMgMTk5NSIsImNvcHlyaWdodCBjIDE5OTUgMjAxOCIsImMgMTk5NSAyMDE4IHRoZSIsIjE5OTUgMjAxOCB0aGUgcG5nIiwiMjAxOCB0aGUgcG5nIHJlZmVyZW5jZSIsInBuZyByZWZlcmVuY2UgbGlicmFyeSBhdXRob3JzIiwicmVmZXJlbmNlIGxpYnJhcnkgYXV0aG9ycyBjb3B5cmlnaHQiLCJsaWJyYXJ5IGF1dGhvcnMgY29weXJpZ2h0IGMiLCJhdXRob3JzIGNvcHlyaWdodCBjIDIwMTgiLCJjb3B5cmlnaHQgYyAyMDE4IGNvc21pbiIsImMgMjAxOCBjb3NtaW4gdHJ1dGEiLCIyMDE4IGNvc21pbiB0cnV0YSBjb3B5cmlnaHQiLCJjb3NtaW4gdHJ1dGEgY29weXJpZ2h0IGMiLCJ0cnV0YSBjb3B5cmlnaHQgYyAyMDAwIiwiYyAyMDAwIDIwMDIgMjAwNCIsIjIwMDAgMjAwMiAyMDA0IDIwMDYiLCIyMDAyIDIwMDQgMjAwNiAyMDE4IiwiMjAwNCAyMDA2IDIwMTggZ2xlbm4iLCIyMDA2IDIwMTggZ2xlbm4gcmFuZGVycyIsIjIwMTggZ2xlbm4gcmFuZGVycyBwZWhyc29uIiwiZ2xlbm4gcmFuZGVycyBwZWhyc29uIGNvcHlyaWdodCIsInJhbmRlcnMgcGVocnNvbiBjb3B5cmlnaHQgYyIsInBlaHJzb24gY29weXJpZ2h0IGMgMTk5NiIsIjE5OTYgMTk5NyBhbmRyZWFzIGRpbGdlciIsIjE5OTcgYW5kcmVhcyBkaWxnZXIgY29weXJpZ2h0IiwiYW5kcmVhcyBkaWxnZXIgY29weXJpZ2h0IGMiLCJkaWxnZXIgY29weXJpZ2h0IGMgMTk5NSIsImdyb3VwIDQyIGluYyB0aGUiLCI0MiBpbmMgdGhlIHNvZnR3YXJlIiwiaW5jIHRoZSBzb2Z0d2FyZSBpcyIsInN1cHBsaWVkIGFzIGlzIHdpdGhvdXQiLCJpbmZyaW5nZW1lbnQgaW4gbm8gZXZlbiIsImluIG5vIGV2ZW4gc2hhbGwiLCJubyBldmVuIHNoYWxsIHRoZSIsImV2ZW4gc2hhbGwgdGhlIGNvcHlyaWdodCIsInNoYWxsIHRoZSBjb3B5cmlnaHQgb3duZXJzIiwidGhlIGNvcHlyaWdodCBvd25lcnMgb3IiLCJjb3B5cmlnaHQgb3duZXJzIG9yIGFueW9uZSIsIm93bmVycyBvciBhbnlvbmUgZGlzdHJpYnV0aW5nIiwiaW4gdGhlIHNvZnR3YXJlIGV2ZW4iLCJzb2Z0d2FyZSBvciBwb3J0aW9ucyBoZXJlb2YiLCJzb2Z0d2FyZSAzIHRoaXMgY29weXJpZ2h0IiwicG5nIHJlZmVyZW5jZSBsaWJyYXJ5IGxpY2Vuc2UgdmVyc2lvbiIsInJlZmVyZW5jZSBsaWJyYXJ5IGxpY2Vuc2UgdmVyc2lvbiAyIiwibGlicmFyeSBsaWNlbnNlIHZlcnNpb24gMiBjb3B5cmlnaHQiLCJsaWNlbnNlIHZlcnNpb24gMiBjb3B5cmlnaHQgYyIsInZlcnNpb24gMiBjb3B5cmlnaHQgYyAxOTk1IiwiMiBjb3B5cmlnaHQgYyAxOTk1IDIwMTgiLCJjb3B5cmlnaHQgYyAxOTk1IDIwMTggdGhlIiwiYyAxOTk1IDIwMTggdGhlIHBuZyIsIjE5OTUgMjAxOCB0aGUgcG5nIHJlZmVyZW5jZSIsIjIwMTggdGhlIHBuZyByZWZlcmVuY2UgbGlicmFyeSIsInRoZSBwbmcgcmVmZXJlbmNlIGxpYnJhcnkgYXV0aG9ycyIsInBuZyByZWZlcmVuY2UgbGlicmFyeSBhdXRob3JzIGNvcHlyaWdodCIsInJlZmVyZW5jZSBsaWJyYXJ5IGF1dGhvcnMgY29weXJpZ2h0IGMiLCJsaWJyYXJ5IGF1dGhvcnMgY29weXJpZ2h0IGMgMjAxOCIsImF1dGhvcnMgY29weXJpZ2h0IGMgMjAxOCBjb3NtaW4iLCJjb3B5cmlnaHQgYyAyMDE4IGNvc21pbiB0cnV0YSIsImMgMjAxOCBjb3NtaW4gdHJ1dGEgY29weXJpZ2h0IiwiMjAxOCBjb3NtaW4gdHJ1dGEgY29weXJpZ2h0IGMiLCJjb3NtaW4gdHJ1dGEgY29weXJpZ2h0IGMgMjAwMCIsInRydXRhIGNvcHlyaWdodCBjIDIwMDAgMjAwMiIsImNvcHlyaWdodCBjIDIwMDAgMjAwMiAyMDA0IiwiYyAyMDAwIDIwMDIgMjAwNCAyMDA2IiwiMjAwMCAyMDAyIDIwMDQgMjAwNiAyMDE4IiwiMjAwMiAyMDA0IDIwMDYgMjAxOCBnbGVubiIsIjIwMDQgMjAwNiAyMDE4IGdsZW5uIHJhbmRlcnMiLCIyMDA2IDIwMTggZ2xlbm4gcmFuZGVycyBwZWhyc29uIiwiMjAxOCBnbGVubiByYW5kZXJzIHBlaHJzb24gY29weXJpZ2h0IiwiZ2xlbm4gcmFuZGVycyBwZWhyc29uIGNvcHlyaWdodCBjIiwicmFuZGVycyBwZWhyc29uIGNvcHlyaWdodCBjIDE5OTYiLCJwZWhyc29uIGNvcHlyaWdodCBjIDE5OTYgMTk5NyIsImMgMTk5NiAxOTk3IGFuZHJlYXMgZGlsZ2VyIiwiMTk5NiAxOTk3IGFuZHJlYXMgZGlsZ2VyIGNvcHlyaWdodCIsIjE5OTcgYW5kcmVhcyBkaWxnZXIgY29weXJpZ2h0IGMiLCJhbmRyZWFzIGRpbGdlciBjb3B5cmlnaHQgYyAxOTk1IiwiZGlsZ2VyIGNvcHlyaWdodCBjIDE5OTUgMTk5NiIsInNjaGFsbmF0IGdyb3VwIDQyIGluYyB0aGUiLCJncm91cCA0MiBpbmMgdGhlIHNvZnR3YXJlIiwiNDIgaW5jIHRoZSBzb2Z0d2FyZSBpcyIsImluYyB0aGUgc29mdHdhcmUgaXMgc3VwcGxpZWQiLCJpcyBzdXBwbGllZCBhcyBpcyB3aXRob3V0Iiwic3VwcGxpZWQgYXMgaXMgd2l0aG91dCB3YXJyYW50eSIsIm5vbiBpbmZyaW5nZW1lbnQgaW4gbm8gZXZlbiIsImluZnJpbmdlbWVudCBpbiBubyBldmVuIHNoYWxsIiwiaW4gbm8gZXZlbiBzaGFsbCB0aGUiLCJubyBldmVuIHNoYWxsIHRoZSBjb3B5cmlnaHQiLCJldmVuIHNoYWxsIHRoZSBjb3B5cmlnaHQgb3duZXJzIiwic2hhbGwgdGhlIGNvcHlyaWdodCBvd25lcnMgb3IiLCJ0aGUgY29weXJpZ2h0IG93bmVycyBvciBhbnlvbmUiLCJjb3B5cmlnaHQgb3duZXJzIG9yIGFueW9uZSBkaXN0cmlidXRpbmciLCJvd25lcnMgb3IgYW55b25lIGRpc3RyaWJ1dGluZyB0aGUiLCJkZWFsaW5ncyBpbiB0aGUgc29mdHdhcmUgZXZlbiIsImluIHRoZSBzb2Z0d2FyZSBldmVuIGlmIiwidGhlIHNvZnR3YXJlIGV2ZW4gaWYgYWR2aXNlZCIsInRoaXMgc29mdHdhcmUgb3IgcG9ydGlvbnMgaGVyZW9mIiwic29mdHdhcmUgb3IgcG9ydGlvbnMgaGVyZW9mIGZvciIsIm9yaWdpbmFsIHNvZnR3YXJlIDMgdGhpcyBjb3B5cmlnaHQiLCJzb2Z0d2FyZSAzIHRoaXMgY29weXJpZ2h0IG5vdGljZSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJUaGlzIGxpYnJhcnkgKGxpYnNlbGludXgpIGlzIHB1YmxpYyBkb21haW4gc29mdHdhcmUsIGkuZS4gbm90IGNvcHlyaWdodGVkLlxuXG5XYXJyYW50eSBFeGNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tXG5cbllvdSBhZ3JlZSB0aGF0IHRoaXMgc29mdHdhcmUgaXMgYSBub24tY29tbWVyY2lhbGx5IGRldmVsb3BlZCBwcm9ncmFtIHRoYXQgbWF5IGNvbnRhaW4gXCJidWdzXCIgKGFzIHRoYXQgdGVybSBpcyB1c2VkIGluIHRoZSBpbmR1c3RyeSkgYW5kIHRoYXQgaXQgbWF5IG5vdCBmdW5jdGlvbiBhcyBpbnRlbmRlZC4gVGhlIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIFwiYXMgaXNcIi4gTlNBIG1ha2VzIG5vLCBhbmQgaGVyZWJ5IGV4cHJlc3NseSBkaXNjbGFpbXMgYWxsLCB3YXJyYW50aWVzLCBleHByZXNzLCBpbXBsaWVkLCBzdGF0dXRvcnksIG9yIG90aGVyd2lzZSB3aXRoIHJlc3BlY3QgdG8gdGhlIHNvZnR3YXJlLCBpbmNsdWRpbmcgbm9uaW5mcmluZ2VtZW50IGFuZCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuXG5cbkxpbWl0YXRpb24gb2YgTGlhYmlsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkluIG5vIGV2ZW50IHdpbGwgTlNBIGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMsIGluY2x1ZGluZyBsb3NzIG9mIGRhdGEsIGxvc3QgcHJvZml0cywgY29zdCBvZiBjb3Zlciwgb3Igb3RoZXIgc3BlY2lhbCwgaW5jaWRlbnRhbCwgY29uc2VxdWVudGlhbCwgZGlyZWN0IG9yIGluZGlyZWN0IGRhbWFnZXMgYXJpc2luZyBmcm9tIHRoZSBzb2Z0d2FyZSBvciB0aGUgdXNlIHRoZXJlb2YsIGhvd2V2ZXIgY2F1c2VkIGFuZCBvbiBhbnkgdGhlb3J5IG9mIGxpYWJpbGl0eS4gVGhpcyBsaW1pdGF0aW9uIHdpbGwgYXBwbHkgZXZlbiBpZiBOU0EgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2UuIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoaXMgaXMgYSByZWFzb25hYmxlIGFsbG9jYXRpb24gb2Ygcmlzay4iXSwibGljZW5zZUlkcyI6WyJsaWJzZWxpbnV4LTEuMCJdLCJrZXl3b3JkcyI6WyJ0aGlzIGxpYnJhcnkgbGlic2VsaW51eCIsImxpYnJhcnkgbGlic2VsaW51eCBpcyIsImxpYnNlbGludXggaXMgcHVibGljIiwiaXMgcHVibGljIGRvbWFpbiIsImRvbWFpbiBzb2Z0d2FyZSBpIiwic29mdHdhcmUgaSBlIiwiZSBub3QgY29weXJpZ2h0ZWQiLCJub3QgY29weXJpZ2h0ZWQgd2FycmFudHkiLCJjb3B5cmlnaHRlZCB3YXJyYW50eSBleGNsdXNpb24iLCJ3YXJyYW50eSBleGNsdXNpb24geW91IiwiZXhjbHVzaW9uIHlvdSBhZ3JlZSIsImFncmVlIHRoYXQgdGhpcyIsImEgbm9uIGNvbW1lcmNpYWxseSIsIm5vbiBjb21tZXJjaWFsbHkgZGV2ZWxvcGVkIiwiY29tbWVyY2lhbGx5IGRldmVsb3BlZCBwcm9ncmFtIiwiZGV2ZWxvcGVkIHByb2dyYW0gdGhhdCIsInByb2dyYW0gdGhhdCBtYXkiLCJtYXkgY29udGFpbiBidWdzIiwiY29udGFpbiBidWdzIGFzIiwiYnVncyBhcyB0aGF0IiwidGVybSBpcyB1c2VkIiwiaW4gdGhlIGluZHVzdHJ5IiwidGhlIGluZHVzdHJ5IGFuZCIsImluZHVzdHJ5IGFuZCB0aGF0IiwibWF5IG5vdCBmdW5jdGlvbiIsIm5vdCBmdW5jdGlvbiBhcyIsImZ1bmN0aW9uIGFzIGludGVuZGVkIiwiYXMgaW50ZW5kZWQgdGhlIiwiaW50ZW5kZWQgdGhlIHNvZnR3YXJlIiwiYXMgaXMgbnNhIiwiaXMgbnNhIG1ha2VzIiwibnNhIG1ha2VzIG5vIiwibm8gYW5kIGhlcmVieSIsImFuZCBoZXJlYnkgZXhwcmVzc2x5IiwiaGVyZWJ5IGV4cHJlc3NseSBkaXNjbGFpbXMiLCJ3YXJyYW50aWVzIGV4cHJlc3MgaW1wbGllZCIsInNvZnR3YXJlIGluY2x1ZGluZyBub25pbmZyaW5nZW1lbnQiLCJpbmNsdWRpbmcgbm9uaW5mcmluZ2VtZW50IGFuZCIsIm5vbmluZnJpbmdlbWVudCBhbmQgdGhlIiwiYW5kIHRoZSBpbXBsaWVkIiwicGFydGljdWxhciBwdXJwb3NlIGxpbWl0YXRpb24iLCJwdXJwb3NlIGxpbWl0YXRpb24gb2YiLCJldmVudCB3aWxsIG5zYSIsIndpbGwgbnNhIGJlIiwibnNhIGJlIGxpYWJsZSIsImRhbWFnZXMgaW5jbHVkaW5nIGxvc3MiLCJpbmNsdWRpbmcgbG9zcyBvZiIsIm9mIGRhdGEgbG9zdCIsImRhdGEgbG9zdCBwcm9maXRzIiwibG9zdCBwcm9maXRzIGNvc3QiLCJwcm9maXRzIGNvc3Qgb2YiLCJvZiBjb3ZlciBvciIsImNvdmVyIG9yIG90aGVyIiwib3RoZXIgc3BlY2lhbCBpbmNpZGVudGFsIiwiaW5jaWRlbnRhbCBjb25zZXF1ZW50aWFsIGRpcmVjdCIsImNvbnNlcXVlbnRpYWwgZGlyZWN0IG9yIiwiaW5kaXJlY3QgZGFtYWdlcyBhcmlzaW5nIiwidXNlIHRoZXJlb2YgaG93ZXZlciIsInRoZXJlb2YgaG93ZXZlciBjYXVzZWQiLCJsaWFiaWxpdHkgdGhpcyBsaW1pdGF0aW9uIiwidGhpcyBsaW1pdGF0aW9uIHdpbGwiLCJsaW1pdGF0aW9uIHdpbGwgYXBwbHkiLCJ3aWxsIGFwcGx5IGV2ZW4iLCJhcHBseSBldmVuIGlmIiwiZXZlbiBpZiBuc2EiLCJpZiBuc2EgaGFzIiwibnNhIGhhcyBiZWVuIiwidGhhdCB0aGlzIGlzIiwiaXMgYSByZWFzb25hYmxlIiwiYSByZWFzb25hYmxlIGFsbG9jYXRpb24iLCJyZWFzb25hYmxlIGFsbG9jYXRpb24gb2YiLCJ0aGlzIGxpYnJhcnkgbGlic2VsaW51eCBpcyIsImxpYnJhcnkgbGlic2VsaW51eCBpcyBwdWJsaWMiLCJsaWJzZWxpbnV4IGlzIHB1YmxpYyBkb21haW4iLCJpcyBwdWJsaWMgZG9tYWluIHNvZnR3YXJlIiwicHVibGljIGRvbWFpbiBzb2Z0d2FyZSBpIiwiZG9tYWluIHNvZnR3YXJlIGkgZSIsInNvZnR3YXJlIGkgZSBub3QiLCJpIGUgbm90IGNvcHlyaWdodGVkIiwiZSBub3QgY29weXJpZ2h0ZWQgd2FycmFudHkiLCJub3QgY29weXJpZ2h0ZWQgd2FycmFudHkgZXhjbHVzaW9uIiwiY29weXJpZ2h0ZWQgd2FycmFudHkgZXhjbHVzaW9uIHlvdSIsIndhcnJhbnR5IGV4Y2x1c2lvbiB5b3UgYWdyZWUiLCJleGNsdXNpb24geW91IGFncmVlIHRoYXQiLCJ5b3UgYWdyZWUgdGhhdCB0aGlzIiwiYWdyZWUgdGhhdCB0aGlzIHNvZnR3YXJlIiwidGhpcyBzb2Z0d2FyZSBpcyBhIiwic29mdHdhcmUgaXMgYSBub24iLCJpcyBhIG5vbiBjb21tZXJjaWFsbHkiLCJhIG5vbiBjb21tZXJjaWFsbHkgZGV2ZWxvcGVkIiwibm9uIGNvbW1lcmNpYWxseSBkZXZlbG9wZWQgcHJvZ3JhbSIsImNvbW1lcmNpYWxseSBkZXZlbG9wZWQgcHJvZ3JhbSB0aGF0IiwiZGV2ZWxvcGVkIHByb2dyYW0gdGhhdCBtYXkiLCJwcm9ncmFtIHRoYXQgbWF5IGNvbnRhaW4iLCJ0aGF0IG1heSBjb250YWluIGJ1Z3MiLCJtYXkgY29udGFpbiBidWdzIGFzIiwiY29udGFpbiBidWdzIGFzIHRoYXQiLCJidWdzIGFzIHRoYXQgdGVybSIsInRoYXQgdGVybSBpcyB1c2VkIiwidGVybSBpcyB1c2VkIGluIiwiaXMgdXNlZCBpbiB0aGUiLCJ1c2VkIGluIHRoZSBpbmR1c3RyeSIsImluIHRoZSBpbmR1c3RyeSBhbmQiLCJ0aGUgaW5kdXN0cnkgYW5kIHRoYXQiLCJpbmR1c3RyeSBhbmQgdGhhdCBpdCIsImFuZCB0aGF0IGl0IG1heSIsIml0IG1heSBub3QgZnVuY3Rpb24iLCJtYXkgbm90IGZ1bmN0aW9uIGFzIiwibm90IGZ1bmN0aW9uIGFzIGludGVuZGVkIiwiZnVuY3Rpb24gYXMgaW50ZW5kZWQgdGhlIiwiYXMgaW50ZW5kZWQgdGhlIHNvZnR3YXJlIiwiaW50ZW5kZWQgdGhlIHNvZnR3YXJlIGlzIiwibGljZW5zZWQgYXMgaXMgbnNhIiwiYXMgaXMgbnNhIG1ha2VzIiwiaXMgbnNhIG1ha2VzIG5vIiwibnNhIG1ha2VzIG5vIGFuZCIsIm1ha2VzIG5vIGFuZCBoZXJlYnkiLCJubyBhbmQgaGVyZWJ5IGV4cHJlc3NseSIsImFuZCBoZXJlYnkgZXhwcmVzc2x5IGRpc2NsYWltcyIsImhlcmVieSBleHByZXNzbHkgZGlzY2xhaW1zIGFsbCIsImV4cHJlc3NseSBkaXNjbGFpbXMgYWxsIHdhcnJhbnRpZXMiLCJhbGwgd2FycmFudGllcyBleHByZXNzIGltcGxpZWQiLCJ3YXJyYW50aWVzIGV4cHJlc3MgaW1wbGllZCBzdGF0dXRvcnkiLCJzdGF0dXRvcnkgb3Igb3RoZXJ3aXNlIHdpdGgiLCJ0byB0aGUgc29mdHdhcmUgaW5jbHVkaW5nIiwidGhlIHNvZnR3YXJlIGluY2x1ZGluZyBub25pbmZyaW5nZW1lbnQiLCJzb2Z0d2FyZSBpbmNsdWRpbmcgbm9uaW5mcmluZ2VtZW50IGFuZCIsImluY2x1ZGluZyBub25pbmZyaW5nZW1lbnQgYW5kIHRoZSIsIm5vbmluZnJpbmdlbWVudCBhbmQgdGhlIGltcGxpZWQiLCJhbmQgdGhlIGltcGxpZWQgd2FycmFudGllcyIsImEgcGFydGljdWxhciBwdXJwb3NlIGxpbWl0YXRpb24iLCJwYXJ0aWN1bGFyIHB1cnBvc2UgbGltaXRhdGlvbiBvZiIsInB1cnBvc2UgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkiLCJubyBldmVudCB3aWxsIG5zYSIsImV2ZW50IHdpbGwgbnNhIGJlIiwid2lsbCBuc2EgYmUgbGlhYmxlIiwibnNhIGJlIGxpYWJsZSBmb3IiLCJhbnkgZGFtYWdlcyBpbmNsdWRpbmcgbG9zcyIsImRhbWFnZXMgaW5jbHVkaW5nIGxvc3Mgb2YiLCJpbmNsdWRpbmcgbG9zcyBvZiBkYXRhIiwibG9zcyBvZiBkYXRhIGxvc3QiLCJvZiBkYXRhIGxvc3QgcHJvZml0cyIsImRhdGEgbG9zdCBwcm9maXRzIGNvc3QiLCJsb3N0IHByb2ZpdHMgY29zdCBvZiIsInByb2ZpdHMgY29zdCBvZiBjb3ZlciIsImNvc3Qgb2YgY292ZXIgb3IiLCJvZiBjb3ZlciBvciBvdGhlciIsImNvdmVyIG9yIG90aGVyIHNwZWNpYWwiLCJvciBvdGhlciBzcGVjaWFsIGluY2lkZW50YWwiLCJvdGhlciBzcGVjaWFsIGluY2lkZW50YWwgY29uc2VxdWVudGlhbCIsInNwZWNpYWwgaW5jaWRlbnRhbCBjb25zZXF1ZW50aWFsIGRpcmVjdCIsImluY2lkZW50YWwgY29uc2VxdWVudGlhbCBkaXJlY3Qgb3IiLCJjb25zZXF1ZW50aWFsIGRpcmVjdCBvciBpbmRpcmVjdCIsIm9yIGluZGlyZWN0IGRhbWFnZXMgYXJpc2luZyIsImluZGlyZWN0IGRhbWFnZXMgYXJpc2luZyBmcm9tIiwiYXJpc2luZyBmcm9tIHRoZSBzb2Z0d2FyZSIsIm9yIHRoZSB1c2UgdGhlcmVvZiIsInRoZSB1c2UgdGhlcmVvZiBob3dldmVyIiwidXNlIHRoZXJlb2YgaG93ZXZlciBjYXVzZWQiLCJ0aGVyZW9mIGhvd2V2ZXIgY2F1c2VkIGFuZCIsInRoZW9yeSBvZiBsaWFiaWxpdHkgdGhpcyIsIm9mIGxpYWJpbGl0eSB0aGlzIGxpbWl0YXRpb24iLCJsaWFiaWxpdHkgdGhpcyBsaW1pdGF0aW9uIHdpbGwiLCJ0aGlzIGxpbWl0YXRpb24gd2lsbCBhcHBseSIsImxpbWl0YXRpb24gd2lsbCBhcHBseSBldmVuIiwid2lsbCBhcHBseSBldmVuIGlmIiwiYXBwbHkgZXZlbiBpZiBuc2EiLCJldmVuIGlmIG5zYSBoYXMiLCJpZiBuc2EgaGFzIGJlZW4iLCJuc2EgaGFzIGJlZW4gYWR2aXNlZCIsImFja25vd2xlZGdlIHRoYXQgdGhpcyBpcyIsInRoYXQgdGhpcyBpcyBhIiwidGhpcyBpcyBhIHJlYXNvbmFibGUiLCJpcyBhIHJlYXNvbmFibGUgYWxsb2NhdGlvbiIsImEgcmVhc29uYWJsZSBhbGxvY2F0aW9uIG9mIiwicmVhc29uYWJsZSBhbGxvY2F0aW9uIG9mIHJpc2siLCJ0aGlzIGxpYnJhcnkgbGlic2VsaW51eCBpcyBwdWJsaWMiLCJsaWJyYXJ5IGxpYnNlbGludXggaXMgcHVibGljIGRvbWFpbiIsImxpYnNlbGludXggaXMgcHVibGljIGRvbWFpbiBzb2Z0d2FyZSIsImlzIHB1YmxpYyBkb21haW4gc29mdHdhcmUgaSIsInB1YmxpYyBkb21haW4gc29mdHdhcmUgaSBlIiwiZG9tYWluIHNvZnR3YXJlIGkgZSBub3QiLCJzb2Z0d2FyZSBpIGUgbm90IGNvcHlyaWdodGVkIiwiaSBlIG5vdCBjb3B5cmlnaHRlZCB3YXJyYW50eSIsImUgbm90IGNvcHlyaWdodGVkIHdhcnJhbnR5IGV4Y2x1c2lvbiIsIm5vdCBjb3B5cmlnaHRlZCB3YXJyYW50eSBleGNsdXNpb24geW91IiwiY29weXJpZ2h0ZWQgd2FycmFudHkgZXhjbHVzaW9uIHlvdSBhZ3JlZSIsIndhcnJhbnR5IGV4Y2x1c2lvbiB5b3UgYWdyZWUgdGhhdCIsImV4Y2x1c2lvbiB5b3UgYWdyZWUgdGhhdCB0aGlzIiwieW91IGFncmVlIHRoYXQgdGhpcyBzb2Z0d2FyZSIsImFncmVlIHRoYXQgdGhpcyBzb2Z0d2FyZSBpcyIsInRoYXQgdGhpcyBzb2Z0d2FyZSBpcyBhIiwidGhpcyBzb2Z0d2FyZSBpcyBhIG5vbiIsInNvZnR3YXJlIGlzIGEgbm9uIGNvbW1lcmNpYWxseSIsImlzIGEgbm9uIGNvbW1lcmNpYWxseSBkZXZlbG9wZWQiLCJhIG5vbiBjb21tZXJjaWFsbHkgZGV2ZWxvcGVkIHByb2dyYW0iLCJub24gY29tbWVyY2lhbGx5IGRldmVsb3BlZCBwcm9ncmFtIHRoYXQiLCJjb21tZXJjaWFsbHkgZGV2ZWxvcGVkIHByb2dyYW0gdGhhdCBtYXkiLCJkZXZlbG9wZWQgcHJvZ3JhbSB0aGF0IG1heSBjb250YWluIiwicHJvZ3JhbSB0aGF0IG1heSBjb250YWluIGJ1Z3MiXX0seyJsaWNlbnNlVGV4dHMiOlsiQ29weXJpZ2h0IChjKSAxOTg4LTE5OTcgU2FtIExlZmZsZXJcblxuQ29weXJpZ2h0IChjKSAxOTkxLTE5OTcgU2lsaWNvbiBHcmFwaGljcywgSW5jLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgKGkpIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlcyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBvZiB0aGUgc29mdHdhcmUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgYW5kIChpaSkgdGhlIG5hbWVzIG9mIFNhbSBMZWZmbGVyIGFuZCBTaWxpY29uIEdyYXBoaWNzIG1heSBub3QgYmUgdXNlZCBpbiBhbnkgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHJlbGF0aW5nIHRvIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHRoZSBzcGVjaWZpYywgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIFNhbSBMZWZmbGVyIGFuZCBTaWxpY29uIEdyYXBoaWNzLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUy1JU1wiIEFORCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTLCBJTVBMSUVEIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cblxuSU4gTk8gRVZFTlQgU0hBTEwgU0FNIExFRkZMRVIgT1IgU0lMSUNPTiBHUkFQSElDUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBPUiBOT1QgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgREFNQUdFLCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuIl0sImxpY2Vuc2VJZHMiOlsibGlidGlmZiJdLCJrZXl3b3JkcyI6WyJjIDE5ODggMTk5NyIsIjE5ODggMTk5NyBzYW0iLCIxOTk3IHNhbSBsZWZmbGVyIiwic2FtIGxlZmZsZXIgY29weXJpZ2h0IiwibGVmZmxlciBjb3B5cmlnaHQgYyIsImMgMTk5MSAxOTk3IiwiMTk5MSAxOTk3IHNpbGljb24iLCIxOTk3IHNpbGljb24gZ3JhcGhpY3MiLCJncmFwaGljcyBpbmMgcGVybWlzc2lvbiIsInByb3ZpZGVkIHRoYXQgaSIsInRoYXQgaSB0aGUiLCJpIHRoZSBhYm92ZSIsImRvY3VtZW50YXRpb24gYW5kIGlpIiwiaWkgdGhlIG5hbWVzIiwibmFtZXMgb2Ygc2FtIiwic2lsaWNvbiBncmFwaGljcyBtYXkiLCJncmFwaGljcyBtYXkgbm90Iiwid2l0aG91dCB0aGUgc3BlY2lmaWMiLCJ0aGUgc3BlY2lmaWMgcHJpb3IiLCJwZXJtaXNzaW9uIG9mIHNhbSIsInNpbGljb24gZ3JhcGhpY3MgdGhlIiwiZ3JhcGhpY3MgdGhlIHNvZnR3YXJlIiwiaW1wbGllZCBvciBvdGhlcndpc2UiLCJldmVudCBzaGFsbCBzYW0iLCJzaGFsbCBzYW0gbGVmZmxlciIsInNhbSBsZWZmbGVyIG9yIiwibGVmZmxlciBvciBzaWxpY29uIiwib3Igc2lsaWNvbiBncmFwaGljcyIsInNpbGljb24gZ3JhcGhpY3MgYmUiLCJncmFwaGljcyBiZSBsaWFibGUiLCJwcm9maXRzIHdoZXRoZXIgb3IiLCJvciBub3QgYWR2aXNlZCIsIm5vdCBhZHZpc2VkIG9mIiwicG9zc2liaWxpdHkgb2YgZGFtYWdlIiwib2YgZGFtYWdlIGFuZCIsImRhbWFnZSBhbmQgb24iLCJjb3B5cmlnaHQgYyAxOTg4IDE5OTciLCJjIDE5ODggMTk5NyBzYW0iLCIxOTg4IDE5OTcgc2FtIGxlZmZsZXIiLCIxOTk3IHNhbSBsZWZmbGVyIGNvcHlyaWdodCIsInNhbSBsZWZmbGVyIGNvcHlyaWdodCBjIiwibGVmZmxlciBjb3B5cmlnaHQgYyAxOTkxIiwiY29weXJpZ2h0IGMgMTk5MSAxOTk3IiwiYyAxOTkxIDE5OTcgc2lsaWNvbiIsIjE5OTEgMTk5NyBzaWxpY29uIGdyYXBoaWNzIiwiMTk5NyBzaWxpY29uIGdyYXBoaWNzIGluYyIsInNpbGljb24gZ3JhcGhpY3MgaW5jIHBlcm1pc3Npb24iLCJncmFwaGljcyBpbmMgcGVybWlzc2lvbiB0byIsImZlZSBwcm92aWRlZCB0aGF0IGkiLCJwcm92aWRlZCB0aGF0IGkgdGhlIiwidGhhdCBpIHRoZSBhYm92ZSIsImkgdGhlIGFib3ZlIGNvcHlyaWdodCIsImFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24gYW5kIiwicmVsYXRlZCBkb2N1bWVudGF0aW9uIGFuZCBpaSIsImRvY3VtZW50YXRpb24gYW5kIGlpIHRoZSIsImFuZCBpaSB0aGUgbmFtZXMiLCJpaSB0aGUgbmFtZXMgb2YiLCJ0aGUgbmFtZXMgb2Ygc2FtIiwibmFtZXMgb2Ygc2FtIGxlZmZsZXIiLCJhbmQgc2lsaWNvbiBncmFwaGljcyBtYXkiLCJzaWxpY29uIGdyYXBoaWNzIG1heSBub3QiLCJncmFwaGljcyBtYXkgbm90IGJlIiwicHVibGljaXR5IHJlbGF0aW5nIHRvIHRoZSIsInRoZSBzb2Z0d2FyZSB3aXRob3V0IHRoZSIsInNvZnR3YXJlIHdpdGhvdXQgdGhlIHNwZWNpZmljIiwid2l0aG91dCB0aGUgc3BlY2lmaWMgcHJpb3IiLCJ0aGUgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiIsIndyaXR0ZW4gcGVybWlzc2lvbiBvZiBzYW0iLCJwZXJtaXNzaW9uIG9mIHNhbSBsZWZmbGVyIiwiYW5kIHNpbGljb24gZ3JhcGhpY3MgdGhlIiwic2lsaWNvbiBncmFwaGljcyB0aGUgc29mdHdhcmUiLCJncmFwaGljcyB0aGUgc29mdHdhcmUgaXMiLCJleHByZXNzIGltcGxpZWQgb3Igb3RoZXJ3aXNlIiwiaW1wbGllZCBvciBvdGhlcndpc2UgaW5jbHVkaW5nIiwibm8gZXZlbnQgc2hhbGwgc2FtIiwiZXZlbnQgc2hhbGwgc2FtIGxlZmZsZXIiLCJzaGFsbCBzYW0gbGVmZmxlciBvciIsInNhbSBsZWZmbGVyIG9yIHNpbGljb24iLCJsZWZmbGVyIG9yIHNpbGljb24gZ3JhcGhpY3MiLCJvciBzaWxpY29uIGdyYXBoaWNzIGJlIiwic2lsaWNvbiBncmFwaGljcyBiZSBsaWFibGUiLCJncmFwaGljcyBiZSBsaWFibGUgZm9yIiwib3IgcHJvZml0cyB3aGV0aGVyIG9yIiwicHJvZml0cyB3aGV0aGVyIG9yIG5vdCIsIndoZXRoZXIgb3Igbm90IGFkdmlzZWQiLCJvciBub3QgYWR2aXNlZCBvZiIsIm5vdCBhZHZpc2VkIG9mIHRoZSIsInRoZSBwb3NzaWJpbGl0eSBvZiBkYW1hZ2UiLCJwb3NzaWJpbGl0eSBvZiBkYW1hZ2UgYW5kIiwib2YgZGFtYWdlIGFuZCBvbiIsImRhbWFnZSBhbmQgb24gYW55IiwiY29weXJpZ2h0IGMgMTk4OCAxOTk3IHNhbSIsImMgMTk4OCAxOTk3IHNhbSBsZWZmbGVyIiwiMTk4OCAxOTk3IHNhbSBsZWZmbGVyIGNvcHlyaWdodCIsIjE5OTcgc2FtIGxlZmZsZXIgY29weXJpZ2h0IGMiLCJzYW0gbGVmZmxlciBjb3B5cmlnaHQgYyAxOTkxIiwibGVmZmxlciBjb3B5cmlnaHQgYyAxOTkxIDE5OTciLCJjb3B5cmlnaHQgYyAxOTkxIDE5OTcgc2lsaWNvbiIsImMgMTk5MSAxOTk3IHNpbGljb24gZ3JhcGhpY3MiLCIxOTkxIDE5OTcgc2lsaWNvbiBncmFwaGljcyBpbmMiLCIxOTk3IHNpbGljb24gZ3JhcGhpY3MgaW5jIHBlcm1pc3Npb24iLCJzaWxpY29uIGdyYXBoaWNzIGluYyBwZXJtaXNzaW9uIHRvIiwiZ3JhcGhpY3MgaW5jIHBlcm1pc3Npb24gdG8gdXNlIiwid2l0aG91dCBmZWUgcHJvdmlkZWQgdGhhdCBpIiwiZmVlIHByb3ZpZGVkIHRoYXQgaSB0aGUiLCJwcm92aWRlZCB0aGF0IGkgdGhlIGFib3ZlIiwidGhhdCBpIHRoZSBhYm92ZSBjb3B5cmlnaHQiLCJpIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlcyIsIm9mIHRoZSBzb2Z0d2FyZSBhbmQgcmVsYXRlZCIsInNvZnR3YXJlIGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24gYW5kIiwiYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgaWkiLCJyZWxhdGVkIGRvY3VtZW50YXRpb24gYW5kIGlpIHRoZSIsImRvY3VtZW50YXRpb24gYW5kIGlpIHRoZSBuYW1lcyIsImFuZCBpaSB0aGUgbmFtZXMgb2YiLCJpaSB0aGUgbmFtZXMgb2Ygc2FtIiwidGhlIG5hbWVzIG9mIHNhbSBsZWZmbGVyIiwibmFtZXMgb2Ygc2FtIGxlZmZsZXIgYW5kIiwibGVmZmxlciBhbmQgc2lsaWNvbiBncmFwaGljcyBtYXkiLCJhbmQgc2lsaWNvbiBncmFwaGljcyBtYXkgbm90Iiwic2lsaWNvbiBncmFwaGljcyBtYXkgbm90IGJlIiwiZ3JhcGhpY3MgbWF5IG5vdCBiZSB1c2VkIiwiYW55IGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSByZWxhdGluZyIsIm9yIHB1YmxpY2l0eSByZWxhdGluZyB0byB0aGUiLCJwdWJsaWNpdHkgcmVsYXRpbmcgdG8gdGhlIHNvZnR3YXJlIiwicmVsYXRpbmcgdG8gdGhlIHNvZnR3YXJlIHdpdGhvdXQiLCJ0byB0aGUgc29mdHdhcmUgd2l0aG91dCB0aGUiLCJ0aGUgc29mdHdhcmUgd2l0aG91dCB0aGUgc3BlY2lmaWMiLCJzb2Z0d2FyZSB3aXRob3V0IHRoZSBzcGVjaWZpYyBwcmlvciIsIndpdGhvdXQgdGhlIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4iLCJ0aGUgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIiwicHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHNhbSIsIndyaXR0ZW4gcGVybWlzc2lvbiBvZiBzYW0gbGVmZmxlciIsInBlcm1pc3Npb24gb2Ygc2FtIGxlZmZsZXIgYW5kIiwibGVmZmxlciBhbmQgc2lsaWNvbiBncmFwaGljcyB0aGUiLCJhbmQgc2lsaWNvbiBncmFwaGljcyB0aGUgc29mdHdhcmUiLCJzaWxpY29uIGdyYXBoaWNzIHRoZSBzb2Z0d2FyZSBpcyIsImdyYXBoaWNzIHRoZSBzb2Z0d2FyZSBpcyBwcm92aWRlZCIsImtpbmQgZXhwcmVzcyBpbXBsaWVkIG9yIG90aGVyd2lzZSIsImV4cHJlc3MgaW1wbGllZCBvciBvdGhlcndpc2UgaW5jbHVkaW5nIiwiaW1wbGllZCBvciBvdGhlcndpc2UgaW5jbHVkaW5nIHdpdGhvdXQiLCJvdGhlcndpc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkiLCJpbiBubyBldmVudCBzaGFsbCBzYW0iLCJubyBldmVudCBzaGFsbCBzYW0gbGVmZmxlciIsImV2ZW50IHNoYWxsIHNhbSBsZWZmbGVyIG9yIiwic2hhbGwgc2FtIGxlZmZsZXIgb3Igc2lsaWNvbiIsInNhbSBsZWZmbGVyIG9yIHNpbGljb24gZ3JhcGhpY3MiLCJsZWZmbGVyIG9yIHNpbGljb24gZ3JhcGhpY3MgYmUiLCJvciBzaWxpY29uIGdyYXBoaWNzIGJlIGxpYWJsZSIsInNpbGljb24gZ3JhcGhpY3MgYmUgbGlhYmxlIGZvciIsImdyYXBoaWNzIGJlIGxpYWJsZSBmb3IgYW55IiwiZGF0YSBvciBwcm9maXRzIHdoZXRoZXIgb3IiLCJvciBwcm9maXRzIHdoZXRoZXIgb3Igbm90IiwicHJvZml0cyB3aGV0aGVyIG9yIG5vdCBhZHZpc2VkIiwid2hldGhlciBvciBub3QgYWR2aXNlZCBvZiIsIm9yIG5vdCBhZHZpc2VkIG9mIHRoZSIsIm5vdCBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSIsIm9mIHRoZSBwb3NzaWJpbGl0eSBvZiBkYW1hZ2UiLCJ0aGUgcG9zc2liaWxpdHkgb2YgZGFtYWdlIGFuZCIsInBvc3NpYmlsaXR5IG9mIGRhbWFnZSBhbmQgb24iLCJvZiBkYW1hZ2UgYW5kIG9uIGFueSIsImRhbWFnZSBhbmQgb24gYW55IHRoZW9yeSJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJDT1BZUklHSFRcblxuVGhlIGZvbGxvd2luZyBpcyBhIG5vdGljZSBvZiBsaW1pdGVkIGF2YWlsYWJpbGl0eSBvZiB0aGUgY29kZSwgYW5kIGRpc2NsYWltZXIgd2hpY2ggbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgcHJvbG9ndWUgb2YgdGhlIGNvZGUgYW5kIGluIGFsbCBzb3VyY2UgbGlzdGluZ3Mgb2YgdGhlIGNvZGUuXG5cbkNvcHlyaWdodCBOb3RpY2VcblxuKyAyMDAyIFVuaXZlcnNpdHkgb2YgQ2hpY2Fnb1xuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsIGFuZCB0byByZWRpc3RyaWJ1dGUgdG8gb3RoZXJzLiBUaGlzIHNvZnR3YXJlIHdhcyBhdXRob3JlZCBieTpcblxuQXJnb25uZSBOYXRpb25hbCBMYWJvcmF0b3J5IEdyb3VwIFcuIEdyb3BwOiAoNjMwKSAyNTItNDMxODsgRkFYOiAoNjMwKSAyNTItNTk4NjsgZS1tYWlsOiBncm9wcEBtY3MuYW5sLmdvdiBFLiBMdXNrOiAoNjMwKSAyNTItNzg1MjsgRkFYOiAoNjMwKSAyNTItNTk4NjsgZS1tYWlsOiBsdXNrQG1jcy5hbmwuZ292IE1hdGhlbWF0aWNzIGFuZCBDb21wdXRlciBTY2llbmNlIERpdmlzaW9uIEFyZ29ubmUgTmF0aW9uYWwgTGFib3JhdG9yeSwgQXJnb25uZSBJTCA2MDQzOVxuXG5HT1ZFUk5NRU5UIExJQ0VOU0VcblxuUG9ydGlvbnMgb2YgdGhpcyBtYXRlcmlhbCByZXN1bHRlZCBmcm9tIHdvcmsgZGV2ZWxvcGVkIHVuZGVyIGEgVS5TLiBHb3Zlcm5tZW50IENvbnRyYWN0IGFuZCBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6IHRoZSBHb3Zlcm5tZW50IGlzIGdyYW50ZWQgZm9yIGl0c2VsZiBhbmQgb3RoZXJzIGFjdGluZyBvbiBpdHMgYmVoYWxmIGEgcGFpZC11cCwgbm9uZXhjbHVzaXZlLCBpcnJldm9jYWJsZSB3b3JsZHdpZGUgbGljZW5zZSBpbiB0aGlzIGNvbXB1dGVyIHNvZnR3YXJlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBhbmQgcGVyZm9ybSBwdWJsaWNseSBhbmQgZGlzcGxheSBwdWJsaWNseS5cblxuRElTQ0xBSU1FUlxuXG5UaGlzIGNvbXB1dGVyIGNvZGUgbWF0ZXJpYWwgd2FzIHByZXBhcmVkLCBpbiBwYXJ0LCBhcyBhbiBhY2NvdW50IG9mIHdvcmsgc3BvbnNvcmVkIGJ5IGFuIGFnZW5jeSBvZiB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50LiBOZWl0aGVyIHRoZSBVbml0ZWQgU3RhdGVzLCBub3IgdGhlIFVuaXZlcnNpdHkgb2YgQ2hpY2Fnbywgbm9yIGFueSBvZiB0aGVpciBlbXBsb3llZXMsIG1ha2VzIGFueSB3YXJyYW50eSBleHByZXNzIG9yIGltcGxpZWQsIG9yIGFzc3VtZXMgYW55IGxlZ2FsIGxpYWJpbGl0eSBvciByZXNwb25zaWJpbGl0eSBmb3IgdGhlIGFjY3VyYWN5LCBjb21wbGV0ZW5lc3MsIG9yIHVzZWZ1bG5lc3Mgb2YgYW55IGluZm9ybWF0aW9uLCBhcHBhcmF0dXMsIHByb2R1Y3QsIG9yIHByb2Nlc3MgZGlzY2xvc2VkLCBvciByZXByZXNlbnRzIHRoYXQgaXRzIHVzZSB3b3VsZCBub3QgaW5mcmluZ2UgcHJpdmF0ZWx5IG93bmVkIHJpZ2h0cy4iXSwibGljZW5zZUlkcyI6WyJtcGljaDIiXSwia2V5d29yZHMiOlsiY29weXJpZ2h0IHRoZSBmb2xsb3dpbmciLCJ0aGUgZm9sbG93aW5nIGlzIiwiZm9sbG93aW5nIGlzIGEiLCJpcyBhIG5vdGljZSIsIm5vdGljZSBvZiBsaW1pdGVkIiwib2YgbGltaXRlZCBhdmFpbGFiaWxpdHkiLCJsaW1pdGVkIGF2YWlsYWJpbGl0eSBvZiIsImF2YWlsYWJpbGl0eSBvZiB0aGUiLCJjb2RlIGFuZCBkaXNjbGFpbWVyIiwiYW5kIGRpc2NsYWltZXIgd2hpY2giLCJkaXNjbGFpbWVyIHdoaWNoIG11c3QiLCJpbiB0aGUgcHJvbG9ndWUiLCJ0aGUgcHJvbG9ndWUgb2YiLCJwcm9sb2d1ZSBvZiB0aGUiLCJpbiBhbGwgc291cmNlIiwiYWxsIHNvdXJjZSBsaXN0aW5ncyIsInNvdXJjZSBsaXN0aW5ncyBvZiIsImxpc3RpbmdzIG9mIHRoZSIsInRoZSBjb2RlIGNvcHlyaWdodCIsImNvZGUgY29weXJpZ2h0IG5vdGljZSIsImNvcHlyaWdodCBub3RpY2UgMjAwMiIsIm5vdGljZSAyMDAyIHVuaXZlcnNpdHkiLCIyMDAyIHVuaXZlcnNpdHkgb2YiLCJvZiBjaGljYWdvIHBlcm1pc3Npb24iLCJjaGljYWdvIHBlcm1pc3Npb24gaXMiLCJ0byBvdGhlcnMgdGhpcyIsIm90aGVycyB0aGlzIHNvZnR3YXJlIiwiYXV0aG9yZWQgYnkgYXJnb25uZSIsImJ5IGFyZ29ubmUgbmF0aW9uYWwiLCJuYXRpb25hbCBsYWJvcmF0b3J5IGdyb3VwIiwibGFib3JhdG9yeSBncm91cCB3IiwiZ3JvdXAgdyBncm9wcCIsIncgZ3JvcHAgNjMwIiwiZ3JvcHAgNjMwIDI1MiIsIjYzMCAyNTIgNDMxOCIsIjI1MiA0MzE4IGZheCIsIjQzMTggZmF4IDYzMCIsImUgbWFpbCBncm9wcCIsIm1haWwgZ3JvcHAgbWNzIiwiZ3JvcHAgbWNzIGFubCIsImFubCBnb3YgZSIsImdvdiBlIGx1c2siLCJlIGx1c2sgNjMwIiwibHVzayA2MzAgMjUyIiwiNjMwIDI1MiA3ODUyIiwiMjUyIDc4NTIgZmF4IiwiNzg1MiBmYXggNjMwIiwiZSBtYWlsIGx1c2siLCJtYWlsIGx1c2sgbWNzIiwibHVzayBtY3MgYW5sIiwiYW5sIGdvdiBtYXRoZW1hdGljcyIsImdvdiBtYXRoZW1hdGljcyBhbmQiLCJpbCA2MDQzOSBnb3Zlcm5tZW50IiwiNjA0MzkgZ292ZXJubWVudCBsaWNlbnNlIiwiZ292ZXJubWVudCBsaWNlbnNlIHBvcnRpb25zIiwidGhpcyBtYXRlcmlhbCByZXN1bHRlZCIsIm1hdGVyaWFsIHJlc3VsdGVkIGZyb20iLCJyZXN1bHRlZCBmcm9tIHdvcmsiLCJmcm9tIHdvcmsgZGV2ZWxvcGVkIiwid29yayBkZXZlbG9wZWQgdW5kZXIiLCJkZXZlbG9wZWQgdW5kZXIgYSIsInVuZGVyIGEgdSIsInMgZ292ZXJubWVudCBjb250cmFjdCIsImdvdmVybm1lbnQgY29udHJhY3QgYW5kIiwiY29udHJhY3QgYW5kIGFyZSIsImZvbGxvd2luZyBsaWNlbnNlIHRoZSIsImxpY2Vuc2UgdGhlIGdvdmVybm1lbnQiLCJnb3Zlcm5tZW50IGlzIGdyYW50ZWQiLCJpcyBncmFudGVkIGZvciIsImdyYW50ZWQgZm9yIGl0c2VsZiIsImZvciBpdHNlbGYgYW5kIiwiaXRzZWxmIGFuZCBvdGhlcnMiLCJvdGhlcnMgYWN0aW5nIG9uIiwiaXRzIGJlaGFsZiBhIiwiYmVoYWxmIGEgcGFpZCIsImEgcGFpZCB1cCIsInBhaWQgdXAgbm9uZXhjbHVzaXZlIiwidXAgbm9uZXhjbHVzaXZlIGlycmV2b2NhYmxlIiwibm9uZXhjbHVzaXZlIGlycmV2b2NhYmxlIHdvcmxkd2lkZSIsImlycmV2b2NhYmxlIHdvcmxkd2lkZSBsaWNlbnNlIiwid29ybGR3aWRlIGxpY2Vuc2UgaW4iLCJpbiB0aGlzIGNvbXB1dGVyIiwidGhpcyBjb21wdXRlciBzb2Z0d2FyZSIsImNvbXB1dGVyIHNvZnR3YXJlIHRvIiwic29mdHdhcmUgdG8gcmVwcm9kdWNlIiwid29ya3MgYW5kIHBlcmZvcm0iLCJwdWJsaWNseSBhbmQgZGlzcGxheSIsImFuZCBkaXNwbGF5IHB1YmxpY2x5IiwiZGlzcGxheSBwdWJsaWNseSBkaXNjbGFpbWVyIiwicHVibGljbHkgZGlzY2xhaW1lciB0aGlzIiwiZGlzY2xhaW1lciB0aGlzIGNvbXB1dGVyIiwidGhpcyBjb21wdXRlciBjb2RlIiwiY29tcHV0ZXIgY29kZSBtYXRlcmlhbCIsImNvZGUgbWF0ZXJpYWwgd2FzIiwibWF0ZXJpYWwgd2FzIHByZXBhcmVkIiwid2FzIHByZXBhcmVkIGluIiwicHJlcGFyZWQgaW4gcGFydCIsInBhcnQgYXMgYW4iLCJ1bml0ZWQgc3RhdGVzIG5vciIsInN0YXRlcyBub3IgdGhlIiwidGhlaXIgZW1wbG95ZWVzIG1ha2VzIiwiZW1wbG95ZWVzIG1ha2VzIGFueSIsImNvcHlyaWdodCB0aGUgZm9sbG93aW5nIGlzIiwidGhlIGZvbGxvd2luZyBpcyBhIiwiZm9sbG93aW5nIGlzIGEgbm90aWNlIiwiaXMgYSBub3RpY2Ugb2YiLCJhIG5vdGljZSBvZiBsaW1pdGVkIiwibm90aWNlIG9mIGxpbWl0ZWQgYXZhaWxhYmlsaXR5Iiwib2YgbGltaXRlZCBhdmFpbGFiaWxpdHkgb2YiLCJsaW1pdGVkIGF2YWlsYWJpbGl0eSBvZiB0aGUiLCJhdmFpbGFiaWxpdHkgb2YgdGhlIGNvZGUiLCJ0aGUgY29kZSBhbmQgZGlzY2xhaW1lciIsImNvZGUgYW5kIGRpc2NsYWltZXIgd2hpY2giLCJhbmQgZGlzY2xhaW1lciB3aGljaCBtdXN0IiwiZGlzY2xhaW1lciB3aGljaCBtdXN0IGJlIiwid2hpY2ggbXVzdCBiZSBpbmNsdWRlZCIsImluY2x1ZGVkIGluIHRoZSBwcm9sb2d1ZSIsImluIHRoZSBwcm9sb2d1ZSBvZiIsInRoZSBwcm9sb2d1ZSBvZiB0aGUiLCJwcm9sb2d1ZSBvZiB0aGUgY29kZSIsInRoZSBjb2RlIGFuZCBpbiIsImNvZGUgYW5kIGluIGFsbCIsImFuZCBpbiBhbGwgc291cmNlIiwiaW4gYWxsIHNvdXJjZSBsaXN0aW5ncyIsImFsbCBzb3VyY2UgbGlzdGluZ3Mgb2YiLCJzb3VyY2UgbGlzdGluZ3Mgb2YgdGhlIiwibGlzdGluZ3Mgb2YgdGhlIGNvZGUiLCJvZiB0aGUgY29kZSBjb3B5cmlnaHQiLCJ0aGUgY29kZSBjb3B5cmlnaHQgbm90aWNlIiwiY29kZSBjb3B5cmlnaHQgbm90aWNlIDIwMDIiLCJjb3B5cmlnaHQgbm90aWNlIDIwMDIgdW5pdmVyc2l0eSIsIm5vdGljZSAyMDAyIHVuaXZlcnNpdHkgb2YiLCIyMDAyIHVuaXZlcnNpdHkgb2YgY2hpY2FnbyIsInVuaXZlcnNpdHkgb2YgY2hpY2FnbyBwZXJtaXNzaW9uIiwib2YgY2hpY2FnbyBwZXJtaXNzaW9uIGlzIiwiY2hpY2FnbyBwZXJtaXNzaW9uIGlzIGhlcmVieSIsInJlZGlzdHJpYnV0ZSB0byBvdGhlcnMgdGhpcyIsInRvIG90aGVycyB0aGlzIHNvZnR3YXJlIiwib3RoZXJzIHRoaXMgc29mdHdhcmUgd2FzIiwid2FzIGF1dGhvcmVkIGJ5IGFyZ29ubmUiLCJhdXRob3JlZCBieSBhcmdvbm5lIG5hdGlvbmFsIiwiYnkgYXJnb25uZSBuYXRpb25hbCBsYWJvcmF0b3J5IiwiYXJnb25uZSBuYXRpb25hbCBsYWJvcmF0b3J5IGdyb3VwIiwibmF0aW9uYWwgbGFib3JhdG9yeSBncm91cCB3IiwibGFib3JhdG9yeSBncm91cCB3IGdyb3BwIiwiZ3JvdXAgdyBncm9wcCA2MzAiLCJ3IGdyb3BwIDYzMCAyNTIiLCJncm9wcCA2MzAgMjUyIDQzMTgiLCI2MzAgMjUyIDQzMTggZmF4IiwiMjUyIDQzMTggZmF4IDYzMCIsIjQzMTggZmF4IDYzMCAyNTIiLCI1OTg2IGUgbWFpbCBncm9wcCIsImUgbWFpbCBncm9wcCBtY3MiLCJtYWlsIGdyb3BwIG1jcyBhbmwiLCJncm9wcCBtY3MgYW5sIGdvdiIsIm1jcyBhbmwgZ292IGUiLCJhbmwgZ292IGUgbHVzayIsImdvdiBlIGx1c2sgNjMwIiwiZSBsdXNrIDYzMCAyNTIiLCJsdXNrIDYzMCAyNTIgNzg1MiIsIjYzMCAyNTIgNzg1MiBmYXgiLCIyNTIgNzg1MiBmYXggNjMwIiwiNzg1MiBmYXggNjMwIDI1MiIsIjU5ODYgZSBtYWlsIGx1c2siLCJlIG1haWwgbHVzayBtY3MiLCJtYWlsIGx1c2sgbWNzIGFubCIsImx1c2sgbWNzIGFubCBnb3YiLCJtY3MgYW5sIGdvdiBtYXRoZW1hdGljcyIsImFubCBnb3YgbWF0aGVtYXRpY3MgYW5kIiwiZ292IG1hdGhlbWF0aWNzIGFuZCBjb21wdXRlciIsImFyZ29ubmUgaWwgNjA0MzkgZ292ZXJubWVudCIsImlsIDYwNDM5IGdvdmVybm1lbnQgbGljZW5zZSIsIjYwNDM5IGdvdmVybm1lbnQgbGljZW5zZSBwb3J0aW9ucyIsImdvdmVybm1lbnQgbGljZW5zZSBwb3J0aW9ucyBvZiIsInBvcnRpb25zIG9mIHRoaXMgbWF0ZXJpYWwiLCJvZiB0aGlzIG1hdGVyaWFsIHJlc3VsdGVkIiwidGhpcyBtYXRlcmlhbCByZXN1bHRlZCBmcm9tIiwibWF0ZXJpYWwgcmVzdWx0ZWQgZnJvbSB3b3JrIiwicmVzdWx0ZWQgZnJvbSB3b3JrIGRldmVsb3BlZCIsImZyb20gd29yayBkZXZlbG9wZWQgdW5kZXIiLCJ3b3JrIGRldmVsb3BlZCB1bmRlciBhIiwiZGV2ZWxvcGVkIHVuZGVyIGEgdSIsInVuZGVyIGEgdSBzIiwidSBzIGdvdmVybm1lbnQgY29udHJhY3QiLCJzIGdvdmVybm1lbnQgY29udHJhY3QgYW5kIiwiZ292ZXJubWVudCBjb250cmFjdCBhbmQgYXJlIiwiY29udHJhY3QgYW5kIGFyZSBzdWJqZWN0IiwidGhlIGZvbGxvd2luZyBsaWNlbnNlIHRoZSIsImZvbGxvd2luZyBsaWNlbnNlIHRoZSBnb3Zlcm5tZW50IiwibGljZW5zZSB0aGUgZ292ZXJubWVudCBpcyIsInRoZSBnb3Zlcm5tZW50IGlzIGdyYW50ZWQiLCJnb3Zlcm5tZW50IGlzIGdyYW50ZWQgZm9yIiwiaXMgZ3JhbnRlZCBmb3IgaXRzZWxmIiwiZ3JhbnRlZCBmb3IgaXRzZWxmIGFuZCIsImZvciBpdHNlbGYgYW5kIG90aGVycyIsIml0c2VsZiBhbmQgb3RoZXJzIGFjdGluZyIsImFuZCBvdGhlcnMgYWN0aW5nIG9uIiwib3RoZXJzIGFjdGluZyBvbiBpdHMiLCJvbiBpdHMgYmVoYWxmIGEiLCJpdHMgYmVoYWxmIGEgcGFpZCJdfSx7ImxpY2Vuc2VUZXh0cyI6WyJwc2ZyYWcuZHR4IENvcHlyaWdodCAoQykgMTk5NiBDcmFpZyBCYXJyYXR0LCBNaWNoYWVsIEMuIEdyYW50LCBhbmQgRGF2aWQgQ2FybGlzbGUuXG5cbkFsbCByaWdodHMgYXJlIHJlc2VydmVkLlxuXG5UaGlzIHN5c3RlbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIERvbid0IGNvbWUgY29tcGxhaW5pbmcgdG8gdXMgaWYgeW91IG1vZGlmeSB0aGlzIGZpbGUgYW5kIGl0IGRvZXNuJ3Qgd29yayEgSWYgdGhpcyBmaWxlIGlzIG1vZGlmaWVkIGJ5IGFueW9uZSBidXQgdGhlIGF1dGhvcnMsIHRob3NlIGNoYW5nZXMgYW5kIHRoZWlyIGF1dGhvcnMgbXVzdCBiZSBleHBsaWNpdGx5IHN0YXRlZCBIRVJFLiJdLCJsaWNlbnNlSWRzIjpbInBzZnJhZyJdLCJrZXl3b3JkcyI6WyJwc2ZyYWcgZHR4IGNvcHlyaWdodCIsImR0eCBjb3B5cmlnaHQgYyIsImMgMTk5NiBjcmFpZyIsIjE5OTYgY3JhaWcgYmFycmF0dCIsImNyYWlnIGJhcnJhdHQgbWljaGFlbCIsImJhcnJhdHQgbWljaGFlbCBjIiwibWljaGFlbCBjIGdyYW50IiwiYyBncmFudCBhbmQiLCJncmFudCBhbmQgZGF2aWQiLCJhbmQgZGF2aWQgY2FybGlzbGUiLCJkYXZpZCBjYXJsaXNsZSBhbGwiLCJjYXJsaXNsZSBhbGwgcmlnaHRzIiwiYWxsIHJpZ2h0cyBhcmUiLCJyaWdodHMgYXJlIHJlc2VydmVkIiwicmVzZXJ2ZWQgdGhpcyBzeXN0ZW0iLCJ0aGlzIHN5c3RlbSBpcyIsInN5c3RlbSBpcyBkaXN0cmlidXRlZCIsInBhcnRpY3VsYXIgcHVycG9zZSBkb24iLCJwdXJwb3NlIGRvbiB0IiwiZG9uIHQgY29tZSIsInQgY29tZSBjb21wbGFpbmluZyIsImNvbWUgY29tcGxhaW5pbmcgdG8iLCJjb21wbGFpbmluZyB0byB1cyIsInRvIHVzIGlmIiwidXMgaWYgeW91IiwibW9kaWZ5IHRoaXMgZmlsZSIsImZpbGUgYW5kIGl0IiwiYW5kIGl0IGRvZXNuIiwiaXQgZG9lc24gdCIsInQgd29yayBpZiIsImZpbGUgaXMgbW9kaWZpZWQiLCJtb2RpZmllZCBieSBhbnlvbmUiLCJieSBhbnlvbmUgYnV0IiwiYW55b25lIGJ1dCB0aGUiLCJidXQgdGhlIGF1dGhvcnMiLCJ0aGUgYXV0aG9ycyB0aG9zZSIsImF1dGhvcnMgdGhvc2UgY2hhbmdlcyIsInRob3NlIGNoYW5nZXMgYW5kIiwiYW5kIHRoZWlyIGF1dGhvcnMiLCJ0aGVpciBhdXRob3JzIG11c3QiLCJhdXRob3JzIG11c3QgYmUiLCJtdXN0IGJlIGV4cGxpY2l0bHkiLCJiZSBleHBsaWNpdGx5IHN0YXRlZCIsImV4cGxpY2l0bHkgc3RhdGVkIGhlcmUiLCJwc2ZyYWcgZHR4IGNvcHlyaWdodCBjIiwiZHR4IGNvcHlyaWdodCBjIDE5OTYiLCJjb3B5cmlnaHQgYyAxOTk2IGNyYWlnIiwiYyAxOTk2IGNyYWlnIGJhcnJhdHQiLCIxOTk2IGNyYWlnIGJhcnJhdHQgbWljaGFlbCIsImNyYWlnIGJhcnJhdHQgbWljaGFlbCBjIiwiYmFycmF0dCBtaWNoYWVsIGMgZ3JhbnQiLCJtaWNoYWVsIGMgZ3JhbnQgYW5kIiwiYyBncmFudCBhbmQgZGF2aWQiLCJncmFudCBhbmQgZGF2aWQgY2FybGlzbGUiLCJhbmQgZGF2aWQgY2FybGlzbGUgYWxsIiwiZGF2aWQgY2FybGlzbGUgYWxsIHJpZ2h0cyIsImNhcmxpc2xlIGFsbCByaWdodHMgYXJlIiwiYWxsIHJpZ2h0cyBhcmUgcmVzZXJ2ZWQiLCJyaWdodHMgYXJlIHJlc2VydmVkIHRoaXMiLCJhcmUgcmVzZXJ2ZWQgdGhpcyBzeXN0ZW0iLCJyZXNlcnZlZCB0aGlzIHN5c3RlbSBpcyIsInRoaXMgc3lzdGVtIGlzIGRpc3RyaWJ1dGVkIiwic3lzdGVtIGlzIGRpc3RyaWJ1dGVkIGluIiwiYSBwYXJ0aWN1bGFyIHB1cnBvc2UgZG9uIiwicGFydGljdWxhciBwdXJwb3NlIGRvbiB0IiwicHVycG9zZSBkb24gdCBjb21lIiwiZG9uIHQgY29tZSBjb21wbGFpbmluZyIsInQgY29tZSBjb21wbGFpbmluZyB0byIsImNvbWUgY29tcGxhaW5pbmcgdG8gdXMiLCJjb21wbGFpbmluZyB0byB1cyBpZiIsInRvIHVzIGlmIHlvdSIsInVzIGlmIHlvdSBtb2RpZnkiLCJ5b3UgbW9kaWZ5IHRoaXMgZmlsZSIsIm1vZGlmeSB0aGlzIGZpbGUgYW5kIiwidGhpcyBmaWxlIGFuZCBpdCIsImZpbGUgYW5kIGl0IGRvZXNuIiwiYW5kIGl0IGRvZXNuIHQiLCJpdCBkb2VzbiB0IHdvcmsiLCJkb2VzbiB0IHdvcmsgaWYiLCJ0IHdvcmsgaWYgdGhpcyIsIndvcmsgaWYgdGhpcyBmaWxlIiwiaWYgdGhpcyBmaWxlIGlzIiwidGhpcyBmaWxlIGlzIG1vZGlmaWVkIiwiZmlsZSBpcyBtb2RpZmllZCBieSIsImlzIG1vZGlmaWVkIGJ5IGFueW9uZSIsIm1vZGlmaWVkIGJ5IGFueW9uZSBidXQiLCJieSBhbnlvbmUgYnV0IHRoZSIsImFueW9uZSBidXQgdGhlIGF1dGhvcnMiLCJidXQgdGhlIGF1dGhvcnMgdGhvc2UiLCJ0aGUgYXV0aG9ycyB0aG9zZSBjaGFuZ2VzIiwiYXV0aG9ycyB0aG9zZSBjaGFuZ2VzIGFuZCIsInRob3NlIGNoYW5nZXMgYW5kIHRoZWlyIiwiY2hhbmdlcyBhbmQgdGhlaXIgYXV0aG9ycyIsImFuZCB0aGVpciBhdXRob3JzIG11c3QiLCJ0aGVpciBhdXRob3JzIG11c3QgYmUiLCJhdXRob3JzIG11c3QgYmUgZXhwbGljaXRseSIsIm11c3QgYmUgZXhwbGljaXRseSBzdGF0ZWQiLCJiZSBleHBsaWNpdGx5IHN0YXRlZCBoZXJlIiwicHNmcmFnIGR0eCBjb3B5cmlnaHQgYyAxOTk2IiwiZHR4IGNvcHlyaWdodCBjIDE5OTYgY3JhaWciLCJjb3B5cmlnaHQgYyAxOTk2IGNyYWlnIGJhcnJhdHQiLCJjIDE5OTYgY3JhaWcgYmFycmF0dCBtaWNoYWVsIiwiMTk5NiBjcmFpZyBiYXJyYXR0IG1pY2hhZWwgYyIsImNyYWlnIGJhcnJhdHQgbWljaGFlbCBjIGdyYW50IiwiYmFycmF0dCBtaWNoYWVsIGMgZ3JhbnQgYW5kIiwibWljaGFlbCBjIGdyYW50IGFuZCBkYXZpZCIsImMgZ3JhbnQgYW5kIGRhdmlkIGNhcmxpc2xlIiwiZ3JhbnQgYW5kIGRhdmlkIGNhcmxpc2xlIGFsbCIsImFuZCBkYXZpZCBjYXJsaXNsZSBhbGwgcmlnaHRzIiwiZGF2aWQgY2FybGlzbGUgYWxsIHJpZ2h0cyBhcmUiLCJjYXJsaXNsZSBhbGwgcmlnaHRzIGFyZSByZXNlcnZlZCIsImFsbCByaWdodHMgYXJlIHJlc2VydmVkIHRoaXMiLCJyaWdodHMgYXJlIHJlc2VydmVkIHRoaXMgc3lzdGVtIiwiYXJlIHJlc2VydmVkIHRoaXMgc3lzdGVtIGlzIiwicmVzZXJ2ZWQgdGhpcyBzeXN0ZW0gaXMgZGlzdHJpYnV0ZWQiLCJ0aGlzIHN5c3RlbSBpcyBkaXN0cmlidXRlZCBpbiIsInN5c3RlbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUiLCJmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgZG9uIiwiYSBwYXJ0aWN1bGFyIHB1cnBvc2UgZG9uIHQiLCJwYXJ0aWN1bGFyIHB1cnBvc2UgZG9uIHQgY29tZSIsInB1cnBvc2UgZG9uIHQgY29tZSBjb21wbGFpbmluZyIsImRvbiB0IGNvbWUgY29tcGxhaW5pbmcgdG8iLCJ0IGNvbWUgY29tcGxhaW5pbmcgdG8gdXMiLCJjb21lIGNvbXBsYWluaW5nIHRvIHVzIGlmIiwiY29tcGxhaW5pbmcgdG8gdXMgaWYgeW91IiwidG8gdXMgaWYgeW91IG1vZGlmeSIsInVzIGlmIHlvdSBtb2RpZnkgdGhpcyIsImlmIHlvdSBtb2RpZnkgdGhpcyBmaWxlIiwieW91IG1vZGlmeSB0aGlzIGZpbGUgYW5kIiwibW9kaWZ5IHRoaXMgZmlsZSBhbmQgaXQiLCJ0aGlzIGZpbGUgYW5kIGl0IGRvZXNuIiwiZmlsZSBhbmQgaXQgZG9lc24gdCIsImFuZCBpdCBkb2VzbiB0IHdvcmsiLCJpdCBkb2VzbiB0IHdvcmsgaWYiLCJkb2VzbiB0IHdvcmsgaWYgdGhpcyIsInQgd29yayBpZiB0aGlzIGZpbGUiLCJ3b3JrIGlmIHRoaXMgZmlsZSBpcyIsImlmIHRoaXMgZmlsZSBpcyBtb2RpZmllZCIsInRoaXMgZmlsZSBpcyBtb2RpZmllZCBieSIsImZpbGUgaXMgbW9kaWZpZWQgYnkgYW55b25lIiwiaXMgbW9kaWZpZWQgYnkgYW55b25lIGJ1dCIsIm1vZGlmaWVkIGJ5IGFueW9uZSBidXQgdGhlIiwiYnkgYW55b25lIGJ1dCB0aGUgYXV0aG9ycyIsImFueW9uZSBidXQgdGhlIGF1dGhvcnMgdGhvc2UiLCJidXQgdGhlIGF1dGhvcnMgdGhvc2UgY2hhbmdlcyIsInRoZSBhdXRob3JzIHRob3NlIGNoYW5nZXMgYW5kIiwiYXV0aG9ycyB0aG9zZSBjaGFuZ2VzIGFuZCB0aGVpciIsInRob3NlIGNoYW5nZXMgYW5kIHRoZWlyIGF1dGhvcnMiLCJjaGFuZ2VzIGFuZCB0aGVpciBhdXRob3JzIG11c3QiLCJhbmQgdGhlaXIgYXV0aG9ycyBtdXN0IGJlIiwidGhlaXIgYXV0aG9ycyBtdXN0IGJlIGV4cGxpY2l0bHkiLCJhdXRob3JzIG11c3QgYmUgZXhwbGljaXRseSBzdGF0ZWQiLCJtdXN0IGJlIGV4cGxpY2l0bHkgc3RhdGVkIGhlcmUiXX0seyJsaWNlbnNlVGV4dHMiOlsiUFMgVXRpbGl0aWVzIFBhY2thZ2UgVGhlIGNvbnN0aXR1ZW50IGZpbGVzIG9mIHRoaXMgcGFja2FnZSBsaXN0ZWQgYmVsb3cgYXJlIGNvcHlyaWdodCAoQykgMTk5MS0xOTk1IEFuZ3VzIEouIEMuIER1Z2dhbi5cblxuTElDRU5TRSBNYWtlZmlsZS5tc2MgTWFrZWZpbGUubnQgTWFrZWZpbGUub3MyXG5cbk1ha2VmaWxlLnVuaXggUkVBRE1FIGNvbmZpZy5oIGRlc2NyaXAubW1zXG5cbmVwc2ZmaXQuYyBlcHNmZml0Lm1hbiBleHRyYWN0cmVzLm1hbiBleHRyYWN0cmVzLnBsXG5cbmZpeGRsc3Jwcy5tYW4gZml4ZGxzcnBzLnBsIGZpeGZtcHMubWFuIGZpeGZtcHMucGxcblxuZml4bWFjcHMubWFuIGZpeG1hY3BzLnBsIGZpeHBzZGl0cHMubWFuIGZpeHBzZGl0cHMucGxcblxuZml4cHNwcHMubWFuIGZpeHBzcHBzLnBsIGZpeHNjcmliZXBzLm1hbiBmaXhzY3JpYmVwcy5wbFxuXG5maXh0cHBzLm1hbiBmaXh0cHBzLnBsIGZpeHdmd3BzLm1hbiBmaXh3Zndwcy5wbFxuXG5maXh3cHBzLm1hbiBmaXh3cHBzLnBsIGZpeHd3cHMubWFuIGZpeHd3cHMucGxcblxuZ2V0YWZtIGdldGFmbS5tYW4gaW5jbHVkZXJlcy5tYW4gaW5jbHVkZXJlcy5wbFxuXG5tYWtldGV4dCBwYXRjaGxldi5oIHBzYm9vay5jIHBzYm9vay5tYW5cblxucHNlcnJvci5jIHBzZXJyb3IuaCBwc21lcmdlLm1hbiBwc21lcmdlLnBsXG5cbnBzbnVwLmMgcHNudXAubWFuIHBzcmVzaXplLmMgcHNyZXNpemUubWFuXG5cbnBzc2VsZWN0LmMgcHNzZWxlY3QubWFuIHBzc3BlYy5jIHBzc3BlYy5oXG5cbnBzdG9wcy5jIHBzdG9wcy5tYW4gcHN1dGlsLmMgcHN1dGlsLmhcblxuc2hvd2NoYXJcblxuVGhleSBtYXkgYmUgY29waWVkIGFuZCB1c2VkIGZvciBhbnkgcHVycG9zZSAoaW5jbHVkaW5nIGRpc3RyaWJ1dGlvbiBhcyBwYXJ0IG9mIGEgZm9yLXByb2ZpdCBwcm9kdWN0KSwgcHJvdmlkZWQ6XG5cbiAgIDEpIFRoZSBvcmlnaW5hbCBhdHRyaWJ1dGlvbiBvZiB0aGUgcHJvZ3JhbXMgaXMgY2xlYXJseSBkaXNwbGF5ZWQgaW4gdGhlIHByb2R1Y3QgYW5kL29yIGRvY3VtZW50YXRpb24sIGV2ZW4gaWYgdGhlIHByb2dyYW1zIGFyZSBtb2RpZmllZCBhbmQvb3IgcmVuYW1lZCBhcyBwYXJ0IG9mIHRoZSBwcm9kdWN0LlxuXG4gICAyKSBUaGUgb3JpZ2luYWwgc291cmNlIGNvZGUgb2YgdGhlIHByb2dyYW1zIGlzIHByb3ZpZGVkIGZyZWUgb2YgY2hhcmdlIChleGNlcHQgZm9yIHJlYXNvbmFibGUgZGlzdHJpYnV0aW9uIGNvc3RzKS4gRm9yIGEgZGVmaW5pdGlvbiBvZiByZWFzb25hYmxlIGRpc3RyaWJ1dGlvbiBjb3N0cywgc2VlIHRoZSBHbnUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciBMYXJyeSBXYWxsJ3MgQXJ0aXN0aWMgTGljZW5zZSAocHJvdmlkZWQgd2l0aCB0aGUgUGVybCA0IGtpdCkuIFRoZSBHUEwgYW5kIEFydGlzdGljIExpY2Vuc2UgaW4gTk8gV0FZIGFmZmVjdCB0aGlzIGxpY2Vuc2U7IHRoZXkgYXJlIG1lcmVseSB1c2VkIGFzIGV4YW1wbGVzIG9mIHRoZSBzcGlyaXQgaW4gd2hpY2ggaXQgaXMgaW50ZW5kZWQuXG5cbiAgIDMpIFRoZXNlIHByb2dyYW1zIGFyZSBwcm92aWRlZCBcImFzLWlzXCIuIE5vIHdhcnJhbnR5IG9yIGd1YXJhbnRlZSBvZiB0aGVpciBmaXRuZXNzIGZvciBhbnkgcGFydGljdWxhciB0YXNrIGlzIHByb3ZpZGVkLiBVc2Ugb2YgdGhlc2UgcHJvZ3JhbXMgaXMgY29tcGxldGVseSBhdCB5b3VyIG93biByaXNrLlxuXG5CYXNpY2FsbHksIEkgZG9uJ3QgbWluZCBob3cgeW91IHVzZSB0aGUgcHJvZ3JhbXMgc28gbG9uZyBhcyB5b3UgYWNrbm93bGVkZ2UgdGhlIGF1dGhvciwgYW5kIGdpdmUgcGVvcGxlIHRoZSBvcmlnaW5hbHMgaWYgdGhleSB3YW50IHRoZW0uIl0sImxpY2Vuc2VJZHMiOlsicHN1dGlscyJdLCJrZXl3b3JkcyI6WyJwcyB1dGlsaXRpZXMgcGFja2FnZSIsInV0aWxpdGllcyBwYWNrYWdlIHRoZSIsInBhY2thZ2UgdGhlIGNvbnN0aXR1ZW50IiwidGhlIGNvbnN0aXR1ZW50IGZpbGVzIiwiY29uc3RpdHVlbnQgZmlsZXMgb2YiLCJ0aGlzIHBhY2thZ2UgbGlzdGVkIiwicGFja2FnZSBsaXN0ZWQgYmVsb3ciLCJsaXN0ZWQgYmVsb3cgYXJlIiwiYmVsb3cgYXJlIGNvcHlyaWdodCIsIjE5OTEgMTk5NSBhbmd1cyIsIjE5OTUgYW5ndXMgaiIsImFuZ3VzIGogYyIsImogYyBkdWdnYW4iLCJjIGR1Z2dhbiBsaWNlbnNlIiwiZHVnZ2FuIGxpY2Vuc2UgbWFrZWZpbGUiLCJsaWNlbnNlIG1ha2VmaWxlIG1zYyIsIm1ha2VmaWxlIG1zYyBtYWtlZmlsZSIsIm1zYyBtYWtlZmlsZSBudCIsIm1ha2VmaWxlIG50IG1ha2VmaWxlIiwibnQgbWFrZWZpbGUgb3MyIiwibWFrZWZpbGUgb3MyIG1ha2VmaWxlIiwib3MyIG1ha2VmaWxlIHVuaXgiLCJtYWtlZmlsZSB1bml4IHJlYWRtZSIsInVuaXggcmVhZG1lIGNvbmZpZyIsInJlYWRtZSBjb25maWcgaCIsImNvbmZpZyBoIGRlc2NyaXAiLCJoIGRlc2NyaXAgbW1zIiwiZGVzY3JpcCBtbXMgZXBzZmZpdCIsIm1tcyBlcHNmZml0IGMiLCJlcHNmZml0IGMgZXBzZmZpdCIsImMgZXBzZmZpdCBtYW4iLCJlcHNmZml0IG1hbiBleHRyYWN0cmVzIiwibWFuIGV4dHJhY3RyZXMgbWFuIiwiZXh0cmFjdHJlcyBtYW4gZXh0cmFjdHJlcyIsIm1hbiBleHRyYWN0cmVzIHBsIiwiZXh0cmFjdHJlcyBwbCBmaXhkbHNycHMiLCJwbCBmaXhkbHNycHMgbWFuIiwiZml4ZGxzcnBzIG1hbiBmaXhkbHNycHMiLCJtYW4gZml4ZGxzcnBzIHBsIiwiZml4ZGxzcnBzIHBsIGZpeGZtcHMiLCJwbCBmaXhmbXBzIG1hbiIsImZpeGZtcHMgbWFuIGZpeGZtcHMiLCJtYW4gZml4Zm1wcyBwbCIsImZpeGZtcHMgcGwgZml4bWFjcHMiLCJwbCBmaXhtYWNwcyBtYW4iLCJmaXhtYWNwcyBtYW4gZml4bWFjcHMiLCJtYW4gZml4bWFjcHMgcGwiLCJmaXhtYWNwcyBwbCBmaXhwc2RpdHBzIiwicGwgZml4cHNkaXRwcyBtYW4iLCJmaXhwc2RpdHBzIG1hbiBmaXhwc2RpdHBzIiwibWFuIGZpeHBzZGl0cHMgcGwiLCJmaXhwc2RpdHBzIHBsIGZpeHBzcHBzIiwicGwgZml4cHNwcHMgbWFuIiwiZml4cHNwcHMgbWFuIGZpeHBzcHBzIiwibWFuIGZpeHBzcHBzIHBsIiwiZml4cHNwcHMgcGwgZml4c2NyaWJlcHMiLCJwbCBmaXhzY3JpYmVwcyBtYW4iLCJmaXhzY3JpYmVwcyBtYW4gZml4c2NyaWJlcHMiLCJtYW4gZml4c2NyaWJlcHMgcGwiLCJmaXhzY3JpYmVwcyBwbCBmaXh0cHBzIiwicGwgZml4dHBwcyBtYW4iLCJmaXh0cHBzIG1hbiBmaXh0cHBzIiwibWFuIGZpeHRwcHMgcGwiLCJmaXh0cHBzIHBsIGZpeHdmd3BzIiwicGwgZml4d2Z3cHMgbWFuIiwiZml4d2Z3cHMgbWFuIGZpeHdmd3BzIiwibWFuIGZpeHdmd3BzIHBsIiwiZml4d2Z3cHMgcGwgZml4d3BwcyIsInBsIGZpeHdwcHMgbWFuIiwiZml4d3BwcyBtYW4gZml4d3BwcyIsIm1hbiBmaXh3cHBzIHBsIiwiZml4d3BwcyBwbCBmaXh3d3BzIiwicGwgZml4d3dwcyBtYW4iLCJmaXh3d3BzIG1hbiBmaXh3d3BzIiwibWFuIGZpeHd3cHMgcGwiLCJmaXh3d3BzIHBsIGdldGFmbSIsInBsIGdldGFmbSBnZXRhZm0iLCJnZXRhZm0gZ2V0YWZtIG1hbiIsImdldGFmbSBtYW4gaW5jbHVkZXJlcyIsIm1hbiBpbmNsdWRlcmVzIG1hbiIsImluY2x1ZGVyZXMgbWFuIGluY2x1ZGVyZXMiLCJtYW4gaW5jbHVkZXJlcyBwbCIsImluY2x1ZGVyZXMgcGwgbWFrZXRleHQiLCJwbCBtYWtldGV4dCBwYXRjaGxldiIsIm1ha2V0ZXh0IHBhdGNobGV2IGgiLCJwYXRjaGxldiBoIHBzYm9vayIsImggcHNib29rIGMiLCJwc2Jvb2sgYyBwc2Jvb2siLCJjIHBzYm9vayBtYW4iLCJwc2Jvb2sgbWFuIHBzZXJyb3IiLCJtYW4gcHNlcnJvciBjIiwicHNlcnJvciBjIHBzZXJyb3IiLCJjIHBzZXJyb3IgaCIsInBzZXJyb3IgaCBwc21lcmdlIiwiaCBwc21lcmdlIG1hbiIsInBzbWVyZ2UgbWFuIHBzbWVyZ2UiLCJtYW4gcHNtZXJnZSBwbCIsInBzbWVyZ2UgcGwgcHNudXAiLCJwbCBwc251cCBjIiwicHNudXAgYyBwc251cCIsImMgcHNudXAgbWFuIiwicHNudXAgbWFuIHBzcmVzaXplIiwibWFuIHBzcmVzaXplIGMiLCJwc3Jlc2l6ZSBjIHBzcmVzaXplIiwiYyBwc3Jlc2l6ZSBtYW4iLCJwc3Jlc2l6ZSBtYW4gcHNzZWxlY3QiLCJtYW4gcHNzZWxlY3QgYyIsInBzc2VsZWN0IGMgcHNzZWxlY3QiLCJjIHBzc2VsZWN0IG1hbiIsInBzc2VsZWN0IG1hbiBwc3NwZWMiLCJtYW4gcHNzcGVjIGMiLCJwc3NwZWMgYyBwc3NwZWMiLCJjIHBzc3BlYyBoIiwicHNzcGVjIGggcHN0b3BzIiwiaCBwc3RvcHMgYyIsInBzdG9wcyBjIHBzdG9wcyIsImMgcHN0b3BzIG1hbiIsInBzdG9wcyBtYW4gcHN1dGlsIiwibWFuIHBzdXRpbCBjIiwicHN1dGlsIGMgcHN1dGlsIiwiYyBwc3V0aWwgaCIsInBzdXRpbCBoIHNob3djaGFyIiwiaCBzaG93Y2hhciB0aGV5Iiwic2hvd2NoYXIgdGhleSBtYXkiLCJ0aGV5IG1heSBiZSIsImNvcGllZCBhbmQgdXNlZCIsImFuZCB1c2VkIGZvciIsInB1cnBvc2UgaW5jbHVkaW5nIGRpc3RyaWJ1dGlvbiIsImluY2x1ZGluZyBkaXN0cmlidXRpb24gYXMiLCJkaXN0cmlidXRpb24gYXMgcGFydCIsIm9mIGEgZm9yIiwiYSBmb3IgcHJvZml0IiwiZm9yIHByb2ZpdCBwcm9kdWN0IiwicHJvZml0IHByb2R1Y3QgcHJvdmlkZWQiLCJwcm9kdWN0IHByb3ZpZGVkIDEiLCJwcm92aWRlZCAxIHRoZSIsIjEgdGhlIG9yaWdpbmFsIiwidGhlIG9yaWdpbmFsIGF0dHJpYnV0aW9uIiwib3JpZ2luYWwgYXR0cmlidXRpb24gb2YiLCJwcm9ncmFtcyBpcyBjbGVhcmx5IiwiaXMgY2xlYXJseSBkaXNwbGF5ZWQiLCJjbGVhcmx5IGRpc3BsYXllZCBpbiIsImRpc3BsYXllZCBpbiB0aGUiLCJwcm9kdWN0IGFuZCBvciIsIm9yIGRvY3VtZW50YXRpb24gZXZlbiIsImlmIHRoZSBwcm9ncmFtcyIsInRoZSBwcm9ncmFtcyBhcmUiLCJwcm9ncmFtcyBhcmUgbW9kaWZpZWQiLCJhcmUgbW9kaWZpZWQgYW5kIiwibW9kaWZpZWQgYW5kIG9yIiwiYW5kIG9yIHJlbmFtZWQiLCJvciByZW5hbWVkIGFzIiwicmVuYW1lZCBhcyBwYXJ0IiwidGhlIHByb2R1Y3QgMiIsInByb2R1Y3QgMiB0aGUiLCIyIHRoZSBvcmlnaW5hbCIsInByb2dyYW1zIGlzIHByb3ZpZGVkIiwiaXMgcHJvdmlkZWQgZnJlZSIsInByb3ZpZGVkIGZyZWUgb2YiLCJvZiBjaGFyZ2UgZXhjZXB0IiwiY2hhcmdlIGV4Y2VwdCBmb3IiLCJleGNlcHQgZm9yIHJlYXNvbmFibGUiLCJmb3IgcmVhc29uYWJsZSBkaXN0cmlidXRpb24iLCJkaXN0cmlidXRpb24gY29zdHMgZm9yIiwiY29zdHMgZm9yIGEiLCJmb3IgYSBkZWZpbml0aW9uIiwiZGVmaW5pdGlvbiBvZiByZWFzb25hYmxlIiwib2YgcmVhc29uYWJsZSBkaXN0cmlidXRpb24iLCJkaXN0cmlidXRpb24gY29zdHMgc2VlIiwiY29zdHMgc2VlIHRoZSIsImxpY2Vuc2Ugb3IgbGFycnkiLCJvciBsYXJyeSB3YWxsIiwibGFycnkgd2FsbCBzIiwid2FsbCBzIGFydGlzdGljIiwicyBhcnRpc3RpYyBsaWNlbnNlIiwiYXJ0aXN0aWMgbGljZW5zZSBwcm92aWRlZCIsInRoZSBwZXJsIDQiLCJwZXJsIDQga2l0IiwiNCBraXQgdGhlIiwia2l0IHRoZSBncGwiLCJ0aGUgZ3BsIGFuZCIsImdwbCBhbmQgYXJ0aXN0aWMiLCJhbmQgYXJ0aXN0aWMgbGljZW5zZSIsImFydGlzdGljIGxpY2Vuc2UgaW4iLCJsaWNlbnNlIGluIG5vIiwiaW4gbm8gd2F5Iiwibm8gd2F5IGFmZmVjdCIsIndheSBhZmZlY3QgdGhpcyIsImFmZmVjdCB0aGlzIGxpY2Vuc2UiLCJ0aGV5IGFyZSBtZXJlbHkiLCJhcmUgbWVyZWx5IHVzZWQiLCJtZXJlbHkgdXNlZCBhcyIsInVzZWQgYXMgZXhhbXBsZXMiLCJhcyBleGFtcGxlcyBvZiIsImV4YW1wbGVzIG9mIHRoZSIsIm9mIHRoZSBzcGlyaXQiLCJ0aGUgc3Bpcml0IGluIiwic3Bpcml0IGluIHdoaWNoIiwiaXMgaW50ZW5kZWQgMyIsImludGVuZGVkIDMgdGhlc2UiXX0seyJsaWNlbnNlVGV4dHMiOlsiT1JJR0lOQUwgTElDRU5TRTogVGhpcyBzb2Z0d2FyZSBpcyAoYykgQ29weXJpZ2h0IDE5OTIgYnkgUGFuYWdpb3RpcyBUc2lyaWdvdGlzXG5cblRoZSBhdXRob3IgKFBhbmFnaW90aXMgVHNpcmlnb3RpcykgZ3JhbnRzIHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGV4dGFudCBpbiBmaWxlcyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBub3QgcmVtb3ZlZCBmcm9tIGZpbGVzIGluY2x1ZGVkIGluIGFueSByZWRpc3RyaWJ1dGlvbiBhbmQgdGhhdCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMgYWxzbyBpbmNsdWRlZCBpbiBhbnkgcmVkaXN0cmlidXRpb24uXG5cbk1vZGlmaWNhdGlvbnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQsIGVpdGhlciBieSBkaXN0cmlidXRpbmcgdGhlIG1vZGlmaWVkIHNvZnR3YXJlIG9yIGJ5IGRpc3RyaWJ1dGluZyBwYXRjaGVzIHRvIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSwgdW5kZXIgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIHRlcm1zOlxuXG4gICAxLiBUaGUgdmVyc2lvbiBudW1iZXIgd2lsbCBiZSBtb2RpZmllZCBhcyBmb2xsb3dzOlxuXG4gICAgICBhLiBUaGUgZmlyc3QgMyBjb21wb25lbnRzIG9mIHRoZSB2ZXJzaW9uIG51bWJlciAoaS5lIFx1MDAzY251bWJlclx1MDAzZS5cdTAwM2NudW1iZXJcdTAwM2UuXHUwMDNjbnVtYmVyXHUwMDNlKSB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuXG5cbiAgICAgIGIuIEEgbmV3IGNvbXBvbmVudCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSB2ZXJzaW9uIG51bWJlciB0byBpbmRpY2F0ZSB0aGUgbW9kaWZpY2F0aW9uIGxldmVsLiBUaGUgZm9ybSBvZiB0aGlzIGNvbXBvbmVudCBpcyB1cCB0byB0aGUgYXV0aG9yIG9mIHRoZSBtb2RpZmljYXRpb25zLlxuXG4gICAyLiBUaGUgYXV0aG9yIG9mIHRoZSBtb2RpZmljYXRpb25zIHdpbGwgaW5jbHVkZSBoaXMvaGVyIG5hbWUgYnkgYXBwZW5kaW5nIGl0IGFsb25nIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG51bWJlciB0byB0aGlzIGZpbGUgYW5kIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGFueSB3cm9uZyBiZWhhdmlvciBvZiB0aGUgbW9kaWZpZWQgc29mdHdhcmUuXG5cblRoZSBhdXRob3IgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgXCJhcyBpc1wiIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS5cblxuTW9kaWZpY2F0aW9uczogVmVyc2lvbjogMi4xLjguNy1jdXJyZW50IENvcHlyaWdodCAxOTk4LTIwMDEgYnkgUm9iIEJyYXVuXG5cblNlbnNvciBBZGRpdGlvbiBWZXJzaW9uOiAyLjEuOC45cHJlMTRhIENvcHlyaWdodCAyMDAxIGJ5IFN0ZXZlIEdydWJiXG5cblRoaXMgaXMgYW4gZXhlcnB0IGZyb20gYW4gZW1haWwgSSByZWNpZXZlZCBmcm9tIHRoZSBvcmlnaW5hbCBhdXRob3IsIGFsbG93aW5nIHhpbmV0ZCBhcyBtYWludGFpbmVkIGJ5IG1lIChSb2IgQnJhdW4pLCB0byB1c2UgdGhlIGhpZ2hlciB2ZXJzaW9uIG51bWJlcnM6XG5cbkkgYXBwcmVjaWF0ZSB5b3VyIG1haW50YWluaW5nIHRoZSB2ZXJzaW9uIHN0cmluZyBndWlkZWxpbmVzIGFzIHNwZWNpZmllZCBpbiB0aGUgY29weXJpZ2h0LiBCdXQgSSBkaWQgbm90IG1lYW4gdGhlbSB0byBsYXN0IGFzIGxvbmcgYXMgdGhleSBkaWQuXG5cblNvLCBpZiB5b3Ugd2FudCwgeW91IG1heSB1c2UgYW55IDIuTi4qIChOIFx1MDAzZT0gMykgdmVyc2lvbiBzdHJpbmcgZm9yIGZ1dHVyZSB4aW5ldGQgdmVyc2lvbnMgdGhhdCB5b3UgcmVsZWFzZS4gTm90ZSB0aGF0IEkgYW0gZXhjbHVkaW5nIHRoZSAyLjIuKiBsaW5lOyB1c2luZyB0aGF0IHdvdWxkIG9ubHkgY3JlYXRlIGNvbmZ1c2lvbi4gTmFtaW5nIHRoZSBuZXh0IHJlbGVhc2UgMi4zLjAgd291bGQgcHV0IHRvIHJlc3QgdGhlIGNvbmZ1c2lvbiBhYm91dCAyLjIuMSBhbmQgMi4xLjguKi4iXSwibGljZW5zZUlkcyI6WyJ4aW5ldGQiXSwia2V5d29yZHMiOlsib3JpZ2luYWwgbGljZW5zZSB0aGlzIiwic29mdHdhcmUgaXMgYyIsImlzIGMgY29weXJpZ2h0IiwiYyBjb3B5cmlnaHQgMTk5MiIsImNvcHlyaWdodCAxOTkyIGJ5IiwiMTk5MiBieSBwYW5hZ2lvdGlzIiwiYnkgcGFuYWdpb3RpcyB0c2lyaWdvdGlzIiwicGFuYWdpb3RpcyB0c2lyaWdvdGlzIHRoZSIsInRzaXJpZ290aXMgdGhlIGF1dGhvciIsInRoZSBhdXRob3IgcGFuYWdpb3RpcyIsImF1dGhvciBwYW5hZ2lvdGlzIHRzaXJpZ290aXMiLCJwYW5hZ2lvdGlzIHRzaXJpZ290aXMgZ3JhbnRzIiwidHNpcmlnb3RpcyBncmFudHMgcGVybWlzc2lvbiIsImNvcHlyaWdodCBub3RpY2UgZXh0YW50Iiwibm90aWNlIGV4dGFudCBpbiIsImV4dGFudCBpbiBmaWxlcyIsImluIGZpbGVzIGluIiwiZGlzdHJpYnV0aW9uIGlzIG5vdCIsIm5vdCByZW1vdmVkIGZyb20iLCJyZW1vdmVkIGZyb20gZmlsZXMiLCJmcm9tIGZpbGVzIGluY2x1ZGVkIiwiYW55IHJlZGlzdHJpYnV0aW9uIGFuZCIsInJlZGlzdHJpYnV0aW9uIGFuZCB0aGF0IiwidGhhdCB0aGlzIGNvcHlyaWdodCIsIm5vdGljZSBpcyBhbHNvIiwiaXMgYWxzbyBpbmNsdWRlZCIsImFsc28gaW5jbHVkZWQgaW4iLCJhbnkgcmVkaXN0cmlidXRpb24gbW9kaWZpY2F0aW9ucyIsInJlZGlzdHJpYnV0aW9uIG1vZGlmaWNhdGlvbnMgdG8iLCJiZSBkaXN0cmlidXRlZCBlaXRoZXIiLCJkaXN0cmlidXRlZCBlaXRoZXIgYnkiLCJlaXRoZXIgYnkgZGlzdHJpYnV0aW5nIiwiYnkgZGlzdHJpYnV0aW5nIHRoZSIsIm1vZGlmaWVkIHNvZnR3YXJlIG9yIiwic29mdHdhcmUgb3IgYnkiLCJvciBieSBkaXN0cmlidXRpbmciLCJieSBkaXN0cmlidXRpbmcgcGF0Y2hlcyIsImRpc3RyaWJ1dGluZyBwYXRjaGVzIHRvIiwiZm9sbG93aW5nIGFkZGl0aW9uYWwgdGVybXMiLCJhZGRpdGlvbmFsIHRlcm1zIDEiLCJ0ZXJtcyAxIHRoZSIsIjEgdGhlIHZlcnNpb24iLCJ2ZXJzaW9uIG51bWJlciB3aWxsIiwibnVtYmVyIHdpbGwgYmUiLCJ3aWxsIGJlIG1vZGlmaWVkIiwibW9kaWZpZWQgYXMgZm9sbG93cyIsImEgdGhlIGZpcnN0IiwidGhlIGZpcnN0IDMiLCJmaXJzdCAzIGNvbXBvbmVudHMiLCIzIGNvbXBvbmVudHMgb2YiLCJ2ZXJzaW9uIG51bWJlciBpIiwibnVtYmVyIGkgZSIsImkgZSBudW1iZXIiLCJlIG51bWJlciBudW1iZXIiLCJudW1iZXIgbnVtYmVyIG51bWJlciIsIm51bWJlciBudW1iZXIgd2lsbCIsIm51bWJlciB3aWxsIHJlbWFpbiIsIndpbGwgcmVtYWluIHVuY2hhbmdlZCIsInJlbWFpbiB1bmNoYW5nZWQgYiIsInVuY2hhbmdlZCBiIGEiLCJiIGEgbmV3IiwiYSBuZXcgY29tcG9uZW50IiwibmV3IGNvbXBvbmVudCB3aWxsIiwiY29tcG9uZW50IHdpbGwgYmUiLCJ3aWxsIGJlIGFwcGVuZGVkIiwiYmUgYXBwZW5kZWQgdG8iLCJhcHBlbmRlZCB0byB0aGUiLCJudW1iZXIgdG8gaW5kaWNhdGUiLCJ0byBpbmRpY2F0ZSB0aGUiLCJpbmRpY2F0ZSB0aGUgbW9kaWZpY2F0aW9uIiwidGhlIG1vZGlmaWNhdGlvbiBsZXZlbCIsIm1vZGlmaWNhdGlvbiBsZXZlbCB0aGUiLCJsZXZlbCB0aGUgZm9ybSIsInRoaXMgY29tcG9uZW50IGlzIiwiY29tcG9uZW50IGlzIHVwIiwidGhlIG1vZGlmaWNhdGlvbnMgMiIsIm1vZGlmaWNhdGlvbnMgMiB0aGUiLCIyIHRoZSBhdXRob3IiLCJ0aGUgbW9kaWZpY2F0aW9ucyB3aWxsIiwibW9kaWZpY2F0aW9ucyB3aWxsIGluY2x1ZGUiLCJ3aWxsIGluY2x1ZGUgaGlzIiwiaW5jbHVkZSBoaXMgaGVyIiwiaGlzIGhlciBuYW1lIiwiaGVyIG5hbWUgYnkiLCJuYW1lIGJ5IGFwcGVuZGluZyIsImJ5IGFwcGVuZGluZyBpdCIsImFwcGVuZGluZyBpdCBhbG9uZyIsIml0IGFsb25nIHdpdGgiLCJuZXcgdmVyc2lvbiBudW1iZXIiLCJudW1iZXIgdG8gdGhpcyIsImZpbGUgYW5kIHdpbGwiLCJmb3IgYW55IHdyb25nIiwiYW55IHdyb25nIGJlaGF2aW9yIiwid3JvbmcgYmVoYXZpb3Igb2YiLCJtb2RpZmllZCBzb2Z0d2FyZSB0aGUiLCJzb2Z0d2FyZSB0aGUgYXV0aG9yIiwidGhlIGF1dGhvciBtYWtlcyIsImF1dGhvciBtYWtlcyBubyIsImltcGxpZWQgd2FycmFudHkgbW9kaWZpY2F0aW9ucyIsIndhcnJhbnR5IG1vZGlmaWNhdGlvbnMgdmVyc2lvbiIsIm1vZGlmaWNhdGlvbnMgdmVyc2lvbiAyIiwiMSA4IDciLCI4IDcgY3VycmVudCIsIjcgY3VycmVudCBjb3B5cmlnaHQiLCJjdXJyZW50IGNvcHlyaWdodCAxOTk4IiwiY29weXJpZ2h0IDE5OTggMjAwMSIsIjE5OTggMjAwMSBieSIsIjIwMDEgYnkgcm9iIiwiYnkgcm9iIGJyYXVuIiwicm9iIGJyYXVuIHNlbnNvciIsImJyYXVuIHNlbnNvciBhZGRpdGlvbiIsInNlbnNvciBhZGRpdGlvbiB2ZXJzaW9uIiwiYWRkaXRpb24gdmVyc2lvbiAyIiwiMSA4IDlwcmUxNGEiLCI4IDlwcmUxNGEgY29weXJpZ2h0IiwiOXByZTE0YSBjb3B5cmlnaHQgMjAwMSIsImNvcHlyaWdodCAyMDAxIGJ5IiwiMjAwMSBieSBzdGV2ZSIsImJ5IHN0ZXZlIGdydWJiIiwic3RldmUgZ3J1YmIgdGhpcyIsImdydWJiIHRoaXMgaXMiLCJpcyBhbiBleGVycHQiLCJhbiBleGVycHQgZnJvbSIsImV4ZXJwdCBmcm9tIGFuIiwiZnJvbSBhbiBlbWFpbCIsImFuIGVtYWlsIGkiLCJlbWFpbCBpIHJlY2lldmVkIiwiaSByZWNpZXZlZCBmcm9tIiwicmVjaWV2ZWQgZnJvbSB0aGUiLCJvcmlnaW5hbCBhdXRob3IgYWxsb3dpbmciLCJhdXRob3IgYWxsb3dpbmcgeGluZXRkIiwiYWxsb3dpbmcgeGluZXRkIGFzIiwieGluZXRkIGFzIG1haW50YWluZWQiLCJtYWludGFpbmVkIGJ5IG1lIiwiYnkgbWUgcm9iIiwibWUgcm9iIGJyYXVuIiwicm9iIGJyYXVuIHRvIiwiYnJhdW4gdG8gdXNlIiwidXNlIHRoZSBoaWdoZXIiLCJ0aGUgaGlnaGVyIHZlcnNpb24iLCJoaWdoZXIgdmVyc2lvbiBudW1iZXJzIiwidmVyc2lvbiBudW1iZXJzIGkiLCJudW1iZXJzIGkgYXBwcmVjaWF0ZSIsImkgYXBwcmVjaWF0ZSB5b3VyIiwiYXBwcmVjaWF0ZSB5b3VyIG1haW50YWluaW5nIiwieW91ciBtYWludGFpbmluZyB0aGUiLCJtYWludGFpbmluZyB0aGUgdmVyc2lvbiIsInRoZSB2ZXJzaW9uIHN0cmluZyIsInZlcnNpb24gc3RyaW5nIGd1aWRlbGluZXMiLCJzdHJpbmcgZ3VpZGVsaW5lcyBhcyIsImd1aWRlbGluZXMgYXMgc3BlY2lmaWVkIiwiYXMgc3BlY2lmaWVkIGluIiwidGhlIGNvcHlyaWdodCBidXQiLCJjb3B5cmlnaHQgYnV0IGkiLCJidXQgaSBkaWQiLCJpIGRpZCBub3QiLCJkaWQgbm90IG1lYW4iLCJub3QgbWVhbiB0aGVtIiwibWVhbiB0aGVtIHRvIiwidGhlbSB0byBsYXN0IiwidG8gbGFzdCBhcyIsImxhc3QgYXMgbG9uZyIsImFzIHRoZXkgZGlkIiwidGhleSBkaWQgc28iLCJkaWQgc28gaWYiLCJ3YW50IHlvdSBtYXkiLCJtYXkgdXNlIGFueSIsInVzZSBhbnkgMiIsImFueSAyIG4iLCIyIG4gbiIsIm4gbiAzIiwibiAzIHZlcnNpb24iLCIzIHZlcnNpb24gc3RyaW5nIiwidmVyc2lvbiBzdHJpbmcgZm9yIiwic3RyaW5nIGZvciBmdXR1cmUiLCJmb3IgZnV0dXJlIHhpbmV0ZCIsImZ1dHVyZSB4aW5ldGQgdmVyc2lvbnMiLCJ4aW5ldGQgdmVyc2lvbnMgdGhhdCIsInZlcnNpb25zIHRoYXQgeW91IiwieW91IHJlbGVhc2Ugbm90ZSIsInJlbGVhc2Ugbm90ZSB0aGF0Iiwibm90ZSB0aGF0IGkiLCJ0aGF0IGkgYW0iLCJpIGFtIGV4Y2x1ZGluZyIsImFtIGV4Y2x1ZGluZyB0aGUiLCJleGNsdWRpbmcgdGhlIDIiLCJ0aGUgMiAyIiwiMiAyIGxpbmUiLCIyIGxpbmUgdXNpbmciLCJsaW5lIHVzaW5nIHRoYXQiLCJ1c2luZyB0aGF0IHdvdWxkIiwidGhhdCB3b3VsZCBvbmx5Iiwid291bGQgb25seSBjcmVhdGUiLCJvbmx5IGNyZWF0ZSBjb25mdXNpb24iLCJjcmVhdGUgY29uZnVzaW9uIG5hbWluZyIsImNvbmZ1c2lvbiBuYW1pbmcgdGhlIiwibmFtaW5nIHRoZSBuZXh0IiwidGhlIG5leHQgcmVsZWFzZSIsIm5leHQgcmVsZWFzZSAyIiwicmVsZWFzZSAyIDMiXX0seyJsaWNlbnNlVGV4dHMiOlsiTElDRU5TRSBGT1IgVEhFIEV4dHJlbWUhIExhYiBQdWxsUGFyc2VyIENvcHlyaWdodCAoYykgMjAwMiBUaGUgVHJ1c3RlZXMgb2YgSW5kaWFuYSBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgIDEpIEFsbCByZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoZSBsaXN0IG9mIGF1dGhvcnMgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGRpc2NsYWltZXIgbGlzdGVkIGluIHRoaXMgbGljZW5zZTtcblxuICAgMikgQWxsIHJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBkaXNjbGFpbWVyIGxpc3RlZCBpbiB0aGlzIGxpY2Vuc2UgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb247XG5cbiAgIDMpIEFueSBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggYWxsIHJlZGlzdHJpYnV0aW9ucyBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6XG5cbiAgIFwiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgSW5kaWFuYSBVbml2ZXJzaXR5IEV4dHJlbWUhIExhYi4gRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gcGxlYXNlIHZpc2l0IGh0dHA6Ly93d3cuZXh0cmVtZS5pbmRpYW5hLmVkdS9cIlxuXG4gICBBbHRlcm5hdGl2ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci5cblxuICAgNCkgVGhlIG5hbWUgXCJJbmRpYW5hIFVuaXZlcmlzdHlcIiBhbmQgXCJJbmRpYW5hIFVuaXZlcmlzdHkgRXh0cmVtZSEgTGFiXCIgc2hhbGwgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gSW5kaWFuYSBVbml2ZXJzaXR5LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBodHRwOi8vd3d3LmV4dHJlbWUuaW5kaWFuYS5lZHUvLlxuXG4gICA1KSBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IHVzZSBcIkluZGlhbmEgVW5pdmVyaXN0eVwiIG5hbWUgbm9yIG1heSBcIkluZGlhbmEgVW5pdmVyaXN0eVwiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgSW5kaWFuYSBVbml2ZXJzaXR5LiBJbmRpYW5hIFVuaXZlcnNpdHkgcHJvdmlkZXMgbm8gcmVhc3N1cmFuY2VzIHRoYXQgdGhlIHNvdXJjZSBjb2RlIHByb3ZpZGVkIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gSW5kaWFuYSBVbml2ZXJzaXR5IGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIGFueSByZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLlxuXG5MSUNFTlNFRSBVTkRFUlNUQU5EUyBUSEFUIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBGT1IgV0hJQ0ggTk8gV0FSUkFOVElFUyBBUyBUTyBDQVBBQklMSVRJRVMgT1IgQUNDVVJBQ1kgQVJFIE1BREUuIElORElBTkEgVU5JVkVSU0lUWSBHSVZFUyBOTyBXQVJSQU5USUVTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTiBUSEFUIFNPRlRXQVJFIElTIEZSRUUgT0YgSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFBBVEVOVCwgQ09QWVJJR0hULCBPUiBPVEhFUiBQUk9QUklFVEFSWSBSSUdIVFMuIElORElBTkEgVU5JVkVSU0lUWSBNQUtFUyBOTyBXQVJSQU5USUVTIFRIQVQgU09GVFdBUkUgSVMgRlJFRSBGUk9NIFwiQlVHU1wiLCBcIlZJUlVTRVNcIiwgXCJUUk9KQU4gSE9SU0VTXCIsIFwiVFJBUCBET09SU1wiLCBcIldPUk1TXCIsIE9SIE9USEVSIEhBUk1GVUwgQ09ERS4gTElDRU5TRUUgQVNTVU1FUyBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFBFUkZPUk1BTkNFIE9GIFNPRlRXQVJFIEFORC9PUiBBU1NPQ0lBVEVEIE1BVEVSSUFMUywgQU5EIFRPIFRIRSBQRVJGT1JNQU5DRSBBTkQgVkFMSURJVFkgT0YgSU5GT1JNQVRJT04gR0VORVJBVEVEIFVTSU5HIFNPRlRXQVJFLiJdLCJsaWNlbnNlSWRzIjpbInhwcCJdLCJrZXl3b3JkcyI6WyJmb3IgdGhlIGV4dHJlbWUiLCJ0aGUgZXh0cmVtZSBsYWIiLCJleHRyZW1lIGxhYiBwdWxscGFyc2VyIiwibGFiIHB1bGxwYXJzZXIgY29weXJpZ2h0IiwicHVsbHBhcnNlciBjb3B5cmlnaHQgYyIsImMgMjAwMiB0aGUiLCIyMDAyIHRoZSB0cnVzdGVlcyIsImluZGlhbmEgdW5pdmVyc2l0eSBhbGwiLCJieSB0aGUgaW5kaWFuYSIsImluZGlhbmEgdW5pdmVyc2l0eSBleHRyZW1lIiwidW5pdmVyc2l0eSBleHRyZW1lIGxhYiIsImV4dHJlbWUgbGFiIGZvciIsImxhYiBmb3IgZnVydGhlciIsImZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIiwiZnVydGhlciBpbmZvcm1hdGlvbiBwbGVhc2UiLCJpbmZvcm1hdGlvbiBwbGVhc2UgdmlzaXQiLCJ2aXNpdCBodHRwIHd3dyIsImluZGlhbmEgZWR1IGFsdGVybmF0aXZlbHkiLCJlZHUgYWx0ZXJuYXRpdmVseSB0aGlzIiwiYWx0ZXJuYXRpdmVseSB0aGlzIGFja25vd2xlZGdtZW50IiwidGhlIG5hbWUgaW5kaWFuYSIsIm5hbWUgaW5kaWFuYSB1bml2ZXJpc3R5IiwiaW5kaWFuYSB1bml2ZXJpc3R5IGFuZCIsInVuaXZlcmlzdHkgYW5kIGluZGlhbmEiLCJhbmQgaW5kaWFuYSB1bml2ZXJpc3R5IiwiaW5kaWFuYSB1bml2ZXJpc3R5IGV4dHJlbWUiLCJ1bml2ZXJpc3R5IGV4dHJlbWUgbGFiIiwiZXh0cmVtZSBsYWIgc2hhbGwiLCJsYWIgc2hhbGwgbm90IiwicGVybWlzc2lvbiBmcm9tIGluZGlhbmEiLCJmcm9tIGluZGlhbmEgdW5pdmVyc2l0eSIsInVuaXZlcnNpdHkgZm9yIHdyaXR0ZW4iLCJwbGVhc2UgY29udGFjdCBodHRwIiwiY29udGFjdCBodHRwIHd3dyIsImluZGlhbmEgZWR1IDUiLCJlZHUgNSBwcm9kdWN0cyIsIm5vdCB1c2UgaW5kaWFuYSIsInVzZSBpbmRpYW5hIHVuaXZlcmlzdHkiLCJpbmRpYW5hIHVuaXZlcmlzdHkgbmFtZSIsInVuaXZlcmlzdHkgbmFtZSBub3IiLCJuYW1lIG5vciBtYXkiLCJub3IgbWF5IGluZGlhbmEiLCJtYXkgaW5kaWFuYSB1bml2ZXJpc3R5IiwiaW5kaWFuYSB1bml2ZXJpc3R5IGFwcGVhciIsInVuaXZlcmlzdHkgYXBwZWFyIGluIiwib2YgdGhlIGluZGlhbmEiLCJpbmRpYW5hIHVuaXZlcnNpdHkgaW5kaWFuYSIsInVuaXZlcnNpdHkgaW5kaWFuYSB1bml2ZXJzaXR5IiwiaW5kaWFuYSB1bml2ZXJzaXR5IHByb3ZpZGVzIiwidW5pdmVyc2l0eSBwcm92aWRlcyBubyIsInByb3ZpZGVzIG5vIHJlYXNzdXJhbmNlcyIsIm90aGVyIGVudGl0eSBpbmRpYW5hIiwiZW50aXR5IGluZGlhbmEgdW5pdmVyc2l0eSIsImluZGlhbmEgdW5pdmVyc2l0eSBkaXNjbGFpbXMiLCJ1bml2ZXJzaXR5IGRpc2NsYWltcyBhbnkiLCJhcmUgbWFkZSBpbmRpYW5hIiwibWFkZSBpbmRpYW5hIHVuaXZlcnNpdHkiLCJpbmRpYW5hIHVuaXZlcnNpdHkgZ2l2ZXMiLCJ1bml2ZXJzaXR5IGdpdmVzIG5vIiwid2FycmFudGllcyBhbmQgbWFrZXMiLCJwcm9wcmlldGFyeSByaWdodHMgaW5kaWFuYSIsInJpZ2h0cyBpbmRpYW5hIHVuaXZlcnNpdHkiLCJpbmRpYW5hIHVuaXZlcnNpdHkgbWFrZXMiLCJ1bml2ZXJzaXR5IG1ha2VzIG5vIiwibGljZW5zZSBmb3IgdGhlIGV4dHJlbWUiLCJmb3IgdGhlIGV4dHJlbWUgbGFiIiwidGhlIGV4dHJlbWUgbGFiIHB1bGxwYXJzZXIiLCJleHRyZW1lIGxhYiBwdWxscGFyc2VyIGNvcHlyaWdodCIsImxhYiBwdWxscGFyc2VyIGNvcHlyaWdodCBjIiwicHVsbHBhcnNlciBjb3B5cmlnaHQgYyAyMDAyIiwiY29weXJpZ2h0IGMgMjAwMiB0aGUiLCJjIDIwMDIgdGhlIHRydXN0ZWVzIiwiMjAwMiB0aGUgdHJ1c3RlZXMgb2YiLCJvZiBpbmRpYW5hIHVuaXZlcnNpdHkgYWxsIiwiaW5kaWFuYSB1bml2ZXJzaXR5IGFsbCByaWdodHMiLCJkZXZlbG9wZWQgYnkgdGhlIGluZGlhbmEiLCJieSB0aGUgaW5kaWFuYSB1bml2ZXJzaXR5IiwidGhlIGluZGlhbmEgdW5pdmVyc2l0eSBleHRyZW1lIiwiaW5kaWFuYSB1bml2ZXJzaXR5IGV4dHJlbWUgbGFiIiwidW5pdmVyc2l0eSBleHRyZW1lIGxhYiBmb3IiLCJleHRyZW1lIGxhYiBmb3IgZnVydGhlciIsImxhYiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiIsImZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIHBsZWFzZSIsImZ1cnRoZXIgaW5mb3JtYXRpb24gcGxlYXNlIHZpc2l0IiwiaW5mb3JtYXRpb24gcGxlYXNlIHZpc2l0IGh0dHAiLCJwbGVhc2UgdmlzaXQgaHR0cCB3d3ciLCJ2aXNpdCBodHRwIHd3dyBleHRyZW1lIiwiZXh0cmVtZSBpbmRpYW5hIGVkdSBhbHRlcm5hdGl2ZWx5IiwiaW5kaWFuYSBlZHUgYWx0ZXJuYXRpdmVseSB0aGlzIiwiZWR1IGFsdGVybmF0aXZlbHkgdGhpcyBhY2tub3dsZWRnbWVudCIsImFsdGVybmF0aXZlbHkgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkiLCI0IHRoZSBuYW1lIGluZGlhbmEiLCJ0aGUgbmFtZSBpbmRpYW5hIHVuaXZlcmlzdHkiLCJuYW1lIGluZGlhbmEgdW5pdmVyaXN0eSBhbmQiLCJpbmRpYW5hIHVuaXZlcmlzdHkgYW5kIGluZGlhbmEiLCJ1bml2ZXJpc3R5IGFuZCBpbmRpYW5hIHVuaXZlcmlzdHkiLCJhbmQgaW5kaWFuYSB1bml2ZXJpc3R5IGV4dHJlbWUiLCJpbmRpYW5hIHVuaXZlcmlzdHkgZXh0cmVtZSBsYWIiLCJ1bml2ZXJpc3R5IGV4dHJlbWUgbGFiIHNoYWxsIiwiZXh0cmVtZSBsYWIgc2hhbGwgbm90IiwibGFiIHNoYWxsIG5vdCBiZSIsIndyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIGluZGlhbmEiLCJwZXJtaXNzaW9uIGZyb20gaW5kaWFuYSB1bml2ZXJzaXR5IiwiZnJvbSBpbmRpYW5hIHVuaXZlcnNpdHkgZm9yIiwiaW5kaWFuYSB1bml2ZXJzaXR5IGZvciB3cml0dGVuIiwidW5pdmVyc2l0eSBmb3Igd3JpdHRlbiBwZXJtaXNzaW9uIiwicGVybWlzc2lvbiBwbGVhc2UgY29udGFjdCBodHRwIiwicGxlYXNlIGNvbnRhY3QgaHR0cCB3d3ciLCJjb250YWN0IGh0dHAgd3d3IGV4dHJlbWUiLCJleHRyZW1lIGluZGlhbmEgZWR1IDUiLCJpbmRpYW5hIGVkdSA1IHByb2R1Y3RzIiwiZWR1IDUgcHJvZHVjdHMgZGVyaXZlZCIsInNvZnR3YXJlIG1heSBub3QgdXNlIiwibWF5IG5vdCB1c2UgaW5kaWFuYSIsIm5vdCB1c2UgaW5kaWFuYSB1bml2ZXJpc3R5IiwidXNlIGluZGlhbmEgdW5pdmVyaXN0eSBuYW1lIiwiaW5kaWFuYSB1bml2ZXJpc3R5IG5hbWUgbm9yIiwidW5pdmVyaXN0eSBuYW1lIG5vciBtYXkiLCJuYW1lIG5vciBtYXkgaW5kaWFuYSIsIm5vciBtYXkgaW5kaWFuYSB1bml2ZXJpc3R5IiwibWF5IGluZGlhbmEgdW5pdmVyaXN0eSBhcHBlYXIiLCJpbmRpYW5hIHVuaXZlcmlzdHkgYXBwZWFyIGluIiwidW5pdmVyaXN0eSBhcHBlYXIgaW4gdGhlaXIiLCJwZXJtaXNzaW9uIG9mIHRoZSBpbmRpYW5hIiwib2YgdGhlIGluZGlhbmEgdW5pdmVyc2l0eSIsInRoZSBpbmRpYW5hIHVuaXZlcnNpdHkgaW5kaWFuYSIsImluZGlhbmEgdW5pdmVyc2l0eSBpbmRpYW5hIHVuaXZlcnNpdHkiLCJ1bml2ZXJzaXR5IGluZGlhbmEgdW5pdmVyc2l0eSBwcm92aWRlcyIsImluZGlhbmEgdW5pdmVyc2l0eSBwcm92aWRlcyBubyIsInVuaXZlcnNpdHkgcHJvdmlkZXMgbm8gcmVhc3N1cmFuY2VzIiwicHJvdmlkZXMgbm8gcmVhc3N1cmFuY2VzIHRoYXQiLCJhbnkgb3RoZXIgZW50aXR5IGluZGlhbmEiLCJvdGhlciBlbnRpdHkgaW5kaWFuYSB1bml2ZXJzaXR5IiwiZW50aXR5IGluZGlhbmEgdW5pdmVyc2l0eSBkaXNjbGFpbXMiLCJpbmRpYW5hIHVuaXZlcnNpdHkgZGlzY2xhaW1zIGFueSIsInVuaXZlcnNpdHkgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkiLCJhY2N1cmFjeSBhcmUgbWFkZSBpbmRpYW5hIiwiYXJlIG1hZGUgaW5kaWFuYSB1bml2ZXJzaXR5IiwibWFkZSBpbmRpYW5hIHVuaXZlcnNpdHkgZ2l2ZXMiLCJpbmRpYW5hIHVuaXZlcnNpdHkgZ2l2ZXMgbm8iLCJ1bml2ZXJzaXR5IGdpdmVzIG5vIHdhcnJhbnRpZXMiLCJnaXZlcyBubyB3YXJyYW50aWVzIGFuZCIsIm5vIHdhcnJhbnRpZXMgYW5kIG1ha2VzIiwid2FycmFudGllcyBhbmQgbWFrZXMgbm8iLCJhbmQgbWFrZXMgbm8gcmVwcmVzZW50YXRpb24iLCJvdGhlciBwcm9wcmlldGFyeSByaWdodHMgaW5kaWFuYSIsInByb3ByaWV0YXJ5IHJpZ2h0cyBpbmRpYW5hIHVuaXZlcnNpdHkiLCJyaWdodHMgaW5kaWFuYSB1bml2ZXJzaXR5IG1ha2VzIiwiaW5kaWFuYSB1bml2ZXJzaXR5IG1ha2VzIG5vIiwidW5pdmVyc2l0eSBtYWtlcyBubyB3YXJyYW50aWVzIiwibWFrZXMgbm8gd2FycmFudGllcyB0aGF0IiwibGljZW5zZSBmb3IgdGhlIGV4dHJlbWUgbGFiIiwiZm9yIHRoZSBleHRyZW1lIGxhYiBwdWxscGFyc2VyIiwidGhlIGV4dHJlbWUgbGFiIHB1bGxwYXJzZXIgY29weXJpZ2h0IiwiZXh0cmVtZSBsYWIgcHVsbHBhcnNlciBjb3B5cmlnaHQgYyIsImxhYiBwdWxscGFyc2VyIGNvcHlyaWdodCBjIDIwMDIiLCJwdWxscGFyc2VyIGNvcHlyaWdodCBjIDIwMDIgdGhlIiwiY29weXJpZ2h0IGMgMjAwMiB0aGUgdHJ1c3RlZXMiLCJjIDIwMDIgdGhlIHRydXN0ZWVzIG9mIiwiMjAwMiB0aGUgdHJ1c3RlZXMgb2YgaW5kaWFuYSIsInRydXN0ZWVzIG9mIGluZGlhbmEgdW5pdmVyc2l0eSBhbGwiLCJvZiBpbmRpYW5hIHVuaXZlcnNpdHkgYWxsIHJpZ2h0cyIsImluZGlhbmEgdW5pdmVyc2l0eSBhbGwgcmlnaHRzIHJlc2VydmVkIiwic29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBpbmRpYW5hIiwiZGV2ZWxvcGVkIGJ5IHRoZSBpbmRpYW5hIHVuaXZlcnNpdHkiLCJieSB0aGUgaW5kaWFuYSB1bml2ZXJzaXR5IGV4dHJlbWUiLCJ0aGUgaW5kaWFuYSB1bml2ZXJzaXR5IGV4dHJlbWUgbGFiIiwiaW5kaWFuYSB1bml2ZXJzaXR5IGV4dHJlbWUgbGFiIGZvciIsInVuaXZlcnNpdHkgZXh0cmVtZSBsYWIgZm9yIGZ1cnRoZXIiLCJleHRyZW1lIGxhYiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiIsImxhYiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBwbGVhc2UiLCJmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBwbGVhc2UgdmlzaXQiLCJmdXJ0aGVyIGluZm9ybWF0aW9uIHBsZWFzZSB2aXNpdCBodHRwIiwiaW5mb3JtYXRpb24gcGxlYXNlIHZpc2l0IGh0dHAgd3d3IiwicGxlYXNlIHZpc2l0IGh0dHAgd3d3IGV4dHJlbWUiLCJ2aXNpdCBodHRwIHd3dyBleHRyZW1lIGluZGlhbmEiLCJ3d3cgZXh0cmVtZSBpbmRpYW5hIGVkdSBhbHRlcm5hdGl2ZWx5IiwiZXh0cmVtZSBpbmRpYW5hIGVkdSBhbHRlcm5hdGl2ZWx5IHRoaXMiLCJpbmRpYW5hIGVkdSBhbHRlcm5hdGl2ZWx5IHRoaXMgYWNrbm93bGVkZ21lbnQiLCJlZHUgYWx0ZXJuYXRpdmVseSB0aGlzIGFja25vd2xlZGdtZW50IG1heSIsImFsdGVybmF0aXZlbHkgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIiwiYXBwZWFyIDQgdGhlIG5hbWUgaW5kaWFuYSIsIjQgdGhlIG5hbWUgaW5kaWFuYSB1bml2ZXJpc3R5IiwidGhlIG5hbWUgaW5kaWFuYSB1bml2ZXJpc3R5IGFuZCIsIm5hbWUgaW5kaWFuYSB1bml2ZXJpc3R5IGFuZCBpbmRpYW5hIiwiaW5kaWFuYSB1bml2ZXJpc3R5IGFuZCBpbmRpYW5hIHVuaXZlcmlzdHkiLCJ1bml2ZXJpc3R5IGFuZCBpbmRpYW5hIHVuaXZlcmlzdHkgZXh0cmVtZSIsImFuZCBpbmRpYW5hIHVuaXZlcmlzdHkgZXh0cmVtZSBsYWIiLCJpbmRpYW5hIHVuaXZlcmlzdHkgZXh0cmVtZSBsYWIgc2hhbGwiLCJ1bml2ZXJpc3R5IGV4dHJlbWUgbGFiIHNoYWxsIG5vdCIsImV4dHJlbWUgbGFiIHNoYWxsIG5vdCBiZSIsImxhYiBzaGFsbCBub3QgYmUgdXNlZCIsInByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIGluZGlhbmEiLCJ3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBpbmRpYW5hIHVuaXZlcnNpdHkiLCJwZXJtaXNzaW9uIGZyb20gaW5kaWFuYSB1bml2ZXJzaXR5IGZvciIsImZyb20gaW5kaWFuYSB1bml2ZXJzaXR5IGZvciB3cml0dGVuIiwiaW5kaWFuYSB1bml2ZXJzaXR5IGZvciB3cml0dGVuIHBlcm1pc3Npb24iLCJ1bml2ZXJzaXR5IGZvciB3cml0dGVuIHBlcm1pc3Npb24gcGxlYXNlIiwid3JpdHRlbiBwZXJtaXNzaW9uIHBsZWFzZSBjb250YWN0IGh0dHAiLCJwZXJtaXNzaW9uIHBsZWFzZSBjb250YWN0IGh0dHAgd3d3Il19LHsibGljZW5zZVRleHRzIjpbIkNvcHlyaWdodCAoYykgMjAwMi0yMDA3IENoYXJsaWUgUG9vbGVcblxuQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgSmFtZXMgVy4gTmV3a2lyaywgTWljaGFlbCBDLiBUd28sIEFsZXhlaSBBLiBWb3JvbnRzb3ZcblxuQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgUGhpbGlwIEEuIENyYWlnXG5cblRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuXG5QZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdCBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG5cbiAgIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgKHNlZSB0aGUgZm9sbG93aW5nKSBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIGlzIHJlcXVpcmVkLlxuXG4gICBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNyBDaGFybGllIFBvb2xlIG9yIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IEphbWVzIFcuIE5ld2tpcmssIE1pY2hhZWwgQy4gVHdvLCBBbGV4ZWkgQS4gVm9yb250c292IG9yIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIFBoaWxpcCBBLiBDcmFpZ1xuXG4gICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuXG5cbiAgIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uIl0sImxpY2Vuc2VJZHMiOlsiemxpYi1hY2tub3dsZWRnZW1lbnQiXSwia2V5d29yZHMiOlsicG9vbGUgY29weXJpZ2h0IGMiLCJhIHZvcm9udHNvdiBjb3B5cmlnaHQiLCJ2b3JvbnRzb3YgY29weXJpZ2h0IGMiLCJhIHZvcm9udHNvdiBvciIsInZvcm9udHNvdiBvciBjb3B5cmlnaHQiLCIyMDA3IGNoYXJsaWUgcG9vbGUgY29weXJpZ2h0IiwiY2hhcmxpZSBwb29sZSBjb3B5cmlnaHQgYyIsInBvb2xlIGNvcHlyaWdodCBjIDIwMDIiLCJhbGV4ZWkgYSB2b3JvbnRzb3YgY29weXJpZ2h0IiwiYSB2b3JvbnRzb3YgY29weXJpZ2h0IGMiLCJ2b3JvbnRzb3YgY29weXJpZ2h0IGMgMjAwMCIsInJlcXVpcmVkIHBvcnRpb25zIGNvcHlyaWdodCBjIiwicG9ydGlvbnMgY29weXJpZ2h0IGMgMjAwMiIsIjIwMDcgY2hhcmxpZSBwb29sZSBvciIsInBvb2xlIG9yIGNvcHlyaWdodCBjIiwib3IgY29weXJpZ2h0IGMgMjAwMiIsImFsZXhlaSBhIHZvcm9udHNvdiBvciIsImEgdm9yb250c292IG9yIGNvcHlyaWdodCIsInZvcm9udHNvdiBvciBjb3B5cmlnaHQgYyIsIm9yIGNvcHlyaWdodCBjIDIwMDAiLCIyMDAyIDIwMDcgY2hhcmxpZSBwb29sZSBjb3B5cmlnaHQiLCIyMDA3IGNoYXJsaWUgcG9vbGUgY29weXJpZ2h0IGMiLCJjaGFybGllIHBvb2xlIGNvcHlyaWdodCBjIDIwMDIiLCJwb29sZSBjb3B5cmlnaHQgYyAyMDAyIDIwMDQiLCJ0d28gYWxleGVpIGEgdm9yb250c292IGNvcHlyaWdodCIsImFsZXhlaSBhIHZvcm9udHNvdiBjb3B5cmlnaHQgYyIsImEgdm9yb250c292IGNvcHlyaWdodCBjIDIwMDAiLCJ2b3JvbnRzb3YgY29weXJpZ2h0IGMgMjAwMCAyMDAyIiwiMjAwMiBwaGlsaXAgYSBjcmFpZyB0aGlzIiwiaXMgcmVxdWlyZWQgcG9ydGlvbnMgY29weXJpZ2h0IGMiLCJyZXF1aXJlZCBwb3J0aW9ucyBjb3B5cmlnaHQgYyAyMDAyIiwicG9ydGlvbnMgY29weXJpZ2h0IGMgMjAwMiAyMDA3IiwiMjAwMiAyMDA3IGNoYXJsaWUgcG9vbGUgb3IiLCIyMDA3IGNoYXJsaWUgcG9vbGUgb3IgY29weXJpZ2h0IiwiY2hhcmxpZSBwb29sZSBvciBjb3B5cmlnaHQgYyIsInBvb2xlIG9yIGNvcHlyaWdodCBjIDIwMDIiLCJvciBjb3B5cmlnaHQgYyAyMDAyIDIwMDQiLCJ0d28gYWxleGVpIGEgdm9yb250c292IG9yIiwiYWxleGVpIGEgdm9yb250c292IG9yIGNvcHlyaWdodCIsImEgdm9yb250c292IG9yIGNvcHlyaWdodCBjIiwidm9yb250c292IG9yIGNvcHlyaWdodCBjIDIwMDAiLCJvciBjb3B5cmlnaHQgYyAyMDAwIDIwMDIiLCIyMDAyIHBoaWxpcCBhIGNyYWlnIDIiXX1d` +) diff --git a/pkg/detector.go b/pkg/detector.go new file mode 100644 index 0000000..66dc29b --- /dev/null +++ b/pkg/detector.go @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: AGPL-3.0 + +package pkg + +import ( + "encoding/base64" + "encoding/json" + "github.com/boyter/lc/pkg/levenshtein" + "math" + "strings" +) + +type LicenceDetector struct { + Database []License +} + +func NewLicenceDetector() *LicenceDetector { + l := new(LicenceDetector) + l.LoadDatabase() + return l +} + +type License struct { + LicenseTexts []string `json:"licenseTexts"` // examples of text that we have for these licences + LicenseIds []string `json:"licenseIds"` // SPDX ids where licences are considered identical + Keywords []string `json:"keywords"` // keywords that are unique and can be used to identify this group of licences +} + +// LoadDatabase will initialize the database values and should only be called once such as in an init +func (l *LicenceDetector) LoadDatabase() { + if len(l.Database) != 0 { + return + } + + data, _ := base64.StdEncoding.DecodeString(database_keywords) + _ = json.Unmarshal(data, &l.Database) +} + +type LicenseGuess struct { + Name string +} + +func (l *LicenceDetector) Guess(filename string, content string) []LicenseGuess { + if IsLicenceFile(filename) { + // Check if the filename matches on of the common licences in which case return that + // since it seems unlikely someone would add a file called LGPL-2.0 without + // it actually being that licence + for _, li := range commonLicences { + if strings.EqualFold(filename, li) { + return []LicenseGuess{ + { + Name: li, + }, + } + } + } + + // at this point we are confident we have a licence file, but we don't know which one, so lets + // start by firstly assuming there is only 1 license in the file + // and then try to determine what is actually inside the file + var bestGuess License + bestMatch := math.MaxInt + con := []rune(compareOptimize(content)) + for _, li := range l.Database { + for _, lic := range li.LicenseTexts { + m := levenshtein.DistanceForStrings([]rune(compareOptimize(lic)), con, levenshtein.DefaultOptions) + if m < bestMatch { + bestGuess = li + bestMatch = m + } + } + } + + if len(bestGuess.LicenseIds) != 0 { + return []LicenseGuess{ + { + Name: bestGuess.LicenseIds[0], + }, + } + } + + return nil + } + + if IsReadmeFile(filename) { + // at this point we are confident we have a licence file, but we don't know which one, so lets + // start by firstly assuming there is only 1 license in the file + // and then try to determine what is actually inside the file + var bestGuess License + bestMatch := math.MaxInt + con := []rune(compareOptimize(content)) + for _, li := range l.Database { + for _, lic := range li.LicenseTexts { + m := levenshtein.DistanceForStrings([]rune(compareOptimize(lic)), con, levenshtein.DefaultOptions) + if m < bestMatch { + bestGuess = li + bestMatch = m + } + } + } + + if len(bestGuess.LicenseIds) != 0 { + return []LicenseGuess{ + { + Name: bestGuess.LicenseIds[0], + }, + } + } + } + + return nil +} diff --git a/pkg/detector_test.go b/pkg/detector_test.go new file mode 100644 index 0000000..9ba5776 --- /dev/null +++ b/pkg/detector_test.go @@ -0,0 +1,171 @@ +// SPDX-License-Identifier: AGPL-3.0 + +package pkg + +import ( + "reflect" + "testing" +) + +func TestLicenceDetector_LoadDatabase(t *testing.T) { + tests := []struct { + name string + }{ + { + name: "load", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + l := &LicenceDetector{} + l.LoadDatabase() + if len(l.Database) == 0 { + t.Errorf("LicenceDetector.LoadDatabase() database is empty") + } + + if len(l.Database[0].LicenseIds) == 0 { + t.Errorf("LicenceDetector.LoadDatabase() database license ids is empty") + } + }) + } +} + +func TestLicenceDetector_GuessFilenameLogic(t *testing.T) { + type args struct { + filename string + content string + } + tests := []struct { + name string + args args + want []LicenseGuess + }{ + { + name: "Unlicense", + args: args{ + filename: "unlicense", + content: "", + }, + want: []LicenseGuess{ + { + Name: "Unlicense", + }, + }, + }, + { + name: "LGPL-2.0", + args: args{ + filename: "LGPL-2.0", + content: "", + }, + want: []LicenseGuess{ + { + Name: "LGPL-2.0", + }, + }, + }, + { + name: "MIT", + args: args{ + filename: "license", + content: mitLicence, + }, + want: []LicenseGuess{ + { + Name: "MIT", + }, + }, + }, + { + name: "ISC", + args: args{ + filename: "license", + content: iscLicense, + }, + want: []LicenseGuess{ + { + Name: "ISC", + }, + }, + }, + { + name: "Unlicense 2", + args: args{ + filename: "license", + content: unlicense, + }, + want: []LicenseGuess{ + { + Name: "Unlicense", + }, + }, + }, + { + name: "BSD-2-Clause", + args: args{ + filename: "BSD-2-Clause", + content: unlicense, + }, + want: []LicenseGuess{ + { + Name: "BSD-2-Clause", + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + l := NewLicenceDetector() + if got := l.Guess(tt.args.filename, tt.args.content); !reflect.DeepEqual(got, tt.want) { + t.Errorf("Guess() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestLicenceDetector_GuessFilenameReadmeLogic(t *testing.T) { + type args struct { + filename string + content string + } + tests := []struct { + name string + args args + want []LicenseGuess + }{ + { + name: "README Unlicence", + args: args{ + filename: "README.md", + content: unlicense, + }, + want: []LicenseGuess{ + { + Name: "Unlicense", + }, + }, + }, + { + name: "README MIT", + args: args{ + filename: "README.md", + content: mitLicence, + }, + want: []LicenseGuess{ + { + Name: "MIT", + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + l := NewLicenceDetector() + if got := l.Guess(tt.args.filename, tt.args.content); !reflect.DeepEqual(got, tt.want) { + t.Errorf("Guess() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/pkg/levenshtein/levenshtein.go b/pkg/levenshtein/levenshtein.go new file mode 100755 index 0000000..1d53ea6 --- /dev/null +++ b/pkg/levenshtein/levenshtein.go @@ -0,0 +1,257 @@ +// Taken from https://github.com/texttheater/golang-levenshtein as its under MIT licence + +// This package implements the Levenshtein algorithm for computing the +// similarity between two strings. The central function is MatrixForStrings, +// which computes the Levenshtein matrix. The functions DistanceForMatrix, +// EditScriptForMatrix and RatioForMatrix read various interesting properties +// off the matrix. The package also provides the convenience functions +// DistanceForStrings, EditScriptForStrings and RatioForStrings for going +// directly from two strings to the property of interest. +package levenshtein + +import ( + "fmt" + "io" + "os" +) + +type EditOperation int + +const ( + Ins = iota + Del + Sub + Match +) + +type EditScript []EditOperation + +type MatchFunction func(rune, rune) bool + +// IdenticalRunes is the default MatchFunction: it checks whether two runes are +// identical. +func IdenticalRunes(a rune, b rune) bool { + return a == b +} + +type Options struct { + InsCost int + DelCost int + SubCost int + Matches MatchFunction +} + +// DefaultOptions is the default options without substitution: insertion cost +// is 1, deletion cost is 1, substitution cost is 2 (meaning insert and delete +// will be used instead), and two runes match iff they are identical. +var DefaultOptions Options = Options{ + InsCost: 1, + DelCost: 1, + SubCost: 2, + Matches: IdenticalRunes, +} + +// DefaultOptionsWithSub is the default options with substitution: insertion +// cost is 1, deletion cost is 1, substitution cost is 1, and two runes match +// iff they are identical. +var DefaultOptionsWithSub Options = Options{ + InsCost: 1, + DelCost: 1, + SubCost: 1, + Matches: IdenticalRunes, +} + +func (operation EditOperation) String() string { + if operation == Match { + return "match" + } else if operation == Ins { + return "ins" + } else if operation == Sub { + return "sub" + } + return "del" +} + +// DistanceForStrings returns the edit distance between source and target. +// +// It has a runtime proportional to len(source) * len(target) and memory use +// proportional to len(target). +func DistanceForStrings(source []rune, target []rune, op Options) int { + // Note: This algorithm is a specialization of MatrixForStrings. + // MatrixForStrings returns the full edit matrix. However, we only need a + // single value (see DistanceForMatrix) and the main loop of the algorithm + // only uses the current and previous row. As such we create a 2D matrix, + // but with height 2 (enough to store current and previous row). + height := len(source) + 1 + width := len(target) + 1 + matrix := make([][]int, 2) + + // Initialize trivial distances (from/to empty string). That is, fill + // the left column and the top row with row/column indices multiplied + // by deletion/insertion cost. + for i := 0; i < 2; i++ { + matrix[i] = make([]int, width) + matrix[i][0] = i * op.DelCost + } + for j := 1; j < width; j++ { + matrix[0][j] = j * op.InsCost + } + + // Fill in the remaining cells: for each prefix pair, choose the + // (edit history, operation) pair with the lowest cost. + for i := 1; i < height; i++ { + cur := matrix[i%2] + prev := matrix[(i-1)%2] + cur[0] = i * op.DelCost + for j := 1; j < width; j++ { + delCost := prev[j] + op.DelCost + matchSubCost := prev[j-1] + if !op.Matches(source[i-1], target[j-1]) { + matchSubCost += op.SubCost + } + insCost := cur[j-1] + op.InsCost + cur[j] = min(delCost, min(matchSubCost, insCost)) + } + } + return matrix[(height-1)%2][width-1] +} + +// DistanceForMatrix reads the edit distance off the given Levenshtein matrix. +func DistanceForMatrix(matrix [][]int) int { + return matrix[len(matrix)-1][len(matrix[0])-1] +} + +// RatioForStrings returns the Levenshtein ratio for the given strings. The +// ratio is computed as follows: +// +// (sourceLength + targetLength - distance) / (sourceLength + targetLength) +func RatioForStrings(source []rune, target []rune, op Options) float64 { + matrix := MatrixForStrings(source, target, op) + return RatioForMatrix(matrix) +} + +// RatioForMatrix returns the Levenshtein ratio for the given matrix. The ratio +// is computed as follows: +// +// (sourceLength + targetLength - distance) / (sourceLength + targetLength) +func RatioForMatrix(matrix [][]int) float64 { + sourcelength := len(matrix) - 1 + targetlength := len(matrix[0]) - 1 + sum := sourcelength + targetlength + + if sum == 0 { + return 0 + } + + dist := DistanceForMatrix(matrix) + return float64(sum-dist) / float64(sum) +} + +// MatrixForStrings generates a 2-D array representing the dynamic programming +// table used by the Levenshtein algorithm, as described e.g. here: +// http://www.let.rug.nl/kleiweg/lev/ +// The reason for putting the creation of the table into a separate function is +// that it cannot only be used for reading of the edit distance between two +// strings, but also e.g. to backtrace an edit script that provides an +// alignment between the characters of both strings. +func MatrixForStrings(source []rune, target []rune, op Options) [][]int { + // Make a 2-D matrix. Rows correspond to prefixes of source, columns to + // prefixes of target. Cells will contain edit distances. + // Cf. http://www.let.rug.nl/~kleiweg/lev/levenshtein.html + height := len(source) + 1 + width := len(target) + 1 + matrix := make([][]int, height) + + // Initialize trivial distances (from/to empty string). That is, fill + // the left column and the top row with row/column indices multiplied + // by deletion/insertion cost. + for i := 0; i < height; i++ { + matrix[i] = make([]int, width) + matrix[i][0] = i * op.DelCost + } + for j := 1; j < width; j++ { + matrix[0][j] = j * op.InsCost + } + + // Fill in the remaining cells: for each prefix pair, choose the + // (edit history, operation) pair with the lowest cost. + for i := 1; i < height; i++ { + for j := 1; j < width; j++ { + delCost := matrix[i-1][j] + op.DelCost + matchSubCost := matrix[i-1][j-1] + if !op.Matches(source[i-1], target[j-1]) { + matchSubCost += op.SubCost + } + insCost := matrix[i][j-1] + op.InsCost + matrix[i][j] = min(delCost, min(matchSubCost, + insCost)) + } + } + //LogMatrix(source, target, matrix) + return matrix +} + +// EditScriptForStrings returns an optimal edit script to turn source into +// target. +func EditScriptForStrings(source []rune, target []rune, op Options) EditScript { + return backtrace(len(source), len(target), + MatrixForStrings(source, target, op), op) +} + +// EditScriptForMatrix returns an optimal edit script based on the given +// Levenshtein matrix. +func EditScriptForMatrix(matrix [][]int, op Options) EditScript { + return backtrace(len(matrix)-1, len(matrix[0])-1, matrix, op) +} + +// WriteMatrix writes a visual representation of the given matrix for the given +// strings to the given writer. +func WriteMatrix(source []rune, target []rune, matrix [][]int, writer io.Writer) { + fmt.Fprintf(writer, " ") + for _, targetRune := range target { + fmt.Fprintf(writer, " %c", targetRune) + } + fmt.Fprintf(writer, "\n") + fmt.Fprintf(writer, " %2d", matrix[0][0]) + for j := range target { + fmt.Fprintf(writer, " %2d", matrix[0][j+1]) + } + fmt.Fprintf(writer, "\n") + for i, sourceRune := range source { + fmt.Fprintf(writer, "%c %2d", sourceRune, matrix[i+1][0]) + for j := range target { + fmt.Fprintf(writer, " %2d", matrix[i+1][j+1]) + } + fmt.Fprintf(writer, "\n") + } +} + +// LogMatrix writes a visual representation of the given matrix for the given +// strings to os.Stderr. This function is deprecated, use +// WriteMatrix(source, target, matrix, os.Stderr) instead. +func LogMatrix(source []rune, target []rune, matrix [][]int) { + WriteMatrix(source, target, matrix, os.Stderr) +} + +func backtrace(i int, j int, matrix [][]int, op Options) EditScript { + if i > 0 && matrix[i-1][j]+op.DelCost == matrix[i][j] { + return append(backtrace(i-1, j, matrix, op), Del) + } + if j > 0 && matrix[i][j-1]+op.InsCost == matrix[i][j] { + return append(backtrace(i, j-1, matrix, op), Ins) + } + if i > 0 && j > 0 && matrix[i-1][j-1]+op.SubCost == matrix[i][j] { + return append(backtrace(i-1, j-1, matrix, op), Sub) + } + if i > 0 && j > 0 && matrix[i-1][j-1] == matrix[i][j] { + return append(backtrace(i-1, j-1, matrix, op), Match) + } + return []EditOperation{} +} + +func min(a int, b int) int { + if b < a { + return b + } + return a +} diff --git a/pkg/levenshtein/levenshtein_test.go b/pkg/levenshtein/levenshtein_test.go new file mode 100755 index 0000000..e392e4a --- /dev/null +++ b/pkg/levenshtein/levenshtein_test.go @@ -0,0 +1,296 @@ +package levenshtein + +import ( + "fmt" + "os" + "testing" +) + +var testCases = []struct { + source string + target string + options Options + distance int + ratio float64 + script EditScript +}{ + { + source: "", + target: "a", + options: DefaultOptions, + distance: 1, + ratio: 0.0, + script: EditScript{Ins}, + }, + { + source: "a", + target: "aa", + options: DefaultOptions, + distance: 1, + ratio: 0.6666666666666666, + script: EditScript{Match, Ins}, + }, + { + source: "a", + target: "aaa", + options: DefaultOptions, + distance: 2, + ratio: 0.5, + script: EditScript{Match, Ins, Ins}, + }, + { + source: "", + target: "", + options: DefaultOptions, + distance: 0, + ratio: 0, + script: EditScript{}, + }, + { + source: "a", + target: "b", + options: DefaultOptions, + distance: 2, + ratio: 0, + script: EditScript{Ins, Del}, + }, + { + source: "aaa", + target: "aba", + options: DefaultOptions, + distance: 2, + ratio: 0.6666666666666666, + script: EditScript{Match, Ins, Match, Del}, + }, + { + source: "aaa", + target: "ab", + options: DefaultOptions, + distance: 3, + ratio: 0.4, + script: EditScript{Match, Ins, Del, Del}, + }, + { + source: "a", + target: "a", + options: DefaultOptions, + distance: 0, + ratio: 1, + script: EditScript{Match}, + }, + { + source: "ab", + target: "ab", + options: DefaultOptions, + distance: 0, + ratio: 1, + script: EditScript{Match, Match}, + }, + { + source: "a", + target: "", + options: DefaultOptions, + distance: 1, + ratio: 0, + script: EditScript{Del}, + }, + { + source: "aa", + target: "a", + options: DefaultOptions, + distance: 1, + ratio: 0.6666666666666666, + script: EditScript{Match, Del}, + }, + { + source: "aaa", + target: "a", + options: DefaultOptions, + distance: 2, + ratio: 0.5, + script: EditScript{Match, Del, Del}, + }, + { + source: "kitten", + target: "sitting", + options: DefaultOptions, + distance: 5, + ratio: 0.6153846153846154, + script: EditScript{ + Ins, + Del, + Match, + Match, + Match, + Ins, + Del, + Match, + Ins, + }, + }, + { + source: "kitten", + target: "sitting", + options: DefaultOptionsWithSub, + distance: 3, + ratio: 0.7692307692307693, + script: EditScript{ + Sub, + Match, + Match, + Match, + Sub, + Match, + Ins, + }, + }, + { + source: "Orange", + target: "Apple", + options: DefaultOptionsWithSub, + distance: 5, + ratio: 0.5454545454545454, + script: EditScript{ + Sub, + Sub, + Sub, + Sub, + Del, + Match, + }, + }, + { + source: "me", + target: "meme", + options: Options{ + InsCost: 2, + DelCost: 1, + SubCost: 3, + Matches: IdenticalRunes, + }, + distance: 4, + ratio: 0.3333333333333333, + script: EditScript{ + Match, + Match, + Ins, + Ins, + }, + }, +} + +func TestDistanceForStrings(t *testing.T) { + for _, testCase := range testCases { + distance := DistanceForStrings( + []rune(testCase.source), + []rune(testCase.target), + testCase.options) + if distance != testCase.distance { + t.Log( + "Distance between", + testCase.source, + "and", + testCase.target, + "computed as", + distance, + ", should be", + testCase.distance) + t.Fail() + } + // DistanceForMatrix(MatrixForStrings()) should calculate the same + // value as DistanceForStrings. + distance = DistanceForMatrix(MatrixForStrings( + []rune(testCase.source), + []rune(testCase.target), + testCase.options)) + if distance != testCase.distance { + t.Log( + "Distance between", + testCase.source, + "and", + testCase.target, + "computed as", + distance, + ", should be", + testCase.distance) + t.Fail() + } + } +} + +func TestRatio(t *testing.T) { + for _, testCase := range testCases { + ratio := RatioForStrings( + []rune(testCase.source), + []rune(testCase.target), + testCase.options) + if ratio != testCase.ratio { + t.Log( + "Ratio between", + testCase.source, + "and", + testCase.target, + "computed as", + ratio, + ", should be", + testCase.ratio) + t.Fail() + } + } +} + +func TestEditScriptForStrings(t *testing.T) { + for _, testCase := range testCases { + script := EditScriptForStrings( + []rune(testCase.source), + []rune(testCase.target), + testCase.options) + if !equal(script, testCase.script) { + t.Log( + "Edit script from", + testCase.source, + "to", + testCase.target, + "computed as", + script, + ", should be", + testCase.script) + t.Fail() + } + } +} + +func equal(a, b EditScript) bool { + for i := range a { + if a[i] != b[i] { + return false + } + } + return true +} + +func ExampleDistanceForStrings() { + source := "a" + target := "aa" + distance := DistanceForStrings([]rune(source), []rune(target), DefaultOptions) + fmt.Printf(`Distance between "%s" and "%s" computed as %d`, source, target, distance) + // Output: Distance between "a" and "aa" computed as 1 +} + +func ExampleWriteMatrix() { + source := []rune("neighbor") + target := []rune("Neighbour") + matrix := MatrixForStrings(source, target, DefaultOptions) + WriteMatrix(source, target, matrix, os.Stdout) + // Output: + // N e i g h b o u r + // 0 1 2 3 4 5 6 7 8 9 + // n 1 2 3 4 5 6 7 8 9 10 + // e 2 3 2 3 4 5 6 7 8 9 + // i 3 4 3 2 3 4 5 6 7 8 + // g 4 5 4 3 2 3 4 5 6 7 + // h 5 6 5 4 3 2 3 4 5 6 + // b 6 7 6 5 4 3 2 3 4 5 + // o 7 8 7 6 5 4 3 2 3 4 + // r 8 9 8 7 6 5 4 3 4 3 +} diff --git a/pkg/license_test.go b/pkg/license_test.go new file mode 100644 index 0000000..73a3b16 --- /dev/null +++ b/pkg/license_test.go @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: AGPL-3.0 + +package pkg + +var mitLicence = `MIT License + +Copyright (c) 2021 Ben Boyter + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +` + +var iscLicense = `The license for honk and components is generally ISC or compatible. + +Individual source files are licensed per license at the top. + +Distributed components and dependenices in the vendor directory should have +compatible licenses. + +Files without explicit licenses and the conglomeration as a whole is subject +to the license below. + +// Copyright (c) 2019 Ted Unangst +// +// Permission to use, copy, modify, and distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.` + +var unlicense = `This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to +` diff --git a/vendor/github.com/boyter/gocodewalker/README.md b/vendor/github.com/boyter/gocodewalker/README.md index dbe8ec6..a52c1aa 100644 --- a/vendor/github.com/boyter/gocodewalker/README.md +++ b/vendor/github.com/boyter/gocodewalker/README.md @@ -3,7 +3,15 @@ [![Go Report Card](https://goreportcard.com/badge/github.com/boyter/gocodewalker)](https://goreportcard.com/report/github.com/boyter/gocodewalker) [![Str Count Badge](https://sloc.xyz/github/boyter/gocodewalker/)](https://github.com/boyter/gocodewalker/) -Library to help with walking of code directories in Go +Library to help with walking of code directories in Go. + +The problem. You want to walk the directories of a code repository. You want to respect .gitignore and .ignore files, and +some are nested. This library is the answer. + + - Designed to walk code repositories or find the root of them. + - By default, respects both .gitignore and .ignore files (can be disabled) and nested ones for accuracy + - Has configurable options for skipping files based on regex, extension or general match + - Uses readdir to provide as fast as possible file walking NB this was moved from go-code-walker due to the name being annoying and to ensure it has a unique package name. Should still be drop in replaceable so long as you refer to the new package name. @@ -15,7 +23,7 @@ or looking for the root directory assuming already in a git project. Example of usage, -``` +```go fileListQueue := make(chan *gocodewalker.File, 100) fileWalker := gocodewalker.NewFileWalker(".", fileListQueue) @@ -40,8 +48,20 @@ for f := range fileListQueue { The above by default will recursively add files to the fileListQueue respecting both .ignore and .gitignore files if found, and only adding files with the go extension into the queue. +You can also run the walker in parallel with the results intermixed if required, + +```go +fileListQueue := make(chan *gocodewalker.File, 100) + +fileWalker := gocodewalker.NewParallelFileWalker([]string{".", "someotherdir"}, fileListQueue) +go fileWalker.Start() + +for f := range fileListQueue { + fmt.Println(f.Location) +} +``` + All code is dual-licenced as either MIT or Unlicence. -Note that as an Australian I cannot put this into the public domain, hence the choice most liberal licences I can find. ### Error Handler @@ -50,7 +70,7 @@ and decide if the walker should continue to process, or return. The simplest handler is the below, which if set will swallow all errors and continue as best it can. -``` +```go errorHandler := func(e error) bool { return true } @@ -59,7 +79,7 @@ fileWalker.SetErrorHandler(errorHandler) If you wanted to return on errors you could use the following. -``` +```go errorHandler := func(e error) bool { return false } @@ -69,7 +89,7 @@ fileWalker.SetErrorHandler(errorHandler) If you wanted to terminate walking on an error you could use the following, which would cause it to return the error, and then terminate all walking. This might be desirable where any error indicates a total failure. -``` +```go errorHandler := func(e error) bool { fileWalker.Terminate() return false @@ -77,11 +97,6 @@ errorHandler := func(e error) bool { fileWalker.SetErrorHandler(errorHandler) ``` - -### Package - -Packaging is done through https://goreleaser.com/ - ### Testing Done through unit/integration tests. Otherwise see https://github.com/svent/gitignore-test @@ -92,4 +107,4 @@ See `./cmd/gocodewalker/main.go` for an example of how to implement and validate Details on how gitignores work -https://stackoverflow.com/questions/71735516/proper-way-to-setup-multiple-gitignore-files-in-nested-folders-of-a-repository \ No newline at end of file +https://stackoverflow.com/questions/71735516/proper-way-to-setup-multiple-gitignore-files-in-nested-folders-of-a-repository diff --git a/vendor/github.com/boyter/gocodewalker/file.go b/vendor/github.com/boyter/gocodewalker/file.go index b8e62f1..a33f7f5 100644 --- a/vendor/github.com/boyter/gocodewalker/file.go +++ b/vendor/github.com/boyter/gocodewalker/file.go @@ -10,6 +10,7 @@ import ( "bytes" "errors" "github.com/boyter/gocodewalker/go-gitignore" + "golang.org/x/sync/errgroup" "os" "path" "path/filepath" @@ -32,10 +33,13 @@ type File struct { Filename string } +var semaphoreCount = 8 + type FileWalker struct { fileListQueue chan *File errorsHandler func(error) bool // If returns true will continue to process where possible, otherwise returns if possible directory string + directories []string LocationExcludePattern []string // Case-sensitive patterns which exclude directory/file matches IncludeDirectory []string ExcludeDirectory []string // Paths to always ignore such as .git,.svn and .hg @@ -55,6 +59,8 @@ type FileWalker struct { IncludeHidden bool // Should hidden files and directories be included/walked osOpen func(name string) (*os.File, error) osReadFile func(name string) ([]byte, error) + countingSemaphore chan bool + semaphoreCount int } // NewFileWalker constructs a filewalker, which will walk the supplied directory @@ -83,6 +89,52 @@ func NewFileWalker(directory string, fileListQueue chan *File) *FileWalker { IncludeHidden: false, osOpen: os.Open, osReadFile: os.ReadFile, + countingSemaphore: make(chan bool, semaphoreCount), + semaphoreCount: semaphoreCount, + } +} + +// NewParallelFileWalker constructs a filewalker, which will walk the supplied directories in parallel +// and output File results to the supplied queue as it finds them +func NewParallelFileWalker(directories []string, fileListQueue chan *File) *FileWalker { + return &FileWalker{ + fileListQueue: fileListQueue, + errorsHandler: func(e error) bool { return true }, // a generic one that just swallows everything + directories: directories, + LocationExcludePattern: nil, + IncludeDirectory: nil, + ExcludeDirectory: nil, + IncludeFilename: nil, + ExcludeFilename: nil, + IncludeDirectoryRegex: nil, + ExcludeDirectoryRegex: nil, + IncludeFilenameRegex: nil, + ExcludeFilenameRegex: nil, + AllowListExtensions: nil, + ExcludeListExtensions: nil, + walkMutex: sync.Mutex{}, + terminateWalking: false, + isWalking: false, + IgnoreIgnoreFile: false, + IgnoreGitIgnore: false, + IncludeHidden: false, + osOpen: os.Open, + osReadFile: os.ReadFile, + countingSemaphore: make(chan bool, semaphoreCount), + semaphoreCount: semaphoreCount, + } +} + +// SetConcurrency sets the concurrency when walking +// which controls the number of goroutines that +// walk directories concurrently +// by default it is set to 8 +// must be a whole integer greater than 0 +func (f *FileWalker) SetConcurrency(i int) { + f.walkMutex.Lock() + defer f.walkMutex.Unlock() + if i >= 1 { + f.semaphoreCount = i } } @@ -122,7 +174,27 @@ func (f *FileWalker) Start() error { f.isWalking = true f.walkMutex.Unlock() - err := f.walkDirectoryRecursive(f.directory, []gitignore.GitIgnore{}, []gitignore.GitIgnore{}) + // we now set the counting semaphore based on the count + // done here because it should not change while walking + f.countingSemaphore = make(chan bool, semaphoreCount) + + var err error + if len(f.directories) != 0 { + eg := errgroup.Group{} + for _, directory := range f.directories { + d := directory // capture var + eg.Go(func() error { + return f.walkDirectoryRecursive(0, d, []gitignore.GitIgnore{}, []gitignore.GitIgnore{}) + }) + } + + err = eg.Wait() + } else { + if f.directory != "" { + err = f.walkDirectoryRecursive(0, f.directory, []gitignore.GitIgnore{}, []gitignore.GitIgnore{}) + } + } + close(f.fileListQueue) f.walkMutex.Lock() @@ -132,7 +204,14 @@ func (f *FileWalker) Start() error { return err } -func (f *FileWalker) walkDirectoryRecursive(directory string, gitignores []gitignore.GitIgnore, ignores []gitignore.GitIgnore) error { +func (f *FileWalker) walkDirectoryRecursive(iteration int, directory string, gitignores []gitignore.GitIgnore, ignores []gitignore.GitIgnore) error { + if iteration == 1 { + f.countingSemaphore <- true + defer func() { + <-f.countingSemaphore + }() + } + // NB have to call unlock not using defer because method is recursive // and will deadlock if not done manually f.walkMutex.Lock() @@ -152,7 +231,7 @@ func (f *FileWalker) walkDirectoryRecursive(directory string, gitignores []gitig } defer d.Close() - foundFiles, err := d.ReadDir(-1) + foundFiles, err := d.Readdir(-1) if err != nil { // nothing we can do with this so return nil and process as best we can if f.errorsHandler(err) { @@ -161,8 +240,8 @@ func (f *FileWalker) walkDirectoryRecursive(directory string, gitignores []gitig return err } - files := []os.DirEntry{} - dirs := []os.DirEntry{} + files := []os.FileInfo{} + dirs := []os.FileInfo{} // We want to break apart the files and directories from the // return as we loop over them differently and this avoids some @@ -358,6 +437,9 @@ func (f *FileWalker) walkDirectoryRecursive(directory string, gitignores []gitig } } + // if we are the 1st iteration IE not the root, we run in parallel + wg := sync.WaitGroup{} + // Now we process the directories after hopefully giving the // channel some files to process for _, dir := range dirs { @@ -447,13 +529,23 @@ func (f *FileWalker) walkDirectoryRecursive(directory string, gitignores []gitig } } - err = f.walkDirectoryRecursive(joined, gitignores, ignores) - if err != nil { - return err + if iteration == 0 { + wg.Add(1) + go func(iteration int, directory string, gitignores []gitignore.GitIgnore, ignores []gitignore.GitIgnore) { + _ = f.walkDirectoryRecursive(iteration+1, joined, gitignores, ignores) + wg.Done() + }(iteration, joined, gitignores, ignores) + } else { + err = f.walkDirectoryRecursive(iteration+1, joined, gitignores, ignores) + if err != nil { + return err + } } } } + wg.Wait() + return nil } diff --git a/vendor/github.com/boyter/gocodewalker/go-gitignore/gitignore.go b/vendor/github.com/boyter/gocodewalker/go-gitignore/gitignore.go index 52face7..e627d3e 100644 --- a/vendor/github.com/boyter/gocodewalker/go-gitignore/gitignore.go +++ b/vendor/github.com/boyter/gocodewalker/go-gitignore/gitignore.go @@ -8,6 +8,7 @@ import ( "path/filepath" "runtime" "strings" + "sync" ) // use an empty GitIgnore for cached lookups @@ -242,12 +243,25 @@ func (i *ignore) Match(path string) Match { return i.Absolute(_path, _isdir) } // Match() +var matchIsDirMutex = sync.Mutex{} +var matchIsDirCache = map[string]string{} + func (i *ignore) MatchIsDir(path string, _isdir bool) Match { + // ensure we have the absolute path for the given file - _path, _err := filepath.Abs(path) - if _err != nil { - i._errors(NewError(_err, Position{})) - return nil + matchIsDirMutex.Lock() + _path, ok := matchIsDirCache[path] + matchIsDirMutex.Unlock() + if !ok { + var _err error + _path, _err = filepath.Abs(path) + if _err != nil { + i._errors(NewError(_err, Position{})) + return nil + } + matchIsDirMutex.Lock() + matchIsDirCache[path] = _path + matchIsDirMutex.Unlock() } // attempt to match the absolute path diff --git a/vendor/github.com/boyter/gocodewalker/hidden.go b/vendor/github.com/boyter/gocodewalker/hidden.go index 07b16d1..2a8347f 100644 --- a/vendor/github.com/boyter/gocodewalker/hidden.go +++ b/vendor/github.com/boyter/gocodewalker/hidden.go @@ -9,6 +9,6 @@ import ( ) // IsHidden Returns true if file is hidden -func IsHidden(file os.DirEntry, directory string) (bool, error) { +func IsHidden(file os.FileInfo, directory string) (bool, error) { return file.Name()[0:1] == ".", nil } diff --git a/vendor/golang.org/x/sync/LICENSE b/vendor/golang.org/x/sync/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/golang.org/x/sync/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/sync/PATENTS b/vendor/golang.org/x/sync/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/sync/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/sync/errgroup/errgroup.go b/vendor/golang.org/x/sync/errgroup/errgroup.go new file mode 100644 index 0000000..948a3ee --- /dev/null +++ b/vendor/golang.org/x/sync/errgroup/errgroup.go @@ -0,0 +1,135 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package errgroup provides synchronization, error propagation, and Context +// cancelation for groups of goroutines working on subtasks of a common task. +// +// [errgroup.Group] is related to [sync.WaitGroup] but adds handling of tasks +// returning errors. +package errgroup + +import ( + "context" + "fmt" + "sync" +) + +type token struct{} + +// A Group is a collection of goroutines working on subtasks that are part of +// the same overall task. +// +// A zero Group is valid, has no limit on the number of active goroutines, +// and does not cancel on error. +type Group struct { + cancel func(error) + + wg sync.WaitGroup + + sem chan token + + errOnce sync.Once + err error +} + +func (g *Group) done() { + if g.sem != nil { + <-g.sem + } + g.wg.Done() +} + +// WithContext returns a new Group and an associated Context derived from ctx. +// +// The derived Context is canceled the first time a function passed to Go +// returns a non-nil error or the first time Wait returns, whichever occurs +// first. +func WithContext(ctx context.Context) (*Group, context.Context) { + ctx, cancel := withCancelCause(ctx) + return &Group{cancel: cancel}, ctx +} + +// Wait blocks until all function calls from the Go method have returned, then +// returns the first non-nil error (if any) from them. +func (g *Group) Wait() error { + g.wg.Wait() + if g.cancel != nil { + g.cancel(g.err) + } + return g.err +} + +// Go calls the given function in a new goroutine. +// It blocks until the new goroutine can be added without the number of +// active goroutines in the group exceeding the configured limit. +// +// The first call to return a non-nil error cancels the group's context, if the +// group was created by calling WithContext. The error will be returned by Wait. +func (g *Group) Go(f func() error) { + if g.sem != nil { + g.sem <- token{} + } + + g.wg.Add(1) + go func() { + defer g.done() + + if err := f(); err != nil { + g.errOnce.Do(func() { + g.err = err + if g.cancel != nil { + g.cancel(g.err) + } + }) + } + }() +} + +// TryGo calls the given function in a new goroutine only if the number of +// active goroutines in the group is currently below the configured limit. +// +// The return value reports whether the goroutine was started. +func (g *Group) TryGo(f func() error) bool { + if g.sem != nil { + select { + case g.sem <- token{}: + // Note: this allows barging iff channels in general allow barging. + default: + return false + } + } + + g.wg.Add(1) + go func() { + defer g.done() + + if err := f(); err != nil { + g.errOnce.Do(func() { + g.err = err + if g.cancel != nil { + g.cancel(g.err) + } + }) + } + }() + return true +} + +// SetLimit limits the number of active goroutines in this group to at most n. +// A negative value indicates no limit. +// +// Any subsequent call to the Go method will block until it can add an active +// goroutine without exceeding the configured limit. +// +// The limit must not be modified while any goroutines in the group are active. +func (g *Group) SetLimit(n int) { + if n < 0 { + g.sem = nil + return + } + if len(g.sem) != 0 { + panic(fmt.Errorf("errgroup: modify limit while %v goroutines in the group are still active", len(g.sem))) + } + g.sem = make(chan token, n) +} diff --git a/vendor/golang.org/x/sync/errgroup/go120.go b/vendor/golang.org/x/sync/errgroup/go120.go new file mode 100644 index 0000000..f93c740 --- /dev/null +++ b/vendor/golang.org/x/sync/errgroup/go120.go @@ -0,0 +1,13 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.20 + +package errgroup + +import "context" + +func withCancelCause(parent context.Context) (context.Context, func(error)) { + return context.WithCancelCause(parent) +} diff --git a/vendor/golang.org/x/sync/errgroup/pre_go120.go b/vendor/golang.org/x/sync/errgroup/pre_go120.go new file mode 100644 index 0000000..88ce334 --- /dev/null +++ b/vendor/golang.org/x/sync/errgroup/pre_go120.go @@ -0,0 +1,14 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.20 + +package errgroup + +import "context" + +func withCancelCause(parent context.Context) (context.Context, func(error)) { + ctx, cancel := context.WithCancel(parent) + return ctx, func(error) { cancel() } +} diff --git a/vendor/modules.txt b/vendor/modules.txt index c2c2241..56110a8 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,7 +1,7 @@ # github.com/BobuSumisu/aho-corasick v1.0.3 ## explicit; go 1.14 github.com/BobuSumisu/aho-corasick -# github.com/boyter/gocodewalker v1.1.0 +# github.com/boyter/gocodewalker v1.3.3 ## explicit; go 1.20 github.com/boyter/gocodewalker github.com/boyter/gocodewalker/go-gitignore @@ -23,3 +23,6 @@ github.com/tealeg/xlsx # github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e ## explicit github.com/texttheater/golang-levenshtein/levenshtein +# golang.org/x/sync v0.7.0 +## explicit; go 1.18 +golang.org/x/sync/errgroup