Full Code of subhan-nadeem/EZShop for AI

master 4062df30f514 cached
504 files
102.9 MB
1.2M tokens
168 symbols
1 requests
Download .txt
Showing preview only (4,681K chars total). Download the full file or copy to clipboard to get everything.
Repository: subhan-nadeem/EZShop
Branch: master
Commit: 4062df30f514
Files: 504
Total size: 102.9 MB

Directory structure:
gitextract_e8a7ey4n/

├── .gitignore
├── Android/
│   ├── FaceTracker/
│   │   ├── .gitignore
│   │   ├── FaceTracker.iml
│   │   ├── app/
│   │   │   ├── .gitignore
│   │   │   ├── app.iml
│   │   │   ├── build.gradle
│   │   │   ├── google-services.json
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       └── main/
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── com/
│   │   │           │       └── subhan_nadeem/
│   │   │           │           └── android/
│   │   │           │               └── gms/
│   │   │           │                   └── samples/
│   │   │           │                       └── vision/
│   │   │           │                           └── face/
│   │   │           │                               └── facetracker/
│   │   │           │                                   ├── App.java
│   │   │           │                                   ├── FaceGraphic.java
│   │   │           │                                   ├── FaceProximityListener.java
│   │   │           │                                   ├── activities/
│   │   │           │                                   │   ├── FaceTrackingActivity.java
│   │   │           │                                   │   └── SelectPurposeActivity.java
│   │   │           │                                   ├── models/
│   │   │           │                                   │   ├── RecognitionCandidate.java
│   │   │           │                                   │   └── User.java
│   │   │           │                                   └── ui/
│   │   │           │                                       └── camera/
│   │   │           │                                           ├── CameraSourcePreview.java
│   │   │           │                                           └── GraphicOverlay.java
│   │   │           └── res/
│   │   │               ├── layout/
│   │   │               │   ├── activity_select_purpose.xml
│   │   │               │   └── main.xml
│   │   │               ├── layout-land/
│   │   │               │   └── main.xml
│   │   │               └── values/
│   │   │                   ├── attrs.xml
│   │   │                   ├── colors.xml
│   │   │                   ├── strings.xml
│   │   │                   └── styles.xml
│   │   ├── build.gradle
│   │   ├── gradle/
│   │   │   └── wrapper/
│   │   │       ├── gradle-wrapper.jar
│   │   │       └── gradle-wrapper.properties
│   │   ├── gradle.properties
│   │   ├── gradlew
│   │   ├── gradlew.bat
│   │   ├── libs/
│   │   │   └── KairosSDK.jar
│   │   └── settings.gradle
│   └── README.md
├── Backend/
│   └── README.md
├── README.md
├── iOS/
│   ├── Manager/
│   │   └── EZShopManager/
│   │       ├── EZShopManager/
│   │       │   ├── ActivitiyIndicator.swift
│   │       │   ├── AppDelegate.swift
│   │       │   ├── Assets.xcassets/
│   │       │   │   ├── AppIcon.appiconset/
│   │       │   │   │   └── Contents.json
│   │       │   │   ├── CameraSquare.imageset/
│   │       │   │   │   └── Contents.json
│   │       │   │   ├── Contents.json
│   │       │   │   ├── cat.imageset/
│   │       │   │   │   └── Contents.json
│   │       │   │   ├── logo.imageset/
│   │       │   │   │   └── Contents.json
│   │       │   │   ├── medical-notes-symbol-of-a-list-paper-on-a-clipboard.imageset/
│   │       │   │   │   └── Contents.json
│   │       │   │   ├── squarePNG.imageset/
│   │       │   │   │   └── Contents.json
│   │       │   │   ├── store.imageset/
│   │       │   │   │   └── Contents.json
│   │       │   │   └── user.imageset/
│   │       │   │       └── Contents.json
│   │       │   ├── Base.lproj/
│   │       │   │   ├── LaunchScreen.storyboard
│   │       │   │   └── Main.storyboard
│   │       │   ├── CLFaceDetectionImagePicker.storyboard
│   │       │   ├── CLFaceDetectionImagePickerViewController.h
│   │       │   ├── CLFaceDetectionImagePickerViewController.m
│   │       │   ├── EZShopManager-Bridging-Header.h
│   │       │   ├── EnrollViewController.swift
│   │       │   ├── GoogleService-Info.plist
│   │       │   ├── Info.plist
│   │       │   ├── InventoriesViewController.swift
│   │       │   ├── Item.swift
│   │       │   ├── JGUtils.swift
│   │       │   ├── MySplitViewController.swift
│   │       │   ├── UIImage+CL.h
│   │       │   ├── UIImage+CL.m
│   │       │   ├── User.swift
│   │       │   ├── UserDetailsViewController.swift
│   │       │   ├── UsersTableViewController.swift
│   │       │   └── kairos.swift
│   │       ├── EZShopManager.xcodeproj/
│   │       │   ├── project.pbxproj
│   │       │   ├── project.xcworkspace/
│   │       │   │   ├── contents.xcworkspacedata
│   │       │   │   └── xcuserdata/
│   │       │   │       └── jchoi.xcuserdatad/
│   │       │   │           └── UserInterfaceState.xcuserstate
│   │       │   └── xcuserdata/
│   │       │       └── jchoi.xcuserdatad/
│   │       │           └── xcschemes/
│   │       │               ├── EZShopManager.xcscheme
│   │       │               └── xcschememanagement.plist
│   │       ├── EZShopManager.xcworkspace/
│   │       │   ├── contents.xcworkspacedata
│   │       │   └── xcuserdata/
│   │       │       └── jchoi.xcuserdatad/
│   │       │           ├── UserInterfaceState.xcuserstate
│   │       │           └── xcdebugger/
│   │       │               └── Breakpoints_v2.xcbkptlist
│   │       ├── Podfile
│   │       └── Pods/
│   │           ├── Alamofire/
│   │           │   ├── LICENSE
│   │           │   ├── README.md
│   │           │   └── Source/
│   │           │       ├── AFError.swift
│   │           │       ├── Alamofire.swift
│   │           │       ├── DispatchQueue+Alamofire.swift
│   │           │       ├── MultipartFormData.swift
│   │           │       ├── NetworkReachabilityManager.swift
│   │           │       ├── Notifications.swift
│   │           │       ├── ParameterEncoding.swift
│   │           │       ├── Request.swift
│   │           │       ├── Response.swift
│   │           │       ├── ResponseSerialization.swift
│   │           │       ├── Result.swift
│   │           │       ├── ServerTrustPolicy.swift
│   │           │       ├── SessionDelegate.swift
│   │           │       ├── SessionManager.swift
│   │           │       ├── TaskDelegate.swift
│   │           │       ├── Timeline.swift
│   │           │       └── Validation.swift
│   │           ├── AlamofireSwiftyJSON/
│   │           │   ├── LICENSE
│   │           │   ├── README.md
│   │           │   └── Source/
│   │           │       └── AlamofireSwiftyJSON.swift
│   │           ├── Firebase/
│   │           │   ├── Core/
│   │           │   │   └── Sources/
│   │           │   │       ├── Firebase.h
│   │           │   │       └── module.modulemap
│   │           │   └── README.md
│   │           ├── FirebaseAnalytics/
│   │           │   └── Frameworks/
│   │           │       └── FirebaseAnalytics.framework/
│   │           │           ├── FirebaseAnalytics
│   │           │           ├── Headers/
│   │           │           │   ├── FIRAnalytics+AppDelegate.h
│   │           │           │   ├── FIRAnalytics.h
│   │           │           │   ├── FIRAnalyticsConfiguration.h
│   │           │           │   ├── FIRApp.h
│   │           │           │   ├── FIRConfiguration.h
│   │           │           │   ├── FIREventNames.h
│   │           │           │   ├── FIROptions.h
│   │           │           │   ├── FIRParameterNames.h
│   │           │           │   ├── FIRUserPropertyNames.h
│   │           │           │   └── FirebaseAnalytics.h
│   │           │           └── Modules/
│   │           │               └── module.modulemap
│   │           ├── FirebaseCore/
│   │           │   └── Frameworks/
│   │           │       └── FirebaseCore.framework/
│   │           │           ├── FirebaseCore
│   │           │           ├── Headers/
│   │           │           │   ├── FIRAnalyticsConfiguration.h
│   │           │           │   ├── FIRApp.h
│   │           │           │   ├── FIRConfiguration.h
│   │           │           │   ├── FIRLoggerLevel.h
│   │           │           │   ├── FIROptions.h
│   │           │           │   └── FirebaseCore.h
│   │           │           └── Modules/
│   │           │               └── module.modulemap
│   │           ├── FirebaseDatabase/
│   │           │   └── Frameworks/
│   │           │       └── FirebaseDatabase.framework/
│   │           │           ├── FirebaseDatabase
│   │           │           ├── Headers/
│   │           │           │   ├── FIRDataEventType.h
│   │           │           │   ├── FIRDataSnapshot.h
│   │           │           │   ├── FIRDatabase.h
│   │           │           │   ├── FIRDatabaseQuery.h
│   │           │           │   ├── FIRDatabaseReference.h
│   │           │           │   ├── FIRMutableData.h
│   │           │           │   ├── FIRServerValue.h
│   │           │           │   ├── FIRTransactionResult.h
│   │           │           │   └── FirebaseDatabase.h
│   │           │           ├── Info.plist
│   │           │           ├── Modules/
│   │           │           │   └── module.modulemap
│   │           │           └── NOTICE
│   │           ├── FirebaseInstanceID/
│   │           │   ├── CHANGELOG.md
│   │           │   ├── Frameworks/
│   │           │   │   └── FirebaseInstanceID.framework/
│   │           │   │       ├── FirebaseInstanceID
│   │           │   │       ├── Headers/
│   │           │   │       │   ├── FIRInstanceID.h
│   │           │   │       │   └── FirebaseInstanceID.h
│   │           │   │       └── Modules/
│   │           │   │           └── module.modulemap
│   │           │   └── README.md
│   │           ├── FirebaseStorage/
│   │           │   └── Frameworks/
│   │           │       └── FirebaseStorage.framework/
│   │           │           ├── FirebaseStorage
│   │           │           ├── Headers/
│   │           │           │   ├── FIRStorage.h
│   │           │           │   ├── FIRStorageConstants.h
│   │           │           │   ├── FIRStorageDownloadTask.h
│   │           │           │   ├── FIRStorageMetadata.h
│   │           │           │   ├── FIRStorageObservableTask.h
│   │           │           │   ├── FIRStorageReference.h
│   │           │           │   ├── FIRStorageTask.h
│   │           │           │   ├── FIRStorageTaskSnapshot.h
│   │           │           │   ├── FIRStorageUploadTask.h
│   │           │           │   └── FirebaseStorage.h
│   │           │           └── Modules/
│   │           │               └── module.modulemap
│   │           ├── GTMSessionFetcher/
│   │           │   ├── LICENSE
│   │           │   ├── README.md
│   │           │   └── Source/
│   │           │       ├── GTMSessionFetcher.h
│   │           │       ├── GTMSessionFetcher.m
│   │           │       ├── GTMSessionFetcherLogging.h
│   │           │       ├── GTMSessionFetcherLogging.m
│   │           │       ├── GTMSessionFetcherService.h
│   │           │       ├── GTMSessionFetcherService.m
│   │           │       ├── GTMSessionUploadFetcher.h
│   │           │       └── GTMSessionUploadFetcher.m
│   │           ├── GoogleToolboxForMac/
│   │           │   ├── Foundation/
│   │           │   │   ├── GTMNSData+zlib.h
│   │           │   │   └── GTMNSData+zlib.m
│   │           │   ├── GTMDefines.h
│   │           │   ├── LICENSE
│   │           │   └── README.md
│   │           ├── Kingfisher/
│   │           │   ├── LICENSE
│   │           │   ├── README.md
│   │           │   └── Sources/
│   │           │       ├── AnimatedImageView.swift
│   │           │       ├── Box.swift
│   │           │       ├── CacheSerializer.swift
│   │           │       ├── Filter.swift
│   │           │       ├── Image.swift
│   │           │       ├── ImageCache.swift
│   │           │       ├── ImageDownloader.swift
│   │           │       ├── ImagePrefetcher.swift
│   │           │       ├── ImageProcessor.swift
│   │           │       ├── ImageTransition.swift
│   │           │       ├── ImageView+Kingfisher.swift
│   │           │       ├── Indicator.swift
│   │           │       ├── Kingfisher.h
│   │           │       ├── Kingfisher.swift
│   │           │       ├── KingfisherManager.swift
│   │           │       ├── KingfisherOptionsInfo.swift
│   │           │       ├── RequestModifier.swift
│   │           │       ├── Resource.swift
│   │           │       ├── String+MD5.swift
│   │           │       ├── ThreadHelper.swift
│   │           │       └── UIButton+Kingfisher.swift
│   │           ├── Pods.xcodeproj/
│   │           │   ├── project.pbxproj
│   │           │   └── xcuserdata/
│   │           │       └── jchoi.xcuserdatad/
│   │           │           └── xcschemes/
│   │           │               ├── Alamofire.xcscheme
│   │           │               ├── AlamofireSwiftyJSON.xcscheme
│   │           │               ├── GTMSessionFetcher.xcscheme
│   │           │               ├── GoogleToolboxForMac.xcscheme
│   │           │               ├── Kingfisher.xcscheme
│   │           │               ├── Pods-EZShopManager.xcscheme
│   │           │               ├── SwiftyJSON.xcscheme
│   │           │               └── xcschememanagement.plist
│   │           ├── SwiftyJSON/
│   │           │   ├── LICENSE
│   │           │   ├── README.md
│   │           │   └── Source/
│   │           │       └── SwiftyJSON.swift
│   │           └── Target Support Files/
│   │               ├── Alamofire/
│   │               │   ├── Alamofire-dummy.m
│   │               │   ├── Alamofire-prefix.pch
│   │               │   ├── Alamofire-umbrella.h
│   │               │   ├── Alamofire.modulemap
│   │               │   ├── Alamofire.xcconfig
│   │               │   └── Info.plist
│   │               ├── AlamofireSwiftyJSON/
│   │               │   ├── AlamofireSwiftyJSON-dummy.m
│   │               │   ├── AlamofireSwiftyJSON-prefix.pch
│   │               │   ├── AlamofireSwiftyJSON-umbrella.h
│   │               │   ├── AlamofireSwiftyJSON.modulemap
│   │               │   ├── AlamofireSwiftyJSON.xcconfig
│   │               │   └── Info.plist
│   │               ├── GTMSessionFetcher/
│   │               │   ├── GTMSessionFetcher-dummy.m
│   │               │   ├── GTMSessionFetcher-prefix.pch
│   │               │   ├── GTMSessionFetcher-umbrella.h
│   │               │   ├── GTMSessionFetcher.modulemap
│   │               │   ├── GTMSessionFetcher.xcconfig
│   │               │   └── Info.plist
│   │               ├── GoogleToolboxForMac/
│   │               │   ├── GoogleToolboxForMac-dummy.m
│   │               │   ├── GoogleToolboxForMac-prefix.pch
│   │               │   ├── GoogleToolboxForMac-umbrella.h
│   │               │   ├── GoogleToolboxForMac.modulemap
│   │               │   ├── GoogleToolboxForMac.xcconfig
│   │               │   └── Info.plist
│   │               ├── Kingfisher/
│   │               │   ├── Info.plist
│   │               │   ├── Kingfisher-dummy.m
│   │               │   ├── Kingfisher-prefix.pch
│   │               │   ├── Kingfisher-umbrella.h
│   │               │   ├── Kingfisher.modulemap
│   │               │   └── Kingfisher.xcconfig
│   │               ├── Pods-EZShopManager/
│   │               │   ├── Info.plist
│   │               │   ├── Pods-EZShopManager-acknowledgements.markdown
│   │               │   ├── Pods-EZShopManager-acknowledgements.plist
│   │               │   ├── Pods-EZShopManager-dummy.m
│   │               │   ├── Pods-EZShopManager-frameworks.sh
│   │               │   ├── Pods-EZShopManager-resources.sh
│   │               │   ├── Pods-EZShopManager-umbrella.h
│   │               │   ├── Pods-EZShopManager.debug.xcconfig
│   │               │   ├── Pods-EZShopManager.modulemap
│   │               │   └── Pods-EZShopManager.release.xcconfig
│   │               └── SwiftyJSON/
│   │                   ├── Info.plist
│   │                   ├── SwiftyJSON-dummy.m
│   │                   ├── SwiftyJSON-prefix.pch
│   │                   ├── SwiftyJSON-umbrella.h
│   │                   ├── SwiftyJSON.modulemap
│   │                   └── SwiftyJSON.xcconfig
│   ├── README.md
│   └── User/
│       └── ezshopUser/
│           ├── Podfile
│           ├── Pods/
│           │   ├── Alamofire/
│           │   │   ├── LICENSE
│           │   │   ├── README.md
│           │   │   └── Source/
│           │   │       ├── AFError.swift
│           │   │       ├── Alamofire.swift
│           │   │       ├── DispatchQueue+Alamofire.swift
│           │   │       ├── MultipartFormData.swift
│           │   │       ├── NetworkReachabilityManager.swift
│           │   │       ├── Notifications.swift
│           │   │       ├── ParameterEncoding.swift
│           │   │       ├── Request.swift
│           │   │       ├── Response.swift
│           │   │       ├── ResponseSerialization.swift
│           │   │       ├── Result.swift
│           │   │       ├── ServerTrustPolicy.swift
│           │   │       ├── SessionDelegate.swift
│           │   │       ├── SessionManager.swift
│           │   │       ├── TaskDelegate.swift
│           │   │       ├── Timeline.swift
│           │   │       └── Validation.swift
│           │   ├── AlamofireSwiftyJSON/
│           │   │   ├── LICENSE
│           │   │   ├── README.md
│           │   │   └── Source/
│           │   │       └── AlamofireSwiftyJSON.swift
│           │   ├── Firebase/
│           │   │   ├── Core/
│           │   │   │   └── Sources/
│           │   │   │       ├── Firebase.h
│           │   │   │       └── module.modulemap
│           │   │   └── README.md
│           │   ├── FirebaseAnalytics/
│           │   │   └── Frameworks/
│           │   │       └── FirebaseAnalytics.framework/
│           │   │           ├── FirebaseAnalytics
│           │   │           ├── Headers/
│           │   │           │   ├── FIRAnalytics+AppDelegate.h
│           │   │           │   ├── FIRAnalytics.h
│           │   │           │   ├── FIRAnalyticsConfiguration.h
│           │   │           │   ├── FIRApp.h
│           │   │           │   ├── FIRConfiguration.h
│           │   │           │   ├── FIREventNames.h
│           │   │           │   ├── FIROptions.h
│           │   │           │   ├── FIRParameterNames.h
│           │   │           │   ├── FIRUserPropertyNames.h
│           │   │           │   └── FirebaseAnalytics.h
│           │   │           └── Modules/
│           │   │               └── module.modulemap
│           │   ├── FirebaseCore/
│           │   │   └── Frameworks/
│           │   │       └── FirebaseCore.framework/
│           │   │           ├── FirebaseCore
│           │   │           ├── Headers/
│           │   │           │   ├── FIRAnalyticsConfiguration.h
│           │   │           │   ├── FIRApp.h
│           │   │           │   ├── FIRConfiguration.h
│           │   │           │   ├── FIRLoggerLevel.h
│           │   │           │   ├── FIROptions.h
│           │   │           │   └── FirebaseCore.h
│           │   │           └── Modules/
│           │   │               └── module.modulemap
│           │   ├── FirebaseDatabase/
│           │   │   └── Frameworks/
│           │   │       └── FirebaseDatabase.framework/
│           │   │           ├── FirebaseDatabase
│           │   │           ├── Headers/
│           │   │           │   ├── FIRDataEventType.h
│           │   │           │   ├── FIRDataSnapshot.h
│           │   │           │   ├── FIRDatabase.h
│           │   │           │   ├── FIRDatabaseQuery.h
│           │   │           │   ├── FIRDatabaseReference.h
│           │   │           │   ├── FIRMutableData.h
│           │   │           │   ├── FIRServerValue.h
│           │   │           │   ├── FIRTransactionResult.h
│           │   │           │   └── FirebaseDatabase.h
│           │   │           ├── Info.plist
│           │   │           ├── Modules/
│           │   │           │   └── module.modulemap
│           │   │           └── NOTICE
│           │   ├── FirebaseInstanceID/
│           │   │   ├── CHANGELOG.md
│           │   │   ├── Frameworks/
│           │   │   │   └── FirebaseInstanceID.framework/
│           │   │   │       ├── FirebaseInstanceID
│           │   │   │       ├── Headers/
│           │   │   │       │   ├── FIRInstanceID.h
│           │   │   │       │   └── FirebaseInstanceID.h
│           │   │   │       └── Modules/
│           │   │   │           └── module.modulemap
│           │   │   └── README.md
│           │   ├── FirebaseMessaging/
│           │   │   └── Frameworks/
│           │   │       └── FirebaseMessaging.framework/
│           │   │           ├── FirebaseMessaging
│           │   │           ├── Headers/
│           │   │           │   ├── FIRMessaging.h
│           │   │           │   └── FirebaseMessaging.h
│           │   │           └── Modules/
│           │   │               └── module.modulemap
│           │   ├── GoogleToolboxForMac/
│           │   │   ├── Foundation/
│           │   │   │   ├── GTMLogger.h
│           │   │   │   ├── GTMLogger.m
│           │   │   │   ├── GTMNSData+zlib.h
│           │   │   │   └── GTMNSData+zlib.m
│           │   │   ├── GTMDefines.h
│           │   │   ├── LICENSE
│           │   │   └── README.md
│           │   ├── Kingfisher/
│           │   │   ├── LICENSE
│           │   │   ├── README.md
│           │   │   └── Sources/
│           │   │       ├── AnimatedImageView.swift
│           │   │       ├── Box.swift
│           │   │       ├── CacheSerializer.swift
│           │   │       ├── Filter.swift
│           │   │       ├── Image.swift
│           │   │       ├── ImageCache.swift
│           │   │       ├── ImageDownloader.swift
│           │   │       ├── ImagePrefetcher.swift
│           │   │       ├── ImageProcessor.swift
│           │   │       ├── ImageTransition.swift
│           │   │       ├── ImageView+Kingfisher.swift
│           │   │       ├── Indicator.swift
│           │   │       ├── Kingfisher.h
│           │   │       ├── Kingfisher.swift
│           │   │       ├── KingfisherManager.swift
│           │   │       ├── KingfisherOptionsInfo.swift
│           │   │       ├── RequestModifier.swift
│           │   │       ├── Resource.swift
│           │   │       ├── String+MD5.swift
│           │   │       ├── ThreadHelper.swift
│           │   │       └── UIButton+Kingfisher.swift
│           │   ├── Pods.xcodeproj/
│           │   │   ├── project.pbxproj
│           │   │   └── xcuserdata/
│           │   │       └── jchoi.xcuserdatad/
│           │   │           └── xcschemes/
│           │   │               ├── Alamofire.xcscheme
│           │   │               ├── AlamofireSwiftyJSON.xcscheme
│           │   │               ├── GoogleToolboxForMac.xcscheme
│           │   │               ├── Kingfisher.xcscheme
│           │   │               ├── Pods-ezshopUser.xcscheme
│           │   │               ├── Protobuf.xcscheme
│           │   │               ├── SwiftyJSON.xcscheme
│           │   │               └── xcschememanagement.plist
│           │   ├── Protobuf/
│           │   │   ├── LICENSE
│           │   │   ├── README.md
│           │   │   └── objectivec/
│           │   │       ├── GPBArray.h
│           │   │       ├── GPBArray.m
│           │   │       ├── GPBArray_PackagePrivate.h
│           │   │       ├── GPBBootstrap.h
│           │   │       ├── GPBCodedInputStream.h
│           │   │       ├── GPBCodedInputStream.m
│           │   │       ├── GPBCodedInputStream_PackagePrivate.h
│           │   │       ├── GPBCodedOutputStream.h
│           │   │       ├── GPBCodedOutputStream.m
│           │   │       ├── GPBCodedOutputStream_PackagePrivate.h
│           │   │       ├── GPBDescriptor.h
│           │   │       ├── GPBDescriptor.m
│           │   │       ├── GPBDescriptor_PackagePrivate.h
│           │   │       ├── GPBDictionary.h
│           │   │       ├── GPBDictionary.m
│           │   │       ├── GPBDictionary_PackagePrivate.h
│           │   │       ├── GPBExtensionInternals.h
│           │   │       ├── GPBExtensionInternals.m
│           │   │       ├── GPBExtensionRegistry.h
│           │   │       ├── GPBExtensionRegistry.m
│           │   │       ├── GPBMessage.h
│           │   │       ├── GPBMessage.m
│           │   │       ├── GPBMessage_PackagePrivate.h
│           │   │       ├── GPBProtocolBuffers.h
│           │   │       ├── GPBProtocolBuffers_RuntimeSupport.h
│           │   │       ├── GPBRootObject.h
│           │   │       ├── GPBRootObject.m
│           │   │       ├── GPBRootObject_PackagePrivate.h
│           │   │       ├── GPBRuntimeTypes.h
│           │   │       ├── GPBUnknownField.h
│           │   │       ├── GPBUnknownField.m
│           │   │       ├── GPBUnknownFieldSet.h
│           │   │       ├── GPBUnknownFieldSet.m
│           │   │       ├── GPBUnknownFieldSet_PackagePrivate.h
│           │   │       ├── GPBUnknownField_PackagePrivate.h
│           │   │       ├── GPBUtilities.h
│           │   │       ├── GPBUtilities.m
│           │   │       ├── GPBUtilities_PackagePrivate.h
│           │   │       ├── GPBWellKnownTypes.h
│           │   │       ├── GPBWellKnownTypes.m
│           │   │       ├── GPBWireFormat.h
│           │   │       ├── GPBWireFormat.m
│           │   │       └── google/
│           │   │           └── protobuf/
│           │   │               ├── Any.pbobjc.h
│           │   │               ├── Any.pbobjc.m
│           │   │               ├── Api.pbobjc.h
│           │   │               ├── Api.pbobjc.m
│           │   │               ├── Duration.pbobjc.h
│           │   │               ├── Duration.pbobjc.m
│           │   │               ├── Empty.pbobjc.h
│           │   │               ├── Empty.pbobjc.m
│           │   │               ├── FieldMask.pbobjc.h
│           │   │               ├── FieldMask.pbobjc.m
│           │   │               ├── SourceContext.pbobjc.h
│           │   │               ├── SourceContext.pbobjc.m
│           │   │               ├── Struct.pbobjc.h
│           │   │               ├── Struct.pbobjc.m
│           │   │               ├── Timestamp.pbobjc.h
│           │   │               ├── Timestamp.pbobjc.m
│           │   │               ├── Type.pbobjc.h
│           │   │               ├── Type.pbobjc.m
│           │   │               ├── Wrappers.pbobjc.h
│           │   │               └── Wrappers.pbobjc.m
│           │   ├── SwiftyJSON/
│           │   │   ├── LICENSE
│           │   │   ├── README.md
│           │   │   └── Source/
│           │   │       └── SwiftyJSON.swift
│           │   └── Target Support Files/
│           │       ├── Alamofire/
│           │       │   ├── Alamofire-dummy.m
│           │       │   ├── Alamofire-prefix.pch
│           │       │   ├── Alamofire-umbrella.h
│           │       │   ├── Alamofire.modulemap
│           │       │   ├── Alamofire.xcconfig
│           │       │   └── Info.plist
│           │       ├── AlamofireSwiftyJSON/
│           │       │   ├── AlamofireSwiftyJSON-dummy.m
│           │       │   ├── AlamofireSwiftyJSON-prefix.pch
│           │       │   ├── AlamofireSwiftyJSON-umbrella.h
│           │       │   ├── AlamofireSwiftyJSON.modulemap
│           │       │   ├── AlamofireSwiftyJSON.xcconfig
│           │       │   └── Info.plist
│           │       ├── GoogleToolboxForMac/
│           │       │   ├── GoogleToolboxForMac-dummy.m
│           │       │   ├── GoogleToolboxForMac-prefix.pch
│           │       │   ├── GoogleToolboxForMac-umbrella.h
│           │       │   ├── GoogleToolboxForMac.modulemap
│           │       │   ├── GoogleToolboxForMac.xcconfig
│           │       │   └── Info.plist
│           │       ├── Kingfisher/
│           │       │   ├── Info.plist
│           │       │   ├── Kingfisher-dummy.m
│           │       │   ├── Kingfisher-prefix.pch
│           │       │   ├── Kingfisher-umbrella.h
│           │       │   ├── Kingfisher.modulemap
│           │       │   └── Kingfisher.xcconfig
│           │       ├── Pods-ezshopUser/
│           │       │   ├── Info.plist
│           │       │   ├── Pods-ezshopUser-acknowledgements.markdown
│           │       │   ├── Pods-ezshopUser-acknowledgements.plist
│           │       │   ├── Pods-ezshopUser-dummy.m
│           │       │   ├── Pods-ezshopUser-frameworks.sh
│           │       │   ├── Pods-ezshopUser-resources.sh
│           │       │   ├── Pods-ezshopUser-umbrella.h
│           │       │   ├── Pods-ezshopUser.debug.xcconfig
│           │       │   ├── Pods-ezshopUser.modulemap
│           │       │   └── Pods-ezshopUser.release.xcconfig
│           │       ├── Protobuf/
│           │       │   ├── Info.plist
│           │       │   ├── Protobuf-dummy.m
│           │       │   ├── Protobuf-prefix.pch
│           │       │   ├── Protobuf-umbrella.h
│           │       │   ├── Protobuf.modulemap
│           │       │   └── Protobuf.xcconfig
│           │       └── SwiftyJSON/
│           │           ├── Info.plist
│           │           ├── SwiftyJSON-dummy.m
│           │           ├── SwiftyJSON-prefix.pch
│           │           ├── SwiftyJSON-umbrella.h
│           │           ├── SwiftyJSON.modulemap
│           │           └── SwiftyJSON.xcconfig
│           ├── ezshopUser/
│           │   ├── ActivitiyIndicator.swift
│           │   ├── AppDelegate.swift
│           │   ├── Assets.xcassets/
│           │   │   ├── AppIcon.appiconset/
│           │   │   │   └── Contents.json
│           │   │   ├── Contents.json
│           │   │   └── logo.imageset/
│           │   │       └── Contents.json
│           │   ├── Base.lproj/
│           │   │   └── Main.storyboard
│           │   ├── CLFaceDetectionImagePicker.storyboard
│           │   ├── CLFaceDetectionImagePickerViewController.h
│           │   ├── CLFaceDetectionImagePickerViewController.m
│           │   ├── GoogleService-Info.plist
│           │   ├── HudView.swift
│           │   ├── Info.plist
│           │   ├── Item.swift
│           │   ├── JGUtils.swift
│           │   ├── UIImage+CL.h
│           │   ├── UIImage+CL.m
│           │   ├── User.swift
│           │   ├── UserViewController.swift
│           │   ├── ViewController.swift
│           │   ├── ezshopUser-Bridging-Header.h
│           │   ├── ezshopUser.entitlements
│           │   └── kairos.swift
│           ├── ezshopUser.xcodeproj/
│           │   ├── project.pbxproj
│           │   ├── project.xcworkspace/
│           │   │   ├── contents.xcworkspacedata
│           │   │   └── xcuserdata/
│           │   │       └── jchoi.xcuserdatad/
│           │   │           └── UserInterfaceState.xcuserstate
│           │   └── xcuserdata/
│           │       └── jchoi.xcuserdatad/
│           │           └── xcschemes/
│           │               ├── ezshopUser.xcscheme
│           │               └── xcschememanagement.plist
│           └── ezshopUser.xcworkspace/
│               ├── contents.xcworkspacedata
│               └── xcuserdata/
│                   └── jchoi.xcuserdatad/
│                       ├── UserInterfaceState.xcuserstate
│                       └── xcdebugger/
│                           └── Breakpoints_v2.xcbkptlist
└── raspberry/
    ├── InventoryClient.py
    ├── logs
    ├── script.py
    ├── script2.py
    └── ultrasonic.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
