From 52a0c5b07b1b41ad75f3ffb9e0d7e5979c95ecfe Mon Sep 17 00:00:00 2001 From: Eric Cornelissen Date: Wed, 3 Mar 2021 11:57:33 +0100 Subject: [PATCH] Document slugs of brands (#5002) --- .gitattributes | 1 + .github/workflows/create-release.yml | 27 +++++++++++++++++- README.md | 27 +++++++++++------- scripts/build-slugs-table.js | 33 +++++++++++++++++++++ scripts/bump-version.js | 41 +++++++++++++++++++++++++++ slugs.md | Bin 0 -> 52935 bytes 6 files changed, 117 insertions(+), 12 deletions(-) create mode 100644 scripts/build-slugs-table.js create mode 100644 scripts/bump-version.js create mode 100644 slugs.md diff --git a/.gitattributes b/.gitattributes index 99078aeea..771bd59de 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,6 +6,7 @@ # Don't diff machine generated files package-lock.json -diff Gemfile.lock -diff +slugs.md -diff # Treat images as binary *.ico binary diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 0eb115bfa..61c868806 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -5,9 +5,34 @@ on: - cron: "0 0 * * 0" jobs: - release: + release-pr: runs-on: ubuntu-latest + outputs: + did-create-pr: ${{ steps.release.outputs.did-create-pr }} + new-version: ${{ steps.release.outputs.new-version }} steps: - uses: simple-icons/release-action@master + id: release with: repo-token: ${{ secrets.GITHUB_TOKEN }} + version-bump: + runs-on: ubuntu-latest + needs: release-pr + if: needs.release-pr.outputs.did-create-pr == 'true' + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + # Ensure we are checked out on the develop branch + ref: develop + - name: Bump version + run: node ./scripts/bump-version.js "${{ needs.release-pr.outputs.new-version }}" + - name: Update slugs table + run: node ./scripts/build-slugs-table.js + - name: Commit version bump + uses: stefanzweifel/git-auto-commit-action@v4.8.0 + with: + commit_message: version bump + commit_user_name: GitHub Actions + commit_user_email: actions@github.com + commit_author: GitHub Actions diff --git a/README.md b/README.md index 7403cb309..d832749af 100644 --- a/README.md +++ b/README.md @@ -24,11 +24,11 @@ Icons can be downloaded as SVGs directly from [our website](https://simpleicons. Icons can be served from a CDN such as [JSDelivr](https://www.jsdelivr.com/package/npm/simple-icons) or [Unpkg](https://unpkg.com/browse/simple-icons/). Simply use the `simple-icons` npm package and specify a version in the URL like the following: ```html - - + + ``` -Where `[ICON NAME]` is replaced by the icon name, for example: +Where `[ICON SLUG]` is replaced by the [slug] of the icon you want to use, for example: ```html @@ -45,13 +45,13 @@ The icons are also available through our npm package. To install, simply run: $ npm install simple-icons ``` -The API can then be used as follows: +The API can then be used as follows, where `[ICON SLUG]` is replaced by a [slug]: ```javascript const simpleIcons = require('simple-icons'); -// Get a specific icon by its name as: -simpleIcons.get('[ICON NAME]'); +// Get a specific icon by its slug as: +simpleIcons.get('[ICON SLUG]'); // For example: const icon = simpleIcons.get('simpleicons'); @@ -76,12 +76,12 @@ NOTE: the `license` entry will be `undefined` if we do not yet have license data */ ``` -Alternatively you can import the needed icons individually. +Alternatively you can import the needed icons individually, where `[ICON SLUG]` is replaced by a [slug]. This is useful if you are e.g. compiling your code with [webpack](https://webpack.js.org/) and therefore have to be mindful of your package size: ```javascript -// Import a specific icon by its name as: -require('simple-icons/icons/[ICON NAME]'); +// Import a specific icon by its slug as: +require('simple-icons/icons/[ICON SLUG]'); // For example: const icon = require('simple-icons/icons/simpleicons'); @@ -134,12 +134,15 @@ The icons are also available through our Packagist package. To install, simply r $ composer require simple-icons/simple-icons ``` -The package can then be used as follows: +The package can then be used as follows, where `[ICON SLUG]` is replaced by a [slug]: ```php ... ?> @@ -178,3 +181,5 @@ Icons are also available as a [Vue package](https://github.com/mainvest/vue-simp ### WordPress Icons are also available as a [WordPress plugin](https://wordpress.org/plugins/simple-icons/) created by [@tjtaylo](https://github.com/tjtaylo). + +[slug]: ./slugs.md diff --git a/scripts/build-slugs-table.js b/scripts/build-slugs-table.js new file mode 100644 index 000000000..cb45670a7 --- /dev/null +++ b/scripts/build-slugs-table.js @@ -0,0 +1,33 @@ +#!/usr/bin/env node +/** + * @fileoverview + * Generates a MarkDown file that lists every brand name and their slug. + */ + +const fs = require("fs"); +const path = require("path"); + +const dataFile = path.resolve(__dirname, "..", "_data", "simple-icons.json"); +const slugsFile = path.resolve(__dirname, "..", "slugs.md"); + +const data = require(dataFile); +const { getIconSlug } = require("./utils.js"); + +let content = ` + +# Simple Icons slugs + +| Brand name | Brand slug | +| :--- | :--- | +`; + +data.icons.forEach(icon => { + const brandName = icon.title; + const brandSlug = getIconSlug(icon); + content += `| \`${brandName}\` | \`${brandSlug}\` |\n` +}); + +fs.writeFileSync(slugsFile, content); diff --git a/scripts/bump-version.js b/scripts/bump-version.js new file mode 100644 index 000000000..9261be590 --- /dev/null +++ b/scripts/bump-version.js @@ -0,0 +1,41 @@ +#!/usr/bin/env node +/** + * @fileoverview + * Updates the version of this package to the CLI specified version. + */ + +const { execSync } = require('child_process'); +const fs = require('fs'); +const path = require('path'); + +const PACKAGE_JSON_FILE = path.resolve(__dirname, '..', 'package.json'); +const PACKAGE_LOCK_FILE = path.resolve(__dirname, '..', 'package-lock.json'); + +function readManifest(file) { + const manifestRaw = fs.readFileSync(file).toString(); + const manifestJson = JSON.parse(manifestRaw); + return manifestJson; +} + +function writeManifest(file, json) { + const manifestRaw = JSON.stringify(json, null, 2) + '\n'; + fs.writeFileSync(file, manifestRaw); +} + +function main(newVersion) { + try { + const manifest = readManifest(PACKAGE_JSON_FILE); + const manifestLock = readManifest(PACKAGE_LOCK_FILE); + + manifest.version = newVersion + manifestLock.version = newVersion + + writeManifest(PACKAGE_JSON_FILE, manifest); + writeManifest(PACKAGE_LOCK_FILE, manifestLock); + } catch (error) { + console.error(`Failed to bump package version to ${newVersion}:`, error); + process.exit(1); + } +} + +main(process.argv[2]); diff --git a/slugs.md b/slugs.md new file mode 100644 index 0000000000000000000000000000000000000000..3b91acd6785dc178ed688dc2a2edd9263d81176c GIT binary patch literal 52935 zcmaLA%Wfpgk}WnrUl9!feFj%7b@x7}Te=Vg@L9zwvdGP3k$dk+@5szxW-uR-6%Ue0 z+<~V01kD6!qJ}2=1|8@}^d(wmYng{ulL2G+E#7ZSMv|WlJwNK!!=gLt%jvrM@ZA0R!=H|h{-;0v z>Axu^^#-*Rm$PQu6)yCrKmC{Dq%F7eVq0#iA`s&h{{_7Nd~|dKD*pig{lnMu``o#=r49eTV`>1-xgoS|!;)ZT0s2zgbjA`Uq1lrN#2#alR@_4UWL z+$|;A*9&2+qpx4;u5Px8olxh`Pu9(BMdo}em>kE7+x5T^Q?1u~RgK=T;S`>t^7`;PuW#pNTw{I0I+%T9q$(zvlcz5en?|G1y~PZ4Ja4vj_jwXs0`i=OC!5{+6Aun`PhI+j36*{Rz)OoPfz`i_>yj&NV;Q?JTgw#!@+Q zg#;6;!gdxFw^$d5iGAF~yj!;=VR5G0se02A40^oSx}7>Gx-IQdK(IKs>vCTlk4sP8 z?m#I;$b}y2d8Kzjp%)P(QcODLfZ>)TBXy*EDOehO<2svgYiBKg4NsC(UgzX7yaun85BIGPx&E z`j!~Cis;QV@ z*H_TE)e11vzf&cPVO?r{$1+5iJ#eh}wuK7PcBLL0WrmEH3C9{op>dJh)>#MYgXX&$ z8xVCZVAj~}H4L_dNbU9EsYrjQV{H3sTNXbB6NteqxyM2$6?3~sF@v3Rb4B^aexg%$ z=eZ#pmk^3U&4fp0V#8RTK(+DW6vPk6#JT8v3$F53_1k!ZVR; zsL;8{MtCOjwdzl*5_{y!v-7MnYlYb4~1Pce_rAm@$LwV7W*? z-K-eLQ2+czV16}b8F(sKTn}k;VGi}#iGeeJ5s z2rRyivJQ|2BMi2{p+sToNvQG5_Ltgp7=zv%@=};qH3JADbynB&W|lUyU5-k4<0QYgOnH;=IY1C;hN)ZhPuv2>ZgwQm5*H(N@@*pSxI?)A$9vNH zBPKW$cENu)&#O1NoU=sv_mey&I2?wV+ zy2r|}#qdhynxlRsCAn$Z_}g|ySmJKd0%u%d6ibcMhOK~tIg0a4HC7{ zvX21+Ju24$fPQNFRh5c0*wzw_vTl)$wrHQtYVONWE>M*aFNuYuZ)41;a`q@KTaWkS7;cbEe)5BBvF42o7Msx%rF z@udEvrMM&KLY$Q&09g>ppS7GoWgRDQ1P);_(r7o9o#^IcU97YV63&n!RhL4 z&-s@HM_dvso4Jp<15(GftL6#zZQE6)-w2ykg`qg(itRC3>-qh`GCJ1S zFN@>JH#ONW%g!E`#C!M^X#2Nb_dwkOFuDUyPEJ{JYPLNub#hwNX8+L8n@(r789$Pa z2ZgKOHLafTh+U>%s zX{0VF6x-s*@$;MFV<+sKdI4ip+s8Pp7qh^OJ*^j0%o^?=ImA@>wAtVlM&D3+#3=#G z3U*WcT>ylTw_S+t0BL$~bu1?*bw3?UiInJwNq*KyQ=Znn;EYpDXi^Zf3wr{pomWp4 zcDnl14scbl))T9HheU1bPVcG4P<2?GSJ)+_lcT+a1-Fi$+rK*K^fgu#m^4~7m80Un z+cy#2T$dvnd?{d4@EjyP`)%uh$$5MPS+zA+`eggI%13)m~*dBiwPV(czk-yo0&O&gj3{^qhVt^T&Fa!zZL=`z_HPS7>;DVRM5V?M)Jrkknb4Ixq0*=8IN&1*b5L6qb=J8kT* zQ_OGqq0~2Gh`$9VB>q#gPD9m15-th(@un?yfvMiATtyGCm=dNud^;T`#=6C4C?chBdOKGb18*B}<;QbVO>e=3MnxSaIi4FXADU>eqw7y=dt zzO7g84W`2)5b?TgskaZ0F=2AxMqY(V>`rB2un^E?@1%YDk?-x}SoqT_XtRY_QUW)mYfYG?P#L|Lc57Pxl-3)KSK^OZ^|H(Tv zGmm2CRXjBl5a-2NfG&@h*r31IuCkorwyqjVfmL<;=~m2DwOd-N)n`(@kMLaa*Le#9jrW1}roG3UOWVM95sZY93y)fHj<;O3KiKeL zLD-gvNihz-lu+--QWFF}z)$!`#X7P6u3R%~))*Rkt;-B$z3slkTUS>TLf){0`)WC8 z&oTpqubZd~xCNk45Q#a4HsxPpnmL6xF}|JvS;*+8daKTvrMFtQ?a&n?6IjOVYKi5 zgNHOtt?TdaDnN+x&}?Ft3EOiZ;yq)trZSCSafW&Eum2jXVeW8ZomATGxix!AEOFt; z#l$z3#cW4BNgyz4WD`leC;Z&hr(qsw;&+=`S`tm^LK8o&-p5*{MZx2Y|l%1TJ^JX$GL zjm;(^nG8+*YS+t$WTj_7lN0F_gwthAO~xgX$~H6wdO?SSbAdg%)Ocf>9VDspR_jxP zJytxM42|-a3oO?$pFkd~weXPGlnVu@SOb9t_g32$wu63ZmiokhjX(lt3k&W9%4}MoQQRC(*&=O}Wv$UVB2gNfg7K*c5wG5Ugmpnf zagN;qvEbT5gVnEL{2ZyK+hwLu>UIZ)(9;GF_8qZ}Dm`MXq26M<9E~P~ybbiH;<0I0 z=7+;~0uN-l2w7typ3r&gk)@J5>?*WaG@C$z*EYB1B7V*Wy2Xwt`7rSeZR*m9i90Wk zE}AxV0}kaQj5Wt40kuUF7-EzNi}Qq?TbLzaNE%V`yHFEgSaVQxGeE5oRZ+lgv4Liz zXX%D1qr-tAauk5j(^wfCs6xeu^B1=pkIbFkH~^Apy=7;21z!SDd%d-qjHdcOqhPuQbQ5a4fLI z6r1D&k$hJU>)s#K-~Nw{)?Ac!G9Q)`DUFadSgTihWUxCYH29}sPdERBOxMAiH&jE6 zML0O{DRSpyER4gj6`dXbMulu%zQ-z!Xk)IA0=$k>OlO!)dTjO56g#(A>jRpLR)4-~ zwu`0h2JpzMbs%I;Yx(S;DG@aKyn^4uI*@^suXfue-UWn&i1)6E6U7OV4&ASmHDwG1|Cr8}u*UAIptPWDPBv5GRVL_~llX4l4l9VY4CIn~I2U$D-`X`yp z9%t1H-bjBeX9M_#W?x420$o8LOoCM_bhgBS!j`_KPgnd&%Xpmgx}~)x1MsVG;auz+O%h!ZZUovJeF+kZ3Z|G)s8?f1Lx?X zt~MXm+#w<6%yA!MPNP&koraHp-X?@RsHdzLW5pm*o3TJ6Se#w#I}p_d{f^kKIG zoenoP9Os(`KCD<5uqxyf7rP&HZe!jPaw>dSXZZh7uL|HC|NYI8zg@|2j0kgrq$AEb zz2G4s#+$o~J^s41h1TLbDSrCbzw%j#Ks-e3;EtXZ_<|6rZ4Mu$3Yr2!zCL`vxJzydG zz%^2m_=lCG-hW6YSM4wqc;J0(82a{3s@CEM+WZI81kry1=^l zJXFx5$X-7OLM9e(ZMzXtD>&n1Vd~<$B?oooLeK^jS1BQA1Ww3=Itv`5t`kB*p%f=e z^)eyiB^?2iYPRx4LOgTMeY%*a5G5T*>5MAe2S3pTb@c6co*v*#PlTi}Ip=X`?$6MekL5n+An za>Y@O(Z5Luc{>YT|AGh^d16D?v_e&0@gD19bW%K4%P$s9|!2>M^5Gyj!DsVk~hLPTQ)(yc1f%`Q-K! zJV+{o<1`L?32Zj8Wv^+DuQJTJW;d_on7{$hK*Xz?9W<81hf|3x>gRpEEawL< z%gRZR%M73AeW%e#z+19mS&YG%K1}oQ%yScf<}SU}`GKl}Hfgos1`<33fP{6sy;Q85SHos<6Amao@}4C3!ln`P4@D98;5X|N!w3j2}wMTU+2W! zbW!&B=Jb06QXWn&kqJ2!Mwm|nL$#g&FC8Xle$F-XshU@@Dqd9c(91z4DCxUn9ZvxR zn*dt_$*JZFjxiT^ijKKJAWKAl!oe??B^)chet7u64wJq0iP<+cQFpBvOXrd85fXh1T%+Ce5E!F%%P5902f}~?Qw z&KDX3EP$I(@vQuasRS&&Qoq3rBzV}(t0yf~dxOb=2}^WBL9N%tM2F>{8Z71OE*+V_ zFpKeb97@-xlA|pC7LkJ(w**Olf7dkD5OS)eFwmF?ko2lLnVhk6ZBUs7b!EO8Og$=`)2n6o{LnAXgE2_jto1P{?v7TtTJR%N-22 z(<1SLKmNE997LrCgCOa{ zLi*|gyY{54eyplhhwImX#LS_0`H5NXVesqqqTnp7uywslmtpX{Cbcl=yW??Vx}h+$uM#eDNMz2u@>m`4SW?WA;_s; zZ?3s~F1F*o=i}FJl-v&ZOSx~bJY|TlK6&<}GRPr-9#KQ=Gd!7e+Yn zh<$8uG-7_u>3`ASP{cfK{XX7&OcBJ3X5kYpV@25*0#>)!PDWWnF|(urhgH#hJ9;J= z#?lBVj*uLO^t^QhNe1aautlUps6wn0QH_aqASyF{NF|-`qc?zXu^2vVkZ4{5;wZI& zR~r%0OtYJem7pSD(Nr32q0Cc#t>Uw8kB??k5xGzp%&c}(Ryi1!s zGJOOwlm3dw7E8QWx(&jCkbGL~T;|cz@4wmg^`?H$-&iw}vYO)9Dk~b#t*RbRYLz^AkOX7mbHT^ ziWXSd9YoK|Eb#{OUxK_dB;-OpG}*p*s4Je^S09`TQ)nD@P;c+cMRASUDvoDRx-YTI z4PsXJJvIWJ1*B$=$~FffUd^D^ik)v>&Y3!@wF7F6ctU+rteRMFf*mRoe-? zVB!J8VmbcadT!?)#Y_lGHUpFzu>vLsQI|5jEZTs@iM0bUDYnu(b-)DkjyTO?4A#eb zPFfzYkAQ2s9|W-Q#tvk#8$-b2*q{lHU~;g$r|8GUFk;62gy;n?v?M^R#A;_i0) z(}v%&ok-Zv9AU|JD&-V*D1xMS%PqFI>Qq9+TQSI?_#MIZg2};qEb$U>x+#(*Kmh>F zHUlD=;1cmZH6oa|yVtF}6@N!!g>TUX2b^|t!(L58ef)Gv_r-FS9*F5#2v%3&4D%Yy z;d23R0oUoJq1e19E%_4&`vPwasv4Uz0-io`RYBbZg$)pGcNS?=K;PNMKX~VN=c>w0 z7?f|Dl_~9b9`GPJNctP~<7MT5)6TgyTY4bBQ}Fz7Oh6OqGQ-GSEH&dT;V4XY(NFan z=@!{$fRx`Q%?(kmu=vN+@Ck7X*psSAz$_zOD9b*Q@{$<6(Lus@j(cidjeT5tZ&G(mx9PY*~vcmn>AW9jAfAQV%Ee)5o!2F zlzf=Gy0ihpQGB33?16Ax|5@u2_yk!N*#owExzL*li}TKd4OkT%a_TL|LD&pF-Cti} zOCF)=_~AW#k_q=B5cw-hfoG6Y2bd<+Zh)juv32JL6bl&k>}ebh3NBd^p!8bb&)@)Q z$RmM;02@T<2}?vit}C3TBY{HO1x#I^G4=kL+Rzf&^xFNi&BdvUFtO}$;MKgW`~kxu zg*A2GUts&9=CK?`%(;8G%hnafiKh1hToO2cikK{QV~<}PDEa8Oj$|(P0UPHM+J$!u z-U$PYR^!lj_?s{z2zKd{YYI3-Mj|oRh_0pnspuufLyoNO_af> zMcA7-z4^*E*afEngpDyyj3PDThz38t6l0FwDYUcwtTAhxanN3#GK)_=i_|^!*|~DO zAeO^z4qo^9Ip^HEO4gsC>^*j5K39u^TiFtujx1!9S7I{L^Jmbg1K%C8AE!_g@;`0X(B^o{Xr5VD?8 zDAiZUsf8z^Mlv+`w7wzkAO%ER8oaJQTlCOzDhSH6jX4maXiL)*#)ZYWj&>-kpoJ~n z@+@h^lnjWrlN(J5N%SDOh}Q?%A99OaZXd>M!S(haSMcTbrGXKz_*&!pQKy}<6~Q`P zH*oVsI36<11mZu)q8(XKkeASD&^jFjy}Xr0xZWju@MYHxoSthzULzK=4>}`ZCQo0f z(rL^3eu$hVbuZ9MJ)ECX?ZZ>@V}M5eTuz|`dH0?JB;AaWq6;J)IY`3J^;{-IJS3Q* zY6O;GaYi2)Sb>m-lX2P>JeL8JqhrU<*axC3LCcQy80X+n&*u{=vd_~{WIvzslYXAX zobfq~KF_1M=W~U$Y#g#U&P&kSGrbj)2A{-;khfih#p}5WIO7zISrac@^q(sk0G|nX z0c9{Bqwf%tha~7@^@wT7jA@@QTJ40Np9py^MlDV-%3E#IoI6bf7fJ&esYQH9ld5Rm zXGBiLvj%vWzQLG3HbDJ6D)iuj)aaLgq$Oi`$({R$;Kf^955Bzh0UhMY# zBMa;*+vpqZ`R5^AFwfrwy6heDykW;q`4-brI#T-Fomp(ThHvMA=7xB&$wfU6z2>e5_`qcgH1=yX?StZSL!^v)7DVb6DTOR{+#P_NQJ0RpFPi*37gj$GPcCxhlD#S_xt$px&2js&>vnfOhQHzLe`aOAxmL3YS4j z5cdW4q^=#XZ7Uustrt3*yspc4S3k z1-J=gVXT-ufm-~&g6=0Icv3};lj5zvoKX{6r9_Lc9ox+Tznrqem`i}Y*;McKAXEWL zmv{k_gO5mbLZt3fkO{VQS&Ye-YJYl0wGfQi+~y)Lf$j9c&cSRVhdYNaa13mlF8fec zq~u@A7ik%*bQ0(bk}StF2+&)!<1uz9LBn))fKx()p-#g9nW*&^1W_(r?8xDf(l~v& zqK3Un27xaK|4@yByfpM`y>~%Q-8QejQGn-;)6Oa=`O^fAv$=88vuuu@IE$?Wd5t(x z$`?f-X!_b#pr$CHFGzsJa4buO6?6R;)9%&P09lJ^f=G&@j^dn7LdiF8z1kM&ba=0+ zg{%ZQ^-z=O{GeuM%t=_-r38&mX;M_3nV$}YK1;za4G$)A*t78jlT-B;OCuIS8i|mH zpT~Iz-YSBm$M2y3h_wFy{h$9=1gLIj?S98`ioU=|7r3PG#lsNHsTl$z>U^%*>sYa` zK59I!7imCVnRN|24Ne8f9hNY!p@w$T)>Rj3Ed)q7)NN4<$a~zsp-+%t%#6IBsRy?9QU~+IyV9dba7f1x^{5XS}xx}wPD<02J?r)@0 z7|(SEAMC6a9=S!O<<|JX(stkq8^UUSsV~D3pAb}XmAnEd7>IajU?4wgTCGr@Qp}@3 zT7{ijoLZb4+E*Zs3&375(p2&AR$Sm1GtMzaHbfVF%4wtMHPlWHP-_r6zF}nJ@cgmP z6Rc4ck64q1Jf3kv3Gp0(koSU&3{rzEtT;2VTG;VtM6^YATVp>bJW69DiwjHCCmiz# z)cIEroJ7~_mzYJbu5~ney-CNSuNp+BplQ}JB3?(cxUS-rHH!`Mn8i=VQ8OI=Or-*0 zskC*pHEx_5!+8&C>QSSF9iW8;@d|fvRNP^%1N3?at`uwkOA7R>o*PPdegu>AgnWuy zMHQ}x5hEApNce*XLQdV|Tp+1}NY%YQ*fzxrzdlwJ-lj|;c!-+O$On{0{WYRsY)0~G z!ElR;ReOzZ194uW2P{slFjvcjk^BYM2mtzU#~*7UKt7YShO<BhxjS%Lv;qyUNmX&D~-n@uSJv~?;=x+xwzR-WA%?RM@p_06(6Pi zT98=A{>~dtm^uf2Fd88!dSvfKm18m{)P}C$09`!h3{^Ssq47nP2_u)P=_V{>)A0*6;OIs z5_IX=8Rq@~#f@j>0yu9J}m0dbF^5LN%9uf)<-$2+w(yLzPh7E!{lC|Ob{Nu5zTG)I@S=c)wODm?# zK*&S>9}Ga1NeFpJ*^QGzGy_-|P+;Wt_+e|jT9xhb%Y=$w$r*=;1A?N*gpy?r^f-lL zUKMMkD65f_dv3^ecKwrwEuia25@Bql8p`j2O69Lh1aVO}REbScy!F5R2abGO-M5&W z;%9?|v-l#glaKL6UgKrq{A=6%=Qs%A7!faE%nxvoYA_n=le|bt#sZ5|XrNb;QIb@; zkj^E99dNbTmNhqtam$?|o3E`ORvh9uNv7W$L|lY7s^6KYWuN9tO_CxVcHul6rm1;z zjm4;ovUcK3Tc=S@q#x=VkD+0bit;}kP8<7~>D5X2K)23Bx7AsS^&5o|tdK?g9f*I8 zWD~h`mUJQ$9(tJrvQEP$AmZUqytRz2w@@lIyTy;(8GR@EVUdZQDEfmUe$wc_Qsn2W zVp6r-*=D`!zT?2F$cK&GLl^yFbilHg6wUG1x^v=iaJY-&@80?&kDX+#V*!fg)a#qT zG7Mi0cVT?YBgMOSd3LF$-1fmPN8k;V_;HHHhGAwYgCss;Dr44%ktswxnpIGp0iq#- z$@H+8+^}iL2$YFg3^`C!Ihc>8NOl`FW+=;O<@1#IqJ%Tn9@JYP&TFRJ(jzfI?C7sS zLn0?Uwxj!q#4`2~ba>FT4`XSpp?n$*A*bG)MV;yF`gLRJ9SUBhq%q(mUZrFdR)|9r zLwX_zQ4EY+JKe2I)i#K(5JDbyb5bu5Wi>u77@Fb+FC=wBka$uR8|*jtMXxJH!30W7 z71|{#+&qC9hb8@(yQ2yfmfRZdsF*~LMcH{*V%mi zmw)x2wDrFx_Z8l^WKFhPbTb2}@nGFhN^D~W#*#{*vn^8!9h{-!Q^Wx(d;XL&8vvB+ zkFoS4kjg0w5<=)D&%$Ri*muVbC6tLNa|;t+m<7L{sKse&@PyB4JB`Qm^^9*42F2*q zIc@Qnih@!#e|hG^5#()F$ac=5ybX}_F7iRbg*xVf{95%9a0N|bjJ5(D2OBxTfFYPQ z!Dy=^!{7)e=M_OSI74W8gpVE(4q)b8sxYt+JsS(LiAS#)C(7Mng6+fL# z4){N%MGIbhFX4F^P9wPsT=`D5V|BAJ&r1@=jHxJ$m)@qa4zgkx7jtncNZ4CK&P4mD z@Z<%N+Cv+kD?7Oj65|F&n{^smaUsRTD>i9yccwX#_6YOuK`N z6>p}dN80`A!5&fT#0?JC^2y-{q(e?cD34-HaTygs(VHC-MW0o;Wrx4jE~^3wyE0NJ zhOj_RC`ctWUV?oy$KbKkMB92r&8zu=Vx^naY}jdMIKp0UBqD9bETo7HzfFy8(Fg)&ksrr>8MyWU)K(@?Du-hj*|cbAc1w)T2q% z1nlCTG=)+C7tx zxJ$sXXbc%N{-_}&)A++y;;6V)H69hWc1|Bs`!jRaL<1LP$;sV{JdO5bEA#Oxm08%! zk205>K&^z2#-RIMKN?lwB{cYx$yj069mPeieZ;dn^-@v%YuOjC&N;A%+*l! zu-d9uRtop9osR;{?;R~a+c%<@+nN`=Jx9ZeTYG3A@+{2LkYDs#Y7XJm$^HQhl#8=v9-Kuk(-Ze4g9YJT^j2fr{_ix zsmm4aLT9sGz|NUmQC9#3vbdqqG< zP~Y}=C?p5y(!bu2xVK+ml-*xrx!wKsaIw9`>o?Z}JBdRR3A1v@=v*Pn!D~Z0XTiZ~ z&j!sS#=}L1jsdu5-$+( zEF(+b90q$q3TatzSHT?Z==mO>l@&K)37 z-3<}?iAKb}KG7uFRUdRD1D3;%Do;9?0Y`n0yrz7YaMTCFviJa{4((u9Crr*B8)O+B z;GYgeyjz{W1_#e0{nWiXwlOA3LN0xZBn?pIA7e?}S-vk2UP*8nw3KoR;w83OTESaW z=%pKC%@WK~YaCY64?|K{!sOr(lexXR*SSGr%w1p;-xF3TA&%DG+c?A!|%HIVI)OQ@r_^%2gE zswWBddhio*ZOsSWwTkR+hWf;iu3WvXk$Rh20{9p#@hj?0GC1rK%v!f&d@a)Q1|r^q zxvcQ`F|NkER=2?9nlMIkO@Iz#Oqk)oN*L?&!Cstw=6ixhj}bYy{W94vxLI;t++zWV z*ydgBG<>QeQ4n{aY1*j;lKxgQb)@w-VB-MOO{xL8{O8FfC+OXC=l29S6?2ued2>o7 zb>6&J$@pNL%+o_z4PYY&XV3nxIyhF9 zkl-#5djsE&i;DYhu-%P!iVJUqIonRiY4Htkq!*`HCsfe6rfL{Y5nP&y(A(qryw
jL^d{D_V|eJED?oi^d;+ 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