alqindiirsyam 2 жил өмнө
parent
commit
f2291bfea1
100 өөрчлөгдсөн 2812 нэмэгдсэн , 9776 устгасан
  1. 6 2
      appbuilder-ios/AppBuilder/Podfile
  2. BIN
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Frameworks/WebPKit.framework/Frameworks/libwebp.a
  3. BIN
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Frameworks/WebPKit.framework/WebPKit
  4. BIN
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Frameworks/WebPKit.framework/_CodeSignature/CodeDirectory
  5. BIN
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Frameworks/WebPKit.framework/_CodeSignature/CodeRequirements
  6. BIN
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Frameworks/WebPKit.framework/_CodeSignature/CodeRequirements-1
  7. 0 222
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Frameworks/WebPKit.framework/_CodeSignature/CodeResources
  8. BIN
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Frameworks/WebPKit.framework/_CodeSignature/CodeSignature
  9. BIN
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Info.plist
  10. 0 11
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Modules/module.modulemap
  11. BIN
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Modules/nuSDKService.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo
  12. 0 5212
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Modules/nuSDKService.swiftmodule/arm64-apple-ios.abi.json
  13. 0 83
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Modules/nuSDKService.swiftmodule/arm64-apple-ios.swiftinterface
  14. BIN
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Modules/nuSDKService.swiftmodule/arm64-apple-ios.swiftmodule
  15. 0 111
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/PrivateHeaders/aes.h
  16. 0 21
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/PrivateHeaders/nuSDKService.h
  17. BIN
      appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/nuSDKService
  18. 0 2813
      appbuilder-ios/NexilisLite/Nexilis.swift
  19. 11 13
      appbuilder-ios/NexilisLite/NexilisLite.podspec
  20. 735 587
      appbuilder-ios/NexilisLite/NexilisLite.xcodeproj/project.pbxproj
  21. BIN
      appbuilder-ios/NexilisLite/NexilisLite.xcodeproj/project.xcworkspace/xcuserdata/akhmadalqindiirsyam.xcuserdatad/UserInterfaceState.xcuserstate
  22. BIN
      appbuilder-ios/NexilisLite/NexilisLite.xcodeproj/project.xcworkspace/xcuserdata/qindi.xcuserdatad/UserInterfaceState.xcuserstate
  23. BIN
      appbuilder-ios/NexilisLite/NexilisLite.xcodeproj/project.xcworkspace/xcuserdata/yayandwi.xcuserdatad/UserInterfaceState.xcuserstate
  24. 17 5
      appbuilder-ios/NexilisLite/NexilisLite.xcodeproj/xcshareddata/xcschemes/NexilisLite.xcscheme
  25. 13 0
      appbuilder-ios/NexilisLite/NexilisLite/NexilisLite.docc/NexilisLite.md
  26. 18 0
      appbuilder-ios/NexilisLite/NexilisLite/NexilisLite.h
  27. 3 0
      appbuilder-ios/NexilisLite/NexilisLite/Resource/id.lproj/Localizable.strings
  28. 314 0
      appbuilder-ios/NexilisLite/NexilisLite/Source/APIS.swift
  29. 10 1
      appbuilder-ios/NexilisLite/NexilisLite/Source/Extension.swift
  30. 4 4
      appbuilder-ios/NexilisLite/NexilisLite/Source/FloatingButton/FloatingButton.swift
  31. 5 272
      appbuilder-ios/NexilisLite/NexilisLite/Source/Nexilis.swift
  32. 39 39
      appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/EditorGroup.swift
  33. 39 39
      appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/EditorPersonal.swift
  34. 17 1
      appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/EditorStarMessages.swift
  35. 16 1
      appbuilder-ios/NexilisLite/NexilisLite/Source/View/Contact/ContactCallViewController.swift
  36. 5 5
      appbuilder-ios/NexilisLite/NexilisLite/Source/View/Control/BackupRestoreView.swift
  37. 463 280
      appbuilder-ios/NexilisLite/NexilisLite/Source/View/Control/ContactChatViewController.swift
  38. 17 0
      appbuilder-ios/NexilisLite/NexilisLite/Source/View/Control/GroupDetailViewController.swift
  39. 1 1
      appbuilder-ios/NexilisLite/NexilisLite/Source/View/Control/MessageInfo.swift
  40. 46 21
      appbuilder-ios/NexilisLite/NexilisLite/Source/View/Control/SettingTableViewController.swift
  41. 36 0
      appbuilder-ios/NexilisLite/NexilisLiteTests/NexilisLiteTests.swift
  42. 17 8
      appbuilder-ios/NexilisLite/Podfile
  43. 28 22
      appbuilder-ios/NexilisLite/Podfile.lock
  44. 0 2
      appbuilder-ios/NexilisLite/README.md
  45. 14 0
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Info.plist
  46. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/Info.plist
  47. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/NexilisLiteResources
  48. 938 0
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/_CodeSignature/CodeResources
  49. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_0.png
  50. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_1.png
  51. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_10.png
  52. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_11.png
  53. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_2.png
  54. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_3.png
  55. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_4.png
  56. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_5.png
  57. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_6.png
  58. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_7.png
  59. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_8.png
  60. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_9.png
  61. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_0.png
  62. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_1.png
  63. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_10.png
  64. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_11.png
  65. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_12.png
  66. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_13.png
  67. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_14.png
  68. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_15.png
  69. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_16.png
  70. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_17.png
  71. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_18.png
  72. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_19.png
  73. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_2.png
  74. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_20.png
  75. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_21.png
  76. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_22.png
  77. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_23.png
  78. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_3.png
  79. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_4.png
  80. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_5.png
  81. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_6.png
  82. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_7.png
  83. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_8.png
  84. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_9.png
  85. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_0.png
  86. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_1.png
  87. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_10.png
  88. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_11.png
  89. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_12.png
  90. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_13.png
  91. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_14.png
  92. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_15.png
  93. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_16.png
  94. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_17.png
  95. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_18.png
  96. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_19.png
  97. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_2.png
  98. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_20.png
  99. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_21.png
  100. BIN
      appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_22.png

+ 6 - 2
appbuilder-ios/AppBuilder/Podfile

@@ -5,9 +5,13 @@ target 'AppBuilder' do
   # Comment the next line if you don't want to use dynamic frameworks
   use_frameworks!
 
-#  pod 'QmeraLite', '~> 1.0.2'
-#  pod 'GoogleUtilitiesComponents', '~> 1.1'
   pod 'NexilisLite', :path => '../NexilisLite'
+#  pod 'nuSDKService', '~> 0.0.8'
+#  pod 'FMDB', '~> 2.7.5'
+#  pod 'NotificationBannerSwift', '~> 3.2.1'
+#  pod 'Alamofire', '~> 5.7.0'
+#  pod 'SDWebImage', '~> 5.15.7'
+#  pod 'Toast-Swift', '~> 5.0.1'
 
   # Pods for AppBuilder
 

BIN
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Frameworks/WebPKit.framework/Frameworks/libwebp.a


BIN
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Frameworks/WebPKit.framework/WebPKit


BIN
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Frameworks/WebPKit.framework/_CodeSignature/CodeDirectory


BIN
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Frameworks/WebPKit.framework/_CodeSignature/CodeRequirements


BIN
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Frameworks/WebPKit.framework/_CodeSignature/CodeRequirements-1


+ 0 - 222
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Frameworks/WebPKit.framework/_CodeSignature/CodeResources

@@ -1,222 +0,0 @@
-<?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>files</key>
-	<dict>
-		<key>Frameworks/libwebp.a</key>
-		<data>
-		rRo3HQsqKvfjYq1srNPN95qR2wE=
-		</data>
-		<key>Headers/WebPKit-Swift.h</key>
-		<data>
-		yIlaMGNB1s9bm0ujXoHM23zzfTA=
-		</data>
-		<key>Headers/WebPKit.h</key>
-		<data>
-		JdR2zawSQ93rkr9bKaI7fV66SHc=
-		</data>
-		<key>Info.plist</key>
-		<data>
-		6xz/2JIfGc15nLBEm9OjXoIFSWs=
-		</data>
-		<key>Modules/WebPKit.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo</key>
-		<data>
-		3W9tdnx/B/qJSN+xWaCgThr/cCQ=
-		</data>
-		<key>Modules/WebPKit.swiftmodule/arm64-apple-ios.abi.json</key>
-		<data>
-		FSPnLbho3G+LL9smI3XgVOqBIQ4=
-		</data>
-		<key>Modules/WebPKit.swiftmodule/arm64-apple-ios.swiftdoc</key>
-		<data>
-		dFl1At1sKrioJCrrkF1RtDeqyl8=
-		</data>
-		<key>Modules/WebPKit.swiftmodule/arm64-apple-ios.swiftmodule</key>
-		<data>
-		D/NBSi9Yx5EnWKfIXWn6VCFbIHU=
-		</data>
-		<key>Modules/module.modulemap</key>
-		<data>
-		c0jYsT4SngMDfdW7aEeB0jpFrxw=
-		</data>
-	</dict>
-	<key>files2</key>
-	<dict>
-		<key>Frameworks/libwebp.a</key>
-		<dict>
-			<key>hash</key>
-			<data>
-			rRo3HQsqKvfjYq1srNPN95qR2wE=
-			</data>
-			<key>hash2</key>
-			<data>
-			BTwZBMZ34ZDiycXCDxXjgYKmTXY5EORnQwrLEkogiKI=
-			</data>
-		</dict>
-		<key>Headers/WebPKit-Swift.h</key>
-		<dict>
-			<key>hash</key>
-			<data>
-			yIlaMGNB1s9bm0ujXoHM23zzfTA=
-			</data>
-			<key>hash2</key>
-			<data>
-			MSMxzlaUK7x8202AFj35HmdSo4azmO4Fzh+ZGzXkvgA=
-			</data>
-		</dict>
-		<key>Headers/WebPKit.h</key>
-		<dict>
-			<key>hash</key>
-			<data>
-			JdR2zawSQ93rkr9bKaI7fV66SHc=
-			</data>
-			<key>hash2</key>
-			<data>
-			JF92ecE1eG0CtbQxD7tGvp5XYScwy4GPWNCXW/Gm5MA=
-			</data>
-		</dict>
-		<key>Modules/WebPKit.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo</key>
-		<dict>
-			<key>hash</key>
-			<data>
-			3W9tdnx/B/qJSN+xWaCgThr/cCQ=
-			</data>
-			<key>hash2</key>
-			<data>
-			Fg3cDzxbuqq9f59+gEyl6mVAsTphugFzmMl6X2eaWvY=
-			</data>
-		</dict>
-		<key>Modules/WebPKit.swiftmodule/arm64-apple-ios.abi.json</key>
-		<dict>
-			<key>hash</key>
-			<data>
-			FSPnLbho3G+LL9smI3XgVOqBIQ4=
-			</data>
-			<key>hash2</key>
-			<data>
-			KnRdWE4y6t4QM5zi5JDptPdHFgJy1Tku+7GLkZS2aNM=
-			</data>
-		</dict>
-		<key>Modules/WebPKit.swiftmodule/arm64-apple-ios.swiftdoc</key>
-		<dict>
-			<key>hash</key>
-			<data>
-			dFl1At1sKrioJCrrkF1RtDeqyl8=
-			</data>
-			<key>hash2</key>
-			<data>
-			LZ2w0ISJwP51MZcumODGzzY16IPbzwNnfTdU9nvAK2k=
-			</data>
-		</dict>
-		<key>Modules/WebPKit.swiftmodule/arm64-apple-ios.swiftmodule</key>
-		<dict>
-			<key>hash</key>
-			<data>
-			D/NBSi9Yx5EnWKfIXWn6VCFbIHU=
-			</data>
-			<key>hash2</key>
-			<data>
-			XhzhJXpQffHitmM9fWE9SLHGZUzsjG/ScjM/UT337Ug=
-			</data>
-		</dict>
-		<key>Modules/module.modulemap</key>
-		<dict>
-			<key>hash</key>
-			<data>
-			c0jYsT4SngMDfdW7aEeB0jpFrxw=
-			</data>
-			<key>hash2</key>
-			<data>
-			/5Oi4oQtpyu2Bacy+mYjaT/pdiZ7fB6qAfWsD4/pX7w=
-			</data>
-		</dict>
-	</dict>
-	<key>rules</key>
-	<dict>
-		<key>^.*</key>
-		<true/>
-		<key>^.*\.lproj/</key>
-		<dict>
-			<key>optional</key>
-			<true/>
-			<key>weight</key>
-			<real>1000</real>
-		</dict>
-		<key>^.*\.lproj/locversion.plist$</key>
-		<dict>
-			<key>omit</key>
-			<true/>
-			<key>weight</key>
-			<real>1100</real>
-		</dict>
-		<key>^Base\.lproj/</key>
-		<dict>
-			<key>weight</key>
-			<real>1010</real>
-		</dict>
-		<key>^version.plist$</key>
-		<true/>
-	</dict>
-	<key>rules2</key>
-	<dict>
-		<key>.*\.dSYM($|/)</key>
-		<dict>
-			<key>weight</key>
-			<real>11</real>
-		</dict>
-		<key>^(.*/)?\.DS_Store$</key>
-		<dict>
-			<key>omit</key>
-			<true/>
-			<key>weight</key>
-			<real>2000</real>
-		</dict>
-		<key>^.*</key>
-		<true/>
-		<key>^.*\.lproj/</key>
-		<dict>
-			<key>optional</key>
-			<true/>
-			<key>weight</key>
-			<real>1000</real>
-		</dict>
-		<key>^.*\.lproj/locversion.plist$</key>
-		<dict>
-			<key>omit</key>
-			<true/>
-			<key>weight</key>
-			<real>1100</real>
-		</dict>
-		<key>^Base\.lproj/</key>
-		<dict>
-			<key>weight</key>
-			<real>1010</real>
-		</dict>
-		<key>^Info\.plist$</key>
-		<dict>
-			<key>omit</key>
-			<true/>
-			<key>weight</key>
-			<real>20</real>
-		</dict>
-		<key>^PkgInfo$</key>
-		<dict>
-			<key>omit</key>
-			<true/>
-			<key>weight</key>
-			<real>20</real>
-		</dict>
-		<key>^embedded\.provisionprofile$</key>
-		<dict>
-			<key>weight</key>
-			<real>20</real>
-		</dict>
-		<key>^version\.plist$</key>
-		<dict>
-			<key>weight</key>
-			<real>20</real>
-		</dict>
-	</dict>
-</dict>
-</plist>

BIN
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Frameworks/WebPKit.framework/_CodeSignature/CodeSignature


BIN
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Info.plist


+ 0 - 11
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Modules/module.modulemap

@@ -1,11 +0,0 @@
-framework module nuSDKService {
-  umbrella header "nuSDKService.h"
-
-  export *
-  module * { export * }
-}
-
-module nuSDKService.Swift {
-  header "nuSDKService-Swift.h"
-  requires objc
-}

BIN
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Modules/nuSDKService.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo


+ 0 - 5212
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Modules/nuSDKService.swiftmodule/arm64-apple-ios.abi.json

@@ -1,5212 +0,0 @@
-{
-  "ABIRoot": {
-    "kind": "Root",
-    "name": "TopLevel",
-    "printedName": "TopLevel",
-    "children": [
-      {
-        "kind": "Import",
-        "name": "Security",
-        "printedName": "Security",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "RawDocComment"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "Foundation",
-        "printedName": "Foundation",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "Import",
-        "name": "CommonCrypto",
-        "printedName": "CommonCrypto",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "Import",
-        "name": "Foundation",
-        "printedName": "Foundation",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "RawDocComment"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "AVFoundation",
-        "printedName": "AVFoundation",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "RawDocComment"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "ReplayKit",
-        "printedName": "ReplayKit",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "TypeDecl",
-        "name": "CallBack",
-        "printedName": "CallBack",
-        "children": [
-          {
-            "kind": "Var",
-            "name": "sID",
-            "printedName": "sID",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "String",
-                "printedName": "Swift.String",
-                "usr": "s:SS"
-              }
-            ],
-            "declKind": "Var",
-            "usr": "s:12nuSDKService8CallBackP3sIDSSvp",
-            "mangledName": "$s12nuSDKService8CallBackP3sIDSSvp",
-            "moduleName": "nuSDKService",
-            "protocolReq": true,
-            "accessors": [
-              {
-                "kind": "Accessor",
-                "name": "Get",
-                "printedName": "Get()",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "declKind": "Accessor",
-                "usr": "s:12nuSDKService8CallBackP3sIDSSvg",
-                "mangledName": "$s12nuSDKService8CallBackP3sIDSSvg",
-                "moduleName": "nuSDKService",
-                "genericSig": "<τ_0_0 where τ_0_0 : nuSDKService.CallBack>",
-                "sugared_genericSig": "<Self where Self : nuSDKService.CallBack>",
-                "protocolReq": true,
-                "reqNewWitnessTableEntry": true,
-                "accessorKind": "get"
-              }
-            ]
-          },
-          {
-            "kind": "Function",
-            "name": "connectionStateChanged",
-            "printedName": "connectionStateChanged(sUserID:sDeviceID:bConState:nConType:nConSubType:nCLMConStat:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Bool?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Bool",
-                    "printedName": "Swift.Bool",
-                    "usr": "s:Sb"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.UInt8?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UInt8",
-                    "printedName": "Swift.UInt8",
-                    "usr": "s:s5UInt8V"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService8CallBackP22connectionStateChanged7sUserID07sDeviceI004bConF001nK4Type01nk3SubL011nCLMConStatySSSg_AKSbSgSiSgAMs5UInt8VSgtF",
-            "mangledName": "$s12nuSDKService8CallBackP22connectionStateChanged7sUserID07sDeviceI004bConF001nK4Type01nk3SubL011nCLMConStatySSSg_AKSbSgSiSgAMs5UInt8VSgtF",
-            "moduleName": "nuSDKService",
-            "genericSig": "<τ_0_0 where τ_0_0 : nuSDKService.CallBack>",
-            "sugared_genericSig": "<Self where Self : nuSDKService.CallBack>",
-            "protocolReq": true,
-            "reqNewWitnessTableEntry": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "gpsStateChanged",
-            "printedName": "gpsStateChanged(nState:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService8CallBackP15gpsStateChanged01nF0ySiSg_tF",
-            "mangledName": "$s12nuSDKService8CallBackP15gpsStateChanged01nF0ySiSg_tF",
-            "moduleName": "nuSDKService",
-            "genericSig": "<τ_0_0 where τ_0_0 : nuSDKService.CallBack>",
-            "sugared_genericSig": "<Self where Self : nuSDKService.CallBack>",
-            "protocolReq": true,
-            "reqNewWitnessTableEntry": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sleepStateChanged",
-            "printedName": "sleepStateChanged(bState:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Bool?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Bool",
-                    "printedName": "Swift.Bool",
-                    "usr": "s:Sb"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService8CallBackP17sleepStateChanged01bF0ySbSg_tF",
-            "mangledName": "$s12nuSDKService8CallBackP17sleepStateChanged01bF0ySbSg_tF",
-            "moduleName": "nuSDKService",
-            "genericSig": "<τ_0_0 where τ_0_0 : nuSDKService.CallBack>",
-            "sugared_genericSig": "<Self where Self : nuSDKService.CallBack>",
-            "protocolReq": true,
-            "declAttributes": [
-              "RawDocComment"
-            ],
-            "reqNewWitnessTableEntry": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "callStateChanged",
-            "printedName": "callStateChanged(nState:sMessage:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Int",
-                "printedName": "Swift.Int",
-                "usr": "s:Si"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService8CallBackP16callStateChanged01nF08sMessageS2iSg_SSSgtF",
-            "mangledName": "$s12nuSDKService8CallBackP16callStateChanged01nF08sMessageS2iSg_SSSgtF",
-            "moduleName": "nuSDKService",
-            "genericSig": "<τ_0_0 where τ_0_0 : nuSDKService.CallBack>",
-            "sugared_genericSig": "<Self where Self : nuSDKService.CallBack>",
-            "protocolReq": true,
-            "reqNewWitnessTableEntry": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "bcastStateChanged",
-            "printedName": "bcastStateChanged(nState:sMessage:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Int",
-                "printedName": "Swift.Int",
-                "usr": "s:Si"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService8CallBackP17bcastStateChanged01nF08sMessageS2iSg_SSSgtF",
-            "mangledName": "$s12nuSDKService8CallBackP17bcastStateChanged01nF08sMessageS2iSg_SSSgtF",
-            "moduleName": "nuSDKService",
-            "genericSig": "<τ_0_0 where τ_0_0 : nuSDKService.CallBack>",
-            "sugared_genericSig": "<Self where Self : nuSDKService.CallBack>",
-            "protocolReq": true,
-            "declAttributes": [
-              "RawDocComment"
-            ],
-            "reqNewWitnessTableEntry": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sshareStateChanged",
-            "printedName": "sshareStateChanged(nState:sMessage:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Int",
-                "printedName": "Swift.Int",
-                "usr": "s:Si"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService8CallBackP18sshareStateChanged01nF08sMessageS2iSg_SSSgtF",
-            "mangledName": "$s12nuSDKService8CallBackP18sshareStateChanged01nF08sMessageS2iSg_SSSgtF",
-            "moduleName": "nuSDKService",
-            "genericSig": "<τ_0_0 where τ_0_0 : nuSDKService.CallBack>",
-            "sugared_genericSig": "<Self where Self : nuSDKService.CallBack>",
-            "protocolReq": true,
-            "reqNewWitnessTableEntry": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "incomingData",
-            "printedName": "incomingData(sPacketID:oData:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "AnyObject?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "ProtocolComposition",
-                    "printedName": "AnyObject"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService8CallBackP12incomingData9sPacketID01oF0ySSSg_yXlSgtKF",
-            "mangledName": "$s12nuSDKService8CallBackP12incomingData9sPacketID01oF0ySSSg_yXlSgtKF",
-            "moduleName": "nuSDKService",
-            "genericSig": "<τ_0_0 where τ_0_0 : nuSDKService.CallBack>",
-            "sugared_genericSig": "<Self where Self : nuSDKService.CallBack>",
-            "protocolReq": true,
-            "throwing": true,
-            "reqNewWitnessTableEntry": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "lateResponse",
-            "printedName": "lateResponse(sPacketID:sResponse:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService8CallBackP12lateResponse9sPacketID01sF0ySSSg_AGtKF",
-            "mangledName": "$s12nuSDKService8CallBackP12lateResponse9sPacketID01sF0ySSSg_AGtKF",
-            "moduleName": "nuSDKService",
-            "genericSig": "<τ_0_0 where τ_0_0 : nuSDKService.CallBack>",
-            "sugared_genericSig": "<Self where Self : nuSDKService.CallBack>",
-            "protocolReq": true,
-            "throwing": true,
-            "reqNewWitnessTableEntry": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "asycnACKReceived",
-            "printedName": "asycnACKReceived(sPacketID:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService8CallBackP16asycnACKReceived9sPacketIDySSSg_tKF",
-            "mangledName": "$s12nuSDKService8CallBackP16asycnACKReceived9sPacketIDySSSg_tKF",
-            "moduleName": "nuSDKService",
-            "genericSig": "<τ_0_0 where τ_0_0 : nuSDKService.CallBack>",
-            "sugared_genericSig": "<Self where Self : nuSDKService.CallBack>",
-            "protocolReq": true,
-            "throwing": true,
-            "reqNewWitnessTableEntry": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "locationUpdated",
-            "printedName": "locationUpdated(lTime:sLocationInfo:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int64?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int64",
-                    "printedName": "Swift.Int64",
-                    "usr": "s:s5Int64V"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService8CallBackP15locationUpdated5lTime13sLocationInfoys5Int64VSg_SSSgtF",
-            "mangledName": "$s12nuSDKService8CallBackP15locationUpdated5lTime13sLocationInfoys5Int64VSg_SSSgtF",
-            "moduleName": "nuSDKService",
-            "genericSig": "<τ_0_0 where τ_0_0 : nuSDKService.CallBack>",
-            "sugared_genericSig": "<Self where Self : nuSDKService.CallBack>",
-            "protocolReq": true,
-            "reqNewWitnessTableEntry": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "resetDB",
-            "printedName": "resetDB()",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService8CallBackP7resetDByyF",
-            "mangledName": "$s12nuSDKService8CallBackP7resetDByyF",
-            "moduleName": "nuSDKService",
-            "genericSig": "<τ_0_0 where τ_0_0 : nuSDKService.CallBack>",
-            "sugared_genericSig": "<Self where Self : nuSDKService.CallBack>",
-            "protocolReq": true,
-            "declAttributes": [
-              "RawDocComment"
-            ],
-            "reqNewWitnessTableEntry": true,
-            "funcSelfKind": "NonMutating"
-          }
-        ],
-        "declKind": "Protocol",
-        "usr": "s:12nuSDKService8CallBackP",
-        "mangledName": "$s12nuSDKService8CallBackP",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "AccessControl",
-          "RawDocComment"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "Foundation",
-        "printedName": "Foundation",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "RawDocComment"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "AVFoundation",
-        "printedName": "AVFoundation",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "Import",
-        "name": "CoreImage",
-        "printedName": "CoreImage",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "Import",
-        "name": "UIKit",
-        "printedName": "UIKit",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "Import",
-        "name": "WebPKit",
-        "printedName": "WebPKit",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "ImplementationOnly"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "Foundation",
-        "printedName": "Foundation",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "RawDocComment"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "Security",
-        "printedName": "Security",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "Import",
-        "name": "Foundation",
-        "printedName": "Foundation",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "RawDocComment"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "UIKit",
-        "printedName": "UIKit",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "RawDocComment"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "AVFoundation",
-        "printedName": "AVFoundation",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "RawDocComment"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "CoreTelephony",
-        "printedName": "CoreTelephony",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "Import",
-        "name": "UIKit",
-        "printedName": "UIKit",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "TypeDecl",
-        "name": "API",
-        "printedName": "API",
-        "children": [
-          {
-            "kind": "Function",
-            "name": "switchUser",
-            "printedName": "switchUser(cbiI:sUserID:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "nuSDKService.CallBack?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "CallBack",
-                    "printedName": "nuSDKService.CallBack",
-                    "usr": "s:12nuSDKService8CallBackP"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC10switchUser4cbiI01sE2IDyAA8CallBack_pSg_SSSgtKFZ",
-            "mangledName": "$s12nuSDKService3APIC10switchUser4cbiI01sE2IDyAA8CallBack_pSg_SSSgtKFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "throwing": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "initConnection",
-            "printedName": "initConnection(bSwitchIP:sAPIK:aAppMain:cbiI:sTCPAddr:nTCPPort:sUserID:sStartWH:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Bool?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Bool",
-                    "printedName": "Swift.Bool",
-                    "usr": "s:Sb"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIViewController?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIViewController",
-                    "printedName": "UIKit.UIViewController",
-                    "usr": "c:objc(cs)UIViewController"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "nuSDKService.CallBack?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "CallBack",
-                    "printedName": "nuSDKService.CallBack",
-                    "usr": "s:12nuSDKService8CallBackP"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC14initConnection9bSwitchIP5sAPIK8aAppMain4cbiI8sTCPAddr8nTCPPort7sUserID8sStartWHySbSg_SSSgSo16UIViewControllerCSgAA8CallBack_pSgANSiSgA2NtKFZ",
-            "mangledName": "$s12nuSDKService3APIC14initConnection9bSwitchIP5sAPIK8aAppMain4cbiI8sTCPAddr8nTCPPort7sUserID8sStartWHySbSg_SSSgSo16UIViewControllerCSgAA8CallBack_pSgANSiSgA2NtKFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl",
-              "RawDocComment"
-            ],
-            "throwing": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "switchCBI",
-            "printedName": "switchCBI(cbiI:bLight:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "nuSDKService.CallBack?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "CallBack",
-                    "printedName": "nuSDKService.CallBack",
-                    "usr": "s:12nuSDKService8CallBackP"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Bool?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Bool",
-                    "printedName": "Swift.Bool",
-                    "usr": "s:Sb"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC9switchCBI4cbiI6bLightyAA8CallBack_pSg_SbSgtKFZ",
-            "mangledName": "$s12nuSDKService3APIC9switchCBI4cbiI6bLightyAA8CallBack_pSg_SbSgtKFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "throwing": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "bnuSDKServiceReady",
-            "printedName": "bnuSDKServiceReady()",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Bool",
-                "printedName": "Swift.Bool",
-                "usr": "s:Sb"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC03bnuB5ReadySbyFZ",
-            "mangledName": "$s12nuSDKService3APIC03bnuB5ReadySbyFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sSend",
-            "printedName": "sSend(sData:nPriority:lTimeout:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Optional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.UInt8?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UInt8",
-                    "printedName": "Swift.UInt8",
-                    "usr": "s:s5UInt8V"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC5sSend5sData9nPriority8lTimeoutSSSgAH_s5UInt8VSgSiSgtKFZ",
-            "mangledName": "$s12nuSDKService3APIC5sSend5sData9nPriority8lTimeoutSSSgAH_s5UInt8VSgSiSgtKFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "throwing": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sSend",
-            "printedName": "sSend(abData:nPriority:lTimeout:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Optional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "[Swift.UInt8]?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Array",
-                    "printedName": "[Swift.UInt8]",
-                    "children": [
-                      {
-                        "kind": "TypeNominal",
-                        "name": "UInt8",
-                        "printedName": "Swift.UInt8",
-                        "usr": "s:s5UInt8V"
-                      }
-                    ],
-                    "usr": "s:Sa"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.UInt8?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UInt8",
-                    "printedName": "Swift.UInt8",
-                    "usr": "s:s5UInt8V"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC5sSend6abData9nPriority8lTimeoutSSSgSays5UInt8VGSg_AJSgSiSgtKFZ",
-            "mangledName": "$s12nuSDKService3APIC5sSend6abData9nPriority8lTimeoutSSSgSays5UInt8VGSg_AJSgSiSgtKFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "throwing": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sSendResponse",
-            "printedName": "sSendResponse(sRequestID:sResponse:lTimeout:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Optional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC13sSendResponse10sRequestID01sE08lTimeoutSSSgAH_AHSiSgtKFZ",
-            "mangledName": "$s12nuSDKService3APIC13sSendResponse10sRequestID01sE08lTimeoutSSSgAH_AHSiSgtKFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "throwing": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sGetResponse",
-            "printedName": "sGetResponse(sRequest:lTimeout:bKeepTOResp:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Optional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "Bool",
-                "printedName": "Swift.Bool",
-                "usr": "s:Sb"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC12sGetResponse8sRequest8lTimeout11bKeepTORespSSSgAH_SiSgSbtKFZ",
-            "mangledName": "$s12nuSDKService3APIC12sGetResponse8sRequest8lTimeout11bKeepTORespSSSgAH_SiSgSbtKFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "throwing": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sGetMessage",
-            "printedName": "sGetMessage(sPacketID:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Optional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC11sGetMessage9sPacketIDSSSgAF_tKFZ",
-            "mangledName": "$s12nuSDKService3APIC11sGetMessage9sPacketIDSSSgAF_tKFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "throwing": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "abGetMessage",
-            "printedName": "abGetMessage(sPacketID:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Optional",
-                "printedName": "[Swift.UInt8]?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Array",
-                    "printedName": "[Swift.UInt8]",
-                    "children": [
-                      {
-                        "kind": "TypeNominal",
-                        "name": "UInt8",
-                        "printedName": "Swift.UInt8",
-                        "usr": "s:s5UInt8V"
-                      }
-                    ],
-                    "usr": "s:Sa"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC12abGetMessage9sPacketIDSays5UInt8VGSgSSSg_tKFZ",
-            "mangledName": "$s12nuSDKService3APIC12abGetMessage9sPacketIDSays5UInt8VGSgSSSg_tKFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "throwing": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "oGetMessage",
-            "printedName": "oGetMessage(sPacketID:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Optional",
-                "printedName": "AnyObject?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "ProtocolComposition",
-                    "printedName": "AnyObject"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC11oGetMessage9sPacketIDyXlSgSSSg_tKFZ",
-            "mangledName": "$s12nuSDKService3APIC11oGetMessage9sPacketIDyXlSgSSSg_tKFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "throwing": true,
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sGetVersion",
-            "printedName": "sGetVersion()",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC11sGetVersionSSSgyFZ",
-            "mangledName": "$s12nuSDKService3APIC11sGetVersionSSSgyFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl",
-              "RawDocComment"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sGetServerAddress",
-            "printedName": "sGetServerAddress()",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC17sGetServerAddressSSSgyFZ",
-            "mangledName": "$s12nuSDKService3APIC17sGetServerAddressSSSgyFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sGetOperatorCode",
-            "printedName": "sGetOperatorCode()",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC16sGetOperatorCodeSSSgyFZ",
-            "mangledName": "$s12nuSDKService3APIC16sGetOperatorCodeSSSgyFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sGetConnMode",
-            "printedName": "sGetConnMode()",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC12sGetConnModeSSSgyFZ",
-            "mangledName": "$s12nuSDKService3APIC12sGetConnModeSSSgyFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sGetConnStat",
-            "printedName": "sGetConnStat()",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC12sGetConnStatSSSgyFZ",
-            "mangledName": "$s12nuSDKService3APIC12sGetConnStatSSSgyFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "bInetConnAvailable",
-            "printedName": "bInetConnAvailable()",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Bool?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Bool",
-                    "printedName": "Swift.Bool",
-                    "usr": "s:Sb"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC18bInetConnAvailableSbSgyFZ",
-            "mangledName": "$s12nuSDKService3APIC18bInetConnAvailableSbSgyFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "nGetCLXConnState",
-            "printedName": "nGetCLXConnState()",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.UInt8?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UInt8",
-                    "printedName": "Swift.UInt8",
-                    "usr": "s:s5UInt8V"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC16nGetCLXConnStates5UInt8VSgyFZ",
-            "mangledName": "$s12nuSDKService3APIC16nGetCLXConnStates5UInt8VSgyFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sGetCurentUserID",
-            "printedName": "sGetCurentUserID()",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC16sGetCurentUserIDSSSgyFZ",
-            "mangledName": "$s12nuSDKService3APIC16sGetCurentUserIDSSSgyFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "nGetSSRequestCode",
-            "printedName": "nGetSSRequestCode()",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC17nGetSSRequestCodeSiSgyFZ",
-            "mangledName": "$s12nuSDKService3APIC17nGetSSRequestCodeSiSgyFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sGetLocInfo",
-            "printedName": "sGetLocInfo()",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC11sGetLocInfoSSSgyFZ",
-            "mangledName": "$s12nuSDKService3APIC11sGetLocInfoSSSgyFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "pauseAudio",
-            "printedName": "pauseAudio(fValue:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Float?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Float",
-                    "printedName": "Swift.Float",
-                    "usr": "s:Sf"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC10pauseAudio6fValueySfSg_tFZ",
-            "mangledName": "$s12nuSDKService3APIC10pauseAudio6fValueySfSg_tFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl",
-              "RawDocComment"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "resumeAudio",
-            "printedName": "resumeAudio(fValue:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Float?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Float",
-                    "printedName": "Swift.Float",
-                    "usr": "s:Sf"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC11resumeAudio6fValueySfSg_tFZ",
-            "mangledName": "$s12nuSDKService3APIC11resumeAudio6fValueySfSg_tFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "turnCCallAudio",
-            "printedName": "turnCCallAudio(sParty:bOnOff:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Bool?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Bool",
-                    "printedName": "Swift.Bool",
-                    "usr": "s:Sb"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC14turnCCallAudio6sParty6bOnOffySSSg_SbSgtFZ",
-            "mangledName": "$s12nuSDKService3APIC14turnCCallAudio6sParty6bOnOffySSSg_SbSgtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "adjustVolume",
-            "printedName": "adjustVolume(fValue:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Float?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Float",
-                    "printedName": "Swift.Float",
-                    "usr": "s:Sf"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC12adjustVolume6fValueySfSg_tFZ",
-            "mangledName": "$s12nuSDKService3APIC12adjustVolume6fValueySfSg_tFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "adjustCQFR",
-            "printedName": "adjustCQFR(nVQuality:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC10adjustCQFR9nVQualityySiSg_tFZ",
-            "mangledName": "$s12nuSDKService3APIC10adjustCQFR9nVQualityySiSg_tFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "changeCameraParam",
-            "printedName": "changeCameraParam(nCameraIdx:nResolutionIndex:nQuality:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.UInt8?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UInt8",
-                    "printedName": "Swift.UInt8",
-                    "usr": "s:s5UInt8V"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC17changeCameraParam01nE3Idx16nResolutionIndex8nQualityySiSg_s5UInt8VSgAHtFZ",
-            "mangledName": "$s12nuSDKService3APIC17changeCameraParam01nE3Idx16nResolutionIndex8nQualityySiSg_s5UInt8VSgAHtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "incomingCallWSleep",
-            "printedName": "incomingCallWSleep(sParty:nService:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC18incomingCallWSleep6sParty8nServiceySSSg_SiSgtFZ",
-            "mangledName": "$s12nuSDKService3APIC18incomingCallWSleep6sParty8nServiceySSSg_SiSgtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl",
-              "RawDocComment"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "initiateCCall",
-            "printedName": "initiateCCall(sParty:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC13initiateCCall6sPartyySSSg_tFZ",
-            "mangledName": "$s12nuSDKService3APIC13initiateCCall6sPartyySSSg_tFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "receiveCCall",
-            "printedName": "receiveCCall(sParty:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC12receiveCCall6sPartyySSSg_tFZ",
-            "mangledName": "$s12nuSDKService3APIC12receiveCCall6sPartyySSSg_tFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "initiateCCall",
-            "printedName": "initiateCCall(sParty:nCamIdx:nResIdx:nVQuality:ivRemoteView:ivLocalView:ivRemoteZ:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.UInt8?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UInt8",
-                    "printedName": "Swift.UInt8",
-                    "usr": "s:s5UInt8V"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "[UIKit.UIImageView]?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Array",
-                    "printedName": "[UIKit.UIImageView]",
-                    "children": [
-                      {
-                        "kind": "TypeNominal",
-                        "name": "UIImageView",
-                        "printedName": "UIKit.UIImageView",
-                        "usr": "c:objc(cs)UIImageView"
-                      }
-                    ],
-                    "usr": "s:Sa"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC13initiateCCall6sParty7nCamIdx04nResH09nVQuality12ivRemoteView0k5LocalM00kL1ZySSSg_SiSgs5UInt8VSgAMSaySo07UIImageM0CGSgARSgAUtFZ",
-            "mangledName": "$s12nuSDKService3APIC13initiateCCall6sParty7nCamIdx04nResH09nVQuality12ivRemoteView0k5LocalM00kL1ZySSSg_SiSgs5UInt8VSgAMSaySo07UIImageM0CGSgARSgAUtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "receiveCCall",
-            "printedName": "receiveCCall(sParty:nCamIdx:nResIdx:nVQuality:ivRemoteView:ivLocalView:ivRemoteZ:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.UInt8?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UInt8",
-                    "printedName": "Swift.UInt8",
-                    "usr": "s:s5UInt8V"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "[UIKit.UIImageView]?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Array",
-                    "printedName": "[UIKit.UIImageView]",
-                    "children": [
-                      {
-                        "kind": "TypeNominal",
-                        "name": "UIImageView",
-                        "printedName": "UIKit.UIImageView",
-                        "usr": "c:objc(cs)UIImageView"
-                      }
-                    ],
-                    "usr": "s:Sa"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC12receiveCCall6sParty7nCamIdx04nResH09nVQuality12ivRemoteView0k5LocalM00kL1ZySSSg_SiSgs5UInt8VSgAMSaySo07UIImageM0CGSgARSgAUtFZ",
-            "mangledName": "$s12nuSDKService3APIC12receiveCCall6sParty7nCamIdx04nResH09nVQuality12ivRemoteView0k5LocalM00kL1ZySSSg_SiSgs5UInt8VSgAMSaySo07UIImageM0CGSgARSgAUtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "terminateCall",
-            "printedName": "terminateCall(sParty:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "Optional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC13terminateCall6sPartyySSSg_tFZ",
-            "mangledName": "$s12nuSDKService3APIC13terminateCall6sPartyySSSg_tFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "initiateCR",
-            "printedName": "initiateCR(sConfRoom:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC10initiateCR9sConfRoomySSSg_tFZ",
-            "mangledName": "$s12nuSDKService3APIC10initiateCR9sConfRoomySSSg_tFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl",
-              "RawDocComment"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "joinCR",
-            "printedName": "joinCR(sConfRoom:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC6joinCR9sConfRoomySSSg_tFZ",
-            "mangledName": "$s12nuSDKService3APIC6joinCR9sConfRoomySSSg_tFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "initiateCR",
-            "printedName": "initiateCR(sConfRoom:nCamIdx:nResIdx:nVQuality:ivRemoteView:ivLocalView:ivRemoteZ:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.UInt8?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UInt8",
-                    "printedName": "Swift.UInt8",
-                    "usr": "s:s5UInt8V"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "[UIKit.UIImageView]?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Array",
-                    "printedName": "[UIKit.UIImageView]",
-                    "children": [
-                      {
-                        "kind": "TypeNominal",
-                        "name": "UIImageView",
-                        "printedName": "UIKit.UIImageView",
-                        "usr": "c:objc(cs)UIImageView"
-                      }
-                    ],
-                    "usr": "s:Sa"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC10initiateCR9sConfRoom7nCamIdx04nResI09nVQuality12ivRemoteView0l5LocalN00lM1ZySSSg_SiSgs5UInt8VSgAMSaySo07UIImageN0CGSgARSgAUtFZ",
-            "mangledName": "$s12nuSDKService3APIC10initiateCR9sConfRoom7nCamIdx04nResI09nVQuality12ivRemoteView0l5LocalN00lM1ZySSSg_SiSgs5UInt8VSgAMSaySo07UIImageN0CGSgARSgAUtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "joinCR",
-            "printedName": "joinCR(sConfRoom:nCamIdx:nResIdx:nVQuality:ivRemoteView:ivLocalView:ivRemoteZ:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.UInt8?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UInt8",
-                    "printedName": "Swift.UInt8",
-                    "usr": "s:s5UInt8V"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "[UIKit.UIImageView]?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Array",
-                    "printedName": "[UIKit.UIImageView]",
-                    "children": [
-                      {
-                        "kind": "TypeNominal",
-                        "name": "UIImageView",
-                        "printedName": "UIKit.UIImageView",
-                        "usr": "c:objc(cs)UIImageView"
-                      }
-                    ],
-                    "usr": "s:Sa"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC6joinCR9sConfRoom7nCamIdx04nResI09nVQuality12ivRemoteView0l5LocalN00lM1ZySSSg_SiSgs5UInt8VSgAMSaySo07UIImageN0CGSgARSgAUtFZ",
-            "mangledName": "$s12nuSDKService3APIC6joinCR9sConfRoom7nCamIdx04nResI09nVQuality12ivRemoteView0l5LocalN00lM1ZySSSg_SiSgs5UInt8VSgAMSaySo07UIImageN0CGSgARSgAUtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "adjustBCQFR",
-            "printedName": "adjustBCQFR(nVQuality:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC11adjustBCQFR9nVQualityySiSg_tFZ",
-            "mangledName": "$s12nuSDKService3APIC11adjustBCQFR9nVQualityySiSg_tFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl",
-              "RawDocComment"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "turnLBRAudio",
-            "printedName": "turnLBRAudio(sBroadcasterID:bOnOff:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Bool?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Bool",
-                    "printedName": "Swift.Bool",
-                    "usr": "s:Sb"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC12turnLBRAudio14sBroadcasterID6bOnOffySSSg_SbSgtFZ",
-            "mangledName": "$s12nuSDKService3APIC12turnLBRAudio14sBroadcasterID6bOnOffySSSg_SbSgtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "adjustLBRVolume",
-            "printedName": "adjustLBRVolume(sBroadcasterID:fValue:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Float?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Float",
-                    "printedName": "Swift.Float",
-                    "usr": "s:Sf"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC15adjustLBRVolume14sBroadcasterID6fValueySSSg_SfSgtFZ",
-            "mangledName": "$s12nuSDKService3APIC15adjustLBRVolume14sBroadcasterID6fValueySSSg_SfSgtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "initiateBC",
-            "printedName": "initiateBC(sTitle:nCamIdx:nResIdx:nVQuality:ivLocalView:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.UInt8?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UInt8",
-                    "printedName": "Swift.UInt8",
-                    "usr": "s:s5UInt8V"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC10initiateBC6sTitle7nCamIdx04nResH09nVQuality11ivLocalViewySSSg_SiSgs5UInt8VSgAKSo07UIImageM0CSgtFZ",
-            "mangledName": "$s12nuSDKService3APIC10initiateBC6sTitle7nCamIdx04nResH09nVQuality11ivLocalViewySSSg_SiSgs5UInt8VSgAKSo07UIImageM0CSgtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "joinBC",
-            "printedName": "joinBC(sBroadcasterID:ivRemoteView:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC6joinBC14sBroadcasterID12ivRemoteViewySSSg_So07UIImageJ0CSgtFZ",
-            "mangledName": "$s12nuSDKService3APIC6joinBC14sBroadcasterID12ivRemoteViewySSSg_So07UIImageJ0CSgtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl",
-              "RawDocComment"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "terminateBC",
-            "printedName": "terminateBC(sBroadcasterID:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "Optional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC11terminateBC14sBroadcasterIDySSSg_tFZ",
-            "mangledName": "$s12nuSDKService3APIC11terminateBC14sBroadcasterIDySSSg_tFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "ibca",
-            "printedName": "ibca(sTitle:nCamIdx:nResIdx:nVQuality:tvCameraPreview:ivRemoteS:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.UInt8?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UInt8",
-                    "printedName": "Swift.UInt8",
-                    "usr": "s:s5UInt8V"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC4ibca6sTitle7nCamIdx04nResG09nVQuality15tvCameraPreview9ivRemoteSySSSg_SiSgs5UInt8VSgALSo11UIImageViewCSgARtFZ",
-            "mangledName": "$s12nuSDKService3APIC4ibca6sTitle7nCamIdx04nResG09nVQuality15tvCameraPreview9ivRemoteSySSSg_SiSgs5UInt8VSgALSo11UIImageViewCSgARtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl",
-              "RawDocComment"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "iabc",
-            "printedName": "iabc(nCamIdx:nResIdx:nVQuality:tvCameraPreview:sBroadcasterID:ivRemoteM:ivRemoteS:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.UInt8?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UInt8",
-                    "printedName": "Swift.UInt8",
-                    "usr": "s:s5UInt8V"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC4iabc7nCamIdx04nResF09nVQuality15tvCameraPreview14sBroadcasterID9ivRemoteM0nO1SySiSg_s5UInt8VSgALSo11UIImageViewCSgSSSgA2RtFZ",
-            "mangledName": "$s12nuSDKService3APIC4iabc7nCamIdx04nResF09nVQuality15tvCameraPreview14sBroadcasterID9ivRemoteM0nO1SySiSg_s5UInt8VSgALSo11UIImageViewCSgSSSgA2RtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl",
-              "RawDocComment"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "sabc",
-            "printedName": "sabc(sAudienceID:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC4sabc11sAudienceIDySSSg_tFZ",
-            "mangledName": "$s12nuSDKService3APIC4sabc11sAudienceIDySSSg_tFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl",
-              "RawDocComment"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "eabc",
-            "printedName": "eabc(sAudienceID:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC4eabc11sAudienceIDySSSg_tFZ",
-            "mangledName": "$s12nuSDKService3APIC4eabc11sAudienceIDySSSg_tFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl",
-              "RawDocComment"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "initiateSS",
-            "printedName": "initiateSS(sTitle:nQuality:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.Int?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "Int",
-                    "printedName": "Swift.Int",
-                    "usr": "s:Si"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC10initiateSS6sTitle8nQualityySSSg_SiSgtFZ",
-            "mangledName": "$s12nuSDKService3APIC10initiateSS6sTitle8nQualityySSSg_SiSgtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl",
-              "RawDocComment"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "joinSS",
-            "printedName": "joinSS(sBroadcasterID:ivRemoteView:)",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "Swift.String?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "String",
-                    "printedName": "Swift.String",
-                    "usr": "s:SS"
-                  }
-                ],
-                "usr": "s:Sq"
-              },
-              {
-                "kind": "TypeNominal",
-                "name": "ImplicitlyUnwrappedOptional",
-                "printedName": "UIKit.UIImageView?",
-                "children": [
-                  {
-                    "kind": "TypeNominal",
-                    "name": "UIImageView",
-                    "printedName": "UIKit.UIImageView",
-                    "usr": "c:objc(cs)UIImageView"
-                  }
-                ],
-                "usr": "s:Sq"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC6joinSS14sBroadcasterID12ivRemoteViewySSSg_So07UIImageJ0CSgtFZ",
-            "mangledName": "$s12nuSDKService3APIC6joinSS14sBroadcasterID12ivRemoteViewySSSg_So07UIImageJ0CSgtFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          },
-          {
-            "kind": "Function",
-            "name": "terminateSS",
-            "printedName": "terminateSS()",
-            "children": [
-              {
-                "kind": "TypeNominal",
-                "name": "Void",
-                "printedName": "()"
-              }
-            ],
-            "declKind": "Func",
-            "usr": "s:12nuSDKService3APIC11terminateSSyyFZ",
-            "mangledName": "$s12nuSDKService3APIC11terminateSSyyFZ",
-            "moduleName": "nuSDKService",
-            "static": true,
-            "declAttributes": [
-              "Final",
-              "AccessControl"
-            ],
-            "funcSelfKind": "NonMutating"
-          }
-        ],
-        "declKind": "Class",
-        "usr": "s:12nuSDKService3APIC",
-        "mangledName": "$s12nuSDKService3APIC",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "Final",
-          "AccessControl",
-          "RawDocComment"
-        ],
-        "hasMissingDesignatedInitializers": true
-      },
-      {
-        "kind": "Import",
-        "name": "Foundation",
-        "printedName": "Foundation",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "RawDocComment"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "AVFoundation",
-        "printedName": "AVFoundation",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "Import",
-        "name": "CoreImage",
-        "printedName": "CoreImage",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "Import",
-        "name": "UIKit",
-        "printedName": "UIKit",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "Import",
-        "name": "WebPKit",
-        "printedName": "WebPKit",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "ImplementationOnly"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "Foundation",
-        "printedName": "Foundation",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "RawDocComment"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "AVFoundation",
-        "printedName": "AVFoundation",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "Import",
-        "name": "CoreImage",
-        "printedName": "CoreImage",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "Import",
-        "name": "UIKit",
-        "printedName": "UIKit",
-        "declKind": "Import",
-        "moduleName": "nuSDKService"
-      },
-      {
-        "kind": "Import",
-        "name": "WebPKit",
-        "printedName": "WebPKit",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "ImplementationOnly"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "Foundation",
-        "printedName": "Foundation",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "RawDocComment"
-        ]
-      },
-      {
-        "kind": "Import",
-        "name": "Foundation",
-        "printedName": "Foundation",
-        "declKind": "Import",
-        "moduleName": "nuSDKService",
-        "declAttributes": [
-          "RawDocComment"
-        ]
-      }
-    ],
-    "json_format_version": 8
-  },
-  "ConstValues": [
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/DatagramSocket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 235,
-      "length": 2,
-      "value": "16"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/DatagramSocket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 278,
-      "length": 6,
-      "value": "10000"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/DatagramSocket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 331,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/DatagramSocket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 484,
-      "length": 4,
-      "value": "1024"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/DatagramSocket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 521,
-      "length": 4,
-      "value": "1024"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/DatagramSocket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 553,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/DatagramSocket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 624,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/DatagramSocket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 771,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/DatagramSocket.swift",
-      "kind": "BooleanLiteral",
-      "offset": 945,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaSS.swift",
-      "kind": "IntegerLiteral",
-      "offset": 242,
-      "length": 3,
-      "value": "148"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaSS.swift",
-      "kind": "IntegerLiteral",
-      "offset": 248,
-      "length": 4,
-      "value": "1460"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaSS.swift",
-      "kind": "IntegerLiteral",
-      "offset": 330,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaSS.swift",
-      "kind": "IntegerLiteral",
-      "offset": 483,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaSS.swift",
-      "kind": "BooleanLiteral",
-      "offset": 634,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaSS.swift",
-      "kind": "IntegerLiteral",
-      "offset": 679,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaSS.swift",
-      "kind": "IntegerLiteral",
-      "offset": 778,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaSS.swift",
-      "kind": "IntegerLiteral",
-      "offset": 787,
-      "length": 2,
-      "value": "32"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaSS.swift",
-      "kind": "IntegerLiteral",
-      "offset": 924,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaSS.swift",
-      "kind": "IntegerLiteral",
-      "offset": 967,
-      "length": 1,
-      "value": "2"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaSS.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1004,
-      "length": 4,
-      "value": "1000"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaSS.swift",
-      "kind": "FloatLiteral",
-      "offset": 1069,
-      "length": 4,
-      "value": "0.30"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaSS.swift",
-      "kind": "IntegerLiteral",
-      "offset": 10389,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 334,
-      "length": 1,
-      "value": "8"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 385,
-      "length": 1,
-      "value": "8"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 436,
-      "length": 1,
-      "value": "8"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "BooleanLiteral",
-      "offset": 487,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "BooleanLiteral",
-      "offset": 547,
-      "length": 4,
-      "value": "true"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 604,
-      "length": 1,
-      "value": "4"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 658,
-      "length": 1,
-      "value": "1"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 712,
-      "length": 2,
-      "value": "1"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 751,
-      "length": 3,
-      "value": "190"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 792,
-      "length": 3,
-      "value": "208"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 830,
-      "length": 2,
-      "value": "64"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 835,
-      "length": 4,
-      "value": "1024"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 889,
-      "length": 4,
-      "value": "1024"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "BooleanLiteral",
-      "offset": 959,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1287,
-      "length": 1,
-      "value": "5"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1331,
-      "length": 2,
-      "value": "38"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1497,
-      "length": 3,
-      "value": "800"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1611,
-      "length": 2,
-      "value": "32"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1643,
-      "length": 2,
-      "value": "32"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1702,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1858,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2162,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2239,
-      "length": 4,
-      "value": "8000"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2292,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2314,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2337,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2358,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2382,
-      "length": 1,
-      "value": "1"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2404,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2420,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "FloatLiteral",
-      "offset": 2588,
-      "length": 7,
-      "value": "10000.0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "FloatLiteral",
-      "offset": 2635,
-      "length": 5,
-      "value": "300.0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2738,
-      "length": 2,
-      "value": "1"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2916,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2951,
-      "length": 2,
-      "value": "10"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 3062,
-      "length": 8,
-      "value": "86400000"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "BooleanLiteral",
-      "offset": 3178,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "BooleanLiteral",
-      "offset": 3210,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 3253,
-      "length": 4,
-      "value": "666"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "FloatLiteral",
-      "offset": 3370,
-      "length": 4,
-      "value": "0.45"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 3402,
-      "length": 4,
-      "value": "1000"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 3469,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "BooleanLiteral",
-      "offset": 3511,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "BooleanLiteral",
-      "offset": 3541,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 3717,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "BooleanLiteral",
-      "offset": 3774,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "BooleanLiteral",
-      "offset": 3813,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 3939,
-      "length": 3,
-      "value": "640"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 3983,
-      "length": 3,
-      "value": "480"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "StringLiteral",
-      "offset": 4027,
-      "length": 3,
-      "value": "\"?\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 4135,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "StringLiteral",
-      "offset": 4213,
-      "length": 2,
-      "value": "\"\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 4395,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 4404,
-      "length": 2,
-      "value": "32"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 4706,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "BooleanLiteral",
-      "offset": 4752,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "BooleanLiteral",
-      "offset": 4910,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "BooleanLiteral",
-      "offset": 4958,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 5376,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "BooleanLiteral",
-      "offset": 5560,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "IntegerLiteral",
-      "offset": 5597,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaAV.swift",
-      "kind": "StringLiteral",
-      "offset": 8983,
-      "length": 20,
-      "value": "\"dqSetZoomedChannel\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionDataPacket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 259,
-      "length": 1,
-      "value": "1"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionDataPacket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 263,
-      "length": 4,
-      "value": "1024"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionDataPacket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 270,
-      "length": 4,
-      "value": "1024"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionDataPacket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 309,
-      "length": 2,
-      "value": "12"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionDataPacket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 354,
-      "length": 3,
-      "value": "164"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionDataPacket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1176,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/StreamSocket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 231,
-      "length": 2,
-      "value": "32"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/StreamSocket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 262,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/StreamSocket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 340,
-      "length": 4,
-      "value": "1024"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/StreamSocket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 377,
-      "length": 4,
-      "value": "1024"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/StreamSocket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 438,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/StreamSocket.swift",
-      "kind": "IntegerLiteral",
-      "offset": 585,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/StreamSocket.swift",
-      "kind": "BooleanLiteral",
-      "offset": 759,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/RemoteView.swift",
-      "kind": "StringLiteral",
-      "offset": 328,
-      "length": 15,
-      "value": "\"nuSDKService.nuSDKRemoteView\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "StringLiteral",
-      "offset": 562,
-      "length": 28,
-      "value": "\"nuSDK-S5-230302a-14.1-14.0\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 717,
-      "length": 3,
-      "value": "171"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "StringLiteral",
-      "offset": 851,
-      "length": 22,
-      "value": "\"@*)&!$)@)@!)!$)*@#)(\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "StringLiteral",
-      "offset": 900,
-      "length": 164,
-      "value": "\"iOS.\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "StringLiteral",
-      "offset": 957,
-      "length": 1,
-      "value": "\".\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "StringLiteral",
-      "offset": 1010,
-      "length": 1,
-      "value": "\".\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "StringLiteral",
-      "offset": 1063,
-      "length": 1,
-      "value": "\"\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "BooleanLiteral",
-      "offset": 1202,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1296,
-      "length": 2,
-      "value": "10"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1332,
-      "length": 5,
-      "value": "3000"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "BooleanLiteral",
-      "offset": 1372,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1417,
-      "length": 5,
-      "value": "1000"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1453,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1483,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1529,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "StringLiteral",
-      "offset": 1563,
-      "length": 65,
-      "value": "\"[UNK,0.0,0.0,0.0,0.0m,0.0m\/s∫,0.0,0.0m,0.0m\/s,0.0m,0.0s,0.0s]\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "BooleanLiteral",
-      "offset": 1801,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "BooleanLiteral",
-      "offset": 1937,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "BooleanLiteral",
-      "offset": 2125,
-      "length": 4,
-      "value": "true"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2161,
-      "length": 11,
-      "value": "1214322513"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "StringLiteral",
-      "offset": 2239,
-      "length": 19,
-      "value": "\"1we2Love3NUs4SDK5\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2293,
-      "length": 2,
-      "value": "1"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2333,
-      "length": 2,
-      "value": "1"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "StringLiteral",
-      "offset": 2373,
-      "length": 3,
-      "value": "\"?\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2448,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2489,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "BooleanLiteral",
-      "offset": 2573,
-      "length": 4,
-      "value": "true"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "BooleanLiteral",
-      "offset": 2642,
-      "length": 4,
-      "value": "true"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "BooleanLiteral",
-      "offset": 2721,
-      "length": 4,
-      "value": "true"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "StringLiteral",
-      "offset": 2763,
-      "length": 5,
-      "value": "\"***\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "StringLiteral",
-      "offset": 2833,
-      "length": 5,
-      "value": "\"***\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "StringLiteral",
-      "offset": 4140,
-      "length": 25,
-      "value": "\"dqChangeConnectionState\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 7687,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 7754,
-      "length": 1,
-      "value": "1"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 12859,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 14687,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 15574,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30501,
-      "length": 4,
-      "value": "999"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30512,
-      "length": 19,
-      "value": "998"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30538,
-      "length": 10,
-      "value": "997"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30555,
-      "length": 10,
-      "value": "996"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30572,
-      "length": 10,
-      "value": "995"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30589,
-      "length": 17,
-      "value": "994"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30613,
-      "length": 11,
-      "value": "993"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30631,
-      "length": 9,
-      "value": "992"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30647,
-      "length": 10,
-      "value": "991"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30501,
-      "length": 1,
-      "value": "999"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30512,
-      "length": 19,
-      "value": "998"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30538,
-      "length": 10,
-      "value": "997"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30555,
-      "length": 10,
-      "value": "996"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30572,
-      "length": 10,
-      "value": "995"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30589,
-      "length": 17,
-      "value": "994"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30613,
-      "length": 11,
-      "value": "993"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30631,
-      "length": 9,
-      "value": "992"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30647,
-      "length": 10,
-      "value": "991"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30501,
-      "length": 1,
-      "value": "999"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30512,
-      "length": 19,
-      "value": "998"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30538,
-      "length": 10,
-      "value": "997"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30555,
-      "length": 10,
-      "value": "996"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30572,
-      "length": 10,
-      "value": "995"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30589,
-      "length": 17,
-      "value": "994"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30613,
-      "length": 11,
-      "value": "993"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30631,
-      "length": 9,
-      "value": "992"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 30647,
-      "length": 10,
-      "value": "991"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 31311,
-      "length": 4,
-      "value": "999"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 31322,
-      "length": 10,
-      "value": "998"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 31311,
-      "length": 1,
-      "value": "999"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 31322,
-      "length": 10,
-      "value": "998"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 31311,
-      "length": 1,
-      "value": "999"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/API.swift",
-      "kind": "IntegerLiteral",
-      "offset": 31322,
-      "length": 10,
-      "value": "998"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaBR.swift",
-      "kind": "IntegerLiteral",
-      "offset": 366,
-      "length": 2,
-      "value": "63"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaBR.swift",
-      "kind": "IntegerLiteral",
-      "offset": 407,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaBR.swift",
-      "kind": "BooleanLiteral",
-      "offset": 568,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaBR.swift",
-      "kind": "IntegerLiteral",
-      "offset": 946,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaBR.swift",
-      "kind": "StringLiteral",
-      "offset": 1033,
-      "length": 2,
-      "value": "\"\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaBR.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1113,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaBR.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1122,
-      "length": 2,
-      "value": "32"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaBR.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1166,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaBR.swift",
-      "kind": "BooleanLiteral",
-      "offset": 1314,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaBR.swift",
-      "kind": "BooleanLiteral",
-      "offset": 1362,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaBR.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1563,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaBR.swift",
-      "kind": "BooleanLiteral",
-      "offset": 1747,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/MediaBR.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1784,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 580,
-      "length": 4,
-      "value": "8192"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 755,
-      "length": 2,
-      "value": "32"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 865,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 895,
-      "length": 1,
-      "value": "1"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 925,
-      "length": 1,
-      "value": "2"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 955,
-      "length": 1,
-      "value": "3"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1010,
-      "length": 1,
-      "value": "5"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1073,
-      "length": 1,
-      "value": "7"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1103,
-      "length": 1,
-      "value": "8"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1133,
-      "length": 1,
-      "value": "9"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1242,
-      "length": 2,
-      "value": "14"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1287,
-      "length": 2,
-      "value": "15"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1331,
-      "length": 2,
-      "value": "20"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "StringLiteral",
-      "offset": 1465,
-      "length": 7,
-      "value": "\"\t\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "StringLiteral",
-      "offset": 1701,
-      "length": 16,
-      "value": "\"dqASyncMsgLock\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "StringLiteral",
-      "offset": 1836,
-      "length": 9,
-      "value": "\"~<UNK>~\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1914,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1962,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1998,
-      "length": 1,
-      "value": "2"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2002,
-      "length": 2,
-      "value": "60"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2007,
-      "length": 4,
-      "value": "1000"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "StringLiteral",
-      "offset": 2199,
-      "length": 15,
-      "value": "\"dqSyncMsgLock\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2293,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 2510,
-      "length": 4,
-      "value": "666"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "StringLiteral",
-      "offset": 3169,
-      "length": 12,
-      "value": "\"UserIDTest\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "BooleanLiteral",
-      "offset": 3212,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionNode.swift",
-      "kind": "IntegerLiteral",
-      "offset": 3492,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "IntegerLiteral",
-      "offset": 238,
-      "length": 1,
-      "value": "2"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "IntegerLiteral",
-      "offset": 275,
-      "length": 1,
-      "value": "3"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "IntegerLiteral",
-      "offset": 279,
-      "length": 2,
-      "value": "60"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "BooleanLiteral",
-      "offset": 527,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "BooleanLiteral",
-      "offset": 566,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "IntegerLiteral",
-      "offset": 604,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "IntegerLiteral",
-      "offset": 637,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "IntegerLiteral",
-      "offset": 823,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "StringLiteral",
-      "offset": 958,
-      "length": 13,
-      "value": "\"dqQueueLock\""
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1056,
-      "length": 1,
-      "value": "0"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1237,
-      "length": 1,
-      "value": "1"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "IntegerLiteral",
-      "offset": 1357,
-      "length": 1,
-      "value": "1"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "BooleanLiteral",
-      "offset": 1626,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "BooleanLiteral",
-      "offset": 1674,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "BooleanLiteral",
-      "offset": 5549,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "BooleanLiteral",
-      "offset": 10551,
-      "length": 5,
-      "value": "false"
-    },
-    {
-      "filePath": "\/Users\/w.yudoaji\/ImagiNation\/XCode\/nuSDKService\/nuSDKService\/ConnectionOIO.swift",
-      "kind": "StringLiteral",
-      "offset": 13313,
-      "length": 15,
-      "value": "\"dqRestartLock\""
-    }
-  ]
-}

+ 0 - 83
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Modules/nuSDKService.swiftmodule/arm64-apple-ios.swiftinterface

@@ -1,83 +0,0 @@
-// swift-interface-format-version: 1.0
-// swift-compiler-version: Apple Swift version 5.7.2 (swiftlang-5.7.2.135.5 clang-1400.0.29.51)
-// swift-module-flags: -target arm64-apple-ios14.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -module-name nuSDKService
-// swift-module-flags-ignorable: -enable-bare-slash-regex
-import AVFoundation
-import CommonCrypto
-import CoreImage
-import CoreTelephony
-import Foundation
-import ReplayKit
-import Security
-import Swift
-import UIKit
-import _Concurrency
-import _StringProcessing
-@_exported import nuSDKService
-public protocol CallBack {
-  var sID: Swift.String { get }
-  func connectionStateChanged(sUserID: Swift.String!, sDeviceID: Swift.String!, bConState: Swift.Bool!, nConType: Swift.Int!, nConSubType: Swift.Int!, nCLMConStat: Swift.UInt8!)
-  func gpsStateChanged(nState: Swift.Int!)
-  func sleepStateChanged(bState: Swift.Bool!)
-  func callStateChanged(nState: Swift.Int!, sMessage: Swift.String!) -> Swift.Int
-  func bcastStateChanged(nState: Swift.Int!, sMessage: Swift.String!) -> Swift.Int
-  func sshareStateChanged(nState: Swift.Int!, sMessage: Swift.String!) -> Swift.Int
-  func incomingData(sPacketID: Swift.String!, oData: Swift.AnyObject!) throws
-  func lateResponse(sPacketID: Swift.String!, sResponse: Swift.String!) throws
-  func asycnACKReceived(sPacketID: Swift.String!) throws
-  func locationUpdated(lTime: Swift.Int64!, sLocationInfo: Swift.String!)
-  func resetDB()
-}
-@_hasMissingDesignatedInitializers final public class API {
-  @objc deinit
-  public static func switchUser(cbiI: nuSDKService.CallBack!, sUserID: Swift.String!) throws
-  public static func initConnection(bSwitchIP: Swift.Bool!, sAPIK: Swift.String!, aAppMain: UIKit.UIViewController!, cbiI: nuSDKService.CallBack!, sTCPAddr: Swift.String!, nTCPPort: Swift.Int!, sUserID: Swift.String!, sStartWH: Swift.String!) throws
-  public static func switchCBI(cbiI: nuSDKService.CallBack!, bLight: Swift.Bool!) throws
-  public static func bnuSDKServiceReady() -> Swift.Bool
-  public static func sSend(sData: Swift.String!, nPriority: Swift.UInt8!, lTimeout: Swift.Int!) throws -> Swift.String?
-  public static func sSend(abData: [Swift.UInt8]!, nPriority: Swift.UInt8!, lTimeout: Swift.Int!) throws -> Swift.String?
-  public static func sSendResponse(sRequestID: Swift.String!, sResponse: Swift.String!, lTimeout: Swift.Int!) throws -> Swift.String?
-  public static func sGetResponse(sRequest: Swift.String!, lTimeout: Swift.Int!, bKeepTOResp: Swift.Bool) throws -> Swift.String?
-  public static func sGetMessage(sPacketID: Swift.String!) throws -> Swift.String?
-  public static func abGetMessage(sPacketID: Swift.String!) throws -> [Swift.UInt8]?
-  public static func oGetMessage(sPacketID: Swift.String!) throws -> Swift.AnyObject?
-  public static func sGetVersion() -> Swift.String!
-  public static func sGetServerAddress() -> Swift.String!
-  public static func sGetOperatorCode() -> Swift.String!
-  public static func sGetConnMode() -> Swift.String!
-  public static func sGetConnStat() -> Swift.String!
-  public static func bInetConnAvailable() -> Swift.Bool!
-  public static func nGetCLXConnState() -> Swift.UInt8!
-  public static func sGetCurentUserID() -> Swift.String!
-  public static func nGetSSRequestCode() -> Swift.Int!
-  public static func sGetLocInfo() -> Swift.String!
-  public static func pauseAudio(fValue: Swift.Float!)
-  public static func resumeAudio(fValue: Swift.Float!)
-  public static func turnCCallAudio(sParty: Swift.String!, bOnOff: Swift.Bool!)
-  public static func adjustVolume(fValue: Swift.Float!)
-  public static func adjustCQFR(nVQuality: Swift.Int!)
-  public static func changeCameraParam(nCameraIdx: Swift.Int!, nResolutionIndex: Swift.UInt8!, nQuality: Swift.Int!)
-  public static func incomingCallWSleep(sParty: Swift.String!, nService: Swift.Int!)
-  public static func initiateCCall(sParty: Swift.String!)
-  public static func receiveCCall(sParty: Swift.String!)
-  public static func initiateCCall(sParty: Swift.String!, nCamIdx: Swift.Int!, nResIdx: Swift.UInt8!, nVQuality: Swift.Int!, ivRemoteView: [UIKit.UIImageView]!, ivLocalView: UIKit.UIImageView!, ivRemoteZ: UIKit.UIImageView!)
-  public static func receiveCCall(sParty: Swift.String!, nCamIdx: Swift.Int!, nResIdx: Swift.UInt8!, nVQuality: Swift.Int!, ivRemoteView: [UIKit.UIImageView]!, ivLocalView: UIKit.UIImageView!, ivRemoteZ: UIKit.UIImageView!)
-  public static func terminateCall(sParty: Swift.String?)
-  public static func initiateCR(sConfRoom: Swift.String!)
-  public static func joinCR(sConfRoom: Swift.String!)
-  public static func initiateCR(sConfRoom: Swift.String!, nCamIdx: Swift.Int!, nResIdx: Swift.UInt8!, nVQuality: Swift.Int!, ivRemoteView: [UIKit.UIImageView]!, ivLocalView: UIKit.UIImageView!, ivRemoteZ: UIKit.UIImageView!)
-  public static func joinCR(sConfRoom: Swift.String!, nCamIdx: Swift.Int!, nResIdx: Swift.UInt8!, nVQuality: Swift.Int!, ivRemoteView: [UIKit.UIImageView]!, ivLocalView: UIKit.UIImageView!, ivRemoteZ: UIKit.UIImageView!)
-  public static func adjustBCQFR(nVQuality: Swift.Int!)
-  public static func turnLBRAudio(sBroadcasterID: Swift.String!, bOnOff: Swift.Bool!)
-  public static func adjustLBRVolume(sBroadcasterID: Swift.String!, fValue: Swift.Float!)
-  public static func initiateBC(sTitle: Swift.String!, nCamIdx: Swift.Int!, nResIdx: Swift.UInt8!, nVQuality: Swift.Int!, ivLocalView: UIKit.UIImageView!)
-  public static func joinBC(sBroadcasterID: Swift.String!, ivRemoteView: UIKit.UIImageView!)
-  public static func terminateBC(sBroadcasterID: Swift.String?)
-  public static func ibca(sTitle: Swift.String!, nCamIdx: Swift.Int!, nResIdx: Swift.UInt8!, nVQuality: Swift.Int!, tvCameraPreview: UIKit.UIImageView!, ivRemoteS: UIKit.UIImageView!)
-  public static func iabc(nCamIdx: Swift.Int!, nResIdx: Swift.UInt8!, nVQuality: Swift.Int!, tvCameraPreview: UIKit.UIImageView!, sBroadcasterID: Swift.String!, ivRemoteM: UIKit.UIImageView!, ivRemoteS: UIKit.UIImageView!)
-  public static func sabc(sAudienceID: Swift.String!)
-  public static func eabc(sAudienceID: Swift.String!)
-  public static func initiateSS(sTitle: Swift.String!, nQuality: Swift.Int!)
-  public static func joinSS(sBroadcasterID: Swift.String!, ivRemoteView: UIKit.UIImageView!)
-  public static func terminateSS()
-}

BIN
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/Modules/nuSDKService.swiftmodule/arm64-apple-ios.swiftmodule


+ 0 - 111
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/PrivateHeaders/aes.h

@@ -1,111 +0,0 @@
-//
-//  aes.h
-//  nuSDKService
-//
-//  Created by W.YudoAji on 29/06/20.
-//  Copyright © 2020 newuniverse. All rights reserved.
-//
-
-
-#ifndef _AES_H_
-#define _AES_H_
-
-//#include <stdint.h>
-//#include <stdio.h>
-
-// #define the macros below to 1/0 to enable/disable the mode of operation.
-//
-// CBC enables AES encryption in CBC-mode of operation.
-// CTR enables encryption in counter-mode.
-// ECB enables the basic ECB 16-byte block algorithm. All can be enabled simultaneously.
-
-// The #ifndef-guard allows it to be configured before #include'ing or at compile time.
-#ifndef CBC
-#define CBC 1
-#endif
-
-//#ifndef ECB
-//#define ECB 1
-//#endif
-//
-//#ifndef CTR
-//#define CTR 1
-//#endif
-
-#define AES256 1
-//#define AES128 1
-//#define AES192 1
-
-#define AES_BLOCKLEN 16 //Block length in bytes AES is 128b block only
-
-#if defined(AES256) && (AES256 == 1)
-#define AES_KEYLEN 32
-#define AES_keyExpSize 240
-//#elif defined(AES192) && (AES192 == 1)
-//#define AES_KEYLEN 24
-//#define AES_keyExpSize 208
-//#else
-//#define AES_KEYLEN 16   // Key length in bytes
-//#define AES_keyExpSize 176
-#endif
-
-//struct AES_ctx {
-//	uint8_t RoundKey[AES_keyExpSize];
-//#if (defined(CBC) && (CBC == 1)) || (defined(CTR) && (CTR == 1))
-//	uint8_t Iv[AES_BLOCKLEN];
-//#endif
-//};
-
-//void AES_init_ctx(struct AES_ctx *ctx, const uint8_t *key);
-//
-//#if (defined(CBC) && (CBC == 1)) || (defined(CTR) && (CTR == 1))
-//
-//void AES_init_ctx_iv(struct AES_ctx *ctx, const uint8_t *key, const uint8_t *iv);
-//
-//void AES_ctx_set_iv(struct AES_ctx *ctx, const uint8_t *iv);
-//
-//#endif
-//
-//#if defined(ECB) && (ECB == 1)
-//
-//// buffer size is exactly AES_BLOCKLEN bytes;
-//// you need only AES_init_ctx as IV is not used in ECB
-//// NB: ECB is considered insecure for most uses
-//void AES_ECB_encrypt(const struct AES_ctx *ctx, uint8_t *buf);
-//
-//void AES_ECB_decrypt(const struct AES_ctx *ctx, uint8_t *buf);
-//
-//#endif // #if defined(ECB) && (ECB == !)
-//
-//
-//#if defined(CBC) && (CBC == 1)
-//
-//// buffer size MUST be mutile of AES_BLOCKLEN;
-//// Suggest https://en.wikipedia.org/wiki/Padding_(cryptography)#PKCS7 for padding scheme
-//// NOTES: you need to set IV in ctx via AES_init_ctx_iv() or AES_ctx_set_iv()
-////        no IV should ever be reused with the same key
-//void AES_CBC_encrypt_buffer(struct AES_ctx *ctx, uint8_t *buf, uint32_t length);
-//
-//void AES_CBC_decrypt_buffer(struct AES_ctx *ctx, uint8_t *buf, uint32_t length);
-//
-//#endif // #if defined(CBC) && (CBC == 1)
-//
-//
-//#if defined(CTR) && (CTR == 1)
-//
-//// Same function for encrypting as for decrypting.
-//// IV is incremented for every block, and used after encryption as XOR-compliment for output
-//// Suggesting https://en.wikipedia.org/wiki/Padding_(cryptography)#PKCS7 for padding scheme
-//// NOTES: you need to set IV in ctx with AES_init_ctx_iv() or AES_ctx_set_iv()
-////        no IV should ever be reused with the same key
-//void AES_CTR_xcrypt_buffer(struct AES_ctx *ctx, uint8_t *buf, uint32_t length);
-//
-//#endif // #if defined(CTR) && (CTR == 1)
-
-
-// uint8_t iAx(uint8_t *abKey, const uint8_t len);
-void initCND(void);
-uint16_t abN(uint8_t *inpBytes, const uint16_t nInpLen, uint8_t *outBytes, uint8_t *aUint8Key);
-uint16_t abD(uint8_t *inpBytes, const uint16_t nInpLen, uint8_t *outBytes, uint8_t *aUint8Key, const uint8_t nRemoveTI);
-
-#endif //_AES_H_

+ 0 - 21
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/PrivateHeaders/nuSDKService.h

@@ -1,21 +0,0 @@
-//
-//  nuSDKService.h
-//  nuSDKService
-//
-//  Created by W.YudoAji on 02/03/20.
-//  Copyright © 2020 newuniverse. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#include "aes.h"
-
-//! Project version number for nuSDKService.
-FOUNDATION_EXPORT double nuSDKServiceVersionNumber;
-
-//! Project version string for nuSDKService.
-FOUNDATION_EXPORT const unsigned char nuSDKServiceVersionString[];
-
-// In this header, you should import all the public headers of your framework using statements like #import <nuSDKService/PublicHeader.h>
-extern NSData * SecCreateKey(NSData * password, NSData * salt);
-extern NSData * SecEncryptAES128CBCPad(NSData * data, NSData * key, NSData * iv);
-extern NSData * SecDecryptAES128CBCPad(NSData * data, NSData * key, NSData * iv);

BIN
appbuilder-ios/NexilisLite/Frameworks/nuSDKService.framework/nuSDKService


+ 0 - 2813
appbuilder-ios/NexilisLite/Nexilis.swift

@@ -1,2813 +0,0 @@
-//
-//  Qmera.swift
-//  Runner
-//
-//  Created by Yayan Dwi on 15/04/20.
-//  Copyright © 2020 The Chromium Authors. All rights reserved.
-//
-
-import Foundation
-import nuSDKService
-import AVFoundation
-import AVKit
-import UIKit
-import FMDB
-import QuickLook
-import NotificationBannerSwift
-
-public class Nexilis: NSObject {
-    public static var sAPIKey = ""
-    
-    public static let ADDRESS = ADDRESS_RELEASE
-    
-    static let ADDRESS_33 = "192.168.0.33"
-    
-    // static let ADDRESS_RELEASE = "202.158.33.26" //CBN
-
-    static let ADDRESS_RELEASE = "108.137.84.148" //AWS
-    
-    //    static let PORT = 45328
-    //    static let PORT = 65328 // 33
-    static let PORT = PORT_RELEASE
-    
-    static let PORT_33 = 62328
-    
-    static let PORT_RELEASE = 42328
-    
-    static var nSessionMode: Int! = 1
-    
-    static var dispatch: DispatchGroup?
-    
-    let callManager = CallManager()
-    
-    var providerDelegate: CallProviderDelegate?
-    
-    public static let shared = Nexilis()
-    
-    public static var broadcastTimer = Timer()
-    
-    public static var broadcastList = [[String: String]]()
-    
-    public static var onGoingPushCC: [String: String] = [:]
-    
-    public static var openBroadcast = false
-    
-    public static var loadingAlert = UIAlertController()
-    
-    private func createDelegate() {
-        print("createDelegate...")
-        callDelegate = self
-        messageDelegate = self
-        groupDelegate = self
-        personInfoDelegate = self
-        providerDelegate = CallProviderDelegate(callManager: callManager)
-    }
-    
-    public static func connect(apiKey: String, delegate: ConnectDelegate, showButton: Bool = true) {
-        do {
-            Nexilis.shared.createDelegate()
-            
-            Nexilis.sAPIKey = apiKey
-            
-            Database.shared.openDatabase()
-            
-            IncomingThread.default.run()
-            
-            OutgoingThread.default.run()
-            
-            if let _ = UserDefaults.standard.stringArray(forKey: "address") {
-                
-            }
-            else {
-                //                let address = App.getAddress()
-                //                if !address.isEmpty {
-                //                    print(address)
-                //                    print(address[0])
-                //                    UserDefaults.standard.set(address, forKey: "address")
-                //                    UserDefaults.standard.set(address[0], forKey: "server")
-                //                }
-            }
-            
-            Nexilis.dispatch = DispatchGroup()
-            Nexilis.dispatch?.enter()
-            //            var server = UserDefaults.standard.string(forKey: "server")
-            //            if let s = server, let a = UserDefaults.standard.stringArray(forKey: "address"), s != a[0] {
-            //                server = a[0]
-            //                UserDefaults.standard.set(server, forKey: "server")
-            //            }
-            //            var ip = ""
-            //            var port = 0
-            //            if let s = server {
-            //                let data = s.split(separator: ":")
-            //                ip = String(data[0])
-            //                if let p = Int(data[1]) {
-            //                    port = p
-            //                }
-            //            }
-            //            print(API.sGetVersion())
-            var id = ""
-            if let me = UserDefaults.standard.string(forKey: "me") {
-                try API.initConnection(bSwitchIP: false, sAPIK: apiKey, aAppMain: nil, cbiI: Callback(), sTCPAddr: Nexilis.ADDRESS, nTCPPort: Nexilis.PORT, sUserID: me, sStartWH: "09:00")
-            } else {
-                let uuid = UIDevice.current.identifierForVendor?.uuidString ?? "UNK-DEVICE"
-                try API.initConnection(bSwitchIP: false, sAPIK: apiKey, aAppMain: nil, cbiI: Callback(), sTCPAddr: Nexilis.ADDRESS, nTCPPort: Nexilis.PORT, sUserID: uuid, sStartWH: "09:00")
-                id = uuid
-            }
-            
-            // wait until connection true
-            Nexilis.dispatch?.wait()
-            Nexilis.dispatch = nil
-            
-            if(!id.isEmpty && (UserDefaults.standard.string(forKey: "me") == nil)){
-                if let response = Nexilis.writeSync(message: CoreMessage_TMessageBank.getSignUpApi(api: apiKey, p_pin: id), timeout: 30 * 1000){
-                    id = response.getBody(key: CoreMessage_TMessageKey.F_PIN, default_value: "")
-                    if(!id.isEmpty) {
-                        Nexilis.changeUser(f_pin: id)
-                        UserDefaults.standard.setValue(id, forKey: "me")
-                    }
-                }
-            }
-
-            if UserDefaults.standard.string(forKey: "apiKey") == nil {
-                UserDefaults.standard.setValue(apiKey, forKey: "apiKey")
-            }
-            
-            if let me = UserDefaults.standard.string(forKey: "me") {
-                _ = Nexilis.write(message: CoreMessage_TMessageBank.getPostRegistration(p_pin: me))
-                DispatchQueue.global().asyncAfter(deadline: .now() + 1.5, execute: {
-                    Database.shared.database?.inTransaction({ (fmdb, rollback) in
-                        if let cursorData = Database.shared.getRecords(fmdb: fmdb, query: "SELECT image_id FROM GROUPZ where group_type = 1 AND official = 1"), cursorData.next() {
-                            do {
-                                let documentDir = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
-                                let file = documentDir.appendingPathComponent(cursorData.string(forColumnIndex: 0)!)
-                                if !FileManager().fileExists(atPath: file.path) {
-                                    Download().start(forKey: cursorData.string(forColumnIndex: 0)!) { (name, progress) in}
-                                }
-                            } catch {}
-                            cursorData.close()
-                        }
-                    })
-                })
-                delegate.onSuccess(userId: me)
-                if showButton {
-                    DispatchQueue.main.async {
-                        var viewController = UIApplication.shared.windows.first?.rootViewController
-                        var notNull = false
-                        while !notNull {
-                            viewController = UIApplication.shared.windows.first?.rootViewController
-                            if viewController != nil {
-                                notNull = true
-                            }
-                        }
-                        viewController?.view.addSubview(FloatingButton())
-                    }
-                }
-            }
-            Nexilis.destroyAll()
-        }
-        catch {
-            print(error)
-            delegate.onFailed(error: "99:Something went wrong")
-        }
-    }
-    
-    public static func destroyAll() {
-        let onGoingCC = UserDefaults.standard.string(forKey: "onGoingCC") ?? ""
-        if !onGoingCC.isEmpty {
-            let requester = onGoingCC.components(separatedBy: ",")[0]
-            let officer = onGoingCC.isEmpty ? "" : onGoingCC.components(separatedBy: ",")[1]
-            let complaintId = onGoingCC.isEmpty ? "" : onGoingCC.components(separatedBy: ",")[2]
-            let idMe = UserDefaults.standard.string(forKey: "me")!
-            let startTimeCC = UserDefaults.standard.string(forKey: "startTimeCC") ?? ""
-            let date = "\(Date().currentTimeMillis())"
-            Database.shared.database?.inTransaction({ (fmdb, rollback) in
-                do {
-                    _ = try Database.shared.insertRecord(fmdb: fmdb, table: "CALL_CENTER_HISTORY", cvalues: [
-                        "type" : "0",
-                        "title" : "Contact Center".localized(),
-                        "time" : startTimeCC,
-                        "f_pin" : officer,
-                        "data" : complaintId,
-                        "time_end" : date,
-                        "complaint_id" : complaintId,
-                        "members" : "",
-                        "requester": requester
-                    ], replace: true)
-                } catch {
-                    rollback.pointee = true
-                    print(error)
-                }
-            })
-            if officer == idMe {
-                _ = Nexilis.write(message: CoreMessage_TMessageBank.endCallCenter(complaint_id: complaintId, l_pin: requester))
-            } else {
-                if requester == idMe {
-                    _ = Nexilis.write(message: CoreMessage_TMessageBank.endCallCenter(complaint_id: complaintId, l_pin: officer))
-                } else {
-                    _ = Nexilis.write(message: CoreMessage_TMessageBank.leaveCCRoomInvite(ticket_id: complaintId))
-                }
-            }
-            UserDefaults.standard.removeObject(forKey: "onGoingCC")
-            UserDefaults.standard.removeObject(forKey: "membersCC")
-            UserDefaults.standard.removeObject(forKey: "startTimeCC")
-            if UIApplication.shared.applicationState == .active {
-                DispatchQueue.main.async {
-                    let imageView = UIImageView(image: UIImage(systemName: "info.circle"))
-                    imageView.tintColor = .white
-                    let banner = FloatingNotificationBanner(title: "Call Center Session has ended".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .info, colors: nil, iconPosition: .center)
-                    banner.show()
-                }
-            }
-        }
-        if !Nexilis.onGoingPushCC.isEmpty {
-            DispatchQueue.global().async {
-                _ = Nexilis.write(message: CoreMessage_TMessageBank.timeOutRequestCallCenter(channel: Nexilis.onGoingPushCC["channel"]!, l_pin: Nexilis.onGoingPushCC["l_pin"]!))
-            }
-        }
-        UserDefaults.standard.removeObject(forKey: "inEditorPersonal")
-        UserDefaults.standard.removeObject(forKey: "inEditorGroup")
-        UserDefaults.standard.removeObject(forKey: "waitingRequestCC")
-    }
-    
-    public static func changeUser(f_pin: String){
-        do {
-            print("change user to fpin")
-            Nexilis.dispatch = DispatchGroup()
-            Nexilis.dispatch?.enter()
-            
-            try API.initConnection(bSwitchIP: true, sAPIK: Nexilis.sAPIKey, aAppMain: nil, cbiI: Callback(), sTCPAddr: Nexilis.ADDRESS, nTCPPort: Nexilis.PORT, sUserID: f_pin, sStartWH: "08:00")
-            
-            // wait until connection true
-            Nexilis.dispatch?.wait()
-            Nexilis.dispatch = nil
-            print("success change user to fpin")
-            _ = Nexilis.writeSync(message: CoreMessage_TMessageBank.getChangeConnectionID(p_pin: f_pin))
-        } catch{
-            print(error)
-        }
-    }
-    
-    public static func addQueueMessage(message: TMessage) {
-        OutgoingThread.default.addQueue(message: message)
-    }
-    
-    private static var wbDelegate: WhiteboardDelegate?
-    private static var wbReceiver: WhiteboardReceiver?
-    
-    public static func setWhiteboardDelegate(delegate: WhiteboardDelegate?){
-        Nexilis.wbDelegate = delegate
-    }
-    
-    public static func getWhiteboardDelegate() -> WhiteboardDelegate? {
-        return Nexilis.wbDelegate
-    }
-    
-    public static func setWhiteboardReceiver(receiver: WhiteboardReceiver?){
-        Nexilis.wbReceiver = receiver
-    }
-    
-    public static func getWhiteboardReceiver() -> WhiteboardReceiver? {
-        return Nexilis.wbReceiver
-    }
-    
-    public static func getEditorPersonal() -> EditorPersonal {
-        return AppStoryBoard.Palio.instance.instantiateViewController(identifier: "editorPersonalVC") as! EditorPersonal
-    }
-
-    public static func getEditorGroup() -> EditorGroup {
-        return AppStoryBoard.Palio.instance.instantiateViewController(identifier: "editorGroupVC") as! EditorGroup
-    }
-    
-    public static func getEditorStarMessage() -> EditorStarMessages {
-        return AppStoryBoard.Palio.instance.instantiateViewController(identifier: "staredVC") as! EditorStarMessages
-    }
-    
-    static func getAddress() -> [String] {
-        var result = [String]()
-        let url = URL(string: "https://newuniverse.io/dipp/NuN1v3rs3/5ch0oL18")!
-        let urlConfig = URLSessionConfiguration.default
-        urlConfig.requestCachePolicy = .returnCacheDataElseLoad
-        urlConfig.timeoutIntervalForRequest = 10.0
-        urlConfig.timeoutIntervalForResource = 10.0
-        let semaphore = DispatchSemaphore(value: 0)
-        let task = URLSession(configuration: urlConfig).dataTask(with: url) {(data, response, error) in
-            guard let data = data else {
-                semaphore.signal()
-                return
-            }
-            let html = String(data: data, encoding: .utf8)!
-            let base64Address = html.components(separatedBy: "<body>")[1].components(separatedBy: "</body>")[0].trimmingCharacters(in: .whitespacesAndNewlines)
-            if let addressData = Data(base64Encoded: base64Address), let decodeAddress = String(data: addressData, encoding: .utf8) {
-                let rows = decodeAddress.trimmingCharacters(in: CharacterSet.newlines).split(separator: ",")
-                for r in rows {
-                    let _address = r.split(separator: ":")
-                    var ip:String = ""
-                    let _data = _address[0].split(separator: ".", maxSplits: 4, omittingEmptySubsequences: false)
-                    ip.append(String(_data[3]))
-                    ip.append(".")
-                    ip.append(String(_data[1]))
-                    ip.append(".")
-                    ip.append(String(_data[0]))
-                    ip.append(".")
-                    ip.append(String(_data[2]))
-                    result.append(ip + ":" + _address[2])
-                }
-                
-            }
-            semaphore.signal()
-        }
-        task.resume()
-        _ = semaphore.wait(timeout: .distantFuture)
-        debugPrint("[App] getAddress:", result)
-        return result
-    }
-    
-    static func getCLMUserId() -> String {
-        guard let me = UserDefaults.standard.string(forKey: "me") else {
-            return ""
-        }
-        return me
-    }
-    
-    public static func writeSync(message: TMessage, timeout: Int = 15 * 1000) -> TMessage? {
-        do {
-            print(">> SENDING MESSAGE >> ", message.toLogString())
-            if let data = try API.sGetResponse(sRequest: message.pack(), lTimeout: timeout, bKeepTOResp: true) {
-                let response = TMessage(data: data)
-                print("<< RESPONSE MESSAGE << ", response.toLogString())
-                return response
-            }
-        } catch {
-            print(error)
-        }
-        return nil
-    }
-    
-    public static func write(message: TMessage, timeout: Int = 15 * 1000) -> String? {
-        do {
-            if API.nGetCLXConnState() == 0 {
-                return nil
-            }
-            print(">> SENDING MESSAGE >> ", message.toLogString())
-            if message.getMedia().count == 0 {
-                if let data = try API.sSend(sData: message.pack(), nPriority: 1, lTimeout: timeout) {
-                    print("<< RESPONSE MESSAGE << ", data)
-                    return data
-                }
-            }
-            // media
-            if let data = try API.sSend(abData: message.toBytes(), nPriority: 2, lTimeout: timeout) {
-                print("<< RESPONSE MESSAGE << ", data)
-                return data
-            }
-        } catch {
-            print(error)
-        }
-        return nil
-    }
-    
-    public static func writeDraw(data: String, timeout: Int = 15 * 1000) -> String? {
-        do {
-            if !API.bInetConnAvailable() {
-                return nil
-            }
-            print(">> SENDING MESSAGE >> ", data)
-            if let data = try API.sSend(sData: data, nPriority: 1, lTimeout: timeout) {
-                print("<< RESPONSE MESSAGE << ", data)
-                return data
-            }
-        } catch {
-            print(error)
-        }
-        return nil
-    }
-    
-    public static func response(packetId: String, message: TMessage, timeout: Int = 15 * 1000) -> String? {
-        var result: String? = nil
-        do {
-            if !API.bInetConnAvailable() {
-                return nil
-            }
-            print(">> RESPONSE >> " + packetId + " " + message.toLogString());
-            result = try API.sSendResponse(sRequestID: packetId, sResponse: message.pack(), lTimeout: timeout)
-        } catch {
-            print(error)
-        }
-        return result
-    }
-    
-    public static func startAudio(nMode: Int!, bSpeakerOn: Bool!) {
-        
-        let nSessionMode = nMode
-        do {
-            let avAudioSession = AVAudioSession.sharedInstance()
-            try avAudioSession.setInputGain(1.0)
-//            if (bSpeakerOn) {
-//                try avAudioSession.setCategory(.playAndRecord, mode: (nSessionMode == 1 ? .voiceChat : .videoChat), options: [.defaultToSpeaker, .duckOthers, .allowBluetooth])
-//            } else {
-//                try avAudioSession.setCategory(.playAndRecord, mode: (nSessionMode == 1 ? .voiceChat : .videoChat), options: [.duckOthers, .allowBluetooth])
-//            }
-            try avAudioSession.setCategory(.playAndRecord, mode: (nSessionMode == 1 ? .voiceChat : .default), options: [.defaultToSpeaker, .duckOthers, .allowBluetooth])
-            if (bSpeakerOn) {
-                API.adjustVolume(fValue: 10.0)
-            } else {
-                API.adjustVolume(fValue: 0.3)
-            }
-            try avAudioSession.setActive(true, options: .notifyOthersOnDeactivation)
-        } catch {
-        }
-    }
-    
-    public static func turnSpeakerOn(bSpeakerOn: Bool!) {
-//         API.pauseAudio()
-//         ViewController.stopAudio()
-//         ViewController.startAudio(nMode: 0, bSpeakerOn: bSpeakerOn)
-//         API.resumeAudio(bSpeakerOn: bSpeakerOn)
-        if (bSpeakerOn) {
-            API.adjustVolume(fValue: 10.0)
-        } else {
-            API.adjustVolume(fValue: 0.3)
-        }
-    }
-    public static func stopAudio() {
-        do {
-            try AVAudioSession.sharedInstance().setCategory(.ambient)
-            try AVAudioSession.sharedInstance().setMode(.default)
-            try AVAudioSession.sharedInstance().overrideOutputAudioPort(.none)
-        }catch{
-            print(error)
-        }
-    }
-    
-    public static func muteMicrophone(isMute: Bool!){
-        do {
-            if(isMute){
-                try AVAudioSession.sharedInstance().setCategory(.playback)
-            }
-            else{
-                try AVAudioSession.sharedInstance().setCategory(.playAndRecord)
-            }
-        }catch{
-            print(error)
-        }
-    }
-
-    public static func buttonClicked(index: Int, id: String = "") {
-        let fb = FloatingButton()
-        if index == 1 {
-            fb.fb1Tap()
-        } else if index == 2 {
-            fb.fb2Tap()
-        } else if index == 3 {
-            fb.fb3Tap()
-        } else if index == 4 {
-            fb.fb4Tap()
-        } else if id == "openQMS" {
-            fb.bniBookingTap()
-        } else if id == "openHistoryCC" {
-            fb.historyBroadcastTap()
-        } else if index == 7 {
-            fb.openCustomURL(url: id)
-        } else {
-            let idButton = UIButton()
-            idButton.restorationIdentifier = id
-            fb.tapMoreApp(idButton)
-        }
-    }
-    
-    public static func showLoader() {
-        loadingAlert = UIAlertController(title: nil, message: "Please wait...".localized(), preferredStyle: .alert)
-
-        let loadingIndicator = UIActivityIndicatorView(frame: CGRect(x: 10, y: 5, width: 50, height: 50))
-        loadingIndicator.hidesWhenStopped = true
-        loadingIndicator.style = .medium
-        loadingIndicator.startAnimating()
-
-        loadingAlert.view.addSubview(loadingIndicator)
-        UIApplication.shared.visibleViewController?.present(loadingAlert, animated: true, completion: nil)
-    }
-    
-    public static func hideLoader() {
-        loadingAlert.dismiss(animated: true)
-    }
-    
-    private static var groupWait = DispatchGroup()
-    
-    private static var waitQueue = [String: TMessage]()
-    
-    public static func writeAndWait(message: TMessage, timeout: Int = 15 * 1000) -> TMessage? {
-        groupWait.enter()
-        _ = write(message: message, timeout: timeout)
-        waitQueue[message.getStatus()] = message
-        if groupWait.wait(timeout: .now() + 15) == .timedOut {
-            waitQueue.removeValue(forKey: message.getStatus())
-            groupWait.leave()
-            return nil
-        }
-        return waitQueue.removeValue(forKey: message.getStatus())
-    }
-    
-    static func incomingData(packetId: String, data: AnyObject) {
-        let message = TMessage()
-        if data is String {
-            let d = data as! String
-            guard message.unpack(data: d) else {
-                print("UNKNOWN DATA STRING...", data)
-                if(data.hasPrefix("WB")){
-                    let dataWB = data.components(separatedBy: "/")
-                    if(dataWB[1] == "1"){
-                        let x = dataWB[2]
-                        let y = dataWB[3]
-                        let w = dataWB[4]
-                        let h = dataWB[5]
-                        let fc = dataWB[6]
-                        let sw = dataWB[7]
-                        let xo = dataWB[8]
-                        let yo = dataWB[9]
-                        if(Nexilis.getWhiteboardDelegate() != nil){
-                            Nexilis.getWhiteboardDelegate()!.draw(x: x, y: y, w: w, h: h, fc: fc, sw: sw, xo: xo, yo: yo, data: "")
-                        }
-                    } else if(dataWB[1] == "3") {
-                        if(Nexilis.getWhiteboardDelegate() != nil){
-                            Nexilis.getWhiteboardDelegate()!.clear()
-                        }
-                    } else if(dataWB[1] == "2"){
-                        if(Nexilis.getWhiteboardReceiver() != nil){
-                            Nexilis.getWhiteboardReceiver()!.incomingWB(roomId: dataWB[2])
-                        }
-                    } else if(dataWB[1] == "22"){
-                        
-                    } else if(dataWB[1] == "88"){
-                        if(Nexilis.getWhiteboardReceiver() != nil){
-                            Nexilis.getWhiteboardReceiver()!.cancel(roomId: dataWB[2])
-                        }
-                    }
-                }
-                return
-            }
-        } else if data is [UInt8] {
-            let d = data as! [UInt8]
-            guard message.unpack(bytes_data: d) else {
-                print("UNKNOWN DATA BYTES...", data)
-                return
-            }
-        }
-        message.mBodies[CoreMessage_TMessageKey.PACKET_ID] = packetId
-        if let _ = waitQueue[message.getStatus()] {
-            waitQueue[message.getStatus()] = message
-            groupWait.leave()
-            return
-        }
-        IncomingThread.default.addQueue(message: message)
-    }
-    
-    static func saveMessage(message: TMessage, withStatus: Bool = true) {
-        guard let me = UserDefaults.standard.string(forKey: "me") else {
-            return
-        }
-        let message_id = message.getBody(key : CoreMessage_TMessageKey.MESSAGE_ID, default_value : "")
-        guard !message_id.isEmpty else {
-            return
-        }
-        let f_pin = message.getBody(key : CoreMessage_TMessageKey.F_PIN, default_value : "")
-        guard !f_pin.isEmpty else {
-            return
-        }
-        let l_pin = message.getBody(key : CoreMessage_TMessageKey.L_PIN, default_value : "")
-        let scope = message.getBody(key : CoreMessage_TMessageKey.MESSAGE_SCOPE_ID, default_value : "3")
-        let status = message.getBody(key : CoreMessage_TMessageKey.STATUS, default_value : "")
-        let chat_id = message.getBody(key : CoreMessage_TMessageKey.CHAT_ID, default_value : "")
-        let broadcast_flag = message.getBody(key: CoreMessage_TMessageKey.BROADCAST_FLAG, default_value: "0")
-        let is_call_center = message.getBody(key: CoreMessage_TMessageKey.IS_CALL_CENTER, default_value: "0")
-        let call_center_id = message.getBody(key: CoreMessage_TMessageKey.CALL_CENTER_ID, default_value: "")
-        print("prepare save db")
-        Database.shared.database?.inTransaction({ (fmdb, rollback) in
-            do {
-                _ = try Database.shared.insertRecord(fmdb: fmdb, table: "MESSAGE", cvalues: [
-                    "message_id" : message_id,
-                    "f_pin" : f_pin,
-                    "f_display_name" : message.getBody(key : CoreMessage_TMessageKey.F_DISPLAY_NAME, default_value : ""),
-                    "l_pin" : l_pin,
-                    "l_user_id" : message.getBody(key : CoreMessage_TMessageKey.L_USER_ID, default_value : ""),
-                    "message_scope_id" : scope,
-                    "server_date" : message.getBody(key: CoreMessage_TMessageKey.SERVER_DATE, default_value : String(Date().currentTimeMillis())),
-                    "status" : status,
-                    "message_text" : message.getBody(key : CoreMessage_TMessageKey.MESSAGE_TEXT, default_value : "").toNormalString(),
-                    "audio_id" : message.getBody(key : CoreMessage_TMessageKey.AUDIO_ID, default_value : ""),
-                    "video_id" : message.getBody(key : CoreMessage_TMessageKey.VIDEO_ID, default_value : ""),
-                    "image_id" : message.getBody(key : CoreMessage_TMessageKey.IMAGE_ID, default_value : ""),
-                    "file_id" : message.getBody(key : CoreMessage_TMessageKey.FILE_ID, default_value : ""),
-                    "thumb_id" : message.getBody(key : CoreMessage_TMessageKey.THUMB_ID, default_value : ""),
-                    "opposite_pin" : message.getBody(key : CoreMessage_TMessageKey.OPPOSITE_PIN, default_value : ""),
-                    "format" : message.getBody(key : CoreMessage_TMessageKey.FORMAT, default_value : ""),
-                    "blog_id" : message.getBody(key : CoreMessage_TMessageKey.BLOG_ID, default_value : ""),
-                    "read_receipts" : message.getBody(key: CoreMessage_TMessageKey.READ_RECEIPTS, default_value:  "0"),
-                    "chat_id" : chat_id,
-                    "account_type" : message.getBody(key : CoreMessage_TMessageKey.BUSINESS_CATEGORY, default_value : "1"),
-                    "credential" : message.getBody(key : CoreMessage_TMessageKey.CREDENTIAL, default_value : ""),
-                    "reff_id" : message.getBody(key : CoreMessage_TMessageKey.REF_ID, default_value : ""),
-                    "message_large_text" : message.getBody(key : CoreMessage_TMessageKey.BODY, default_value : "").toNormalString(),
-                    "attachment_flag" : message.getBody(key: CoreMessage_TMessageKey.ATTACHMENT_FLAG, default_value:  "0"),
-                    "local_timestamp" : message.getBody(key: CoreMessage_TMessageKey.LOCAL_TIMESTAMP, default_value : String(Date().currentTimeMillis())),
-                    "broadcast_flag" : broadcast_flag,
-                    "is_call_center" : is_call_center,
-                    "call_center_id" : call_center_id
-                ], replace: true)
-            } catch {
-                rollback.pointee = true
-                print(error)
-            }
-        })
-        
-        if withStatus {
-            Database.shared.database?.inTransaction({ (fmdb, rollback) in
-                do {
-                    if scope == "4" {
-                        for pin in getGroupMembers(fmdb: fmdb, l_pin: l_pin) {
-                            if f_pin == pin { continue }
-                            _ = try Database.shared.insertRecord(fmdb: fmdb, table: "MESSAGE_STATUS", cvalues: [
-                                "message_id" : message_id,
-                                "status" : status,
-                                "f_pin" : pin,
-                                "last_update" : Date().currentTimeMillis()
-                            ], replace: true)
-                        }
-                    } else {
-                        _ = try Database.shared.insertRecord(fmdb: fmdb, table: "MESSAGE_STATUS", cvalues: [
-                            "message_id" : message_id,
-                            "status" : status,
-                            "f_pin" : l_pin,
-                            "last_update" : Date().currentTimeMillis()
-                        ], replace: true)
-                    }
-                } catch {
-                    rollback.pointee = true
-                    print(error)
-                }
-            })
-        }
-        var pin = l_pin
-        if l_pin == me {
-            pin = f_pin
-        }
-        if !chat_id.isEmpty {
-            pin = chat_id
-        }
-        var counter : Int? = nil
-        if l_pin == me || (scope == "4" && f_pin != me) {
-            Database.shared.database?.inTransaction({ (fmdb, rollback) in
-                if let cursor = Database.shared.getRecords(fmdb: fmdb, query: "select counter from MESSAGE_SUMMARY where l_pin = '\(pin)'"), cursor.next() {
-                    counter = Int(cursor.int(forColumnIndex: 0))
-                    counter! += 1
-                    cursor.close()
-                    print("select db message summary")
-                }
-            })
-            if counter == nil {
-                counter = 1
-                print("set counter message summary")
-            }
-        }
-        if counter == nil {
-            counter = 0
-        }
-        if is_call_center == "0" {
-            Database.shared.database?.inTransaction({ (fmdb, rollback) in
-                do {
-                    _ = try Database.shared.insertRecord(fmdb: fmdb, table: "MESSAGE_SUMMARY", cvalues: [
-                        "l_pin" : pin,
-                        "message_id" : message_id,
-                        "counter" : counter!
-                    ], replace: true)
-                } catch {
-                    rollback.pointee = true
-                    print(error)
-                }
-            })
-        }
-        print("insert db message summary \(message_id)")
-        
-    }
-    
-    public static func saveMessageBot(textMessage: String, blog_id: String, attachment_type:String)->Void{
-        guard let me = UserDefaults.standard.string(forKey: "me") else {
-            return
-        }
-        
-        var user_id:String? = ""
-        let message_id = me + CoreMessage_TMessageUtil.getTID()
-        
-        Database.shared.database?.inTransaction({ (fmdb, rollback) in
-            if let cursor = Database.shared.getRecords(fmdb: fmdb, query: "select user_id from BUDDY where f_pin = '\(me)'"), cursor.next() {
-                user_id = cursor.string(forColumnIndex: 0)
-                cursor.close()
-            }
-        })
-        Database.shared.database?.inTransaction({ (fmdb, rollback) in
-            do {
-                _ = try Database.shared.insertRecord(fmdb: fmdb, table: "MESSAGE", cvalues: [
-                    "message_id" : message_id ,
-                    "f_pin" : "-999",
-                    "f_display_name" : "Bot",
-                    "l_pin" : me,
-                    "l_user_id" : String(user_id!),
-                    "message_scope_id" : "3",
-                    "server_date" : String(Date().currentTimeMillis()),
-                    "status" : "3",
-                    "message_text" : textMessage,
-                    "audio_id" : "",
-                    "video_id" : "",
-                    "image_id" : "",
-                    "file_id" : "",
-                    "thumb_id" : "",
-                    "opposite_pin" : "",
-                    "format" : "",
-                    "blog_id" : blog_id,
-                    "read_receipts" : "0",
-                    "chat_id" : "",
-                    "account_type" : "1",
-                    "credential" :"",
-                    "reff_id" : "",
-                    "message_large_text" : "",
-                    "attachment_flag" : attachment_type,
-                    "local_timestamp" : String(Date().currentTimeMillis())
-                ], replace: true)
-            } catch {
-                rollback.pointee = true
-                print(error)
-            }
-        })
-        let pin = "-999"
-        var counter : Int? = nil
-        Database.shared.database?.inTransaction({ (fmdb, rollback) in
-            if let cursor = Database.shared.getRecords(fmdb: fmdb, query: "select counter from MESSAGE_SUMMARY where l_pin = '\(pin)'"), cursor.next() {
-                counter = Int(cursor.int(forColumnIndex: 0))
-                counter! += 1
-                cursor.close()
-                print("select db message summary")
-            }
-        })
-        if counter == nil {
-            counter = 1
-            print("set counter message summary")
-        }
-        Database.shared.database?.inTransaction({ (fmdb, rollback) in
-            do {
-                _ = try Database.shared.insertRecord(fmdb: fmdb, table: "MESSAGE_SUMMARY", cvalues: [
-                    "l_pin" : pin,
-                    "message_id" : message_id,
-                    "counter" : counter!
-                ], replace: true)
-            } catch {
-                rollback.pointee = true
-                print(error)
-            }
-        })
-        print("insert db message summary \(message_id)")
-    }
-    
-    static func updateMessageStatus(message: TMessage) -> Void {
-        let message_id = message.getBody(key : CoreMessage_TMessageKey.MESSAGE_ID, default_value : "")
-        guard !message_id.isEmpty else {
-            return
-        }
-        let status = message.getBody(key : CoreMessage_TMessageKey.STATUS, default_value : "")
-        guard !status.isEmpty else {
-            return
-        }
-        let l_pin = message.getBody(key : CoreMessage_TMessageKey.L_PIN, default_value : "")
-        guard !l_pin.isEmpty else {
-            return
-        }
-        Database.shared.database?.inTransaction({ (fmdb, rollbac) in
-            if message_id.starts(with: "-1") || message_id.starts(with: "-2") {
-                for s in message_id.split(separator: ",") {
-                    let t = s.trimmingCharacters(in: .whitespaces)
-                    if t == "-1" || t == "-2" {
-                        continue
-                    }
-                    if status == "3" {
-                        _ = Database.shared.updateRecord(fmdb: fmdb, table: "MESSAGE_STATUS", cvalues: [
-                                                            "status" : status,
-                                                            "time_delivered" : String(Date().currentTimeMillis()),
-                                                            "last_update" : String(Date().currentTimeMillis())], _where: "message_id = '\(t)' and f_pin = '\(l_pin)'")
-                    } else if status == "4" {
-                        _ = Database.shared.updateRecord(fmdb: fmdb, table: "MESSAGE_STATUS", cvalues: [
-                                                            "status" : status,
-                                                            "time_read" : String(Date().currentTimeMillis()),
-                                                            "last_update" : String(Date().currentTimeMillis())], _where: "message_id = '\(t)' and f_pin = '\(l_pin)'")
-                    } else if status == "8" {
-                        _ = Database.shared.updateRecord(fmdb: fmdb, table: "MESSAGE_STATUS", cvalues: [
-                                                            "status" : status,
-                                                            "time_ack" : String(Date().currentTimeMillis()),
-                                                            "last_update" : String(Date().currentTimeMillis())], _where: "message_id = '\(t)' and f_pin = '\(l_pin)'")
-                    } else {
-                        _ = Database.shared.updateRecord(fmdb: fmdb, table: "MESSAGE_STATUS", cvalues: [
-                                                            "status" : status,
-                                                            "last_update" : String(Date().currentTimeMillis())], _where: "message_id = '\(t)' and f_pin = '\(l_pin)'")
-                    }
-                }
-            } else {
-                if status == "3" {
-                    _ = Database.shared.updateRecord(fmdb: fmdb, table: "MESSAGE_STATUS", cvalues: [
-                                                        "status" : status,
-                                                        "time_delivered" : String(Date().currentTimeMillis()),
-                                                        "last_update" : String(Date().currentTimeMillis())], _where: "message_id = '\(message_id)' and f_pin = '\(l_pin)'")
-                } else if status == "4" {
-                    _ = Database.shared.updateRecord(fmdb: fmdb, table: "MESSAGE_STATUS", cvalues: [
-                                                        "status" : status,
-                                                        "time_read" : String(Date().currentTimeMillis()),
-                                                        "last_update" : String(Date().currentTimeMillis())], _where: "message_id = '\(message_id)' and f_pin = '\(l_pin)'")
-                } else if status == "8" {
-                    _ = Database.shared.updateRecord(fmdb: fmdb, table: "MESSAGE_STATUS", cvalues: [
-                                                        "status" : status,
-                                                        "time_ack" : String(Date().currentTimeMillis()),
-                                                        "last_update" : String(Date().currentTimeMillis())], _where: "message_id = '\(message_id)' and f_pin = '\(l_pin)'")
-                } else {
-                    _ = Database.shared.updateRecord(fmdb: fmdb, table: "MESSAGE_STATUS", cvalues: [
-                                                        "status" : status,
-                                                        "last_update" : String(Date().currentTimeMillis())], _where: "message_id = '\(message_id)' and f_pin = '\(l_pin)'")
-                }
-            }
-        })
-    }
-    
-    static func getGroupMembers(fmdb: FMDatabase, l_pin: String) -> [String] {
-        var result = [String]()
-        if let cursor = Database.shared.getRecords(fmdb: fmdb, query: "select f_pin from GROUPZ_MEMBER where group_id = '\(l_pin)'") {
-            while cursor.next() {
-                if let value = cursor.string(forColumnIndex: 0) {
-                    result.append(value)
-                }
-            }
-            cursor.close()
-        }
-        return result
-    }
-    
-    static func getVideoThumbnail(name: String, completion: @escaping (Bool)->()) {
-        DispatchQueue.global().async {
-            do {
-                let fileManager = FileManager.default
-                let documentDir = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
-                let fileDir = documentDir.appendingPathComponent(name)
-                let path = fileDir.path
-                if FileManager.default.fileExists(atPath: path) {
-                    let asset = AVAsset(url: URL(fileURLWithPath: path))
-                    let avAssetImageGenerator = AVAssetImageGenerator(asset: asset)
-                    avAssetImageGenerator.appliesPreferredTrackTransform = true
-                    let thumnailTime = CMTimeMake(value: 2, timescale: 1)
-                    let thumbImage = UIImage(cgImage: try avAssetImageGenerator.copyCGImage(at: thumnailTime, actualTime: nil))
-                    guard let data = thumbImage.jpegData(compressionQuality: 1.0) else {
-                        completion(false)
-                        return
-                    }
-                    let thumbFileDir = documentDir.appendingPathComponent("THUMB_" + name)
-                    try data.write(to: thumbFileDir)
-                    completion(true)
-                } else {
-                    completion(false)
-                }
-            } catch {
-                print(error)
-            }
-        }
-    }
-    
-    static func resizedImage(at url: URL, for size: CGSize) -> UIImage? {
-        guard let image = UIImage(contentsOfFile: url.path) else {
-            return nil
-        }
-        
-        let renderer = UIGraphicsImageRenderer(size: size)
-        return renderer.image { (context) in
-            image.draw(in: CGRect(origin: .zero, size: size))
-        }
-    }
-    
-    static func initFollowing() -> Void {
-        if let me = UserDefaults.standard.string(forKey: "me") {
-            if let response = Nexilis.writeSync(message: CoreMessage_TMessageBank.getListFollowing(l_pin: me)) {
-                let data = response.getBody(key: CoreMessage_TMessageKey.DATA)
-                if !data.isEmpty {
-                    if let jsonArray = try! JSONSerialization.jsonObject(with: data.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
-                        Database.shared.database?.inTransaction({ (fmdb, rollback) in
-                            do {
-                                for json in jsonArray {
-                                    _ = try Database.shared.insertRecord(fmdb: fmdb, table: "FOLLOW", cvalues: [
-                                        "f_pin" : CoreMessage_TMessageUtil.getString(json: json, key: "pin")
-                                    ], replace: true)
-                                }
-                            } catch {
-                                rollback.pointee = true
-                                print(error)
-                            }
-                        })
-                    }
-                }
-            }
-        }
-    }
-    
-//    do {
-//        _ = try Database.shared.insertRecord(fmdb: fmdb, table: "CALL_CENTER_HISTORY", cvalues: [
-//            "type" : "1",
-//            "title" : displayName,
-//            "time" : timeStart,
-//            "f_pin" : f_pin,
-//            "data" : dataCC,
-//            "time_end" : date,
-//            "complaint_id" : complaint_id.isEmpty ? "C\(date)" : complaint_id,
-//            "members" : "",
-//            "requester": ""
-//        ], replace: true)
-//        _ = try Database.shared.insertRecord(fmdb: fmdb, table: "PREFS", cvalues: [
-//            "key" : "CC:\(f_pin)",
-//            "value" : status,
-//        ], replace: true)
-//        ret = true
-//    } catch {
-//        rollback.pointee = true
-//        print(error)
-//    }
-    
-    private static var uploadQueue = DispatchQueue(label: "UPLOAD_DICT", attributes: .concurrent)
-    
-    private static var UPLOAD_DICT = [String: Network]()
-    
-    static func removeUploadFile(forKey: String) -> Network? {
-        var _result: Network? = nil
-        uploadQueue.sync {
-            _result = self.UPLOAD_DICT.removeValue(forKey: forKey)
-        }
-        return _result
-    }
-    
-    static func putUploadFile(forKey: String, uploader: Network) {
-        uploadQueue.async (flags: .barrier) {
-            self.UPLOAD_DICT[forKey] = uploader
-        }
-    }
-    
-    static func getUploadFile(forKey: String) -> Network? {
-        var _result: Network? = nil
-        uploadQueue.sync {
-            _result = self.UPLOAD_DICT[forKey]
-        }
-        return _result
-    }
-    
-    private static var downloadQueue = DispatchQueue(label: "DOWNLOAD_DICT", attributes: .concurrent)
-    
-    private static var DOWNLOAD_DICT = [String:Download]()
-    
-    static func addDownload(forKey : String, download: Download){
-        downloadQueue.async (flags: .barrier) {
-            self.DOWNLOAD_DICT[forKey] = download
-        }
-    }
-    
-    static func getDownload(forKey: String) -> Download? {
-        var _result: Download? = nil
-        downloadQueue.sync {
-            _result = self.DOWNLOAD_DICT[forKey]
-        }
-        return _result
-    }
-    
-    static func writeImageToFile(data: Data, fileName: String){
-        guard let directory = FileManager.default.urls(for: .picturesDirectory, in: .userDomainMask).last else {
-            return
-        }
-        let fileURL = directory.appendingPathComponent("\(fileName)")
-        if FileManager.default.fileExists(atPath: fileURL.path) {
-            if let fileHandle = FileHandle(forWritingAtPath: fileURL.path) {
-                fileHandle.seekToEndOfFile()
-                fileHandle.write(data)
-                fileHandle.closeFile()
-            } else {
-                print("Can't open file to write")
-            }
-        } else {
-            do {
-                try data.write(to: fileURL, options: .atomic)
-            } catch {
-                print("Unable to write in new file")
-            }
-        }
-    }
-    
-    static func writeVideoToFile(data: Data, fileName: String){
-        guard let directory = FileManager.default.urls(for: .moviesDirectory, in: .userDomainMask).last else {
-            return
-        }
-        let fileURL = directory.appendingPathComponent("\(fileName)")
-        if FileManager.default.fileExists(atPath: fileURL.path) {
-            if let fileHandle = FileHandle(forWritingAtPath: fileURL.path) {
-                fileHandle.seekToEndOfFile()
-                fileHandle.write(data)
-                fileHandle.closeFile()
-            } else {
-                print("Can't open file to write")
-            }
-        } else {
-            do {
-                try data.write(to: fileURL, options: .atomic)
-            } catch {
-                print("Unable to write in new file")
-            }
-        }
-    }
-    
-    static func writeDocumentsToFile(data: Data, fileName: String){
-        guard let directory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last else {
-            return
-        }
-        let fileURL = directory.appendingPathComponent("\(fileName)")
-        if FileManager.default.fileExists(atPath: fileURL.path) {
-            if let fileHandle = FileHandle(forWritingAtPath: fileURL.path) {
-                fileHandle.seekToEndOfFile()
-                fileHandle.write(data)
-                fileHandle.closeFile()
-            } else {
-                print("Can't open file to write")
-            }
-        } else {
-            do {
-                try data.write(to: fileURL, options: .atomic)
-            } catch {
-                print("Unable to write in new file")
-            }
-        }
-    }
-    
-    public static func checkMicPermission() -> Bool {
-        var permissionCheck: Bool = false
-
-        switch AVAudioSession.sharedInstance().recordPermission {
-        case .granted:
-            permissionCheck = true
-        case .denied:
-            permissionCheck = false
-        case .undetermined:
-            AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
-                if granted {
-                    permissionCheck = true
-                } else {
-                    permissionCheck = false
-                }
-            })
-        default:
-            break
-        }
-
-        return permissionCheck
-    }
-    
-    public static func checkCameraPermission() -> Int {
-        var permissionCheck: Int = -1
-        if AVCaptureDevice.authorizationStatus(for: .video) ==  .authorized {
-            permissionCheck = 1
-        } else if AVCaptureDevice.authorizationStatus(for: .video) ==  .denied {
-            permissionCheck = 0
-        } else {
-            AVCaptureDevice.requestAccess(for: .video, completionHandler: { (granted: Bool) -> Void in
-               
-            })
-        }
-        return permissionCheck
-    }
-    
-    public static func startTimer(){
-        broadcastTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: {_ in
-            if(!openBroadcast && !broadcastList.isEmpty){
-                openBroadcast = true
-                let m = broadcastList.removeFirst()
-                print("broadcast show: \(m)")
-                DispatchQueue.main.async {
-                    Nexilis.shared.showBroadcastMessage(m: m)
-                }
-            }
-        })
-    }
-    
-    /*
-     * Delegate
-     */
-    
-    weak open var loginDelegate: LoginDelegate?
-    
-    weak open var messageDelegate: MessageDelegate?
-    
-    weak open var groupDelegate: GroupDelegate?
-    
-    weak open var callDelegate: CallDelegate?
-    
-    weak open var streamingDelagate: LiveStreamingDelegate?
-    
-    weak open var personInfoDelegate: PersonInfoDelegate?
-    
-    weak open var screenSharingDelegate: ScreenSharingDelegate?
-    
-    weak open var commentDelegate: CommentDelegate?
-    
-    weak open var uploadDelegate: UploadDelegate?
-    
-    weak open var timelineDelegate: TimelineDelegate?
-    
-    weak open var connectionDelegate: ConnectionDelegate?
-    
-}
-
-public protocol LoginDelegate: NSObjectProtocol {
-    func onProgress(code: String, progress: Int)
-    func onProcess(message: String, status: String)
-}
-
-public protocol MessageDelegate: NSObjectProtocol {
-    func onReceive(message: TMessage)
-    func onReceiveComment(message: TMessage)
-    func onReceive(message: [AnyHashable: Any?])
-    func onMessage(message: TMessage)
-    func onUpload(name: String, progress: Double)
-    func onTyping(message: TMessage)
-}
-
-public protocol GroupDelegate: NSObjectProtocol {
-    func onGroup(code: String, f_pin: String, groupId: String)
-    func onTopic(code: String, f_pin: String, topicId: String)
-    func onMember(code: String, f_pin: String, groupId: String, member: String)
-}
-
-public protocol DownloadDelegate: NSObjectProtocol {
-    func onDownloadProgress(fileName: String, progress: Double)
-}
-
-public protocol CallDelegate: NSObjectProtocol {
-    func onIncomingCall(state: Int, message: String)
-    func onStatusCall(state: Int, message: String)
-}
-
-public protocol LiveStreamingDelegate: NSObjectProtocol {
-    func onStartLS(state: Int, message: String)
-    func onJoinLS(state: Int, message: String)
-}
-
-public protocol VideoCallDelegate: NSObjectProtocol {
-    func onInitiateVideoCall(destination:String,state: Int, message: String)
-    func onAcceptVideoCall(originator:String,state: Int, message: String)
-    func onVideoCallReceiverTerminate(originator:String,state: Int, message: String)
-    
-}
-
-public protocol PersonInfoDelegate: NSObjectProtocol {
-    func onUpdatePersonInfo(state: Int, message: String)
-}
-
-public protocol ScreenSharingDelegate: NSObjectProtocol {
-    func onStartScreenSharing(state:Int,message:String)
-    func onJoinScreenSharing(state:Int,message:String)
-}
-
-public protocol CommentDelegate: NSObjectProtocol {
-    func onReceiveComment(message: TMessage)
-    func onDeleteComment(message: TMessage)
-}
-
-public protocol UploadDelegate: NSObjectProtocol {
-    func onUploadProgress(fileName: String, progress: Double)
-}
-
-public protocol TimelineDelegate: NSObjectProtocol {
-    func onPostUpdate(status: String, message: String)
-}
-
-public protocol ConnectionDelegate: NSObjectProtocol {
-    func connectionStateChanged(userId: String!, deviceId: String, state: Bool)
-}
-
-public protocol ConnectDelegate: NSObjectProtocol {
-    func onSuccess(userId: String)
-    func onFailed(error: String)
-}
-
-public enum AppStoryBoard: String {
-    
-    case Palio = "Palio"
-    
-    public var instance: UIStoryboard {
-        return UIStoryboard(name: self.rawValue, bundle: Bundle.resourceBundle(for: Nexilis.self))
-    }
-    
-}
-
-extension Nexilis: CallDelegate {
-    
-    func displayIncomingCall(uuid: UUID, handle: String, hasVideo: Bool = false, completion: ((Error?) -> Void)? = nil) {
-        providerDelegate?.reportIncomingCall(uuid: uuid, handle: handle, hasVideo: hasVideo, completion: completion)
-    }
-    
-    public func onIncomingCall(state: Int, message: String) {
-        DispatchQueue.main.async {
-            let idMe = UserDefaults.standard.string(forKey: "me")!
-            let myData = User.getData(pin: idMe)
-            let onGoingCC = UserDefaults.standard.string(forKey: "onGoingCC") ?? ""
-            if myData?.offline_mode == "1" {
-                API.terminateCall(sParty: nil)
-                return
-            }
-            let deviceId = message.split(separator: ",")[0]
-            var isShowAlert: Double?
-            let canShow = UIApplication.shared.visibleViewController
-            if canShow != nil && !(canShow is UINavigationController) {
-                if !(canShow is EditorPersonal) {
-                    isShowAlert = 0
-                } else {
-                    isShowAlert = 1.5
-                }
-            } else if canShow != nil {
-                if canShow is UINavigationController {
-                    let canShowNC = canShow as! UINavigationController
-                    if !(canShowNC.visibleViewController is EditorPersonal) {
-                        isShowAlert = 0
-                    } else {
-                        isShowAlert = 1.5
-                    }
-                } else {
-                    isShowAlert = 0
-                }
-            }
-            if (state == 21 && message.split(separator: ",")[1] != "joining Ac.room on channel 0") {
-                if onGoingCC.isEmpty {
-                    let backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(expirationHandler: nil)
-                    self.displayIncomingCall(uuid: UUID(), handle: String(deviceId), hasVideo: false) { error in
-                        UIApplication.shared.endBackgroundTask(backgroundTaskIdentifier)
-                    }
-                } else {
-                    DispatchQueue.main.asyncAfter(deadline: .now() + isShowAlert!, execute: {
-                        do {
-                            try AVAudioSession.sharedInstance().setCategory(.playAndRecord)
-                            try AVAudioSession.sharedInstance().setMode(.voiceChat)
-                            try AVAudioSession.sharedInstance().overrideOutputAudioPort(.none)
-                        } catch {
-                        }
-                        let controller = QmeraAudioViewController()
-                        controller.user = User.getData(pin: String(deviceId))
-                        controller.isOnGoing = true
-                        controller.isOutgoing = false
-                        controller.modalPresentationStyle = .overCurrentContext
-                        if UIApplication.shared.visibleViewController?.navigationController != nil {
-                            UIApplication.shared.visibleViewController?.navigationController?.present(controller, animated: true, completion: nil)
-                        } else {
-                            UIApplication.shared.visibleViewController?.present(controller, animated: true, completion: nil)
-                        }
-                        API.receiveCCall(sParty: String(deviceId))
-                    })
-                }
-            } else if (state != -3 && state != 21) {
-                let fpin = deviceId
-                var data: [String: String?] = [:]
-                Database.shared.database?.inTransaction({ (fmdb, rollback) in
-                    if let cursorData = Database.shared.getRecords(fmdb: fmdb, query: "SELECT f_pin, first_name, last_name, official_account, image_id, device_id, offline_mode, user_type FROM BUDDY where f_pin = '\(fpin)'") {
-                        while cursorData.next() {
-                            data["f_pin"] = cursorData.string(forColumnIndex: 0)
-                            var name = ""
-                            if let firstname = cursorData.string(forColumnIndex: 1) {
-                                name = firstname
-                            }
-                            if let lastname = cursorData.string(forColumnIndex: 2) {
-                                name = name + " " + lastname
-                            }
-                            data["name"] = name
-                            data["picture"] = cursorData.string(forColumnIndex: 4)
-                            data["isOfficial"] = cursorData.string(forColumnIndex: 3)
-                            data["deviceId"] = cursorData.string(forColumnIndex: 5)
-                            data["isOffline"] = cursorData.string(forColumnIndex: 6)
-                            data["user_type"] = cursorData.string(forColumnIndex: 7)
-                        }
-                        cursorData.close()
-                    }
-                })
-                let videoController = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "videoVCQmera") as! QmeraVideoViewController
-                videoController.dataPerson.append(data)
-                videoController.isInisiator = false
-                if !onGoingCC.isEmpty {
-                    videoController.users.append(User.getData(pin: data["f_pin"]!!)!)
-                }
-                let navigationController = UINavigationController(rootViewController: videoController)
-                navigationController.modalPresentationStyle = .fullScreen
-                if !onGoingCC.isEmpty {
-                    videoController.isAutoAccept = true
-                    DispatchQueue.main.asyncAfter(deadline: .now() + isShowAlert!, execute: {
-                        if UIApplication.shared.visibleViewController is UIAlertController {
-                            let vc = UIApplication.shared.visibleViewController as! UIAlertController
-                            vc.dismiss(animated: true, completion: {
-                                if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                    UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                                } else {
-                                    UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                                }
-                            })
-                            return
-                        }
-                        if UIApplication.shared.visibleViewController?.navigationController != nil {
-                            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                        } else {
-                            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                        }
-                    })
-                } else {
-                    if UIApplication.shared.visibleViewController is UIAlertController {
-                        let vc = UIApplication.shared.visibleViewController as! UIAlertController
-                        vc.dismiss(animated: true, completion: {
-                            if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                            } else {
-                                UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                            }
-                        })
-                        return
-                    }
-                    if UIApplication.shared.visibleViewController?.navigationController != nil {
-                        UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                    } else {
-                        UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                    }
-                }
-            }
-        }
-    }
-    
-    public func onStatusCall(state: Int, message: String) {
-        let r = message.split(separator: ",")
-        if state == 23 {
-            if let call = callManager.call(with: String(r[0])) {
-                print("onStatusCall:connectingCall")
-                DispatchQueue.main.async {
-                    call.connectingCall()
-                }
-            }
-        } else if state == 22 {
-            if let call = callManager.call(with: String(r[1])) {
-                print("onStatusCall:answerCall")
-                DispatchQueue.main.async {
-                    call.answerCall()
-                }
-            }
-        }
-        var dataCall: [AnyHashable : Any] = [:]
-        dataCall["state"] = state
-        dataCall["message"] = message
-        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "onStatusCall"), object: nil, userInfo: dataCall)
-    }
-    
-}
-
-var previewItem : NSURL?
-
-extension Nexilis: MessageDelegate {
-    public func onReceiveComment(message: TMessage) {
-        var dataMessage: [AnyHashable : Any] = [:]
-        dataMessage["message"] = message
-        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "onReceiveComment"), object: nil, userInfo: dataMessage)
-    }
-    
-    @objc func tapLinkBroadcast(_ sender: ObjectGesture) {
-        var stringURl = sender.message_id.lowercased()
-        if stringURl.starts(with: "www.") {
-            stringURl = "https://" + stringURl.replacingOccurrences(of: "www.", with: "")
-        }
-        guard let url = URL(string: stringURl) else { return }
-        UIApplication.shared.open(url)
-    }
-    
-    func showBroadcastMessage(m: [String: String]) {
-        let fileType = m[CoreMessage_TMessageKey.CATEGORY_FLAG]!
-        let broadcastVC = UIViewController()
-        if let viewBroadcast = broadcastVC.view {
-            broadcastVC.modalPresentationStyle = .custom
-            viewBroadcast.backgroundColor = .black.withAlphaComponent(0.3)
-            
-            let stringLink = m[CoreMessage_TMessageKey.LINK] ?? ""
-            
-            let containerView = UIView()
-            viewBroadcast.addSubview(containerView)
-            if stringLink.isEmpty {
-                containerView.anchor(centerX: viewBroadcast.centerXAnchor, centerY: viewBroadcast.centerYAnchor, width: viewBroadcast.bounds.width - 40, minHeight: 100, maxHeight: viewBroadcast.bounds.height - 100)
-            } else {
-                containerView.anchor(centerX: viewBroadcast.centerXAnchor, centerY: viewBroadcast.centerYAnchor, width: viewBroadcast.bounds.width - 40, minHeight: 200, maxHeight: viewBroadcast.bounds.height - 100)
-            }
-            containerView.backgroundColor = .white.withAlphaComponent(0.9)
-            containerView.layer.cornerRadius = 15.0
-            containerView.clipsToBounds = true
-            
-            let subContainerView = UIView()
-            subContainerView.backgroundColor = .clear
-            containerView.addSubview(subContainerView)
-            subContainerView.anchor(top: containerView.topAnchor, left: containerView.leftAnchor, bottom: containerView.bottomAnchor, right: containerView.rightAnchor, paddingTop: 20.0, paddingLeft: 10.0, paddingBottom: 20.0, paddingRight: 10.0)
-            
-            let buttonClose = UIButton(type: .close)
-            buttonClose.frame.size = CGSize(width: 30, height: 30)
-            buttonClose.layer.cornerRadius = 15.0
-            buttonClose.clipsToBounds = true
-            buttonClose.backgroundColor = .secondaryColor.withAlphaComponent(0.5)
-            buttonClose.actionHandle(controlEvents: .touchUpInside,
-             ForAction:{() -> Void in
-                broadcastVC.dismiss(animated: true, completion: {
-                    Nexilis.broadcastList.remove(at: 0)
-                    if Nexilis.broadcastList.count > 0 {
-                        Nexilis.shared.showBroadcastMessage(m: Nexilis.broadcastList[0])
-                    }
-                })
-             })
-            containerView.addSubview(buttonClose)
-            buttonClose.anchor(top: containerView.topAnchor, right: containerView.rightAnchor, width: 30, height: 30)
-            
-            let title = UILabel()
-            title.font = .systemFont(ofSize: 18, weight: .bold)
-            title.text = m["MERNAM"]
-            title.textAlignment = .center
-            subContainerView.addSubview(title)
-            title.anchor(top: subContainerView.topAnchor, left: subContainerView.leftAnchor, right: subContainerView.rightAnchor)
-            
-            let titleBroadcast = UILabel()
-            subContainerView.addSubview(titleBroadcast)
-            titleBroadcast.translatesAutoresizingMaskIntoConstraints = false
-            NSLayoutConstraint.activate([
-                titleBroadcast.topAnchor.constraint(equalTo: title.bottomAnchor, constant: 20.0),
-                titleBroadcast.leadingAnchor.constraint(equalTo: subContainerView.leadingAnchor),
-                titleBroadcast.trailingAnchor.constraint(equalTo: subContainerView.trailingAnchor),
-            ])
-            titleBroadcast.font = UIFont.systemFont(ofSize: 14, weight: .semibold)
-            titleBroadcast.numberOfLines = 0
-            titleBroadcast.attributedText = m[CoreMessage_TMessageKey.TITLE]!.richText()
-            titleBroadcast.textColor = .black
-            
-            let descBroadcast = UILabel()
-            subContainerView.addSubview(descBroadcast)
-            descBroadcast.translatesAutoresizingMaskIntoConstraints = false
-            let constraintDesc = descBroadcast.bottomAnchor.constraint(equalTo: subContainerView.bottomAnchor)
-            if !stringLink.isEmpty{
-                constraintDesc.constant = constraintDesc.constant - 30
-            }
-            if fileType != BroadcastViewController.FILE_TYPE_CHAT {
-                constraintDesc.constant = constraintDesc.constant - 260
-            }
-            NSLayoutConstraint.activate([
-                descBroadcast.topAnchor.constraint(equalTo: titleBroadcast.bottomAnchor, constant: 10),
-                descBroadcast.leadingAnchor.constraint(equalTo: subContainerView.leadingAnchor),
-                descBroadcast.trailingAnchor.constraint(equalTo: subContainerView.trailingAnchor),
-                constraintDesc,
-            ])
-            descBroadcast.font = UIFont.systemFont(ofSize: 12)
-            descBroadcast.numberOfLines = 0
-            descBroadcast.attributedText = m[CoreMessage_TMessageKey.MESSAGE_TEXT_ENG]!.richText()
-            descBroadcast.textColor = .black
-            
-            let linkBroadcast = UILabel()
-            if !stringLink.isEmpty {
-                subContainerView.addSubview(linkBroadcast)
-                linkBroadcast.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    linkBroadcast.topAnchor.constraint(equalTo: descBroadcast.bottomAnchor, constant: 10),
-                    linkBroadcast.leadingAnchor.constraint(equalTo: subContainerView.leadingAnchor),
-                    linkBroadcast.trailingAnchor.constraint(equalTo: subContainerView.trailingAnchor),
-                ])
-                linkBroadcast.font = UIFont.systemFont(ofSize: 12)
-                linkBroadcast.isUserInteractionEnabled = true
-                linkBroadcast.numberOfLines = 2
-                let attributedString = NSMutableAttributedString(string: stringLink, attributes:[NSAttributedString.Key.link: URL(string: stringLink)!])
-                linkBroadcast.attributedText = attributedString
-                let tap = ObjectGesture(target: self, action: #selector(tapLinkBroadcast))
-                tap.message_id = stringLink
-                linkBroadcast.addGestureRecognizer(tap)
-            }
-            
-            let thumb = m[CoreMessage_TMessageKey.THUMB_ID] ?? ""
-            let image = m[CoreMessage_TMessageKey.IMAGE_ID] ?? ""
-            let video = m[CoreMessage_TMessageKey.VIDEO_ID] ?? ""
-            let file = m[CoreMessage_TMessageKey.FILE_ID] ?? ""
-            if fileType != BroadcastViewController.FILE_TYPE_CHAT {
-                let imageBroadcast = UIImageView()
-                subContainerView.addSubview(imageBroadcast)
-                imageBroadcast.translatesAutoresizingMaskIntoConstraints = false
-                var constImage = imageBroadcast.topAnchor.constraint(equalTo: descBroadcast.bottomAnchor, constant: 10)
-                if !stringLink.isEmpty {
-                    constImage = imageBroadcast.topAnchor.constraint(equalTo: linkBroadcast.bottomAnchor, constant: 10)
-                }
-                NSLayoutConstraint.activate([
-                    constImage,
-                    imageBroadcast.leadingAnchor.constraint(equalTo: subContainerView.leadingAnchor),
-                    imageBroadcast.trailingAnchor.constraint(equalTo: subContainerView.trailingAnchor),
-                    imageBroadcast.heightAnchor.constraint(equalToConstant: 250)
-                ])
-                imageBroadcast.layer.cornerRadius = 10.0
-                imageBroadcast.clipsToBounds = true
-                if fileType != BroadcastViewController.FILE_TYPE_DOCUMENT {
-                    imageBroadcast.contentMode = .scaleAspectFill
-                    imageBroadcast.setImage(name: thumb)
-            
-                    if fileType == BroadcastViewController.FILE_TYPE_VIDEO {
-                        let imagePlay = UIImageView(image: UIImage(systemName: "play.circle.fill"))
-                        imageBroadcast.addSubview(imagePlay)
-                        imagePlay.clipsToBounds = true
-                        imagePlay.translatesAutoresizingMaskIntoConstraints = false
-                        imagePlay.centerYAnchor.constraint(equalTo: imageBroadcast.centerYAnchor).isActive = true
-                        imagePlay.centerXAnchor.constraint(equalTo: imageBroadcast.centerXAnchor).isActive = true
-                        imagePlay.widthAnchor.constraint(equalToConstant: 60).isActive = true
-                        imagePlay.heightAnchor.constraint(equalToConstant: 60).isActive = true
-                        imagePlay.tintColor = .gray.withAlphaComponent(0.5)
-                    }
-                } else {
-                    imageBroadcast.image = UIImage(systemName: "doc.fill")
-                    imageBroadcast.tintColor = .mainColor
-                    imageBroadcast.contentMode = .scaleAspectFit
-                }
-            
-                imageBroadcast.actionHandle(controlEvents: .touchUpInside,
-                 ForAction:{() -> Void in
-                    let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
-                    let nsUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask
-                    let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
-                    if fileType == BroadcastViewController.FILE_TYPE_IMAGE {
-                        if let dirPath = paths.first {
-                            let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent(image)
-                            if FileManager.default.fileExists(atPath: imageURL.path) {
-                                let image    = UIImage(contentsOfFile: imageURL.path)
-                                let previewImageVC = PreviewAttachmentImageVideo(nibName: "PreviewAttachmentImageVideo", bundle: Bundle.resourceBundle(for: Nexilis.self))
-                                previewImageVC.image = image
-                                previewImageVC.isHiddenTextField = true
-                                previewImageVC.modalPresentationStyle = .overFullScreen
-                                previewImageVC.modalTransitionStyle  = .crossDissolve
-                                if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                    UIApplication.shared.visibleViewController?.navigationController?.present(previewImageVC, animated: true, completion: nil)
-                                } else {
-                                    UIApplication.shared.visibleViewController?.present(previewImageVC, animated: true, completion: nil)
-                                }
-                            } else {
-                                Download().start(forKey: image) { (name, progress) in
-                                    guard progress == 100 else {
-                                        return
-                                    }
-            
-                                    DispatchQueue.main.async {
-                                        let image    = UIImage(contentsOfFile: imageURL.path)
-                                        let previewImageVC = PreviewAttachmentImageVideo(nibName: "PreviewAttachmentImageVideo", bundle: Bundle.resourceBundle(for: Nexilis.self))
-                                        previewImageVC.image = image
-                                        previewImageVC.isHiddenTextField = true
-                                        previewImageVC.modalPresentationStyle = .overFullScreen
-                                        previewImageVC.modalTransitionStyle  = .crossDissolve
-                                        if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                            UIApplication.shared.visibleViewController?.navigationController?.present(previewImageVC, animated: true, completion: nil)
-                                        } else {
-                                            UIApplication.shared.visibleViewController?.present(previewImageVC, animated: true, completion: nil)
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    } else if fileType == BroadcastViewController.FILE_TYPE_VIDEO {
-                        //https://qmera.io/filepalio/image/
-                        let player = AVPlayer(url: URL(string: "https://\(Nexilis.ADDRESS)/filepalio/image/\(video)")!)
-                        let playerVC = AVPlayerViewController()
-                        playerVC.player = player
-                        playerVC.modalPresentationStyle = .custom
-                        if UIApplication.shared.visibleViewController?.navigationController != nil {
-                            UIApplication.shared.visibleViewController?.navigationController?.present(playerVC, animated: true, completion: nil)
-                        } else {
-                            UIApplication.shared.visibleViewController?.present(playerVC, animated: true, completion: nil)
-                        }
-                    } else if fileType == BroadcastViewController.FILE_TYPE_DOCUMENT {
-                        if let dirPath = paths.first {
-                            let fileURL = URL(fileURLWithPath: dirPath).appendingPathComponent(file)
-                            if FileManager.default.fileExists(atPath: fileURL.path) {
-                                previewItem = fileURL as NSURL
-                                let previewController = QLPreviewController()
-                                let rightBarButton = UIBarButtonItem()
-                                previewController.navigationItem.rightBarButtonItem = rightBarButton
-                                previewController.dataSource = self
-                                previewController.modalPresentationStyle = .overFullScreen
-            
-                                if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                    UIApplication.shared.visibleViewController?.navigationController?.present(previewController, animated: true, completion: nil)
-                                } else {
-                                    UIApplication.shared.visibleViewController?.present(previewController, animated: true, completion: nil)
-                                }
-                            } else {
-                                Download().start(forKey: file) { (name, progress) in
-                                    DispatchQueue.main.async {
-                                        guard progress == 100 else {
-                                            return
-                                        }
-                                        previewItem = fileURL as NSURL
-                                        let previewController = QLPreviewController()
-                                        let rightBarButton = UIBarButtonItem()
-                                        previewController.navigationItem.rightBarButtonItem = rightBarButton
-                                        previewController.dataSource = self
-                                        previewController.modalPresentationStyle = .overFullScreen
-            
-                                        if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                            UIApplication.shared.visibleViewController?.navigationController?.present(previewController, animated: true, completion: nil)
-                                        } else {
-                                            UIApplication.shared.visibleViewController?.present(previewController, animated: true, completion: nil)
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                 })
-            }
-            broadcastVC.modalTransitionStyle = .crossDissolve
-            if UIApplication.shared.visibleViewController?.navigationController != nil {
-                UIApplication.shared.visibleViewController?.navigationController?.present(broadcastVC, animated: true, completion: nil)
-            } else {
-                UIApplication.shared.visibleViewController?.present(broadcastVC, animated: true, completion: nil)
-            }
-        }
-    }
-    
-    public func onReceive(message: TMessage) {
-        var dataMessage: [AnyHashable : Any] = [:]
-        dataMessage["message"] = message
-        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "onReceiveChat"), object: nil, userInfo: dataMessage)
-        if message.getCode() == CoreMessage_TMessageCode.PUSH_CALL_CENTER {
-            DispatchQueue.main.async {
-                if Nexilis.onGoingPushCC.isEmpty {
-                    var data: [String: String] = [:]
-                    data["channel"] = message.getBody(key: CoreMessage_TMessageKey.CHANNEL)
-                    data["l_pin"] = message.getBody(key: CoreMessage_TMessageKey.L_PIN)
-                    data["f_display_name"] = message.getBody(key: CoreMessage_TMessageKey.F_DISPLAY_NAME)
-                    Nexilis.onGoingPushCC = data
-                } else if Nexilis.onGoingPushCC["f_display_name"] == message.getBody(key: CoreMessage_TMessageKey.F_DISPLAY_NAME) {
-                    return
-                }
-                let alert = UIAlertController(title: "", message: "\n\n\n\n\n\n\n\n\n\n".localized(), preferredStyle: .alert)
-                let newWidth = UIScreen.main.bounds.width * 0.90 - 270
-                // update width constraint value for main view
-                if let viewWidthConstraint = alert.view.constraints.filter({ return $0.firstAttribute == .width }).first{
-                    viewWidthConstraint.constant = newWidth
-                }
-                // update width constraint value for container view
-                if let containerViewWidthConstraint = alert.view.subviews.first?.constraints.filter({ return $0.firstAttribute == .width }).first {
-                    containerViewWidthConstraint.constant = newWidth
-                }
-                let titleFont = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 18), NSAttributedString.Key.foregroundColor: UIColor.black]
-                let titleAttrString = NSMutableAttributedString(string: "Call Center".localized(), attributes: titleFont)
-                alert.setValue(titleAttrString, forKey: "attributedTitle")
-                alert.view.subviews.first?.subviews.first?.subviews.first?.backgroundColor = .lightGray
-                alert.view.tintColor = .black
-                let rejectAction = UIAlertAction(title: "Pass to other representative".localized(), style: .destructive, handler: {(_) in
-                    DispatchQueue.global().async {
-                        _ = Nexilis.write(message: CoreMessage_TMessageBank.timeOutRequestCallCenter(channel: message.getBody(key: CoreMessage_TMessageKey.CHANNEL), l_pin: message.getBody(key: CoreMessage_TMessageKey.L_PIN)))
-                    }
-                    Nexilis.onGoingPushCC.removeAll()
-                    alert.dismiss(animated: true, completion: nil)
-                })
-                let acceptAction = UIAlertAction(title: "I'll handle the customer".localized(), style: .default, handler: {(_) in
-                    let goAudioCall = Nexilis.checkMicPermission()
-                    if !goAudioCall && message.getBody(key: CoreMessage_TMessageKey.CHANNEL) == "1" {
-                        let alert = UIAlertController(title: "Attention!".localized(), message: "Please allow microphone permission in your settings".localized(), preferredStyle: .alert)
-                        alert.addAction(UIAlertAction(title: "OK".localized(), style: UIAlertAction.Style.default, handler: { _ in
-                            if let url = URL(string: UIApplication.openSettingsURLString), UIApplication.shared.canOpenURL(url) {
-                                UIApplication.shared.open(url, options: [:], completionHandler: nil)
-                            }
-                        }))
-                        if UIApplication.shared.visibleViewController?.navigationController != nil {
-                            UIApplication.shared.visibleViewController?.navigationController?.present(alert, animated: true, completion: nil)
-                        } else {
-                            UIApplication.shared.visibleViewController?.present(alert, animated: true, completion: nil)
-                        }
-                        DispatchQueue.global().async {
-                            DispatchQueue.global().async {
-                                _ = Nexilis.write(message: CoreMessage_TMessageBank.timeOutRequestCallCenter(channel: message.getBody(key: CoreMessage_TMessageKey.CHANNEL), l_pin: message.getBody(key: CoreMessage_TMessageKey.L_PIN)))
-                            }
-                        }
-                        Nexilis.onGoingPushCC.removeAll()
-                        return
-                    }
-                    if message.getBody(key: CoreMessage_TMessageKey.CHANNEL) == "2" {
-                        var permissionCheck = -1
-                        if AVCaptureDevice.authorizationStatus(for: .video) ==  .authorized {
-                            permissionCheck = 1
-                        } else if AVCaptureDevice.authorizationStatus(for: .video) ==  .denied {
-                            permissionCheck = 0
-                        } else {
-                            AVCaptureDevice.requestAccess(for: .video, completionHandler: { (granted: Bool) -> Void in
-                                if granted == true {
-                                    permissionCheck = 1
-                                } else {
-                                    permissionCheck = 0
-                                }
-                            })
-                        }
-                        
-                        while permissionCheck == -1 {
-                            sleep(1)
-                        }
-                        
-                        if permissionCheck == 0 {
-                            let alert = UIAlertController(title: "Attention!".localized(), message: "Please allow camera permission in your settings".localized(), preferredStyle: .alert)
-                            alert.addAction(UIAlertAction(title: "OK".localized(), style: UIAlertAction.Style.default, handler: { _ in
-                                if let url = URL(string: UIApplication.openSettingsURLString), UIApplication.shared.canOpenURL(url) {
-                                    UIApplication.shared.open(url, options: [:], completionHandler: nil)
-                                }
-                            }))
-                            if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                UIApplication.shared.visibleViewController?.navigationController?.present(alert, animated: true, completion: nil)
-                            } else {
-                                UIApplication.shared.visibleViewController?.present(alert, animated: true, completion: nil)
-                            }
-                            DispatchQueue.global().async {
-                                DispatchQueue.global().async {
-                                    _ = Nexilis.write(message: CoreMessage_TMessageBank.timeOutRequestCallCenter(channel: message.getBody(key: CoreMessage_TMessageKey.CHANNEL), l_pin: message.getBody(key: CoreMessage_TMessageKey.L_PIN)))
-                                }
-                            }
-                            Nexilis.onGoingPushCC.removeAll()
-                            return
-                        }
-                    }
-                    if UIApplication.shared.visibleViewController is UINavigationController {
-                        let nc = UIApplication.shared.visibleViewController as! UINavigationController
-                        if nc.visibleViewController is QmeraStreamingViewController {
-                            let vc = nc.visibleViewController as! QmeraStreamingViewController
-                            var alert = UIAlertController(title: "", message: "Are you sure you want to end Live Streaming, and open notification?".localized(), preferredStyle: .alert)
-                            if !vc.isLive {
-                                alert = UIAlertController(title: "", message: "Are you sure you want to leave Live Streaming, and open notification?".localized(), preferredStyle: .alert)
-                            }
-                            alert.addAction(UIAlertAction(title: "No".localized(), style: UIAlertAction.Style.default, handler: { _ in
-                                DispatchQueue.global().async {
-                                    _ = Nexilis.write(message: CoreMessage_TMessageBank.timeOutRequestCallCenter(channel: message.getBody(key: CoreMessage_TMessageKey.CHANNEL), l_pin: message.getBody(key: CoreMessage_TMessageKey.L_PIN)))
-                                }
-                                Nexilis.onGoingPushCC.removeAll()
-                                alert.dismiss(animated: true, completion: nil)
-                            }))
-                            alert.addAction(UIAlertAction(title: "Yes".localized(), style: UIAlertAction.Style.default, handler: { _ in
-                                DispatchQueue.global().async {
-                                    API.terminateBC(sBroadcasterID: vc.isLive ? nil : vc.data)
-                                    vc.sendLeft()
-                                }
-                                vc.dismiss(animated: true, completion: {
-                                    acceptCC()
-                                })
-                            }))
-                            nc.present(alert, animated: true, completion: nil)
-//                                    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "isRunningStreaming"), object: nil, userInfo: dataMessage)
-                        } else {
-                            acceptCC()
-                        }
-                    } else {
-                        acceptCC()
-                    }
-                    func acceptCC() {
-                        if let response = Nexilis.writeSync(message: CoreMessage_TMessageBank.acceptRequestCallCenter(channel: message.getBody(key: CoreMessage_TMessageKey.CHANNEL), l_pin: message.getBody(key: CoreMessage_TMessageKey.L_PIN), complaint_id: message.getBody(key: CoreMessage_TMessageKey.DATA))) {
-                            if (response.getBody(key: CoreMessage_TMessageKey.ERRCOD, default_value: "99") == "00") {
-                                Nexilis.onGoingPushCC.removeAll()
-                                let complaintId = response.getBody(key: CoreMessage_TMessageKey.DATA, default_value: "")
-                                if !complaintId.isEmpty {
-                                    alert.dismiss(animated: true, completion: nil)
-                                    let idMe = UserDefaults.standard.string(forKey: "me")!
-                                    UserDefaults.standard.set("\(message.getBody(key: CoreMessage_TMessageKey.L_PIN)),\(idMe),\(complaintId)", forKey: "onGoingCC")
-                                    UserDefaults.standard.set("\(message.getBody(key: CoreMessage_TMessageKey.L_PIN))", forKey: "membersCC")
-                                    if message.getBody(key: CoreMessage_TMessageKey.CHANNEL) == "0" {
-                                        let editorPersonalVC = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "editorPersonalVC") as! EditorPersonal
-                                        editorPersonalVC.isContactCenter = true
-                                        editorPersonalVC.isRequestContactCenter = false
-                                        editorPersonalVC.unique_l_pin = message.getBody(key: CoreMessage_TMessageKey.L_PIN)
-                                        editorPersonalVC.complaintId = complaintId
-                                        editorPersonalVC.channelContactCenter = message.getBody(key: CoreMessage_TMessageKey.CHANNEL)
-                                        editorPersonalVC.fPinContacCenter = message.getBody(key: CoreMessage_TMessageKey.L_PIN)
-                                        let navigationController = UINavigationController(rootViewController: editorPersonalVC)
-                                        navigationController.modalPresentationStyle = .fullScreen
-                                        navigationController.navigationBar.tintColor = .white
-                                        navigationController.navigationBar.barTintColor = .mainColor
-                                        navigationController.navigationBar.isTranslucent = false
-                                        let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-                                        navigationController.navigationBar.titleTextAttributes = textAttributes
-                                        navigationController.view.backgroundColor = .mainColor
-                                        if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                                        } else {
-                                            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                                        }
-                                    } else {
-                                        UserDefaults.standard.set("\(Date().currentTimeMillis())", forKey: "startTimeCC")
-                                        DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
-                                            if message.getBody(key: CoreMessage_TMessageKey.CHANNEL) == "1" {
-                                                let pin = message.getBody(key: CoreMessage_TMessageKey.L_PIN)
-                                                let controller = QmeraAudioViewController()
-                                                controller.user = User.getData(pin: pin)
-                                                controller.isOutgoing = true
-                                                controller.modalPresentationStyle = .overCurrentContext
-                                                let navigationController = UINavigationController(rootViewController: controller)
-                                                navigationController.modalPresentationStyle = .fullScreen
-                                                if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                                    UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                                                } else {
-                                                    UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                                                }
-                                            } else if message.getBody(key: CoreMessage_TMessageKey.CHANNEL) == "2" {
-                                                let videoVC = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "videoVCQmera") as! QmeraVideoViewController
-                                                videoVC.fPin = message.getBody(key: CoreMessage_TMessageKey.L_PIN)
-                                                videoVC.users.append(User.getData(pin: message.getBody(key: CoreMessage_TMessageKey.L_PIN))!)
-                                                let navigationController = UINavigationController(rootViewController: videoVC)
-                                                navigationController.modalPresentationStyle = .fullScreen
-                                                if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                                    UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                                                } else {
-                                                    UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                                                }
-                                            }
-                                        })
-                                    }
-                                }
-                            }
-                        }
-                    }
-                })
-                alert.addAction(acceptAction)
-                alert.addAction(rejectAction)
-                
-                let containerView = UIView(frame: CGRect(x: 20, y: 60, width: alert.view.bounds.size.width * 0.9 - 40, height: 150))
-                alert.view.addSubview(containerView)
-                containerView.layer.cornerRadius = 10.0
-                containerView.clipsToBounds = true
-                containerView.backgroundColor = .secondaryColor.withAlphaComponent(0.5)
-                
-                let imageProfile = UIImageView()
-                containerView.addSubview(imageProfile)
-                imageProfile.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    imageProfile.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 10),
-                    imageProfile.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -10),
-                    imageProfile.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 10),
-                    imageProfile.widthAnchor.constraint(equalToConstant: 100)
-                ])
-                imageProfile.layer.cornerRadius = 10.0
-                imageProfile.clipsToBounds = true
-                imageProfile.backgroundColor = .lightGray.withAlphaComponent(0.3)
-                imageProfile.tintColor = .secondaryColor
-                imageProfile.image = UIImage(systemName: "person")
-                if message.getBody(key: CoreMessage_TMessageKey.THUMB_ID) != "" {
-                    imageProfile.setImage(name: message.getBody(key: CoreMessage_TMessageKey.THUMB_ID))
-                    imageProfile.contentMode = .scaleAspectFill
-                }
-                
-                let labelName = UILabel()
-                containerView.addSubview(labelName)
-                labelName.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    labelName.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 15),
-                    labelName.leadingAnchor.constraint(equalTo: imageProfile.trailingAnchor, constant: 5)
-                ])
-                labelName.font = UIFont.systemFont(ofSize: 12)
-                labelName.text = "Name".localized()
-                labelName.textColor = .mainColor
-                
-                let valueName = UILabel()
-                containerView.addSubview(valueName)
-                valueName.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    valueName.topAnchor.constraint(equalTo: labelName.bottomAnchor),
-                    valueName.leadingAnchor.constraint(equalTo: imageProfile.trailingAnchor, constant: 5)
-                ])
-                valueName.font = UIFont.systemFont(ofSize: 12)
-                valueName.text = message.getBody(key: CoreMessage_TMessageKey.F_DISPLAY_NAME)
-                valueName.textColor = .mainColor
-                
-                let labelType = UILabel()
-                containerView.addSubview(labelType)
-                labelType.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    labelType.topAnchor.constraint(equalTo: valueName.bottomAnchor, constant: 5),
-                    labelType.leadingAnchor.constraint(equalTo: imageProfile.trailingAnchor, constant: 5)
-                ])
-                labelType.font = UIFont.systemFont(ofSize: 12)
-                labelType.text = "Request Type".localized()
-                labelType.textColor = .mainColor
-                
-                let valueType = UILabel()
-                containerView.addSubview(valueType)
-                valueType.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    valueType.topAnchor.constraint(equalTo: labelType.bottomAnchor),
-                    valueType.leadingAnchor.constraint(equalTo: imageProfile.trailingAnchor, constant: 5)
-                ])
-                valueType.font = UIFont.systemFont(ofSize: 12)
-                if message.getBody(key: CoreMessage_TMessageKey.CHANNEL) == "0" {
-                    valueType.text = "Chat".localized()
-                } else if message.getBody(key: CoreMessage_TMessageKey.CHANNEL) == "1" {
-                    valueType.text = "Audio Call".localized()
-                } else if message.getBody(key: CoreMessage_TMessageKey.CHANNEL) == "2" {
-                    valueType.text = "Video Call".localized()
-                } else {
-                    valueType.text = "Email".localized()
-                }
-                valueType.textColor = .mainColor
-                
-                let labelIdentity = UILabel()
-                containerView.addSubview(labelIdentity)
-                labelIdentity.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    labelIdentity.topAnchor.constraint(equalTo: valueType.bottomAnchor, constant: 5),
-                    labelIdentity.leadingAnchor.constraint(equalTo: imageProfile.trailingAnchor, constant: 5)
-                ])
-                labelIdentity.font = UIFont.systemFont(ofSize: 12)
-                labelIdentity.text = "Complaint ID".localized()
-                labelIdentity.textColor = .mainColor
-                
-                let valueIdentity = UILabel()
-                containerView.addSubview(valueIdentity)
-                valueIdentity.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    valueIdentity.topAnchor.constraint(equalTo: labelIdentity.bottomAnchor),
-                    valueIdentity.leadingAnchor.constraint(equalTo: imageProfile.trailingAnchor, constant: 5),
-                    valueIdentity.trailingAnchor.constraint(equalTo: containerView.trailingAnchor)
-                ])
-                valueIdentity.font = UIFont.systemFont(ofSize: 12)
-                valueIdentity.text = message.getBody(key: CoreMessage_TMessageKey.DATA)
-                valueIdentity.numberOfLines = 0
-                valueIdentity.textColor = .mainColor
-                
-                var isShowAlert: Int?
-                let canShow = UIApplication.shared.visibleViewController
-                if canShow != nil && !(canShow is UINavigationController) {
-                    if !(canShow is EditorPersonal) && !(canShow is QmeraAudioViewController) && !(canShow is QmeraVideoViewController) {
-                        isShowAlert = 0
-                    } else {
-                        isShowAlert = 3
-                    }
-                } else if canShow != nil {
-                    if canShow is UINavigationController {
-                        let canShowNC = canShow as! UINavigationController
-                        if !(canShowNC.visibleViewController is EditorPersonal) && !(canShowNC.visibleViewController is QmeraAudioViewController) && !(canShowNC.visibleViewController is QmeraVideoViewController) {
-                            isShowAlert = 0
-                        } else {
-                            isShowAlert = 3
-                        }
-                    } else {
-                        isShowAlert = 0
-                    }
-                }
-                DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(isShowAlert!), execute: {
-                    if UIApplication.shared.visibleViewController?.navigationController != nil {
-                        UIApplication.shared.visibleViewController?.navigationController?.present(alert, animated: true, completion: nil)
-                    } else {
-                        UIApplication.shared.visibleViewController?.present(alert, animated: true, completion: nil)
-                    }
-                })
-            }
-        } else if message.getCode() == CoreMessage_TMessageCode.ACCEPT_CALL_CENTER {
-            let fPinContacCenter = message.getBody(key: CoreMessage_TMessageKey.F_PIN)
-            let requester = message.getBody(key: CoreMessage_TMessageKey.UPLINE_PIN)
-            let complaintId = message.getBody(key: CoreMessage_TMessageKey.DATA)
-            if !requester.isEmpty {
-                UserDefaults.standard.set("\(requester),\(fPinContacCenter),\(complaintId)", forKey: "onGoingCC")
-                UserDefaults.standard.set("\(fPinContacCenter)", forKey: "membersCC")
-            }
-        } else if message.getCode() == CoreMessage_TMessageCode.INVITE_TO_ROOM_CONTACT_CENTER {
-            DispatchQueue.main.async {
-                let alert = UIAlertController(title: "", message: "\n\n\n\n\n\n\n\n\n\n".localized(), preferredStyle: .alert)
-                let newWidth = UIScreen.main.bounds.width * 0.90 - 270
-                // update width constraint value for main view
-                if let viewWidthConstraint = alert.view.constraints.filter({ return $0.firstAttribute == .width }).first{
-                    viewWidthConstraint.constant = newWidth
-                }
-                // update width constraint value for container view
-                if let containerViewWidthConstraint = alert.view.subviews.first?.constraints.filter({ return $0.firstAttribute == .width }).first {
-                    containerViewWidthConstraint.constant = newWidth
-                }
-                let titleFont = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 18), NSAttributedString.Key.foregroundColor: UIColor.black]
-                let titleAttrString = NSMutableAttributedString(string: "You're invited to\nCall Center".localized(), attributes: titleFont)
-                alert.setValue(titleAttrString, forKey: "attributedTitle")
-                alert.view.subviews.first?.subviews.first?.subviews.first?.backgroundColor = .lightGray
-                alert.view.tintColor = .black
-                let rejectAction = UIAlertAction(title: "Reject".localized(), style: .destructive, handler: {(_) in
-                    DispatchQueue.global().async {
-                        if let result = Nexilis.writeSync(message: CoreMessage_TMessageBank.acceptCCRoomInvite(l_pin: message.getPIN(), type: 0, ticket_id: message.getBody(key: CoreMessage_TMessageKey.CALL_CENTER_ID))) {
-                            if result.isOk() {
-                                return
-                            }
-                        }
-                    }
-                    alert.dismiss(animated: true, completion: nil)
-                })
-                let acceptAction = UIAlertAction(title: "Accept".localized(), style: .default, handler: {(_) in
-                    let goAudioCall = Nexilis.checkMicPermission()
-                    if !goAudioCall && message.getBody(key: CoreMessage_TMessageKey.CHANNEL) == "1" {
-                        let alert = UIAlertController(title: "Attention!".localized(), message: "Please allow microphone permission in your settings".localized(), preferredStyle: .alert)
-                        alert.addAction(UIAlertAction(title: "OK".localized(), style: UIAlertAction.Style.default, handler: { _ in
-                            if let url = URL(string: UIApplication.openSettingsURLString), UIApplication.shared.canOpenURL(url) {
-                                UIApplication.shared.open(url, options: [:], completionHandler: nil)
-                            }
-                        }))
-                        if UIApplication.shared.visibleViewController?.navigationController != nil {
-                            UIApplication.shared.visibleViewController?.navigationController?.present(alert, animated: true, completion: nil)
-                        } else {
-                            UIApplication.shared.visibleViewController?.present(alert, animated: true, completion: nil)
-                        }
-                        DispatchQueue.global().async {
-                            if let result = Nexilis.writeSync(message: CoreMessage_TMessageBank.acceptCCRoomInvite(l_pin: message.getPIN(), type: 0, ticket_id: message.getBody(key: CoreMessage_TMessageKey.CALL_CENTER_ID))) {
-                                if result.isOk() {
-                                    return
-                                }
-                            }
-                        }
-                        return
-                    }
-                    if message.getBody(key: CoreMessage_TMessageKey.CHANNEL) == "2" {
-                        var permissionCheck = -1
-                        if AVCaptureDevice.authorizationStatus(for: .video) ==  .authorized {
-                            permissionCheck = 1
-                        } else if AVCaptureDevice.authorizationStatus(for: .video) ==  .denied {
-                            permissionCheck = 0
-                        } else {
-                            AVCaptureDevice.requestAccess(for: .video, completionHandler: { (granted: Bool) -> Void in
-                                if granted == true {
-                                    permissionCheck = 1
-                                } else {
-                                    permissionCheck = 0
-                                }
-                            })
-                        }
-                        
-                        while permissionCheck == -1 {
-                            sleep(1)
-                        }
-                        
-                        if permissionCheck == 0 {
-                            let alert = UIAlertController(title: "Attention!".localized(), message: "Please allow camera permission in your settings".localized(), preferredStyle: .alert)
-                            alert.addAction(UIAlertAction(title: "OK".localized(), style: UIAlertAction.Style.default, handler: { _ in
-                                if let url = URL(string: UIApplication.openSettingsURLString), UIApplication.shared.canOpenURL(url) {
-                                    UIApplication.shared.open(url, options: [:], completionHandler: nil)
-                                }
-                            }))
-                            if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                UIApplication.shared.visibleViewController?.navigationController?.present(alert, animated: true, completion: nil)
-                            } else {
-                                UIApplication.shared.visibleViewController?.present(alert, animated: true, completion: nil)
-                            }
-                            DispatchQueue.global().async {
-                                if let result = Nexilis.writeSync(message: CoreMessage_TMessageBank.acceptCCRoomInvite(l_pin: message.getPIN(), type: 0, ticket_id: message.getBody(key: CoreMessage_TMessageKey.CALL_CENTER_ID))) {
-                                    if result.isOk() {
-                                        return
-                                    }
-                                }
-                            }
-                            return
-                        }
-                    }
-                    if UIApplication.shared.visibleViewController is UINavigationController {
-                        let nc = UIApplication.shared.visibleViewController as! UINavigationController
-                        if nc.visibleViewController is QmeraStreamingViewController {
-                            let vc = nc.visibleViewController as! QmeraStreamingViewController
-                            var alert = UIAlertController(title: "", message: "Are you sure you want to end Live Streaming, and open notification?".localized(), preferredStyle: .alert)
-                            if !vc.isLive {
-                                alert = UIAlertController(title: "", message: "Are you sure you want to leave Live Streaming, and open notification?".localized(), preferredStyle: .alert)
-                            }
-                            alert.addAction(UIAlertAction(title: "No".localized(), style: UIAlertAction.Style.default, handler: { _ in
-                                DispatchQueue.global().async {
-                                    if let result = Nexilis.writeSync(message: CoreMessage_TMessageBank.acceptCCRoomInvite(l_pin: message.getPIN(), type: 0, ticket_id: message.getBody(key: CoreMessage_TMessageKey.CALL_CENTER_ID))) {
-                                        if result.isOk() {
-                                            return
-                                        }
-                                    }
-                                }
-                                alert.dismiss(animated: true, completion: nil)
-                            }))
-                            alert.addAction(UIAlertAction(title: "Yes".localized(), style: UIAlertAction.Style.default, handler: { _ in
-                                DispatchQueue.global().async {
-                                    API.terminateBC(sBroadcasterID: vc.isLive ? nil : vc.data)
-                                    vc.sendLeft()
-                                }
-                                vc.dismiss(animated: true, completion: {
-                                    acceptCC()
-                                })
-                            }))
-                            nc.present(alert, animated: true, completion: nil)
-                        } else {
-                            acceptCC()
-                        }
-                    } else {
-                        acceptCC()
-                    }
-                    func acceptCC() {
-                        if let result = Nexilis.writeSync(message: CoreMessage_TMessageBank.acceptCCRoomInvite(l_pin: message.getPIN(), type: 1, ticket_id: message.getBody(key: CoreMessage_TMessageKey.CALL_CENTER_ID))) {
-                            if result.isOk() {
-                                let requester = result.getBody(key: CoreMessage_TMessageKey.UPLINE_PIN)
-                                let officer = result.getBody(key: CoreMessage_TMessageKey.FRIEND_FPIN)
-                                let data = result.getBody(key: CoreMessage_TMessageKey.DATA)
-                                let complaintId = message.getBody(key: CoreMessage_TMessageKey.CALL_CENTER_ID)
-                                UserDefaults.standard.set("\(requester),\(officer),\(complaintId)", forKey: "onGoingCC")
-                                UserDefaults.standard.set("\(Date().currentTimeMillis())", forKey: "startTimeCC")
-                                if !data.isEmpty {
-                                    if let jsonArray = try! JSONSerialization.jsonObject(with: data.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) as? [AnyObject] {
-                                        var members = ""
-                                        var user : [User] = []
-                                        let idMe = UserDefaults.standard.string(forKey: "me")!
-                                        for json in jsonArray {
-                                            if "\(json)" != idMe {
-                                                if members.isEmpty {
-                                                    members = "\(json)"
-                                                } else {
-                                                    members += ",\(json)"
-                                                }
-                                                if let userData = User.getData(pin: "\(json)") {
-                                                    user.append(userData)
-                                                } else {
-                                                    Nexilis.addFriend (fpin: "\(json)") { result in
-                                                        DispatchQueue.main.async {
-                                                            if result {
-                                                                let userData = User.getData(pin: "\(json)")!
-                                                                user.append(userData)
-                                                            } else {
-                                                                let imageView = UIImageView(image: UIImage(systemName: "xmark.circle.fill"))
-                                                                imageView.tintColor = .white
-                                                                let banner = FloatingNotificationBanner(title: "Server busy, please try again later".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .danger, colors: nil, iconPosition: .center)
-                                                                banner.show()
-                                                            }
-                                                        }
-                                                    }
-                                                }
-                                            }
-                                        }
-                                        UserDefaults.standard.set("\(members)", forKey: "membersCC")
-                                        if message.getBody(key: CoreMessage_TMessageKey.CHANNEL) == "0" {
-                                            let editorPersonalVC = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "editorPersonalVC") as! EditorPersonal
-                                            editorPersonalVC.hidesBottomBarWhenPushed = true
-                                            editorPersonalVC.unique_l_pin = officer
-                                            editorPersonalVC.fromNotification = true
-                                            editorPersonalVC.isContactCenter = true
-                                            editorPersonalVC.fPinContacCenter = members
-                                            editorPersonalVC.complaintId = complaintId
-                                            editorPersonalVC.onGoingCC = true
-                                            editorPersonalVC.isRequestContactCenter = false
-                                            editorPersonalVC.users = user
-                                            let navigationController = UINavigationController(rootViewController: editorPersonalVC)
-                                            navigationController.modalPresentationStyle = .fullScreen
-                                            navigationController.navigationBar.tintColor = .white
-                                            navigationController.navigationBar.barTintColor = .mainColor
-                                            navigationController.navigationBar.isTranslucent = false
-                                            let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-                                            navigationController.navigationBar.titleTextAttributes = textAttributes
-                                            navigationController.view.backgroundColor = .mainColor
-                                            if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                                UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                                            } else {
-                                                UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                                            }
-                                        }
-                                    }
-                                }
-                            } else {
-                                let imageView = UIImageView(image: UIImage(systemName: "info.circle"))
-                                imageView.tintColor = .white
-                                let banner = FloatingNotificationBanner(title: "Call Center Session has ended".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .info, colors: nil, iconPosition: .center)
-                                banner.show()
-                            }
-                        }
-                    }
-                })
-                alert.addAction(rejectAction)
-                alert.addAction(acceptAction)
-                
-                let containerView = UIView(frame: CGRect(x: 50, y: 80, width: alert.view.bounds.size.width * 0.9 - 100, height: 150))
-                alert.view.addSubview(containerView)
-                containerView.layer.cornerRadius = 10.0
-                containerView.clipsToBounds = true
-                containerView.backgroundColor = .secondaryColor.withAlphaComponent(0.5)
-                
-                let userData = User.getData(pin: message.getPIN())
-                
-                let imageProfile = UIImageView()
-                containerView.addSubview(imageProfile)
-                imageProfile.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    imageProfile.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 10),
-                    imageProfile.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -10),
-                    imageProfile.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 10),
-                    imageProfile.widthAnchor.constraint(equalToConstant: 100)
-                ])
-                imageProfile.layer.cornerRadius = 10.0
-                imageProfile.clipsToBounds = true
-                imageProfile.backgroundColor = .lightGray.withAlphaComponent(0.3)
-                imageProfile.tintColor = .secondaryColor
-                imageProfile.image = UIImage(systemName: "person")
-                if userData!.thumb != "" {
-                    imageProfile.setImage(name: userData!.thumb)
-                    imageProfile.contentMode = .scaleAspectFill
-                }
-                
-                let labelName = UILabel()
-                containerView.addSubview(labelName)
-                labelName.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    labelName.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 15),
-                    labelName.leadingAnchor.constraint(equalTo: imageProfile.trailingAnchor, constant: 5)
-                ])
-                labelName.font = UIFont.systemFont(ofSize: 12)
-                labelName.text = "Name".localized()
-                labelName.textColor = .mainColor
-                
-                let valueName = UILabel()
-                containerView.addSubview(valueName)
-                valueName.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    valueName.topAnchor.constraint(equalTo: labelName.bottomAnchor),
-                    valueName.leadingAnchor.constraint(equalTo: imageProfile.trailingAnchor, constant: 5)
-                ])
-                valueName.font = UIFont.systemFont(ofSize: 12)
-                valueName.text = userData!.fullName
-                valueName.textColor = .mainColor
-                
-                let labelType = UILabel()
-                containerView.addSubview(labelType)
-                labelType.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    labelType.topAnchor.constraint(equalTo: valueName.bottomAnchor, constant: 5),
-                    labelType.leadingAnchor.constraint(equalTo: imageProfile.trailingAnchor, constant: 5)
-                ])
-                labelType.font = UIFont.systemFont(ofSize: 12)
-                labelType.text = "Request Type".localized()
-                labelType.textColor = .mainColor
-                
-                let valueType = UILabel()
-                containerView.addSubview(valueType)
-                valueType.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    valueType.topAnchor.constraint(equalTo: labelType.bottomAnchor),
-                    valueType.leadingAnchor.constraint(equalTo: imageProfile.trailingAnchor, constant: 5)
-                ])
-                valueType.font = UIFont.systemFont(ofSize: 12)
-                if message.getBody(key: CoreMessage_TMessageKey.CHANNEL) == "0" {
-                    valueType.text = "Chat".localized()
-                } else if message.getBody(key: CoreMessage_TMessageKey.CHANNEL) == "1" {
-                    valueType.text = "Audio Call".localized()
-                } else if message.getBody(key: CoreMessage_TMessageKey.CHANNEL) == "2" {
-                    valueType.text = "Video Call".localized()
-                } else {
-                    valueType.text = "Email".localized()
-                }
-                valueType.textColor = .mainColor
-                
-                let labelIdentity = UILabel()
-                containerView.addSubview(labelIdentity)
-                labelIdentity.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    labelIdentity.topAnchor.constraint(equalTo: valueType.bottomAnchor, constant: 5),
-                    labelIdentity.leadingAnchor.constraint(equalTo: imageProfile.trailingAnchor, constant: 5)
-                ])
-                labelIdentity.font = UIFont.systemFont(ofSize: 12)
-                labelIdentity.text = "Complaint ID".localized()
-                labelIdentity.textColor = .mainColor
-                
-                let valueIdentity = UILabel()
-                containerView.addSubview(valueIdentity)
-                valueIdentity.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    valueIdentity.topAnchor.constraint(equalTo: labelIdentity.bottomAnchor),
-                    valueIdentity.leadingAnchor.constraint(equalTo: imageProfile.trailingAnchor, constant: 5),
-                    valueIdentity.trailingAnchor.constraint(equalTo: containerView.trailingAnchor)
-                ])
-                valueIdentity.font = UIFont.systemFont(ofSize: 12)
-                valueIdentity.text = message.getBody(key: CoreMessage_TMessageKey.CALL_CENTER_ID)
-                valueIdentity.numberOfLines = 0
-                valueIdentity.textColor = .mainColor
-                
-                if UIApplication.shared.visibleViewController?.navigationController != nil {
-                    UIApplication.shared.visibleViewController?.navigationController?.present(alert, animated: true, completion: nil)
-                } else {
-                    UIApplication.shared.visibleViewController?.present(alert, animated: true, completion: nil)
-                }
-            }
-        } else if message.getCode() != CoreMessage_TMessageCode.PUSH_CALL_CENTER && message.getCode() != CoreMessage_TMessageCode.ACCEPT_CALL_CENTER && message.getCode() != CoreMessage_TMessageCode.END_CALL_CENTER && message.getCode() != CoreMessage_TMessageCode.TIMEOUT_CONTACT_CENTER && message.getCode() != CoreMessage_TMessageCode.ACCEPT_CONTACT_CENTER && message.getCode() != CoreMessage_TMessageCode.PUSH_MEMBER_ROOM_CONTACT_CENTER && message.getCode() != CoreMessage_TMessageCode.INVITE_END_CONTACT_CENTER && message.getCode() != CoreMessage_TMessageCode.INVITE_EXIT_CONTACT_CENTER || message.mBodies["MERNAM"] != nil {
-            let m = message.mBodies
-//            if m[CoreMessage_TMessageKey.IS_CALL_CENTER] == "1" {
-//                return
-//            }
-            if message.mBodies["MERNAM"] != nil {
-                DispatchQueue.main.async {
-                    if !Nexilis.broadcastList.isEmpty {
-                        Nexilis.broadcastList.append(m)
-                    } else {
-                        Nexilis.broadcastList.append(m)
-                        Nexilis.shared.showBroadcastMessage(m: m)
-                    }
-                }
-                return
-            }
-            let sender = m[CoreMessage_TMessageKey.F_PIN]!
-            let me = UserDefaults.standard.string(forKey: "me")!
-            if(sender != me) {
-                let inEditorPersonal = UserDefaults.standard.string(forKey: "inEditorPersonal")
-                let inEditorGroup = UserDefaults.standard.stringArray(forKey: "inEditorGroup")
-                var text = m["A07"]!
-                if (m.keys.contains("A57") && !((m["A57"]!).isEmpty)) {
-                    text = "Sent Image 📷"
-                } else if (m.keys.contains("A149")) && (m["A149"]!) == "11" {
-                    text = "Sent Sticker ❤️"
-                } else if (m.keys.contains("A47") && !((m["A47"]!).isEmpty)) {
-                    text = "Sent Video 📹"
-                } else if (m.keys.contains("BN") && !((m["BN"]!).isEmpty)) {
-                    if m["A06"]! == "18" {
-                        text = "Sent Form 📄"
-                    } else {
-                        text = "Sent File 📄"
-                    }
-                } else if (m.keys.contains("A63") && !((m["A63"]!).isEmpty)) {
-                    text = "Sent Audio 🎵"
-                } else if ((m["A07"]!).contains("Share%20location%20")) {
-                    text = "Sent Location 📌"
-                } else if (m.keys.contains("A149")) && (m["A149"]!) == "27" {
-                    text = "Sent link Live Streaming"
-                } else if (m.keys.contains("A149")) && (m["A149"]!) == "25" {
-                    text = "Sent link Video Conference Room"
-                } else if (m.keys.contains("A149")) && (m["A149"]!) == "24" {
-                    text = "Sent link Quiz"
-                } else if (m.keys.contains("A118")) && (m["A118"]!) == "1" {
-                    text = "Sent Confidential Message"
-                }
-                var nameUser: String?
-                var profile = ""
-                var threadIdentifier = sender
-                let onGoingCC = UserDefaults.standard.string(forKey: "onGoingCC") ?? ""
-                if !onGoingCC.isEmpty {
-                    return
-                }
-                if(m["A06"]! == "3" || m["A06"]! == "18" || m["A06"]! == "5") {
-                    if inEditorPersonal == sender || (inEditorPersonal != nil && inEditorPersonal!.contains(",")) {
-                        return
-                    }
-                    if(nameUser == nil) {
-                        Database.shared.database?.inTransaction({ (fmdb, rollback) in
-                            if let cursor = Database.shared.getRecords(fmdb: fmdb, query: "SELECT first_name, last_name, image_id FROM BUDDY WHERE f_pin='\(String(describing: sender))'") {
-                                while cursor.next() {
-                                    let first_name = cursor.string(forColumnIndex: 0)!
-                                    let last_name = cursor.string(forColumnIndex: 1)!
-                                    nameUser = "\(first_name) \(last_name)".trimmingCharacters(in: .whitespaces)
-                                    profile = cursor.string(forColumnIndex: 2)!
-                                }
-                                cursor.close()
-                            }
-                        })
-                    }
-                } else {
-                    let idGroup = m["A01"]!
-                    var topicGroup: String?
-                    var idTopic: String?
-                    if (m.keys.contains("BA")) {
-                        idTopic = m["BA"]
-                    }
-                    if (idTopic == nil) {
-                        idTopic = "Lounge"
-                        topicGroup = "Lounge"
-                    } else {
-                        Database.shared.database?.inTransaction({ (fmdb, rollback) in
-                            if let cursor = Database.shared.getRecords(fmdb: fmdb, query: "SELECT title FROM DISCUSSION_FORUM WHERE chat_id='\(idTopic!)'") {
-                                while cursor.next() {
-                                    let title = cursor.string(forColumnIndex: 0)
-                                    topicGroup = title
-                                }
-                                cursor.close()
-                            }
-                        })
-                    }
-                    if (inEditorGroup != nil) {
-                        let editorIdGroup = inEditorGroup![0]
-                        let editorIdTopic = inEditorGroup![1]
-                        var idTempTopic = idTopic
-                        if (idTempTopic == "Lounge") {
-                            idTempTopic = ""
-                        }
-                        if (editorIdGroup == idGroup && editorIdTopic == idTempTopic) {
-                            return
-                        }
-                    }
-                    Database.shared.database?.inTransaction({ (fmdb, rollback) in
-                        if let cursor = Database.shared.getRecords(fmdb: fmdb, query: "SELECT f_name, image_id FROM GROUPZ WHERE group_id='\(idGroup)'") {
-                            while cursor.next() {
-                                let f_name = cursor.string(forColumnIndex: 0)
-                                var senderName = m["BR"]
-                                if senderName == nil {
-                                    senderName = "Bot"
-                                }
-                                nameUser =
-                                    "\(senderName!) \u{2022} \(f_name!)(\(topicGroup!))"
-                                profile = cursor.string(forColumnIndex: 1)!
-                            }
-                            cursor.close()
-                        }
-                    })
-                    if idTopic == "Lounge" {
-                        threadIdentifier = idGroup
-                    } else {
-                        threadIdentifier = idTopic!
-                    }
-                }
-                if nameUser == nil && threadIdentifier == "-999" {
-                    nameUser = "Bot"
-                }
-                DispatchQueue.main.async {
-                    let container = UIView()
-                    container.backgroundColor = .gray
-                    let profileImage = UIImageView()
-                    profileImage.frame.size = CGSize(width: 60, height: 60)
-                    container.addSubview(profileImage)
-                    profileImage.translatesAutoresizingMaskIntoConstraints = false
-                    NSLayoutConstraint.activate([
-                        profileImage.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: 8.0),
-                        profileImage.centerYAnchor.constraint(equalTo: container.centerYAnchor),
-                        profileImage.widthAnchor.constraint(equalToConstant: 60),
-                        profileImage.heightAnchor.constraint(equalToConstant: 60),
-                    ])
-                    
-                    let title = UILabel()
-                    container.addSubview(title)
-                    title.translatesAutoresizingMaskIntoConstraints = false
-                    NSLayoutConstraint.activate([
-                        title.leadingAnchor.constraint(equalTo: profileImage.trailingAnchor, constant: 8.0),
-                        title.topAnchor.constraint(equalTo: container.topAnchor, constant: 20.0),
-                    ])
-                    title.font = UIFont.systemFont(ofSize: 14)
-                    title.text = nameUser ?? "Unknown"
-                    title.textColor = .white
-                    
-                    let subtitle = UILabel()
-                    container.addSubview(subtitle)
-                    subtitle.translatesAutoresizingMaskIntoConstraints = false
-                    NSLayoutConstraint.activate([
-                        subtitle.leadingAnchor.constraint(equalTo: profileImage.trailingAnchor, constant: 8.0),
-                        subtitle.trailingAnchor.constraint(equalTo: container.trailingAnchor, constant: -15.0),
-                        subtitle.topAnchor.constraint(equalTo: title.bottomAnchor),
-                    ])
-                    subtitle.font = UIFont.systemFont(ofSize: 12)
-                    subtitle.attributedText = text.richText()
-                    subtitle.textColor = .white
-                    
-                    let floating = FloatingNotificationBanner(customView: container)
-                    floating.bannerHeight = 100.0
-                    floating.transparency = 0.9
-                    
-                    if threadIdentifier == "-999" {
-                        if Utils.getIconDock() != nil {
-                            let dataImage = try? Data(contentsOf: URL(string: Utils.getUrlDock()!)!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
-                            if dataImage != nil {
-                                profileImage.image = UIImage(data: dataImage!)
-                            }
-                        } else {
-                            profileImage.image = UIImage(named: "pb_button", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)
-                        }
-                    } else if profile != "" {
-                        profileImage.circle()
-                        do {
-                            let documentDir = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
-                            let file = documentDir.appendingPathComponent(profile)
-                            if FileManager().fileExists(atPath: file.path) {
-                                profileImage.image = UIImage(contentsOfFile: file.path)
-                                profileImage.backgroundColor = .clear
-                            } else {
-                                Download().start(forKey: profile) { (name, progress) in
-                                    guard progress == 100 else {
-                                        return
-                                    }
-                                    
-                                    DispatchQueue.main.async {
-                                        profileImage.image = UIImage(contentsOfFile: file.path)
-                                        profileImage.backgroundColor = .clear
-                                        if !onGoingCC.isEmpty {
-                                            floating.autoDismiss = false
-                                        }
-                                        floating.show(queuePosition: .front, bannerPosition: .top, queue: NotificationBannerQueue(maxBannersOnScreenSimultaneously: 1), on: nil, edgeInsets: UIEdgeInsets(top: 8.0, left: 8.0, bottom: 0, right: 8.0), cornerRadius: 8.0, shadowColor: .clear, shadowOpacity: .zero, shadowBlurRadius: .zero, shadowCornerRadius: .zero, shadowOffset: .zero, shadowEdgeInsets: nil)
-                                        floating.onTap = {
-                                            showNotif()
-                                        }
-                                    }
-                                }
-                                return
-                            }
-                        } catch {}
-                        profileImage.contentMode = .scaleAspectFill
-                    } else {
-                        profileImage.circle()
-                        if m["A06"]! == "3" {
-                            profileImage.image = UIImage(systemName: "person")
-                        } else {
-                            profileImage.image = UIImage(systemName: "person.3")
-                        }
-                        profileImage.contentMode = .scaleAspectFit
-                        profileImage.backgroundColor = .lightGray
-                        profileImage.tintColor = .white
-                    }
-                    
-                    floating.show(queuePosition: .front, bannerPosition: .top, queue: NotificationBannerQueue(maxBannersOnScreenSimultaneously: 1), on: nil, edgeInsets: UIEdgeInsets(top: 8.0, left: 8.0, bottom: 0, right: 8.0), cornerRadius: 8.0, shadowColor: .clear, shadowOpacity: .zero, shadowBlurRadius: .zero, shadowCornerRadius: .zero, shadowOffset: .zero, shadowEdgeInsets: nil)
-                    if !onGoingCC.isEmpty {
-                        floating.autoDismiss = false
-                    }
-                    floating.onTap = {
-                        showNotif()
-                    }
-                    func showNotif() {
-                        if !onGoingCC.isEmpty {
-                            floating.dismiss()
-                        }
-                        Database.shared.database?.inTransaction({ (fmdb, rollback) in
-                            if let cursorData = Database.shared.getRecords(fmdb: fmdb, query: "SELECT first_name, last_name FROM BUDDY where f_pin = '\(UserDefaults.standard.string(forKey: "me")!)'"), cursorData.next() {
-                                if (cursorData.string(forColumnIndex: 0)! + " " + cursorData.string(forColumnIndex: 1)!).trimmingCharacters(in: .whitespaces) == "USR\(UserDefaults.standard.string(forKey: "me")!)" {
-                                    let alert = UIAlertController(title: "Change Profile".localized(), message: "You must change your name to use this feature".localized(), preferredStyle: .alert)
-                                    alert.addAction(UIAlertAction(title: "OK".localized(), style: UIAlertAction.Style.default, handler: {(_) in
-                                        let controller = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "changeNS") as! ChangeNamePassswordViewController
-                                        let navigationController = UINavigationController(rootViewController: controller)
-                                        navigationController.modalPresentationStyle = .fullScreen
-                                        navigationController.navigationBar.tintColor = .white
-                                        navigationController.navigationBar.barTintColor = .mainColor
-                                        navigationController.navigationBar.isTranslucent = false
-                                        let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-                                        navigationController.navigationBar.titleTextAttributes = textAttributes
-                                        navigationController.view.backgroundColor = .mainColor
-                                        if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                                        } else {
-                                            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                                        }
-                                    }))
-                                    if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                        UIApplication.shared.visibleViewController?.navigationController?.present(alert, animated: true, completion: nil)
-                                    } else {
-                                        UIApplication.shared.visibleViewController?.present(alert, animated: true, completion: nil)
-                                    }
-                                }
-                                cursorData.close()
-                                return
-                            }
-                        })
-                        if(m["A06"]! == "3" || m["A06"]! == "5" || m["A06"]! == "18") {
-                            func openEditor() {
-                                let editorPersonalVC = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "editorPersonalVC") as! EditorPersonal
-                                editorPersonalVC.hidesBottomBarWhenPushed = true
-                                editorPersonalVC.unique_l_pin = threadIdentifier
-                                editorPersonalVC.fromNotification = true
-                                if !onGoingCC.isEmpty {
-                                    let compalintId = onGoingCC.components(separatedBy: ",")[2]
-                                    let fPinCC = onGoingCC.isEmpty ? "" : onGoingCC.components(separatedBy: ",")[1]
-                                    editorPersonalVC.isContactCenter = true
-                                    editorPersonalVC.fPinContacCenter = fPinCC
-                                    editorPersonalVC.complaintId = compalintId
-                                    editorPersonalVC.onGoingCC = true
-                                    editorPersonalVC.isRequestContactCenter = false
-                                }
-                                let navigationController = UINavigationController(rootViewController: editorPersonalVC)
-                                navigationController.modalPresentationStyle = .fullScreen
-                                navigationController.navigationBar.tintColor = .white
-                                navigationController.navigationBar.barTintColor = .mainColor
-                                navigationController.navigationBar.isTranslucent = false
-                                let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-                                navigationController.navigationBar.titleTextAttributes = textAttributes
-                                navigationController.view.backgroundColor = .mainColor
-                                if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                    UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                                } else {
-                                    UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                                }
-                            }
-                            if UIApplication.shared.visibleViewController is UINavigationController {
-                                let nc = UIApplication.shared.visibleViewController as! UINavigationController
-                                if nc.visibleViewController is QmeraStreamingViewController {
-                                    let vc = nc.visibleViewController as! QmeraStreamingViewController
-                                    var alert = UIAlertController(title: "", message: "Are you sure you want to end Live Streaming, and open notification?".localized(), preferredStyle: .alert)
-                                    if !vc.isLive {
-                                        alert = UIAlertController(title: "", message: "Are you sure you want to leave Live Streaming, and open notification?".localized(), preferredStyle: .alert)
-                                    }
-                                    alert.addAction(UIAlertAction(title: "No".localized(), style: UIAlertAction.Style.default, handler: nil))
-                                    alert.addAction(UIAlertAction(title: "Yes".localized(), style: UIAlertAction.Style.default, handler: { _ in
-                                        DispatchQueue.global().async {
-                                            API.terminateBC(sBroadcasterID: vc.isLive ? nil : vc.data)
-                                            vc.sendLeft()
-                                        }
-                                        vc.dismiss(animated: true, completion: {
-                                            openEditor()
-                                        })
-                                    }))
-                                    nc.present(alert, animated: true, completion: nil)
-//                                    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "isRunningStreaming"), object: nil, userInfo: dataMessage)
-                                } else if nc.visibleViewController is EditorPersonal {
-                                    let vc = nc.visibleViewController as! EditorPersonal
-                                    if vc.fromNotification {
-                                        vc.dismiss(animated: true, completion: {
-                                            openEditor()
-                                        })
-                                    } else {
-                                        vc.navigationController?.popViewController(animated: true)
-                                        openEditor()
-                                    }
-                                } else {
-                                    openEditor()
-                                }
-                            } else if UIApplication.shared.visibleViewController is EditorPersonal {
-                                let vc = UIApplication.shared.visibleViewController as! EditorPersonal
-                                if vc.fromNotification{
-                                    vc.dismiss(animated: true, completion: {
-                                        openEditor()
-                                    })
-                                } else {
-                                    vc.navigationController?.popViewController(animated: true)
-                                    openEditor()
-                                }
-                            } else if UIApplication.shared.visibleViewController is UIAlertController {
-                                let vc = UIApplication.shared.visibleViewController as! UIAlertController
-                                vc.dismiss(animated: true, completion: {
-                                    openEditor()
-                                })
-                            } else {
-                                openEditor()
-                            }
-                        } else {
-                            func openEditor() {
-                                let editorGroupVC = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "editorGroupVC") as! EditorGroup
-                                editorGroupVC.hidesBottomBarWhenPushed = true
-                                editorGroupVC.unique_l_pin = threadIdentifier
-                                editorGroupVC.fromNotification = true
-                                let navigationController = UINavigationController(rootViewController: editorGroupVC)
-                                navigationController.modalPresentationStyle = .fullScreen
-                                navigationController.navigationBar.tintColor = .white
-                                navigationController.navigationBar.barTintColor = .mainColor
-                                navigationController.navigationBar.isTranslucent = false
-                                let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-                                navigationController.navigationBar.titleTextAttributes = textAttributes
-                                navigationController.view.backgroundColor = .mainColor
-                                if UIApplication.shared.visibleViewController?.navigationController != nil {
-                                    UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                                } else {
-                                    UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                                }
-                            }
-                            if UIApplication.shared.visibleViewController is UINavigationController {
-                                let nc = UIApplication.shared.visibleViewController as! UINavigationController
-                                if nc.visibleViewController is QmeraStreamingViewController {
-                                    let vc = nc.visibleViewController as! QmeraStreamingViewController
-                                    var alert = UIAlertController(title: "", message: "Are you sure you want to end Live Streaming, and open notification?".localized(), preferredStyle: .alert)
-                                    if !vc.isLive {
-                                        alert = UIAlertController(title: "", message: "Are you sure you want to leave Live Streaming, and open notification?".localized(), preferredStyle: .alert)
-                                    }
-                                    alert.addAction(UIAlertAction(title: "No".localized(), style: UIAlertAction.Style.default, handler: nil))
-                                    alert.addAction(UIAlertAction(title: "Yes".localized(), style: UIAlertAction.Style.default, handler: { _ in
-                                        DispatchQueue.global().async {
-                                            API.terminateBC(sBroadcasterID: vc.isLive ? nil : vc.data)
-                                            vc.sendLeft()
-                                        }
-                                        vc.dismiss(animated: true, completion: {
-                                            openEditor()
-                                        })
-                                    }))
-                                    nc.present(alert, animated: true, completion: nil)
-//                                    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "isRunningStreaming"), object: nil, userInfo: dataMessage)
-                                } else if nc.visibleViewController is EditorGroup {
-                                    let vc = nc.visibleViewController as! EditorGroup
-                                    if vc.fromNotification {
-                                        vc.dismiss(animated: true, completion: {
-                                            openEditor()
-                                        })
-                                    } else {
-                                        vc.navigationController?.popViewController(animated: true)
-                                        openEditor()
-                                    }
-                                } else {
-                                    openEditor()
-                                }
-                            } else if UIApplication.shared.visibleViewController is EditorGroup {
-                                let vc = UIApplication.shared.visibleViewController as! EditorGroup
-                                if vc.fromNotification {
-                                    vc.dismiss(animated: true, completion: {
-                                        openEditor()
-                                    })
-                                } else {
-                                    vc.navigationController?.popViewController(animated: true)
-                                    openEditor()
-                                }
-                            } else if UIApplication.shared.visibleViewController is UIAlertController {
-                                let vc = UIApplication.shared.visibleViewController as! UIAlertController
-                                vc.dismiss(animated: true, completion: {
-                                    openEditor()
-                                })
-                            } else {
-                                openEditor()
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-    
-    public static func addFriend(fpin: String, completion: @escaping (Bool) -> ()) {
-        DispatchQueue.global().async {
-            if let response = Nexilis.writeAndWait(message: CoreMessage_TMessageBank.getAddFriendQRCode(fpin: fpin)), response.isOk() {
-                completion(true)
-            } else {
-                completion(false)
-            }
-        }
-    }
-    
-    public func onReceive(message: [AnyHashable : Any?]) {
-        var dataMessage: [AnyHashable : Any] = [:]
-        dataMessage["message"] = message
-        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "onReceiveChat"), object: nil, userInfo: dataMessage)
-    }
-    
-    public func onMessage(message: TMessage) {
-        var dataMessage: [AnyHashable : Any] = [:]
-        dataMessage["message"] = message
-        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "onMessageChat"), object: nil, userInfo: dataMessage)
-    }
-    
-    public func onUpload(name: String, progress: Double) {
-        var dataMessage: [AnyHashable : Any] = [:]
-        dataMessage["name"] = name
-        dataMessage["progress"] = progress
-        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "onUploadChat"), object: nil, userInfo: dataMessage)
-    }
-    
-    public func onTyping(message: TMessage) {
-        var dataMessage: [AnyHashable : Any] = [:]
-        dataMessage["message"] = message
-        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "onTypingChat"), object: nil, userInfo: dataMessage)
-    }
-    
-//    public static func faceDetect(fd: FaceDetector?,image: UIImage, completion: ((Bool) -> ())?){
-//        print("enter vision")
-//        let visionImage = VisionImage(image: image)
-//        print("exit vision")
-//        var retval = false
-//        visionImage.orientation = image.imageOrientation
-//        var fd1 : FaceDetector?
-//        if(fd == nil){
-//            fd1 = FaceDetector.faceDetector()
-//        }
-//        else {
-//            fd1 = fd
-//        }
-//
-//        // [START detect_faces]
-//        fd1?.process(visionImage) {faces, error in
-//            guard error == nil, let faces = faces, !faces.isEmpty else {
-//              print("faces empty")
-//                completion?(false)
-//                return
-//            }
-//            if(faces.count > 0){
-//                print("face count: \(faces.count)")
-//                retval = true
-//            }
-//            completion?(retval)
-//        }
-//
-//    }
-}
-
-extension Nexilis: GroupDelegate {
-    public func onGroup(code: String, f_pin: String, groupId: String) {
-        var data: [AnyHashable : Any] = [:]
-        data["code"] = code
-        data["f_pin"] = f_pin
-        data["groupId"] = groupId
-        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "onGroup"), object: nil, userInfo: data)
-    }
-    
-    public func onTopic(code: String, f_pin: String, topicId: String) {
-        var data: [AnyHashable : Any] = [:]
-        data["code"] = code
-        data["f_pin"] = f_pin
-        data["topicId"] = topicId
-        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "onTopic"), object: nil, userInfo: data)
-    }
-    
-    public func onMember(code: String, f_pin: String, groupId: String, member: String) {
-        var data: [AnyHashable : Any] = [:]
-        data["code"] = code
-        data["f_pin"] = f_pin
-        data["groupId"] = groupId
-        data["member"] = member
-        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "onMember"), object: nil, userInfo: data)
-    }
-    
-    
-}
-
-extension Nexilis: PersonInfoDelegate {
-    public func onUpdatePersonInfo(state: Int, message: String) {
-        var data: [AnyHashable : Any] = [:]
-        data["state"] = state
-        data["message"] = message
-        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "onUpdatePersonInfo"), object: nil, userInfo: data)
-    }
-}
-
-extension Nexilis: QLPreviewControllerDataSource {
-    public func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
-        return 1
-    }
-    
-    public func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
-        return previewItem!
-    }
-}

+ 11 - 13
appbuilder-ios/NexilisLite/NexilisLite.podspec

@@ -8,33 +8,31 @@
 
 Pod::Spec.new do |spec|
   spec.name         = "NexilisLite"
-  spec.version      = "1.0.2"
+  spec.version      = "1.0.3"
   spec.summary      = "NexilisLite Framework"
   spec.description  = <<-DESC
   NexilisLite Framework, embed Contact Center, Live Streaming, Push Notifications, Instant Messaging, Video and VoIP Calling features into your mobile apps within minutes...
                    DESC
 
-  spec.homepage     = "https://github.com/yayandw/qmeralite/"
+  spec.homepage     = "https://newuniverse.io/"
   spec.license      = "MIT"
   spec.author       = { "Yayan D Wicaksono" => "ya2n.wicaksono@gmail.com" }
   spec.ios.deployment_target = "14.0"
-  # spec.source       = { :http => 'https://github.com/yayandw/QmeraLite/releases/download/v1.0.2/QmeraLite.zip' }
+#  spec.source       = { :http => 'https://newuniverse.io/UCPaaSiOS/releases/download/NexilisLiteiOS/v1.0.3/NexilisLite.zip' }
   spec.source       = { :path => '.' }
   spec.source_files = 'NexilisLite/Source/**/*'
   spec.resource_bundles = { 'NexilisLite' => ['NexilisLite/Resource/**/*']}
   spec.swift_version = '5.5.1'
   spec.dependency 'FMDB', '~> 2.7.5'
-  # spec.dependency 'nuSDKService', '~> 0.0.7'
-  spec.dependency 'NotificationBannerSwift', '~> 3.0.0'
-  spec.dependency 'ReadabilityKit'
-  spec.dependency 'Alamofire', '~> 5.5'
-  spec.dependency 'SDWebImage', '~> 5.0'
+  spec.dependency 'nuSDKService', '~> 0.0.8'
+  spec.dependency 'NotificationBannerSwift', '~> 3.2.1'
+  spec.dependency 'Alamofire', '~> 5.7.0'
+  spec.dependency 'SDWebImage', '~> 5.15.7'
   spec.dependency 'Toast-Swift', '~> 5.0.1'
-  spec.dependency 'Zip', '~> 2.1'
-  # spec.dependency 'iOS-WebP'
-  # spec.preserve_path = 'NexilisLite.framework'
-  # spec.xcconfig = { 'OTHER_LDFLAGS' => '-framework NexilisLite' }
-  spec.ios.vendored_frameworks = "NexilisLite.framework", "Frameworks/nuSDKService.framework"
+# spec.dependency 'iOS-WebP'
+#  spec.preserve_path = 'NexilisLite.framework'
+#  spec.xcconfig = { 'OTHER_LDFLAGS' => '-framework NexilisLite' }
+  spec.ios.vendored_frameworks = "NexilisLite.framework"
   spec.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64', 'ENABLE_BITCODE' => 'NO' }
   spec.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64', 'ENABLE_BITCODE' => 'NO' }
 end

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 735 - 587
appbuilder-ios/NexilisLite/NexilisLite.xcodeproj/project.pbxproj


BIN
appbuilder-ios/NexilisLite/NexilisLite.xcodeproj/project.xcworkspace/xcuserdata/akhmadalqindiirsyam.xcuserdatad/UserInterfaceState.xcuserstate


BIN
appbuilder-ios/NexilisLite/NexilisLite.xcodeproj/project.xcworkspace/xcuserdata/qindi.xcuserdatad/UserInterfaceState.xcuserstate


BIN
appbuilder-ios/NexilisLite/NexilisLite.xcodeproj/project.xcworkspace/xcuserdata/yayandwi.xcuserdatad/UserInterfaceState.xcuserstate


+ 17 - 5
appbuilder-ios/NexilisLite/NexilisLite.xcodeproj/xcshareddata/xcschemes/QmeraLite.xcscheme → appbuilder-ios/NexilisLite/NexilisLite.xcodeproj/xcshareddata/xcschemes/NexilisLite.xcscheme

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "1250"
-   version = "1.3">
+   LastUpgradeVersion = "1430"
+   version = "1.7">
    <BuildAction
       parallelizeBuildables = "YES"
       buildImplicitDependencies = "YES">
@@ -14,7 +14,7 @@
             buildForAnalyzing = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
-               BlueprintIdentifier = "6B16CC96273CC66B00F9E528"
+               BlueprintIdentifier = "CD1E6E672A0B7C3600BF871F"
                BuildableName = "NexilisLite.framework"
                BlueprintName = "NexilisLite"
                ReferencedContainer = "container:NexilisLite.xcodeproj">
@@ -26,8 +26,20 @@
       buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      shouldAutocreateTestPlan = "YES">
       <Testables>
+         <TestableReference
+            skipped = "NO"
+            parallelizable = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "CD1E6E712A0B7C3600BF871F"
+               BuildableName = "NexilisLiteTests.xctest"
+               BlueprintName = "NexilisLiteTests"
+               ReferencedContainer = "container:NexilisLite.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
       </Testables>
    </TestAction>
    <LaunchAction
@@ -50,7 +62,7 @@
       <MacroExpansion>
          <BuildableReference
             BuildableIdentifier = "primary"
-            BlueprintIdentifier = "6B16CC96273CC66B00F9E528"
+            BlueprintIdentifier = "CD1E6E672A0B7C3600BF871F"
             BuildableName = "NexilisLite.framework"
             BlueprintName = "NexilisLite"
             ReferencedContainer = "container:NexilisLite.xcodeproj">

+ 13 - 0
appbuilder-ios/NexilisLite/NexilisLite/NexilisLite.docc/NexilisLite.md

@@ -0,0 +1,13 @@
+# ``NexilisLite``
+
+<!--@START_MENU_TOKEN@-->Summary<!--@END_MENU_TOKEN@-->
+
+## Overview
+
+<!--@START_MENU_TOKEN@-->Text<!--@END_MENU_TOKEN@-->
+
+## Topics
+
+### <!--@START_MENU_TOKEN@-->Group<!--@END_MENU_TOKEN@-->
+
+- <!--@START_MENU_TOKEN@-->``Symbol``<!--@END_MENU_TOKEN@-->

+ 18 - 0
appbuilder-ios/NexilisLite/NexilisLite/NexilisLite.h

@@ -0,0 +1,18 @@
+//
+//  NexilisLite.h
+//  NexilisLite
+//
+//  Created by Akhmad Al Qindi Irsyam on 10/05/23.
+//
+
+#import <Foundation/Foundation.h>
+
+//! Project version number for NexilisLite.
+FOUNDATION_EXPORT double NexilisLiteVersionNumber;
+
+//! Project version string for NexilisLite.
+FOUNDATION_EXPORT const unsigned char NexilisLiteVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import <NexilisLite/PublicHeader.h>
+
+

+ 3 - 0
appbuilder-ios/NexilisLite/NexilisLite/Resource/id.lproj/Localizable.strings

@@ -289,3 +289,6 @@
 "from CS Account?" = "dari Akun CS";
 "from Internal Account?" = "dari Akun Internal";
 "Invalid password" = "Kata sandi salah";
+"Start Chat" = "Mulai Obrolan";
+"Start Audio Call" = "Mulai Panggilan Suara";
+"Start Video Call" = "Mualai Panngilan Video";

+ 314 - 0
appbuilder-ios/NexilisLite/NexilisLite/Source/APIS.swift

@@ -6,3 +6,317 @@
 //
 
 import Foundation
+import AVFoundation
+import AVKit
+import UIKit
+import FMDB
+import NotificationBannerSwift
+
+public class APIS: NSObject {
+    public static func connect(apiKey: String, delegate: ConnectDelegate, showButton: Bool = true) {
+        Nexilis.connect(apiKey: apiKey, delegate: delegate, showButton: showButton)
+    }
+    
+    public static func getTotalCounter() -> Int32 {
+        var counter: Int32?
+        Database.shared.database?.inTransaction({ (fmdb, rollback) in
+            if let cursor = Database.shared.getRecords(fmdb: fmdb, query: "SELECT SUM(counter) FROM MESSAGE_SUMMARY"), cursor.next() {
+                counter = cursor.int(forColumnIndex: 0)
+                cursor.close()
+            }
+        })
+        return counter ?? 0
+    }
+    
+    private static func showChangeProfile() {
+        let alert = UIAlertController(title: "Change Profile".localized(), message: "You must change your name to use this feature".localized(), preferredStyle: .alert)
+        alert.addAction(UIAlertAction(title: "OK".localized(), style: UIAlertAction.Style.default, handler: {(_) in
+            let controller = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "signupsignin") as! SignUpSignIn
+            controller.forceLogin = true
+            let navigationController = UINavigationController(rootViewController: controller)
+            navigationController.defaultStyle()
+            if UIApplication.shared.visibleViewController?.navigationController != nil {
+                UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
+            } else {
+                UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
+            }
+        }))
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(alert, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(alert, animated: true, completion: nil)
+        }
+    }
+    
+    public static func openContactCenter() {
+        let isChangeProfile = Utils.getSetProfile()
+        if !isChangeProfile {
+            APIS.showChangeProfile()
+            return
+        }
+        let isWaitingRequestCC = UserDefaults.standard.bool(forKey: "waitingRequestCC")
+        if isWaitingRequestCC {
+            let imageView = UIImageView(image: UIImage(systemName: "info.circle"))
+            imageView.tintColor = .white
+            let banner = FloatingNotificationBanner(title: "You have requested Call Center, please wait for response.".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .info, colors: nil, iconPosition: .center)
+            banner.show()
+            return
+        }
+        let controller = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "editorPersonalVC") as! EditorPersonal
+        controller.isContactCenter = true
+        let navigationController = UINavigationController(rootViewController: controller)
+        navigationController.defaultStyle()
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
+        }
+    }
+    
+    public static func openUrl(url: String) {
+        let isChangeProfile = Utils.getSetProfile()
+        if !isChangeProfile {
+            APIS.showChangeProfile()
+            return
+        }
+        let controller = BNIBookingWebView()
+        controller.customUrl = url
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(controller, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(controller, animated: true, completion: nil)
+        }
+    }
+    
+    public static func openNotificationCenter() {
+        let isChangeProfile = Utils.getSetProfile()
+        if !isChangeProfile {
+            APIS.showChangeProfile()
+            return
+        }
+        let controller = HistoryBroadcastViewController()
+        let navigationController = UINavigationController(rootViewController: controller)
+        navigationController.defaultStyle()
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
+        }
+    }
+    
+    public static func openChat() {
+        let isChangeProfile = Utils.getSetProfile()
+        if !isChangeProfile {
+            APIS.showChangeProfile()
+            return
+        }
+        let navigationController = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "contactChatNav") as! UINavigationController
+        let vc = navigationController.topViewController as! ContactChatViewController
+        vc.noUCList = true
+        navigationController.defaultStyle()
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
+        }
+    }
+    
+    public static func openCall() {
+        let isChangeProfile = Utils.getSetProfile()
+        if !isChangeProfile {
+            APIS.showChangeProfile()
+            return
+        }
+        let callContact = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "contactSID")
+        let navigationController = UINavigationController(rootViewController: callContact)
+        navigationController.defaultStyle()
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
+        }
+    }
+    
+    public static func openStreaming() {
+        let isChangeProfile = Utils.getSetProfile()
+        if !isChangeProfile {
+            APIS.showChangeProfile()
+            return
+        }
+        let navigationController = UINavigationController(rootViewController: QmeraCreateStreamingViewController())
+        navigationController.defaultStyle()
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
+        }
+    }
+    
+    public static func openAudioCall() {
+        let isChangeProfile = Utils.getSetProfile()
+        if !isChangeProfile {
+            APIS.showChangeProfile()
+            return
+        }
+        let callContact = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "contactSID") as! ContactCallViewController
+        callContact.onlyAudioOrVideo = 1
+        let navigationController = UINavigationController(rootViewController: callContact)
+        navigationController.defaultStyle()
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
+        }
+    }
+    
+    public static func openVideoCall() {
+        let isChangeProfile = Utils.getSetProfile()
+        if !isChangeProfile {
+            APIS.showChangeProfile()
+            return
+        }
+        let callContact = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "contactSID") as! ContactCallViewController
+        callContact.onlyAudioOrVideo = 2
+        let navigationController = UINavigationController(rootViewController: callContact)
+        navigationController.defaultStyle()
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
+        }
+    }
+    
+    public static func openBroadcastForm() {
+        let isChangeProfile = Utils.getSetProfile()
+        if !isChangeProfile {
+            APIS.showChangeProfile()
+            return
+        }
+        let controller = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "broadcastNav")
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(controller, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(controller, animated: true, completion: nil)
+        }
+    }
+    
+    public static func startConversation() {
+        let isChangeProfile = Utils.getSetProfile()
+        if !isChangeProfile {
+            APIS.showChangeProfile()
+            return
+        }
+        let navigationController = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "contactChatNav") as! UINavigationController
+        navigationController.defaultStyle()
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
+        }
+    }
+    
+    public static func openFavoriteMessage() {
+        let isChangeProfile = Utils.getSetProfile()
+        if !isChangeProfile {
+            APIS.showChangeProfile()
+            return
+        }
+        let editorStaredVC = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "staredVC") as! EditorStarMessages
+        editorStaredVC.fromNotification = true
+        let navigationController = UINavigationController(rootViewController: editorStaredVC)
+        navigationController.defaultStyle()
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
+        }
+    }
+    
+    public static func openCreateGroup() {
+        let isChangeProfile = Utils.getSetProfile()
+        if !isChangeProfile {
+            APIS.showChangeProfile()
+            return
+        }
+        let controller = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "createGroupNav") as! UINavigationController
+        let vc = controller.topViewController as! GroupCreateViewController
+        vc.isDismiss = { id in
+            let controller = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "groupDetailView") as! GroupDetailViewController
+            controller.data = id
+            controller.fromNotification = true
+            let navigationController = UINavigationController(rootViewController: controller)
+            navigationController.defaultStyle()
+            DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
+                if UIApplication.shared.visibleViewController?.navigationController != nil {
+                    UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
+                } else {
+                    UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
+                }
+            })
+        }
+        controller.defaultStyle()
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(controller, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(controller, animated: true, completion: nil)
+        }
+    }
+    
+    public static func openAddFriend() {
+        let isChangeProfile = Utils.getSetProfile()
+        if !isChangeProfile {
+            APIS.showChangeProfile()
+            return
+        }
+        let controller = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "addFriendNav") as! UINavigationController
+        controller.defaultStyle()
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(controller, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(controller, animated: true, completion: nil)
+        }
+    }
+    
+    public static func openSignUpOrSignIn() {
+        let isChangeProfile = Utils.getSetProfile()
+        if !isChangeProfile {
+            APIS.showChangeProfile()
+            return
+        }
+        let controller = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "signupsignin") as! SignUpSignIn
+        controller.forceLogin = true
+        let navigationController = UINavigationController(rootViewController: controller)
+        navigationController.defaultStyle()
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
+        }
+    }
+    
+    public static func openSetting() {
+        let navigationController = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "settingNav") as! UINavigationController
+        navigationController.defaultStyle()
+        if UIApplication.shared.visibleViewController?.navigationController != nil {
+            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
+        } else {
+            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
+        }
+    }
+}
+
+extension UINavigationController {
+    func defaultStyle() {
+        self.modalPresentationStyle = .fullScreen
+        self.navigationBar.tintColor = .white
+        self.navigationBar.barTintColor = .mainColor
+        self.navigationBar.isTranslucent = false
+        self.navigationBar.overrideUserInterfaceStyle = .dark
+        self.navigationBar.barStyle = .black
+        let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white]
+        UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes, for: .normal)
+        let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
+        self.navigationBar.titleTextAttributes = textAttributes
+        self.view.backgroundColor = .mainColor
+    }
+}

+ 10 - 1
appbuilder-ios/NexilisLite/NexilisLite/Source/Extension.swift

@@ -933,9 +933,18 @@ extension Bundle {
             fatalError("Couldn't determine module name from class \(frameworkClass)")
         }
         
+        let frameworkBundle = Bundle(for: frameworkClass)
+        return frameworkBundle
+    }
+    
+    public static func resourcesMediaBundle(for frameworkClass: AnyClass) -> Bundle {
+        guard let moduleName = String(reflecting: frameworkClass).components(separatedBy: ".").first else {
+            fatalError("Couldn't determine module name from class \(frameworkClass)")
+        }
+        
         let frameworkBundle = Bundle(for: frameworkClass)
 
-        guard let resourceBundleURL = frameworkBundle.url(forResource: "NexilisLite", withExtension: "bundle"),
+        guard let resourceBundleURL = frameworkBundle.url(forResource: "NexilisLiteResources", withExtension: "bundle"),
               let resourceBundle = Bundle(url: resourceBundleURL) else {
             print("\(moduleName).bundle not found in \(frameworkBundle)")
             return frameworkBundle

+ 4 - 4
appbuilder-ios/NexilisLite/NexilisLite/Source/FloatingButton/FloatingButton.swift

@@ -327,22 +327,22 @@ public class FloatingButton: UIView {
     }
     
     @objc func fb1Tap() {
-        Nexilis.openContactCenter()
+        APIS.openContactCenter()
         hideButton()
     }
     
     @objc func fb2Tap() {
-        Nexilis.openChat()
+        APIS.startConversation()
         hideButton()
     }
     
     @objc func fb3Tap() {
-        Nexilis.openCall()
+        APIS.openCall()
         hideButton()
     }
     
     @objc func fb4Tap() {
-        Nexilis.openStreaming()
+        APIS.openStreaming()
         hideButton()
     }
     

+ 5 - 272
appbuilder-ios/NexilisLite/NexilisLite/Source/Nexilis.swift

@@ -476,235 +476,20 @@ public class Nexilis: NSObject {
         if index == 2 {
             Nexilis.openUrl(url: id)
         } else if index == 3 {
-            Nexilis.openNotificationCenter()
+            APIS.openNotificationCenter()
         } else if index == 6 {
-            Nexilis.openChat()
+            APIS.startConversation()
         } else if index == 7 {
-            Nexilis.openCall()
+            APIS.openCall()
         } else if index == 8 {
-            Nexilis.openStreaming()
+            APIS.openStreaming()
         } else if index == 9 {
-            Nexilis.openContactCenter()
+            APIS.openContactCenter()
         } else {
             Nexilis.openApp(id: id)
         }
     }
     
-    public static func openContactCenter() {
-        let isChangeProfile = Utils.getSetProfile()
-        if !isChangeProfile {
-            let alert = UIAlertController(title: "Change Profile".localized(), message: "You must change your name to use this feature".localized(), preferredStyle: .alert)
-            alert.addAction(UIAlertAction(title: "OK".localized(), style: UIAlertAction.Style.default, handler: {(_) in
-                let controller = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "signupsignin") as! SignUpSignIn
-                controller.forceLogin = true
-                let navigationController = UINavigationController(rootViewController: controller)
-                navigationController.modalPresentationStyle = .fullScreen
-                navigationController.navigationBar.tintColor = .white
-                navigationController.navigationBar.barTintColor = .mainColor
-                navigationController.navigationBar.isTranslucent = false
-                let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white]
-                UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes, for: .normal)
-                let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-                navigationController.navigationBar.titleTextAttributes = textAttributes
-                navigationController.view.backgroundColor = .mainColor
-                navigationController.navigationBar.overrideUserInterfaceStyle = .dark
-                navigationController.navigationBar.barStyle = .black
-                if UIApplication.shared.visibleViewController?.navigationController != nil {
-                    UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                } else {
-                    UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                }
-            }))
-            if UIApplication.shared.visibleViewController?.navigationController != nil {
-                UIApplication.shared.visibleViewController?.navigationController?.present(alert, animated: true, completion: nil)
-            } else {
-                UIApplication.shared.visibleViewController?.present(alert, animated: true, completion: nil)
-            }
-            return
-        }
-        let isWaitingRequestCC = UserDefaults.standard.bool(forKey: "waitingRequestCC")
-        if isWaitingRequestCC {
-            let imageView = UIImageView(image: UIImage(systemName: "info.circle"))
-            imageView.tintColor = .white
-            let banner = FloatingNotificationBanner(title: "You have requested Call Center, please wait for response.".localized(), subtitle: nil, titleFont: UIFont.systemFont(ofSize: 16), titleColor: nil, titleTextAlign: .left, subtitleFont: nil, subtitleColor: nil, subtitleTextAlign: nil, leftView: imageView, rightView: nil, style: .info, colors: nil, iconPosition: .center)
-            banner.show()
-            return
-        }
-        let controller = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "editorPersonalVC") as! EditorPersonal
-        controller.isContactCenter = true
-        let navigationController = UINavigationController(rootViewController: controller)
-        navigationController.modalPresentationStyle = .fullScreen
-        navigationController.navigationBar.tintColor = .white
-        navigationController.navigationBar.barTintColor = .mainColor
-        navigationController.navigationBar.isTranslucent = false
-        navigationController.navigationBar.overrideUserInterfaceStyle = .dark
-        navigationController.navigationBar.barStyle = .black
-        let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white]
-        UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes, for: .normal)
-        let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-        navigationController.navigationBar.titleTextAttributes = textAttributes
-        navigationController.view.backgroundColor = .mainColor
-        if UIApplication.shared.visibleViewController?.navigationController != nil {
-            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-        } else {
-            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-        }
-    }
-    
-    public static func openChat() {
-        let isChangeProfile = Utils.getSetProfile()
-        if !isChangeProfile {
-            let alert = UIAlertController(title: "Change Profile".localized(), message: "You must change your name to use this feature".localized(), preferredStyle: .alert)
-            alert.addAction(UIAlertAction(title: "OK".localized(), style: UIAlertAction.Style.default, handler: {(_) in
-                let controller = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "signupsignin") as! SignUpSignIn
-                controller.forceLogin = true
-                let navigationController = UINavigationController(rootViewController: controller)
-                navigationController.modalPresentationStyle = .fullScreen
-                navigationController.navigationBar.tintColor = .white
-                navigationController.navigationBar.barTintColor = .mainColor
-                navigationController.navigationBar.isTranslucent = false
-                navigationController.navigationBar.overrideUserInterfaceStyle = .dark
-                navigationController.navigationBar.barStyle = .black
-                let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white]
-                UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes, for: .normal)
-                let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-                navigationController.navigationBar.titleTextAttributes = textAttributes
-                navigationController.view.backgroundColor = .mainColor
-                if UIApplication.shared.visibleViewController?.navigationController != nil {
-                    UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                } else {
-                    UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                }
-            }))
-            if UIApplication.shared.visibleViewController?.navigationController != nil {
-                UIApplication.shared.visibleViewController?.navigationController?.present(alert, animated: true, completion: nil)
-            } else {
-                UIApplication.shared.visibleViewController?.present(alert, animated: true, completion: nil)
-            }
-            return
-        }
-        let navigationController = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "contactChatNav") as! UINavigationController
-        navigationController.modalPresentationStyle = .fullScreen
-        navigationController.navigationBar.tintColor = .white
-        navigationController.navigationBar.barTintColor = .mainColor
-        navigationController.navigationBar.isTranslucent = false
-        navigationController.navigationBar.overrideUserInterfaceStyle = .dark
-        navigationController.navigationBar.barStyle = .black
-        let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white]
-        UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes, for: .normal)
-        let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-        navigationController.navigationBar.titleTextAttributes = textAttributes
-        navigationController.view.backgroundColor = .mainColor
-        if UIApplication.shared.visibleViewController?.navigationController != nil {
-            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-        } else {
-            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-        }
-    }
-    
-    public static func openCall() {
-        let isChangeProfile = Utils.getSetProfile()
-        if !isChangeProfile {
-            let alert = UIAlertController(title: "Change Profile".localized(), message: "You must change your name to use this feature".localized(), preferredStyle: .alert)
-            alert.addAction(UIAlertAction(title: "OK".localized(), style: UIAlertAction.Style.default, handler: {(_) in
-                let controller = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "signupsignin") as! SignUpSignIn
-                controller.forceLogin = true
-                let navigationController = UINavigationController(rootViewController: controller)
-                navigationController.modalPresentationStyle = .fullScreen
-                navigationController.navigationBar.tintColor = .white
-                navigationController.navigationBar.barTintColor = .mainColor
-                navigationController.navigationBar.isTranslucent = false
-                navigationController.navigationBar.overrideUserInterfaceStyle = .dark
-                navigationController.navigationBar.barStyle = .black
-                let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white]
-                UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes, for: .normal)
-                let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-                navigationController.navigationBar.titleTextAttributes = textAttributes
-                navigationController.view.backgroundColor = .mainColor
-                if UIApplication.shared.visibleViewController?.navigationController != nil {
-                    UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                } else {
-                    UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                }
-            }))
-            if UIApplication.shared.visibleViewController?.navigationController != nil {
-                UIApplication.shared.visibleViewController?.navigationController?.present(alert, animated: true, completion: nil)
-            } else {
-                UIApplication.shared.visibleViewController?.present(alert, animated: true, completion: nil)
-            }
-            return
-        }
-        let callContact = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "contactSID")
-        let navigationController = UINavigationController(rootViewController: callContact)
-        navigationController.modalPresentationStyle = .fullScreen
-        navigationController.navigationBar.tintColor = .white
-        navigationController.navigationBar.barTintColor = .mainColor
-        navigationController.navigationBar.isTranslucent = false
-        navigationController.navigationBar.overrideUserInterfaceStyle = .dark
-        navigationController.navigationBar.barStyle = .black
-        let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white]
-        UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes, for: .normal)
-        let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-        navigationController.navigationBar.titleTextAttributes = textAttributes
-        navigationController.view.backgroundColor = .mainColor
-        if UIApplication.shared.visibleViewController?.navigationController != nil {
-            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-        } else {
-            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-        }
-    }
-    
-    public static func openStreaming() {
-        let isChangeProfile = Utils.getSetProfile()
-        if !isChangeProfile {
-            let alert = UIAlertController(title: "Change Profile".localized(), message: "You must change your name to use this feature".localized(), preferredStyle: .alert)
-            alert.addAction(UIAlertAction(title: "OK".localized(), style: UIAlertAction.Style.default, handler: {(_) in
-                let controller = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "signupsignin") as! SignUpSignIn
-                controller.forceLogin = true
-                let navigationController = UINavigationController(rootViewController: controller)
-                navigationController.modalPresentationStyle = .fullScreen
-                navigationController.navigationBar.tintColor = .white
-                navigationController.navigationBar.barTintColor = .mainColor
-                navigationController.navigationBar.isTranslucent = false
-                navigationController.navigationBar.overrideUserInterfaceStyle = .dark
-                navigationController.navigationBar.barStyle = .black
-                let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white]
-                UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes, for: .normal)
-                let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-                navigationController.navigationBar.titleTextAttributes = textAttributes
-                navigationController.view.backgroundColor = .mainColor
-                if UIApplication.shared.visibleViewController?.navigationController != nil {
-                    UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                } else {
-                    UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                }
-            }))
-            if UIApplication.shared.visibleViewController?.navigationController != nil {
-                UIApplication.shared.visibleViewController?.navigationController?.present(alert, animated: true, completion: nil)
-            } else {
-                UIApplication.shared.visibleViewController?.present(alert, animated: true, completion: nil)
-            }
-            return
-        }
-        let navigationController = UINavigationController(rootViewController: QmeraCreateStreamingViewController())
-        navigationController.modalPresentationStyle = .fullScreen
-        navigationController.navigationBar.tintColor = .white
-        navigationController.navigationBar.barTintColor = .mainColor
-        navigationController.navigationBar.isTranslucent = false
-        navigationController.navigationBar.overrideUserInterfaceStyle = .dark
-        navigationController.navigationBar.barStyle = .black
-        let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white]
-        UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes, for: .normal)
-        let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-        navigationController.navigationBar.titleTextAttributes = textAttributes
-        navigationController.view.backgroundColor = .mainColor
-        if UIApplication.shared.visibleViewController?.navigationController != nil {
-            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-        } else {
-            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-        }
-    }
-    
     public static func openUrl(isBNI: Bool = false, url: String = "") {
         let isChangeProfile = Utils.getSetProfile()
         if !isChangeProfile {
@@ -748,58 +533,6 @@ public class Nexilis: NSObject {
         }
     }
     
-    public static func openNotificationCenter() {
-        let isChangeProfile = Utils.getSetProfile()
-        if !isChangeProfile {
-            let alert = UIAlertController(title: "Change Profile".localized(), message: "You must change your name to use this feature".localized(), preferredStyle: .alert)
-            alert.addAction(UIAlertAction(title: "OK".localized(), style: UIAlertAction.Style.default, handler: {(_) in
-                let controller = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "signupsignin") as! SignUpSignIn
-                controller.forceLogin = true
-                let navigationController = UINavigationController(rootViewController: controller)
-                navigationController.modalPresentationStyle = .fullScreen
-                navigationController.navigationBar.tintColor = .white
-                navigationController.navigationBar.barTintColor = .mainColor
-                navigationController.navigationBar.isTranslucent = false
-                navigationController.navigationBar.overrideUserInterfaceStyle = .dark
-                navigationController.navigationBar.barStyle = .black
-                let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white]
-                UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes, for: .normal)
-                let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-                navigationController.navigationBar.titleTextAttributes = textAttributes
-                navigationController.view.backgroundColor = .mainColor
-                if UIApplication.shared.visibleViewController?.navigationController != nil {
-                    UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-                } else {
-                    UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-                }
-            }))
-            if UIApplication.shared.visibleViewController?.navigationController != nil {
-                UIApplication.shared.visibleViewController?.navigationController?.present(alert, animated: true, completion: nil)
-            } else {
-                UIApplication.shared.visibleViewController?.present(alert, animated: true, completion: nil)
-            }
-            return
-        }
-        let controller = HistoryBroadcastViewController()
-        let navigationController = UINavigationController(rootViewController: controller)
-        navigationController.modalPresentationStyle = .fullScreen
-        navigationController.navigationBar.tintColor = .white
-        navigationController.navigationBar.barTintColor = .mainColor
-        navigationController.navigationBar.isTranslucent = false
-        navigationController.navigationBar.overrideUserInterfaceStyle = .dark
-        navigationController.navigationBar.barStyle = .black
-        let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white]
-        UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes, for: .normal)
-        let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
-        navigationController.navigationBar.titleTextAttributes = textAttributes
-        navigationController.view.backgroundColor = .mainColor
-        if UIApplication.shared.visibleViewController?.navigationController != nil {
-            UIApplication.shared.visibleViewController?.navigationController?.present(navigationController, animated: true, completion: nil)
-        } else {
-            UIApplication.shared.visibleViewController?.present(navigationController, animated: true, completion: nil)
-        }
-    }
-    
     public static func openApp(id: String) {
         print("openApp itms-apps://apple.com/app/\(id)")
         let isChangeProfile = Utils.getSetProfile()

+ 39 - 39
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/EditorGroup.swift

@@ -9,7 +9,7 @@ import UIKit
 import AVKit
 import AVFoundation
 import QuickLook
-import ReadabilityKit
+//import ReadabilityKit
 import Photos
 import NotificationBannerSwift
 import nuSDKService
@@ -162,7 +162,7 @@ public class EditorGroup: UIViewController {
         documentPicker = DocumentPicker(presentationController: self, delegate: self)
         
         let fm = FileManager.default
-        let path = Bundle.resourceBundle(for: Nexilis.self).resourcePath!
+        let path = Bundle.resourcesMediaBundle(for: Nexilis.self).resourcePath!
         let items = try! fm.contentsOfDirectory(atPath: path)
         
         for item in items {
@@ -1871,41 +1871,41 @@ extension EditorGroup: UITextViewDelegate {
                     }
                 } else {
                     let urlData = URL(string: stringURl)!
-                    Readability.parse(url: urlData, completion: { data in
-                        if data != nil {
-                            let title = data!.title
-                            let description = data!.description
-                            let imageUrl = data!.topImage
-                            Database.shared.database?.inTransaction({ (fmdb, rollback) in
-                                do {
-                                    var dataJson: [String: Any] = [:]
-                                    dataJson["title"] = title
-                                    dataJson["description"] = description
-                                    dataJson["imageUrl"] = imageUrl
-                                    dataJson["link"] = text
-                                    guard let json = String(data: try! JSONSerialization.data(withJSONObject: dataJson, options: []), encoding: String.Encoding.utf8) else {
-                                        return
-                                    }
-                                    _ = try Database.shared.insertRecord(fmdb: fmdb, table: "LINK_PREVIEW", cvalues: [
-                                        "id" : "\(Date().currentTimeMillis().toHex())",
-                                        "link" : text,
-                                        "data_link" : json,
-                                        "retry": 0
-                                    ], replace: true)
-                                } catch {
-                                    rollback.pointee = true
-                                    print(error)
-                                }
-                            })
-                            if self.showingLink != text {
-                                self.showingLink = text
-                                self.deleteLinkPreview()
-                                self.buildPreviewLink(imageUrl: imageUrl, title: title, description: description, stringURl: text)
-                            } else {
-                                self.deleteLinkPreview()
-                            }
-                        }
-                    })
+//                    Readability.parse(url: urlData, completion: { data in
+//                        if data != nil {
+//                            let title = data!.title
+//                            let description = data!.description
+//                            let imageUrl = data!.topImage
+//                            Database.shared.database?.inTransaction({ (fmdb, rollback) in
+//                                do {
+//                                    var dataJson: [String: Any] = [:]
+//                                    dataJson["title"] = title
+//                                    dataJson["description"] = description
+//                                    dataJson["imageUrl"] = imageUrl
+//                                    dataJson["link"] = text
+//                                    guard let json = String(data: try! JSONSerialization.data(withJSONObject: dataJson, options: []), encoding: String.Encoding.utf8) else {
+//                                        return
+//                                    }
+//                                    _ = try Database.shared.insertRecord(fmdb: fmdb, table: "LINK_PREVIEW", cvalues: [
+//                                        "id" : "\(Date().currentTimeMillis().toHex())",
+//                                        "link" : text,
+//                                        "data_link" : json,
+//                                        "retry": 0
+//                                    ], replace: true)
+//                                } catch {
+//                                    rollback.pointee = true
+//                                    print(error)
+//                                }
+//                            })
+//                            if self.showingLink != text {
+//                                self.showingLink = text
+//                                self.deleteLinkPreview()
+//                                self.buildPreviewLink(imageUrl: imageUrl, title: title, description: description, stringURl: text)
+//                            } else {
+//                                self.deleteLinkPreview()
+//                            }
+//                        }
+//                    })
                 }
             } else {
                 deleteLinkPreview()
@@ -2704,7 +2704,7 @@ extension EditorGroup: UICollectionViewDelegate, UICollectionViewDataSource {
             imageSticker.leadingAnchor.constraint(equalTo: cell.contentView.leadingAnchor),
             imageSticker.trailingAnchor.constraint(equalTo: cell.contentView.trailingAnchor)
         ])
-        imageSticker.image = UIImage(named: stickers[indexPath.row], in: Bundle.resourceBundle(for: Nexilis.self), with: nil)
+        imageSticker.image = UIImage(named: stickers[indexPath.row], in: Bundle.resourcesMediaBundle(for: Nexilis.self), with: nil)
         return cell
     }
     
@@ -3317,7 +3317,7 @@ extension EditorGroup: UITableViewDelegate, UITableViewDataSource {
                 imageSticker.leadingAnchor.constraint(equalTo: containerMessage.leadingAnchor, constant: 15).isActive = true
                 imageSticker.bottomAnchor.constraint(equalTo: messageText.topAnchor, constant: -5).isActive = true
                 imageSticker.trailingAnchor.constraint(equalTo: containerMessage.trailingAnchor, constant: -15).isActive = true
-                imageSticker.image = UIImage(named: (textChat?.components(separatedBy: "/")[1])!, in: Bundle.resourceBundle(for: Nexilis.self), with: nil)
+                imageSticker.image = UIImage(named: (textChat?.components(separatedBy: "/")[1])!, in: Bundle.resourcesMediaBundle(for: Nexilis.self), with: nil)
                 imageSticker.contentMode = .scaleAspectFit
             }
             else {

+ 39 - 39
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/EditorPersonal.swift

@@ -9,7 +9,7 @@ import UIKit
 import AVKit
 import AVFoundation
 import QuickLook
-import ReadabilityKit
+//import ReadabilityKit
 import NotificationBannerSwift
 import Photos
 import nuSDKService
@@ -183,7 +183,7 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
         documentPicker = DocumentPicker(presentationController: self, delegate: self)
         
         let fm = FileManager.default
-        let path = Bundle.resourceBundle(for: Nexilis.self).resourcePath!
+        let path = Bundle.resourcesMediaBundle(for: Nexilis.self).resourcePath!
         let items = try! fm.contentsOfDirectory(atPath: path)
         
         for item in items {
@@ -2971,41 +2971,41 @@ extension EditorPersonal: UITextViewDelegate {
                     }
                 } else {
                     let urlData = URL(string: stringURl)!
-                    Readability.parse(url: urlData, completion: { data in
-                        if data != nil {
-                            let title = data!.title
-                            let description = data!.description
-                            let imageUrl = data!.topImage
-                            Database.shared.database?.inTransaction({ (fmdb, rollback) in
-                                do {
-                                    var dataJson: [String: Any] = [:]
-                                    dataJson["title"] = title
-                                    dataJson["description"] = description
-                                    dataJson["imageUrl"] = imageUrl
-                                    dataJson["link"] = text
-                                    guard let json = String(data: try! JSONSerialization.data(withJSONObject: dataJson, options: []), encoding: String.Encoding.utf8) else {
-                                        return
-                                    }
-                                    _ = try Database.shared.insertRecord(fmdb: fmdb, table: "LINK_PREVIEW", cvalues: [
-                                        "id" : "\(Date().currentTimeMillis().toHex())",
-                                        "link" : text,
-                                        "data_link" : json,
-                                        "retry": 0
-                                    ], replace: true)
-                                } catch {
-                                    rollback.pointee = true
-                                    print(error)
-                                }
-                            })
-                            if self.showingLink != text {
-                                self.showingLink = text
-                                self.deleteLinkPreview()
-                                self.buildPreviewLink(imageUrl: imageUrl, title: title, description: description, stringURl: text)
-                            }
-                        } else {
-                            self.deleteLinkPreview()
-                        }
-                    })
+//                    Readability.parse(url: urlData, completion: { data in
+//                        if data != nil {
+//                            let title = data!.title
+//                            let description = data!.description
+//                            let imageUrl = data!.topImage
+//                            Database.shared.database?.inTransaction({ (fmdb, rollback) in
+//                                do {
+//                                    var dataJson: [String: Any] = [:]
+//                                    dataJson["title"] = title
+//                                    dataJson["description"] = description
+//                                    dataJson["imageUrl"] = imageUrl
+//                                    dataJson["link"] = text
+//                                    guard let json = String(data: try! JSONSerialization.data(withJSONObject: dataJson, options: []), encoding: String.Encoding.utf8) else {
+//                                        return
+//                                    }
+//                                    _ = try Database.shared.insertRecord(fmdb: fmdb, table: "LINK_PREVIEW", cvalues: [
+//                                        "id" : "\(Date().currentTimeMillis().toHex())",
+//                                        "link" : text,
+//                                        "data_link" : json,
+//                                        "retry": 0
+//                                    ], replace: true)
+//                                } catch {
+//                                    rollback.pointee = true
+//                                    print(error)
+//                                }
+//                            })
+//                            if self.showingLink != text {
+//                                self.showingLink = text
+//                                self.deleteLinkPreview()
+//                                self.buildPreviewLink(imageUrl: imageUrl, title: title, description: description, stringURl: text)
+//                            }
+//                        } else {
+//                            self.deleteLinkPreview()
+//                        }
+//                    })
                 }
             } else {
                 deleteLinkPreview()
@@ -3835,7 +3835,7 @@ extension EditorPersonal: UICollectionViewDelegate, UICollectionViewDataSource {
             imageSticker.leadingAnchor.constraint(equalTo: cell.contentView.leadingAnchor),
             imageSticker.trailingAnchor.constraint(equalTo: cell.contentView.trailingAnchor)
         ])
-        imageSticker.image = UIImage(named: stickers[indexPath.row], in: Bundle.resourceBundle(for: Nexilis.self), with: nil)
+        imageSticker.image = UIImage(named: stickers[indexPath.row], in: Bundle.resourcesMediaBundle(for: Nexilis.self), with: nil)
         return cell
     }
     
@@ -4550,7 +4550,7 @@ extension EditorPersonal: UITableViewDelegate, UITableViewDataSource {
                 imageSticker.leadingAnchor.constraint(equalTo: containerMessage.leadingAnchor, constant: 15).isActive = true
                 imageSticker.bottomAnchor.constraint(equalTo: messageText.topAnchor, constant: -5).isActive = true
                 imageSticker.trailingAnchor.constraint(equalTo: containerMessage.trailingAnchor, constant: -15).isActive = true
-                imageSticker.image = UIImage(named: (textChat.components(separatedBy: "/")[1]), in: Bundle.resourceBundle(for: Nexilis.self), with: nil)
+                imageSticker.image = UIImage(named: (textChat.components(separatedBy: "/")[1]), in: Bundle.resourcesMediaBundle(for: Nexilis.self), with: nil)
                 imageSticker.contentMode = .scaleAspectFit
             } else if dataMessages[indexPath.row]["message_scope_id"] as! String == "18" {
                 let data = textChat

+ 17 - 1
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/EditorStarMessages.swift

@@ -16,10 +16,22 @@ public class EditorStarMessages: UIViewController, UITableViewDataSource, UITabl
     var dataMessages: [[String: Any?]] = []
     var dataDates: [String] = []
     var previewItem = NSURL()
+    var fromNotification = false
 
     public override func viewDidLoad() {
         super.viewDidLoad()
         
+        if fromNotification {
+            let imageButton = UIImageView(frame: CGRect(x: -16, y: 0, width: 20, height: 44))
+            imageButton.image = UIImage(systemName: "chevron.backward", withConfiguration: UIImage.SymbolConfiguration(pointSize: 20, weight: .regular, scale: .default))?.withTintColor(.white)
+            imageButton.contentMode = .left
+            let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didTapExit))
+            imageButton.isUserInteractionEnabled = true
+            imageButton.addGestureRecognizer(tapGestureRecognizer)
+            let leftItem = UIBarButtonItem(customView: imageButton)
+            self.navigationItem.leftBarButtonItem = leftItem
+        }
+        
         navigationController?.navigationBar.isTranslucent = false
         navigationController?.navigationBar.barTintColor = UIColor.mainColor
         navigationController?.navigationBar.tintColor = .white
@@ -55,6 +67,10 @@ public class EditorStarMessages: UIViewController, UITableViewDataSource, UITabl
 
     }
     
+    @objc func didTapExit() {
+        self.dismiss(animated: true, completion: nil)
+    }
+    
     @objc func onStatusChat(notification: NSNotification) {
         DispatchQueue.main.async {
             let data:[AnyHashable : Any] = notification.userInfo!
@@ -394,7 +410,7 @@ public class EditorStarMessages: UIViewController, UITableViewDataSource, UITabl
                 imageSticker.bottomAnchor.constraint(equalTo: messageText.topAnchor, constant: -5).isActive = true
                 imageSticker.trailingAnchor.constraint(equalTo: containerMessage.trailingAnchor).isActive = true
                 imageSticker.widthAnchor.constraint(equalToConstant: 80).isActive = true
-                imageSticker.image = UIImage(named: (textChat?.components(separatedBy: "/")[1])!, in: Bundle.resourceBundle(for: Nexilis.self), with: nil)
+                imageSticker.image = UIImage(named: (textChat?.components(separatedBy: "/")[1])!, in: Bundle.resourcesMediaBundle(for: Nexilis.self), with: nil)
                 imageSticker.contentMode = .scaleAspectFit
             }
             else {

+ 16 - 1
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Contact/ContactCallViewController.swift

@@ -27,6 +27,8 @@ class ContactCallViewController: UIViewController {
         return searchController.isActive && !isSearchBarEmpty
     }
     
+    var onlyAudioOrVideo = 0
+    
     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
         if (segue.identifier == "videoVC") {
             if !CheckConnection.isConnectedToNetwork() {
@@ -50,6 +52,11 @@ class ContactCallViewController: UIViewController {
     override func viewDidLoad() {
         super.viewDidLoad()
         title = "Start Call".localized()
+        if onlyAudioOrVideo == 1 {
+            title = "Start Audio Call".localized()
+        } else if onlyAudioOrVideo == 2 {
+            title = "Start Video Call".localized()
+        }
         let attributes = [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 16.0), NSAttributedString.Key.foregroundColor: UIColor.white]
         self.navigationController?.navigationBar.titleTextAttributes = attributes
         if (isAddParticipantVideo) {
@@ -223,7 +230,15 @@ extension ContactCallViewController: UITableViewDataSource {
             } else {
                 cell.namePerson.text = dataPerson[indexPath.row]["name"] as? String
             }
-            if (isAddParticipantVideo) {
+            if onlyAudioOrVideo == 1 {
+                if cell.videoCallButton != nil && cell.videoCallButton.isDescendant(of: cell) {
+                    cell.videoCallButton.removeFromSuperview()
+                    cell.audioCallButton.removeConstraints(cell.audioCallButton.constraints)
+                    cell.audioCallButton.anchor(right: cell.rightAnchor, paddingRight: 20.0, centerY: cell.centerYAnchor)
+                }
+            } else if onlyAudioOrVideo == 2 {
+                cell.audioCallButton.isHidden = true
+            } else if (isAddParticipantVideo) {
                 cell.audioCallButton.isHidden = true
                 cell.videoCallButton.isHidden = true
             } else {

+ 5 - 5
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Control/BackupRestoreView.swift

@@ -7,7 +7,7 @@
 
 import UIKit
 import QuickLook
-import Zip
+//import Zip
 import NotificationBannerSwift
 
 public class BackupRestoreView: UIViewController, UITableViewDataSource, UITableViewDelegate {
@@ -578,7 +578,7 @@ public class BackupRestoreView: UIViewController, UITableViewDataSource, UITable
         destinationURL.appendPathComponent("unzipItem\(Date().currentTimeMillis())")
         do {
             try fileManager.createDirectory(at: destinationURL, withIntermediateDirectories: true, attributes: nil)
-            try Zip.unzipFile(file, destination: destinationURL, overwrite: true, password: nil)
+//            try Zip.unzipFile(file, destination: destinationURL, overwrite: true, password: nil)
             
             let files = try FileManager.default.contentsOfDirectory(atPath: destinationURL.path)
             for file in files {
@@ -851,9 +851,9 @@ public class BackupRestoreView: UIViewController, UITableViewDataSource, UITable
             do {
                 try fileManager.createDirectory(at: destinationURL, withIntermediateDirectories: true, attributes: nil)
                 let zipFiles = destinationURL.appendingPathComponent(getFileName(option: choosenOption, fileId: fileIdBackup, withoutZIP: true)).appendingPathExtension("zip")
-                try Zip.zipFiles(paths: listFiles, zipFilePath: zipFiles, password: nil, progress: {progress in
-                    self.labelPreparing.text = "Preparing...".localized() + " \(progress * 100)%"
-                })
+//                try Zip.zipFiles(paths: listFiles, zipFilePath: zipFiles, password: nil, progress: {progress in
+//                    self.labelPreparing.text = "Preparing...".localized() + " \(progress * 100)%"
+//                })
                 self.labelPreparing.text = "Uploading...".localized()
                 Network().upload(fileUrl: zipFiles, completion: { result,progress in
                     if result {

+ 463 - 280
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Control/ContactChatViewController.swift

@@ -45,18 +45,37 @@ class ContactChatViewController: UITableViewController {
     
     var noData = false
     
+    var noUCList = false
+    
     func filterContentForSearchText(_ searchText: String) {
+        func filterContact() {
+            Utils.inTabChats = false
+            fillteredData = self.contacts.filter { $0.fullName.lowercased().contains(searchText.lowercased()) }
+        }
+        func filterGroup() {
+            Utils.inTabChats = false
+            fillteredData = self.groups.filter { $0.name.lowercased().contains(searchText.lowercased()) }
+        }
         if !searchText.isEmpty {
-            switch segment.selectedSegmentIndex {
-            case 1:
-                Utils.inTabChats = false
-                fillteredData = self.contacts.filter { $0.fullName.lowercased().contains(searchText.lowercased()) }
-            case 2:
-                Utils.inTabChats = false
-                fillteredData = self.groups.filter { $0.name.lowercased().contains(searchText.lowercased()) }
-            default:
-                Utils.inTabChats = true
-                fillteredData = self.chats.filter { $0.name.lowercased().contains(searchText.lowercased()) || $0.messageText.lowercased().contains(searchText.lowercased()) }
+            if segment.numberOfSegments == 3 {
+                switch segment.selectedSegmentIndex {
+                case 1:
+                    Utils.inTabChats = false
+                    fillteredData = self.contacts.filter { $0.fullName.lowercased().contains(searchText.lowercased()) }
+                case 2:
+                    Utils.inTabChats = false
+                    fillteredData = self.groups.filter { $0.name.lowercased().contains(searchText.lowercased()) }
+                default:
+                    Utils.inTabChats = true
+                    fillteredData = self.chats.filter { $0.name.lowercased().contains(searchText.lowercased()) || $0.messageText.lowercased().contains(searchText.lowercased()) }
+                }
+            } else {
+                switch segment.selectedSegmentIndex {
+                case 1:
+                    filterGroup()
+                default:
+                    filterContact()
+                }
             }
         }
         tableView.reloadData()
@@ -89,17 +108,7 @@ class ContactChatViewController: UITableViewController {
                 self?.navigationController?.present(controller, animated: true, completion: nil)
             }),
             UIAction(title: "Add Friends".localized(), image: UIImage(systemName: "person.badge.plus"), handler: {[weak self](_) in
-                let controller = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "addFriendNav") as! UINavigationController
-                if let vc = controller.viewControllers.first as? AddFriendTableViewController {
-                    vc.isDismiss = {
-                        self?.getContacts {
-                            DispatchQueue.main.async {
-                                self?.tableView.reloadData()
-                            }
-                        }
-                    }
-                }
-                self?.navigationController?.present(controller, animated: true, completion: nil)
+                self?.addFriend(sender: UIBarButtonItem())
             }),
 //            UIAction(title: "Configure Email", image: UIImage(systemName: "mail"), handler: {[weak self](_) in
 //
@@ -134,8 +143,13 @@ class ContactChatViewController: UITableViewController {
 //            }))
 //        }
         
-        let menu = UIMenu(title: "", children: childrenMenu)
-        navigationItem.rightBarButtonItem = UIBarButtonItem(title: nil, image: UIImage(systemName: "ellipsis"), primaryAction: .none, menu: menu)
+        if noUCList {
+            let buttonAddFriend = UIBarButtonItem(image: UIImage(systemName: "person.badge.plus", withConfiguration: UIImage.SymbolConfiguration(pointSize: 18, weight: .regular, scale: .default))?.withTintColor(.white), style: .plain, target: self, action: #selector(addFriend(sender:)))
+            navigationItem.rightBarButtonItem = buttonAddFriend
+        } else {
+            let menu = UIMenu(title: "", children: childrenMenu)
+            navigationItem.rightBarButtonItem = UIBarButtonItem(title: nil, image: UIImage(systemName: "ellipsis"), primaryAction: .none, menu: menu)
+        }
         
         searchController = UISearchController(searchResultsController: nil)
         searchController.delegate = self
@@ -155,7 +169,11 @@ class ContactChatViewController: UITableViewController {
         
         definesPresentationContext = true
         
-        segment = UISegmentedControl(items: ["Chats".localized(), "Contacts".localized(), "Groups".localized()])
+        var dataSegment = ["Chats".localized(), "Contacts".localized(), "Groups".localized()]
+        if noUCList{
+            dataSegment = ["Contacts".localized(), "Groups".localized()]
+        }
+        segment = UISegmentedControl(items: dataSegment)
         segment.sizeToFit()
         segment.selectedSegmentIndex = 0
         segment.addTarget(self, action: #selector(segmentChanged(sender:)), for: .valueChanged)
@@ -194,6 +212,9 @@ class ContactChatViewController: UITableViewController {
         if isChooser != nil {
             self.navigationController?.navigationBar.topItem?.title = "Forward Messages".localized()
             self.navigationController?.navigationBar.setNeedsLayout()
+        } else if noUCList{
+            self.navigationController?.navigationBar.topItem?.title = "Start Chat".localized()
+            self.navigationController?.navigationBar.setNeedsLayout()
         } else {
             self.navigationController?.navigationBar.topItem?.title = "Start Conversation".localized()
             self.navigationController?.navigationBar.setNeedsLayout()
@@ -217,6 +238,20 @@ class ContactChatViewController: UITableViewController {
         }
     }
     
+    @objc func addFriend(sender: UIBarButtonItem) {
+        let controller = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "addFriendNav") as! UINavigationController
+        if let vc = controller.viewControllers.first as? AddFriendTableViewController {
+            vc.isDismiss = {
+                self.getContacts {
+                    DispatchQueue.main.async {
+                        self.tableView.reloadData()
+                    }
+                }
+            }
+        }
+        navigationController?.present(controller, animated: true, completion: nil)
+    }
+    
 //    func removeAllData() {
 //        groups.removeAll()
 //        groupMap.removeAll()
@@ -504,45 +539,7 @@ extension ContactChatViewController {
             return
         }
         tableView.deselectRow(at: indexPath, animated: true)
-        switch segment.selectedSegmentIndex {
-        case 0:
-            let data: Chat
-            if isFilltering {
-                data = fillteredData[indexPath.row] as! Chat
-            } else {
-                data = chats[indexPath.row]
-            }
-            if let chooser = isChooser {
-                var exblock = User.getDataCanNil(pin: data.pin)?.ex_block
-                exblock = exblock == nil ? "0" : exblock!.isEmpty ? "0" : exblock!
-                if exblock != "0" {
-                    if exblock == "1" {
-                        self.view.makeToast("You blocked this user".localized())
-                    } else {
-                        self.view.makeToast("You have been blocked by this user".localized())
-                    }
-                    return
-                }
-                if data.pin == "-999"{
-                    return
-                }
-                chooser(data.messageScope, data.pin)
-                dismiss(animated: true, completion: nil)
-                return
-            }
-            if data.messageScope == "3" {
-                let editorPersonalVC = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "editorPersonalVC") as! EditorPersonal
-                editorPersonalVC.hidesBottomBarWhenPushed = true
-                editorPersonalVC.unique_l_pin = data.pin
-                navigationController?.show(editorPersonalVC, sender: nil)
-            } else {
-                groupMap.removeAll()
-                let editorGroupVC = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "editorGroupVC") as! EditorGroup
-                editorGroupVC.hidesBottomBarWhenPushed = true
-                editorGroupVC.unique_l_pin = data.pin
-                navigationController?.show(editorGroupVC, sender: nil)
-            }
-        case 1:
+        func selectOnContact() {
             let data: User
             if isFilltering {
                 data = fillteredData[indexPath.row] as! User
@@ -568,14 +565,70 @@ extension ContactChatViewController {
             editorPersonalVC.hidesBottomBarWhenPushed = true
             editorPersonalVC.unique_l_pin = data.pin
             navigationController?.show(editorPersonalVC, sender: nil)
-        case 2:
-            expandCollapseGroup(tableView: tableView, indexPath: indexPath)
-        default:
-            let data = contacts[indexPath.row]
-            let editorPersonalVC = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "editorPersonalVC") as! EditorPersonal
-            editorPersonalVC.hidesBottomBarWhenPushed = true
-            editorPersonalVC.unique_l_pin = data.pin
-            navigationController?.show(editorPersonalVC, sender: nil)
+        }
+        if segment.numberOfSegments == 3 {
+            switch segment.selectedSegmentIndex {
+            case 0:
+                let data: Chat
+                if isFilltering {
+                    data = fillteredData[indexPath.row] as! Chat
+                } else {
+                    data = chats[indexPath.row]
+                }
+                if let chooser = isChooser {
+                    var exblock = User.getDataCanNil(pin: data.pin)?.ex_block
+                    exblock = exblock == nil ? "0" : exblock!.isEmpty ? "0" : exblock!
+                    if exblock != "0" {
+                        if exblock == "1" {
+                            self.view.makeToast("You blocked this user".localized())
+                        } else {
+                            self.view.makeToast("You have been blocked by this user".localized())
+                        }
+                        return
+                    }
+                    if data.pin == "-999"{
+                        return
+                    }
+                    chooser(data.messageScope, data.pin)
+                    dismiss(animated: true, completion: nil)
+                    return
+                }
+                if data.messageScope == "3" {
+                    let editorPersonalVC = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "editorPersonalVC") as! EditorPersonal
+                    editorPersonalVC.hidesBottomBarWhenPushed = true
+                    editorPersonalVC.unique_l_pin = data.pin
+                    navigationController?.show(editorPersonalVC, sender: nil)
+                } else {
+                    groupMap.removeAll()
+                    let editorGroupVC = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "editorGroupVC") as! EditorGroup
+                    editorGroupVC.hidesBottomBarWhenPushed = true
+                    editorGroupVC.unique_l_pin = data.pin
+                    navigationController?.show(editorGroupVC, sender: nil)
+                }
+            case 1:
+                selectOnContact()
+            case 2:
+                expandCollapseGroup(tableView: tableView, indexPath: indexPath)
+            default:
+                let data = contacts[indexPath.row]
+                let editorPersonalVC = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "editorPersonalVC") as! EditorPersonal
+                editorPersonalVC.hidesBottomBarWhenPushed = true
+                editorPersonalVC.unique_l_pin = data.pin
+                navigationController?.show(editorPersonalVC, sender: nil)
+            }
+        } else {
+            switch segment.selectedSegmentIndex {
+            case 0:
+                selectOnContact()
+            case 1:
+                expandCollapseGroup(tableView: tableView, indexPath: indexPath)
+            default:
+                let data = contacts[indexPath.row]
+                let editorPersonalVC = AppStoryBoard.Palio.instance.instantiateViewController(identifier: "editorPersonalVC") as! EditorPersonal
+                editorPersonalVC.hidesBottomBarWhenPushed = true
+                editorPersonalVC.unique_l_pin = data.pin
+                navigationController?.show(editorPersonalVC, sender: nil)
+            }
         }
     }
     
@@ -716,12 +769,12 @@ extension ContactChatViewController {
     
     override func numberOfSections(in tableView: UITableView) -> Int {
         if isFilltering {
-            if segment.selectedSegmentIndex == 2 {
+            if ((segment.numberOfSegments == 3 && segment.selectedSegmentIndex == 2) || (segment.numberOfSegments < 3 && segment.selectedSegmentIndex == 1)) {
                 return fillteredData.count
             }
             return 1
         } else {
-            if segment.selectedSegmentIndex == 2 {
+            if ((segment.numberOfSegments == 3 && segment.selectedSegmentIndex == 2) || (segment.numberOfSegments < 3 && segment.selectedSegmentIndex == 1)) {
                 return groups.count
             }
             return 1
@@ -731,7 +784,7 @@ extension ContactChatViewController {
     override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
         var value = 0
         if isFilltering {
-            if segment.selectedSegmentIndex == 2, let groups = fillteredData as? [Group] {
+            func filterGroup(groups: [Group]) {
                 let group = groups[section]
                 if group.isSelected {
                     if let _ = groupMap[group.id] {
@@ -743,30 +796,54 @@ extension ContactChatViewController {
                 } else {
                     value = 1
                 }
+            }
+            if ((segment.numberOfSegments == 3 && segment.selectedSegmentIndex == 2) || (segment.numberOfSegments < 3 && segment.selectedSegmentIndex == 1)), let groups = fillteredData as? [Group] {
+                filterGroup(groups: groups)
             } else {
                 value = fillteredData.count
             }
             return value
         }
-        switch segment.selectedSegmentIndex {
-        case 0:
-            value = chats.count
-        case 1:
-            value = contacts.count
-        case 2:
-            let group = groups[section]
-            if group.isSelected {
-                if let _ = groupMap[group.id] {
+        if segment.numberOfSegments == 3 {
+            switch segment.selectedSegmentIndex {
+            case 0:
+                value = chats.count
+            case 1:
+                value = contacts.count
+            case 2:
+                let group = groups[section]
+                if group.isSelected {
+                    if let _ = groupMap[group.id] {
+                        value = 1
+                    }
+                    else {
+                        value = group.childs.count + 1
+                    }
+                } else {
                     value = 1
                 }
-                else {
-                    value = group.childs.count + 1
+            default:
+                value = chats.count
+            }
+        } else {
+            switch segment.selectedSegmentIndex {
+            case 0:
+                value = contacts.count
+            case 1:
+                let group = groups[section]
+                if group.isSelected {
+                    if let _ = groupMap[group.id] {
+                        value = 1
+                    }
+                    else {
+                        value = group.childs.count + 1
+                    }
+                } else {
+                    value = 1
                 }
-            } else {
-                value = 1
+            default:
+                value = chats.count
             }
-        default:
-            value = chats.count
         }
         if value == 0 {
             noData = true
@@ -783,27 +860,49 @@ extension ContactChatViewController {
         var cell: UITableViewCell!
         switch segment.selectedSegmentIndex {
         case 0:
-            cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifierChat", for: indexPath)
-            let content = cell.contentView
-            if content.subviews.count > 0 {
-                content.subviews.forEach { $0.removeFromSuperview() }
-            }
-            if noData {
-                let labelNochat = UILabel()
-                labelNochat.text = "There are no conversations".localized()
-                labelNochat.font = .systemFont(ofSize: 13)
-                labelNochat.textColor = .black
-                content.addSubview(labelNochat)
-                labelNochat.anchor(centerX: content.centerXAnchor, centerY: content.centerYAnchor)
-                cell.backgroundColor = .clear
-                cell.selectionStyle = .none
-                return cell
-            }
-            let data: Chat
-            if isFilltering {
-                data = fillteredData[indexPath.row] as! Chat
+            if segment.numberOfSegments < 3 {
+                cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifierContact", for: indexPath)
+                var content = cell.defaultContentConfiguration()
+                let data: User
+                if isFilltering {
+                    data = fillteredData[indexPath.row] as! User
+                } else {
+                    if  indexPath.row > contacts.count - 1 {
+                        return cell
+                    }
+                    data = contacts[indexPath.row]
+                }
+                content.imageProperties.maximumSize = CGSize(width: 40, height: 40)
+                getImage(name: data.thumb, placeholderImage: UIImage(named: "Profile---Purple", in: Bundle.resourceBundle(for: Nexilis.self), with: nil), isCircle: true, tableView: tableView, indexPath: indexPath, completion: { result, isDownloaded, image in
+                    content.image = image
+                })
+                if User.isOfficial(official_account: data.official ?? "") || User.isOfficialRegular(official_account: data.official ?? "") {
+                    content.attributedText = self.set(image: UIImage(named: "ic_official_flag", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName)", size: 15, y: -4, colorText: UIColor.officialColor)
+                    
+                } else if User.isVerified(official_account: data.official ?? "") {
+                    content.attributedText = self.set(image: UIImage(named: "ic_verified", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName)", size: 15, y: -4, colorText: UIColor.verifiedColor)
+                }
+                else if User.isInternal(userType: data.userType ?? "") {
+                    content.attributedText = self.set(image: UIImage(named: "ic_internal", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName)", size: 15, y: -4, colorText: UIColor.internalColor)
+                } else if User.isCallCenter(userType: data.userType ?? "") {
+                    let dataCategory = CategoryCC.getDataFromServiceId(service_id: data.ex_offmp!)
+                    if dataCategory != nil {
+                        content.attributedText = self.set(image: UIImage(named: "pb_call_center", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName) (\(dataCategory!.service_name))", size: 15, y: -4, colorText: UIColor.ccColor)
+                    } else {
+                        content.attributedText = self.set(image: UIImage(named: "pb_call_center", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName)", size: 15, y: -4, colorText: UIColor.ccColor)
+                    }
+                } else {
+                    content.text = data.fullName
+                }
+                content.textProperties.font = UIFont.systemFont(ofSize: 14)
+                cell.contentConfiguration = content
             } else {
-                if chats.count == 0 {
+                cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifierChat", for: indexPath)
+                let content = cell.contentView
+                if content.subviews.count > 0 {
+                    content.subviews.forEach { $0.removeFromSuperview() }
+                }
+                if noData {
                     let labelNochat = UILabel()
                     labelNochat.text = "There are no conversations".localized()
                     labelNochat.font = .systemFont(ofSize: 13)
@@ -814,204 +913,288 @@ extension ContactChatViewController {
                     cell.selectionStyle = .none
                     return cell
                 }
-                data = chats[indexPath.row]
-            }
-            let imageView = UIImageView()
-            content.addSubview(imageView)
-            imageView.translatesAutoresizingMaskIntoConstraints = false
-            NSLayoutConstraint.activate([
-                imageView.leadingAnchor.constraint(equalTo: content.leadingAnchor, constant: 10.0),
-                imageView.topAnchor.constraint(equalTo: content.topAnchor, constant: 10.0),
-                imageView.bottomAnchor.constraint(equalTo: content.bottomAnchor, constant: -10.0),
-                imageView.widthAnchor.constraint(equalToConstant: 55.0),
-                imageView.heightAnchor.constraint(equalToConstant: 55.0)
-            ])
-            if data.profile.isEmpty && data.pin != "-999" {
-                if data.messageScope == "3" {
-                    imageView.image = UIImage(named: "Profile---Purple", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)
+                let data: Chat
+                if isFilltering {
+                    data = fillteredData[indexPath.row] as! Chat
                 } else {
-                    imageView.image = UIImage(named: "Conversation---Purple", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)
+                    if chats.count == 0 {
+                        let labelNochat = UILabel()
+                        labelNochat.text = "There are no conversations".localized()
+                        labelNochat.font = .systemFont(ofSize: 13)
+                        labelNochat.textColor = .black
+                        content.addSubview(labelNochat)
+                        labelNochat.anchor(centerX: content.centerXAnchor, centerY: content.centerYAnchor)
+                        cell.backgroundColor = .clear
+                        cell.selectionStyle = .none
+                        return cell
+                    }
+                    data = chats[indexPath.row]
                 }
-            } else {
-                if Utils.getIconDock() != nil {
-                    let dataImage = try? Data(contentsOf: URL(string: Utils.getUrlDock()!)!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
-                    if dataImage != nil {
-                        getImage(name: data.profile, placeholderImage: UIImage(data: dataImage!), isCircle: true, tableView: tableView, indexPath: indexPath, completion: { result, isDownloaded, image in
+                let imageView = UIImageView()
+                content.addSubview(imageView)
+                imageView.translatesAutoresizingMaskIntoConstraints = false
+                NSLayoutConstraint.activate([
+                    imageView.leadingAnchor.constraint(equalTo: content.leadingAnchor, constant: 10.0),
+                    imageView.topAnchor.constraint(equalTo: content.topAnchor, constant: 10.0),
+                    imageView.bottomAnchor.constraint(equalTo: content.bottomAnchor, constant: -10.0),
+                    imageView.widthAnchor.constraint(equalToConstant: 55.0),
+                    imageView.heightAnchor.constraint(equalToConstant: 55.0)
+                ])
+                if data.profile.isEmpty && data.pin != "-999" {
+                    if data.messageScope == "3" {
+                        imageView.image = UIImage(named: "Profile---Purple", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)
+                    } else {
+                        imageView.image = UIImage(named: "Conversation---Purple", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)
+                    }
+                } else {
+                    if Utils.getIconDock() != nil {
+                        let dataImage = try? Data(contentsOf: URL(string: Utils.getUrlDock()!)!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
+                        if dataImage != nil {
+                            getImage(name: data.profile, placeholderImage: UIImage(data: dataImage!), isCircle: true, tableView: tableView, indexPath: indexPath, completion: { result, isDownloaded, image in
+                                imageView.image = image
+                            })
+                        }
+                    } else {
+                        getImage(name: data.profile, placeholderImage: UIImage(named: data.pin == "-999" ? "pb_button" : data.messageScope == "3" ? "Profile---Purple" : "Conversation---Purple", in: Bundle.resourceBundle(for: Nexilis.self), with: nil), isCircle: true, tableView: tableView, indexPath: indexPath, completion: { result, isDownloaded, image in
                             imageView.image = image
                         })
                     }
-                } else {
-                    getImage(name: data.profile, placeholderImage: UIImage(named: data.pin == "-999" ? "pb_button" : data.messageScope == "3" ? "Profile---Purple" : "Conversation---Purple", in: Bundle.resourceBundle(for: Nexilis.self), with: nil), isCircle: true, tableView: tableView, indexPath: indexPath, completion: { result, isDownloaded, image in
-                        imageView.image = image
-                    })
                 }
-            }
-            let titleView = UILabel()
-            content.addSubview(titleView)
-            titleView.translatesAutoresizingMaskIntoConstraints = false
-            NSLayoutConstraint.activate([
-                titleView.leadingAnchor.constraint(equalTo: imageView.trailingAnchor, constant: 10.0),
-                titleView.topAnchor.constraint(equalTo: content.topAnchor, constant: 10.0),
-                titleView.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -40.0),
-            ])
-            titleView.text = data.name
-            titleView.font = UIFont.systemFont(ofSize: 14, weight: .medium)
-            
-            let messageView = UILabel()
-            content.addSubview(messageView)
-            messageView.translatesAutoresizingMaskIntoConstraints = false
-            NSLayoutConstraint.activate([
-                messageView.leadingAnchor.constraint(equalTo: imageView.trailingAnchor, constant: 10.0),
-                messageView.topAnchor.constraint(equalTo: titleView.bottomAnchor, constant: 5.0),
-                messageView.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -40.0),
-            ])
-            messageView.textColor = .gray
-            let text = Utils.previewMessageText(chat: data)
-            let idMe = UserDefaults.standard.string(forKey: "me") as String?
-            if let attributeText = text as? NSMutableAttributedString {
-                if data.fpin == idMe {
-                    if data.lock == "1" {
-                        messageView.attributedText = ("🚫 _"+"You were deleted this message".localized()+"_").richText()
+                let titleView = UILabel()
+                content.addSubview(titleView)
+                titleView.translatesAutoresizingMaskIntoConstraints = false
+                NSLayoutConstraint.activate([
+                    titleView.leadingAnchor.constraint(equalTo: imageView.trailingAnchor, constant: 10.0),
+                    titleView.topAnchor.constraint(equalTo: content.topAnchor, constant: 10.0),
+                    titleView.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -40.0),
+                ])
+                titleView.text = data.name
+                titleView.font = UIFont.systemFont(ofSize: 14, weight: .medium)
+                
+                let messageView = UILabel()
+                content.addSubview(messageView)
+                messageView.translatesAutoresizingMaskIntoConstraints = false
+                NSLayoutConstraint.activate([
+                    messageView.leadingAnchor.constraint(equalTo: imageView.trailingAnchor, constant: 10.0),
+                    messageView.topAnchor.constraint(equalTo: titleView.bottomAnchor, constant: 5.0),
+                    messageView.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -40.0),
+                ])
+                messageView.textColor = .gray
+                let text = Utils.previewMessageText(chat: data)
+                let idMe = UserDefaults.standard.string(forKey: "me") as String?
+                if let attributeText = text as? NSMutableAttributedString {
+                    if data.fpin == idMe {
+                        if data.lock == "1" {
+                            messageView.attributedText = ("🚫 _"+"You were deleted this message".localized()+"_").richText()
+                        } else {
+                            let stringMessage = NSMutableAttributedString(string: "")
+                            let imageStatus = NSTextAttachment()
+                            let status = getRealStatus(messageId: data.messageId)
+                            if (status == "1" || status == "2" ) {
+                                imageStatus.image = UIImage(named: "checklist", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!.withTintColor(UIColor.lightGray)
+                            } else if (status == "3") {
+                                imageStatus.image = UIImage(named: "double-checklist", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!.withTintColor(UIColor.lightGray)
+                            } else if (status == "8") {
+                                imageStatus.image = UIImage(named: "message_status_ack", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!.withRenderingMode(.alwaysOriginal)
+                            } else {
+                                imageStatus.image = UIImage(named: "double-checklist", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!.withTintColor(UIColor.systemBlue)
+                            }
+                            imageStatus.bounds = CGRect(x: 0, y: 0, width: 15, height: 15)
+                            let imageStatusString = NSAttributedString(attachment: imageStatus)
+                            stringMessage.append(imageStatusString)
+                            stringMessage.append(NSAttributedString(string: " "))
+                            stringMessage.append(attributeText)
+                            messageView.attributedText = stringMessage
+                        }
                     } else {
-                        let stringMessage = NSMutableAttributedString(string: "")
-                        let imageStatus = NSTextAttachment()
-                        let status = getRealStatus(messageId: data.messageId)
-                        if (status == "1" || status == "2" ) {
-                            imageStatus.image = UIImage(named: "checklist", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!.withTintColor(UIColor.lightGray)
-                        } else if (status == "3") {
-                            imageStatus.image = UIImage(named: "double-checklist", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!.withTintColor(UIColor.lightGray)
-                        } else if (status == "8") {
-                            imageStatus.image = UIImage(named: "message_status_ack", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!.withRenderingMode(.alwaysOriginal)
+                        if data.lock == "1" {
+                            messageView.attributedText = ("🚫 _"+"This message was deleted".localized()+"_").richText()
                         } else {
-                            imageStatus.image = UIImage(named: "double-checklist", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!.withTintColor(UIColor.systemBlue)
+                            messageView.attributedText = attributeText
                         }
-                        imageStatus.bounds = CGRect(x: 0, y: 0, width: 15, height: 15)
-                        let imageStatusString = NSAttributedString(attachment: imageStatus)
-                        stringMessage.append(imageStatusString)
-                        stringMessage.append(NSAttributedString(string: " "))
-                        stringMessage.append(attributeText)
-                        messageView.attributedText = stringMessage
                     }
+                }
+                messageView.numberOfLines = 2
+                
+                let timeView = UILabel()
+                content.addSubview(timeView)
+                timeView.translatesAutoresizingMaskIntoConstraints = false
+                NSLayoutConstraint.activate([
+                    timeView.topAnchor.constraint(equalTo: content.topAnchor, constant: 10.0),
+                    timeView.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -20.0),
+                ])
+                timeView.textColor = .gray
+                timeView.font = UIFont.systemFont(ofSize: 14)
+                
+                let date = Date(milliseconds: Int64(data.serverDate)!)
+                let calendar = Calendar.current
+                
+                if (calendar.isDateInToday(date)) {
+                    let formatter = DateFormatter()
+                    formatter.dateFormat = "HH:mm"
+                    formatter.locale = NSLocale(localeIdentifier: "id") as Locale?
+                    timeView.text = formatter.string(from: date as Date)
                 } else {
-                    if data.lock == "1" {
-                        messageView.attributedText = ("🚫 _"+"This message was deleted".localized()+"_").richText()
+                    let startOfNow = calendar.startOfDay(for: Date())
+                    let startOfTimeStamp = calendar.startOfDay(for: date)
+                    let components = calendar.dateComponents([.day], from: startOfNow, to: startOfTimeStamp)
+                    let day = -(components.day!)
+                    if day == 1 {
+                        timeView.text = "Yesterday".localized()
                     } else {
-                        messageView.attributedText = attributeText
+                        if day < 7 {
+                            let formatter = DateFormatter()
+                            formatter.dateFormat = "EEEE"
+                            timeView.text = formatter.string(from: date)
+                        } else {
+                            let formatter = DateFormatter()
+                            formatter.dateFormat = "MM/dd/yy"
+                            formatter.locale = NSLocale(localeIdentifier: "id") as Locale?
+                            let stringFormat = formatter.string(from: date as Date)
+                            timeView.text = stringFormat
+                        }
+                    }
+                }
+                
+                if data.counter != "0" {
+                    timeView.textColor = .systemRed
+                    let viewCounter = UIView()
+                    content.addSubview(viewCounter)
+                    viewCounter.translatesAutoresizingMaskIntoConstraints = false
+                    NSLayoutConstraint.activate([
+                        viewCounter.topAnchor.constraint(equalTo: timeView.bottomAnchor, constant: 5.0),
+                        viewCounter.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -20),
+                        viewCounter.widthAnchor.constraint(greaterThanOrEqualToConstant: 20),
+                        viewCounter.heightAnchor.constraint(equalToConstant: 20)
+                    ])
+                    viewCounter.backgroundColor = .systemRed
+                    viewCounter.layer.cornerRadius = 10
+                    viewCounter.clipsToBounds = true
+                    viewCounter.layer.borderWidth = 0.5
+                    viewCounter.layer.borderColor = UIColor.secondaryColor.cgColor
+
+                    let labelCounter = UILabel()
+                    viewCounter.addSubview(labelCounter)
+                    labelCounter.translatesAutoresizingMaskIntoConstraints = false
+                    NSLayoutConstraint.activate([
+                        labelCounter.centerYAnchor.constraint(equalTo: viewCounter.centerYAnchor),
+                        labelCounter.leadingAnchor.constraint(equalTo: viewCounter.leadingAnchor, constant: 2),
+                        labelCounter.trailingAnchor.constraint(equalTo: viewCounter.trailingAnchor, constant: -2),
+                    ])
+                    labelCounter.font = UIFont.systemFont(ofSize: 11)
+                    if Int(data.counter)! > 99 {
+                        labelCounter.text = "99+"
+                    } else {
+                        labelCounter.text = data.counter
                     }
+                    labelCounter.textColor = .secondaryColor
+                    labelCounter.textAlignment = .center
                 }
             }
-            messageView.numberOfLines = 2
-            
-            let timeView = UILabel()
-            content.addSubview(timeView)
-            timeView.translatesAutoresizingMaskIntoConstraints = false
-            NSLayoutConstraint.activate([
-                timeView.topAnchor.constraint(equalTo: content.topAnchor, constant: 10.0),
-                timeView.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -20.0),
-            ])
-            timeView.textColor = .gray
-            timeView.font = UIFont.systemFont(ofSize: 14)
-            
-            let date = Date(milliseconds: Int64(data.serverDate)!)
-            let calendar = Calendar.current
             
-            if (calendar.isDateInToday(date)) {
-                let formatter = DateFormatter()
-                formatter.dateFormat = "HH:mm"
-                formatter.locale = NSLocale(localeIdentifier: "id") as Locale?
-                timeView.text = formatter.string(from: date as Date)
-            } else {
-                let startOfNow = calendar.startOfDay(for: Date())
-                let startOfTimeStamp = calendar.startOfDay(for: date)
-                let components = calendar.dateComponents([.day], from: startOfNow, to: startOfTimeStamp)
-                let day = -(components.day!)
-                if day == 1 {
-                    timeView.text = "Yesterday".localized()
+        case 1:
+            if segment.numberOfSegments < 3 {
+                cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifierGroup", for: indexPath)
+                var content = cell.defaultContentConfiguration()
+                content.textProperties.font = UIFont.systemFont(ofSize: 14)
+                let group: Group
+                if isFilltering {
+                    if indexPath.row == 0 {
+                        group = fillteredData[indexPath.section] as! Group
+                    } else {
+                        if (fillteredData[indexPath.section] as! Group).childs.count > 0 {
+                            group = (fillteredData[indexPath.section] as! Group).childs[indexPath.row - 1]
+                        } else {
+                            return cell
+                        }
+                    }
                 } else {
-                    if day < 7 {
-                        let formatter = DateFormatter()
-                        formatter.dateFormat = "EEEE"
-                        timeView.text = formatter.string(from: date)
+                    if indexPath.row == 0 {
+                        if indexPath.section > (groups.count - 1) {
+                            return cell
+                        }
+                        group = groups[indexPath.section]
                     } else {
-                        let formatter = DateFormatter()
-                        formatter.dateFormat = "MM/dd/yy"
-                        formatter.locale = NSLocale(localeIdentifier: "id") as Locale?
-                        let stringFormat = formatter.string(from: date as Date)
-                        timeView.text = stringFormat
+                        group = groups[indexPath.section].childs[indexPath.row - 1]
                     }
                 }
-            }
-            
-            if data.counter != "0" {
-                timeView.textColor = .systemRed
-                let viewCounter = UIView()
-                content.addSubview(viewCounter)
-                viewCounter.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    viewCounter.topAnchor.constraint(equalTo: timeView.bottomAnchor, constant: 5.0),
-                    viewCounter.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -20),
-                    viewCounter.widthAnchor.constraint(greaterThanOrEqualToConstant: 20),
-                    viewCounter.heightAnchor.constraint(equalToConstant: 20)
-                ])
-                viewCounter.backgroundColor = .systemRed
-                viewCounter.layer.cornerRadius = 10
-                viewCounter.clipsToBounds = true
-                viewCounter.layer.borderWidth = 0.5
-                viewCounter.layer.borderColor = UIColor.secondaryColor.cgColor
-
-                let labelCounter = UILabel()
-                viewCounter.addSubview(labelCounter)
-                labelCounter.translatesAutoresizingMaskIntoConstraints = false
-                NSLayoutConstraint.activate([
-                    labelCounter.centerYAnchor.constraint(equalTo: viewCounter.centerYAnchor),
-                    labelCounter.leadingAnchor.constraint(equalTo: viewCounter.leadingAnchor, constant: 2),
-                    labelCounter.trailingAnchor.constraint(equalTo: viewCounter.trailingAnchor, constant: -2),
-                ])
-                labelCounter.font = UIFont.systemFont(ofSize: 11)
-                if Int(data.counter)! > 99 {
-                    labelCounter.text = "99+"
+                if group.official == "1" && group.parent == "" {
+                    content.attributedText = self.set(image: UIImage(named: "ic_official_flag", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(group.name)", size: 15, y: -4)
+                }
+                else if group.isOpen == "1" && group.parent == "" {
+                    if self.traitCollection.userInterfaceStyle == .dark {
+                        content.attributedText = self.set(image: UIImage(systemName: "globe")!.withTintColor(.white), with: "  \(group.name)", size: 15, y: -4)
+                    } else {
+                        content.attributedText = self.set(image: UIImage(systemName: "globe")!, with: "  \(group.name)", size: 15, y: -4)
+                    }
+                } else if group.parent == "" {
+                    if self.traitCollection.userInterfaceStyle == .dark {
+                        content.attributedText = self.set(image: UIImage(systemName: "lock.fill")!.withTintColor(.white), with: "  \(group.name)", size: 15, y: -4)
+                    } else {
+                        content.attributedText = self.set(image: UIImage(systemName: "lock.fill")!, with: "  \(group.name)", size: 15, y: -4)
+                    }
                 } else {
-                    labelCounter.text = data.counter
+                    content.text = group.name
+                }
+                if group.childs.count > 0 {
+                    let iconName = (group.isSelected) ? "chevron.up.circle" : "chevron.down.circle"
+                    let imageView = UIImageView(image: UIImage(systemName: iconName))
+                    imageView.tintColor = .black
+                    cell.accessoryView = imageView
+                }
+                else {
+                    cell.accessoryView = nil
+                    cell.accessoryType = .none
+                }
+                content.imageProperties.maximumSize = CGSize(width: 40, height: 40)
+                getImage(name: group.profile, placeholderImage: UIImage(named: "Conversation---Purple", in: Bundle.resourceBundle(for: Nexilis.self), with: nil), isCircle: true, tableView: tableView, indexPath: indexPath) { result, isDownloaded, image in
+                    content.image = image
+                }
+                cell.contentConfiguration = content
+                if !group.level.isEmpty {
+                    if group.level != "-1" && Int(group.level)! < 7 {
+                        cell.contentView.layoutMargins = .init(top: 0.0, left: CGFloat(25 * Int(group.level)!), bottom: 0.0, right: 0)
+                    } else if Int(group.level)! > 6 {
+                        cell.contentView.layoutMargins = .init(top: 0.0, left: CGFloat(25 * (Int(group.level)! - 6)), bottom: 0.0, right: 0)
+                    }
                 }
-                labelCounter.textColor = .secondaryColor
-                labelCounter.textAlignment = .center
-            }
-        case 1:
-            cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifierContact", for: indexPath)
-            var content = cell.defaultContentConfiguration()
-            let data: User
-            if isFilltering {
-                data = fillteredData[indexPath.row] as! User
             } else {
-                if  indexPath.row > contacts.count - 1 {
-                    return cell
+                cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifierContact", for: indexPath)
+                var content = cell.defaultContentConfiguration()
+                let data: User
+                if isFilltering {
+                    data = fillteredData[indexPath.row] as! User
+                } else {
+                    if  indexPath.row > contacts.count - 1 {
+                        return cell
+                    }
+                    data = contacts[indexPath.row]
                 }
-                data = contacts[indexPath.row]
-            }
-            content.imageProperties.maximumSize = CGSize(width: 40, height: 40)
-            getImage(name: data.thumb, placeholderImage: UIImage(named: "Profile---Purple", in: Bundle.resourceBundle(for: Nexilis.self), with: nil), isCircle: true, tableView: tableView, indexPath: indexPath, completion: { result, isDownloaded, image in
-                content.image = image
-            })
-            if User.isOfficial(official_account: data.official ?? "") || User.isOfficialRegular(official_account: data.official ?? "") {
-                content.attributedText = self.set(image: UIImage(named: "ic_official_flag", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName)", size: 15, y: -4, colorText: UIColor.officialColor)
-                
-            } else if User.isVerified(official_account: data.official ?? "") {
-                content.attributedText = self.set(image: UIImage(named: "ic_verified", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName)", size: 15, y: -4, colorText: UIColor.verifiedColor)
-            }
-            else if User.isInternal(userType: data.userType ?? "") {
-                content.attributedText = self.set(image: UIImage(named: "ic_internal", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName)", size: 15, y: -4, colorText: UIColor.internalColor)
-            } else if User.isCallCenter(userType: data.userType ?? "") {
-                let dataCategory = CategoryCC.getDataFromServiceId(service_id: data.ex_offmp!)
-                if dataCategory != nil {
-                    content.attributedText = self.set(image: UIImage(named: "pb_call_center", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName) (\(dataCategory!.service_name))", size: 15, y: -4, colorText: UIColor.ccColor)
+                content.imageProperties.maximumSize = CGSize(width: 40, height: 40)
+                getImage(name: data.thumb, placeholderImage: UIImage(named: "Profile---Purple", in: Bundle.resourceBundle(for: Nexilis.self), with: nil), isCircle: true, tableView: tableView, indexPath: indexPath, completion: { result, isDownloaded, image in
+                    content.image = image
+                })
+                if User.isOfficial(official_account: data.official ?? "") || User.isOfficialRegular(official_account: data.official ?? "") {
+                    content.attributedText = self.set(image: UIImage(named: "ic_official_flag", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName)", size: 15, y: -4, colorText: UIColor.officialColor)
+                    
+                } else if User.isVerified(official_account: data.official ?? "") {
+                    content.attributedText = self.set(image: UIImage(named: "ic_verified", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName)", size: 15, y: -4, colorText: UIColor.verifiedColor)
+                }
+                else if User.isInternal(userType: data.userType ?? "") {
+                    content.attributedText = self.set(image: UIImage(named: "ic_internal", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName)", size: 15, y: -4, colorText: UIColor.internalColor)
+                } else if User.isCallCenter(userType: data.userType ?? "") {
+                    let dataCategory = CategoryCC.getDataFromServiceId(service_id: data.ex_offmp!)
+                    if dataCategory != nil {
+                        content.attributedText = self.set(image: UIImage(named: "pb_call_center", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName) (\(dataCategory!.service_name))", size: 15, y: -4, colorText: UIColor.ccColor)
+                    } else {
+                        content.attributedText = self.set(image: UIImage(named: "pb_call_center", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName)", size: 15, y: -4, colorText: UIColor.ccColor)
+                    }
                 } else {
-                    content.attributedText = self.set(image: UIImage(named: "pb_call_center", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, with: "  \(data.fullName)", size: 15, y: -4, colorText: UIColor.ccColor)
+                    content.text = data.fullName
                 }
-            } else {
-                content.text = data.fullName
+                content.textProperties.font = UIFont.systemFont(ofSize: 14)
+                cell.contentConfiguration = content
             }
-            content.textProperties.font = UIFont.systemFont(ofSize: 14)
-            cell.contentConfiguration = content
         case 2:
             cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifierGroup", for: indexPath)
             var content = cell.defaultContentConfiguration()

+ 17 - 0
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Control/GroupDetailViewController.swift

@@ -56,6 +56,8 @@ class GroupDetailViewController: UITableViewController {
     
     private let idSubGroup = Date().currentTimeMillis().toHex()
     
+    var fromNotification = false
+    
     override func viewDidLoad() {
         super.viewDidLoad()
         
@@ -65,6 +67,17 @@ class GroupDetailViewController: UITableViewController {
         navigationController?.navigationBar.titleTextAttributes = textAttributes
         navigationController?.navigationBar.topItem?.backButtonTitle = ""
         
+        if fromNotification {
+            let imageButton = UIImageView(frame: CGRect(x: -16, y: 0, width: 20, height: 44))
+            imageButton.image = UIImage(systemName: "chevron.backward", withConfiguration: UIImage.SymbolConfiguration(pointSize: 20, weight: .regular, scale: .default))?.withTintColor(.white)
+            imageButton.contentMode = .left
+            let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didTapExit))
+            imageButton.isUserInteractionEnabled = true
+            imageButton.addGestureRecognizer(tapGestureRecognizer)
+            let leftItem = UIBarButtonItem(customView: imageButton)
+            self.navigationItem.leftBarButtonItem = leftItem
+        }
+        
         reload()
         let center: NotificationCenter = NotificationCenter.default
         center.addObserver(self, selector: #selector(updateData(notification:)), name: NSNotification.Name(rawValue: "onGroup"), object: nil)
@@ -82,6 +95,10 @@ class GroupDetailViewController: UITableViewController {
     
     // MARK: - Data source
     
+    @objc func didTapExit() {
+        self.dismiss(animated: true, completion: nil)
+    }
+    
     func reload() {
         getData { group in
             self.group = group

+ 1 - 1
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Control/MessageInfo.swift

@@ -632,7 +632,7 @@ class MessageInfo: UIViewController, UITableViewDelegate, UITableViewDataSource
                     imageSticker.leadingAnchor.constraint(equalTo: containerMessage.leadingAnchor, constant: 15).isActive = true
                     imageSticker.bottomAnchor.constraint(equalTo: messageText.topAnchor, constant: -5).isActive = true
                     imageSticker.trailingAnchor.constraint(equalTo: containerMessage.trailingAnchor, constant: -15).isActive = true
-                    imageSticker.image = UIImage(named: (textChat.components(separatedBy: "/")[1]), in: Bundle.resourceBundle(for: Nexilis.self), with: nil)
+                    imageSticker.image = UIImage(named: (textChat.components(separatedBy: "/")[1]), in: Bundle.resourcesMediaBundle(for: Nexilis.self), with: nil)
                     imageSticker.contentMode = .scaleAspectFit
                 } else if data["message_scope_id"] as! String == "18" {
                     let data = textChat

+ 46 - 21
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Control/SettingTableViewController.swift

@@ -112,6 +112,8 @@ public class SettingTableViewController: UITableViewController, UIGestureRecogni
                         Item(icon: UIImage(systemName: "textformat.abc"), title: "Change Language".localized()),
                         Item(icon: UIImage(systemName: "person.crop.rectangle"), title: "Change Admin / Internal Password".localized()),
                         Item(icon: UIImage(systemName: "laptopcomputer.and.iphone"), title: "Sign-In to Web".localized()),
+                        Item(icon: UIImage(named: "ic_internal", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, title: "Set Internal Account".localized()),
+                        Item(icon: UIImage(named: "pb_call_center", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, title: "Set CS Account".localized()),
                     ]
                 } else if User.isInternal(userType: cursorUser.string(forColumnIndex: 0) ?? "") || User.isCallCenter(userType: cursorUser.string(forColumnIndex: 0) ?? "") || User.isVerified(official_account: cursorUser.string(forColumnIndex: 2) ?? "") {
                     Item.menus["Personal"] = [
@@ -123,7 +125,7 @@ public class SettingTableViewController: UITableViewController, UIGestureRecogni
                     Item.menus["Personal"] = [
                         Item(icon: UIImage(systemName: "person"), title: "Personal Information".localized()),
                             Item(icon: UIImage(systemName: "textformat.abc"), title: "Change Language".localized()),
-                        Item(icon: UIImage(named: "ic_internal", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, title: "Access Admin / Internal Features".localized()),
+                        Item(icon: UIImage(systemName: "person.badge.key"), title: "Access Admin / Internal Features".localized()),
                     ]
                 }
                 if !isChangeProfile {
@@ -172,7 +174,7 @@ public class SettingTableViewController: UITableViewController, UIGestureRecogni
                 Item.menus["Personal"] = [
                     Item(icon: UIImage(systemName: "person"), title: "Personal Information".localized()),
                         Item(icon: UIImage(systemName: "textformat.abc"), title: "Change Language".localized()),
-                    Item(icon: UIImage(named: ""), title: "Access Admin / Internal Features".localized()),
+                    Item(icon: UIImage(systemName: "person.badge.key"), title: "Access Admin / Internal Features".localized()),
                     Item(icon: UIImage(systemName: "arrow.up.and.person.rectangle.portrait"), title: "Sign-Up/Sign-In".localized())
                 ]
                 if !imageSignIn.isEmpty {
@@ -219,29 +221,41 @@ public class SettingTableViewController: UITableViewController, UIGestureRecogni
     }
     
     override public func viewWillAppear(_ animated: Bool) {
-        self.navigationController?.navigationBar.topItem?.title = ""
-        self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black]
-        let navBarAppearance = UINavigationBarAppearance()
-        navBarAppearance.configureWithTransparentBackground()
-        navigationController?.navigationBar.standardAppearance = navBarAppearance
-        navigationController?.navigationBar.scrollEdgeAppearance = navBarAppearance
-        let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.black]
-        UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes, for: .normal)
-        navigationController?.navigationBar.backgroundColor = .clear
-        navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
-        navigationController?.navigationBar.shadowImage = UIImage()
-        navigationController?.navigationBar.isTranslucent = true
-        navigationController?.setNavigationBarHidden(false, animated: false)
-        navigationController?.navigationBar.overrideUserInterfaceStyle = .light
-        navigationController?.navigationBar.barStyle = .default
-        navigationController?.navigationBar.tintColor = .black
-        tabBarController?.navigationItem.leftBarButtonItem = nil
-        tabBarController?.navigationItem.searchController = nil
-        tabBarController?.navigationItem.rightBarButtonItem = nil
+//        self.navigationController?.navigationBar.topItem?.title = ""
+//        self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black]
+//        let navBarAppearance = UINavigationBarAppearance()
+//        navBarAppearance.configureWithTransparentBackground()
+//        navigationController?.navigationBar.standardAppearance = navBarAppearance
+//        navigationController?.navigationBar.scrollEdgeAppearance = navBarAppearance
+//        let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.black]
+//        UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes, for: .normal)
+//        navigationController?.navigationBar.backgroundColor = .clear
+//        navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
+//        navigationController?.navigationBar.shadowImage = UIImage()
+//        navigationController?.navigationBar.isTranslucent = true
+//        navigationController?.setNavigationBarHidden(false, animated: false)
+//        navigationController?.navigationBar.overrideUserInterfaceStyle = .light
+//        navigationController?.navigationBar.barStyle = .default
+//        navigationController?.navigationBar.tintColor = .black
+//        tabBarController?.navigationItem.leftBarButtonItem = nil
+//        tabBarController?.navigationItem.searchController = nil
+//        tabBarController?.navigationItem.rightBarButtonItem = nil
+        let imageButton = UIImageView(frame: CGRect(x: -16, y: 0, width: 20, height: 44))
+        imageButton.image = UIImage(systemName: "chevron.backward", withConfiguration: UIImage.SymbolConfiguration(pointSize: 20, weight: .regular, scale: .default))?.withTintColor(.white)
+        imageButton.contentMode = .left
+        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didTapExit))
+        imageButton.isUserInteractionEnabled = true
+        imageButton.addGestureRecognizer(tapGestureRecognizer)
+        let leftItem = UIBarButtonItem(customView: imageButton)
+        self.navigationItem.leftBarButtonItem = leftItem
         makeMenu()
         tableView.reloadData()
     }
     
+    @objc func didTapExit() {
+        self.dismiss(animated: true, completion: nil)
+    }
+    
     // MARK: - Table view data source
     
     public override func numberOfSections(in tableView: UITableView) -> Int {
@@ -303,6 +317,10 @@ public class SettingTableViewController: UITableViewController, UIGestureRecogni
                 cell.accessoryType = .disclosureIndicator
             case "Change Language".localized():
                 cell.accessoryType = .disclosureIndicator
+            case "Set Internal Account".localized():
+                cell.accessoryType = .disclosureIndicator
+            case "Set CS Account".localized():
+                cell.accessoryType = .disclosureIndicator
             case "Version".localized():
                 let accessoryButton = UIButton(type: .custom)
                 accessoryButton.setTitle(UIApplication.appVersion, for: .normal)
@@ -557,6 +575,13 @@ public class SettingTableViewController: UITableViewController, UIGestureRecogni
         } else if item.title == "Backup & Restore".localized() {
             let controller = AppStoryBoard.Palio.instance.instantiateViewController(withIdentifier: "backupRestore") as! BackupRestoreView
             navigationController?.show(controller, sender: nil)
+        } else if item.title == "Set Internal Account".localized() {
+            let controller = SetInternalCSAccount()
+            navigationController?.show(controller, sender: nil)
+        } else if item.title == "Set CS Account".localized() {
+            let controller = SetInternalCSAccount()
+            controller.isSetCS = true
+            navigationController?.show(controller, sender: nil)
         }
     }
     

+ 36 - 0
appbuilder-ios/NexilisLite/NexilisLiteTests/NexilisLiteTests.swift

@@ -0,0 +1,36 @@
+//
+//  NexilisLiteTests.swift
+//  NexilisLiteTests
+//
+//  Created by Akhmad Al Qindi Irsyam on 10/05/23.
+//
+
+import XCTest
+@testable import NexilisLite
+
+final class NexilisLiteTests: XCTestCase {
+
+    override func setUpWithError() throws {
+        // Put setup code here. This method is called before the invocation of each test method in the class.
+    }
+
+    override func tearDownWithError() throws {
+        // Put teardown code here. This method is called after the invocation of each test method in the class.
+    }
+
+    func testExample() throws {
+        // This is an example of a functional test case.
+        // Use XCTAssert and related functions to verify your tests produce the correct results.
+        // Any test you write for XCTest can be annotated as throws and async.
+        // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
+        // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
+    }
+
+    func testPerformanceExample() throws {
+        // This is an example of a performance test case.
+        self.measure {
+            // Put the code you want to measure the time of here.
+        }
+    }
+
+}

+ 17 - 8
appbuilder-ios/NexilisLite/Podfile

@@ -1,16 +1,25 @@
 # Uncomment the next line to define a global platform for your project
-# platform :ios, '9.0'
+platform :ios, '14.0'
+
+source 'https://cdn.cocoapods.org/'
+source 'https://github.com/passbase/cocoapods-specs.git'
+source 'https://github.com/passbase/microblink-cocoapods-specs.git'
 
 target 'NexilisLite' do
   # Comment the next line if you don't want to use dynamic frameworks
-  use_frameworks!
-  
+  use_frameworks! :linkage => :static
+
   # Pods for NexilisLite
-  
-#  pod 'nuSDKService', '~> 0.0.7'
+
+  pod 'nuSDKService', '~> 0.0.8'
   pod 'FMDB', '~> 2.7.5'
-  pod 'NotificationBannerSwift', '~> 3.0.0'
-  pod 'ReadabilityKit'
-  pod 'Alamofire', '~> 5.5'
+  pod 'NotificationBannerSwift', '~> 3.2.1'
+  pod 'Alamofire', '~> 5.7.0'
+  pod 'SDWebImage', '~> 5.15.7'
+  pod 'Toast-Swift', '~> 5.0.1'
 
+  target 'NexilisLiteTests' do
+    # Pods for testing
+  end
+  
 end

+ 28 - 22
appbuilder-ios/NexilisLite/Podfile.lock

@@ -1,42 +1,48 @@
 PODS:
-  - Alamofire (5.6.4)
+  - Alamofire (5.7.1)
   - FMDB (2.7.5):
     - FMDB/standard (= 2.7.5)
   - FMDB/standard (2.7.5)
-  - Ji (5.0.0)
-  - MarqueeLabel (4.0.5)
-  - NotificationBannerSwift (3.0.6):
-    - MarqueeLabel (~> 4.0.5)
-    - SnapKit (~> 5.0.1)
-  - ReadabilityKit (0.7.4):
-    - Ji (= 5.0.0)
-  - SnapKit (5.0.1)
+  - MarqueeLabel (4.3.0)
+  - NotificationBannerSwift (3.2.1):
+    - MarqueeLabel (~> 4.3.0)
+    - SnapKit (~> 5.6.0)
+  - nuSDKService (0.0.8)
+  - SDWebImage (5.15.7):
+    - SDWebImage/Core (= 5.15.7)
+  - SDWebImage/Core (5.15.7)
+  - SnapKit (5.6.0)
+  - Toast-Swift (5.0.1)
 
 DEPENDENCIES:
-  - Alamofire (~> 5.5)
+  - Alamofire (~> 5.7.0)
   - FMDB (~> 2.7.5)
-  - NotificationBannerSwift (~> 3.0.0)
-  - ReadabilityKit
+  - NotificationBannerSwift (~> 3.2.1)
+  - nuSDKService (~> 0.0.8)
+  - SDWebImage (~> 5.15.7)
+  - Toast-Swift (~> 5.0.1)
 
 SPEC REPOS:
   trunk:
     - Alamofire
     - FMDB
-    - Ji
     - MarqueeLabel
     - NotificationBannerSwift
-    - ReadabilityKit
+    - nuSDKService
+    - SDWebImage
     - SnapKit
+    - Toast-Swift
 
 SPEC CHECKSUMS:
-  Alamofire: 4e95d97098eacb88856099c4fc79b526a299e48c
+  Alamofire: 0123a34370cb170936ae79a8df46cc62b2edeb88
   FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
-  Ji: d795fed288fe78658b404c88946d753b17d8d7f4
-  MarqueeLabel: 00cc0bcd087111dca575878b3531af980559707d
-  NotificationBannerSwift: 7021be2338f8f29cf424b0aca43da462bf9e2a1a
-  ReadabilityKit: 09e8b2ecb3d06f17f4c856e426c34f9016e86e6f
-  SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb
+  MarqueeLabel: 02f5ac8fd6877c94564556cb93fa86c70c08baeb
+  NotificationBannerSwift: dce54ded532b26e30cd8e7f4d80e124a0f2ba7d1
+  nuSDKService: 6bb78ce9e114a171172614761b918a14fbf4d559
+  SDWebImage: 25bac438318faf37e35650619ebc288a9061d292
+  SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25
+  Toast-Swift: 9b6a70f28b3bf0b96c40d46c0c4b9d6639846711
 
-PODFILE CHECKSUM: 46d1bcf021a97d2f2d18b19fc2ee48e019aa8bb8
+PODFILE CHECKSUM: 7154245968371d4f7b9cd9c04abee49cf55bac66
 
-COCOAPODS: 1.11.3
+COCOAPODS: 1.12.1

+ 0 - 2
appbuilder-ios/NexilisLite/README.md

@@ -1,2 +0,0 @@
-# QmeraLite
-

+ 14 - 0
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Info.plist

@@ -0,0 +1,14 @@
+<?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>ArchiveVersion</key>
+	<integer>2</integer>
+	<key>CreationDate</key>
+	<date>2023-05-11T07:57:40Z</date>
+	<key>Name</key>
+	<string>NexilisLite</string>
+	<key>SchemeName</key>
+	<string>NexilisLite</string>
+</dict>
+</plist>

BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/Info.plist


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/NexilisLiteResources


+ 938 - 0
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/_CodeSignature/CodeResources

@@ -0,0 +1,938 @@
+<?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>files</key>
+	<dict>
+		<key>Info.plist</key>
+		<data>
+		ZzTPn/NopNKHSQDIUm2nOWqkSBw=
+		</data>
+		<key>sticker_10000000_0.png</key>
+		<data>
+		t8UIfU9bF5vYkyLD8fztfgJDtNg=
+		</data>
+		<key>sticker_10000000_1.png</key>
+		<data>
+		TLs5DqWxoyoFg49HAjvKMVjTBZE=
+		</data>
+		<key>sticker_10000000_10.png</key>
+		<data>
+		YQAM4bC5WvNpKwLrBM9NIZunc6A=
+		</data>
+		<key>sticker_10000000_11.png</key>
+		<data>
+		9D2w8m02re3YBjidukpey7Jadlg=
+		</data>
+		<key>sticker_10000000_2.png</key>
+		<data>
+		qa9qy+b/uTMLw/NmG3W7CqQus00=
+		</data>
+		<key>sticker_10000000_3.png</key>
+		<data>
+		6+dHB9mZhLcJ0vRUcxMoKbKTjHs=
+		</data>
+		<key>sticker_10000000_4.png</key>
+		<data>
+		YCTpxqhlbLy11/p+KJEAzNYI0aw=
+		</data>
+		<key>sticker_10000000_5.png</key>
+		<data>
+		lTFTjL/GomxMiMU30lQcw3xOIJ8=
+		</data>
+		<key>sticker_10000000_6.png</key>
+		<data>
+		0OyxI6zOmGXwTvaK2EIJY/XOs1k=
+		</data>
+		<key>sticker_10000000_7.png</key>
+		<data>
+		ZQ3FmaIQ4f2R+1MAvAq9/tJEt5w=
+		</data>
+		<key>sticker_10000000_8.png</key>
+		<data>
+		S3GLXjFraywvHKxMedB0XGBoMIs=
+		</data>
+		<key>sticker_10000000_9.png</key>
+		<data>
+		CCBGkUp1/OZ8DA/UCVkK7lOnefc=
+		</data>
+		<key>sticker_20000000_0.png</key>
+		<data>
+		Apj4AbIsWN8U/OqWrA1zf5bIca0=
+		</data>
+		<key>sticker_20000000_1.png</key>
+		<data>
+		CQED5+iOMPrl81H/VVtopu5kKeY=
+		</data>
+		<key>sticker_20000000_10.png</key>
+		<data>
+		lpBzlUd8RPzQpxnRGWjOM0ybdbU=
+		</data>
+		<key>sticker_20000000_11.png</key>
+		<data>
+		sFkxrHQ7vM/NpTOvCIP87c/nEb4=
+		</data>
+		<key>sticker_20000000_12.png</key>
+		<data>
+		aQ67z/bDL0rH9u8ds/3np5/vlkI=
+		</data>
+		<key>sticker_20000000_13.png</key>
+		<data>
+		gk5wz038NR3c56sb0oQ277BCfQI=
+		</data>
+		<key>sticker_20000000_14.png</key>
+		<data>
+		ZYrocgNMJ8DGKMaafU9cFkOOjic=
+		</data>
+		<key>sticker_20000000_15.png</key>
+		<data>
+		bvRjYDp3xPO0TrA+uTlkXpPGhGw=
+		</data>
+		<key>sticker_20000000_16.png</key>
+		<data>
+		WWX8ZdkxB+pymXWy+Z8JWl2umHA=
+		</data>
+		<key>sticker_20000000_17.png</key>
+		<data>
+		JUha4c9cHcM/inSCNF0OPhbnhuA=
+		</data>
+		<key>sticker_20000000_18.png</key>
+		<data>
+		DdpOilp2G038zfAnNp0FCkOvBPc=
+		</data>
+		<key>sticker_20000000_19.png</key>
+		<data>
+		8N+NNXLEpQD0mUm6+0+ejjMd/Ig=
+		</data>
+		<key>sticker_20000000_2.png</key>
+		<data>
+		1VNZXtLy3qjx0zZuzTsGQz6PDro=
+		</data>
+		<key>sticker_20000000_20.png</key>
+		<data>
+		/42Z+XLB2qZwgPW3NL1AT1wxLZs=
+		</data>
+		<key>sticker_20000000_21.png</key>
+		<data>
+		YOJ9MpRJWvHWVX4LkmbHkT0g7X0=
+		</data>
+		<key>sticker_20000000_22.png</key>
+		<data>
+		uP7LSMFgnXM0ckp3JxqTEwTOZXg=
+		</data>
+		<key>sticker_20000000_23.png</key>
+		<data>
+		DD2MHGYIKLOPUHNmGObNxb2aseY=
+		</data>
+		<key>sticker_20000000_3.png</key>
+		<data>
+		8x7pRNbJeb9x1to9Z9qCTwck/yQ=
+		</data>
+		<key>sticker_20000000_4.png</key>
+		<data>
+		MBzh4975RlgZflWKPjIMNO9TfpM=
+		</data>
+		<key>sticker_20000000_5.png</key>
+		<data>
+		f8iJlJurlD3k9569/PDW69dRhRY=
+		</data>
+		<key>sticker_20000000_6.png</key>
+		<data>
+		5iZSFkwFUeJ49HzL9HwAjG6ddKk=
+		</data>
+		<key>sticker_20000000_7.png</key>
+		<data>
+		6266RaYiWvhZ5bfHT4Mps1gEYWI=
+		</data>
+		<key>sticker_20000000_8.png</key>
+		<data>
+		VTN3X/+zhzWJCB2HDjXPvw4eiqQ=
+		</data>
+		<key>sticker_20000000_9.png</key>
+		<data>
+		sJRJLLJJp4vKXN/YMKTG6pDw9Yo=
+		</data>
+		<key>sticker_30000000_0.png</key>
+		<data>
+		VK/6SXzDN+hZMazJUtOoNUSDff8=
+		</data>
+		<key>sticker_30000000_1.png</key>
+		<data>
+		53oxSmvTEcbhsZ7xQue6hK5EpBM=
+		</data>
+		<key>sticker_30000000_10.png</key>
+		<data>
+		UUnOj2anpEjFDto+TcIkoYbt/7k=
+		</data>
+		<key>sticker_30000000_11.png</key>
+		<data>
+		XkbGRuXEFX8UYF6BBoTrf0fvuuw=
+		</data>
+		<key>sticker_30000000_12.png</key>
+		<data>
+		yupfJIjGfNID1bkwhdRyRcJ6NUs=
+		</data>
+		<key>sticker_30000000_13.png</key>
+		<data>
+		LoGg2CXnYC3iqVtmE32M9Y79xn4=
+		</data>
+		<key>sticker_30000000_14.png</key>
+		<data>
+		p5VTklexqDM4dJgGexx1PXME4Eo=
+		</data>
+		<key>sticker_30000000_15.png</key>
+		<data>
+		G+D1cmk5CFrEAvdoOhFkhI7Z5fI=
+		</data>
+		<key>sticker_30000000_16.png</key>
+		<data>
+		khynAJVN1IFdwua4pnNza/VIRqU=
+		</data>
+		<key>sticker_30000000_17.png</key>
+		<data>
+		gpEiuYJHgX15vvc78NETfvPnu3M=
+		</data>
+		<key>sticker_30000000_18.png</key>
+		<data>
+		4E9/aaEvlgehzvIkthmIJuIUmpA=
+		</data>
+		<key>sticker_30000000_19.png</key>
+		<data>
+		afgpQKQ6AVHC00PV89Nlj41/+ow=
+		</data>
+		<key>sticker_30000000_2.png</key>
+		<data>
+		GTnATxd9jIZLLE86uOSLx7hadSk=
+		</data>
+		<key>sticker_30000000_20.png</key>
+		<data>
+		Bjlcx4lhntVPeNXK7lKrmetG4tk=
+		</data>
+		<key>sticker_30000000_21.png</key>
+		<data>
+		fsLiIN9qV5U6gKDz/nOEai+0sTY=
+		</data>
+		<key>sticker_30000000_22.png</key>
+		<data>
+		/EoXU0eNF6u5JsCyIE5UB5YGX3M=
+		</data>
+		<key>sticker_30000000_23.png</key>
+		<data>
+		QanG09NPdkyM+ICPw5ggqUCHsaY=
+		</data>
+		<key>sticker_30000000_24.png</key>
+		<data>
+		11k2/rz0UoLppqT3hDhrlyVVnS8=
+		</data>
+		<key>sticker_30000000_25.png</key>
+		<data>
+		yMT02CZWJlHb0VGhLdxpAwisBUk=
+		</data>
+		<key>sticker_30000000_26.png</key>
+		<data>
+		S/jUh1JP6GyYIcyT0VyhkGF0JA0=
+		</data>
+		<key>sticker_30000000_27.png</key>
+		<data>
+		hcnjSPAx4PYrWh7zc0V+iIKUCTE=
+		</data>
+		<key>sticker_30000000_28.png</key>
+		<data>
+		Uk6lJG6JIa7wcSkStwEoO6/qdXg=
+		</data>
+		<key>sticker_30000000_29.png</key>
+		<data>
+		un/pr6vi+3BSAHtKrdcOHqV1GKw=
+		</data>
+		<key>sticker_30000000_3.png</key>
+		<data>
+		JopPNmBw/NSkfIK++f4Ey73o0LY=
+		</data>
+		<key>sticker_30000000_30.png</key>
+		<data>
+		RFodYy3M0QDA2jBQ2oMddbg7hDA=
+		</data>
+		<key>sticker_30000000_31.png</key>
+		<data>
+		AlJGfWHCFU+6E5yrPUTLwZL4wjE=
+		</data>
+		<key>sticker_30000000_32.png</key>
+		<data>
+		TkI4840yn/gdxAy5r1HQV/dkZyQ=
+		</data>
+		<key>sticker_30000000_33.png</key>
+		<data>
+		luXB7Fx7H+kTwy5PRgvLvmpfCwU=
+		</data>
+		<key>sticker_30000000_34.png</key>
+		<data>
+		QComtgnnhUHJzI3pbs9k0ZBC2cY=
+		</data>
+		<key>sticker_30000000_35.png</key>
+		<data>
+		WsQAH4tf0FyVQ9AlVmB6h3Y3C74=
+		</data>
+		<key>sticker_30000000_36.png</key>
+		<data>
+		/J3fxuhs/IiImLoOF/veFGctISY=
+		</data>
+		<key>sticker_30000000_37.png</key>
+		<data>
+		M5o9EbR9Mcr5yX0XXpdvBF04ypw=
+		</data>
+		<key>sticker_30000000_38.png</key>
+		<data>
+		JEOWRklBBX/or4PVYZPxy/WR4q8=
+		</data>
+		<key>sticker_30000000_39.png</key>
+		<data>
+		E4iGLg0Xep6D1aX6pJ9lu0032s8=
+		</data>
+		<key>sticker_30000000_4.png</key>
+		<data>
+		JbWwNGqdTsCrk6IbodpD2yUJgy0=
+		</data>
+		<key>sticker_30000000_5.png</key>
+		<data>
+		1h1bqmiN99+tGmUtiNAFMKJZjlA=
+		</data>
+		<key>sticker_30000000_6.png</key>
+		<data>
+		zh91/yPubsnDitWIMV7v1EqeYiU=
+		</data>
+		<key>sticker_30000000_7.png</key>
+		<data>
+		Gbkbq5B1Lp/bZxVYP4P7Y/jFeeg=
+		</data>
+		<key>sticker_30000000_8.png</key>
+		<data>
+		JBWlq4+BNgWRnkGSYq/r7gS4CAE=
+		</data>
+		<key>sticker_30000000_9.png</key>
+		<data>
+		rGZACeiXxFam2iOvGOtFV4USfAI=
+		</data>
+	</dict>
+	<key>files2</key>
+	<dict>
+		<key>sticker_10000000_0.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			d7/9kNzMF4vAsTaUFlI08kNV79EEuryZ3iH/LV95nxU=
+			</data>
+		</dict>
+		<key>sticker_10000000_1.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			pvu06QMMpWQS5tTIisRdPQL4FKdduEOOkcH127qdIcI=
+			</data>
+		</dict>
+		<key>sticker_10000000_10.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			QFBGmqFIHxcnn12O9jB2nyhVZ0rO7rltEfRXwp5iJv8=
+			</data>
+		</dict>
+		<key>sticker_10000000_11.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			KYoECPXiU2+sLUfUP3whpwhk2BtsKUDonAKBVL396ec=
+			</data>
+		</dict>
+		<key>sticker_10000000_2.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			eT8uwYZHsNpoWJWcwFBgNxmg7TCoEyVYN+zokDzud0w=
+			</data>
+		</dict>
+		<key>sticker_10000000_3.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			lBLW39vq0VIa17h8oBdOFRW2fMwdsfzG35YrYliHEkk=
+			</data>
+		</dict>
+		<key>sticker_10000000_4.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			xwcLkJNT3gyeOQqi8jccmQh7dLHtBX9hYQIHZOogPTs=
+			</data>
+		</dict>
+		<key>sticker_10000000_5.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			TtWSYvvSLCaQ2bFix7Si+SBtJQunRAz0t9sn+1Zhu5U=
+			</data>
+		</dict>
+		<key>sticker_10000000_6.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			DYx95k7HP0i6j9LEVbrkTjbfQXuOeMjcysg672dK3U4=
+			</data>
+		</dict>
+		<key>sticker_10000000_7.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			l1x2KkSt98RDpJaZLIygN8JRAlUT2FaTVbHcQXJfY6M=
+			</data>
+		</dict>
+		<key>sticker_10000000_8.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			NEsfRzPQwptSBQ9FsSj0MJ3eC+m8z5hPEFt0SfA39yA=
+			</data>
+		</dict>
+		<key>sticker_10000000_9.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			5ldM1hQScTHaJtkWYmrbpBeNv9ERjvN3JSzqlFsa7e4=
+			</data>
+		</dict>
+		<key>sticker_20000000_0.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			5GdqT0ihPF31LyuxlOBh2cLI2kBcs5kAv5t6cItkUSs=
+			</data>
+		</dict>
+		<key>sticker_20000000_1.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			+Zt0WHuToTYRSjquGQJtHen5SNJnXB9YxQdrOA/AjuE=
+			</data>
+		</dict>
+		<key>sticker_20000000_10.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			yUaz5K7AlhNUrnjVXuYEp3Qrqa0Jsxz7+eRI61YIVdQ=
+			</data>
+		</dict>
+		<key>sticker_20000000_11.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			h8FQlqoJpM9E9zie4Cgin3AJvhGMpIiIi/aOgALSQOU=
+			</data>
+		</dict>
+		<key>sticker_20000000_12.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			QralVeQ+X29TFIVVwwuwk/WtftFaXRwyTX5aLRY0Z/A=
+			</data>
+		</dict>
+		<key>sticker_20000000_13.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			nRYVNCTj89gz+tH6qjWpG2xa7vl8n5WtJ/H/Zc227gg=
+			</data>
+		</dict>
+		<key>sticker_20000000_14.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			ZjCGenpfm6afCGIOYL+ZetWQkwEiJfl2mLQLiQAn0N4=
+			</data>
+		</dict>
+		<key>sticker_20000000_15.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			P5Q13Jfn0p2eLn1yJVZNLKYHfssriiRLiDS7FuMaFJ4=
+			</data>
+		</dict>
+		<key>sticker_20000000_16.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			GyHrDMKscN4HI7ID9A9DM3AyAqmpbaKbE6dUq0evBA4=
+			</data>
+		</dict>
+		<key>sticker_20000000_17.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			PjDv17aZUiS/hwAQEhN1cKaX0SQ0CMwG3/zT5/a2vhc=
+			</data>
+		</dict>
+		<key>sticker_20000000_18.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			1tE7MGXhJfqUTqyelDPOC/QAdXiL9QR2EdcuF6oQ9BI=
+			</data>
+		</dict>
+		<key>sticker_20000000_19.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			alhmvxn2Y67RAZaHb31GRfJL9IPT87o8GyrErMG4IkA=
+			</data>
+		</dict>
+		<key>sticker_20000000_2.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			ailmFfQzoPOVRkFAJh8jRg0rAGqnyjvdmx4o5yqW5qw=
+			</data>
+		</dict>
+		<key>sticker_20000000_20.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			U3BicvlrSU+WUPCOLvtXxx12CAX4dSKTvW6jjYK9IhE=
+			</data>
+		</dict>
+		<key>sticker_20000000_21.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			AbnTMHqxA+6/p1UL+rk4024ENGklFlV1dlLteeuBxto=
+			</data>
+		</dict>
+		<key>sticker_20000000_22.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			ChyqoUNDB7/EySLC0verrasCGF9MbbEKdSqS/kMIuAg=
+			</data>
+		</dict>
+		<key>sticker_20000000_23.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			KfEdt3OL4ka/3P3ovsR9ZSf7oozF/eWH+sygvNOt+PI=
+			</data>
+		</dict>
+		<key>sticker_20000000_3.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			8n8b3lB5kQTrPSAjU/2vj1xZ3S2XAmXnmycbGAxO2ls=
+			</data>
+		</dict>
+		<key>sticker_20000000_4.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			oiQ09j74UuS00gIILsgfLuNH6Z2ifWylwVwMogfVDHk=
+			</data>
+		</dict>
+		<key>sticker_20000000_5.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			8hTDAqn8irPRR1S3nzm/TBfuvqzD8tJmnKIyThTjWf4=
+			</data>
+		</dict>
+		<key>sticker_20000000_6.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			feTblaXWD1OC3FFx0ORzm1VzUHTLcnggjnvmngxCg5o=
+			</data>
+		</dict>
+		<key>sticker_20000000_7.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			vsAQ6vuhm1B+LIqGpkeyjdoaZJ7NN7sfmG/TIxd+v/E=
+			</data>
+		</dict>
+		<key>sticker_20000000_8.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			BEd50aI0VaWmmAZZpXl/dweQH8EUq5xxo9fT/+LkfQE=
+			</data>
+		</dict>
+		<key>sticker_20000000_9.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			d9xSHyMCG2RYRAHvUjOhYlbLzenrT/V1WHXz0WWaCWE=
+			</data>
+		</dict>
+		<key>sticker_30000000_0.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			tdm+/msoJ7Cqiq43TaIm7oHWeb2f6FdOuKU+y0plMIg=
+			</data>
+		</dict>
+		<key>sticker_30000000_1.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			X/+YHlAz+E6ZdxHO0CcaxTTtpXsRAq+NWcWnlxX6I34=
+			</data>
+		</dict>
+		<key>sticker_30000000_10.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			4nKToJqbouxDLc6p1HqWrCjzwTL5JoK7c3kNymh9kMM=
+			</data>
+		</dict>
+		<key>sticker_30000000_11.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			rkmgUtrjqg/hFJ2Iox5W5/A1eFLko3ssgDVgbNyGDUM=
+			</data>
+		</dict>
+		<key>sticker_30000000_12.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			2nC5H+KNi2KzwOtIDdrF2NGZBmvBChgF1OM80ggMLno=
+			</data>
+		</dict>
+		<key>sticker_30000000_13.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			n/thiuGaNk1sHm5/TvGOToTQ079LqH4ypuqzXAjpO3g=
+			</data>
+		</dict>
+		<key>sticker_30000000_14.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			0M7vN6i3bdlCzRzrcs2TtIaOANIRNSF++5rn8vkTVWo=
+			</data>
+		</dict>
+		<key>sticker_30000000_15.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			bDFR3IVMnWii0+ylsb4IcOd8pe6sgkpvv6AyKZWyrZI=
+			</data>
+		</dict>
+		<key>sticker_30000000_16.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			Vz8/oDborjSe/aCSFSR3rDW63W8/wqR2yfPautfTCTg=
+			</data>
+		</dict>
+		<key>sticker_30000000_17.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			cQmTr/lYux3DNjPBOL4VTX4ewhJGfpG7vN4fAknEFww=
+			</data>
+		</dict>
+		<key>sticker_30000000_18.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			jFyJuXliKDny6VdDow8ZpSbyGHhCWOobOTj21qDzTY8=
+			</data>
+		</dict>
+		<key>sticker_30000000_19.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			Wu5BzmGP5x1m0scYyMucgm87FBpDklJlUFsWWlC0ZlA=
+			</data>
+		</dict>
+		<key>sticker_30000000_2.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			jq5Qa7XWoN+Egd/8cQV0tKuh0DkhO1iMaGqol2PlI8A=
+			</data>
+		</dict>
+		<key>sticker_30000000_20.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			atsa8rvxiPITxmDk7MGmvSNUZ2ZYQ4fqyjnoTb08Hrw=
+			</data>
+		</dict>
+		<key>sticker_30000000_21.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			g0fqmVe1ez5dpZHl3D7oczGPCK0Ac1//2PjsLoNo4O4=
+			</data>
+		</dict>
+		<key>sticker_30000000_22.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			j5t7mQe5+uq1by/PhnreZrOOeCFpxkyqmFPxnnQ8ALo=
+			</data>
+		</dict>
+		<key>sticker_30000000_23.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			W+x/m52R+VipvvXnT6K4OQbPLZ8OIPtgXUNBnj9ZhvE=
+			</data>
+		</dict>
+		<key>sticker_30000000_24.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			Hv+4InI6tIMTnxfaw4PZ0ll22MD590mJ13WGINp1uQo=
+			</data>
+		</dict>
+		<key>sticker_30000000_25.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			ise9tK0jwH+lDKwoxXtWxITPoYHIg5Xw9Yyrxa6Zktg=
+			</data>
+		</dict>
+		<key>sticker_30000000_26.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			fd+g18l1rpKVFCe8XtvIA5n2dtkmGOPB4u4qIdvo7WQ=
+			</data>
+		</dict>
+		<key>sticker_30000000_27.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			4QIWkpG4KXwM3ztibL2u8+tliFp2x9XyCYls/eKT0SM=
+			</data>
+		</dict>
+		<key>sticker_30000000_28.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			cSoRSyxjVqkS7E8bptW2fVuj3/vcNGv/UnT35Ozy498=
+			</data>
+		</dict>
+		<key>sticker_30000000_29.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			ExqYFYcSKdkE/gD88fiICUY/R/DglZlRn1ytuarw4/U=
+			</data>
+		</dict>
+		<key>sticker_30000000_3.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			moqaPlCyUwKcIfrV4SZdyVxFezZK951tFO59nQrl7BQ=
+			</data>
+		</dict>
+		<key>sticker_30000000_30.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			Qh2wicQPvmi9dF06Zu5/4Ut2ay9FIfsyRTG0yARmN+Q=
+			</data>
+		</dict>
+		<key>sticker_30000000_31.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			5BULnd6MkxIMMXJI1ybqMT2u6ig6/E2n1xdgErSj5W0=
+			</data>
+		</dict>
+		<key>sticker_30000000_32.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			YbjP66mQz4MFHC/0zSqmOC1LFJ2rTsOtiQsvi2TAYs8=
+			</data>
+		</dict>
+		<key>sticker_30000000_33.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			O3dHQq03eC7qWCc/pN5j4j9enKP8ILzcNTMZWju7t3E=
+			</data>
+		</dict>
+		<key>sticker_30000000_34.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			LXmggfKXzWlB5RSr0f/MC0EjdIblTUesABp4r9+5TBM=
+			</data>
+		</dict>
+		<key>sticker_30000000_35.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			dSWwp24Z5UGOsBk9hQIKpNey1EHSjGFJ89Bl3Lkb8ns=
+			</data>
+		</dict>
+		<key>sticker_30000000_36.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			f7e93LW2S5pF7CZlkJg9eMySneLKA+7mIRPLIK49vtU=
+			</data>
+		</dict>
+		<key>sticker_30000000_37.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			eb5/aMB0esjI1WXSpWvAqES9arMtfglfO1g0Q+aIAIM=
+			</data>
+		</dict>
+		<key>sticker_30000000_38.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			t7670ThKP/Q01tW6wv/YC/gmLfYw7Btfj6HMvcZ8gR0=
+			</data>
+		</dict>
+		<key>sticker_30000000_39.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			m67iTzvgL5J1D7FT3rNZQHT57OhVoqudoGnHWDEEwtM=
+			</data>
+		</dict>
+		<key>sticker_30000000_4.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			2rXsW/eX4h5RwH7PCBjxmUt+0y3BijJK8Mwn/KOKLM4=
+			</data>
+		</dict>
+		<key>sticker_30000000_5.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			jlS0exDx8N7AbuWBB1EiZL8XWTY2C0AoOpPPiFDIirU=
+			</data>
+		</dict>
+		<key>sticker_30000000_6.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			P50Ny72Epf1CaWsLPA9uPGF7XI3KwXPlXhqyWk1Y22I=
+			</data>
+		</dict>
+		<key>sticker_30000000_7.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			PwZngNiiweECuIbNBFC2CMxfTvNFcGiC71glj3PacIo=
+			</data>
+		</dict>
+		<key>sticker_30000000_8.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			IEaapEx/8JYgulbOkdAJKVpM6I+ZGV0xchmbizAaH4Y=
+			</data>
+		</dict>
+		<key>sticker_30000000_9.png</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			QX/8HPhnwlFjRWblLtbKrx7OUVm0ICOGq53Oj9DDyZk=
+			</data>
+		</dict>
+	</dict>
+	<key>rules</key>
+	<dict>
+		<key>^.*</key>
+		<true/>
+		<key>^.*\.lproj/</key>
+		<dict>
+			<key>optional</key>
+			<true/>
+			<key>weight</key>
+			<real>1000</real>
+		</dict>
+		<key>^.*\.lproj/locversion.plist$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>1100</real>
+		</dict>
+		<key>^Base\.lproj/</key>
+		<dict>
+			<key>weight</key>
+			<real>1010</real>
+		</dict>
+		<key>^version.plist$</key>
+		<true/>
+	</dict>
+	<key>rules2</key>
+	<dict>
+		<key>.*\.dSYM($|/)</key>
+		<dict>
+			<key>weight</key>
+			<real>11</real>
+		</dict>
+		<key>^(.*/)?\.DS_Store$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>2000</real>
+		</dict>
+		<key>^.*</key>
+		<true/>
+		<key>^.*\.lproj/</key>
+		<dict>
+			<key>optional</key>
+			<true/>
+			<key>weight</key>
+			<real>1000</real>
+		</dict>
+		<key>^.*\.lproj/locversion.plist$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>1100</real>
+		</dict>
+		<key>^Base\.lproj/</key>
+		<dict>
+			<key>weight</key>
+			<real>1010</real>
+		</dict>
+		<key>^Info\.plist$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>20</real>
+		</dict>
+		<key>^PkgInfo$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>20</real>
+		</dict>
+		<key>^embedded\.provisionprofile$</key>
+		<dict>
+			<key>weight</key>
+			<real>20</real>
+		</dict>
+		<key>^version\.plist$</key>
+		<dict>
+			<key>weight</key>
+			<real>20</real>
+		</dict>
+	</dict>
+</dict>
+</plist>

BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_0.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_1.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_10.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_11.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_2.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_3.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_4.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_5.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_6.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_7.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_8.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_10000000_9.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_0.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_1.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_10.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_11.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_12.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_13.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_14.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_15.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_16.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_17.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_18.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_19.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_2.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_20.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_21.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_22.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_23.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_3.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_4.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_5.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_6.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_7.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_8.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_20000000_9.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_0.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_1.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_10.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_11.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_12.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_13.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_14.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_15.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_16.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_17.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_18.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_19.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_2.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_20.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_21.png


BIN
appbuilder-ios/NexilisLite/archives/ios_devices.xcarchive/Products/Library/Bundles/NexilisLiteResources.bundle/sticker_30000000_22.png


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно