From 2b0b413d53ef71d5639a4b620f16dd7121f9acb9 Mon Sep 17 00:00:00 2001 From: WEI QIN Date: Thu, 25 Oct 2018 18:41:06 +0800 Subject: [PATCH] Xcode 10 Support; Add framework target; Add demo target; --- Demo/AppDelegate.swift | 46 ++ .../AppIcon.appiconset/Contents.json | 98 +++ Demo/Assets.xcassets/Contents.json | 6 + Demo/Base.lproj/LaunchScreen.storyboard | 25 + Demo/Base.lproj/Main.storyboard | 24 + .../GPU_SIFT-Info.plist => Demo/Info.plist | 35 +- Demo/Jobs2.jpeg | Bin 0 -> 45568 bytes Demo/ViewController.swift | 62 ++ Demo/pool.jpg | Bin 0 -> 16199 bytes Demo/skull.jpg | Bin 0 -> 147539 bytes GPU_SIFT.xcodeproj/project.pbxproj | 750 +++++++++++++----- GPU_SIFT/00.jpg | Bin 44754 -> 0 bytes GPU_SIFT/GPU_SIFT-Prefix.pch | 5 - GPU_SIFT/GPU_SIFT.h | 19 + GPU_SIFT/GPU_SIFTAppDelegate.h | 12 - GPU_SIFT/GPU_SIFTAppDelegate.m | 36 - GPU_SIFT/Info.plist | 22 + GPU_SIFT/KeyPoint.h | 39 +- GPU_SIFT/KeyPoint.m | 55 +- GPU_SIFT/MainWindow.xib | 262 ------ GPU_SIFT/SIFT.h | 5 +- GPU_SIFT/SIFT.m | 255 +++--- GPU_SIFT/Shaders/.DS_Store | Bin 12292 -> 0 bytes GPU_SIFT/main.m | 17 - 24 files changed, 1074 insertions(+), 699 deletions(-) create mode 100644 Demo/AppDelegate.swift create mode 100644 Demo/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Demo/Assets.xcassets/Contents.json create mode 100644 Demo/Base.lproj/LaunchScreen.storyboard create mode 100644 Demo/Base.lproj/Main.storyboard rename GPU_SIFT/GPU_SIFT-Info.plist => Demo/Info.plist (53%) create mode 100644 Demo/Jobs2.jpeg create mode 100644 Demo/ViewController.swift create mode 100644 Demo/pool.jpg create mode 100644 Demo/skull.jpg delete mode 100755 GPU_SIFT/00.jpg delete mode 100644 GPU_SIFT/GPU_SIFT-Prefix.pch create mode 100644 GPU_SIFT/GPU_SIFT.h delete mode 100644 GPU_SIFT/GPU_SIFTAppDelegate.h delete mode 100644 GPU_SIFT/GPU_SIFTAppDelegate.m create mode 100644 GPU_SIFT/Info.plist delete mode 100644 GPU_SIFT/MainWindow.xib delete mode 100644 GPU_SIFT/Shaders/.DS_Store delete mode 100644 GPU_SIFT/main.m diff --git a/Demo/AppDelegate.swift b/Demo/AppDelegate.swift new file mode 100644 index 0000000..ae3b82d --- /dev/null +++ b/Demo/AppDelegate.swift @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// Demo +// +// Created by WEI QIN on 2018/10/25. +// Copyright © 2018 WEI QIN. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git a/Demo/Assets.xcassets/AppIcon.appiconset/Contents.json b/Demo/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ b/Demo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Demo/Assets.xcassets/Contents.json b/Demo/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Demo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Demo/Base.lproj/LaunchScreen.storyboard b/Demo/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..bfa3612 --- /dev/null +++ b/Demo/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demo/Base.lproj/Main.storyboard b/Demo/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f1bcf38 --- /dev/null +++ b/Demo/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GPU_SIFT/GPU_SIFT-Info.plist b/Demo/Info.plist similarity index 53% rename from GPU_SIFT/GPU_SIFT-Info.plist rename to Demo/Info.plist index 7f72a84..16be3b6 100644 --- a/GPU_SIFT/GPU_SIFT-Info.plist +++ b/Demo/Info.plist @@ -3,38 +3,43 @@ CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - + $(EXECUTABLE_NAME) CFBundleIdentifier - Moodstocks.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName - ${PRODUCT_NAME} + $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 - CFBundleSignature - ???? CFBundleVersion - 1.0 + 1 LSRequiresIPhoneOS - NSMainNibFile - MainWindow - UIStatusBarHidden - + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + diff --git a/Demo/Jobs2.jpeg b/Demo/Jobs2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2da91a40e1b78804a8bae3322ae7c958931454ae GIT binary patch literal 45568 zcmb5VbwE_l7dU$9lJ1o5kOpaCfu*}c36X}CE&=J3rKF`Bq`Q$=q)SR_5dlF!kcPMT z`Tl>h_WI`kqLZpX5 zfCe#QG^EFY|6f2tMnOeG$G}AN>JtFS$VezC$fzhNm}nT7m>2+}mkzO{`f$oBor=J5&Q zXDJa6e1!k|NW>r>AByN=ApF;Xg6MqwJ^~UlAqoRO5#nhAsM-(9z!MZC#Q0GN0U4kp zK;o12zP)|c-+|Ehvl2INJ9}b-S2=jG-@b%9h}e9a9!m+cZ2-S!F|ov~kH=yhwy{wv zBKR4$@IqSYGlvG{=!EOFsF+AXg%-ObyMf#>MwT%-rB|aN^f}MEi+fhK^>ACb&9h}2 z$BG7!J+EqVA}Voo8P_PmC|OAqbIccmB%0`AA`Zp^5&iu z<>t6rvp`AK+lSeQu0p>mP}>SM%<}5wb1)EfIu^4l$tT+GihGc440#Q zVZ!PealsOpFXgvwG?SqFROLYcf$!~>JbPy5AxYz3$r^0ps7O*aA}l2+eA>b>StpH4 zgIOTj!JQ#n1=b)>2i`#}1|vU)5G(Qr05NiUiqN`e08((DEPyIY|4A#D7qwRlKm`C2 z03b?=;(7uEvj-y`{hw(eVg4TsF~1KZn3zDAxTFu6s$`hs+v8aMy^_TpmU_{vCRLP8 z-SoObTol)jX_Zqf@Gq+_K1)q|4Tn&lz3!oGq2tIfu4<;7m8z45v>g0!PVV-th*s`P zw!@yjJS-u3Tgo6D=U2FD$x1sf)|lL#88c^FBwv2l5HKrXD@l9{y$}`IuBFDi6RfIn zauiw+?%(*DDiAxM1TN)@C5Tel4^m!r8*e*CIi@6LK@1p^9SD9LHxq#Y{bT*F<*^6` z5TAd5Yy-$a=n>OK#zvHgKG{$7pB@pke={a{MF0K6W9@&W#0KTJx)SdwXp&6vBnZ+j z7KS!`n1IApMC7^%4u~{*?P9`G#nMB+X9j-!%PG2_!BocwiTAGZB^#SbfasZcvkK_i zQtTJ(3~&!Qs50YU*6ve|e4m~&D+mX}jpf@Q(K=58L)#8lTny!!=rkmBOLGjwn%>VG zm1}VCcvrV|j`N|?WFwaS)U3W!G(}!4y<88mvI-4CFQ&CE-07h_;{+NkwkYz?RHhaQ z$_8ns!ZDE%Z2Y*e^f3^ze+GegH4DDB_?Vv*zng|-EZn581h$MUUDcNRy^oV`e(_DsMg^P*CxZEOEda%~X zg=b@Oubhdv(c8ZKHZL*`iw7HY$43cKaG{~no$mDi5JcH{9DA*rD)gB%SuJB~_L!-X z?#lr=+bpR!im-&9?N_a&l#0NS42K<&WF>Hmlx>n%sMcS>-?L2EP>}MKkF2gl-!%RaT=`xBbO@53|SOSVmuzfVDl9>bk`?j% z!5Y+{R`p(;3bI35l_0y}?Tk_|G_x_1x$)auovOXG@5_PEX~`m4RMpjBs5ZQf{lf$c z2+T-1*d&&u!dl>Npw0BAj{OwG9zy)cK3`FVYtR#^kbwe(NI-lrA18wPNlt+i02qT2 z6GF~^MuE=o$Xx&$;tSyXLdIlArN`z##!gcho@y(ef%UmkB^m2;_<#<1*ExjXv4pcj z%@&biP_YA-rG7Des#b+#o%AqGjdjnN+iE6Dr6z0Iu`u7J_Osn5`$7gr^;@Hbp9Vj> zR!cfW!lJlJ1)Z~xa+tSLM0Sp%nF>^V`g~7>BK_f$`UcPSDQ%&!kM-bP$`^~KL&nIu zC1K)k@-~N2q;30{iHBKKLT2$U`b?G=2M_z+;`cDW!)d?0A=G;S@Nx~XU9!~+tv97F z&Nz+bA;}gH(ih_b?l7|tT_V;SQ*lq*xa~FL$n>qcsO>*UF{g()iEX)X2WAE^FSfk{ zTN4H-yR9fpjFj22hMk!oZ&J4G@l;&9WWxZaK3b8Mo&XH^%CVhsQz~pb--9|-U8-ftj06-Wl!w3L7 z8>l0nkogsxADjL^@b83-LnFK-W`v_6b~9q<{_7>sLLzt+X{e9q6yhfI$D+OJ)lw02KqMt>%;H&VVbb}jP$;j zl@yKZ=(#0WtTFiS)4E#-U_5m&rjI{|<1*fe?YxA%SB94HaeFL-H1f5b6Wtvc=uCTm zT*5JR#%Kydzi3@a`jT(n#SS*j64OZ!6DUqgrWCGLPJ+Wq{gnMpvJOTOz6&+L5DgKNK8Gd8Roj=^y z?2E0OQHi+RI4o7Oxl(l5{-hhBBb*~>XBNlC-sz9m9A!zf4V@@eI2Z$ozO8*fnCDZ*#U1Y!n*yJS zu`orRh;>{%;v6oRUMtgAYM+e6;GI9WRT@r>@E0w*6Yn^rQolN)_9|58+KY3D|1gk8 zbaIc8ad0hDF66ORG4Iq4E2|aAfmRo#&*4RyPp=r{%>;_-^qDmM)!n;oy7ogTwRF_`s*7U8dEuJRoYi;(k^BBNd+7 z>CTXe5J&gr^BcwDy%t*9Wz+O?p7*iuO6MwntxtvE*2FKLtt=WKl$1K~bXiNY10Oy` z5WK_n#ku0|Qj>VHvGN=N<2ZNSx@84+!WCLgZ$raVOoPoCfm*{GFcHFm}r zf~+iLaf~u$XX72X%><|{_rV;_MD*ECKiGl^HN<(AFg6RY6g>2@l{0xB)$MYG z4#oiG0TaMjK=usr#4u)cBr?F`!&DdvQW!k|e0+k9--}7tOV^8#%Jh%o88JO%el#oO zV8k5%0SOX!qMPG4CpzZXxtT-g_Ir`0j5!l$?kcFWo71$OqdWttj<$uWu$*w3`$A5` zhsC%3!d}%q-6{};=d@JK6Xb2PdqO7_Sj=uMHK(kzI-j7*Jto@pvHi?CgwCenbrvti z3Kr2UPU;&Ha6BgAV>@ZE1o1JpET&-$oWKs{1pZ!dLOP0@txDFA02q_CEg*?_R`(PZ z9;1!L-o~s}eq^1N<8AlTF?x2+&_UTL-NB|V0poc}XXY0B-!|3WUA#f#c(4cvqG6=4 zIS)R)eFA3NXro$eO)e4N9u?~{c%uvwG1iVVpqNL^ATJ4Eo{HgMd>z(DYFwj`>fk=W z?Zx-0g6mtPQRZR0z zh4JoZ&)MEPug@EJ55V-hy_x&Nm&At;z`^&)2LRG=x2wGhdzxk!KvP<___u+q{`}n3`(5vR38&;lW?v%Gc(keP{ z=S(sGHr}VoCSvnFU5RT{w0(}JR)gvG_R@`913}HdMO`w>)})vj_Z?b?TR1gWCc}Jd_Vz9H zT@Y-zUb)!s=f8E3t|mbwCNcaFO{C#+_SD)+CMdX zN8Jo?$3CSNkBI9o^}YBp>-GJbHG|ylpR0ute{z@j3e{=SOQeWPzKfb$^mxaly+;_N zvA50Yc9DOLMhkzcJ^*`NYwxa&-eu%Gl{?^Bd5#ja_{K55Jx97!+p5NRu&92)4TE@I zy291(&SUS}xxk9ob)K_!35N>UzvUk8e1>7}aGhv=A9wydqC4J+=9O)dG0gbzo#h;2 z*(MXU-dzT*KLD>SPw;Oq&ygR1ORxVfQ9c|<=a~!6U3b;v=~Upim)vdKzU%E5xvs46 z3^Z-89xztdH>%V+ESG#0R6Br~;FdzCu^MWpZVa@tJ?5{_u z@;olv=0>-4zMP7&-bJc|H3!g zH&-01cksF-|P#4Y)bnsWSDmC$yawV6Y zCqV9H_cBj!%qfT0>)Dbw@ExX(Jg>)M2rlQz`2d`fU)h)}GadJw1}#j4{~2H1O+0+| z0QAv|cNd-emwD3;eQDV5Nj`g)#u@KsK4WRH)Uo%we5K}~dr!ptwEY~mx0SU@lmof$ zDTlw=4-}3~FOyItb~anNdp5#*{pG%{sb@+5Ucnvn@XqQ1Fj`*!g&-cISeVu);Ggl1 zG_!xMq3g(E8FOFQ^uetTUYYhbVcvmUcr$siB7H8OOce{F=d^dum!STsL&+K{`wY_9F;`5@G1YBF&x2Lr(c>vGX<9 zEIK1_k!Q?W?0V4zF-$W6Q#RO*$r!WT=IzjvH3O)C>(0iCr%jB9-M29f8S}<+-u(s2 z$e=V>E(@6-X{N&BdqLx7Mf)H0ZuQYmwp<;X(+zBi>0qlCRB&tvLPIvmR8tWM)l%QrcvO8%$QM~TbaMpa*GT`0OD zGBAdaJ|22oGBIDGUf#pK-Tpgjddgm3xD-LJ6~<675ij9bO{bA&h<{W{eI$AQ)kwEu z38$dLh@)9-$OKR9QkY##s5@MFfICfl409Oj#_XVB-1nNlpXiwnOPHI3La{RBMH#-9 zC=*%Kphp@ZvsJ_>^){`cjgfk?ie$W&z?@(cGsq^z*mfY4L#OD9#j)auSChV#Ek(}& z)8|4^&zs)Jnp(q1e$MS{Suf%&die~+roNNpcVRald(RN2O#}4A%=z&)LwnDDIPNl4P~iAvGoRq@Srj=6>0%U|?-T^>~^;0Ocy~ zhjvbjxf4_XdIkkCaxm^ou2cF)YW@dE>(_jD&n?%g#E`$QbhuE9l%ANn)U5H`)kvLp zO3J*H=;}$d;I@1K1RCyske9C?;CtQA$iSn+ao61=_AiVMcuaOhMaw29S8qF$96j5s zhYerXnwI4jYCC@YRkt&Oy<6=X@D7fU1cAS5Z@-@Ez8JspYO#-)eZ3iQM%uVp3b`^6 zN09`8^F)PG^Y*|C`4h(4?$%bhZWD0H1Mr2$U~@`J{ZmB!oyNSghkYT(lA~iwlYfox zvopU#i?xb~N>F)&W?;Y&48Ap8*Xp^bca#aX7tUHJSZ1SJ8i*?AE9{5k?RxG$0BqG{ zGB?W)z{Di01ul;0+VWa~1Sl(fW=gJ7jE02N%nf|5PScHVjIs;mgP{}^+H!YnS0 z?^#(V7w%L)&y=lr`&ShE)EH$O{w&Hxca^fA%evFZne^`7x6CYzlDn_qU`1)4RBw25 z9qOkZvE!8xvyC5<>;I!ia5R)X*y$`!YiZ_AwP@`XIr}{C%FCW=i~*%$&tduD>W=57 z#k{q8=LD8y#mw267Vj)8>=LM`74JHnL_37VcD+*EoB&<&@WXV>ul!zYom*LVV&>kjx{_C}YPxS|bkKMd+tN{p#Vr$# zxv+d^l`I}TVE~3fAjzjIV=w(mtKOYGReR_C01ObrVpkHb+KEw*br^l_hm(XKbv zG8%r`T7Xe`Es}T2rYrLRFuY4spiA*2Tjvq!DH4qydLHOewExyeL;cmTOaN>5Zl3eX z(Ltl3r@z-`P#RVEij!j+$>RD&iulpd*u>ip5(%Hq^2$ZJV6ZbPj)SxKAC(S{V%NgC zl#AD%)2cVD0O`2edq!ADwEGuW`FBsgCXNk}QF$))f8AT8# z`U?Qi4td5d5cW86MkE0H)1w!NUI{K|ne^yZLJjZZ(QCWBU>tGQZyRThA18~@AMRF8 zc3AfPow@O?>qYyVj}ng|nDR9FuwMZy;5Jhuj-_4|kX*4u$(zwB zy`Zq}OjOQ)MFb*bj3z9nImCprJ18VQSN>88!rpj}ncTQ{1-WzA(Ykr!-shstkfOHQ zlEdg2D$Z!kC{FXsBlXF4ia`#IL;ei5BZp5Hlo{B;YR)C#r+W z`Q=v{zlVvNFKR}MB=ldFD`ALt%(Am3qD@w`tiBD5=1=<~oFctio-}&wXY2b*ukKY! z6TyY@biMeoezOeM^BQWdHL7Q#@V*{~YZI zYfctD7!g@f_>blO^&p`kBV2RAfs1Qp4O^B@hq**Y+1a@=2G1}7fb-uSQZBI8Aq<*D^kMc0!7U%qE-^UFlGyne^QgCQvO=6QkR|Bu+{cuwKLHnXP=5-FSXmk z-I%Z=ogpi?M0YVPpEY zlM*<}RMvm0T~(##?WMN=d$P?+1kPwrT3fBc^D?W`=DRHXBB!I97Ys?z*%vO;ETtUE$6S|0rcj=!7S4Zyoyo1wt2}iU1$zS>M#W4cd^2Z~yb5Jj z`0)B;c|l}cV#tr}9Cr9nOnid@XFwXE4nFGIu9-2N^N$=MIc8~Hrj)q-mJBQL0ycQ+ zNP-gQ;S)rph2NZkVn{0PwcY}MBE?7%H6L;vc9~5YotpW$qVtz5FCRhA#&XcuPutR` z<+EEu+6@V~IevpnNszIPGpkk?#vyIo4@U~EZ>*ogHmy=qURH`h>?b5isuL(@45>*! z)9<+rWxh-t35|O6_O=lK0*}-~M3w(l|0_^!F*&VJkW2|=kre(v?T`2TFS3Ea{(i-9 zus+73$svG+-9>#*0+Unvy6&>j7rqAjES@|L(l%@6NL*dRJv`baLbzy&QPDhzk{X;;(K`i#wl1-Auo2i9ia^+I?D1GAsO74QM z1@g@H1VZvGp;Ni)9*8X&gP1<*h)q5Yl^<<` zatL>WrfbD8%L*dc#pLfat=Ovc-iow%jDE_H#pEafhir5kbJMXZ>d3KaV|-q-$^FQ9 z&U6{7R_NlCk+y}g%bKwEqiynG21+k^;G3f?|D*b3Qw|QiJM#7gDM(v@iCwH zDi-J+XR!I2^hFCq6xdXta{S009U_BhBVL0i!iKHIFK-OmBu+?caQ zTyBJ_KIwAu;rNzmXS8ia|368G@a7{}lK|~8xb_bek)wJAp2z~|yr}<)O!WWSA4`PC z695oKjO=6V38VP}KNiNI2~}=Lu78ur6mfRGB$FIu`J>6DEfnyX3SUlc+?1~HNmRi!Am&EGN?vVl ziL7~53G;PC;Mb_d60Am3EhDbIG5ce!?}GyFeY^_kEF`XxPx=>GJL)~smEKdk&t8B= zQq44)-buoA6w}&iTN-t;F)QjH6Cqr*xyGqpS2p!MnYJz9D5$SwiBMujgf@zT!=r{< z;olTcPHOFh2iX0hPsNjedCHZBd!9?1r1gb6 z_5kN%fuuwBNyEFw zHdFU5_!xF*TtUX8fw0;4$uRB}a*ocMuvfnv44kyHP0Uhx`kHtI9sA_9^WVus+V%x@ zc0;gsHLV929MM-t{)VytP@Imz^H1?8dGKj2aG5xG|Lx|B~9vS3J)TsSMBe-gMy#W@Kd{Fj!g%MBM zIv9t^=W*8hm~>e_Z9_X3oNNC-M^-E1hJ1C_;Bxf>4-fv#HwpdNd^#3jHmf&P4d>v_ z{A)}rW#`Iv+ZDEH^wyh ze3r9ZMwoKy@pwwwq}X&zbz;@sAS>OA5xb}$$R7nVg*Imwp2x%-P8DVyGcr3OO2&fD z0(r4Cn<$$YScd|H4NA%UnGiEB8N~$WR)~lk`B|_W;&4Ftr4a&=Mn{G|7X>L;L?rUh z@cHwfZ%z7!odpJ`7wzrV%peKRJz;D5Uh>?f)xK)8+naX3>>RAJoCcgm!9!wX-9`u2 z8F=C9LQ65w5aPutl_iy& zN(n@I;Vff`$kY|&NcT{%#Pp7U5JYWI`avBhpbuQyZcB+Yja<+q)?j9B7V5C==_?^` zeBKEA1=^es0*$f$qA7SUWoWI++c>0BMI1Ya1l5?XVYbLhq9%=ViYKf?3Z+*d>aE|1 zuSXF_?N#bSaY`dJ7!z|!TXNH@HzO=j+Fx#CTt#ZY7m5z`BA71B-rU*5?uA-6N1SI04+qg7LEABBlaKDAr*$b41PwxNrA3_ z5SRqm|FSav>-twd<{-$)K0^+{`1~Ru&FWHcKaXWZmHo$24*zHptN63%Wb`3WEL#$B zm=iHEa-rN_%*Q!iWo9)$8;*qE^m&p5-|E?X;&;%r=k-@JUJ#{vxjAW2DtgX&brx{` z$kR=YJ2j0TuQ84&+8Psbp!RX{*f!v5D>%o&BJnsKQ%oVptg0I5XR*M{?|-^#L>HN# zWPPf)IieUgBL0$Kv`vTmpMppqll%Z(~)NVg+2ndaut)La0`F)N+1ManM22)= zCRA05FO=1oN})!5xS`HzOc?Nxiu~zN&5>Koin+gS;8A%gb_!jRbzp`a&;+ z&as4+s7i%wbLzKC^v+I)LoxL>S(j>$O?|k`OWeo)J{QYkEiT!HalWY8bBk@#OEn6B zt9&Y0=_O^+HG3HW+et*b-}%mya=|)nEh64!CO*KfsxAzJFRgO8ef?}Rrn~&PGv{=> ztZY^je#cfxAm>!etzDEMzZrlTn|Qlvkd~kRcmYihm?pIp_uRB%riP z+oyxB$bkcASR&<*f?&Tz#N#SqJW5arrd|WZ{8vf(lE(0s%GwARPBfu8dO{GcUvWx; zH^@szaUu6>k%8D$EG?8`EK~u;8v7JVGF+ndcVveivXP*<2Gj=-HZvi@49G9bt7nFO z3QhYrpqL4?VQ+}4w|f|Ku$*QHDCHkfQLLG@iggXh^GH=&hdwDEM0hb<#6D=SL{+mV z!C0ah#T8~bXQGLtUn|FGBV!PW#NrY*5|RP_^4Lgd1dlo-fF0aYP~c_Mp;DLV@!8S& z_r|LpR?m~Fb}3v-^f0(-+@H}r&}lP=KRI+zgLIil;4)39E1J#HVT^HBX4mv4O_kMUTQ z@`kYNn5M*n(OsJ;i}t%-IZ0%V%7o2S9smwg$47Iy2XAr@&b=;rg6kSW5-$*h!Hdp; z_Zv+T!lX-6q$iW~4Ex0eDl2Mwh}jI)k4&;E;dtv-!eLeu`UM#ZBZ`p{aDh1UD6`_F zph;B8XMU(Al*7$dEtx6hv$O@K(*$ycwOZ)NZ6^^+`bfGJf8Se*d4p8&Vk8_YT&xnc zy0eKtJW$Cu`dx`y%M|kgF#Hy={KrDND3y()-jNH;_<2(AZ*P2G<^vF^6B$}mKA49@ zxsKFkOQvth$GnfFoM{p;%+F2X_j3_@CDW*Hcz>04vd%rZbxr7VgT~f(%EA4!`hwxJ z(G}rgm0-a0?c+Mo_0oTOtpBN#kH{ln_C-A=F8#krp8wM{0c30>gei|4j6}LV%dOm_ zcmKo0MSxdVvM{Sbqx^168`_s+Hm21O%)^TNp*%qc&Z*CEwGqz0cTCVm&ZIEHs4&c` z@Dbjp!^&wbK#A;AH*QNXq!1lqaov%WRW{q&S=?8D^~lVO4P`BxxGKB19S~V1L}&p^)_jlRvy$30TI4ZfMk-9oAy?%~|A$AN zsKgmeYWF0^;HpJZ{0q(3t*zt!3KdjmvSOMKFxK{L1B9L$D-canVBpZ0L=4J62;#Dk z{CHv^{!dK3?>{aej3X^p5L>B|#NrqnU0;~Y(Rta}!EW`Iw9(YI#esz7>62fL5;j81 zp1+PE3psC7{W!uoK)x*PMiHplddxe&{S-H#|HQiJ!IX65+pO%jY zNo$$6-E9R4XkKrpK0nxBSdsxO`NvP%mWc2TWQIpTbD(6 zgousJw|(W-8raB=WDg6em6=U|Gdw8$wEYM46nj38Mcg>go#ft?W#7G^3P1XSlcUp@ zmOLHaWf#lqOSKaYk5{GJD*0$ZQ?$fP&FJ%@e1ke4AYN^1E4cW?9YI@V?cmg;a>#moHFo z>1y}zo2}x~G#=JmJBQwp#TC|32C@_S*qExp(EVqpNiG?-5E0dOkfM3&COo-kb8dYa zf1zgK^J|B54U(ojtG?Jy7u@CJOYuX4(yd+T9}(^D*;%8p)>jE_2@)kTjM%qPh^^EM zpd#`W%0BgiQ{O8<_IWKE`@pP~Ep zF;nJH_>cYB3fri!`FdkoAM{7Yn6|Fy%i$SrgaWjyQ5~&>BSKkiFCDCjH;9pKhFKLq z!u#pIWe{l5e7qcqGU|L*i43;IB9nGku#v*>pyE-1?af!ryMB z32^jn5)IjcniyapTfWxINi?$hOvbu^0!7~!qdQ3Hty)#p$LD_g(OucinG@al#*5 zks|cnx7V<>Z7Jf^rzNoKUefQ4DeHoOJiGMNWzMvYJd2AD#r4FdJych@#qX;w2%F4_ zN9EV3>|Skx?!NMHTzqzi0r)8a$NFo5dPvO)ZF|P0T5({*kS;tR%gHguteII~^n~Tt zw-;o)DPw{SgoD~924gZAIZQdq`L2t%^37)pEcYySqIulXLIn?iARqCHqF;1>+=VK8 zLKn=^@MeT-5$rCMc>`7H5-EP&vLq0sQKRIZ-kBlg-$LQ^r8&0jc8vczzr07BZL_UZ zQ*onsCw*_es`le{WxIQjIyT~A>&^lRNk$EEtU4L#KP4Sn;)F%~i> z{7T9jUhYH%cd}c)O){vR6N7OO%{v4%+a3r%#RVnJS0>+oj-*9(PMk|JeOexVIkA3# zXY%`=N$sS)N^=!b7pP|BxRoxzn$TVAOJ?BY$nj^C+vK&%qW%M59&|DWsgPOZ(=O*` zsBn~4TXOMiN|naU-8Fb8{yf`BhySaD+-8FRAr$}fVk0a+?ElWpM+8q9nI5Bf$r6pa(mhRG zM892p1OBVhJg2J7?9cn>lWCw#ZkRHYMw@?fc@;@z9xCjWZh)M`=?nOCZmdFvyFq@s zk9sja)^o5cxZel;sIT7c=Bi0|>ux!!A10a2`@O?V!_u%wV%$F`8IiJlw8d5P8FkPd zB~AJrEBjh>h4Dw0)~s@ji8oZ`je|0aqpqVpnKkcLDt~{UOE(gcHDl3KnV&4-$a#{U z4^08^5q?b3OBDqbc)BW^i%}xmV9ai*5=_1)rR!5}ZJ+mm*&sHub znnTzrnYQKy9K7HktxRvqB139X9VUU{h)nZPR1Sd+J2LEPSnzrt`T zE@aN18k_F)q~qz^*Aey3@@OphsiPnB%n8Ic5^Nf5X)OxtUJ3d}@zis&;P4rr@_*aS zuJ4>pX?;GjQ_Y-K`g5eX!gbZD(jFo^{u6k*T2Q^u{$k=gaVkWT>e8-Nqq1eZi@-#!pZW2vu z7K8}irdrMg^xbK}Jn!m<; z0BP0i1f?^zew9)m?UYX9d&$>^JTmo6Pb& zurEitIkD0&D%NKDH~kw*H(`5@S2~NE&0t)Ef=RxnKx2c+_oY{_{;2L7)L)IIGu|_i zJC~U+U7brphpt(!nz(mKR!)a)@02dLg4QI1P!|{~9c2tao(79wU38UXD93%AprXbP zfbsol5cye;O9gEG>#<0V(qNs)sl3_E$@f!}aQ&-li0a3=YWB(QRP0NqxmiVht%9X! zc?VTK^y=r~;biVLNu|a0=CvJb$ELACJJ_t*=~Hbdr<|F&m-HB-z*WT{&`wZ}v?SJWoBP@-*$1?Hx?(B3m|w-;$s-v6boHnHlleaE-@Ye6xE;_jUbHiL zrGp=UqNaAcd{u$Nym8WO$=bPHO|!EsUEJMb(e8|H@D`r_7epphrv3eop25>V5b?~u z^X#{}=Ovqb^OC^w#;2hzRh1S2G7*YbZ$ zxi;_Z(Cz2j4b{Cn{^I?PBvI!8SD)5y`VLfFAhqapo%_>z>=$?^sC*P@6RoS(dCuh~ zH_v4Tq;jV)N1xR{YM453>PKEkt+H_LoE08>)zuxX%C`*Jd>83PldgSs)KDTS13&br zNQGf*ZjQAve@%9*yfEzYwAik3<#W0O<>IL7mTtEsp&&7Y z!)vsM>*57WSXf0|z>h zFiP#1y|@#q;U0y_SskMKc#tTE(srJglPUfz!Cx&ZCI|&SPuBQw_kXRgSoWpK zQg92vXDrg8D|+#dcf^Ecfgh5~K|HZ(1wPyE%;^+p+b?a_OqI(DIAjaT**E?-^ zH$0$a8^jU_W_Y)Xs}Hg6IE|b472>@KaaWZdY#N3Z@u)TF$1;;`Ze-%4`Ha8xO9Hiy z6N6H$rBz8sn+fgt?+3L5pa@?ldoV8`H=>5G4Uqai!HZMD>#IR6*a&Sru=rUXlmT{Y z6WT$YCaw;DOLf;}On!O_xjrN*Pfx&CnA0lCqxtBc5N>RGp@?_JHC$i9bCU}XG_Fo86+wHsj zdcT{@xHK^ed9!9#n$%>km&d-BH6%=_6Q3AW0@kA;{~GVwKO{{^n(1*DfB*58-82%T zFV8N`c}y|e1YXTkpqZLYm6>32vYee*|_T0A(>Tl0p^JFS%Y};bl zDmv3V0NGx7=9-%JIir%aL0OvLKHEC!%@)rn>OvFI|HkT;&Mhs;>o|_??mEtT?r}3N ze%`eRjHePx_}a-5+@Y~QVTfMC4av%R>z|t^G`90s^5AX5#=6)xO>SL9n62p$CHzj^ zwALeqKdvsZdjDFx9JUuo-oetK^QoKGHT?HE1LDO3e3j~;*KJ(lr(WCfGxlq2M@opV zUsqIcetS`%e?#Oc3 z70kAs=Md_<(O+`~y5ieA=g$N;KtqCuWytRat(@4<_;!b~@R+ z1Q{3WdI?$E)43-*YRo8)8n_+HJ8Y&|M=04qv+^Q zF4|ho8J2PB-cH~abG@3j?WmN-d6{_1!10B*w6BLtQ{y#MFLI=vgy0ef0PT6h_)?;8RF&FhUrhBHkWIXqmZNyyB|yaM3-i z)y-sk0LHg(-Pp=+RF~TiObY3i&ndc}-hO}gMKFEV{B@ST{<)+^TRG^C%C6k6sU+fX z)}LHws=g|+zg~5v&71pvp6@%FtFp)O)En=k;x6_9aOtHRB15%_Z}aJQ&>r5O6TeFL zl_toMX%n%tjBi!X#*&={BGEce{%jd^>fjxloEFg9vWiFtWx3J7C~0A9IHy~01vMS> z#pOz83_Jkny|Ml)yN$p7#!>%d@}`glF8DkED6`L{x>L_$z1HbSuP1)at>*?QKLBK3 z-x-S3MlO&zvL`sMR>T!7c6Pq&ojF$-`IW=)*<+j!@0o!~`jYi!Ge+u=Kytr&&z4`r zv@%fYU4uLwwt2Gjt2nMJqN#_*8RY_RMkPFZC@7}v}e10i*Imn(~fW4 zHLN+elF(eOk=a$ke_6JqrZV7##&Gbt8PW!7p2vd z^<3?h{jmI7KPkTA)fIG7nULr@Yh2bI#DJE!{#U|Wv~Z<9w83jl>D(|c}{XIJ_?LkGLc&%~m?9$AIrcqVB zK+EQE#?GJI-{rbfXFW6KeJsP9VybtA@AseX@$TLot^X11IuqY6KSvO7<^kA3Ub~S| zKEwBFC@;I$TRYcH{XE@QO0~5zqnc} zM%n7`we~!>1qa(T@pa~gLy~3Hzl^joqw?=ocF?z3Dr#}xHOBCGzSA(D=~60NK1>g= zj-Hnc@{z&6TmL*L#kVL{d)6Y)vh&kA?*<|{1)K#n?j4r8oXx&k_3)$GpWnAdbFTX% zw6QX}i&5nl`T(4PXDtuq?+-(g_kJrluaqp6?`z~|Ma&nw5@aAB~>kei6a)-^b za9~XPh__t0HJ5~K=oj5F&J}V>s3EUB?(>~K&Lo5KV|6lvWN&muhCznW`0V4bQCjF` zs(NZG*Te(RI_5N_c5^PaDS!i=3mo}gc=TFT>kph1@#4kF^O?)Nn}mdXzPEhaI45lz z+0PeD@(S5%weCwm2JjBE`bfMc`?i({gwCR!q}EBkpDQ~XcFAqX#+a%z>K7KpTEo+5 zS|es7#9hDR#?BZ`v;m1anj;vDWEN)_B@t#Au|Q$})C&)Tk%ECw@7V>SNVL1g_G!oV z2}x56a!aCGchRoE0ytz=Q-(~PZ>-tHK@f=d0wQbhXZt>JSQ;Lm$85!+kA*V7O;ky& zVDyvevQz_AR0t?~5Mg8%SW^!$r=tdKIR9#xOn$wh=Of@{(mLvGxVGvenRj+A&3C1I zPMFvxojGE5Y{h%EvRr>9+W7okBpPcQk#I?v6(T5KQ_%eYc!wE5V7+;`6JmVB(gGVL zO~ejn+%{8-`)A(HQ-xr|KRt_S=mW~zjzQyO3?(&$TR3@4XL*^ue)czm4#mUQrE)xy z?%^~amK3a?(j-@(#4LUeV7^V~o}N%2b-%$rtr+RnIyA=itVl z9@JfN$U1WVf2jHjptic`PbyTXQ{;mpE$$R|XiL!mDH@#OZo$39TD*h+CD?}q3mOP6 zr4$KTAi+Y426qkG&G+BkncX*;WbT{1mwA)9_nvcpa%={%4p<$3yR2eTtuuVa)@nc^ zo4t#!i|Hr(iQx1*(~s)jl?I$RsP~nW=_7LA@n8WTG$?l{{AB$-{{+9%Q|%qo>mow) zwir&%n8%xl6ckRQFy_&pi7qFoOm&Z~nCCXQ2DX{fcGqiv`Mq9WQ6%Fxq&MevY7?lz z9$B4?04&%L1RI=l0nKtsnC?>ftt-{zQwtwWWwRz4raQ)eUi&oHOAcx^A#5Ah_`Fhx zsGzHOxm7^^EXQ$eW_%va1qicUsSP!T^h;KliL{uxa3PvYS`}*I%|V(#EuPuoNx@m= z&Gg^f5(zD&6uDB`240qO*0|>tcBA1715-?K&T9EJTF^>;wqSvl`cbQI8qb)rCP%db z;9A^fL8|ox$-Q0?`f@mFPbgkEP3;v`eoFYrnu5z5t!eQ>1&KK>IIG6UKQKry!=;m@ zu(Fg}c~e>*Jbua#fI9@CK(pQ4vOhSBp7|YF^%VxXzvK&z3K@FNozr7#6+iB-rg3St|M`it@*(|0AV%hJ^reF`r z9+DC_Ow~ae_NL@d`<9epikY-R{D{ja*!@Y1Fl*IJr}5L)I$x8bIn%lduJZYxxVpb& z_XpxX4vkm(tjA$qf2ew}=5<#Eb0WVLGVF0m3?m$L99f)-l06>&KdH-qb!MQ|TCDX% zXzHePAe!3(-tcr_4+&>JE$9{Yk$W(4;%(5O8#sC`T%qYiiC8=V=jaYI&z*j5+Z1Si z;EVG$Hr97Nw}rOaE?uFSytW*VIZoZRch4&(X0D&N8-3W>*)pdbx$}`}w{{!rGXglO zT(H(j!*Wqu1YM8#wL9Lg8*^5=EEf=Ygk;ZF_5|r3YJQS3f+tW)W}+ zHSd+;uxy39ii)v1HKJQ?YQcz;Ga1LgxY5_?i;ioN$MPUQtHdyp)}V9X7-+F`^&u?> z`$!;~Uvk~?vekbC^LS~@KlFLN#L&Q7^#*WKV0f>rijYO?LALKw)htS+#RF>=au6nh z)I2;7qQ7FDFiBF`B!ni_&$#|2%gJ{qkP=U?i|nZOBJZdPIomc`I%kW)KbAQB`O?)7 z*FfI!^XxluMlBo8KK#ZXO4Tg;c?Ygm<2EcVE9XuKm%z8b&pVs-F_76~W1g)s>2@kn zA0P_Eu=*v5QwDpbh&p~;hVUIqd|@01E%$__)O7g$yj6d!a(-*9V`}m*nRooidy=Zi zwDNjWa53JkWHan2<>O3!6-gRFiWE8D2@!K?TNbT&?UjeH9l8WyLyPgW%d`nDez?**QVnProL*}iF9mi-e+t|Or7Uov>$lO3VIWU@&j z(xEMzHMo6|Ly4?~5G|X}Pe8}Fu5`TTE6>_thPTQ_avhF*%z0 zE7|lfrZdus$;Z4N>mhC1z78dm+dEnocScgn&$?ELFE%k+QC^qto7peJWPPnk@_~+z z(&o@vRGZ4W?~=Qol9Apk$w?nXMz;!&MOo--Br9rTR|j>aS!m*$33$}tW^obwhxBBi zUS{i95w1>LL{0^Cy(<{nDj^?#q;9r8ZBWTW_NEeB3` zIuDWl5S_VP>HuCgU*zcG8)wu^J-&Uttd^+3gB2#RP3_EFn)I&vYD)E*1jhyM=!>8O zW2(Ts1{q+7_0=sKEL&XN%-4!o*>r^S9er_62;R4<#C~Jf!!I>^AAqJh_AviPfA=eE z!yT`Q?x19VamVJ3(*57T-Zs~~@=K|^8|GO~mp06FAsXGz%yji{L;ifr{R)^ZO%JD= z`c2OqYoXo0MHJRgVsB=Lh6|k5v%wD{pCXgUsZdPJYv4@0q-(Z$p2x6Ppiu-%AEB7C zbT?dcY#&{EjkTv}GRMu17S8O&9$g~XVs+d*%P0Jf<(&CYR8VzP0KXp}#h}VQE50vS zBOhKbi9b(6?s%YIG3KI@Qbw+VnqUPnL>QdRh2J=x(!vzs5{l=o}XoD(aL_MZ64=+We{Ld3?39G6OB#>&BtqZuA{jtbmW zMPKeU#UR$f--)lVm*utOI0mSgL6Zgv`;t1Dx22T+UdbL#}tq^xi7UKT`MkfLe5<&$L@j ze6=l(+2{JGRBxQ4BZFQm#Ryu}om9>};5g4td?)S9Qp5hES6xTCY1?d|i+8%(uPU`Q zqs_^16<@|nKJ;jFM#^?|TsPDxOsSgZ^~``se`r4ZY4ZT>K&0bjkt^6NI^nG+r4qpW z7s0;#LVQCYn)CKG!M+C56loyeQ;EzN0Epd<`Pf|?=rLZ#9a-K?r(-Di{0NfJOqscz zXllWp$v3{v8b@zvzEHd2f{d$ZuAJojDTHb?aNmM)Il=Lfgn*e%@bcH~B z2hLMB3zl%xI%lBtV@@Re`?}~RA?Xo}KJZm>g_1zXbZ*6n@?>Guho7oLvw2_Z6Jk_{ zCl%X7;{>0ZPX!vtQ`3yROlsfek2ibwky9lQJbz(fZMDoZ7gtVPW4ddy(?9W z*Y|;Uf-4pP(Sz4{UPVPkJU(@nM#lNN{hbx&WfCe8%t5vDSnjKs6OmT znyR)Eg$vG|Ee}y(Sg{Zs2&#nLta+Sh8U5ye#|R`qTH`;Y>OZjRCW&!#^M771Z@d$F zZ~5)cOA-T~MCB7B4g&9&8=7HBpCl#Qd1Qp#>c zt@IF6s^h0SaXht~X-p5G0}zOoxbTqsjnvsaWgLlu@lFCwwe=0xZ`0JzQe%4~yDY*} zm`_t)^THB3np#@05=_mfZAB?5%0ZFELLET%20$A=q{GAFuUhCZu0Yf7>s z&#n%eA5626#+<@|2vCmBG5cjOoHLSsd)SqwJ%@p1Jn@5Sg)h82fNKOqk^>7_>)%Nc z<_GIK#5NIQ6gF?Wri7}aY|r?yCN4ZfV0ZEozWK!1R$H3Q&mXE20n`(0uh3S{ekg`A zlRIyA3C>sflI2C4j8)yHbY`z$0p6hf*vPc><1MA+o_1zg-12GzY_1E9ae4(Elp9Nm z(Wq|wS}D-ITp@-IJfGzl=NY<}YOETqTFdnf?cpd{LE?X}Sd_AjGBD8@R#>BJQB{rz{DJU3JX%9@l$`ws`#NU*s1NE$VRCauZnD~B_58=9_D=>IoH~> zpcn^a!f>j7QhoQrHz!d)haA47{!2A~t9}T2-7OQ&ML_-%dm^bLoaamXu;zgjkd1HC zfF8lR3$f@$%d0;_iL$406_|M~J5+QACFHc%*Q9XxLXTv&s1gGky!<+?m~I+f7S0{Aon`;!*9g9JC$^Ru+IELlud+znd1_^y zH#hQN06HDr#AQUM?VW#Jh&4JA>29AncCvl)u)%yj7i#shH;MhLLfP z+`z3ya5RML%U-~)M9y4_bH-ccuI!<+Mah3Hiq zdxmb`Hao&wkf%7=o2!mLZj)~(I_0e874PI}s2XlB>s zdM+P0W2+=mTx-al6fg^46n=b3{r~uyk+_LZ^Kbrd9l`%B9M8h{xTr+$l0Euw^zkKG z`;V9ZbN>Il9g%&?W`qPMX+Er4WJ6`uBr%dt0fb}dBh}=O`20w_;g9WPzAG9b2#B36&L*l3>BgCs{oG$w& zMteKc^#YXZQ=-3CREUP^nSRiu_O7s`-86d8&0B{bNa46@cN>13xlkl*Y%>=@(~xyM z)T?L{5@UJ)ouR`TO`5_x8Bw*?LJnBtVwC(dr<%D)=iXbXI$u(BnhYVgOXsWTER%M5 zIG|&u(A@^XPt6l{W@W!>zIi&g@U<20#lu{7#OgxtiN0FSoQl3(vFGp>JgkA&cPy$| z9;+@5mPvWJ=w~d?I6_j8c}i=ZWbw_fE`KT|trRq*z-F|hzjgF>I(vq|J)3r`xtKY( z2y3Hou}Vj!Lffs`H={KKk*?+QQ{rx+_qF9I;Qll2k{XvZ%UN`8bXBb_->Yx#EmAMI z{a&TO;$P>o7Z%TzfYY8Y+}FE?o7P|lggb|O9SvA*Q%&Yf9J875t&=`Z2{yWMODif0 zrh0`5JfbyOUQjgztznuN%0wQ9-52#OSv{}Vvzso&YV)Z-IW~ppEiPWDU; zjr_xqfQm;u3nN#2u35Vu?Wm@U0(1r|VkY|QF4^v2I|CH;< zyiqult-))kD0<$AeMo|nzn^R{jvdaYYgHgU)%gpGpN*|o>c*yHIyCfhG+?ZI8)`6m znSf3h#$nvVmn~riVlfXK{kz}koc<8{5nc65n$K`Gnx`99p`(_@ zIO_ole6Su1m3N5uRr46vU|AM)eU7yjp`K!9)JTt(&T^KKL^Gfa=l?~4%?+nFQto$m zbffr|Tj2QDEiZ&<><7V8RvFxCL=hZsF}wGEdaz!5flIE_a4@x~apRoDis{px8I*FG zW`Nk7hT3j?!hjjSd9!HmPrDt+vtq4+lh@)QBK4CcFhXnQ)s!;ZHLB_Ic`!+K$(!-0 z-jd#mrQZK#rBPF8foqO!*K^=dUv*`QRtJoG(;K0G0Dw+|W7rK;))&ib>Z7vl%!SLQ zxQbJm0Cnqn^lG%*=O0}^oFVOVCN?nN!sD6O0&*=jWU3Mzb5hHiMI8y8y>}Cj?Hcxj z3il53uaba?zP*fd$K_ASTkOy6Xm`8Sb$iK)w%|1Do0RkAm7>BOGu;S_&6VMS~GmIrSiI`7e(`L})`|1)S0Ddg> z#?lR@Q4^zMpZ9_`L(yw7w%is7HJxvNV>yud>nPH_sTApwULMP(Vzd4xsG- z;rCfJyl`F)kZnO6pU4a6hDUsvI%cyu3T!8*{?}Z?uDB$tr3z{72c>@Yv&c-M!!StQ z?LHv)Hc0X`xNs)Eq&^lM+++u#Ultc$Wl_t6_$#|?>Xdisq%08m6}>zRm3eZl`#P9+ z?Dw`sr_wgr(dI)Fy;s&!xY?*EE$2vuM`rKGCx<$uSkh`bSbzX4qfX=gRc0>CFE12- zb1$xodw6~7%-Z%y)Z0X}L1j^0Hi*?rSjb0bo1Qu(S6JGAt+a?jD0cWEzJgzLxv)tY z39H#dJIeiw%z8DWDt}-Cx>c8o5?HZnR>zKZt;UJ^fVl4e;{kY>) zn?J$vUCC^lXJ3>hh4G3!K?UI`*xmSEbn!n$JVu5L?6%sZ<<7SAamU;JndVB4CIRPt z3s%vY?*jz)6p7z)?z1}APK4;j$NFefvpsck#A8vKwmw3IEM(GTNJzy87uj`m%`Z6epqB1Kf@8Pmj$w-+HgA zZHw-NIF>z<9yq43t*mDBB*xdtic)6ayD-fgaAl7TIY;4m6fTs_HQ=o~-bj^l1|p5>(7gW@zh8u%4{KjDzmt@snd zyxv;1*>wq#{YzGI!U)oIm)M34%J2lM`Da-~2i`ReE8WSw9%Ekq#$<3e@5o(s3$H&K zlu}7)GLa%6*zskTNuKC%IFV(u#MM~0H-2*CHOJ%J@$1a0GU>8}$9W1re+uCC_AWqC z7v>ag_C+&CW$J_i&9+6~19o$Bs@i=wO}MfVnU zo!3c^Xo=F=UKg9F;5*4y5^I>LO7~+9le#tVX-Dqu8qc{?oBTS;{8+{S@fF>ABGJE! z7xkDYYyDh04zy1^1I!iJ)G=HtnFqCc&OcFEmov-c%nwRj%@2E`Z#!=BEWos+YBnGd z5rp?S3Vvj_REp6f;Bl^r00na(c+6xJI4%P(iY_?2wJ1+)Y`;9^ySmJ=#QJ$Nob*+~ zs`MExewocti?)P0FnB%PJm)N`*PH{E zGSf7fGnY8Ny1UBGWd3R`+vhj^qdNm29q&JR8{z{V1g4#xUsvPjK_N-9WOo7u0f9bw ziRf#Hk8kPP$)z7i#~-@1HMe=BRI)1%X$gCB8HdncWu_~>xLkfBDD4hB;pfyo_RV#j z)wCT&3o>>y;?s=*8MH^gPD~CrqcF6yc6{$EH9{!rMU644b zReWaanEMO5ctQK1rH@G;1EcUAE|^^NUN0+Y{t)gicyCap>X@c@Y?qK7EJ5LeoaAMz z@QkmSJI_&Z?;?&9)ygh%?Shx4?)=YuAbwK$@r=>#wyGZs*!H)Lx6NzsH))hzg6rjI zm|_0#n0|uI!PlKwPu9wj#xnq$V_R|@zd9p@Pbp$(t|fdn`%qi^)z}h(G!n& z<3b0=Eh7pXDe1Omm5zImI>6Oa(9VNVvjRoN{5$Mf5d_?N3+|K+P;^POavdm_>t3)K zAg+5%w^WXwVup1=c%=l{G`;F8rKVsZlxY8Rj30oGZf+v4(ro^cfY&htS z+~sa{9a8J(iujKFN6E1la#ihE*I%1N9-~&2+l6AJ$qAz@9JYTfEPjH2=b>%?ge_1O zM66%RnD?G@@%Re2Kg@dGZEKqa-iDJ*)>ygKPz>}Eh2tWtJ(|K_T`r%zs=0b_`#EJZ z!KOOm(Excfm9r7;c!1%!L;k;6>Fj;V&BUKP{5r7*if#+cWm13sk}-yeuG%`uKTE1g z|J7e9HS$|^gFX1ddVc!%+P{#j35!|e^f6z&Yl~z30Ck#5QWFNNQ>-y&_>oYQg{y@H8hQPT6i(u>oC>WqwscYOqt>Vitp8KBnY_$_)Oi_6WFf?i2iEY z67th)IUM~>-q&+E3dJGp4DwEd|c;f;!@%E?%!Q$*=>W!h`0_OYQ z2?=JEo2wE8WYg~cuCB zFByS6Lii&bHbZ3E)x|a}d0vDL5&x1=k-KZ31~r)1O}21y8o+urUx%_3bY1Q85s*HA zN?ho(Gs}HIT1}xZ%p`oot-s{*9&0Qu(P=q7je{2ML5y5KZ&9pbbE1vhYWz0DPuc0( z%|A{s@A&fsz6u-%VQ5jgQJUc1^*?5_+#%F!NZhf7K&{8fp?klVW5+B+MDE33vV!x> zi#mnKABWpZU=m@p9br+HnVoL9j0>ejUj5vv*Gf2i>#F0K{F0<{?izOX?JpTyY&&VoR67d8)1GBGS9W0U zYLc83pB$(@wjMXnGn2!f2jJxK;#FsH2gI(+suS6;uYsA>Bm*X&G&sn@E*ErpW$HPS zdNHiUUs}o;odZq+&28qI2U<6{o%;uChT^S?h?S-(PJ+bl>%AB2V^#3;yZ##$8hS1$ z=`~mI{x8rriC1;2e+y}Vld+pE7AJ6A;p8N+4+@ape+I_%0L&C9pLGR(5*sNv9r_Ke;E$=G!NXg$ZJM?!`QfKwiq&I*Vwm)|KqI##MOxC& zp0RN>oYlo>-|5E&S~!d|78f2T;&B(4GyPZo%1qSg)6q zU=&FFI`q~boE8w4uX@OeX|tc&Ztxg8R!$LLL+L3u4a=6G&MdZpmrn$4syYcoQI7Xa zmld;fE6R!^Q+l`Uz1Bv~JF70>9Xpb!1}BmMrveoJ+!z>JN~{R3bd`uYUJ$7}vcLK` zc{MS2dSm#w_-MrU`dDGn>P3iiuhGu*(zU+eq7@m*z<^W|mzO7_{q%B^DutSQi333A zp`7&NqeisqGkLZ7J`Z_5KC?2_Y+2|lJ{m-h>X-pCwn6b>bNX$GE?zc$LC;Zt)|4)C z7Gy0QWfi%Duwiv6nC?Z65=$1$!P);INk#kZi#p)e^RB1*%RCN!DQrS}3ayv zq93`3+aTQ}H?ePhLPqT+TGsUP|2!`1+p~9CGk9B0Ssu`q?6bjOQ7d|sAo|7K_^$q6 zGD_YgFh5ThpIy&R8aI1{GSjnM_+?24^F7@C@t@SP$*Tk!se3R%h)o~sa)v(-ZOb=z z))x<#Z=qGp;JOj>9n^ib;ZV!RvN0%m6T$g06 zv#>mQ6R!QEwh)_IpoLNohG8|e7#NUl!u`^Ww}v=hWH7G$B~vl!QJ3(rK=K#aZwPz2 z@eYUfDbX&wI|KQWTi@5{ul_au0jOyt63%XGTsH7R_zk=cQ0Yc5B}x?rZG z(tKp><_vOByjEEq@1|KajpN)#8!h`e@L}8!)CAVbS)4@JXD=BksX_+W2T@$_ffa6cu@Rc<3;R>M( z?FDF*R9rB`#fYW$l2(+`KlzybH1yhpRtGz`6VE}$BiLZ&ROq2XV)L9JJ*;g-ow54B zMjefpMHAvgk7g9Ti6N7P|vco5h02x02jK{pyM{h6h&ht^JydeD~(a-`tRF})(!kUU(1!3+rx0D7x_EsWg!yln+nXeTMfAK@N3tZ-2Urn_q%C# z-b`=gl#v7k;7jv%|9Hu=!fWG6+%-qlyJO!ZcwGz1xXiU?vsAxpVJW($_4+W0jFF?Z zQy`YOj+zNt$xJZlaTVm}gtP}xJ+8tqm5=$j?H5ltawALh-&G)lvIxjt?c=mK|24B> ztD-o|&{$9CDxYtwQl&yb_eCsOU~%4gg@z9<2L_O4SFd+7XO&$DJ76;~%Jbv3$>L~#NLg&`oTcf^=7VE3P zj-IU-)XfROQf0=G`*)8CtxTp|OxgA41r2T{cdA@AuK3SKewpzylr31c7Pfysk=^xe zQ4HNKZE(#u4q+(5i>VQM6iPpk-I^kMJfJdRET>T9chp*fB4MIB27JB?1Dtf9@7|a_ z0+qyB;mW5aLO7S|5h7nbW<>~I1p3hp1&w+{7<2s=Xb$mZ$jrBRnl5xQVvy{~hv_z> z0&T`gAZEryVB8u0{at#uXO9f!x##lXbzX-f#+_yw=~!I+dy%JkD**CyRiS~y|NE_` zwZCM#g43c;?Ei=&z%$D&`d(d7+VNc8EoZrK~ie)r6|JpY+ek_QOAe%Q>TyRL?fMu>pJ5uWyu>GLFoqP zt}RYmv&Wf_ivn>5cCE@fz3E>f2DYJ`A&^SBYOtHoIbS>(70KC!>g}7rz5iq(s$Ysf zzrL5iro*_U{GBk*$W>!?w}zU}#t`07sxG`-Yg$bsYW3&N^x69|qp!7l${7txMSTT) z!q@?JZcmn4gMZO_vDLY^Ye>4j)+CK+VK$A=W31M=zMl6lZT_LwQA%{NqGi)fp%%)Z ze$B3t*1>iUR?kzZD=?8j&nNuvK%M5^oi^PQ0Sr-DUu18H-X3bzvRE~-r&XvIiMF?N$ypRxw$A6FlO-I>)1x4Kr4^@Kqy8GB0}($m z^0@d&DAov3v;L)l>kxv6zP7^+CJMf5LqvXCS6NnNFtJ{4u}Tqquke7EoY6d8WY1-N z!xwO$2A==L%`S%9sKo%*CMyFw%Rrbu4>@UPjueNL>8$=_1b~K0`IO`zxEsaj+4{aR zo^POV{j!qyGIk8LK9lMy;1ShfW?i)k`zg}B4$GVia}sJuo7EKf-Qa-?8uM6;QL9&4uU#WrRj*vK!eYTLT39r9Nkt#0|?w z^J=H=GkSFf0VUWWsH0QjLF9P9emmMTLV+=8BF@@$GWuD7qA9qG=QL=(n1cXy7;dM~ zt*UonL5U4%Hq5u_41%eoFX0pKk(6r3ycDhW0f2F>dc}fZl6g%qb=}?)`=ebD(aAzKJ+1J3Ew6Es>l(~xuwcsTiuRX1 zkvUG@=KxK(r<>7IOI)C311oSDG855%$=YR15tXJ4b%g|usamA2D|*>+Yk%pGiJ23! z_U}zb(@$h%ziI!YA^hJX{L`n0q{bQK|5N4vzbDCVhbldP`Lg8ghg(lQlKSqw{Fl^~ z>0QKs_9#;Eq)`$bfv1wGo(R}8r@2C3dCvNLdBe@ZWG_N{unl9(a z-|Q}f_jA^MhvxAKkEMI7&PbK#N9~amx&mYM`K`r2_;ljB_$G)-2G!`YVCqyTnx!vg z-p}`bH=yrXX-&`%FGa7qn}X<5G1<_NpKdHwvsxlg2N_Q;-02GdkDHU-Z{Ml$V$?2_$;sX z{1IcawfOh&l7nZy8GCU;1Zr+m8pM1_ssK6t_r++m9lOlBZrprpADjxU!r!CLl>!LgJkukr-TsonY%X#pr)C!@`P;v*W2zi)RIO9b66HmzkaSj0~GL5>kD|!cVX&K5b)rLStJH zHJgdC-(``Zzb4xL>8;Pn(TNAQzDz}W^;`2c^E5Dgarc%7p;xMO0g9!u@mYk=Ga>J7 zZJLBHO#NMQ-!1JgXD;2EX=W7b*Y0%6WP!&QSveeQpZzu)bk(zlH5rn$X=4ZN8%Fv_el{+ z&2pc0{-!+H<9M5>zMOZ-0%|O;!8VWG$>4nxzkuILQ#j)0!`U)^P!^-DN}HON`H+5aJB1*@)~-AC6?(bqK3M%bB}E34lE(e# z%y=ltRtEj9UaZDM!`YuDMHbTeOd`l;n{ zo3Dg*L*ZHJbwf)j|7pUb@$7|L;xJV$n=LwdgX<|KrfoT7bw&q$K$Y)oBAGyqt-aa`m2C>Qe6ozE=uGlt$e*SiBm1Wb4%S zK0jf|N5H>;pC@z~sB$V$(lGCW%#8@~s?jp$wvK+wFNf-QIId;!Za7KJu8eT6msjEK zxs!EytYs)Tk25Ks?{ouny%W~Bdt^)@TF2G@yOf=T(Sh4&|W;0@~D;rSdTinuu z3~S7(@WF-#5-yUI^&CCZ-z#jz=cK4vIq&U}4A&z^igE(%7FV~~#9yRa@A=WV7)wc9 z4tiX7zc{y0<4iSIco(Q8)wdHvTsn!l%;S~Z=|s4zzipB}NJlE`UrAL|_8@?D?WNsA zkJouzdV*o2*f!-Cp^vRh3_3KKW4P+mArqPA6I3ah|6o8SFY?#bLMVP$1RE?9LkX_p zdBgD+`A)0*&vNnu3vi(#&>?b~eC?tpzv3goQ;ur8p5{b=>@&3!TcMq9I?H?++MxN* zsS6T(j~0C;wu}=z<6mF(NYAJL)Az9XpKw(l5iQB{N9jW}weztJJcL}XacYsR2BBek zmN*}Dcl*7a^dbBck1An^j@UC@3xvKsFYnzK%_a}r+?aJ6{)irRsc|MyGEMzQ{^NeX~GI2MfaQ~bElfO6<3VOsi2|AC$Aj(cD>N4TYu41(6u=OemxzeQ^ zDVGIyPHriQv_B>{?jHrpX?5s75`bjjeUhF<(wMxIuF_N}#@U}F5noH;?c($soK_1b zw57$U>)@v8yu55)l|F#_KJ_QVY}LMPUgZe)V?X`!cDRq86HnIsL=YrWRZexI4N=y> z&v;=D(|;Fh%E{fSgl_n`w04&pKDHs&{N1sxZg{iYKmH|hx~X#QaWU?Qa?+{3<<)yu zyp$j3Ondo88|~=t><;Pi7t6}wptZwcyXMsmWOsQsiLncdM|4lKL_XnRK z4+9>W)A2Zvvqe_-9YnlzT;EzH$Fk4ZXiId4(%8~f{0fX(9&CxB_mj6jNTse<`BoP|`?HHJ@i%X0?`yV0#Q?OSS=Yvg}cd8XomgRjbiG(S~1~aP#Hg|B+fk zXyAE09p~4dF|h-+s~?jxS;CW=2s}~=#;Wjjr^36I>z8Ks`VRpuTUG|+qZNTp)%i`Q z47*|Xr!J9g$b`z*u^dDr^+)MnQSkVxFAViYH9h49OVI*}-yJt}fP6{1X2|rQm;{Mj zgpt;Ln=1QIY*04wHKm3p0Qj$#o35NQPCJ?Fj&tX42HrMQpzN{ySqR3U|pX@C8~2PSm(u4 zveZ)m`9dL0=Ox){z2w={PZk&7pJ%;uy?E6ew6Omi{Vad|L!$OgS3tPqH0+?2Dis-z zOjD10Uik}KN(xkqagufI1qdwn#9~`du*AT~tr%{$83(~c9%6D>$poo}@4~+mnSc3A z9}8LC5fPN^yRd6jqQqJZWW2}3&qP0i_z#24D@!I#NHCw{oStMaS1jJzrxg&-$YwRc zsqH2e|8Jr^uvxR#I;c%+r561yNsD!;`3;%0)KgT$_Ibs)nL(Tqp#B1myC(=n9t0NW z<3gwhyypZH&0&n+Mv%Q;&ZlJEzZu!bX8tjoc+m#IOx5mjrBQ{wPcz(Tev&U;8Pf}I zh;x{DYpd@y;3MOv`1K!;>57d-f8`aQV5it zcBf_59onq_;P|H(6_;H)47;;IuAB3N1=;egHST%NVE6W3?WB_-t#C zLR02Ox2QWKFVaWO<3l}BS){ia>XkHgV13S4GjVXet#Epyrrm`pbGmtxr2Ha3-XQoS z_G8jm?E);)Hv&iqpMQYSJa!`|u-5nb%>67Q?UHP~^l0)t1ofB9;V)T)ly%7w?mX!K zjBc)$=&9&$)Yk&VG5qb{)v6>t!=G141D)69^KnO_bHR1Zu?4oZHN{+)+p?A+&jd{c zuLLcwHj)-@0VW8E#kjDhu*KxN_PmvP)7G5IcC~dWANc zajO$LnC(+t7cr_HuT&jPKmSlU;;k4)a$3pKRwY#W(K{is(>bk^oRr_w6}82u03Tni zuNCjIQa)I?Dd@)HPo8LQjBQqo``jrSa(QKwr&n0L`X%Zt6yBk@lwf`|*A8Ru&ap(e zI`8)WB?}T<{BaC?KjAI+26Ctu9JJ3W;l9R{J5?v<9Ju722E(QM1oGG(F6~Cn?R1u| zxyCl1mI8i$a6eT&bj$m5Z1%R@$&b-A3+{pocRx^>7M!|Up!jbfFGAF}G6nBiY+?#V zG&OOa7x!Cu4f@Ho=+^B>tciIL{YK@dd)J0?fyaRfoMzjU<5Tln80DtIzht7eT^bX| zfsLTahLhgM-jf{HRb*x}fe(sKu5#5{j?FLj3J?`0=CCZzXe9D1tZ{7AyP+sVO(K6r zg3%xyBo>QL3GNsJq>OmK5Wm2PD>)nmX4_kR&{0ECwenps%FnG!7zP_3t5Z2_RjPZY zHn1&Da_`+0!!k;gubXWQH5kQ6USg-IyOU2G)|wwUtuwlCwfN2MjPHEFcI#@eL2}~* zfU|3I9*DEHw2Rj}9#D?Sj-=BZ=NkBBTSEt_qG@sVjcI)2@yMw0)k>Unl7EY0X~I8| zuh?oC&i1ZG=r`o##|!@)Q@Ox0HoS$liM~UGfv8;D-IUtnj+~NFiGfSbYmR`Qdt}lj zrTBY*Uxg{X8={b;E31x^rOP*4a>{Gl9fdhlb>e0U-B|9CMKxKmB!-Y-XY1LCq1N?N z&f>(pb;2C|%3kIPNeenRM8aGBa`$5hKaB7ajLN%B8xoK7S}HMytKuBk!sr&?F-JbP z*Uf7`wd8f&$-NYdNlr&5ey1c+s*MpsD-#~Jkr$py+t+jGn1Eix^Nw89D60{azHiXSSd8D zF89RaD8jd(j0Y#0c4@|xC)H)de(;l*Zs+2lgS4f}tosf);ZFH++6XKsPR5cGN4tAw zK)WsdxOhX(U~=s`LfZ^^X;5EQYEaxi2%g(fiIS2atR6Ek&Y1>=Dfc#D+g$=noy9X@ zW)tf|I)&-{l)+33A@#M#d!ltN9#cP3+eR;I&89 zRM%YEIHqgD6Vg#pU-P$P`WX|7MpFy0m(mk}R3|;s&T}{R`SdobS6SLnLlU;s+T@miJTA1uf0WJd%;0zAIvP~rCQ z)CobjJgCK#et(BX*T#Ftxkol74ja3ba_uP*jt#`IRA(eBja5Eqk%Ko^5XT1n-*r_q zH{4g|6=n-O1H@-tsZSeYYF8tS6J&nwNP#q}ur7rDcvc0Lax#_8;9iS+RFAEc1NB~)iDKIUy zY{rW)g?7gPLZ0gGRP~Op34;WNv0cm$me@zgojI9Sh!U(~jEM}V|6Jr0`Mf=me=w8j z4DnB+m#P>rJXp#q^d1D`Z8uy~>+AbIAOl>l-pdKCwD*&}`hY-hT*qxXV6*-Y?V>77(}A(rW^^AgSeN!7p~s zDoOi2e!!zf9mjk>)KJhSee^|W*72RW@etKxT>L7<|7z>3qoRubc0Uqg5Q2bocS?6C z-5o=!bi>e%h)C-YGt!d73?(^qN(%@>2m=BF0z-&MBY2PRy}$e3cdfhEtaWDg@DFG9 zKKtzRJm2RNMO^e=rFHWqbe4H~9DB9d{lnQVMA*j))r9@lZlU7ce)6!M)-uG0E9BP9 zrN_16;$Ki>bZ=f=`&4)h+z~fUx?Y`Gf+*G-A5@s6iF!aE>34&!y*bf1d|3umSQmQV zZ2kqMX~@jdAG`@TxwpKlBQvH2oUY7b%qLU-p*^9?+!?Ho=}#*KyLmZoGb^7rLYGTc zaQ`U4Im$>@GI^s0EEGX+522f|=!wbe@?fUC6FUqh%PAENi&{+D!U z6YoeZNi$LPrCJ37vSa%b;Uqy{p7%ZX&s1i3bZ^z)q63bp+TLUQPGTRvcy(X>;$+%%T6ob8uCeR^Q1U^2yg?Gbvj&-{H-Xci#H0tMwB!rvzbVW`=l(uU9lYHKz7W!q9Yw3mV&i?a! zpNiZFDIbf*+{pC3_+nEF?o*$Pgq{4p)Jo*(K9HejgqTquX{l<=xTLoYooTb(t%Ch- zT$VSZTlUWkx5|v{0kSo4oi3W-vYl^*Mp#@bpZ@6g_MF4?=muD5O`+`!qe=^=D6QL~ zqTA?2oJn1m{k{Tqr2UkFKiX|=Hp@Vxwp=>c90)}9^N?36;a!Pg<3Z3stT$z%M4h{`F*h z3>B%g>m`{Bo)NYvnVTXVQNMe2p;da+unOG36-)`@es0i!89RAUS=k2>0_egn<LNw-`B+{wB*nE1a+J}}OR9$-jdYMQT9e0#ig6&Srdd}Q(^thTZ_ zbsn>v>pX>ZYzotQf~7T|wv5Z@zXop&Y@ejP`3o|>{+FH9J^YsER3j9_Xxr!&mHShU z2{qakEqO07g8AXdX-wf~YTxZwi#i zc_QwLeLyuWwuk{cU3v2`Z+Xg^+IsaZ7ebOiErC*s0cp)TlMUpf5qVmK1hCw1RMV!b zJ3UMiYmfPN@!@DF?=Cw%pW8KIkj_`f z5*b8q?!L=BXN$?9i+~WZb#ADOQ>z!;*2G;#M$kEDS$xU!)!Q%YE=-Bw{g#32r|`rr zT87<&&2*ClTwe{Y$?Cr+c4fuwHV zNv_^Di(A%_|1`KW*YJAi4r{s5MOBEs3bm~E_^cbeFJzOJUn^0O6op%pEsTR|cgl<9 zQQNWe8}+{x zP?YZ_y;)L<*1IctC|fP?Sf>n{p`Kr3pYim5?C4b0Ia6bc%;M517KmN8DWXoAn$h+dLDKv*+LbUyNS{5fMSnLCm|iLzUPuZ4Ka{i^0hYZ}w^l)vslM!tdm^v-j`WCDV_;-4 zf&*(5YFU_77;&umr;JtISDWNz;g1MCD2}XiR;yiNi#c@g7>=|+i6)HD3j1eN@<|e; zs`uVMru%9v^UM*^li_F#C%h{|ekQ`nn%|?@%1l!%T@N_-D440$-yeTrGh+>JWgV`I z$TmZ*aKVy)mq=#8QuUaBsPorwqxC-gN%&UszNGMr&Zhclj@tl3+c7Q-JVfYaD)(Vb zhP_^4$~jK}NWqwQV6@FvZM)3TyS_(dFe=5LpNvz57TlYH{zw_S^waSG&6aXPNcgospzt8H1;|jIW$Er z*wdVeS#)p4v5#rO7&Z8c_Y4jAmz?G-(uOsLU{8>3qlg89rLs-v=|rdae%(cgddN&U zf@Wkm`p*Hq4dv>_`DFU^xLN6nz?e($pdc%*dn+6cbI~4|xS44g@$U+3oaYgy{^`>! zbIOguv0|}l+I~%o1%{VauM;?Jvp!CG6U{oxKWJ6|bW@}&#%e5x)Q~6h8(ppCS#uKA zv?_bZU}EjTgQ&=;KI4wH)vK=oYrbBfU;AA=9H@`YUy``egcXc-MQlbUdg(vxOEaQE zw`eR!mAAmE0Qaux$3$Y2i%RW)kpa?_JW99V`~@|^MVa&ZXCCJshPt4IX@ zQ5qdZwQ=s6x`jyYs|A&Fm4OAmdT4+ZJQ zloSspb-a`Z%Y*FzxFeNV#J%iCzQ@BKEnE1kI$)ct)ev6OrB;r(gdcS*z&4UvK3*V8 z@g5V;=XgzquXD7t+&$#u??%DQk}6!(^jspLw~yG^%91$%$ATyTmq|H#6a1i@?;W2L zo7J55;U;W1X*JFoMWY@Mk57^~7n~KKscGq`-e-ItrPnFgGQ=%b2Jq(=F*fZc()I=} zU%$o8yvqPADW^`MoEfY2txG6erEzrwp4+Uy-H?XMW7q!qnVBo-w2bT1P*o_@iY!it z+G`YXu$tr_kv2k-l69B94oCv403SWa%0I^JMlmKA`uZ)pZRI`MJ$$w;!8cr^*Tz-$ zP%}?dicMxU!QYM8Uo& z(%g(cFWlHB@^ii*#f(9-!JCZ+)XX3%pWITjB0XQ%d)BGy`mPlBp?hq@>n%dTM-fT| zasF?E_rxIe%eJia@3!tF0a$GZ!E6_0`;pE?Ay#y6|NZH?TRu9ZzP*q29l-0Fx zztQcwH2YRaNO^*`-Ik1?!S7D!Q2_}(X9ZfnD&vB+H}}zT>z|@KRh%!!%*!|j?@4Mm znKCI!wE)Oqj`hR&IDLt^Ph3~+82~{AX6>`>uwCoTEcH`p$UG}aBs%+nZO!&51k8bn zn9A_DZR)%`Bj3&ScF43(EQ*=fx5-%~6$+oFoR!MAQ;DBfK| zPPYk>Su(m&>$%+pr>8Jcg*LTka(tX#>xL9`^5`Ks->l_8bIT)69%4oYNk(}}P|d-5 z&*e#HZIHRzp}Ix)%lM@u=+_n8+`K0EbJlTM$Z1ZYZ38Yd7}%yggUZ`Pha!|gNl$i* zl%1pgNp-7X18wN3nCFtr=ZGvsBwXi5sD$YF)KRm!C6*&;HLdONXzX!JdE`vy5cc*& zhJoggQ_QE8G?h&1rtWq<#mVk&y5s~s>=#rrIpNo zpLg(1rt=`~DqBivWAb&KIZ9DK^*=P4GcCJqp9x7?e0`M9K3>k@PyPKm(SeOWC$);5 zy(E1om_W>-p=YpO)dVe{DFjJg#Wc%j36&{oO9q86qU4VP>8$-JC&b)g%x;)%&kG6x z?fI1Y`0+zd$SBo^Jac%uDKQn-j?=tfYK`JFXcSl6;o@Jzpp&g^4txAnZd z&uMg*CoXH*pAu2+P2W}VM4vWQv?6)c5-aL0z$uhGP4ip5VU-^+J|kdcV9uF(ysWke z^~&ebM=KTaSv>MX@^#Gv3zArtF0A7HT4}X)UiX;=j^BN1n!7G$>F{7$BKOzY_rQ>& z(O|CC;?__JcFAg$HY}&71?`019o&hzTmC(TkMQo9q4JAf*^OV!kn5`rPT6%+bC&d; zwM(14UsR@r0mVtD^FisjHSUW!?c)h-O<1CME<9Fm%=o}B=QkwaE_;Hkmlyzo6PUx9Ndxn&tUSmZ{wO=#D68d6X``p}o9+I?C zjmUDZedF0~BTXwuCF*X#7yUg^GzuPoo)~qY%biT`YWK6UHDyQrDHzbGX)utzVcyjB z-l-}c(fHoqCK$DDEEdpOIX~reZ&>^$o~zr}J6mn6)!}Vjt~U~?{Qy3;KcYUCqbHRC z5ee`-$lLlYpZ2;lFDq|Q27M6lr}YNrIXe;I_;P&Yg59P*?1Q4%!PLE_Le3oA5PM}3 zAoz-SG!7>TSTNM{Xk@6UX$<68%HZ191xYG(mL<4S^Bv4wOKAME4B442tg_^k5?}}g5ovz)iPX>>}Z86xg_Mon=vC1fm zL}54KkCdQ5vxUGq6l&86s9BDqwkezvMs6>X>4>*6c6It#_?UUQyGdvSn8Fv(KTnlI zy9j!5W?`XISM!0^L}u#a+F&za#9T?c6#8I=Y7yw<=5Zf~wkj#U&G#dUCdw|iNf9NN zWPZ329izKLS|5<#$Mq7|6?Y=_VYUx<_Nk-jZfeJG7&6xv3wKkZ6PRAGVgsWQj{<%y zp}nZr%)7n4gpTJSlW!T6zM6lP73$n7l~OphYPAr&pKiueUY3BkIh0|gDTnLti>ydp zb1ld*8qIwD@B?OrFA!YUFh@@y>wuJy(-q2^DtdA@^1N#sar3)uXGNE@a*@5`gnFF> zp(3$Ny2mShZ5<)}g_MYg%%HMJ79Wy>@#?f^{-nr;kgnOfGM?O%{#LuAXQAm`H|6eK zbK(?D(awL<2$_HD(sOreS%IknryZ32Z9Da2Ui*xHia<8@+fsA>E*L%NJ%DJME1eU2 zHP6XXjD%M0V(EE){?9B`O^VDD2IU5r1jeB3!XT}_R4 zf$dJye-4&@B8l^o5(ww&P-+khbHVs*k|2F-pVX#Jp+ogQt3&MVB5w61g_SCZ?bx2? zvSMs?Yi8%VIa9>}V@LncGLuV-tAw20TGT7BNu?1Y_w~D|@mn?|U9cTSOl9C-Q2ZAQ ztSLp%ip0^A=%Kx!pa3aluhSbcU)*VvN8+gj_R;a0c((`sXF@sen&WT#Z@uGxHSMyu zdO@`9sTo=jYrp#K{gZ22v5xLFLjJj*UcjuMiE9ihnT9zp@91Z!HEa0du77l*9%`Y& z)6*v#d{*}ADUK%*!K0;ZCMfq=-1EtvHXTv>RwZnVxPqfrz>2|h&Md%l!=xTgRGp=r zn*6-ngQB{ndsdA}5#$+AKEzat6O^3g&*wYEBiwvUEU#4_6gH;GgHyrzERUsV{=e&Q`!MBW$Ia+4_DpjbR{j<|GxE2-l z!&%vg8LHZIM<$d!l#!W5>j5>(lTr|uHt5MaWd(dNxk!%`19>+`2Z<{lM;)6DnJ%9$ zz#AQ6VSdzee5hXV0HylS(X$Xw$T0n0C1mqm#$rP{1L(Yqs9g2^@#veR__QY~hbmGd zVuw$ZI3DO7J&yR3!mbRm0mXjkc~x0?$>Wi(3cA3@A#LL57nsD8qUcNqAI zj2F9990W+`|1>vS#2vW}RwK#m?v2_*J~0`AC4EQihM%=)h-VYffg||gQ~6BsD|faS z{5ZyKscP>R621;-9EpN z)JEPSJYJ1UjkodKDaA6VJTAx3k(s2==9(~gM5$uPKM&))38|y3$jc3lNHvw#X%*5T z-3xb2vnmKxb9rt4^(c2}n?JAXkx#nJ@}uD$cU0i|lJA>&#~hv3s)ug-VP010QTFMX zK1rdv_Nfe8fJSubMMqHuZ={U@5izJ(^>1>)R01f z66De*q<@R>zR-c^>yeyn=Y0vdq{XwEKMSf#%kM}W26>(X2`y-KYWjz!sgiF@QWOp$h-6n>n3 zW@Z_AI61()?ZK^vY-lE7Q2z@;{cNw3FBK82x)5f+Z&;sH{j6&`Q#ob>= zsCmSk5oTGg2w}i8gOJ-~Ko>GsUMsIRr@h<_@!*+rJxy*rHIk6l$FiH#UEAqr%q`2F zWA$qS2c;$u^mJDauin}^%wGLyt`-Q6blmH5Cx30cKVkoMU%?}#sBD2h*V{KPGdFas z4-Z~qEm>&NwkwsY8V-wRX1mn-UAUAcg}MY(h1?s2ZDe{@n^c2hXQ7@)YO5zo)&bPENUT)Ov#qjbxc#TMy#C9~-?BHe`|$Ry zzpd#{d4Fl52;+Aw#rg0`9CW=YITpSw$0?m|-e?w>mdNmGskIC-jti0Fx(WwYb}Wp| ztPXPW3f(tvREe_knE~w`laILSyCL2pZJ)lbzaFX)_eW9qPD=%*>%_t5Pw))PN{evn zU3yL$tIgdPY+*#;z2M82Q&)DC2nh-7J@&$v-!fhLEPWQLLR<K{Yb8+wu z6Ei7V3Qn^nJ+k6eQ2&$aMd!Q@V&3pP-S1P~&r^ZRN{pPDwa^=6Gm5?JkLfx+Us7Ls zCZs^25af6%4W#+Mv^eunTJm3Zx_-PI-7$HdPgLUZ7o#V)=!sdzryiSw!>+phS83lWV=)votBytL*tdti`I`m1m;fGJ^j z2Xi9XpyD~>REdd}I`a!1I`CW%>-L)QQZQ?AJ$aDnM8C;{zIH`t0zt;a%hdJPw`)4h zb4JVpjg8}gk)dE+OBHFdlZKrYtr401vQBTGGSD^G9Ywpr{V|Y4X;?9SM{?O=Z^r$K zuKHp!IQmf8@>u_TC(Jrz#(*(%aZ7kggBuoj`vQd%{INd?=H?g7*iVjlsyM=wy5qu> z7bvNO0|Wo(BxjWJaiN;T;`>0aMV`gEf@S$KzUy2)!10`zkLxyCZaY!Kdb;pzA5)wg zBK;l-2Ti$5`Rt6{?6_Q|Syy$JTcgjAK=2FWR1UWJpl0!e63jF9>+!4pqg<`pU$TW( z;$5XuKhFolWgJytu$v0EZKGQM&Un8v5Gq--hR{S%v8NM_VA`H zX7#rWKMSJeyTkFf^^>-*qXrs0PHoqHr+39=-+ym;>a#K0f8<+`aeOUX&@{V@G|CIA z`H``;b>KI7&JC9%dG7AQ*LZTJ&bzKu`B?lix6vx+MAq6#Z?>b)H^dEgwoHh1zOI>a=l5;S z-J~wu?Z2)}C%GNJKjw?sK0fqs-lb%NFTdPnYMd|+xapNa^Xdqq53Y>Xw@-zwE6?eL zhD?6n)mCcb`L&8)e_V3?%r$zU@B%!T4=+>N#aFoj#^q>F2~PMJ@Xy>V1Nal$<66hc zuw5(mir9QBSGi5VdtW9PK5UMvm(Y^R{F>D@Ej$1N= z%Xvhfln9x~Y~+U6p!bOC0|j<>?KNfk5uF_HDI zJ4}&kSiA6$skG~l3v&?Dkz>Ijv^*M4p!a3vl!K!+YCk=?1p!IFH*)R{@ zyjdyf4$*6=rnN)6l7ILvZPzjqb;C1fZH~MNgUTjj#1jD}Zr#n^fs>}rHr)s3o2SS# zy>4WgL zCxf9Y%wV&1rnCn zSa{nY2)z5tVct$y@-GPbLh<&*J)ItC1ci|P3X>D<{NmuFEn}$FqK%%mZ=0ZP8%a;qNxM)UA@sF~qTKzW2qstzAy}GN0hcBtv=Ki3W64gW+XS{ZHBP za+V!tRI2z<*+4O}KzRD)^P|x4r$H}QPSnq)W$m&H z4FWnJHhk9?MT0pn4u5YR0T)pn%(n(x&f2z4Q_i53N^L3g4#aw^uzy-lWsHJ>1;#GN zI}EuSuxvs?6{NUh_yg{7G;Iu4y|ioDv4f)Z8jn9SRMek$I(H4D-(Rf**BAVediH05 zOdq^21+g_v*02>wx1Mm^ns|=!ew_c-L0a>^1%lDZ)N5|SnyYglcwFe~$W04?0Kgw@ zf7L=}j5+QuZ&#a|!(HZklvs}ziy0qWn}*8#1sR6z1lk_EHj1}Nj&n;4RLP7D+V36u zb@slKWqOUHleI@RVqwLiS@%S1zRkii?DQu?7bB&=1uLi@TxQSz!qx|iZo_~;q2k=dVC@$foqn{!^E;<5nRke) zTqV2pWUV$^t-Dl$+u$o^BJLiFOTuS)7B+!tl~qzcsnTtYnLor$@=j|juNv||3iOzp z(uLEgq?MrksAh5ZK*JmqDMjRXZ`m4?@1G#VdwS7Vz7vwhdBJti5LEJ0xgC03(#D+4#aD|da!*g+y@{S4>jt-+%Rwrzu7*N<~x_RS8=X9cEQ%DA@O>Jvu$+Bc4jbR>S5e)5Z-a7j z>2n9eqs%jg7CPR)ct(0Qn^w9QmK;94&^Rg;LD%lt#edI0QE}^bKj;hIks^o32#0dI zB8ZKE4w6U=eGb)vIMmu^Bv?RyJ;YD%lVb8X-dr_$^iq37jT|53`Gk-SCIA)XP!N67 z%#yfa_(ttWi34zH8s|Fj59jpV1tr#vq(0psa~V$coe4AV{K%3GKh7FzoSeSyxSVgtvewhGM) zJVa)$3m0)XKXGYMuU9XBqyC&MMTe?6ft}3~KiL<6%%1Tp!$f<_&HZ~noy^My1paP& zoIIvMK4*p6uWc69`{1#jiLKsiCsM64Nz*rnV_!IbgWXW;TNhmJuXVx7ax46MK3MMOWqwz^5nE^7MpM2e#9s0 zyOjpX+2yXyh=zh&-M&GsezIhP(^2?|2r=_2|`-=CYw zE<_5!=51hI449LKa+ba7K!8op=J5C>7dTNk%tH;4|o)Hg)` z$+GW;NrxT1)rJA77pS7`Ulk!uuq+_1v)-h7VPL&6e!laznvZjJ3Zv)iXvTJ05G_e2 zv|=*!3vJqEbkq>rBzi&A3XHJXz>EuU`c^ib?ADPOeLICqL`Rf%D{aQSXeO85-5dz+ zm`l6d^mSa_d+N+LgKDmm1zN>Db$5YkEVGoWQ1*7enuIPxI^!;h8nB8Pu-9|b>7DSl zzRGZKg-k?Uo1t|?Gl=JPYH%I`-V)9JZTo6DuuX>%DzDdF_i50m_PG9rY<#Rrep+V`+au<*00NJELr~3n4SNTzWW?L*<2lWNAVfIW-Cx zh_T`11mi<|2}vI5>XPb9dlu)fH3E8TgH7b3t~ zmqt{Q9{}Y$l(=A|>PZAN z-A99F2dDSz6@An4FQc9PyNbO)Hf5seM>!cbm0~B=;(86f z3=U7xlawz)lLkYCp%|VV92>~v-_MQr_{G1&|7bCIF+fbh z|LFQZAMnCsia$M>!n2G~B~Bh2{%||?F;I;S!b|A+_Xo-#s>j2id++}of~Y80h+lUp z-zgnN#(+M&2i<=+47v{$1>J%|K)2oj_8maAbOaHqd)~g^V$)cKQei0|(>=?%S!wWJXfaEd0H}9ILt0sug?1i0Wt@Rz@&n+Of z3fx&mue|2gNq81~q~-vGPmSzA!#*8>ypoNF;vQ~-2rQyBECe(`W|Ol>e}*j2(Ra5d zSCjczQiWdZ5jN#D8yx;?65ApnXU@VL(rLttrS0h}sjJc3X=BK2rP z5OY6;p)TlYQGLR2wG*i#h=h$gCnDxnDLZfxdG_yQ1MPz{=ru59|GoYHHg(Xgmq3Jt P)&me{0*IFR@528AIYGf~ literal 0 HcmV?d00001 diff --git a/Demo/ViewController.swift b/Demo/ViewController.swift new file mode 100644 index 0000000..d478645 --- /dev/null +++ b/Demo/ViewController.swift @@ -0,0 +1,62 @@ +// +// ViewController.swift +// Demo +// +// Created by WEI QIN on 2018/10/25. +// Copyright © 2018 WEI QIN. All rights reserved. +// + +import UIKit +import GPU_SIFT + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // load image + let image = UIImage(contentsOfFile: Bundle.main.path(forResource: "Jobs2", ofType: "jpeg")!) + guard let cgImage = image?.cgImage else { + return + } + + // get features point + let sift = SIFT() + sift.initWithWidth(Int32(cgImage.width), height: Int32(cgImage.height), octaves: 4) + let keyPoints = sift.computeSift(on: cgImage) + + // draw feature point on image + let width = cgImage.width + let height = cgImage.height + UIGraphicsBeginImageContextWithOptions(CGSize(width: width, height: height), true, UIScreen.main.scale) + defer { + UIGraphicsEndImageContext() + } + guard let context = UIGraphicsGetCurrentContext() else { + return + } + context.translateBy(x: 0, y: CGFloat(height)) + context.scaleBy(x: 1, y: -1) + context.draw(cgImage, in: CGRect(x: 0, y: 0, width: width, height: height)) + context.setStrokeColor(UIColor.yellow.cgColor) + context.setLineWidth(0.4) + for point in (keyPoints as! [KeyPoint]) { + context.move(to: point.cgPoint()) + context.addArc(center: point.cgPoint(), radius: 2.0, startAngle: 0, endAngle: CGFloat.pi * 2, clockwise: true) + context.closePath() + context.strokePath() + } + guard let outputImage = UIGraphicsGetImageFromCurrentImageContext() else { + return + } + + // render on screen + let imageView = UIImageView(frame: view.bounds) + imageView.contentMode = .scaleAspectFit + imageView.image = outputImage + view.addSubview(imageView) + } + + +} + diff --git a/Demo/pool.jpg b/Demo/pool.jpg new file mode 100644 index 0000000000000000000000000000000000000000..989709bf19d81830e655f7edf40d8ffc1cbff956 GIT binary patch literal 16199 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 T5U@h>`f^t)21Xb9=h6QK53~$` literal 0 HcmV?d00001 diff --git a/Demo/skull.jpg b/Demo/skull.jpg new file mode 100644 index 0000000000000000000000000000000000000000..48e199666428634f4fb5fd10ca9d07d3076fb571 GIT binary patch literal 147539 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�lkz0P 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 literal 0 HcmV?d00001 diff --git a/GPU_SIFT.xcodeproj/project.pbxproj b/GPU_SIFT.xcodeproj/project.pbxproj index e36990d..4b1d230 100644 --- a/GPU_SIFT.xcodeproj/project.pbxproj +++ b/GPU_SIFT.xcodeproj/project.pbxproj @@ -3,185 +3,276 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 50; objects = { /* Begin PBXBuildFile section */ - 9CA72716142269B500CC88CA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CA72715142269B500CC88CA /* UIKit.framework */; }; - 9CA72718142269B500CC88CA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CA72717142269B500CC88CA /* Foundation.framework */; }; - 9CA7271A142269B500CC88CA /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CA72719142269B500CC88CA /* CoreGraphics.framework */; }; - 9CA7271C142269B500CC88CA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CA7271B142269B500CC88CA /* QuartzCore.framework */; }; - 9CA7271E142269B500CC88CA /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CA7271D142269B500CC88CA /* OpenGLES.framework */; }; - 9CA72727142269B500CC88CA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CA72726142269B500CC88CA /* main.m */; }; - 9CA7272A142269B500CC88CA /* GPU_SIFTAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CA72729142269B500CC88CA /* GPU_SIFTAppDelegate.m */; }; - 9CA7275D14226AA900CC88CA /* KeyPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CA7275A14226AA900CC88CA /* KeyPoint.m */; }; - 9CA7275E14226AA900CC88CA /* SIFT.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CA7275C14226AA900CC88CA /* SIFT.m */; }; - 9CA7278014226B0300CC88CA /* 00.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7277F14226B0300CC88CA /* 00.jpg */; }; - 9CA7278214226D2600CC88CA /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7278114226D2600CC88CA /* MainWindow.xib */; }; - 9CA7278314226E8D00CC88CA /* descriptor.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276014226AC100CC88CA /* descriptor.fsh */; }; - 9CA7278414226E8D00CC88CA /* dog.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276114226AC100CC88CA /* dog.fsh */; }; - 9CA7278514226E8D00CC88CA /* edgeSuppression.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276214226AC100CC88CA /* edgeSuppression.fsh */; }; - 9CA7278614226E8D00CC88CA /* grad.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276314226AC100CC88CA /* grad.fsh */; }; - 9CA7278714226E8D00CC88CA /* gradient.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276414226AC100CC88CA /* gradient.fsh */; }; - 9CA7278814226E8D00CC88CA /* mainOrientation.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276514226AC100CC88CA /* mainOrientation.fsh */; }; - 9CA7278914226E8D00CC88CA /* nms.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276614226AC100CC88CA /* nms.fsh */; }; - 9CA7278A14226E8D00CC88CA /* orientation.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276714226AC100CC88CA /* orientation.fsh */; }; - 9CA7278B14226E8D00CC88CA /* printer.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276814226AC100CC88CA /* printer.fsh */; }; - 9CA7278C14226E8D00CC88CA /* quickBlur.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276914226AC100CC88CA /* quickBlur.fsh */; }; - 9CA7278D14226E8D00CC88CA /* smooth.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276A14226AC100CC88CA /* smooth.fsh */; }; - 9CA7278E14226E8D00CC88CA /* smoothDouble.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276B14226AC100CC88CA /* smoothDouble.fsh */; }; - 9CA7278F14226E8D00CC88CA /* vertex.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276C14226AC100CC88CA /* vertex.vsh */; }; - 9CA7279014226E8D00CC88CA /* vertex0.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276D14226AC100CC88CA /* vertex0.vsh */; }; - 9CA7279114226E8D00CC88CA /* vertex2.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 9CA7276E14226AC100CC88CA /* vertex2.vsh */; }; + 2453F9292181773F0077BAD7 /* GPU_SIFT.h in Headers */ = {isa = PBXBuildFile; fileRef = 2453F9272181773F0077BAD7 /* GPU_SIFT.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2453F9502181777F0077BAD7 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2453F94F2181777F0077BAD7 /* AppDelegate.swift */; }; + 2453F9522181777F0077BAD7 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2453F9512181777F0077BAD7 /* ViewController.swift */; }; + 2453F9552181777F0077BAD7 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9532181777F0077BAD7 /* Main.storyboard */; }; + 2453F957218177800077BAD7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2453F956218177800077BAD7 /* Assets.xcassets */; }; + 2453F95A218177800077BAD7 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2453F958218177800077BAD7 /* LaunchScreen.storyboard */; }; + 2453F9732181783B0077BAD7 /* KeyPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 2453F95F2181783B0077BAD7 /* KeyPoint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2453F9742181783B0077BAD7 /* SIFT.h in Headers */ = {isa = PBXBuildFile; fileRef = 2453F9602181783B0077BAD7 /* SIFT.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2453F9752181783B0077BAD7 /* KeyPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = 2453F9612181783B0077BAD7 /* KeyPoint.m */; }; + 2453F9762181783B0077BAD7 /* descriptor.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9632181783B0077BAD7 /* descriptor.fsh */; }; + 2453F9772181783B0077BAD7 /* dog.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9642181783B0077BAD7 /* dog.fsh */; }; + 2453F9782181783B0077BAD7 /* edgeSuppression.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9652181783B0077BAD7 /* edgeSuppression.fsh */; }; + 2453F9792181783B0077BAD7 /* grad.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9662181783B0077BAD7 /* grad.fsh */; }; + 2453F97A2181783B0077BAD7 /* gradient.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9672181783B0077BAD7 /* gradient.fsh */; }; + 2453F97B2181783B0077BAD7 /* mainOrientation.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9682181783B0077BAD7 /* mainOrientation.fsh */; }; + 2453F97C2181783B0077BAD7 /* nms.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9692181783B0077BAD7 /* nms.fsh */; }; + 2453F97D2181783B0077BAD7 /* orientation.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F96A2181783B0077BAD7 /* orientation.fsh */; }; + 2453F97E2181783B0077BAD7 /* printer.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F96B2181783B0077BAD7 /* printer.fsh */; }; + 2453F97F2181783B0077BAD7 /* quickBlur.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F96C2181783B0077BAD7 /* quickBlur.fsh */; }; + 2453F9802181783B0077BAD7 /* smooth.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F96D2181783B0077BAD7 /* smooth.fsh */; }; + 2453F9812181783B0077BAD7 /* smoothDouble.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F96E2181783B0077BAD7 /* smoothDouble.fsh */; }; + 2453F9822181783B0077BAD7 /* vertex.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F96F2181783B0077BAD7 /* vertex.vsh */; }; + 2453F9832181783B0077BAD7 /* vertex0.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9702181783B0077BAD7 /* vertex0.vsh */; }; + 2453F9842181783B0077BAD7 /* vertex2.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9712181783B0077BAD7 /* vertex2.vsh */; }; + 2453F9852181783B0077BAD7 /* SIFT.m in Sources */ = {isa = PBXBuildFile; fileRef = 2453F9722181783B0077BAD7 /* SIFT.m */; }; + 2453F9922181B8490077BAD7 /* GPU_SIFT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2453F9242181773F0077BAD7 /* GPU_SIFT.framework */; }; + 2453F9932181B8490077BAD7 /* GPU_SIFT.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 2453F9242181773F0077BAD7 /* GPU_SIFT.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 2453F9A92181BE960077BAD7 /* descriptor.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F99A2181BE960077BAD7 /* descriptor.fsh */; }; + 2453F9AA2181BE960077BAD7 /* dog.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F99B2181BE960077BAD7 /* dog.fsh */; }; + 2453F9AB2181BE960077BAD7 /* edgeSuppression.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F99C2181BE960077BAD7 /* edgeSuppression.fsh */; }; + 2453F9AC2181BE960077BAD7 /* grad.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F99D2181BE960077BAD7 /* grad.fsh */; }; + 2453F9AD2181BE960077BAD7 /* gradient.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F99E2181BE960077BAD7 /* gradient.fsh */; }; + 2453F9AE2181BE960077BAD7 /* mainOrientation.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F99F2181BE960077BAD7 /* mainOrientation.fsh */; }; + 2453F9AF2181BE960077BAD7 /* nms.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9A02181BE960077BAD7 /* nms.fsh */; }; + 2453F9B02181BE960077BAD7 /* orientation.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9A12181BE960077BAD7 /* orientation.fsh */; }; + 2453F9B12181BE960077BAD7 /* printer.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9A22181BE960077BAD7 /* printer.fsh */; }; + 2453F9B22181BE960077BAD7 /* quickBlur.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9A32181BE960077BAD7 /* quickBlur.fsh */; }; + 2453F9B32181BE960077BAD7 /* smooth.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9A42181BE960077BAD7 /* smooth.fsh */; }; + 2453F9B42181BE960077BAD7 /* smoothDouble.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9A52181BE960077BAD7 /* smoothDouble.fsh */; }; + 2453F9B52181BE960077BAD7 /* vertex.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9A62181BE960077BAD7 /* vertex.vsh */; }; + 2453F9B62181BE960077BAD7 /* vertex0.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9A72181BE960077BAD7 /* vertex0.vsh */; }; + 2453F9B72181BE960077BAD7 /* vertex2.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9A82181BE960077BAD7 /* vertex2.vsh */; }; + 2453F9BA2181D06E0077BAD7 /* pool.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9B82181D06E0077BAD7 /* pool.jpg */; }; + 2453F9BB2181D06E0077BAD7 /* skull.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9B92181D06E0077BAD7 /* skull.jpg */; }; + 2453F9BD2181D2330077BAD7 /* Jobs2.jpeg in Resources */ = {isa = PBXBuildFile; fileRef = 2453F9BC2181D2330077BAD7 /* Jobs2.jpeg */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 2453F9942181B8490077BAD7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 2453F91B2181773F0077BAD7 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2453F9232181773F0077BAD7; + remoteInfo = GPU_SIFT; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 2453F9962181B8490077BAD7 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 2453F9932181B8490077BAD7 /* GPU_SIFT.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ - 9CA72711142269B500CC88CA /* GPU_SIFT.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GPU_SIFT.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 9CA72715142269B500CC88CA /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 9CA72717142269B500CC88CA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 9CA72719142269B500CC88CA /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 9CA7271B142269B500CC88CA /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 9CA7271D142269B500CC88CA /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; - 9CA72721142269B500CC88CA /* GPU_SIFT-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GPU_SIFT-Info.plist"; sourceTree = ""; }; - 9CA72725142269B500CC88CA /* GPU_SIFT-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "GPU_SIFT-Prefix.pch"; sourceTree = ""; }; - 9CA72726142269B500CC88CA /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 9CA72728142269B500CC88CA /* GPU_SIFTAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPU_SIFTAppDelegate.h; sourceTree = ""; }; - 9CA72729142269B500CC88CA /* GPU_SIFTAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GPU_SIFTAppDelegate.m; sourceTree = ""; }; - 9CA7275914226AA900CC88CA /* KeyPoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyPoint.h; sourceTree = ""; }; - 9CA7275A14226AA900CC88CA /* KeyPoint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeyPoint.m; sourceTree = ""; }; - 9CA7275B14226AA900CC88CA /* SIFT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SIFT.h; sourceTree = ""; }; - 9CA7275C14226AA900CC88CA /* SIFT.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SIFT.m; sourceTree = ""; }; - 9CA7276014226AC100CC88CA /* descriptor.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = descriptor.fsh; path = Shaders/descriptor.fsh; sourceTree = ""; }; - 9CA7276114226AC100CC88CA /* dog.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = dog.fsh; path = Shaders/dog.fsh; sourceTree = ""; }; - 9CA7276214226AC100CC88CA /* edgeSuppression.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = edgeSuppression.fsh; path = Shaders/edgeSuppression.fsh; sourceTree = ""; }; - 9CA7276314226AC100CC88CA /* grad.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = grad.fsh; path = Shaders/grad.fsh; sourceTree = ""; }; - 9CA7276414226AC100CC88CA /* gradient.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = gradient.fsh; path = Shaders/gradient.fsh; sourceTree = ""; }; - 9CA7276514226AC100CC88CA /* mainOrientation.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = mainOrientation.fsh; path = Shaders/mainOrientation.fsh; sourceTree = ""; }; - 9CA7276614226AC100CC88CA /* nms.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = nms.fsh; path = Shaders/nms.fsh; sourceTree = ""; }; - 9CA7276714226AC100CC88CA /* orientation.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = orientation.fsh; path = Shaders/orientation.fsh; sourceTree = ""; }; - 9CA7276814226AC100CC88CA /* printer.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = printer.fsh; path = Shaders/printer.fsh; sourceTree = ""; }; - 9CA7276914226AC100CC88CA /* quickBlur.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = quickBlur.fsh; path = Shaders/quickBlur.fsh; sourceTree = ""; }; - 9CA7276A14226AC100CC88CA /* smooth.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = smooth.fsh; path = Shaders/smooth.fsh; sourceTree = ""; }; - 9CA7276B14226AC100CC88CA /* smoothDouble.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = smoothDouble.fsh; path = Shaders/smoothDouble.fsh; sourceTree = ""; }; - 9CA7276C14226AC100CC88CA /* vertex.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = vertex.vsh; path = Shaders/vertex.vsh; sourceTree = ""; }; - 9CA7276D14226AC100CC88CA /* vertex0.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = vertex0.vsh; path = Shaders/vertex0.vsh; sourceTree = ""; }; - 9CA7276E14226AC100CC88CA /* vertex2.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = vertex2.vsh; path = Shaders/vertex2.vsh; sourceTree = ""; }; - 9CA7277F14226B0300CC88CA /* 00.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 00.jpg; sourceTree = ""; }; - 9CA7278114226D2600CC88CA /* MainWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = ""; }; + 2453F9242181773F0077BAD7 /* GPU_SIFT.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GPU_SIFT.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2453F9272181773F0077BAD7 /* GPU_SIFT.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPU_SIFT.h; sourceTree = ""; }; + 2453F9282181773F0077BAD7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2453F94D2181777F0077BAD7 /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 2453F94F2181777F0077BAD7 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 2453F9512181777F0077BAD7 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 2453F9542181777F0077BAD7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 2453F956218177800077BAD7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 2453F959218177800077BAD7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 2453F95B218177800077BAD7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2453F95F2181783B0077BAD7 /* KeyPoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyPoint.h; sourceTree = ""; }; + 2453F9602181783B0077BAD7 /* SIFT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SIFT.h; sourceTree = ""; }; + 2453F9612181783B0077BAD7 /* KeyPoint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeyPoint.m; sourceTree = ""; }; + 2453F9632181783B0077BAD7 /* descriptor.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = descriptor.fsh; sourceTree = ""; }; + 2453F9642181783B0077BAD7 /* dog.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = dog.fsh; sourceTree = ""; }; + 2453F9652181783B0077BAD7 /* edgeSuppression.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = edgeSuppression.fsh; sourceTree = ""; }; + 2453F9662181783B0077BAD7 /* grad.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = grad.fsh; sourceTree = ""; }; + 2453F9672181783B0077BAD7 /* gradient.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = gradient.fsh; sourceTree = ""; }; + 2453F9682181783B0077BAD7 /* mainOrientation.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = mainOrientation.fsh; sourceTree = ""; }; + 2453F9692181783B0077BAD7 /* nms.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = nms.fsh; sourceTree = ""; }; + 2453F96A2181783B0077BAD7 /* orientation.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = orientation.fsh; sourceTree = ""; }; + 2453F96B2181783B0077BAD7 /* printer.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = printer.fsh; sourceTree = ""; }; + 2453F96C2181783B0077BAD7 /* quickBlur.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = quickBlur.fsh; sourceTree = ""; }; + 2453F96D2181783B0077BAD7 /* smooth.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = smooth.fsh; sourceTree = ""; }; + 2453F96E2181783B0077BAD7 /* smoothDouble.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = smoothDouble.fsh; sourceTree = ""; }; + 2453F96F2181783B0077BAD7 /* vertex.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = vertex.vsh; sourceTree = ""; }; + 2453F9702181783B0077BAD7 /* vertex0.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = vertex0.vsh; sourceTree = ""; }; + 2453F9712181783B0077BAD7 /* vertex2.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = vertex2.vsh; sourceTree = ""; }; + 2453F9722181783B0077BAD7 /* SIFT.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SIFT.m; sourceTree = ""; }; + 2453F99A2181BE960077BAD7 /* descriptor.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = descriptor.fsh; sourceTree = ""; }; + 2453F99B2181BE960077BAD7 /* dog.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = dog.fsh; sourceTree = ""; }; + 2453F99C2181BE960077BAD7 /* edgeSuppression.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = edgeSuppression.fsh; sourceTree = ""; }; + 2453F99D2181BE960077BAD7 /* grad.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = grad.fsh; sourceTree = ""; }; + 2453F99E2181BE960077BAD7 /* gradient.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = gradient.fsh; sourceTree = ""; }; + 2453F99F2181BE960077BAD7 /* mainOrientation.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = mainOrientation.fsh; sourceTree = ""; }; + 2453F9A02181BE960077BAD7 /* nms.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = nms.fsh; sourceTree = ""; }; + 2453F9A12181BE960077BAD7 /* orientation.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = orientation.fsh; sourceTree = ""; }; + 2453F9A22181BE960077BAD7 /* printer.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = printer.fsh; sourceTree = ""; }; + 2453F9A32181BE960077BAD7 /* quickBlur.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = quickBlur.fsh; sourceTree = ""; }; + 2453F9A42181BE960077BAD7 /* smooth.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = smooth.fsh; sourceTree = ""; }; + 2453F9A52181BE960077BAD7 /* smoothDouble.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = smoothDouble.fsh; sourceTree = ""; }; + 2453F9A62181BE960077BAD7 /* vertex.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = vertex.vsh; sourceTree = ""; }; + 2453F9A72181BE960077BAD7 /* vertex0.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = vertex0.vsh; sourceTree = ""; }; + 2453F9A82181BE960077BAD7 /* vertex2.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = vertex2.vsh; sourceTree = ""; }; + 2453F9B82181D06E0077BAD7 /* pool.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = pool.jpg; sourceTree = ""; }; + 2453F9B92181D06E0077BAD7 /* skull.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = skull.jpg; sourceTree = ""; }; + 2453F9BC2181D2330077BAD7 /* Jobs2.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = Jobs2.jpeg; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 9CA7270E142269B500CC88CA /* Frameworks */ = { + 2453F9212181773F0077BAD7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9CA72716142269B500CC88CA /* UIKit.framework in Frameworks */, - 9CA72718142269B500CC88CA /* Foundation.framework in Frameworks */, - 9CA7271A142269B500CC88CA /* CoreGraphics.framework in Frameworks */, - 9CA7271C142269B500CC88CA /* QuartzCore.framework in Frameworks */, - 9CA7271E142269B500CC88CA /* OpenGLES.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2453F94A2181777F0077BAD7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2453F9922181B8490077BAD7 /* GPU_SIFT.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 9CA72706142269B500CC88CA = { + 2453F91A2181773F0077BAD7 = { isa = PBXGroup; children = ( - 9CA7271F142269B500CC88CA /* GPU_SIFT */, - 9CA72714142269B500CC88CA /* Frameworks */, - 9CA72712142269B500CC88CA /* Products */, + 2453F9262181773F0077BAD7 /* GPU_SIFT */, + 2453F94E2181777F0077BAD7 /* Demo */, + 2453F9252181773F0077BAD7 /* Products */, + 2453F9902181B5A60077BAD7 /* Frameworks */, ); sourceTree = ""; }; - 9CA72712142269B500CC88CA /* Products */ = { + 2453F9252181773F0077BAD7 /* Products */ = { isa = PBXGroup; children = ( - 9CA72711142269B500CC88CA /* GPU_SIFT.app */, + 2453F9242181773F0077BAD7 /* GPU_SIFT.framework */, + 2453F94D2181777F0077BAD7 /* Demo.app */, ); name = Products; sourceTree = ""; }; - 9CA72714142269B500CC88CA /* Frameworks */ = { + 2453F9262181773F0077BAD7 /* GPU_SIFT */ = { isa = PBXGroup; children = ( - 9CA72715142269B500CC88CA /* UIKit.framework */, - 9CA72717142269B500CC88CA /* Foundation.framework */, - 9CA72719142269B500CC88CA /* CoreGraphics.framework */, - 9CA7271B142269B500CC88CA /* QuartzCore.framework */, - 9CA7271D142269B500CC88CA /* OpenGLES.framework */, + 2453F9272181773F0077BAD7 /* GPU_SIFT.h */, + 2453F9282181773F0077BAD7 /* Info.plist */, + 2453F9602181783B0077BAD7 /* SIFT.h */, + 2453F9722181783B0077BAD7 /* SIFT.m */, + 2453F95F2181783B0077BAD7 /* KeyPoint.h */, + 2453F9612181783B0077BAD7 /* KeyPoint.m */, + 2453F9622181783B0077BAD7 /* Shaders */, ); - name = Frameworks; + path = GPU_SIFT; sourceTree = ""; }; - 9CA7271F142269B500CC88CA /* GPU_SIFT */ = { + 2453F94E2181777F0077BAD7 /* Demo */ = { isa = PBXGroup; children = ( - 9CA7277E14226AD400CC88CA /* Resources */, - 9CA7275F14226AB000CC88CA /* Shaders */, - 9CA7275914226AA900CC88CA /* KeyPoint.h */, - 9CA7275A14226AA900CC88CA /* KeyPoint.m */, - 9CA7275B14226AA900CC88CA /* SIFT.h */, - 9CA7275C14226AA900CC88CA /* SIFT.m */, - 9CA72728142269B500CC88CA /* GPU_SIFTAppDelegate.h */, - 9CA72729142269B500CC88CA /* GPU_SIFTAppDelegate.m */, - 9CA72720142269B500CC88CA /* Supporting Files */, + 2453F9992181BE960077BAD7 /* Shaders */, + 2453F94F2181777F0077BAD7 /* AppDelegate.swift */, + 2453F9512181777F0077BAD7 /* ViewController.swift */, + 2453F9532181777F0077BAD7 /* Main.storyboard */, + 2453F956218177800077BAD7 /* Assets.xcassets */, + 2453F958218177800077BAD7 /* LaunchScreen.storyboard */, + 2453F95B218177800077BAD7 /* Info.plist */, + 2453F9B82181D06E0077BAD7 /* pool.jpg */, + 2453F9B92181D06E0077BAD7 /* skull.jpg */, + 2453F9BC2181D2330077BAD7 /* Jobs2.jpeg */, ); - path = GPU_SIFT; + path = Demo; sourceTree = ""; }; - 9CA72720142269B500CC88CA /* Supporting Files */ = { + 2453F9622181783B0077BAD7 /* Shaders */ = { isa = PBXGroup; children = ( - 9CA7278114226D2600CC88CA /* MainWindow.xib */, - 9CA72721142269B500CC88CA /* GPU_SIFT-Info.plist */, - 9CA72725142269B500CC88CA /* GPU_SIFT-Prefix.pch */, - 9CA72726142269B500CC88CA /* main.m */, + 2453F9632181783B0077BAD7 /* descriptor.fsh */, + 2453F9642181783B0077BAD7 /* dog.fsh */, + 2453F9652181783B0077BAD7 /* edgeSuppression.fsh */, + 2453F9662181783B0077BAD7 /* grad.fsh */, + 2453F9672181783B0077BAD7 /* gradient.fsh */, + 2453F9682181783B0077BAD7 /* mainOrientation.fsh */, + 2453F9692181783B0077BAD7 /* nms.fsh */, + 2453F96A2181783B0077BAD7 /* orientation.fsh */, + 2453F96B2181783B0077BAD7 /* printer.fsh */, + 2453F96C2181783B0077BAD7 /* quickBlur.fsh */, + 2453F96D2181783B0077BAD7 /* smooth.fsh */, + 2453F96E2181783B0077BAD7 /* smoothDouble.fsh */, + 2453F96F2181783B0077BAD7 /* vertex.vsh */, + 2453F9702181783B0077BAD7 /* vertex0.vsh */, + 2453F9712181783B0077BAD7 /* vertex2.vsh */, ); - name = "Supporting Files"; + path = Shaders; sourceTree = ""; }; - 9CA7275F14226AB000CC88CA /* Shaders */ = { + 2453F9902181B5A60077BAD7 /* Frameworks */ = { isa = PBXGroup; children = ( - 9CA7276014226AC100CC88CA /* descriptor.fsh */, - 9CA7276114226AC100CC88CA /* dog.fsh */, - 9CA7276214226AC100CC88CA /* edgeSuppression.fsh */, - 9CA7276314226AC100CC88CA /* grad.fsh */, - 9CA7276414226AC100CC88CA /* gradient.fsh */, - 9CA7276514226AC100CC88CA /* mainOrientation.fsh */, - 9CA7276614226AC100CC88CA /* nms.fsh */, - 9CA7276714226AC100CC88CA /* orientation.fsh */, - 9CA7276814226AC100CC88CA /* printer.fsh */, - 9CA7276914226AC100CC88CA /* quickBlur.fsh */, - 9CA7276A14226AC100CC88CA /* smooth.fsh */, - 9CA7276B14226AC100CC88CA /* smoothDouble.fsh */, - 9CA7276C14226AC100CC88CA /* vertex.vsh */, - 9CA7276D14226AC100CC88CA /* vertex0.vsh */, - 9CA7276E14226AC100CC88CA /* vertex2.vsh */, ); - name = Shaders; + name = Frameworks; sourceTree = ""; }; - 9CA7277E14226AD400CC88CA /* Resources */ = { + 2453F9992181BE960077BAD7 /* Shaders */ = { isa = PBXGroup; children = ( - 9CA7277F14226B0300CC88CA /* 00.jpg */, + 2453F99A2181BE960077BAD7 /* descriptor.fsh */, + 2453F99B2181BE960077BAD7 /* dog.fsh */, + 2453F99C2181BE960077BAD7 /* edgeSuppression.fsh */, + 2453F99D2181BE960077BAD7 /* grad.fsh */, + 2453F99E2181BE960077BAD7 /* gradient.fsh */, + 2453F99F2181BE960077BAD7 /* mainOrientation.fsh */, + 2453F9A02181BE960077BAD7 /* nms.fsh */, + 2453F9A12181BE960077BAD7 /* orientation.fsh */, + 2453F9A22181BE960077BAD7 /* printer.fsh */, + 2453F9A32181BE960077BAD7 /* quickBlur.fsh */, + 2453F9A42181BE960077BAD7 /* smooth.fsh */, + 2453F9A52181BE960077BAD7 /* smoothDouble.fsh */, + 2453F9A62181BE960077BAD7 /* vertex.vsh */, + 2453F9A72181BE960077BAD7 /* vertex0.vsh */, + 2453F9A82181BE960077BAD7 /* vertex2.vsh */, ); - name = Resources; - sourceTree = ""; + name = Shaders; + path = GPU_SIFT/Shaders; + sourceTree = SOURCE_ROOT; }; /* End PBXGroup section */ +/* Begin PBXHeadersBuildPhase section */ + 2453F91F2181773F0077BAD7 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 2453F9292181773F0077BAD7 /* GPU_SIFT.h in Headers */, + 2453F9742181783B0077BAD7 /* SIFT.h in Headers */, + 2453F9732181783B0077BAD7 /* KeyPoint.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + /* Begin PBXNativeTarget section */ - 9CA72710142269B500CC88CA /* GPU_SIFT */ = { + 2453F9232181773F0077BAD7 /* GPU_SIFT */ = { isa = PBXNativeTarget; - buildConfigurationList = 9CA72753142269B500CC88CA /* Build configuration list for PBXNativeTarget "GPU_SIFT" */; + buildConfigurationList = 2453F92C2181773F0077BAD7 /* Build configuration list for PBXNativeTarget "GPU_SIFT" */; buildPhases = ( - 9CA7270D142269B500CC88CA /* Sources */, - 9CA7270E142269B500CC88CA /* Frameworks */, - 9CA7270F142269B500CC88CA /* Resources */, + 2453F91F2181773F0077BAD7 /* Headers */, + 2453F9202181773F0077BAD7 /* Sources */, + 2453F9212181773F0077BAD7 /* Frameworks */, + 2453F9222181773F0077BAD7 /* Resources */, ); buildRules = ( ); @@ -189,165 +280,422 @@ ); name = GPU_SIFT; productName = GPU_SIFT; - productReference = 9CA72711142269B500CC88CA /* GPU_SIFT.app */; + productReference = 2453F9242181773F0077BAD7 /* GPU_SIFT.framework */; + productType = "com.apple.product-type.framework"; + }; + 2453F94C2181777F0077BAD7 /* Demo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2453F95C218177800077BAD7 /* Build configuration list for PBXNativeTarget "Demo" */; + buildPhases = ( + 2453F9492181777F0077BAD7 /* Sources */, + 2453F94A2181777F0077BAD7 /* Frameworks */, + 2453F94B2181777F0077BAD7 /* Resources */, + 2453F9962181B8490077BAD7 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 2453F9952181B8490077BAD7 /* PBXTargetDependency */, + ); + name = Demo; + productName = Demo; + productReference = 2453F94D2181777F0077BAD7 /* Demo.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 9CA72708142269B500CC88CA /* Project object */ = { + 2453F91B2181773F0077BAD7 /* Project object */ = { isa = PBXProject; - buildConfigurationList = 9CA7270B142269B500CC88CA /* Build configuration list for PBXProject "GPU_SIFT" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + attributes = { + LastSwiftUpdateCheck = 1000; + LastUpgradeCheck = 1000; + ORGANIZATIONNAME = "WEI QIN"; + TargetAttributes = { + 2453F9232181773F0077BAD7 = { + CreatedOnToolsVersion = 10.0; + }; + 2453F94C2181777F0077BAD7 = { + CreatedOnToolsVersion = 10.0; + }; + }; + }; + buildConfigurationList = 2453F91E2181773F0077BAD7 /* Build configuration list for PBXProject "GPU_SIFT" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); - mainGroup = 9CA72706142269B500CC88CA; - productRefGroup = 9CA72712142269B500CC88CA /* Products */; + mainGroup = 2453F91A2181773F0077BAD7; + productRefGroup = 2453F9252181773F0077BAD7 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 9CA72710142269B500CC88CA /* GPU_SIFT */, + 2453F9232181773F0077BAD7 /* GPU_SIFT */, + 2453F94C2181777F0077BAD7 /* Demo */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 9CA7270F142269B500CC88CA /* Resources */ = { + 2453F9222181773F0077BAD7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9CA7278314226E8D00CC88CA /* descriptor.fsh in Resources */, - 9CA7278414226E8D00CC88CA /* dog.fsh in Resources */, - 9CA7278514226E8D00CC88CA /* edgeSuppression.fsh in Resources */, - 9CA7278614226E8D00CC88CA /* grad.fsh in Resources */, - 9CA7278714226E8D00CC88CA /* gradient.fsh in Resources */, - 9CA7278814226E8D00CC88CA /* mainOrientation.fsh in Resources */, - 9CA7278914226E8D00CC88CA /* nms.fsh in Resources */, - 9CA7278A14226E8D00CC88CA /* orientation.fsh in Resources */, - 9CA7278B14226E8D00CC88CA /* printer.fsh in Resources */, - 9CA7278C14226E8D00CC88CA /* quickBlur.fsh in Resources */, - 9CA7278D14226E8D00CC88CA /* smooth.fsh in Resources */, - 9CA7278E14226E8D00CC88CA /* smoothDouble.fsh in Resources */, - 9CA7278F14226E8D00CC88CA /* vertex.vsh in Resources */, - 9CA7279014226E8D00CC88CA /* vertex0.vsh in Resources */, - 9CA7279114226E8D00CC88CA /* vertex2.vsh in Resources */, - 9CA7278014226B0300CC88CA /* 00.jpg in Resources */, - 9CA7278214226D2600CC88CA /* MainWindow.xib in Resources */, + 2453F9842181783B0077BAD7 /* vertex2.vsh in Resources */, + 2453F97C2181783B0077BAD7 /* nms.fsh in Resources */, + 2453F97A2181783B0077BAD7 /* gradient.fsh in Resources */, + 2453F97F2181783B0077BAD7 /* quickBlur.fsh in Resources */, + 2453F9822181783B0077BAD7 /* vertex.vsh in Resources */, + 2453F97D2181783B0077BAD7 /* orientation.fsh in Resources */, + 2453F9812181783B0077BAD7 /* smoothDouble.fsh in Resources */, + 2453F9832181783B0077BAD7 /* vertex0.vsh in Resources */, + 2453F97B2181783B0077BAD7 /* mainOrientation.fsh in Resources */, + 2453F97E2181783B0077BAD7 /* printer.fsh in Resources */, + 2453F9772181783B0077BAD7 /* dog.fsh in Resources */, + 2453F9792181783B0077BAD7 /* grad.fsh in Resources */, + 2453F9782181783B0077BAD7 /* edgeSuppression.fsh in Resources */, + 2453F9762181783B0077BAD7 /* descriptor.fsh in Resources */, + 2453F9802181783B0077BAD7 /* smooth.fsh in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2453F94B2181777F0077BAD7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2453F9B62181BE960077BAD7 /* vertex0.vsh in Resources */, + 2453F9AA2181BE960077BAD7 /* dog.fsh in Resources */, + 2453F9BD2181D2330077BAD7 /* Jobs2.jpeg in Resources */, + 2453F95A218177800077BAD7 /* LaunchScreen.storyboard in Resources */, + 2453F9BB2181D06E0077BAD7 /* skull.jpg in Resources */, + 2453F9B02181BE960077BAD7 /* orientation.fsh in Resources */, + 2453F9AB2181BE960077BAD7 /* edgeSuppression.fsh in Resources */, + 2453F9B52181BE960077BAD7 /* vertex.vsh in Resources */, + 2453F9B42181BE960077BAD7 /* smoothDouble.fsh in Resources */, + 2453F9BA2181D06E0077BAD7 /* pool.jpg in Resources */, + 2453F9AD2181BE960077BAD7 /* gradient.fsh in Resources */, + 2453F957218177800077BAD7 /* Assets.xcassets in Resources */, + 2453F9B12181BE960077BAD7 /* printer.fsh in Resources */, + 2453F9B32181BE960077BAD7 /* smooth.fsh in Resources */, + 2453F9B72181BE960077BAD7 /* vertex2.vsh in Resources */, + 2453F9B22181BE960077BAD7 /* quickBlur.fsh in Resources */, + 2453F9AF2181BE960077BAD7 /* nms.fsh in Resources */, + 2453F9AC2181BE960077BAD7 /* grad.fsh in Resources */, + 2453F9A92181BE960077BAD7 /* descriptor.fsh in Resources */, + 2453F9552181777F0077BAD7 /* Main.storyboard in Resources */, + 2453F9AE2181BE960077BAD7 /* mainOrientation.fsh in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 9CA7270D142269B500CC88CA /* Sources */ = { + 2453F9202181773F0077BAD7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2453F9752181783B0077BAD7 /* KeyPoint.m in Sources */, + 2453F9852181783B0077BAD7 /* SIFT.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2453F9492181777F0077BAD7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9CA72727142269B500CC88CA /* main.m in Sources */, - 9CA7272A142269B500CC88CA /* GPU_SIFTAppDelegate.m in Sources */, - 9CA7275D14226AA900CC88CA /* KeyPoint.m in Sources */, - 9CA7275E14226AA900CC88CA /* SIFT.m in Sources */, + 2453F9522181777F0077BAD7 /* ViewController.swift in Sources */, + 2453F9502181777F0077BAD7 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 2453F9952181B8490077BAD7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 2453F9232181773F0077BAD7 /* GPU_SIFT */; + targetProxy = 2453F9942181B8490077BAD7 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 2453F9532181777F0077BAD7 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 2453F9542181777F0077BAD7 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 2453F958218177800077BAD7 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 2453F959218177800077BAD7 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + /* Begin XCBuildConfiguration section */ - 9CA72751142269B500CC88CA /* Debug */ = { + 2453F92A2181773F0077BAD7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_C_LANGUAGE_STANDARD = gnu99; + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = DEBUG; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvmgcc42; - GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 9CA72752142269B500CC88CA /* Release */ = { + 2453F92B2181773F0077BAD7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_VERSION = com.apple.compilers.llvmgcc42; - GCC_WARN_ABOUT_RETURN_TYPE = YES; + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Release; }; - 9CA72754142269B500CC88CA /* Debug */ = { + 2453F92D2181773F0077BAD7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "GPU_SIFT/GPU_SIFT-Prefix.pch"; - "GCC_THUMB_SUPPORT[arch=armv6]" = ""; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INFOPLIST_FILE = "GPU_SIFT/GPU_SIFT-Info.plist"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = 55R3QD4LZ2; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = GPU_SIFT/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = "framework.GPU-SIFT"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 2453F92E2181773F0077BAD7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = 55R3QD4LZ2; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = GPU_SIFT/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = "framework.GPU-SIFT"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 2453F95D218177800077BAD7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 55R3QD4LZ2; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Demo", + ); + INFOPLIST_FILE = Demo/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.app.sift; PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 9CA72755142269B500CC88CA /* Release */ = { + 2453F95E218177800077BAD7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "GPU_SIFT/GPU_SIFT-Prefix.pch"; - "GCC_THUMB_SUPPORT[arch=armv6]" = ""; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INFOPLIST_FILE = "GPU_SIFT/GPU_SIFT-Info.plist"; - OTHER_CFLAGS = ""; - "OTHER_CFLAGS[arch=armv7]" = ( - "-mfloat-abi=softfp", - "-mfpu=neon", + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 55R3QD4LZ2; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Demo", ); - "OTHER_CPLUSPLUSFLAGS[arch=armv7]" = "$(OTHER_CFLAGS)"; + INFOPLIST_FILE = Demo/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.app.sift; PRODUCT_NAME = "$(TARGET_NAME)"; - VALIDATE_PRODUCT = YES; - WRAPPER_EXTENSION = app; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 9CA7270B142269B500CC88CA /* Build configuration list for PBXProject "GPU_SIFT" */ = { + 2453F91E2181773F0077BAD7 /* Build configuration list for PBXProject "GPU_SIFT" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2453F92A2181773F0077BAD7 /* Debug */, + 2453F92B2181773F0077BAD7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2453F92C2181773F0077BAD7 /* Build configuration list for PBXNativeTarget "GPU_SIFT" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9CA72751142269B500CC88CA /* Debug */, - 9CA72752142269B500CC88CA /* Release */, + 2453F92D2181773F0077BAD7 /* Debug */, + 2453F92E2181773F0077BAD7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9CA72753142269B500CC88CA /* Build configuration list for PBXNativeTarget "GPU_SIFT" */ = { + 2453F95C218177800077BAD7 /* Build configuration list for PBXNativeTarget "Demo" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9CA72754142269B500CC88CA /* Debug */, - 9CA72755142269B500CC88CA /* Release */, + 2453F95D218177800077BAD7 /* Debug */, + 2453F95E218177800077BAD7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 9CA72708142269B500CC88CA /* Project object */; + rootObject = 2453F91B2181773F0077BAD7 /* Project object */; } diff --git a/GPU_SIFT/00.jpg b/GPU_SIFT/00.jpg deleted file mode 100755 index 81e15d2217412293cbce97e0d069830a724de5ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44754 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 - #import -#endif diff --git a/GPU_SIFT/GPU_SIFT.h b/GPU_SIFT/GPU_SIFT.h new file mode 100644 index 0000000..40d51b8 --- /dev/null +++ b/GPU_SIFT/GPU_SIFT.h @@ -0,0 +1,19 @@ +// +// GPU_SIFT.h +// GPU_SIFT +// +// Created by WEI QIN on 2018/10/25. +// Copyright © 2018 WEI QIN. All rights reserved. +// + +#import + +//! Project version number for GPU_SIFT. +FOUNDATION_EXPORT double GPU_SIFTVersionNumber; + +//! Project version string for GPU_SIFT. +FOUNDATION_EXPORT const unsigned char GPU_SIFTVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import +#import "SIFT.h" +#import "KeyPoint.h" diff --git a/GPU_SIFT/GPU_SIFTAppDelegate.h b/GPU_SIFT/GPU_SIFTAppDelegate.h deleted file mode 100644 index da5381a..0000000 --- a/GPU_SIFT/GPU_SIFTAppDelegate.h +++ /dev/null @@ -1,12 +0,0 @@ -#import - -@class SIFT; - -@interface GPU_SIFTAppDelegate : NSObject { - IBOutlet UIWindow *window; - IBOutlet SIFT *glView; -} - -@property (nonatomic, retain) UIWindow *window; - -@end diff --git a/GPU_SIFT/GPU_SIFTAppDelegate.m b/GPU_SIFT/GPU_SIFTAppDelegate.m deleted file mode 100644 index 9085a3d..0000000 --- a/GPU_SIFT/GPU_SIFTAppDelegate.m +++ /dev/null @@ -1,36 +0,0 @@ - -#import "GPU_SIFTAppDelegate.h" -#import "SIFT.h" - -@implementation GPU_SIFTAppDelegate - -@synthesize window; - -- (void)applicationDidFinishLaunching:(UIApplication *)application -{ - [glView initWithWidth:360 Height:480 Octaves:4]; - CGImageRef picture = [UIImage imageNamed:@"00.jpg"].CGImage; - NSMutableArray * test = [glView computeSiftOnCGImage:picture]; -} - -- (void) applicationWillResignActive:(UIApplication *)application -{ -} - -- (void) applicationDidBecomeActive:(UIApplication *)application -{ -} - -- (void)applicationWillTerminate:(UIApplication *)application -{ -} - -- (void) dealloc -{ - [window release]; - [glView release]; - - [super dealloc]; -} - -@end diff --git a/GPU_SIFT/Info.plist b/GPU_SIFT/Info.plist new file mode 100644 index 0000000..2acebee --- /dev/null +++ b/GPU_SIFT/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + framework.GPU-SIFT + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/GPU_SIFT/KeyPoint.h b/GPU_SIFT/KeyPoint.h index 487d6a8..9748dd2 100644 --- a/GPU_SIFT/KeyPoint.h +++ b/GPU_SIFT/KeyPoint.h @@ -1,6 +1,10 @@ //Simple class to store and update keypoints. //contains key point coordinates, scale, octave, main orientation and descriptor. +#ifdef __OBJC__ +#import +#import +#endif @interface KeyPoint : NSObject { @@ -10,23 +14,24 @@ float s; int t; uint8_t * d; - } -- (int) x; -- (int) y; -- (int) level; -- (int) t; -- (uint8_t *) d; -- (int) getX; -- (int) getY; -- (int) getLevel; -- (int) getT; -- (float) getS; -- (uint8_t *) getD; -- (void) initParamsX:(int)u Y:(int)v Level:(int)sig; -- (void) setTheta:(int)th; -- (void) setDesc:(uint8_t *)desc; -- (void) setS:(float)scale; -@end +- (int)x; +- (int)y; +- (int)level; +- (int)t; +- (uint8_t *)d; +- (int)getX; +- (int)getY; +- (int)getLevel; +- (int)getT; +- (float)getS; +- (uint8_t *)getD; +- (void)initParamsX:(int)u Y:(int)v Level:(int)sig; +- (void)setTheta:(int)th; +- (void)setDesc:(uint8_t *)desc; +- (void)setS:(float)scale; +- (CGPoint)cgPoint; +- (NSString *)description; +@end diff --git a/GPU_SIFT/KeyPoint.m b/GPU_SIFT/KeyPoint.m index 06deeca..3c70965 100644 --- a/GPU_SIFT/KeyPoint.m +++ b/GPU_SIFT/KeyPoint.m @@ -1,84 +1,93 @@ #include "KeyPoint.h" - @implementation KeyPoint -- (int) x +- (int)x { return x; } -- (int) y +- (int)y { return y; } -- (int) level +- (int)level { return level; } -- (int) t +- (int)t { return t; } -- (uint8_t *) d +- (uint8_t *)d { return d; } -- (int) getX +- (int)getX { return x; } -- (int) getY +- (int)getY { return y; } -- (int) getLevel +- (int)getLevel { return level; } -- (int) getT +- (int)getT { return t; } -- (uint8_t *) getD +- (uint8_t *)getD { return d; } -- (float) getS +- (float)getS { return s; } -- (void) initParamsX:(int)u Y:(int)v Level:(int)l +- (void)initParamsX:(int)u Y:(int)v Level:(int)l { - x=u; - y=v; - level=l; - s=1.6*pow(sqrt(sqrt(2)),(float)level); + x = u; + y = v; + level = l; + s = 1.6*pow(sqrt(sqrt(2)),(float)level); } -- (void) setTheta:(int)th +- (void)setTheta:(int)th { - t=th; + t = th; } -- (void) setDesc:(uint8_t *)desc +- (void)setDesc:(uint8_t *)desc { d = desc; } -- (void) setS:(float)scale +- (void)setS:(float)scale +{ + s = scale; +} + +- (CGPoint)cgPoint +{ + return CGPointMake(x, y); +} + +- (NSString *)description { - s=scale; + return NSStringFromCGPoint([self cgPoint]); } -@end \ No newline at end of file +@end diff --git a/GPU_SIFT/MainWindow.xib b/GPU_SIFT/MainWindow.xib deleted file mode 100644 index 55ba9c0..0000000 --- a/GPU_SIFT/MainWindow.xib +++ /dev/null @@ -1,262 +0,0 @@ - - - - 512 - 10J869 - 851 - 1038.35 - 461.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 141 - - - YES - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - YES - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - IBCocoaTouchFramework - - - - 1292 - - YES - - - 1292 - {320, 480} - - - 3 - MQA - - 2 - - - NO - IBCocoaTouchFramework - - - - {320, 480} - - 1 - MSAxIDEAA - - NO - IBCocoaTouchFramework - YES - - - - - YES - - - delegate - - - - 4 - - - - window - - - - 5 - - - - glView - - - - 9 - - - - - YES - - 0 - - - - - - 2 - - - YES - - - - - - -1 - - - File's Owner - - - 3 - - - - - 8 - - - - - -2 - - - - - - - YES - - YES - -1.CustomClassName - -2.CustomClassName - 2.IBAttributePlaceholdersKey - 2.IBEditorWindowLastContentRect - 2.IBPluginDependency - 3.CustomClassName - 3.IBPluginDependency - 8.CustomClassName - 8.IBPluginDependency - - - YES - UIApplication - UIResponder - - YES - - - YES - - - {{726, 594}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - GPU_SIFTAppDelegate - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - SIFT - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - YES - - - - - YES - - - YES - - - - 9 - - - - YES - - GPU_SIFTAppDelegate - NSObject - - YES - - YES - glView - window - - - YES - SIFT - UIWindow - - - - YES - - YES - glView - window - - - YES - - glView - SIFT - - - window - UIWindow - - - - - IBProjectSource - Classes/GPU_SIFTAppDelegate.h - - - - SIFT - UIView - - IBUserSource - - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - GLSprite.xcodeproj - 3 - 141 - - diff --git a/GPU_SIFT/SIFT.h b/GPU_SIFT/SIFT.h index fa2d143..9eee70b 100644 --- a/GPU_SIFT/SIFT.h +++ b/GPU_SIFT/SIFT.h @@ -50,7 +50,8 @@ GLfloat gaussCoord[8]; } --(void) initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct; --(NSMutableArray*) computeSiftOnCGImage:(CGImageRef)picture; +- (instancetype _Nonnull)init; +- (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct; +- (NSMutableArray * _Nonnull)computeSiftOn:(CGImageRef _Nonnull)cgImage; @end diff --git a/GPU_SIFT/SIFT.m b/GPU_SIFT/SIFT.m index eb990a1..633dbdb 100644 --- a/GPU_SIFT/SIFT.m +++ b/GPU_SIFT/SIFT.m @@ -8,7 +8,7 @@ #include #endif -#include "keyPoint.h" +#include "KeyPoint.h" @interface SIFT (EAGLViewSprite) @@ -23,6 +23,27 @@ + (Class) layerClass return [CAEAGLLayer class]; } +- (instancetype _Nonnull)init +{ + if (self = [super init]) { + // Get the layer + CAEAGLLayer *eaglLayer = (CAEAGLLayer*) self.layer; + + eaglLayer.opaque = YES; + eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithBool:FALSE], kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil]; + + context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; + + if(!context || ![EAGLContext setCurrentContext:context]) { + return nil; + } + + [EAGLContext setCurrentContext:context]; + } + + return self; +} - (id)initWithCoder:(NSCoder*)coder { @@ -37,14 +58,13 @@ - (id)initWithCoder:(NSCoder*)coder context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; if(!context || ![EAGLContext setCurrentContext:context]) { - [self release]; return nil; } [EAGLContext setCurrentContext:context]; } - return self; + return self; } #ifdef _ARM_ARCH_7 @@ -56,15 +76,15 @@ void neon_convert (uint8_t * __restrict dest, uint8_t * __restrict src, int widt uint8x8_t rfac = vdup_n_u8 (77); uint8x8_t gfac = vdup_n_u8 (151); uint8x8_t bfac = vdup_n_u8 (28); - src+=(height-1)*width*4; + src += (height - 1) * width * 4; // Convert per eight pixels - for (i=height-1; i>=0; --i) + for (i = height - 1; i >= 0; --i) { - for (j=0; j=0; --i) + int k = (height - 1) * width * 4; + int l = 0; + for (int i = height - 1; i >= 0; --i) { - for (int j=0; j0.2 ? 0.2 : v; } //norm s = 0.0; - for (int j=0; j<128; j++) { - s+=clamp[j]*clamp[j]; + for (int j = 0; j < 128; j++) { + s += clamp[j] * clamp[j]; } - s=sqrt(s)/255.0; + s = sqrt(s)/255.0; //output uint8_t * values = (uint8_t *) calloc(128, sizeof(uint8_t)); - for (int j=0; j<128; j++) { - values[j]=(int)(2.0*clamp[j]/s); + for (int j = 0; j < 128; j++) { + values[j] = (int)(2.0*clamp[j]/s); } [[tab objectAtIndex:i] setDesc:values]; } @@ -208,7 +228,8 @@ GLuint BuildShader(NSString* filename, GLenum shaderType) { NSString* ext = shaderType==GL_VERTEX_SHADER ? @"vsh" : @"fsh"; - const char* source = filetobuf([[[NSBundle mainBundle] pathForResource:filename ofType:ext inDirectory:nil] cStringUsingEncoding:NSUTF8StringEncoding]); + const char *file = [[[NSBundle mainBundle] pathForResource:filename ofType:ext inDirectory:nil] cStringUsingEncoding:NSUTF8StringEncoding]; + const char* source = filetobuf(file); GLuint shaderHandle = glCreateShader(shaderType); glShaderSource(shaderHandle, 1, &source, 0); glCompileShader(shaderHandle); @@ -248,15 +269,29 @@ GLuint BuildProgram(NSString* vertexShaderFilename, NSString* fragmentShaderFile - (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct { - width=picWidth; - height=picHeight; + width = picWidth; + height = picHeight; NB_OCT = oct; // Full screen writing coordinates - writingPosition[0] = -1.0; writingPosition[1] = -1.0; writingPosition[2] = 1.0; writingPosition[3] = -1.0; writingPosition[4] = -1.0; writingPosition[5] = 1.0; writingPosition[6] = 1.0; writingPosition[7] = 1.0; + writingPosition[0] = -1.0; + writingPosition[1] = -1.0; + writingPosition[2] = 1.0; + writingPosition[3] = -1.0; + writingPosition[4] = -1.0; + writingPosition[5] = 1.0; + writingPosition[6] = 1.0; + writingPosition[7] = 1.0; // Fulle screen reading coordinates - readingPosition[0] = 0.0; readingPosition[1] = 0.0; readingPosition[2] = 1.0; readingPosition[3] = 0.0; readingPosition[4] = 0.0; readingPosition[5] = 1.0; readingPosition[6] = 1.0; readingPosition[7] = 1.0; + readingPosition[0] = 0.0; + readingPosition[1] = 0.0; + readingPosition[2] = 1.0; + readingPosition[3] = 0.0; + readingPosition[4] = 0.0; + readingPosition[5] = 1.0; + readingPosition[6] = 1.0; + readingPosition[7] = 1.0; // kernel values @@ -265,22 +300,22 @@ - (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct const float sigmaUp[4] = {sigmas[3], sigmas[4], sigmas[5], sigmas[6]}; sigma[0] = sigmas[1]; sigma[1] = sigmas[2]; sigma[2] = sigmas[3]; sigma[3] = sigmas[4]; - for (int i=0; i<15; i++) { - for (int j=0; j<4; j++) { - coeffDown0[4*i+j]=exp(-(float)(i)*(float)(i)/(2.0*sigmaDown[j]*sigmaDown[j]))/sqrt(2.0*3.14159*sigmaDown[j]*sigmaDown[j]); - coeffDown1[4*i+j]= i==0 ? 1.0 : exp(-(float)(i)*(float)(i)/(2.0*sigmaDown[j]*sigmaDown[j]))/sqrt(2.0*3.14159*sigmaDown[j]*sigmaDown[j]); + for (int i = 0; i < 15; i++) { + for (int j = 0; j < 4; j++) { + coeffDown0[4*i+j] = exp(-(float)(i)*(float)(i)/(2.0*sigmaDown[j]*sigmaDown[j]))/sqrt(2.0*3.14159*sigmaDown[j]*sigmaDown[j]); + coeffDown1[4*i+j] = i==0 ? 1.0 : exp(-(float)(i)*(float)(i)/(2.0*sigmaDown[j]*sigmaDown[j]))/sqrt(2.0*3.14159*sigmaDown[j]*sigmaDown[j]); } } - for (int i=0; i<15; i++) { - for (int j=0; j<4; j++) { - coeffUp0[4*i+j]=exp(-(float)(i)*(float)(i)/(2.0*sigmaUp[j]*sigmaUp[j]))/sqrt(2.0*3.14159*sigmaUp[j]*sigmaUp[j]); - coeffUp1[4*i+j]= i==0 ? 1.0 : exp(-(float)(i)*(float)(i)/(2.0*sigmaUp[j]*sigmaUp[j]))/sqrt(2.0*3.14159*sigmaUp[j]*sigmaUp[j]); + for (int i = 0; i < 15; i++) { + for (int j = 0; j < 4; j++) { + coeffUp0[4*i+j] = exp(-(float)(i)*(float)(i)/(2.0*sigmaUp[j]*sigmaUp[j]))/sqrt(2.0*3.14159*sigmaUp[j]*sigmaUp[j]); + coeffUp1[4*i+j] = i==0 ? 1.0 : exp(-(float)(i)*(float)(i)/(2.0*sigmaUp[j]*sigmaUp[j]))/sqrt(2.0*3.14159*sigmaUp[j]*sigmaUp[j]); } } - float sigmaDoG=1.8; - for (int i=0; i<8; i++) { - coeffDoG[i]=exp(-(float)(i)*(float)(i)/(2.0*sigmaDoG*sigmaDoG))/sqrt(2.0*3.14159*sigmaDoG*sigmaDoG); + float sigmaDoG = 1.8; + for (int i = 0; i < 8; i++) { + coeffDoG[i] = exp(-(float)(i)*(float)(i)/(2.0*sigmaDoG*sigmaDoG))/sqrt(2.0*3.14159*sigmaDoG*sigmaDoG); } @@ -292,9 +327,9 @@ - (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - uint8_t* gaussData=(uint8_t*) calloc(16*16, sizeof(uint8_t)); - for (int i=-8; i<8; i++) { - for (int j=-8; j<8; j++) { + uint8_t* gaussData = (uint8_t*) calloc(16*16, sizeof(uint8_t)); + for (int i =- 8; i < 8; i++) { + for (int j =- 8; j < 8; j++) { gaussData[16*(i+8)+j+8] = (uint8_t)(255.0*exp(-(float)((i+0.5)*(i+0.5) + (j+0.5)*(j+0.5))/(2.0*2.25))); } } @@ -309,8 +344,8 @@ - (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); uint8_t* gaussData2=(uint8_t*) calloc(32*32, sizeof(uint8_t)); - for (int i=-16; i<16; i++) { - for (int j=-16; j<16; j++) { + for (int i =- 16; i < 16; i++) { + for (int j =- 16; j < 16; j++) { gaussData2[32*(i+16)+j+16] = (uint8_t)(255.0*exp(-(float)((i+0.5)*(i+0.5) + (j+0.5)*(j+0.5))/(2.0*64.0))); } } @@ -319,7 +354,14 @@ - (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct // Special texture coordinates for this gaussian: - gaussCoord[0] = 5.0/32.0; gaussCoord[1] = 5.0/32.0; gaussCoord[2] = 27.0/32.0; gaussCoord[3] = 5.0/32.0; gaussCoord[4] = 5.0/32.0; gaussCoord[5] = 27.0/32.0; gaussCoord[6] = 27.0/32.0; gaussCoord[7] = 27.0/32.0; + gaussCoord[0] = 5.0/32.0; + gaussCoord[1] = 5.0/32.0; + gaussCoord[2] = 27.0/32.0; + gaussCoord[3] = 5.0/32.0; + gaussCoord[4] = 5.0/32.0; + gaussCoord[5] = 27.0/32.0; + gaussCoord[6] = 27.0/32.0; + gaussCoord[7] = 27.0/32.0; @@ -330,10 +372,10 @@ - (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct //printer init printer = BuildProgram(@"vertex",@"printer"); glUseProgram(printer); - printerWritingPosition=glGetAttribLocation(printer, "writingPosition"); + printerWritingPosition = glGetAttribLocation(printer, "writingPosition"); glVertexAttribPointer(printerWritingPosition, 2, GL_SHORT, GL_FALSE, 0, writingPosition); glEnableVertexAttribArray(printerWritingPosition); - printerReadingPosition=glGetAttribLocation(printer, "readingPosition"); + printerReadingPosition = glGetAttribLocation(printer, "readingPosition"); glVertexAttribPointer(printerReadingPosition, 2, GL_SHORT, GL_FALSE, 0, readingPosition); glEnableVertexAttribArray(printerReadingPosition); printerPic0 = glGetUniformLocation(printer, "pic"); @@ -342,10 +384,10 @@ - (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct //gradient init grad = BuildProgram(@"vertex",@"gradient"); glUseProgram(grad); - gradWritingPosition=glGetAttribLocation(grad, "writingPosition"); + gradWritingPosition = glGetAttribLocation(grad, "writingPosition"); glVertexAttribPointer(gradWritingPosition, 2, GL_SHORT, GL_FALSE, 0, writingPosition); glEnableVertexAttribArray(gradWritingPosition); - gradReadingPosition=glGetAttribLocation(grad, "readingPosition"); + gradReadingPosition = glGetAttribLocation(grad, "readingPosition"); glVertexAttribPointer(gradReadingPosition, 2, GL_SHORT, GL_FALSE, 0, readingPosition); glEnableVertexAttribArray(gradReadingPosition); gradPic0 = glGetUniformLocation(grad, "pic0"); @@ -357,10 +399,10 @@ - (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct //smoothDouble init, computes high precision smoothing in 2 pass smoothDouble = BuildProgram(@"vertex", @"smoothDouble"); glUseProgram(smoothDouble); - smoothDoubleWritingPosition=glGetAttribLocation(smoothDouble, "writingPosition"); + smoothDoubleWritingPosition = glGetAttribLocation(smoothDouble, "writingPosition"); glVertexAttribPointer(smoothDoubleWritingPosition, 2, GL_SHORT, GL_FALSE, 0, writingPosition); glEnableVertexAttribArray(smoothDoubleWritingPosition); - smoothDoubleReadingPosition=glGetAttribLocation(smoothDouble, "readingPosition"); + smoothDoubleReadingPosition = glGetAttribLocation(smoothDouble, "readingPosition"); glVertexAttribPointer(smoothDoubleReadingPosition, 2, GL_SHORT, GL_FALSE, 0, readingPosition); glEnableVertexAttribArray(smoothDoubleReadingPosition); smoothDoubleGaussianCoeff = glGetUniformLocation(smoothDouble, "gaussianCoeff"); @@ -371,10 +413,10 @@ - (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct //smooth init, more approximate version used to smooth DoG results smooth = BuildProgram(@"vertex", @"smooth"); glUseProgram(smooth); - smoothWritingPosition=glGetAttribLocation(smooth, "writingPosition"); + smoothWritingPosition = glGetAttribLocation(smooth, "writingPosition"); glVertexAttribPointer(smoothWritingPosition, 2, GL_SHORT, GL_FALSE, 0, writingPosition); glEnableVertexAttribArray(smoothWritingPosition); - smoothReadingPosition=glGetAttribLocation(smooth, "readingPosition"); + smoothReadingPosition = glGetAttribLocation(smooth, "readingPosition"); glVertexAttribPointer(smoothReadingPosition, 2, GL_SHORT, GL_FALSE, 0, readingPosition); glEnableVertexAttribArray(smoothReadingPosition); smoothGaussianCoeff = glGetUniformLocation(smooth, "gaussianCoeff"); @@ -384,10 +426,10 @@ - (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct //dog init dog=BuildProgram(@"vertex", @"dog"); glUseProgram(dog); - dogWritingPosition=glGetAttribLocation(dog, "writingPosition"); + dogWritingPosition = glGetAttribLocation(dog, "writingPosition"); glVertexAttribPointer(dogWritingPosition, 2, GL_SHORT, GL_FALSE, 0, writingPosition); glEnableVertexAttribArray(dogWritingPosition); - dogReadingPosition=glGetAttribLocation(dog, "readingPosition"); + dogReadingPosition = glGetAttribLocation(dog, "readingPosition"); glVertexAttribPointer(dogReadingPosition, 2, GL_SHORT, GL_FALSE, 0, readingPosition); glEnableVertexAttribArray(dogReadingPosition); dogPic0 = glGetUniformLocation(dog, "pic"); @@ -396,10 +438,10 @@ - (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct //NMS init nms=BuildProgram(@"vertex", @"nms"); glUseProgram(nms); - nmsWritingPosition=glGetAttribLocation(nms, "writingPosition"); + nmsWritingPosition = glGetAttribLocation(nms, "writingPosition"); glVertexAttribPointer(nmsWritingPosition, 2, GL_SHORT, GL_FALSE, 0, writingPosition); glEnableVertexAttribArray(nmsWritingPosition); - nmsReadingPosition=glGetAttribLocation(nms, "readingPosition"); + nmsReadingPosition = glGetAttribLocation(nms, "readingPosition"); glVertexAttribPointer(nmsReadingPosition, 2, GL_SHORT, GL_FALSE, 0, readingPosition); glEnableVertexAttribArray(nmsReadingPosition); nmsWidth = glGetUniformLocation(nms, "width"); @@ -409,9 +451,9 @@ - (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct //Edge Response Suppression init - edgeSuppression=BuildProgram(@"vertex0", @"edgeSuppression"); + edgeSuppression = BuildProgram(@"vertex0", @"edgeSuppression"); glUseProgram(edgeSuppression); - edgeSuppressionWritingPosition=glGetAttribLocation(edgeSuppression, "writingPosition"); + edgeSuppressionWritingPosition = glGetAttribLocation(edgeSuppression, "writingPosition"); glEnableVertexAttribArray(edgeSuppressionWritingPosition); edgeSuppressionPic0 = glGetUniformLocation(edgeSuppression, "pic0"); edgeSuppressionPic1 = glGetUniformLocation(edgeSuppression, "pic1"); @@ -422,45 +464,45 @@ - (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct //orientation init - orientation=BuildProgram(@"vertex2", @"orientation"); + orientation = BuildProgram(@"vertex2", @"orientation"); glUseProgram(orientation); - orientationWritingPosition=glGetAttribLocation(orientation, "writingPosition"); + orientationWritingPosition = glGetAttribLocation(orientation, "writingPosition"); glEnableVertexAttribArray(orientationWritingPosition); - orientationReadingPosition0=glGetAttribLocation(orientation, "readingPositionGrad"); + orientationReadingPosition0 = glGetAttribLocation(orientation, "readingPositionGrad"); glEnableVertexAttribArray(orientationReadingPosition0); - orientationReadingPosition1=glGetAttribLocation(orientation, "readingPositionGauss"); + orientationReadingPosition1 = glGetAttribLocation(orientation, "readingPositionGauss"); glVertexAttribPointer(orientationReadingPosition1, 2, GL_SHORT, GL_FALSE, 0, readingPosition); glEnableVertexAttribArray(orientationReadingPosition1); - orientationPicGradx=glGetUniformLocation(orientation, "gradx"); - orientationPicGrady=glGetUniformLocation(orientation, "grady"); - orientationPicGauss=glGetUniformLocation(orientation, "gauss"); - orientationScale=glGetUniformLocation(orientation, "scale"); - orientationTheta=glGetUniformLocation(orientation, "theta"); + orientationPicGradx = glGetUniformLocation(orientation, "gradx"); + orientationPicGrady = glGetUniformLocation(orientation, "grady"); + orientationPicGauss = glGetUniformLocation(orientation, "gauss"); + orientationScale = glGetUniformLocation(orientation, "scale"); + orientationTheta = glGetUniformLocation(orientation, "theta"); //main orientation init - mainOrientation=BuildProgram(@"vertex", @"mainOrientation"); + mainOrientation = BuildProgram(@"vertex", @"mainOrientation"); glUseProgram(mainOrientation); - mainOrientationWritingPosition=glGetAttribLocation(mainOrientation, "writingPosition"); + mainOrientationWritingPosition = glGetAttribLocation(mainOrientation, "writingPosition"); glVertexAttribPointer(mainOrientationWritingPosition, 2, GL_SHORT, GL_FALSE, 0, writingPosition); glEnableVertexAttribArray(mainOrientationWritingPosition); - mainOrientationReadingPosition=glGetAttribLocation(mainOrientation, "readingPosition"); + mainOrientationReadingPosition = glGetAttribLocation(mainOrientation, "readingPosition"); glVertexAttribPointer(mainOrientationReadingPosition, 2, GL_SHORT, GL_FALSE, 0, readingPosition); glEnableVertexAttribArray(mainOrientationReadingPosition); - mainOrientationSize=glGetUniformLocation(mainOrientation, "sqSize"); - mainOrientationPic0=glGetUniformLocation(mainOrientation, "pic0"); + mainOrientationSize = glGetUniformLocation(mainOrientation, "sqSize"); + mainOrientationPic0 = glGetUniformLocation(mainOrientation, "pic0"); //descriptor init - descriptor=BuildProgram(@"vertex", @"descriptor"); + descriptor = BuildProgram(@"vertex", @"descriptor"); glUseProgram(descriptor); - descriptorWritingPosition=glGetAttribLocation(descriptor, "writingPosition"); + descriptorWritingPosition = glGetAttribLocation(descriptor, "writingPosition"); glVertexAttribPointer(descriptorWritingPosition, 2, GL_SHORT, GL_FALSE, 0, writingPosition); glEnableVertexAttribArray(descriptorWritingPosition); - descriptorReadingPosition=glGetAttribLocation(descriptor, "readingPosition"); + descriptorReadingPosition = glGetAttribLocation(descriptor, "readingPosition"); glVertexAttribPointer(descriptorReadingPosition, 2, GL_SHORT, GL_FALSE, 0, readingPosition); glEnableVertexAttribArray(descriptorReadingPosition); - descriptorSize=glGetUniformLocation(descriptor, "sqSize"); - descriptorPic0=glGetUniformLocation(descriptor, "pic0"); + descriptorSize = glGetUniformLocation(descriptor, "sqSize"); + descriptorPic0 = glGetUniformLocation(descriptor, "pic0"); // ---------------------- BUFFERS AND TEXTURES INITIALIZATION -------------------- @@ -661,7 +703,7 @@ - (void)initWithWidth:(int)picWidth Height:(int)picHeight Octaves:(int)oct --(NSMutableArray*) computeSiftOnCGImage:(CGImageRef)picture +- (NSMutableArray * _Nonnull)computeSiftOn:(CGImageRef _Nonnull)cgImage { //for debugging @@ -675,7 +717,7 @@ -(NSMutableArray*) computeSiftOnCGImage:(CGImageRef)picture grayData = (uint8_t *) calloc(width * height * 4, sizeof(uint8_t)); //Loading and converting image - CGDataProviderRef dataRef = CGImageGetDataProvider(picture); + CGDataProviderRef dataRef = CGImageGetDataProvider(cgImage); CFDataRef data = CGDataProviderCopyData(dataRef); originalData = (GLubyte *) CFDataGetBytePtr(data); neon_convert(grayData, originalData, width, height); @@ -688,8 +730,8 @@ -(NSMutableArray*) computeSiftOnCGImage:(CGImageRef)picture double tdetect0 = [[NSDate date] timeIntervalSince1970]; - int w=width; - int h=height; + int w = width; + int h = height; for (int i=0; iPrG5QSgcMs_@oKrB#}v&;s>&jm(Sf|RWjwg}rXFu~Yhlfcp!$UZ0G6dZs9 zZ~$&#UR5_kPiBTqSVW@Q>Mm=hURU+kWsiCQxZ(Nf6JQTOk6rA&ghNe}`_e0|6|Ov> zb<_io@EU8pJ(@446>qy>1dM*SQgW_qWCC{R$IP}aveZo+xvY}?uTg2;2%B!P|M421)vGkaORD%AT4l6- zeC9e9{50;LR$82&v*$m_Su+ARC(!m&?8*86u=)M}%>&sCM!*Q%S^}RwW$tI8Lj_aoTVkSKpMbqRE2Yc*`qn_98$r*kA;VfDtePM!*Od Y0V7}pjDQg^0!F|H7y%<-1pX<3Uo@{CkpKVy diff --git a/GPU_SIFT/main.m b/GPU_SIFT/main.m deleted file mode 100644 index b42b90c..0000000 --- a/GPU_SIFT/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// GPU_SIFT -// -// Created by Maxime Brénon on 15/09/11. -// Copyright 2011 __MyCompanyName__. All rights reserved. -// - -#import - -int main(int argc, char *argv[]) -{ - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - int retVal = UIApplicationMain(argc, argv, nil, nil); - [pool release]; - return retVal; -}