From d516de57ad6d9df8aed9217cf74d33d7d4a60646 Mon Sep 17 00:00:00 2001 From: Scott Little <scott.little@windriver.com> Date: Wed, 1 Aug 2018 12:21:55 -0400 Subject: [PATCH] Relocate wrs-branding to stx-integ/utilities/branding Move content from stx-utils into stx-integ or stx-update Packages will be relocated to stx-update: enable-dev-patch extras stx-integ: config-files/ io-scheduler filesystem/ filesystem-scripts grub/ grubby logging/ logmgmt tools/ collector monitor-tools tools/engtools/ hostdata-collectors parsers utilities/ build-info branding (formerly wrs-branding) platform-util Change-Id: I40b3c3cdd4a8e7b93f2436ff1c1d4c37317a1bf2 Story: 2002801 Task: 22687 Signed-off-by: Scott Little <scott.little@windriver.com> --- centos_pkg_dirs | 1 + utilities/branding/LICENSE | 202 ++++++++++++++++++ utilities/branding/centos/build_srpm.data | 2 + utilities/branding/centos/wrs-branding.spec | 28 +++ utilities/branding/sources/LICENSE | 202 ++++++++++++++++++ utilities/branding/sources/horizon/README | 74 +++++++ .../sources/horizon/sample_branding.tgz | Bin 0 -> 11874 bytes .../branding/sources/login-banner/README | 132 ++++++++++++ .../sources/login-banner/sample_banner.tgz | Bin 0 -> 963 bytes 9 files changed, 641 insertions(+) create mode 100644 utilities/branding/LICENSE create mode 100755 utilities/branding/centos/build_srpm.data create mode 100755 utilities/branding/centos/wrs-branding.spec create mode 100644 utilities/branding/sources/LICENSE create mode 100755 utilities/branding/sources/horizon/README create mode 100755 utilities/branding/sources/horizon/sample_branding.tgz create mode 100755 utilities/branding/sources/login-banner/README create mode 100644 utilities/branding/sources/login-banner/sample_banner.tgz diff --git a/centos_pkg_dirs b/centos_pkg_dirs index e6e633552..6d86ffae2 100644 --- a/centos_pkg_dirs +++ b/centos_pkg_dirs @@ -109,3 +109,4 @@ kubernetes/docker-distribution kubernetes/helm logging/logmgmt filesystem/filesystem-scripts +utilities/branding diff --git a/utilities/branding/LICENSE b/utilities/branding/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/utilities/branding/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/utilities/branding/centos/build_srpm.data b/utilities/branding/centos/build_srpm.data new file mode 100755 index 000000000..188f58ba0 --- /dev/null +++ b/utilities/branding/centos/build_srpm.data @@ -0,0 +1,2 @@ +SRC_DIR="sources" +TIS_PATCH_VER=6 diff --git a/utilities/branding/centos/wrs-branding.spec b/utilities/branding/centos/wrs-branding.spec new file mode 100755 index 000000000..5ce029832 --- /dev/null +++ b/utilities/branding/centos/wrs-branding.spec @@ -0,0 +1,28 @@ +Summary: Titanium Cloud Branding Information +Name: wrs-branding +Version: 4.0.0 +Release: %{tis_patch_ver}%{?_tis_dist} +License: Apache-2.0 +Group: base +Packager: Wind River <info@windriver.com> +URL: unknown + +Source0: %{name}-%{version}.tar.gz + +%define cgcs_sdk_deploy_dir /opt/deploy/cgcs_sdk + +%description +Titanium Cloud Branding allows alternate branding to be used for Horizon +in place of the default included with Titanium Cloud. + +%install +rm -rf $RPM_BUILD_ROOT +mkdir -p $RPM_BUILD_ROOT/%{cgcs_sdk_deploy_dir} +install -m 644 %{SOURCE0} $RPM_BUILD_ROOT/%{cgcs_sdk_deploy_dir}/%{name}-%{version}.tgz + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +%{cgcs_sdk_deploy_dir} diff --git a/utilities/branding/sources/LICENSE b/utilities/branding/sources/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/utilities/branding/sources/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/utilities/branding/sources/horizon/README b/utilities/branding/sources/horizon/README new file mode 100755 index 000000000..fda4d4983 --- /dev/null +++ b/utilities/branding/sources/horizon/README @@ -0,0 +1,74 @@ +Copyright © 2014-2017 Wind River Systems, Inc. + +SPDX-License-Identifier: Apache-2.0 +----------------------------------------------------------------------- + + +Titanium Cloud Custom Branding +------------------------------- + +Custom branding for the Titanium Cloud is achieved through the creation and application +of a tarball containing a customized horizon theme and associated branding files + + +Creating a Custom Branding Tarball +---------------------------------- + +The tarball containing the customized branding files must be of the extension .tgz; its +file name has no constraints. 'sample_branding.tgz' has been included as an example of +the end result. Please note that branding tarballs created for previous releases of +Titanium Cloud are not forward-compatible, and must be recreated to accommodate the +latest branding styles present in Horizon. An example of how to compress an existing +theme would be to do the following from inside the branding's root directory: + tar czf new_branding.tgz * + +Two types of items are required in the branding tarball: + 1) The contents of a valid horizon theme directory as documented here: + docs.openstack.org/developer/horizon/topics/customizing.html + i.e. in the top level of the tarball are the theme folders 'static' and 'templates' (if used). + Both the default and material themes included with horizon are available to be + inherited from if desired. Note that when referencing assets included in the custom theme, + the theme name will be 'custom'. + + To base the new theme off of the standard titanium cloud theme, or to view an example + of how the tarball should be formatted, refer to the example tarball named + sample_branding.tgz included with this SDK. + + 2) Also in the top level of the tarball, a file named manifest.py which is used to overwrite the default + horizon settings used by Titanium Cloud. A description of its contents are as follows: + + SITE_BRANDING is the name that will be used in the site title, note that there are + other occurrences of the branding name that must be changed directly in the templates, + + HORIZON_CONFIG["help_url"] is the link that the help button will redirect + users to, note that the knowledge library url must also be changed directly in + the template, + + Sample entries for these variables are shown below: + + SITE_BRANDING = "Sample System Name" + HORIZON_CONFIG["help_url"] = "http://www.windriver.com/support/" + + +Applying a Custom Branding Tarball +---------------------------------- + +This branding tarball can be applied at various stages, the steps for each stage are +described below: + + 1) Before running config_controller + i) Copy the branding tarball to the /opt/branding directory, once config_controller + is run this branding will be automatically used by horizon + + 2) After running config_controller + i) If a previous branding tarball was already in use, + delete it from /opt/branding, + ii) Copy the new branding tarball to the /opt/branding directory on the + active controller, + iii) Execute the command + sudo service horizon restart + this will process the new branding files on the active controller, + iv) Lock the inactive controller, + v) Unlock the inactive controller. + lock and unlock can coincide with login banner customization, see + also README.banner diff --git a/utilities/branding/sources/horizon/sample_branding.tgz b/utilities/branding/sources/horizon/sample_branding.tgz new file mode 100755 index 0000000000000000000000000000000000000000..59aba8614cc5f5a59cafc95a2f9aead754a489bf GIT binary patch literal 11874 zcmV-oE}hXIiwFRKaBoEd1MFK1TohH?9|`+l6H`N@ESuB_lf83MC<_FE6g1Ji77n|! zyA!iJ%gihbA|{&V?e+4SC2CrE$*fFLQ^b1FOs&vN?KN*{TIMBvO*85B!uOn++1=S2 z>Zeg(KMww7_nhaP=Q+3Ma?Zg@*eDap@hW=>_D3ZRq=dLQ_^nUWX*B4&7XAtOC~0+Z zm{zaTCurjmHSs!3qt$B?5-?nYH9~T5Ji+2P#&cGRw*;pf$dN3U!P>FESIW&Ake-*? zKP4wED<=bg0`HhhSnV{4=MYx1qaw3!|E!^XbMkuj&FPhuF|4D7r0sbQmhSi*BDL_m zJxQ&0I-M#r!<cDOWnir8jtZ<P{l7`D`gzKr{zG}7J)RgJA9Vjia_@g#BIpUNPN#wW zAK$e98*Bby<JuV;Y2!KdpF95=Z6eHnoIasx{{N);&&wx_W|C8J299f#`PU`DoO{oI zLPCP3$^JJ+QmYkeHJ&O=Ir^l$>7-DIEpQ}mpb3tHc2vR=!b=r6ZlpLnO_U_zl#Qlr zq%xmo3<b$hV5MwICuQU<Nw`*HFGg8*!f2#y<|JHiFUAwaJQHK%l^ivaOu{=0tt#C) z?qVlNnJv6GftZI#3=GY%?n2=k$`+)tc-NHWA(A4Jg}p)0N`j`$wj?|s`iMwSnbSh? zq>{4}29V6gI9bAuvU#$Ycaa-lJCOpfe8Ny*W*LXgsPvX5-z*d}tdV4uEMcS^oTp5l zo2&pj80K`VoiD+~9g2EJ6LuJP!of3ELXed%!DDO;j}t`%MHBhp$x${uE4^D6s2`m~ z3f0lP$Y#dIh+Qg^cs%2v3<bD}Du&TzUA&-`d<V}nHV%kX`MeE}mfEp19K}-%beJV+ z5TZzE42FWSC*ex1IE`geEoCw1t|$;_L}K^U13ez^ssj><OG(K&3<i?pq?$p;Q~0K| zvy_!!OOm0!RNY9}%p`kbwMAN4WhcSfK(?T@jRadj+G4yKk?O?4+J2-<vd|HvX&szT zPuv2q1T-j>3A`n8FUhYXu2jWa-kTB<?c_`b);*5eB4g2<<BSa!6<P|g_6s-#A=};2 zNftyMD||FD1_u{VQdChXP<r;Cv{#Izfnf=8{kRq)RCll(s&8i~*B%m91BjPmFu>sR zf<VG2P|Ij_+K3_~8%=S%63vfY2^-X^A`ECn;yrLt>R5#e2$gn<ra6@9E+*V0LJz#< z7pXk52VFrDA==hu-kfO4p9w5dGiX7YH1UGYgGzq|`){xiEZ>OsUlRv0zmNS-)ash- zf8*GHyeFD(d>}`_vdp!U2FgSkz=j+3d3K5vS3{mdC@qyN!~hF2D>hIQ1ZzN=9e%0A z3~~FLVAUt#o%G<wckeE4X^v-^0@Ag~g)C@E;78Clq!B3-PVpRWa?rF;9Ifg#uumVU zMOT}hos`YUQb?7sq)}|TtfA%z+RAXeyw#lal>U8&<Tc#5nW5dSi^}J39skSsKSvqK ze1g4w3g9~XKT(_LyZ;kGCp7K<#z@GdX4#A|^Ef!Sq=6@mxRtayaAZ9>MJH)7;3~#W z+F+;*1xh<%BWaiA^s{4H!Fv;Jb#9@9;w(4;CYv=<gbf$0p}SF~RKVDTW{BYanU#R{ zkvYvb%RPwe6uX^DRUB!>wJIHHP4?lCg!ABefg8`l2)G?pp@+y`mtLP->}gNL6**mu z372~389SHS%p?i$=y40g7c`17MEQj>+3*?(&XUg%tPu&|@vnkX2yR!b5YYr5K-Y-- z7P<X?kFz3t5*Wc!5F3mZ9T=Cgj22uO*Ei2Jc(kVw9VNR7<O3LNvc#cxsatWt(%c=j z2t$Wrj{u7Y3FkX!YPBqK)JhSBU#QjHo$o(np56$Pg=_*#l*j|6egaFu*=$%q5YK1( zh%TyZ9D~T);Lys0O|<zWvnn~|?g{emo6jQl9`qENmOOpjTX4^^BYeB#=5?K=0L}M- zrXi%j1sPon%17eBExD$_ZTEw9uff&s+udB3))P8%6MdFzK)Jx4>GuvA{5C?6F_M<3 zs7-aQh2WJB+p~m*b;2<;Weik)Jz1dh@K2_o1RscI2wonAxlagqbdaDlkTfkVG1s{X znDIxFZ(ipJHB>^(>j_k48e5sq@H}Hp!Zn`mdkV#KgFq$Xn0XZiI*@S}svmQo@xV3) zoq)_>3|VZT9fDw4>D_UV5zi-S#)&J@p^w3W8)(YT;XL@jNQ=SPa9!}n)QaHi(MlD^ zND;nE=f&cl47WXq#S>5<j#gz~+K8vJjFWSUO2w~f$_fs760Wo|BZXrtLQqda4`N_| z<n0G%DDvvn3)ia>x;Ds#yHzGx=~_)g9Gql+0mXZo7um()8eD_^LkleyH?fS>cO<*S z;ye=*h_A>vmoO15g~xS`g+K@Dlen(y4G40J-Ich;tF#`zT1|tDnOo)A*G{qouGOj< z9O+wRf<iw~f;J=Q#6VnF(oP~RBK}qu%XXW%;k}f+w?_16o*U8!C`qoTM<sZb5<biV zYB_m=4$1{`uyl-CijZKxTS-pMQ_y+JVO3LBvzlhij1uWc&Z4s0%w5otrle(nfixEW zT)Yqc1P$e7B|J$eqXhRHouFGtmg0j@`5ih3pb31~=10a^2qWVZjE`_0i`)^s6GUqM z^fISK=QlYhc^$I{CK2aQEX8H;rwncZZg|1St(P<bo&$gHB;8I(RKhoJqB4c&lV_E4 zB^-oKJ}b}FmdhpvXbpKlusEGcbeE8X=d&bHpmc&!_a?jEWZ&50YIr1XblbVgwSEKv zomsh)U)J<W<S%>vBPz5;JO9<k```a2>YC1f8YM+Q6d=quUK*kB2~flWPn;ehyBLwm zWcnpS5#c#IiIqMmQCuwCF-hM|3<D}l;1!q~*i@uh<UHN6jSq8qu0U8OmjQ~6CAh>1 z4EsO`-dK_c2ObHHn<$bta$>2Z&REeb#360wRUpO{?tE`HQV%_h2BBz9FnnIZi^|fs z4>SS6h1Uq)-moM>aWgSVz&QvOmiRUOe~3u}GV}^df^*?+0}~XM1m$q6F-c&)!NZd4 z33BV*4HA|FWz5_Lp0cnc7@u2bA`eUaxcJ2+;zsk{#-d`9>5EKo)o|EgB<sJI1-D7? zpxt{`jc0=gCwOtvO9`ol@Y&UFgW9G{E)`1}g~4~#bUCf@dN;k~RL1EaNe-ZCME_kl zBJ#a8^HOduYNfVYV7;f*CU`48i{2%a`-Dh*))V1%W*Nvt1o2=43Z(apjLe<X>)g3s zv4y_7JKryeL5P!L7!<}xeL?NAR$NfQt{ye0p53CjUL4t=K0$lNrtI(F{|Tpkjd=gB zP0%Lz`F|RHlmFL9_y6g|gu!+D$FQ8_R<LBDg92p%mP}A;EK-Lm@gx`=DauY772;Q% z7d$PVja7J;tBeG!E-w=C)sXa3DGxR%y1n6zvA($~#%K&uLKcx?rQo++AT7hDy7OK4 zdeJJ^(<o2NQjQNlSMCk)l1P2ImHED<;)EAV(g2B<AM!7^Hi**wNzkEeupD(#MsVGC zZa$+Mi^rqaW3C~VT6Wk9Yz+t|6*nZCi{xg-^P3Qvfao2bFqV1fMuf3((uCyE6zqQA zhmpQdR(<TE&!wX9cF}#e!P|uAjvSZ=8dn(zh&*IRLh@tFL{~Fqe}?%8r2iTFZGHZ6 zUHz|*i}Qc~)%5pYjr0BkUH79CNfT8J9;e`WtHc%Hdf)4MMd5WU8$c6^wSryu5iUl) zw*Wyd@1!GDi&nZeke}rTzBG_(xcC@J6XBqF_jmZ^ZbD^b89P#bO5v?bX#<ycUU#!) zvKJ8Ii%$Pn5YjOCpS+fNNofE-5=inyy9>I={S-~Spb#(g<ux3z0)d?8VYE2hhn)4C zVauMw@g+1ecgXVa6vTSbI6)JvmGc@X>B7SI9y@41yw8qR-O#HVsmS}r*j2$xYofR6 zJ_S-FBroy0rEyOhm{Fk{{)<OyLaX<jH8-6!--P~0w^@G}kDLGdFC8Lp`unfOoqrQi zM1fXP!GDc9|GM}@-}o<Ht8I$^8Ywk{pH{8V?=Z~L9K+f{UJL-TFdP%}QF^MGS0y3U z*VkjUfC_*Kpa(!ER$mMGfC_*Kpa%dUR$l@6fC_*Kpa(!@tlk9qfC_*Kpa(#MSiK(d z0TlofKo0;W82YINQ~*o>Jpe<w^|ipJ7MiSu>a{>x3)w(f3;BQwfC-=nKnBPI`G5+5 z37`i65y%7ifC_*Kpa(!jkO%Ss6#x@J4}iu5Y0ysvzy#0(FeG6;<NzuFCV(CQOhF#V z2UGw|06hQ%!P>XqgDqcPk1bt#4O_6_GB#^g9X4^|MQqfl^H^cwS<GxcjSV0E6V|Wa zk63#8_gHfBci7^^SF!o?FJm)j)?wqv|B8(q`3uG{XE2gHg$*706PA<n1J<+W5v+Un zLzqgn4_mb8DmHiSf3a!PE@9)w{R(o91-uJb2mm>-S%5DA3jlKf{{&10ECRd+m<gBy z7!P<0Fdr}*Fat0d@DgA&;BCNMz$<|1fQf){02Jmp0bc;70k#2N25bh5LR%7mRL}&# zNB|G80X_ww9l8PVBGO#|E5HmO0L6d;z*c|>@Grm!z&gNCz&yYU01}V~7!2qS*aY|l zPz0z37y)Ym&jD5e1_7P{^alI`P!8A#C<Uws7yusuh66qXJPY^$&=2r5ARRCUFbwcH zQYC<o0et~009k<LfHc4p02V+41^{vZRe(&u8bD7#CE#(u`+x+%QotlYAz%m~8;}85 z4M+j31SA9A0U(>Y1fBZ;-UJ|h_B@~uU<;rZ;61e40m}eMfW?3~z#9M+;B`qu0LNEW zoqKQ1FIDT$|N2|qf3I9SI`tpZjxBzF#SbfgJbvQT&u7QIG=9ONZ~nb>+48;L?mzh5 zkx^x%U;JXu!Z+T0>&xw5eZ6}RSM1pE+Q<K@m^**tr=M-z_WAdh`AIXTV6Uut6<f2m zYJK(Lm;dwb*vS~QioN&#iVs%)wDZ!Ka#%y-VJ$9(R#zX`va1x<%xGAvsMX5XH=SfL zXE8SNHEa&FIvq{<#qT-HG2@@uE3;qCD4O-*JDZ`^iIXNzfmSmziY~mpZyjoNEXX<` z12UF;QgdL->C&r6)(n&}vvT#Ole>O*7MG075K`^D9UmQH&v3j$P<FS3zmWa+dCk;# z_Ft#>jsN2l;a8LWZ-g|dUrt7Z;(in(MPy~B^_SFW+ps&4vTOMm(q*CMlx)x=mDBIK zLV$ySh1)ZSfbMO%5uw?-nFVJcGm1|i%;z#D-bt_|W+x~cud<Om9;ec%;>qzkP`aV_ zXQibKu=G4LS3Ny4rPXI!e+jR9pmXQ2&EcVAL&w$3z*}{W3Jpman}TaPhlL&u4Jm&L z*MzkRoiL(R802rd7vGq2HG1GY=b9&8bguvA;~&VP>gDUJPhI>q`>W?KEjfM7y3uy$ ziaCexJ~rssR~6bL<F`I_^y8|niIrr2sfFL$Vd}8+5p9mGSoKC_?U}iopKN;|^1ea8 zZ>g&-{_@13wuN-jsfYGnI{VP!#Cz(NS3Xo2%H*~PUq?lDen2}tw}mzGx3vdmN2>0+ zviFl?Q+Doqa$E7)9+SR0epjcQ)8}^esMqPfa~kTD#Kig?#rsY?w-6g$m_GPQtEBz+ z9@`eem1l0*KCa)JnMFAdcNx4n`}Zd`$;~HepAPA|ay%1Vc{X9Pwp<@GvfX{(pS}Ns z_W!xB;-1k<ns1xmBkJSo2UmX9wlME<{Qg1Z%CtwnR5)^5SJky%G;C=2!He3QE>$g_ zOUn(p<KkCWEd1J(*w%H^>Qaw8KR<E&iQ#d>sL`vddf)xR=C<tzoy}kI^(Tt3S<Tzu zb2|5YL{4_<p!18u^HvTR(QZiHYu(o9zlrQtvuWBK{OY=@4s2noud^SuZ`^+&Kdj>$ z)o03;T@|St5~m;SSKixMJNTig&kP$e<8<PqYsYPTe&PQ(c89Ng{pGu-;C+iu?ATN7 z+))(Xvh5seW#|9yJi9qc8EUG`7;d*^KYMIL#Ed~#tc&J3!&0(ZmOj3z>mkR>qxK$- zse8q~tY-D0)$dM=DCz&`;U1Y|^6n~6S<v+t+wzx(hn-m3A+p>4?y8*=iid>l*j6^C z(?joUC}}e+tVOqJKOQ{ixX`k0b(=Zq?J5h74k};uUQ5NHJ)JtN$ejBA{&|;+vVWWX z?U;6>Ki_@i*^oP~?hdI?m#weL=v^M4aI|;w@#8yFhz(PBT3=0lLD#u`LUc~y!954w zQja>ZHG9^#{YT7Lc&*~y4tt{(&8{g?ZQlL%yweZgJE^nfr-^UQI{A9@$L?I%{oL*j zWi|Z|Mt#&SYT1Lk)F1S%{H1Dk%@XCv6KDRt^hnt|E&IH+x}fqx*Iws_|2(7Z)79-B zT=-o{^b27vR_ATI)apHGx8>&QcY2&ZwJUAToa!?VZ#|ii7P92gy;@7_k0PTU{!o4O z^rg8W7uG(zRk6OR$J5NPv4!SWYpMrlCuO$h*X~>Ph~}v`VwZoov}Q@+?`yu;esSZJ zF^`uY8Qdl^Ej@fk>$hK;8*<0w<=4I#8uHqA?OUBbUbO9ia`E=<<6_?5u_k;^yQm+I z<*uAiv;V~z-4jdJeQ_lA-FqIc*!AhaEoGC!KXg==v>qDP;{43!s<u(5n4=lbIVZe+ zZqm&52Fv#slD_G=f9&B&j{cp0UYhkoYNz${+PyiuW=!RPmGL1xk7K>Z-g&arnw>B{ zy2i{b2z9==Sv4f;K4tSBdmU!$h9_J1&MOF2&8*73=UVHUPx}^5p1R`l-95Me)Z970 zWf!EAveI+XR-}#?+jKh9==T5i8vYxz|8Y9K@85sM#p#;t|DR?5QOFZ1*#9jNEl{k` zjO(9~imll3z{v)jflm>dZDp1juj33PT$yS(jA3DSNzTBqf@K2+Ms_$8K4h>Z`g!xh zD*dWU2fvP-IdSy9ajW;<eKO_hiDs=MpP1NjYHgeUW$#MhnmV?AwYJ*0v{l@mS}y?% zE(rt(%BmG{sUTE*wkkH>BsYsBxp}z>Du@LYU&W<jU(ssozV^9QT#8lE`lxHGv@W<+ zZK-H+tGHY2o0)rW?vezwpVr^^eZ*EFvz<9JbLN~gXZ|yB;L!d<dS)~X@QuBZzhc&s z$;(fS`*Hl37V@f=1&h0PzWsSt<r(M2YlVh|l;PT;z!&dMI!qbXlUEB3Yn^va8V)OG zxBj*8)1~RUhDCm|@}Rc)bA2v1%zgLQbmRL03%4&#uZZ6`BQd8(>#0rlN7*}+%qyCg znEz=qbwoWU;ti?ebXD(bUAFk|-SFwHs#RxK$Ofw;WD#TV$gIv^O|E|qZ!u$kRY`^H zq|g3H`xHZCzwzly3L<T(6MtK`PjWvzws^Sh=)iIL+e}%y10`pOw&$stbK~ZwM%rUH z|BxU1;;p3OKBLO*J*qqO^}o<Zb@h$P%O~b4SB1WZ#Ypc}t-f(4u;B~aKAv)}OZZFD zN`LY{5lNY`^K-XPI(0d<&Ebmvzbng^wA21t`oQ_h!=B?-CVttW-o5Q}Z)LpSsr2wL zpX!A4S6;f6`THaL%kxKlboG2^pG%#KS9H;IyXl|zD5Z<}+Np-$m*(fqd9>oEW!k@& zY!7Z;^ufA$$%DSwl)E`|%}Vu)-z3{+w|IR+wa=#Jxsl)J_fP$$Z`s7Pzx_kII(dBT z%*bs4;S+oYuF1Z5cJ_Pw_I$Q>?TL+3B^j%_uQP|K{&wfwTf>iZyEyo}OHuzhTAh<S z<&Jqs>~3pLcKC+5XTNy6$?k-Kqoea~8j4%}+~U`j6O&0_1vT}hRI~BmuJk1d(_U$? zg_s}zATl<$@y629uJ1ia*!y|j$>U>v%Q~84-(2%@qu<jqHcV}FFD!gcy*tBJEcn2` z=eM&%uC)Bg?ti0a(zLdtJI`O!OFeCTR=W~&{jB#_Ryw!s9N)T8eMb)Xeargl;m1;@ zuWnd&MH8;bK2yGbj!*Nc`4Rc!m)}+VRJC}l^YTF1=%s!w*FXAXrhdXCqs5#)bkdcw zK4%(l=+_`4BBSkr+0Bi8``~8P?H&IrveZi(vS#)5V}>ftc1!#DYqIqwb@9hOg{kW* z6TklBQm4i33+B|Dmp3h<>(TnfLvNQ)*BsC3(QL6nGX1v=7y6~{-<VuxH!t1%#mQmv zS&N!x%*y{gF6`eMiY6~f-g+tWv;N2Tk53phYW1su<;Ui&OFO;qR&e;RdLu_pE1Gk2 zeL{3>!N~F1JMfY#IoHzLtR!b#fA9R-o8bkMzb-I*bo?8=VRNtKg(oH@9QxpBoH_l? z!jJ`525x=#-jTRvf7DCZmxSGpiMHmI^eq~oZCaq}xUutVM~=OF$li2r)z+NemJwvp ztWjxWl|Kw_T(R<Ov$Jz{jwpWhOoI^%5{I{&|Jku6ft{M2XgsrM${QK)Hs3!WqW--1 z2d4X;Te^Auij|s^hS;)EF;Rs{eo3vDTn?LGzn&$rWIDBOe~-8D=$#D*Z25L+<Bvv; zT(sjtNy5IU)#-cYbjrP&@#&;d2MY(JX$vWApQPyPMz>zCt`|`0f9|L`ro-E959XDR zytVbm1s{I?ux$C5(}}BkMn^S&C-vk0soz}e)oTQ$Oo=Lp@4jd2h^<OPX<4e_g@uO) zDqBz9{=<#s*N=C&wPx`inkf~%vTtA8bMZ>5k3I6_Ygh1lsYlH{zs${(rThQ9>iD4C zTRYwfjF+kYzIAc`Q>ACF%Uhn><`X(&>3RQ-xy9u5ZFe&d^aGV!DwfX;E!F+|LZ!9i zP<zhlo96FNm0fAyXjO3M4ShFsU$k}crqb(at#7`RzEqvO@aD-Ii$4BvZ;SGNTOI4q z$`_4|+-+T)y;D(=VB33P-w9__+RR^mUcG<W?uy1k54Cx?f48RDg<d%mAMWaCzAux@ zj_lmxGu~&YbyNG@iu{?%sjd9WzdRgNFuuS*S^EC#{#(bVG`Lhb^iYGl&7?<rkKA*n zFlBYu%a=$pL0O?$o!LZv_p7Fg(B3_g7a3Q+Z69B6@1e@?G|SI-y}P4c2cvrM_h0>O zTwujAeWm4mw}QKkjg`X>HF)5=XXpGyc{jS>$!>T1g;mv(Q+sze+!fr+=f<+T{=cV< z`r~0c!^YC`v)zJn3Va=39d)eRa-BT+QCecZVLt|)Pr0k<bmVIL;Tid>mTfM4RB|R_ z^w%vN7uxI$JH9^fTDQiN<%c`1o$>8=!?SPSn5N$q)2jWrY<-V{f?oR<5tF}NImbRS z;FYQu7EbXA%_&Gc(!TWeFKgacw*K^}Hc(GJY@tj{#0LbL$Az1~$~->NoG|jkMR%{t z(hl`KMs@4@qGa?o`LJ~h{nYwl@!3gx@;;e0?Z61-@r_%n9=uzux!Ab+&9sEv)FGGS zt@LCoY_%(M)zzWXC;s~5s;g1+%gSc&e0jpd1Jy^{KDa%NXjyMUQ@Or(-&K1THx0aW zVA>};JGSgPf8>#~X>nm0&Q6`k?5qXEoDUYnho7D>qsc_JV>zExwry~x=Rrx)#BXx~ z8>#kI{QO`wVP4nf23%3`)4teII%0a(&K+w;>%X~QuDG|ULVL5rt)drxu73TuC5=yq zx9j-N>S;?}+f#Hfk69CiLw$yyp51@emb0CbepvsGxmh3IdHqv1-YRdYsV+`3*PpOc z^UeLF$*l_gic4<?UfgV!<USnz`A6L>Q5j7}v|3D_Zl!K>`1_JZ*Wwe-tsJxO@<{Ww zb(%7I+OBEoWA?u=;!sHOq=)&tzFQ{=zjMF!?vlAz_ZfQT-59kz^I)X$;*zSHMVEWN zdSykm8Hn9^L6=h(yzz)Q{m(ZS{qnkEmprRtcEiF!mkM|HJF@K`%BfXv^y>K8z09_b zjwwBd$yA$DHYF}O+vJ+2*M?tC9;Whv{AuMMv;5$z>2=!wbJG9S=tlX|4ElV6_#b5` zcm5ZG@Snp};dS?a{*q5Glf_2b9hj88;Hm`-AuU1axZQ-}fTd9qw>(T}O%Oe4Kn@h_ z_|D)IjEf`VO7UXLXfQ#3mApjeZlsq~IvmAYQRKDul1Ss3d8?M~q(q_sU4t-JY-|k^ zUatyv#Uu&C;zLxf1STMm1w#-7w7{4{8%|O1DyJMCunXW1ML-`k#0bP@fG{a)6eMJ2 zBM0447hC|E>=)ty9Q36hQ;nLw5hW2^N#)9V0eq+hVnGa&3Az<k7kTr)PX4>r`!m=A zYLWk{;4rcOM-`$}*2(|pBL7+0&ffqeL0zz98dMeQjiNCT-W3I5PsA`bk(i$zeWLhD z8Z)j<i*#MUkq9p&frPj?w*(&E56YlaDOG|DP*@_ALHO}ll*tjHhkxjPq!2(F>T2l; zWyT!@C`}Mn2F5TvJjy+T#_S|`Fo(Q!2W~|)M?{DULR>+R(zkD19Hbdi)Xz+6a5D<l zBxpjom`jkAZW=+Tx?>`7bbz}2VRz}igK}E*0YzPxr{oa8n7)vY`7+}yNJr7?ksOo& zVKN5>ippbMV9ckgb7!s!7-~8}8Dbj?Nbm;w<LZbfNFsMwM}H<fR<0vZXg=&JjV6F1 zJSE~w2yoVg=m;GFnJvBm028(P9t6Yh-X!Uu9CqA>#UWkCl!4QC0U+xkpW_&sIG#t* zW5OozV`34`9esm3MGGekGmsMT^=Xa+o~|*{^O#E&-gu_LH{5U3(Tj~&CwE;9BoPEb z)5qbcxoG3#P()%OG%|-obmvkqE@%lyNjxCKxOyhWobUv4#fQ^y2gDFSaxhl_0a@&g zX3vzdHM??oSuAe(M01cotXw7@Zm}nRNZbMKT>NmQI7|*RQ3FM;jC{)dbUGbB%?r!G zV2&|4v|!4>WmnV43G<<T2{BKR^2yKUWhl`Sm3RyI2b725@K2O0OKtski#2CwFPkD5 zQ4f*n?04P<i)l#W2`8KrcwPjn2fS^rjJxRa0I}_{2^wOSpFL6xLBlR@&oJ7N9`a}m z?v=o1xvjyKRXF>(tS%8K&MB^2(6HcMEDzs_-$}uRUGAggs29RBx-uX!Ajba}663a6 z(O0k7-Ab@YSx6l)Sj-S^J_K2JFcI<<-f?6VAPu`saLO^zjkOe%sC}5bB}iv-U5}(# z@%8u<ix2zGW%pBQH9b^X{w7W5G+Fhepxb^bjW!q%?UwU#CLYRI>wK=Wk^V1#9E8ON zXC(CupMZLj`ya|+6}taX_x{sgJ^rfTV1?0PF+ZE}ui^baRY-U!Xa9qrgOy>*I{W{x z`D6xQW)jz7E-+S;vWFF;y+V2uG)M!oBy1-57xYQ$O$LN}gBeM?DTB1aJZvU59j7q( zY9LC2X<E`^fv(H|=6d3w-jN8kg)#Kd9Yrt&F&py0nkWpnV)S!0I+NC+aNYRpLt14H z4A<#EhH)6{AT<(p0_?`P18m<m!m6Vn#IVDNZc0K*IXqadNd=+{Wag6=?b|0QZpg6Y zcnq$ESV=Vf4~9iUoTpe+Pqc+_;B3<|GFVp-%oc?~S2IO8Vw?`WyoU^f4<yPVjzW5j zERN1DA2QBH$gm)$CSSQ6`OTqs6&j(KT+XCGEeyV>6C<SnmmONC1B1?EDQ2`2`WPvo zoE{`hCPJuW9QdLeT{6%+X^>mpxXlI>a|h`J3O`*v)Sajpsj^4#Sn$7x=3J1-s0nce zFn|oTg}FCo!KpO4mre+4r4UY$+y>v2&_OdyL8UX*B6T%J3KSop4yw3jkcklsYDD1H zm^6j3L&yN+Cy;`Ym>h%60W(1Dn(F~s(Lr=MR0l{$cl|Lfg{D2K7oBm?=^il8S>F%D z>_VCy1~ofA9B>W5n^_Ec0M9AUH-2E9G)_EJ-nlxxBS3n>rjdBQGR=S?VU*TR0yQ}} z0RBgttsH4OQ#v|302V0kg0SHJZ+G5N01M>V9pdf4!w)Q2aH*FuU_&GLNUdVL)yJFJ zqPq%cYINo>SJ`ecSDQnj$BP5C9LxAx__*2h%TqL3676kal3DOAk!cdnbsOQGc~AC~ z;z}Cp!YP8c>zQ}YFuOs62SSW7`aeZz=O{O7p134U<&zc5V(#F(%}-?cd4Y@-qb>1k z3gPapdz-7Crd}-kT|5CnYbp*c04>%a-fE>~JH4RMVvY`CMR+t?b0!^<Ky(iHjT(%7 zK$ftaR3sYU_N1o4{@wD5gb1@Wv4RBl05<9B6;n0bT9mOKWfS<G&BB(3+;$b@wTAZ4 z01lBh+8DwYh9uas;BJVGfh3KwlU9STlx`!0t1a5bEAyrmb6Sb9HX0ot$x+M*c6Cy# zb=rYtsKAEU#{n^-w-Xeq8g8wSJqm1qp4p2@f`Yp>d^WfnVhBVU8b><qKvjU~hPcjR zvYMck?I7(6njo8?cVhO!VFbKz;|qGRz!PIof`Bu&*l3*HfHIMiqIf61_u!<YAy^g| zZ;k`~0oQ1n@K`ZjCOutJ_(HNm<21nck!x$uODSRVg9&sp)7xqAMg(9EpySEfVxMpp z_Z56yLo?pTfcIlftAT;nt9i+craWbc4uXplsA561E>>r>KNI^8?9|3*;{<pj`#%KQ zf1%-F-RtcC=P>?ibSkBWxQI{B8Bp8#e^`jv{_h?fR%ieJrS?BE`x!Hy(RAztJsaTH z(FiFMZnRSRmERaCP^E2luy;d@Qt)#+4pnFH1EnQxgp@T2fZ9QVQprgvL)h<V=ryE! z!F@=E8bKO7n*rDiFht8tIEWZ2sn@d!R(QH)bwJgg05+g8BLNnTbA5&Of9PwV?0U6> zOe3s}_kzEnNEoew=?0BgO=G|^PIOQWr?T<0u~^SyrI21UF0Ig|)`haA>9byBYVvdx z@76z4JH0o{QgFx%Y!GfCWc)qY80vN3Wp-sR-GKY4=RP3C*wuv4ZNm~a#7IyCrpMC= z21Faf?Sud?5=@<RScpLwP7e+1O8bl8$ik-<8Bi*VLc&)v+}fh`ERh1k#?q<z(**O4 z!KBc!z*mNN{f5-4wSYWOzX>-}QVdxNF;c-R$h@%u#Z6Y5(}6k0*$77M#;jljn7RlH zZZb<TFzcNJTogfGi?Z|zigRCjszIRQW(FWNPrwu_gaRipDJ`>g1Tc3^HaLTj(B^R= znjRqn=-?Sl#DN~ZCt?>XvvBwb%7H+}6ebEX*9du~#i8~O17&2u7;wnoQ@d>5e(^*2 z{1$N>3@`J_nbu6;cKDt&V?+Q|lLl49aIk0{^xw=ulwb&uLMwWggHu_DkxpP?VDPnT zBc2Xy55jISQ50N9U=HH+Gt1B@0R{>%IkZHiR7fslw5_)GqT$1(Rzs}Y^B_RK<}pG6 zxdU`+ap@pW#UG<tRyZ;q)<^{YW+b5m05%x>L2PFT?H-y(4!a2~DV=*Z3`3$5)&=I4 zo`6rmVXzGh43L3DUKz+mzBS=$6j~1O7i8^0gTb8!Rvyu0)Xa6kZ0FfE{9?jM8kdwb za6o*D0(ya*4z-=YDcT7wpuu|q8etTR0WyO*dv%`~|C6cgsuWqKd?E$Y8}`%;MCsFP znps7U(X!Zf<XixmwJ<s>%Y6cS8AG=rw2J%`B4KGX>41o4MJ1v{2X+;$LyZKP8h#Jw zA1gLN4rbvA1gN+6S-HuqDhPXO0skO<mu`V_lb}JY2>p|rEp7QqIdLx7a9wsWC;S=2 zcxD7m*4_@l5Sl%dQv<YAmkOqFSTTq)%fuUCHmBK4Lm>)xG73<FR5K$vCI)R9YE)lL zjEuJ@%J}|(6qCV<4Y1NK0a)H+g<!adnkqyZ8_+M)cr^oc%?bw8Q_aBAM}3d=xQDX~ zKpHFBAH59-H!_@3OHvM6tA$E!5FGbdv4Z&j+5TrA|9Pqh!L`}{g7aS*|5w>Ptj_-X zEA2n}h=n-<^<<XtS0ej1g=-}WQt7xnbn=44P_)TnVAHtRR}!e;c5Mul3!rHllbeEy zs?@{z4ipy90f-u_bJ{(V^-r6x&%y)vB>umUkYE)55gJzK|9dXuPoF?N)eWGQ_@CfV zmD~GoA>qMw^8dNS|M0?n_<I8Ga{KX6-1%`F{KHE%iur)i8i2P3!Vx2dFz0%DH}K;0 z;_njNOWWK=A$8v=WPH>jIywY5JKV{kk8zQqS|{*pUH{0_0AcZ;nhdDz{l}1Cl}P?~ zSBBTU|L|P={~p#pW4M#Ra57Ph@y^%x*tZmr{|G&(Af;_8mv1B5Y^pUg-&_aM2EKYD zcaR1Ha?&z|Sb5_o6<5b(m11@h7NE^YAP(#%TuzJyMy8I?LDwrFi3__xR;<fGjOlSX zBnm3Ee6v)L4N(o95K_LI1UXINUyOUAh6?C*(0ed))FnY{E@xV_(~KMd1dx%W9Wma$ z&*<$6!EdzjkGbBIU>VF1Vm9$CYn&6_0#76R!US?TMnY%tSeX}DF7yWodq^6@j1+or zQ<!FiE_=?I7#+k>>+u}GQ>X>MgP6d1={@3t>zBriThqi2X!ovxvYxue@0>7nL*VPg z`R)!u7eyW`kDYc!Z~UoV^J71rxZ7x|!#Slj*|lcEGYe`y(h|)8rwwxH&vWSU=CjRC zjs~kC61SPu^r1i`)GzE>85iE=wbO8AL3vp7TuuV@r9gcJ8ytuAHJRa&*W=7<zFah= zn{>4B5v149LE0(%C)OrqGFauHXe|pAdH|E0j{mlIZ9NIYQ23o+fhNWmL5xNdBm9*G z0fnS-3xyaH`R|@fPj73tiAGJ_p2j%s+S7CE>DR8kBM+B*HA}k*p0S6{fXex!*+*r6 zBK|Wu@n6RO+|d00`mX=}%P)<8VfGjQ82;yW;(z~B@IU?ePd^&}%T6AP1IlE9Aug50 zCo{V?-sWL_75p>wmTPjZ*;~{`SM1?j7=|kNXMeV#-!#Z9h2MNz*r1zy4LhTO1kmod ziAA|xZg5iI5*hTR^lGD&raMYGtd@cz!W~I=TgnAPgbLh&ix>!Zgp`M31$TyBdSB0V z;m`>B-qsStE+GQR<vc9)Y2f^W8PTFtYF=rJv*P2MkfNI7T0YE?>OHT~O4LxN9RYi7 zJH}e=pD||iE1;>BL1XCzpWAC-h7p+jWycgJ)3{8$KrL&5rvJ;hMhPl{n8t63k(OM9 z<c5J+?X9Uo=v0rG!f-VwbnVRWrBXU)P-*fr!LMn8Um%?xAL3<y6l%f~7=hL(%uck& z8_=j4U<1m%f^jq@V(~7@7Yg}Eoe@#;v{Ad&cC{?b8&V(@Xk06q5K?=2;1V>Ay2Ko$ z3QlK()X4~)G;7#h%Q_787u66SGE3TOKT1ctSKmn>$rUgO4|KtB7EpEXEoX;D#g5TM zs@-tldqLP$SytmkxyRMW36f1x@5&gC2=3*{;o*=WYc?h@|MD>!sTp+Au(acLqU|u> zJ=7M+3VJShB*VRIkuQnIG!PFlTDF#R1JylegV)rCqlIP4!qQ+*1FOoW2drrayJiee zO-ytJ<sFYlXpLiQb|hbshHgaR_)r(WYc6lZgkY44`J*n?erJJyIZlTOh&<IJB^2o; z5yL4d)u4UcrY7xcP#GMc+&F~LwNJX9%P{%Yrlz@n_&GV*7{*v{J%_k)1H!6<f)W#F cfgOUa=<^}{)nEP9U;pL$0O8qv<p8(<00Z_r?*IS* literal 0 HcmV?d00001 diff --git a/utilities/branding/sources/login-banner/README b/utilities/branding/sources/login-banner/README new file mode 100755 index 000000000..52ae11fd5 --- /dev/null +++ b/utilities/branding/sources/login-banner/README @@ -0,0 +1,132 @@ +Copyright (c) 2016 Wind River Systems, Inc. + +SPDX-License-Identifier: Apache-2.0 +-------------------------------------------------------------------- + +Titanium Cloud Customization of Login Banner Files +--------------------------------------------------- + +This feature permits the customization of prelogin message (issue) and +postlogin message of the day (motd) across the entire Titanium Cloud +cluster. It is a convenience feature that simplifies propagation of +the customized files. + +Introduction +------------ + +See also 'man issue' and 'man motd'. + +The following files can be customized, and are treated by this feature: + /etc/issue (login banner, console) + /etc/issue.net (login banner, ssh) + /etc/motd.head (message of the day, header) + /etc/motd.tail (message of the day, footer) + +The following files are not customizable, because each is generated by +software: + /etc/motd + /etc/sysinv/motd.system + /etc/platform/motd.license + +issue and issue.net are free standing files, while /etc/motd is +generated from the following sources, in the following order: + /etc/motd.head + /etc/sysinv/motd.system + /etc/platform/motd.license + /etc/motd.tail + +The customization procedure during Titanium Cloud Installation and +Commissioning is summarized as follows: + 1) provide customization files + 2) run 'config_controller' + +The customization procedure after config_controller is summarized +as follows: + 3) provide customization files + 4) run 'apply_banner_customization' + 5) lock/unlock each node + +Example tarball +--------------- + +sample_banner.tgz has been provided (adjacent to this README). +Extract the tarball on the active controller to the directory +/opt/banner, or as indicated in the following sections. + +The tarball contains examples of the four customizable login banner files. + +Procedure prior to config_controller +------------------------------------ + +When setting up a new cluster, immediately after the first controller +boots and before running config_controller: + +1) Provide customization files + +To customize any of the four customizable banner files listed above, +provide the new files in the following location: + /opt/banner/issue + /opt/banner/issue.net + /opt/banner/motd.head + /opt/banner/motd.tail + +I.e., + sudo mkdir -p /opt/banner + sudo tar xf sample_banner.tgz -C /opt/banner + +Each file is customized individually; Edit or remove these files in +/opt/banner according to requirements. + +2) Run config_controller + +When config_controller is run these files are moved from /opt/banner +to configuration storage and are applied to the controller node as it is +initialized. All nodes in the cluster which are subsequently configured +will retrieve these custom banners as well. + +Note: +In the event that an error is reported for the banner customization, +customization can be repeated after config_controller using the +following 'Procedure after deployment'; errors for customization do not +impact config_controller. + +Procedure after deployment +-------------------------- +Customization can be performed any time after deployment: + +1) Login to the active controller +2) Switch to root user, i.e., 'sudo bash' +3) Provide any of the customized banner files in /opt/banner, or another + directory: + /opt/banner/issue + /opt/banner/issue.net + /opt/banner/motd.head + /opt/banner/motd.tail +4) Apply the customization, execute: + 'apply_banner_customization /opt/banner', or + 'apply_banner_customization <your path>' + + The default path, if no parameter is specified, is the current + working directory, i.e., + 'apply_banner_customization $(pwd)' + + The banners are applied to configuration and installed on the + current node, active controller. + +5) Lock and unlock other nodes in the cluster, either from the CLI or + the GUI, to install the customization on each node. Lock and unlock + can coincide with horizon branding procedure; see also adjacent + ../horizon/README for horizon branding. + + All subsequent newly added nodes will automatically get the banner + customization. + +Manual Restoration +------------------ + +Replaced versions of banner files can be retrieved at the user's +discretion from each node in the cluster, from the directory: + /opt/banner.bk + +A maximum of 10 versions of each file are maintained, with the oldest +versions replaced only when the count reaches 10. diff --git a/utilities/branding/sources/login-banner/sample_banner.tgz b/utilities/branding/sources/login-banner/sample_banner.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c6bfad919a01483be0a0de53b6d75e3911a176a4 GIT binary patch literal 963 zcmV;!13dg6iwFS3xG+}$1MOE^j~X`==GlKCFXypck<rXB>`Hy3DNSgz7qO&KwTU9* zIe?oPo7x_B$*=FRxh$ZzD@B2{kw0;p;oL9&Kw8^i>$pe>=S4y9MV_Xazs@?{i*TQi zpQmXn%P+Db>lA5m-b%BqDDoDhM~*9?v5p&nR_$guM&A6BoR~U$ig-?pXLqlj-Q~Zq zAy&vO!o$PE&FkLi=j-9+hhhJ9zjxcGTkuZ7yNW&kLSS#92Sd1m0X<*B+1VL<-kmQO z(dgCS7U<D~o8jQM-lz{Rt}k!ijQT^k{rz^-zf9O@CM^hE&l`sZ?9w`{K`K!-rBqYk zRRsns?yv;>vyt-}m1~1ScdyMyC~+YLTK1itqmUCRNPfAaK2T(pgn<hZv){LY8-%&h z3t5sytw?&J4e-Xzw2`0aUSly~J#u>xl!clvVT@2~C7m`T8Z=3=;`fuLf_Y=++M;dm z1mHA7WgBwpX57&WO5<GsW&P;19Zc0+@hSQQK~KEs+H>1mnQ$R1>8KDse22nGt$<It zRMtVGb~0GyN~x-nG+}{8PL^O%G)B55BXxl#g+wA0*+MS(*qdGk1wBW@y=`7?RT8*d z<?J(B<%SeKg|I-zo#W!8h4FH?ie$xVrLbB>5z?l_q?4pcK{=$TDd%-?B)~S__LEQG zrzZHVw;}lYQoZUB=B6w7z-y_fl+2*eru0P>dM<rEROo7X*y&Bb67cQbwYlvdTjjy` zzHY<3;v$TXPr-(UQ6dyIb#*<$hr^P<8*;@$Zd<ALZa8FWw~ao0YOQoMgEoBjeyDVh zg*dQAF4X=YhbU|_{)5H^mb&rk!bmC<Wkhq}OYSpDSl=&%66lN1l~)q8{i*Wigsv(w zMOWovQ#J|vLbFillH5q^{4_1F{pgpz)6`!tK}930Jj`+^5bS5fo-9G=DOn@cZ95tJ z+ULLY{GZUdb3`9c@qhO`-|&CuBJB|W=Xs|a`TrF7cixYT9~nO~eq{W}_}>oW@1xeP zOlHW-Bl>uP|I<!ZZ2$k~S=aM_*6l?8KLs}b|KIk8SA(mUKkTpR>a-4L;?D6wpJ=kj zvZSpH2iU!&Gir=%v$dp2CoVBh0zWR-MgrmNo-Tgn`PAT=edyA#)wcZ&o5{)H!V??$ zKy2gLl|26EHtYX^u>X$B>WDs`+J8C#w)>x5g#FLcBJTewaQC933J~F?@Em@nA9;?q l;ri-*T&9SKh=_=Yh=_=Yh=_=Yh=^|ke*x=VvTOh-000~4{;U81 literal 0 HcmV?d00001