.idea


================================================
FILE: Android/FaceTracker/.gitignore
================================================
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures


================================================
FILE: Android/FaceTracker/FaceTracker.iml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="FaceTracker" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="java-gradle" name="Java-Gradle">
      <configuration>
        <option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
        <option name="BUILDABLE" value="false" />
      </configuration>
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <excludeFolder url="file://$MODULE_DIR$/.gradle" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>

================================================
FILE: Android/FaceTracker/app/.gitignore
================================================
/build


================================================
FILE: Android/FaceTracker/app/app.iml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="android-gradle" name="Android-Gradle">
      <configuration>
        <option name="GRADLE_PROJECT_PATH" value=":app" />
      </configuration>
    </facet>
    <facet type="android" name="Android">
      <configuration>
        <option name="SELECTED_BUILD_VARIANT" value="debug" />
        <option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
        <afterSyncTasks>
          <task>generateDebugSources</task>
        </afterSyncTasks>
        <option name="ALLOW_USER_CONFIGURATION" value="false" />
        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
      </configuration>
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
    <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/google-services/debug" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/25.1.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/25.1.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/design/25.1.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/25.1.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-compat/25.1.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-core-ui/25.1.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-core-utils/25.1.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-fragment/25.1.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-media-compat/25.1.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/25.1.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/25.1.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/transition/25.1.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.android.gms/play-services-base/10.0.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.android.gms/play-services-basement/10.0.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.android.gms/play-services-tasks/10.0.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.android.gms/play-services-vision/10.0.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.firebase/firebase-analytics-impl/10.0.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.firebase/firebase-analytics/10.0.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.firebase/firebase-common/10.0.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.firebase/firebase-core/10.0.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.firebase/firebase-database-connection/10.0.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.firebase/firebase-database/10.0.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.firebase/firebase-iid/10.0.1/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.koushikdutta.async/androidasync/2.1.9/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.koushikdutta.ion/ion/2.1.9/jars" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
      <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
      <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
    </content>
    <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" exported="" name="firebase-analytics-10.0.1" level="project" />
    <orderEntry type="library" exported="" name="firebase-core-10.0.1" level="project" />
    <orderEntry type="library" exported="" name="androidasync-2.1.9" level="project" />
    <orderEntry type="library" exported="" name="play-services-tasks-10.0.1" level="project" />
    <orderEntry type="library" exported="" name="design-25.1.1" level="project" />
    <orderEntry type="library" exported="" name="transition-25.1.1" level="project" />
    <orderEntry type="library" exported="" name="play-services-base-10.0.1" level="project" />
    <orderEntry type="library" exported="" name="firebase-database-connection-10.0.1" level="project" />
    <orderEntry type="library" exported="" name="support-core-ui-25.1.1" level="project" />
    <orderEntry type="library" exported="" name="play-services-vision-10.0.1" level="project" />
    <orderEntry type="library" exported="" name="firebase-iid-10.0.1" level="project" />
    <orderEntry type="library" exported="" name="support-core-utils-25.1.1" level="project" />
    <orderEntry type="library" exported="" name="support-fragment-25.1.1" level="project" />
    <orderEntry type="library" exported="" name="gson-2.3" level="project" />
    <orderEntry type="library" exported="" name="firebase-analytics-impl-10.0.1" level="project" />
    <orderEntry type="library" exported="" name="firebase-common-10.0.1" level="project" />
    <orderEntry type="library" exported="" name="play-services-basement-10.0.1" level="project" />
    <orderEntry type="library" exported="" name="support-v4-25.1.1" level="project" />
    <orderEntry type="library" exported="" name="support-compat-25.1.1" level="project" />
    <orderEntry type="library" exported="" name="firebase-database-10.0.1" level="project" />
    <orderEntry type="library" exported="" name="support-media-compat-25.1.1" level="project" />
    <orderEntry type="library" exported="" name="appcompat-v7-25.1.1" level="project" />
    <orderEntry type="library" exported="" name="ion-2.1.9" level="project" />
    <orderEntry type="library" exported="" name="recyclerview-v7-25.1.1" level="project" />
    <orderEntry type="library" exported="" name="support-annotations-25.1.1" level="project" />
    <orderEntry type="library" exported="" name="support-vector-drawable-25.1.1" level="project" />
    <orderEntry type="library" exported="" name="animated-vector-drawable-25.1.1" level="project" />
    <orderEntry type="library" exported="" name="android-android-25" level="project" />
  </component>
</module>

================================================
FILE: Android/FaceTracker/app/build.gradle
================================================
apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "24.0.2"

    defaultConfig {
        applicationId "com.subhan_nadeem.android.gms.samples.vision.face.facetracker"
        minSdkVersion 19
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:support-v4:25.1.1'
    compile 'com.android.support:design:25.1.1'
    compile 'com.google.android.gms:play-services-vision:10.0.1'
    compile 'com.koushikdutta.ion:ion:2.1.9'
    compile 'com.google.firebase:firebase-database:10.0.1'
}



apply plugin: 'com.google.gms.google-services'

================================================
FILE: Android/FaceTracker/app/google-services.json
================================================
{
  "project_info": {
    "project_number": "89251823040",
    "firebase_url": "https://hackvalley-5be01.firebaseio.com",
    "project_id": "hackvalley-5be01",
    "storage_bucket": "hackvalley-5be01.appspot.com"
  },
  "client": [
    {
      "client_info": {
        "mobilesdk_app_id": "1:89251823040:android:5156d1cfeaf73706",
        "android_client_info": {
          "package_name": "com.subhan_nadeem.android.gms.samples.vision.face.facetracker"
        }
      },
      "oauth_client": [
        {
          "client_id": "89251823040-3c5mq2t39eh08lvj2itd5abi6p10eflm.apps.googleusercontent.com",
          "client_type": 1,
          "android_info": {
            "package_name": "com.subhan_nadeem.android.gms.samples.vision.face.facetracker",
            "certificate_hash": "9aea61c71b38a17b5872ec6aa1a4c2f3c25144a3"
          }
        },
        {
          "client_id": "89251823040-fd3cfommlqogp5todrh25leo6hgh1bvm.apps.googleusercontent.com",
          "client_type": 3
        }
      ],
      "api_key": [
        {
          "current_key": "AIzaSyDxreksLNkzDpmaH9yZ3KiHTvQcNHVu_nw"
        }
      ],
      "services": {
        "analytics_service": {
          "status": 1
        },
        "appinvite_service": {
          "status": 2,
          "other_platform_oauth_client": [
            {
              "client_id": "89251823040-okn0k3k9n4j5a0a5lacef55e7qh804gv.apps.googleusercontent.com",
              "client_type": 2,
              "ios_info": {
                "bundle_id": "ca.jgchoi.ezshopUser"
              }
            },
            {
              "client_id": "89251823040-fd3cfommlqogp5todrh25leo6hgh1bvm.apps.googleusercontent.com",
              "client_type": 3
            }
          ]
        },
        "ads_service": {
          "status": 2
        }
      }
    }
  ],
  "configuration_version": "1"
}

================================================
FILE: Android/FaceTracker/app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /usr/local/google/home/wilkinsonclay/android/adt-bundle-linux-x86_64-20140702/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}


================================================
FILE: Android/FaceTracker/app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.subhan_nadeem.android.gms.samples.vision.face.facetracker"
          android:installLocation="auto">

    <uses-feature android:name="android.hardware.camera"/>

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <application
        android:allowBackup="true"
        android:hardwareAccelerated="true"
        android:name="App"
        android:icon="@drawable/icon"
        android:label="EZTracker"
        android:theme="@style/Theme.AppCompat">
        <meta-data
            android:name="com.subhan_nadeem.android.gms.version"
            android:value="@integer/google_play_services_version"/>
        <meta-data
            android:name="com.subhan_nadeem.android.gms.vision.DEPENDENCIES"
            android:value="face"/>

        <activity
            android:name=".activities.FaceTrackingActivity"
            android:icon="@drawable/icon"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden"
            android:label="Face Tracker"
            android:theme="@style/Theme.AppCompat.NoActionBar">
        </activity>
        <activity
            android:name=".activities.SelectPurposeActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:screenOrientation="portrait"
            android:theme="@style/FullscreenTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

================================================
FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/App.java
================================================
package com.subhan_nadeem.android.gms.samples.vision.face.facetracker;

import android.app.Application;
import android.speech.tts.TextToSpeech;

import java.util.Locale;

/**
 * Created by Subhan Nadeem on 2017-03-18.
 */

public class App extends Application {
    public static TextToSpeech ttsObj;

    @Override
    public void onCreate() {
        super.onCreate();
        initializeTTS();
    }

    private void initializeTTS() {
        ttsObj = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                if (status != TextToSpeech.ERROR) {
                    ttsObj.setLanguage(Locale.UK);
                }
            }
        });
    }
}


================================================
FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/FaceGraphic.java
================================================
/*
 * Copyright (C) The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.subhan_nadeem.android.gms.samples.vision.face.facetracker;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;

import com.google.android.gms.vision.face.Face;
import com.subhan_nadeem.android.gms.samples.vision.face.facetracker.ui.camera.GraphicOverlay;

/**
 * Graphic instance for rendering face position, orientation, and landmarks within an associated
 * graphic overlay view.
 */
public class FaceGraphic extends GraphicOverlay.Graphic {
    private static final float FACE_POSITION_RADIUS = 10.0f;
    private static final float ID_TEXT_SIZE = 40.0f;
    private static final float ID_Y_OFFSET = 50.0f;
    private static final float ID_X_OFFSET = -50.0f;
    private static final float BOX_STROKE_WIDTH = 5.0f;

    private static final int COLOR_CHOICES[] = {
            Color.BLUE,
            Color.CYAN,
            Color.GREEN,
            Color.MAGENTA,
            Color.RED,
            Color.WHITE,
            Color.YELLOW
    };
    private static int mCurrentColorIndex = 0;

    private Paint mFacePositionPaint;
    private Paint mIdPaint;
    private Paint mBoxPaint;

    public Face getFace() {
        return mFace;
    }

    private volatile Face mFace;
    private int mFaceId;
    private FaceProximityListener mFaceProximityListener;

    public FaceGraphic(GraphicOverlay overlay, FaceProximityListener proximityListener) {
        super(overlay);

        mFaceProximityListener = proximityListener;

        mCurrentColorIndex = (mCurrentColorIndex + 1) % COLOR_CHOICES.length;
        final int selectedColor = COLOR_CHOICES[mCurrentColorIndex];

        mFacePositionPaint = new Paint();
        mFacePositionPaint.setColor(selectedColor);

        mIdPaint = new Paint();
        mIdPaint.setColor(selectedColor);
        mIdPaint.setTextSize(ID_TEXT_SIZE);

        mBoxPaint = new Paint();
        mBoxPaint.setColor(selectedColor);
        mBoxPaint.setStyle(Paint.Style.STROKE);
        mBoxPaint.setStrokeWidth(BOX_STROKE_WIDTH);
    }

    public void setId(int id) {
        mFaceId = id;
    }

    /**
     * Updates the face instance from the detection of the most recent frame.  Invalidates the
     * relevant portions of the overlay to trigger a redraw.
     */
    public void updateFace(Face face) {
        mFace = face;
        postInvalidate();
    }

    /**
     * Draws the face annotations for position on the supplied canvas.
     */
    @Override
    public void draw(Canvas canvas) {
        Face face = mFace;
        if (face == null) {
            return;
        }

        // Draws a circle at the position of the detected face, with the face's track id below.
        float x = translateX(face.getPosition().x + face.getWidth() / 2);
        float y = translateY(face.getPosition().y + face.getHeight() / 2);
        canvas.drawCircle(x, y, FACE_POSITION_RADIUS, mFacePositionPaint);
        canvas.drawText("id: " + mFaceId, x + ID_X_OFFSET, y + ID_Y_OFFSET, mIdPaint);
        //canvas.drawText("happiness: " + String.format("%.2f", face.getIsSmilingProbability()), x - ID_X_OFFSET, y - ID_Y_OFFSET, mIdPaint);
        canvas.drawText(/*"right eye: " + String.format("%.2f", face.getIsRightEyeOpenProbability())*/
                "Face width: " + mFace.getWidth(), x + ID_X_OFFSET * 2, y + ID_Y_OFFSET * 2, mIdPaint);
       // canvas.drawText("left eye: " + String.format("%.2f", face.getIsLeftEyeOpenProbability()), x - ID_X_OFFSET * 2, y - ID_Y_OFFSET * 2, mIdPaint);

        // Draws a bounding box around the face.
        float xOffset = scaleX(face.getWidth() / 2.0f);
        float yOffset = scaleY(face.getHeight() / 2.0f);
        float left = x - xOffset;
        float top = y - yOffset;
        float right = x + xOffset;
        float bottom = y + yOffset;
        canvas.drawRect(left, top, right, bottom, mBoxPaint);
    }
}


================================================
FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/FaceProximityListener.java
================================================
package com.subhan_nadeem.android.gms.samples.vision.face.facetracker;

import com.google.android.gms.vision.face.Face;

/**
 * Created by Subhan Nadeem on 2017-03-18.
 */
public interface FaceProximityListener {
    void onFaceProximityTrigger(Face face);
}


================================================
FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/activities/FaceTrackingActivity.java
================================================
/*
 * Copyright (C) The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.subhan_nadeem.android.gms.samples.vision.face.facetracker.activities;

import android.Manifest;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.speech.tts.TextToSpeech;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GoogleApiAvailability;
import com.google.android.gms.vision.CameraSource;
import com.google.android.gms.vision.MultiProcessor;
import com.google.android.gms.vision.Tracker;
import com.google.android.gms.vision.face.Face;
import com.google.android.gms.vision.face.FaceDetector;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.google.gson.JsonObject;
import com.koushikdutta.async.future.FutureCallback;
import com.koushikdutta.ion.Ion;
import com.subhan_nadeem.android.gms.samples.vision.face.facetracker.App;
import com.subhan_nadeem.android.gms.samples.vision.face.facetracker.FaceGraphic;
import com.subhan_nadeem.android.gms.samples.vision.face.facetracker.FaceProximityListener;
import com.subhan_nadeem.android.gms.samples.vision.face.facetracker.R;
import com.subhan_nadeem.android.gms.samples.vision.face.facetracker.models.RecognitionCandidate;
import com.subhan_nadeem.android.gms.samples.vision.face.facetracker.models.User;
import com.subhan_nadeem.android.gms.samples.vision.face.facetracker.ui.camera.CameraSourcePreview;
import com.subhan_nadeem.android.gms.samples.vision.face.facetracker.ui.camera.GraphicOverlay;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;

import static com.subhan_nadeem.android.gms.samples.vision.face.facetracker.App.ttsObj;

/**
 * Activity for the face tracker app.  This app detects faces with the rear facing camera, and draws
 * overlay graphics to indicate the position, size, and ID of each face.
 */
