Author: Honza Pokorny <me@honza.ca>
Hello world!
.gitignore | 1 Dockerfile | 38 + LICENSE | 674 +++++++++++++++++++++++ Makefile | 10 README.md | 93 +++ cmd/generate-default-configuration.go | 30 + cmd/root.go | 48 + cmd/serve.go | 33 + cmd/version.go | 36 + go.mod | 15 go.sum | 252 ++++++++ include/404.html | 5 include/500.html | 5 include/blob.html | 40 + include/commit.html | 20 include/footer.html | 5 include/header.html | 26 include/index.html | 23 include/log.html | 47 + include/refs.html | 50 + include/repo-index.html | 32 + include/style.css | 93 +++ include/tree.html | 51 + main.go | 25 pkg/smithy/config.go | 199 ++++++ pkg/smithy/encoder.go | 388 +++++++++++++ pkg/smithy/smithy.go | 843 +++++++++++++++++++++++++++++ pkg/statik/statik.go | 14
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c05e7776daf1f9aa60b4f0b9c25d16fb97a514e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +repos diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..18bb1bb1a84c6fad04eb9fd53485e2ec80838930 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +# Start from the latest golang base image +FROM golang:latest as builder + +# Add Maintainer Info +LABEL maintainer="Honza Pokorny <me@honza.ca>" + +# Set the Current Working Directory inside the container +WORKDIR /app + +# Copy go mod and sum files +COPY go.mod go.sum ./ + +# Download all dependencies. Dependencies will be cached if the go.mod and go.sum files are not changed +RUN go mod download + +# Copy the source from the current directory to the Working Directory inside the container +COPY . . + +# Build the Go app +RUN CGO_ENABLED=0 go build -o smithy . + +######## Start a new stage from scratch ####### +FROM alpine:latest + +RUN apk --no-cache add ca-certificates + +WORKDIR /root/ + +# Copy the Pre-built binary file from the previous stage +COPY --from=builder /app/templates templates +COPY --from=builder /app/config.yaml . +COPY --from=builder /app/smithy . + +# Expose port 8080 to the outside world +EXPOSE 8080 + +# Command to run the executable +CMD ["./smithy"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..f288702d2fa16d3cdf0035b15a9fcbc552cd88e7 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is 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. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + 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. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + 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 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. Use with the GNU Affero General Public License. + + 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 Affero 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 special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU 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 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 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 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. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + 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 GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..0b3ce0bbf9d4f848775f700b30609525339fd65a --- /dev/null +++ b/Makefile @@ -0,0 +1,10 @@ +BUILD_VERSION ?= $(shell git describe --always --abbrev=40 --dirty) + +LDFLAGS="-X github.com/honza/smithy/cmd.SmithyVersion=${BUILD_VERSION}" + +all: + statik -src=include -dest=pkg -f -m + CGO_ENABLED=0 go build -ldflags $(LDFLAGS) -o smithy main.go + +gofmt: + go fmt ./pkg/... ./cmd/... diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..54cd52e87ac41d1c5d0ea8288de0c92d9be9776f --- /dev/null +++ b/README.md @@ -0,0 +1,93 @@ +Smithy +=============================================================================== + +*smithy* (n) A blacksmith's shop; a forge. + +Smithy is a web frontend for git repositories. It's implemented entirely in +Golang, compiles to a single binary, and it's fast and easy to deploy. Smithy +is an alternative to cgit or gitweb, and doesn't seek to compete with Gitea and +the like. + +* Golang +* Single binary +* Easy to deploy +* Fast +* Customizable +* Free software +* Javascript-free + +Building +------------------------------------------------------------------------------- + +The only dependency is [Golang](https://golang.org/). + +``` +$ git clone https://github.com/honza/smithy +$ make +$ ./smithy --help +``` + +Installing +------------------------------------------------------------------------------- + +``` +$ smithy generate > config.yaml +$ smithy serve --config smithy.yaml +``` + +Configuration +------------------------------------------------------------------------------- + +``` yaml +title: Smithy, a lightweight git forge +description: Publish your git repositories with ease +port: 3456 +git: + root: "/var/www/git" + repos: + - path: "some-cool-project" + slug: "some-cool-project" + title: "Some Cool Project" + description: "Something really cool to change the world" + - path: "ugly-hacks" + exclude: true + +static: + root: + prefix: /static/ + +templates: + dir: +``` + +Customizing templates and css +------------------------------------------------------------------------------- + +Out of the box, smithy bundles templates and css in the binary. Setting +`static.root`, and `templates.dir` to empty string will cause smithy to use the +bundled assets. + +If you'd like to customize the templates or the css, copy the `include` +directory somewhere, and then set `static.root`, and `templates.dir` to that +directory. + +Demo +------------------------------------------------------------------------------- + +Smithy is currently hosting [itself on my +domain](https://smithy.honza.ca/smithy). + +License +------------------------------------------------------------------------------- + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU 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 General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program. If not, see <https://www.gnu.org/licenses/>. diff --git a/cmd/generate-default-configuration.go b/cmd/generate-default-configuration.go new file mode 100644 index 0000000000000000000000000000000000000000..7823f77cf6fafec8408f8b8484b9981ed8d56abc --- /dev/null +++ b/cmd/generate-default-configuration.go @@ -0,0 +1,30 @@ +// smithy --- the git forge +// Copyright (C) 2020 Honza Pokorny <me@honza.ca> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <https://www.gnu.org/licenses/>. + +package cmd + +import ( + "github.com/honza/smithy/pkg/smithy" + "github.com/spf13/cobra" +) + +var generateDefaultConfigurationCmd = &cobra.Command{ + Use: "generate", + Short: "Generate the default smithy configuration", + Run: func(cmd *cobra.Command, args []string) { + smithy.GenerateDefaultConfig() + }, +} diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 0000000000000000000000000000000000000000..e0d620b359d2ddf41a83997782c4830f5c06d9e2 --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,48 @@ +// smithy --- the git forge +// Copyright (C) 2020 Honza Pokorny <me@honza.ca> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <https://www.gnu.org/licenses/>. + +package cmd + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" +) + +var rootCmd = &cobra.Command{ + Use: "smithy", + Short: "Smithy Git Forge", + Long: `A lightweight git forge`, + Run: func(cmd *cobra.Command, args []string) { + cmd.Help() + }, +} + +func Execute() { + if err := rootCmd.Execute(); err != nil { + fmt.Println(err) + os.Exit(1) + } +} + +func init() { + rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file path (default is config.yaml)") + rootCmd.PersistentFlags().BoolVar(&debug, "debug", false, "") + rootCmd.AddCommand(generateDefaultConfigurationCmd) + rootCmd.AddCommand(serveCmd) + rootCmd.AddCommand(versionCmd) +} diff --git a/cmd/serve.go b/cmd/serve.go new file mode 100644 index 0000000000000000000000000000000000000000..9cf9b443c5dbbdd3f0040683c9bc2b5ab74cc392 --- /dev/null +++ b/cmd/serve.go @@ -0,0 +1,33 @@ +// smithy --- the git forge +// Copyright (C) 2020 Honza Pokorny <me@honza.ca> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <https://www.gnu.org/licenses/>. + +package cmd + +import ( + "github.com/honza/smithy/pkg/smithy" + "github.com/spf13/cobra" +) + +var cfgFile string +var debug bool + +var serveCmd = &cobra.Command{ + Use: "serve", + Short: "Start the smithy server", + Run: func(cmd *cobra.Command, args []string) { + smithy.StartServer(cfgFile, debug) + }, +} diff --git a/cmd/version.go b/cmd/version.go new file mode 100644 index 0000000000000000000000000000000000000000..d6d78062740b9d323c6d70a636b0f555c15afb14 --- /dev/null +++ b/cmd/version.go @@ -0,0 +1,36 @@ +// smithy --- the git forge +// Copyright (C) 2020 Honza Pokorny <me@honza.ca> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <https://www.gnu.org/licenses/>. + +package cmd + +import ( + "fmt" + "github.com/spf13/cobra" +) + +var SmithyVersion string + +var versionCmd = &cobra.Command{ + Use: "version", + Short: "Show smithy version", + Run: func(cmd *cobra.Command, args []string) { + if SmithyVersion == "" { + fmt.Println("dev") + return + } + fmt.Println(SmithyVersion) + }, +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000000000000000000000000000000000000..97bddbb5edc56f4e5a8a54ffadd316b2dd347333 --- /dev/null +++ b/go.mod @@ -0,0 +1,15 @@ +module github.com/honza/smithy + +go 1.15 + +require ( + github.com/alecthomas/chroma v0.8.1 + github.com/gin-gonic/gin v1.6.3 + github.com/go-git/go-git/v5 v5.1.0 + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/rakyll/statik v0.1.7 + github.com/spf13/cobra v1.0.0 + github.com/yuin/goldmark v1.2.1 + gopkg.in/yaml.v2 v2.2.8 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000000000000000000000000000000000000..439763362b7f8269b676a7c524a7d3f7f2d119e2 --- /dev/null +++ b/go.sum @@ -0,0 +1,252 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 h1:smF2tmSOzy2Mm+0dGI2AIUHY+w0BUc+4tn40djz7+6U= +github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI= +github.com/alecthomas/chroma v0.8.1 h1:ym20sbvyC6RXz45u4qDglcgr8E313oPROshcuCHqiEE= +github.com/alecthomas/chroma v0.8.1/go.mod h1:sko8vR34/90zvl5QdcUdvzL3J8NKjAUx9va9jPuFNoM= +github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721 h1:JHZL0hZKJ1VENNfmXvHbgYlbUOvpzYzvy2aZU5gXVeo= +github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721/go.mod h1:QO9JBoKquHd+jz9nshCh40fOfO+JzsoXy8qTHF68zU0= +github.com/alecthomas/kong v0.2.4/go.mod h1:kQOmtJgV+Lb4aj+I2LEn40cbtawdWJ9Y8QLq+lElKxE= +github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897 h1:p9Sln00KOTlrYkxI1zYWl1QLnEqAqEARBEYa8FQnQcY= +github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +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= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ= +github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dlclark/regexp2 v1.2.0 h1:8sAhBGEM0dRWogWqWyQeIJnxjWO6oIjl8FKqREDsGfk= +github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.0.0 h1:7NQHvd9FVid8VL4qVUMm8XifBK+2xCoZ2lSk0agRrHM= +github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.0.1 h1:q+IFMfLx200Q3scvt2hN79JsEzy4AmBTp/pqnefH+Bc= +github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= +github.com/go-git/go-git/v5 v5.1.0 h1:HxJn9g/E7eYvKW3Fm7Jt4ee8LXfPOm/H1cdDu8vEssk= +github.com/go-git/go-git/v5 v5.1.0/go.mod h1:ZKfuPUoY1ZqIG4QG9BDBh3G4gLM5zvPuSJAozQrZuyM= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg= +github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= +github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.2.1 h1:ruQGxdhGHe7FWOJPT0mKs5+pD2Xs1Bm/kdGlHO04FmM= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073 h1:xMPOj6Pz6UipU1wXLkrtqpHbR0AVFnyPEQq/wRWz9lM= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +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/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= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200413165638-669c56c373c4 h1:opSr2sbRXk5X5/givKrrKj9HXxFpW2sdCiP8MJSKLQY= +golang.org/x/sys v0.0.0-20200413165638-669c56c373c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/include/404.html b/include/404.html new file mode 100644 index 0000000000000000000000000000000000000000..9f9b0b119a9f3ef5bc97267225ef7364db971e3c --- /dev/null +++ b/include/404.html @@ -0,0 +1,5 @@ +{{ template "header" }} + +<h1>404 - Not Found</h1> + +{{ template "footer" }} diff --git a/include/500.html b/include/500.html new file mode 100644 index 0000000000000000000000000000000000000000..313e95a3a6424d6f4720a1ae7250c5414256c988 --- /dev/null +++ b/include/500.html @@ -0,0 +1,5 @@ +{{ template "header" }} + +<h1>500 - Unexpected Server Error</h1> + +{{ template "footer" }} diff --git a/include/blob.html b/include/blob.html new file mode 100644 index 0000000000000000000000000000000000000000..2a4c127bb21b73667f1f3e639c2aa68f037a2592 --- /dev/null +++ b/include/blob.html @@ -0,0 +1,40 @@ +{{ template "header" }} + +{{ $repo := .RepoName }} + +<h1>{{ .RepoName }}</h1> + +<nav class="navbar navbar-expand navbar-light bg-light"> + <div class="collapse navbar-collapse" id="navbarNav"> + <ul class="navbar-nav"> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}">About</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}/refs">Refs</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}/log">Log</a> + </li> + <li class="nav-item active"> + <a class="nav-link" href="/{{ $repo }}/tree">Tree</a> + </li> + </ul> + </div> +</nav> + +{{ $repo := .RepoName }} +{{ $subtree := .SubTree }} +{{ $ref := .RefName }} + +ref: {{ .RefName }} + +<p>{{ .Path }}</p> + +<hr> + +<div> +{{ .ContentsHighlighted }} +</div> + +{{ template "footer" }} diff --git a/include/commit.html b/include/commit.html new file mode 100644 index 0000000000000000000000000000000000000000..1bfbd142023b127d5582fb43347aac5d1a7b649d --- /dev/null +++ b/include/commit.html @@ -0,0 +1,20 @@ +{{ template "header" }} + +<h1>{{ .RepoName }}</h1> +<h2>commit {{ .Commit.Hash }}</h2> + +<p>Author: {{ .Commit.Author.Name }} <{{ .Commit.Author.Email }}></p> + +<p><pre>{{ .Commit.Message }}</pre></p> + +<p> + <pre>{{ .Commit.Stats }}</pre> +</p> + +<hr> + +<div> + <pre>{{ .Changes }}</pre> +</div> + +{{ template "footer" }} diff --git a/include/footer.html b/include/footer.html new file mode 100644 index 0000000000000000000000000000000000000000..a248bef9aa1b192f4747d16305f546b12de201f3 --- /dev/null +++ b/include/footer.html @@ -0,0 +1,5 @@ +{{ define "footer" }} + </div> + </body> +</html> +{{ end }} diff --git a/include/header.html b/include/header.html new file mode 100644 index 0000000000000000000000000000000000000000..69a08fa46e93be2ea7d068c440f510ad0fdbe67c --- /dev/null +++ b/include/header.html @@ -0,0 +1,26 @@ +{{ define "header" }} +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta http-equiv="x-ua-compatible" content="ie=edge"> + <title>Smithy</title> + <meta name="description" content=""> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="stylesheet" href="{{ css }}" /> + </head> + <body> + <nav class="navbar navbar-expand navbar-light bg-light fixed-top"> + <a class="navbar-brand" href="/">Smithy</a> + <div class="collapse navbar-collapse" id="navbarSupportedContent"> + <ul class="navbar-nav mr-auto"> + <li class="nav-item"> + <a class="nav-link" href="/">Projects</a> + </li> + </ul> + + </div> + </nav> + + <div class="container-fluid"> +{{ end }} diff --git a/include/index.html b/include/index.html new file mode 100644 index 0000000000000000000000000000000000000000..7d5697953c88006a211a3240934a1290a892cd0e --- /dev/null +++ b/include/index.html @@ -0,0 +1,23 @@ +{{ template "header" }} + +<h3>{{ .Title }}</h3> + +<p>{{ .Description }}</p> + +<h3>Projects</h3> + +{{range .Repos}} + <div class="row"> + <div class="col-12"> + {{ if .Meta.Slug }} + <h4><a href="/{{ .Meta.Slug }}">{{ .Name }}</a></h4> + <p>{{ .Meta.Description }}</p> + {{ else }} + <h4><a href="/{{ .Name }}">{{ .Name }}</a></h4> + {{ end }} + <hr> + </div> + </div> +{{ end }} + +{{ template "footer" }} diff --git a/include/log.html b/include/log.html new file mode 100644 index 0000000000000000000000000000000000000000..d3fe0a5f42267d3334126e40149acb4f2a1b9755 --- /dev/null +++ b/include/log.html @@ -0,0 +1,47 @@ +{{ template "header" }} + +{{ $repo := .Name }} + +<h1>{{ .Name }}</h1> + +<nav class="navbar navbar-expand navbar-light bg-light"> + <div class="collapse navbar-collapse" id="navbarNav"> + <ul class="navbar-nav"> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}">About</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}/refs">Refs</a> + </li> + <li class="nav-item active"> + <a class="nav-link" href="/{{ $repo }}/log">Log</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}/tree">Tree</a> + </li> + </ul> + </div> +</nav> + +ref: {{ .RefName }} + +<table class="table"> + <thead> + <th>Sha</th> + <th>Commit date</th> + <th>Commit message</th> + <th>Author</th> + </thead> + <tbody> + {{ range .Commits }} + <tr> + <td><a href="/{{ $repo }}/commit/{{ .Commit.Hash }}">{{ .ShortHash }}</a></td> + <td>{{ .FormattedDate }}</td> + <td>{{ .Subject }}</td> + <td>{{ .Commit.Author.Name }}</td> + </tr> + {{ end }} + </tbody> +</table> + +{{ template "footer" }} diff --git a/include/refs.html b/include/refs.html new file mode 100644 index 0000000000000000000000000000000000000000..6e3b766013dff022011ae02a81c482ad3e7da293 --- /dev/null +++ b/include/refs.html @@ -0,0 +1,50 @@ +{{ template "header" }} + +{{ $repo := .Name }} + +<h1>{{ .Name }}</h1> + +<nav class="navbar navbar-expand navbar-light bg-light"> + <div class="collapse navbar-collapse" id="navbarNav"> + <ul class="navbar-nav"> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}">About</a> + </li> + <li class="nav-item active"> + <a class="nav-link" href="/{{ $repo }}/refs">Refs</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}/log">Log</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}/tree">Tree</a> + </li> + </ul> + </div> +</nav> + +<h3>Branches</h3> + +<table class="table"> + {{ range .Branches }} + <tr> + <td>{{ .Name.Short }}</td> + <td><a href="/{{ $repo }}/log/{{ .Name.Short }}">log</a></td> + <td><a href="/{{ $repo }}/tree/{{ .Name.Short }}">tree</a></td> + </tr> + {{ end }} +</table> + +<h3>Tags</h3> + +<table class="table"> + {{ range .Tags }} + <tr> + <td>{{ .Name.Short }}</td> + <td><a href="/{{ $repo }}/log/{{ .Name.Short }}">log</a></td> + <td><a href="/{{ $repo }}/tree/{{ .Name.Short }}">tree</a></td> + </tr> + {{ end }} +</table> + +{{ template "footer" }} diff --git a/include/repo-index.html b/include/repo-index.html new file mode 100644 index 0000000000000000000000000000000000000000..21c07e9c9b9bbf64d74394a053a6f059a59f63ee --- /dev/null +++ b/include/repo-index.html @@ -0,0 +1,32 @@ +{{ template "header" }} + +{{ $repo := .Name }} + +<h1>{{ .Name }}</h1> + +<nav class="navbar navbar-expand navbar-light bg-light"> + <div class="collapse navbar-collapse" id="navbarNav"> + <ul class="navbar-nav"> + <li class="nav-item active"> + <a class="nav-link" href="/{{ $repo }}">About</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}/refs">Refs</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}/log">Log</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}/tree">Tree</a> + </li> + </ul> + </div> +</nav> + +<div class="row"> + <div class="col-xl-6 col-lg-6 col-md-12 col-sm-12"> + {{ .Readme }} + </div> +</div> + +{{ template "footer" }} diff --git a/include/style.css b/include/style.css new file mode 100644 index 0000000000000000000000000000000000000000..54e81df060bb51e1fe028c0f8d89d132d583d914 --- /dev/null +++ b/include/style.css @@ -0,0 +1,93 @@ +/*! + * Bootstrap v4.5.2 (https://getbootstrap.com/) + * Copyright 2011-2020 The Bootstrap Authors + * Copyright 2011-2020 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ + +body { + color: #333; + font-family: "FiraCode", "FiraMono", "Menlo", "Ubuntu Mono", "IBM Plex Mono"; + margin-top: 80px; +} + +td { + padding-right: 15px; +} + +pre { + font-size: 18px; +} + + .diff-add { + color: green; + } + .diff-delete { + color: red; + } +/* Background */ .chroma { background-color: #ffffff } +/* Error */ .chroma .err { color: #ff0000; background-color: #ffaaaa } +/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } +/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; } +/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: #e5e5e5 } +/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f } +/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f } +/* Keyword */ .chroma .k { color: #0000aa } +/* KeywordConstant */ .chroma .kc { color: #0000aa } +/* KeywordDeclaration */ .chroma .kd { color: #0000aa } +/* KeywordNamespace */ .chroma .kn { color: #0000aa } +/* KeywordPseudo */ .chroma .kp { color: #0000aa } +/* KeywordReserved */ .chroma .kr { color: #0000aa } +/* KeywordType */ .chroma .kt { color: #00aaaa } +/* NameAttribute */ .chroma .na { color: #1e90ff } +/* NameBuiltin */ .chroma .nb { color: #00aaaa } +/* NameClass */ .chroma .nc { color: #00aa00; text-decoration: underline } +/* NameConstant */ .chroma .no { color: #aa0000 } +/* NameDecorator */ .chroma .nd { color: #888888 } +/* NameEntity */ .chroma .ni { color: #880000; font-weight: bold } +/* NameFunction */ .chroma .nf { color: #00aa00 } +/* NameNamespace */ .chroma .nn { color: #00aaaa; text-decoration: underline } +/* NameTag */ .chroma .nt { color: #1e90ff; font-weight: bold } +/* NameVariable */ .chroma .nv { color: #aa0000 } +/* LiteralString */ .chroma .s { color: #aa5500 } +/* LiteralStringAffix */ .chroma .sa { color: #aa5500 } +/* LiteralStringBacktick */ .chroma .sb { color: #aa5500 } +/* LiteralStringChar */ .chroma .sc { color: #aa5500 } +/* LiteralStringDelimiter */ .chroma .dl { color: #aa5500 } +/* LiteralStringDoc */ .chroma .sd { color: #aa5500 } +/* LiteralStringDouble */ .chroma .s2 { color: #aa5500 } +/* LiteralStringEscape */ .chroma .se { color: #aa5500 } +/* LiteralStringHeredoc */ .chroma .sh { color: #aa5500 } +/* LiteralStringInterpol */ .chroma .si { color: #aa5500 } +/* LiteralStringOther */ .chroma .sx { color: #aa5500 } +/* LiteralStringRegex */ .chroma .sr { color: #009999 } +/* LiteralStringSingle */ .chroma .s1 { color: #aa5500 } +/* LiteralStringSymbol */ .chroma .ss { color: #0000aa } +/* LiteralNumber */ .chroma .m { color: #009999 } +/* LiteralNumberBin */ .chroma .mb { color: #009999 } +/* LiteralNumberFloat */ .chroma .mf { color: #009999 } +/* LiteralNumberHex */ .chroma .mh { color: #009999 } +/* LiteralNumberInteger */ .chroma .mi { color: #009999 } +/* LiteralNumberIntegerLong */ .chroma .il { color: #009999 } +/* LiteralNumberOct */ .chroma .mo { color: #009999 } +/* OperatorWord */ .chroma .ow { color: #0000aa } +/* Comment */ .chroma .c { color: #aaaaaa; font-style: italic } +/* CommentHashbang */ .chroma .ch { color: #aaaaaa; font-style: italic } +/* CommentMultiline */ .chroma .cm { color: #aaaaaa; font-style: italic } +/* CommentSingle */ .chroma .c1 { color: #aaaaaa; font-style: italic } +/* CommentSpecial */ .chroma .cs { color: #0000aa; font-style: italic } +/* CommentPreproc */ .chroma .cp { color: #4c8317 } +/* CommentPreprocFile */ .chroma .cpf { color: #4c8317 } +/* GenericDeleted */ .chroma .gd { color: #aa0000 } +/* GenericEmph */ .chroma .ge { font-style: italic } +/* GenericError */ .chroma .gr { color: #aa0000 } +/* GenericHeading */ .chroma .gh { color: #000080; font-weight: bold } +/* GenericInserted */ .chroma .gi { color: #00aa00 } +/* GenericOutput */ .chroma .go { color: #888888 } +/* GenericPrompt */ .chroma .gp { color: #555555 } +/* GenericStrong */ .chroma .gs { font-weight: bold } +/* GenericSubheading */ .chroma .gu { color: #800080; font-weight: bold } +/* GenericTraceback */ .chroma .gt { color: #aa0000 } +/* GenericUnderline */ .chroma .gl { text-decoration: underline } +/* TextWhitespace */ .chroma .w { color: #bbbbbb } diff --git a/include/tree.html b/include/tree.html new file mode 100644 index 0000000000000000000000000000000000000000..c04d489b6884cb55419dabbb482581829f05861a --- /dev/null +++ b/include/tree.html @@ -0,0 +1,51 @@ +{{ template "header" }} + +{{ $repo := .RepoName }} +{{ $subtree := .SubTree }} +{{ $ref := .RefName }} +{{ $path := .Path }} + + +<h1>{{ .RepoName }}</h1> + +<nav class="navbar navbar-expand navbar-light bg-light"> + <div class="collapse navbar-collapse" id="navbarNav"> + <ul class="navbar-nav"> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}">About</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}/refs">Refs</a> + </li> + <li class="nav-item"> + <a class="nav-link" href="/{{ $repo }}/log">Log</a> + </li> + <li class="nav-item active"> + <a class="nav-link" href="/{{ $repo }}/tree">Tree</a> + </li> + </ul> + </div> +</nav> + +ref: {{ .RefName }} + +<p> + path: {{ .Path }} +</p> + +<table> + {{ range .Files }} + <tr> + <td> + {{ .FileMode }} + </td> + <td> + <a href="/{{ $repo }}/tree/{{ $ref }}/{{ if $path }}{{ $path }}/{{ end }}{{ .Name }}"> + {{ .Name }}{{ if not .Mode.IsFile }}/{{ end }} + </a> + </td> + </tr> + {{ end }} +</ul> + +{{ template "footer" }} diff --git a/main.go b/main.go new file mode 100644 index 0000000000000000000000000000000000000000..7b20a9439bc1c9cdf55778b1cb79f66083a844e2 --- /dev/null +++ b/main.go @@ -0,0 +1,25 @@ +// smithy --- the git forge +// Copyright (C) 2020 Honza Pokorny <me@honza.ca> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <https://www.gnu.org/licenses/>. + +package main + +import ( + "github.com/honza/smithy/cmd" +) + +func main() { + cmd.Execute() +} diff --git a/pkg/smithy/config.go b/pkg/smithy/config.go new file mode 100644 index 0000000000000000000000000000000000000000..c56efcde3c7c99feb2ffc27c072743ff26a0d426 --- /dev/null +++ b/pkg/smithy/config.go @@ -0,0 +1,199 @@ +// smithy --- the git forge +// Copyright (C) 2020 Honza Pokorny <me@honza.ca> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <https://www.gnu.org/licenses/>. + +package smithy + +import ( + "fmt" + "io/ioutil" + "path/filepath" + "sort" + + "github.com/go-git/go-git/v5" + "gopkg.in/yaml.v2" +) + +type RepoConfig struct { + Path string + Slug string + Title string + Description string + Exclude bool +} + +type GitConfig struct { + Root string `yaml:"root"` + Repos []RepoConfig `yaml:",omitempty"` + + // ReposBySlug is an extrapolaed value + reposBySlug map[string]RepositoryWithName + + // staticReposBySlug is a map of the `repos` values + staticReposBySlug map[string]RepoConfig +} + +type SmithyConfig struct { + Title string `yaml:"title"` + Description string `yaml:"description"` + Git GitConfig + Static struct { + Root string + Prefix string + } + Templates struct { + Dir string + } + Port int `yaml:"port"` +} + +func (sc *SmithyConfig) findStaticRepo(slug string) (RepoConfig, bool) { + value, exists := sc.Git.staticReposBySlug[slug] + return value, exists +} + +func (sc *SmithyConfig) FindRepo(slug string) (RepositoryWithName, bool) { + value, exists := sc.Git.reposBySlug[slug] + return value, exists +} + +func (sc *SmithyConfig) GetRepositories() []RepositoryWithName { + var repos []RepositoryWithName + + for _, repo := range sc.Git.reposBySlug { + repos = append(repos, repo) + } + + sort.Sort(RepositoryByName(repos)) + return repos +} + +func (sc *SmithyConfig) LoadAllRepositories() error { + sc.Git.staticReposBySlug = make(map[string]RepoConfig) + + for _, repo := range sc.Git.Repos { + k := repo.Path + if repo.Slug != "" { + k = repo.Slug + } + sc.Git.staticReposBySlug[k] = repo + } + + repos, err := ioutil.ReadDir(sc.Git.Root) + + if err != nil { + return err + } + + // TODO: should we clear out or not? + sc.Git.reposBySlug = make(map[string]RepositoryWithName) + + for _, repo := range repos { + repoObj, exists := sc.findStaticRepo(repo.Name()) + + if exists == true && repoObj.Exclude == true { + continue + } + + r, err := git.PlainOpen(sc.Git.Root + repo.Name()) + if err != nil { + // Ignore directories that aren't git repositories + continue + } + + rwn := RepositoryWithName{Name: repo.Name(), Repository: r} + key := repo.Name() + + if exists { + rwn.Meta = repoObj + rwn.Name = repoObj.Title + + if repoObj.Slug != "" { + key = repoObj.Slug + } + } + + sc.Git.reposBySlug[key] = rwn + + } + + for _, repo := range sc.Git.Repos { + if repo.Exclude == true { + continue + } + + if !filepath.IsAbs(repo.Path) { + continue + } + + r, err := git.PlainOpen(repo.Path) + if err != nil { + // Ignore directories that aren't git repositories + continue + } + rwn := RepositoryWithName{Name: repo.Title, Repository: r, Meta: repo} + key := repo.Path + if repo.Slug != "" { + key = repo.Slug + } + + sc.Git.reposBySlug[key] = rwn + } + + return nil + +} + +func LoadConfig(path string) (SmithyConfig, error) { + var smithyConfig SmithyConfig + + if path == "" { + path = "config.yaml" + } + + contents, err := ioutil.ReadFile(path) + + if err != nil { + return smithyConfig, err + } + + err = yaml.Unmarshal(contents, &smithyConfig) + + if err != nil { + return smithyConfig, err + } + + err = smithyConfig.LoadAllRepositories() + + if err != nil { + return smithyConfig, err + } + + return smithyConfig, nil +} + +func New() SmithyConfig { + return SmithyConfig{ + Title: "Smithy, a lightweight git force", + Port: 3456, + Description: "Publish your git repositories with ease", + } +} + +func GenerateDefaultConfig() { + config := New() + out, _ := yaml.Marshal(config) + fmt.Print(string(out)) +} diff --git a/pkg/smithy/encoder.go b/pkg/smithy/encoder.go new file mode 100644 index 0000000000000000000000000000000000000000..2c3732d05f45ab1e4ff16d3db364e3c90a4521c9 --- /dev/null +++ b/pkg/smithy/encoder.go @@ -0,0 +1,388 @@ +// smithy --- the git forge +// Copyright (C) 2020 Honza Pokorny <me@honza.ca> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <https://www.gnu.org/licenses/>. + +// This file is largely based on +// https://github.com/go-git/go-git/blob/70111361e674d786d3e8fca494229d0ad8361de9/plumbing/format/diff/unified_encoder.go +// Original code licensed under Apache 2.0 +package smithy + +import ( + "fmt" + "html" + "io" + "regexp" + "strconv" + "strings" + + "github.com/go-git/go-git/v5/plumbing" + "github.com/go-git/go-git/v5/plumbing/format/diff" + "github.com/go-git/go-git/v5/plumbing/object" +) + +// DefaultContextLines is the default number of context lines. +const DefaultContextLines = 3 + +var ( + splitLinesRegexp = regexp.MustCompile(`[^\n]*(\n|$)`) + + operationChar = map[diff.Operation]byte{ + diff.Add: '+', + diff.Delete: '-', + diff.Equal: ' ', + } + operationClass = map[diff.Operation]string{ + diff.Add: "diff-add", + diff.Delete: "diff-delete", + diff.Equal: "diff-equal", + } +) + +// UnifiedEncoder encodes an unified diff into the provided Writer. It does not +// support similarity index for renames or sorting hash representations. +type UnifiedEncoder struct { + io.Writer + + // contextLines is the count of unchanged lines that will appear surrounding + // a change. + contextLines int +} + +// NewUnifiedEncoder returns a new UnifiedEncoder that writes to w. +func NewUnifiedEncoder(w io.Writer, contextLines int) *UnifiedEncoder { + return &UnifiedEncoder{ + Writer: w, + contextLines: contextLines, + } +} + +// Encode encodes patch. +func (e *UnifiedEncoder) Encode(patch object.Patch) error { + sb := &strings.Builder{} + + if message := patch.Message(); message != "" { + sb.WriteString(message) + if !strings.HasSuffix(message, "\n") { + sb.WriteByte('\n') + } + } + + for _, filePatch := range patch.FilePatches() { + e.writeFilePatchHeader(sb, filePatch) + g := newHunksGenerator(filePatch.Chunks(), e.contextLines) + for _, hunk := range g.Generate() { + hunk.writeTo(sb) + } + } + + _, err := e.Write([]byte(sb.String())) + return err +} + +func (e *UnifiedEncoder) writeFilePatchHeader(sb *strings.Builder, filePatch diff.FilePatch) { + from, to := filePatch.Files() + if from == nil && to == nil { + return + } + isBinary := filePatch.IsBinary() + + var lines []string + switch { + case from != nil && to != nil: + hashEquals := from.Hash() == to.Hash() + lines = append(lines, + fmt.Sprintf("diff --git a/%s b/%s", from.Path(), to.Path()), + ) + if from.Mode() != to.Mode() { + lines = append(lines, + fmt.Sprintf("old mode %o", from.Mode()), + fmt.Sprintf("new mode %o", to.Mode()), + ) + } + if from.Path() != to.Path() { + lines = append(lines, + fmt.Sprintf("rename from %s", from.Path()), + fmt.Sprintf("rename to %s", to.Path()), + ) + } + if from.Mode() != to.Mode() && !hashEquals { + lines = append(lines, + fmt.Sprintf("index %s..%s", from.Hash(), to.Hash()), + ) + } else if !hashEquals { + lines = append(lines, + fmt.Sprintf("index %s..%s %o", from.Hash(), to.Hash(), from.Mode()), + ) + } + if !hashEquals { + lines = e.appendPathLines(lines, "a/"+from.Path(), "b/"+to.Path(), isBinary) + } + case from == nil: + lines = append(lines, + fmt.Sprintf("diff --git a/%s b/%s", to.Path(), to.Path()), + fmt.Sprintf("new file mode %o", to.Mode()), + fmt.Sprintf("index %s..%s", plumbing.ZeroHash, to.Hash()), + ) + lines = e.appendPathLines(lines, "/dev/null", "b/"+to.Path(), isBinary) + case to == nil: + lines = append(lines, + fmt.Sprintf("diff --git a/%s b/%s", from.Path(), from.Path()), + fmt.Sprintf("deleted file mode %o", from.Mode()), + fmt.Sprintf("index %s..%s", from.Hash(), plumbing.ZeroHash), + ) + lines = e.appendPathLines(lines, "a/"+from.Path(), "/dev/null", isBinary) + } + + sb.WriteString(lines[0]) + for _, line := range lines[1:] { + sb.WriteByte('\n') + sb.WriteString(line) + } + sb.WriteByte('\n') +} + +func (e *UnifiedEncoder) appendPathLines(lines []string, fromPath, toPath string, isBinary bool) []string { + if isBinary { + return append(lines, + fmt.Sprintf("Binary files %s and %s differ", fromPath, toPath), + ) + } + return append(lines, + fmt.Sprintf("--- %s", fromPath), + fmt.Sprintf("+++ %s", toPath), + ) +} + +type hunksGenerator struct { + fromLine, toLine int + ctxLines int + chunks []diff.Chunk + current *hunk + hunks []*hunk + beforeContext, afterContext []string +} + +func newHunksGenerator(chunks []diff.Chunk, ctxLines int) *hunksGenerator { + return &hunksGenerator{ + chunks: chunks, + ctxLines: ctxLines, + } +} + +func (g *hunksGenerator) Generate() []*hunk { + for i, chunk := range g.chunks { + lines := splitLines(chunk.Content()) + nLines := len(lines) + + switch chunk.Type() { + case diff.Equal: + g.fromLine += nLines + g.toLine += nLines + g.processEqualsLines(lines, i) + case diff.Delete: + if nLines != 0 { + g.fromLine++ + } + + g.processHunk(i, chunk.Type()) + g.fromLine += nLines - 1 + g.current.AddOp(chunk.Type(), lines...) + case diff.Add: + if nLines != 0 { + g.toLine++ + } + g.processHunk(i, chunk.Type()) + g.toLine += nLines - 1 + g.current.AddOp(chunk.Type(), lines...) + } + + if i == len(g.chunks)-1 && g.current != nil { + g.hunks = append(g.hunks, g.current) + } + } + + return g.hunks +} + +func (g *hunksGenerator) processHunk(i int, op diff.Operation) { + if g.current != nil { + return + } + + var ctxPrefix string + linesBefore := len(g.beforeContext) + if linesBefore > g.ctxLines { + ctxPrefix = g.beforeContext[linesBefore-g.ctxLines-1] + g.beforeContext = g.beforeContext[linesBefore-g.ctxLines:] + linesBefore = g.ctxLines + } + + g.current = &hunk{ctxPrefix: strings.TrimSuffix(ctxPrefix, "\n")} + g.current.AddOp(diff.Equal, g.beforeContext...) + + switch op { + case diff.Delete: + g.current.fromLine, g.current.toLine = + g.addLineNumbers(g.fromLine, g.toLine, linesBefore, i, diff.Add) + case diff.Add: + g.current.toLine, g.current.fromLine = + g.addLineNumbers(g.toLine, g.fromLine, linesBefore, i, diff.Delete) + } + + g.beforeContext = nil +} + +// addLineNumbers obtains the line numbers in a new chunk. +func (g *hunksGenerator) addLineNumbers(la, lb int, linesBefore int, i int, op diff.Operation) (cla, clb int) { + cla = la - linesBefore + // we need to search for a reference for the next diff + switch { + case linesBefore != 0 && g.ctxLines != 0: + if lb > g.ctxLines { + clb = lb - g.ctxLines + 1 + } else { + clb = 1 + } + case g.ctxLines == 0: + clb = lb + case i != len(g.chunks)-1: + next := g.chunks[i+1] + if next.Type() == op || next.Type() == diff.Equal { + // this diff will be into this chunk + clb = lb + 1 + } + } + + return +} + +func (g *hunksGenerator) processEqualsLines(ls []string, i int) { + if g.current == nil { + g.beforeContext = append(g.beforeContext, ls...) + return + } + + g.afterContext = append(g.afterContext, ls...) + if len(g.afterContext) <= g.ctxLines*2 && i != len(g.chunks)-1 { + g.current.AddOp(diff.Equal, g.afterContext...) + g.afterContext = nil + } else { + ctxLines := g.ctxLines + if ctxLines > len(g.afterContext) { + ctxLines = len(g.afterContext) + } + g.current.AddOp(diff.Equal, g.afterContext[:ctxLines]...) + g.hunks = append(g.hunks, g.current) + + g.current = nil + g.beforeContext = g.afterContext[ctxLines:] + g.afterContext = nil + } +} + +func splitLines(s string) []string { + out := splitLinesRegexp.FindAllString(s, -1) + if out[len(out)-1] == "" { + out = out[:len(out)-1] + } + return out +} + +type hunk struct { + fromLine int + toLine int + + fromCount int + toCount int + + ctxPrefix string + ops []*op +} + +func (h *hunk) writeTo(sb *strings.Builder) { + sb.WriteString("@@ -") + + if h.fromCount == 1 { + sb.WriteString(strconv.Itoa(h.fromLine)) + } else { + sb.WriteString(strconv.Itoa(h.fromLine)) + sb.WriteByte(',') + sb.WriteString(strconv.Itoa(h.fromCount)) + } + + sb.WriteString(" +") + + if h.toCount == 1 { + sb.WriteString(strconv.Itoa(h.toLine)) + } else { + sb.WriteString(strconv.Itoa(h.toLine)) + sb.WriteByte(',') + sb.WriteString(strconv.Itoa(h.toCount)) + } + + sb.WriteString(" @@") + + if h.ctxPrefix != "" { + sb.WriteByte(' ') + sb.WriteString(h.ctxPrefix) + } + + sb.WriteByte('\n') + + for _, op := range h.ops { + op.writeTo(sb) + } + +} + +func (h *hunk) AddOp(t diff.Operation, ss ...string) { + n := len(ss) + switch t { + case diff.Add: + h.toCount += n + case diff.Delete: + h.fromCount += n + case diff.Equal: + h.toCount += n + h.fromCount += n + } + + for _, s := range ss { + h.ops = append(h.ops, &op{s, t}) + } +} + +type op struct { + text string + t diff.Operation +} + +func esc(s string) string { + return html.EscapeString(s) +} + +func (o *op) writeTo(sb *strings.Builder) { + sb.WriteString("<span class=\"") + sb.WriteString(operationClass[o.t]) + sb.WriteString("\">") + sb.WriteByte(operationChar[o.t]) + if strings.HasSuffix(o.text, "\n") { + sb.WriteString(strings.TrimSuffix(esc(o.text), "\n")) + } else { + sb.WriteString(esc(o.text) + "\n\\ No newline at end of file") + } + sb.WriteString("</span>") + sb.WriteByte('\n') +} diff --git a/pkg/smithy/smithy.go b/pkg/smithy/smithy.go new file mode 100644 index 0000000000000000000000000000000000000000..b8116ba942c64e0a2a3e6cc6689dbdcc40496ee6 --- /dev/null +++ b/pkg/smithy/smithy.go @@ -0,0 +1,843 @@ +// smithy --- the git forge +// Copyright (C) 2020 Honza Pokorny <me@honza.ca> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <https://www.gnu.org/licenses/>. + +package smithy + +import ( + "bytes" + "errors" + "fmt" + "html/template" + "io" + "io/ioutil" + "net/http" + "os" + "path/filepath" + "regexp" + "sort" + "strings" + + "github.com/alecthomas/chroma/formatters/html" + "github.com/alecthomas/chroma/lexers" + "github.com/alecthomas/chroma/styles" + "github.com/gin-gonic/gin" + "github.com/go-git/go-git/v5" + "github.com/go-git/go-git/v5/plumbing" + "github.com/go-git/go-git/v5/plumbing/filemode" + "github.com/go-git/go-git/v5/plumbing/object" + "github.com/go-git/go-git/v5/plumbing/storer" + "github.com/rakyll/statik/fs" + "github.com/yuin/goldmark" + + _ "github.com/honza/smithy/pkg/statik" +) + +const PAGE_SIZE int = 100 + +type RepositoryWithName struct { + Name string + Repository *git.Repository + Meta RepoConfig +} + +type Commit struct { + Commit *object.Commit + Subject string + ShortHash string +} + +func (c *Commit) FormattedDate() string { + return c.Commit.Author.When.Format("2006-01-02") + // return c.Commit.Author.When.Format(time.RFC822) +} + +type TreeEntry struct { + Name string + Mode filemode.FileMode + Hash plumbing.Hash +} + +func (te *TreeEntry) FileMode() string { + osFile, err := te.Mode.ToOSFileMode() + if err != nil { + return "" + } + + if osFile.IsDir() { + return "d---------" + } + + return osFile.String() +} + +func ConvertTreeEntries(entries []object.TreeEntry) []TreeEntry { + var results []TreeEntry + + for _, entry := range entries { + e := TreeEntry{ + Name: entry.Name, + Mode: entry.Mode, + Hash: entry.Hash, + } + results = append(results, e) + } + + return results +} + +type RepositoryByName []RepositoryWithName + +func (r RepositoryByName) Len() int { return len(r) } +func (r RepositoryByName) Swap(i, j int) { r[i], r[j] = r[j], r[i] } +func (r RepositoryByName) Less(i, j int) bool { + res := strings.Compare(r[i].Name, r[j].Name) + return res < 0 +} + +type ReferenceByName []*plumbing.Reference + +func (r ReferenceByName) Len() int { return len(r) } +func (r ReferenceByName) Swap(i, j int) { r[i], r[j] = r[j], r[i] } +func (r ReferenceByName) Less(i, j int) bool { + res := strings.Compare(r[i].Name().String(), r[j].Name().String()) + return res < 0 +} + +func PathExists(path string) (bool, error) { + _, err := os.Stat(path) + if err == nil { + return true, nil + } + if os.IsNotExist(err) { + return false, nil + } + return false, err +} + +func DefaultParam(ctx *gin.Context, key, def string) string { + p := ctx.Param(key) + + if p != "" { + return p + } + + return def +} + +func GetReadmeFromCommit(commit *object.Commit) (*object.File, error) { + options := []string{ + "README.md", + "README", + "README.markdown", + "readme.md", + "readme.markdown", + "readme", + } + + for _, opt := range options { + f, err := commit.File(opt) + + if err == nil { + return f, nil + } + + } + + return nil, errors.New("no valid readme") +} + +func FormatMarkdown(input string) string { + var buf bytes.Buffer + if err := goldmark.Convert([]byte(input), &buf); err != nil { + panic(err) + } + + return buf.String() + +} + +func RenderSyntaxHighlighting(file *object.File) (string, error) { + contents, err := file.Contents() + if err != nil { + return "", err + } + lexer := lexers.Match(file.Name) + if lexer == nil { + // If the lexer is nil, we weren't able to find one based on the file + // extension. We can render it as plain text. + return fmt.Sprintf("<pre>%s</pre>", contents), nil + } + + style := styles.Get("autumn") + + if style == nil { + style = styles.Fallback + } + + formatter := html.New( + html.WithClasses(true), + html.WithLineNumbers(true), + html.LinkableLineNumbers(true, "L"), + ) + + iterator, err := lexer.Tokenise(nil, contents) + + buf := bytes.NewBuffer(nil) + err = formatter.Format(buf, style, iterator) + + if err != nil { + return fmt.Sprintf("<pre>%s</pre>", contents), nil + } + + return buf.String(), nil +} + +func Http404(ctx *gin.Context) { + ctx.HTML(http.StatusNotFound, "404.html", gin.H{}) +} + +func Http500(ctx *gin.Context) { + ctx.HTML(http.StatusInternalServerError, "500.html", gin.H{}) +} + +func IndexView(ctx *gin.Context, urlParts []string) { + smithyConfig := ctx.MustGet("config").(SmithyConfig) + repos := smithyConfig.GetRepositories() + + ctx.HTML(http.StatusOK, "index.html", gin.H{ + "Repos": repos, + "Title": smithyConfig.Title, + "Description": smithyConfig.Description, + }) +} + +func RepoIndexView(ctx *gin.Context, urlParts []string) { + repoName := urlParts[0] + smithyConfig := ctx.MustGet("config").(SmithyConfig) + + repo, exists := smithyConfig.FindRepo(repoName) + + if !exists { + Http404(ctx) + return + } + + bs, err := ListBranches(repo.Repository) + + if err != nil { + return + } + + ts, err := ListTags(repo.Repository) + if err != nil { + Http500(ctx) + return + } + + var formattedReadme string + + revision, err := repo.Repository.ResolveRevision(plumbing.Revision("master")) + + if err == nil { + commitObj, err := repo.Repository.CommitObject(*revision) + + if err == nil { + + readme, err := GetReadmeFromCommit(commitObj) + + if err != nil { + formattedReadme = "" + } else { + readmeContents, err := readme.Contents() + + if err != nil { + formattedReadme = "" + } else { + formattedReadme = FormatMarkdown(readmeContents) + } + } + } + } + + ctx.HTML(http.StatusOK, "repo-index.html", gin.H{ + "Name": repoName, + "Branches": bs, + "Tags": ts, + "Readme": template.HTML(formattedReadme), + "Repo": repo, + }) +} + +func RefsView(ctx *gin.Context, urlParts []string) { + repoName := urlParts[0] + smithyConfig := ctx.MustGet("config").(SmithyConfig) + repoPath := filepath.Join(smithyConfig.Git.Root, repoName) + + repoPathExists, err := PathExists(repoPath) + + if err != nil { + Http404(ctx) + return + } + + if !repoPathExists { + Http404(ctx) + return + } + + r, err := git.PlainOpen(repoPath) + + if err != nil { + Http500(ctx) + return + } + + bs, err := ListBranches(r) + + if err != nil { + bs = []*plumbing.Reference{} + } + + ts, err := ListTags(r) + if err != nil { + ts = []*plumbing.Reference{} + } + + ctx.HTML(http.StatusOK, "refs.html", gin.H{ + "Name": repoName, + "Branches": bs, + "Tags": ts, + }) +} + +func TreeView(ctx *gin.Context, urlParts []string) { + repoName := urlParts[0] + smithyConfig := ctx.MustGet("config").(SmithyConfig) + repoPath := filepath.Join(smithyConfig.Git.Root, repoName) + + repoPathExists, err := PathExists(repoPath) + + if err != nil { + Http404(ctx) + return + } + + if !repoPathExists { + Http404(ctx) + return + } + + r, err := git.PlainOpen(repoPath) + + if err != nil { + Http404(ctx) + return + } + + refNameString := "master" + + if len(urlParts) > 1 { + refNameString = urlParts[1] + } + + revision, err := r.ResolveRevision(plumbing.Revision(refNameString)) + + if err != nil { + Http404(ctx) + return + } + + treePath := "" + + if len(urlParts) > 2 { + treePath = urlParts[2] + } + + commitObj, err := r.CommitObject(*revision) + + if err != nil { + Http404(ctx) + return + } + + tree, err := commitObj.Tree() + + if err != nil { + Http404(ctx) + return + } + + // We're looking at the root of the project. Show a list of files. + if treePath == "" { + entries := ConvertTreeEntries(tree.Entries) + + ctx.HTML(http.StatusOK, "tree.html", gin.H{ + "RepoName": repoName, + "RefName": refNameString, + "Files": entries, + "Path": treePath, + }) + return + } + + out, err := tree.FindEntry(treePath) + + if err != nil { + Http404(ctx) + return + } + + // We found a subtree. + if !out.Mode.IsFile() { + subTree, err := tree.Tree(treePath) + if err != nil { + Http404(ctx) + return + } + entries := ConvertTreeEntries(subTree.Entries) + ctx.HTML(http.StatusOK, "tree.html", gin.H{ + "RepoName": repoName, + "RefName": refNameString, + "SubTree": out.Name, + "Path": treePath, + "Files": entries, + }) + return + } + + // Now do a regular file + + file, err := tree.File(treePath) + if err != nil { + Http404(ctx) + return + } + contents, err := file.Contents() + + syntaxHighlighted, _ := RenderSyntaxHighlighting(file) + + if err != nil { + Http404(ctx) + return + } + ctx.HTML(http.StatusOK, "blob.html", gin.H{ + "RepoName": repoName, + "RefName": refNameString, + "File": out, + "Path": treePath, + "Contents": contents, + "ContentsHighlighted": template.HTML(syntaxHighlighted), + }) +} + +func LogView(ctx *gin.Context, urlParts []string) { + repoName := urlParts[0] + smithyConfig := ctx.MustGet("config").(SmithyConfig) + repoPath := filepath.Join(smithyConfig.Git.Root, repoName) + + repoPathExists, err := PathExists(repoPath) + + if err != nil { + Http404(ctx) + return + } + + if !repoPathExists { + Http404(ctx) + return + } + + r, err := git.PlainOpen(repoPath) + + if err != nil { + Http404(ctx) + return + } + + refNameString := urlParts[1] + revision, err := r.ResolveRevision(plumbing.Revision(refNameString)) + + if err != nil { + Http404(ctx) + return + } + + var commits []Commit + cIter, err := r.Log(&git.LogOptions{From: *revision, Order: git.LogOrderCommitterTime}) + + if err != nil { + Http500(ctx) + return + } + + for i := 1; i <= PAGE_SIZE; i++ { + commit, err := cIter.Next() + + if err == io.EOF { + break + } + + lines := strings.Split(commit.Message, "\n") + + c := Commit{ + Commit: commit, + Subject: lines[0], + ShortHash: commit.Hash.String()[:8], + } + commits = append(commits, c) + } + + ctx.HTML(http.StatusOK, "log.html", gin.H{ + "Name": repoName, + "RefName": refNameString, + "Commits": commits, + }) +} + +func LogViewDefault(ctx *gin.Context, urlParts []string) { + // TODO: See if we can determine the main branch + ctx.Redirect(http.StatusPermanentRedirect, ctx.Request.RequestURI+"/master") +} + +func GetChanges(commit *object.Commit) (object.Changes, error) { + var changes object.Changes + parent, err := commit.Parent(0) + if err != nil { + return changes, err + } + + currentTree, err := commit.Tree() + + if err != nil { + return changes, err + } + + parentTree, err := parent.Tree() + + if err != nil { + return changes, err + } + + return object.DiffTree(parentTree, currentTree) + +} + +// FormatChanges spits out something similar to `git diff` +func FormatChanges(changes object.Changes) (string, error) { + var s []string + for _, change := range changes { + patch, err := change.Patch() + if err != nil { + return "", err + } + s = append(s, PatchHTML(*patch)) + } + + return strings.Join(s, "\n\n\n\n"), nil +} + +func CommitView(ctx *gin.Context, urlParts []string) { + repoName := urlParts[0] + smithyConfig := ctx.MustGet("config").(SmithyConfig) + repoPath := filepath.Join(smithyConfig.Git.Root, repoName) + + repoPathExists, err := PathExists(repoPath) + + if err != nil { + Http404(ctx) + return + } + + if !repoPathExists { + Http404(ctx) + return + } + + r, err := git.PlainOpen(repoPath) + + if err != nil { + Http404(ctx) + return + } + commitID := urlParts[1] + if commitID == "" { + Http404(ctx) + return + } + commitHash := plumbing.NewHash(commitID) + commitObj, err := r.CommitObject(commitHash) + + changes, err := GetChanges(commitObj) + + if err != nil { + Http404(ctx) + return + } + + formattedChanges, err := FormatChanges(changes) + + if err != nil { + Http404(ctx) + return + } + + ctx.HTML(http.StatusOK, "commit.html", gin.H{ + "RepoName": repoName, + "Commit": commitObj, + "Changes": template.HTML(formattedChanges), + }) +} + +func ListBranches(r *git.Repository) ([]*plumbing.Reference, error) { + it, err := r.Branches() + if err != nil { + return []*plumbing.Reference{}, err + } + + return ReferenceCollector(it) +} + +func ListTags(r *git.Repository) ([]*plumbing.Reference, error) { + it, err := r.Tags() + if err != nil { + return []*plumbing.Reference{}, err + } + + return ReferenceCollector(it) +} + +func ReferenceCollector(it storer.ReferenceIter) ([]*plumbing.Reference, error) { + var refs []*plumbing.Reference + + for { + b, err := it.Next() + + if err == io.EOF { + break + } + + if err != nil { + return refs, err + } + + refs = append(refs, b) + } + + sort.Sort(ReferenceByName(refs)) + return refs, nil +} + +// Make the config available to every request +func AddConfigMiddleware(cfg SmithyConfig) gin.HandlerFunc { + return func(c *gin.Context) { + c.Set("config", cfg) + } +} + +// PatchHTML returns an HTML representation of a patch +func PatchHTML(p object.Patch) string { + buf := bytes.NewBuffer(nil) + ue := NewUnifiedEncoder(buf, DefaultContextLines) + err := ue.Encode(p) + if err != nil { + fmt.Println("PatchHTML error") + } + return buf.String() +} + +type Route struct { + Pattern *regexp.Regexp + View func(*gin.Context, []string) +} + +func CompileRoutes() []Route { + // Label is either a repo, a ref + // A filepath is a list of labels + label := `[a-zA-Z0-9\-~]+` + + indexUrl := regexp.MustCompile(`^/$`) + repoIndexUrl := regexp.MustCompile(`^/(?P<repo>` + label + `)$`) + refsUrl := regexp.MustCompile(`^/(?P<repo>` + label + `)/refs$`) + logDefaultUrl := regexp.MustCompile(`^/(?P<repo>` + label + `)/log$`) + logUrl := regexp.MustCompile(`^/(?P<repo>` + label + `)/log/(?P<ref>` + label + `)$`) + commitUrl := regexp.MustCompile(`^/(?P<repo>` + label + `)/commit/(?P<commit>[a-z0-9]+)$`) + + treeRootUrl := regexp.MustCompile(`^/(?P<repo>` + label + `)/tree$`) + treeRootRefUrl := regexp.MustCompile(`^/(?P<repo>` + label + `)/tree/(?P<ref>` + label + `)$`) + treeRootRefPathUrl := regexp.MustCompile(`^/(?P<repo>` + label + `)/tree/(?P<ref>` + label + `)/(?P<path>.*)$`) + + return []Route{ + {Pattern: indexUrl, View: IndexView}, + {Pattern: repoIndexUrl, View: RepoIndexView}, + {Pattern: refsUrl, View: RefsView}, + {Pattern: logDefaultUrl, View: LogViewDefault}, + {Pattern: logUrl, View: LogView}, + {Pattern: commitUrl, View: CommitView}, + {Pattern: treeRootUrl, View: TreeView}, + {Pattern: treeRootRefUrl, View: TreeView}, + {Pattern: treeRootRefPathUrl, View: TreeView}, + } +} + +func InitFileSystemHandler(smithyConfig SmithyConfig) http.Handler { + var handler http.Handler + + if smithyConfig.Static.Root == "" { + fileServer, err := fs.New() + + if err != nil { + return http.NotFoundHandler() + } + + handler = http.FileServer(fileServer) + } else { + handler = http.FileServer(http.Dir(smithyConfig.Static.Root)) + } + + handler = http.StripPrefix(smithyConfig.Static.Prefix, handler) + + return handler +} + +func Dispatch(ctx *gin.Context, routes []Route, fileSystemHandler http.Handler) { + urlPath := ctx.Request.URL.String() + + smithyConfig := ctx.MustGet("config").(SmithyConfig) + + if strings.HasPrefix(urlPath, smithyConfig.Static.Prefix) { + fileSystemHandler.ServeHTTP(ctx.Writer, ctx.Request) + return + } + + for _, route := range routes { + if !route.Pattern.MatchString(urlPath) { + continue + } + + urlParts := []string{} + + for i, match := range route.Pattern.FindStringSubmatch(urlPath) { + if i != 0 { + urlParts = append(urlParts, match) + } + } + + route.View(ctx, urlParts) + return + + } + + Http404(ctx) + +} + +func loadTemplates(smithyConfig SmithyConfig) (*template.Template, error) { + + cssPath := smithyConfig.Static.Prefix + "style.css" + + funcs := template.FuncMap{ + "css": func() string { + return cssPath + }, + } + + if smithyConfig.Templates.Dir != "" { + if !strings.HasSuffix(smithyConfig.Templates.Dir, "*") { + smithyConfig.Templates.Dir += "/*" + } + templ, err := template.ParseGlob(smithyConfig.Templates.Dir) + if err != nil { + return templ, err + } + return templ.Funcs(funcs), nil + } + + t := template.New("").Funcs(funcs) + statikFS, err := fs.New() + + if err != nil { + return t, err + } + + root, err := statikFS.Open("/") + + if err != nil { + return t, err + } + + files, err := root.Readdir(0) + + if err != nil { + return t, err + } + + for _, file := range files { + if !strings.HasSuffix(file.Name(), ".html") { + continue + } + f, err := statikFS.Open("/" + file.Name()) + if err != nil { + return t, err + } + contents, err := ioutil.ReadAll(f) + if err != nil { + return t, err + } + + _, err = t.New(file.Name()).Parse(string(contents)) + if err != nil { + return t, err + } + + } + + return t, nil +} + +func StartServer(cfgFilePath string, debug bool) { + config, err := LoadConfig(cfgFilePath) + + if err != nil { + fmt.Println(err) + return + } + + if !debug { + gin.SetMode(gin.ReleaseMode) + } + + router := gin.Default() + templ, err := loadTemplates(config) + if err != nil { + fmt.Println("Failed to load templates:", err) + return + } + router.SetHTMLTemplate(templ) + router.Use(AddConfigMiddleware(config)) + + fileSystemHandler := InitFileSystemHandler(config) + + routes := CompileRoutes() + router.GET("*path", func(ctx *gin.Context) { + Dispatch(ctx, routes, fileSystemHandler) + }) + + err = router.Run(":" + fmt.Sprint(config.Port)) + + if err != nil { + fmt.Println("ERROR:", err, config.Port) + } +} diff --git a/pkg/statik/statik.go b/pkg/statik/statik.go new file mode 100644 index 0000000000000000000000000000000000000000..8e6a5ebda4564f91e1fe4c5dcf6a2e598d94024b --- /dev/null +++ b/pkg/statik/statik.go @@ -0,0 +1,14 @@ +// Code generated by statik. DO NOT EDIT. + +package statik + +import ( + "github.com/rakyll/statik/fs" +) + + +func init() { + data := "PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00 \x00404.htmlUT\x05\x00\x01\x80Cm8\xaa\xaeV(I\xcd-\xc8I,IUP\xcaHMLI-RR\xa8\xad\xe5\xe2\xb2\xc90\xb4310Q\xd0U\xf0\xcb/Qp\xcb/\xcdK\xb1\xd1\xcf0\xb4\xe3\xe2B\xd1\x92\x96\x9f_\x02\xd5\x02\x08\x00\x00\xff\xffPK\x07\x08\x8cW\x8f\xfaA\x00\x00\x00K\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00 \x00500.htmlUT\x05\x00\x01\x80Cm8\xaa\xaeV(I\xcd-\xc8I,IUP\xcaHMLI-RR\xa8\xad\xe5\xe2\xb2\xc90\xb4350P\xd0U\x08\xcdK\xad(HM.IMQ\x08N-*K-Rp-*\xca/\xb2\xd1\xcf0\xb4\xe3\xe2B1 -?\xbf\x04j\x00 \x00\x00\xff\xffPK\x07\x08-W\xce\xd1O\x00\x00\x00Y\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00 \x00blob.htmlUT\x05\x00\x01\x80Cm8\xb4\x93Ak\xe30\x10\x85\xef\xfe\x15\x83\xd8kV\xe4\x1a\x14\xc1\xb2\x97=,\xa1\xa4\xfd\x03\xe3xd\x89*\x92\x90dS0\xfe\xefEJ\xec&PJ\x0b\xed\xc5\xb6\xf4\xf9\xbd'\xe37\xd3\x04\x99\xce\xc1b&`\x9a\xb0\xa3\xc8`\x9e\x9bf\x9a\xe0W\xa4\xe0a\xb7\x87\xdfG\n\xfe\x80g\xaaD\xe8\xad\x9c\xa6\xbbM\xc1\xf5V6\x8dp8\xc2\xc9bJ{\xe6pl1\xc2\xe5\xb6\xa1\x97\x80\xae[V\xd6\xf4:C\xdb_\x1e\x98l\x00DgV\xe9\xc9[\x8b!\xd1\xf2\xfa\xb2f`\xba\xc5\xf8\x80c\xd5\x01\x88\xc1\xdegn\xdc\xca\x00\x8457tc2\x9dW\x06 \xf0\x16Z\xe3\x9e\x19\xe8Hj\xcf\xf8\xfa\xfd\xf3\xcc\xe4\x9f\xd6\x0fYp\\]\xb95\xdf\x99\xc0#\xa9\xc4\xe4\x91T\xfa\xc9\x14\xeb{&\xff\xfb\xfe\xf3\x19\x80\xa7lF\xfazT\x8eDL>E\xa2w\xc3\x04\x1fl\xfd\xed\xbc3\xa3l\x04w8\xca\x0fJW@\x1a\xda\xe2Z\xd9\xe3\xd0\x16\xef\x05ERW\x89Zk\x1aI\xed\xe0\xd2\xd3\xb7M\x11ju\x1f0\xebZ\xdbPZ\xabc\xb9\xd6\x83\x14\xf8\xd7\xbbL.\xa7\x7f\xa6\xd7\xb5\xa0\xd4\x15\xed\xf5\xa8\xcd\xdd\xc4(\xef\xf3ub^\x03\x00\x00\xff\xffPK\x07\x087j\xf4\xfc:\x01\x00\x00J\x03\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00 \x00commit.htmlUT\x05\x00\x01\x80Cm8d\xd0\xc1j\x840\x10\x06\xe0\xfb<\xc5\xe0\x03(z,!PJ\xa1\x97\xf6\xd0}\x82a\x9du\x04\xb3 Iv/!\xef\xbehD\xd4\xbd\x84\x90\xff\xcb0\xfc)ad\xe3&\x8a\x8c\x950\xf5\xec+\xcc\x19@I\xabS\xc2\xfa\x9f\x9d\xfd#\xc3\x98\xb3j\xa4\xd5\xa0\xa4\xd3Wk\xcc\x18q\xce\xbf\x96k\xfdCA\n\xe94\x80r\xfa\xf3\x11\xc5\xfa\x8f\xbd)O\xf5:\x0d\xd5{\xf4mh\x9c0g\xad\x1aW\xc6(\xe7Y\xef\xe0/\x87@C\xd9f\x8e6\x08\x88\x88g}\x89\x14\xc3fa\xc5\xe2\xe7\xb3\x1f\x9f\xe7OB\xf7\x81\x0f~Ap(\xe9fm\\Kz\x05\x00\x00\xff\xffPK\x07\x08\xcc\x1f.-\xac\x00\x00\x00=\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00 \x00footer.htmlUT\x05\x00\x01\x80Cm8\xaa\xaeVHIM\xcb\xccKUPJ\xcb\xcf/I-RR\xa8\xad\xe5RPPP\xb0\xd1O\xc9,\xb3\xe3\x021\x92\xf2S*\xed\xb8l\xf43Jrs\xec\xb8\xaa\xab\x15R\xf3R@\xca\x00\x01\x00\x00\xff\xffPK\x07\x08fO\x80\xee?\x00\x00\x00=\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00 \x00header.htmlUT\x05\x00\x01\x80Cm8tSA\x8e\x9c0\x10\xbc\xcf+:>\xc7B\xb9\xe5\x80\xe7\x92\x0fD\xda\x174v\xb3tbl\xc7n\xd8\x19\xa1\xf9{\xc4\xb0L<\xec\xe6d\x97\xa8.\xaa\xaa\xe5e\x01G=\x07\x025\x10:\xca\nn\xb7S\xfb\xc5E+\xd7D0\xc8\xe8\xcf\xa7v;\x00\x00\xda\x95\xb6]\xefp$A\xb0\x03\xe6Bb\xd4$\xbd\xfe\xae\x8e\x9f\x07\x91\xa4\xe9\xcf\xc4\xb3Q\x17=\xa1\xb6qL(\xdcyR`c\x10\nb\x14\x93!\xf7J\xf5\xb4\xb0x:\xbf\x8c,\xc3\xb5m6t\xd0\x0e8\x92Q\x8e\x8a\xcd\x9c\x84c\xa8\x14?\x18\xd9\xc83\xd3[\x8aY*\xe6\x1b;\x19\x8c\xa3\x99-\xe9;\xf8\n\x1cX\x18\xbd.\x16=\x99o\xb5\x98\xe7\xf0\x1b2y\xa3\x8a\\=\x95\x81H\x14\x0c\x99z\xa3\x96\x05l)p\xbb)h\xde+k\xfeu\xd6v\xd1]+\xa5\x803X\x8f\xa5\x18\x15p\xee0\xc3vh\xba$\x0cnG\x9e_\x07\x81\xee\xf5\xfd\xd2\xf3\x85\x9c\x96\x98*Sw9|\x16\xd3]\xc6\xe0vg\x8dzT\x89\x879\xc7\x0f\x1b6z\x8f\xa9\xd0\xfe\xeb\x1d+`\xb7\xeb\xbeLi-\x90\xdc\x8f\xad\xc0\x83\x8d\xbb\xe4\xe4\x0f^\xd6\xa8c\xd68I\xfc\x84\x0f[\xaf\xd5\x8cf\xa1\xf1\x7f\xcc:\xa8^\xd7Q\x85\xfc\x99\xe3/\xb2R>\xc4|L7\x9e?q\xdcL\xfe|z\xee\xa5q<W\xdbj\x02\xce\x15\xe5\xb9\xb6 \xc8\x81\xb2\xee\xfd\xc4N\x9dO\xcb\x02\x14\xdc\xfa\x9c\xfe\x06\x00\x00\xff\xffPK\x07\x08; S`{\x01\x00\x00e\x03\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00 \x00index.htmlUT\x05\x00\x01\x80Cm8\x8cQ\xb1N\x04!\x10\xed\xf9\x8a \xbd\xbb\xd1\xbb\x92\xa3\xb2\xd5\x18\xf5\x07\xc8\xee\xec\x81\xe1\x16\x02x\x16\x13\xfe\xdd,\x90\x88\xa7\xc5N\x053\xef=\xdec\x88 \xe1\xc5[\x95\x10\xb8F5c\xe0\x903cB\x1f$\x11\x0c\xef&Y\x84\x9c\xc5\xa8\x0f\x921\xe1K\xf7\x11\xe3\x14\x8cO\xc6\xade\xe6ee\xbc\x04\xf7\x81S\x8a\x0dM\x14\xd4zF\x18^\xd1\xbb\x983\x03\x00\x10\xb3\xb9\xc2dU\x8c'\x1e\xdc\x17\x97\xa5{;\x99\x9c\xbd\xbb\x7f\xe8\x86[\x11\x81Y`x\xc2\xa4\x867\xfby\x86&\xd9\x97\xd0G)\x14\xe8\x80\xcb\x89\x8f\x9b\xd9\x1e\xce\x8b\xfdgu\xa9\x99\x94\x14\xa3>\xca\xbf\"5fa\xfe\x93\xb5\x87\x12\x01\xda\x88\xfb\xac\xb4\x87w\xb8\xd8d\xd7\xf9VU\xe8\xd0}\xd78\x9bk\xbd\xb6\xe3\x0f\x89\xfdZ\xec\xe2\\j\x8b\xfd\x0e\x00\x00\xff\xffPK\x07\x08=.C \xde\x00\x00\x00\xf1\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00 \x00log.htmlUT\x05\x00\x01\x80Cm8\xacTM\x8b\xdb0\x10\xbd\xfbW\x0c\xa2\xd7D\xecuQ\x04KK\xe9\xa1\xeca\xd3?0\x8e\xc6\x96Z\xd9\n\xf2\xc4\xb4\x88\xfc\xf7\"\x7f\xa7\xa4\xed.l.\x91\xde\x9byO\x1a\x8d'%`j\xce\x1e\x99@XBCQ\xc0\xf5Z\x14)\xc1\x87H\xe7\x00\x8f\x07\xd8?cC\x03\xaa\xec\x83Ni\x01\x94\xb4\x0f\xba(T\x8b=\x9c<v\xddA\xb4\xd8\x97\x18a\xfc\xdb\xd1\xcf3\xb6f\xdeyW[\x86\xb2\x1e\x17B\x17\x00\xca\xb8%\xf5\x14\xbc\xc7sGs\xf8\xbc\x17\xe0\xcc,\xfc\x8c\xfd\x90\x07\xa0.\xfe\xd6s\xd7.\x1c\x80\xf2n\xc3\xee\x1cS\xb3p\x00\n\xb7\xa4w\xed\x0f\x016Ru\x10r\xb9\xf7\xf5*\xf4S\x19.\xac$.\xaa\xd2\xbb\xf7t\x90\x91\xaaN\xe8\x17\xaa\xba\xd7\xbb\x00\x9e\xd8\xf5\xf4v3\x1fj\xa1\xbf\x86\xfa\xf5Vo\xf7\xe0H$\xf4\xb7Ht\xd7E\xc9\x8b\x1f\x9e]\x1a\xd7\xebB\xc9\x16{]\x14\x91\xaaG\xc8}\xf5B\xd5\xdak\x8c\xa5\xa7\xd9u\xd8\xccO\xcf\xb9S7gc\xab\x8f\x16\x95d{\x0b~\x0cM\xe3\x18\x0c2\xfd\x95l\xa8\xeb\xb0\xbe\xc3?]\xd8\x86\xb8\xe2y\xb5\xd8*.\x83\xf9\xb5&\xa4\x04\x11\xdb\x9a`?\xcav\xf9\n\xb0\xf9)\x8e\xfa\x06\x18A\xa3\x15\xde\xab\xe3iP\xc9\xd0$\xb8\xff\x82\x9d\x1d\x9a2cG\x1b\"OH.\xb4\x92l\xee\xcb\xe7\xe8\xcf!6\xc8L\xe6S\xfe\xccs\xc6\xbf\xa2\x8f\x97\xf2;\x9d\xf8\xbfq\xd3\xb9\xc62\xad\x13\xe1\xcf\x14%\xb77O \xa85sq\x94\x9c\xca\xa8\xe4\xf0\xbez\x98;\xeb@\xaaB\xe0i \xfd\x0e\x00\x00\xff\xffPK\x07\x08tx1v\x9f\x01\x00\x00\xa9\x04\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00 \x00refs.htmlUT\x05\x00\x01\x80Cm8\xb4\x94\xcd\x8a\xdb0\x10\xc7\xef~\x8aA\xf4\x9a\x88\x90[Q\x04\xed\xb9\xe4\xd0\xe6\x05\xc6\xd6\xd8\x12U$#+\xa6 \xfc\xee\xc5\x8e\xe5Mv\xb3!\x81\xec\xc9\x9e\xcf\xbf\xe6\xa7A)A\xa4ck1\x120M\xa8(0\x18\x86\xa2H \xbe\x05j=|\xdf\xc1z\x8fG\x9a\xbcBodJ\x8bCp\xbd\x91E!\x1c\xf6PY\xec\xba\x1ds\xd8\x97\x18\xe0\xfcY\xd1\xbf\x16\x9d\xca\x965\x8d\x8eP6\xe7\x1f&\x0b\x00\xa1\xccRZyk\xb1\xed(\xa7g\x9b\x81Q\xb9\xf1\x1e\xfb\xa9\x0e@\x9c\xec\xb5\xe6\xca-1\x00a\xcdEte\"\x1d\x97\x18\x80\xc0\xcb\xa05\xee/\x03\x1d\xa8\xde1\xbe\xcc=\x0cL\xfe(\xfd)\n\x8eKWn\xcd\x1d\x05\xc0*\x9a\x9e\x9e\x16\xe2\x81\xea\x8e\xc9\xdfTw\x8f\x8b=\xafb}\xc3\xe4/\xdf|\xa5F\x0cDL\x1e\x02\xd1M\x15\xc1Ov\xbav\xaeL/\x0b\xc1\x1d\xf6\xe3\x02\xe9\xad\xfc\x19\xd0U\x9a:\xc1\xf5vtE,-e\xcd\xc9\x98O\x93\x12\x04t\x0d\xc1:\x97\x8c\xab9+\xc5\xf0v\xe4\xd1T\xcb\xba\xae\xffh\x1f\xe2\xb4\xb4Q\xbdO\x12\xf8 0\xfe\xa1\x9cI{F\xf8x\x9f\x11\xca\xadFq\xc6t\xd9I\xf0<BJ@N\x8d\xb3 >\xcd?\x83:`\xf3\x0c\xa41=\x03\xba\xc2\xf3\x00\x9c\xd7\xa0y\x05\x98\xfbX\xae^\xb1\xda\xfb8\xbfb\xff\x03\x00\x00\xff\xffPK\x07\x08\x95\xae\xa7\x13f\x01\x00\x00\xde\x04\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00 \x00repo-index.htmlUT\x05\x00\x01\x80Cm8\xb4\x92\xbfj\xc30\x10\xc6w=\xc5!\xba\xaa\xc2\x19:\x14E\xd0\xbdd\x08}\x81Kt\xb6E\xcf\x96\x91\x157`\xfc\xee%N,\x1c\x08\x85\x0e\x99\xee\xbb\xbf\x9f\x8d~\xe3\x08\x89\x9a\x8e1\x11\xc8\x9a\xd0Q\x940MB\x8c#\xbcD\xea\x02\xbco\xe1u\x87\x0d\xcdUS\x17v\x1cs\xc1\xe8\xba\xb0B\x98\x16\x0782\xf6\xfdV\xb68\x1c0\xc25(:w\xd8\xba%c_\xd5 \x0e\xd5UH+\x00\x8c\xf3y\xf5\x18\x98\xb1\xebi\x19_r \xde-\x87w8\xcc{\x00\xe6\xc4\xf7\x9e\xaa\xcd=\x00\xc3~\xd5U>Q\x03xL~\xa0<\x02`p=\xc3\xbe\xfd\x96PG*\xb7R\xe7\xdf\x9f&i?\x0e\xe1\x94\x8c\xc6|\\\xb3\xff\xc3\xe8\xdf\x0e:R\xd9K\xbb\xa7\xb2\x7f\xa6\x0b\x87J\xda\xcfP=\xd3#E\"i\xbf\"\xd1C\x17\xa3O<?\xbbv~\xb0\xc2\xe8\x16\x87\x0b@+\nb\xf8yD\x86:\xb3z\x83\x8b\xe0\xea&\x1a\xa7\x8a\xcd\xac\xfaF\x15\x9b\xdb\xc7^\xf0\xdc\x13\xba+\xb1+\xab9\x88;\xe0\xcb\x10\xd2\x0d\xf8\xdf\x00\x00\x00\xff\xffPK\x07\x08oGNk\x1b\x01\x00\x00 \x03\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00 \x00style.cssUT\x05\x00\x01\x80Cm8\xec\xfd}\x93\xeb\xb6\xb1 \x8c\xff\x9fO\xc1;\xa7N\xd9'\x16uHJ\x944\x9a\xb2\xeb&\xbe\xc9/\xa9\x9f\x9d{+\xce}v\xab\xbcg\xab(\x12\x92\x98\xc3\xb7%\xa93\x1cO\xcd~\xf6\xa7\xf0F\xe2\xa5\x01\x92\x1a\x8ds\xb3\xcf\xda\x89\x87\x02\x1b\x8dFw\xa3\xd1\x0d\x02\x8d\x8f\xbf\xfd\x97\xdf8\xbfu~_\x96m\xd3\xd6Q\xe5|Y/\xc3e\xe0|}n\xdb\xaa\xd9\x7f\xfcxB\xed\x81\xbf\\\xc6e\xfe\xf1\x03\x86\xff\xbe\xac\x9e\xea\xf4tn\x9d\xc0\xf3}7\xf0\x02\xcf\xf9\xdb\x19 x~wi\xcfe\xdd\x18\x81\x1f\xd3\xb6E\xf5\xc2\xf9s\x11/1\xd0\x0fi\x8c\x8a\x06%\xce\xa5HP\xed\xfc\xf8\xe7\xbf 4\xa4\xed\xf9r \xad\xb7\x8f\x87\xe6cO\xd0\xc7CV\x1e>\xe6QZ|\xfc\xe1\xcf\xdf\xff\xe1/?\xfd\x01S\xf7q_\x97e\xfb\xec\xba\x87\xec\x82\xf6\xef<o{8\x1e\x1f\\7-\x92\xf4T\xee\xdfm6\xbew\x0c\x1e\\\xb7\xba\xd4U\x86\xf6\xef6\xc7u\x10\xfb\xb8 ->\xef\xdf\xa1\xdd\n\xed\xe2\x07\xd7\xadQ\xb2\x7f\x97\xc4\xabp\x1d>\xb8nYG\xc5 \xed\xdf\x1d\x93-\xf2\xd7\x0f\xae\xfb\x84\xb2\xac|\xdc\xbf;\x1ec\xdf\xdb>\xb8\xee\xa9F\xa8\xd8\xbf\x0bv\xd1\x96\xd4hQ\x94\xed\xdf\x05^|\x7f\x8f_\xc7OQ\xb1\x7f\xe7o\xa3\xe0\xb0{p\xdd\xc7s\xdabt\x84\xb6S\x1d=\xed\xdfm\xe2m\xb8M\xd8O7\x89\xea\xcf\xfbw\xab\xf5*Z{\x98\xb8:\xcd\xa3\xfaI\xe8P\x83\xe2\xb2HHY_\xb3\xb9\xc41j\x1a\x81\x8a\xb48\x96b\xb3Q]\xa4\xc5I ;\xc1\xfd\xaa\x85\x9efXX\xfbw\xc7\xdd\xf1\xfe\x18\x11\x00\x89\x90C\x8d\xa2\xcfU\x99\x16\xad\xdb5{\xa5\xa4\xc9\xf7\xe1vSuri\x9e\xec\xb7\x9b\x9dZ\x9a\x9d\xf6\xf7\xf7\x81Z\xdae{?\xf0<R|,\x8b\xd6=Fy\x9a=\xb9MT4n\x83\xea\xf4\xb8w\xa3\xaa\xca\x90\xdb<5-\xca\x17\xbf\xcf\xd2\xe2\xf3\x8fQ\xfc\x13\xf9\xf9\xc7\xb2h\x17w?\xa1S\x89\x9c\xff\xfc\xf3\xdd\xe2\xaf\xe5\xa1l\xcb\xc5\xdd\x9fP\xf6\x05\xb5i\x1c9\x7fA\x17t\xb7\xf8]\x9dF\xd9\xe2\xee/e[:?EEs\xb7\x18\x1aX\xdc\xfd\x0e7\xe0|_fe\xed\xfc!/\xff\x9e\xde\x0d8\xf5\x82\x9f\x9e\xf2C\x99\xdd1lb-\xa5\x0fyY\x94M\x15\xc5h\xff\xd3\x1f\x7f,\x8b\xd2\xfd+:]\xb2\xa8^\xfc\x88\x8a\xac\\\xfcX\x16Q\\.\xbe/\x8b\xa6\xcc\xa2fq\xf7Cz@u\xd4\xa6e\xe1`\xf0\xbb\xc5\xdd\xf7\xe5\xa5NQ\xed\xfc\x05=\xde-zt/\xbf]\xec\xf7\xd1\x11\x8f\xa8\xfd\xfe\x80\x8ee\x8d\x9e\x0fe\xe76\xe9/X\xd6\x87\xb2NP\xed\x1e\xca\xee\xe5\xdc\xe6\xd9\xb3@\xd2~\xe8\xf5C\x96\x16\xc8=#\"}\x7f\xe9\x87\x0f\xee#:|N[\xb7E]\x8bq!7J\xfe~i\xda\xbd\xefy\xef\x87\xb7Q\xe5\x9e\xd3\xd3\x99\xa8\x8d\x1b\xe3\xde\xef\xdb:*\x9a*\xaaQ\xd1\xbeDu\x9b\xc6\x19ZDM\x9a\xa0\xc51=\xc5Q\x85\xbb\x84\x1f/5Z\x1c\xcb\x12\x13~FQ\x82\xff\x9c\xea\xf2R-\xf0\xa0^\x14\xd1\x97E\x83b\x0c\xfc\x9c\xa4M\x95EO\xfbCV\xc6\x9f_\x0ee\xf2\xf4\x9cG\xf5)-\xf6\xde\x83\xd8\x9f\x7f\"\xdd dc\xb6\xee\xfd\x1a\xe5\xf4\xe7#e\xff\xda\xf3\x14q\x84\x0f\x94\xb3\xef\x02?\x08\x83\xfb\x07\"\x93(KO\xc5>C\xc7\xf6\xe1\x10\xc5\x9f1\xeb\x8a\x84\x89\x00[\x96\x97\x9f\xdb\xe8\x90\x16 \xea\xbe\xbds\xfd\xbbO\xfbc\x19_\x9a}Q\xb6_\xd3G\xf7K\xda\xa4\x87\x0c}x./-np\xef\xfdK\x9aWe\xddFE\xfbr\xaeE-\x8a\xcb\xa2EE\x8b\xd5\xe8\x81\x91\xe5=\x94_P}\xc4f\x90!z9\xfb\x8bs\xb08\xaf\x16\xe7\xf5\xe2\x1c.\xce\x1b&&\xb7-\xab\xbd\xf7\xc0~\x1c\xca\xb6-\xf3\xfd2\xacQ\xfeR\xd9@0k^\xa2\xc3\xa1\xfe9\x89\xda\xc8-\xeb\xf4\x94\x16Q\xe6\xb6i\x9b\xa1O\x0b\xf2\x86>?\x13\x96$(.\xe9\x90\xd9\x93\xa9\x04wJVd\x08\xc2I\xca\xb6E\xc9\xc3(@|\xa9\x9b\xb2\xde\x9fQV=\xf4\xc3\x8a\x10\xea\x99Zq\x9b\xcfi\xe5\xe2\xa9\xa5(\x0b\xa46!\xbf}\x89\x92\xa4FM\xf3\xac3\x81\xa9K\xfb\x94\xa1}Q\xd6y\x94I\x1a\x92\x16gT\xa7\xedK\x92-\xcalq\xc9FyZfN\x89a\x9d\x0b\x06wH%g\xa8\xc7{\xf5\x92\xb4\xcf\xa2fn=\xef%I\x9e\x019\xf2F\xb0:\xee\xbd\x172P\xff\xd7\xa5lQ?P\x1d\xcf!M\x1f\x16M[\x97\xc5IB|(\xb3\x04\xd5/M\x1ee\xccB\x91\xa1\xb1\xf3\xde\xbf4\x97\xc3\xa2\xb9T\xcfU\xd9\xa4D,5\xca\xa26\xfd\x82\x84!\xb4\x0d\xdfK\xfc\xf0\x1e\xbe lx\xa2\x8c\x8d\x92C\xd4 \x0c\x80\xb1=3\xba\xdde\x10\xa2\xfc\x05\xe3\xc6|r\x97\xf8W\xf4\xcc\x06\x10\x9bhU\x9d R\xd4\x86\x9bd\xf1\xf6g<.\x06<\xe1\xe6\xb02\xeb\xd6KDF\xe4\xcf\xe7\x1a\x1d?}\xa0\xcfq\x165\xcd\xa7\x0f\x0c\x05\x13.H\x8a\xa5\xb6D\x86\x15G\\&h\xf1\xf9\x90,\xaa\x1a-\x9a(\xaf\xa49\xe2\xb6\x93\x95h\xf7\xf0\xe8\xaf\xd1\x98\xae\x0eV&\xba\xb4\xe5\x83\x9b7./a\x03\xa2\x89\xeb2\xcb\x0eQ\xfdB'\x15M\xe5\xd2\xfc\xf4\xac(D\x9e&I\x86\xf8(\xe6\x03\x0b+\xc8\x97\xd3s\xdf\xe29M\x12T\xa8\xcaD\xeb\xbe\xb4\xd1!\xc33-\xc1\x10\x97Y\x16U\x0d\xda\xf3\x87\x176\xd1=WQ\x92\xa4\xc5\x89\xf4o\xb9%c\x85\x17\xf1\x01DK\x99\xc20oN5\xf1\x0c\x9d\x8b\xe7\xd1=\xad\xf8\xd2\x9e\x9f\x050n\x04\xb2\xe8\x80\xb2~\xcaL\x0b20\xc8\x80\x04\x0d\xf0\xe1\xd2\xb6e\xc1\xfbQGIzi\xf0\x08&\xc5t\xa2\xe8\xe7\x07\xbf\xea\xb8-\xe4Ea\xd59X0\x0e7\x80tj\xa9q\xffH\x8f\x18\xa6EZT\x97vQV-\x9d\xe3\x1b\x94\xa1\xb8]`\xfa\xa3\x1aE\xf0|\xce\xd5vP\x1a^\x02Y?\xb1\xa1gmnboi\xbb\x94od\xd8\x1e\xcb:\xa7\xa2\xff\xb9.3\xf4-\x85\xfb\xf4\xcc\x8c=\xf1K\xb1i\xa2\xf5\x1e\xcb:q\x1f\xeb\xa8bf\xf8\xe5\xe7\xf6\xa9\xea+-\xe8\xaf\x1a5\xa8\xe5?\x9a\xcb!O\xdbO\x0b\xc6g\xce\xa6\xa8\xaaPTGE\x8c\xf6\xf4\x8d\x8c\x89N\xd3I\xda`%K>H\x88\xe1w\xac\x1d\xf5%\x93\xa3\\\xaavNnz\xef\xe6\xe5/L\x8eiQ\xa0Zn\xdd\xf4\x9a\x13\xa0\xbfg4h/\xf8\xd8\xd8{\xc0@$b\xa4\x98\xe33\x8a?\x1f\xca\xee\xd3B(\xc4\x9aZ~\x82=\xdd\x87\x1e\xf1K\xaf`\xb2\x19\xa9\x11Q'>\xb2_\x8e)\xca\x92\x06\xb5\xcfyZ\xb8\x8fi\xd2\x9e\xf7\xde\x80\xe5\xa1\xd7N\xda\xc6\xde{\xc9\xd0 \x15\x89\xec\x99>\xd0\x8a\xc4A\xce\xa3\xce\x15~\xaa\xa8\xe4\xc9S0\x8a\xb4\x00P\xef\x07\xd9\x92\x93\x08\xd2\xa5\xf1\x04S\xc5\xaa.O\xc4\x7f0M~\x94q\xc5%?\xa0\x1a\xcb\x89\xa9\"\x91\x85\xdbT\x98*:H\x0c\x80\xe5\xa5\x95\x01\x9f\x19\x89\x98\xa5\x0c{\x83\xa2:>\x7f\xe2&\xc3-\x8f\xc7\x06\xb5{\x97\x84z\xba\xee\xd3\x81'\xd6\x1c\x9a\xa3\x05\xc2t\x05\x0d\x1e\x82`\xa8sL3\xe4^\xaa\xac\x8c\x12N#fn\xcf6\xf3\xf0+/-\xb6\x1b\x90\xdd|i.9\x0e\xbf\xfb\x97Y\xda\xb4n\xdab\xa3-\x0f\xa4\x16\xe5U\x16\xb5\xa8\x87\xa4\xfd\xa3\xf3\xc8'\xa9Tp\xb5\x97g\x7f\xb1<\x07\x8b\xe5y\xb5X\x9e\xd7\x8b\xe59\\,\xcf\x9b\x85\xd1\x9d\xd6\x95\x87\xf9Q\xa1\x16:\x04\x04\xfb\xd9\x17\xbc\xaa\x80\x1a~\xdc\xe29\x10\xcbi\xe9jq^=\x8b\x1a\xb9e\xe0\xeb\xc5y\xfd\xac\xaa\xea\x0b&\xf6\x1cJ\xe5\x01{\xb1\xc1$\xcb\x81\xce\xcb2CQ\xa2CK\xbdXy\xde\xcb\x92\xf1\xca\x15)\xdf\x00\x90z\x7fyM\xb1o\xa1\xce+k]\x91\x03\xeb\x99uE&\xad\xa6\xd5=\xd7\xa2\x1b\xe4\x0b\x0e\xb5\xe8 q\xe3\xc3\xad%\x81\xad:\xa7)\xb34q\xea\xd3!\xfa\xda[\xe0\x7f\x97\xfe\x87\x97%q\xa6\x17\x80K\xad\x06\x9b/\xcb<\xaa?/\xf0\x7fz\x8b\xbc\x0cp{zX\x19\x1fwh\xf5\xb2$\x03\xe0R\x10s\x9d\xf4.\x0eu\xfe\x1f\xc8K\xc1\x92Sh:\xa0\xe6\xc0\x92\x11\x06\x0fH\x0d\x8cNpY\xd4\xb4n|N\xb3\xe4\x03\xe7'Y|d\xae\xce2-\xd26\x8d\xb2\xb4\xc9\x05\x8e\xdc{\xef\x1f\x14w\xe0RU\xa8\x8e\xa3\x06\xbd,\xb5H\x06\x08\xcb$\xad\x1f*\xb8tqC\x99#dQHN\x1fP\xb9_\xd1a\x01\xf8\xfe\xee\x7f\x04\x9e\xbf\xfe\x1f\x9e\xf7;\xef\xeee\x99\xe6'\xf7\x98]R\x1c\x93I\xf3\x8dh\x98 T{\xbe\xe4\x87\"J3A\xc4D5\xc1\xb5\x03\xaej\x83v\xbdK\x10\n\xd0\xe6A\xf6\x13\x19\x0e[\xe3\xcc'\x87\xc5H_\xba\xd8A\x87L\x9b4Lzh\xeeY\xcb\"\x949\x89c\x1aQ\xeb\xb7\xcb\xb0\x07ak\xbc\x83+G\x16 ]\xfc\xfb%\xfa\x8e\xd4\x94\xe6\xda\x97\xcf\x87D\xe0Z\x8drg\xb9\x96\xa5/\xe1'\xfc\xd3\xb8\xca\x96nT\xfea\x9d\xf9|H\x1c\xb1\x0dO\xd4+O\x19\xb08\x06\xaf\x04\x86jZ%\x92B\x1b\xc5\xf0\x8e\xc2\x11\x83W\x81yB\xd8\xc1\x9d\x8aeU#\x97FX$\xde\xc1\xa2f\x12Y\xad\xbd\xaa\xeb\xc33\xf7\x89\x05b/K\xac\xabQ\x8a=\xbf\xe1\x91\xaa\xa9X\x90\x9d\xc4_\xb9\xf4\xae\xc9\xc5_]\xf6\xac\xbbRld\xfba\xd5\xbb{\xd4\xa8\x90\x12i\xf4\x13\x8fO\\\xa0 \x9a\xf9\xaf9J\xd2\xc8\xf9z\xf0\xf8\xc8\xe2\xf5\x87g\x98\xfe&\x17\xc6X\x88\xbb\xfe\x02\xa0 +\xdd&\x14j\x1f\x05\x84\xdb\xc0\x80\x90,\x92\x9b\x10\xdaY(\xa0\xbf\xdf\x18\xd0\xd3\xd5\xf6\xeb\xf0+\"\x12\x8c\x80O\xd9\xb3\xac\xcb\xc7^Oq\xe0~\xccP\x87\xdds^\x86\x7f?\xf0\x17t,\xe2\xff<(?%a\xba\xa2|\x894I\xc9\xcb\xb2(\xdd\xd3\xa5mQ\xdd\xc8\xb6\xdfS\xd6\xa6\x04\xc0\xef\x96q\x99-\xc4\x02\xbaz\xf2\xdbo\xe32s?=\xcb\xaa\xe6\xc9z\xe6\xbd\xd0\xda\x18\xd4g\x7f<\xf6\x97\xff\x0e\xe8_\xf6gE\xff\xac\xe9\x9f\x90\xfe\xd9\xd0?[\xfagG\xff\xdc\xd3?XO\xe9\x13\x95\x04\xfe\xcb\xdb\xc2O\xde\xf0(\x94\x06\xfd\xe3\xf0\xb4\xea\x9f\xd6\xfdS\xd8?m\xfa\xa7m\xff\xb4\xeb\x9f\xee\xfb\xa7\x81\x1e\xaa\x0b\xf8/\xa7\x07?y\xc3\xa3P\x1a\xf4\x8f\xc3\xd3\xaa\x7fZ\xf7Oa\xff\xb4\xe9\x9f\xb6\xfd\xd3\xae\x7f\xba\xef\x9f\x06z\xa86\xe2\xbf\x9c\x1e\xfc\xe4\x0d\x8fBi\xd0?\x0eO\xab\xfei\xdd?\x85\xfd\xd3\xa6\x7f\xda\xf6O\xbb\xfe\xe9\xbe\x7f\x1a\xe8\xe92\xfe\x97\xd3\xd3\x0d\xea\xd1\x0d\x1a\xd2\x0dJ\xd2\xf5z\xd2\xf5\xaa\xd2\xf5\xda\xd2\xf5\n\xd3\xf5:\xd3\xf5j\xd3\xf5\x9a\xd3\xf5\xca\xd3Q\xfd\x01\x16Ng\x1aS\xa2\xe7\xcf\xfd0\xadjtDu\x8d\x12:\x91xt\xb4\x1e\xa2&%\x1f\x04{0\xd2\xec\x17\xb4\xf7)\xc0\xa9.\x1f\xf7\xbe\xe2*\x10\x13\x81g\xc8\xc6\xf5\xbf\xfbm\xdf\x06]\xba#3\x9f\xf4\xcbX9P+\x87b\xddP\xaa\x1aJ5Wj\xcd\xd5j\xb9\"\xff\x08\x08\x84\xb2\x01\xcfP(\xa0[\xab\xe8\x82P\xc0\x83\x7f\x0c\x08\x82P\xac\x19j5\xc5.\x04R\x17\x02\xa9\x0b\x1b\x8ds\x9b\xe5\x06\xff\xb3\x15\xf97\x94 \\\xec\x0b\x89\x8c\xa9\xbeH\xa8\xc8\xd4)\xff\xa2U\xd9\x9c*\xcb\x03\xe3\xf0e\x04;\x9d\x9b;\x80\x99\xbb\x81\x97\x18Ip\xa3\x0e\xad\xe6 \x03WY\xdf@\x1d0\x9eP\xc6\xb3\xf6\xf5.\x08e\x03\x9e\xa1\x90\xe2\xd9\xccSl\\e\xabT\x01d\x10BB\x08\x15)\xecd<\x1b@\n\x1bH\n\x1bE\n\xf72\x9e\xad(\x85\xad$\x85-\x97\x82\xef)j\x04\x88a\x07\x89a\xa7\x88\xc1W\xf4\xf1\x1e\x90\xc3=$\x87{E\x0e\xbe\xaa\x93\xe3\xe6\x89\xba\xfa\xc7\xb4n\xda\xc1|\xd2\xc0\xca\xf5\x1f\xf8\x03\x87\xc3\xc1\xab\n\xe6\xaf\x1e\xf8\x03\x07\xf3T\x18\xef\x81\xafI2\x08_\xc3\xc2\x91p\x88@\x85\x08\x18D\xc0!V*\x04'\xa4\xa7c\xadB\xac\x19\xc4\x9aC\x84*D\xc8 B\x0e\xb1Q!6\x0cb\xc3!\xb6*\xc4\x96Al9\xc4N\x85\xd81\x88\x1d\x87\xb8W!\xee\x19\xc4}\xcf1\x8d\xa9>\xe7\xaa?\xb0U\xe7k\xcf\xd8\x9e\xb3\xbe\xc6Z\x9f\xf3\xd6\xc7\xcc%\xab\xa1\xae\xff,\xba\xa4\xc2\xa8c\xef\x03\xe9\xbdh\xd4\x18\xc0J\x02 \xb6\x8b\xbdYKoD\xa3\xc4\x00B @\xb46\x0c`#\x01\x10\xa3\xc2\xdel\xe57:\xdd; `\xa3\xd3}/\x01l\x05\xba}O\xe6\x89N\xb8/sM\x18\x9f\xb6H\x0e\xfbe\x83H\xde\xc8w\xc1^\xe5k\xdc\x17\xec\x8a^\xed\xc1`\xef\xf5\xb6N\x0c\xf6\x82\xaf\xf6c\xb0\xe3|\xb5+\x83}\xed\x9by3\xcc!\x97\xb1\xcdwh\xb0p\x95\xc9\xe8*\x9f\x06\x0b\xf9v=\xbb\xc2\xb3\xc1b\xbd\x81\x9a0T\xb7\xf2o\xb0\xc8\xe7i>\xabu+/\x07\xc7r2\xaa\xab\x1d\x1d\x1c\x0c\xca\xa8\xa6\xf8:$RU4\xecZw\x87\x84\xba2\xae\xab=\x1e\x12+\xcf6jt\x1el\xf2\xc9~O\x93Ou}\x9a|\x82\xf7#\x0dW\x93\x03$\x8dE\x93\x0f$\x8d2\x93\x1b$\x0d*\x93'$\x0d\x17\x933$\x0d\x04\x93?$\xe9\xbd\xc9%\x924\xda\xe4\x15I\xbajr\x8cd\xd54\xfbF\xb2\xda\x99\xdd#Y\xa5,\x1e\x12\x11\xb5\xb2n7\xbc\x1a\xf3\x9f\x88xG\\(\"]\x93\x17E\xa4:\xe2H\x11\xa1\x8e\xf8RD\xa6&w\x8a\xc8r\xc4\xa3\"\xa2\x1cq\xaa\x88$M~\x15\x95\xe0\x88kE\xc5g\xf0\xae\xac\xab\xdc\x99\x9b'\x83<\xdf\xc8\xbd\xca\x93\xd7\xb9Wy\xf2\n\xf7*On\xed^\xe5\xc9+\xdc\xab<y\x85{\x95'7t\xaf\xd8\xfa\xab\x8cm\xbe{\x85\x85\xabL~W\xb9WX\xc8\xb7\xeb\xd9\x15\xee\x15\x16\xeb\x0d\xd4\x84\xa1\xba\x95{\x85E>O\xf3Y\xad[\xb9Wyr3\xf7*O\xaeq\xaf\xc8\x87 E\xc3\xaeu\xaf\xc8\x97\x0d\x19\xd7\xd5\xee\x15\xf942\xdb\xa8\xd1y4O&\xbbWy2\xd5\xbd\xca\x93 \xee\x954\\M\xee\x954\x16M\xee\x954\xcaL\xee\x954\xa8L\xee\x954\\L\xee\x954\x10L\xee\x95\xa4\xf7&\xf7J\xd2h\x93{%\xe9\xaa\xc9\xbd\x92U\xd3\xec^\xc9jgv\xafd\x95\xb2\xb8WD\xd4\xb0{E\x04lw\xaf\x88xG\xdc+\"]\x93{E\xa4:\xe2^\x11\xa1\x8e\xb8WD\xa6&\xf7\x8a\xc8r\xc4\xbd\"\xa2\x1cq\xaf\x88$M\xee\x15\x95\xe0\x88{E\xc57\xdd\xbd\x1a\xbe\xf9gnv\x1a\xe4\xf9F\xeeUvz\x9d{\x95\x9d^\xe1^e\xa7[\xbbW\xd9\xe9\x15\xeeUvz\x85{\x95\x9dn\xe8^\xb1\xcf\xed2\xb6\xf9\xee\x15\x16\xae2\xf9]\xe5^a!\xdf\xaegW\xb8WX\xac7P\x13\x86\xeaV\xee\x15\x16\xf9<\xcdg\xb5n\xe5^e\xa7\x9b\xb9W\xd9\xe9\x1a\xf7\x8a\xecCQ4\xecZ\xf7\x8ald\x91q]\xed^\x91\x9d0\xb3\x8d\x1a\x9dG\xb3\xd3d\xf7*;Mu\xaf\xb2\xd3\x04\xf7J\x1a\xae&\xf7J\x1a\x8b&\xf7J\x1ae&\xf7J\x1aT&\xf7J\x1a.&\xf7J\x1a\x08&\xf7J\xd2{\x93{%i\xb4\xc9\xbd\x92t\xd5\xe4^\xc9\xaaiv\xafd\xb53\xbbW\xb2JY\xdc+\"j\xd8\xbd\"\x02\xb6\xbbWD\xbc#\xee\x15\x91\xae\xc9\xbd\"R\x1dq\xaf\x88PG\xdc+\"S\x93{Ed9\xe2^\x11Q\x8e\xb8WD\x92&\xf7\x8aJp\xc4\xbd\xa2\xe2\x9b\xee^ {\x1e3\xb7{\xfb\x9dM]\xf6:\xff\xaa\xcb^\xe1_u\xd9\xad\xfd\xab.{\x85\x7f\xd5e\xaf\xf0\xaf\xba\xec\x86\xfeUw\x9b\xedN\xdd\x8dv<u\xb7\xdb\xf4\xd4]\xb5\xef\xa9\xbb\xdd\xd6\xa7\xeev\xbb\x9f\xba\xab6@u\xb7\xdb\x03\xd5\xddn\x1bTw\xd5N\xa8\xee\x86\x9b\xa1\xba\x1b\xee\x87\xea^\xb1%\xaa\xcb&\xfbW]6\xd5\xbf\xea\xb2 \xfe\x954\\M\xfe\x954\x16M\xfe\x954\xcaL\xfe\x954\xa8L\xfe\x954\\L\xfe\x954\x10L\xfe\x95\xa4\xf7&\xffJ\xd2h\x93\x7f%\xe9\xaa\xc9\xbf\x92U\xd3\xec_\xc9jg\xf6\xafd\x95\xb2\xf8WD\xd4\xb0\x7fE\x04l\xf7\xaf\x88xG\xfc+\"]\x93\x7fE\xa4:\xe2_\x11\xa1\x8e\xf8WD\xa6&\xff\x8a\xc8r\xc4\xbf\"\xa2\x1c\xf1\xaf\x88$M\xfe\x15\x95\xe0\x88\x7fE\xc5g\xf2\xaf\x964\x0f\xc20\xc8\xa1\x93\x8b\xf2q$Z\xc5i\x93\x05\x7f:\x0f\xe7\xabh2\x04\xe5\x08s[V\xf0\xa1Gv,\xadGyFQ\x82\xd1\xa9G\xa0 -J\xd2\x96\xc0\x88\xe5P&O\xdf\x90\xff>\x0b\xad\x9a\xe0\xdd&\x1f\xfaB~\x08\xddY\x91C\x81\xf4\x15\xc5\x85\x92g\xd3\xe9:\x15P@;\x14\x9dgT\xa7\xec\x80\x900>I\x1c\xe1.A\xd5\xc9\x982\xd44\"S\x16\xc0\xdb\x04*<\x83\x85R\xd3x\xe82\xc6\xb5uZa\xdap\x13N[\xef\x8b\xf6\xec\x96G\xb7}\xaa\xd0\xd7e\x92|x\xd6\x0e\xd5\x89G^\xbd\xf0\x03\xc7D2\x9f\x0cx\xa4|,\xfc\x18\x9e\x15\xd5v\xc0\xc52\xaf-\xe4\x9f\xdf\x0d\xfd\xedK\xce:}\xef\x0e\xbb$:\x1e\x15\\\x10+\xfbW*^\x81\x89C\x89,<\xd6\xd66:\x08mQ\x1e\xc85\x19't2\xef\x8fq2\xa5\xaa\xd0m\x1b\x10\xc4 \xb9\x89>{\xddB-\x10\x9a\x10\xca \x8c\xc9&\xd9%\x07\x0d#\xc4]\xe1\xa5\x8e]\xe0\xb0X\x06\xf2\xf8\xb0:l\x0f\x07\x90QCB>\x13\x97\xe3]|\x88a.+\x95M|\xd6\xc0 \xbe\xc8\xcd\xb0\x9c\x80\x0b\xf9\xa7\xc8e^\x02\xe2Z\xa1M|Pp\x81\x1c\xe6\xafT\xbc\"w\xfb\x12\x90\xb7\xbbc\xe2\xdf#\x98=,\xb1\xa1\x89\xb3\x07?9\x9a\xc4\"V5\xf2U\x06\x02G\xb2\xd4DZ\x1c\xcb\x85\xf0, \xa6?A\x14\x08\x85HB\x01q\x92\x96'\xf2\xcf\xb3\xf2\x13f\xe0&>&\x11\xc8\x05\x92\x07\xd2\xc4\xbd\xe8\x90$(\x1c\xa9gb\x9d\x08\x01uZF\xce\x12P.\xe4\x9f\x02\xee\xbe\x04\xc2u<\"t\x88\x14\\\x10\x0f\xfbW*^\x81\x93C \xc8\xcc\xe319nam\xe4Y4M\xfc<\x1e\xd1.\xf2\xc7\xab\x9aX\xaa\x00\x198!4A\x93x.\xa4_\x02r^\x00\"\nca\x80SH\x88\xa3\xfcM\xa2\x16\x9c\xb5\x02\x90\x9d(\xb9\xdf\x18\x067KAj\xe4\xa6\x7f\xf0\x0e\xdb\xd1\x9a&f\xca0 \x0b\xa4\x06H\"\xcb\x85\xf8C\xc0\xcc~\x83X\x92crD\x12\x16\x88\x8f\xecE\xa2\xfc>\xab\xbfa\x9d<\x1c\xe3c\x0c\xb2\x82\xa6m5\xf1\x10\xc5(>n\xc6*\x9aX(\x81@}\x97\xd1'Q\xfdy!<K\x9a\x88\x7f\x82\x13\xcd&\xde\xc5\x91\x88\x02\xd6B\\\x9e\xc8?\xcf\xcaO\x90u\xf7\xe1\xfd\xfd=\xcc:\x92\xe1\xd68\xb3\xdc\x1f\x0e\x07\x93\xde\xf2zf\xdd\x1b \xc0 AB\x1e\xc5m\xfa\x05-\xa4_\x02f^\x00 2\xf9\xae\x121\xb4\xbe\xa9\xa3\xb3Q\x98\xfa,\xc3L'\xd6Y\x12\xc9q!>\xf7\x86\x0e\xca\xa5\xc1\xd2\x11\xcb\"^\x87\xeb$\x0c\x15t|<q|\xeb\xfb\xd0\x0b\xb7\x00Jt\x8fbtTP\xcaa\x15&m\n]/\xaf\xd6V\xa9+\x04\x92=\xaa\x11\xa4\x07\xc0\\\x1bG\x05a\xb8\xe0\xff\x17\xa3)\x015\x954\x1cX\x81\x1c\x01\x10c\x91\xf7\xdfd\x86e\xd7m\xb8\xbc\xa7\x9b\x8aiS5j\xaa\xb2h\xd2/8\xa26\xa7Y+y\xf6\x91\x8e\xa5\x87\xe4\xa9\xca\xfa\x14\x91$' \x9eN\xdb\xf2\x12\x9f_ \xf4\xdf\x19\xb9\x0bP\xba\xddl\x8d\x94\xe6\x96\x84p7\xa04OfQz\x7f\xef\x1b)\xcdNoJiv\x9aE\xa9\xef\xdf\xdf\x1bI\xed\xb27%\xb5\xcb,\xa4j\xe0oI\x8a\x99\x8e\xe5\xb1\xacs7.\x8b\xb6.-\xdc`yy\xe2(\x8b\xbf\xf6\x97!\xca\x9do\x1c\xba\x9e\xe6|\xe3\x04U\xf7\xe1aX\x96\xa2\xc5l\xb5M\xce\xd165\x19\xb5\xd1\x96\xaa\xa6 K\xab\xfd\x90\xf3\xb4\x03\x92K\xc5(Y'\x11\x9c\\\x8a\xa4\xe5\xa2\x19,D+\xe9,\xfd\xb0qP\xd4\xe0\x18\xc4-/\xed\x82\xa4\x82<GI\xf9\xa8\xbd\xebu\x8e~\xe2m\xdc\x1a%\x97\x18%n^\xb2\xd4\x18\xf8\xe7\x87g\x99\xd1B\xcb$9\x99,\x87=Ii\x83\xba**\x12\xdd\xa4\n)\x81\x1f`9\n\xe90\xeb\xb48=\xeb\xf5h\xeau\xd2#\xf2E\xc5s\x18\xcf\x15D4I\xeb$\xa9\xc8\x01\xa3wH\x8e\xc7>\x95+\x9eP;\xb9=\x9a\xed\x8aM\xd9~\xb0\xa26<\xc0\x93\x83\xc2\x8a>\x97dui\xdd*\x8bbt&9\x9d9Y,\xadmYEq\xda>\x91l^\n/\xcb_\xae\xa8\x87E\xf0\x8a6_Qy~\x15\x9e~u!\x15\xff\\\xa3()\x8b\xec\xe9\x13\xe4YS\xafd\xc0($@M\xa2\x16}\x92P-\x94\xb7m\x9a#7+\xe3(3\xc3\xe5e\xd1\x9e\xcd\xaf1\n\xf9\xad) \xe7\x03\x91\xa0Z\xa8f\xea\xa4it\x01\xf5\xa5\xd2\xf8\x12e\x174E\x93e\xd6\x92\xb4\x9f2[]rc\x87\xd1V\xd2o\x98\xa4\x02\xcd\x97,\xa6i&\x06\x94\x9b\xc8o\x1c_\xb0\x9c\xfc\xdb\x01\x04\"\x7f\xf7\xf0F\xb2\x16\xfb\xcbP%\x02\xcf\xca:\x1d\xa3T\x88\x00zb\xcd\xb16\x9b\x1ch3\x18m4\x80[]\xee\xb6p\xab\x92l\xaa,J\x0bl\xdd\xccs\x99:S\xa9\x89s=u\xd22LR\xa6\xf5~\xc0>\xd3\xb9H\x7f\xc1\x9d\x94\xaas<SG\xe4\xe2\xec\xb4\x98\x04'\xf0\xde\x94bL\x85\x07\xe7xp\x8a\xa7\x12R\x13\x0c\x1b\x04\x04\xe6%T;\x056\xeeCm\x93\xa6\xe1\x0c\x99c-\x93\x0ff\x80\x99\xf89\xbfdmZe\xe8\xd3\x02z\x8b\x9b\xf8$\xe5#\xe6\x99\x9fe\xeb%\xe7\xa6\xc4o\xb0Z\xf4\xb7P\x88\x97$\xd0\xd7\x80\x9a2X\x92\xd1\x9de\xfd$\xa0o\x92\xeeN\xcbvG2r\xf1\xf6X\x06\xbb\xfe\xa7-\x7f\x9d\x96\xdck\xc0D2l\x03\x99\xc2\xe4~\xcb\x99\xc1\xa4\xae\x13\x04t2\x1d\xd0D\x87\xa6\xcc.-\x92\x18\xb6Ro\x8bp\x8d\x98\xfa\x19\xf3\x7f\x8b\xaf\x88\xd9Zh\xc0?s\xe0O:\xb4<A\xbf\xe8\xef\x15\xdb\xa2\x90B\x12\xd7\x8a\x82eILU\xf9\n\xc5\x83\x98\xe9\x07\xe8\x18\x15-\xaa\x1f\xc8\x0f\x92\xb0\xb6\xe1EJB\\I\xf8<\xf5\xb2F\x8dc\xe1z\xd3Fm\x1a\x8b<W\xb1\xae|\x9e\xb6U\xdaA\xf1%\xca\xd2\xc4=\"\x94`k)%\xab~\xd0?\xef\x0f\xda\x0f\xa7\xb4\xa5wPq\xacmY\xe2\xd1\x0b\xe8\x06\xf9\x9e\x8f\xf12\x06\xfc\xe2\x92;k\xf6\xe1\x83D\x80\xbc\x91\x08\xb6r\"e\xfe4\xb37\xbax\xb1\xf6\x16\xfef\xbb\xd8\xdc/\x96\xf7\x1f\xc0\x00\xe5e\x99\x12\xc7%M\xfe\xb7\xc2\xc2\x85\xf6\x86\xb1a\xb1|\x8c\xd8\x9b\xa8E\x89\xb37T\xb7Aq\x8eJCT6\xd9}\xf3*&\xd9\xff\"\xe5\xca\n\x14\xbbAL6 @`\xf9Ad[\x9aG'\xb4\xbf\xd4\xd9\xd7wI\xd4F{\xf2\xfbc\xf3\xe5\xf4M\x97g\x8b\xf7\xab\xb8\xf9rr\xba<+\x9ao\xbf:\xb7m\xb5\xff\xf8\xf1\xf1\xf1q\xf9\xb8Z\x96\xf5\xe9c\xe0y\x1e\x06\xfe\xca!r\xfe\xf6\xab\xddW\x0e\x95\x14y\xfc\x92\xa2\xc7\xdf\x97\xdd\xb7_\x91\xddn\xce\xee\xab\xf7+\xf4~\x15WQ{v\x8ei\x96}\xfb\xd5\xfb`E\xc9\xfe\xcaI\xbe\xfd\xea\xc7`\xb9r6\xcb\xed\xea\x87\xe5\xc6Y/\xc3U\xec.\xd7\xae\xbf\xf4\xd6\xcb\xf5\xc6\xf5\x97k\xc7_\xfa\xeer\x97\xf9K\xdf\xc1?W\xcb\xb5\xbbZ\xee\xe2\xe5\xc6]nV\x8e\x8f\xff\x06[\xc7_\x06\xcbm\xe6\xae\x9d\xf5r\x83Q\xac\x96\xa1\xbb\xdc\x11T\xfe\xd2\xff\xe5\xab\x8f\x94\x0eL\xf9\xfb\x15\xba\x93\x18R\xa3\nE\xed\xbe(\xd9\x93\xf8n0\xb6d\x89\xb2w()s}\xaa\xaf\x1f\x1cf%\x84\x8aD\x9f)8\x87^q`\xa8\xd4\xa0\x13\xd4\xed\x9e\xa0\x19,\xbc\x04\xf5\xc3\x160\n#\x87\x04\x8crC\xe0\xecL\x1b\\\x80\xefz\xc2\x9f\xe7)e\xcf\xe7\xb6\xac\x8c\\\xb6\xca\xe0e\x19_\x9a\xb6\xcc]\xe6w\x18G\x95\x046sXq\xa9\x05\xdc:\x8b\x9d\xb8\xdd\x98Z\x0fc*T\xc6\xd4\xda \xc11E\x17\xb5\xd9\x98r\xbc\x1f<'8\xaf\x7f\xc9='\xfc\xc1sV\xe7\xb5>\x04\x9c^\xe1\x19c\xd9\"\x14\xd5\xe5\x8f\xbb\xaas|\xaf\xea\x167\xeb\xd5?\xa7\xa5p\xf0\xb4#\xf0\x8a\xb2\x87\xb1\x8c]\xbb\xf0q\xd6@\x87\xf5\xd40\xd2\x01m\xbd\xd5PW\x9d\x13a\x1e\xd4\x1d9\xd0\x00 N\xa0\xa1\xe2\xb3\xe2gX\xdaT\xa7\xd5QP\xc34m\xa4\xcd>o\x8fT3L\xe4L<<\xfaR U^\xc3\xbc\x84p\xec-\x08T\x9e^A\x03\xbf\xb0\xe0\xd5\xb4\x08wY\xea\xda8B\xda\x9e0\x1b\xdd\x8e\xc4i\x08\x15RW\xeb\x18\x81\xebW\xf4\xc5X\x1f\xc8X\xbc]\x0f&\xa0{\x9e3\xc6'\x10O/\xe5`\xac\xfbp\xe3\xae\xccAn\xd7!rg\x90A\xb7\xc9;\xeb\xe0\x1aj\xefMUg7\xaf\x08k>\x11F\x04\xaf\xb7\xedi![\xbb\xd7\xc6\x89\xf4\xe6\xe1\x01\xef?m\xa4\x18\x04\xde\"\\\x8dF\x8a\xac\x9f\xff[c\xe4\x02|k\x8a\x18-h\xc6 'F\x8e\x0c\xdc\x1e!0 E\xad\xd8m\xd2\xf3\x1c\xf5\x1bG\x8f~08\x85\xf8\x99z~XC\xber\x9a\xb6.?#\xe2\x07RR\x15\xa7\xd1\x0f\x1c?`nc\x9c\xd6q\x86\x9c\xb8\xfb\xf6\xab\xcdWN\xfcD\xfe\xd4\xdf~\xb5^\x86\xdc\xa3#\x9e%\xc5\xe9b\xb5\xf9{\x99\x16\xdf~EzE\x1d\xccp\xb9sV\xcb\xcdy\xb9\xfea\xe3l\x96a\xef\x0b\xea\xc8w\xcb\x80\xa0_n\xbe\x1a\x9cUN$\xa7\x9b\xf4\xe2\x9f0\xf0d\xda2%\xf4\x94@a\xf5\xb2Y-a0N\x0e>\xb9\xc2\x1b\xc3O\xae\xec\xf3\xf4\xfaM\x02P\xd3\xe0\x94\x9d\xfa\xb9\xa3\xf3\xff\x06\xa1\xaf\xe8\xd5\xff\xe7\x0c\xce\xaf\x10\xbf\xda\x0d\x06\xa8\xec\xb7\xb2\x18P\x90\xd8O\xa5\xf3\xa3Xc\xd5g\xc5\x0f\xb2\xb6\xabO\xf6\x93\xc0'\xc7\xb3\x93\xbd\x8a Ug\xc6\xb5}\xfd\xeb#[+\n\x95\xcfW\xd11/Z\x99\x84\n\xd4\xd4Q\xf2\xa6\x05\xa4\xb3\xc8\x9c\x86R\xdd\xd7\xbf\xdex\x9b\x04\xdaOK^\x8c\xf7cBX:\xaf\x17\x13\x10Z\xe3\\\xd5\x0eL\xea\xc0\x9c`\xf4\x8a\xee\xccAo\xd7'9\xd8T\x15tV\xa0i\xae|\x05 \xaf\x89x\xc7P\xdch.\x00\xbe\x03\xdb?\xf0\x93\xdb\xa6\xeb\xf2\xd1\x19>\xf2\xcbES\xbf\x11K\x04\x88\xa6W8um\xb9\x04C\xacL\x192\xbd\x0fc_\xaf{\xc0*\x8a?\xf3\xc2\xbf_\x9a6=>\x11\xfdDE\xcb\x8b\xe1\x8f\xecR\xaf\xe8^\x8c\xc9\xe4\x11\xc9\x019[n/\x82)\xc4\xb3\xe1\x08_\xbdOEB\xa8S\xce\xa6\xe7i\x92d\xc8\x82\x10\xd8.\xa5\xdc\xa2*\xd6\x94\x9c\xa2\x85\xfc\x8e\x8c\x17\xc6\xe4\x81 \xb3zM\x16\xc4(\xfb\xe6\xe8\x89\xc0*p7\xd4\xf8\x16\x88~\xffJ\xdfl\x81N\xa4\x84'uj\xceuZ|\x1evF@\xdb$\xc0M\x12\x10\xaf\xb9\xe0\xdf\x82\x1b\xd6\x16\x99}Su\xf3eyh\x0bX\x0d\xd5\xad\xdd|\x1d\x90\xee\x92#\x1b\x8e%\xe2A]\xed\xf7\xb6_\x1aTs\xf7{\xd8\x03\n\x946z\xa1V0e\x8b\xde\xb0e\\|9mW\xfb\xd8\x8e\xb7P\xd9lN\x88\x00v\x99+dB\xfb\xd0\xdfz\x97:\x16\xaf\xbe9\xfd\xd0\x16`\xae\x03\"\xd5\xe1\x16}v\xd1\xf6\xa1-\x96,\xac\xc2\x15i\xd4t\xddVp\x8cj\xd8\xdc\x8c\xb1\xf1_\xcf|\xe7\xf2r\x13R\x02\x89'\xc3_\x7f ?\xfb\xba\x1f\x9e\x95\xeb\xf4#\x19\xf51EY\xd2\xa0a_\x98C\x00\x9e\x19\xb8\x8b\xbe\xa0\xa2m\x86\xfe\xf1\xbc\x04\xf6C[\x9e\xb7=h[\xe3i\xa1\x84e\xc2q\xa7w\x9e\xb7\xb9O\xee5\\\x9b \x8e%\\\x02\xe7{\xf4\xd2.\xfe\xd9\xe8\xad\x02[\xed\x16\xfe\x9aI\x8c \xac\xa7D\x12\\OL/\xc0\xdb\xb0\xce*\xf5%?\xf98\xb9\xc6\x9e\xd7h\xce\xe5\xe3wrw\xea\xb2J\xcaGl\xd1O\xa7\x0c\x8d\xd1\xcfX'\xd3\x1f\xc6\x87+\xe8\xdf\x032\x9d\xd2\x0b^o\xb4/\xfd\xca\xc6<A\xf7I#\xec\xbc`\x87\x17d^\xf4\xf7\xd2\x8bx\xa6\x0c\x840\xda\x04\x9b\x9d\x82-\\\x87\x87M\xa0`\x13\x87\xc2\xd0\xc4\x84\xc1`i\xc2:\x18\xfc\x95\xb7\xf0 \xa3 &)\xe3a\xa0h\xda\x88\x98\xc1\xc5):\xa5\x121E\x9fDM\x12\xba5g\\\xf4\\\x14{\xb1Fa\x18\x1e\xae\xe9\xc5\x1e\x14\xf1\x94\xbe\xe8c\xc3\xd8\xa3 \xa3\x03\x96<\xcd\xfdagH\xff\x9d\x14\xfa\x8e+`\x9924\x02\x7f\xb7[\xa9z\xeb\xa3-Z\xad%\\\xd2\xc0`\xe8'\x0c\x0b\x0bz\xeb\xb0\xd8\x06\x0b\x7f\xe7-\xee\xb7\x1ak\xd4!\xc1h\x996 &sn\x8a\"-\xa6\xd7\x80\x06\x03\xef\xce\x9c\xa1\xd0sNbg\xbc]\xaf\xbc\xf9\xf4\xef\x01\x91N\xe9\x050\x0c\xe0\xbeL\x18\x04\x80\x9c\xd3\xe2X\x8epa\x1b\x05\x07M\xa9H\xe1\x80b\x8a\xf2\xfb\xab\xdd\xfa~\xa3\"\xf2\xb7\xd1\xee0 \x125\x9f \x9e\xa0\xf6\x16\xc4V\xb5\x0fw\x0b\x7f\xbbY\xf8\xf7\xa1\xcc\x0fE\xe9 \x19\xd34~\x1a\xaf\xa6\xa8\xcbb\"8\xa0\xeb\xb4\x0b\xb3\x14\x9d\xf3J\"\xdb\xdbz\xdb\xe3L\xb2\xf7\xaa\xf8\xa6\x10\xaf\xab8\xd4\x85 \xfa\x0d \x94e\xd4Q\xe2\"\x9d\x07\xc7c\xec{[\x85\x07\xb4PB\x04\x86Y\xc0\x1a\xb8\x17\xed<5ME\xb2\xbaG\x9e'\xa1\x13\xf5\x9d\xb7 \xa9\xfc5-\x8c,p\x06\x0b\x7f\x8b\xe38\x8dI\x8a\xe2szT\xdd\x7f=\x0f\xa7\xa8\xd2bz\x0d`\x10\xf4=\x82\xc7\x81\xb1\x0b=\x03\xc5.\xc4\x9b\xfbP\x91\xdb\xa4.\xec\x01\xe1N\xe9\x88> \x0c\xdd\x990& q\xd3\xc4Hv\x9b\xd0/\x95C\xcb\xf9\x03\x92)\x86?\xde\x05\xab\xd5JAuH\x02\x9f\xcf\xa3\x14\x958\x14\x18\xf2 \xc6\xdf\x82|d\x18\x84\x8b\xddJ\x9a\x0b\x19\x19\xf2 `\x94L\xb3\xffS\x996Ey\x16\x93+\x00\xea\xcf\xbb2g\x16\xe8\x99&q2\xf0\x8fA2\x9b\xf8\xbd.\xcb)]\xd0\x15\x1f\xee\xc8$\xbd\xd7\xe4K\x12\x02\x8dZ\x80\xe3\xeex\x7f\x8cT#F\n\x054S\xa7\x81\x00m\x90\x8a,\x89\x90\x87B\x01\x99\xa8\xf9\x14\xfb\xc4)\xc0\x8c\xdd\xae\xfb\xfef\x11\xf8\xdbE\xe0\xdf+\xdcQ\x94\x9f\x123\xdd\xfeOc\xdd\x14\x05ZL\x85\x07\x94\x9f\xf5d\xae\xe5\xe7|\x93\xe7\xd3\xe4>9\xce%~\xaf\xc9sJ\x17t\xe5\x07;2E\xf7!\xf9NMa\xa5p\x80\xe7\xb5\xe2(\xa6\x18\xfc`\x15l\x03\xcd\x9fL\x02?X\x0f\x88ds_\x7f\x9eb\xec-\x88\xad\n\xbf\x0b\x16\xbb\xdd\xe2~%sC\xb3\xf4\xf5\xe7\x89v~\x1a\xa7\xa6\xa8\xcab\"8h\xe3q\x17\xe6X\xf8\x9eSrx\xe2G~2\x93\xec\xbd*\xbc)\xc4C\xd6]\xef\xc2\x04\xfd\xd6\xc5\xc9>^\xa8\xab\xfe\xa3\x8b\xd4J\xbd)\xca=\x17\xa7\xa8\xe7js\xe3]\x15\xbe\xb7\x18\xfa\xaah\xb1\xda\x84\xaa\xd0\x9c|\xb5_\xc2G5\x985S\xd4\x02&a\x8an\x88Z\xa1up\x8e\x8e\xcf\x15\xcf\xa4~\xed-2\x9c\xd2;]\xf3G\xfa\xf8:\xcd\xd0\x96\xfdG\x97\xa6\xb5\x9aSF\xc2|\xac\xd0XP\x17\xfe\xad\xab\xb8\xden\xe1\xfb\xdb\x85\x1f\xd8zm\x18\x11\xe6\xf5|\xde\x91\xc9cb\xe2J68*&\xd6\xb5\x8c\x8b+W\xf6\xe7\x8bkR\xef\xa0\xb11\x11\xc3\xe8\xe8x\xd5\x8a\xbfUW\xe4\x95\xff\xd1\x95j\xa5\xde\x94\xd11\x17'86\xa4\xb5\xff\x89G\xb5\x0c}5\x8d\n\xc3\x92>'\x7f\xfa\x98\x98\xb2\xa8\x0d\x8f\x88)5m\xe3\xe1\x9a\xc5\xfd\xb9\xe2\x99\xd4/p,L\xa9?>\x12\xae^\xf4\xb7h\x86\xb8\xf8?\xbat-V\x9a\xa2\xff\xb3\x10B\xca/,\xff[\x83\x9d\xd5\xc2\xdf\x04\x0b\x7f\xb7\x86;h\xd0{pU\x9f\xd3<Y\xe9\xc7\xd7\xb8A\x8d\x1f\xaffQ\xf7+\xd6\xf7\xe7\x88bRw E\x1f\xaf<\xaa\xe5W\xae\xfb\xdbT@Y\xff\x1f]\xa2V\xeaM\\\xe7\x99\x8b\x16\xd2wy\xf9\xdf\xda\xdf0\\\xf8\xf7\xab\xc5\xd6\xd8]\x83\xd2\x9bV\xf49\xf9\x93\xf5~\xd2j6\xa8\xfa\x93jZ\xb4\xff\xda\x85\xfd\xb9\x12\x9a\xd45h\x18L\xaa?:\x12^\xb1\xe0oV\x0ey\xdd\x7ft\xb1Z\xae6\xc5\xe6\xcfD \x8d\x02i\xe5\x7f\xe2F}\xb8\x9f\x861`X\xd0\xe7\xa4O\x1e\x02S\x96\xb5\xc1\x110\xa5\xa2e\x00\\\xb3\xb4?S.\x93:\x05\xe9\xfe\x94\xea\xa3\xaa\xff\x8a%\x7f\xa3FHK\xff\xa3\xcb\xd4R\xad\xa93\xc0,\xa4\x90\xe6\x8b+\xff\xd6n\xaew\x8b`}\xbf\x08B\xcf\xd0Q\x83\xe6\xc3\xab\xf9\x9c\xf0\xc9\x8a?aE\x1b\xd4\xfb \xf5,j\x7f\xdd\xa2\xfe<\xa9L\xea\x14\xa4\xf7\x13j\x8f\xaa\xfd\xd5\x8b\xfd6u\x10\x17\xfdG\x17\xad\xc5JS\xac\xfd,\x84\xb0\xad\xef\x97\xfd\xad\xdb:\x82E\xb8[l\x00\xe7\x0eX\xc5\x97p\xab\xba\xce)\x9e\xac\xeb\xe3k\xdb\x06\x13?V\xcdj\xe0\xe7\xae\xeb\xcf\x12\xc4\xa4\xee\xc0\xc6}\xac\xf2\xa8\x8e_\xb9\xde\xaf+@\x96\x16\x9f\x9f\x0d\x07Z\xd8\n\xb0\xf1\xe8\x03\xa9,\xeb\xb7\xe7\x85\x9b\xc3J\xabr)\x12Tc\xc2\x87z\xf2\xa7\xda\x82\xab\xef\x94\x9a\xb2\x9e\x92\xca\xaa~\xb2%:\xe3\xa1\x06,\xf6\x8a\xdc\xb0qh\x0b\x86\xe7\xf4|\xb3\xd4\xcbB\x1bM.\xb41\xe4\xaa\xbeIji\x8c\x92\x1cI\xb2\xa4h\xefa\xbe\x11\xc0\xc5\xd4=$\xa9\x0e9\xfbE\xb3\xd5\x1f.m[\x16\x9f\x06h1\x95}\x8d\x1a\xd4\x1a\xde5\x97C\x9e\x8a/\xc5\x93\x95\xcbc\x94 \xf1\xbc\x0d;\xd4B\xcf\xef\xe0\xdeF\xf5\xe4\xa3;*.~\xb1D\x94 :\x90\xf0\x80\xf9\xd0\x9f\x9b\xf1H\xbe\xf6,\xaa\x1a\xe9\xb5\x98\xf0\xa8\x87\xc0\x11\xae~\x04\x8e \xc2\xeb/(\xd9\x9f\xd3$A\x85x\xd4\x89\xc28\xcb\x15;\x8f4\xb97B\xcbz\x9f\xf8\x18_\x90\xa7\x0c\x1d[\xfaD\x8e\xd7\xd1\xc7K\xa5S\xfc\xa2\xd9\xbd\xc7s\xda\"\xb7\xa9\"r\x8b\xc0c\x1dU\x1a\xcc~\x1f\x1d[T\xc3\x87\xde\xc4#|\xcb \x0c\xf5\xfb\x85Y)?zww\xc7\x95\x96\xa6\xacF9=u\xd6\xabrJ\xf3(\xf3r(i|\x9f\xa7\x9e\xfd\xa6\xad\x83U\xf4\xde\xa0\xbcj\x9fx\x9f\x94\x13\x88=l\x8e\x8a\xcb\x8c4Y\xbe\xe7yr\xa6\xaccVF\xed\x1e\x83=\x0c\xa7\x86}\x0f\x8fa\xd9\x9c\xf0\x93\x91\xfb%M\x0b\x83m\xb3z\xbcN\xf6\xc2\x84\x93\x84\x04\x7f\x966\xad\xdb\xb4O\x192\x1c\xf6\xd3f\xb5\xd1Kc\xd8\x070r\x91\x98\x1f\x9a2nI\xdc\"<|\xa6\xd2#\xe7KA\x9eR\xf1>\xf3\x8c\xfc\x04\x86\x9c\x935\x1f\xb1\x96\xeb7\xf9\xc4\x86\x9a\xdc\xd8\x16\xd0\xd8v\xb3\x03\x1a\xcb\x93\x89\x8d\xe5\xc9\x9c\xc6\xee\xef\x03\xa0\xb1\xec4\xb1\xb1\xec4\xa71?\xf0<\xa0\xb5.\x9b\xd8Z\x97\x99[cv\xc6Q\xc6\x0d\x1e%\x04#\xcf\xf8\xaf\xa4\xacS\xef\x9b`\x9a\x0f\xa0{{\x03\xe4]awt\xa35j\x80\xa0^\x8d\x19\"\x96ZI\xe7\xad\xf7\xa0J\xcd\xc8aJ\x98\xc8_\x15\xeb\xdb\xb3\xd8\xceS\xaeV&\x16Cu\x14v[;6\x97\xcb2?\x94~\xb2:\xb8\xbeM0\xc3\x14ADd9\x07/JF\xc1\xfa6\x82\x99\xd1\x14u\x80,\xe0,)\x8a\x8d\xb4\xfe\xb8\xff\x14\xda\xe6*\x8d>\x0e\xad\xdac\xeb\xcb\x98\x96\xd89\x00kI\xaf\x1b?w\xf4\x12\xac\x1c\x15\xed\xff\xfc\x96\xd2\xf8ia\x83\xc1\xcd\xd9!\x08\x07\xec mY}\x12\xed;c\x0eMK\xd1\xd7K\xd2/i\x82\xea\xe7\xde\x97\xe5\xee\x08\xf3NT\xd7V\x90\x91p\xc9\x1c\xbdLK@\x9b\xb6\xc8r\xb5\xa4\x12\xed\xf84\xdc\x893\x14\xd5\xfbC\xd9\x9e\xa7\xe7R\xe0\xd7?\xe9~\xacu\x15\x82\xbb<\x9eB2\x0f\xad\xe5B)\x96\xf57\xfe\xce?\x80\xe1\xafq\x81Li\xa5_\xd3\x90\x9b\xa1\xa5\xe2R\xc4\xc4F\xf8\xf6+\xb9\x91!\x1e\x96\x9b\x99\x1e\x14\x8f,\xe4H\xbaG\xa2'5!Y\x0fqFQ\"\x98\x16\xe9\xce\x1b\x1eWK\xe9c\x81\xab\xa8x\x0c,\x93m\x0d`p\x7f\xa1[\x86\x0c\xfa'*\x99\x10\xac/\x84\xb8\x9d\x0fu\xcb\x85>\x13o\xb11\xa4\xaa\xd1\x9b\x12\x16\n\xc8\x0b\xf2\xdb\x92\x90e\xef;\xbe\x90\xb9\x87\xff2\xa2\xa6\xea\xad6\xc0\x94\xbe\x8fp\x8c\xd5\xa5\x05:\x08\xfd\xd8{a\xc5gh^\xc7j@&\xe0P\x89m\xcb2;D\xf5\x8cT;\xc6{\xa3\xe4\xac2M\x1b\xd5\xad\x96T\x86&\xbf\xc1\xaf\xa4\xe6\xcd\xa9\x81\xe4>\xd0G\xba\x00xL\xeb\xa6u\xe3s\x9a%\x1f\xb4\xbej\x10\xd2\x84\xe5\xfaUgC\x9dE}=P\xb14(\xb6\x06)O}\x1f\x9e\x87y\x80\xce\xc6<8T<9\xe5\xe5\xd4N[H\x93z.P\x81{o\"Bz\xa7- \xb8M\x95\xa5\xad\x92zv\x19n\xe8\xc2\x9e\x94'\x89\x97\x1ap0\x0fba\xf1,\x01@ 8\x90\xa0&;$\xbc\x16sK$\x1f\xcc\x03V\x1f\xbf\x81\x11\xf0EI\xc3k\x95Q43\x90\xc2\xa7\x15\xbb^\xeb\xa0\xae\xaaZ\xdb\xccN\x13\xdb\x84\x9a\xd4Z\xecmu?z\x93\xb4F1\xcf@t\xc9\x8b\x07\xb8TI6E\x87\xbb\x98kj\x18\xea\xf3\xf2M\x8d\x1bw\xf9\x85d4\x86\x85[#\xa4\xd5z(f\xd7hF\xb0k\xa7X\x11s[\x16s\x02\xb57\xd9\xae\x80\xd6\xc3>\xaa'Pk31\xa3\xec\x19\xb35\xba)\x14i\xa2\xfd\xd3\x1a\x15\x8a\x05K\xa7_\x9a\x07\xd6p\x84ev\x92\xac\xedPv\x9f\x0c\xd8EXL_i\x02\x14\xc8\x98\x83\xdfP\x8d6\x05,\xa5\x92EH<\xee\xd8:\xa3\xf7\x01\xfe,#N\x9ev\x9f\xeb\xb5S;\x1f\xec5j\xe3\xb34\xdcy\x998\x0e\x05\xba\xbe\x13\xf3b.\xc07<e\xa0\xf4NLDhy%\xe4(\x9c\xed\xf4q\x92\xdf\x0b\xab\xd0\xdau\xaf\xe6\xce|3\xde3 \x0c\xec\xa6\x04h\xe9\xb3\x84cB\xcb\n\xa0\xadm\x0e:\x91\xe3\xb6\xc6A\xb8Q\xf1Nnz\x10\xf6T\"\x80\x1a\xa3\xe4\x88u\xa4\xfc\x9a\xba'i\x12%\x94-\x96x\xe1`\xa2Y\xb3P\xb8\xfbo\xa4U\xf1\xedWW\x90\xd4W^\xc3\x95\xfbT\x89\xf2\x0ce#J\x85\xbd\xda\x1f\x1e\xa3G\x9e\xccG\x08\x9a5_\xc1\xb3\xa8\x89\xb93\xa2\xa8\xd1\x94\xbb\xa664\xae:Suijm\xeeQ\xdfRZC\xdb\"\xfb\x81\xc6_/\x11r\x07|\x91H<p\xab\x1a\xe1\xc2Q\x01A\x98\x1c\xea\x8f\x00\xe8\xc8\x1b`\xc2\xe1C)0\xa2\x03F\xb4\x84\xd4:\xa0ED\xdf\xe8\xc4Io\xc5\x17\xd8\x96\xc1\xa0*\x94\x05\xab\x0ejoB\xec\x15\x80V~=\x11\xd5\x04r-\xb0j\x89\xdd\xa0\xf7\xaa#E\x8a:\x18\xe5\xcf\x08.i\x99\xed\xd5F\xc2\x94x\xd6\xbc<8\xec\xcb\x11\xd6\x8d\xd5\xfd2l\x89o}\x1fz\xe1\x16\xc8\xc9;e\x19\x99-v\xeb_\xcd\xdf\xc5(Y'\x91\xe1k\xb9\xca+\x83sm\x03c\xce\xb4\xf8=I\xc6\x8bcl\xb3\x0f@^k\x93\x06\xbf\x92\xe7\xc3\xd8\x15\xf4\xafjJ\x7f\xab+\xd8w\xba\xaa\x9b\x00\xed\x83I\xad\xc5\xd4|\x02\xfe\x1eR\xd3\xec\xdbm\x02\x13Q7\xb9\x95\x8b\xf8\xf5L\x81Q\xfa \x89\xcdlK\x7f;Ib&@\xbb\xc4\xd4Zf\x89\x19!\xcd\x12\xbb\xc1\x96\xba\x19\x9a\xaf\xb1YY\xbb\xf2\xf9B\x95P b\x99\xe0\xc9\xccY@Y\xcc\xc2\xab2m\xcc\x07\x06\xd0\x19\x96\x81\xe6W\xb3j\xc8D\xf5\x98\xaa\x1b7\xf1\xff\xa6\x8c\x87+\x06\x03\xd8\x07\xd1\xb74,P\xcdE\x02\xcb~&F\xd3\xb2\xda5\x15mR\x9a\xe1/\xb3\xc1\xc7CZ\xb3\x0b\xeb?\xc8_\x05\xf3\xb4\x10\x0c\x81\xb6\xc0L\xcb\x80[k2\xf5\xee\x92 _\xff$\x8f\xcb\x87\xf1J\xf7.\xf4\x0bg\x99\xbc\xf5\xd0\xf5\xf9\x1a\x0f&\xb8'\x9f\xceG\xe2VW\x00\xfb\xc4k\x89\xc4]\x84\x94\xf1\xf2Np\xf3\x07i\xb0Qy\x95\x00nrbb\x0e\xe3-B\xb4\x11\xaadW\xdd\xed\xb3\xf3\x0e\x89\xb1\x07\x85\xbcI\x9f~\x93\x9c\xc1D\x8d_\x87U\xb2\xd5\xb8K\x0b\x0d$\xf0\xd6MwzA\x95~\xe6\x95>\xd9\xaf\xf1\xe29+\xaehx\xb8\x88\xe9\x1a\x02\x06Y\x18|n\x8d&J\xb7>\xc4\xd50A\xf9\xd8\xde\x96\x15\x8c\xaa\xa7\x00\xde\xfb\xcb\xdd<\x1a\x01Q\x1b\x01nr\x11\xc7\"1$\xc0\xe6\x8aX\xd8\xf8\x04o\xd9\xa5\x01\xc6\xbb(9\x84\x87\x84\x05\x19$\xee\x82I\xa7K\x1b7\xa6\x1c\xa4r\xb8\xfd\xd4 \xbd\xf7\x1fC\xef=\xfe;\xd0\xc5\xc2\x19\xf8N\x15u\xc4)q\xd2\x18\x8eI\x96\x8b\xad\xf2\x0cl\xbd\xf1\x0d\xb8\xbb\xe1>\xca\x9dr\xdf\xe4\xce\xd9\x81\xd7l\x1e\x8fGz\x81\xe4f\x19n\xd6\xcbm\x98\xb9\xabex\xef\xac\x96\x1b?\xc0\"Y\xed\xf0\x7f\xc3\x1f<g\xbd\x0c6Y\xb0\xbc\xdf\xae\x9d`y\x7f\xff\xc3\xce \x96\xfe\xfdJ\xbf\x88s*\xb7\xf0T\xd1\xa2:O\x8b\xa8\x1d3TW\x9a\xf8\x1b\x10\xf0\xd6B\x13\xeeF]kw\xa3\xae\xbf\xd2\xee\xff\x94\xc5F\xaeE\xbdZ\x02\xdc\xf2\x8d)\xae\xc9\x00B)\xa9f\xb6<I\x06W\xb4OV%f\x0du\xd1V\xc0\xb5\xffK\x0cr\xf5\xd6\xd9^c\xdc\xb5\xe3\xae\x85\x81\xcen~\xad\xbf\xfdj\xf5\x95<\xe0\x8d\xeab\xeb\xf6\x1b\xeaJ\xf3\x98\xb6\xf1\xf9Y\xf2k\x03\xc5\xf2R\x98\x11\x81\xd2\x89\x84U\xe5s\x07\xdf\x96!OvQ\x96\xa9A\xf5\x8c\xf6\xa8\x90\xf1\x14F/\xb6\x0d\x84\xf5\x0d:\x9d\x91rN\n\x7fC)\xa2+#\xb8\xd8u\xd6\xb8XZ1\x11\xcau\xfbF']\x88p\xf1t\x97Z\xef\x867V-\xf8M`\xa4\xb9cY\xe7\x1a\x88H\x89\x19\xea-\xaf\xd5\xfa\xc7S0\x81M\xd3\x8f\xdc\xcdPH\xedH\x9e\xbd\xf2u\x06Mp\x06\xb5nR~gQ\x8b\xfe\xfb\xd7\xfcjt\xdb\xcbi\x14\xbe\xa5\xed\xa1\xaba\xe0q\x01ao8\xb8\xa8\xb9\x15\xc7\xb6\xfai\x80\xd9\x1d\xc7~G\xdd\xbcO\x03\xf0\xe5|\x82\x07\x8c\x85\xe2\xdcl\xaa\xf9\xaftm\xfb\xbc\x0f\x1b\xbdbFU\x85\xa2:*b$\xdcW\xa8\x16*\xbf\x15\xdd\xe8\x8f\xaa\xeb\x91\xf8\x03;\xe2>\xf3\xfa<\x00\xfd\x9e,\xd1|\x89\xb2K\x1f\x943\x99\x83\x03O\xc1\xf1s~\xc9\xda\xb4\xca\xd0\xa7\x85\xf2\x02k\xda'\xb24@\x1e\xbf\xbd\xf3\xef>\xf5K\xf4\xd2\x8d\x9b\xd2\x1eF\xcd}\x81\xf8b\xd8\xb2?\x1a&\xb3\xea\xa4\xc7\xa8\xab\"\xe1+1\xd4\x0c\x11\x19aR=\xa4\xf4\x12OM\x90\x0ff\x12\xef\x19\xef\x14Ln\x93\x8f~\x9c\xe8\xd9!\x84\xa7\xc3\xa1Tz\x8e\x07\xdc\x81\x0b.\xe3\xab\x04d\xa7\xb1\xcfYr\xfb`\xf3\xc0\x1a \xf8\xdd\xa7o\x9cl\x940\xefR\xbb\xde\xe4i;\xb6\x84\x06\x8d7\xb4\xf6\x9f\xea\xafik\xef\x01\xab\x87\x13\xf6\xfa\xc0\xa3\xf7\x8a1+\xb4\xa5\xad9\x89\xdbA4p`\x95I$ol\xcc\x08\xedfQq\xfa\x1a\x15\x1f\x00<|\xb2\xee\x97G~_\x97\x8f\x0d\xba\x03\xd0\x00\xb5\x7f\xc6s\x86{ U>\xa9\xa8\xa2\xb6\xad\xbf\x16\x00\x14\x96(K^\xd2*\x0f?\x80\xe8i\x07\xd4'\xc8\xddv\xd5\xeb\xe4y\xd3\xba\x925mF\x01\xbak_\xdb\x1az\xdd\xaf\xf7\xf5\x9bK\x94E.3\x17\x8c\xfd\xb7\xf7W\x95\xff\xd8v\x01jF\xf8\xa95\xb9\xfbxT\xd0\x96Y&\x00!Z,N\xe8Y\x1f\xc5\xfer-\x98\xa8\xbd=\xf3\xcemfjB\n\x9b\xa8\xfb9\x19z\xbb\xdf\xf3\xf6\x9a,%\x9fq\xce\x97\xfc\xa0\xaf\xecc\xa5\xc0J\xb2\x98j\x18\xe460\xed\xa4\xe4\xad\xf077F,\xcc\xb288\xe97\xa3i\\\x84\xf9gX\xa6\x15\xf7\xee\xb3i\xd3\xb4f\xd7\x9f}T\xd4\xcf\x17\xbd\xb9_'\xc6\xfd\x95Bi\xa3\xe6\xabJ>3P\xb4\xc9 `$i\xd2\x188Z\x90\xf1\x93\xa1\xa6\x0fG#8\xeaKQ\xe0 \x11\xd3\"\xa5\xdf\xe1\x1a$\x1e\x7f\x14\x0d\x86|e4\x94\xf7\x10\xa1\x00)7\x03B\xc7\xb5\x07\x05\x03\x07\x838~\x0d\xfa}\x9d2c\xe4\xbf\x92\x8a\xfdJ\xcdL\xb2\xd5W\xaa\xb1*\n\x95}\xd3\xf4W\xc12[w\x85\xfa\xff\x15\xd5\xb5\x99l\x87\xd5\\\x0f\x81\xf0\x9e\x862\xc1+4\xbb\xf9?L\xb1o\xa5\xc3M\xaf\xbc\xcd\x15\xba\xdb\\\xab\xb4\xcd\xcd\xb5\x15PL\xe3\x0b\xda\xaa\xbc\xac.\x90vL\xb3\xcc\xcd\xcaGpqQ\x1e\x14#\xbaO0]\xaaj8\x94\xcav\xb0\x84U7:\xe0\xcc\xb8\xfbUG\x83\xcfhX\x9d\x9f\x8aE\x99\x00\x19\xe7\x13t\x8c.YkF\xa2\xb9\x96\xb3\xc9Pm\xd9\xe4\x96\x9b\xa9M\x82\xcb\xb2\x0b=\x82RV\xab\x9e\x7f\x9dQ=w\x14\xdf\xa07l`\x17\xd1\x97\x19\x9b\xd1\x8d\x87\x03\xa5\xc5\x1f\xed\xe0\x9c\x9az\x8d4KsgZ3]\x90\x01\xc0A\xf9q\x89\xfe7M\xbc\x00\xa5\xfe\x18*-g$\xf1P\x95\x0e\xe3h\xa3C#\x1f\xb5\x15\x83s:l\x07H\x87<\x91\x94.2\x07\xe8)\x00\x19\x8ct_\x0b\xf8\x01\xa3\xa5n\xeb\xe3a\xcb\xf0V\xda}\xc9\x17\x07\xf4\xd6D\x0e*o(/\xe5%)\x1a\x8f;\xfd_\xb8\xb76._e\xab!v\x92\xa4)C{P\x17\x96rV\x98 \xcb,\xb2\xf1u\xfa\xbfd1{h@\xca\xde\xa2\x9e\xfd6\xc9\xc8z\xd8\x19\xe3\xae\xd2,\xd3\x15\x01\x92\xa1\x02\xd9'\xfc\x10\xde\xd1\x04\xb7=.\xb1\xa7\x06\xa7\x89\xa2\xc6\xb3\xd4\xc0\xe4E_&\xe0\x1a;7\xab\x1d\x0d\xa1\x98\xe9\xc1\xfe\x14%*\xfa\xfe\x05\xd0\x86K\xad_\x8d\x12\xbaj\xecQ+s\x88\x9a\x14st\x00#\xab[_\xd0\xde\xa7\x00\xa7\xba|\xdc\xfb\x10)mtp\xd9\xca\xd3w\xe4G\x15 [P\xa9\xa9\x90`\x98\x12)\xe9y\x8a\xe8\xcb!\xaa\x7f\x95c\xd5\xe6\x83>r\x02\x05\x969A\xcb\xa0@\x8e\xe4\xb8\x07\xd4>\"T\x98\xec)\xc9\xb6\x82kDi\x81\xea\x85^\xe4\x1e\xb3K\x9a@/\xb2\x13T\x9a\x83\xb0M\x0e\x95v\xd9-&\x9c\xb7d\x1b\xe7\x91{\xa8\xc5/A\xd2W \xe9\xa3\xc8\xca\x87?\xcb\xf0rm\x13\xf3\xc8\x91\x18s\xb2.\x994\xc1\xa0\x0fe#\xd3\"\x06\x9c7\xe9OL\x06r\x85\x0b\xc0h\x11\xcc\xa0\xfc\xe9\xcfS\x90\xca\x95d\xc3\xdc\x0f\xce\xa6\x8d\xda4f\x89e\xa5\xa6\xa4\x93wfi\x1a?q\xf5\x88x:d\xa3\xe5\"q\x8d`\xbc\xc8\xef1\xfb5U\xa5\x87\xfe\x90\x93,\xb5v\x80G\xfb\xac\x0f\x9d\xba\x9a29\xdb\xfd\x12}\xae\x12\x88RT\x93\x97NPN\x06\xea\xa6qYX7A,Cq#?\x908\x91mF\x88Gv\xe6R\xae\xb2?\"[zQ:$\x95E\x9f36\xea\xfa\xd4\xbb\xe1\xf2\x9e&\xc4e\xc4\xd3\x8f\xc7\xf4l\x93j_\xc1\x97\xb2\xa5\x85A\x06\x9b\x0b\xbf\xcfG\xea\x0fv\x18~\xdfec\xe3\xce\x92vXE<\x8c \x92\x0d\xb1.\x1f\x1dv@\x14,\x94\xcd\xf3x\xc20\xb59G\xb4i\x80\xc9\xaa\xcbG\xd5^\xd5\xe5\xa3\x1d\x8f\xd1\xb4\xf0\xafic\xd5\x0d\xe6\x0c\xf8N.\xdb\x95\x7fV\xed\x91\xa7kQ\xdcB\x81\x85i\xbd=\x05&\xa5\x7fI\xf3\xaa\xac\xdb\xa8h\xa5\xe9I(6\x19\xe1\xde[eF\x98&\x933\x12\xc1\xad\xa9\xe4\x1d\x02\x83~\xbb\xd9\xc2\x83>O,b\x93^\xc2b\x93At\xb1\xc9\xefu\xb1\xc9\xefu\xb1\xc9\xef\xaf\x1a\xf4<\xfd\xb7\x8a\xf8W\x1d\xf4yr\x9bA/\xe3\x99=\xe8\xd5\xea\xaf\x1c\xf4\xfft\xdas\xd5\xa0\x17\x98\xf6\x8f\x1b\xf4\x02\x11S\x07\xfd\xfd\xbd\x0f\x0fzr\xc8\xd9$6\xe9%,6\x19D\x17\x9b\xfc^\x17\x9b\xfc^\x17\x9b\xfc\xfe\xaaA\xcf\xd3\xf0\xab\x88\x7f\xd5A\x9f\x9dn3\xe8e<\xb3\x07\xbdZ\xfd\x95\x83\xfe\x9fN{\xae\x1a\xf4\x02\xd3\xfeq\x83^ b\xea\xa0\xf7\xfd\xfb{x\xd4w\x99En\xd2KXn2\x88.7\xf9\xbd.7\xf9\xbd.7\xf9\xfdU\xa3\xbe\xbf\x0fC\xc5\xfc\xab\x0e\xfb.\xbb\xcd\xb0\x97\xf1\xcc\x1e\xf6j\xf5W\x0e\xfb\x7f:\xf5\xb9j\xd8\x0bL\xfb\xc7\x0d{\x81\x08x\xd8\xcb\xf0\xbf\xa6r\x9bu`L\x01\xac\xd2\xb7\x8a\xde*\xf7y6C\xae{\x93a\xfa\x9a1z\xcb\x01\xfa_]2\xd7\x0c\xc7\x7f\xfcX\xb4\x0fD\xfe\x92\\?\xda\x83\xd2\x15x\xba>)^\xb6u\xff\xc1VAY|\x84 \xc4\xab*&!\x96\xd5J\xaf\x18N\xaah\xa5L\x864Q\xb8\x9d\xd4\x90\xfaIV\xc4\xb0\xb2b\xa0\x9f\xc0\x86\xcfsS\x88\x15?J\x8e\x816\xe7\xf2\xd1\x06\x08~\xcc\x9c$\"\xaeW\x90p\xe4o\xbe\xd2\xbdm#\xe8\xe8B\xb4\xb0,|\xe3\xd3\xd3+o8\xd3\x86\x9f\xa5Cm+\xfc?\xe8\xc4=\xee\xc1\xfb`\xe7-\x1c\xf6\xbfe\xf8>\xb8\xff\x8a\xbd\xc7\xacCqT}\xfb\x15!\xb9/\xce\xd3\x16\xd5Y\x9a\xa7\xed\xb7_\xf9^_\xcc( \xe8!\xb9\xb5\xb3=\x07\xc1\x8fk\xc7\x0f\xe9\xdf`u\x0e\x02\xe0\x886\xcc5\xd4\xb5s\x86\x07\xc9\xdd\x17\xcd\x123\xa9a\x1dI\x0cd\xc2 O\xa2\xfa3hm\xfam\x000\x94\xd2<\x00\xa0^\\\x0c#3\x9a\x95 \x0c\x17\xfc\xff\"\xf7\xcc\xb5m$\x8d\x98\x16\xa9\xb1\xed\xa4\xd6@\x03#\xe1 \xacx\x8cf\xc6\xd2\xa4be,\x90\x92\x91\xd1\xe1\x8c\x1b&`\x82\x01\xc3\xa2\x88\x070/\x12\x84o`\xc5?\x83\x8d\xc1\x1dp\x86\xff\xfc\x03-\x8d\xcc:\xc5\xd0L\x1a0\x92\xb5\xb1\x08\x1c21\x10\x84>\xc8\xe3\xa8N^\xb5Sd\xe2\xe7v1O\xfdcY'\xd4\xf5;\xd4(\xfa\xec\xe2\xdf\xa6\xadOBi\x96V\xfb~o\xdb\xd8\xed\xa6\x81\xf1zS\xdc\xe3\xef\xce\xcaFW\xf9fE\x8fA-\xc9.\x00\xdc~%$\xadS\x8fy\xb1o\xee\xacT\xaf*\xa6\xc3\x13s\xdfqv\x18\xf6d\x89y1\\\xc7'\xe9,\x0c\x9b\xb4tP\x80\x8a!)\xa3r\x19\x87B\x07\x94\"\xd1L\x0b\x90\xab\xcfL\x0d\xfe/\xbb3\xec\x1b\x81\xb4\x85F\xec7\x14\xf4X\x96rVo.\x19\xf7P&O\xa3\x9b\xbd\xc4\xc4\x7fU\xd7\xef.\xf2EMp\xdb\xb4\xcd\x90\xb2\xff\x91\xa7\xf2$\x00\xcd\xe5 \xc1\xd0\xb3X+0o1\xc7\x89\xbaV\xe47\x0c\x95\x8d\xed\n\xed\xa1\xbe\x19\x1e\xa5l\xcdrO\xd8el\xfd\xf6\n\x9eE!\x80(\xd5\xc7\x9b8|\xbc\x95\"`\xcb0\x93Z\x87t\xdd\xa8\x16\x0eP\xe49\x9c=L\xf8\x86\xeeL%_\xbe\xd0\xd0@;m\n\x18!\xfd N\x0f\xa2\xd5\xa4\xe8\x8c\x17t7\xae\x9c\x83{\xb9\x81\xa4\xe1\xcaY\xb0i\x12\x1e\x0e*\xcb\xc1\x93\x9b ;*\xedmH\xd8X\xed4?\xb9X\xf1\xb2\xe8i\xfa\xe1[\xb6SJ\x19F\x0fcR\x1e\x9a\\\x0c\x8dS\xa4BA[V\xc3:A\x81Nd\x1a\xe2[*\x9bs\x8d\xc7\x8a'\xdd\xd4\x02`\xc5H\xde\xce\x9a\x82]\xb0]lt\x13\xab\x89\xcd\xc2g\x87\xce\xd3\xb2\xd6\xf8a\xd5Yv\xba\xf4\x95g\xec\x9d\xeb\x17\x0c\x815DR\xa4d\x94\x0f\xabNV3B\x93F\xb7`\xa8=\x87m5\xe3\xcf\xfay\x13\xd5RI\x16\x0f\xe3g\x0d\x9ch\x16\xda+9Cg\xf5\xdb\xb1\x06 jB\xb7\x95Q-\xd4\xfeF\xea\x18\x1b{L}D'E\xacs\xbb\xebKF1;\xa2\x19ZL\x86\x07F\xe9\xb5MS\xa3=\xaf\xe9\xf11k$\xe0\x06w\xb0\x8c#\x9e\xc4U\xa0\xc2\x88\xf1\x9b\xd3\xb6\x9d\xad\x86\xb6A\xbe\xca\x140\x12h8\xd0\x80\x06\x8d\xb9]#\x03\x97a\xe8Ob\xd3\xdfn\\^\x8av\xbf\xa2'i\x952\x15D\xaey\x8a\xaa~2\x13k\x8b\xe5@QYW\xe7\xa8h\xf6$Qs\xf9\xd8\xec}\xb0\x8b\xb6-\xa1x\x1e{YFq\\\xd6IZ\x16\xcf\xfcRf7*\xe2sY37\xb0\x7f\xcf\xcc\x8aru\xb3\x06 \x0c\x80\xf2\xe8\xb6O\x95z\xfd\xde\xc8\xe8\xb7+1\xd8\x18U\x0b\xb5\xb5Y\xa7L\x14\xbcR\xb0\xa0\xbac\xaa\xfbDo5\xacQ\x94\xc4\xf5%?\xcc\xb0\xea\x8f#'\xc4z\xb7Sw\xda|\xbaGY\xda&>\x9a&D\x89E\x07\x9a\xe5\x9b\xb5M\x84k5\xbe\xd1P@_\x8b\xc6*\xd9\xef|\x87\xbeI\xb1\xce\xb1\x83S\xfc\xdb\xe1\xdd\xc7\xbb \x8d\x91\x90\xa7oR\x0d}.E\x82j\xdc\xfa\xab1\xd1\xd1\xa3\xd4Q\xce]\xf1\x9c\xd8UtJ\x0bRmT\x06\xca\x87E]\x05@IW\xd1 \xb1O|\xc6\xc5\x16\xe8P!\x14\x19\xe0`VN_\x13\xf4\xf9k\x8c\x89}\xe1|=\xfc\x90\\O\x9er?t0\xe0\x0d7\x87\xd5\xd4\x9b\xcbe\xa5g\x85z[\xca\x8dQW&\x83#\xf8\xe8-\xef\xc3\xec\xe4\x08\x1c\x07}(\xfb1E\xc0\xf6I\x92$\xcd\x0d>\x86\xd8\x9a\xc9\xc6\x81\x0d\x80G!\xfb\x16\x98\xb2\x8a\xd8\x07f\x19V\xc9d5\x90\x04\xc0\xcf\xd2\x0d\xf8\xf9\xa2\xb8\xd8\x82<\xb4-'O\xc9\x1a\xcb\xf4\x13\x8b\xe2 #\xdb\x9b\x84!\xa1\xc6\xf8\xe1\x84\x13!\xcb\x10\xc6h\xd3\x04\x93\xecW#\xa2_q\xb9\xc0\xad\xcdT\x04\xa05\x1d@j\xae\xc9Av\xd1h\xd1\x90:\xcf\xca\xad\x1e\xe15\xdc\n\xc6\x06\x8a\x91\xfck\xb8\x05\xb4\xa6\x03\xbc,\x0fQr\xb2O`\x98_\x98]k\x89[\xdb\xf0\xbd\x94\x0bm\xab\xe6B\x9bv\x9d\x98r\x96\xe7\x105\x08c\x01g\x031a\x05\x19\"\xbfjf\xdd\xc9\x87\xf7)G\xb53\xf8\x11}\xc1\xbe6\xf0_\xb6uL\n\x81\xf2\xaa}R6Q\x1c\xda\xc2a\xed\xe8\xd3\xa2pa5\x86 k]\xea\x06\x99\x8d\xb6?f\xa3-I\xf9\xde\xa0 nU\xa7yT?M:t\x1c\xc9u\xe4\x1e\xf7\xa5\xea7\x15\x10\xdf&\x88c\x15\xdf\x12\xc6\xa7\xe4`\x9b:\x15\xe2\x99\x90\"jP\\\x16\xc9h'\x99\xeb\x13\xa9\xb5\x94n\x0e\xe5\x13:\x1a\xae\xc3\xc3&\xd0q.M8\xe7t\xd6\xf7v\x0b\xdf\xdf.\xfc@\xee\xee%\x8eQ\xd3\xd8 \x0bv\xd1v\x1d\x0e\x84\xd1:jWY\xe9\x84\x8e\xfah\x8bVk\x15\x9f\xdaM\xb1\x95\x89\x9d\\{\x0b\x7f\xb3]l\xee\xc5.\xa6\xc5\xb1\x1c\xa1g\x1b\x05\x87]O\x0f\xae\xa0t\x8e\x14M\xe9\x99\xbf\x8dv\x07 \xd3\x12\xc04\xa7O\xc1j\xe1o\x82\x85\xbf[\x8b\x9dz\x8c\xeabHG\xfb.\xf0\x830\xb8\x07\xfd\x89\xd8\xf7\xb6=A\xac\x9a\xd2;^*u\xd0\x882Y\xdd#\xcfSQ.a\x94\xb3z\x1a\x86\x0b\xff~\xb5\xd8\x8a\x1dM\xa2\xe24\xc6\xf5$^\x85\x82~\xd2*J\x1fY\xe1\x04\x19\x1e\x92\xc0_y\n\xb6%\x88mV\xef\x02o\x11\xae\x14\xdd$;YF9~\xdc\x1d\xef\x8fQO\x11\xa9\xa4t\x8f\x96M\x14`\x84<\x14\xca\xe8\x96\x10\xbaY\xdd[\xef\x16\xc1\xfa~\x11\x84\x9e,\xbez$G\x05M\xd9-\xb0\xbb\xfe\xac\x89\xae\xfe<Ep~\x12\xf8\xc1Z\xc2\xa4\x89\x8d#\x9f\xd8\xab0X\x84\xbb\xc5\x86\x0d\xbd\xbf_\xf2C\xd9\xd6e\xd1;\x91\x81ay\xc3\x90\xc4\x0c^\xceX\xd9\xd7\xed\xf4V\xd7\xb8U\xe2\xb8 4\xd1-\xaa#\x1by\x95\xa6\xbd\x97e\x94\xa1\x1a\xca\x93<\xe9C\xa8?x\x97\xb3\x8e\x8f\x93F\xc9\xf2\xd4`\xc3\xfa\x1d\x00\xf4%qk\x15\xd7\x92\xbfK\xd2&O\x9b&=dH\xe9\xefZ@/@9\xcb8+\x1b\xd3\x05V\xc3\xd7:C\xa7A\x02\x15_\xc8\xf3\xd6\xde.\x04d\x1e\xc7(\xd4\xaf1\xdb%\x11\x0e&%T\xceY\xba\x83\x9b\x81\xde\x1f\xe3D\x07\x15\xb9\xd4S\x10l\xc3\x80\x03j~\xccj\xb7J\xd6@&\x80w(@+\x14\xaaQ\xe7&\xd9%\x07\x0d\x19Lb\xbc\x8b\x0f\xf1Q\x07\x06\x88\x0c\xbc`\x15lzP\xd9\xfb\xf0\xc3p\x1b\xac!\x8b\xb5F\xc9\x90\x18\x99\xb7\xbaB\x9b\xf8\xa0\xa0\x82 <\xf8\xc9\xf1\xa0\x81B<<\x04\xc8_q@\xd1s\xf0\xe2p\xbd\x01>\xfc\xbfK|\x14\x1f}U\xbe\x08\x85\xe8 \xe2\x81 \x8b\x0eI\x82B \x0e\xa2j\x13\xc4\xab\x9e*e\xea\xdf\x85\x9b\xb5\x071\xedx<\xae\xe2D!\xecxD\xe8\x10)\xa8`\xda\x8eG\xb4\x8b|\x15\x14 /\\\xad\x8e^O\x9e<ao\x03?\x06Ez\xdc%[M\xa4\xc70\x16DJ1\x19\x88\xf3\x0f\xdea\xab@\x02\xb4\xad\xef\xfd\xc0\xdf\x0eFE\x98nw\xfe\xce\xdf\x05\x10i\x08\xff\xab\x92\x96\x1c\x93#\x92\x10\xc1\x94\xa1\x18\xc5\xc7\x8d\x0c\x08\x10\xb6\xd9\xe1\x7f\x87\x0e\x0c\xd3\xa4\x7f\xf0Q\x00\x0dT2&\xef\xd5Q\xb0\x89wq$\xe21\x0c\x81\xfb\xc3\xe1\x80$8H\xd3\xd6^\xe8\x85/\xff\xca?\xf2|FO\xc7:\xcaQ\xe3Tuy\xaaQ\xd3\xb8\x87\xa8v\x9b\xb6N+\xd4<\x1f\xeb2\x17w2\xf6\xf6\x95\\)\xe0\xbd\xb4%\xf8\xd6s\xbc\x97\x97\x7f}C\xdcK\x8eq|=Z\xccS\xaa|\x1b\x92V2\xc4[\xd5\xf5[*\xb8\xecm\x9f+\xc4^\x8e\xd35w\x8b\xa0|:\x89-\xb5\xa8\xc7\x93X\xb1\xda\xcf\xc1`L[\xae1\xc5\xfc\xe2\xd2\x0c\xf1a\x9c\xe5\x86\xae\x9eL^6\x91\x98\xa4g0\x044%\xd1\xb7\xd2b\xb9E\xb5{\xc2\x02@E\xfb\xf5:L\xd0i\x01l\xd4\x0d?8A\xf8~!8,\xda\xef\xd0{o\xa8i~\xb3Up(\xbf\xa5\x9b\xb5\xfa\xbbxX\xc6.\xa9\x87Q\x91\xe6Q\x8b\x92\xfes--\xc0\x0c\x81\xc6\x8c\xe37\x0e\xed\xbb\x93\x16\xc7\xb4H[\xf40\xbb\xc6U\xa2\xb2QJ\xb31K?_^\x96\xa4\x91\x19\xc3\x80\xea$=u'\xa6I:\n'\xee\x08Nuw#\xdb8\xf2\"nG\x9d\xde\xec\xc4\xd1\xa7x\xd9\xdavA\xd0 \x0c\x04\x91\xbe\xb8\x11A)f\xcb\xed'1\x92\xdfP\x18\x9b\xbd/\n\xe3\xe0\x9b\x99\x0do\xe5\xafT>\xd4\xcc\xf8W*\x16\x94\x9a\xda\x90\xbf\x14\x1acQ~\xcf\x88\x82e\xfaw\xbe\x91\x8d\x8d\xf0\x97;}'\xa3\xd2\xbei\xd7\xb1\xb8R\xafld\xd6\xd6\xdeM22\xef%\x86\xaa[>\x15\x98\x1a\xe8?Li\n`\xba3 \xfaN\x05\xb2Ro\x8b\xc9Y\xfb\xe4y\xc5\x975\x05\xf57\x9aR\x08\x9cf\xdb\xae\xc7+q\x02\xc5\xfd\xc7J.O6\xe0\xaaN\xc2v.\xeb\xf4\x97\xb2h\xa3l\xce\x11W\x10\xc1wS\xd4\xcb\xf8\xd1\xd4\xa8`\xde\xe4\xe6t\x8d\x9b\xf6\x81U\xd9\xbd2\xad5\x80\xe3\x93\xebN\x90\xb9 <B\x1e\xa4 sZP\xc8\x1d6 \xe8\x8d\xf8\xd6\x8d\x91`\xfbR\x92\xb4+\xd5\x87\xe4\xe0\xfaU5\x08l\xf1-\x95\x08jp\x86\x1eA\xd5o\xaeJ\x93\x1a\x99\xa9M\x96\xb4[0\x0db\xfa\xadk\xd5)O~mu\x82Z|Su\x02\x1a\x9c\xa3N@\xf5\xdb\xab\xd3\x94F^\xafN<\xa1\x13L\x83\x98\xd8\xe9Zu\xcaN\xbf\xb6:A-\xbe\xa9:\x01\x0d\xceQ'\xa0\xfa\xed\xd5iJ#\xafW\xa7>S\x10LD\xf7zg\x89$\xa4\xf9u\xf5 j\xf1M\xf5 hp\x8e>\x01\xd5o\xafOS\x1a\x99\xabOb\xfdcvi\xce\xea\xded\x1dB#\x82Wa\xe4\xd3;\xe7&\xd4\x1b=\xc2\xa9\xc5\x12\x93?\xf1\xf0\xaf9\x86\xfaZ\xb9=H\x1f\xa9%}\x085\x92\xc4\xbf\x1a\xcdC\xae\xec\xef5\xc5p\xb4M\xcaC\xa9Poo\xfag(\xfe\xc5\xc9\x88a&\x1bG\xebI\x8c4\x92\xc5\xbfm\xcdE?\x89\x95\xbcU\x89\x95\xb4\x10hq\xe2\xc72\xfe]\xccP\x7f.\x1b\xed\xb5$&\x1aI\xe2\xdf\xdf\xe6!\x9f\xc4B\xde\xa6\xc4BZ\xa8\xb77\xe9\x83\x1e\xffv\x07U\x9e\xc9<[\x15y\x1c\x9b\x88\xe1\x1f\x08g`\x9e\xc46\xde\xa0<\x88I\xa1\xde\xd8\xf4/\x8e\xf4\xe3\xa2\xa1\xfeL\xe6\x8d\xd4\x92\xf8g#\x89|\xc4\x9c\x87|\x12\x0by\x9b\x12\x0bi\xa1\xde\xde\xd4\xaf\xa2\xec\x03(\\}&\x03\xed\x95$\xfe\x99 b\xdfYg\xe1\x9e\xc4>\xde\xa4\xc4>Z\xa877\xf1\xc3-\xfbF\x0b\xd6\x9e\xc9<k\x1dY\xf7L\xe4\xf0/\xc1sPOb\x1doQ\xd6<R\x08Ij\xc2\xa7e\xfe\x15\x19\xaa<\x93q\xb6*\xf2la\"\x86\x7f\xaa\x9e\x81y\x12\xdbx\x83\xf2TA\n_\xd8\x06!z\x91\x08\xf1\xf2\xa5\x13\x14\xc3!\x01\xe3FwnC=\x8f~A\xe9\xb7\x94\xf9U\xe7x\xe4\xa6\xa9\xfe\xf2\xf8e\xc8\x1aT\xbd9\x0f\xfc\xfa\xc2\x81\xc9iA\xbe\x84\xff\x81\xfc\\\x0e?\x99<\xa6\x80\xd2V{j\xb6\xe1\xcb\xe1\xd2\xb6e\xc1\xb7I\xb1\x8f+#WgSF\xee\xbd\x97\x88\xd6\x1b\xb2D\x01\xdf\x13^\x96m\x195\xad\xf1\x16\x95U\xe8U\x9d\x98T\x90\x16\x0c z\x19\x80vPC#Q\xff&\xbb\x0b\xa5O\xae$\x17\x0e\xffb7\x9e\x0c\xe7\x83\xbcC\x90\x9f\x1b\xa1\x1f\x9e\x14H\xceR\xd3'?\xc2\x03\xfd\xa09x\x92\x97\x02\x93\xf4Ux\xf2\xe5\xa8}\xf1\x85r\xa5\x9e\x06sN\x13\xed\n,\xfc\x82\x1f\x0d\x9d\xfe!t\xec\xea%\xf5X\xcdV\xd89g\xbc\"\xeeZQ\xf5\xfb\x0fA\x89y\xa1\x94\x9eB\x8c\xc8_\x99\xc8\x82\xf2\x8e|`\x96?@\xbe,\xf32\x892\xb7\xacP\xa1\x1f1\x1e\xde9\xf4y8\xab\xdc\xf1=\x18}\xc9\x13K\xa7I\x01\xfb\xef\xa0\xc7\xb4C \xdb\xae\xc8\xbe2\xf7\x1fp\xbd\xd0{\x10\x85,\x9c\x90\xee\xf7\xb7\xe0gu\xdf\x87pU=%1I\xa3\xac<\x01\x1f_)B\x9a\x17\x88\xe8*\xcf\xae\n\x0dt\x82ky\x8c\x12\xe4\xc8x\x85\xfd\x1c\xd2M\xe0\xc7\xb2\xce\x9d\xe5\x8a\x1d\xb4Q\xee\xd7\xbd\x16b1\xd2\x84\xf6\x9a\xe2\xc9\xa2\x16}\xed-\\lm><\xd8^N\xde(1\x85\x1f|W\x04\x01\xa5\x17 J\xa0:\xb5E\x7fyo\xff\x93\xd7\xa75\xe9\xddX\xa3x\x9a8\xca\xd0\xd7\xfe\xd2\x0b\xc4\xee\n\xa5\xb2r\xb8M\\\x97Y\x86\xed\xfc\xb8\xf5\xc0\xd6\x9b) \x19N\xe4~%\x97\xect1\xa3\xe5\x14\xb3MK\xcf\x00\x92/g\x8eE\xd5\xe9Q\xac<C\xc3\x08\x18\xb3\x8f\xa3IuF\xdb#\xc6\x02\x1e\xdc\xbc\x12\xb5\xa0(\x19\xe7\xe7dk,$\xef\x1ac<o];\xc6N\xa7\x143\xe7\xd9\x1b\xaeQ\xb8I&\xb2\xfeU^\xfe\x02\x95\x8bE\xfd\xe9\xf7;\x03]F\xed\x9b\xbbGg\xce\x0e9\xc1j\xce$\xcb\xa2\xbd\xc2\x10\x9d\x8a\xad\x17\n\xa7O\xc4\xc1\x9b\xf8\x15\x12\x10\n\x13\x8ab\xf2m\xe7\x98G\xe7q\xc3\x04\x1eh\xd9\x07\xc9\xa1_m\xba\xc2\x0d$uYM\x9c%\xd7B\n\xac/\x8f\x82\x8c\xbf\x9c\xc1eN\xad\x1db\xc3{GL\x7fM<2\xd1\xc7\x97l\xc9t\xa1\x8c\xefu\xbb\xe6\xa6\xcb!\xf7X\x7fh\xc5\xe4M)w\x94\xc3^\xd4j\xb2\x13\xb5\x12}(\x91'\x8e\x12p\xf8\xcaq\x9a\xbdKJ\xc4\xff\x8a\xf6\x13\xca>\xe8\xe9'\xb7\x05C\xac\x0f\x95a\xa3 \x9c\x06Q$\xedE\x9aCf\x08\xd4\x98(e\xb2A\x97\xe5\x8d\x8a\x04\xbez\x00\xbf\x90=SA4f\x01C\xfb\xcf\x8cB\x06>t\x19\xc5L9\xf5\xddo\x9f\xb9\xd7\x18\x88\xde2\xb5s\x87\xa8vs\x145\x97\xdat@\xc7\xbd\xbf\xbf\xbf\xaf:6zI\x1c\xc8\xe4K\x9e{\x17\x80\xe2\xb3l\xd1\x91\\!\xe1jG\xcf\xeb3\xa7\xed}\x16\xd9\x01\x13\xb50\xf9\x18<\x9b\x15q\x8b_\xef\xdb\xc0xzG\xc10\xbd\xdbk\xf5s\x89\xa5\xc1\xdbL\xea\xbd|s\x81\xc9+\xccd\xdb\x0e\x05Z';q\xdf\xac\xcb\x84\xda;S\xed\xfe\x834P\xc9\xf7\xd7\xa4\xd6\xb2-\xcb\xacM+@\xbd\x86\xd9a\xeb)[L\x99>\xb0\x8d\xff\xc7(O\xb3\xa7\xbd\x1bUU\x86\xdc\xe6\xa9iQ\xbe\xf8}\x96\x16\x9f\x7f\x8c\xe2\x9f\xc8\xcf?\x96E\xbb\xb8\xfb \x9dJ\xe4\xfc\xe7\x9f\xef\x16\x7f-\x0fe[.\xee\xfe\x84\xb2/\xa8M\xe3\xc8\xf9\x0b\xba\xa0\xbb\xc5\xef\xea4\xca\x16w\x7f)\xdb\xd2\xf9)*\x9a\xbbE\x13\x15\x8d\xdb\xa0:=.\xee~\x87\x1bp\xbe\xc7\x93\x90\xf3\x87\xbc\xfc{z7\xe0\xd4\x0b~z\xca\x0fev\xc7\xb0\x89\xb5\xd8R K\xadS\xe7Q&-`\xad\xd5\x05\xace(n0\xc6\xa3[\xfcMg\x1dpk\xb0\xb8\xda5\x14(\x81J\x86Z\xec4\xe0 \xdb&F\x10\xc9eL\xd2\x18K%*\x94t\x02\x81\x14\xd1\xfc\x14\xa4\"\xb5\xd9\xda\xb2\x10\x98&Y\x98\xba\x99J(s\xf6}\xff\xc2YFu]>\x02*#k \xd5\xb4\xe5\xae\x1e\xee\xa7]\xae\xd9\xf2\x8d\x88\xa8\x1f}:\xc2X\xb8\xb3V\\\x9b\x04\xceQRq\x12\x1b\xfe\xb2<4.k\xc3\xc5L\xf8\xb9s\xab,\x8aQ\x8e\x8a\xf6\x7f~\xdb\x96\xd5\xa7\x85\x08\xd2b?\x89O\x0dkz\x86f\x1c\x05\xa3^\xc5\xc4\xb9\xc3'\xdd\xe9\x988\x1f\x0c\x18\x87|T\xc4\x87\x93\xbe\xf5S\xaa\x19\xed\xa2\xcb!zlV:\xc8\x04'\xb3\x85\x14\x0d+\x9e\x0e\x13\xde\x044\x10k\xc8\x1b\xce\x1c\xe6\x80\n\xc4\xf7\x1a\xb2\x9b\xd9\x08\xc85\xb1\xb1\x9eo\xfc(\xab\x91s\n\xff\xe8\x9c?\x99\x83T\xe02\x0bi\xd9L\xe5b\x88 &\xd2W\x9c\x8bl'\xcc\x0cd \xb3$\xa4=\xb7\xd4\x13\x1a|S\x89\xc0*\xc5\xed\x99\xcc),}\x99O\xb8d\xa6\xa6\x11$\x10\x8f\xf0\x0b\xce!.\xf2+\x15Ml\x03d\x9d\xd0V\xcf\xb8L:N.j\x19\xc8<\xe2,\x8a\xac\xe3\xb8\xd3\xa2@\xb50e\x93\xd9\\[L\x16\xd7\x92\xe1Sj`\xfcfX\x84\xaf\xca\x8a|\xff0\x9d\x06\xd7\x02\xc7\x8d\xee\x1a\xf4\xf4b\xcf\xf2\xffz\x08\xff\xc7x\x08\xbf\xcaJF\xaf\x82\xf3\x9c\x0c_\x1c\xd8\xa1\x10%{\x0e\x88v\xbf\x8f\x8ed\xadS-6z\"r\xab\xaf\xf0KX\x8b6\xbf\x84\x83`\xbfD\xf9\xfe\x15r\xa3eG\xf3\x9d`\x17\x05l\xdf\xc9\xbe s\xdc\xa5\xf4\x1dg*j\xc9\x1c\xeaM\x8cL#\xcb\xc1xA\xfe\x8a\xa4'\xe1,\xaa\x98\\\x0dD\x91\xb7\xcf\xc3\xa2\xce,\xaa\xe8)/+)\x82\x17\xc5\x81\xa8\x17%n\x03\x9d\"D\x8a\x08\x12#y\xf3\x9d\xe8G\xe9b|\x10\xfa#\x1d\xe3\xe6k\x0d\xab\xc1\x0f\x99H\x03(o\x91\x16\xfb\xfc'pV\xe1\xaf\xe8e\xcd\x93\xbbB\x9f.y\x99<*{B\x9dU\xf2\x16\xfa&h\x80\xe8\x05r(\xe6\x05\n\xfb\x97\xa7\xa8\x00\xc3\x04\xe9\x00}\xf5\x9d\xe0\x06\xce\x1e\xca2vP\xbaR+\xb6\xe8\xc3s4\xfe\x81\xae\xe1<\xf1\xaa\x14\xea\xf2U\x08\xa4\x02f\xaby\xd7Q8]\xc0\x0e\x9f:\xf8\x05%f\x0e\x9a@\xed^V\xe8\xbd7Ou\xd2\xaer\xee\x03\xaaS\x92\xbev}\xdc\xe2\x7fG:8x\xe7\x1c\x86x\xe7\xac\xc9z\x98c\xa7\xe0\x81\xb4\x17\xbf\xf8Nr\xd0\xdf\xca\x82\x89$\x80\x02\x12H\x19 \x13C\xe6\xc0\xeb\n$8\xf0\xf3\x14\\\xa6NWo\x898\xaa\xdc\x946\x83\xf9\x1a\xa3\x8e*\xb7\xac\x8b\xcf\xb6\xac\xd0\xfd\xdc-\xec\xf7\x02\xf7\x151\xc52+\x1e:\xe0\x7f\xc5)\xf5f\x1fM\x94\xb1\x05e\x03\x1d\x86\xa3\xb8;E\xec0\xeb\x06=\x8bO\xd2\xed\x97\x97\x06e\xfaG\x91\xe1\xddR\xfa\xdaG>\xb9\xb6\xe5%>\xf3\x0d}UT\xb8O\x0fz\xd1\x80\x81Ex\xa6-%\xd0\xbe\x14\xb52\xd7\x0b\xc5;\xcdPT\xef\x0fe{\x96\xbe!\x0fU\xedi\x04H\xccA\xb7\xfb\x91HF G2\x02.)\xe2\xeb\xe1X)\x8eQ\x8c\xdc/i\x93\x1e\xd2,m\x9f\xf8f\x1a\xcb+\xfb\xbe\x97\x8d\x94`\xd6\xb0\xb1\xe5\n h\x03\xcc\xe6\xbad\xb62S\xf5m+\xd2{\xb7@]\xbbP\xca\xaa\x1a}Q\xca\xf8\x9eMI\xac/\xacT\xa9Nd\xa1\xe2\xc4\xed\xd0\x9d\x8dr9\x96\xe7\x07`\xa7K\xbf\x85\xe7\xbf\x93\x0f&\xe0\xee\x1e\xf6\xca@\x06\xc6\x0c\xf5\x0c\xa2\x82\x90<B\x86k\xa1\xc3e\x84\xf4X\xe9\x06\"Y\x14\xc3~\xc3A(nU\x97\x15\xaa\xdb\xa7={\x0blu\x027\x0f\xd9Z\"\xcc\xb6s\x03\xaa\x85\x993\"J\xa0\x9a\x9aT\xc2\x1776*\x15\xa7\xc8\xc9\x02I\x03\x17\xde\x90\xf7\x001\x94\xf3\xd1\xf1\x1a<\x82\xe6\x8f\x9a\x1bRj\x19{\xd8\n\xd6e\xa6\x0e?^\x8cEat\xc6\xfaIp`\xf9\xf4\xaf\xdb\xf3\xbe]\xdb7\xde03\x1c\xbe\xb7/\xf7\x0d\x9b, 9\xf5I\xbb\xe7\x8bj\n\x13'\xca\xa0\xdf\x90\x0d\xbe$[\xb0\x0d-\x18k\x92\x97Z&Tp\xcdm\xc8o*~\xdc\x82;\x94\x0d7b\xe9\x94rW\xd1\xf0\x9a\xdcfk \x95\xdet\xcb\x95\x06\xb8\xc3'\x10>\xe5\x93\xe7\xc1\xe9\xda\x17\xa5[\xa3\nE$\x05\xd7G\xf2\x85\xbb\xbf\xba\xce\xd4\x94\xe0\xb3\xdd\xeaR\xddc\x9ae\xdf~\xf5>X\x1d\x8f\xc7\xfe\x8a\xdd\xddp\xc3\xeeN\xb9`w\xe7\xec\xc4\xebu\x93o\xbf\xfa1\\\x06\xa1\xe3e\xee\xda\xa1\xff\xfa\xcb\xd0\xf5\x97\xe1\x0fk\\\xbe\xce\x82e\xe8\x06\xcb\xf0\x07\n\xf6\x0bp#\xae\x99\xf1\xffE{\x1c,\xb7\xa4\xc7\xfe2\xc4\xbd\xfda\x85\x7f\xaf3\xdcM\x07w\x95\xbc\xdfek\x97\xfck\xedrZ$i\x1c\xb5e\xdd\x00\xc6k\x88bZ\xe9\x96\xc5\xde\x8a\x853\xcc\xd8\x04\xeb\x04\xa7\xf9b\xf1J\xf8^\xb9l\xef\xbdz\xbb\x0d\xd8-'K\x9f\xc9\x01\x83\xf4\x17\xec\xb1\xb3\x16\xc9\xd2r\xbf7\xc9\x93\xf6&\xf5\xbf\xf8\xc6\x8aa\x10\xad\x86\x1b\x00k\xb5\x80P\x85\x7f\x13{\x81\x19T\xb4dkM\xd5\xf1KI\x98\xb7\x7f\xf5*8\xdde\xe4\xd92\x01\xf3\xb0 \x06\x1a\xb1\xebs\xb3 \x1a\xd8ms`\x07@\xee\x85@\xbeG\x1cU\xb8\xbaQ%\xb1\xf0YO\x89]\xeb5b\xf8\xa8\xd4+\x13\xe6Y |\xf5r\xc5\x8a\xb6Y\x10J\xd3\xd9T$dr)\xb7\x9f\xdb\x12p@\xeb\xb2\x8dZ\xf4\xf5j\xe3%\xe8$z\x9f\xf2\x0b)E\xe7M\xf1.\x15l\xb6\x19BX\x1a!\xcf\xcaU!\x84)\x94a\xfcK\x0c\xbd\xa8\x84\xeaV|\xa9\xb1^\x91\xaf^\xd0Z'\xa0\xa0,\x08\x0f\x85\xa8oH^(\x13\x8e\x03k[\xc6\xc5 \xd0*/\xdc&\x7f\xd6\xbf\xf6\x88\x9b5\xd9bH\x80r\x9b\xfcOu\xf9\xf8\xec\xbd7\xee\xf7\xf7\xf4\xcd\xfe\xde\x87\x97\xd0{?\xa8\xfb\xc4\xb0\x01\xd2\x92_\xb1\xf5\xa5\xd4\xe6\xad4I\xb5\x7f\xa0\x1e\x0d\x8a2D\x0df\x95\xc1\xf4MU\x18#\xac\xdc]\xb3\xb2\xbc,\xa9\x1f\xceo\xd2y6\xdc\xb0\xf3/i^\x95u\x1b\x15-\xaf\xd1\x96\x95\n\xdc\x96\x95\x0e\x97\xa7I\x92ixi\xa9\x0e\xcd>\x0e\xa8T\x90R\x80\x86A\x14\x1a-\xc3+C=\xa8\x03\xac\\\xacq8\xf5\xe9=\xa0\xbd\x03\xdb\xc3\xf1(\x80G\x02\xfcp;\xc1I\xbe\xc6f\xc1\x0eQj\xa0z9\xf5\xe1\xa1\x867A\x1c+t\x0e94\xf4\n\xf4d\x9dJ)p\x1d\xcdI\xbd\x8bF\xa0J\x05\x87\xde\x98(\xa6\x97\xd6\xa8\x14\xb3T\x15:8\xbdJF\xa3W\xbdQ\xe6$_'#R$\x81\xea\xe5&:\xe9\x9d3\n\x9d$\x1f\x04\x00K\xee\x83Q\x89\x94\xaf\x859 w\xc2\x08d\x08@J\xa1\x910re\x8cB\x18\xcf\xb8\x009b\xb1\xefmU\xda\xb4{]N\xf2\xa5.\x0212\xa8^n\xa2\x93^\xfb\xa2\xd0\xc9\xd2\x1a\x00\xd0\xe4J\x16\x95L\xf5f\x96\x93t-\x8b@\x8c\x04\xa8\x15\x9bH\xa47\xb7($\xd2\xd4\x01\x00#I\xfeZ\x95B\xe5n\x95\x93x\xb1\x8a@\x88\x08\xa6\x96\x1a\x19H\xae]\xd1\x18X\x7f\x06`\xe9\xa5(:\xfb\xc4\xbbQN\xc2\xc5(\x12\x8fz \xa5\xd0\xa8\x81\xe4\xde\x14U\x03\xcfi\x8b@\xfd;*\x90\x82\x0f\xa5\xc3\x0b/\xa5j\xd4\xf1c\x1e\x9bv.A\x07u\xe5\x0b\x9a'U\xa1+f\xe2\x8fI\xd5\xd8\xc4c\xfc\xccc\xacH\xbe \n\xcf\x93*y\x9c \x1e\xdc\xe9\x1e\x80\xa6\x043us\x00c1\xb1\xb1c\x03$\x8f\x9a\x0d]\x19\x00i\xb8\x0b\x80\xf53(\xfdi\x9a=9\xb80\x91I\x15\xb4I\xac\xaf\xc0\xe7\x11 \\\x9bC885\xe7\x12\xacf\xca9loa%p\xcd\xbarpn\xe8$h\xcd\xc8\xf5\xec\x135\xcfdo\x06\xd4\xf5g\x05V\x1b\xfe=\xd5tT*4K\xbc&\xa3\x0f%\xd87\xe4\x1a\xc1\xb7?\xd6(\x07 5\xb0\x10\x86s-w\xa4\xab\x95\x8c\xdf6\xcd\xd8\xa5\xd1:ZO\xd9\xd80\xb1\x0dhh\xcfj\xc7\xd6\xe7\xa1\x19\xd1\x10L\xe5\xd4\xbc\x06N\xaa\xd0V\x06\xc88\xad\xe3\x0c)\xd0\xa1\xf7\x1e\x82%WD\xaa\x90\x06\xbc\x9e\x9a\xb9O\x04\"\x9ff\x8fi7\xeb\xc3m\xe2\xe2\x80N\xfa\xa8-\xe2L\\\x1a\xd3)!\x1e\x04B\xc3>0\x16\x94\xc1e8\x00\xa0\x95\x8e\xb9\x93_\x00\x80+F\x9e} \x04\x18\xa3,S q\x91\x0cz\xccP\x07\x9d-\x14tF\\\xc0\x049\xa0\xe1\x10\xcaaT\x02\x80\x80\xd1|\x94\x0e\x1b\x981\x895\xf9\x14\xa1\xf5P\x93\xe5\xd6\xe4\xe3\xa2k\xf2q\xe9q\x98)\x02\xeca'\xc9\xb0\xc9_'\xc6\x81'\xb7\x92\xa4%\xd3t\xe2\xe6\xa3\x83/\x9f4\xfe\xf2\xd9C0\x9f0\n\xf3 \x031\x9f1\x16\xf3Y\xc31\x7f\xe5\x88\xcco>(-g(\xf1\xd40&\xca\xec4E\x94=\xd4dQf\xa7qQf\xa7qQr\x98)\xa2\xeca'\x892;\xbdN\x94\x03O\xdeP\x94\xfd\x81\xd6\xc4\xed\xb21Yv\xd9\x14Y\xf6P\x93e\xd9e\xe3\xb2\xec\xb2qYr\x98)\xb2\xeca'\xc9\xb2\xcb^'\xcb\x81'\xb7\x96eU\xa7E\x8b\xc5G\x1e\xc6$H\x81&\x08Q\x04\x9c,GZiT\x94\x14lT\x9a\x02\xd8\x14\x81\x8a\xe0\x93dJ+\xbcJ\xac\x12\x97n&\xd9%\xca\x0f8DAMU\x16M\xfa\x05\xbap]b\xaf\x940\xa5\xcf\xa6\xa7\xedsT\xd1\x1ar\xf0\x88n\xb2Z\xc5\xd1J\xc8\xe6\x9b\x85\x0eH\n\x80\xf2\x94|\xbc\x01^\x94\x87\xbf\xa3\xb8\x05^|I\x13T\x8e\xef%\xca\xc4\xf3\xafZ22\x1a?\xec=\xbdKn\xe0\x1f\x9e\xee\x87\x0d\xe4\xc2w\xd2u\xb0\xdc\x85[\x7f\xbdz\x0fT\xf37\xa6j\xe1f\x19\x84P\x95\xf5\xe1i\x05\xd6\xd8\x82\xe0\xfe\xe1\xc9\x07\xc1\xe9\xce\x14\xac6d`\x00\xe9u\xa4\xd1\x01d\xc3\x17\xd5\x98\xbc\xa5\x99w\xccY\x8e\xcc\xd8\xd4\xf7\x03an\x8d\xbe\xa0\xba\x01s' \xaf\xad\x84\xea@\x12\xc1\xb6&d\x88\xb1\x0e\x18\x1bz\xac\xa3\xeaY\xcf\xad\xa2\xe2\x03^0\x04\xf4\x1aC\x05\x05-\x04\x91\xa8\xaf\x04:\xf4\xee\xf6\xcd\x9a\xfai\x01`\x88\x8f8\x10\xd7\x12\xd3(x\x80rV\x9d|\x1a\xf4\x84L\x9bd\xa0~Ab\x90\xfe\xd0C\xca\xa1\xfb\x80\xc0\x07\x10\xf8 \x02_C@\xb3\xa3\x894\x0c\xf9\xd3T\x14<\x93\x9a \x89\x0f \xd1\xe8`H$J\x94=<4q\xd2\xb3\xbc\xdd\x87\x94 \xc8\xc0\xa4:\n\x90\x8e\x19\x15\x89\x82\x17\x15\xc9\x18V D\xc7I\xb7x<C\xbb\x93,\x98U\x00\x1d/K\x06\xa5 fP\x16\xccR*)[\x03\x11Y\"R\xf0'i\xd3\xd6\xe9\xe1\xd2\xa2\xd1&h}\xb1\x05aK\xa9*D\xe1\xe8\xb1\x80\x18\xce\x99eB)I\x8f\"\x94\xc5\xa7\xa1Cf\xfaT\xb1\x89\xfbu\x0c(u\x99\x89\x08\xfb/\xf8\nJ\xfd\x0b\xbe\x84\xd4\xfc\x81\x9f\xf3\xb1Fm|\xd69I\x8a\x0dH\xb5\xb7\x1c\xa7a\x88\x11_\n\x1cgR5\xab\x8c\xc016 \x86$e\x1bf2RUZ\x03^\x83\xc4\xcc\xe3LF\xac\x8d\xb2\x01\xb3>\xd4d\xd4\xc6\x81&\xb7\xa0\x0e\xb3\xa1\x01p\xacAm\x98F\xda MEGDy\xc2z\xd27`\xd2\x94\x06eGrJl\xc0Jv\xb7S\xf5S\xa6\xb9\xa1\xca^\x9d\xe8\x04l\x8a\xd2 \xe8`\xad#\xf8l*G\xb0J\xfa&\xe0\x84\x14n\xc0\x08j\x1b\xc1\xa7\xaa\x9a\x80\xd2\xa0k\x04\xabI\xd1\x08N\xdd6\x08X\x8d\x06\x82\xe05\xdb\x07\xc6SE\xf4\x12Wa\xd9\x13\xbc\xba\xe0\xcdK\xc8T\x06\xf9\xcd<\xe6&\xbf\xbd\xd3L\xc9{S\xbf\xb9'\xfbWp\x9d\x9b\xfc\xf5\xde3Y\xf7\xbf\x89\x03\xcd\xa8y\x13\x1f\xba\xc9_\xebF7\xf9\xeb=i\x8e\xe3U\xcet~#\x7f:\xbf\xbdK\x9d\xbf\xa1W\xdd\xe4o\xe2X\xe3\xe1\xf6F\xbeu\x93\xbf\xbd{\xdd\xe4o\xedak2\xb5M\xa6S\x9dlU\x98\xe6\xc9t\x9a\x9f\x0dH\xd1:\x99Nq\xb5\xb1\xf8\xde\xc8\xdb\xce\xdf\xca\xe1\xd6\x84uK\x9f[\x15\xda\xad\xdcn@x7\xf3\xbc\xa11xs\xe7\x1b\x18\x84o\xe1\x7f\x03Zs+\x17\x1c\xf7\xe0\xb6^\xb8\xa6\x897r\xc4U%\xbc\x81/\x0e\xe8\xdf-\xdcq\xd0~\xdc\xcc#\x07\x94\xe1z\xa7\xdc\xb2\x1b\x80`\xce\x93\x9by\xe5yr{\xaf\x9c\x92\xf7\xa6^yO\xf6\xaf\xe0\x95\xe7\xc9\xeb\xbdr\xb2\x85\xe3&^9\xa3\xe6M\xbc\xf2<y\xadW\x9e'\xaf\xf7\xca9\x8e\xd7x\xe5yr\x1b\xaf|\xc0s3\xaf\x1c\xa3|3\xaf<O\xde\xc4+\xc7\xc3\xed\x8d\xbc\xf2<y{\xaf<O\xde\xd8+\xd7ej\x9bY\xa7z\xe5\xaa0\xcd\xd3\xea4\xaf\x1c\x90\xa2uN\x9d\xe2\x95c\xf1\xbd\x8dWNx\xfa\x16^\xb9.\xac[z\xe5\xaa\xd0n\xe5\x95\x03\xc2\xbb\x99W\x0e\x8d\xc1\x9b{\xe5\xc0 |\x03\xaf\x1c\xd2\x9a[y\xe5\xb8\x077\xf5\xcauM\xbc\x91W\xae*\xe1\x0d\xbcr@\xffn\xe1\x95\x83\xf6\xe3V^9\xa4\x0c7\xf5\xca\xf9\xc6N\xaaf\xa7\x9by\xe5\xd9\xe9\xf6^9%\xefM\xbd\xf2\x9e\xec_\xc1+\xcfN\xaf\xf7\xca\xc9n\xdc\x9bx\xe5\x8c\x9a7\xf1\xca\xb3\xd3k\xbd\xf2\xec\xf4z\xaf\x9c\xe3x\x8dW\x9e\x9dn\xe3\x95\x0fxn\xe6\x95c\x94o\xe6\x95g\xa77\xf1\xca\xb3\xd3\x9by\xe5\xd9\xe9\xed\xbd\xf2\xec\xf4\xc6^\xb9.S\xdb\xcc:\xd5+W\x85i\x9eV\xa7y\xe5\x80\x14\xads\xea\x14\xaf\x1c\x8b\xefm\xbcr\xc2\xd3\xb7\xf0\xcaua\xdd\xd2+W\x85v+\xaf\x1c\x10\xde\xcd\xbcrh\x0c\xde\xdc+\x07\x06\xe1\x1bx\xe5\x90\xd6\xdc\xca+\xc7=\xb8\xa9W\xaek\xe2\x8d\xbcrU o\xe0\x95\x03\xfaw\x0b\xaf\x1c\xb4\x1f\xb7\xf2\xca!e\xb8\xa9W\xde\x9f\xd1!\xa8\xbb\xecfny\x97\xdd\xde-\xa7\xe4\xbd\xa9[\xde\x93\xfd+\xb8\xe5]\xf6z\xb7\x9c\x1c\xac\xba\x89[\xce\xa8y\x13\xb7\xbc\xcb^\xeb\x96w\xd9\xeb\xddr\x8e\xe35ny\x97\xdd\xc6-\x1f\xf0\xdc\xcc-\xef\xb27t\xcb\xbb\xecM\xdcr<\xdc\xde\xc8-\xef\xb2\xb7w\xcb\xbb\xec\x8d\xddr]\xa6\xb6\xa9u\xaa[\xae\n\xd3<\xafNs\xcb\x01)Z'\xd5)n9\x16\xdf\xdb\xb8\xe5\x84\xa7o\xe1\x96\xeb\xc2\xba\xa5[\xae\n\xedVn9 \xbc\x9b\xb9\xe5\xd0\x18\xbc\xb9[\x0e\x0c\xc27p\xcb!\xad\xb9\x95[\x8e{pS\xb7\\\xd7\xc4\x1b\xb9\xe5\xaa\x12\xde\xc0-\x07\xf4\xef\x16n9h?n\xe5\x96C\xca\xf0\n\xb7|In\xef\xa0\xc9v\x86\x8b<\xc4\xb6)\x00M,D!\xc8\xb3\x0eB\xcehS\x08\xe5\x84\xb6m\xf7:\xae\xd9\xe4\xe3\x044\xf9\x14\x1ax:\x15\x90\x0c\xeb~\x1d\\;O\xc6\xe9\xc8\x93)t\xf0\\ S\xe9\x18\xbeP\x10i\x9c\xc6\xe9\xc8NS\xe8\xe0\x89,\xa6\xd2!\xc4d\xb8z\x97\x8d\x13\x82#\xa3qBx\x16\x06\x98\x90\xe5\xa5!\x99\xcd2\x14\xb7n\x84\xbdu\x96\x01V(\xdfG\xe2I\xf7\x07r\x83\xba\xeducyk|\xa3Pr\x11R4Kud\xcb\xa8\xd3\xa2\xbeol\xaf\xcd\xafdr\x08\x03!rdv\xea\xe4h\xef\x1b\xdbk\xf3\xab\x97%?|OY\xd3\x1f\xc5W\xa9\xee\xc1\xe8\x19\xfdg\xe5\xcc\xbe\x08\xca\x0f\xc0c\xdb\xdf\xa6\xf1p \x9e\xfe\x06Ay\xba\x00=\x81\x00\x08\xce\x8f\xd6\xeb\x87\xedA\xf0c\xda\xa1d\x80%?\x0d\x14\xa7\xf1\xe7\xa7\x01\x92\x8b\x86\x96\x0b\x1c\x15\xfa$\xbfyY\x12\xec\xf4Zq\xa9A\x96\x06\x80\xe7\xe6WS\xf2{+\x8f\xd7e\xe9\xd8\x94\xea\xa3I\xfd1\x86\x7fm.\x15\xa6\xa4q\xbe\xfe\xda\xd0\x8b\x0fNY;_+\x1d\xf8\xf0\xe1yI\x9fd\xca\xe5\xaaj\xb7Y\x97\x06\n\x02\xef\xe5e\xd9\xd4nYdO@\"\x04f\x91\x86\xbc\xfc\xbep\xa91\xbf7`\xef\xe2RE\xbf\x1eHf\xfd\x1a\xc5-\xbbb\xcd\xfb\xa0\xdcn\xfbXG\x95\x90<\x81\x11\xe1\x92\x8c\x9f\xd1!C{\x9a\xb6~\x01\xbc!O\xaa\x9a2b\xf18\xe0\xd4\x92\xe7\x9e0r\x9fU\x86(e\xe4\x95~\xdd\xee\xcb\x92^\xefK\xb3\x0ev\xfc\xb2_\xcfY\xfa\xec\ng\xfaG\xbc;\xce\xdb\x86\x1fD}\xa2u\x94\xea\xa4\x96\xafV\xf5\xa1\x9a4+\x9eP\x99T[iu\xc1f\xa9\x85\x12\xaa\xab\xe6\xe3\xd1\x0dB\x96l;\x08\xdf\xcboB\x8f\xbdQ\x12\xeb=\xba[^g\xab\xd6\xf1=^\xc9\xf7\xd4Z\xc4B\x0db\x11_\x9e1\x19<\x8b\xb9\x8c\xf3\x8c\xe9`\xaf\x14B\xce\x98\x10\xf6j\xab\xd6\xc2\x94\x08\x899\xe4\x97\x84\x14A-\xc4\xb79\xed\xc5p\x19\xb6Z=?\xf7\x00\x86\x06\xf0\xf4\xfd\x85\xa1\x19fr\xcf\xfb\xf2\xa8A\x9d{\xa8\x01\xd7\x17)6\xf8\xa2pUF\xf2E\xed\xa9\\9w\xbdg~\x9d\xb2T\xde\xba\xdeb\x99?\xf5\xaf\xf5<\xacyM@\xba\x01\x04\xc8\xc1\x9a\x1fT<P\xfa\xd5<SQ\xe9\xb9Ws\xd7\xe7\x94\xea\x19\"\xf3\xd6\xf5I3\xbet\x13\xab\x0eW\x13\xb8n\x80\xa34\x03\x90\x07\x15##\x1c\x00\xcdT\xa4\x84z\x00\xd0\x0d\xfa.\x00=\x08H{\x81v\x97\xac\xd2\x81\x80\xb4\x15\x00\x97v*\xf4+\xf88\xfd\x00\xf9\n\xca\xac\xbf\xc9X\xa6~\xc5\xa9\xf7u\xe2W\xa4\xb1\x95H\xbc\x06U\x13\xa8n\x80b\xd9\x89u\xd2\x15l<\x1b\xb1N\xb9\x82\x90\xe6\x1f\xd6\x08_\xf7\x84C|_\x93\xc6\xd6\x12\xe9\x10\xe3\xd7\xa4\xad\xb5B<\xc4y\x05#'\x1fb\xbd\x82\x94v\x00\xe0}\xc8\xbb\xa0\xa6<\xcd[7$\xcd\x85b\x074\xa8\x9a@u\x03\x14\xbb(G'^\xc1\xc6\x88\xd7\x003\x15!\xbdhG\x01\xab\\\xaf\xbf\x95S\x1a\xce\x1510\xd5\xd3\xf0^\xb70\x15\xb10U'\xc0\x00&\xa6:h\x98 \x1bSe\x1a2\xdd\xc8T\xae?\\\"\xaa\x8d\xdf\x8aX\x99\xeai\x002\x98\x99\x8a\x98\x99\xaa\x13\x00Mv\xa6:h8\x8d\x86\xa6\xca4\xb4\x06KS\xb9\x81|\x19\xaa\xd2\x8d\x804\x19\xc8\xdd\x00z\x11\x90\xe6\x02\xb5\x17@'T\x8c&kSe\x1aR\xd8\xdcT\xee\xaa\xef\x82:\xa2+bo\xaa\xa7\x01\x0448\x1518U'\x80\xc1\x16\xa7:h\xf8\x0c&\xa7\xca4\x94\xa0\xcd\xa9\xdc\xf5@=$\x815io-\xd3\x0f\x89`M\x9a[\xab=\x80d\xa0\xe24\xda\x9d*\xd3\xd0\x1a\x0cO\xe5\x86}?\xb4\xb1M,O\xf54\x80\x80\xa6\xa7\"\xa6\xa7\xea\x040\xd8\xf6T\x07\x0d\x9f\xc1\xf8T\x99\x86\x12\xb4>\xb9[\xf4N\x83\x0bz\x0d\x05\x9d\xe4\x0b\xc9o\x80@k\n\xda \xa0\xb4\x17\x10\xf0A\xc7\xcbz\x02Ag:\xea\x8c^\xfe\x0dx\x10E0t\x08\xea\x0f\x9d\xf4\x8b@\xee\x0f\xd4\x1d:\xe9\x17\x81\xda\x1d\xa87*\xd6\xbe7PgT\xc4\xd9p\x93\xb9\xd2\x97\xde\xa1p\x01\x8f\xa2\xa0N@!\xf9\x14:`M\x01;\x01\x90\xf5\x04\xf0+4\x9c\xbc#\x80k\xa1\xa1\xa5\xfd\xd0\xbd\x8bb=t\x03\x94 u\x07\x8a\xb5\xdc\x11P(\xd4\x1d(\xd6jW@\xa9\xa8x\xfb\xce\x80bQQ\xb3\xee@r\xe9\x9d\x0d\x17\xf06\n\xea \x14\x92\xbf\xa1\x03\xd6\x14\xb0\x13\x00Yg\x00\x9fC\xc3\xc9\xbb\x02\xb8\x1d\x1aZ\xda\x11}\xec\x93 \x8euD\x0b\xe2\xe8Z!iU\x80#}\xd1`k\x0e\xdbI\xb05\x1c\x1e\x1e`\xcc\xacG\x1ax\x06#'\x9dR\x80\xcd\xab\xf2\xb9\xdbX\"9\xfc\x8e\xd0#\x00\x81\xf1\x1c\x03\xec$@8\xaa\x03q\x1ab;\x10-\x14\xe15cA\x1e\x06\xe0\xad\x8e\x87z\x0c\xba\x93\xa0-\x01\x1f\x88\xdd\x16\xf6\x81\x0d\x18\x83\xbff$\xfe\xc3\xefy\xf3\xa3Q \x03\xee$`s,\x08\xe2\xb6D\x84 zS\\\xd8\xd8CC\xfc\x9a\xb7=\x16 2\xd8N\x825\x86\x89 fs\xb0\x08\"7\x84\x8c\xcdX\xd4\x88\x01x\xdb\xe3\xb1#\x83\xee$hK\x04 b\xb7\xc5\x91`\x03\xc6h\xb2\xb1\x07\x94\xf85o},\xacd\xb0\x9d\x04k\x0c.A\xcc\xe6\x10\x13Dn\x084\x89q1\xc5\x9a\xd4\x04UO\x12\x14\x18q2\xc8N\x86\x84\xe3N\x18\xab!\xfa\x84\x11C1(\xb1&\xd60\x94\x1a\x9e\xeaI\x025\x07\xa3\x0c\xbc\x93\xc1-!)\x8c\xdf\x16\x98\xc2M\x18\xc3SbVl\x11*5@\xd5\x93\x04i\x8cS\x19t'C\x9b\xa3U\x18\xbb%f\x85\x1b0E\xae\xc4\xbeX\x82Wj\x88\xaa' \xd0\x14\xc22\xe0N\x066\x06\xb20ns8\x0b\xa37\x04\xb5\xc4\xb8X\xe3Zj\x87\xaa' \xd4\x1c\xdd2\xf0N\x06\xb7\xc4\xb80~[\xa4\x0b7a\x8cw\x89\xa5\xb1\x84\xbc\xd4$UO\x12\xa0)\xf0e\xc0\x9d\x0cl\x0c\x7fa\xdc\xe6 \x18Fo\x08\x85\x9b\xf1h\x98\x80p\xf3<%&\xe6\x15:\xb9\x82-26\xb4a\x8d\x8f\x0d\xcd\x98\xa3\xe4f4P&\x10=\x19\xe3\xe12\x87\xefdxK\xd0lh\xc1\x16:\x1b\x1a1\x06\xd0\xcdX\x0cM\x00z\x1aF#i\x0e\xde\xc9\xe0\xe6x\xda\x80\xdf\x12U\x1b\x9a0\xc5\xd6\xcdxxM@z\x1a&\x04\xd9\xbcB'W\xb0\x85\xda\x866\xac\x01\xb7\xa1\x19s\xd8\xdd\x8cE\xde\x04\xa0\xa7b4\xfe\xe6\xe0\x9d\x0cn\x8e\xc2\x0d\xf8-\xb1\xb8\xa1 SD\xde\x8c\x06\xe5\x0c\x82\x131!4\x1fjtj\x0dc\x80ni\xc5\x1c\xa6[\x1a\x82\x82u\xcb\xde\xb5\xdc\xcd\x13s\xb4\x8e\xdf\x11\xca\x04 0Zg\x80\x9d\x04\x08G\xeb NC\xb4\x0e\xa2\x85\xa2\xf5<\x19\x89\xd61\x00ou<Zg\xd0\x9d\x04m\x89\xd6A\xec\xb6h\x1dl\xc0\x18\xad\xe7\x89=Z\xc7\xefy\xf3\xa3\xd1:\x03\xee$`s\xb4\x0e\xe2\xb6D\xeb zS\xb4\x9e'\xd6h\x1d\xbf\xe6m\x8fE\xeb\x0c\xb6\x93`\x8d\xd1:\x88\xd9\x1c\xad\x83\xc8\x0d\xd1z\x9e\x8cD\xeb\x18\x80\xb7=\x1e\xad3\xe8N\x82\xb6D\xeb v[\xb4\x0e6`\x8c\xd6\xf3\xc4\x1a\xad\xe3\xd7\xbc\xf5\xb1h\x9d\xc1v\x12\xac1Z\x071\x9b\xa3u\x10\xb9!Z'\xc6\xc5\x14\xadS\x13T=IP`\xb4\xce ;\x19\x12\x8e\xd6a\xac\x86h\x1dF\x0cE\xeb\xc4\x9aX\xa3ujx\xaa' \xd4\x1c\xad3\xf0N\x06\xb7D\xeb0~[\xb4\x0e7a\x8c\xd6\x89Y\xb1E\xeb\xd4\x00UO\x12\xa41Zg\xd0\x9d\x0cm\x8e\xd6a\xec\x96h\x1dn\xc0\x14\xad\x13\xfbb\x89\xd6\xa9!\xaa\x9e$@S\xb4\xce\x80;\x19\xd8\x18\xad\xc3\xb8\xcd\xd1:\x8c\xde\x10\xad\x13\xe3b\x8d\xd6\xa9\x1d\xaa\x9e$Ps\xb4\xce\xc0;\x19\xdc\x12\xad\xc3\xf8m\xd1:\xdc\x841Z'\x96\xc6\x12\xadS\x93T=I\x80\xa6h\x9d\x01w2\xb01Z\x87q\x9b\xa3u\x18\xbd!Z\xcf\x93\xd1h\x9d\x80p\xf3<%Z\xe7\x15:\xb9\x82-Z7\xb4a\x8d\xd6\x0d\xcd\x98\xa3u\x0cf\x8f\xd6 DO\xc6x\xb4\xce\xe1;\x19\xde\x12\xad\x1bZ\xb0E\xeb\x86F\x8c\xd1:\x86\xb2F\xeb\x04\xa0\xa7a4Z\xe7\xe0\x9d\x0cn\x8e\xd6\x0d\xf8-\xd1\xba\xa1 S\xb4\x8e\x81F\xa2u\x02\xd2\xd30!Z\xe7\x15:\xb9\x82-Z7\xb4a\x8d\xd6\x0d\xcd\x98\xa3u\x0cf\x8d\xd6 @O\xc5h\xb4\xce\xc1;\x19\xdc\x1c\xad\x1b\xf0[\xa2uC\x13\xa6h\x9d\xa7\xe5c}\x04\xa2u\x06\xc1\x89\x98\x10\xad\x0f5:\xb5\x861Z\xb7\xb4b\x8e\xd6-\x0dM\x8c\xd6\xf9 \xaf\xdc\xcdN\xe6h\x1d\xbf#\x94 @`\xb4\xce\x00; \x10\x8e\xd6A\x9c\x86h\x1dD\x0bE\xeb\xd9i$Z\xc7\x00\xbc\xd5\xf1h\x9dAw\x12\xb4%Z\x07\xb1\xdb\xa2u\xb0\x01c\xb4\x9e\x9d\xec\xd1:~\xcf\x9b\x1f\x8d\xd6\x19p'\x01\x9b\xa3u\x10\xb7%Z\x07\xd1\x9b\xa2\xf5\xecd\x8d\xd6\xf1k\xde\xf6X\xb4\xce`; \xd6\x18\xad\x83\x98\xcd\xd1:\x88\xdc\x10\xadg\xa7\x91h\x1d\x03\xf0\xb6\xc7\xa3u\x06\xddI\xd0\x96h\x1d\xc4n\x8b\xd6\xc1\x06\x8c\xd1zv\xb2F\xeb\xf85o},Zg\xb0\x9d\x04k\x8c\xd6A\xcc\xe6h\x1dDn\x88\xd6\x89q1E\xeb\xd4\x04UO\x12\x14\x18\xad3\xc8N\x86\x84\xa3u\x18\xab!Z\x87\x11C\xd1:\xb1&\xd6h\x9d\x1a\x9e\xeaI\x025G\xeb\x0c\xbc\x93\xc1-\xd1:\x8c\xdf\x16\xad\xc3M\x18\xa3ubVl\xd1:5@\xd5\x93\x04i\x8c\xd6\x19t'C\x9b\xa3u\x18\xbb%Z\x87\x1b0E\xeb\xc4\xbeX\xa2uj\x88\xaa' \xd0\x14\xad3\xe0N\x066F\xeb0ns\xb4\x0e\xa37D\xeb\xc4\xb8X\xa3uj\x87\xaa' \xd4\x1c\xad3\xf0N\x06\xb7D\xeb0~[\xb4\x0e7a\x8c\xd6\x89\xa5\xb1D\xeb\xd4$UO\x12\xa0)Zg\xc0\x9d\x0cl\x8c\xd6a\xdc\xe6h\x1dFo\x88\xd6\xb3\xd3h\xb4N@\xb8y\x9e\x12\xad\xf3\n\x9d\\\xc1\x16\xad\x1b\xda\xb0F\xeb\x86f\xcc\xd1:\x06\xb3G\xeb\x04\xa2'c<Z\xe7\xf0\x9d\x0co\x89\xd6\x0d-\xd8\xa2uC#\xc6h\x1dCY\xa3u\x02\xd0\xd30\x1a\xads\xf0N\x067G\xeb\x06\xfc\x96h\xdd\xd0\x84)Z\xc7@#\xd1:\x01\xe9i\x98\x10\xad\xf3\n\x9d\\\xc1\x16\xad\x1b\xda\xb0F\xeb\x86f\xcc\xd1:\x06\xb3F\xeb\x04\xa0\xa7b4Z\xe7\xe0\x9d\x0cn\x8e\xd6\x0d\xf8-\xd1\xba\xa1 S\xb4\xce\xd3u\xb2>\x02\xd1:\x83\xe0DL\x88\xd6\x87\x1a\x9dZ\xc3\x18\xad[Z1G\xeb\x96\x86&F\xeb}\x1e\x94\xdc\xed2s\xb8\xdee,\xb4\x16\x80\xc0p\xbd\xe3G\x92E@8\\\x07q\x1a\xc2u\x10-\x14\xaew\xd9H\xb8\xdee,\xa0\x16 \xcd\xe1z\xc7\xcf(\x8b\xd0\x96p\x1d\xc4n\x0b\xd7\xc1\x06\x8c\xe1z\x97\xd9\xc3\xf5.c!\xb5\x00h\x0c\xd7;~\x80Y\x046\x87\xeb nK\xb8\x0e\xa27\x85\xeb]f\x0d\xd7\xbb\x8c\x05\xd5\x02\x9c)\\\xef\xf8\xe9f\x11\xd6\x18\xae\x83\x98\xcd\xe1:\x88\xdc\x10\xaew\xd9H\xb8\xdee,\xa0\x16 \xcd\xe1z\xc7\x0f=\x8b\xd0\x96p\x1d\xc4n\x0b\xd7\xc1\x06\x8c\xe1z\x97Y\xc3\xf5.cA\xb5\x00g\n\xd7;~&Z\x845\x86\xeb fs\xb8\x0e\"7\x84\xeb\xc4\xb8\x98\xc2uj\x82\xaa' \n\x0c\xd7;~dZ\x82\x84\xc3u\x18\xab!\\\x87\x11C\xe1:\xb1&\xd6p\x9d\x1a\x9e\xeaI\x025\x87\xeb\x1d?C-\x81[\xc2u\x18\xbf-\\\x87\x9b0\x86\xeb\xc4\xac\xd8\xc2uj\x80\xaa' \xd2\x18\xaew\xfc\x80\xb5\x04m\x0e\xd7a\xec\x96p\x1dn\xc0\x14\xae\x13\xfbb \xd7\xa9!\xaa\x9e$@S\xb8\xde\xf1\xd3\xd7\x12\xb01\\\x87q\x9b\xc3u\x18\xbd!\\'\xc6\xc5\x1a\xaeS;T=I\xa0\xe6p\xbd\xe3\x87\xb2%pK\xb8\x0e\xe3\xb7\x85\xebp\x13\xc6p\x9dX\x1aK\xb8NMR\xf5$\x01\x9a\xc2\xf5\x8e\x9f\xd9\x96\x80\x8d\xe1:\x8c\xdb\x1c\xae\xc3\xe8\x0d\xe1z\x97\x8d\x86\xeb]\xc6Ci\x11\xd8\x12\xaew\xfd1n\xa9\x82-\\7\xb4a\x0d\xd7\x0d\xcd\x98\xc3u\x0cf\x0f\xd7\xbb\x8c\x07\xd3\"\xac9\\\xef\xfa3\xde\x12\xbc%\\7\xb4`\x0b\xd7\x0d\x8d\x18\xc3u\x0ce\x0d\xd7\xbb\x8c\x87\xd3\"\xa81\\\xef\xfa\x03\xe0\x12\xb89\\7\xe0\xb7\x84\xeb\x86&L\xe1:\x06\x1a \xd7\xbb\x8c\x87\xd2\"\xb0%\\\xef\xfas\xe1R\x05[\xb8nh\xc3\x1a\xae\x1b\x9a1\x87\xeb\x18\xcc\x1a\xaew\x19\x0f\xa7EPc\xb8\xde\xf5\xc7\xc6%ps\xb8n\xc0o \xd7\x0dM\x98\xc2u\x9e\xc6\x97\xf5\x11\x08\xd7\xbbl\x08\xa4ehS\xb8\xde g\xc9\x95\x1a\xc6p\xdd\xd2\x8a9\\\xb74\x04\x86\xebK\x96\xc7\x16%n\x96\x16\x9f\xf7\xfb\xe8\xd8\xa2\x1a\xc8 \xd8J9\x14\xb9\xf7\xa8\xa5B|\xa8\xca\xb4hQ\xed\xa2/\xa8h\x1b\x9a\x9e\x8f\xa7O\xbe\xbb{8D\xf1\xe7\x13\xc9\xd1\xec\xc6eV\xd6{!\x13\x9e\xf7\xe1e\xd9\xa2\xaeu\xf3\xb2(I2\xbf\xe7cY\xb4\xee1\xca\xd3\xeci\xff\xd3\x1f\x7f,\x8b\xd2\xfd+:]\xb2\xa8^\xfc\x88\x8a\xac\\\xfcX\x16Q\\.\xbe/\x8b\xa6\xcc\xa2fq\xf7Cz@u\x84iw0\xf8\xdd\xe2\xee\xfb\xf2R\xa7\xa8v\xfe\x82\x1e\xef\x16=j\x91o\xa4Q\x96\xc6\xfa\x99\xfc\xa0 \x80\xb5\xcc\xd6\x0c\x94\\\xd4\xa0\xe7\x1c\xd4\xe0\xd8\x95\x0ez\xbaD\x0d\xb2\xad/E\x1c\xb5H\xcd\xee\xf9@\xde\xf6\x85(\xcb\xd2\xaaI\x1b \x03#C\x84\xe5!v!S\xf2\xcc\x92WD\x8a\"\x14)\xd0\xc0X>g\x01NK\xd5l\xce{@j\xf1d\xc4c\x04\xf5 \x89Gi\x1anJ\xb7\x91e9\xe1A\x15,\x99FW\x9f\xa0x\x94\xae\xe1\xae\xc8\x99t\xf1\xbd,Tz\xa7it\xf5 \x8bG\xe9\x1an\xcb\x99IW\xbfjG\xea\xf1\xe4\xc5c\x84\xf5 \x8cG \x1b\xf2\x85[ c\xbd(\x1fQ\x1dG\x0d\xa2\xc0m\x1d\x15\xcd\xb1\xac\xf3}\xffB\xc3\x7f\xa9*\xb8J\xffB\xd7\xf7\xa8J\xdb(K\x7f\xd1\xea\x0co\xc4J\xc48=\x92\xf4\x8dnFz-\x94\xecW\x9eg\x05F\xb5\x04\xce\xcaLU\xa8\x85\x91j\xac\xcd\x0d\x1c\xca,\x91`\xb7vX\x85\x16Z\xa4U ,\x88)d\xd3>ehOKt\xfb\x88\xad\xd33\xb5\xef\xef\x8e\xc7\xa3\x06P\xd5i\x1e\xd5O\x1c\xc4\xf3\xb6\x07 *\x92\xc0h\x9a\xd8\x85Rx\xc6Vq\xc0\x10n\x0e+\xddZ\xa0\xb8,\x12\xa1\xa5M\xbc\x0d\xb7\x89\xdeR\x0f(\xb75\x14K\xad\xad\xef\xd7\xc7p\xad\xb7v\x89c\xd44\x1c*\xd8E\xdbu\x08\xb4E\xc1\x94\x96X\xa1\xd4\x8e\x7f\xbf\xb9\x0ft\xf6\xa6\xc5\xb1\xecA\xb6Qp\xd8\xe9\x8d`\x18\xb9\x05R\"3\xed\xb8\xd9l\xf5n<Fu\x91\x16\xa7A~\xb1\xefm\xf5\x16\x18\x98\xdc\x08/\x94\xda9D\xbb\x83\xac\x7f\x046\x89\x8a\xd3\x00\x94\xc4\xab\x10\xe2\x16\x85\x92[aeR#\xd1\xd6O\x82H\xb7\x7fd\\\xf2\xae\xec\x8e\xf7\xc7Ho\x83\x00\xc9M\xd0\"\xa9\x85\xf8\x90\xac\x12\xbd\x85$\xaa?s\x90\xd5z\x15\xad=\xa8\x13\xf5g\xb5\x0b\xf5gE\xd8\x81\xbf\xf67\x1a\xfaC\x99\xf4\xda\x1b\xf8A\x18\xdck \xf9\xa5E\x89Q\xc3\x19\x9a,\x8a?\xbb\xa1\xf7\xacy]K9\xfb\xf00\x80\x15\xe8 \x0c\x17\xfc\xffP\x9ds\x9aP\x7fm\xef}\xf4\x9c\xe8\x81V%6\xb4\x8ajT\xb4\xd4\x97\x11\xb2\x19\xeb\xce\xa0\x08=d\x94\xa6\x0cCqI\xfd:\x9a\x19Y)\xd4\xd2#\xd3^\xd7(\xfa\xfc\xfcX\xd6 }\xdc\x93\xff\xba\xb8`\x80\xed\x13K\xd3\x1b\xb0 \x10\xee7\xa1\x06qeJ\x8b3\xaaSi^cy\xa9\x9f\xc9\xdf4K\xdb'\x9e\xaaZ\x84J\x0b\x00N\xcb\xe5\xce&\xe4\xaaN\x8b\xf6\xf9\xb7\x0b\xe6\x97/\xf6\xfb\x03:\x965\xeb>\x98\x19\xfa\xc1\x9c3:\xda\x17e\xfb\xf5\xf2\xd0\x16\x1f4\xfe]\x8a\x04\xd5YZ\xa0\x97\xe8p\xa8\x7fn\xd36C\x9fx8\xd0;\xf0\xce\xd7wN\xd4\xb6\xf5\xd7\xe4\xfd\x07\xe7\xee\xc3\xddKU#\xc9\xc5\xadj\xe4*N\xee!+\xe3\xcf\xff\xebR\xb6h\x81\xa1\x99h\xfd\xaas\x9a2K\x13\xe7]\x94\x1c\xc2C\xf2PE'D%\xe5\xa6E\x93&h\x1f})\xd3\xe4\xa5=\xa3(yN\xd2\xa6\xca\xa2\xa7}\x1b\x1d2\xe4\xe2\"T\xbbX\x7f\xaa\x974?-\xda\xfa\xd9T\xff\x1c,\xce\xabE\xf5\\\xd6\xd59*\x9a\xfd\xea\xe11M\xca\xc7f\xbf\xa2\xaf\xc4\x8a\xa4\xc7\xac\xde\xbf\xe2\xf2\xe7&\xfd\x05\xed\xa3\xd5\x0b\x19\x8a\x8a\xe7&J\x16s)J\x0bT\xdb\x80\x8a\xe8\xcb!\xaa\xfb\xbe` \xbd,\x0fQr\x82\xd8\xe2yX\xfdqw\xd9K<N\xb2\xa8j\xd0\x9e?HJ\x8a!\x9d6Y\xf0\xa7\xf3\xb36\xc4\xb4\xf9\x980\x93bG\xc9PY(:\x03\x94%\x08\x05h\xa3#\x12\xac!\x1b!\xe2\x1b\xa7\xc5<\xfc\x86\xfcw!\x95'\xf2\xcf\xb3\xf2\x13E\x02\x1d\xbc'\x94\x06\xde\xed%\x81\xe2\x15d\x1a\x1e\xc0\x8a/\xbf\xf9\xf8\xdbwNS^\xea\x18\xfd\x18UUZ\x9c\xfe\xf3\xaf?|{(\xcb\xb6i\xeb\xa8Z\xe6i\xb1\x8c\x9bf\x99G\x95\xf3\xdb\x8f\xbf\xf9\x0d&\xdby\xfe\x8d\xe3P<\xce\xbb\xd5j\xf5\xf0\x1b\xc7\x11\xa3T\xe7\xee\x8fi\x1d}_&\xe8nA\x9fi\x18\xea\xdc\x91\x80\x15?\xfc\xe7\xe1R\xb4\x17\x87\x97\xff\xf9\xf7?:\xff\x91\xa1\x8e\x16`|\xc2Z\x82\xb3\xf3\xaa\xee\xe17/\xbf\xf9M\x9b\x90\xa6\xe5\xe5Y\xc7\x0f\xd9\xeb\xaaF\xe4=\xf5\xce\xb0\xc6:\xfe\x8e\xbds\x96Iz<\xbaQBQ8}\x07N5B\xc5\xc3o\x9c\x17\x0e\x92\xa0\x0c\xb5H\x81\xaaQB`>\xfe\xd6\xf9}\xafN\xceo?:\xcb\xf8\\\x97y\xe4<;\x9a\x9a9X\xcf\x8e\xc7#\xad\xf6\x87\xba.k\xb1\xc6\x12\xd5\xb5\xf3\xec\x0c\xb0\x9e\xe7y\x0f0\x9a(\x8a\"\x8a\xe6\x87\xb4@\x7f\xc3\xc2\xfe\xdb\xbfI\xc8\xb2\x023\xc7\xf9\x82\xea6\x8d\xa3\x8c\x05\x13N[V\x0f\x9c_{\xc7{`|%\x8fL\xa3\xf1\xa3\x8cZEL\xca\x9e\x19<\xb1p\x1c\xdb8fj\x02\xc8M\x88\x0fN\x1f\xc4\xb3\xdf\xdc\x028\xc48\nd\xfc)=\x9d\x89\xfb!\x91r\xce\x9cg\xad\x0ek\xc0\xf7\xbc\xf7\xfad\xea\xbcC!\xfew\xc0\xfc\x97K~@u\x03\xf6\xd3yv\xa4\x05)\xc7[\xaeQ.\xf6\x92\x96\xf0\xbf\x0f\xbc\x91\xed\x11\xff\xab5\xa2\xe0\xbf \xfa\xff?z\xc2\xf3\xb2\x84\xfa\xb3\xa0FX\x89\xb8\xae0\xd8\xef\xcb\xa2\xc1\xf6I\xae\x13\xdb+\xfd\x1b\x8a\xb3\x88-\"I\xf5\x12{\xbd\xbfD9\"s\xa0\\\xab\xb0\xd7\xfa\x8f\x06]\x92R\xaeR\xd9\xab\xfc\x155\xa8\xfe\x82\x14N\xd4\xf6J\x7f{\xaa\x14\xc2Z\xa9\xc20\xcep?~\xd7\xb2\x0b\xd7\xa4*E$T\xf1\xd1\xbd\xc7G8\xae\xf2\xfbK\x9a\xb5\xa9\xcc\xb2\xe2`i\xe3\xfb,jdE)b\x05\x1c[\x05\xd5Uqz_E@\x05\xc9\xb9(\x05l\x18\x97\xe7\x0d5\xfe\x8d\"T\xecR!\x8axG\xfe\x19\xaa\xfc\xa1h\xd3\xf6I\x86O%xj\xc6\xc4X\xda\xc1\xc1\xf4\x80\xe2\x8f\x97\"\xd6\xf4\xaa8j\xbd\x1ej\xc0JU\x14\x1a_\xa71\xeao\xd1IF\xd4j\x12\xb5v\xe0\xff\x89\xeaT\xb3\x1f\xc5\x17\x03\xa3\x7fH[TG\xd9Om\x9d\x16r\xbb\x8dT#\x0c\xc1\x1a\xbf;\x1e\xd3N\xae\x16M\xa9\x87\xa7\xa96\x8d?\xcbU\x0fS\xaa~\x7f\x8ed\x8dh\xe2)\xd5\xfe\x0dei\x8e\x0b\xa4\xbaI6\xa9n\x19\xcb-&\xd3j]T14\xc1\x94\x8a\x7fh\xe2H\xb1\x04\x0d\x9aR\xf1O\xd8\x1dTi=O\xa9\xf9\xe7\xa2EuUfr\xd5tJ\xd5\x7fo\xcf\nS\x9bnJ\xbd\xbf\xa2\x13RTG\xb6\x8f\xf7\xf7\xf7\xf7@\xbd\x9f\xd2\xe2\xa4\xb2\xd5\x9f\xd2\xe0OO\xf9A\xedac\xb0\xc8\xac\"\x9d*\xa5*\xb9\x9dFZ\xe3\xf7\x8a\x91\xcd\x0fSj\xfd1+#\xd9>\xe6\xc7)\xf5\xfe\xa4\xf01?O\xa9\x85E~R;\x97\xce\xa8\xf9C\xa9X\x8c4\x9bR\xfb\xdfc\xa5\x8f\xa5\xa1\xd6\xbfW\x88\x98\xff\xff\xa6z\x14\xe5\xa3Aj\xdf\x97y\x8e\x94)F6\x0e\xd4\x0c\x0b\x0b\xa4\x0e]!\x95\xea\xff)j\xce\x87H\xe9\\|\x9e\x8f\xe8\xc7K\xd6\xa6\xc4\xbaK\x98\xf2\xf9\x98\x00\xa5\x8f\xfd+\xd0T(N#y\x0c\xc4\xfa\x18\x18\xc5\xf3\x1f5\xaaj\xc5\xd0\xc4\xa2K\xb4\x8ew+\x7f\x0b\xd5\xf9c\xaa\xf6\xa3:\x1a*\xfe\xffP\x81\xea4\xfe7\x12\xf2\xc8*pJ\x0c\xf3\x19\xab\xf3\x87\xbc:\xcb\x15\xb0\x015\xf5\x8aW\xd2\x82\xa0Smo\xe6O(J\xd4y\xf3tV\xf8\xb93;\x1c\x0c\xcd\x9f\x8b\x06\xd5Z\x17\xe5\xb18\xf8\x1c\xac\xd2\xbf_\xda\xea\"\xeb\xfaI\x1cJ\xa2o\xc4\xaa\xfcG]\xe6\x95RE\x94ZH\xfe\x91\xaa\xfc\xd4\xd6\xea0?5\x9c\x95\xc6\x0e\xfdt9\x9c!\xd6\\D\xfa&\xb1\xe6ou\x14#\x1c9\xc9\x88Z\xbb\\\xfe\xb3w\xab\xa4Z\xd8>\x8d\xb9`\x7fC]\xfb\xdf\xcei\x0b\xb8t\xa2\xd99\x90\x7f\x9c\x97\xdf\xfc\xbf\x01\x00\x00\xff\xffPK\x07\x08\xdb\xb5\xcb\x95\x7fb\x00\x00\xa3\x82\x02\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00 \x00tree.htmlUT\x05\x00\x01\x80Cm8\xb4T\xc1\xaa\xdd \x10\xdd\xfb\x15\x83t{#o\xfb\xf0\n\xdd\x14\n\xed\xa3\xbc\xf6\x07&7\x93D\xea\xd5`L(\x04\xff\xbd\x18cnB[h\xa1o\x951g\xce\x9c\x19=\xba,\x10\xe8>\x18\x0c\x04\xbc'l\xc8s\x88\x91\xb1e\x81w\x9e\x06\x07\xcfW\xa8^ip/x\xa7\x84$`\x9c\xea\xe0\x89V\xec\xebT\x7fK\xf1\x06yj7J{d\x0c\x18\xfa\xf5\xff\x97\x14$\x01&\xfb'\xb5,\xa7\xe2R\xf4O\x8a1iq\x86\x9b\xc1q\xbcr\x8bs\x8d\x1e\xf2\xe7B?\x06\xb4MY\x19\xdd\xf5\x01\xea.\x07\\1\x00\xd9\xe8\x9dzs\xc6\xe00RI/k\x0e\xba)\x85_p^y\x00r2g\xcd\x8b\xdd1\x00i\xf4\x01\xbd\xe8@\xf7\x1d\x03\x90x\x04\x8d\xb6\xdf9\xf4\x9e\xda+\x17\xfb>\xc6\xc8\xd5\xfb\xdaMA\n\xdc\xab\n\xa3\xff\xa7\x82\xf0\xd4\x8e\\\xbdR;\xbe\xa5\x8aq\x1dW\x9f\\\xf7\xf7\x1a\x80\xb7\xa0g\xfaw\xa9d3\xae\x92\xc1~+&\xc5d\xd6c\x17\x8d\x9e\x15\x93\xc2\xe2\xac\x18\xf3\xd4>C\xf6\xd6\xeeB&\x87\xccIV\xcch\xf1\xa2\x14Cr]\xc0\xdaP\xceY\x16\xf0h;\x82\xea\x8364\xa6\xa4U.\xf8\xc3\x04\xa1y,6\xd2\x9a\xfe\xd95T\x18\xb9\xc9c\xe6/4\x89\x7f\x1a\\\x94\x0b\x15c\nu\xbb\xdd\xa3\x18\xf7+\x95\x11\xb2M\xfeYm\xd3\xf2\xb3D\xe9nCs-\xeb\x02T\xa9\xd7\xea\xe3\x98\xda>\xd5:w\xf8\xd8\xfa\xe34R\x94\xedx\xd0\xf2\x81\xb0\xd3\xb3\xd2:\x17\xb6g\xe5g\x00\x00\x00\xff\xffPK\x07\x082\xfeh\xf4\x90\x01\x00\x00o\x04\x00\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\x8cW\x8f\xfaA\x00\x00\x00K\x00\x00\x00\x08\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00404.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(-W\xce\xd1O\x00\x00\x00Y\x00\x00\x00\x08\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x80\x00\x00\x00500.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(7j\xf4\xfc:\x01\x00\x00J\x03\x00\x00 \x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x0e\x01\x00\x00blob.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\xcc\x1f.-\xac\x00\x00\x00=\x01\x00\x00\x0b\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x88\x02\x00\x00commit.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(fO\x80\xee?\x00\x00\x00=\x00\x00\x00\x0b\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81v\x03\x00\x00footer.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(; S`{\x01\x00\x00e\x03\x00\x00\x0b\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xf7\x03\x00\x00header.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(=.C \xde\x00\x00\x00\xf1\x01\x00\x00\n\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xb4\x05\x00\x00index.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(tx1v\x9f\x01\x00\x00\xa9\x04\x00\x00\x08\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xd3\x06\x00\x00log.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\x95\xae\xa7\x13f\x01\x00\x00\xde\x04\x00\x00 \x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xb1\x08\x00\x00refs.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(oGNk\x1b\x01\x00\x00 \x03\x00\x00\x0f\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81W\n\x00\x00repo-index.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\xdb\xb5\xcb\x95\x7fb\x00\x00\xa3\x82\x02\x00 \x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xb8\x0b\x00\x00style.cssUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(2\xfeh\xf4\x90\x01\x00\x00o\x04\x00\x00 \x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81wn\x00\x00tree.htmlUT\x05\x00\x01\x80Cm8PK\x05\x06\x00\x00\x00\x00\x0c\x00\x0c\x00\n\x03\x00\x00Gp\x00\x00\x00\x00" + fs.Register(data) + } + \ No newline at end of file