From e7c9a51e96360ff2e1195e347c970af8e4fae3d9 Mon Sep 17 00:00:00 2001 From: Jason Dove Date: Sat, 22 Jan 2022 14:03:42 -0600 Subject: [PATCH] macos app bundle (#585) * test signed app bundle * fix vars * fix condition * typo * fix quoting * use recursive signing script * fix release cleanup * restore proper ci action --- .github/workflows/ci.yml | 44 +++++++++++++++++++++------- ErsatzTV/ErsatzTV.csproj | 20 +++++++++++++ artwork/Ersatztv.icns | Bin 0 -> 83296 bytes artwork/Ersatztv.png | Bin 0 -> 13797 bytes artwork/icns.sh | 17 +++++++++++ gon.json | 15 ++++++++++ scripts/macOS/ErsatzTV.entitlements | 10 +++++++ scripts/macOS/launcher.sh | 9 ++++++ scripts/macOS/sign.sh | 15 ++++++++++ 9 files changed, 120 insertions(+), 10 deletions(-) create mode 100644 artwork/Ersatztv.icns create mode 100644 artwork/Ersatztv.png create mode 100755 artwork/icns.sh create mode 100644 gon.json create mode 100644 scripts/macOS/ErsatzTV.entitlements create mode 100755 scripts/macOS/launcher.sh create mode 100755 scripts/macOS/sign.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index db6540fc..c542e7ab 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,6 +71,13 @@ jobs: - name: Install dependencies run: dotnet restore + + - name: Import Code-Signing Certificates + uses: Apple-Actions/import-codesign-certs@v1 + if: matrix.kind == 'macOS' + with: + p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }} + p12-password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }} - name: Build shell: bash @@ -82,19 +89,34 @@ jobs: final="${tag2/alpha/$short}" release_name="ErsatzTV-$final-${{ matrix.target }}" echo "RELEASE_NAME=${release_name}" >> $GITHUB_ENV - + # Build everything - dotnet publish ErsatzTV/ErsatzTV.csproj --framework net6.0 --runtime "${{ matrix.target }}" -c Release -o "$release_name" /property:InformationalVersion="$final-${{ matrix.target }}" /property:EnableCompressionInSingleFile=true /property:DebugType=Embedded /property:PublishSingleFile=true --self-contained true - - # Pack files - if [ "${{ matrix.target }}" == "win-x64" ]; then - 7z a -tzip "${release_name}.zip" "./${release_name}/*" + if [ "${{ matrix.kind }}" == "macOS" ]; then + brew tap mitchellh/gon + brew install mitchellh/gon/gon + dotnet msbuild ErsatzTV/ErsatzTV.csproj -t:BundleApp -p:RuntimeIdentifier="${{ matrix.target }}" -p:CFBundleVersion="${tag2}" -p:Configuration=Release -p:CFBundleShortVersionString="${tag2}" -p:InformationalVersion="$final-${{ matrix.target }}" -p:EnableCompressionInSingleFile=true -p:DebugType=Embedded -p:PublishSingleFile=true -p:PublishDir=$(pwd)/release + cp scripts/macOS/launcher.sh release/ErsatzTV.app/Contents/MacOS/ + scripts/macOS/sign.sh + gon -log-level=debug -log-json ./gon.json + mv release/ErsatzTV.dmg "${release_name}.dmg" + rm -r release else - tar czvf "${release_name}.tar.gz" "$release_name" + dotnet publish ErsatzTV/ErsatzTV.csproj --framework net6.0 --runtime "${{ matrix.target }}" -c Release -o "$release_name" /property:InformationalVersion="$final-${{ matrix.target }}" /property:EnableCompressionInSingleFile=true /property:DebugType=Embedded /property:PublishSingleFile=true --self-contained true + + # Pack files + if [ "${{ matrix.target }}" == "win-x64" ]; then + 7z a -tzip "${release_name}.zip" "./${release_name}/*" + else + tar czvf "${release_name}.tar.gz" "$release_name" + fi + + # Delete output directory + rm -r "$release_name" fi - - # Delete output directory - rm -r "$release_name" + env: + AC_USERNAME: ${{ secrets.AC_USERNAME }} + AC_PASSWORD: ${{ secrets.AC_PASSWORD }} + - name: Delete old release assets uses: mknejp/delete-release-assets@v1 with: @@ -104,6 +126,7 @@ jobs: assets: | *${{ matrix.target }}.zip *${{ matrix.target }}.tar.gz + *${{ matrix.target }}.dmg - name: Publish uses: softprops/action-gh-release@v1 with: @@ -112,6 +135,7 @@ jobs: files: | ${{ env.RELEASE_NAME }}.zip ${{ env.RELEASE_NAME }}.tar.gz + ${{ env.RELEASE_NAME }}.dmg env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} build_and_push: diff --git a/ErsatzTV/ErsatzTV.csproj b/ErsatzTV/ErsatzTV.csproj index 3e2cd257..2cc72112 100644 --- a/ErsatzTV/ErsatzTV.csproj +++ b/ErsatzTV/ErsatzTV.csproj @@ -4,6 +4,18 @@ net6.0 VSTHRD200 true + osx-x64;osx-arm64 + + + + ErsatzTV + ErsatzTV + com.jasongdove.ersatztv + APPL + launcher.sh + ErsatzTV.icns + NSApplication + true @@ -13,6 +25,7 @@ + @@ -59,4 +72,11 @@ + + + Ersatztv.icns + Always + + + diff --git a/artwork/Ersatztv.icns b/artwork/Ersatztv.icns new file mode 100644 index 0000000000000000000000000000000000000000..4e129a9904089642d2b90849325765655aea37bf GIT binary patch literal 83296 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

D?nL4$JCM`EIxzLHgvukG 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

#kH~iL|2+PqR@?Y26qQ<*X`~A$#Z@+X>ZOv;2z? zax)99`Tfj>tv$4iU6(Y)ez2(r4t#C=!4zZgq&5--k-&T#lr)#dz_d*PzAUUJWW(xXE;1ncM$^x^L3d+4njCZT zK+t&tF&Rl8B3N#eTQzsdda=NdcM9)VIe^EajrUk?piQ!0xG-Bm&oZ#9ga-)JZ}97P zWL!%KH$EAxL6Q&?&t|kGf7t?h?@)37*|x=CP{b_@J#c=K7}R#hpSwZD<_8T~%1UVh z%Km!y6d`Qq%le36l^3#mWh&3SYx8Y~>i(i|c9-e1+^0IS$${zSOyMIZ8Y?B=K^v${ zt`v8A8m%yma^~b+cBWo8TPt144zQPmER*hX5H*C3EDbHqlDxdSI1|y{&2>FCjMgim z+f>Ws@HGpl>k8FvqSFK%ahJvfa<~VGbdrH_k{nDoQZy@`XsD5r@H!dQHhFNr*!B=G z>*(%{wt-XMf9x*c7<{?1PHItIt>W&yxyc$T%oh0^@k!ZtiWaLY%uh!gv;vrgLYRB( zx~Zd^)tfI*dOYf_N1pigoYEpOwz)h)Fol$90>B&8~zyvBNA$ zDPhT|tgI+H0y@Lcdo?bF_mx!h`_1yeB@OfaB%f@arKEgEm|u`%xDGrbZj4_hlYl-a zZ?vf(p7HJp1#E(JfEFs4QQ2m-<3$KZH=n%>mL+LwBrBt+=N?~?v&0{x1_iv zbT`JggJ6gygwzM=+i5v}P`lMhUdFl2kcL4%jJ zI;rm~zN&C;IaeOsRq_fh7*d}Md5g+=^)8Iq{c#3+E|@&2pH{|N>V4Q#XxLfRPnatL zz*jFZ0)(#5vL($2j@Oa7@h<~Qw%E^}=jQei-kj$TetbHv0r+S7yE&J4`=MgHf&DmpN%tIW& zJ1~GtWWV;ve~T7wQdaI4TGVlfaH`buKMmc0EiJAA(*bF)q{RA*?2pU83Tj zc;Z&JmF|f%di-Jn=~DO4>-lqL7Njen}|r6m75?(G;fu zuT<;%fTMU>u`TP+_3+EPaz20^n@<%rMB%3tX{(~|zn=O_?)I#qPk!Y3{V)0-J!@4O zk+N^mwp+?tP*c8xAaV7P@y#CSx>brXE-*GK;-P%Y%3{}fNt;52*?1`q0hA zr_i%c+l(@yn}PB_20r`kl*p&V`KtID^>8=oL{sgG4jCARwUoPzI`?w{-*YimN8oQ{ zA%G7DpB+csZn8&DFmOyzzIh;|(`~e$7Q1F8c!nrFs$?~)za|bIp0$j<+&pNcTyVlf zyXYCSIl!N)Ovx}GpVkmOPZWBRN@CS^zpo;Kf0m_u}AiD_wODJ*Jw>q^C7 zn1QvhSliS*@}PwpJAdFYC9%CvjOI%QADuevZaf1%R3lk^;>*pC$D}sB&XM2-j`kDc zMNFI}UdRky1>!O~iUukxnT=v8b@+eYdz->unqV#gr3gPTCN?TS6CC!`PH_2knDnK4 z^$GXZRvkd}7h=>hTv93rc$&FifB^b1M2fX76gm9rw4FFVdq-X)W6XG{EcEe2>EI=a7ltTn12 zXjX(1GVA`VO0;_Ec>LkPMOu}!FAmlX8l5X>kchDmWgoi%qK-Ur_U*oiiHreD4 zcr8Dc7yJYIr&2$vw3&oD6 zUT9?<`?3Cj9R9d3pO-LF%rOA$o5x>OV7_e2{cT1}V8B*3a1r7ZOF3A)E`P)d>hj8YK+JwLF2!ie7qprsE!Qo~72<8a3buTl590Lhr-x28X<5;nS+46IyK~dQ~`@u75r%k42)&t2gZO5*C-mdG*haTL7hOZ6U zb}G)Pn8_GCX|bLOiPPxR7HCbSDg0;+P>4z zPltc0zCUX;(D5_Cak8@Qw!7ThPrvK(sH(^i`BaPtwAn2z`|Llgo4S6edMfhhaY(3s z0nO+*(CM3CYh|vtT*2@XYkDggs`E%;gtUPg*ghbnO#E7jn zg7w}>d$x3DPAf$8N=9mhDTj5FxKj2(3Fu*abR(uwDJTth!i93z4n4PU`akLSl2T zJt+kMh6+cB=00HoN?$P^ozc;a5)jyG1Hk;1P;(E)9kRB znNr&7{ZdD^ClJT)3*-_6iFOCS`B(`}oqtVtuy2S9atWjUte!C_hQwNaVZ#QroPSMl zh=9vFw=VpK<0g&o^`O&MyN^l67Oxv!I`XQ9@$33sa=5d?gRn7xi8JwiPi?$*8nLQ9 znD_FtX5o1rT~*xKDY;Q+fyD`_&~BxIGgz>z#K%d1s4#Idz6`TVlG@>ABr~f9^RFDN z797__rWo)bktC#hN~M|@M2Kqx_$*^!sg|~1EzBoi&`7$VMLu_TD+A@PO$-SxIJbQJ zpc!C-7ZClp3HPCdpzl(eO44El*N3h@YTy&U75U~NU{#8c9}y=drKY^+){}{y?l?Fb zL8t!Zr`(UL{J*OC{jY7w*PBE7p5D@gl^GMq4E%g|8ksJx&r@~oO%}(`DN+QiodO6` z`-=lC#I?*5h+dtUoJm5)&|$TFiDDIU?PJ{BIVEtxCd*}RM-%#hsdbyf_$47Z3z zYX6z7vL48M(UFy?d|;8VCDHM}oq9SToxDZbmR{!Ow}#{0kv0hr_jf=^NgQVgs2hXO zeunu$_{Qf^wSk4AQ46w4m5YmO8;;X2F7SPuN9wgm_&RsrB5aO8z9}HwnK;zCI3rNl zGN!83?MO1>=-xc@(<(PiY?nTXF@Ibo(f)mA?**HSA2*c?n~cq+Q=gmIMQ+|4yUyj! z2_0yqJxL@fDI=xFWpy_%J#Tieq=Dl%TzwJ(h7<2UP?NEO&ZZX^6C0!>tEps{%{*hA zB=C^N?|ihm_#v=OIFTMwN7U-0Am${KPZ%E{f84&&l$_zr-f1>t z*lepH8Af^2h;QK{FD-Ucqx|n)@EH2F7@e@_mildLG5=5V=`>>ByVfRO10=q>6Efdq zVUs7=Avg*>66L2>ybj(^A{~c+7r<^SN#6v~gwBWlQU`zacjrj8>7qw;Nj{u-M2<-f zXa38Y2|R0J9Me&DF6`Y_A^D5aDw2otYLd)1hD9E}J1@iuDfX%mLOee8Y|Ki~y^B`I zu5$J`T>ro_>F{%TMRx^+VwZspll}1hEI~Q4&Km3A$uf~*HXk=wync*~q?MIpl&81z zHYX&fsqt4eg8;IV6=|P}0-|B)FyNS4(JwKy7-hlGM)MH>B07OQS29R^;-p@wWXew}P?@9ks zE&*|hzG@?KF^>_%g2yvNf={H0*L+ggCuQ zsrb{C3oeKao$AB+KS4i7c*m?DZmcVjK^S8-To35}6Tf{?QE$fHsM*WA@KN0ZSmy$F z_r2FBb(MppL}Q~KjVYwXX*?Wn{rr`wHTCrwKTeaB#|N#>Yt3=n|Br@o7-L!284EXG zu=1!06!^?PWWPx5*(*7Bu||DxfD`HtKZ_v}A)LyUJv-;_TlX-Pwy0Wwtc)VTN0(QK}Uy0Z%sUZ`G z(P!M^4YXuBI_co^8)V7mU*)fi%v@6Zd6oGgIY#mw10_KxFxBWGm9$K01zP@h;goh) zxLqWx1Ok*$h!O8WZ_hZ?+?znNzb(H4?kSGy0h-?TUI^sxWQ_T zGpqR#`ef>NW;Qw&TgQ;m2b>oFJx>k$0T+cwFlFroOK`%s0kX~vXG>Zv^SgFP8g=s+ zfvAu#iSJL`$3#=I0H)4FJ^G;px6F%8HZ5jkhY+9V-)q?=A@7Ab;{E{^K8Tt<`iiNc zXj9lAnBFaM!zynb?GQC@ibBMU^4tdEQFG_Np#HYr2}D8K=BjZh6Z^=%ABQmgP0v6a z@$4cAZkJ#Y(LyswGpsEB8O6)aL{qoJ{b)tL-#O*NgYdRK>wu)08*Kl|0S_tIq%rCkk>`1}uImqb)d<~b z2|tp4D-l%8bp&HM(?>k5f`xstL61ltSEvOB{~CQMVxp^}YPyP$nRY@2P-Dj5Mwfsf zEr|=eN`Jf0KWJ(H^vB1RBM~w!OmoQGp@cG*j{i}e2kg(x@m+52nRL9pbzDJWdG`Q%7Tj_Q^C&$@J^`kvfa7Vi@`BjszkcXy24csT4FQXu-IKI|SjhR)Q1NVElE;Av=^ zIuxIj?+U*&X1;+GWo>Xm?05TO2yQBtAOx%K`KE&7Y<~P9J|Dhw*PPPBS*;-eLqFa# zd=i`_puFYsm$(#Y(KB?Ii>FlB$MrJMy?3UbSRZbgMh1gZETATg15qC#UpW-JfCmSw zEcfx?>y6n`yNViLZ1i{y?Hb{qZ%>F-oy+VhfKD9?H(j(-E7UkXzhUZA8JviWzhBYVpfGD&F5KIpa zf8LCrGn?wt6u*biO>G8@CiVRQ!m$Si0#}7g=`O{eZ$#`me&%1Qv7fR8Pm8Eq{*N|+ zOlg6>J!`P|*S5*Ee_Qg}m?7u35S4X*znQ#WaWZ+P< z&R<1?_Gz-F{w~ZoePHBYiiDe%t?$lllDSnQK_|m6{;JpZ7a5=dyKx^8kHo_MXf2dJ zWnTMC<-U;wRua38Etd#xlVKIoQ;Fw3*Q%VOJCOunfQn1e1kL3O!jfayems3TV7M|0 z1wP&TnLiMV$cuB#`HX-CB-#L@R;ML~-~<-nDsx3AT=J>)*@HW~d}vmDa?4+U zlWwRK{=W;oEaemc|2F0ZdTxN@dSADucjwZZO_@YYlhsTo-k0(t#}r33{tcSTur9}b zMaxT#%nbxlWX62Bg2QpB_2A{eptZJL0^&I+`&YiQUcd!?b>yXIaW8|`zdS)r7d^lR z^zBc}G_-)MNv(ALB|%Y{=?pM2kM9`G0&8z)79^Mb~sgy$n5V{|W`(|9j5N@krULpv$nQa_b-oo#%~}$UYG=!8UDIr2n17V37p*H=$-pt$KYzq3Oi(m{~zsL zc{r5c+ka*Z&5*Lw=*w8LXDLf0jYMQ$k|le{60&8R%;+mgqEgnfWX+yL*(O;^w(Kez zl`N@jAz9w@3@yLk`|o>Q??1Y(%%tZz=iK+X_xp36CrbKLEA}*ZzZH$GgYC0F^9R6v zkc&rWil6OgR$hF)zbep0jdbo=DdQdBu~L4)h=FaIr4NYTU%cp3#`sg}s|TiXIJE7< z6rkT3*AG1>y8rILz~>72veTA2_iMjMVaVYx5|`_egVwFqQ(s1~Dj{F4@4p4`kE{<} z{%H6V=4x=vAqfGmWFX%@UgG#f&DLe{FlC@xfhldj1717@=6DQS7Oze|v~Us`cTIS5 zrS6!n@_Eoo`nxfXr+AW>kDep(sY?@F6bJ>0a*%zm<)hzZd`DmX{x6IC z4L-*U-10w_Sa?691vEe)C^IRc{hNdql>fJ&HFI;bSM`st-S!IqVX>B43Nou*rMkah zQaJoZd@V}SgxOm3hz{@M)%_=m1McSQ7)UclP)%ODIQ7hE(!3BlzndsbCjnLG+@$8} zP_pEGsb~Npe5(69$@o1q8Vt>u`+yFQ@HPGqPbN7IhPFdBNhg}d0n4J^$n?9wi&q9_ zt0DjK)peH6B{464P=UiM?D^xaHsV245J$;Moq?YmME^AT_AjeMBm?)XwkWMUMFlG# zX9X~$htl=GBjn2hz|$Wnzdd1t#9D{zp%{rrrn7%F|Cl!8>^OW3yzGMeba>Se<3F+s zJ79R(L-bdNoci$gScs8L>+c>QJ8Spf8Bk6iEHQG;Nxk+Kz$fa z8viFd;ZULKUN9Grzp%7_yrBce1(G$D9{J6(dGV4eMv7Y9t`-S^aymJ}3fe?}wqrMY zrQ(xb4J3j7Dj|DMJ_X6^&sap+?%3TAiG23lgyK>v$=_$%9~ohbk*C-ogtbv6k#?09F*nkKW840?a7@`=TJ_SssqBKuX?z zviI!shP45?M@NKgjJrVR@r0Vh22aR7NQI7?aXI82kXHCwQ*0*`Q^iFq>F|5Pndmn5 zb2@|E7G>#<>&yeWfYM&~w-3R3@@oEEa+-B1>8ucI;U2HDK712jX96)QyNO=t?MC>Y z)f$C`9N)H4ecmWa<#zJx*8Q}@?aCm!vfu<5$(peDsi>4@_B-3K5Ieh?$mYVzz`|-L z)xpBRmdzoXwe)GyGA!I66O--fo8fB*{aclv_c<{QOkOi=_u6ZmTz-T)-U86d0$lxO zImp!{VU>Ap`{cmE?!87ccf+Bu}NV8`Hi#9cYabk3~ml2{nQ6@ zJ-~vwOqqW56gud)QV`V$H@*T@DhHxDvauGbCZ;vzsTY@wjWi>!w&N z#^udDs&@r2Co?v_O_kM06?J_>fGqhwCwO!qXgLx27ZWq+@Zo-7(Ip~BHg(`GdnXid zyD>@?bxMa;)K}OA%;mxd=GuF;1fI)wKPe_T+MQAe>RgXF#=VI)48 zoaV5yP*g21#+1wshQWYrU25eBGnGa>t0qH>Y zJegsWyDui0Mu%@~WX8hmb?2XUxoOClWK6MYf6=O*whzI1@)rBi1Nx|xd-|G_fvSIS zuCwTnmi^J@@@xsFh_{{xYSS@25|sD%KTTf#QZe)`A7_{cIGYvD%(1a;UM7_O9#nvj z?@n%vFWgAj5%v1yajeO$exSLtNX%xJEx?qbRHLL))fk0Z=JdMW8yaodI{mpwwby>i z&b|*q8@oorI!qRv{_^$fp-2zZ1-*P|?Uk-P3!hglDC7JvU1$}iRJS@G3I_eiLEjyl zMHn%rrQ#mcQdZc3fAP3vK>Y*5T1aK6?5OmZJZ9;X@`^iXSqZ?kOHuvK<5(!V2LMB_ zAHh(2x2Eh%m6K=a^0g>Rv~!`xthPF-3UahU97t|-<@jr;HB5mzF~a3tJ%%jazi9Qk zf~jb#S5TR-^ZTnjrk+GCXVBpcI$yp`v~~*FtvK_sdcciqHStl03teSehjohq zs~)FacMAtEIH+p2mTDZF^;i}%4U^pttBb6#^ca89V?o;LC*&`a0@zrxH%W#u9Z~Z3 z6*?ZH6D`aejad?hqS|+AA($iz`4q33xuU8lev zsbVj|K0S#Q81bUhNFhAsGBK(YJTaqC()P#tWM&{;5A^(lI|m%`4!3|}! zO@qgjV#%XOtX_QbiF2SL@e5)9kt26Tzjjn!8uVvZ;nr}fh5U_3I=n!*(sp3t3>tjk zu`UZruWFp<1>eTi$?E1(w+asKe7XL)sN>Z*I8`${Km|11VF;O0K0LvUW74+0daKBt z0dt^({%NsHAsrcer3vUeL^1{D)1ok?62lY#Bd&x6tp_x0-#VGy`vkI{=jrZLfxF~u`rj`=o+X_e$Tb$@wQAc$nNrvPk$u2WdBQf)jD!_*@8F ze**Kz8rrrVh|gQ*1i{-);01k+G+khiOXepnMqTrl24qaKa(!mdI?4#Fz&o#*1+{)? zpnsa0qh-)9Jr!~t9o0=UhQUNRaY=RFT`mNMOgWB(?l^AXgWZX)R4mgOJqp2xnE}2l zhqkG^3IO%BK-{IzQeFmfzJui~qF^GlyI?GUL&eKJJl`TeD+l1sji>?-F^zY<4ej@? zwE$3_p-dJvkdHz&sUJHCk9G_0>pcj2$lX5RG0uM&NbCW&nG~4&8T8dLNtK{iGj3r! zrF8Jc*}Xte`|1;$LB6uxLy0P=#_(Y?8TC&ch(2>3LuQ<`4SDv<5C3Z+-&=lk51Ios zo4INhwbl@YT1hLr-0>8J?hyj=^IELyl(GY$Xek$X4MQGo*mB_#$XpUO6D&9;HQTG# zvn5V~h&a@-6MLx}%1x)Yr^=xisO%Z2??R~($;(Jng+foP-O(}Kh!cI#cuB4i921b# zkrycD4P&-Qlq-Dx=q$U7(B0BRP1>MGV5&hAf7m5~u74ff3u7Qc4J=#^S>kWPf%%g{ z6?_M+d<$^_Ntim34WNzCTG{iDLLjCl`-2J3I=}hwJZa>RsoZELqSM7Li<*7_>L~v~ zoe@D9tI->O#u{{I=ict7UPJ)><)x4>2h|6Gq8Zq3PbiC%;#~6SmwvLMdCUYHYBL~2 zqNw`#7`AXWT`9w>&lx>ckf=u-(}c5bBPvb2KQ+}jIxuG-<(&6&@EUQ`lfA`E;Is24 z`K#5?&O@Vu@wzD4EAn=Q4hD=wrAZt$vCP%M6(W}sj?7;4cJzZIxhUGEMggugXCOnt zMIJ4>G$3l!rp5pq7&F=u>PCSB2}48lQAUQE4(g?7N4VVct877_R>O9-r2c%a!2y;L z@Ldc(b*Q-VG>puE#2%F*&(DG+N$OVIHmY3infAyh!FCxOS(cooe|l1-aCH3^=b2~# zfb27nr3TNw;<2WPtD=he(38TF2K2u`6w&4jH??Af7faOUfS+rNH=vRnt4guDqzIqf zBS`?W@Vx%*dqJ$)Ueho22>@GwDmw^I*}z&tkF#!b)WH#nQ8kcyEl&OAx)j+p5ENf- z=L=JFi07iyl4GYo0ihu`f$_O%6y#S1%&P0}02t=4f+nzt74#Iff&xcvBEA?*H(vgr zY_5wbNw>d`1n~B~+SF$m7?@J51}EA;Yn^n0_SAe~%ixsl?R5pqCogIGp~|z90PLN>f-}LE5PH;FYuCm#mT%Pu&h>+d!Ukxyczy>bZ81VC5?qsn`&Y` z3|Az*N7iMcS16~dw0m{w^71RVXz#>Ey{s^f)fc43i|X zH#P~X%j8;<_$LBJdP^IV)kkzHn|73~)Rl%6?kb`qCnYt(CJBKowr0ervXT?Q;67kC zK?vYO(>I-E#4Iwa=asAJ`WSi1RgWr8AptImfhlauH^Q*jZR-b0t*p(jpeB$ zN5a?Yq;H=vW=*@1guV!oHu^+8OFUTRXihJeB^Y)4&qg`KnyC{NfM|LNY_%kXzjT4V zEk^(B*c-odnRIwg$2cm=tVb*jW8mi4pbkI!i!<_=7k2pckI-k0mg2sQ#B#xCs?kST zGYz;Qmp(&MT!A1U4}xvC{$A5-M;)9UJ2@gi3%=CV9!NMu`h=22B#9>yF-JMQN(bKU zO3PmDoqvB-7LpY5ft?W$AYs65o386>%PVJx(boW5@$v}HsKMMa9WXJ+r)A++0I8`# z#YvK`p|XYW%PV`b=2QR4+QW`Sfu=V%-kFy0{kU3A)s1#-O&Z&~$@ez+$WH=^Q9Rv} z%|v%9=9J(Ba2)b%UauDc`1GonTL^H#V^PcmPd(0CoRKJ zNo-unS1mdtfCJ&Zg1S(IV5(d)qDt~CxOQ5Upr=b*H&($igH5AU!QEm)(87Q#R`D_#HeO)Fe(+#s37d&jASJGyY4Z9 z88Uv#_PjP(_xM~)yYVd^1o8{|>X(1Tx|~rLw8a%`mFJ$shk;H5YH#&Jst)J@DihX@ zlL=SaU5QHCf?~*YR9EAN=C~4|;e}7mufHiA5(3KQUhleLW=nL)t{cZFY)>FKujhL^ zaZi2z+M(!_+)=apmSN%W{DdV8jN5V9)7C;Nr| zONU?FbDOHL4<%!`iXM==#~7JWY`8 z|Au(Pj{lHUn2YW$b+oD*gBdiiK#Q!B}2zCtOpYL;9*Lot|XFdEkF^{o#vgG zn-gN)^-zcuBS$N6`vP27(K#yzC5fI`!vhdfa`MLeAKYQ?*>sH+Ps|DFE`XmEZNhS@ zk|Ywf(?0ltUXWAG4_4k9@lIf0xZBvDpB z@8r#9XteQ9t(eG<@dsTIgB*t9iSsIzkXw$&Aq}PM%(a^42BjA-79;fNAD_S$zpD$C zbC;_;2Md!eNJv3?UhBT^f$B4KrW26D1r@^D4HY>WmLuW3p_vK8IUVo1)z@?8d$*Cq zP}ZRVhfJ6+IZQH`lK%4k1DSLuRgs_}l?<)Aw%gaRq)q2_fJ!iALDClq~p z6?jlvAK+fwB6X>^pkA{N6zN(cH?Gb1-dGE~4BHZjq_T8-z}RQrKkd*it2{lBsaAp8tda&*I)I@xqjpY@BD zP6S4aZ{v~tn!|NCyF+SXuKVj;RMd*#$VJ!&CV@N8Jn}`twgmw4(3u)fOX6Sja0Qet zh6Dwa{Y>GpS)N%-q*2N0&+dqbnHc)1zf(VCqZnKROu@W`dElRNIM7_sPbP&922b%( z4J`bNjW3{hNr%q~zqMI9`t|z(;H7_ME*rZBU+xQ<;=kkI4Jm_%SpfcbK~7m{di_nQ z8b1VHF{D&A;R&%pPRup;lwD=GJ&` zV8(p?j2w%oOt&Z_2TQQ3y`4+j5qn|#<`!NY3&t=5bHq7YHVnD~J-KJe?Bzj+BQMX@* z6?fp|7e9ahdcO|b^@L)GEvl+gMS1A)V4r<@7+0>TjA5SbVMfJ~paWI1Z8bY5-z-L@ zXp6+tKt(^3xkvH_of+}Div+eVms2^X?#zt0B_~%_gtfHN%kzY}c+@Wi?CxE0s8oAt zmwwX%v_YnOnhOX{KhRj+P#Zi{< zf?emf@w9hI<5ZDB*Prq4d11?sNnS+PsXyorH*AAGNNGLtb)~QHQ8b~&2Y9`apOq)F zPC0A+;1QE_s%srqUsjdhVWe>J!G2PBT=sM#k0gIQLxL`MrFW@+ziH!Dv%-?3pxAy$ zFb-u~_BP0^CFll=M0}~)-puZA(n?BNj`}-tcT}r|uJ0${w39w;zbMOUsc7Bc_lXv* zG5H*~ot0B0FEiGBNR3Ia^zzusRl#(kL#n}*eP$f2k{KEQ7%Hi>?`KoxS<-x!@)R|d zRZhlm7Rzv+KYEgPdqP8Vk)->nsz)5Ee#tz7g-LGg8pF-P4@&;MTXfnhbDw;-1(Rv~ zeDN_=$(tXqJS?^u(b}cgoxDx@-*2*hCmzQeoG8CTloz)a_gik9=7r33m45I)Ut1W_ zj=kVU_Y60)!~O!%h*x)Rut^(P#qD|w>U2ANJ@-&WdXsyZV20y_f$Mi=kD2VnmfT1` z-+aqn6)#%u&wRHdj-|&3k4Kn%`zPJT#)K8EbNBtoX_lPnal>sw!l@5X@p)%Eg2@r% zELR#Wxpr5lcQ|<^c@8613(Oym%7|{0=9p{{{86v*_z;h0z~g$xcB3n(X^p+#=RaO= zyEemlPGL4M5c9M1)vE}ji35wDq5BeYF;K%Lua6Yk=HRI(jb^$w^PIFDZY%d+)-(Cl z^`7+N3O}M?&V}=nCk4cDFJ=vU&YcL+{GiQ_rWqS2d`yg)(Qit+r0vZ1V*5XZ%{%hq zR`z|xOI9Q)cIx^b9AJUz?>?Yte%xPX6|2>N<@nF)H@ zyE;1f`mjKVOKCPtJN1mU9RnRtt8QNO3XL)G_Vn~6B61kEb8_v%@|+O#@N;+XX56up ziIwA|p0T8xW1x=(_}m=GRM5fQ&c`Q%nT3cX(qyo)6H!E3BAtnc-C0K)CJyjlj=m0d zzIN`O&U?KbogBR#JsccOTpT<-;4!&(bEKsa>AHAveEb$0Bf&SCZG3g~Ii+WO)WyLU z5Mt*Yn87Dtre~~AB>>Hg6%^g4prvDIY-xAKD>y7XBJ%3B*ctu`A% zQ4TX2HOaBm4v86u=rEXx#>6nsb${5`@6YF--yhHOditZ$+;iX8@qHcc>+?Ce!`)5! z8_jPJLdu&rx%`Nb9Q;=fDaykin)Y`|@JA_P(=Sm7&7F_`kzRBqN)XaRn_brb6r02E z8j9BDTo~-}t{&6QQKX+ljrq3?)0fMH7!=#elo|$alkNx`Q+ zU2vE?ZhbE=Xyu*zfv3csOP}B3+7IsC#jyZx^svctJ_-KAe5(YXXa^mCqB)BA^Xr$d zHu#Ezud(noAK)nX--825u?ee^PeJ@3Ely0w5`^BhktxC!yfWl10#zpZaS1{T^zf$> zNe2JyefQ;xNnwf9CMe-`2;!EO4qk%6X=8)oRpQa8IIh9oW}VsriJ`%CuKm%B_{cfX3MLQmNjd!eyG|HW z<+9BJ$-ICOSVlTW^1z#7V=C%gW5UXgSQ|WdKlqRC_;=rgwShz62rs}xge+ZmeBfS; z_Hx9TMe-`go}SS);&bnK)TI)Ih>~$ijj|p>X%FO!m3{8L^|}F^LQ}E-#dA5xa^Eu@ zC+Ug6*d<(s;oPZ-lGKlEMa<%6Q-`comKw@ood4Tw_=lA_8#aC5 zN+ubYPHde8y$N`=R^cF8kn6XQ4Ayl`l@L@MXge5&6r z0Lk4g9VP4V;`W2eeoLxOH7H@}`nR*ChPXTTu?zxBz`hAH6PCBj8>1GUd7679?v|^7 z=d?A6xrR_@`XiSRBr^nMM^sWR)K%7i4VR{+O5JdHRvl>8Vb;UWL+twh)Y!)zA#|~b z0s#j6Q>&F51eOK|N@60;eff)F4EqItM0+td)`fT2TGfO0g^C*!CdXb1rG#OoV$GN} zUGo}N2d3pO!8)vU9M{EM_|E7Z7q*Ll-g1K{eC?e6jusBqt_ZYK)B3ny7jOUc>v-3m z+@-Kwyy_;JILx3%tNX0Q;*M^SUWH|5jU0V?TZe3LZiYbuRXAFP*L=KW+vUhHb|DyK z729%ag+6xEy87@_#A2Xg8A#6ml@Nv@lEtP|(MMxLhj*PQ?=TF`R0BGnM@uoCZlH4v z@YHk}uuIW@CB{X4z6a&%@NsU!LkASKG+>1k zun#LesXhAR(#dfYzDOdZD#Bl>G^2}wN7zY5{+4e^dfptRTNdblo-tk(pGu3=1GkNhUz7uXbr$9(E@06D*eX>*F$k|b=hK|M6q zutsoM@^Jj)yOwgiWE7>GA5zX*`zA1r_W`TA4HosTc%Z3IzeU(%c@K`wns$_eCM*CW zM{uN4$^n?qHs=N56w&<1f?f!&tGErebyI_t;1eDw;h{#R|1+K1R~4V0-^`c|gPe<~ zbrtz|^cjfkXZ3l$#PKJy$E*A`j^!p|HOzw`T7DQ#4vfvPKYAK$9dSNm7AHAeNG{jn zqGKnqxNl831sH41ziD&QD8gl+aTe^h28~?n5fbw?8w;_QYG=K4 z4FF)(?pm}3`_Jq2IEhg9nsx1ST`ctU9Vi#T_dm%`RfgOTya^iN>8ab#I>H0H{FrV6Mk_*$OoLsMr&bWkm8K%v8^F77*$Cus&5}C&!%j zcMY%HU8f@Mkma1R|A~xOr;MBn@@gtJ34zYBld9)dQh@2Cr|tD2GJl zxb;>p{$W%+b!i0(x}W-S&|kv=peR}-I_zk|>iQsEcfWb_*_!wV|6m09eK(zDk1Rhp zyTrS9qvF6Q$Y0sUUfkd=KuVI==WRb!<2LG-_;vJY07q;$cj)yoFR!sw%dv=dJsw$K-(?^yuZFM@tf~~l3p8xPZIblHd75HWED-3a0tGD zVs2rO*w9_O-Y&p0IA$#dIkj?P7Uc2W^NLsX4L1!0H(;@@$9Ll(f4UrvVSF39?;i_n z7UyGY{{^Of0ejq@@JalYZ)dWp(-O#Qr#-WmtTjpUO{=+{P($R1-%;zu8GH+p0nQ3p zr4GeF!pR1bTK~?$!=P{bp4YP?90tQ&gk6-%jK$;iX6?Qo2CXr!eulITSWu-TY9BER zN{qm3%K;--vi&t~@F^9ip8w}%pOk`S3xnLa3VbEeJhXIbG#j(p@`B+spy!j|ZVr}8 zsi^O+?S?qQo0}q(^KHjjYpd#Yez=6%(#B?q3}GTV8%7D?)bcnu`Rs11Q-8(}d#1DF z`EdW^OVvr$O&ziZ_!rI6N_jzuNCo5U+uy)e-46F6W}+~En>%T&@9_BkLtZ%L<0FYi zaHKUS+KcN}SI*ZaD5j75ymK>Kk7GQ4XH)$1#sa%DKF^_IQ6jVLlBVK!vp+|PQn)zi z%DzYMlGk0UG_CzpH%dfL#sXZ181g+4DA;iXCv(w1KRsOltHHl`_}Y#BVN7+>$Ez>? z?JMppp($vhep+q9T0mLXVcXu2W6vuh=)Bc*@*Iu{cV`CzcG~wukqC*Rn-VBZr4U$i zVvCMDn8(bjmLTKgXqV&D3Sc$pg(^gaBx&c0Rrs}#bSUtdPH`k5O+W>f=H2=X->suh zXA)BACACEf!JlSORUi`o&yHE2O{t;@XvW&}XUSB#;O%oOLy&JtOtJciY(%2tezM=HZOPwb_~e>T zJ+`2M9YX78lEjODOJGeS=-x0y^b3}CCr>%RcORm{oQ2l+LtIFOe#@YhG})1 zOIfyU%bliU&yLx)HF-X@W96TEv4kz5TpJYxATcncmXox|Ymg1o2NxknnXQi;|mvfqYI5(Z(e-QZV>?Z?`pk;Iju$lt9J#p9I@AKnfR$`kW3jOu zOS4NA1S^UTF#N`^%!eMi>Q?8hM>?Mm6&yScn>BF--04lrrNI7nIY>wmkW0_o|Kabx zscdKurrUZ3YEBWfu;!r<*QdM3<7dF{x94GEbfIF=K}Y{_?fC~Xf&?YQjtqPv6aeB~ z!L9DlrY%2HHq>cTh@~;#j}@}xJK$2}+T|!At_z_p%WHOUD{A z=%ygw?vlx7MF`N?f0oZ0F%;)@^)3~-M^IgyXU>pk@?K|I)~fb(AZ4rS$jR3GP4Nzd zR$8DH*d(}i*wz4-<6p98%V4oLBLGB!kO)5JDeb(Ul{|Cn7<&CueRz+#Nm8<}k^b)T zzgi5j{Mlsy$rLg4#H+9|{J@19q5`CQL6wd`4p>|iZtT;ismBC{Yaa_@DtsAE|c zhKlA+oP~h*Y8$rI#aFzz?5TKyKI9tna4l%qL@D2adV;^3W;^m*`$~OZhS#09=bZxK z?LwM$A~s`MI~7q_!I%TOFkLAE&(16^gMw6LOl4Z|Yx-)pffdH!B9Yc%Xu26r1QV{+ar1@RhJ^YVt+JfY5|22kXEspE$y@jB3GFI zzuC%|AGG~6}I$42pWXt7J1uy(C%E@(^&(O!0nZC=opJ?T|7p!LbwH+C#wGh-< z#;;-3hJBis`}4r)?|8d4SZfGe3fB}<0tf?q62}03*|9UrbIPXd@wHETBqL>W0%x82 zav3Uv<|KlIz46nBQ935F8Hj{=6lIcUuf&4u)?hgt`#=5s;T0qG4PWPS`CgCp`<%a@ z%|W-ep@jELLW`d9y?AZNPko+EcV;AT|Rdk^61mG6Tk8MHU-!-ChoBDib z@we9{O1M==(|=2xH(Ud?6(A%8o4(8@M`EgD^m*(yAuV`zC9Xm|5(iy|4BgI#VsF@M z36ffMs9|yJ9V2A5+QYX*!kePP~vnbfur{ z^k9uSYG+plZK~irT&18JiIb-dh^4+bAq%Q}LBXd}!~T^P;1+C_vW>7#590gSOW@k$ z21eM9jgX>dN7Ki|8bEJ5n3TkBXc*bH<9V-Gx({nr)mV@+^y>$IDoi^lkr~xVj+oXa zOiLYN|9WDI}TJV412UIlr+g>W{q)?#u zJedN>rS-OaG{ZS9_IL=|rWr%#b`X@1oinC11;B`fNrh@yD9=|*O8XsCnH1h8sPs(J zLL}A+#2OVk+RcBFxy02tY(QRzf_(H~FLN4nlGG0k>)SP)7vGI*6iPj@b&4H}Oz#_w zE}-{G!-RvQ3$dPj=nR%`b9J;#Q$j_A`&UPa&~(5vaXyH9HYNK^T2qFWl#7!GN*1oz zw+BWam*zVZ5;P7Ht%Md6Xaw4wnTx_GNTdfFnLQ9H%)G5|ry-P{3`yMT(=V3hVy&%m zJePDHWKh3lWWGP8dz$lQw8Dr4>ndf`dqU`vCG{3*{kGHGMI=Asrmn?ycH48~Y@&$| zxS2#yNJXug?=^J;h`Cku6ZYO!(^@)CK!a`w&dGs0NViW0kGp^~Cnb`0GA}#H zdYZNrYw14de_b2TXS{jr>c#t@R-MN00t`k=fMAt2t{?QaI6WX(-%=kbiL*UN5X53# zjJ=omkl9k-qa}4D05I5d^}2SOHLZlWBM({A+*1cyI+O?#k;%)4Dmv`T@){03$vfR9 zjyf!Z**E*eDDyaA!se>(?lLVcNu7V71 zNsKCmg6~e&pN%v!Ys;k}$tc2rpx5C1z3q*Si7M`cVyOm3S%i)M>`_N=Iv87QbWy7u%A9UTKwWfXP2|&?v2q#o=d7U?<6dv!9o8& zwQqXKUTU^Dnjs!Nv>f{}CkrAb%Uv9lpg^}&L_r3y#te)N{*{%+mN?HK)-1dy0*Da7 zcd_T{pAdIj-6Z?i5;Ht$^4o&dsz8wB4mSRf2!$7BB<)19F=ZRmEw?61ctl!_%`(>F zHP{sDmb!%!0$nsjWj)i(a0M&x{qhQ*1_v7nN~%C*WNW3OhIv6F9ZXg&|L7Pgs%VkX+dQYkPes!fP_Je8Y_-{8t(3dA5yWP01 zO2cZ`x~9(q0_bU(KNIfN_IVY`I@C{l5^Xh2TaS(D#fA>rQ&T*U zp??SW6^*uBTG~gb(xF#i331-;Y>sbZ(Ml`lM`W)#<_J>EA*A4d6rjET5y6PIw8iL* zH-T+WxaXSP2%5IAhGe#o09Jy}P~*5@r&PD?XVo6D^wrEFaPP%&Mtks$Q!1qYpY(wl z^TGr9)-!pJrlgCkC{fEWpZ-gw3aTCz(!8NIxQLXx5&N7{!I*3CG$*AO_*}pw)BVP8 z58mW!KknL3W(uVt@ZbgMwdB~N`4Gc_1S#PMqYIGlZ)0!koeV(>jOgB3@PG6Gh@`_I zIbz$V72hs|Z7T>0|AB4G;+NrI&;uNz!ly#%QexZaZ{J>koPV3x1^{1R7`qHp&Q}KA zDrDF*@!2Y0bn3_29Q*vW*x#BwP2{TRO~hz0_z{@`xd2SAj8$+gv;+3p5c}>@qYu@0 zlhh3&mO+C+&+G~$)8#N-`eUIq9uBmYbYhtcu7|?)6X7$LVeB+>0m#WJeubBUUl*Ie zgJ-?plb7A^FZXUYz{-{ln^MtIRn$J8k+(!27VcCw=pfF3CR$>M%r}7im&5S{5uQ+Q z>b-h$WrT#G5By%m!|1NIdq0^D+VA0wM>+$l^P^)rWc89lQ0Ot#iUA$ml>o>3drszB zPjeUJh3;Y#nD1>eK&@sB8gM|!Uf_Vv_iLgnYDkm#4u##xfc(Q4m_i<)=|sK(nr%Y) zZi!sWO>p1{-1!=|cNk(uhrUO_IOC6PK>2IQ9%FSv=|(v7(9dy#}r{}V4>5}DGE{){CtP(e; z6VYDYviS-dcCtXj+g||Y8P#B+lXhOuZ5VEN>yD;Dcq$P(wvuGr$Xd8^@|92u6C31| zmZ*{WcAH4C!jgl6bDUmTfdSq<4|8b*?kAH?c8`Ur-wM728;w6&B|hzDc1WyD8XSS8 z4EdL`ry~t2fMchYX?V&AKxbM!kaxN!M_0j5aobil2=uA45j&-e*`N1`QkoM^!w8s? z(?laTeA=(g_ANY8BYyy3u?nkR5 z3csyTMZqVNrSACodgx=WL2n=Sl4^xH$bAO2Dv=QVl-Jev!p;;igH_VVDtWUk{P!)R zt*&#mq$4RHq-$zQI2X=Il}MpE$)>w`7%b;mRR92p&GGifnqfA=0g< zO7tVsizu`unQynmOZP_muw^a{IZCvo9nQ#E_qQBbJ%uC)yWa^L`)@PdP3VIvmo^kizr3ZFBEV!KYb* zAD&XJ651cAy{Ck(KnUOZ?IgSC`lH3$B{i|CXB-|!dTz37joLiYH(9@^VmX+1DPZ8j zIElA-yhE0!1pK}7lBFtNOhNQlZxX`k`(TW_#-Ju(Bwve^?+ixXsf3uBv5WgIgZ<8f z{dVS+Dxe%ZIQr2}5(D$#{OgMtZJc|)x`>P@Pok;WSEfXbkw?U|&{J-J(bU-+=DupB2%U4Ic z!Gp`%2x&3&TyYs5#J-BNkZoVU zfiW0Rx(Up`4bx_~^vn(PqvBns`lL9S&_fVY1WB=d0b9Cm0|b?CJ6ci-!*_wVyHy^X z9K@T{5YrM8Y`Yw6ash#=qO}+&JfG2rA|IZN5=;i;)FOuGv?#*8kQA{T(q1!ML+B$8 z@Y+ZP9jJImNof0EQ%Xv-RsuKF@3a~D_HUiSYHqXvzJ+BkrLW9U>56# z6~3_6kD7C!S9Px#XA!}rRq^y~k;-&grHxA<;V}1&820WFDbmg0YSemsd!=6;PH6&l z2zce9MAX?gsyPW2Ey5b4uxqkFejbO5KA3jc2IuZ5^T%uc+U&G{t!myRl%54s^Ww1Q z`(AnbfcJSNSe7RcG={xfL@M;CU)Y~RTqH0$*stWW1SZ$ahVDQzvN9vb*+H$4!Mkg1 zQsIFH3O$XO9^fsnT(DCS^&+^~3k;?4Xb1Li)gxo%mt@BmruRu*0Tso0kla!8Cd9i6 zCg*_Tm^z1VqD;Ov8iX=N(^p)G*QN<>hU5ent7+d;K$yClEp&E~T&|YoZIwd?TGCZ; z`KGhrC5M{8G-P!l1o0Ku9|r~zbnN#6c$O3^E&x^cf~Z!lHmQtb>*VC_uSd7Sz!}kC zzKEPW)=rckRY*E-gcd^0U{WB?wP0-5$p%{20sg2Ly{t9W7u4S^Z;E zSV($lAYOo-s=@Cjz(uv!!#fr>btKlISWA z1f*utoIMu*7II!ABPZM+Sn~4fB~eX zTdTeSklb`PwGUog@$H!#n(wWnS0LnSuCzY%RRa^kq zK5Su_izJV~5|JU5>f^M>3-Fm5#FtESh#A_k??_HmJ3CQJkvR=6+?pc zMtdt|!AQ?SE8OJKuf>W7DWI}ud1@cLlQUw_>&Uu?c+cQ5SSDiP0qLQ=+UywN)NW?c zgDv!Aq0-xvX9TEgy$Wy`*}#M%bk0tp-3rFE zhDd;KgEsf6G`ew)A~J1p4%F3>4*ml4LzzixBt|j{U!<5r%;G^JV*P27D%3eCC6)iP z0J;#4UMvjRJTx+{KN z4w;5%v*GnY|6Q3hm%5fp#;}@EWW_4sRP9HWO=?YrQJWTp)}m8e8lT8>WhIl>K&j=J1t~(;o_J zcsElPd$3>LuNzmGCRchaK@mTLj)G)(?a8HX0e2sB0i`^PYRTUdPivPh))A8`@LeqS zpW#EyG2W{6JgY5y9g$)0HNzI>YYaIEsdE`lC4(>(n zC8uQ=3cpu&`R++v^*bn~FCAw<#UBI@3~ZC3bHG?kS35;n+7yE_l&dA4>T&3uOq$|| zIZ4x=)9z!b(MF;qAN3u3Ckw{&^2Cv-*cg<6!Jz;; zT=+|GfS>|E67BQF-5u_?c;jWGZ0V+&4ai^XfYT8q1Af$)6WTiGU@n} zP6D$bBumI8|MdVi##bxRu^GNX<7+&8%^Elo{<~DE_+xRhu>#|r8Q#3v)!n6VgWu8r E0*>3M-2eap literal 0 HcmV?d00001 diff --git a/artwork/icns.sh b/artwork/icns.sh new file mode 100755 index 00000000..7c369f3d --- /dev/null +++ b/artwork/icns.sh @@ -0,0 +1,17 @@ +#!/bin/bash +IFS='.' read -ra ADDR <<< "$1" +ICONSET=${ADDR[0]}.iconset +mkdir $ICONSET +sips -z 16 16 $1 --out $ICONSET/icon_16x16.png +sips -z 32 32 $1 --out $ICONSET/icon_16x16@2x.png +sips -z 32 32 $1 --out $ICONSET/icon_32x32.png +sips -z 64 64 $1 --out $ICONSET/icon_32x32@2x.png +sips -z 128 128 $1 --out $ICONSET/icon_128x128.png +sips -z 256 256 $1 --out $ICONSET/icon_128x128@2x.png +sips -z 256 256 $1 --out $ICONSET/icon_256x256.png +sips -z 512 512 $1 --out $ICONSET/icon_256x256@2x.png +sips -z 512 512 $1 --out $ICONSET/icon_512x512.png +cp $1 $ICONSET/icon_512x512@2x.png +iconutil -c icns $ICONSET +rm -R $ICONSET + diff --git a/gon.json b/gon.json new file mode 100644 index 00000000..69706c7b --- /dev/null +++ b/gon.json @@ -0,0 +1,15 @@ +{ + "source" : ["./release/ErsatzTV.app"], + "bundle_id" : "com.jasongdove.ersatztv", + "apple_id": { + "password": "@env:AC_PASSWORD" + }, + "sign" :{ + "application_identity" : "C3BBCFB2D6851FF0DCA6CAC06A3EF1ECE71F9FFF", + "entitlements_file": "./scripts/macOS/ErsatzTV.entitlements" + }, + "dmg" :{ + "output_path": "./release/ErsatzTV.dmg", + "volume_name": "ErsatzTV" + } +} diff --git a/scripts/macOS/ErsatzTV.entitlements b/scripts/macOS/ErsatzTV.entitlements new file mode 100644 index 00000000..5c80b43c --- /dev/null +++ b/scripts/macOS/ErsatzTV.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.automation.apple-events + + + diff --git a/scripts/macOS/launcher.sh b/scripts/macOS/launcher.sh new file mode 100755 index 00000000..34e2aef0 --- /dev/null +++ b/scripts/macOS/launcher.sh @@ -0,0 +1,9 @@ +#! /bin/sh + +# Set the working directory +DIR=$(cd "$(dirname "$0")"; pwd) + +# Run the application +echo "running from $DIR" + +open -a Terminal $DIR/ErsatzTV diff --git a/scripts/macOS/sign.sh b/scripts/macOS/sign.sh new file mode 100755 index 00000000..e3ebf034 --- /dev/null +++ b/scripts/macOS/sign.sh @@ -0,0 +1,15 @@ +#! /bin/bash +APP_NAME="release/ErsatzTV.app" +ENTITLEMENTS="scripts/macOS/ErsatzTV.entitlements" +SIGNING_IDENTITY="C3BBCFB2D6851FF0DCA6CAC06A3EF1ECE71F9FFF" + +find "$APP_NAME/Contents/MacOS/"|while read fname; do + if [[ -f $fname ]]; then + echo "[INFO] Signing $fname" + codesign --force --timestamp --options=runtime --entitlements "$ENTITLEMENTS" --sign "$SIGNING_IDENTITY" "$fname" + fi +done + +echo "[INFO] Signing app file" + +codesign --force --timestamp --options=runtime --entitlements "$ENTITLEMENTS" --sign "$SIGNING_IDENTITY" "$APP_NAME"