public final class FaceTrackingActivity extends AppCompatActivity
        implements FaceProximityListener {
    public static final String app_id = "4724eb0e";
    public static final String api_key = "f5795e224117ac3393343c6bc14c841b";
    public static final String GALLERY_ID = "ezshop";
    public static final String URL_RECOGNIZE = "https://api.kairos.com/recognize";
    public static final String KEY_APP_ID = "app_id";
    public static final String KEY_APP_KEY = "app_key";
    public static final String KEY_GALLERY_NAME = "gallery_name";
    public static final String KEY_IMAGE = "image";

    public static float FACE_WIDTH_PROXIMITY_TRIGGER = 200f;

    public static final int PURPOSE_ENTRANCE = 1;
    public static final int PURPOSE_EXIT = 2;
    public static final int PURPOSE_ITEM = 3;
    public static final int NO_ITEM_PICKED_UP = -1;
    private static final String TAG = "FaceTracker";
    private static final int RC_HANDLE_GMS = 9001;
    // permission request codes need to be < 256
    private static final int RC_HANDLE_CAMERA_PERM = 2;
    private static final String FIREBASE_PUSH_TOKEN = "AAAAFMfSvcA:APA91bGkiVlrAimQLWJKkdvTgF_" +
            "ow4KF17vq7VEkPjglNUmbvPIU3XrSe8f8pkRHr8YuVMN_4_4-HTx" +
            "fvngfmCCNSEo9rP3e0HG8zruRi17WPLmuKLfncAZNAN3Ch4LVLcY2XyzT-Eqm";
    private static final long NUM_SECONDS_WAIT_BETWEEN_RECOGNIZE = 2;
    public static String EXTRA_CAMERA_PURPOSE = "cameraPurpose";
    public static String URL_PUSH_NOTIFICATION = "https://fcm.googleapis.com/fcm/send";
    private static int MAX_RECOGNITION_ATTEMPTS = 3;
    private CameraSource mCameraSource = null;
    private CameraSourcePreview mPreview;
    private GraphicOverlay mGraphicOverlay;
    private ProgressBar mProgressBar;
    private int mPurpose;
    private long mLastTriggerTime;
    private ArrayList<Integer> alreadyRecognizedFacesList = new ArrayList<>();
    private DatabaseReference mDatabase;
    private DatabaseReference mUserDatabase;
    private int mRecognitionAttempts;
    private TextView mPersonText;
    private DatabaseReference mEventDatabase;
    private int mItemPickedUp;
    private DatabaseReference mInventoryDatabase;
    private String mUserFCMToken;

    public static Intent newIntent(Context appContext, int cameraPurpose) {
        Intent i = new Intent(appContext, FaceTrackingActivity.class);
        i.putExtra(EXTRA_CAMERA_PURPOSE, cameraPurpose);
        return i;
    }

    public static void fadeIn(final View view) {
        view.setVisibility(View.VISIBLE);
        view.setAlpha(0);
        final int DURATION = 1000;
        view.animate().setDuration(DURATION).alpha(1).setListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                view.setVisibility(View.VISIBLE);
            }
        });
    }

    public static void fadeOut(final View view) {
        final int DURATION = 800;
        view.animate().setDuration(DURATION).alpha(0).setListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                view.setVisibility(View.INVISIBLE);
            }
        });
    }

    /**
     * Initializes the UI and initiates the creation of a face detector.
     */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        mPreview = (CameraSourcePreview) findViewById(R.id.preview);
        mGraphicOverlay = (GraphicOverlay) findViewById(R.id.faceOverlay);
        initializePermissions();

        initializeProgressBar();

        mLastTriggerTime = System.currentTimeMillis();

        mPurpose = getIntent().getExtras().getInt(EXTRA_CAMERA_PURPOSE);

        mItemPickedUp = NO_ITEM_PICKED_UP;

        initializeSwitchCameraButton();

        mDatabase = FirebaseDatabase.getInstance().getReference();
        mUserDatabase = mDatabase.child("users");
        mInventoryDatabase = mDatabase.child("inventories");
        mEventDatabase = mDatabase.child("events");

        mPersonText = (TextView) findViewById(R.id.personText);
        mPersonText.setVisibility(View.INVISIBLE);

        if (mPurpose == PURPOSE_ITEM) {
            listenForEvents();
        }
    }

    private void listenForEvents() {

        mEventDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot event : dataSnapshot.getChildren()) {
                    mItemPickedUp = Integer.parseInt(event.child("item_id").getValue().toString());
                }

                if (mItemPickedUp != NO_ITEM_PICKED_UP)
                    recognize(false, true);

                Log.d(TAG, "Event listener triggered!");
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    private void initializePermissions() {
        // Check for the camera permission before accessing the camera.  If the
        // permission is not granted yet, request permission.
        int rc = ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
        if (rc == PackageManager.PERMISSION_GRANTED) {
            createCameraSource(false);
        } else {
            requestCameraPermission();
        }
    }

    private void initializeSwitchCameraButton() {
        findViewById(R.id.cameraButton).setOnClickListener(new View.OnClickListener() {
            boolean rearFacing = false;

            @Override
            public void onClick(View v) {
                rearFacing = !rearFacing;
                mCameraSource.stop();
                mPreview.stop();
                mPreview.release();
                mCameraSource = null;

                createCameraSource(rearFacing);
                startCameraSource();
            }
        });
    }

    private void initializeProgressBar() {
        mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
        mProgressBar.setIndeterminate(true);
        mProgressBar.setVisibility(View.GONE);
    }

    //==============================================================================================
    // Camera Source Preview
    //==============================================================================================

    /**
     * Handles the requesting of the camera permission.  This includes
     * showing a "Snackbar" message of why the permission is needed then
     * sending the request.
     */
    private void requestCameraPermission() {
        Log.w(TAG, "Camera permission is not granted. Requesting permission");

        final String[] permissions = new String[]{Manifest.permission.CAMERA};

        if (!ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.CAMERA)) {
            ActivityCompat.requestPermissions(this, permissions, RC_HANDLE_CAMERA_PERM);
            return;
        }

        final Activity thisActivity = this;

        View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ActivityCompat.requestPermissions(thisActivity, permissions,
                        RC_HANDLE_CAMERA_PERM);
            }
        };

        Snackbar.make(mGraphicOverlay, R.string.permission_camera_rationale,
                Snackbar.LENGTH_INDEFINITE)
                .setAction(R.string.ok, listener)
                .show();
    }

    /**
     * Creates and starts the camera.  Note that this uses a higher resolution in comparison
     * to other detection examples to enable the barcode detector to detect small barcodes
     * at long distances.
     */
    private void createCameraSource(boolean rearFacing) {

        int typeCamera;

        if (rearFacing)
            typeCamera = CameraSource.CAMERA_FACING_BACK;
        else
            typeCamera = CameraSource.CAMERA_FACING_FRONT;

        Context context = getApplicationContext();
        FaceDetector detector = new FaceDetector.Builder(context)
                .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS)
                .build();

        detector.setProcessor(
                new MultiProcessor.Builder<>(new GraphicFaceTrackerFactory())
                        .build());

        if (!detector.isOperational()) {
            // Note: The first time that an app using face API is installed on a device, GMS will
            // download a native library to the device in order to do detection.  Usually this
            // completes before the app is run for the first time.  But if that download has not yet
            // completed, then the above call will not detect any faces.
            //
            // isOperational() can be used to check if the required native library is currently
            // available.  The detector will automatically become operational once the library
            // download completes on device.
            Log.w(TAG, "Face detector dependencies are not yet available.");
        }

        mCameraSource = new CameraSource.Builder(context, detector)
                .setRequestedPreviewSize(getResources().getDisplayMetrics().widthPixels,
                        getResources().getDisplayMetrics().heightPixels)
                .setFacing(typeCamera)
                .setRequestedFps(30.0f)
                .build();
    }

    /**
     * Restarts the camera.
     */
    @Override
    protected void onResume() {
        super.onResume();

        startCameraSource();
    }

    /**
     * Stops the camera.
     */
    @Override
    protected void onPause() {
        super.onPause();
        mPreview.stop();
    }

    /**
     * Releases the resources associated with the camera source, the associated detector, and the
     * rest of the processing pipeline.
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mCameraSource != null) {
            mCameraSource.release();
        }
    }

    /**
     * Callback for the result from requesting permissions. This method
     * is invoked for every call on {@link #requestPermissions(String[], int)}.
     * <p>
     * <strong>Note:</strong> It is possible that the permissions request interaction
     * with the user is interrupted. In this case you will receive empty permissions
     * and results arrays which should be treated as a cancellation.
     * </p>
     *
     * @param requestCode  The request code passed in {@link #requestPermissions(String[], int)}.
     * @param permissions  The requested permissions. Never null.
     * @param grantResults The grant results for the corresponding permissions
     *                     which is either {@link PackageManager#PERMISSION_GRANTED}
     *                     or {@link PackageManager#PERMISSION_DENIED}. Never null.
     * @see #requestPermissions(String[], int)
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode != RC_HANDLE_CAMERA_PERM) {
            Log.d(TAG, "Got unexpected permission result: " + requestCode);
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            return;
        }

        if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Log.d(TAG, "Camera permission granted - initialize the camera source");
            // we have permission, so create the camerasource
            createCameraSource(true);
            return;
        }

        Log.e(TAG, "Permission not granted: results len = " + grantResults.length +
                " Result code = " + (grantResults.length > 0 ? grantResults[0] : "(empty)"));

        DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                finish();
            }
        };

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Face Tracker sample")
                .setMessage(R.string.no_camera_permission)
                .setPositiveButton(R.string.ok, listener)
                .show();
    }

    /**
     * Starts or restarts the camera source, if it exists.  If the camera source doesn't exist yet
     * (e.g., because onResume was called before the camera source was created), this will be called
     * again when the camera source is created.
     */
    private void startCameraSource() {

        // check that the device has play services available.
        int code = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(
                getApplicationContext());
        if (code != ConnectionResult.SUCCESS) {
            Dialog dlg =
                    GoogleApiAvailability.getInstance().getErrorDialog(this, code, RC_HANDLE_GMS);
            dlg.show();
        }

        if (mCameraSource != null) {
            try {
                mPreview.start(mCameraSource, mGraphicOverlay);
            } catch (IOException e) {
                Log.e(TAG, "Unable to start camera source.", e);
                mCameraSource.release();
                mCameraSource = null;
            }
        }
    }

    @Override
    public void onFaceProximityTrigger(final Face face) {
        long timeSinceLastTrigger = System.currentTimeMillis() - mLastTriggerTime;

        if (timeSinceLastTrigger < TimeUnit.SECONDS.toMillis(NUM_SECONDS_WAIT_BETWEEN_RECOGNIZE))
            return;

        alreadyRecognizedFacesList.add(face.getId());
        mLastTriggerTime = System.currentTimeMillis();
        mRecognitionAttempts = 1;
        recognize(true, false);
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        finish();
    }

    private void recognize(final boolean sayRecognizingMessage, final boolean repeat) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {

                Log.d(TAG, "Attempting to recognize");
                mProgressBar.setVisibility(View.VISIBLE);

                if (sayRecognizingMessage)
                    App.ttsObj.speak("Recognizing", TextToSpeech.QUEUE_ADD, null);

                try {
                    mCameraSource.takePicture(new CameraSource.ShutterCallback() {
                        @Override
                        public void onShutter() {

                        }
                    }, new CameraSource.PictureCallback() {
                        @Override
                        public void onPictureTaken(final byte[] bytes) {
                            new AsyncTask<Void, Void, String>() {
                                @Override
                                protected String doInBackground(Void... params) {
                                    return Base64.encodeToString(bytes, 0);
                                }

                                @Override
                                protected void onPostExecute(String bitmap) {

                                    JsonObject json = new JsonObject();
                                    json.addProperty(KEY_IMAGE, bitmap);
                                    json.addProperty(KEY_GALLERY_NAME, GALLERY_ID);
                                    Ion.with(getApplicationContext())
                                            .load(URL_RECOGNIZE)
                                            .addHeader(KEY_APP_ID, app_id)
                                            .addHeader(KEY_APP_KEY, api_key)
                                            .setJsonObjectBody(json)
                                            .asString()
                                            .setCallback(new FutureCallback<String>() {
                                                @Override
                                                public void onCompleted(Exception e, String result) {
                                                    Log.d(TAG, result);
                                                    mProgressBar.setVisibility(View.GONE);
                                                    try {
                                                        JSONObject jsonObject = new JSONObject(result);
                                                        JSONArray imagesArray = jsonObject.getJSONArray("images");
                                                        JSONObject firstImageObject = imagesArray.getJSONObject(0);

                                                        JSONObject transactionObject =
                                                                firstImageObject.getJSONObject("transaction");

                                                        if (transactionObject.getString("status").equals("failure")) {
                                                            sayErrorMessage();
                                                            return;
                                                        }

                                                        JSONObject candidateObject =
                                                                firstImageObject.getJSONArray("candidates").getJSONObject(0);

                                                        RecognitionCandidate candidate = new RecognitionCandidate();
                                                        candidate.setUUID(candidateObject.getString("subject_id"));
                                                        candidate.setConfidence(candidateObject.getDouble("confidence"));
                                                        candidate.setTimestamp(candidateObject.getLong("enrollment_timestamp"));

                                                        if (mPurpose == PURPOSE_ENTRANCE)
                                                            enterUserIntoShop(candidate);
                                                        else if (mPurpose == PURPOSE_EXIT)
                                                            exitUserFromShop(candidate);
                                                        else if (mPurpose == PURPOSE_ITEM)
                                                            onDetectItemEvent(candidate);

                                                    } catch (JSONException e1) {
                                                        Log.e(TAG, e1.toString());

                                                                ttsObj.speak("I couldn't recognize you!", TextToSpeech.QUEUE_ADD, null);
                                                            ++mRecognitionAttempts;

                                                        if (repeat) {
                                                            ttsObj.speak("Trying again! Please look at the camera", TextToSpeech.QUEUE_ADD, null);
                                                            (new Handler()).postDelayed(new Runnable() {
                                                                @Override
                                                                public void run() {
                                                                    recognize(false, true);
                                                                }
                                                            }, 5000);
                                                        }
                                                    }
                                                }
                                            });
                                }
                            }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null);
                        }
                    });
                } catch (RuntimeException e) {
                    Log.e(TAG, e.toString());
                    Toast.makeText(FaceTrackingActivity.this,
                            "Couldn't take photo! Try again.", Toast.LENGTH_LONG).show();
                }
            }
        });
    }

    private String mItemPersonName;
    private String mItemItemName;
    private void onDetectItemEvent(final RecognitionCandidate candidate) {
        final DatabaseReference userCartDatabase = mDatabase.child("store")
                .child(candidate.getUUID())
                .child("cart");

        getPersonNameForItemTTS(candidate);

        getItemNameForItemTTS();

        userCartDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
            boolean itemAdded = false;

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                ttsObj.speak(mItemPersonName + " picked up a "+mItemItemName, TextToSpeech.QUEUE_ADD, null);

                if (!itemAdded)
                userCartDatabase.child(String.valueOf(dataSnapshot.getChildrenCount()))
                        .setValue(mItemPickedUp);

                itemAdded = true;
                removeEvents();
                mItemPickedUp = NO_ITEM_PICKED_UP;

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    private void getItemNameForItemTTS() {
        mInventoryDatabase.addListenerForSingleValueEvent(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot item : dataSnapshot.getChildren()) {
                    if (item.child("item_id").getValue().toString().equals(String.valueOf(mItemPickedUp))) {
                        mItemItemName = item.child("item_name").getValue().toString();
                        return;
                    }
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    private void getPersonNameForItemTTS(RecognitionCandidate candidate) {
        mUserDatabase.child(candidate.getUUID()).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                User user = dataSnapshot.getValue(User.class);

                mItemPersonName = user.name;
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    private void removeEvents() {
        mEventDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot event : dataSnapshot.getChildren()) {
                    event.getRef().setValue(null);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    private void exitUserFromShop(final RecognitionCandidate candidate) {
        getUserFirebaseToken(candidate);
        mUserDatabase.child(candidate.getUUID()).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                User user = dataSnapshot.getValue(User.class);

                String text = "Goodbye, " + user.name;
                showUserText(text);

                if (!user.is_in_store)
                    return;

                mUserDatabase.child(candidate.getUUID()).child("is_in_store").setValue(false);
                ttsObj.speak("Goodbye, " + user.name + "! Thank you for shopping at easyshop",
                        TextToSpeech.QUEUE_ADD, null);

                final DatabaseReference userCartDatabase = mDatabase.child("store")
                        .child(candidate.getUUID())
                        .child("cart");

                userCartDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        ArrayList<Integer> cartItems = new ArrayList<>();

                        for (DataSnapshot cartItem : dataSnapshot.getChildren()) {
                            cartItems.add(Integer.valueOf(cartItem.getValue().toString()));
                        }

                        calculateCartTotal(cartItems);

                    }


                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }

    private void getUserFirebaseToken(RecognitionCandidate candidate) {
        mUserDatabase.child(candidate.getUUID()).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                try {
                    mUserFCMToken = dataSnapshot.child("fcm_token").getValue().toString();
                }
                catch (Exception e) {
                    Log.e(TAG, e.toString());
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    private void calculateCartTotal(final ArrayList<Integer> cartItems) {
        mInventoryDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
            double totalSpent = 0;

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (int item : cartItems) {
                    totalSpent += Double.parseDouble(
                            dataSnapshot
                                    .child(String.valueOf(item))
                                    .child("item_price")
                                    .getValue().toString());
                }

                sendPushNotification(totalSpent);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    private void sendPushNotification(double totalSpent) {
        DecimalFormat df = new DecimalFormat("0.00");

        if (mUserFCMToken == null || mUserFCMToken.equals("invalid")) return;

        JsonObject dataObj = new JsonObject();
        dataObj.addProperty("alert", "Your total is $" + df.format(totalSpent));

        JsonObject notificationObj = new JsonObject();
        notificationObj.addProperty("body", "Your total is $" + df.format(totalSpent));
        notificationObj.addProperty("title", "Thank you for shopping at easyshop!");

        JsonObject pushObj = new JsonObject();
        pushObj.addProperty("to", mUserFCMToken);
        pushObj.addProperty("priority", "high");
        pushObj.add("data", dataObj);
        pushObj.add("notification", notificationObj);
        Ion.with(getApplicationContext())
                .load(URL_PUSH_NOTIFICATION)
                .addHeader("Authorization", "key=" + FIREBASE_PUSH_TOKEN)
                .setJsonObjectBody(pushObj)
                .asString()
                .setCallback(new FutureCallback<String>() {
                    @Override
                    public void onCompleted(Exception e, String result) {
                        Log.d(TAG, "PUSH RESULT: " + result);
                    }
                });

        mUserFCMToken = null;
    }

    private void enterUserIntoShop(final RecognitionCandidate candidate) throws JSONException {

        clearUserCart(candidate);
        mUserDatabase.child(candidate.getUUID()).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                User user = dataSnapshot.getValue(User.class);

                String text = "Hello, " + user.name;
                showUserText(text);

                if (user.is_in_store)
                    return;

                mUserDatabase.child(candidate.getUUID()).child("is_in_store").setValue(true);
                ttsObj.speak("Welcome to easyshop, " + user.name,
                        TextToSpeech.QUEUE_ADD, null);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    private void clearUserCart(RecognitionCandidate candidate) {
        mDatabase.child("store")
                .child(candidate.getUUID()).setValue(null);
    }

    private void showUserText(String text) {
        if (mPersonText.getVisibility() != View.VISIBLE)
            fadeIn(mPersonText);
        mPersonText.setText(text);
        mPersonText.getHandler().postDelayed(new Runnable() {
            @Override
            public void run() {
                fadeOut(mPersonText);
            }
        }, 5000);
    }

    private void sayErrorMessage() {
        ttsObj.speak("You are not enrolled in our database!",
                TextToSpeech.QUEUE_ADD, null);
    }

    //==============================================================================================
    // Graphic Face Tracker
    //==============================================================================================

    /**
     * Factory for creating a face tracker to be associated with a new face.  The multiprocessor
     * uses this factory to create face trackers as needed -- one for each individual.
     */
    private class GraphicFaceTrackerFactory implements MultiProcessor.Factory<Face> {
        @Override
        public Tracker<Face> create(Face face) {
            return new GraphicFaceTracker(mGraphicOverlay);
        }
    }

    /**
     * Face tracker for each detected individual. This maintains a face graphic within the app's
     * associated face overlay.
     */
    private class GraphicFaceTracker extends Tracker<Face> {
        // Bigger is closer
        private GraphicOverlay mOverlay;
        private FaceGraphic mFaceGraphic;

        GraphicFaceTracker(GraphicOverlay overlay) {
            mOverlay = overlay;
            mFaceGraphic = new FaceGraphic(overlay, FaceTrackingActivity.this);
        }

        /**
         * Start tracking the detected face instance within the face overlay.
         */
        @Override
        public void onNewItem(int faceId, Face item) {
            mFaceGraphic.setId(faceId);
        }

        /**
         * Update the position/characteristics of the face within the overlay.
         */
        @Override
        public void onUpdate(FaceDetector.Detections<Face> detectionResults, Face face) {
            mOverlay.add(mFaceGraphic);
            mFaceGraphic.updateFace(face);

            if (face.getWidth() >= FACE_WIDTH_PROXIMITY_TRIGGER
                    && !alreadyRecognizedFacesList.contains(face.getId())
                    && mPurpose != PURPOSE_ITEM) {
                onFaceProximityTrigger(face);
            }
        }

        /**
         * Hide the graphic when the corresponding face was not detected.  This can happen for
         * intermediate frames temporarily (e.g., if the face was momentarily blocked from
         * view).
         */
        @Override
        public void onMissing(FaceDetector.Detections<Face> detectionResults) {
            mOverlay.remove(mFaceGraphic);
        }

        /**
         * Called when the face is assumed to be gone for good. Remove the graphic annotation from
         * the overlay.
         */
        @Override
        public void onDone() {
            alreadyRecognizedFacesList.remove((Object) mFaceGraphic.getFace().getId());
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                }
            });
            mOverlay.remove(mFaceGraphic);
        }
    }
}


================================================
FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/activities/SelectPurposeActivity.java
================================================
package com.subhan_nadeem.android.gms.samples.vision.face.facetracker.activities;

import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;

import com.subhan_nadeem.android.gms.samples.vision.face.facetracker.R;

/**
 * An example full-screen activity that shows and hides the system UI (i.e.
 * status bar and navigation/system bar) with user interaction.
 */
public class SelectPurposeActivity extends Activity {
    /**
     * Whether or not the system UI should be auto-hidden after
     * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds.
     */
    private static final boolean AUTO_HIDE = true;

    /**
     * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after
     * user interaction before hiding the system UI.
     */
    private static final int AUTO_HIDE_DELAY_MILLIS = 3000;

    /**
     * Some older devices needs a small delay between UI widget updates
     * and a change of the status and navigation bar.
     */
    private static final int UI_ANIMATION_DELAY = 300;
    private final Handler mHideHandler = new Handler();
    private View mContentView;
    private final Runnable mHidePart2Runnable = new Runnable() {
        @SuppressLint("InlinedApi")
        @Override
        public void run() {
            // Delayed removal of status and navigation bar

            // Note that some of these constants are new as of API 16 (Jelly Bean)
            // and API 19 (KitKat). It is safe to use them, as they are inlined
            // at compile-time and do nothing on earlier devices.
            mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        }
    };
    private View mControlsView;
    private final Runnable mShowPart2Runnable = new Runnable() {
        @Override
        public void run() {
            // Delayed display of UI elements
            ActionBar actionBar = getActionBar();
            if (actionBar != null) {
                actionBar.show();
            }
            mControlsView.setVisibility(View.VISIBLE);
        }
    };
    private boolean mVisible;
    private final Runnable mHideRunnable = new Runnable() {
        @Override
        public void run() {
            hide();
        }
    };
    /**
     * Touch listener to use for in-layout UI controls to delay hiding the
     * system UI. This is to prevent the jarring behavior of controls going away
     * while interacting with activity UI.
     */
    private final View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if (AUTO_HIDE) {
                delayedHide(AUTO_HIDE_DELAY_MILLIS);
            }
            return false;
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_select_purpose);
        mContentView = findViewById(R.id.contentView);
        mVisible = true;

        Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/coolvetica.ttf");
        TextView title = (TextView)findViewById(R.id.ezshopTitle);
        title.setTypeface(myTypeface);

        findViewById(R.id.entranceCameraButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = FaceTrackingActivity
                        .newIntent(SelectPurposeActivity.this, FaceTrackingActivity.PURPOSE_ENTRANCE);
                startActivity(i);
            }
        });

        findViewById(R.id.exitCameraButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = FaceTrackingActivity
                        .newIntent(SelectPurposeActivity.this, FaceTrackingActivity.PURPOSE_EXIT);
                startActivity(i);
            }
        });

        findViewById(R.id.itemCameraButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = FaceTrackingActivity
                        .newIntent(SelectPurposeActivity.this, FaceTrackingActivity.PURPOSE_ITEM);
                startActivity(i);
            }
        });


    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);

        // Trigger the initial hide() shortly after the activity has been
        // created, to briefly hint to the user that UI controls
        // are available.
        delayedHide(100);
    }

    private void toggle() {
        if (mVisible) {
            hide();
        } else {
            show();
        }
    }

    private void hide() {
        // Hide UI first
        ActionBar actionBar = getActionBar();
        if (actionBar != null) {
            actionBar.hide();
        }

        mVisible = false;

        // Schedule a runnable to remove the status and navigation bar after a delay
        mHideHandler.removeCallbacks(mShowPart2Runnable);
        mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY);
    }

    @SuppressLint("InlinedApi")
    private void show() {
        // Show the system bar
        mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
        mVisible = true;

        // Schedule a runnable to display UI elements after a delay
        mHideHandler.removeCallbacks(mHidePart2Runnable);
        mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY);
    }

    /**
     * Schedules a call to hide() in [delay] milliseconds, canceling any
     * previously scheduled calls.
     */
    private void delayedHide(int delayMillis) {
        mHideHandler.removeCallbacks(mHideRunnable);
        mHideHandler.postDelayed(mHideRunnable, delayMillis);
    }
}


================================================
FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/models/RecognitionCandidate.java
================================================
package com.subhan_nadeem.android.gms.samples.vision.face.facetracker.models;

/**
 * Created by Subhan Nadeem on 2017-03-18.
 */

public class RecognitionCandidate {
    public String getUUID() {
        return UUID;
    }

    public void setUUID(String UUID) {
        this.UUID = UUID;
    }

    public double getConfidence() {
        return confidence;
    }

    public void setConfidence(double confidence) {
        this.confidence = confidence;
    }

    public long getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(long timestamp) {
        this.timestamp = timestamp;
    }

    private String UUID;
    private double confidence;
    private long timestamp;
}


================================================
FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/models/User.java
================================================
package com.subhan_nadeem.android.gms.samples.vision.face.facetracker.models;

import com.google.firebase.database.IgnoreExtraProperties;

/**
 * Created by Subhan Nadeem on 2017-03-18.
 */
@IgnoreExtraProperties
public class User {
    public boolean is_in_store;
    public String name;
    public String photo;
    public String user_id;
}


================================================
FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/ui/camera/CameraSourcePreview.java
================================================
/*
 * Copyright (C) The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.subhan_nadeem.android.gms.samples.vision.face.facetracker.ui.camera;

import android.content.Context;
import android.content.res.Configuration;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.ViewGroup;

import com.google.android.gms.common.images.Size;
import com.google.android.gms.vision.CameraSource;

import java.io.IOException;

public class CameraSourcePreview extends ViewGroup {
    private static final String TAG = "CameraSourcePreview";

    private Context mContext;
    private SurfaceView mSurfaceView;
    private boolean mStartRequested;
    private boolean mSurfaceAvailable;
    private CameraSource mCameraSource;

    private GraphicOverlay mOverlay;

    public CameraSourcePreview(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        mStartRequested = false;
        mSurfaceAvailable = false;

        mSurfaceView = new SurfaceView(context);
        mSurfaceView.getHolder().addCallback(new SurfaceCallback());
        addView(mSurfaceView);
    }

    public void start(CameraSource cameraSource) throws IOException {
        if (cameraSource == null) {
            stop();
        }

        mCameraSource = cameraSource;

        if (mCameraSource != null) {
            mStartRequested = true;
            startIfReady();
        }
    }

    public void start(CameraSource cameraSource, GraphicOverlay overlay) throws IOException {
        mOverlay = overlay;
        start(cameraSource);
    }

    public void stop() {
        if (mCameraSource != null) {
            mCameraSource.stop();
        }
    }

    public void release() {
        if (mCameraSource != null) {
            mCameraSource.release();
            mCameraSource = null;
        }
    }

    private void startIfReady() throws IOException {
        if (mStartRequested && mSurfaceAvailable) {
            mCameraSource.start(mSurfaceView.getHolder());
            if (mOverlay != null) {
                Size size = mCameraSource.getPreviewSize();
                int min = Math.min(size.getWidth(), size.getHeight());
                int max = Math.max(size.getWidth(), size.getHeight());
                if (isPortraitMode()) {
                    // Swap width and height sizes when in portrait, since it will be rotated by
                    // 90 degrees
                    mOverlay.setCameraInfo(min, max, mCameraSource.getCameraFacing());
                } else {
                    mOverlay.setCameraInfo(max, min, mCameraSource.getCameraFacing());
                }
                mOverlay.clear();
            }
            mStartRequested = false;
        }
    }

    private class SurfaceCallback implements SurfaceHolder.Callback {
        @Override
        public void surfaceCreated(SurfaceHolder surface) {
            mSurfaceAvailable = true;
            try {
                startIfReady();
            } catch (IOException e) {
                Log.e(TAG, "Could not start camera source.", e);
            }
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder surface) {
            mSurfaceAvailable = false;
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        }
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        int width = 320;
        int height = 240;
        if (mCameraSource != null) {
            Size size = mCameraSource.getPreviewSize();
            if (size != null) {
                width = size.getWidth();
                height = size.getHeight();
            }
        }

        // Swap width and height sizes when in portrait, since it will be rotated 90 degrees
        if (isPortraitMode()) {
            int tmp = width;
            width = height;
            height = tmp;
        }

        final int layoutWidth = right - left;
        final int layoutHeight = bottom - top;

        // Computes height and width for potentially doing fit width.
        int childWidth = layoutWidth;
        int childHeight = (int)(((float) layoutWidth / (float) width) * height);

        // If height is too tall using fit width, does fit height instead.
        if (childHeight > layoutHeight) {
            childHeight = layoutHeight;
            childWidth = (int)(((float) layoutHeight / (float) height) * width);
        }

        for (int i = 0; i < getChildCount(); ++i) {
            getChildAt(i).layout(0, 0, childWidth, childHeight);
        }

        try {
            startIfReady();
        } catch (IOException e) {
            Log.e(TAG, "Could not start camera source.", e);
        }
    }

    private boolean isPortraitMode() {
        int orientation = mContext.getResources().getConfiguration().orientation;
        if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
            return false;
        }
        if (orientation == Configuration.ORIENTATION_PORTRAIT) {
            return true;
        }

        Log.d(TAG, "isPortraitMode returning false by default");
        return false;
    }
}


================================================
FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/ui/camera/GraphicOverlay.java
================================================
/*
 * Copyright (C) The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.subhan_nadeem.android.gms.samples.vision.face.facetracker.ui.camera;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;

import com.google.android.gms.vision.CameraSource;

import java.util.HashSet;
import java.util.Set;

/**
 * A view which renders a series of custom graphics to be overlayed on top of an associated preview
 * (i.e., the camera preview).  The creator can add graphics objects, update the objects, and remove
 * them, triggering the appropriate drawing and invalidation within the view.<p>
 *
 * Supports scaling and mirroring of the graphics relative the camera's preview properties.  The
 * idea is that detection items are expressed in terms of a preview size, but need to be scaled up
 * to the full view size, and also mirrored in the case of the front-facing camera.<p>
 *
 * Associated {@link Graphic} items should use the following methods to convert to view coordinates
 * for the graphics that are drawn:
 * <ol>
 * <li>{@link Graphic#scaleX(float)} and {@link Graphic#scaleY(float)} adjust the size of the
 * supplied value from the preview scale to the view scale.</li>
 * <li>{@link Graphic#translateX(float)} and {@link Graphic#translateY(float)} adjust the coordinate
 * from the preview's coordinate system to the view coordinate system.</li>
 * </ol>
 */
public class GraphicOverlay extends View {
    private final Object mLock = new Object();
    private int mPreviewWidth;
    private float mWidthScaleFactor = 1.0f;
    private int mPreviewHeight;
    private float mHeightScaleFactor = 1.0f;
    private int mFacing = CameraSource.CAMERA_FACING_BACK;
    private Set<Graphic> mGraphics = new HashSet<>();

    /**
     * Base class for a custom graphics object to be rendered within the graphic overlay.  Subclass
     * this and implement the {@link Graphic#draw(Canvas)} method to define the
     * graphics element.  Add instances to the overlay using {@link GraphicOverlay#add(Graphic)}.
     */
    public static abstract class Graphic {
        private GraphicOverlay mOverlay;

        public Graphic(GraphicOverlay overlay) {
            mOverlay = overlay;
        }

        /**
         * Draw the graphic on the supplied canvas.  Drawing should use the following methods to
         * convert to view coordinates for the graphics that are drawn:
         * <ol>
         * <li>{@link Graphic#scaleX(float)} and {@link Graphic#scaleY(float)} adjust the size of
         * the supplied value from the preview scale to the view scale.</li>
         * <li>{@link Graphic#translateX(float)} and {@link Graphic#translateY(float)} adjust the
         * coordinate from the preview's coordinate system to the view coordinate system.</li>
         * </ol>
         *
         * @param canvas drawing canvas
         */
        public abstract void draw(Canvas canvas);

        /**
         * Adjusts a horizontal value of the supplied value from the preview scale to the view
         * scale.
         */
        public float scaleX(float horizontal) {
            return horizontal * mOverlay.mWidthScaleFactor;
        }

        /**
         * Adjusts a vertical value of the supplied value from the preview scale to the view scale.
         */
        public float scaleY(float vertical) {
            return vertical * mOverlay.mHeightScaleFactor;
        }

        /**
         * Adjusts the x coordinate from the preview's coordinate system to the view coordinate
         * system.
         */
        public float translateX(float x) {
            if (mOverlay.mFacing == CameraSource.CAMERA_FACING_FRONT) {
                return mOverlay.getWidth() - scaleX(x);
            } else {
                return scaleX(x);
            }
        }

        /**
         * Adjusts the y coordinate from the preview's coordinate system to the view coordinate
         * system.
         */
        public float translateY(float y) {
            return scaleY(y);
        }

        public void postInvalidate() {
            mOverlay.postInvalidate();
        }
    }

    public GraphicOverlay(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    /**
     * Removes all graphics from the overlay.
     */
    public void clear() {
        synchronized (mLock) {
            mGraphics.clear();
        }
        postInvalidate();
    }

    /**
     * Adds a graphic to the overlay.
     */
    public void add(Graphic graphic) {
        synchronized (mLock) {
            mGraphics.add(graphic);
        }
        postInvalidate();
    }

    /**
     * Removes a graphic from the overlay.
     */
    public void remove(Graphic graphic) {
        synchronized (mLock) {
            mGraphics.remove(graphic);
        }
        postInvalidate();
    }

    /**
     * Sets the camera attributes for size and facing direction, which informs how to transform
     * image coordinates later.
     */
    public void setCameraInfo(int previewWidth, int previewHeight, int facing) {
        synchronized (mLock) {
            mPreviewWidth = previewWidth;
            mPreviewHeight = previewHeight;
            mFacing = facing;
        }
        postInvalidate();
    }

    /**
     * Draws the overlay with its associated graphic objects.
     */
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        synchronized (mLock) {
            if ((mPreviewWidth != 0) && (mPreviewHeight != 0)) {
                mWidthScaleFactor = (float) canvas.getWidth() / (float) mPreviewWidth;
                mHeightScaleFactor = (float) canvas.getHeight() / (float) mPreviewHeight;
            }

            for (Graphic graphic : mGraphics) {
                graphic.draw(canvas);
            }
        }
    }
}


================================================
FILE: Android/FaceTracker/app/src/main/res/layout/activity_select_purpose.xml
================================================
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:id="@+id/contentView"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="#546E7A"
              android:orientation="vertical"
              tools:context="com.subhan_nadeem.android.gms.samples.vision.face.facetracker.activities.SelectPurposeActivity">

    <TextView
        android:id="@+id/ezshopTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="EZShop"
        android:layout_marginTop="50dp"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textSize="50dp"/>

    <Button
        android:id="@+id/entranceCameraButton"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="100dp"
        android:background="#263238"
        android:text="Entrance Camera"/>

    <Button
        android:id="@+id/exitCameraButton"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="8dp"
        android:background="#263238"
        android:text="Exit Camera"/>

    <Button
        android:id="@+id/itemCameraButton"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"

        android:layout_margin="8dp"
        android:background="#263238"
        android:text="Item camera"/>
</LinearLayout>


================================================
FILE: Android/FaceTracker/app/src/main/res/layout/main.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/topLayout"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true">

  <com.subhan_nadeem.android.gms.samples.vision.face.facetracker.ui.camera.CameraSourcePreview
      android:id="@+id/preview"
      android:layout_width="match_parent"
      android:layout_gravity="center"
      android:layout_weight="1"
      android:layout_height="match_parent">
    <com.subhan_nadeem.android.gms.samples.vision.face.facetracker.ui.camera.GraphicOverlay
        android:id="@+id/faceOverlay"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ProgressBar
        style="@style/Widget.AppCompat.ProgressBar"
        android:layout_width="wrap_content"
        android:id="@+id/progressBar"
        android:foregroundGravity="top"
        android:layout_height="wrap_content"/>
  </com.subhan_nadeem.android.gms.samples.vision.face.facetracker.ui.camera.CameraSourcePreview>

  <TextView
      android:layout_width="match_parent"
      android:id="@+id/personText"
      android:text="Hello, Subhan"
      android:gravity="center"
      android:textAppearance="@style/TextAppearance.AppCompat.Large"
      android:padding="4dp"
      android:layout_height="wrap_content"/>
  <Button
      android:layout_width="match_parent"
      android:id="@+id/cameraButton"
      android:text="Switch Cameras"
      android:layout_height="wrap_content"/>
</LinearLayout>


================================================
FILE: Android/FaceTracker/app/src/main/res/layout-land/main.xml
================================================
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/topLayout"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true">

  <com.subhan_nadeem.android.gms.samples.vision.face.facetracker.ui.camera.CameraSourcePreview
      android:id="@+id/preview"
      android:layout_width="match_parent"
      android:layout_weight="1"
      android:layout_height="match_parent">

    <com.subhan_nadeem.android.gms.samples.vision.face.facetracker.ui.camera.GraphicOverlay
        android:id="@+id/faceOverlay"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ProgressBar
        style="@style/Widget.AppCompat.ProgressBar"
        android:layout_width="wrap_content"
        android:id="@+id/progressBar"
        android:foregroundGravity="top"
        android:layout_height="wrap_content"/>
  </com.subhan_nadeem.android.gms.samples.vision.face.facetracker.ui.camera.CameraSourcePreview>
  <TextView
      android:layout_width="match_parent"
      android:id="@+id/personText"
      android:text="Hello, Subhan"
      android:gravity="center"
      android:textAppearance="@style/TextAppearance.AppCompat.Large"
      android:padding="4dp"
      android:layout_height="wrap_content"/>
  <Button
      android:layout_width="match_parent"
      android:id="@+id/cameraButton"
      android:text="Switch Cameras"
      android:layout_height="wrap_content"/>
</LinearLayout>


================================================
FILE: Android/FaceTracker/app/src/main/res/values/attrs.xml
================================================
<resources>

    <!-- Declare custom theme attributes that allow changing which styles are
         used for button bars depending on the API level.
         ?android:attr/buttonBarStyle is new as of API 11 so this is
         necessary to support previous API levels. -->
    <declare-styleable name="ButtonBarContainerTheme">
        <attr name="metaButtonBarStyle" format="reference"/>
        <attr name="metaButtonBarButtonStyle" format="reference"/>
    </declare-styleable>

</resources>


================================================
FILE: Android/FaceTracker/app/src/main/res/values/colors.xml
================================================
<resources>

    <color name="black_overlay">#66000000</color>

</resources>


================================================
FILE: Android/FaceTracker/app/src/main/res/values/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="ok">OK</string>
    <string name="permission_camera_rationale">Access to the camera is needed for detection</string>
    <string name="no_camera_permission">This application cannot run because it does not have the camera permission.  The application will now exit.</string>
    <string name="low_storage_error">Face detector dependencies cannot be downloaded due to low device storage</string>

    <string name="title_activity_select_purpose">SelectPurposeActivity</string>
    <string name="dummy_button">Dummy Button</string>
    <string name="dummy_content">DUMMY\nCONTENT</string>
</resources>


================================================
FILE: Android/FaceTracker/app/src/main/res/values/styles.xml
================================================
<resources>

    <style name="FullscreenTheme" parent="Theme.AppCompat">
        <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
        <item name="android:windowActionBarOverlay">true</item>
        <item name="android:windowBackground">@null</item>
        <item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
        <item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
    </style>

    <style name="FullscreenActionBarStyle" parent="android:Widget.Holo.ActionBar">
        <item name="android:background">@color/black_overlay</item>
    </style>

</resources>


================================================
FILE: Android/FaceTracker/build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}


================================================
FILE: Android/FaceTracker/gradle/wrapper/gradle-wrapper.properties
================================================
#Wed Aug 31 13:39:19 CEST 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip


================================================
FILE: Android/FaceTracker/gradle.properties
================================================
# Project-wide Gradle settings.

# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.

# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true

================================================
FILE: Android/FaceTracker/gradlew
================================================
#!/usr/bin/env bash

##############################################################################
##
##  Gradle start up script for UN*X
##
##############################################################################

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""

APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"

warn ( ) {
    echo "$*"
}

die ( ) {
    echo
    echo "$*"
    echo
    exit 1
}

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
  CYGWIN* )
    cygwin=true
    ;;
  Darwin* )
    darwin=true
    ;;
  MINGW* )
    msys=true
    ;;
esac

# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi

# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
        PRG="$link"
    else
        PRG=`dirname "$PRG"`"/$link"
    fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
cd "$SAVED" >&-

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar

# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD="$JAVA_HOME/jre/sh/java"
    else
        JAVACMD="$JAVA_HOME/bin/java"
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD="java"
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi

# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
    MAX_FD_LIMIT=`ulimit -H -n`
    if [ $? -eq 0 ] ; then
        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
            MAX_FD="$MAX_FD_LIMIT"
        fi
        ulimit -n $MAX_FD
        if [ $? -ne 0 ] ; then
            warn "Could not set maximum file descriptor limit: $MAX_FD"
        fi
    else
        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
    fi
fi

# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi

# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`

    # We build the pattern for arguments to be converted via cygpath
    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
    SEP=""
    for dir in $ROOTDIRSRAW ; do
        ROOTDIRS="$ROOTDIRS$SEP$dir"
        SEP="|"
    done
    OURCYGPATTERN="(^($ROOTDIRS))"
    # Add a user-defined pattern to the cygpath arguments
    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
    fi
    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    i=0
    for arg in "$@" ; do
        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option

        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
        else
            eval `echo args$i`="\"$arg\""
        fi
        i=$((i+1))
    done
    case $i in
        (0) set -- ;;
        (1) set -- "$args0" ;;
        (2) set -- "$args0" "$args1" ;;
        (3) set -- "$args0" "$args1" "$args2" ;;
        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
    esac
fi

# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
    JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"

exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"


================================================
FILE: Android/FaceTracker/gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:init
@rem Get command-line arguments, handling Windowz variants

if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args

:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2

:win9xME_args_slurp
if "x%~1" == "x" goto execute

set CMD_LINE_ARGS=%*
goto execute

:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: Android/FaceTracker/settings.gradle
================================================
include ':app'


================================================
FILE: Android/README.md
================================================
Hello!


================================================
FILE: Backend/README.md
================================================
Hello!


================================================
FILE: README.md
================================================
## Read the viral article about this project [here!](https://medium.freecodecamp.org/how-we-recreated-amazon-go-in-36-hours-e32a4101d5f0)

Our presentation video link: https://goo.gl/photos/FkMtHoojQa9b82736

# EZShop
EZShop is a brick-and-mortar modular shopping infrastructure that provides customers with a completely frictionless shopping experience. Inspired by the recent innovations revealed by Amazon Go, our team ambitiously wanted to recreate the same experience - on a student budget. Furthermore, we wanted to innovate and go one step further - users of Amazon Go have to scan in and out of the store with a barcode to verify their identity. We wanted to remove that friction as well, and we did. With just everyday mobile devices, and a Raspberry Pi, we created EZShop.

The proof-of-concept that we actually created is incredibly true to our vision - we have built a revolving-door shopping system where individuals register into our database by providing only their name and a picture of themselves. Customers can then enter our shop by simply walking by the camera stationed at our entrance, and can pick up an item and have it automatically added to their cart. Items are detected as picked up by placing light sensors and ultrasound under their respective racks.

Managers can also track customers in their stores in realtime through our manager app by seeing which customers are in store and what they have in their cart.

Customers can view their cart in real time on their phone with our companion app and then walk out past our exit camera and be notified of their bill on their phone. All without human interaction, barcode scanning, and best of all, without wait times.

Created by Ruslan Nikolaev, Jung Choi, Soheil Hamidi, and Subhan Nadeem


================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/ActivitiyIndicator.swift
================================================
//
//  ActivitiyIndicator.swift
//  emii
//
//  Created by Jung Geon Choi on 2017-03-04.
//  Copyright © 2017 Emanant Inc. All rights reserved.
//
import Foundation
import UIKit

class ActivityIndicator {
	static let shared = ActivityIndicator()

	var blurEffect = UIBlurEffect()
	var backgroundView = UIView()
	var blurEffectView = UIVisualEffectView()
	var loadingIndicator = UIActivityIndicatorView()
	var myCover = UIView()
	let labelText=UILabel()

	init () {
		// make background blur
		blurEffect = UIBlurEffect(style: UIBlurEffectStyle.extraLight)
		blurEffectView = UIVisualEffectView(effect: blurEffect)

		// make activity indicator
//		backgroundView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.3)
		loadingIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 44, height: 44))

	}

	func show(_ view: UIView) {
		blurEffectView.frame = view.bounds
//		backgroundView.frame = view.bounds
		loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.whiteLarge
		loadingIndicator.hidesWhenStopped = true
		loadingIndicator.startAnimating()
		loadingIndicator.center = view.center
		loadingIndicator.color = view.tintColor
//		view.addSubview(backgroundView)
		view.addSubview(blurEffectView)
		view.addSubview(loadingIndicator)
//		labelText.frame=CGRect(x: 0,y: loadingIndicator.center.y+40,width: view.frame.width,height: 20)
//		labelText.text="Loading..."
//		labelText.textAlignment=NSTextAlignment.center
//		labelText.textColor=UIColor.white
//		view.addSubview(labelText)
		blurEffectView.show()
		loadingIndicator.show()

	}

	func hide() {
		blurEffectView.hide()
		loadingIndicator.hide()

		blurEffectView.removeFromSuperview()
		loadingIndicator.removeFromSuperview()
//		myCover.removeFromSuperview()
//		backgroundView.removeFromSuperview()

//		labelText.removeFromSuperview()
	}
}


================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/AppDelegate.swift
================================================
//
//  AppDelegate.swift
//  EZShopManager
//
//  Created by Jung Geon Choi on 2017-03-17.
//  Copyright © 2017 Jung Geon Choi. All rights reserved.
//

import UIKit
import Firebase

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

	var window: UIWindow?


	func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
		
		FIRApp.configure()
		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:.
	}


}



================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images" : [
    {
      "size" : "20x20",
      "idiom" : "iphone",
      "filename" : "Icon-App-20x20@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "20x20",
      "idiom" : "iphone",
      "filename" : "Icon-App-20x20@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-App-29x29@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-App-29x29@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-App-29x29@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "Icon-App-40x40@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "Icon-App-40x40@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "57x57",
      "idiom" : "iphone",
      "filename" : "Icon-App-57x57@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "57x57",
      "idiom" : "iphone",
      "filename" : "Icon-App-57x57@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "Icon-App-60x60@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "Icon-App-60x60@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "20x20",
      "idiom" : "ipad",
      "filename" : "Icon-App-20x20@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "20x20",
      "idiom" : "ipad",
      "filename" : "Icon-App-20x20@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "ipad",
      "filename" : "Icon-App-29x29@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "29x29",
      "idiom" : "ipad",
      "filename" : "Icon-App-29x29@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "ipad",
      "filename" : "Icon-App-40x40@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "40x40",
      "idiom" : "ipad",
      "filename" : "Icon-App-40x40@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "50x50",
      "idiom" : "ipad",
      "filename" : "Icon-Small-50x50@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "50x50",
      "idiom" : "ipad",
      "filename" : "Icon-Small-50x50@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "72x72",
      "idiom" : "ipad",
      "filename" : "Icon-App-72x72@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "72x72",
      "idiom" : "ipad",
      "filename" : "Icon-App-72x72@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "76x76",
      "idiom" : "ipad",
      "filename" : "Icon-App-76x76@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "76x76",
      "idiom" : "ipad",
      "filename" : "Icon-App-76x76@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "83.5x83.5",
      "idiom" : "ipad",
      "filename" : "Icon-App-83.5x83.5@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "Icon-App-40x40@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "Icon-App-60x60@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "76x76",
      "idiom" : "iphone",
      "filename" : "Icon-App-76x76@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "76x76",
      "idiom" : "ipad",
      "filename" : "Icon-App-76x76@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/CameraSquare.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "CameraSquare.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "CameraSquare@2x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/cat.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "Cute-Cat.jpg",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/logo.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "Untitled-1.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "Untitled-2.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "Untitled-3.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/medical-notes-symbol-of-a-list-paper-on-a-clipboard.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "medical-notes-symbol-of-a-list-paper-on-a-clipboard.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "medical-notes-symbol-of-a-list-paper-on-a-clipboard (1).png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "medical-notes-symbol-of-a-list-paper-on-a-clipboard (2).png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/squarePNG.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "squarePNG.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/store.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "store.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "store (1).png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "store (2).png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/user.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "user.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "user (1).png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "user (2).png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/Base.lproj/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11134" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11106"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="EHf-IW-A2E">
            <objects>
                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
                        <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="53" y="375"/>
        </scene>
    </scenes>
</document>


================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11762" systemVersion="16D32" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="dhw-Zy-YSP">
    <device id="ipad9_7" orientation="landscape">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11757"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--Register-->
        <scene sceneID="tne-QT-ifu">
            <objects>
                <viewController id="BYZ-38-t0r" customClass="EnrollViewController" customModule="EZShopManager" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
                        <rect key="frame" x="0.0" y="0.0" width="1024" height="768"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="logo" translatesAutoresizingMaskIntoConstraints="NO" id="t8I-hU-4Wt">
                                <rect key="frame" x="20" y="72" width="448" height="264"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                            </imageView>
                            <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="line" placeholder="Name" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="0lH-pi-KOI">
                                <rect key="frame" x="546" y="159" width="458" height="52"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <nil key="textColor"/>
                                <fontDescription key="fontDescription" type="system" pointSize="40"/>
                                <textInputTraits key="textInputTraits"/>
                            </textField>
                            <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Yad-kE-gm8">
                                <rect key="frame" x="640" y="276" width="270" height="60"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <fontDescription key="fontDescription" name="AppleSDGothicNeo-Bold" family="Apple SD Gothic Neo" pointSize="40"/>
                                <state key="normal" title="REGISTER">
                                    <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                                </state>
                                <connections>
                                    <action selector="takePhoto" destination="BYZ-38-t0r" eventType="touchUpInside" id="S0L-Ji-9Vq"/>
                                </connections>
                            </button>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Enter customer's name" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XJa-wQ-ACS">
                                <rect key="frame" x="546" y="123" width="235" height="28"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <fontDescription key="fontDescription" type="system" pointSize="23"/>
                                <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <color key="backgroundColor" red="1" green="0.43438142540000002" blue="0.059762112800000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    </view>
                    <navigationItem key="navigationItem" title="Register" id="YzC-Mw-sYv">
                        <barButtonItem key="rightBarButtonItem" title="Store" id="Mae-oW-Xsf">
                            <connections>
                                <action selector="gotostore" destination="BYZ-38-t0r" id="YyV-ei-NhU"/>
                            </connections>
                        </barButtonItem>
                    </navigationItem>
                    <connections>
                        <outlet property="userNameLabel" destination="0lH-pi-KOI" id="B2M-WP-Bk2"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1572.65625" y="77.34375"/>
        </scene>
        <!--User Details View Controller-->
        <scene sceneID="O5f-lP-VNd">
            <objects>
                <viewController id="5ur-qH-w7o" customClass="UserDetailsViewController" customModule="EZShopManager" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="90u-9E-a3S"/>
                        <viewControllerLayoutGuide type="bottom" id="Nui-FP-D9w"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="6T8-Eb-9vk">
                        <rect key="frame" x="0.0" y="0.0" width="703" height="768"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="JUI-0Z-wof">
                                <rect key="frame" x="20" y="28" width="200" height="200"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                            </imageView>
                            <tableView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="1VD-cN-yrG">
                                <rect key="frame" x="0.0" y="280" width="703" height="439"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                                <prototypes>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="ItemCell" textLabel="IrI-NR-j7h" detailTextLabel="ZFL-mu-E5Q" style="IBUITableViewCellStyleValue1" id="Adn-8z-m3P">
                                        <rect key="frame" x="0.0" y="28" width="703" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Adn-8z-m3P" id="RRF-pB-2qP">
                                            <rect key="frame" x="0.0" y="0.0" width="703" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="IrI-NR-j7h">
                                                    <rect key="frame" x="15.5" y="12" width="33.5" height="20.5"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Detail" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ZFL-mu-E5Q">
                                                    <rect key="frame" x="643.5" y="12" width="44" height="20.5"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                </prototypes>
                                <connections>
                                    <outlet property="dataSource" destination="5ur-qH-w7o" id="ddJ-YU-5EM"/>
                                    <outlet property="delegate" destination="5ur-qH-w7o" id="GZF-GD-Yk8"/>
                                </connections>
                            </tableView>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zkh-SN-8AB">
                                <rect key="frame" x="228" y="28" width="455" height="32"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <fontDescription key="fontDescription" type="system" pointSize="26"/>
                                <nil key="textColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CZx-Dt-CMz">
                                <rect key="frame" x="228" y="196" width="455" height="32"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <fontDescription key="fontDescription" type="system" weight="light" pointSize="21"/>
                                <nil key="textColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="x7R-xK-Sxc">
                                <rect key="frame" x="405" y="78" width="100" height="100"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                            </view>
                            <view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="wBM-yJ-9p3">
                                <rect key="frame" x="20" y="271" width="663" height="1"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
                            </view>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Carts" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="w6p-qA-UX0">
                                <rect key="frame" x="20" y="256" width="35" height="17"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <fontDescription key="fontDescription" type="system" weight="light" pointSize="14"/>
                                <nil key="textColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                    </view>
                    <connections>
                        <outlet property="tableView" destination="1VD-cN-yrG" id="mlH-lE-Ymh"/>
                        <outlet property="userImageView" destination="JUI-0Z-wof" id="x4N-hG-Oa4"/>
                        <outlet property="userNameLabel" destination="zkh-SN-8AB" id="zMB-ck-44l"/>
                        <outlet property="userStatusCircle" destination="x7R-xK-Sxc" id="kOk-fW-jOH"/>
                        <outlet property="userStatusLabel" destination="CZx-Dt-CMz" id="wT7-Wj-cBL"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="bUZ-xi-qAK" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="2308.59375" y="1732.8125"/>
        </scene>
        <!--Inventory-->
        <scene sceneID="A8c-ck-KMm">
            <objects>
                <viewController id="Esx-mS-mCC" customClass="InventoriesViewController" customModule="EZShopManager" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="PvM-X8-vYc"/>
                        <viewControllerLayoutGuide type="bottom" id="5D4-N6-Prp"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="gtq-jE-wmm">
                        <rect key="frame" x="0.0" y="0.0" width="1024" height="768"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="PtE-K8-tnj">
                                <rect key="frame" x="20" y="28" width="984" height="691"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                                <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="llg-PP-fhM">
                                    <size key="itemSize" width="300" height="300"/>
                                    <size key="headerReferenceSize" width="0.0" height="0.0"/>
                                    <size key="footerReferenceSize" width="0.0" height="0.0"/>
                                    <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
                                </collectionViewFlowLayout>
                                <cells>
                                    <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="ItemCell" id="Q69-XF-92J">
                                        <rect key="frame" x="0.0" y="0.0" width="300" height="300"/>
                                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                        <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
                                            <rect key="frame" x="0.0" y="0.0" width="300" height="300"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <imageView userInteractionEnabled="NO" tag="100" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xxD-xA-i5C">
                                                    <rect key="frame" x="8" y="8" width="284" height="202"/>
                                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                                </imageView>
                                                <label opaque="NO" userInteractionEnabled="NO" tag="101" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Name of product" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AbZ-KC-zFn">
                                                    <rect key="frame" x="8" y="216" width="284" height="21"/>
                                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <label opaque="NO" userInteractionEnabled="NO" tag="102" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="$ 9.99" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7OT-sH-pfE">
                                                    <rect key="frame" x="8" y="237" width="284" height="21"/>
                                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <label opaque="NO" userInteractionEnabled="NO" tag="103" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Stock Level:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="J8Q-nZ-Kx8">
                                                    <rect key="frame" x="8" y="271" width="185" height="21"/>
                                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <label opaque="NO" userInteractionEnabled="NO" tag="104" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="999" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PQT-lg-3BC">
                                                    <rect key="frame" x="254" y="268" width="38" height="24"/>
                                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="20"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                        </view>
                                    </collectionViewCell>
                                </cells>
                                <connections>
                                    <outlet property="dataSource" destination="Esx-mS-mCC" id="21W-Tj-ANw"/>
                                    <outlet property="delegate" destination="Esx-mS-mCC" id="3lM-Tu-6Bg"/>
                                </connections>
                            </collectionView>
                        </subviews>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                    </view>
                    <tabBarItem key="tabBarItem" title="Inventory" image="medical-notes-symbol-of-a-list-paper-on-a-clipboard" id="TVe-Zj-hHi"/>
                    <connections>
                        <outlet property="collectionView" destination="PtE-K8-tnj" id="mOO-1c-p7M"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="1C1-7A-ILx" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1093.9453125" y="2300"/>
        </scene>
        <!--Users Table View Controller-->
        <scene sceneID="Gyg-sV-iPb">
            <objects>
                <tableViewController clearsSelectionOnViewWillAppear="NO" id="iD5-fE-N9p" customClass="UsersTableViewController" customModule="EZShopManager" customModuleProvider="target" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="w42-q8-PUN">
                        <rect key="frame" x="0.0" y="0.0" width="320" height="768"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                        <prototypes>
                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="UserCell" rowHeight="44" id="hQQ-lz-Yht">
                                <rect key="frame" x="0.0" y="28" width="320" height="44"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="hQQ-lz-Yht" id="Rlk-5A-1U0">
                                    <rect key="frame" x="0.0" y="0.0" width="320" height="43.5"/>
                                    <autoresizingMask key="autoresizingMask"/>
                                    <subviews>
                                        <imageView userInteractionEnabled="NO" tag="100" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="cat" translatesAutoresizingMaskIntoConstraints="NO" id="1Pb-my-okN">
                                            <rect key="frame" x="8" y="7" width="30" height="30"/>
                                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                        </imageView>
                                        <label opaque="NO" userInteractionEnabled="NO" tag="101" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="LongLongName" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="acc-PK-XSk">
                                            <rect key="frame" x="49" y="11" width="263" height="21"/>
                                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                            <nil key="textColor"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                    </subviews>
                                </tableViewCellContentView>
                            </tableViewCell>
                        </prototypes>
                        <connections>
                            <outlet property="dataSource" destination="iD5-fE-N9p" id="Rdh-5Y-gNz"/>
                            <outlet property="delegate" destination="iD5-fE-N9p" id="xqQ-DN-2Sx"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" id="eDd-2C-oJZ">
                        <nil key="title"/>
                        <segmentedControl key="titleView" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bar" selectedSegmentIndex="0" id="w6u-RO-19w">
                            <rect key="frame" x="96" y="7" width="128" height="30"/>
                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                            <segments>
                                <segment title="In Store"/>
                                <segment title="All"/>
                            </segments>
                            <connections>
                                <action selector="segView:" destination="iD5-fE-N9p" eventType="valueChanged" id="3lW-iD-6DI"/>
                            </connections>
                        </segmentedControl>
                    </navigationItem>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="a49-0H-jNg" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="3034.5703125" y="1086.71875"/>
        </scene>
        <!--Navigation Controller-->
        <scene sceneID="LME-JE-3Ep">
            <objects>
                <navigationController id="P1n-pZ-jVg" sceneMemberID="viewController">
                    <navigationBar key="navigationBar" contentMode="scaleToFill" id="cjN-j2-XjU">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <connections>
                        <segue destination="iD5-fE-N9p" kind="relationship" relationship="rootViewController" id="GyT-w6-DGj"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="AGt-0Q-qJO" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="2309" y="1087"/>
        </scene>
        <!--Store-->
        <scene sceneID="VYQ-L0-0Lq">
            <objects>
                <splitViewController id="Oyz-y9-zJo" customClass="MySplitViewController" customModule="EZShopManager" customModuleProvider="target" sceneMemberID="viewController">
                    <tabBarItem key="tabBarItem" title="Store" image="store" id="DLB-rq-Nce"/>
                    <connections>
                        <segue destination="P1n-pZ-jVg" kind="relationship" relationship="masterViewController" id="c4w-DM-BPp"/>
                        <segue destination="5ur-qH-w7o" kind="relationship" relationship="detailViewController" id="CcQ-Ia-wBw"/>
                    </connections>
                </splitViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="AMe-Ze-hJk" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1575" y="1410"/>
        </scene>
        <!--Tab Bar Controller-->
        <scene sceneID="u0w-z4-hAU">
            <objects>
                <tabBarController automaticallyAdjustsScrollViewInsets="NO" id="dhw-Zy-YSP" sceneMemberID="viewController">
                    <toolbarItems/>
                    <tabBar key="tabBar" contentMode="scaleToFill" id="liq-nA-Zws">
                        <rect key="frame" x="0.0" y="0.0" width="1000" height="1000"/>
                        <autoresizingMask key="autoresizingMask"/>
                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                    </tabBar>
                    <connections>
                        <segue destination="jrT-Ry-Wgi" kind="relationship" relationship="viewControllers" id="EUh-Ud-Tgd"/>
                        <segue destination="Oyz-y9-zJo" kind="relationship" relationship="viewControllers" id="T0C-4q-YLb"/>
                        <segue destination="Esx-mS-mCC" kind="relationship" relationship="viewControllers" id="a7b-vq-Yzw"/>
                    </connections>
                </tabBarController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="55x-hX-ohF" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="82.8125" y="77.9296875"/>
        </scene>
        <!--Register-->
        <scene sceneID="Cii-Zz-WK1">
            <objects>
                <navigationController automaticallyAdjustsScrollViewInsets="NO" id="jrT-Ry-Wgi" sceneMemberID="viewController">
                    <tabBarItem key="tabBarItem" title="Register" image="user" id="elc-cY-c0C"/>
                    <toolbarItems/>
                    <navigationBar key="navigationBar" contentMode="scaleToFill" id="ejv-O0-TmD">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <nil name="viewControllers"/>
                    <connections>
                        <segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="MLR-vA-p54"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="PVD-gQ-ugh" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="848.4375" y="77.34375"/>
        </scene>
    </scenes>
    <resources>
        <image name="cat" width="480" height="532"/>
        <image name="logo" width="388" height="222"/>
        <image name="medical-notes-symbol-of-a-list-paper-on-a-clipboard" width="32" height="32"/>
        <image name="store" width="32" height="32"/>
        <image name="user" width="32" height="32"/>
    </resources>
</document>


================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/CLFaceDetectionImagePicker.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6250" systemVersion="13F34" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES" initialViewController="QjQ-r1-aGX">
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6244"/>
    </dependencies>
    <scenes>
        <!--Face Detection Image Picker View Controller-->
        <scene sceneID="xuE-1a-g6t">
            <objects>
                <viewController storyboardIdentifier="CLFaceDetectionImagePickerViewController" id="QjQ-r1-aGX" customClass="CLFaceDetectionImagePickerViewController" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="N2P-fV-CSF"/>
                        <viewControllerLayoutGuide type="bottom" id="g6j-jy-C8s"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="dGK-OV-JKH">
                        <rect key="frame" x="0.0" y="0.0" width="1024" height="768"/>
                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                        <subviews>
                            <view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bO3-Sr-Txp">
                                <rect key="frame" x="0.0" y="0.0" width="1024" height="768"/>
                                <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                            </view>
                        </subviews>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                    </view>
                    <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
                    <connections>
                        <outlet property="preView" destination="bO3-Sr-Txp" id="dYN-XF-gQZ"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="QLI-pd-CfP" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-66" y="-595"/>
        </scene>
    </scenes>
    <simulatedMetricsContainer key="defaultSimulatedMetrics">
        <simulatedStatusBarMetrics key="statusBar" statusBarStyle="lightContent"/>
        <simulatedOrientationMetrics key="orientation"/>
        <simulatedScreenMetrics key="destination"/>
    </simulatedMetricsContainer>
</document>


================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/CLFaceDetectionImagePickerViewController.h
================================================
//
//  CLFaceDetectionViewController.h
//
//  Created by caesar on 26/02/14.
//

#import <UIKit/UIKit.h>

typedef NS_ENUM(NSInteger, CLCaptureDevicePosition) {
    CLCaptureDevicePositionBack                = 1,
    CLCaptureDevicePositionFront               = 2
} NS_AVAILABLE(10_7, 4_0);


// Keys for customize the pickerView behavior
extern NSString *const CLTotalDetectCountDownSecond;    //Total length of waiting period for face detection - Default: 10
extern NSString *const CLFaceDetectionSquareImageName;  //Image name for the face detection square image    - Default: CameraSquare
extern NSString *const CLFaceDetectionTimes;            //Continually detecting face times, this will be helpful to make sure the people are not shaking his head by purpose in order to give u a not-clear image       - Default: 5
extern NSString *const CLCameraPosition;                //Choose which camera you want to use, CLCaptureDevicePositionBack or CLCaptureDevicePositionFront  -Default: CLCaptureDevicePositionFront

@protocol CLFaceDetectionImagePickerDelegate <NSObject>
-(void)CLFaceDetectionImagePickerDidDismiss: (NSData *)data blnSuccess:(BOOL)blnSuccess;
@optional
-(NSDictionary *)faceDetectionBehaviorAttributes;       //Optional Function, Set the FaceDetectionPlugin behavior attributes by using above keys



@end




@interface CLFaceDetectionImagePickerViewController : UIViewController

@property (nonatomic, weak) id<CLFaceDetectionImagePickerDelegate> delegate;
@end


================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/CLFaceDetectionImagePickerViewController.m
================================================
//
//  CLFaceDetectionImagePickerViewController.m
//  DeputyKiosk
//
//  Created by caesar on 26/02/14.
//  Copyright (c) 2014 Caesar. All rights reserved.
//

#import "CLFaceDetectionImagePickerViewController.h"

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <CoreImage/CoreImage.h>
#import <ImageIO/ImageIO.h>
#import <AssertMacros.h>
#import <AssetsLibrary/AssetsLibrary.h>

#import "UIImage+CL.h"

#define TOTAL_TIMES_COUNT_DOWN 4    //This is initial waiting time when the imagePicker is firstly opened.

//Attribute Keys
NSString *const CLTotalDetectCountDownSecond = @"CLTotalDetectCountDownSecond";
NSString *const CLFaceDetectionSquareImageName = @"CLFaceDetectionSquareImageName";
NSString *const CLFaceDetectionTimes = @"CLFaceDetectionTimes";
NSString *const CLCameraPosition = @"CLCameraPosition";

//Default Values
static NSInteger const CLTotalDetectCountDownSecondDefault = 10;
static NSInteger const CLFaceDetectionTimesDefault = 5;
static NSString* const CLFaceDetectionSquareImageNameDefault = @"CameraSquare";
static NSInteger const CLCameraPositionDefault = AVCaptureDevicePositionFront;

@interface CLFaceDetectionImagePickerViewController ()<UIGestureRecognizerDelegate, AVCaptureVideoDataOutputSampleBufferDelegate>

@property (nonatomic) NSInteger totalCountDownWaitingSecond;
@property (nonatomic) NSInteger totalFaceDetectionTimes;
@property (nonatomic) NSInteger cameraPosition;
@property (nonatomic, strong) NSString *faceDetectionSquareImageName;


@property (weak, nonatomic) IBOutlet UIView *preView;

@property (nonatomic, strong) AVCaptureSession *session;
@property (nonatomic, strong) AVCaptureStillImageOutput *stillImageOutput;
@property (nonatomic, strong) AVCaptureVideoDataOutput *videoDataOutput;
@property (nonatomic) dispatch_queue_t videoDataOutputQueue;
@property (nonatomic, strong) AVCaptureVideoPreviewLayer *previewLayer;
@property (nonatomic, strong) CIDetector *faceDetector;
@property (nonatomic, strong) UIImage *square;
@property (nonatomic) double timesDetectFace;
@property (nonatomic) double timesCountDown;

@property (nonatomic, strong) NSTimer *timerNoFaceDetect;
@property (nonatomic, strong) NSNumber *blnDisableAutoFaceDetection;

- (void)setupAVCapture;
- (void)teardownAVCapture;
- (void)drawFaceBoxesForFeatures:(NSArray *)features
      forVideoBox:(CGRect)videoBox
      orientation:(UIDeviceOrientation)orientation;
@end

@implementation CLFaceDetectionImagePickerViewController

- (id) init
{
    return [[UIStoryboard storyboardWithName:@"CLFaceDetectionImagePicker" bundle:nil] instantiateViewControllerWithIdentifier:@"CLFaceDetectionImagePickerViewController"];
}

-(void)setDelegate:(id<CLFaceDetectionImagePickerDelegate>)delegate
{
    _delegate = delegate;
    [self applyCustomDefaults];
}

-(void)applyCustomDefaults
{
    NSDictionary *attributes;
    
    if ([self.delegate respondsToSelector:@selector(faceDetectionBehaviorAttributes)]) {
        attributes = [self.delegate faceDetectionBehaviorAttributes];
    }
    
    self.totalCountDownWaitingSecond = attributes[CLTotalDetectCountDownSecond] ? [attributes[CLTotalDetectCountDownSecond] integerValue] : CLTotalDetectCountDownSecondDefault;

    self.square = [UIImage imageNamed: attributes[CLFaceDetectionSquareImageName] ? attributes[CLFaceDetectionSquareImageName] : CLFaceDetectionSquareImageNameDefault];
    
    self.cameraPosition = attributes[CLCameraPosition] ? [attributes[CLCameraPosition] integerValue ]: CLCameraPositionDefault;
    
    self.totalFaceDetectionTimes = attributes[CLFaceDetectionTimes] ? [attributes[CLFaceDetectionTimes] integerValue] : CLFaceDetectionTimesDefault;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view.
    
    
}
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    
	[self setupAVCapture];
}
- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}
-(void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    [self teardownAVCapture];
	self.faceDetector = nil;
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
-(UIImage *)square
{
    if(!_square){
        _square = [UIImage imageNamed:CLFaceDetectionSquareImageNameDefault];
    }
    return _square;
}
-(CIDetector *)faceDetector
{
    if(!_faceDetector){
        NSDictionary *detectorOptions = [[NSDictionary alloc] initWithObjectsAndKeys:CIDetectorAccuracyLow, CIDetectorAccuracy, nil];
        _faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:detectorOptions];
    }
    return _faceDetector;
}

