From 161b9842b5610fa6686a7af50472f6c29a6235b7 Mon Sep 17 00:00:00 2001 From: Alexey Orlov Date: Wed, 14 Oct 2020 09:52:10 +0300 Subject: [PATCH 1/4] updated graphics samples to be compatible with 2020 --- .../Assets/Plugins/iOS/ScreenshotCreator.mm | 9 ++-- .../AsyncScreenshot/Assets/TestScreenshot.cs | 2 +- Graphics/AsyncScreenshot/README.md | 2 +- .../Assets/Plugins/iOS/NativeTexture.mm | 42 ++----------------- .../Assets/TestNativeTexture.cs | 14 +++++-- Graphics/ExternalTexture/README.md | 2 +- .../Assets/Plugins/iOS/MetalPlugin.m | 23 ++++++---- 7 files changed, 37 insertions(+), 57 deletions(-) diff --git a/Graphics/AsyncScreenshot/Assets/Plugins/iOS/ScreenshotCreator.mm b/Graphics/AsyncScreenshot/Assets/Plugins/iOS/ScreenshotCreator.mm index da9889b..3eb044e 100644 --- a/Graphics/AsyncScreenshot/Assets/Plugins/iOS/ScreenshotCreator.mm +++ b/Graphics/AsyncScreenshot/Assets/Plugins/iOS/ScreenshotCreator.mm @@ -1,6 +1,6 @@ #import "ScreenshotCreator.h" -#include "GlesHelper.h" +#include "UnityMetalSupport.h" #include "DisplayManager.h" static ScreenshotCreator* _Creator = nil; @@ -56,7 +56,8 @@ - (void)onFrameResolved bufferW = CVPixelBufferGetWidth(pixelBuf); bufferH = CVPixelBufferGetHeight(pixelBuf); bufferRowLen = CVPixelBufferGetBytesPerRow(pixelBuf); - bufferFlipped = CVOpenGLESTextureIsFlipped((CVOpenGLESTextureRef)mainDisplaySurface->cvTextureCacheTexture); + // note that for metal rows ordering is opposite to gl + bufferFlipped = !CVMetalTextureIsFlipped((CVMetalTextureRef)mainDisplaySurface->cvTextureCacheTexture); imageW = mainDisplaySurface->targetW; imageH = mainDisplaySurface->targetH; @@ -98,7 +99,7 @@ - (void)saveImage char* srcRow = imageBuffer; char* dstRow = finalImageData; - if (bufferFlipped) srcRow = imageBuffer + (bufferH - 1) * srcRowSize; + if (bufferFlipped) srcRow = imageBuffer + (bufferH - 1) * srcRowSize; else srcRow = imageBuffer; for (int i = 0; i < imageH; ++i, srcRow += srcRowNext, dstRow += dstRowSize) @@ -119,7 +120,7 @@ - (void)saveImage CGImageRef cgImage = CGImageCreate(imageW, imageH, 8, 32, 4 * imageW, cgColorSpace, kCGBitmapByteOrderDefault, cgProvider, 0, NO, kCGRenderingIntentDefault - ); + ); CGDataProviderRelease(cgProvider); CGColorSpaceRelease(cgColorSpace); diff --git a/Graphics/AsyncScreenshot/Assets/TestScreenshot.cs b/Graphics/AsyncScreenshot/Assets/TestScreenshot.cs index c048310..72ebd38 100644 --- a/Graphics/AsyncScreenshot/Assets/TestScreenshot.cs +++ b/Graphics/AsyncScreenshot/Assets/TestScreenshot.cs @@ -29,7 +29,7 @@ void OnGUI() savingScreenshot = true; CaptureScreenshot(ScreenshotCompleteCallback, "test.png"); #else - Application.CaptureScreenshot("test.png"); + ScreenCapture.CaptureScreenshot("test.png"); #endif } } diff --git a/Graphics/AsyncScreenshot/README.md b/Graphics/AsyncScreenshot/README.md index 30133c6..680f90a 100644 --- a/Graphics/AsyncScreenshot/README.md +++ b/Graphics/AsyncScreenshot/README.md @@ -8,7 +8,7 @@ This is a sample of usage of native **RenderPluginDelegate**. It will make scree ##Prerequisites -Unity: 4.3 +Unity: 2020 iOS: any diff --git a/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm b/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm index 0530d49..ab61754 100644 --- a/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm +++ b/Graphics/ExternalTexture/Assets/Plugins/iOS/NativeTexture.mm @@ -1,7 +1,4 @@ -#import -#import #import - #include "UnityMetalSupport.h" #include @@ -36,40 +33,9 @@ return textureData; } -static uintptr_t CreateGlesTexture(void* data, unsigned w, unsigned h) -{ - GLuint texture = 0; - glGenTextures(1, &texture); - - GLint curGLTex = 0; - glGetIntegerv(GL_TEXTURE_BINDING_2D, &curGLTex); - - glBindTexture(GL_TEXTURE_2D, texture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); - - glBindTexture(GL_TEXTURE_2D, curGLTex); - - return texture; -} - -static void DestroyGlesTexture(uintptr_t tex) -{ - GLint curGLTex = 0; - glGetIntegerv(GL_TEXTURE_BINDING_2D, &curGLTex); - - GLuint glTex = tex; - glDeleteTextures(1, &glTex); - - glBindTexture(GL_TEXTURE_2D, curGLTex); -} - static uintptr_t CreateMetalTexture(void* data, unsigned w, unsigned h) { -#if defined(__IPHONE_8_0) && !TARGET_IPHONE_SIMULATOR +#if UNITY_CAN_USE_METAL Class MTLTextureDescriptorClass = [UnityGetMetalBundle() classNamed: @"MTLTextureDescriptor"]; MTLTextureDescriptor* texDesc = @@ -88,8 +54,10 @@ static uintptr_t CreateMetalTexture(void* data, unsigned w, unsigned h) static void DestroyMetalTexture(uintptr_t tex) { +#if UNITY_CAN_USE_METAL id mtltex = (__bridge_transfer id)(void*) tex; mtltex = nil; +#endif } extern "C" intptr_t CreateNativeTexture(const char* filename) @@ -100,8 +68,6 @@ static void DestroyMetalTexture(uintptr_t tex) uintptr_t ret = 0; if (UnitySelectedRenderingAPI() == apiMetal) ret = CreateMetalTexture(textureData, image.size.width, image.size.height); - else - ret = CreateGlesTexture(textureData, image.size.width, image.size.height); ::free(textureData); return ret; @@ -111,6 +77,4 @@ static void DestroyMetalTexture(uintptr_t tex) { if (UnitySelectedRenderingAPI() == apiMetal) DestroyMetalTexture(tex); - else - DestroyGlesTexture(tex); } diff --git a/Graphics/ExternalTexture/Assets/TestNativeTexture.cs b/Graphics/ExternalTexture/Assets/TestNativeTexture.cs index 12e2777..6674e47 100644 --- a/Graphics/ExternalTexture/Assets/TestNativeTexture.cs +++ b/Graphics/ExternalTexture/Assets/TestNativeTexture.cs @@ -38,16 +38,22 @@ void LoadTexture() curTexIndex = (curTexIndex + 1) % externalTexture.Length; curTex = CreateNativeTexture(externalTexture[curTexIndex]); - testTex.UpdateExternalTexture(curTex); + if(testTex == null) + { + testTex = Texture2D.CreateExternalTexture(128, 128, TextureFormat.ARGB32, false, false, curTex); + target.material.mainTexture = testTex; + } + else + { + testTex.UpdateExternalTexture(curTex); + } + if (texToDestroy != System.IntPtr.Zero) DestroyNativeTexture(texToDestroy); } void Start() { - testTex = Texture2D.CreateExternalTexture(128, 128, TextureFormat.ARGB32, false, false, System.IntPtr.Zero); - target.material.mainTexture = testTex; - curTexIndex = -1; curTex = System.IntPtr.Zero; LoadTexture(); diff --git a/Graphics/ExternalTexture/README.md b/Graphics/ExternalTexture/README.md index 1e122f0..9816188 100644 --- a/Graphics/ExternalTexture/README.md +++ b/Graphics/ExternalTexture/README.md @@ -8,7 +8,7 @@ This is a sample of usage of **Texture2D.CreateExternalTexture** and **Texture2D ##Prerequisites -Unity: 4.2 +Unity: 2020 iOS: any diff --git a/Graphics/MetalNativeRenderingPlugin/Assets/Plugins/iOS/MetalPlugin.m b/Graphics/MetalNativeRenderingPlugin/Assets/Plugins/iOS/MetalPlugin.m index c287701..39e2483 100644 --- a/Graphics/MetalNativeRenderingPlugin/Assets/Plugins/iOS/MetalPlugin.m +++ b/Graphics/MetalNativeRenderingPlugin/Assets/Plugins/iOS/MetalPlugin.m @@ -90,15 +90,18 @@ static void CreatePluginAssets() { // to simplify our lives: we will use similar setup for both "color rect" and "texture" draw calls // the only reason we cannot pre-alloc them is that we want to handle changing RT transparently -static id CreateCommonRenderPipeline(id fs, MTLPixelFormat format, int sampleCount) { +static id CreateCommonRenderPipeline(id fs, MTLPixelFormat colorFormat, MTLPixelFormat depthFormat, MTLPixelFormat stencilFormat, int sampleCount) { id device = g_MetalGraphics->MetalDevice(); NSBundle* mtlBundle = g_MetalGraphics->MetalBundle(); MTLRenderPipelineDescriptor* pipeDesc = [[mtlBundle classNamed:@"MTLRenderPipelineDescriptor"] new]; MTLRenderPipelineColorAttachmentDescriptor* colorDesc = [[mtlBundle classNamed:@"MTLRenderPipelineColorAttachmentDescriptor"] new]; - colorDesc.pixelFormat = format; + colorDesc.pixelFormat = colorFormat; pipeDesc.colorAttachments[0] = colorDesc; + pipeDesc.depthAttachmentPixelFormat = depthFormat; + pipeDesc.stencilAttachmentPixelFormat = stencilFormat; + pipeDesc.fragmentFunction = fs; pipeDesc.vertexFunction = g_VProg; pipeDesc.vertexDescriptor = g_VertexDesc; @@ -115,12 +118,18 @@ static void CreatePluginAssets() { static void DoExtraDrawCall() { // get current render pass setup - id rt = g_MetalGraphics->CurrentRenderPassDescriptor().colorAttachments[0].texture; + MTLRenderPassDescriptor* curDesc = g_MetalGraphics->CurrentRenderPassDescriptor(); + + id rtColor = curDesc.colorAttachments[0].texture; + id rtDepth = curDesc.depthAttachment.texture; + id rtStencil = curDesc.stencilAttachment.texture; - if(rt.pixelFormat != g_ExtraDrawCallPixelFormat || rt.sampleCount != g_ExtraDrawCallSampleCount) { + if(rtColor.pixelFormat != g_ExtraDrawCallPixelFormat || rtColor.sampleCount != g_ExtraDrawCallSampleCount) { // RT format changed - recreate render pipeline - g_ExtraDrawCallPixelFormat = rt.pixelFormat, g_ExtraDrawCallSampleCount = (int)rt.sampleCount; - g_ExtraDrawCallPipe = CreateCommonRenderPipeline(g_FShaderColor, g_ExtraDrawCallPixelFormat, g_ExtraDrawCallSampleCount); + // we silently assume that depth/stencil format does not change + // even though we dont need it we need to set it up as otherwise validation will whine + g_ExtraDrawCallPixelFormat = rtColor.pixelFormat, g_ExtraDrawCallSampleCount = (int)rtColor.sampleCount; + g_ExtraDrawCallPipe = CreateCommonRenderPipeline(g_FShaderColor, g_ExtraDrawCallPixelFormat, rtDepth.pixelFormat, rtStencil.pixelFormat, g_ExtraDrawCallSampleCount); } // get current command encoder, update render setup and do extra draw call @@ -193,7 +202,7 @@ static void DoCaptureRT() { if(dst.pixelFormat != g_RTCopyPixelFormat || dst.sampleCount != g_RTCopySampleCount) { // RT format changed - recreate render pipeline g_RTCopyPixelFormat = dst.pixelFormat, g_RTCopySampleCount = (int)dst.sampleCount; - g_RTCopyPipe = CreateCommonRenderPipeline(g_FShaderTexture, g_RTCopyPixelFormat, g_RTCopySampleCount); + g_RTCopyPipe = CreateCommonRenderPipeline(g_FShaderTexture, g_RTCopyPixelFormat, MTLPixelFormatInvalid, MTLPixelFormatInvalid, g_RTCopySampleCount); } // render From 443a5c1c5eaed5022d9d69148791427a06d49556 Mon Sep 17 00:00:00 2001 From: Alexey Orlov Date: Wed, 14 Oct 2020 12:33:36 +0300 Subject: [PATCH 2/4] wwwconnection customization is no longer supported since 2019.1 or rather in a different way: we expose a lot in cs and for very edge cases it is expected you edit mm file directly --- NativeIntegration/WWW/CustomConnection/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NativeIntegration/WWW/CustomConnection/README.md b/NativeIntegration/WWW/CustomConnection/README.md index 7b9e96a..1fa094e 100644 --- a/NativeIntegration/WWW/CustomConnection/README.md +++ b/NativeIntegration/WWW/CustomConnection/README.md @@ -8,7 +8,7 @@ This sample shows how to tweak WWW connection to better suit your needs. ##Prerequisites -Unity: 4.3.1 +Unity: 4.3.1 - 2019.1 iOS: any From 8f1b0fb9423ca0577694af4874758208a9002e46 Mon Sep 17 00:00:00 2001 From: Alexey Orlov Date: Wed, 14 Oct 2020 16:49:32 +0300 Subject: [PATCH 3/4] fixed ExternalTexture build added build postprocessor as we now need to add resources to the correct build phase in the main target --- Graphics/ExternalTexture/Assets/Editor.meta | 8 +++++ .../Assets/Editor/PostprocessBuild.cs | 29 +++++++++++++++++++ .../Assets/Editor/PostprocessBuild.cs.meta | 11 +++++++ 3 files changed, 48 insertions(+) create mode 100644 Graphics/ExternalTexture/Assets/Editor.meta create mode 100644 Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs create mode 100644 Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs.meta diff --git a/Graphics/ExternalTexture/Assets/Editor.meta b/Graphics/ExternalTexture/Assets/Editor.meta new file mode 100644 index 0000000..ad68059 --- /dev/null +++ b/Graphics/ExternalTexture/Assets/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bfa945941802e41b4b167df6c034196d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs b/Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs new file mode 100644 index 0000000..5a32501 --- /dev/null +++ b/Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs @@ -0,0 +1,29 @@ +using System.IO; +using UnityEditor; +using UnityEditor.Build; +using UnityEditor.Callbacks; +using UnityEditor.iOS.Xcode; + +public class PostprocessBuild +{ + [PostProcessBuild] + public static void OnPostprocessBuild(BuildTarget buildTarget, string path) + { + if (buildTarget == BuildTarget.iOS) + { + string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; + + PBXProject proj = new PBXProject(); + proj.ReadFromString(File.ReadAllText(projPath)); + + string target = proj.GetUnityMainTargetGuid(); + string resSection = proj.GetResourcesBuildPhaseByTarget(target); + + proj.AddFileToBuildSection(target, resSection, proj.AddFile("Libraries/Soft.png","Libraries/Soft.png", PBXSourceTree.Source)); + proj.AddFileToBuildSection(target, resSection, proj.AddFile("Libraries/Test_Icon.png","Libraries/Test_Icon.png", PBXSourceTree.Source)); + proj.AddFileToBuildSection(target, resSection, proj.AddFile("Libraries/Test_UnityLogoLarge.png","Libraries/Test_UnityLogoLarge.png", PBXSourceTree.Source)); + + File.WriteAllText(projPath, proj.WriteToString()); + } + } +} diff --git a/Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs.meta b/Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs.meta new file mode 100644 index 0000000..748b7f7 --- /dev/null +++ b/Graphics/ExternalTexture/Assets/Editor/PostprocessBuild.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1fe8f1d04a8f4a42a9f52a49ef2383d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From d9da26823c26f89dbf54447645dcdd7b4acbb971 Mon Sep 17 00:00:00 2001 From: Alexey Orlov Date: Thu, 15 Oct 2020 12:42:32 +0300 Subject: [PATCH 4/4] updated NativeIntegration samples to be compatible with 2020 --- .../Editor/Unity.iOS.Extensions.Xcode.dll | Bin 57344 -> 0 bytes .../Unity.iOS.Extensions.Xcode.dll.meta | 7 ------- .../Assets/Editor/XcodeProjectUpdater.cs | 4 ++-- .../TestLib.framework/Versions/A/TestLib | Bin 5688 -> 6608 bytes .../TestLib/TestLib.xcodeproj/project.pbxproj | 10 ++++++---- .../Misc/UpdateXcodeProject/README.md | 4 ++-- .../Assets/Plugins/iOS/ScreenshotCreator.mm | 5 +++-- .../UI/ResizedView/Assets/Screenshot.cs | 2 +- 8 files changed, 14 insertions(+), 18 deletions(-) delete mode 100755 NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/Unity.iOS.Extensions.Xcode.dll delete mode 100644 NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/Unity.iOS.Extensions.Xcode.dll.meta diff --git a/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/Unity.iOS.Extensions.Xcode.dll b/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/Unity.iOS.Extensions.Xcode.dll deleted file mode 100755 index 3e2c1698a9330df686b9bd783a418f8014969572..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57344 zcmd?SdwiT#wLiR`XJ($6OfJpjo?ak@7N+UF6i7mWrfqtGUP7Bffohv3(>658glCe{ zQd){)5f30J@Iyoo3VQUM{_uv1iV9j06%;+FphXeu5fwdN>Jg8K@Atd*erBFYQslhn zoX`8m8<_pt3*U3ir?ShyoW`~=$Wt#kv!KS{!re*6kG!0~XGjqzzlhZ8g z&JK~)PDIZ6LcA+z?Rlw~TIzTr-vb60{cA$XpE&p}HhI^`O)TZtzr`pAo`39@NTvQ? zxLQ!lL>ihz)@k06)p;hike4P$%0l4l%~m#vBtpc!fLDg#Im4Mf!+`I78VSm@uU2kA z`qw0~b&j9&djJ{P&^PMi87t`}^di(n&;AHykN=%-)TIBJ)W(3LW zX~5&DeEfF)``DA*G!&C;zSxbVe+*6T2NZQ9(JX}Unng^x*IYfXQqDnhC{7(fCK}0N zWRgkO%fh6R4Wv(IV@UP`j#_kM2o3URv;1?!2a6$hAKQthpGPb1KGq2GB+Ftzlg&~+ zuS{-5n?R*Veaa3-*3|TEIjkI$7OYFq{|b_92`Kz;kTywL&;M8C;?J4=hqT$PE3BRiH9RA4f;0m+nWmqw)RFNA$qCTB{tjT2DiZu0@cIjzN7v z*;-p`VF=~wi2p~3U#xQqlC3~p>bYEYgAS;aDma;g7QE89v4*&7q=+cPxIe*>p@}zR z{G91^@qH96Jpp{uQAfP@Pp`MAKY+vgr#Hm+u?J}bHAd4Ohzyj56H4x<7;y->+s&m2 z0~vL5Rm=j8s&tLHV!C6E!^Qbxte180N4Q%#q~v(>2523^RM=J;rJs7A|NcGpW} zYYLPBsun2fp;0=)LC3NM%)?`8>^!7nWm@X)qnPnAv!F1D**Y@+pXbflYIwgb(nb?^ zqg1Kaf?i6bVKJrwQ4r6=ysMr!K`sUc!mgF5({ct$A{;$TttpE^D(*gxKqT7$ ziWbf%*Ml>_czBggP|v8ve+qVxZUkN1Lx20*-!Mj3NB!>s7cn}CWGA9b$J*N2fpN-X z>H-Ww^}M)DN0a=Ew879Je=LpR@>(bw`jj-dif9@mMzcV_D&;&}`3JElp~+U5rZk(O zjhN9km;lAmj>IaW)Sib*lL4OwW($nq*(rd@d(ym9hw7-RqbjN_s$-Ef5cyaUm8CjzW{%Mn*(WbKRSSkiSfY*T;T3gkec_hr~%EL<))!h z&lnNf;<(ad!TF|gGvNS|US$8J%7k>@tKKXib2Csm3vwNc>Uk&0n@|UiD0QGs$F|^C zPcRpCbjkuNZGnO%VQqCHy3U1eW_A`^p>+pzmf|E*s5L(h{h40H6WQ6IjA$PwO76cW z4-6Ud=qmf#0(^fQ0jlREWi1%+uXwscIh-2S18};xa6lvVi!rZt2Ek6fO4rPx#$XPm zn-mMz06R}fFKCnW4gNGJB4W%}hc=?4n)KB6N?X{ADo0JPEb7DK4keTrIJLg#^Va8t ztuN}Y2C1>Wc8of03=#;MS6d5gY|^|cxdOP?B?}zPXj!a3;p__}`oZ6q2=gH%(>$={ zIuOWIJ+IWp!_<9|UqU2ARjrw3jlcjCTO?OU zUWu$nIZP&%!^A9(t8_tA-u^)j8J90lEkW7oB-3f(8OjfV$Ul~+M8gG{%VZVWIg!jS zqEaCL?~%9i`_V`NUs1>(gz4FSkviNjQ^Iiy=7>?NvdUtaOSV$~VI;JgY_zhCy%4TD9>a(#D#XwrI1ZGn2UplbDhK~_LVZs|XRW>=Zd9dr!w71_KdV4R*XvUm zp;1x2uocFr)^=)S?`w?1axe^Z|He>$IFt{M)h)mW2`v2Tbn$A#e3}+#h^cO74e@7}iwog4fW`(BILI4j6l(yYsLG ztpzfe3$NFDT=naA?u4dW$oEyr!0Xg)Sa0uzF!k1#Js8SAfqbC<=R^6B{tqI$Ji%Nu zC5WS;h2(xXXS2aY%FNA`7-)}6+GqcW6kVB@UWpV zR+eNdmlz8pddMHmgtn~aSO7t8G-`O%yy|VlSms_qasUy0bao1;%ZPdz$w8tNpZ*Vk zr?tQ#$bl9h&FN36J7%k0Xu_6-PKLBBy$PI}5pzzG&x0FQ?w~*L)X6sNc%KB|#n)Y>p{UEA1(L!xv*ikxE!h(8D9 zal=GIM=`vC&AHde*R?d+~_C>q;%> zQWx+^9A>dw*fLQ&P!HBOwFh6fB?w5lA%)$Xjog0hPxJe)>Ujy74_+sVu{t5>L~F-k zUx0wn`T~<1Z;j=gr%_Q(yG!Z^JKZIO=!LtFa(X&mUKU0( zddF2bKln1#j7`=H#Ty%JCq{27I58uEAI{uI7e- zf1~yZx+5F2PblsV_5@f3F!<|@)DfH;TndEh4#N+-N$OaWza_~cE=ab*o#zoa41uC) zMlINH<9H{U#u(D1P`_L-w*};wa~z$BsgL!psJ@zP4)H)T8EcKB(2Hdkldl1y*>(T{ z2R7*Cpa*7U5?g@&Ur)o zk;hmQBaHnBx%y#;kNSmp_qF#OzXh8hPOXd={Q0y{er+Lt5Jx}OpZ5aWj5yO^sLy`1 ziwT~}?R*Wn2T?67Hw7pP11UwY^l8s1iVXuzS1FGTO+#zjYxgs}kGdQ6gLNykr}7U2 zZ*_4H=LDnrX)u9rAip3^5BiQ3B9+4ed%`h$1Pz4yP9{Ztr({Kar$|M8r@W!QW3gkL z`r3Z)SfOA3?+f{ZO+glQq1sFrj=Tt8D8vRHniu=I^iu%D;Y(FpuV2ch66>_@j z>oMC>xvP}FyMHQ#z!BIfyy$#6MIMI?u&Th%E&+-h`KMP=PDfnHTcerl>-Y&&u zC@?o1ye#5_WNSCd#+;Frjya<)i~F~*9WF0sf1EJ)fGA%JJzU)XP@Vv-h-(Qbc_4{h z8NLum+_oKFRQC}bsKLL8|0NXaavAZziLASiEtoq#x-v(69P|OLeACZUdQjk4bq>(^ zbr$ys5P&52V`0EO0?d=-ew?&mDZ~UcdYmZlL3<}!3){eK(%Ai}-wAv$H?9ul-y6z5 zfqW1T{u}av|M<@kO+&K42d+9FgJZoKnrzxV2)}6O7%AvW3?`Ukd0;4}^FcGxflMpEpM-&23`QpA)e(TfBPQYTVGxT(<7)2!(Zgih&%z-| zEFY5O;}FhDaMHLSh(j0)VL6f}=-VhNyMnwN;F_cUT{MQ%fUsp){R?ps&g)EE1cfm! zf^QrZ7okOaPhz|?-89+&Z#{<#gwI=odq^U1 zT`4zrA=T>nUk4XWa;t&Ju0i7Y$B1N-TU$W#^v`FKTUS6bbnuzvItxgysXmh&G!^jV zfsD^2x4wYnNr}%S2fGd^d4%CJVZa_Bxo`KG|O;Z8C~#@)wmlw`Lc-*yhj>#AekK1$GvEWddFFm@+)LRdz#Dx(*9#v)czm=;?^CzKv%u}hXYfO( z<$3%9-%C6upLF2&-ck5Qz+5}d3*j#_y)zSu-5CL=NzD@Ab^a(GIt}4<1}VO>2(Mco z#Uow|(d&d#JVKlhUgweG5y^(|I$0GDg@^ETW2*KMoKl4FI^~rf`^6Amr>x=;PIJX$XB48>Ij{K1MR@fwibr(h@?5N1G8hjm{wX(o z7Yu1%FGe8?92V(WD8Zt<9Y85=Z|-0TCY%>BF+8RV?}zRLy6icuLZs~j(8gQZ=AiM!kxf;NWV z3;5;my9l%`pFoi)wj5hlSr9MxRWv}^ehWDRw$ zI$@einBJAR>36cZAvRZ%y|U0;810+pAc0gRMmLuz>K!C2YA$J-OPc0N-SnMo4ysS4 zO0&a-=ECR^(;R%eR3%3@mn>=yBvR9yim6?|^5{PfK`ZNU{VuM7T@YVy@!Ln?KZG*U z!$B9((+Y@xYY2~hvI}eCnMRD)>Ujp8iKd1(}*<4rHmTNq+$NX3fV; zp1uS2&F6MfZX~7^vr9mw%S=)q_ku^jQkjI^u#tH7Y5-*kUHlXFIm~%L=|Nw-Ja8g9 zAs)@ozoNtNn&uK1OK>h)jrLdJ2bY!~`!+icHLp5#uR6_g9uFlyismhXj1tD~NuiqXOPONTR?^2)3_~V6F?~NslWxR|S>=G9XNwF%@JmHbo}1l= z&LzFt#U5~a2dX(z=Vh+})|^AaJCC8Itw)+8*#2hslkgPVAI=f(wcuL#982C_YwY0f zI{@nJwMa^h=XTNu0hHlUuj_DCs|b5;H~l7{lPxe$y74yy2zhQiP6H=wJvWa#@;b*# zqkbE)VqWKyFpu5>cqa7)dDXfR+PYU4*}r1cLPiE(wDW6VemvbB8K{Qp?m;7ayE)-8=QIjZe$X0eQ8jW)buTxFBh9#&7R zJOQs*`u`O3ioIHgam(`psadTd@QSD3MJR!#5hfAvil^UQ%q#wC-TV-*d{B|S zhqX%#uafk82qm%Zy|=)tguXG{$C6j;&dBr9xdoTN@w@`+gH6hvxQ561B#Xab6#hG) zCH<@Th3R3siie*o!qZ=_#jiVrpER#tt^_;>_7X9tHe*9UPI{Q^cJ!mvh4nBN)I}na zevrdxBfn?!!&nsgnbj$hy%)7Gtv`Vp5gq=pUui%S(6IXRpf6lw&=l`;;w&#e2S+b1 zoWSwy`@lU|T(aPVl^gTMEG~)HzqkZ`qs+>(5!XPTYUt`sfWbHKe~tfeIr3iiIVSMI zo=TI9=<5M`_tI;QhE@t+5I+9xeG z74INzN%o&eTcV0Z1c(v$s_mMPO4@)Ctl-?dl<@`{#-?Jnjzamf<4&mXJp69KuP~p^ zljkrN{EPTrIS=rVWP8Cf;-5!&cL6>`_@4{#Lxf)_z`q;?*HsjkuO0=zjqnplYfPNM%PP__xB*N@Ik^KEx;?P0f%JG5xyCTrT-Vgp|-zL1k=w~&s#22 zxX9t}|0iP|(%0V`+n-ZkA^P$f!1|oC8J}|qk07!7R`@Li_#asws{jAFt%PjhyOb>i zzqaidTe%iDXhjxsZSntv`no$y`mtKP;iCCawqCc`rG6s{8JTcXi|7rT+7H2jxrtc% zbAbFAL2g zJKQ^*Su_nd=i#VX57cl@`_Gi3uwG;jvW1vgugEmrL3+=`%~&u0g$>2@L@QWNl?)IR)E)MdxBlp zLHFIKxgnHp=j(KTZ5AnesF5nuMG9S7LXKr2jm`1{}eqFI&*Y< zU`)f~<6T}BQCCup!)|GT3~gzR^&xiPmi8nR>0OT?AT1|Cg&DP@Eu1-yv!e~-Qdp#( zYwf``SVt$#n<#yN&-yRP%t#ZlyxoQuWX5x9bUG-Sh90yPg8Cw|zRPjBgisi!l?@245XB2mPZg zBWxFlvy0B>_-+w54SBn$1`yZDPZqdVp0~jNe*&mv%bNguS?qMj9A)lQiMS^*2by{Ui%Cx%M(`pxoQyfn zilsk^>e-)y(!2?)LAI^*DHL(PptmM$H8g%Dh(qV4KE!MFRIcg39?i$u zao}(cqW9lO#lK1OUJ^X;&gULexu2jW{PV52m{YHZDA;F^l(tL+F^2xL0LtvTm(abm z3XT%2q{+6Tcif<-{0Yl#GApJZsYB#NX|X9!=yIZ{^brB2u)+MH)5^}(SQLusXt3wSXO+!SPhDvy|IouEqlCZSpdvrS+x`J(dlgYQp zy3{mOntqB}Ct96K_@@jh*x&Dw0k1~0V ze5wrBs`QTtVVhlTxau8RHQOpay%^?N^=jSf5ZAlNwU-Q^XM$OmtgdN+VM|p_`UOI@ zUaHopqgL;$s!o8@2*dA#{K%t%mqvreb)f1oH5k4P>0c9S^iqw6 zZzG>ou#>PM{Tmd9CSk*?bzLF8?;+oRC(GY5`5ie;Y?)0hP2}Sx$?8d7YLe0Yw}KG` zCVL$!`o9h^ApQf0+rFCD%fwgfHig=uhcS1Wft^ zqws%-82o9Y@caM?Mnt}eYnadJfae3hX%zn3XoPro6#i1+HvoSa*D#;oIwH$}UpNYX zgT;RX*DyWLq)ESR6dul0`}JpB!}Rd9D$n~y;U@#0hacuno<4XV#AF;D$+#XD3-Xi*Mf8XD1_B2lgB;>(7ZgeNxp3Bb*9L#Uc+i%4GSuu0kGX?~m(RU;`54YnNj3e)FP6y0C zBX1=83cG_o}cqPgY+R07z^HcMF0N<_87vI8e%f-kq=%M8K0YmfswbB=Yh{J`Bu z&^-2wH_Hedn1e*$Ci@|1%(H4lDPEsdqpr(jIohm&u8nFzd`&5UwjYNFvpYYSqn@uR1Dl!ng=Grn5aa2SP==|SI&dZwN)6>wFeZqJ_70LZ`$vDMuzPH5pDdGbA)<1tf>K|MH8vjD% zaw$|l2nQbZZ^(n3;Qki@9w41A+lG!h_P-Gn_&-KYm1auMVrfZZz!W1E^(W=Q7J}#J z!B&FZc@VBH>hA@pO`3K;iS8NBa4b>(D?w>UAXr`0{~ZeIZiW^ee#^&JfzG1-go%ML z=K*Y99x@XB>=p*3U`w7fK|{0;SD)oiwr~$(^Pc%a)^A|5eBP#9@5NK02gun>54}MK zYkHL5jq+!pZGScr^K~pDLm$gJgQaH|mFkzWz}q~JLf)>j%2r{BTG6urt_G|dKDXJe zce6DB8!pwyF|;7Coq4{30j{^MU8= zUxNdOdQ-VN5a0>$b_%=#Nqr9P$IIebDq!D0><%P#VJuHu{kH=5XSzP z*q@EYMkWDUilm5k{KKSt~qM`NEO_UEIqe<3zDWfX^cApBED zV{y1JPRNbEaD(|&;1PmjhvN9-R*V{19&zxP}f0b7sK-a(A;6 z!I3b}k+53pU#Li5Ewk_>knUT@`gL3rJbhl76<&*eE$LOgrVi$`{)Ovc3I;s#ZKxBg zXG@foQoGs7R@RHnVu(PM+}-GY6{_Gv7r4V%s@;8^Y@7An;aP+c?*}l#9CzP(3!mf; zV+nQf9OE$DiQ9~CU}06nLltlc^c8Iu#*2-L0F2mzfwF0#0Gk#HuxSD7_!Nk~ANvHX zmvX3DAY*PI_mExx1L-{NRh)oP=5ht_bHO=6w1kr4hYGQ2wb9M3zvVg;aJO&3B zZgCtxhDPVpuR*aq!&2s^oZZ$jCe32fz}t^UgT75=-?~D5yTIK?Fp^UdPElF&I2Cmi zPQ@}fzF&`+GAx%e!^3Xi!!^&8hh!=$-)(I}<=wxLQu)uq{P$l>ZJV_v4gT%y)2U#Y z^y;$H$hsyw9T!*M+VIk+A&&<>Psasq!fG9TP7iA`0jT4PDn|&jk?o|Ac(K%|}k=OPvOvLcY=Fry@Vm=4T>5$>a}`v$FT9 z-0XQ^*SZ%CCOROUJ`n#|Twx4?(U3Lxb>Y`?F%ma>KByUk%`8_7tH!G{?LalWp?+~G zYWZiQ8M7_Mi!?1+ph|G_aS2GYgMK&4(@V)@84~jdbfHc_n?~!Neng_$0}cC{g{T=f4S&3?6(830EP?0EEqGa0x3IQu}h0++TY!PnfV!1L$3@;jzfNwceh>%6yloM5g* z9rJ)wxjHI%vicmSd~=<-aMKd(llMT&w69O%N(uPKcmD=)#rX)H%fh6EBl2|W_;GLOD+VASxmi^*(ZSBo*y7LF+z85oWwr53Ujhi7!JraY2Ix4Fl6bV zjgD~HXvJD0CW~(w(8ISTf$?c0mbi|P zS1?07^Vu0RUL6N?5uh~O3vPO+60KFN6@`JV2O61#$;8aPlfyKG3CdU>ItTyh2&a$I z=tj7twhpO$%vP7^lnn{UhoNX)*$tGbw1o<)Dotau;bc8kW`rnDmFxSkQ1n`mw)CpTU$<1y8%=abGYO?t( zd~Nkowla@UA$}qLvJjraE!l7ZTmY)!uMEH43+Bw5bLPCW7o1HDUZg_W06RGK0N&BS zbt^Vdr*0Vb`v!O9Nb%w-k*7`uZsP`ds1Jxr)ky zo|acg6*E^)l6V3;iIawDNSA85O4D9Vb4Wcr7k?|#`$6f+cQyYTyhG?orSnJBnt{~A zdrY^&cf1+-xjOEi{9oi}%Gc14Cx3ESx71C6W~w{O^`r~=Go%mQz1-5g3m8xCbJ^CT zNYAkN=UnoiA7Ofa zKil~2Mo)gKsZ3=4WKCN%y-3r3O>dZZ$3#ya)cm(6{u=r6Nla&Ix_r{N8#y{(<)C4t z961P+iFyAXiz!5lsRoq5=_W}krAeVEzxoP2&j<7*M!8(;ou_4$7Fr3Y0h+>z73ysS zG#U1CnnHaF)#&rqmEr@MhB$Shmc2>KYUNCY-l0&PAc6&#`vA?u*KugSmGY2N_i^YqIbaa-CA}Uo{2dK=z|K)ly52J#{unxoqk85uP8KI zKaO81-v)HCGgppk*-y3JT=|hgzq8O!6mk=6eV+VGT#N(mu*tV^r{I@b)}Uqcb+F*aqr@T$4fqm^c77LN#^S` zO>4SH(~C6Sjx;K}lAl4kJNXFGt4rJC^JRJ24Sy%~L|c?|%Rl3#q`mxCmfn-^yJd;7 z96Y(Pg7Uu|sVVj3?utW+s2r~Nj5k&GPk2vas@yPv`CB!87t)k`Xu_}J`pMVOe>gy~`TFLGCDHzwRjexX1Ke) z_vI;>*Z9}+h~%_kP@L8rB0DBWEpH;O|KJo0E@wwQ{?bT_^u1`5izn8%p^^@)*{Mu4$yaUcL&b zUOuYO5$7k#AA1e*w1HIWNupmn2IU`;zxJlcrs<|$qV%|Tvg}dlh;wS`U%gZ0utL{K zTWKPGn!IewE-kIY`;`g0ZZUmmmWI=ni)sncuKpb<|A*2veEKX?mbj;MO?;LtR_Ks? zxbzsxIxX~RK(pm~Ln&V>y*xfgYSPM6egJ5m+^*0OVUHHbZ*AGjrN8#hlxt=f%2e5L z?`)|=R0W+0`_Lx+7NXSW$xRBG(L7IXS18r6q3l+aJ#Huyl=?h*%1|aQD_euIXKWeA z;XHX>p*!W|=zCGN7{Plm(&x!ag#w=UDs;s1{E(qc>{gy1wPl9qL$>VAWo*4hm3Sy| zQ`s>=yM@*UOda*oS1U;pYX??M5!qx?v(AF2rR)r2F?nmp3Wv7K6Kzobj z8Vh|1?JbsDEks$`<$eo&5B1vRA%%`4D0RC$q7Wtf1j-nL2Ab%QTNN_0bjVSKj4T~; z%upt#mamC-$V;}2JUisLDbxOS$SVr5g-1a-G&kJB9)(!;4RR?eJDxB5F3NTy+Ac^o zq);H)^9q?Bb;yf`GQqxgNDXiQ3tRXxxExW)SkDT1LLtLtg{)+7Y<0atIu$yk{aYcM zY#IBvLbjSR?cWL+R_IRYEZ-_C@H$}f+1 z${vNxj9V`c+OkiUAIB$1TX4TEm}8sdphAb_d*xFTo8>MGy$I-y@{EO!m!F>4DvNdJ zazr>Adt^uM;=nhXt!4$QOHQ$D-GPvS?%^plZB|yUP&uNE*B5$#P=h&(S%?38;`68*9acNPPy8ouiaG(!ShfAZ>409#Y7(H!Qul?HFic zSo$r*J`BsSLWdHcM<0getrq%5#hUoA++!im_hI>{g*e}b<%mMp%l9iTkB>;F9`#)> z#{pd>Pbp-qV6SXCkF8%X10rD{qCFO84Gcw56QH}EIT9@O_-X% zs%s$a-&xi+3CHlIfx}A;^w@;7+$gUsBXnKj=?Onf+$c322KwoQV}NE^=(iJo z4QQE#{xab|0ByEVMdjZB4O?hRWuoLpxyeE^DpP>&w@^#vL_iN)XnEzSfS$HcSLG}~ zFIgy4c_yGJw;7P^s><^KO}5Z2l`8-(w9vhkoq$$b=wp?a0_wHU=PS1Xx<;Wx^0mqv zqBly}3gsz3sN7rfHtAnQ=uY{0H{UWNX-SNUQ_CPxlNiB zIwVafd#B8@W$Dx>OYW3=ZP}XC)WqF#*g~6Azl+`@4_V6L)K^OWQ93Uq&qMNmQeEGWj`qrOQyB zQvL7AN94te4YUQ&m!#%WLT{G0RR2fvh}_C;BI?~+eZG8EmTflB$E$xA{hBp&dUZ$e7^F%WpStfiUQBLGpx{^@}=6X*vsB)q3z|LD@!;} zgea5F^9F*{H$;<8beD3$dDzrMsgt(Q0Z3i$v=~UGu5cDBWPEvr)1}az@>1<7u?pv) zg`B$YlvOxywb10cQ(}1H27eLVO&pg1dd%s-=MGY~>@jC`-Lqu{=$g8pmQ_2qD;KjG z);RYlWLmFr?(ZkpJ7re=R;h6wQpix&I*-`0miph6)jBU(XdNi)oRtHnUJsyp=ZJ-_ ztUq4X;Jjp^_td-PlbrORq5NWfbvbTl;xFjK)V$Okc$O8X`&!06oK!w74_#9?qZ~Km zLiKotN-pgC4N=^2vJmUxhMR@h_c_i=ZQb-}uG6WI>HAzKeI;p)Z=LJ3Sm=y~?(%ug zP79siuoX9h?y(U4?gHm&3tiZ-v-}L_m_lqJTfWeFMIp0uJIjgsY~hgXY)H#lPK|}G zY&gd`%b8}OeGPk2w$MUvX}GHVEN790Zf@8QXqkavXKx17WucYM+se;&dJUv=tkoIL zLs!Szoa^(@m!ju5x91^87C9d>P~yW4A1q(weAGg0VUcsxLTuq&=OqKlgAE@q$2~AT zQ$8eLY?zv8cWNy3wT6evmpW++J>Bqy@(yRUg`RKtM)`7Q$Ur&+Ryfz&vfnoxlNHWg z7J8-O>ex!>u!Z7{Uy81B99H^ z_b7Cm+|>BhicaT#Q>Lw7qZ7gegllF@j*D}I;acO!LWzvge${M$8uqW+pbhD*cw*VEI& z*!{h}zi|R(GxC^GFk@$AW{(_sxw4QF<4R46I(b1$3m8WV`G}al^Cr40%aoq;C~D_X z0q;m5AIvh-`aftb)4Gww@Hd%$G=QK}@BZo9KJdIRlPMMS# zSKe9AKHi1Y(N!S8d={AK7<_SChBH%F*lt863EB-y_1cu-86D1>8NH=}{4Yc5$nE(w z@V$2_CY+9?A;!gBn1I8H@&SKC8BV_pT{*I~k!gP@HTWA9b9Yf%qBqYQaqqAm_pL9* z^Z!%v?F~~w)l1ApLU*tq%SznBK-|oxecFXG^NKNJ8Lae zo{Nw_4*GgmocBqKn{?V`u{+6GsFEzyR^Er+O$C0XdoSc<-N}&Q9gu;Nm&v8zTqaxG zbDT2pJl|QSG|QC3GTG~{aaKc~O->i&*@cwyEYrHnY`+?y#c6WA%k=F?sijBcQKZN4 z1~pr3N8h`Ur%pC&Tbs3yz1qiK<=L;4!&<9fCA>!S*K2x{rnhT)kEZu)dRWs3HGNpq zBbq*;>C>7X)%2LA{VMaj5)5m2JEcWEcA6%S>;#6XlOpk2Ec^vb%YkE}EW11e( z^d3zQYkI$?4{G{^rpJ`?QOo}k`A_#SB$3F2kmOm|=g*}!a=VuPPRDeSL(6{{G@G0w zpxK3#`n*Xs_Jo!`t))k`^r)8JuBFGc^d&7luBFGdv_|o-C_d_vXVfLnGR2pvgOIK^@6K1TnbhDQBYH6>QzN9m~ zU-83=r%sMWhPCu*t$U5uyA>HS)Izm^_$X@L)F>BCxjL`#oo z=``)j6N-OY@lP9`F6ZDet^1P8`|B@h{;11YcGTr8`?F*t7e|k}^twk~dNBG=2YG7X z73CR?sGcL#^HKLeWIx^?rC)jwrE#|mr4!wn2xm>1($rYrNJ__fTjaW^<9yS-A=)nQ zh;UtC-FCS<(uMQ`nm!OY$LW*LAe|gh?;4?Zou>I|nx7n@%#$O!3TQe@OBX7Bp<)(B z*o#GqUxZqBZ9j{YV{x6cA@&rc+7bJH>_+Fx*z>X5oOi{39=i_O#{EzB zE7prz66x1k!x8$lVI8S%C*w@^7AenbwDcO~d85{1A04?8z9lW6LH?LLs_EA>{kEph zYWfpRf1&B`H2t%tj#@~GT3|}kM#UtgNoIHnta5XZrsWKzv!n&-JUJKXLRo^eMOGkP zB&)p&tR5F3FAi%(9o9-XtX1Z)R;9yQ4O%)`OPjQGnwF-ube6Nkn}qx8OU)t$5$94Tn)zl%5^Od){UHke*w1 zZ9ad6=EJ4$4q=`wA-$7D zD{sK_s4kvfJ`?E`Xvf7@iCU3n!5jY;3%I)Y2JQJsN5C8BJK*Zd0qiDR{JT;skRC+r z;^5n>7b1V1rnjIqoVMVJ0T)lzUWD{EwC2h?@T48~fpQ7b+vQTEcgW>P?}QXCzKpX4 z>0Q!|^j-M(CS9y_8Km#VcV=C=2fGdz|Ekw6q~FDplCC@l8D0E)16QK;2~H0A3QcRA z5n$?^tAMFR+K=x`zga#aKayYIo>7O>;|w`_oNJv!&MnRz&OOe3&ObXJa~^WO=se~; ziOA)Lh-ZG`{MM;*r@OP=Gu?CD4tI^a%gwp_+&8=b;J(v+w|k%aFYYJY&$(ZAzv2F? z`$PAq?yuaE$b`t`$h63;2v)twvdHR4S7dXf7v6n1a!us=$W4*kBlkq^j~tFX7=#^}`OjOhGmYqUMO3jb}0c1Qc7S4Q_nZ;IX#eQ)%i zq92Q{id`G~NbK?0pJN_AOgGhw9^~FJ{C7CUU1{Nu&)D)WjH`g1@h_s!+iDi~Sg%sT zFx_YH%<*WtXYnjCaZ}-0roq~#<2M5qJs+0602a!pUC)v?Ou7Vjakj|W&R?C)(E)d9 z>`J#kmUGW`u5&+(r?jzVhz#U;&=Od@hlJfuwkU92R)SyS${awTT~1YhP(R)a~EdzN)DvjJN9LLrn?t?;YB;p z-rFnLp)IQhGgppu_xC}1qvbhEv(UrJ?%d7|8Ojwf6mTpEr(yt;lT{sqBLf+~ds}}7 z)Zn_ldvFKz1JT45an#szLr937SUTeSnZaRMlii(J3jt--vcB9k&et)R31 zUaC=>=R%YwA%Z8C{Ieopt_T5ly7{YK-q09UFGi$pCGWjup zYN4lKM5yTemTEZ71z^|SAv3Rw5Sx}|df+p< z^L{~zY4%A6$Yv-p=(Hsx!CS#=EV?(?&Qc~WRlr`x8r z+1`w7va<>OBV06lWZiZZbrWZ+EFT%{fq87m(09oN**@dFR%d&<`?cXNe=khH_$n(~ z4l{t>MCbJYtfU8avTAVnj0Knydpo;*OsGxm!?37rBf}XfXBVx>_Kx&t&f^3+0nMCV%w{d_=T3J%Lo019H5$+wbch9L~dQVH&$LUEMwgT-aO@H&ob=9r59XRjkgPR>(Aw(Wtm)$boRq&0s{{N0n<=9rWZmDzo^cVY!(a6U=fZ^ zu?S(7D&-zHCOk5xOB}m?UeA^-?SonL3d`}{c`WMgUG8TGj10xa^JNFUb)LkAJ3S-5 z`ktI`0vD`AwgmrJYL6KKhDw&PDO&}{Avr&XFG1vnxA*Ol?PjW3w@VRdu>o3#>8eck zE;1ZK!SeoYybU-^A2!60XOIijkTEP)ROf}k%jhaDyBTb4*#apvh6}DbJqt#{-W5Sw zZsvxW`+b?5;;gymeOnlrw`)bN%_58&*s{dLLtGb8mu>{C)c5bAQHOAFw-!=IgYZqY z+s|;2O0-=FXcSi@bWuqj7(%ONd`2_S0AhR&T2#bBO}q$wiQlb@HX7iJ$n-L12qRFkYYEp-w~Ze-i`Y(Ikg4MUk8PAFM) z-u5k9x(BB9bocDcEI=$f?05IrSRv>4=r9jJEyw@T?)Mu;im2Mp>w4KLn9O^|7THr0+RJ(L^9K4L~Z!$h6Gu5`o zEc&Dw&aA+@#@+pDk_NGAaC=tAQe6>MrYbgtw`sj_t6S8Md(4O$AfBsM=V~k5@O(9E#2}4Q$QG zSCBN2a$rlaNDORQ39p8=ZD7lC1iYHDW$S$6i_C1HT2*0%$}c%)14BiqWpfQM{*}W4 zu?(Q9Hrf0TGkh^9KM3^J zaDlr+!J#1x%~FGa)QB!ke#nfnbg4c_JgdI%6tVGnTk3tE8+$atm@NXBO-g853%<5Gxxm7@PbmZx zw7{|@d$Hp6t2A(>dg5Tv)(*7PK(_1G+8A7X4m!!To%(g!!Fk)|qj{L0HR+eUVTszT^6Z=t6!_AE*THNxJlIzX&Q zbWb;8){9cXxxASMg)lEuna&(MbQlU*>^rS31{KC23LMO`QQY=8xI%^HeS0?a<8UjJ zTQ#WKu$|HE2(})eR18&($*dj7!72;W*Tx~-ri>2Cu~aTFF@>ql;WHkN3rT44GM+8u z)dHuLpCw%O0%XC96?w2??=_C+D)w623UQB0qTXuAdMd`RfnU-UCji)YY_GKY*=<*d zo+lPL{`p1?wgSTivlQ6P(!dto`t+FXhUB(zc`oeftQpe=3P>10F=7W#LUj*li88VV z#*dT194114W(Q&ifp`#B1~S7t@vmX58r+@Tm60Wx9esl~zp6dAcd!Rraa0w}FYWH{ z-`3rO%}bEMxuK;yIrUdj5lJFKX*Tn{ie&6XNdfrpWHlY^)hbJT1ym3HGGcFuWX9CIUhf;pM! zQYq+ADLT%&%;KV}T46~rJ`!<*F?8(k%xQ?UZ^NMXnYno&}gy!LT%WWov80f7&X@1$^jKZEa+&G`)J< zFFsEoaZIW=5_CG|uIj^mk!b_nc-vTy`fzNwHp^30o_Y@=lRt>=#UN2hj5qe+V3xxl z9CzsC4}c7|5|)tj`b^n_m=BqG80gGyYvig*MW2C5mCFol>)+eeH{74e2f4vPB1|~A z6B7_}RCvq<7gHb)3SnGuQubhLyyAhO?!mod3$Si*V>Pyb2Ilwe*f~y7myb|)pxfV7 zsKrTMfb3!DdfYeY8_3MzAYrlFknwl-VRxPHIqm&oGcJX?N{rP%cX3~?4|gqaqauF_ zJBlwH1y51@JY(A+@rYKp_3>6sp>{wXxW$mb*0Zj`fMonajV|0@+fjo1%=>UZc|Y#e zor~W-{MUy~Ublriai@3_ej~v4OE12*#A^okew*-hag$#UczeG7eDGrFKHTfuum9mS zVn^n-<7ra7i-LQ>OK_LB3-^aN*g9$4@6DjaU3iiNPnT$InZ6Wvhu7fyEvs;Ux&!sL zpzYPT!@MG2?-bmg#4olPPq#|^6jQG;2VU5`K{jmO(UYKG5;t;5e+7Hoj&V?J>gSg>*71DsdOZMUhc_uFc)yx`$s4)=22Pzu^ei$!- z2O?8}q|brx2wG)}UD|qq=NXoUs+Jh(WfD6$dRT22YsZ%CgYwLfO9@MrM`RYbaVSJ< z6mv`ClVzrj01xU?gV8#tZ_69ZQpi52rm{o(z#jG~E{EqQHsN7`6H}}PB{eJO^rGk6 zp`8(Ed-yeKtOEVTTB}dCsi8^)-&H6HG%l$g=+~IC8AT}xv@W&d=~+@{3ao(MISNDg zg4-e(Rsfxcf8D;&+fHz&HQ=}ink(SftK^DpWM60%gP2anj`|FJ{g86)1#J&{xz<{V zjKT+2B~y#($6BY%E=ce?w0yGZDcj{3?S@oc$m2dKau|h^3*6dOLNktQw8y((0f9q6 z-#dKtVh~e!5TmdcGa?H<%fM#{a26Qa{~)+_0^%5(zR<#R_|HsUnPDW_pqe-Kp9?vo zg0`i0fy~FlXJ_Nrf(KU4(!9(y^_QbKtq@gEspM64e)Q8!%!%dOU=>GNpL-2L8tSi2CtLG3ToTd}!8}2RNPglL{8H0kVYM zu$+40vY>sLVYs~xO6zUZSIwXoDU9cdEnQCTf#zv--D+VR8`__*n11xoSm7RwO@5Zm zpr053)iACr)Oxp}em@qbWf<9E)hd@7sSQ)ELOZkp`X08K!B<=hqhBn;D&;)@S?E>R zx}<`+l$WDA%$*jx9p6+e*z0y+NMY8c5T|nXHa~~!!%&Fobi*k;-_2|d`zgp3!D?~I zB`PQT+@vj12YZpHC*|zT!0wySrz}#_#udQPry04!lFm_FH)=?up$+_B$m70BkX$uA4xAXT3ZrXfX`}ktHBLK z7q$}m&osjLLeM&Qi$qZ8OJ;5HyK zUJFig_EOYqN1V0-bW1Vbn{W*<8&R?XHMfACFG{RMYvj5NvuFoKa0HLr&cw!R4`$K$ ze7I3suXQdJDeu=2?a^8?BV3~cyxT#`ZPFHOnM@xELDKl8<~sAlHP)f-1(1J>wuP@C zof)R3Ue=?9EudP5|5hW%t=U?5H0osobVx|f9lw^L4RpY97`Jx&__fUlb)XJw79?GT zcH4pB=omdqwdv^=m5L*ckuBvFyTln_ewL?nJ$&b~l3l1ahA-zTB%&>x6wh zfqo0Uqx9=+ecICo{8wykg}!V=OY70+cIap&(!dU=K2$M_P``Zr=utj72)MLllF zX+0gtt<<`Nh$ml}N`9THu}*D=v%=UmxAgcH(u`s|Tnm|LQIwr_(q-)gJvp^b8zT&=OVwKEXJj zIhF%;y$(8L9gaX3@@A&cvO0m0*0HrXUK|%QDy+8*_1R0#Sn5D6_XIU*SCn!UG|Q2@ z%+_yLIo5%XObO-z=fw(@jAO7$=c~*gUn1k>D9LhgTB~x{c|C<~F4xg#iySRdnPV9_ zlVeYNSqn+nKJBUlxYd9zReLfsfj)4(dc-bxr53!-fPMMg)!O^@+GgNijW!A%IKZQC z2k)4M=g1k#aI3?mmkVAm&WxI5u`U7(GZ~I`+wK1r8;tEd!6Nv2>dk?$bMa$3-hwGJ z*FY(BjKzjcMQ{P)@(?JIL2h^%+5*M3tD0mA`xaJHp=<_%;|(}qqOuJy<4{+lRhfFR zH3lv)W*Qf_A=86Fr=v6Nak`N|&7Ws%aQm|ZDo%8o*c$vUQ=Y~YIPE&rjL>S{K-m@t zoV{9#9F2`8Yz%>h5|}KF1cNxCpqF#8X_v+mjj7}(-3B!!PPf%+Vr-2D9rU*YOD}uQ z=_ga!&T7=4`{9H#rXMVCaAxImU>|s#LoG(CM+Z9yj3zKlQA9oOos zxzR2@#*q5)gJ{VV!ssTPZ=Fx zXQADEh&u4!m0>jZQ!uv&Auq>zHm=+tn5{l!!7)vt?a(PS&b7H+I32Zuz@J+HZkoA4 zw%bFz8^iG0Y_Ug`&7F%k!kVBJvsE->X-@EqDVsnCTb^m?xn*QaffbBPJ1HnNb&QQz zJ`v2V#>+9MX2aIzA#KH5Sv=)mNIN>`jc9B07|GJWU4@{P9(r_(q@Ig6gyif(-9XCM zRS(}wHuAzhRu}Sl+n!-0+KiTG!naHH8S8|nheRw4Xd0=%myntF{b`G zw)Q!cd#b^mYjMH$bq?C#aTqA-NAukbKEPjCke1ZJMuu}QxRXK(&d?buH`{I2n*nKf z8}i?bGCls9Sm79kc_a9wB<`~y zjo=e8$l(Yh@{bowjQ)*>Av~Pr!8(sLi1Tsq#Vh@koPHJHz~lN_PCVy2k2dmFKXZJ# zaeXIRhF_c#_EhvMJXT@5cpeXO&H?`u(e!{0rTE@=53ke5=Y($s<3G}9PtYfu!y1x< zrur~m@U2tFuN|U5&0h2vhm0k`XiM!J)E>Ptms3Y;VH_It44eKF^qxIKDOwzYw8)jt zQBCtGL2#(dV*?)Php?dKs&Ha$*;2F%y`DOLZ`rQ#dPc7Uq@8&pTBFy1KF}`x={C%p z(K@hrXg#!|O=0xM)iR8o1I&QxnOHrTtq%9u;?QHRo;XBJ6}VUo^hKM*LvN$>mB*qs z?wI2zB|&YD<{oI!*kEuxBGX6rWC;D64atg*Prz@F>3RO(w}7Fg6^@xPhSP&Ki~Bu_ zs@~M&D!LbKW-;nMY*0=P?C%8ScvGH{4p$4tHgfXV9`tJ@#5E6o0AtdN7R&*K%%lc* z1Ztv@UW^UxjdnO2B}KHgi%_x+z2mJCbBK!DX_FWq@^FD$2yUZHEU8B|h*p*%4h}ZR zj5oLi<6#ZAqj^03y$ju7l#=UqwA_M`;$bP*SSh6@IPY+vT^`n&Okj_wUCs~sFzS7T zTENXM9&m9DlNsY5c7#`DQ5-0KLt2bZVxbXQK^O;zaQ&mzCZIY@Kv$YA3Rm7X3PQ~QOlcVCe z6?pNyqM{`; z^WBP6jo0K{?@k}y4}TB&kfs&X-#dV^+BdZ}AcwUQD!abf{L3p1Rm%^n4;+6)rtq-rOy{Z3Vx zxm23VG;`@Rmo9TzXf7@0vdCN(o69nDnPo1U%q49utIeg!g9;Lm93XUGEh_FnATCf< zvlMluMWqIag78PB9TD0BG6JLxR4vKcoK9%;fJ;E-Cp3N%P&lFC5=^+%sq!SS za6;p|kkbi`E?njHb2_2X1FmLL{aZXv6Av_c6*Xwdk}=z=?{V4t22mazC)*mh1oiGBZ3^+Dk*MghPuz^lwq02*BIYy56}(w?#{3d4 zOTLVc5jX96!85r~qi?wE9R5lf&Xsu4V+Aj^e_vg;@+5Iz$ya!H;IeNjBap60!fTX% zCE433dXJGOv53iNvcPL074N;Fc_sBfs$8Q;wAPS2%Zu2&$BK9uU*rq2Qa1D2Z*p9V z%Pu5!ydxoB)QKa>h`?VqUyRdIeY<(MKTOe-^kXoQhvzU)D z-YRRbC>L}o>VjILvWR6`Fe+Dd;hdDHb-TZy zp%DvJRpeSS{!5Z;ImopvtQWAJis}1e`hr(Hyh1af9BV}lho!hs8}XvK6}OUi54V;; z^CP5bYb>TJKf4*!yH?v9*VJUgt>a;H?HW!4&?0LuaB1)v*%*#OK1U_Jl~0cZ!H zAAnW>mI9D6?7Nc_w7iW%ZQr@t>W8jFJ3bhXVcVbc^-{aet!koq6+J*!tr63lSCK|2 z!GRGGE0;-(#^s#JnE2Bh$fA}@ifC3O|;KLK&{F#=)p9wQJo>#^B}np%XQ6)B}j*<*u>fQ?8v*qO-^N+_s8Stz%B8Yy0+`OIXCO( z-LmVuF{uQxm_9N_ChEjFhO(JIFsY485~*%&A@Sr*h!8kR8cY%oOG5OhNd@ghSv{G< z>FnKjQYNcDMm;>R?3O*yb3G4qrBkJulR5>=N_PV0>DC@va0?#jyS@k75><&>uH^x0 z=z&$Y>VXE@lJBwpkplxtGej*1pcjB{0A>R)7l8QyECiq(fPMg40ayw^%E5c?Bo1m< z6xOd>+`NLnH%xs8h$maFtsUC!3M<7c|! zAxMb}ekwaJez$?~_Ih$PCgkt$w&O8-W%B~-m9nhIjUfA^iXeY{luw_ zLcI``?O80U_v?2rJiUJArz77!dg_M{zgT}qRlfWAw=|%4$?DbBQTEpo{hPEgf*o|F zTjak_3;(V;c>ejlgr!B#N7_#R>uokeJISQDR{re|f4ZAlcgSvUDHc-ZU-SFn&jLsR zu3BAsDqp2L!m5|utV&$da`lMSKGg!TG zTS??Wf9hp7WRkAWIfyrxcWXXc1J^AKkFb`wa}V|rIEB?+mH#T5DzHYWwL+~7N>c5H z>aK)WkcD-|ThP+zBDK36*;97bI(AcgsDoNbYm@7QDsj6O+x-4n9ac>@q3yKC%>$uU z1KlQ`??qCNJLSJdYlk*eyGedL+7Q2VNUOSyPivvNad@2_Qtg`V+%*?9><#<&;*?QN z3oHz*`DSb44nJEB){3yL3e!3dkp9`ct+eJVeFi-U^Hz2z^&af=P|vp6`nHYuUZp)M it%x_yPyA^2L1$SQ9Zi= diff --git a/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/Unity.iOS.Extensions.Xcode.dll.meta b/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/Unity.iOS.Extensions.Xcode.dll.meta deleted file mode 100644 index d19f66f..0000000 --- a/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/Unity.iOS.Extensions.Xcode.dll.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 4b9607f4d1ede4513baef82b894f6ab0 -MonoAssemblyImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - userData: diff --git a/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/XcodeProjectUpdater.cs b/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/XcodeProjectUpdater.cs index ce58c2b..0f398a5 100644 --- a/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/XcodeProjectUpdater.cs +++ b/NativeIntegration/Misc/UpdateXcodeProject/Assets/Editor/XcodeProjectUpdater.cs @@ -26,14 +26,14 @@ internal static void CopyAndReplaceDirectory(string srcPath, string dstPath) [PostProcessBuild] public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { - if (buildTarget == BuildTarget.iPhone) + if (buildTarget == BuildTarget.iOS) { string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject(); proj.ReadFromString(File.ReadAllText(projPath)); - string target = proj.TargetGuidByName("Unity-iPhone"); + string target = proj.GetUnityFrameworkTargetGuid(); // Add user packages to project. Most other source or resource files and packages // can be added the same way. diff --git a/NativeIntegration/Misc/UpdateXcodeProject/NativeAssets/TestLib.framework/Versions/A/TestLib b/NativeIntegration/Misc/UpdateXcodeProject/NativeAssets/TestLib.framework/Versions/A/TestLib index 4ec7dc60e295597ac8fb573e915fd489078d660d..b82b6803bf50562b2ae574784d468ec6831621f7 100644 GIT binary patch literal 6608 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 zp&jmcvTextureCacheTexture); + // note that for metal rows ordering is opposite to gl + bufferFlipped = !CVMetalTextureIsFlipped((CVMetalTextureRef)mainDisplaySurface->cvTextureCacheTexture); imageW = mainDisplaySurface->targetW; imageH = mainDisplaySurface->targetH; diff --git a/NativeIntegration/UI/ResizedView/Assets/Screenshot.cs b/NativeIntegration/UI/ResizedView/Assets/Screenshot.cs index b20e21d..eba46ea 100644 --- a/NativeIntegration/UI/ResizedView/Assets/Screenshot.cs +++ b/NativeIntegration/UI/ResizedView/Assets/Screenshot.cs @@ -45,7 +45,7 @@ void OnGUI() savingScreenshot = true; CaptureScreenshot(ScreenshotCompleteCallback, "test.png"); #else - Application.CaptureScreenshot("test.png"); + ScreenCapture.CaptureScreenshot("test.png"); #endif } }