- (void)setupAVCapture
{
    self.timesDetectFace = 0;
    self.timesCountDown = TOTAL_TIMES_COUNT_DOWN;
	NSError *error = nil;
	
	self.session = [[AVCaptureSession alloc] init];
    [self.session setSessionPreset:AVCaptureSessionPreset640x480];       //Do not set too high, otherwise face detection will be slow.
    
    // Select a video device, make an input
	AVCaptureDevice *device;
	
    AVCaptureDevicePosition desiredPosition = self.cameraPosition;
	
    // find the front facing camera
	for (AVCaptureDevice *d in [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]) {
		if ([d position] == desiredPosition) {
			device = d;
			break;
		}
	}
    // fall back to the default camera.
    if( nil == device )
    {
        error = [NSError errorWithDomain:NSOSStatusErrorDomain code:404 userInfo:@{@"message": @"No camera found."}];
    }
    
    // get the input device
    AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
    
    
    
	if( !error ) {
        
        // add the input to the session
        if ( [self.session canAddInput:deviceInput] ){
            [self.session addInput:deviceInput];
        }
        
        // Make a still image output
        self.stillImageOutput = [AVCaptureStillImageOutput new];
//        [stillImageOutput addObserver:self forKeyPath:@"capturingStillImage" options:NSKeyValueObservingOptionNew context:AVCaptureStillImageIsCapturingStillImageContext];
        if ( [self.session canAddOutput:self.stillImageOutput] )
            [self.session addOutput:self.stillImageOutput];
        
        // Make a video data output
        self.videoDataOutput = [[AVCaptureVideoDataOutput alloc] init];
        
        // we want BGRA, both CoreGraphics and OpenGL work well with 'BGRA'
        NSDictionary *rgbOutputSettings = [NSDictionary dictionaryWithObject:
                                           [NSNumber numberWithInt:kCMPixelFormat_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey];
        [self.videoDataOutput setVideoSettings:rgbOutputSettings];
        [self.videoDataOutput setAlwaysDiscardsLateVideoFrames:YES]; // discard if the data output queue is blocked
        
        // create a serial dispatch queue used for the sample buffer delegate
        // a serial dispatch queue must be used to guarantee that video frames will be delivered in order
        // see the header doc for setSampleBufferDelegate:queue: for more information
        self.videoDataOutputQueue = dispatch_queue_create("VideoDataOutputQueue", DISPATCH_QUEUE_SERIAL);
        
        [self.videoDataOutput setSampleBufferDelegate:self queue:self.videoDataOutputQueue];
        
        if ( [self.session canAddOutput:self.videoDataOutput] ){
            [self.session addOutput:self.videoDataOutput];
        }
        
        // get the output for doing face detection.
        [[self.videoDataOutput connectionWithMediaType:AVMediaTypeVideo] setEnabled:YES];
        
        
        self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];
        self.previewLayer.backgroundColor = [[UIColor blackColor] CGColor];
        self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspect;
        
        if([self adjustOutputOrientation]  == NO){
            __weak typeof(self) weakSelf = self;
            dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.6 * NSEC_PER_SEC));
            dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
                [self dismissViewControllerAnimated:YES completion:^{
                    
                    [self throwError:@"It seems your camera orientation is not set properly. Please make sure your iPad is in landscape position and try again." title:nil];
                    
                    [weakSelf.delegate CLFaceDetectionImagePickerDidDismiss: nil blnSuccess:NO];
                    
                }];
            });
            
            return;
        }
        
        CALayer *rootLayer = [self.preView layer];
        [rootLayer setMasksToBounds:YES];
        [self.previewLayer setFrame:[rootLayer bounds]];
        [rootLayer addSublayer:self.previewLayer];
        [self.session startRunning];
        
        self.timerNoFaceDetect = [NSTimer scheduledTimerWithTimeInterval:self.totalCountDownWaitingSecond target:self selector:@selector(noFaceDetected) userInfo:nil repeats:NO];
        
        
    }
	if (error) {
        [self throwError:[error localizedDescription]
                   title:[NSString stringWithFormat:@"Please make sure your front camera is allowed to be accessed. \nYou can check it in Settings. \nFailed with errorCode %d", (int)[error code]]];
		[self teardownAVCapture];
	}
}

// clean up capture setup
- (void)teardownAVCapture
{
    for(AVCaptureInput *input in self.session.inputs){
        [self.session removeInput:input];
    }
    for(AVCaptureOutput *output in self.session.outputs){
        [self.session removeOutput:output];
    }
    [self.session stopRunning];
	self.videoDataOutput = nil;
    self.videoDataOutputQueue = nil;
	[self.previewLayer removeFromSuperlayer];
	self.previewLayer = nil;
}

- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
       fromConnection:(AVCaptureConnection *)connection
{
    
    
	// get the image
	CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
	CFDictionaryRef attachments = CMCopyDictionaryOfAttachments(kCFAllocatorDefault, sampleBuffer, kCMAttachmentMode_ShouldPropagate);
	CIImage *ciImage = [[CIImage alloc] initWithCVPixelBuffer:pixelBuffer
                                                      options:(__bridge NSDictionary *)attachments];
	if (attachments) {
		CFRelease(attachments);
    }
    
    // make sure your device orientation is not locked.
	UIDeviceOrientation curDeviceOrientation = [[UIDevice currentDevice] orientation];
    if(!self.blnDisableAutoFaceDetection.intValue){
        NSDictionary *imageOptions = nil;
        
        imageOptions = [NSDictionary dictionaryWithObject:[self exifOrientation:curDeviceOrientation]
                                                   forKey:CIDetectorImageOrientation];
        
        NSArray *features = [self.faceDetector featuresInImage:ciImage
                                                       options:imageOptions];
        
        if(!features.count){
            self.timesDetectFace = 0;
            return;
        }
        
        if(self.timesDetectFace > self.totalFaceDetectionTimes){
            return;
        }
        
        self.timesDetectFace++;
        
        // get the clean aperture
        // the clean aperture is a rectangle that defines the portion of the encoded pixel dimensions
        // that represents image data valid for display.
        CMFormatDescriptionRef fdesc = CMSampleBufferGetFormatDescription(sampleBuffer);
        CGRect clap = CMVideoFormatDescriptionGetCleanAperture(fdesc, false /*originIsTopLeft == false*/);
        
        dispatch_async(dispatch_get_main_queue(), ^(void) {
            [self drawFaceBoxesForFeatures:features forVideoBox:clap orientation:curDeviceOrientation];
        });

    }else{
        if(self.timesCountDown < 0) return;
        
        self.timesCountDown -= 0.03;
        CMFormatDescriptionRef fdesc = CMSampleBufferGetFormatDescription(sampleBuffer);
        CGRect clap = CMVideoFormatDescriptionGetCleanAperture(fdesc, false /*originIsTopLeft == false*/);
        
        dispatch_async(dispatch_get_main_queue(), ^(void) {
            [self drawCountDownforVideoBox:clap orientation:curDeviceOrientation];
        });
    }
	   
    if(self.timesDetectFace >= self.totalFaceDetectionTimes ||  self.timesCountDown <= 0){
        [self.timerNoFaceDetect invalidate];
        CIContext *temporaryContext = [CIContext contextWithOptions:nil];
        CGImageRef videoImage = [temporaryContext
                                 createCGImage:ciImage
                                 fromRect:CGRectMake(0, 0,
                                                     CVPixelBufferGetWidth(pixelBuffer),
                                                     CVPixelBufferGetHeight(pixelBuffer))];

        UIImage *picture = [[UIImage imageWithCGImage:videoImage] imageRotatedWithDeviceOrientation:YES];
        
        NSData *compressedData = UIImageJPEGRepresentation(picture, 1.0);
        
        [self doCloseCaptureAndDelegateClientWithData:compressedData];
    }
}

// utility routing used during image capture to set up capture orientation
- (AVCaptureVideoOrientation)avOrientationForDeviceOrientation:(UIDeviceOrientation)deviceOrientation
{
	AVCaptureVideoOrientation result = AVCaptureVideoOrientationLandscapeLeft;
	if ( deviceOrientation == UIDeviceOrientationLandscapeLeft )
		result = AVCaptureVideoOrientationLandscapeRight;
	else if ( deviceOrientation == UIDeviceOrientationLandscapeRight )
		result = AVCaptureVideoOrientationLandscapeLeft;
   
	return result;
}
-(BOOL)shouldAutorotate
{
    return [self adjustOutputOrientation];
}
-(BOOL)adjustOutputOrientation
{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    
    if(orientation != UIDeviceOrientationLandscapeLeft && orientation != UIDeviceOrientationLandscapeRight){
        return NO;
    }
    
    [self.previewLayer.connection setVideoOrientation:[self avOrientationForDeviceOrientation:orientation]];
    return YES;
}
- (NSNumber *) exifOrientation: (UIDeviceOrientation) orientation
{
	int exifOrientation;
    /* kCGImagePropertyOrientation values
     The intended display orientation of the image. If present, this key is a CFNumber value with the same value as defined
     by the TIFF and EXIF specifications -- see enumeration of integer constants.
     The value specified where the origin (0,0) of the image is located. If not present, a value of 1 is assumed.
     
     used when calling featuresInImage: options: The value for this key is an integer NSNumber from 1..8 as found in kCGImagePropertyOrientation.
     If present, the detection will be done based on that orientation but the coordinates in the returned features will still be based on those of the image. */
    
	enum {
		PHOTOS_EXIF_0ROW_TOP_0COL_LEFT			= 1, //   1  =  0th row is at the top, and 0th column is on the left (THE DEFAULT).
		PHOTOS_EXIF_0ROW_TOP_0COL_RIGHT			= 2, //   2  =  0th row is at the top, and 0th column is on the right.
		PHOTOS_EXIF_0ROW_BOTTOM_0COL_RIGHT      = 3, //   3  =  0th row is at the bottom, and 0th column is on the right.
		PHOTOS_EXIF_0ROW_BOTTOM_0COL_LEFT       = 4, //   4  =  0th row is at the bottom, and 0th column is on the left.
		PHOTOS_EXIF_0ROW_LEFT_0COL_TOP          = 5, //   5  =  0th row is on the left, and 0th column is the top.
		PHOTOS_EXIF_0ROW_RIGHT_0COL_TOP         = 6, //   6  =  0th row is on the right, and 0th column is the top.
		PHOTOS_EXIF_0ROW_RIGHT_0COL_BOTTOM      = 7, //   7  =  0th row is on the right, and 0th column is the bottom.
		PHOTOS_EXIF_0ROW_LEFT_0COL_BOTTOM       = 8  //   8  =  0th row is on the left, and 0th column is the bottom.
	};
	
	switch (orientation) {
		case UIDeviceOrientationPortraitUpsideDown:  // Device oriented vertically, home button on the top
			exifOrientation = PHOTOS_EXIF_0ROW_LEFT_0COL_BOTTOM;
			break;
		case UIDeviceOrientationLandscapeLeft:       // Device oriented horizontally, home button on the right
//			if (self.isUsingFrontFacingCamera)
            exifOrientation =  PHOTOS_EXIF_0ROW_BOTTOM_0COL_RIGHT;
//			else
//				exifOrientation = PHOTOS_EXIF_0ROW_TOP_0COL_LEFT;
			break;
		case UIDeviceOrientationLandscapeRight:      // Device oriented horizontally, home button on the left
//			if (self.isUsingFrontFacingCamera)
				exifOrientation = PHOTOS_EXIF_0ROW_TOP_0COL_LEFT;
//			else
//				exifOrientation = PHOTOS_EXIF_0ROW_BOTTOM_0COL_RIGHT;
			break;
		case UIDeviceOrientationPortrait:            // Device oriented vertically, home button on the bottom
		default:
			exifOrientation = PHOTOS_EXIF_0ROW_RIGHT_0COL_TOP;
			break;
	}
    return [NSNumber numberWithInt:exifOrientation];
}

-(void)doCloseCaptureAndDelegateClientWithData: (NSData *)data
{
    __weak typeof(self) weakSelf = self;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.6 * NSEC_PER_SEC));
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        [self dismissViewControllerAnimated:YES completion:^{
            if(!data){
                [self throwError:@"Sorry, we cannot detect your face." title:nil];
            }
            [weakSelf.delegate CLFaceDetectionImagePickerDidDismiss: data blnSuccess:(data)?YES:NO];
            
        }];
    });
}
-(void)noFaceDetected
{
    [self doCloseCaptureAndDelegateClientWithData:nil];
}


// find where the video box is positioned within the preview layer based on the video size and gravity
+ (CGRect)videoPreviewBoxForGravity:(NSString *)gravity frameSize:(CGSize)frameSize apertureSize:(CGSize)apertureSize
{
    CGFloat apertureRatio = apertureSize.height / apertureSize.width;
    CGFloat viewRatio = frameSize.width / frameSize.height;
    
    CGSize size = CGSizeZero;
    if ([gravity isEqualToString:AVLayerVideoGravityResizeAspectFill]) {
        if (viewRatio > apertureRatio) {
            size.width = frameSize.width;
            size.height = apertureSize.width * (frameSize.width / apertureSize.height);
        } else {
            size.width = apertureSize.height * (frameSize.height / apertureSize.width);
            size.height = frameSize.height;
        }
    } else if ([gravity isEqualToString:AVLayerVideoGravityResizeAspect]) {
        if (viewRatio > apertureRatio) {
            size.width = apertureSize.height * (frameSize.height / apertureSize.width);
            size.height = frameSize.height;
        } else {
            size.width = frameSize.width;
            size.height = apertureSize.width * (frameSize.width / apertureSize.height);
        }
    } else if ([gravity isEqualToString:AVLayerVideoGravityResize]) {
        size.width = frameSize.width;
        size.height = frameSize.height;
    }
	
	CGRect videoBox;
	videoBox.size = size;
	if (size.width < frameSize.width)
		videoBox.origin.x = (frameSize.width - size.width) / 2;
	else
		videoBox.origin.x = (size.width - frameSize.width) / 2;
	
	if ( size.height < frameSize.height )
		videoBox.origin.y = (frameSize.height - size.height) / 2;
	else
		videoBox.origin.y = (size.height - frameSize.height) / 2;
    
	return videoBox;
}

-(void)drawCountDownforVideoBox:(CGRect)clap orientation:(UIDeviceOrientation)orientation
{
    NSArray *sublayers = [NSArray arrayWithArray:[self.previewLayer sublayers]];
	NSInteger sublayersCount = [sublayers count], currentSublayer = 0;
	
	[CATransaction begin];
	[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
	
	// hide all the CountDownLayer layers
	for ( CATextLayer *layer in sublayers ) {
		if ( [[layer name] isEqualToString:@"CountDownLayer"] )
			[layer setHidden:YES];
	}
    
    CGSize parentFrameSize = [self.preView frame].size;
    CATextLayer *featureLayer = nil;
    
    // re-use an existing layer if possible
    while ( !featureLayer && (currentSublayer < sublayersCount) ) {
        CATextLayer *currentLayer = [sublayers objectAtIndex:currentSublayer++];
        if ( [[currentLayer name] isEqualToString:@"CountDownLayer"] ) {
            featureLayer = currentLayer;
            [currentLayer setHidden:NO];
        }
    }
    
    // create a new one if necessary
    if ( !featureLayer ) {
        featureLayer = [CATextLayer new];
//        [featureLayer setContents:(id)[self.square CGImage]];
        [featureLayer setFont:@"Helvetica-Bold"];
        [featureLayer setFontSize:90];
        [featureLayer setAlignmentMode:kCAAlignmentCenter];
        [featureLayer setForegroundColor:[[UIColor whiteColor] CGColor]];
        [featureLayer setName:@"CountDownLayer"];
        [self.previewLayer addSublayer:featureLayer];
    }
    
    int countDown = @(self.timesCountDown).intValue;
    NSString *strCountDown = (countDown > 0)?[NSString stringWithFormat:@"%d", countDown]:@"Smile";
    [featureLayer setString: strCountDown];
    [featureLayer setFrame:CGRectMake( (parentFrameSize.width-300)/2, (parentFrameSize.height-300)/2, 300, 300)];
    
    
	
	[CATransaction commit];
}

// called asynchronously as the capture output is capturing sample buffers, this method asks the face detector (if on)
// to detect features and for each draw the red square in a layer and set appropriate orientation
- (void)drawFaceBoxesForFeatures:(NSArray *)features forVideoBox:(CGRect)clap orientation:(UIDeviceOrientation)orientation
{
	NSArray *sublayers = [NSArray arrayWithArray:[self.previewLayer sublayers]];
	NSInteger sublayersCount = [sublayers count], currentSublayer = 0;
	NSInteger featuresCount = [features count], currentFeature = 0;
	
	[CATransaction begin];
	[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
	
	// hide all the face layers
	for ( CALayer *layer in sublayers ) {
		if ( [[layer name] isEqualToString:@"FaceLayer"] )
			[layer setHidden:YES];
	}
	
	if ( featuresCount == 0) {
		[CATransaction commit];
		return; // early bail.
	}
    
	CGSize parentFrameSize = [self.preView frame].size;
	NSString *gravity = [self.previewLayer videoGravity];
	CGRect previewBox = [CLFaceDetectionImagePickerViewController videoPreviewBoxForGravity:gravity
                                                                 frameSize:parentFrameSize
                                                              apertureSize:clap.size];
	
	for ( CIFaceFeature *ff in features ) {
		CGRect faceRect = [ff bounds];
		// scale coordinates so they fit in the preview box, which may be scaled
		CGFloat widthScaleBy = previewBox.size.width / clap.size.width;
		CGFloat heightScaleBy = previewBox.size.height / clap.size.height;
		faceRect.origin.x *= widthScaleBy;
		faceRect.origin.y *= heightScaleBy;
        
        faceRect = CGRectOffset(faceRect, previewBox.origin.x, previewBox.origin.y);
		
		CALayer *featureLayer = nil;
		
		// re-use an existing layer if possible
		while ( !featureLayer && (currentSublayer < sublayersCount) ) {
			CALayer *currentLayer = [sublayers objectAtIndex:currentSublayer++];
			if ( [[currentLayer name] isEqualToString:@"FaceLayer"] ) {
				featureLayer = currentLayer;
				[currentLayer setHidden:NO];
			}
		}
		
		// create a new one if necessary
		if ( !featureLayer ) {
			featureLayer = [CALayer new];
			[featureLayer setContents:(id)[self.square CGImage]];
			[featureLayer setName:@"FaceLayer"];
			[self.previewLayer addSublayer:featureLayer];
		}
		[featureLayer setFrame:faceRect];
		currentFeature++;
	}
	
	[CATransaction commit];
}


//Throw Error
-(void) throwError:(NSString *)error title:(NSString *)title
{
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: title
                                                        message:error
                                                       delegate:nil
                                              cancelButtonTitle:@"Dismiss"
                                              otherButtonTitles:nil];
    [alertView show];
}

@end


================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/EZShopManager-Bridging-Header.h
================================================
#import "CLFaceDetectionImagePickerViewController.h"


================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/EnrollViewController.swift
================================================
//
//  EnrollViewController.swift
//  EZShopManager
//
//  Created by Jung Geon Choi on 2017-03-17.
//  Copyright © 2017 Jung Geon Choi. All rights reserved.
//

import UIKit
import SwiftyJSON
import FirebaseDatabase
import FirebaseStorage


struct KairosConfig {
	static let app_id = "4724eb0e"
	static let app_key = "f5795e224117ac3393343c6bc14c841b"
}

class EnrollViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, CLFaceDetectionImagePickerDelegate {
	@IBOutlet weak var userNameLabel: UITextField!
	var uuid = ""
	var images: [UIImage] = []
	@IBAction func takePhoto() {
		if userNameLabel.text == "" {
			JGUtils.alert(title: "ERROR", message: "Enter user name")
		}
		uuid = UUID().uuidString
		userNameLabel.resignFirstResponder()
		JGUtils.alert(title: "Instruction", message: "Hold ipad on your eye level. It will take 3 photos. Press OK to start") { 
			let imagePicker = CLFaceDetectionImagePickerViewController()
			imagePicker.delegate = self

			self.present(imagePicker, animated: true)
			let view = UIView(frame: self.view.frame)
			view.backgroundColor = UIColor.white

			let label = UILabel(frame: CGRect(origin: .zero, size: CGSize(width: view.frame.width, height: 100)))
			label.text = self.messages[self.images.count]
			label.font = UIFont.systemFont(ofSize: 50)
			label.sizeToFit()

			view.addSubview(label)
			label.center = view.center
			self.view.addSubview(view)
			self.tempMessageContainer = view
		}


//		imagePicker.view.tintColor = view.tintColor
//		imagePicker.sourceType = .camera
//		imagePicker.delegate = self
//		imagePicker.cameraDevice = .front
//
//		imagePicker.allowsEditing = true
//		present(imagePicker, animated: true, completion: nil)
	}

	func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
		dismiss(animated: true, completion: nil)
	}

	func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
		if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
			uuid = UUID().uuidString
			// Instantiate KairosAPI class
			let Kairos = KairosAPI(app_id: KairosConfig.app_id, app_key: KairosConfig.app_key)


			let imageData = UIImageJPEGRepresentation(image, 0)
			let base64ImageData = imageData?.base64EncodedString(options:[])

			// setup json request params, with base64 data
			let jsonBody = [
				"image": base64ImageData,
				"gallery_name": "ezshop",
				"subject_id": uuid
			]

			// Example - Enroll
			ActivityIndicator.shared.show(self.view)
			Kairos.request(method: "enroll", data: jsonBody) { data in
				let json = JSON(data)
//				print(json)
				DispatchQueue.main.sync {
					JGUtils.alert(title: "SUCCESS", message: "User is enrolled")
					self.enrollUser(image: image)
					ActivityIndicator.shared.hide()
				}
			}
			self.dismiss(animated: true, completion: nil)
		}

	}

	func enrollUser(image: UIImage) {
		uploadImage(image: image)

	}
var photoURL = ""
	func uploadImage(image: UIImage) {
		let storage = FIRStorage.storage()
		// Create a root reference
		let storageRef = storage.reference()

		// Data in memory
		let data = UIImageJPEGRepresentation(image, 0.5)

		// Create a reference to the file you want to upload
		let riversRef = storageRef.child("images/" + uuid + ".jpg")

		// Upload the file to the path "images/rivers.jpg"
		let uploadTask = riversRef.put(data!, metadata: nil) { (metadata, error) in
			guard let metadata = metadata else {
    // Uh-oh, an error occurred!
    return
			}
			// Metadata contains file metadata such as size, content-type, and download URL.
			self.photoURL = metadata.downloadURLs!.first!.absoluteString
			let ref = FIRDatabase.database().reference()
			ref.child("users").child(self.uuid).setValue(
				["name": self.userNameLabel.text!,
				 "user_id": self.uuid,
				 "is_in_store": false,
				 "photo": self.photoURL])
			self.userNameLabel.text = ""

		}
	}
	var tempMessageContainer:UIView = UIView()
	let messages = ["Taking photo 1/3","☺️Smile :D", "Last one!"]
	func clFaceDetectionImagePickerDidDismiss(_ data: Data!, blnSuccess: Bool) {
		tempMessageContainer.removeFromSuperview()
		if data != nil {
			if let image = UIImage(data: data) {
				if images.count < 2 {
					images.append(image)
					let view = UIView(frame: self.view.frame)
					view.backgroundColor = UIColor.white

					let label = UILabel(frame: CGRect(origin: .zero, size: CGSize(width: view.frame.width, height: 100)))
					label.text = messages[images.count]
					label.font = UIFont.systemFont(ofSize: 50)
					label.sizeToFit()
					label.textAlignment = .left

					view.addSubview(label)
					label.center = view.center
					self.view.addSubview(view)
					tempMessageContainer = view


					let imagePicker = CLFaceDetectionImagePickerViewController()
					imagePicker.delegate = self
					present(imagePicker, animated: true, completion: nil)
				} else {
					images.append(image)
					// Instantiate KairosAPI class
					let Kairos = KairosAPI(app_id: KairosConfig.app_id, app_key: KairosConfig.app_key)




										// Example - Enroll
					ActivityIndicator.shared.show(self.view)

					let imageData = UIImageJPEGRepresentation(self.images[0], 1)
					let base64ImageData = imageData?.base64EncodedString(options:[])
					// setup json request params, with base64 data
					let jsonBody = [
						"image": base64ImageData,
						"gallery_name": "ezshop",
						"subject_id": self.uuid
					]


					Kairos.request(method: "enroll", data: jsonBody) { data in
						print("Photo 1")
						let json = JSON(data)
						print(json)
						let imageData = UIImageJPEGRepresentation(self.images[1], 1)
						let base64ImageData = imageData?.base64EncodedString(options:[])
						// setup json request params, with base64 data
						let jsonBody = [
							"image": base64ImageData,
							"gallery_name": "ezshop",
							"subject_id": self.uuid
						]


						Kairos.request(method: "enroll", data: jsonBody) { data in
							let json = JSON(data)
							print("Photo 2")
							print(json)
							let imageData = UIImageJPEGRepresentation(self.images[2], 1)
							let base64ImageData = imageData?.base64EncodedString(options:[])
							// setup json request params, with base64 data
							let jsonBody = [
								"image": base64ImageData,
								"gallery_name": "ezshop",
								"subject_id": self.uuid
							]


							Kairos.request(method: "enroll", data: jsonBody) { data in
								let json = JSON(data)
								print("Photo 3")
								print(json)

								DispatchQueue.main.sync {
									JGUtils.alert(title: "SUCCESS", message: "User is enrolled")
									self.enrollUser(image: self.images[2])
									self.images.removeAll()
									ActivityIndicator.shared.hide()

									self.tabBarController?.selectedIndex = 1
								}
							}
						}
					}

				}
			}
		}


	}

	@IBAction func gotostore() {
		self.tabBarController?.selectedIndex = 1
	}

	override func viewDidLoad() {
		super.viewDidLoad()
		userNameLabel.becomeFirstResponder()

		// Do any additional setup after loading the view.
	}
}


================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/GoogleService-Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>AD_UNIT_ID_FOR_BANNER_TEST</key>
	<string>ca-app-pub-3940256099942544/2934735716</string>
	<key>AD_UNIT_ID_FOR_INTERSTITIAL_TEST</key>
	<string>ca-app-pub-3940256099942544/4411468910</string>
	<key>CLIENT_ID</key>
	<string>89251823040-roa262gcilvr905ug5558vdq0p0n4umv.apps.googleusercontent.com</string>
	<key>REVERSED_CLIENT_ID</key>
	<string>com.googleusercontent.apps.89251823040-roa262gcilvr905ug5558vdq0p0n4umv</string>
	<key>API_KEY</key>
	<string>AIzaSyBobTBUxfcSLf7pX1N9c0z3qlqtK3tpjSE</string>
	<key>GCM_SENDER_ID</key>
	<string>89251823040</string>
	<key>PLIST_VERSION</key>
	<string>1</string>
	<key>BUNDLE_ID</key>
	<string>ca.jgchoi.EZShopManager</string>
	<key>PROJECT_ID</key>
	<string>hackvalley-5be01</string>
	<key>STORAGE_BUCKET</key>
	<string>hackvalley-5be01.appspot.com</string>
	<key>IS_ADS_ENABLED</key>
	<true/>
	<key>IS_ANALYTICS_ENABLED</key>
	<false/>
	<key>IS_APPINVITE_ENABLED</key>
	<false/>
	<key>IS_GCM_ENABLED</key>
	<true/>
	<key>IS_SIGNIN_ENABLED</key>
	<true/>
	<key>GOOGLE_APP_ID</key>
	<string>1:89251823040:ios:656a0064b1cd1b42</string>
	<key>DATABASE_URL</key>
	<string>https://hackvalley-5be01.firebaseio.com</string>
</dict>
</plist>

================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSAllowsArbitraryLoads</key>
		<true/>
	</dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleVersion</key>
	<string>1</string>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>NSCameraUsageDescription</key>
	<string>Take photo for enroll user</string>
	<key>UILaunchStoryboardName</key>
	<string>LaunchScreen</string>
	<key>UIMainStoryboardFile</key>
	<string>Main</string>
	<key>UIRequiredDeviceCapabilities</key>
	<array>
		<string>armv7</string>
	</array>
	<key>UISupportedInterfaceOrientations~ipad</key>
	<array>
		<string>UIInterfaceOrientationLandscapeRight</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
	</array>
</dict>
</plist>


================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/InventoriesViewController.swift
================================================
//
//  InventoriesViewController.swift
//  EZShopManager
//
//  Created by Jung Geon Choi on 2017-03-18.
//  Copyright © 2017 Jung Geon Choi. All rights reserved.
//

import UIKit
import SwiftyJSON
import FirebaseDatabase
import Kingfisher


class InventoriesViewController: UIViewController,UICollectionViewDelegate,UICollectionViewDataSource {
var ref: FIRDatabaseReference!
	var items:[Item] = []
    override func viewDidLoad() {
        super.viewDidLoad()
		ref = FIRDatabase.database().reference()
		let refHandle = ref.observe(FIRDataEventType.value, with: { (snapshot) in
			let db = JSON(snapshot.value)
			//print(db["users"])

			if let _items = db["inventories"].array {
				self.items.removeAll()
				_items.forEach({ ( _itemJSON) in
					let new = Item()
					new.item_price = _itemJSON["item_price"].doubleValue
					new.item_id = _itemJSON["item_price"].intValue
					new.item_count = _itemJSON["item_count"].intValue
					new.item_name = _itemJSON["item_name"].stringValue
					new.item_description = _itemJSON["item_description"].stringValue
					new.item_image = _itemJSON["item_image"].stringValue


					self.items.append(new)

				})
				self.items.remove(at: 0)
				self.collectionView.reloadData()
			}
		})
	}
	


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
	@IBOutlet weak var collectionView: UICollectionView!
	
    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

	func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
		return items.count
	}

	func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
		let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ItemCell", for: indexPath)
		cell.layer.cornerRadius = 5
		cell.layer.borderWidth = 1
		let item = items[indexPath.row]
		if let imageView = cell.viewWithTag(100) as? UIImageView {
			imageView.kf.setImage(with: URL(string: item.item_image))
		}

		if let label = cell.viewWithTag(101) as? UILabel {
			label.text = item.item_name
		}

		if let label = cell.viewWithTag(102) as? UILabel {
			label.text = "$ \(item.item_price)"
		}

		if let label = cell.viewWithTag(104) as? UILabel {
			label.text = "\(item.item_count)"
		}

		if item.item_count == 0 {
			cell.backgroundColor = UIColor.red
		} else {
			cell.backgroundColor = UIColor.clear
		}


		return cell
	}



}


================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/Item.swift
================================================
//
//  Item.swift
//  EZShopManager
//
//  Created by Jung Geon Choi on 2017-03-18.
//  Copyright © 2017 Jung Geon Choi. All rights reserved.
//

import Foundation

class Item {
	var item_name = ""
	var item_id = 0
	var item_price = 0.0
	var item_description = ""
	var item_image = ""
	var item_count = 0
}


================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/JGUtils.swift
================================================
//
//  JGUtils.swift
//  emii
//
//  Created by Jung Geon Choi on 2017-03-04.
//  Copyright © 2017 Emanant Inc. All rights reserved.
//

import Foundation
import SwiftyJSON
import UIKit

class JGUtils {
	// MARK: - Variables
	static var vc: UIViewController {
		get {
			if var topController = UIApplication.shared.keyWindow?.rootViewController {
				while let presentedViewController = topController.presentedViewController {
					topController = presentedViewController
				}
				return topController
			}
			print("Failed to find first view controller @ JGUtils.getFrontViewController()")
			return UIViewController()
		}

	}


	// MARK: - Alert ONLY
	static func alert(title: String, message: String?, buttonMessage: String = "OK") {
		let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
		alert.addAction(UIAlertAction(title: buttonMessage, style: .cancel, handler: nil))
		vc.present(alert, animated: true, completion: nil)
	}
	static func alert(title: String, message: String?, buttonMessage: String = "OK", closure:@escaping (() -> ())) {
		let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)

		alert.addAction(UIAlertAction(title: buttonMessage, style: .cancel, handler: { (_) in
			closure()
		}))
		vc.present(alert, animated: true, completion: nil)
	}

	// MARK: - Selection Alert
}

// MARK: - View Extension
extension UIView {
	var animationDuration: TimeInterval {
		get {
			return 0.5
		}
	}

	func hide() {
		self.alpha = 1.0
		UIView.animate(withDuration: animationDuration) {
			self.alpha = 0.0
		}

	}

	func show() {
		self.alpha = 0.0
		UIView.animate(withDuration: animationDuration) { 
			self.alpha = 1.0
		}
	}
}

extension JSON {
	func hasError() -> Bool {
		let error = self["error"]["message"].stringValue
		return !error.isEmpty
	}

	var errorMessage: String {
		get {
			return self["error"]["message"].stringValue
		}
	}
}

// MARK: - Statusbard Indicator

extension JGUtils {
	static func setNetworkIndicator(_ status: Bool) {
		UIApplication.shared.isNetworkActivityIndicatorVisible = status
	}
}

extension UIColor {
	static public var tint: UIColor {
		return UIColor(
			red: CGFloat(73.0/255.0),
			green: CGFloat(188.0/255.0),
			blue: CGFloat(167.0/255.0),
			alpha: CGFloat(1.0)
		)
	}
}

// MARK: - String
extension String {

	var formattedPhoneNumber: String {
		return "(" + self[0..<3] + ") " + self[3..<6] + "-" + self[6..<10]
	}

	var length: Int {
		return self.characters.count
	}

	subscript (i: Int) -> String {
		return self[Range(i ..< i + 1)]
	}

	func substring(from: Int) -> String {
		return self[Range(min(from, length) ..< length)]
	}

	func substring(to: Int) -> String {
		return self[Range(0 ..< max(0, to))]
	}

	subscript (r: Range<Int>) -> String {
		let range = Range(uncheckedBounds: (lower: max(0, min(length, r.lowerBound)),
		                                    upper: min(length, max(0, r.upperBound))))
		let start = index(startIndex, offsetBy: range.lowerBound)
		let end = index(start, offsetBy: range.upperBound - range.lowerBound)
		return self[Range(start ..< end)]
	}

}

// MARK: - Notification
extension Notification.Name {
	static let tokenReceivedFromWeb = Notification.Name("ReceivedTokenFromWeb")
}



================================================
FILE: iOS/Manager/EZShopManager/EZShopManager/MySplitViewController.swift
================================================
//
//  MySplitViewController.swift
//  EZShopManager
//
//  Created by Jung Geon Choi on 2017-03-18.
//  Copyright © 2017 Jung Geon Choi. All rights reserved.
//

import UIKit

class MySplitViewController: UISplitViewController {

    override fu
Download .txt
gitextract_e8a7ey4n/

├── .gitignore
├── Android/
│   ├── FaceTracker/
│   │   ├── .gitignore
│   │   ├── FaceTracker.iml
│   │   ├── app/
│   │   │   ├── .gitignore
│   │   │   ├── app.iml
│   │   │   ├── build.gradle
│   │   │   ├── google-services.json
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       └── main/
│   │   │           ├── AndroidManifest.xml
│   │   │           ├── java/
│   │   │           │   └── com/
│   │   │           │       └── subhan_nadeem/
│   │   │           │           └── android/
│   │   │           │               └── gms/
│   │   │           │                   └── samples/
│   │   │           │                       └── vision/
│   │   │           │                           └── face/
│   │   │           │                               └── facetracker/
│   │   │           │                                   ├── App.java
│   │   │           │                                   ├── FaceGraphic.java
│   │   │           │                                   ├── FaceProximityListener.java
│   │   │           │                                   ├── activities/
│   │   │           │                                   │   ├── FaceTrackingActivity.java
│   │   │           │                                   │   └── SelectPurposeActivity.java
│   │   │           │                                   ├── models/
│   │   │           │                                   │   ├── RecognitionCandidate.java
│   │   │           │                                   │   └── User.java
│   │   │           │                                   └── ui/
│   │   │           │                                       └── camera/
│   │   │           │                                           ├── CameraSourcePreview.java
│   │   │           │                                           └── GraphicOverlay.java
│   │   │           └── res/
│   │   │               ├── layout/
│   │   │               │   ├── activity_select_purpose.xml
│   │   │               │   └── main.xml
│   │   │               ├── layout-land/
│   │   │               │   └── main.xml
│   │   │               └── values/
│   │   │                   ├── attrs.xml
│   │   │                   ├── colors.xml
│   │   │                   ├── strings.xml
│   │   │                   └── styles.xml
│   │   ├── build.gradle
│   │   ├── gradle/
│   │   │   └── wrapper/
│   │   │       ├── gradle-wrapper.jar
│   │   │       └── gradle-wrapper.properties
│   │   ├── gradle.properties
│   │   ├── gradlew
│   │   ├── gradlew.bat
│   │   ├── libs/
│   │   │   └── KairosSDK.jar
│   │   └── settings.gradle
│   └── README.md
├── Backend/
│   └── README.md
├── README.md
├── iOS/
│   ├── Manager/
│   │   └── EZShopManager/
│   │       ├── EZShopManager/
│   │       │   ├── ActivitiyIndicator.swift
│   │       │   ├── AppDelegate.swift
│   │       │   ├── Assets.xcassets/
│   │       │   │   ├── AppIcon.appiconset/
│   │       │   │   │   └── Contents.json
│   │       │   │   ├── CameraSquare.imageset/
│   │       │   │   │   └── Contents.json
│   │       │   │   ├── Contents.json
│   │       │   │   ├── cat.imageset/
│   │       │   │   │   └── Contents.json
│   │       │   │   ├── logo.imageset/
│   │       │   │   │   └── Contents.json
│   │       │   │   ├── medical-notes-symbol-of-a-list-paper-on-a-clipboard.imageset/
│   │       │   │   │   └── Contents.json
│   │       │   │   ├── squarePNG.imageset/
│   │       │   │   │   └── Contents.json
│   │       │   │   ├── store.imageset/
│   │       │   │   │   └── Contents.json
│   │       │   │   └── user.imageset/
│   │       │   │       └── Contents.json
│   │       │   ├── Base.lproj/
│   │       │   │   ├── LaunchScreen.storyboard
│   │       │   │   └── Main.storyboard
│   │       │   ├── CLFaceDetectionImagePicker.storyboard
│   │       │   ├── CLFaceDetectionImagePickerViewController.h
│   │       │   ├── CLFaceDetectionImagePickerViewController.m
│   │       │   ├── EZShopManager-Bridging-Header.h
│   │       │   ├── EnrollViewController.swift
│   │       │   ├── GoogleService-Info.plist
│   │       │   ├── Info.plist
│   │       │   ├── InventoriesViewController.swift
│   │       │   ├── Item.swift
│   │       │   ├── JGUtils.swift
│   │       │   ├── MySplitViewController.swift
│   │       │   ├── UIImage+CL.h
│   │       │   ├── UIImage+CL.m
│   │       │   ├── User.swift
│   │       │   ├── UserDetailsViewController.swift
│   │       │   ├── UsersTableViewController.swift
│   │       │   └── kairos.swift
│   │       ├── EZShopManager.xcodeproj/
│   │       │   ├── project.pbxproj
│   │       │   ├── project.xcworkspace/
│   │       │   │   ├── contents.xcworkspacedata
│   │       │   │   └── xcuserdata/
│   │       │   │       └── jchoi.xcuserdatad/
│   │       │   │           └── UserInterfaceState.xcuserstate
│   │       │   └── xcuserdata/
│   │       │       └── jchoi.xcuserdatad/
│   │       │           └── xcschemes/
│   │       │               ├── EZShopManager.xcscheme
│   │       │               └── xcschememanagement.plist
│   │       ├── EZShopManager.xcworkspace/
│   │       │   ├── contents.xcworkspacedata
│   │       │   └── xcuserdata/
│   │       │       └── jchoi.xcuserdatad/
│   │       │           ├── UserInterfaceState.xcuserstate
│   │       │           └── xcdebugger/
│   │       │               └── Breakpoints_v2.xcbkptlist
│   │       ├── Podfile
│   │       └── Pods/
│   │           ├── Alamofire/
│   │           │   ├── LICENSE
│   │           │   ├── README.md
│   │           │   └── Source/
│   │           │       ├── AFError.swift
│   │           │       ├── Alamofire.swift
│   │           │       ├── DispatchQueue+Alamofire.swift
│   │           │       ├── MultipartFormData.swift
│   │           │       ├── NetworkReachabilityManager.swift
│   │           │       ├── Notifications.swift
│   │           │       ├── ParameterEncoding.swift
│   │           │       ├── Request.swift
│   │           │       ├── Response.swift
│   │           │       ├── ResponseSerialization.swift
│   │           │       ├── Result.swift
│   │           │       ├── ServerTrustPolicy.swift
│   │           │       ├── SessionDelegate.swift
│   │           │       ├── SessionManager.swift
│   │           │       ├── TaskDelegate.swift
│   │           │       ├── Timeline.swift
│   │           │       └── Validation.swift
│   │           ├── AlamofireSwiftyJSON/
│   │           │   ├── LICENSE
│   │           │   ├── README.md
│   │           │   └── Source/
│   │           │       └── AlamofireSwiftyJSON.swift
│   │           ├── Firebase/
│   │           │   ├── Core/
│   │           │   │   └── Sources/
│   │           │   │       ├── Firebase.h
│   │           │   │       └── module.modulemap
│   │           │   └── README.md
│   │           ├── FirebaseAnalytics/
│   │           │   └── Frameworks/
│   │           │       └── FirebaseAnalytics.framework/
│   │           │           ├── FirebaseAnalytics
│   │           │           ├── Headers/
│   │           │           │   ├── FIRAnalytics+AppDelegate.h
│   │           │           │   ├── FIRAnalytics.h
│   │           │           │   ├── FIRAnalyticsConfiguration.h
│   │           │           │   ├── FIRApp.h
│   │           │           │   ├── FIRConfiguration.h
│   │           │           │   ├── FIREventNames.h
│   │           │           │   ├── FIROptions.h
│   │           │           │   ├── FIRParameterNames.h
│   │           │           │   ├── FIRUserPropertyNames.h
│   │           │           │   └── FirebaseAnalytics.h
│   │           │           └── Modules/
│   │           │               └── module.modulemap
│   │           ├── FirebaseCore/
│   │           │   └── Frameworks/
│   │           │       └── FirebaseCore.framework/
│   │           │           ├── FirebaseCore
│   │           │           ├── Headers/
│   │           │           │   ├── FIRAnalyticsConfiguration.h
│   │           │           │   ├── FIRApp.h
│   │           │           │   ├── FIRConfiguration.h
│   │           │           │   ├── FIRLoggerLevel.h
│   │           │           │   ├── FIROptions.h
│   │           │           │   └── FirebaseCore.h
│   │           │           └── Modules/
│   │           │               └── module.modulemap
│   │           ├── FirebaseDatabase/
│   │           │   └── Frameworks/
│   │           │       └── FirebaseDatabase.framework/
│   │           │           ├── FirebaseDatabase
│   │           │           ├── Headers/
│   │           │           │   ├── FIRDataEventType.h
│   │           │           │   ├── FIRDataSnapshot.h
│   │           │           │   ├── FIRDatabase.h
│   │           │           │   ├── FIRDatabaseQuery.h
│   │           │           │   ├── FIRDatabaseReference.h
│   │           │           │   ├── FIRMutableData.h
│   │           │           │   ├── FIRServerValue.h
│   │           │           │   ├── FIRTransactionResult.h
│   │           │           │   └── FirebaseDatabase.h
│   │           │           ├── Info.plist
│   │           │           ├── Modules/
│   │           │           │   └── module.modulemap
│   │           │           └── NOTICE
│   │           ├── FirebaseInstanceID/
│   │           │   ├── CHANGELOG.md
│   │           │   ├── Frameworks/
│   │           │   │   └── FirebaseInstanceID.framework/
│   │           │   │       ├── FirebaseInstanceID
│   │           │   │       ├── Headers/
│   │           │   │       │   ├── FIRInstanceID.h
│   │           │   │       │   └── FirebaseInstanceID.h
│   │           │   │       └── Modules/
│   │           │   │           └── module.modulemap
│   │           │   └── README.md
│   │           ├── FirebaseStorage/
│   │           │   └── Frameworks/
│   │           │       └── FirebaseStorage.framework/
│   │           │           ├── FirebaseStorage
│   │           │           ├── Headers/
│   │           │           │   ├── FIRStorage.h
│   │           │           │   ├── FIRStorageConstants.h
│   │           │           │   ├── FIRStorageDownloadTask.h
│   │           │           │   ├── FIRStorageMetadata.h
│   │           │           │   ├── FIRStorageObservableTask.h
│   │           │           │   ├── FIRStorageReference.h
│   │           │           │   ├── FIRStorageTask.h
│   │           │           │   ├── FIRStorageTaskSnapshot.h
│   │           │           │   ├── FIRStorageUploadTask.h
│   │           │           │   └── FirebaseStorage.h
│   │           │           └── Modules/
│   │           │               └── module.modulemap
│   │           ├── GTMSessionFetcher/
│   │           │   ├── LICENSE
│   │           │   ├── README.md
│   │           │   └── Source/
│   │           │       ├── GTMSessionFetcher.h
│   │           │       ├── GTMSessionFetcher.m
│   │           │       ├── GTMSessionFetcherLogging.h
│   │           │       ├── GTMSessionFetcherLogging.m
│   │           │       ├── GTMSessionFetcherService.h
│   │           │       ├── GTMSessionFetcherService.m
│   │           │       ├── GTMSessionUploadFetcher.h
│   │           │       └── GTMSessionUploadFetcher.m
│   │           ├── GoogleToolboxForMac/
│   │           │   ├── Foundation/
│   │           │   │   ├── GTMNSData+zlib.h
│   │           │   │   └── GTMNSData+zlib.m
│   │           │   ├── GTMDefines.h
│   │           │   ├── LICENSE
│   │           │   └── README.md
│   │           ├── Kingfisher/
│   │           │   ├── LICENSE
│   │           │   ├── README.md
│   │           │   └── Sources/
│   │           │       ├── AnimatedImageView.swift
│   │           │       ├── Box.swift
│   │           │       ├── CacheSerializer.swift
│   │           │       ├── Filter.swift
│   │           │       ├── Image.swift
│   │           │       ├── ImageCache.swift
│   │           │       ├── ImageDownloader.swift
│   │           │       ├── ImagePrefetcher.swift
│   │           │       ├── ImageProcessor.swift
│   │           │       ├── ImageTransition.swift
│   │           │       ├── ImageView+Kingfisher.swift
│   │           │       ├── Indicator.swift
│   │           │       ├── Kingfisher.h
│   │           │       ├── Kingfisher.swift
│   │           │       ├── KingfisherManager.swift
│   │           │       ├── KingfisherOptionsInfo.swift
│   │           │       ├── RequestModifier.swift
│   │           │       ├── Resource.swift
│   │           │       ├── String+MD5.swift
│   │           │       ├── ThreadHelper.swift
│   │           │       └── UIButton+Kingfisher.swift
│   │           ├── Pods.xcodeproj/
│   │           │   ├── project.pbxproj
│   │           │   └── xcuserdata/
│   │           │       └── jchoi.xcuserdatad/
│   │           │           └── xcschemes/
│   │           │               ├── Alamofire.xcscheme
│   │           │               ├── AlamofireSwiftyJSON.xcscheme
│   │           │               ├── GTMSessionFetcher.xcscheme
│   │           │               ├── GoogleToolboxForMac.xcscheme
│   │           │               ├── Kingfisher.xcscheme
│   │           │               ├── Pods-EZShopManager.xcscheme
│   │           │               ├── SwiftyJSON.xcscheme
│   │           │               └── xcschememanagement.plist
│   │           ├── SwiftyJSON/
│   │           │   ├── LICENSE
│   │           │   ├── README.md
│   │           │   └── Source/
│   │           │       └── SwiftyJSON.swift
│   │           └── Target Support Files/
│   │               ├── Alamofire/
│   │               │   ├── Alamofire-dummy.m
│   │               │   ├── Alamofire-prefix.pch
│   │               │   ├── Alamofire-umbrella.h
│   │               │   ├── Alamofire.modulemap
│   │               │   ├── Alamofire.xcconfig
│   │               │   └── Info.plist
│   │               ├── AlamofireSwiftyJSON/
│   │               │   ├── AlamofireSwiftyJSON-dummy.m
│   │               │   ├── AlamofireSwiftyJSON-prefix.pch
│   │               │   ├── AlamofireSwiftyJSON-umbrella.h
│   │               │   ├── AlamofireSwiftyJSON.modulemap
│   │               │   ├── AlamofireSwiftyJSON.xcconfig
│   │               │   └── Info.plist
│   │               ├── GTMSessionFetcher/
│   │               │   ├── GTMSessionFetcher-dummy.m
│   │               │   ├── GTMSessionFetcher-prefix.pch
│   │               │   ├── GTMSessionFetcher-umbrella.h
│   │               │   ├── GTMSessionFetcher.modulemap
│   │               │   ├── GTMSessionFetcher.xcconfig
│   │               │   └── Info.plist
│   │               ├── GoogleToolboxForMac/
│   │               │   ├── GoogleToolboxForMac-dummy.m
│   │               │   ├── GoogleToolboxForMac-prefix.pch
│   │               │   ├── GoogleToolboxForMac-umbrella.h
│   │               │   ├── GoogleToolboxForMac.modulemap
│   │               │   ├── GoogleToolboxForMac.xcconfig
│   │               │   └── Info.plist
│   │               ├── Kingfisher/
│   │               │   ├── Info.plist
│   │               │   ├── Kingfisher-dummy.m
│   │               │   ├── Kingfisher-prefix.pch
│   │               │   ├── Kingfisher-umbrella.h
│   │               │   ├── Kingfisher.modulemap
│   │               │   └── Kingfisher.xcconfig
│   │               ├── Pods-EZShopManager/
│   │               │   ├── Info.plist
│   │               │   ├── Pods-EZShopManager-acknowledgements.markdown
│   │               │   ├── Pods-EZShopManager-acknowledgements.plist
│   │               │   ├── Pods-EZShopManager-dummy.m
│   │               │   ├── Pods-EZShopManager-frameworks.sh
│   │               │   ├── Pods-EZShopManager-resources.sh
│   │               │   ├── Pods-EZShopManager-umbrella.h
│   │               │   ├── Pods-EZShopManager.debug.xcconfig
│   │               │   ├── Pods-EZShopManager.modulemap
│   │               │   └── Pods-EZShopManager.release.xcconfig
│   │               └── SwiftyJSON/
│   │                   ├── Info.plist
│   │                   ├── SwiftyJSON-dummy.m
│   │                   ├── SwiftyJSON-prefix.pch
│   │                   ├── SwiftyJSON-umbrella.h
│   │                   ├── SwiftyJSON.modulemap
│   │                   └── SwiftyJSON.xcconfig
│   ├── README.md
│   └── User/
│       └── ezshopUser/
│           ├── Podfile
│           ├── Pods/
│           │   ├── Alamofire/
│           │   │   ├── LICENSE
│           │   │   ├── README.md
│           │   │   └── Source/
│           │   │       ├── AFError.swift
│           │   │       ├── Alamofire.swift
│           │   │       ├── DispatchQueue+Alamofire.swift
│           │   │       ├── MultipartFormData.swift
│           │   │       ├── NetworkReachabilityManager.swift
│           │   │       ├── Notifications.swift
│           │   │       ├── ParameterEncoding.swift
│           │   │       ├── Request.swift
│           │   │       ├── Response.swift
│           │   │       ├── ResponseSerialization.swift
│           │   │       ├── Result.swift
│           │   │       ├── ServerTrustPolicy.swift
│           │   │       ├── SessionDelegate.swift
│           │   │       ├── SessionManager.swift
│           │   │       ├── TaskDelegate.swift
│           │   │       ├── Timeline.swift
│           │   │       └── Validation.swift
│           │   ├── AlamofireSwiftyJSON/
│           │   │   ├── LICENSE
│           │   │   ├── README.md
│           │   │   └── Source/
│           │   │       └── AlamofireSwiftyJSON.swift
│           │   ├── Firebase/
│           │   │   ├── Core/
│           │   │   │   └── Sources/
│           │   │   │       ├── Firebase.h
│           │   │   │       └── module.modulemap
│           │   │   └── README.md
│           │   ├── FirebaseAnalytics/
│           │   │   └── Frameworks/
│           │   │       └── FirebaseAnalytics.framework/
│           │   │           ├── FirebaseAnalytics
│           │   │           ├── Headers/
│           │   │           │   ├── FIRAnalytics+AppDelegate.h
│           │   │           │   ├── FIRAnalytics.h
│           │   │           │   ├── FIRAnalyticsConfiguration.h
│           │   │           │   ├── FIRApp.h
│           │   │           │   ├── FIRConfiguration.h
│           │   │           │   ├── FIREventNames.h
│           │   │           │   ├── FIROptions.h
│           │   │           │   ├── FIRParameterNames.h
│           │   │           │   ├── FIRUserPropertyNames.h
│           │   │           │   └── FirebaseAnalytics.h
│           │   │           └── Modules/
│           │   │               └── module.modulemap
│           │   ├── FirebaseCore/
│           │   │   └── Frameworks/
│           │   │       └── FirebaseCore.framework/
│           │   │           ├── FirebaseCore
│           │   │           ├── Headers/
│           │   │           │   ├── FIRAnalyticsConfiguration.h
│           │   │           │   ├── FIRApp.h
│           │   │           │   ├── FIRConfiguration.h
│           │   │           │   ├── FIRLoggerLevel.h
│           │   │           │   ├── FIROptions.h
│           │   │           │   └── FirebaseCore.h
│           │   │           └── Modules/
│           │   │               └── module.modulemap
│           │   ├── FirebaseDatabase/
│           │   │   └── Frameworks/
│           │   │       └── FirebaseDatabase.framework/
│           │   │           ├── FirebaseDatabase
│           │   │           ├── Headers/
│           │   │           │   ├── FIRDataEventType.h
│           │   │           │   ├── FIRDataSnapshot.h
│           │   │           │   ├── FIRDatabase.h
│           │   │           │   ├── FIRDatabaseQuery.h
│           │   │           │   ├── FIRDatabaseReference.h
│           │   │           │   ├── FIRMutableData.h
│           │   │           │   ├── FIRServerValue.h
│           │   │           │   ├── FIRTransactionResult.h
│           │   │           │   └── FirebaseDatabase.h
│           │   │           ├── Info.plist
│           │   │           ├── Modules/
│           │   │           │   └── module.modulemap
│           │   │           └── NOTICE
│           │   ├── FirebaseInstanceID/
│           │   │   ├── CHANGELOG.md
│           │   │   ├── Frameworks/
│           │   │   │   └── FirebaseInstanceID.framework/
│           │   │   │       ├── FirebaseInstanceID
│           │   │   │       ├── Headers/
│           │   │   │       │   ├── FIRInstanceID.h
│           │   │   │       │   └── FirebaseInstanceID.h
│           │   │   │       └── Modules/
│           │   │   │           └── module.modulemap
│           │   │   └── README.md
│           │   ├── FirebaseMessaging/
│           │   │   └── Frameworks/
│           │   │       └── FirebaseMessaging.framework/
│           │   │           ├── FirebaseMessaging
│           │   │           ├── Headers/
│           │   │           │   ├── FIRMessaging.h
│           │   │           │   └── FirebaseMessaging.h
│           │   │           └── Modules/
│           │   │               └── module.modulemap
│           │   ├── GoogleToolboxForMac/
│           │   │   ├── Foundation/
│           │   │   │   ├── GTMLogger.h
│           │   │   │   ├── GTMLogger.m
│           │   │   │   ├── GTMNSData+zlib.h
│           │   │   │   └── GTMNSData+zlib.m
│           │   │   ├── GTMDefines.h
│           │   │   ├── LICENSE
│           │   │   └── README.md
│           │   ├── Kingfisher/
│           │   │   ├── LICENSE
│           │   │   ├── README.md
│           │   │   └── Sources/
│           │   │       ├── AnimatedImageView.swift
│           │   │       ├── Box.swift
│           │   │       ├── CacheSerializer.swift
│           │   │       ├── Filter.swift
│           │   │       ├── Image.swift
│           │   │       ├── ImageCache.swift
│           │   │       ├── ImageDownloader.swift
│           │   │       ├── ImagePrefetcher.swift
│           │   │       ├── ImageProcessor.swift
│           │   │       ├── ImageTransition.swift
│           │   │       ├── ImageView+Kingfisher.swift
│           │   │       ├── Indicator.swift
│           │   │       ├── Kingfisher.h
│           │   │       ├── Kingfisher.swift
│           │   │       ├── KingfisherManager.swift
│           │   │       ├── KingfisherOptionsInfo.swift
│           │   │       ├── RequestModifier.swift
│           │   │       ├── Resource.swift
│           │   │       ├── String+MD5.swift
│           │   │       ├── ThreadHelper.swift
│           │   │       └── UIButton+Kingfisher.swift
│           │   ├── Pods.xcodeproj/
│           │   │   ├── project.pbxproj
│           │   │   └── xcuserdata/
│           │   │       └── jchoi.xcuserdatad/
│           │   │           └── xcschemes/
│           │   │               ├── Alamofire.xcscheme
│           │   │               ├── AlamofireSwiftyJSON.xcscheme
│           │   │               ├── GoogleToolboxForMac.xcscheme
│           │   │               ├── Kingfisher.xcscheme
│           │   │               ├── Pods-ezshopUser.xcscheme
│           │   │               ├── Protobuf.xcscheme
│           │   │               ├── SwiftyJSON.xcscheme
│           │   │               └── xcschememanagement.plist
│           │   ├── Protobuf/
│           │   │   ├── LICENSE
│           │   │   ├── README.md
│           │   │   └── objectivec/
│           │   │       ├── GPBArray.h
│           │   │       ├── GPBArray.m
│           │   │       ├── GPBArray_PackagePrivate.h
│           │   │       ├── GPBBootstrap.h
│           │   │       ├── GPBCodedInputStream.h
│           │   │       ├── GPBCodedInputStream.m
│           │   │       ├── GPBCodedInputStream_PackagePrivate.h
│           │   │       ├── GPBCodedOutputStream.h
│           │   │       ├── GPBCodedOutputStream.m
│           │   │       ├── GPBCodedOutputStream_PackagePrivate.h
│           │   │       ├── GPBDescriptor.h
│           │   │       ├── GPBDescriptor.m
│           │   │       ├── GPBDescriptor_PackagePrivate.h
│           │   │       ├── GPBDictionary.h
│           │   │       ├── GPBDictionary.m
│           │   │       ├── GPBDictionary_PackagePrivate.h
│           │   │       ├── GPBExtensionInternals.h
│           │   │       ├── GPBExtensionInternals.m
│           │   │       ├── GPBExtensionRegistry.h
│           │   │       ├── GPBExtensionRegistry.m
│           │   │       ├── GPBMessage.h
│           │   │       ├── GPBMessage.m
│           │   │       ├── GPBMessage_PackagePrivate.h
│           │   │       ├── GPBProtocolBuffers.h
│           │   │       ├── GPBProtocolBuffers_RuntimeSupport.h
│           │   │       ├── GPBRootObject.h
│           │   │       ├── GPBRootObject.m
│           │   │       ├── GPBRootObject_PackagePrivate.h
│           │   │       ├── GPBRuntimeTypes.h
│           │   │       ├── GPBUnknownField.h
│           │   │       ├── GPBUnknownField.m
│           │   │       ├── GPBUnknownFieldSet.h
│           │   │       ├── GPBUnknownFieldSet.m
│           │   │       ├── GPBUnknownFieldSet_PackagePrivate.h
│           │   │       ├── GPBUnknownField_PackagePrivate.h
│           │   │       ├── GPBUtilities.h
│           │   │       ├── GPBUtilities.m
│           │   │       ├── GPBUtilities_PackagePrivate.h
│           │   │       ├── GPBWellKnownTypes.h
│           │   │       ├── GPBWellKnownTypes.m
│           │   │       ├── GPBWireFormat.h
│           │   │       ├── GPBWireFormat.m
│           │   │       └── google/
│           │   │           └── protobuf/
│           │   │               ├── Any.pbobjc.h
│           │   │               ├── Any.pbobjc.m
│           │   │               ├── Api.pbobjc.h
│           │   │               ├── Api.pbobjc.m
│           │   │               ├── Duration.pbobjc.h
│           │   │               ├── Duration.pbobjc.m
│           │   │               ├── Empty.pbobjc.h
│           │   │               ├── Empty.pbobjc.m
│           │   │               ├── FieldMask.pbobjc.h
│           │   │               ├── FieldMask.pbobjc.m
│           │   │               ├── SourceContext.pbobjc.h
│           │   │               ├── SourceContext.pbobjc.m
│           │   │               ├── Struct.pbobjc.h
│           │   │               ├── Struct.pbobjc.m
│           │   │               ├── Timestamp.pbobjc.h
│           │   │               ├── Timestamp.pbobjc.m
│           │   │               ├── Type.pbobjc.h
│           │   │               ├── Type.pbobjc.m
│           │   │               ├── Wrappers.pbobjc.h
│           │   │               └── Wrappers.pbobjc.m
│           │   ├── SwiftyJSON/
│           │   │   ├── LICENSE
│           │   │   ├── README.md
│           │   │   └── Source/
│           │   │       └── SwiftyJSON.swift
│           │   └── Target Support Files/
│           │       ├── Alamofire/
│           │       │   ├── Alamofire-dummy.m
│           │       │   ├── Alamofire-prefix.pch
│           │       │   ├── Alamofire-umbrella.h
│           │       │   ├── Alamofire.modulemap
│           │       │   ├── Alamofire.xcconfig
│           │       │   └── Info.plist
│           │       ├── AlamofireSwiftyJSON/
│           │       │   ├── AlamofireSwiftyJSON-dummy.m
│           │       │   ├── AlamofireSwiftyJSON-prefix.pch
│           │       │   ├── AlamofireSwiftyJSON-umbrella.h
│           │       │   ├── AlamofireSwiftyJSON.modulemap
│           │       │   ├── AlamofireSwiftyJSON.xcconfig
│           │       │   └── Info.plist
│           │       ├── GoogleToolboxForMac/
│           │       │   ├── GoogleToolboxForMac-dummy.m
│           │       │   ├── GoogleToolboxForMac-prefix.pch
│           │       │   ├── GoogleToolboxForMac-umbrella.h
│           │       │   ├── GoogleToolboxForMac.modulemap
│           │       │   ├── GoogleToolboxForMac.xcconfig
│           │       │   └── Info.plist
│           │       ├── Kingfisher/
│           │       │   ├── Info.plist
│           │       │   ├── Kingfisher-dummy.m
│           │       │   ├── Kingfisher-prefix.pch
│           │       │   ├── Kingfisher-umbrella.h
│           │       │   ├── Kingfisher.modulemap
│           │       │   └── Kingfisher.xcconfig
│           │       ├── Pods-ezshopUser/
│           │       │   ├── Info.plist
│           │       │   ├── Pods-ezshopUser-acknowledgements.markdown
│           │       │   ├── Pods-ezshopUser-acknowledgements.plist
│           │       │   ├── Pods-ezshopUser-dummy.m
│           │       │   ├── Pods-ezshopUser-frameworks.sh
│           │       │   ├── Pods-ezshopUser-resources.sh
│           │       │   ├── Pods-ezshopUser-umbrella.h
│           │       │   ├── Pods-ezshopUser.debug.xcconfig
│           │       │   ├── Pods-ezshopUser.modulemap
│           │       │   └── Pods-ezshopUser.release.xcconfig
│           │       ├── Protobuf/
│           │       │   ├── Info.plist
│           │       │   ├── Protobuf-dummy.m
│           │       │   ├── Protobuf-prefix.pch
│           │       │   ├── Protobuf-umbrella.h
│           │       │   ├── Protobuf.modulemap
│           │       │   └── Protobuf.xcconfig
│           │       └── SwiftyJSON/
│           │           ├── Info.plist
│           │           ├── SwiftyJSON-dummy.m
│           │           ├── SwiftyJSON-prefix.pch
│           │           ├── SwiftyJSON-umbrella.h
│           │           ├── SwiftyJSON.modulemap
│           │           └── SwiftyJSON.xcconfig
│           ├── ezshopUser/
│           │   ├── ActivitiyIndicator.swift
│           │   ├── AppDelegate.swift
│           │   ├── Assets.xcassets/
│           │   │   ├── AppIcon.appiconset/
│           │   │   │   └── Contents.json
│           │   │   ├── Contents.json
│           │   │   └── logo.imageset/
│           │   │       └── Contents.json
│           │   ├── Base.lproj/
│           │   │   └── Main.storyboard
│           │   ├── CLFaceDetectionImagePicker.storyboard
│           │   ├── CLFaceDetectionImagePickerViewController.h
│           │   ├── CLFaceDetectionImagePickerViewController.m
│           │   ├── GoogleService-Info.plist
│           │   ├── HudView.swift
│           │   ├── Info.plist
│           │   ├── Item.swift
│           │   ├── JGUtils.swift
│           │   ├── UIImage+CL.h
│           │   ├── UIImage+CL.m
│           │   ├── User.swift
│           │   ├── UserViewController.swift
│           │   ├── ViewController.swift
│           │   ├── ezshopUser-Bridging-Header.h
│           │   ├── ezshopUser.entitlements
│           │   └── kairos.swift
│           ├── ezshopUser.xcodeproj/
│           │   ├── project.pbxproj
│           │   ├── project.xcworkspace/
│           │   │   ├── contents.xcworkspacedata
│           │   │   └── xcuserdata/
│           │   │       └── jchoi.xcuserdatad/
│           │   │           └── UserInterfaceState.xcuserstate
│           │   └── xcuserdata/
│           │       └── jchoi.xcuserdatad/
│           │           └── xcschemes/
│           │               ├── ezshopUser.xcscheme
│           │               └── xcschememanagement.plist
│           └── ezshopUser.xcworkspace/
│               ├── contents.xcworkspacedata
│               └── xcuserdata/
│                   └── jchoi.xcuserdatad/
│                       ├── UserInterfaceState.xcuserstate
│                       └── xcdebugger/
│                           └── Breakpoints_v2.xcbkptlist
└── raspberry/
    ├── InventoryClient.py
    ├── logs
    ├── script.py
    ├── script2.py
    └── ultrasonic.py
Download .txt
SYMBOL INDEX (168 symbols across 29 files)

FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/App.java
  class App (line 12) | public class App extends Application {
    method onCreate (line 15) | @Override
    method initializeTTS (line 21) | private void initializeTTS() {

FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/FaceGraphic.java
  class FaceGraphic (line 29) | public class FaceGraphic extends GraphicOverlay.Graphic {
    method getFace (line 51) | public Face getFace() {
    method FaceGraphic (line 59) | public FaceGraphic(GraphicOverlay overlay, FaceProximityListener proxi...
    method setId (line 80) | public void setId(int id) {
    method updateFace (line 88) | public void updateFace(Face face) {
    method draw (line 96) | @Override

FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/FaceProximityListener.java
  type FaceProximityListener (line 8) | public interface FaceProximityListener {
    method onFaceProximityTrigger (line 9) | void onFaceProximityTrigger(Face face);

FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/activities/FaceTrackingActivity.java
  class FaceTrackingActivity (line 81) | public final class FaceTrackingActivity extends AppCompatActivity
    method newIntent (line 125) | public static Intent newIntent(Context appContext, int cameraPurpose) {
    method fadeIn (line 131) | public static void fadeIn(final View view) {
    method fadeOut (line 143) | public static void fadeOut(final View view) {
    method onCreate (line 156) | @Override
    method listenForEvents (line 188) | private void listenForEvents() {
    method initializePermissions (line 210) | private void initializePermissions() {
    method initializeSwitchCameraButton (line 221) | private void initializeSwitchCameraButton() {
    method initializeProgressBar (line 239) | private void initializeProgressBar() {
    method requestCameraPermission (line 254) | private void requestCameraPermission() {
    method createCameraSource (line 286) | private void createCameraSource(boolean rearFacing) {
    method onResume (line 327) | @Override
    method onPause (line 337) | @Override
    method onDestroy (line 347) | @Override
    method onRequestPermissionsResult (line 371) | @Override
    method startCameraSource (line 407) | private void startCameraSource() {
    method onFaceProximityTrigger (line 429) | @Override
    method onBackPressed (line 442) | @Override
    method recognize (line 448) | private void recognize(final boolean sayRecognizingMessage, final bool...
    method onDetectItemEvent (line 552) | private void onDetectItemEvent(final RecognitionCandidate candidate) {
    method getItemNameForItemTTS (line 586) | private void getItemNameForItemTTS() {
    method getPersonNameForItemTTS (line 606) | private void getPersonNameForItemTTS(RecognitionCandidate candidate) {
    method removeEvents (line 622) | private void removeEvents() {
    method exitUserFromShop (line 638) | private void exitUserFromShop(final RecognitionCandidate candidate) {
    method getUserFirebaseToken (line 688) | private void getUserFirebaseToken(RecognitionCandidate candidate) {
    method calculateCartTotal (line 707) | private void calculateCartTotal(final ArrayList<Integer> cartItems) {
    method sendPushNotification (line 731) | private void sendPushNotification(double totalSpent) {
    method enterUserIntoShop (line 763) | private void enterUserIntoShop(final RecognitionCandidate candidate) t...
    method clearUserCart (line 789) | private void clearUserCart(RecognitionCandidate candidate) {
    method showUserText (line 794) | private void showUserText(String text) {
    method sayErrorMessage (line 806) | private void sayErrorMessage() {
    class GraphicFaceTrackerFactory (line 819) | private class GraphicFaceTrackerFactory implements MultiProcessor.Fact...
      method create (line 820) | @Override
    class GraphicFaceTracker (line 830) | private class GraphicFaceTracker extends Tracker<Face> {
      method GraphicFaceTracker (line 835) | GraphicFaceTracker(GraphicOverlay overlay) {
      method onNewItem (line 843) | @Override
      method onUpdate (line 851) | @Override
      method onMissing (line 868) | @Override
      method onDone (line 877) | @Override

FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/activities/SelectPurposeActivity.java
  class SelectPurposeActivity (line 20) | public class SelectPurposeActivity extends Activity {
    method run (line 41) | @SuppressLint("InlinedApi")
    method run (line 59) | @Override
    method run (line 71) | @Override
    method onTouch (line 82) | @Override
    method onCreate (line 91) | @Override
    method onPostCreate (line 133) | @Override
    method toggle (line 143) | private void toggle() {
    method hide (line 151) | private void hide() {
    method show (line 165) | @SuppressLint("InlinedApi")
    method delayedHide (line 181) | private void delayedHide(int delayMillis) {

FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/models/RecognitionCandidate.java
  class RecognitionCandidate (line 7) | public class RecognitionCandidate {
    method getUUID (line 8) | public String getUUID() {
    method setUUID (line 12) | public void setUUID(String UUID) {
    method getConfidence (line 16) | public double getConfidence() {
    method setConfidence (line 20) | public void setConfidence(double confidence) {
    method getTimestamp (line 24) | public long getTimestamp() {
    method setTimestamp (line 28) | public void setTimestamp(long timestamp) {

FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/models/User.java
  class User (line 8) | @IgnoreExtraProperties

FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/ui/camera/CameraSourcePreview.java
  class CameraSourcePreview (line 31) | public class CameraSourcePreview extends ViewGroup {
    method CameraSourcePreview (line 42) | public CameraSourcePreview(Context context, AttributeSet attrs) {
    method start (line 53) | public void start(CameraSource cameraSource) throws IOException {
    method start (line 66) | public void start(CameraSource cameraSource, GraphicOverlay overlay) t...
    method stop (line 71) | public void stop() {
    method release (line 77) | public void release() {
    method startIfReady (line 84) | private void startIfReady() throws IOException {
    class SurfaceCallback (line 104) | private class SurfaceCallback implements SurfaceHolder.Callback {
      method surfaceCreated (line 105) | @Override
      method surfaceDestroyed (line 115) | @Override
      method surfaceChanged (line 120) | @Override
    method onLayout (line 125) | @Override
    method isPortraitMode (line 168) | private boolean isPortraitMode() {

FILE: Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/ui/camera/GraphicOverlay.java
  class GraphicOverlay (line 46) | public class GraphicOverlay extends View {
    class Graphic (line 60) | public static abstract class Graphic {
      method Graphic (line 63) | public Graphic(GraphicOverlay overlay) {
      method draw (line 79) | public abstract void draw(Canvas canvas);
      method scaleX (line 85) | public float scaleX(float horizontal) {
      method scaleY (line 92) | public float scaleY(float vertical) {
      method translateX (line 100) | public float translateX(float x) {
      method translateY (line 112) | public float translateY(float y) {
      method postInvalidate (line 116) | public void postInvalidate() {
    method GraphicOverlay (line 121) | public GraphicOverlay(Context context, AttributeSet attrs) {
    method clear (line 128) | public void clear() {
    method add (line 138) | public void add(Graphic graphic) {
    method remove (line 148) | public void remove(Graphic graphic) {
    method setCameraInfo (line 159) | public void setCameraInfo(int previewWidth, int previewHeight, int fac...
    method onDraw (line 171) | @Override

FILE: iOS/Manager/EZShopManager/Pods/FirebaseDatabase/Frameworks/FirebaseDatabase.framework/Headers/FIRDataEventType.h
  type FIRDataEventTypeChildAdded (line 35) | typedef NS_ENUM(NSInteger, FIRDataEventType) {

FILE: iOS/Manager/EZShopManager/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FIRInstanceID.h
  type FIRInstanceIDAPNSTokenTypeUnknown (line 103) | typedef NS_ENUM(NSInteger, FIRInstanceIDAPNSTokenType) {

FILE: iOS/Manager/EZShopManager/Pods/FirebaseStorage/Frameworks/FirebaseStorage.framework/Headers/FIRStorageConstants.h
  type FIRStorageTaskStatusUnknown (line 68) | typedef NS_ENUM(NSInteger, FIRStorageTaskStatus) {

FILE: iOS/User/ezshopUser/Pods/FirebaseDatabase/Frameworks/FirebaseDatabase.framework/Headers/FIRDataEventType.h
  type FIRDataEventTypeChildAdded (line 35) | typedef NS_ENUM(NSInteger, FIRDataEventType) {

FILE: iOS/User/ezshopUser/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FIRInstanceID.h
  type FIRInstanceIDAPNSTokenTypeUnknown (line 103) | typedef NS_ENUM(NSInteger, FIRInstanceIDAPNSTokenType) {

FILE: iOS/User/ezshopUser/Pods/FirebaseMessaging/Frameworks/FirebaseMessaging.framework/Headers/FIRMessaging.h
  type FIRMessagingMessageStatusUnknown (line 69) | typedef NS_ENUM(NSInteger, FIRMessagingMessageStatus) {

FILE: iOS/User/ezshopUser/Pods/GoogleToolboxForMac/Foundation/GTMLogger.h
  function interface (line 209) | interface GTMLogger : NSObject {
  type GTMLoggerLevel (line 346) | typedef enum {

FILE: iOS/User/ezshopUser/Pods/Protobuf/objectivec/GPBArray_PackagePrivate.h
  function interface (line 60) | interface GPBInt32Array () {
  function interface (line 68) | interface GPBUInt32Array () {
  function interface (line 76) | interface GPBInt64Array () {
  function interface (line 84) | interface GPBUInt64Array () {
  function interface (line 92) | interface GPBFloatArray () {
  function interface (line 100) | interface GPBDoubleArray () {
  function interface (line 108) | interface GPBBoolArray () {
  function interface (line 116) | interface GPBEnumArray () {
  function interface (line 126) | interface GPBAutocreatedArray : NSMutableArray {

FILE: iOS/User/ezshopUser/Pods/Protobuf/objectivec/GPBCodedInputStream_PackagePrivate.h
  type GPBCodedInputStreamState (line 42) | typedef struct GPBCodedInputStreamState {
  function interface (line 56) | interface GPBCodedInputStream () {

FILE: iOS/User/ezshopUser/Pods/Protobuf/objectivec/GPBDescriptor.h
  type GPBFieldTypeSingle (line 53) | typedef NS_ENUM(uint8_t, GPBFieldType) {

FILE: iOS/User/ezshopUser/Pods/Protobuf/objectivec/GPBDescriptor_PackagePrivate.h
  type GPBMessageFieldDescription (line 79) | typedef struct GPBMessageFieldDescription {
  type GPBMessageFieldDescriptionWithDefault (line 106) | typedef struct GPBMessageFieldDescriptionWithDefault {
  type GPBExtensionDescription (line 123) | typedef struct GPBExtensionDescription {
  function end (line 182) | end
  function end (line 192) | end
  function end (line 234) | end
  function GPB_INLINE (line 262) | GPB_INLINE BOOL GPBFieldIsMapOrArray(GPBFieldDescriptor *field) {
  function GPB_INLINE (line 267) | GPB_INLINE GPBDataType GPBGetFieldDataType(GPBFieldDescriptor *field) {
  function GPB_INLINE (line 271) | GPB_INLINE int32_t GPBFieldHasIndex(GPBFieldDescriptor *field) {
  function GPB_INLINE (line 275) | GPB_INLINE uint32_t GPBFieldNumber(GPBFieldDescriptor *field) {
  function GPB_INLINE (line 289) | GPB_INLINE BOOL GPBPreserveUnknownFields(GPBFileSyntax syntax) {
  function GPB_INLINE (line 293) | GPB_INLINE BOOL GPBHasPreservingUnknownEnumSemantics(GPBFileSyntax synta...
  function GPB_INLINE (line 297) | GPB_INLINE BOOL GPBExtensionIsRepeated(GPBExtensionDescription *descript...
  function GPB_INLINE (line 301) | GPB_INLINE BOOL GPBExtensionIsPacked(GPBExtensionDescription *descriptio...
  function GPB_INLINE (line 305) | GPB_INLINE BOOL GPBExtensionIsWireFormat(GPBExtensionDescription *descri...

FILE: iOS/User/ezshopUser/Pods/Protobuf/objectivec/GPBDictionary_PackagePrivate.h
  function interface (line 456) | interface GPBAutocreatedDictionary : NSMutableDictionary {

FILE: iOS/User/ezshopUser/Pods/Protobuf/objectivec/GPBMessage_PackagePrivate.h
  type GPBMessage_Storage (line 41) | typedef struct GPBMessage_Storage {
  type GPBMessage_Storage (line 45) | struct GPBMessage_Storage
  function interface (line 47) | interface GPBMessage () {
  function GPBPrepareReadOnlySemaphore (line 108) | void GPBPrepareReadOnlySemaphore(GPBMessage *self) {

FILE: iOS/User/ezshopUser/Pods/Protobuf/objectivec/GPBRuntimeTypes.h
  type BOOL (line 42) | typedef BOOL (*GPBEnumValidationFunc)(int32_t);
  type GPBEnumDescriptor (line 47) | typedef GPBEnumDescriptor *(*GPBEnumDescriptorFunc)(void);
  type GPBGenericValue (line 61) | typedef union {
  type GPBExtensionRange (line 139) | typedef struct GPBExtensionRange {

FILE: iOS/User/ezshopUser/Pods/Protobuf/objectivec/GPBUtilities_PackagePrivate.h
  function GPB_INLINE (line 54) | GPB_INLINE void GPB_DEBUG_CHECK_RUNTIME_VERSIONS() {
  function GPB_INLINE (line 65) | GPB_INLINE void GPBDebugCheckRuntimeVersion() {
  function GPB_INLINE (line 73) | GPB_INLINE int64_t GPBConvertDoubleToInt64(double v) {
  function GPB_INLINE (line 79) | GPB_INLINE int32_t GPBConvertFloatToInt32(float v) {
  function GPB_INLINE (line 85) | GPB_INLINE double GPBConvertInt64ToDouble(int64_t v) {
  function GPB_INLINE (line 91) | GPB_INLINE float GPBConvertInt32ToFloat(int32_t v) {
  function GPB_INLINE (line 97) | GPB_INLINE int32_t GPBLogicalRightShift32(int32_t value, int32_t spaces) {
  function GPB_INLINE (line 101) | GPB_INLINE int64_t GPBLogicalRightShift64(int64_t value, int32_t spaces) {
  function GPB_INLINE (line 109) | GPB_INLINE int32_t GPBDecodeZigZag32(uint32_t n) {
  function GPB_INLINE (line 117) | GPB_INLINE int64_t GPBDecodeZigZag64(uint64_t n) {
  function GPB_INLINE (line 125) | GPB_INLINE uint32_t GPBEncodeZigZag32(int32_t n) {
  function GPB_INLINE (line 134) | GPB_INLINE uint64_t GPBEncodeZigZag64(int64_t n) {
  function GPB_INLINE (line 143) | GPB_INLINE BOOL GPBDataTypeIsObject(GPBDataType type) {
  function GPB_INLINE (line 155) | GPB_INLINE BOOL GPBDataTypeIsMessage(GPBDataType type) {
  function GPB_INLINE (line 165) | GPB_INLINE BOOL GPBFieldDataTypeIsMessage(GPBFieldDescriptor *field) {
  function GPB_INLINE (line 169) | GPB_INLINE BOOL GPBFieldDataTypeIsObject(GPBFieldDescriptor *field) {
  function GPB_INLINE (line 173) | GPB_INLINE BOOL GPBExtensionIsMessage(GPBExtensionDescriptor *ext) {
  function GPB_INLINE (line 178) | GPB_INLINE BOOL GPBFieldStoresObject(GPBFieldDescriptor *field) {
  function GPB_INLINE (line 191) | GPB_INLINE BOOL
  function GPB_INLINE (line 196) | GPB_INLINE void GPBSetHasIvarField(GPBMessage *self, GPBFieldDescriptor ...

FILE: iOS/User/ezshopUser/Pods/Protobuf/objectivec/GPBWireFormat.h
  type GPBWireFormat (line 37) | typedef enum {

FILE: raspberry/InventoryClient.py
  function update_inventory (line 6) | def update_inventory(item_id):
  function update_events (line 26) | def update_events(item_id):
  function get_item_inventory (line 39) | def get_item_inventory(item_id):

FILE: raspberry/script.py
  function rc_time (line 33) | def rc_time(pin_to_circuit):

FILE: raspberry/script2.py
  function rc_time (line 33) | def rc_time(pin_to_circuit):

FILE: raspberry/ultrasonic.py
  function distance_changed (line 25) | def distance_changed():
Condensed preview — 504 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,763K chars).
[
  {
    "path": ".gitignore",
    "chars": 6,
    "preview": ".idea\n"
  },
  {
    "path": "Android/FaceTracker/.gitignore",
    "chars": 91,
    "preview": ".gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n"
  },
  {
    "path": "Android/FaceTracker/FaceTracker.iml",
    "chars": 865,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module external.linked.project.id=\"FaceTracker\" external.linked.project.path=\"$M"
  },
  {
    "path": "Android/FaceTracker/app/.gitignore",
    "chars": 7,
    "preview": "/build\n"
  },
  {
    "path": "Android/FaceTracker/app/app.iml",
    "chars": 14238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module external.linked.project.id=\":app\" external.linked.project.path=\"$MODULE_D"
  },
  {
    "path": "Android/FaceTracker/app/build.gradle",
    "chars": 891,
    "preview": "apply plugin: 'com.android.application'\n\nandroid {\n    compileSdkVersion 25\n    buildToolsVersion \"24.0.2\"\n\n    defaultC"
  },
  {
    "path": "Android/FaceTracker/app/google-services.json",
    "chars": 1853,
    "preview": "{\n  \"project_info\": {\n    \"project_number\": \"89251823040\",\n    \"firebase_url\": \"https://hackvalley-5be01.firebaseio.com\""
  },
  {
    "path": "Android/FaceTracker/app/proguard-rules.pro",
    "chars": 712,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /u"
  },
  {
    "path": "Android/FaceTracker/app/src/main/AndroidManifest.xml",
    "chars": 2200,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          pa"
  },
  {
    "path": "Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/App.java",
    "chars": 755,
    "preview": "package com.subhan_nadeem.android.gms.samples.vision.face.facetracker;\n\nimport android.app.Application;\nimport android.s"
  },
  {
    "path": "Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/FaceGraphic.java",
    "chars": 4483,
    "preview": "/*\n * Copyright (C) The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")"
  },
  {
    "path": "Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/FaceProximityListener.java",
    "chars": 259,
    "preview": "package com.subhan_nadeem.android.gms.samples.vision.face.facetracker;\n\nimport com.google.android.gms.vision.face.Face;\n"
  },
  {
    "path": "Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/activities/FaceTrackingActivity.java",
    "chars": 35337,
    "preview": "/*\n * Copyright (C) The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")"
  },
  {
    "path": "Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/activities/SelectPurposeActivity.java",
    "chars": 6478,
    "preview": "package com.subhan_nadeem.android.gms.samples.vision.face.facetracker.activities;\n\nimport android.annotation.SuppressLin"
  },
  {
    "path": "Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/models/RecognitionCandidate.java",
    "chars": 705,
    "preview": "package com.subhan_nadeem.android.gms.samples.vision.face.facetracker.models;\n\n/**\n * Created by Subhan Nadeem on 2017-0"
  },
  {
    "path": "Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/models/User.java",
    "chars": 343,
    "preview": "package com.subhan_nadeem.android.gms.samples.vision.face.facetracker.models;\n\nimport com.google.firebase.database.Ignor"
  },
  {
    "path": "Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/ui/camera/CameraSourcePreview.java",
    "chars": 5827,
    "preview": "/*\n * Copyright (C) The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")"
  },
  {
    "path": "Android/FaceTracker/app/src/main/java/com/subhan_nadeem/android/gms/samples/vision/face/facetracker/ui/camera/GraphicOverlay.java",
    "chars": 6418,
    "preview": "/*\n * Copyright (C) The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")"
  },
  {
    "path": "Android/FaceTracker/app/src/main/res/layout/activity_select_purpose.xml",
    "chars": 1786,
    "preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              xmlns:tools=\"http://schemas.andro"
  },
  {
    "path": "Android/FaceTracker/app/src/main/res/layout/main.xml",
    "chars": 1623,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    "
  },
  {
    "path": "Android/FaceTracker/app/src/main/res/layout-land/main.xml",
    "chars": 1586,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<LinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n   "
  },
  {
    "path": "Android/FaceTracker/app/src/main/res/values/attrs.xml",
    "chars": 495,
    "preview": "<resources>\n\n    <!-- Declare custom theme attributes that allow changing which styles are\n         used for button bars"
  },
  {
    "path": "Android/FaceTracker/app/src/main/res/values/colors.xml",
    "chars": 77,
    "preview": "<resources>\n\n    <color name=\"black_overlay\">#66000000</color>\n\n</resources>\n"
  },
  {
    "path": "Android/FaceTracker/app/src/main/res/values/strings.xml",
    "chars": 668,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"ok\">OK</string>\n    <string name=\"permission_camera"
  },
  {
    "path": "Android/FaceTracker/app/src/main/res/values/styles.xml",
    "chars": 635,
    "preview": "<resources>\n\n    <style name=\"FullscreenTheme\" parent=\"Theme.AppCompat\">\n        <item name=\"android:actionBarStyle\">@st"
  },
  {
    "path": "Android/FaceTracker/build.gradle",
    "chars": 493,
    "preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    r"
  },
  {
    "path": "Android/FaceTracker/gradle/wrapper/gradle-wrapper.properties",
    "chars": 234,
    "preview": "#Wed Aug 31 13:39:19 CEST 2016\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER"
  },
  {
    "path": "Android/FaceTracker/gradle.properties",
    "chars": 855,
    "preview": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will o"
  },
  {
    "path": "Android/FaceTracker/gradlew",
    "chars": 5080,
    "preview": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start "
  },
  {
    "path": "Android/FaceTracker/gradlew.bat",
    "chars": 2314,
    "preview": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem "
  },
  {
    "path": "Android/FaceTracker/settings.gradle",
    "chars": 15,
    "preview": "include ':app'\n"
  },
  {
    "path": "Android/README.md",
    "chars": 7,
    "preview": "Hello!\n"
  },
  {
    "path": "Backend/README.md",
    "chars": 7,
    "preview": "Hello!\n"
  },
  {
    "path": "README.md",
    "chars": 1767,
    "preview": "## Read the viral article about this project [here!](https://medium.freecodecamp.org/how-we-recreated-amazon-go-in-36-ho"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/ActivitiyIndicator.swift",
    "chars": 1858,
    "preview": "//\n//  ActivitiyIndicator.swift\n//  emii\n//\n//  Created by Jung Geon Choi on 2017-03-04.\n//  Copyright © 2017 Emanant In"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/AppDelegate.swift",
    "chars": 2068,
    "preview": "//\n//  AppDelegate.swift\n//  EZShopManager\n//\n//  Created by Jung Geon Choi on 2017-03-17.\n//  Copyright © 2017 Jung Geo"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 3649,
    "preview": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n   "
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/CameraSquare.imageset/Contents.json",
    "chars": 351,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/cat.imageset/Contents.json",
    "chars": 305,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Cute-Cat.jpg\",\n      \"scale\" : \"1x\"\n    },\n    {"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/logo.imageset/Contents.json",
    "chars": 381,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Untitled-1.png\",\n      \"scale\" : \"1x\"\n    },\n   "
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/medical-notes-symbol-of-a-list-paper-on-a-clipboard.imageset/Contents.json",
    "chars": 512,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"medical-notes-symbol-of-a-list-paper-on-a-clipbo"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/squarePNG.imageset/Contents.json",
    "chars": 306,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/store.imageset/Contents.json",
    "chars": 374,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"store.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n  "
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/Assets.xcassets/user.imageset/Contents.json",
    "chars": 371,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"user.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n   "
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/Base.lproj/LaunchScreen.storyboard",
    "chars": 1740,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/Base.lproj/Main.storyboard",
    "chars": 33904,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/CLFaceDetectionImagePicker.storyboard",
    "chars": 2816,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/CLFaceDetectionImagePickerViewController.h",
    "chars": 1483,
    "preview": "//\n//  CLFaceDetectionViewController.h\n//\n//  Created by caesar on 26/02/14.\n//\n\n#import <UIKit/UIKit.h>\n\ntypedef NS_ENU"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/CLFaceDetectionImagePickerViewController.m",
    "chars": 24201,
    "preview": "//\n//  CLFaceDetectionImagePickerViewController.m\n//  DeputyKiosk\n//\n//  Created by caesar on 26/02/14.\n//  Copyright (c"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/EZShopManager-Bridging-Header.h",
    "chars": 53,
    "preview": "#import \"CLFaceDetectionImagePickerViewController.h\"\n"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/EnrollViewController.swift",
    "chars": 7092,
    "preview": "//\n//  EnrollViewController.swift\n//  EZShopManager\n//\n//  Created by Jung Geon Choi on 2017-03-17.\n//  Copyright © 2017"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/GoogleService-Info.plist",
    "chars": 1353,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/Info.plist",
    "chars": 1287,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/InventoriesViewController.swift",
    "chars": 2811,
    "preview": "//\n//  InventoriesViewController.swift\n//  EZShopManager\n//\n//  Created by Jung Geon Choi on 2017-03-18.\n//  Copyright ©"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/Item.swift",
    "chars": 307,
    "preview": "//\n//  Item.swift\n//  EZShopManager\n//\n//  Created by Jung Geon Choi on 2017-03-18.\n//  Copyright © 2017 Jung Geon Choi."
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/JGUtils.swift",
    "chars": 3255,
    "preview": "//\n//  JGUtils.swift\n//  emii\n//\n//  Created by Jung Geon Choi on 2017-03-04.\n//  Copyright © 2017 Emanant Inc. All righ"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/MySplitViewController.swift",
    "chars": 1211,
    "preview": "//\n//  MySplitViewController.swift\n//  EZShopManager\n//\n//  Created by Jung Geon Choi on 2017-03-18.\n//  Copyright © 201"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/UIImage+CL.h",
    "chars": 270,
    "preview": "//\n//  UIImage+CL.h\n//  CLFaceDetectionImagePicker\n//\n//  Created by Caesar on 10/12/2014.\n//  Copyright (c) 2014 Caesar"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/UIImage+CL.m",
    "chars": 2313,
    "preview": "//\n//  UIImage+CL.m\n//  CLFaceDetectionImagePicker\n//\n//  Created by Caesar on 10/12/2014.\n//  Copyright (c) 2014 Caesar"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/User.swift",
    "chars": 125,
    "preview": "import UIKit\n\nclass User {\n\tvar name = \"\"\n\tvar photo = \"\"\n\tvar user_id = \"\"\n\tvar isInStore = false\n\tvar items: [Item] = "
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/UserDetailsViewController.swift",
    "chars": 2754,
    "preview": "//\n//  UserDetailsViewController.swift\n//  EZShopManager\n//\n//  Created by Jung Geon Choi on 2017-03-18.\n//  Copyright ©"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/UsersTableViewController.swift",
    "chars": 5397,
    "preview": "//\n//  UsersTableViewController.swift\n//  EZShopManager\n//\n//  Created by Jung Geon Choi on 2017-03-18.\n//  Copyright © "
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager/kairos.swift",
    "chars": 4165,
    "preview": "/*\n *  Copyright (c) 2017, Kairos AR, Inc.\n *  All rights reserved.\n *\n *  Api Docs: https://www.kairos.com/docs/api/\n *"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager.xcodeproj/project.pbxproj",
    "chars": 22826,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 158,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:EZShopManager.x"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager.xcodeproj/xcuserdata/jchoi.xcuserdatad/xcschemes/EZShopManager.xcscheme",
    "chars": 3375,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0820\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager.xcodeproj/xcuserdata/jchoi.xcuserdatad/xcschemes/xcschememanagement.plist",
    "chars": 485,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager.xcworkspace/contents.xcworkspacedata",
    "chars": 231,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:EZShopManager."
  },
  {
    "path": "iOS/Manager/EZShopManager/EZShopManager.xcworkspace/xcuserdata/jchoi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist",
    "chars": 794,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Bucket\n   type = \"0\"\n   version = \"2.0\">\n   <Breakpoints>\n      <BreakpointProxy"
  },
  {
    "path": "iOS/Manager/EZShopManager/Podfile",
    "chars": 395,
    "preview": "# Uncomment the next line to define a global platform for your project\n# platform :ios, '9.0'\n\ntarget 'EZShopManager' do"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/LICENSE",
    "chars": 1102,
    "preview": "Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n\nPermission is hereby granted, free of cha"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/README.md",
    "chars": 76386,
    "preview": "![Alamofire: Elegant Networking in Swift](https://raw.githubusercontent.com/Alamofire/Alamofire/assets/alamofire.png)\n\n["
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/AFError.swift",
    "chars": 19755,
    "preview": "//\n//  AFError.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n//  Permiss"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/Alamofire.swift",
    "chars": 18886,
    "preview": "//\n//  Alamofire.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n//  Permi"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/DispatchQueue+Alamofire.swift",
    "chars": 1802,
    "preview": "//\n//  DispatchQueue+Alamofire.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/MultipartFormData.swift",
    "chars": 23796,
    "preview": "//\n//  MultipartFormData.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n/"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/NetworkReachabilityManager.swift",
    "chars": 8843,
    "preview": "//\n//  NetworkReachabilityManager.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.o"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/Notifications.swift",
    "chars": 2653,
    "preview": "//\n//  Notifications.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n//  P"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/ParameterEncoding.swift",
    "chars": 17742,
    "preview": "//\n//  ParameterEncoding.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n/"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/Request.swift",
    "chars": 23935,
    "preview": "//\n//  Request.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n//  Permiss"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/Response.swift",
    "chars": 13254,
    "preview": "//\n//  Response.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n//  Permis"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/ResponseSerialization.swift",
    "chars": 29088,
    "preview": "//\n//  ResponseSerialization.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/Result.swift",
    "chars": 3540,
    "preview": "//\n//  Result.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n//  Permissi"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/ServerTrustPolicy.swift",
    "chars": 14090,
    "preview": "//\n//  ServerTrustPolicy.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n/"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/SessionDelegate.swift",
    "chars": 35408,
    "preview": "//\n//  SessionDelegate.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/SessionManager.swift",
    "chars": 37956,
    "preview": "//\n//  SessionManager.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n//  "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/TaskDelegate.swift",
    "chars": 15511,
    "preview": "//\n//  TaskDelegate.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n//  Pe"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/Timeline.swift",
    "chars": 6930,
    "preview": "//\n//  Timeline.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n//  Permis"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Alamofire/Source/Validation.swift",
    "chars": 11601,
    "preview": "//\n//  Validation.swift\n//\n//  Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n//  Perm"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/AlamofireSwiftyJSON/LICENSE",
    "chars": 1056,
    "preview": "Copyright (c) 2016 starboychina\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this so"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/AlamofireSwiftyJSON/README.md",
    "chars": 1540,
    "preview": "#AlamofireSwiftyJSON\n[![Build Status](https://travis-ci.org/starboychina/AlamofireSwiftyJSON.svg)](https://travis-ci.org"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/AlamofireSwiftyJSON/Source/AlamofireSwiftyJSON.swift",
    "chars": 3530,
    "preview": "//\n//  AlamofireSwiftyJSON.swift\n//  AlamofireSwiftyJSON\n//\n//  Created by Hikaru on 2016/01/29.\n//  Copyright © 2016年 H"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Firebase/Core/Sources/Firebase.h",
    "chars": 1624,
    "preview": "#import <FirebaseAnalytics/FirebaseAnalytics.h>\n#import <FirebaseCore/FirebaseCore.h>\n\n#if !defined(__has_include)\n  #er"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Firebase/Core/Sources/module.modulemap",
    "chars": 52,
    "preview": "module Firebase {\n  export *\n  header \"Firebase.h\"\n}"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Firebase/README.md",
    "chars": 2268,
    "preview": "# Firebase APIs for iOS\n\nSimplify your iOS development, grow your user base, and monetize more\neffectively with Firebase"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h",
    "chars": 2410,
    "preview": "#import <Foundation/Foundation.h>\n\n#import \"FIRAnalytics.h\"\n\n/**\n * Provides App Delegate handlers to be used in your Ap"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h",
    "chars": 5288,
    "preview": "#import <Foundation/Foundation.h>\n\n#import \"FIREventNames.h\"\n#import \"FIRParameterNames.h\"\n#import \"FIRUserPropertyNames"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalyticsConfiguration.h",
    "chars": 51,
    "preview": "#import <FirebaseCore/FIRAnalyticsConfiguration.h>\n"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRApp.h",
    "chars": 32,
    "preview": "#import <FirebaseCore/FIRApp.h>\n"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRConfiguration.h",
    "chars": 42,
    "preview": "#import <FirebaseCore/FIRConfiguration.h>\n"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIREventNames.h",
    "chars": 17890,
    "preview": "/// @file FIREventNames.h\n///\n/// Predefined event names.\n///\n/// An Event is an important occurrence in your app that y"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIROptions.h",
    "chars": 36,
    "preview": "#import <FirebaseCore/FIROptions.h>\n"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRParameterNames.h",
    "chars": 11672,
    "preview": "/// @file FIRParameterNames.h\n///\n/// Predefined event parameter names.\n///\n/// Params supply information that contextua"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h",
    "chars": 818,
    "preview": "/// @file FIRUserPropertyNames.h\n///\n/// Predefined user property names.\n///\n/// A UserProperty is an attribute that des"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h",
    "chars": 260,
    "preview": "#import \"FIRAnalyticsConfiguration.h\"\n#import \"FIRApp.h\"\n#import \"FIRConfiguration.h\"\n#import \"FIROptions.h\"\n#import \"FI"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Modules/module.modulemap",
    "chars": 227,
    "preview": "framework module FirebaseAnalytics {\n  umbrella header \"FirebaseAnalytics.h\"\n  export *\n  module * { export *}\n  link \"s"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRAnalyticsConfiguration.h",
    "chars": 1182,
    "preview": "#import <Foundation/Foundation.h>\n\n/**\n * This class provides configuration fields for Firebase Analytics.\n */\n@interfac"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRApp.h",
    "chars": 3443,
    "preview": "#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n\n@class FIROptions;\n\nNS_ASSUME_NONNULL_BEGIN\n\n/** A block that"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRConfiguration.h",
    "chars": 1850,
    "preview": "#import <Foundation/Foundation.h>\n\n#import \"FIRAnalyticsConfiguration.h\"\n#import \"FIRLoggerLevel.h\"\n\n/**\n * The log leve"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIRLoggerLevel.h",
    "chars": 422,
    "preview": "/**\n * The log levels used by internal logging.\n */\ntypedef NS_ENUM(NSInteger, FIRLoggerLevel) {\n  FIRLoggerLevelError ="
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FIROptions.h",
    "chars": 3059,
    "preview": "#import <Foundation/Foundation.h>\n\n/**\n * This class provides constant fields of Google APIs.\n */\n@interface FIROptions "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Headers/FirebaseCore.h",
    "chars": 136,
    "preview": "#import \"FIRAnalyticsConfiguration.h\"\n#import \"FIRApp.h\"\n#import \"FIRConfiguration.h\"\n#import \"FIRLoggerLevel.h\"\n#import"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseCore/Frameworks/FirebaseCore.framework/Modules/module.modulemap",
    "chars": 213,
    "preview": "framework module FirebaseCore {\n  umbrella header \"FirebaseCore.h\"\n  export *\n  module * { export *}\n  link \"c++\"\n  link"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseDatabase/Frameworks/FirebaseDatabase.framework/Headers/FIRDataEventType.h",
    "chars": 2034,
    "preview": "/*\n * Firebase iOS Client Library\n *\n * Copyright © 2013 Firebase - All Rights Reserved\n * https://www.firebase.com\n *\n "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseDatabase/Frameworks/FirebaseDatabase.framework/Headers/FIRDataSnapshot.h",
    "chars": 4929,
    "preview": "/*\n * Firebase iOS Client Library\n *\n * Copyright © 2013 Firebase - All Rights Reserved\n * https://www.firebase.com\n *\n "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseDatabase/Frameworks/FirebaseDatabase.framework/Headers/FIRDatabase.h",
    "chars": 5950,
    "preview": "/*\n * Firebase iOS Client Library\n *\n * Copyright © 2013 Firebase - All Rights Reserved\n * https://www.firebase.com\n *\n "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseDatabase/Frameworks/FirebaseDatabase.framework/Headers/FIRDatabaseQuery.h",
    "chars": 16593,
    "preview": "/*\n * Firebase iOS Client Library\n *\n * Copyright © 2013 Firebase - All Rights Reserved\n * https://www.firebase.com\n *\n "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseDatabase/Frameworks/FirebaseDatabase.framework/Headers/FIRDatabaseReference.h",
    "chars": 35002,
    "preview": "/*\n * Firebase iOS Client Library\n *\n * Copyright © 2013 Firebase - All Rights Reserved\n * https://www.firebase.com\n *\n "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseDatabase/Frameworks/FirebaseDatabase.framework/Headers/FIRMutableData.h",
    "chars": 4670,
    "preview": "/*\n * Firebase iOS Client Library\n *\n * Copyright © 2013 Firebase - All Rights Reserved\n * https://www.firebase.com\n *\n "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseDatabase/Frameworks/FirebaseDatabase.framework/Headers/FIRServerValue.h",
    "chars": 1722,
    "preview": "/*\n * Firebase iOS Client Library\n *\n * Copyright © 2013 Firebase - All Rights Reserved\n * https://www.firebase.com\n *\n "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseDatabase/Frameworks/FirebaseDatabase.framework/Headers/FIRTransactionResult.h",
    "chars": 2288,
    "preview": "/*\n * Firebase iOS Client Library\n *\n * Copyright © 2013 Firebase - All Rights Reserved\n * https://www.firebase.com\n *\n "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseDatabase/Frameworks/FirebaseDatabase.framework/Headers/FirebaseDatabase.h",
    "chars": 1674,
    "preview": "/*\n * Firebase iOS Client Library\n *\n * Copyright © 2016 Firebase - All Rights Reserved\n * https://www.firebase.com\n *\n "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseDatabase/Frameworks/FirebaseDatabase.framework/Modules/module.modulemap",
    "chars": 241,
    "preview": "framework module FirebaseDatabase {\n  umbrella header \"FirebaseDatabase.h\"\n\n  export *\n  module * { export * }\n\n  link f"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseDatabase/Frameworks/FirebaseDatabase.framework/NOTICE",
    "chars": 3193,
    "preview": "Google LevelDB\nCopyright (c) 2011 The LevelDB Authors. All rights reserved.\n\nRedistribution and use in source and binary"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseInstanceID/CHANGELOG.md",
    "chars": 764,
    "preview": "# 2017-01-31 -- v1.0.9\n\n- Removed an error being mistakenly logged to the console.\n\n# 2016-07-06 -- v1.0.8\n\n- Don't stor"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FIRInstanceID.h",
    "chars": 9835,
    "preview": "#import <Foundation/Foundation.h>\n\n/**\n *  @memberof FIRInstanceID\n *\n *  The scope to be used when fetching/deleting a "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Headers/FirebaseInstanceID.h",
    "chars": 26,
    "preview": "#import \"FIRInstanceID.h\"\n"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseInstanceID/Frameworks/FirebaseInstanceID.framework/Modules/module.modulemap",
    "chars": 169,
    "preview": "framework module FirebaseInstanceID {\n  umbrella header \"FirebaseInstanceID.h\"\n  export *\n  module * { export *}\n  link "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseInstanceID/README.md",
    "chars": 380,
    "preview": "# InstanceID SDK for iOS\n\nInstance ID provides a unique ID per instance of your apps and also provides a\nmechanism to au"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseStorage/Frameworks/FirebaseStorage.framework/Headers/FIRStorage.h",
    "chars": 3579,
    "preview": "// clang-format off\n/** @file FIRStorage.h\n    @brief Firebase SDK\n    @copyright Copyright 2016 Google Inc.\n    @remark"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseStorage/Frameworks/FirebaseStorage.framework/Headers/FIRStorageConstants.h",
    "chars": 4646,
    "preview": "// clang-format off\n/** @file FIRStorageConstants.h\n    @brief Firebase SDK\n    @copyright Copyright 2016 Google Inc.\n  "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseStorage/Frameworks/FirebaseStorage.framework/Headers/FIRStorageDownloadTask.h",
    "chars": 1136,
    "preview": "// clang-format off\n/** @file FIRStorageDownloadTask.h\n    @brief Firebase SDK\n    @copyright Copyright 2016 Google Inc."
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseStorage/Frameworks/FirebaseStorage.framework/Headers/FIRStorageMetadata.h",
    "chars": 3979,
    "preview": "// clang-format off\n/** @file FIRStorageMetadata.h\n    @brief Firebase SDK\n    @copyright Copyright 2016 Google Inc.\n   "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseStorage/Frameworks/FirebaseStorage.framework/Headers/FIRStorageObservableTask.h",
    "chars": 1735,
    "preview": "// clang-format off\n/** @file FIRStorageObservableTask.h\n    @brief Firebase SDK\n    @copyright Copyright 2016 Google In"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseStorage/Frameworks/FirebaseStorage.framework/Headers/FIRStorageReference.h",
    "chars": 10021,
    "preview": "// clang-format off\n/** @file FIRStorageReference.h\n    @brief Firebase SDK\n    @copyright Copyright 2016 Google Inc.\n  "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseStorage/Frameworks/FirebaseStorage.framework/Headers/FIRStorageTask.h",
    "chars": 1660,
    "preview": "// clang-format off\n/** @file FIRStorageTask.h\n    @brief Firebase SDK\n    @copyright Copyright 2016 Google Inc.\n    @re"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseStorage/Frameworks/FirebaseStorage.framework/Headers/FIRStorageTaskSnapshot.h",
    "chars": 1480,
    "preview": "// clang-format off\n/** @file FIRStorageTaskSnapshot.h\n @brief Firebase SDK\n @copyright Copyright 2016 Google Inc.\n @rem"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseStorage/Frameworks/FirebaseStorage.framework/Headers/FIRStorageUploadTask.h",
    "chars": 1095,
    "preview": "// clang-format off\n/** @file FIRStorageUploadTask.h\n    @brief Firebase SDK\n    @copyright Copyright 2016 Google Inc.\n "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseStorage/Frameworks/FirebaseStorage.framework/Headers/FirebaseStorage.h",
    "chars": 285,
    "preview": "#import \"FIRStorage.h\"\n#import \"FIRStorageConstants.h\"\n#import \"FIRStorageDownloadTask.h\"\n#import \"FIRStorageMetadata.h\""
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/FirebaseStorage/Frameworks/FirebaseStorage.framework/Modules/module.modulemap",
    "chars": 272,
    "preview": "framework module FirebaseStorage {\n  umbrella header \"FirebaseStorage.h\"\n  export *\n  module * { export *}\n  link \"z\"\n  "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GTMSessionFetcher/LICENSE",
    "chars": 11358,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GTMSessionFetcher/README.md",
    "chars": 1158,
    "preview": "# Google Toolbox for Mac - Session Fetcher #\n\n**Project site** <https://github.com/google/gtm-session-fetcher><br>\n**Dis"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GTMSessionFetcher/Source/GTMSessionFetcher.h",
    "chars": 59450,
    "preview": "/* Copyright 2014 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GTMSessionFetcher/Source/GTMSessionFetcher.m",
    "chars": 168344,
    "preview": "/* Copyright 2014 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GTMSessionFetcher/Source/GTMSessionFetcherLogging.h",
    "chars": 4088,
    "preview": "/* Copyright 2014 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GTMSessionFetcher/Source/GTMSessionFetcherLogging.m",
    "chars": 39915,
    "preview": "/* Copyright 2014 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GTMSessionFetcher/Source/GTMSessionFetcherService.h",
    "chars": 8853,
    "preview": "/* Copyright 2014 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GTMSessionFetcher/Source/GTMSessionFetcherService.m",
    "chars": 45826,
    "preview": "/* Copyright 2014 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GTMSessionFetcher/Source/GTMSessionUploadFetcher.h",
    "chars": 5520,
    "preview": "/* Copyright 2014 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GTMSessionFetcher/Source/GTMSessionUploadFetcher.m",
    "chars": 67037,
    "preview": "/* Copyright 2014 Google Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GoogleToolboxForMac/Foundation/GTMNSData+zlib.h",
    "chars": 9626,
    "preview": "//\n//  GTMNSData+zlib.h\n//\n//  Copyright 2007-2008 Google Inc.\n//\n//  Licensed under the Apache License, Version 2.0 (th"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GoogleToolboxForMac/Foundation/GTMNSData+zlib.m",
    "chars": 20740,
    "preview": "//\n//  GTMNSData+zlib.m\n//\n//  Copyright 2007-2008 Google Inc.\n//\n//  Licensed under the Apache License, Version 2.0 (th"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GoogleToolboxForMac/GTMDefines.h",
    "chars": 13767,
    "preview": "//\n// GTMDefines.h\n//\n//  Copyright 2008 Google Inc.\n//\n//  Licensed under the Apache License, Version 2.0 (the \"License"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GoogleToolboxForMac/LICENSE",
    "chars": 11358,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/GoogleToolboxForMac/README.md",
    "chars": 598,
    "preview": "# GTM: Google Toolbox for Mac #\n\n**Project site** <https://github.com/google/google-toolbox-for-mac><br>\n**Discussion gr"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/LICENSE",
    "chars": 1076,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2017 Wei Wang\n\nPermission is hereby granted, free of charge, to any person obtainin"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/README.md",
    "chars": 4811,
    "preview": "<p align=\"center\">\n\n<img src=\"https://raw.githubusercontent.com/onevcat/Kingfisher/master/images/logo.png\" alt=\"Kingfish"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/AnimatedImageView.swift",
    "chars": 12494,
    "preview": "//\n//  AnimatableImageView.swift\n//  Kingfisher\n//\n//  Created by bl4ckra1sond3tre on 4/22/16.\n//\n//  The AnimatableImag"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/Box.swift",
    "chars": 238,
    "preview": "//\n//  Box.swift\n//  Kingfisher\n//\n//  Created by WANG WEI on 2016/09/12.\n//  Copyright © 2016年 Wei Wang. All rights res"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/CacheSerializer.swift",
    "chars": 3733,
    "preview": "//\n//  CacheSerializer.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 2016/09/02.\n//\n//  Copyright (c) 2017 Wei Wang"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/Filter.swift",
    "chars": 5475,
    "preview": "//\n//  Filter.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 2016/08/31.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/Image.swift",
    "chars": 31974,
    "preview": "//\n//  Image.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 16/1/6.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gmai"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/ImageCache.swift",
    "chars": 28637,
    "preview": "//\n//  ImageCache.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/6.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/ImageDownloader.swift",
    "chars": 23194,
    "preview": "//\n//  ImageDownloader.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/6.\n//\n//  Copyright (c) 2017 Wei Wang <on"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/ImagePrefetcher.swift",
    "chars": 11830,
    "preview": "//\n//  ImagePrefetcher.swift\n//  Kingfisher\n//\n//  Created by Claire Knight <claire.knight@moggytech.co.uk> on 24/02/201"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/ImageProcessor.swift",
    "chars": 14545,
    "preview": "//\n//  ImageProcessor.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 2016/08/26.\n//\n//  Copyright (c) 2017 Wei Wang "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/ImageTransition.swift",
    "chars": 4287,
    "preview": "//\n//  ImageTransition.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/9/18.\n//\n//  Copyright (c) 2017 Wei Wang <o"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/ImageView+Kingfisher.swift",
    "chars": 13217,
    "preview": "//\n//  ImageView+Kingfisher.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/6.\n//\n//  Copyright (c) 2017 Wei Wan"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/Indicator.swift",
    "chars": 6300,
    "preview": "//\n//  Indicator.swift\n//  Kingfisher\n//\n//  Created by João D. Moreira on 30/08/16.\n//\n//  Copyright (c) 2017 Wei Wang "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/Kingfisher.h",
    "chars": 1595,
    "preview": "//\n//  Kingfisher.h\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/6.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@gma"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/Kingfisher.swift",
    "chars": 2226,
    "preview": "//\n//  Kingfisher.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 16/9/14.\n//\n//  Copyright (c) 2017 Wei Wang <onevca"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/KingfisherManager.swift",
    "chars": 9045,
    "preview": "//\n//  KingfisherManager.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/6.\n//\n//  Copyright (c) 2017 Wei Wang <"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/KingfisherOptionsInfo.swift",
    "chars": 13050,
    "preview": "//\n//  KingfisherOptionsInfo.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/23.\n//\n//  Copyright (c) 2017 Wei W"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/RequestModifier.swift",
    "chars": 1921,
    "preview": "//\n//  RequestModifier.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 2016/09/05.\n//\n//  Copyright (c) 2017 Wei Wang"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/Resource.swift",
    "chars": 2716,
    "preview": "//\n//  Resource.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/6.\n//\n//  Copyright (c) 2017 Wei Wang <onevcat@g"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/String+MD5.swift",
    "chars": 10170,
    "preview": "//\n//  String+MD5.swift\n//  Kingfisher\n//\n// To date, adding CommonCrypto to a Swift framework is problematic. See:\n// h"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/ThreadHelper.swift",
    "chars": 1667,
    "preview": "//\n//  ThreadHelper.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/10/9.\n//\n//  Copyright (c) 2017 Wei Wang <onev"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Kingfisher/Sources/UIButton+Kingfisher.swift",
    "chars": 18818,
    "preview": "//\n//  UIButton+Kingfisher.swift\n//  Kingfisher\n//\n//  Created by Wei Wang on 15/4/13.\n//\n//  Copyright (c) 2017 Wei Wan"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Pods.xcodeproj/project.pbxproj",
    "chars": 101537,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Pods.xcodeproj/xcuserdata/jchoi.xcuserdatad/xcschemes/Alamofire.xcscheme",
    "chars": 2096,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Pods.xcodeproj/xcuserdata/jchoi.xcuserdatad/xcschemes/AlamofireSwiftyJSON.xcscheme",
    "chars": 2116,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Pods.xcodeproj/xcuserdata/jchoi.xcuserdatad/xcschemes/GTMSessionFetcher.xcscheme",
    "chars": 2112,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Pods.xcodeproj/xcuserdata/jchoi.xcuserdatad/xcschemes/GoogleToolboxForMac.xcscheme",
    "chars": 2116,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Pods.xcodeproj/xcuserdata/jchoi.xcuserdatad/xcschemes/Kingfisher.xcscheme",
    "chars": 2098,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Pods.xcodeproj/xcuserdata/jchoi.xcuserdatad/xcschemes/Pods-EZShopManager.xcscheme",
    "chars": 2541,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Pods.xcodeproj/xcuserdata/jchoi.xcuserdatad/xcschemes/SwiftyJSON.xcscheme",
    "chars": 2098,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0700\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Pods.xcodeproj/xcuserdata/jchoi.xcuserdatad/xcschemes/xcschememanagement.plist",
    "chars": 1612,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/SwiftyJSON/LICENSE",
    "chars": 1075,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2016 Ruoyu Fu\n\nPermission is hereby granted, free of charge, to any person obtainin"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/SwiftyJSON/README.md",
    "chars": 12859,
    "preview": "# SwiftyJSON\n\n[![Travis CI](https://travis-ci.org/SwiftyJSON/SwiftyJSON.svg?branch=master)](https://travis-ci.org/Swifty"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/SwiftyJSON/Source/SwiftyJSON.swift",
    "chars": 41526,
    "preview": "//  SwiftyJSON.swift\n//\n//  Copyright (c) 2014 - 2017 Ruoyu Fu, Pinglin Tang\n//\n//  Permission is hereby granted, free o"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Target Support Files/Alamofire/Alamofire-dummy.m",
    "chars": 122,
    "preview": "#import <Foundation/Foundation.h>\n@interface PodsDummy_Alamofire : NSObject\n@end\n@implementation PodsDummy_Alamofire\n@en"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch",
    "chars": 48,
    "preview": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#endif\n\n"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h",
    "chars": 163,
    "preview": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#endif\n\n\nFOUNDATION_EXPORT double AlamofireVersionNumber;\nFOUNDATION_EXPORT cons"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Target Support Files/Alamofire/Alamofire.modulemap",
    "chars": 108,
    "preview": "framework module Alamofire {\n  umbrella header \"Alamofire-umbrella.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Target Support Files/Alamofire/Alamofire.xcconfig",
    "chars": 763,
    "preview": "CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Alamofire\nGCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS="
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Target Support Files/Alamofire/Info.plist",
    "chars": 828,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Target Support Files/AlamofireSwiftyJSON/AlamofireSwiftyJSON-dummy.m",
    "chars": 142,
    "preview": "#import <Foundation/Foundation.h>\n@interface PodsDummy_AlamofireSwiftyJSON : NSObject\n@end\n@implementation PodsDummy_Ala"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Target Support Files/AlamofireSwiftyJSON/AlamofireSwiftyJSON-prefix.pch",
    "chars": 48,
    "preview": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#endif\n\n"
  },
  {
    "path": "iOS/Manager/EZShopManager/Pods/Target Support Files/AlamofireSwiftyJSON/AlamofireSwiftyJSON-umbrella.h",
    "chars": 183,
    "preview": "#ifdef __OBJC__\n#import <UIKit/UIKit.h>\n#endif\n\n\nFOUNDATION_EXPORT double AlamofireSwiftyJSONVersionNumber;\nFOUNDATION_E"
  }
]

// ... and 304 more files (download for full content)

About this extraction

This page contains the full source code of the subhan-nadeem/EZShop GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 504 files (102.9 MB), approximately 1.2M tokens, and a symbol index with 168 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!